8723BU: Update 8723BU wifi driver to version v4.3.16_14189.20150519_BTCOEX2015119...
authorXu Xuehui <xxh@rock-chips.com>
Mon, 19 Oct 2015 03:08:20 +0000 (11:08 +0800)
committerGerrit Code Review <gerrit@rock-chips.com>
Tue, 20 Oct 2015 03:09:25 +0000 (11:09 +0800)
This driver is released by RealTek, main update as shown below:

1.  Support Android 5.0,5.1 and older
2.  Support Linux kernel 3.19.3 and older
3.  Improve Wi-Fi/BT Coexistence stability and performance
4.  Fix the problem of unexpected scan timeout
5.  Add TDLS function
6.  Fix STA mode disconnect problem caused by not checking TA of DEAUTH and DISASSOC frame
7.  Fix the failed association issue with specific AP which supports only 11n MCS data rate

Change-Id: I103d22a06eecc456c9777f17afdd1049efe9ff6a
Signed-off-by: Xu Xuehui <xxh@rock-chips.com>
234 files changed:
drivers/net/wireless/rockchip_wlan/rtl8723bu/Makefile
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/efuse/rtw_efuse.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_ap.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_beamforming.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_bt_mp.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_btcoex.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_cmd.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_debug.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_ieee80211.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_ioctl_rtl.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_ioctl_set.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_mem.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_mlme.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_mlme_ext.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_mp.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_mp_ioctl.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_odm.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_p2p.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_pwrctrl.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_recv.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_security.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_sreset.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_sta_mgt.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_tdls.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_vht.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_wlan_util.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/core/rtw_xmit.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8188c2Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8192d2Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8192e1Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8192e1Ant.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8192e2Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8192e2Ant.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8723a1Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8723a2Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8723b1Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8723b1Ant.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8723b2Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8723b2Ant.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8812a1Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8812a1Ant.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8812a2Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8812a2Ant.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8821a1Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8821a2Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8821a2Ant.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtc8821aCsr2Ant.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/HalBtcOutSrc.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC-BTCoexist/Mp_Precomp.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/HalHWImg.h [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/HalPhyRf.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/HalPhyRf.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/PhyDM_Adaptivity.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/PhyDM_Adaptivity.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/RtChnlPlan.c [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/RtChnlPlan.h [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_AntDiv.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_AntDiv.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_CfoTracking.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_CfoTracking.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DIG.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DIG.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicBBPowerSaving.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicBBPowerSaving.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicTxPower.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicTxPower.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_EdcaTurboCheck.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_EdcaTurboCheck.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_HWConfig.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_HWConfig.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_NoiseMonitor.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_NoiseMonitor.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_PathDiv.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_PathDiv.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RaInfo.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RaInfo.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RegDefine11AC.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RegDefine11N.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_debug.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_debug.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_interface.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_interface.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_precomp.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_reg.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_types.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_ACS.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_AntDect.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_AntDect.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_AntDiv.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_AntDiv.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_CfoTracking.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_CfoTracking.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_DIG.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_DIG.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_DynamicBBPowerSaving.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_DynamicTxPower.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_DynamicTxPower.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_EdcaTurboCheck.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_EdcaTurboCheck.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_HWConfig.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_HWConfig.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_PathDiv.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_PathDiv.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_PowerTracking.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_PowerTracking.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_RXHP.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_RaInfo.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_RaInfo.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_RegDefine11AC.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_RegDefine11N.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_beamforming.c [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_beamforming.h [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_debug.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_debug.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_interface.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_interface.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_pre_define.h [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_precomp.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_types.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/HalHWImg8723B_BB.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/HalHWImg8723B_BB.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/HalHWImg8723B_FW.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/HalHWImg8723B_MAC.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/HalHWImg8723B_MAC.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/HalHWImg8723B_RF.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/HalHWImg8723B_RF.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/HalPhyRf_8723B.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/HalPhyRf_8723B.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RTL8723B.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RTL8723B.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RegConfig8723B.c [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RegConfig8723B.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/phydm_RTL8723B.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/efuse_mask.h [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_PCIE.c [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_PCIE.h [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_USB.c [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_USB.h [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/hal_btcoex.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/hal_com.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/hal_com_phycfg.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/hal_dm.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/hal_hci/hal_usb.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/hal_intf.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/led/hal_usb_led.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/rtl8723b/rtl8723b_cmd.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/rtl8723b/rtl8723b_dm.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/rtl8723b/rtl8723b_hal_init.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/rtl8723b/rtl8723b_mp.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/rtl8723b/rtl8723b_phycfg.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/rtl8723b/rtl8723b_rxdesc.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/rtl8723b/rtl8723b_sreset.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/rtl8723b/usb/rtl8723bu_recv.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/rtl8723b/usb/rtl8723bu_xmit.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/rtl8723b/usb/usb_halinit.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/rtl8723b/usb/usb_ops.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/Hal8192CPhyReg.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/Hal8723BPhyReg.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/HalVerDef.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/autoconf.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/basic_types.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/drv_conf.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/drv_types.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_btcoex.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_com.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_com_h2c.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_com_led.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_com_reg.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_data.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_gspi.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_intf.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_pg.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_sdio.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/ieee80211.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/ioctl_cfg80211.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_intf.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_service.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_service_bsd.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_service_ce.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_service_linux.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_service_xp.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/recv_osdep.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtl8192c_recv.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtl8192c_rf.h [deleted file]
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtl8723b_cmd.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtl8723b_hal.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtl8723b_recv.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtl8723b_rf.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtl8723b_spec.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_android.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_br_ext.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_btcoex.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_cmd.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_debug.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_eeprom.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_efuse.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_ioctl_set.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_mlme.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_mlme_ext.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_mp.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_odm.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_p2p.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_pwrctrl.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_recv.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_rf.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_security.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_tdls.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_version.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_vht.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtw_xmit.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/sta_info.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/usb_hal.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/usb_ops.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/wifi.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/include/wlan_bssdef.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/custom_gpio_linux.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/ioctl_cfg80211.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/ioctl_cfg80211.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/ioctl_linux.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/os_intfs.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/recv_linux.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/rtw_android.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/rtw_cfgvendor.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/rtw_proc.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/usb_intf.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/usb_ops_linux.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/linux/wifi_version.h
drivers/net/wireless/rockchip_wlan/rtl8723bu/os_dep/osdep_service.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/platform/platform_ARM_SUNnI_sdio.c
drivers/net/wireless/rockchip_wlan/rtl8723bu/platform/platform_arm_act_sdio.c [new file with mode: 0755]

index fd344535a3b55e981aabe40861ab5146560266b7..2aa878d8ec793fbe2e157af245eb26a59017ed5e 100755 (executable)
@@ -24,14 +24,12 @@ CONFIG_AUTOCFG_CP = n
 
 ########################## WIFI IC ############################
 CONFIG_MULTIDRV = n
 
 ########################## WIFI IC ############################
 CONFIG_MULTIDRV = n
-CONFIG_RTL8192C = n
-CONFIG_RTL8192D = n
-CONFIG_RTL8723A = n
 CONFIG_RTL8188E = n
 CONFIG_RTL8812A = n
 CONFIG_RTL8821A = n
 CONFIG_RTL8192E = n
 CONFIG_RTL8723B = y
 CONFIG_RTL8188E = n
 CONFIG_RTL8812A = n
 CONFIG_RTL8821A = n
 CONFIG_RTL8192E = n
 CONFIG_RTL8723B = y
+CONFIG_RTL8814A = n
 ######################### Interface ###########################
 CONFIG_USB_HCI = y
 CONFIG_PCI_HCI = n
 ######################### Interface ###########################
 CONFIG_USB_HCI = y
 CONFIG_PCI_HCI = n
@@ -44,7 +42,6 @@ CONFIG_USB_AUTOSUSPEND = n
 CONFIG_HW_PWRP_DETECTION = n
 CONFIG_WIFI_TEST = n
 CONFIG_BT_COEXIST = y
 CONFIG_HW_PWRP_DETECTION = n
 CONFIG_WIFI_TEST = n
 CONFIG_BT_COEXIST = y
-CONFIG_RTL8192CU_REDEFINE_1X1 = n
 CONFIG_INTEL_WIDI = n
 CONFIG_WAPI_SUPPORT = n
 CONFIG_EFUSE_CONFIG_FILE = n
 CONFIG_INTEL_WIDI = n
 CONFIG_WAPI_SUPPORT = n
 CONFIG_EFUSE_CONFIG_FILE = n
@@ -60,6 +57,7 @@ CONFIG_80211W = n
 CONFIG_REDUCE_TX_CPU_LOADING = n
 CONFIG_BR_EXT = y
 CONFIG_ANTENNA_DIVERSITY = n
 CONFIG_REDUCE_TX_CPU_LOADING = n
 CONFIG_BR_EXT = y
 CONFIG_ANTENNA_DIVERSITY = n
+CONFIG_TDLS = n
 ######################## Wake On Lan ##########################
 CONFIG_WOWLAN = n
 CONFIG_GPIO_WAKEUP = n
 ######################## Wake On Lan ##########################
 CONFIG_WOWLAN = n
 CONFIG_GPIO_WAKEUP = n
@@ -105,9 +103,11 @@ CONFIG_PLATFORM_SZEBOOK = n
 CONFIG_PLATFORM_ARM_SUNxI = n
 CONFIG_PLATFORM_ARM_SUN6I = n
 CONFIG_PLATFORM_ARM_SUN7I = n
 CONFIG_PLATFORM_ARM_SUNxI = n
 CONFIG_PLATFORM_ARM_SUN6I = n
 CONFIG_PLATFORM_ARM_SUN7I = n
-CONFIG_PLATFORM_ARM_SUN8I = n
+CONFIG_PLATFORM_ARM_SUN8I_W3P1 = n
+CONFIG_PLATFORM_ARM_SUN8I_W5P1 = n
 CONFIG_PLATFORM_ACTIONS_ATM702X = n
 CONFIG_PLATFORM_ACTIONS_ATV5201 = n
 CONFIG_PLATFORM_ACTIONS_ATM702X = n
 CONFIG_PLATFORM_ACTIONS_ATV5201 = n
+CONFIG_PLATFORM_ACTIONS_ATM705X = n
 CONFIG_PLATFORM_ARM_RTD299X = n
 CONFIG_PLATFORM_ARM_SPREADTRUM_6820 = n
 CONFIG_PLATFORM_ARM_SPREADTRUM_8810 = n
 CONFIG_PLATFORM_ARM_RTD299X = n
 CONFIG_PLATFORM_ARM_SPREADTRUM_6820 = n
 CONFIG_PLATFORM_ARM_SPREADTRUM_8810 = n
@@ -115,6 +115,8 @@ CONFIG_PLATFORM_ARM_WMT = n
 CONFIG_PLATFORM_TI_DM365 = n
 CONFIG_PLATFORM_MOZART = n
 CONFIG_PLATFORM_RTK119X = n
 CONFIG_PLATFORM_TI_DM365 = n
 CONFIG_PLATFORM_MOZART = n
 CONFIG_PLATFORM_RTK119X = n
+CONFIG_PLATFORM_NOVATEK_NT72668 = n
+CONFIG_PLATFORM_HISILICON = n
 ###############################################################
 
 CONFIG_DRVEXT_MODULE = n
 ###############################################################
 
 CONFIG_DRVEXT_MODULE = n
@@ -175,6 +177,7 @@ _HAL_INTFS_FILES := hal/hal_intf.o \
 
 _OUTSRC_FILES := hal/OUTSRC/phydm_debug.o      \
                hal/OUTSRC/phydm_AntDiv.o\
 
 _OUTSRC_FILES := hal/OUTSRC/phydm_debug.o      \
                hal/OUTSRC/phydm_AntDiv.o\
+               hal/OUTSRC/phydm_AntDect.o\
                hal/OUTSRC/phydm_interface.o\
                hal/OUTSRC/phydm_HWConfig.o\
                hal/OUTSRC/phydm.o\
                hal/OUTSRC/phydm_interface.o\
                hal/OUTSRC/phydm_HWConfig.o\
                hal/OUTSRC/phydm.o\
@@ -196,12 +199,8 @@ _PLATFORM_FILES := platform/platform_ops.o
 
 ifeq ($(CONFIG_BT_COEXIST), y)
 EXTRA_CFLAGS += -I$(src)/hal/OUTSRC-BTCoexist
 
 ifeq ($(CONFIG_BT_COEXIST), y)
 EXTRA_CFLAGS += -I$(src)/hal/OUTSRC-BTCoexist
-_OUTSRC_FILES += hal/OUTSRC-BTCoexist/HalBtc8188c2Ant.o \
-                               hal/OUTSRC-BTCoexist/HalBtc8192d2Ant.o \
-                               hal/OUTSRC-BTCoexist/HalBtc8192e1Ant.o \
+_OUTSRC_FILES += hal/OUTSRC-BTCoexist/HalBtc8192e1Ant.o \
                                hal/OUTSRC-BTCoexist/HalBtc8192e2Ant.o \
                                hal/OUTSRC-BTCoexist/HalBtc8192e2Ant.o \
-                               hal/OUTSRC-BTCoexist/HalBtc8723a1Ant.o \
-                               hal/OUTSRC-BTCoexist/HalBtc8723a2Ant.o \
                                hal/OUTSRC-BTCoexist/HalBtc8723b1Ant.o \
                                hal/OUTSRC-BTCoexist/HalBtc8723b2Ant.o \
                                hal/OUTSRC-BTCoexist/HalBtc8812a1Ant.o \
                                hal/OUTSRC-BTCoexist/HalBtc8723b1Ant.o \
                                hal/OUTSRC-BTCoexist/HalBtc8723b2Ant.o \
                                hal/OUTSRC-BTCoexist/HalBtc8812a1Ant.o \
@@ -211,181 +210,6 @@ _OUTSRC_FILES += hal/OUTSRC-BTCoexist/HalBtc8188c2Ant.o \
                                hal/OUTSRC-BTCoexist/HalBtc8821aCsr2Ant.o
 endif
 
                                hal/OUTSRC-BTCoexist/HalBtc8821aCsr2Ant.o
 endif
 
-########### HAL_RTL8192C #################################
-
-ifeq ($(CONFIG_RTL8192C), y)
-RTL871X = rtl8192c
-ifeq ($(CONFIG_USB_HCI), y)
-MODULE_NAME = 8192cu
-endif
-ifeq ($(CONFIG_PCI_HCI), y)
-MODULE_NAME = 8192ce
-endif
-EXTRA_CFLAGS += -DCONFIG_RTL8192C
-
-_HAL_INTFS_FILES += \
-       hal/$(RTL871X)/$(RTL871X)_sreset.o \
-       hal/$(RTL871X)/$(RTL871X)_xmit.o
-
-_HAL_INTFS_FILES +=    hal/$(RTL871X)/$(RTL871X)_hal_init.o \
-                       hal/$(RTL871X)/$(RTL871X)_phycfg.o \
-                       hal/$(RTL871X)/$(RTL871X)_rf6052.o \
-                       hal/$(RTL871X)/$(RTL871X)_dm.o \
-                       hal/$(RTL871X)/$(RTL871X)_rxdesc.o \
-                       hal/$(RTL871X)/$(RTL871X)_cmd.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_halinit.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_led.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_xmit.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_recv.o
-
-_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops_linux.o
-
-
-ifeq ($(CONFIG_MP_INCLUDED), y)
-_HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
-endif
-
-_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/phydm_RTL8192C.o\
-                                                               hal/OUTSRC/$(RTL871X)/HalDMOutSrc8192C_CE.o
-
-ifeq ($(CONFIG_USB_HCI), y)
-_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/Hal8192CUFWImg_CE.o     \
-                                                               hal/OUTSRC/$(RTL871X)/Hal8192CUPHYImg_CE.o      \
-                                                               hal/OUTSRC/$(RTL871X)/Hal8192CUMACImg_CE.o
-endif
-
-ifeq ($(CONFIG_PCI_HCI), y)
-_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/Hal8192CEFWImg_CE.o     \
-                                                               hal/OUTSRC/$(RTL871X)/Hal8192CEPHYImg_CE.o      \
-                                                               hal/OUTSRC/$(RTL871X)/Hal8192CEMACImg_CE.o
-endif
-
-endif
-
-########### HAL_RTL8192D #################################
-ifeq ($(CONFIG_RTL8192D), y)
-RTL871X = rtl8192d
-ifeq ($(CONFIG_USB_HCI), y)
-MODULE_NAME = 8192du
-endif
-ifeq ($(CONFIG_PCI_HCI), y)
-MODULE_NAME = 8192de
-endif
-EXTRA_CFLAGS += -DCONFIG_RTL8192D
-
-_HAL_INTFS_FILES += \
-       hal/$(RTL871X)/$(RTL871X)_xmit.o
-
-_HAL_INTFS_FILES +=    hal/$(RTL871X)/$(RTL871X)_hal_init.o \
-                       hal/$(RTL871X)/$(RTL871X)_phycfg.o \
-                       hal/$(RTL871X)/$(RTL871X)_rf6052.o \
-                       hal/$(RTL871X)/$(RTL871X)_dm.o \
-                       hal/$(RTL871X)/$(RTL871X)_rxdesc.o \
-                       hal/$(RTL871X)/$(RTL871X)_cmd.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_halinit.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_led.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_xmit.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_recv.o
-
-_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops_linux.o
-
-ifeq ($(CONFIG_MP_INCLUDED), y)
-_HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
-endif
-
-_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/phydm_RTL8192D.o\
-                                                               hal/OUTSRC/$(RTL871X)/HalDMOutSrc8192D_CE.o
-
-
-ifeq ($(CONFIG_USB_HCI), y)
-_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/Hal8192DUFWImg_CE.o \
-                                                               hal/OUTSRC/$(RTL871X)/Hal8192DUPHYImg_CE.o \
-                                                               hal/OUTSRC/$(RTL871X)/Hal8192DUMACImg_CE.o
-endif
-
-ifeq ($(CONFIG_PCI_HCI), y)
-_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/Hal8192DEFWImg_CE.o \
-                                                               hal/OUTSRC/$(RTL871X)/Hal8192DEPHYImg_CE.o \
-                                                               hal/OUTSRC/$(RTL871X)/Hal8192DEMACImg_CE.o
-endif
-
-endif
-
-########### HAL_RTL8723A #################################
-ifeq ($(CONFIG_RTL8723A), y)
-
-RTL871X = rtl8723a
-ifeq ($(CONFIG_GSPI_HCI), y)
-MODULE_NAME = 8723as
-endif
-ifeq ($(CONFIG_SDIO_HCI), y)
-MODULE_NAME = 8723as
-endif
-ifeq ($(CONFIG_USB_HCI), y)
-MODULE_NAME = 8723au
-endif
-ifeq ($(CONFIG_PCI_HCI), y)
-MODULE_NAME = 8723ae
-endif
-EXTRA_CFLAGS += -DCONFIG_RTL8723A
-
-_HAL_INTFS_FILES += hal/HalPwrSeqCmd.o \
-                               hal/$(RTL871X)/Hal8723PwrSeq.o\
-                               hal/$(RTL871X)/$(RTL871X)_xmit.o \
-                               hal/$(RTL871X)/$(RTL871X)_sreset.o
-
-_HAL_INTFS_FILES +=    hal/$(RTL871X)/$(RTL871X)_hal_init.o \
-                       hal/$(RTL871X)/$(RTL871X)_phycfg.o \
-                       hal/$(RTL871X)/$(RTL871X)_rf6052.o \
-                       hal/$(RTL871X)/$(RTL871X)_dm.o \
-                       hal/$(RTL871X)/$(RTL871X)_rxdesc.o \
-                       hal/$(RTL871X)/$(RTL871X)_cmd.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_halinit.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_led.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_xmit.o \
-                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_recv.o
-
-ifeq ($(CONFIG_SDIO_HCI), y)
-_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops.o
-else
-ifeq ($(CONFIG_GSPI_HCI), y)
-_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops.o
-else
-_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops_linux.o
-endif
-endif
-
-ifeq ($(CONFIG_MP_INCLUDED), y)
-_HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
-endif
-
-ifeq ($(CONFIG_GSPI_HCI), y)
-_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/Hal8723SHWImg_CE.o
-endif
-
-ifeq ($(CONFIG_SDIO_HCI), y)
-_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/Hal8723SHWImg_CE.o
-endif
-
-ifeq ($(CONFIG_USB_HCI), y)
-_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/Hal8723UHWImg_CE.o
-endif
-
-ifeq ($(CONFIG_PCI_HCI), y)
-_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/Hal8723EHWImg_CE.o
-endif
-
-#hal/OUTSRC/$(RTL871X)/HalHWImg8723A_FW.o
-_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8723A_BB.o\
-                                                               hal/OUTSRC/$(RTL871X)/HalHWImg8723A_MAC.o\
-                                                               hal/OUTSRC/$(RTL871X)/HalHWImg8723A_RF.o\
-                                                               hal/OUTSRC/$(RTL871X)/phydm_RegConfig8723A.o
-
-_OUTSRC_FILES += hal/OUTSRC/rtl8192c/HalDMOutSrc8192C_CE.o
-
-
-endif
-
 
 ########### HAL_RTL8188E #################################
 ifeq ($(CONFIG_RTL8188E), y)
 
 ########### HAL_RTL8188E #################################
 ifeq ($(CONFIG_RTL8188E), y)
@@ -438,6 +262,16 @@ ifeq ($(CONFIG_MP_INCLUDED), y)
 _HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
 endif
 
 _HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
 endif
 
+ifeq ($(CONFIG_USB_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8188E_USB.o
+endif
+ifeq ($(CONFIG_PCI_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8188E_PCIE.o
+endif
+ifeq ($(CONFIG_SDIO_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8188E_SDIO.o
+endif
+
 #hal/OUTSRC/$(RTL871X)/Hal8188EFWImg_CE.o
 _OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8188E_MAC.o\
                hal/OUTSRC/$(RTL871X)/HalHWImg8188E_BB.o\
 #hal/OUTSRC/$(RTL871X)/Hal8188EFWImg_CE.o
 _OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8188E_MAC.o\
                hal/OUTSRC/$(RTL871X)/HalHWImg8188E_BB.o\
@@ -496,6 +330,13 @@ ifeq ($(CONFIG_MP_INCLUDED), y)
 _HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
 endif
 
 _HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
 endif
 
+ifeq ($(CONFIG_USB_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8192E_USB.o
+endif
+ifeq ($(CONFIG_PCI_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8192E_PCIE.o
+endif
+
 #hal/OUTSRC/$(RTL871X)/HalHWImg8188E_FW.o
 _OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8192E_MAC.o\
                hal/OUTSRC/$(RTL871X)/HalHWImg8192E_BB.o\
 #hal/OUTSRC/$(RTL871X)/HalHWImg8188E_FW.o
 _OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8192E_MAC.o\
                hal/OUTSRC/$(RTL871X)/HalHWImg8192E_BB.o\
@@ -553,6 +394,23 @@ ifeq ($(CONFIG_MP_INCLUDED), y)
 _HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
 endif
 
 _HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
 endif
 
+ifeq ($(CONFIG_RTL8812A), y)
+ifeq ($(CONFIG_USB_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8812A_USB.o
+endif
+ifeq ($(CONFIG_PCI_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8812A_PCIE.o
+endif
+endif
+ifeq ($(CONFIG_RTL8821A), y)
+ifeq ($(CONFIG_USB_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8821A_USB.o
+endif
+ifeq ($(CONFIG_PCI_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8821A_PCIE.o
+endif
+endif
+
 ifeq ($(CONFIG_RTL8812A), y)
 EXTRA_CFLAGS += -DCONFIG_RTL8812A
 _OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8812A_FW.o\
 ifeq ($(CONFIG_RTL8812A), y)
 EXTRA_CFLAGS += -DCONFIG_RTL8812A
 _OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8812A_FW.o\
@@ -587,10 +445,10 @@ _OUTSRC_FILES += hal/OUTSRC/rtl8821a/HalHWImg8821A_FW.o\
                hal/OUTSRC/rtl8821a/HalHWImg8821A_BB.o\
                hal/OUTSRC/rtl8821a/HalHWImg8821A_RF.o\
                hal/OUTSRC/rtl8812a/HalPhyRf_8812A.o\
                hal/OUTSRC/rtl8821a/HalHWImg8821A_BB.o\
                hal/OUTSRC/rtl8821a/HalHWImg8821A_RF.o\
                hal/OUTSRC/rtl8812a/HalPhyRf_8812A.o\
-               hal/OUTSRC/rtl8821a/HalPhyRf_8821A.o\
+               hal/OUTSRC/rtl8821a/HalPhyRf_8821A_CE.o\
                hal/OUTSRC/rtl8821a/phydm_RegConfig8821A.o\
                hal/OUTSRC/rtl8821a/phydm_RTL8821A.o\
                hal/OUTSRC/rtl8821a/phydm_RegConfig8821A.o\
                hal/OUTSRC/rtl8821a/phydm_RTL8821A.o\
-               hal/OUTSRC/rtl8821a/PhyDM_IQK_8821A.o
+               hal/OUTSRC/rtl8821a/PhyDM_IQK_8821A_CE.o
 endif
 
 
 endif
 
 
@@ -640,6 +498,13 @@ ifeq ($(CONFIG_MP_INCLUDED), y)
 _HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
 endif
 
 _HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
 endif
 
+ifeq ($(CONFIG_USB_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8723B_USB.o
+endif
+ifeq ($(CONFIG_PCI_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8723B_PCIE.o
+endif
+
 _OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8723B_BB.o\
                                                                hal/OUTSRC/$(RTL871X)/HalHWImg8723B_MAC.o\
                                                                hal/OUTSRC/$(RTL871X)/HalHWImg8723B_RF.o\
 _OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8723B_BB.o\
                                                                hal/OUTSRC/$(RTL871X)/HalHWImg8723B_MAC.o\
                                                                hal/OUTSRC/$(RTL871X)/HalHWImg8723B_RF.o\
@@ -651,6 +516,73 @@ _OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8723B_BB.o\
 
 endif
 
 
 endif
 
+########### HAL_RTL8814A #################################
+ifeq ($(CONFIG_RTL8814A), y)
+
+RTL871X = rtl8814a
+ifeq ($(CONFIG_USB_HCI), y)
+MODULE_NAME = 8814au
+endif
+ifeq ($(CONFIG_PCI_HCI), y)
+MODULE_NAME = 8814ae
+endif
+ifeq ($(CONFIG_SDIO_HCI), y)
+MODULE_NAME = 8814as
+endif
+
+EXTRA_CFLAGS += -DCONFIG_RTL8814A
+
+_HAL_INTFS_FILES +=  hal/HalPwrSeqCmd.o \
+                                       hal/$(RTL871X)/Hal8814PwrSeq.o \
+                                       hal/$(RTL871X)/$(RTL871X)_xmit.o\
+                                       hal/$(RTL871X)/$(RTL871X)_sreset.o
+
+_HAL_INTFS_FILES +=    hal/$(RTL871X)/$(RTL871X)_hal_init.o \
+                       hal/$(RTL871X)/$(RTL871X)_phycfg.o \
+                       hal/$(RTL871X)/$(RTL871X)_rf6052.o \
+                       hal/$(RTL871X)/$(RTL871X)_dm.o \
+                       hal/$(RTL871X)/$(RTL871X)_rxdesc.o \
+                       hal/$(RTL871X)/$(RTL871X)_cmd.o \
+
+
+_HAL_INTFS_FILES +=    \
+                       hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_halinit.o \
+                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_led.o \
+                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_xmit.o \
+                       hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_recv.o
+
+ifeq ($(CONFIG_SDIO_HCI), y)
+_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops.o
+else
+ifeq ($(CONFIG_GSPI_HCI), y)
+_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops.o
+else
+_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops_linux.o
+endif
+endif
+
+ifeq ($(CONFIG_MP_INCLUDED), y)
+_HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
+endif
+
+ifeq ($(CONFIG_USB_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8814A_USB.o
+endif
+ifeq ($(CONFIG_PCI_HCI), y)
+_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8814A_PCIE.o
+endif
+
+_OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8814A_BB.o\
+                                                               hal/OUTSRC/$(RTL871X)/HalHWImg8814A_MAC.o\
+                                                               hal/OUTSRC/$(RTL871X)/HalHWImg8814A_RF.o\
+                                                               hal/OUTSRC/$(RTL871X)/HalHWImg8814A_FW.o\
+                                                               hal/OUTSRC/$(RTL871X)/PhyDM_IQK_8814A.o\
+                                                               hal/OUTSRC/$(RTL871X)/phydm_RegConfig8814A.o\
+                                                               hal/OUTSRC/$(RTL871X)/HalPhyRf_8814A.o\
+                                                               hal/OUTSRC/$(RTL871X)/phydm_RTL8814A.o
+
+endif
+
 ########### AUTO_CFG  #################################
 
 ifeq ($(CONFIG_AUTOCFG_CP), y)
 ########### AUTO_CFG  #################################
 
 ifeq ($(CONFIG_AUTOCFG_CP), y)
@@ -697,10 +629,6 @@ ifeq ($(CONFIG_BT_COEXIST), y)
 EXTRA_CFLAGS += -DCONFIG_BT_COEXIST
 endif
 
 EXTRA_CFLAGS += -DCONFIG_BT_COEXIST
 endif
 
-ifeq ($(CONFIG_RTL8192CU_REDEFINE_1X1), y)
-EXTRA_CFLAGS += -DRTL8192C_RECONFIG_TO_1T1R
-endif
-
 ifeq ($(CONFIG_INTEL_WIDI), y)
 EXTRA_CFLAGS += -DCONFIG_INTEL_WIDI
 endif
 ifeq ($(CONFIG_INTEL_WIDI), y)
 EXTRA_CFLAGS += -DCONFIG_INTEL_WIDI
 endif
@@ -712,16 +640,29 @@ endif
 
 ifeq ($(CONFIG_EFUSE_CONFIG_FILE), y)
 EXTRA_CFLAGS += -DCONFIG_EFUSE_CONFIG_FILE
 
 ifeq ($(CONFIG_EFUSE_CONFIG_FILE), y)
 EXTRA_CFLAGS += -DCONFIG_EFUSE_CONFIG_FILE
-ifeq ($(MODULE_NAME), 8189es)
+
+#EFUSE_MAP_PATH
+USER_EFUSE_MAP_PATH ?=
+ifneq ($(USER_EFUSE_MAP_PATH),)
+EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"$(USER_EFUSE_MAP_PATH)\"
+else ifeq ($(MODULE_NAME), 8189es)
 EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/system/etc/wifi/wifi_efuse_8189e.map\"
 else ifeq ($(MODULE_NAME), 8723bs)
 EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/system/etc/wifi/wifi_efuse_8723bs.map\"
 else
 EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/system/etc/wifi/wifi_efuse_$(MODULE_NAME).map\"
 endif
 EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/system/etc/wifi/wifi_efuse_8189e.map\"
 else ifeq ($(MODULE_NAME), 8723bs)
 EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/system/etc/wifi/wifi_efuse_8723bs.map\"
 else
 EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/system/etc/wifi/wifi_efuse_$(MODULE_NAME).map\"
 endif
+
+#WIFIMAC_PATH
+USER_WIFIMAC_PATH ?=
+ifneq ($(USER_WIFIMAC_PATH),)
+EXTRA_CFLAGS += -DWIFIMAC_PATH=\"$(USER_WIFIMAC_PATH)\"
+else
 EXTRA_CFLAGS += -DWIFIMAC_PATH=\"/data/wifimac.txt\"
 endif
 
 EXTRA_CFLAGS += -DWIFIMAC_PATH=\"/data/wifimac.txt\"
 endif
 
+endif
+
 ifeq ($(CONFIG_EXT_CLK), y)
 EXTRA_CFLAGS += -DCONFIG_EXT_CLK
 endif
 ifeq ($(CONFIG_EXT_CLK), y)
 EXTRA_CFLAGS += -DCONFIG_EXT_CLK
 endif
@@ -813,12 +754,13 @@ ifeq ($(CONFIG_ANTENNA_DIVERSITY), y)
 EXTRA_CFLAGS += -DCONFIG_ANTENNA_DIVERSITY
 endif
 
 EXTRA_CFLAGS += -DCONFIG_ANTENNA_DIVERSITY
 endif
 
+ifeq ($(CONFIG_TDLS), y)
+EXTRA_CFLAGS += -DCONFIG_TDLS
+endif
 
 ifeq ($(CONFIG_PLATFORM_I386_PC), y)
 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
 
 ifeq ($(CONFIG_PLATFORM_I386_PC), y)
 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
 EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
 EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
 SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
 ARCH ?= $(SUBARCH)
 CROSS_COMPILE ?=
 SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
 ARCH ?= $(SUBARCH)
 CROSS_COMPILE ?=
@@ -840,6 +782,28 @@ KSRC := $(KERNEL_BUILD_PATH)
 MODULE_NAME :=wlan
 endif
 
 MODULE_NAME :=wlan
 endif
 
+ifeq ($(CONFIG_PLATFORM_ACTIONS_ATM705X), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+#EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
+# default setting for Android 4.1, 4.2, 4.3, 4.4
+EXTRA_CFLAGS += -DCONFIG_PLATFORM_ACTIONS_ATM705X
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
+
+# Enable this for Android 5.0
+EXTRA_CFLAGS += -DCONFIG_RADIO_WORK
+
+ifeq ($(CONFIG_SDIO_HCI), y)
+EXTRA_CFLAGS += -DCONFIG_PLATFORM_OPS
+_PLATFORM_FILES += platform/platform_arm_act_sdio.o
+endif
+
+ARCH := arm
+CROSS_COMPILE := /opt/arm-2011.09/bin/arm-none-linux-gnueabi-
+KSRC := /home/android_sdk/Action-semi/705a_android_L/android/kernel
+endif
+
 ifeq ($(CONFIG_PLATFORM_TI_AM3517), y)
 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_SHUTTLE
 CROSS_COMPILE := arm-eabi-
 ifeq ($(CONFIG_PLATFORM_TI_AM3517), y)
 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_SHUTTLE
 CROSS_COMPILE := arm-eabi-
@@ -1092,9 +1056,9 @@ endif
 ifeq ($(CONFIG_PLATFORM_ARM_RK2818), y)
 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_ROCKCHIPS
 ARCH := arm
 ifeq ($(CONFIG_PLATFORM_ARM_RK2818), y)
 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_ROCKCHIPS
 ARCH := arm
-#CROSS_COMPILE := /usr/src/release_fae_version/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
-#KSRC := /usr/src/release_fae_version/kernel25_A7_281x
-MODULE_NAME := 8723bu
+CROSS_COMPILE := /usr/src/release_fae_version/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
+KSRC := /usr/src/release_fae_version/kernel25_A7_281x
+MODULE_NAME := wlan
 endif
 
 ifeq ($(CONFIG_PLATFORM_ARM_RK3188), y)
 endif
 
 ifeq ($(CONFIG_PLATFORM_ARM_RK3188), y)
@@ -1104,10 +1068,12 @@ EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
 EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
 # default setting for Special function
 EXTRA_CFLAGS += -DCONFIG_P2P_IPS
 EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
 # default setting for Special function
 EXTRA_CFLAGS += -DCONFIG_P2P_IPS
+EXTRA_CFLAGS += -DCONFIG_RADIO_WORK
+EXTRA_CFLAGS += -DCONFIG_RESUME_IN_WORKQUEUE
 ARCH := arm
 ARCH := arm
-#CROSS_COMPILE := /home/android_sdk/Rockchip/Rk3188/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
-#KSRC := /home/android_sdk/Rockchip/Rk3188/kernel
-MODULE_NAME := 8723bu
+CROSS_COMPILE := /home/android_sdk/Rockchip/Rk3188/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
+KSRC := /home/android_sdk/Rockchip/Rk3188/kernel
+MODULE_NAME := wlan
 endif
 
 ifeq ($(CONFIG_PLATFORM_ARM_RK3066), y)
 endif
 
 ifeq ($(CONFIG_PLATFORM_ARM_RK3066), y)
@@ -1261,9 +1227,10 @@ CROSS_COMPILE := /home/android_sdk/Allwinner/a20/kitkat-a20_v4.4/lichee/out/andr
 KSRC := /home/android_sdk/Allwinner/a20/kitkat-a20_v4.4/lichee/linux-3.4
 endif
 
 KSRC := /home/android_sdk/Allwinner/a20/kitkat-a20_v4.4/lichee/linux-3.4
 endif
 
-ifeq ($(CONFIG_PLATFORM_ARM_SUN8I), y)
+ifeq ($(CONFIG_PLATFORM_ARM_SUN8I_W3P1), y)
 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
 EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN8I
 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
 EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN8I
+EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN8I_W3P1
 EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
 # default setting for Android 4.1, 4.2
 EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
 EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
 # default setting for Android 4.1, 4.2
 EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
@@ -1288,6 +1255,34 @@ CROSS_COMPILE := /home/android_sdk/Allwinner/a23/android-kk44/lichee/out/android
 KSRC :=/home/android_sdk/Allwinner/a23/android-kk44/lichee/linux-3.4
 endif
 
 KSRC :=/home/android_sdk/Allwinner/a23/android-kk44/lichee/linux-3.4
 endif
 
+ifeq ($(CONFIG_PLATFORM_ARM_SUN8I_W5P1), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN8I
+EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN8I_W5P1
+EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
+# default setting for Android 4.1, 4.2
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
+
+# Enable this for Android 5.0
+EXTRA_CFLAGS += -DCONFIG_RADIO_WORK
+
+EXTRA_CFLAGS += -DCONFIG_PLATFORM_OPS
+ifeq ($(CONFIG_USB_HCI), y)
+EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_TX
+_PLATFORM_FILES += platform/platform_ARM_SUNxI_usb.o
+endif
+ifeq ($(CONFIG_SDIO_HCI), y)
+_PLATFORM_FILES += platform/platform_ARM_SUNnI_sdio.o
+endif
+
+ARCH := arm
+# ===Cross compile setting for Android L SDK ===
+CROSS_COMPILE := /home/android_sdk/Allwinner/a33/android-L/lichee/out/sun8iw5p1/android/common/buildroot/external-toolchain/bin/arm-linux-gnueabi-
+KSRC :=/home/android_sdk/Allwinner/a33/android-L/lichee/linux-3.4
+endif
+
 ifeq ($(CONFIG_PLATFORM_ACTIONS_ATV5201), y)
 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ACTIONS_ATV5201
 EXTRA_CFLAGS += -DCONFIG_SDIO_DISABLE_RXFIFO_POLLING_LOOP
 ifeq ($(CONFIG_PLATFORM_ACTIONS_ATV5201), y)
 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ACTIONS_ATV5201
 EXTRA_CFLAGS += -DCONFIG_SDIO_DISABLE_RXFIFO_POLLING_LOOP
@@ -1303,6 +1298,23 @@ EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DUSB_XMITBUF_ALIGN_SZ=1024 -DUSB_PACKET_
 INSTALL_PREFIX :=
 endif
 
 INSTALL_PREFIX :=
 endif
 
+ifeq ($(CONFIG_PLATFORM_HISILICON), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_HISILICON
+ifeq ($(SUPPORT_CONCURRENT),y)
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+endif
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
+ARCH := arm
+ifeq ($(CROSS_COMPILE),)
+       CROSS_COMPILE = arm-hisiv200-linux-
+endif
+MODULE_NAME := rtl8192eu
+ifeq ($(KSRC),)
+       KSRC := ../../../../../../kernel/linux-3.4.y
+endif
+endif
+
 # Platfrom setting
 ifeq ($(CONFIG_PLATFORM_ARM_SPREADTRUM_6820), y)
 ifeq ($(CONFIG_ANDROID_2X), y)
 # Platfrom setting
 ifeq ($(CONFIG_PLATFORM_ARM_SPREADTRUM_6820), y)
 ifeq ($(CONFIG_ANDROID_2X), y)
@@ -1381,6 +1393,20 @@ MODULE_NAME := 8192eu
 
 endif
 
 
 endif
 
+ifeq ($(CONFIG_PLATFORM_NOVATEK_NT72668), y)
+EXTRA_CFLAGS += -DCONFIG_PLATFORM_NOVATEK_NT72668
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DDCONFIG_P2P_IPS
+EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_RX
+EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_TX
+ARCH ?= arm
+CROSS_COMPILE := arm-linux-gnueabihf-
+KVER := 3.8.0
+KSRC := /Custom/Novatek/TCL/linux-3.8_header
+#KSRC := $(KERNELDIR)
+endif
 
 ifeq ($(CONFIG_MULTIDRV), y)
 
 
 ifeq ($(CONFIG_MULTIDRV), y)
 
@@ -1448,9 +1474,6 @@ $(MODULE_NAME)-y += $(_PLATFORM_FILES)
 $(MODULE_NAME)-$(CONFIG_MP_INCLUDED) += core/rtw_mp.o \
                                        core/rtw_mp_ioctl.o
 
 $(MODULE_NAME)-$(CONFIG_MP_INCLUDED) += core/rtw_mp.o \
                                        core/rtw_mp_ioctl.o
 
-ifeq ($(CONFIG_RTL8723A), y)
-$(MODULE_NAME)-$(CONFIG_MP_INCLUDED)+= core/rtw_bt_mp.o
-endif
 ifeq ($(CONFIG_RTL8723B), y)
 $(MODULE_NAME)-$(CONFIG_MP_INCLUDED)+= core/rtw_bt_mp.o
 endif
 ifeq ($(CONFIG_RTL8723B), y)
 $(MODULE_NAME)-$(CONFIG_MP_INCLUDED)+= core/rtw_bt_mp.o
 endif
index 5d3f80afea294225dd79824e0f3eaa057d514fd2..e36ae542c5827b86bf31611e0cf3ebc444c31d9a 100755 (executable)
@@ -22,6 +22,7 @@
 #include <drv_types.h>
 #include <hal_data.h>
 
 #include <drv_types.h>
 #include <hal_data.h>
 
+#include "../hal/efuse/efuse_mask.h"
 
 /*------------------------Define local variable------------------------------*/
 u8     fakeEfuseBank=0;
 
 /*------------------------Define local variable------------------------------*/
 u8     fakeEfuseBank=0;
@@ -39,6 +40,8 @@ u32   fakeBTEfuseUsedBytes=0;
 u8     fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
 u8     fakeBTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN]={0};
 u8     fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]={0};
 u8     fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
 u8     fakeBTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN]={0};
 u8     fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]={0};
+
+u8     maskfileBuffer[32];
 /*------------------------Define local variable------------------------------*/
 
 //------------------------------------------------------------------------------
 /*------------------------Define local variable------------------------------*/
 
 //------------------------------------------------------------------------------
@@ -433,7 +436,8 @@ efuse_OneByteRead(
        u32     tmpidx = 0;
        u8      bResult;
        u8      readbyte;
        u32     tmpidx = 0;
        u8      bResult;
        u8      readbyte;
-
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
+       
        //DBG_871X("===> EFUSE_OneByteRead(), addr = %x\n", addr);
        //DBG_871X("===> EFUSE_OneByteRead() start, 0x34 = 0x%X\n", rtw_read32(pAdapter, EFUSE_TEST));
 
        //DBG_871X("===> EFUSE_OneByteRead(), addr = %x\n", addr);
        //DBG_871X("===> EFUSE_OneByteRead() start, 0x34 = 0x%X\n", rtw_read32(pAdapter, EFUSE_TEST));
 
@@ -442,9 +446,12 @@ efuse_OneByteRead(
                bResult = Efuse_Read1ByteFromFakeContent(pAdapter, addr, data);
                return bResult;
        }
                bResult = Efuse_Read1ByteFromFakeContent(pAdapter, addr, data);
                return bResult;
        }
-
+       
        if(     IS_HARDWARE_TYPE_8723B(pAdapter) ||
        if(     IS_HARDWARE_TYPE_8723B(pAdapter) ||
-               (IS_HARDWARE_TYPE_8192E(pAdapter) && IS_VENDOR_8192E_B_CUT(pAdapter)))
+               (IS_HARDWARE_TYPE_8192E(pAdapter) && (!IS_A_CUT(pHalData->VersionID))) ||
+               //(IS_HARDWARE_TYPE_8188E(pAdapter) && ((IS_I_CUT(pHalData->VersionID)) || (IS_J_CUT(pHalData->VersionID))))
+               (IS_VENDOR_8188E_I_CUT_SERIES(pAdapter))
+         )
        {
                // <20130121, Kordan> For SMIC EFUSE specificatoin.
                //0x34[11]: SW force PGMEN input of efuse to high. (for the bank selected by 0x34[9:8]) 
        {
                // <20130121, Kordan> For SMIC EFUSE specificatoin.
                //0x34[11]: SW force PGMEN input of efuse to high. (for the bank selected by 0x34[9:8]) 
@@ -495,7 +502,8 @@ efuse_OneByteWrite(
        u8      tmpidx = 0;
        u8      bResult=_FALSE;
        u32 efuseValue = 0;
        u8      tmpidx = 0;
        u8      bResult=_FALSE;
        u32 efuseValue = 0;
-
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
+       
        //DBG_871X("===> EFUSE_OneByteWrite(), addr = %x data=%x\n", addr, data);
        //DBG_871X("===> EFUSE_OneByteWrite() start, 0x34 = 0x%X\n", rtw_read32(pAdapter, EFUSE_TEST));
 
        //DBG_871X("===> EFUSE_OneByteWrite(), addr = %x data=%x\n", addr, data);
        //DBG_871X("===> EFUSE_OneByteWrite() start, 0x34 = 0x%X\n", rtw_read32(pAdapter, EFUSE_TEST));
 
@@ -517,7 +525,11 @@ efuse_OneByteWrite(
 
 
        // <20130227, Kordan> 8192E MP chip A-cut had better not set 0x34[11] until B-Cut.
 
 
        // <20130227, Kordan> 8192E MP chip A-cut had better not set 0x34[11] until B-Cut.
-       if (IS_HARDWARE_TYPE_8723B(pAdapter)||(IS_HARDWARE_TYPE_8192E(pAdapter) && IS_VENDOR_8192E_B_CUT(pAdapter)))
+       if (    IS_HARDWARE_TYPE_8723B(pAdapter) ||
+               (IS_HARDWARE_TYPE_8192E(pAdapter) && (!IS_A_CUT(pHalData->VersionID))) ||
+               //(IS_HARDWARE_TYPE_8188E(pAdapter) && ((IS_I_CUT(pHalData->VersionID)) || (IS_J_CUT(pHalData->VersionID))))
+               (IS_VENDOR_8188E_I_CUT_SERIES(pAdapter))
+         )
        {
                // <20130121, Kordan> For SMIC EFUSE specificatoin.
                //0x34[11]: SW force PGMEN input of efuse to high. (for the bank selected by 0x34[9:8])
        {
                // <20130121, Kordan> For SMIC EFUSE specificatoin.
                //0x34[11]: SW force PGMEN input of efuse to high. (for the bank selected by 0x34[9:8])
@@ -548,7 +560,11 @@ efuse_OneByteWrite(
        }
 
        // disable Efuse program enable
        }
 
        // disable Efuse program enable
-       if (IS_HARDWARE_TYPE_8723B(pAdapter))
+       if (    IS_HARDWARE_TYPE_8723B(pAdapter) ||
+               (IS_HARDWARE_TYPE_8192E(pAdapter) && (!IS_A_CUT(pHalData->VersionID))) ||
+               //(IS_HARDWARE_TYPE_8188E(pAdapter) && ((IS_I_CUT(pHalData->VersionID)) || (IS_J_CUT(pHalData->VersionID))))
+               (IS_VENDOR_8188E_I_CUT_SERIES(pAdapter))
+         )
        {
                PHY_SetMacReg(pAdapter, EFUSE_TEST, BIT(11), 0);
        }
        {
                PHY_SetMacReg(pAdapter, EFUSE_TEST, BIT(11), 0);
        }
@@ -711,6 +727,8 @@ u8 rtw_efuse_access(PADAPTER padapter, u8 bWrite, u16 start_addr, u16 cnts, u8 *
 u16 efuse_GetMaxSize(PADAPTER padapter)
 {
        u16     max_size;
 u16 efuse_GetMaxSize(PADAPTER padapter)
 {
        u16     max_size;
+
+       max_size = 0;
        EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI , TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_size, _FALSE);
        return max_size;
 }
        EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI , TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_size, _FALSE);
        return max_size;
 }
@@ -759,6 +777,153 @@ u8 rtw_BT_efuse_map_read(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
 
        return _SUCCESS;
 }
 
        return _SUCCESS;
 }
+
+BOOLEAN rtw_file_efuse_IsMasked(
+       PADAPTER        pAdapter,
+       u16             Offset
+       )
+{
+       int r = Offset/16;
+       int c = (Offset%16) / 2;
+       int result = 0;
+       
+       if(pAdapter->registrypriv.boffefusemask)
+               return FALSE;
+
+       //DBG_871X(" %s ,Offset=%x r= %d , c=%d , maskfileBuffer[r]= %x \n",__func__,Offset,r,c,maskfileBuffer[r]);
+       if (c < 4) // Upper double word
+           result = (maskfileBuffer[r] & (0x10 << c));
+       else
+           result = (maskfileBuffer[r] & (0x01 << (c-4)));
+       
+       return (result > 0) ? 0 : 1;
+
+}
+
+
+u8 rtw_efuse_file_read(PADAPTER padapter,u8 *filepatch,u8 *buf,u32 len)
+{
+       char *ptmp;
+       char *ptmpbuf=NULL;
+       u32 rtStatus;
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+
+       ptmpbuf = rtw_zmalloc(2048);
+
+       if (ptmpbuf == NULL)
+               return _FALSE;
+
+       _rtw_memset(ptmpbuf,'\0',2048);
+       
+       rtStatus = rtw_retrive_from_file(filepatch, ptmpbuf, 2048);
+
+       if( rtStatus > 100 )
+       {
+               u32 i,j;
+               for(i=0,j=0;j<len;i+=2,j++)
+               {
+                       if (( ptmpbuf[i] == ' ' ) && (ptmpbuf[i+1] != '\n' && ptmpbuf[i+1] != '\0')) {
+                               i++;
+                       }
+                       if( (ptmpbuf[i+1] != '\n' && ptmpbuf[i+1] != '\0'))
+                       {
+                                       buf[j] = simple_strtoul(&ptmpbuf[i],&ptmp, 16);
+                                       DBG_871X(" i=%d,j=%d, %x \n",i,j,buf[j]);
+
+                       } else {
+                               j--;
+                       }
+                       
+               }
+
+       } else {
+               DBG_871X(" %s ,filepatch %s , FAIL %d\n", __func__, filepatch, rtStatus);
+               return _FALSE;
+       }
+       rtw_mfree(ptmpbuf, 2048);
+       DBG_871X(" %s ,filepatch %s , done %d\n", __func__, filepatch, rtStatus);
+       return _TRUE;
+}
+
+
+BOOLEAN 
+efuse_IsMasked(
+       PADAPTER        pAdapter,
+       u16             Offset
+       )
+{
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
+       
+
+       //if (bEfuseMaskOFF(pAdapter))
+       if(pAdapter->registrypriv.boffefusemask)
+               return FALSE;
+               
+#if DEV_BUS_TYPE == RT_USB_INTERFACE
+#if defined(CONFIG_RTL8188E)
+       if (IS_HARDWARE_TYPE_8188E(pAdapter))  
+               return (IS_MASKED(8188E,_MUSB,Offset)) ? TRUE : FALSE;
+#endif
+#if defined(CONFIG_RTL8812A)
+       if (IS_HARDWARE_TYPE_8812(pAdapter))  
+               return (IS_MASKED(8812A,_MUSB,Offset)) ? TRUE : FALSE;
+#endif
+#if defined(CONFIG_RTL8821A)
+       //if (IS_HARDWARE_TYPE_8811AU(pAdapter))  
+       //      return (IS_MASKED(8811A,_MUSB,Offset)) ? TRUE : FALSE;
+       if (IS_HARDWARE_TYPE_8821(pAdapter))  
+               return (IS_MASKED(8821A,_MUSB,Offset)) ? TRUE : FALSE;          
+#endif         
+#if defined(CONFIG_RTL8192E)
+       if (IS_HARDWARE_TYPE_8192E(pAdapter))  
+               return (IS_MASKED(8192E,_MUSB,Offset)) ? TRUE : FALSE;
+#endif
+#if defined(CONFIG_RTL8723B)
+       if (IS_HARDWARE_TYPE_8723B(pAdapter))  
+               return (IS_MASKED(8723B,_MUSB,Offset)) ? TRUE : FALSE;
+#endif
+#if defined(CONFIG_RTL8814A)
+       if (IS_HARDWARE_TYPE_8814A(pAdapter))
+               return (IS_MASKED(8814A, _MUSB, Offset)) ? TRUE : FALSE;
+#endif 
+#elif DEV_BUS_TYPE == RT_PCI_INTERFACE
+#if defined(CONFIG_RTL8188E)
+       if (IS_HARDWARE_TYPE_8188E(pAdapter))  
+               return (IS_MASKED(8188E,_MPCIE,Offset)) ? TRUE : FALSE;
+#endif
+#if defined(CONFIG_RTL8192E)
+       if (IS_HARDWARE_TYPE_8192E(pAdapter))   
+               return (IS_MASKED(8192E,_MPCIE,Offset)) ? TRUE : FALSE;
+#endif 
+#if defined(CONFIG_RTL8812A)
+       if (IS_HARDWARE_TYPE_8812(pAdapter))  
+               return (IS_MASKED(8812A,_MPCIE,Offset)) ? TRUE : FALSE;
+#endif 
+#if defined(CONFIG_RTL8821A)
+       if (IS_HARDWARE_TYPE_8821(pAdapter))  
+               return (IS_MASKED(8821A,_MPCIE,Offset)) ? TRUE : FALSE;
+#endif
+#if defined(CONFIG_RTL8723B)
+       if (IS_HARDWARE_TYPE_8723B(pAdapter))  
+               return (IS_MASKED(8723B,_MPCIE,Offset)) ? TRUE : FALSE; 
+#endif
+#if defined(CONFIG_RTL8814A)
+       if (IS_HARDWARE_TYPE_8814A(pAdapter))
+               return (IS_MASKED(8814A, _MPCIE, Offset)) ? TRUE : FALSE;
+#endif
+       //else if (IS_HARDWARE_TYPE_8821B(pAdapter))  
+       //      return (IS_MASKED(8821B,_MPCIE,Offset)) ? TRUE : FALSE; 
+
+#elif DEV_BUS_TYPE == RT_SDIO_INTERFACE
+#ifdef CONFIG_RTL8188E_SDIO
+       if (IS_HARDWARE_TYPE_8188E(pAdapter))  
+               return (IS_MASKED(8188E,_MSDIO,Offset)) ? TRUE : FALSE;
+#endif         
+#endif
+
+       return FALSE;   
+}
+
 //------------------------------------------------------------------------------
 u8 rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
 {
 //------------------------------------------------------------------------------
 u8 rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
 {
@@ -775,7 +940,6 @@ u8 rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
        s32     i, j, idx;
        u8      ret = _SUCCESS;
        u16     mapLen=0;
        s32     i, j, idx;
        u8      ret = _SUCCESS;
        u16     mapLen=0;
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
 
        EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, _FALSE);
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
 
        EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, _FALSE);
@@ -796,6 +960,23 @@ u8 rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
        ret = rtw_efuse_map_read(padapter, 0, mapLen, map);
        if (ret == _FAIL) goto exit;
 
        ret = rtw_efuse_map_read(padapter, 0, mapLen, map);
        if (ret == _FAIL) goto exit;
 
+       if(padapter->registrypriv.boffefusemask==0)
+       {
+               for (i =0; i < cnts; i++)
+               { 
+                       if(padapter->registrypriv.bFileMaskEfuse==_TRUE)
+                       {
+                               if (rtw_file_efuse_IsMasked(padapter, addr+i))  /*use file efuse mask. */
+                                               data[i] = map[addr+i];
+                       }
+                       else
+                       {
+                               if ( efuse_IsMasked(padapter, addr+i ))
+                                               data[i] = map[addr+i];
+                       }
+                       DBG_8192C("%s , data[%d] = %x, map[addr+i]= %x\n", __func__, i, data[i], map[addr+i]);
+               }
+       }
        Efuse_PowerSwitch(padapter, _TRUE, _TRUE);
 
        idx = 0;
        Efuse_PowerSwitch(padapter, _TRUE, _TRUE);
 
        idx = 0;
@@ -816,10 +997,10 @@ u8 rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
                                 {      
                                        if (IS_C_CUT(pHalData->VersionID) || IS_B_CUT(pHalData->VersionID))
                                        {
                                 {      
                                        if (IS_C_CUT(pHalData->VersionID) || IS_B_CUT(pHalData->VersionID))
                                        {
-                                               if(pEEPROM->adjuseVoltageVal == 6)
+                                               if(pHalData->adjuseVoltageVal == 6)
                                                {
                                                                newdata[i] = map[addr + idx];
                                                {
                                                                newdata[i] = map[addr + idx];
-                                                               DBG_8192C(" %s ,\n adjuseVoltageVal = %d ,newdata[%d] = %x \n",__func__,pEEPROM->adjuseVoltageVal,i,newdata[i]);         
+                                                               DBG_8192C(" %s ,\n adjuseVoltageVal = %d ,newdata[%d] = %x \n",__func__,pHalData->adjuseVoltageVal,i,newdata[i]);        
                                                }
                                        }
                                  }
                                                }
                                        }
                                  }
@@ -851,8 +1032,35 @@ exit:
        return ret;
 }
 
        return ret;
 }
 
+u8 rtw_efuse_mask_map_read(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
+{
+       u8      ret = _SUCCESS;
+       u16     mapLen = 0, i = 0;
+       
+       EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, _FALSE);
+       
+       ret = rtw_efuse_map_read(padapter, 0, mapLen, data);
+
+       if (padapter->registrypriv.boffefusemask == 0) {
+
+                       for (i = 0; i < cnts; i++) { 
+                               if (padapter->registrypriv.bFileMaskEfuse == _TRUE) {
+                                       if (rtw_file_efuse_IsMasked(padapter, addr+i)) /*use file efuse mask.*/ 
+                                                       data[i] = 0xff;
+                               } else {
+                                       /*DBG_8192C(" %s , data[%d] = %x\n", __func__, i, data[i]);*/
+                                       if (efuse_IsMasked(padapter, addr+i)) {
+                                               data[i] = 0xff;
+                                               /*DBG_8192C(" %s ,mask data[%d] = %x\n", __func__, i, data[i]);*/
+                                       }
+                               }
+                       }
+       
+       }
+       return ret;
+
+}
 
 
-//------------------------------------------------------------------------------
 u8 rtw_BT_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
 {
 #define RT_ASSERT_RET(expr)                                                                                            \
 u8 rtw_BT_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
 {
 #define RT_ASSERT_RET(expr)                                                                                            \
@@ -1005,9 +1213,9 @@ efuse_ShadowRead1Byte(
        IN      u16             Offset,
        IN OUT  u8              *Value)
 {
        IN      u16             Offset,
        IN OUT  u8              *Value)
 {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter);
 
 
-       *Value = pEEPROM->efuse_eeprom_data[Offset];
+       *Value = pHalData->efuse_eeprom_data[Offset];
 
 }      // EFUSE_ShadowRead1Byte
 
 
 }      // EFUSE_ShadowRead1Byte
 
@@ -1018,10 +1226,10 @@ efuse_ShadowRead2Byte(
        IN      u16             Offset,
        IN OUT  u16             *Value)
 {
        IN      u16             Offset,
        IN OUT  u16             *Value)
 {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter);
 
 
-       *Value = pEEPROM->efuse_eeprom_data[Offset];
-       *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8;
+       *Value = pHalData->efuse_eeprom_data[Offset];
+       *Value |= pHalData->efuse_eeprom_data[Offset+1]<<8;
 
 }      // EFUSE_ShadowRead2Byte
 
 
 }      // EFUSE_ShadowRead2Byte
 
@@ -1032,12 +1240,12 @@ efuse_ShadowRead4Byte(
        IN      u16             Offset,
        IN OUT  u32             *Value)
 {
        IN      u16             Offset,
        IN OUT  u32             *Value)
 {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter);
 
 
-       *Value = pEEPROM->efuse_eeprom_data[Offset];
-       *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8;
-       *Value |= pEEPROM->efuse_eeprom_data[Offset+2]<<16;
-       *Value |= pEEPROM->efuse_eeprom_data[Offset+3]<<24;
+       *Value = pHalData->efuse_eeprom_data[Offset];
+       *Value |= pHalData->efuse_eeprom_data[Offset+1]<<8;
+       *Value |= pHalData->efuse_eeprom_data[Offset+2]<<16;
+       *Value |= pHalData->efuse_eeprom_data[Offset+3]<<24;
 
 }      // efuse_ShadowRead4Byte
 
 
 }      // efuse_ShadowRead4Byte
 
@@ -1073,9 +1281,9 @@ efuse_ShadowWrite1Byte(
        IN      u16             Offset,
        IN      u8              Value)
 {
        IN      u16             Offset,
        IN      u8              Value)
 {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter);
 
 
-       pEEPROM->efuse_eeprom_data[Offset] = Value;
+       pHalData->efuse_eeprom_data[Offset] = Value;
 
 }      // efuse_ShadowWrite1Byte
 
 
 }      // efuse_ShadowWrite1Byte
 
@@ -1086,10 +1294,12 @@ efuse_ShadowWrite2Byte(
        IN      u16             Offset,
        IN      u16             Value)
 {
        IN      u16             Offset,
        IN      u16             Value)
 {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
+       
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter);
+       
 
 
-       pEEPROM->efuse_eeprom_data[Offset] = Value&0x00FF;
-       pEEPROM->efuse_eeprom_data[Offset+1] = Value>>8;
+       pHalData->efuse_eeprom_data[Offset] = Value&0x00FF;
+       pHalData->efuse_eeprom_data[Offset+1] = Value>>8;
 
 }      // efuse_ShadowWrite1Byte
 
 
 }      // efuse_ShadowWrite1Byte
 
@@ -1100,12 +1310,12 @@ efuse_ShadowWrite4Byte(
        IN      u16             Offset,
        IN      u32             Value)
 {
        IN      u16             Offset,
        IN      u32             Value)
 {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter);
 
 
-       pEEPROM->efuse_eeprom_data[Offset] = (u8)(Value&0x000000FF);
-       pEEPROM->efuse_eeprom_data[Offset+1] = (u8)((Value>>8)&0x0000FF);
-       pEEPROM->efuse_eeprom_data[Offset+2] = (u8)((Value>>16)&0x00FF);
-       pEEPROM->efuse_eeprom_data[Offset+3] = (u8)((Value>>24)&0xFF);
+       pHalData->efuse_eeprom_data[Offset] = (u8)(Value&0x000000FF);
+       pHalData->efuse_eeprom_data[Offset+1] = (u8)((Value>>8)&0x0000FF);
+       pHalData->efuse_eeprom_data[Offset+2] = (u8)((Value>>16)&0x00FF);
+       pHalData->efuse_eeprom_data[Offset+3] = (u8)((Value>>24)&0xFF);
 
 }      // efuse_ShadowWrite1Byte
 
 
 }      // efuse_ShadowWrite1Byte
 
@@ -1130,25 +1340,25 @@ void EFUSE_ShadowMapUpdate(
        IN u8           efuseType,
        IN BOOLEAN      bPseudoTest)
 {
        IN u8           efuseType,
        IN BOOLEAN      bPseudoTest)
 {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter);
        u16     mapLen=0;
 
        EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, bPseudoTest);
 
        u16     mapLen=0;
 
        EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, bPseudoTest);
 
-       if (pEEPROM->bautoload_fail_flag == _TRUE)
+       if (pHalData->bautoload_fail_flag == _TRUE)
        {
        {
-               _rtw_memset(pEEPROM->efuse_eeprom_data, 0xFF, mapLen);
+               _rtw_memset(pHalData->efuse_eeprom_data, 0xFF, mapLen);
        }
        else
        {
                #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE                 
        }
        else
        {
                #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE                 
-               if(_SUCCESS != retriveAdaptorInfoFile(pAdapter->registrypriv.adaptor_info_caching_file_path, pEEPROM)) {
+               if(_SUCCESS != retriveAdaptorInfoFile(pAdapter->registrypriv.adaptor_info_caching_file_path, pHalData->efuse_eeprom_data)) {
                #endif
                
                #endif
                
-               Efuse_ReadAllMap(pAdapter, efuseType, pEEPROM->efuse_eeprom_data, bPseudoTest);
+               Efuse_ReadAllMap(pAdapter, efuseType, pHalData->efuse_eeprom_data, bPseudoTest);
                
                #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
                
                #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
-                       storeAdaptorInfoFile(pAdapter->registrypriv.adaptor_info_caching_file_path, pEEPROM);
+                       storeAdaptorInfoFile(pAdapter->registrypriv.adaptor_info_caching_file_path, pHalData->efuse_eeprom_data);
                }
                #endif
        }
                }
                #endif
        }
@@ -1274,12 +1484,12 @@ Efuse_InitSomeVar(
        return _TRUE;
 }
 
        return _TRUE;
 }
 
-int storeAdaptorInfoFile(char *path, struct eeprom_priv * eeprom_priv)
+int storeAdaptorInfoFile(char *path, u8* efuse_data)
 {
        int ret =_SUCCESS;
 
 {
        int ret =_SUCCESS;
 
-       if(path && eeprom_priv) {
-               ret = rtw_store_to_file(path, eeprom_priv->efuse_eeprom_data, EEPROM_MAX_SIZE_512);
+       if(path && efuse_data) {
+               ret = rtw_store_to_file(path, efuse_data, EEPROM_MAX_SIZE_512);
                if(ret == EEPROM_MAX_SIZE)
                        ret = _SUCCESS;
                else
                if(ret == EEPROM_MAX_SIZE)
                        ret = _SUCCESS;
                else
@@ -1291,15 +1501,15 @@ int storeAdaptorInfoFile(char *path, struct eeprom_priv * eeprom_priv)
        return ret;
 }
 
        return ret;
 }
 
-int retriveAdaptorInfoFile(char *path, struct eeprom_priv * eeprom_priv)
+int retriveAdaptorInfoFile(char *path, u8* efuse_data)
 {
        int ret = _SUCCESS;
        mm_segment_t oldfs;
        struct file *fp;
        
 {
        int ret = _SUCCESS;
        mm_segment_t oldfs;
        struct file *fp;
        
-       if(path && eeprom_priv) {
+       if(path && efuse_data) {
 
 
-               ret = rtw_retrive_from_file(path, eeprom_priv->efuse_eeprom_data, EEPROM_MAX_SIZE);
+               ret = rtw_retrive_from_file(path, efuse_data, EEPROM_MAX_SIZE);
                
                if(ret == EEPROM_MAX_SIZE)
                        ret = _SUCCESS;
                
                if(ret == EEPROM_MAX_SIZE)
                        ret = _SUCCESS;
@@ -1333,18 +1543,18 @@ void Rtw_Hal_ReadMACAddrFromFile(PADAPTER padapter)
        u8 source_addr[18];
        loff_t pos = 0;
        u32 curtime = rtw_get_current_time();
        u8 source_addr[18];
        loff_t pos = 0;
        u32 curtime = rtw_get_current_time();
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
        u8 *head, *end;
 
        u8 null_mac_addr[ETH_ALEN] = {0, 0, 0,0, 0, 0};
        u8 multi_mac_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
        
        _rtw_memset(source_addr, 0, 18);
        u8 *head, *end;
 
        u8 null_mac_addr[ETH_ALEN] = {0, 0, 0,0, 0, 0};
        u8 multi_mac_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
        
        _rtw_memset(source_addr, 0, 18);
-       _rtw_memset(pEEPROM->mac_addr, 0, ETH_ALEN);
+       _rtw_memset(pHalData->EEPROMMACAddr, 0, ETH_ALEN);
 
        fp = filp_open("/data/wifimac.txt", O_RDWR,  0644);
        if (IS_ERR(fp)) {
 
        fp = filp_open("/data/wifimac.txt", O_RDWR,  0644);
        if (IS_ERR(fp)) {
-               pEEPROM->bloadmac_fail_flag = _TRUE;
+               pHalData->bloadmac_fail_flag = _TRUE;
                DBG_871X("Error, wifi mac address file doesn't exist.\n");
        } else {
                fs = get_fs();
                DBG_871X("Error, wifi mac address file doesn't exist.\n");
        } else {
                fs = get_fs();
@@ -1362,34 +1572,34 @@ void Rtw_Hal_ReadMACAddrFromFile(PADAPTER padapter)
                        if (end && (*end == ':') )
                                *end = '\0';
 
                        if (end && (*end == ':') )
                                *end = '\0';
 
-                       pEEPROM->mac_addr[i] = simple_strtoul(head, NULL, 16 );
+                       pHalData->EEPROMMACAddr[i] = simple_strtoul(head, NULL, 16 );
 
                        if (end) {
                                end++;
                                head = end;
                        }
 
                        if (end) {
                                end++;
                                head = end;
                        }
-                       DBG_871X("%02x \n", pEEPROM->mac_addr[i]);
+                       DBG_871X("%02x \n", pHalData->EEPROMMACAddr[i]);
                }
                DBG_871X("\n");
                set_fs(fs);
                }
                DBG_871X("\n");
                set_fs(fs);
-               pEEPROM->bloadmac_fail_flag = _FALSE;
+               pHalData->bloadmac_fail_flag = _FALSE;
                filp_close(fp, NULL);
        }
 
                filp_close(fp, NULL);
        }
 
-       if ( (_rtw_memcmp(pEEPROM->mac_addr, null_mac_addr, ETH_ALEN)) ||
-               (_rtw_memcmp(pEEPROM->mac_addr, multi_mac_addr, ETH_ALEN)) ) {
-               pEEPROM->mac_addr[0] = 0x00;
-               pEEPROM->mac_addr[1] = 0xe0;
-               pEEPROM->mac_addr[2] = 0x4c;
-               pEEPROM->mac_addr[3] = (u8)(curtime & 0xff) ;
-               pEEPROM->mac_addr[4] = (u8)((curtime>>8) & 0xff) ;
-               pEEPROM->mac_addr[5] = (u8)((curtime>>16) & 0xff) ;
+       if ( (_rtw_memcmp(pHalData->EEPROMMACAddr, null_mac_addr, ETH_ALEN)) ||
+               (_rtw_memcmp(pHalData->EEPROMMACAddr, multi_mac_addr, ETH_ALEN)) ) {
+               pHalData->EEPROMMACAddr[0] = 0x00;
+               pHalData->EEPROMMACAddr[1] = 0xe0;
+               pHalData->EEPROMMACAddr[2] = 0x4c;
+               pHalData->EEPROMMACAddr[3] = (u8)(curtime & 0xff) ;
+               pHalData->EEPROMMACAddr[4] = (u8)((curtime>>8) & 0xff) ;
+               pHalData->EEPROMMACAddr[5] = (u8)((curtime>>16) & 0xff) ;
        }
 
        DBG_871X("Hal_ReadMACAddrFromFile: Permanent Address = %02x-%02x-%02x-%02x-%02x-%02x !!!\n",
        }
 
        DBG_871X("Hal_ReadMACAddrFromFile: Permanent Address = %02x-%02x-%02x-%02x-%02x-%02x !!!\n",
-                 pEEPROM->mac_addr[0], pEEPROM->mac_addr[1],
-                 pEEPROM->mac_addr[2], pEEPROM->mac_addr[3],
-                 pEEPROM->mac_addr[4], pEEPROM->mac_addr[5]);
+                 pHalData->EEPROMMACAddr[0], pHalData->EEPROMMACAddr[1],
+                 pHalData->EEPROMMACAddr[2], pHalData->EEPROMMACAddr[3],
+                 pHalData->EEPROMMACAddr[4], pHalData->EEPROMMACAddr[5]);
 }
 
 
 }
 
 
@@ -1400,15 +1610,15 @@ u32 Rtw_Hal_readPGDataFromConfigFile(PADAPTER   padapter)
        mm_segment_t fs;
        u8 temp[3];
        loff_t pos = 0;
        mm_segment_t fs;
        u8 temp[3];
        loff_t pos = 0;
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-       u8      *PROMContent = pEEPROM->efuse_eeprom_data;
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
+       u8      *PROMContent = pHalData->efuse_eeprom_data;
 
 
        temp[2] = 0; // add end of string '\0'
 
        fp = filp_open("/system/etc/wifi/wifi_efuse.map", O_RDWR,  0644);
        if (IS_ERR(fp)) {
 
 
        temp[2] = 0; // add end of string '\0'
 
        fp = filp_open("/system/etc/wifi/wifi_efuse.map", O_RDWR,  0644);
        if (IS_ERR(fp)) {
-               pEEPROM->bloadfile_fail_flag = _TRUE;
+               pHalData->bloadfile_fail_flag = _TRUE;
                DBG_871X("Error, Efuse configure file doesn't exist.\n");
                return _FAIL;
        }
                DBG_871X("Error, Efuse configure file doesn't exist.\n");
                return _FAIL;
        }
@@ -1428,7 +1638,7 @@ u32 Rtw_Hal_readPGDataFromConfigFile(PADAPTER     padapter)
 
        filp_close(fp, NULL);
        
 
        filp_close(fp, NULL);
        
-       pEEPROM->bloadfile_fail_flag = _FALSE;
+       pHalData->bloadfile_fail_flag = _FALSE;
        
        return _SUCCESS;
 }
        
        return _SUCCESS;
 }
index ca634367f4fe5d6984f5017a67a301a0cd065b56..f605febebbd3e429e7f3e4cd6dbd23e244d1e2f8 100755 (executable)
@@ -534,8 +534,8 @@ void        expire_timeout_chk(_adapter *padapter)
                                                //add_ba_hdl(padapter, (u8*)paddbareq_parm);\r
 \r
                                                DBG_871X("issue addba_req to check if sta alive, keep_alive_trycnt=%d\n", psta->keep_alive_trycnt);\r
                                                //add_ba_hdl(padapter, (u8*)paddbareq_parm);\r
 \r
                                                DBG_871X("issue addba_req to check if sta alive, keep_alive_trycnt=%d\n", psta->keep_alive_trycnt);\r
-                                               \r
-                                               issue_action_BA(padapter, psta->hwaddr, RTW_WLAN_ACTION_ADDBA_REQ, (u16)priority);              \r
+\r
+                                               issue_addba_req(padapter, psta->hwaddr, (u8)priority);\r
                \r
                                                _set_timer(&psta->addba_retry_timer, ADDBA_TO);\r
                                                \r
                \r
                                                _set_timer(&psta->addba_retry_timer, ADDBA_TO);\r
                                                \r
@@ -1310,6 +1310,7 @@ void start_bss_network(_adapter *padapter, u8 *pbuf)
 \r
        rtw_hal_set_hwreg(padapter, HW_VAR_DO_IQK, NULL);\r
 \r
 \r
        rtw_hal_set_hwreg(padapter, HW_VAR_DO_IQK, NULL);\r
 \r
+#if 0\r
        if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at  first time\r
        {\r
                //u32 initialgain;\r
        if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at  first time\r
        {\r
                //u32 initialgain;\r
@@ -1322,11 +1323,12 @@ void start_bss_network(_adapter *padapter, u8 *pbuf)
                //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);\r
                \r
                //turn on all dynamic functions \r
                //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);\r
                \r
                //turn on all dynamic functions \r
-               Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, _TRUE);\r
+               /* Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, _TRUE);*/\r
 \r
                //rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));\r
        \r
        }\r
 \r
                //rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));\r
        \r
        }\r
+#endif\r
 #ifdef CONFIG_80211N_HT\r
        //set channel, bwmode   \r
        p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));\r
 #ifdef CONFIG_80211N_HT\r
        //set channel, bwmode   \r
        p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));\r
@@ -1380,9 +1382,6 @@ void start_bss_network(_adapter *padapter, u8 *pbuf)
        }\r
 #endif\r
 \r
        }\r
 #endif\r
 \r
-#ifdef CONFIG_DUALMAC_CONCURRENT\r
-       dc_set_ap_channel_bandwidth(padapter, cur_channel, cur_ch_offset, cur_bwmode);\r
-#else //!CONFIG_DUALMAC_CONCURRENT     \r
 #ifdef CONFIG_CONCURRENT_MODE\r
        //TODO: need to judge the phy parameters on concurrent mode for single phy\r
        concurrent_set_ap_chbw(padapter, cur_channel, cur_ch_offset, cur_bwmode);\r
 #ifdef CONFIG_CONCURRENT_MODE\r
        //TODO: need to judge the phy parameters on concurrent mode for single phy\r
        concurrent_set_ap_chbw(padapter, cur_channel, cur_ch_offset, cur_bwmode);\r
@@ -1393,7 +1392,6 @@ void start_bss_network(_adapter *padapter, u8 *pbuf)
        pmlmeext->cur_bwmode = cur_bwmode;\r
        pmlmeext->cur_ch_offset = cur_ch_offset;\r
 #endif //!CONFIG_CONCURRENT_MODE\r
        pmlmeext->cur_bwmode = cur_bwmode;\r
        pmlmeext->cur_ch_offset = cur_ch_offset;\r
 #endif //!CONFIG_CONCURRENT_MODE\r
-#endif //!CONFIG_DUALMAC_CONCURRENT\r
 \r
        pmlmeext->cur_wireless_mode = pmlmepriv->cur_network.network_type;\r
 \r
 \r
        pmlmeext->cur_wireless_mode = pmlmepriv->cur_network.network_type;\r
 \r
@@ -1495,7 +1493,7 @@ int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf,  int len)
 \r
        pbss_network->Rssi = 0;\r
 \r
 \r
        pbss_network->Rssi = 0;\r
 \r
-       _rtw_memcpy(pbss_network->MacAddress, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pbss_network->MacAddress, adapter_mac_addr(padapter), ETH_ALEN);\r
        \r
        //beacon interval\r
        p = rtw_get_beacon_interval_from_ie(ie);//ie + 8;       // 8: TimeStamp, 2: Beacon Interval 2:Capability\r
        \r
        //beacon interval\r
        p = rtw_get_beacon_interval_from_ie(ie);//ie + 8;       // 8: TimeStamp, 2: Beacon Interval 2:Capability\r
@@ -1798,8 +1796,13 @@ int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf,  int len)
                                        set_mcs_rate_by_mask(HT_CAP_ELE_RX_MCS_MAP(pht_cap), MCS_RATE_1R);\r
                                        break;\r
                                case RF_2T2R:\r
                                        set_mcs_rate_by_mask(HT_CAP_ELE_RX_MCS_MAP(pht_cap), MCS_RATE_1R);\r
                                        break;\r
                                case RF_2T2R:\r
-                               default:\r
                                        set_mcs_rate_by_mask(HT_CAP_ELE_RX_MCS_MAP(pht_cap), MCS_RATE_2R);\r
                                        set_mcs_rate_by_mask(HT_CAP_ELE_RX_MCS_MAP(pht_cap), MCS_RATE_2R);\r
+                                       break;\r
+                               case RF_3T3R:\r
+                                       set_mcs_rate_by_mask(HT_CAP_ELE_RX_MCS_MAP(pht_cap), MCS_RATE_3R);\r
+                                       break;\r
+                               default:\r
+                                       DBG_871X("[warning] rf_type %d is not expected\n", rf_type);\r
                        }\r
                        for (i = 0; i < 10; i++)\r
                                *(HT_CAP_ELE_RX_MCS_MAP(pht_cap)+i) &= padapter->mlmeextpriv.default_supported_mcs_set[i];\r
                        }\r
                        for (i = 0; i < 10; i++)\r
                                *(HT_CAP_ELE_RX_MCS_MAP(pht_cap)+i) &= padapter->mlmeextpriv.default_supported_mcs_set[i];\r
@@ -3172,7 +3175,7 @@ void rtw_ap_restore_network(_adapter *padapter)
                        if(     (padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||\r
                                (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))\r
                        {\r
                        if(     (padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||\r
                                (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))\r
                        {\r
-                               rtw_setstakey_cmd(padapter, psta, _TRUE,_FALSE);\r
+                               rtw_setstakey_cmd(padapter, psta, UNICAST_KEY,_FALSE);\r
                        }                       \r
                }\r
        }\r
                        }                       \r
                }\r
        }\r
@@ -3185,6 +3188,7 @@ void start_ap_mode(_adapter *padapter)
        struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;\r
        struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;\r
+       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);\r
        struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;\r
        \r
        pmlmepriv->update_bcn = _FALSE;\r
        struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;\r
        \r
        pmlmepriv->update_bcn = _FALSE;\r
@@ -3202,10 +3206,12 @@ void start_ap_mode(_adapter *padapter)
 #ifdef CONFIG_80211N_HT\r
        pmlmepriv->num_sta_no_ht = 0;\r
 #endif //CONFIG_80211N_HT\r
 #ifdef CONFIG_80211N_HT\r
        pmlmepriv->num_sta_no_ht = 0;\r
 #endif //CONFIG_80211N_HT\r
+       pmlmeinfo->HT_info_enable =0;\r
+       pmlmeinfo->HT_caps_enable=0;\r
+       pmlmeinfo->HT_enable=0;\r
+       \r
        pmlmepriv->num_sta_ht_20mhz = 0;\r
        pmlmepriv->num_sta_ht_20mhz = 0;\r
-\r
        pmlmepriv->olbc = _FALSE;\r
        pmlmepriv->olbc = _FALSE;\r
-\r
        pmlmepriv->olbc_ht = _FALSE;\r
        \r
 #ifdef CONFIG_80211N_HT\r
        pmlmepriv->olbc_ht = _FALSE;\r
        \r
 #ifdef CONFIG_80211N_HT\r
index 8d8c614e7b82d15b2321ddba8e00230d46934731..cfdba228ab9e9ffbbd787e07f63b7fd0a46bc995 100755 (executable)
@@ -92,8 +92,8 @@ struct beamforming_entry      *beamforming_add_entry(PADAPTER adapter, u8* ra, u16 ai
                pEntry->sound_bw = bw;\r
                if (check_fwstate(pmlmepriv, WIFI_AP_STATE))\r
                {\r
                pEntry->sound_bw = bw;\r
                if (check_fwstate(pmlmepriv, WIFI_AP_STATE))\r
                {\r
-                       u16     BSSID = ((adapter->eeprompriv.mac_addr[5] & 0xf0) >> 4) ^ \r
-                                                       (adapter->eeprompriv.mac_addr[5] & 0xf);        // BSSID[44:47] xor BSSID[40:43]\r
+                       u16     BSSID = ((*(adapter_mac_addr(adapter) + 5) & 0xf0) >> 4) ^ \r
+                               (*(adapter_mac_addr(adapter) + 5) & 0xf); /* BSSID[44:47] xor BSSID[40:43] */\r
                        pEntry->p_aid = (aid + BSSID * 32) & 0x1ff;             // (dec(A) + dec(B)*32) mod 512\r
                }               \r
                else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))\r
                        pEntry->p_aid = (aid + BSSID * 32) & 0x1ff;             // (dec(A) + dec(B)*32) mod 512\r
                }               \r
                else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))\r
@@ -145,7 +145,7 @@ void        beamforming_dym_ndpa_rate(PADAPTER adapter)
        u16     NDPARate = MGN_6M;\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(adapter);\r
        \r
        u16     NDPARate = MGN_6M;\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(adapter);\r
        \r
-       if(pHalData->dmpriv.MinUndecoratedPWDBForDM > 30) // link RSSI > 30%\r
+       if(pHalData->MinUndecoratedPWDBForDM > 30) // link RSSI > 30%\r
                NDPARate = MGN_24M;\r
        else\r
                NDPARate = MGN_6M;\r
                NDPARate = MGN_24M;\r
        else\r
                NDPARate = MGN_6M;\r
@@ -349,7 +349,7 @@ BOOLEAN     issue_ht_ndpa_packet(PADAPTER Adapter, u8 *ra, CHANNEL_WIDTH bw, u8 qidx
        SetFrameSubType(pframe, WIFI_ACTION_NOACK);\r
 \r
        _rtw_memcpy(pwlanhdr->addr1, ra, ETH_ALEN);\r
        SetFrameSubType(pframe, WIFI_ACTION_NOACK);\r
 \r
        _rtw_memcpy(pwlanhdr->addr1, ra, ETH_ALEN);\r
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(Adapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(Adapter), ETH_ALEN);\r
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);\r
 \r
        if( pmlmeext->cur_wireless_mode == WIRELESS_11B)\r
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);\r
 \r
        if( pmlmeext->cur_wireless_mode == WIRELESS_11B)\r
@@ -429,7 +429,7 @@ BOOLEAN     issue_vht_ndpa_packet(PADAPTER Adapter, u8 *ra, u16 aid, CHANNEL_WIDTH b
        SetFrameSubType(pframe, WIFI_NDPA);\r
 \r
        _rtw_memcpy(pwlanhdr->addr1, ra, ETH_ALEN);\r
        SetFrameSubType(pframe, WIFI_NDPA);\r
 \r
        _rtw_memcpy(pwlanhdr->addr1, ra, ETH_ALEN);\r
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(Adapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(Adapter), ETH_ALEN);\r
 \r
        if (IsSupported5G(pmlmeext->cur_wireless_mode) || IsSupportedHT(pmlmeext->cur_wireless_mode))\r
                aSifsTime = 16;\r
 \r
        if (IsSupported5G(pmlmeext->cur_wireless_mode) || IsSupportedHT(pmlmeext->cur_wireless_mode))\r
                aSifsTime = 16;\r
index 73f2105becede0352f8b7bc592b1dd088d3ebabd..5a03484f5144acb7268faa31dc1e9967c995b23a 100755 (executable)
 #include <drv_types.h>\r
 #include <rtw_bt_mp.h>\r
 \r
 #include <drv_types.h>\r
 #include <rtw_bt_mp.h>\r
 \r
-#ifdef CONFIG_RTL8723A\r
-#include <rtl8723a_hal.h>\r
-#elif defined(CONFIG_RTL8723B)\r
+#if defined(CONFIG_RTL8723B)\r
 #include <rtl8723b_hal.h>\r
 #endif\r
 \r
 #include <rtl8723b_hal.h>\r
 #endif\r
 \r
-#if defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8821A)\r
+#if defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8821A)\r
 void MPh2c_timeout_handle(void *FunctionContext)\r
 {\r
        PADAPTER pAdapter;\r
 void MPh2c_timeout_handle(void *FunctionContext)\r
 {\r
        PADAPTER pAdapter;\r
@@ -135,9 +133,7 @@ mptbt_SendH2c(
                        pMptCtx->MptH2cRspEvent = _FALSE;\r
                        pMptCtx->MptBtC2hEvent = _FALSE;\r
 \r
                        pMptCtx->MptH2cRspEvent = _FALSE;\r
                        pMptCtx->MptBtC2hEvent = _FALSE;\r
 \r
-#if defined(CONFIG_RTL8723A)\r
-                       rtw_hal_fill_h2c_cmd(Adapter, 70, h2cCmdLen, (pu1Byte)pH2c);\r
-#elif defined(CONFIG_RTL8723B)\r
+#if defined(CONFIG_RTL8723B)\r
                        rtl8723b_set_FwBtMpOper_cmd(Adapter, pH2c->opCode, pH2c->opCodeVer, pH2c->reqNum, pH2c->buf);\r
 #endif\r
                        pMptCtx->h2cReqNum++;\r
                        rtl8723b_set_FwBtMpOper_cmd(Adapter, pH2c->opCode, pH2c->opCodeVer, pH2c->reqNum, pH2c->buf);\r
 #endif\r
                        pMptCtx->h2cReqNum++;\r
@@ -1089,25 +1085,7 @@ mptbt_BtSetGeneral(
                                calVal = pBtReq->pParamStart[1];\r
                        break;\r
                case BT_GSET_UPDATE_BT_PATCH:\r
                                calVal = pBtReq->pParamStart[1];\r
                        break;\r
                case BT_GSET_UPDATE_BT_PATCH:\r
-                       if(IS_HARDWARE_TYPE_8723AE(Adapter) && Adapter->bFWReady)\r
-                       {\r
-                               u1Byte i;\r
-                               DBG_8192C ("[MPT], write regs for load patch\n");\r
-                               //BTFwPatch8723A(Adapter);\r
-                               PlatformEFIOWrite1Byte(Adapter, 0xCC, 0x2d);\r
-                               rtw_msleep_os(50);\r
-                               PlatformEFIOWrite4Byte(Adapter, 0x68, 0xa005000c);\r
-                               rtw_msleep_os(50);\r
-                               PlatformEFIOWrite4Byte(Adapter, 0x68, 0xb005000c);\r
-                               rtw_msleep_os(50);\r
-                               PlatformEFIOWrite1Byte(Adapter, 0xCC, 0x29);\r
-                               for(i=0; i<12; i++)\r
-                               rtw_msleep_os(100);\r
-//#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)\r
-//                             BTFwPatch8723A(Adapter);\r
-//#endif\r
-                               DBG_8192C("[MPT], load BT FW Patch finished!!!\n");\r
-                       }\r
+                       \r
                        break;\r
                default:\r
                        {\r
                        break;\r
                default:\r
                        {\r
index 157b8757066a136bcb40ccb92e60f0d1d45ae189..7930aa10ee8dcdf1fcfa70482d5f2d23275513c8 100755 (executable)
@@ -19,8 +19,9 @@
  ******************************************************************************/
 #ifdef CONFIG_BT_COEXIST
 
  ******************************************************************************/
 #ifdef CONFIG_BT_COEXIST
 
-#include <rtw_btcoex.h>
+#include <drv_types.h>
 #include <hal_btcoex.h>
 #include <hal_btcoex.h>
+#include <hal_data.h>
 
 
 void rtw_btcoex_Initialize(PADAPTER padapter)
 
 
 void rtw_btcoex_Initialize(PADAPTER padapter)
@@ -45,16 +46,38 @@ void rtw_btcoex_HAL_Initialize(PADAPTER padapter, u8 bWifiOnly)
 
 void rtw_btcoex_IpsNotify(PADAPTER padapter, u8 type)
 {
 
 void rtw_btcoex_IpsNotify(PADAPTER padapter, u8 type)
 {
+       PHAL_DATA_TYPE  pHalData;
+
+       pHalData = GET_HAL_DATA(padapter);
+       if (_FALSE == pHalData->EEPROMBluetoothCoexist)
+               return;
+
        hal_btcoex_IpsNotify(padapter, type);
 }
 
 void rtw_btcoex_LpsNotify(PADAPTER padapter, u8 type)
 {
        hal_btcoex_IpsNotify(padapter, type);
 }
 
 void rtw_btcoex_LpsNotify(PADAPTER padapter, u8 type)
 {
+       PHAL_DATA_TYPE  pHalData;
+
+       pHalData = GET_HAL_DATA(padapter);
+       if (_FALSE == pHalData->EEPROMBluetoothCoexist)
+               return;
+
        hal_btcoex_LpsNotify(padapter, type);
 }
 
 void rtw_btcoex_ScanNotify(PADAPTER padapter, u8 type)
 {
        hal_btcoex_LpsNotify(padapter, type);
 }
 
 void rtw_btcoex_ScanNotify(PADAPTER padapter, u8 type)
 {
+       PHAL_DATA_TYPE  pHalData;
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+       struct bt_coex_info *pcoex_info = &padapter->coex_info;
+       PBT_MGNT        pBtMgnt=&pcoex_info->BtMgnt;
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
+
+       pHalData = GET_HAL_DATA(padapter);
+       if (_FALSE == pHalData->EEPROMBluetoothCoexist)
+               return;
+
 #ifdef CONFIG_CONCURRENT_MODE
        if ((_FALSE == type) && (padapter->pbuddy_adapter))
        {
 #ifdef CONFIG_CONCURRENT_MODE
        if ((_FALSE == type) && (padapter->pbuddy_adapter))
        {
@@ -64,11 +87,22 @@ void rtw_btcoex_ScanNotify(PADAPTER padapter, u8 type)
        }
 #endif
 
        }
 #endif
 
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+       if(pBtMgnt->ExtConfig.bEnableWifiScanNotify)
+               rtw_btcoex_SendScanNotify(padapter, type);
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX  
+
        hal_btcoex_ScanNotify(padapter, type);
 }
 
 void rtw_btcoex_ConnectNotify(PADAPTER padapter, u8 action)
 {
        hal_btcoex_ScanNotify(padapter, type);
 }
 
 void rtw_btcoex_ConnectNotify(PADAPTER padapter, u8 action)
 {
+       PHAL_DATA_TYPE  pHalData;
+
+       pHalData = GET_HAL_DATA(padapter);
+       if (_FALSE == pHalData->EEPROMBluetoothCoexist)
+               return;
+
 #ifdef DBG_CONFIG_ERROR_RESET
        if (_TRUE == rtw_hal_sreset_inprogress(padapter))
        {
 #ifdef DBG_CONFIG_ERROR_RESET
        if (_TRUE == rtw_hal_sreset_inprogress(padapter))
        {
@@ -92,6 +126,12 @@ void rtw_btcoex_ConnectNotify(PADAPTER padapter, u8 action)
 
 void rtw_btcoex_MediaStatusNotify(PADAPTER padapter, u8 mediaStatus)
 {
 
 void rtw_btcoex_MediaStatusNotify(PADAPTER padapter, u8 mediaStatus)
 {
+       PHAL_DATA_TYPE  pHalData;
+
+       pHalData = GET_HAL_DATA(padapter);
+       if (_FALSE == pHalData->EEPROMBluetoothCoexist)
+               return;
+
 #ifdef DBG_CONFIG_ERROR_RESET
        if (_TRUE == rtw_hal_sreset_inprogress(padapter))
        {
 #ifdef DBG_CONFIG_ERROR_RESET
        if (_TRUE == rtw_hal_sreset_inprogress(padapter))
        {
@@ -121,26 +161,56 @@ void rtw_btcoex_MediaStatusNotify(PADAPTER padapter, u8 mediaStatus)
 
 void rtw_btcoex_SpecialPacketNotify(PADAPTER padapter, u8 pktType)
 {
 
 void rtw_btcoex_SpecialPacketNotify(PADAPTER padapter, u8 pktType)
 {
+       PHAL_DATA_TYPE  pHalData;
+
+       pHalData = GET_HAL_DATA(padapter);
+       if (_FALSE == pHalData->EEPROMBluetoothCoexist)
+               return;
+
        hal_btcoex_SpecialPacketNotify(padapter, pktType);
 }
 
 void rtw_btcoex_IQKNotify(PADAPTER padapter, u8 state)
 {
        hal_btcoex_SpecialPacketNotify(padapter, pktType);
 }
 
 void rtw_btcoex_IQKNotify(PADAPTER padapter, u8 state)
 {
+       PHAL_DATA_TYPE  pHalData;
+
+       pHalData = GET_HAL_DATA(padapter);
+       if (_FALSE == pHalData->EEPROMBluetoothCoexist)
+               return;
+
        hal_btcoex_IQKNotify(padapter, state);
 }
 
 void rtw_btcoex_BtInfoNotify(PADAPTER padapter, u8 length, u8 *tmpBuf)
 {
        hal_btcoex_IQKNotify(padapter, state);
 }
 
 void rtw_btcoex_BtInfoNotify(PADAPTER padapter, u8 length, u8 *tmpBuf)
 {
+       PHAL_DATA_TYPE  pHalData;
+
+       pHalData = GET_HAL_DATA(padapter);
+       if (_FALSE == pHalData->EEPROMBluetoothCoexist)
+               return;
+
        hal_btcoex_BtInfoNotify(padapter, length, tmpBuf);
 }
 
 void rtw_btcoex_SuspendNotify(PADAPTER padapter, u8 state)
 {
        hal_btcoex_BtInfoNotify(padapter, length, tmpBuf);
 }
 
 void rtw_btcoex_SuspendNotify(PADAPTER padapter, u8 state)
 {
+       PHAL_DATA_TYPE  pHalData;
+
+       pHalData = GET_HAL_DATA(padapter);
+       if (_FALSE == pHalData->EEPROMBluetoothCoexist)
+               return;
+
        hal_btcoex_SuspendNotify(padapter, state);
 }
 
 void rtw_btcoex_HaltNotify(PADAPTER padapter)
 {
        hal_btcoex_SuspendNotify(padapter, state);
 }
 
 void rtw_btcoex_HaltNotify(PADAPTER padapter)
 {
+       PHAL_DATA_TYPE  pHalData;
+
+       pHalData = GET_HAL_DATA(padapter);
+       if (_FALSE == pHalData->EEPROMBluetoothCoexist)
+               return;
+
        if (_FALSE == padapter->bup)
        {
                DBG_871X(FUNC_ADPT_FMT ": bup=%d Skip!\n",
        if (_FALSE == padapter->bup)
        {
                DBG_871X(FUNC_ADPT_FMT ": bup=%d Skip!\n",
@@ -177,14 +247,32 @@ u8 rtw_btcoex_IsBtDisabled(PADAPTER padapter)
 
 void rtw_btcoex_Handler(PADAPTER padapter)
 {
 
 void rtw_btcoex_Handler(PADAPTER padapter)
 {
+       PHAL_DATA_TYPE  pHalData;
+
+       pHalData = GET_HAL_DATA(padapter);
+
+       if (_FALSE == pHalData->EEPROMBluetoothCoexist)
+               return;
+
 #if defined(CONFIG_CONCURRENT_MODE)
        if (padapter->adapter_type != PRIMARY_ADAPTER)
                return;
 #endif
 
 #if defined(CONFIG_CONCURRENT_MODE)
        if (padapter->adapter_type != PRIMARY_ADAPTER)
                return;
 #endif
 
+
+
        hal_btcoex_Hanlder(padapter);
 }
 
        hal_btcoex_Hanlder(padapter);
 }
 
+s32 rtw_btcoex_IsBTCoexRejectAMPDU(PADAPTER padapter)
+{
+       s32 coexctrl;
+
+       coexctrl = hal_btcoex_IsBTCoexRejectAMPDU(padapter);
+
+       return coexctrl;
+}
+
 s32 rtw_btcoex_IsBTCoexCtrlAMPDUSize(PADAPTER padapter)
 {
        s32 coexctrl;
 s32 rtw_btcoex_IsBTCoexCtrlAMPDUSize(PADAPTER padapter)
 {
        s32 coexctrl;
@@ -300,64 +388,27 @@ u8 rtw_btcoex_IsBtLinkExist(PADAPTER padapter)
        return hal_btcoex_IsBtLinkExist(padapter);
 }
 
        return hal_btcoex_IsBtLinkExist(padapter);
 }
 
+void rtw_btcoex_SetBtPatchVersion(PADAPTER padapter,u16 btHciVer, u16 btPatchVer)
+{
+       hal_btcoex_SetBtPatchVersion(padapter,btHciVer,btPatchVer);
+}
+
+void rtw_btcoex_SetHciVersion(PADAPTER  padapter, u16 hciVersion)
+{
+       hal_btcoex_SetHciVersion(padapter, hciVersion);
+}
+
+void rtw_btcoex_StackUpdateProfileInfo(void) 
+{
+       hal_btcoex_StackUpdateProfileInfo();
+}
+
 // ==================================================
 // Below Functions are called by BT-Coex
 // ==================================================
 // ==================================================
 // Below Functions are called by BT-Coex
 // ==================================================
-void rtw_btcoex_RejectApAggregatedPacket(PADAPTER padapter, u8 enable)
+void rtw_btcoex_rx_ampdu_apply(PADAPTER padapter)
 {
 {
-       struct mlme_ext_info *pmlmeinfo;
-
-       pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
-
-       if (_TRUE == enable)
-       {
-               struct sta_info *psta = NULL;
-
-               pmlmeinfo->bAcceptAddbaReq = _FALSE;
-
-               if ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE) {
-                       psta = rtw_get_stainfo(&padapter->stapriv, get_bssid(&padapter->mlmepriv));
-                       if (psta)
-                               send_delba(padapter, 0, psta->hwaddr);
-               } else if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) {
-                       _irqL irqL;
-                       _list *phead, *plist;
-                       u8 peer_num = 0;
-                       char peers[NUM_STA];
-                       struct sta_priv *pstapriv = &padapter->stapriv;
-                       int i;
-
-                       _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
-                       phead = &pstapriv->asoc_list;
-                       plist = get_next(phead);
-
-                       while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
-                               int stainfo_offset;
-                               
-                               psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
-                               plist = get_next(plist);
-
-                               stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
-                               if (stainfo_offset_valid(stainfo_offset))
-                                       peers[peer_num++] = stainfo_offset;
-                       }
-       
-                       _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
-                       if (peer_num) {
-                               for (i = 0; i < peer_num; i++) {
-                                       psta = rtw_get_stainfo_by_offset(pstapriv, peers[i]);
-                                       if (psta)
-                                               send_delba(padapter, 0, psta->hwaddr);
-                               }
-                       }
-               }
-       }
-       else
-       {
-               pmlmeinfo->bAcceptAddbaReq = _TRUE;
-       }
+       rtw_rx_ampdu_apply(padapter);
 }
 
 void rtw_btcoex_LPS_Enter(PADAPTER padapter)
 }
 
 void rtw_btcoex_LPS_Enter(PADAPTER padapter)
@@ -387,5 +438,1240 @@ void rtw_btcoex_LPS_Leave(PADAPTER padapter)
                pwrpriv->bpower_saving = _FALSE;
        }
 }
                pwrpriv->bpower_saving = _FALSE;
        }
 }
+
+
+// ==================================================
+// Below Functions are BT-Coex socket related function
+// ==================================================
+
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+_adapter *pbtcoexadapter = NULL;
+u8 rtw_btcoex_btinfo_cmd(_adapter *adapter, u8 *buf, u16 len)
+{
+       struct cmd_obj *ph2c;
+       struct drvextra_cmd_parm *pdrvextra_cmd_parm;
+       u8 *btinfo;
+       struct cmd_priv *pcmdpriv = &adapter->cmdpriv;
+       u8      res = _SUCCESS;
+
+       ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
+       if (ph2c == NULL) {
+               res = _FAIL;
+               goto exit;
+       }
+
+       pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
+       if (pdrvextra_cmd_parm == NULL) {
+               rtw_mfree((u8*)ph2c, sizeof(struct cmd_obj));
+               res = _FAIL;
+               goto exit;
+       }
+
+       btinfo = rtw_zmalloc(len);
+       if (btinfo == NULL) {
+               rtw_mfree((u8*)ph2c, sizeof(struct cmd_obj));
+               rtw_mfree((u8*)pdrvextra_cmd_parm, sizeof(struct drvextra_cmd_parm));
+               res = _FAIL;
+               goto exit;
+       }
+
+       pdrvextra_cmd_parm->ec_id = BTINFO_WK_CID;
+       pdrvextra_cmd_parm->type = 0;
+       pdrvextra_cmd_parm->size = len;
+       pdrvextra_cmd_parm->pbuf = btinfo;
+
+       _rtw_memcpy(btinfo, buf, len);
+
+       init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
+
+       res = rtw_enqueue_cmd(pcmdpriv, ph2c);
+
+exit:
+       return res;
+}
+
+u8 rtw_btcoex_send_event_to_BT(_adapter *padapter, u8 status,  u8 event_code, u8 opcode_low, u8 opcode_high,u8 *dbg_msg)
+{
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0,tx_event_length = 0;
+       rtw_HCI_event *pEvent;
+       
+       pEvent = (rtw_HCI_event*)(&localBuf[0]);
+
+       pEvent->EventCode = event_code;
+       pEvent->Data[0] = 0x1;  //packet #
+       pEvent->Data[1] = opcode_low;
+       pEvent->Data[2] = opcode_high;
+       len = len + 3;
+
+               // Return parameters starts from here
+       pRetPar = &pEvent->Data[len];           
+       pRetPar[0] = status;            //status
+
+       len++;
+       pEvent->Length = len;
+
+       //total tx event length + EventCode length + sizeof(length)
+       tx_event_length = pEvent->Length + 2;
+#if 0
+       rtw_btcoex_dump_tx_msg((u8 *)pEvent, tx_event_length, dbg_msg);
+#endif         
+       status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               
+       return status;
+}
+
+/* 
+Ref: 
+Realtek Wi-Fi Driver
+Host Controller Interface for
+Bluetooth 3.0 + HS V1.4 2013/02/07
+
+Window team code & BT team code
+ */
+
+
+u8 rtw_btcoex_parse_BT_info_notify_cmd(_adapter *padapter, u8 *pcmd, u16 cmdlen)
+{
+       #define BT_INFO_LENGTH 8
+       
+       u8 curPollEnable = pcmd[0];
+       u8 curPollTime = pcmd[1];
+       u8 btInfoReason = pcmd[2];
+       u8 btInfoLen = pcmd[3];
+       u8 btinfo[BT_INFO_LENGTH];
+
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0,tx_event_length = 0;
+       RTW_HCI_STATUS status = HCI_STATUS_SUCCESS;
+       rtw_HCI_event *pEvent;
+
+       DBG_871X("%s\n",__func__);
+       DBG_871X("current Poll Enable: %d, currrent Poll Time: %d\n",curPollEnable,curPollTime);
+       DBG_871X("BT Info reason: %d, BT Info length: %d\n",btInfoReason,btInfoLen);
+       /*DBG_871X("%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n"
+               ,pcmd[4],pcmd[5],pcmd[6],pcmd[7],pcmd[8],pcmd[9],pcmd[10],pcmd[11]);*/
+
+       _rtw_memset(btinfo, 0, BT_INFO_LENGTH);
+       
+#if 1
+       if(BT_INFO_LENGTH != btInfoLen)
+       {
+               status = HCI_STATUS_INVALID_HCI_CMD_PARA_VALUE;
+               DBG_871X("Error BT Info Length: %d\n",btInfoLen);
+               //return _FAIL;
+       }
+       else
+#endif
+       {
+               if(0x1 == btInfoReason || 0x2 == btInfoReason)
+               {
+                       _rtw_memcpy(btinfo, &pcmd[4], btInfoLen);
+                       btinfo[0] = btInfoReason;
+                       rtw_btcoex_btinfo_cmd(padapter,btinfo,btInfoLen);
+               }
+               else
+               {
+                       DBG_871X("Other BT info reason\n");
+               }
+       }
+
+       //send complete event to BT
+       {
+
+               pEvent = (rtw_HCI_event*)(&localBuf[0]);
+
+               pEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
+               pEvent->Data[0] = 0x1;  //packet #
+               pEvent->Data[1] = HCIOPCODELOW(HCI_BT_INFO_NOTIFY, OGF_EXTENSION);
+               pEvent->Data[2] = HCIOPCODEHIGHT(HCI_BT_INFO_NOTIFY, OGF_EXTENSION);
+               len = len + 3;
+
+                       // Return parameters starts from here
+               pRetPar = &pEvent->Data[len];           
+               pRetPar[0] = status;            //status
+
+               len++;
+               pEvent->Length = len;
+
+                       //total tx event length + EventCode length + sizeof(length)
+               tx_event_length = pEvent->Length + 2;
+#if 0
+               rtw_btcoex_dump_tx_msg((u8 *)pEvent, tx_event_length,"BT_info_event");
+#endif         
+               status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               
+               return status;
+                       //bthci_IndicateEvent(Adapter, PPacketIrpEvent, len+2);
+       }
+}
+
+u8 rtw_btcoex_parse_BT_patch_ver_info_cmd(_adapter *padapter, u8 *pcmd, u16 cmdlen)
+{
+       RTW_HCI_STATUS status=HCI_STATUS_SUCCESS;
+       u16             btPatchVer=0x0, btHciVer=0x0;
+       //u16           *pU2tmp;
+       
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0, tx_event_length =0;
+       rtw_HCI_event *pEvent;
+
+       btHciVer = pcmd[0] | pcmd[1]<<8;
+       btPatchVer = pcmd[2] | pcmd[3]<<8;
+
+
+       DBG_871X("%s, cmd:%02x %02x %02x %02x\n",__func__, pcmd[0] ,pcmd[1] ,pcmd[2] ,pcmd[3]);
+       DBG_871X("%s, HCI Ver:%d, Patch Ver:%d\n",__func__, btHciVer,btPatchVer);
+       
+       rtw_btcoex_SetBtPatchVersion(padapter,btHciVer,btPatchVer);
+
+
+       //send complete event to BT
+       {
+               pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+
+               pEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
+               pEvent->Data[0] = 0x1;  //packet #
+               pEvent->Data[1] = HCIOPCODELOW(HCI_BT_PATCH_VERSION_NOTIFY, OGF_EXTENSION);
+               pEvent->Data[2] = HCIOPCODEHIGHT(HCI_BT_PATCH_VERSION_NOTIFY, OGF_EXTENSION);
+               len = len + 3;
+
+               // Return parameters starts from here
+               pRetPar = &pEvent->Data[len];           
+               pRetPar[0] = status;            //status
+
+               len++;
+               pEvent->Length = len;
+
+               //total tx event length + EventCode length + sizeof(length)
+               tx_event_length = pEvent->Length + 2;
+#if 0
+               rtw_btcoex_dump_tx_msg((u8 *)pEvent, tx_event_length,"BT_patch_event");
+#endif
+               status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               return status;
+               //bthci_IndicateEvent(Adapter, PPacketIrpEvent, len+2);
+       }
+}
+
+u8 rtw_btcoex_parse_HCI_Ver_notify_cmd(_adapter *padapter, u8 *pcmd, u16 cmdlen)
+{
+       RTW_HCI_STATUS status=HCI_STATUS_SUCCESS;
+       u16 hciver = pcmd[0] | pcmd[1] <<8;
+       
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0, tx_event_length =0;
+       rtw_HCI_event *pEvent;
+       
+       struct bt_coex_info *pcoex_info = &padapter->coex_info;
+       PBT_MGNT        pBtMgnt=&pcoex_info->BtMgnt;
+       pBtMgnt->ExtConfig.HCIExtensionVer = hciver;
+       DBG_871X("%s, HCI Version: %d\n",__func__,pBtMgnt->ExtConfig.HCIExtensionVer);
+       if(pBtMgnt->ExtConfig.HCIExtensionVer  < 4)
+       {
+               status = HCI_STATUS_INVALID_HCI_CMD_PARA_VALUE;
+               DBG_871X("%s, Version = %d, HCI Version < 4\n",__func__,pBtMgnt->ExtConfig.HCIExtensionVer );
+       }
+       else
+       {
+               rtw_btcoex_SetHciVersion(padapter,hciver);
+       }
+       //send complete event to BT
+       {
+               pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+
+               pEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
+               pEvent->Data[0] = 0x1;  //packet #
+               pEvent->Data[1] = HCIOPCODELOW(HCI_EXTENSION_VERSION_NOTIFY, OGF_EXTENSION);
+               pEvent->Data[2] = HCIOPCODEHIGHT(HCI_EXTENSION_VERSION_NOTIFY, OGF_EXTENSION);
+               len = len + 3;
+
+               // Return parameters starts from here
+               pRetPar = &pEvent->Data[len];           
+               pRetPar[0] = status;            //status
+
+               len++;
+               pEvent->Length = len;
+
+               //total tx event length + EventCode length + sizeof(length)
+               tx_event_length = pEvent->Length + 2;
+
+               status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               return status;
+               //bthci_IndicateEvent(Adapter, PPacketIrpEvent, len+2);
+       }
+       
+}
+
+u8 rtw_btcoex_parse_WIFI_scan_notify_cmd(_adapter *padapter, u8 *pcmd, u16 cmdlen)
+{
+       RTW_HCI_STATUS status=HCI_STATUS_SUCCESS;
+
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0, tx_event_length =0;
+       rtw_HCI_event *pEvent;
+       
+       struct bt_coex_info *pcoex_info = &padapter->coex_info;
+       PBT_MGNT        pBtMgnt=&pcoex_info->BtMgnt;
+       pBtMgnt->ExtConfig.bEnableWifiScanNotify= pcmd[0];
+       DBG_871X("%s, bEnableWifiScanNotify: %d\n",__func__,pBtMgnt->ExtConfig.bEnableWifiScanNotify);
+       
+       //send complete event to BT
+       {
+               pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+
+               pEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
+               pEvent->Data[0] = 0x1;  //packet #
+               pEvent->Data[1] = HCIOPCODELOW(HCI_ENABLE_WIFI_SCAN_NOTIFY, OGF_EXTENSION);
+               pEvent->Data[2] = HCIOPCODEHIGHT(HCI_ENABLE_WIFI_SCAN_NOTIFY, OGF_EXTENSION);
+               len = len + 3;
+
+               // Return parameters starts from here
+               pRetPar = &pEvent->Data[len];           
+               pRetPar[0] = status;            //status
+
+               len++;
+               pEvent->Length = len;
+
+               //total tx event length + EventCode length + sizeof(length)
+               tx_event_length = pEvent->Length + 2;
+
+               status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               return status;
+               //bthci_IndicateEvent(Adapter, PPacketIrpEvent, len+2);
+       }
+}
+
+u8 rtw_btcoex_parse_HCI_link_status_notify_cmd(_adapter *padapter, u8 *pcmd, u16 cmdlen)
+{
+       RTW_HCI_STATUS  status=HCI_STATUS_SUCCESS;
+       struct bt_coex_info     *pcoex_info=&padapter->coex_info;
+       PBT_MGNT        pBtMgnt=&pcoex_info->BtMgnt;
+       //PBT_DBG               pBtDbg=&padapter->MgntInfo.BtInfo.BtDbg;
+       u8              i, numOfHandle=0, numOfAcl=0;
+       u16             conHandle;
+       u8              btProfile, btCoreSpec, linkRole;
+       u8              *pTriple;
+
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0, tx_event_length =0;
+       rtw_HCI_event *pEvent;
+       
+       //pBtDbg->dbgHciInfo.hciCmdCntLinkStatusNotify++;
+       //RT_DISP_DATA(FIOCTL, IOCTL_BT_HCICMD_EXT, "LinkStatusNotify, Hex Data :\n", 
+       //              &pHciCmd->Data[0], pHciCmd->Length);
+
+       DBG_871X("BTLinkStatusNotify\n");
+
+       // Current only RTL8723 support this command.
+       //pBtMgnt->bSupportProfile = TRUE;
+       pBtMgnt->bSupportProfile = _FALSE;
+
+       pBtMgnt->ExtConfig.NumberOfACL = 0;
+       pBtMgnt->ExtConfig.NumberOfSCO = 0;
+       
+       numOfHandle = pcmd[0];
+       //RT_DISP(FIOCTL, IOCTL_BT_HCICMD_EXT, ("numOfHandle = 0x%x\n", numOfHandle));
+       //RT_DISP(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCIExtensionVer = %d\n", pBtMgnt->ExtConfig.HCIExtensionVer));
+       DBG_871X("numOfHandle = 0x%x\n", numOfHandle);
+       DBG_871X("HCIExtensionVer = %d\n", pBtMgnt->ExtConfig.HCIExtensionVer);
+       
+       pTriple = &pcmd[1];
+       for(i=0; i<numOfHandle; i++)
+       {       
+               if(pBtMgnt->ExtConfig.HCIExtensionVer < 1)
+               {
+                       conHandle = *((u8 *)&pTriple[0]);
+                       btProfile = pTriple[2];
+                       btCoreSpec = pTriple[3];
+                       if(BT_PROFILE_SCO == btProfile)
+                       {
+                               pBtMgnt->ExtConfig.NumberOfSCO++;
+                       }
+                       else
+                       {
+                               pBtMgnt->ExtConfig.NumberOfACL++;                       
+                               pBtMgnt->ExtConfig.aclLink[i].ConnectHandle = conHandle;
+                               pBtMgnt->ExtConfig.aclLink[i].BTProfile = btProfile;
+                               pBtMgnt->ExtConfig.aclLink[i].BTCoreSpec = btCoreSpec;
+                       }
+                       //RT_DISP(FIOCTL, IOCTL_BT_HCICMD_EXT, 
+                       //      ("Connection_Handle=0x%x, BTProfile=%d, BTSpec=%d\n",
+                       //              conHandle, btProfile, btCoreSpec));
+                       DBG_871X("Connection_Handle=0x%x, BTProfile=%d, BTSpec=%d\n", conHandle, btProfile, btCoreSpec);
+                       pTriple += 4;
+               }
+               else if(pBtMgnt->ExtConfig.HCIExtensionVer >= 1)
+               {
+                       conHandle = *((pu2Byte)&pTriple[0]);
+                       btProfile = pTriple[2];
+                       btCoreSpec = pTriple[3];
+                       linkRole = pTriple[4];
+                       if(BT_PROFILE_SCO == btProfile)
+                       {
+                               pBtMgnt->ExtConfig.NumberOfSCO++;
+                       }
+                       else
+                       {
+                               pBtMgnt->ExtConfig.NumberOfACL++;                       
+                               pBtMgnt->ExtConfig.aclLink[i].ConnectHandle = conHandle;
+                               pBtMgnt->ExtConfig.aclLink[i].BTProfile = btProfile;
+                               pBtMgnt->ExtConfig.aclLink[i].BTCoreSpec = btCoreSpec;
+                               pBtMgnt->ExtConfig.aclLink[i].linkRole = linkRole;
+                       }
+                       //RT_DISP(FIOCTL, IOCTL_BT_HCICMD_EXT, 
+                       DBG_871X("Connection_Handle=0x%x, BTProfile=%d, BTSpec=%d, LinkRole=%d\n",
+                               conHandle, btProfile, btCoreSpec, linkRole);
+                       pTriple += 5;
+               }       
+       }
+       rtw_btcoex_StackUpdateProfileInfo();
+
+               //send complete event to BT
+       {
+               pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+
+               pEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
+               pEvent->Data[0] = 0x1;  //packet #
+               pEvent->Data[1] = HCIOPCODELOW(HCI_LINK_STATUS_NOTIFY, OGF_EXTENSION);
+               pEvent->Data[2] = HCIOPCODEHIGHT(HCI_LINK_STATUS_NOTIFY, OGF_EXTENSION);
+               len = len + 3;
+
+               // Return parameters starts from here
+               pRetPar = &pEvent->Data[len];           
+               pRetPar[0] = status;            //status
+
+               len++;
+               pEvent->Length = len;
+
+               //total tx event length + EventCode length + sizeof(length)
+               tx_event_length = pEvent->Length + 2;
+
+               status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               return status;
+               //bthci_IndicateEvent(Adapter, PPacketIrpEvent, len+2);
+       }
+       
+       
+}
+
+u8 rtw_btcoex_parse_HCI_BT_coex_notify_cmd(_adapter *padapter, u8 *pcmd, u16 cmdlen)
+{
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0, tx_event_length =0;
+       rtw_HCI_event *pEvent;
+       RTW_HCI_STATUS  status=HCI_STATUS_SUCCESS;
+
+       {
+               pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+
+               pEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
+               pEvent->Data[0] = 0x1;  //packet #
+               pEvent->Data[1] = HCIOPCODELOW(HCI_BT_COEX_NOTIFY, OGF_EXTENSION);
+               pEvent->Data[2] = HCIOPCODEHIGHT(HCI_BT_COEX_NOTIFY, OGF_EXTENSION);
+               len = len + 3;
+
+               // Return parameters starts from here
+               pRetPar = &pEvent->Data[len];           
+               pRetPar[0] = status;            //status
+
+               len++;
+               pEvent->Length = len;
+
+               //total tx event length + EventCode length + sizeof(length)
+               tx_event_length = pEvent->Length + 2;
+
+               status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               return status;
+               //bthci_IndicateEvent(Adapter, PPacketIrpEvent, len+2);
+       }
+}
+
+u8 rtw_btcoex_parse_HCI_BT_operation_notify_cmd(_adapter *padapter, u8 *pcmd, u16 cmdlen)
+{
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0, tx_event_length =0;
+       rtw_HCI_event *pEvent;
+       RTW_HCI_STATUS  status=HCI_STATUS_SUCCESS;
+
+       DBG_871X("%s, OP code: %d\n",__func__,pcmd[0]);
+
+       switch(pcmd[0])
+       {
+               case HCI_BT_OP_NONE:
+                       DBG_871X("[bt operation] : Operation None!!\n");
+                       break;
+               case HCI_BT_OP_INQUIRY_START:
+                       DBG_871X("[bt operation] : Inquiry start!!\n");
+                       break;
+               case HCI_BT_OP_INQUIRY_FINISH:
+                       DBG_871X("[bt operation] : Inquiry finished!!\n");
+                       break;
+               case HCI_BT_OP_PAGING_START:
+                       DBG_871X("[bt operation] : Paging is started!!\n");
+                       break;
+               case HCI_BT_OP_PAGING_SUCCESS:
+                       DBG_871X("[bt operation] : Paging complete successfully!!\n");
+                       break;
+               case HCI_BT_OP_PAGING_UNSUCCESS:
+                       DBG_871X("[bt operation] : Paging complete unsuccessfully!!\n");
+                       break;
+               case HCI_BT_OP_PAIRING_START:
+                       DBG_871X("[bt operation] : Pairing start!!\n");
+                       break;
+               case HCI_BT_OP_PAIRING_FINISH:
+                       DBG_871X("[bt operation] : Pairing finished!!\n");
+                       break;
+               case HCI_BT_OP_BT_DEV_ENABLE:
+                       DBG_871X("[bt operation] : BT Device is enabled!!\n");
+                       break;
+               case HCI_BT_OP_BT_DEV_DISABLE:
+                       DBG_871X("[bt operation] : BT Device is disabled!!\n");
+                       break;
+               default:
+                       DBG_871X("[bt operation] : Unknown, error!!\n");
+                       break;
+       }
+
+                       //send complete event to BT
+       {
+               pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+
+               pEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
+               pEvent->Data[0] = 0x1;  //packet #
+               pEvent->Data[1] = HCIOPCODELOW(HCI_BT_OPERATION_NOTIFY, OGF_EXTENSION);
+               pEvent->Data[2] = HCIOPCODEHIGHT(HCI_BT_OPERATION_NOTIFY, OGF_EXTENSION);
+               len = len + 3;
+
+               // Return parameters starts from here
+               pRetPar = &pEvent->Data[len];           
+               pRetPar[0] = status;            //status
+
+               len++;
+               pEvent->Length = len;
+
+               //total tx event length + EventCode length + sizeof(length)
+               tx_event_length = pEvent->Length + 2;
+
+               status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               return status;
+               //bthci_IndicateEvent(Adapter, PPacketIrpEvent, len+2);
+       }
+}
+
+u8 rtw_btcoex_parse_BT_AFH_MAP_notify_cmd(_adapter *padapter, u8 *pcmd, u16 cmdlen)
+{
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0, tx_event_length =0;
+       rtw_HCI_event *pEvent;
+       RTW_HCI_STATUS  status=HCI_STATUS_SUCCESS;
+
+       {
+               pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+
+               pEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
+               pEvent->Data[0] = 0x1;  //packet #
+               pEvent->Data[1] = HCIOPCODELOW(HCI_BT_AFH_MAP_NOTIFY, OGF_EXTENSION);
+               pEvent->Data[2] = HCIOPCODEHIGHT(HCI_BT_AFH_MAP_NOTIFY, OGF_EXTENSION);
+               len = len + 3;
+
+               // Return parameters starts from here
+               pRetPar = &pEvent->Data[len];           
+               pRetPar[0] = status;            //status
+
+               len++;
+               pEvent->Length = len;
+
+               //total tx event length + EventCode length + sizeof(length)
+               tx_event_length = pEvent->Length + 2;
+
+               status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               return status;
+               //bthci_IndicateEvent(Adapter, PPacketIrpEvent, len+2);
+       }
+}
+
+u8 rtw_btcoex_parse_BT_register_val_notify_cmd(_adapter *padapter, u8 *pcmd, u16 cmdlen)
+{
+       
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0, tx_event_length =0;
+       rtw_HCI_event *pEvent;
+       RTW_HCI_STATUS  status=HCI_STATUS_SUCCESS;
+
+       {
+               pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+
+               pEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
+               pEvent->Data[0] = 0x1;  //packet #
+               pEvent->Data[1] = HCIOPCODELOW(HCI_BT_REGISTER_VALUE_NOTIFY, OGF_EXTENSION);
+               pEvent->Data[2] = HCIOPCODEHIGHT(HCI_BT_REGISTER_VALUE_NOTIFY, OGF_EXTENSION);
+               len = len + 3;
+
+               // Return parameters starts from here
+               pRetPar = &pEvent->Data[len];           
+               pRetPar[0] = status;            //status
+
+               len++;
+               pEvent->Length = len;
+
+               //total tx event length + EventCode length + sizeof(length)
+               tx_event_length = pEvent->Length + 2;
+
+               status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               return status;
+               //bthci_IndicateEvent(Adapter, PPacketIrpEvent, len+2);
+       }
+}
+
+u8 rtw_btcoex_parse_HCI_BT_abnormal_notify_cmd(_adapter *padapter, u8 *pcmd, u16 cmdlen)
+{
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0, tx_event_length =0;
+       rtw_HCI_event *pEvent;
+       RTW_HCI_STATUS  status=HCI_STATUS_SUCCESS;
+
+       {
+               pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+
+               pEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
+               pEvent->Data[0] = 0x1;  //packet #
+               pEvent->Data[1] = HCIOPCODELOW(HCI_BT_ABNORMAL_NOTIFY, OGF_EXTENSION);
+               pEvent->Data[2] = HCIOPCODEHIGHT(HCI_BT_ABNORMAL_NOTIFY, OGF_EXTENSION);
+               len = len + 3;
+
+               // Return parameters starts from here
+               pRetPar = &pEvent->Data[len];           
+               pRetPar[0] = status;            //status
+
+               len++;
+               pEvent->Length = len;
+
+               //total tx event length + EventCode length + sizeof(length)
+               tx_event_length = pEvent->Length + 2;
+
+               status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               return status;
+               //bthci_IndicateEvent(Adapter, PPacketIrpEvent, len+2);
+       }
+}
+
+u8 rtw_btcoex_parse_HCI_query_RF_status_cmd(_adapter *padapter, u8 *pcmd, u16 cmdlen)
+{
+       u8 localBuf[6] = "";
+       u8 *pRetPar;
+       u8      len=0, tx_event_length =0;
+       rtw_HCI_event *pEvent;
+       RTW_HCI_STATUS  status=HCI_STATUS_SUCCESS;
+
+       {
+               pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+
+               pEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
+               pEvent->Data[0] = 0x1;  //packet #
+               pEvent->Data[1] = HCIOPCODELOW(HCI_QUERY_RF_STATUS, OGF_EXTENSION);
+               pEvent->Data[2] = HCIOPCODEHIGHT(HCI_QUERY_RF_STATUS, OGF_EXTENSION);
+               len = len + 3;
+
+               // Return parameters starts from here
+               pRetPar = &pEvent->Data[len];           
+               pRetPar[0] = status;            //status
+
+               len++;
+               pEvent->Length = len;
+
+               //total tx event length + EventCode length + sizeof(length)
+               tx_event_length = pEvent->Length + 2;
+
+               status = rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+               return status;
+               //bthci_IndicateEvent(Adapter, PPacketIrpEvent, len+2);
+       }
+}
+
+/*****************************************
+* HCI cmd format :
+*| 15 - 0                                              |       
+*| OPcode (OCF|OGF<<10)                |
+*| 15 - 8              |7 - 0                  |
+*|Cmd para     |Cmd para Length        |
+*|Cmd para......                               |
+******************************************/
+
+//bit 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
+//      |      OCF                                  |     OGF       |
+void rtw_btcoex_parse_hci_extend_cmd(_adapter *padapter, u8 *pcmd, u16 len,const u16 hci_OCF)
+{
+
+       DBG_871X("%s: OCF: %x\n",__func__,hci_OCF);
+       switch(hci_OCF)
+       {
+               case HCI_EXTENSION_VERSION_NOTIFY:
+                       DBG_871X("HCI_EXTENSION_VERSION_NOTIFY\n");
+                       rtw_btcoex_parse_HCI_Ver_notify_cmd(padapter,pcmd, len);
+                       break;
+               case HCI_LINK_STATUS_NOTIFY:
+                       DBG_871X("HCI_LINK_STATUS_NOTIFY\n");
+                       rtw_btcoex_parse_HCI_link_status_notify_cmd(padapter,pcmd, len);
+                       break;
+               case HCI_BT_OPERATION_NOTIFY:
+                       // only for 8723a 2ant
+                       DBG_871X("HCI_BT_OPERATION_NOTIFY\n");
+                       rtw_btcoex_parse_HCI_BT_operation_notify_cmd(padapter,pcmd, len);
+                       //
+                       break;
+               case HCI_ENABLE_WIFI_SCAN_NOTIFY:
+                       DBG_871X("HCI_ENABLE_WIFI_SCAN_NOTIFY\n");
+                       rtw_btcoex_parse_WIFI_scan_notify_cmd(padapter,pcmd, len);
+                       break;
+               case HCI_QUERY_RF_STATUS:
+                       // only for 8723b 2ant
+                       DBG_871X("HCI_QUERY_RF_STATUS\n");
+                       rtw_btcoex_parse_HCI_query_RF_status_cmd(padapter,pcmd, len);
+                       break;
+               case HCI_BT_ABNORMAL_NOTIFY:
+                       DBG_871X("HCI_BT_ABNORMAL_NOTIFY\n");
+                       rtw_btcoex_parse_HCI_BT_abnormal_notify_cmd(padapter,pcmd, len);
+                       break;
+               case HCI_BT_INFO_NOTIFY:
+                       DBG_871X("HCI_BT_INFO_NOTIFY\n");
+                       rtw_btcoex_parse_BT_info_notify_cmd(padapter,pcmd, len);
+                       break;
+               case HCI_BT_COEX_NOTIFY:
+                       DBG_871X("HCI_BT_COEX_NOTIFY\n");
+                       rtw_btcoex_parse_HCI_BT_coex_notify_cmd(padapter,pcmd, len);
+                       break;
+               case HCI_BT_PATCH_VERSION_NOTIFY:
+                       DBG_871X("HCI_BT_PATCH_VERSION_NOTIFY\n");
+                       rtw_btcoex_parse_BT_patch_ver_info_cmd(padapter,pcmd, len);
+                       break;
+               case HCI_BT_AFH_MAP_NOTIFY:
+                       DBG_871X("HCI_BT_AFH_MAP_NOTIFY\n");
+                       rtw_btcoex_parse_BT_AFH_MAP_notify_cmd(padapter,pcmd, len);
+                       break;
+               case HCI_BT_REGISTER_VALUE_NOTIFY:
+                       DBG_871X("HCI_BT_REGISTER_VALUE_NOTIFY\n");
+                       rtw_btcoex_parse_BT_register_val_notify_cmd(padapter,pcmd, len);
+                       break;
+               default:
+                       DBG_871X("ERROR!!! Unknown OCF: %x\n",hci_OCF);
+                       break;
+                       
+       }
+}
+
+void rtw_btcoex_parse_hci_cmd(_adapter *padapter, u8 *pcmd, u16 len)
+{
+       u16 opcode = pcmd[0] | pcmd[1]<<8;
+       u16 hci_OGF = HCI_OGF(opcode);
+       u16 hci_OCF = HCI_OCF(opcode);
+       u8 cmdlen = len -3;
+       u8 pare_len = pcmd[2];
+
+       DBG_871X("%s\n",__func__);
+       DBG_871X("OGF: %x,OCF: %x\n",hci_OGF,hci_OCF);
+       switch(hci_OGF)
+       {
+               case OGF_EXTENSION:
+                       DBG_871X("HCI_EXTENSION_CMD_OGF\n");
+                       rtw_btcoex_parse_hci_extend_cmd(padapter, &pcmd[3], cmdlen, hci_OCF);
+                       break;
+               default:
+                       DBG_871X("Other OGF: %x\n",hci_OGF);
+                       break;
+       }
+}
+
+u16 rtw_btcoex_parse_recv_data(u8 *msg, u8 msg_size)
+{
+       u8 cmp_msg1[32] = attend_ack;
+       u8 cmp_msg2[32] = leave_ack;
+       u8 cmp_msg3[32] = bt_leave;
+       u8 cmp_msg4[32] = invite_req;
+       u8 cmp_msg5[32] = attend_req;
+       u8 cmp_msg6[32] = invite_rsp;
+       u8 res = OTHER;
+       
+       if (_rtw_memcmp(cmp_msg1, msg, msg_size) == _TRUE) {
+               /*DBG_871X("%s, msg:%s\n",__func__,msg);*/
+               res = RX_ATTEND_ACK;
+       } else if (_rtw_memcmp(cmp_msg2, msg, msg_size) == _TRUE) {
+               /*DBG_871X("%s, msg:%s\n",__func__,msg);*/
+               res = RX_LEAVE_ACK;
+       } else if (_rtw_memcmp(cmp_msg3, msg, msg_size) == _TRUE) {
+               /*DBG_871X("%s, msg:%s\n",__func__,msg);*/
+               res = RX_BT_LEAVE;
+       } else if (_rtw_memcmp(cmp_msg4, msg, msg_size) == _TRUE) {
+               /*DBG_871X("%s, msg:%s\n",__func__,msg);*/
+               res = RX_INVITE_REQ;
+       } else if (_rtw_memcmp(cmp_msg5, msg, msg_size) == _TRUE) {
+               res = RX_ATTEND_REQ;
+       } else if (_rtw_memcmp(cmp_msg6, msg, msg_size) == _TRUE) {
+               res = RX_INVITE_RSP;
+       } else {
+               DBG_871X("%s, %s\n", __func__, msg);
+               res = OTHER;
+       }
+       
+       DBG_871X("%s, res:%d\n", __func__, res);
+       
+       return res;
+}
+
+void rtw_btcoex_recvmsgbysocket(void *data)
+{
+       u8 recv_data[255];
+       u8 tx_msg[255] = leave_ack;
+       u32 len = 0;
+       
+       u16 recv_length = 0;
+       u16 parse_res = 0;
+#if 0
+       u8 para_len = 0, polling_enable = 0, poling_interval = 0, reason = 0, btinfo_len = 0;
+       u8 btinfo[BT_INFO_LEN] = {0};
+#endif
+
+       struct bt_coex_info *pcoex_info = NULL;
+       struct sock *sk = NULL;
+       struct sk_buff *skb = NULL;
+       
+       DBG_871X("%s\n",__func__);
+
+       if (pbtcoexadapter == NULL) {
+               DBG_871X("%s: btcoexadapter NULL!\n", __func__);
+               return;
+       }
+
+       pcoex_info = &pbtcoexadapter->coex_info;
+       sk = pcoex_info->sk_store;
+
+       if (sk == NULL) {
+               DBG_871X("%s: critical error when receive socket data!\n", __func__);
+               return;
+       }
+       
+       len = skb_queue_len(&sk->sk_receive_queue);
+       while (len > 0) {
+               skb = skb_dequeue(&sk->sk_receive_queue);
+
+               /*important: cut the udp header from skb->data! header length is 8 byte*/
+               recv_length = skb->len-8;
+               _rtw_memset(recv_data, 0, sizeof(recv_data));
+               _rtw_memcpy(recv_data, skb->data+8, recv_length);
+               
+               parse_res = rtw_btcoex_parse_recv_data(recv_data, recv_length);
+/*
+               if (RX_ATTEND_ACK == parse_res) {
+                       //attend ack 
+                       pcoex_info->BT_attend = _TRUE;
+                       DBG_871X("RX_ATTEND_ACK!,sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);
+               } else if (RX_ATTEND_REQ == parse_res) {
+                       //attend req from BT 
+                       pcoex_info->BT_attend = _TRUE;
+                       DBG_871X("RX_BT_ATTEND_REQ!,sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);
+                       rtw_btcoex_sendmsgbysocket(pbtcoexadapter, attend_ack, sizeof(attend_ack), _FALSE);
+               } else if (RX_INVITE_REQ == parse_res) {
+                       //invite req from BT
+                       pcoex_info->BT_attend = _TRUE;
+                       DBG_871X("RX_INVITE_REQ!,sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);
+                       rtw_btcoex_sendmsgbysocket(pbtcoexadapter, invite_rsp, sizeof(invite_rsp), _FALSE);
+               } else if (RX_INVITE_RSP == parse_res) {
+                       //invite rsp
+                       pcoex_info->BT_attend = _TRUE;
+                       DBG_871X("RX_INVITE_RSP!,sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);
+               } else if (RX_LEAVE_ACK == parse_res) {
+                       //mean BT know wifi  will leave
+                       pcoex_info->BT_attend = _FALSE;
+                       DBG_871X("RX_LEAVE_ACK!,sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);                   
+               } else if (RX_BT_LEAVE == parse_res) {
+                       //BT leave
+                       rtw_btcoex_sendmsgbysocket(pbtcoexadapter, leave_ack, sizeof(leave_ack), _FALSE); // no ack
+                       pcoex_info->BT_attend = _FALSE;
+                       DBG_871X("RX_BT_LEAVE!sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);                     
+               } else {
+                       //todo: check if recv data are really hci cmds
+                       if (_TRUE == pcoex_info->BT_attend)
+                               rtw_btcoex_parse_hci_cmd(pbtcoexadapter, recv_data, recv_length);
+               }
+*/
+               switch (parse_res) {
+               case RX_ATTEND_ACK:
+                       /* attend ack */
+                       pcoex_info->BT_attend = _TRUE;
+                       DBG_871X("RX_ATTEND_ACK!,sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);
+                       break;
+
+               case RX_ATTEND_REQ:
+                       pcoex_info->BT_attend = _TRUE;
+                       DBG_871X("RX_BT_ATTEND_REQ!,sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);
+                       rtw_btcoex_sendmsgbysocket(pbtcoexadapter, attend_ack, sizeof(attend_ack), _FALSE);
+                       break;
+
+               case RX_INVITE_REQ:
+                       /* invite req from BT */
+                       pcoex_info->BT_attend = _TRUE;
+                       DBG_871X("RX_INVITE_REQ!,sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);
+                       rtw_btcoex_sendmsgbysocket(pbtcoexadapter, invite_rsp, sizeof(invite_rsp), _FALSE);
+                       break;
+
+               case RX_INVITE_RSP:
+                        /*invite rsp*/
+                       pcoex_info->BT_attend = _TRUE;
+                       DBG_871X("RX_INVITE_RSP!,sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);
+                       break;
+
+               case RX_LEAVE_ACK:
+                       /* mean BT know wifi  will leave */
+                       pcoex_info->BT_attend = _FALSE;
+                       DBG_871X("RX_LEAVE_ACK!,sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);   
+                       break;
+
+               case RX_BT_LEAVE:
+                       /* BT leave */
+                       rtw_btcoex_sendmsgbysocket(pbtcoexadapter, leave_ack, sizeof(leave_ack), _FALSE); /* no ack */
+                       pcoex_info->BT_attend = _FALSE;
+                       DBG_871X("RX_BT_LEAVE!sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);             
+                       break;
+
+               default:
+                       if (_TRUE == pcoex_info->BT_attend)
+                               rtw_btcoex_parse_hci_cmd(pbtcoexadapter, recv_data, recv_length);
+                       else
+                               DBG_871X("ERROR!! BT is UP\n");
+                       break;
+
+               }
+               
+               len--;
+               kfree_skb(skb);
+       }
+}
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0))
+void rtw_btcoex_recvmsg_init(struct sock *sk_in, s32 bytes)
+#else
+void rtw_btcoex_recvmsg_init(struct sock *sk_in)
+#endif
+{
+       struct bt_coex_info *pcoex_info = NULL;
+       
+       if (pbtcoexadapter == NULL) {
+               DBG_871X("%s: btcoexadapter NULL\n", __func__);
+               return;
+       }
+       pcoex_info = &pbtcoexadapter->coex_info;
+       pcoex_info->sk_store = sk_in;
+       if (pcoex_info->btcoex_wq != NULL)
+               queue_delayed_work(pcoex_info->btcoex_wq, &pcoex_info->recvmsg_work, 0);
+       else
+               DBG_871X("%s: BTCOEX workqueue NULL\n", __func__);
+}
+
+u8 rtw_btcoex_sendmsgbysocket(_adapter *padapter, u8 *msg, u8 msg_size, bool force)
+{
+       u8 error; 
+       struct msghdr   udpmsg; 
+       mm_segment_t    oldfs; 
+       struct iovec    iov; 
+       struct bt_coex_info *pcoex_info = &padapter->coex_info;
+
+       DBG_871X("%s: msg:%s, force:%s\n", __func__, msg, force == _TRUE?"TRUE":"FALSE");
+       if (_FALSE == force) {
+               if (_FALSE == pcoex_info->BT_attend) {
+                       DBG_871X("TX Blocked: WiFi-BT disconnected\n");                 
+                       return _FAIL;
+               }
+       }
+               
+       iov.iov_base     = (void *)msg; 
+       iov.iov_len      = msg_size; 
+       udpmsg.msg_name  = &pcoex_info->bt_sockaddr; 
+       udpmsg.msg_namelen      = sizeof(struct sockaddr_in); 
+       udpmsg.msg_iov   = &iov; 
+       udpmsg.msg_iovlen       = 1; 
+       udpmsg.msg_control      = NULL; 
+       udpmsg.msg_controllen = 0; 
+       udpmsg.msg_flags        = MSG_DONTWAIT | MSG_NOSIGNAL; 
+       oldfs = get_fs(); 
+       set_fs(KERNEL_DS); 
+       error = sock_sendmsg(pcoex_info->udpsock, &udpmsg, msg_size); 
+       set_fs(oldfs); 
+       if (error < 0) {
+               DBG_871X("Error when sendimg msg, error:%d\n", error); 
+               return _FAIL;
+       } else
+               return _SUCCESS;
+}
+
+u8 rtw_btcoex_create_kernel_socket(_adapter *padapter)
+{
+       s8 kernel_socket_err; 
+       u8 tx_msg[255] = attend_req;
+       struct bt_coex_info *pcoex_info = &padapter->coex_info;
+       s32 sock_reuse = 1;
+       u8 status = _FAIL;
+       
+       DBG_871X("%s CONNECT_PORT %d\n", __func__, CONNECT_PORT);
+
+       if (NULL == pcoex_info) {
+               DBG_871X("coex_info: NULL\n"); 
+               status =  _FAIL;
+       }
+       
+       kernel_socket_err = sock_create(PF_INET, SOCK_DGRAM, 0, &pcoex_info->udpsock); 
+    
+       if (kernel_socket_err < 0) { 
+               DBG_871X("Error during creation of socket error:%d\n", kernel_socket_err); 
+               status = _FAIL; 
+       } else {
+               _rtw_memset(&(pcoex_info->wifi_sockaddr), 0, sizeof(pcoex_info->wifi_sockaddr)); 
+               pcoex_info->wifi_sockaddr.sin_family = AF_INET; 
+               pcoex_info->wifi_sockaddr.sin_port = htons(CONNECT_PORT); 
+               pcoex_info->wifi_sockaddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+               _rtw_memset(&(pcoex_info->bt_sockaddr), 0, sizeof(pcoex_info->bt_sockaddr)); 
+               pcoex_info->bt_sockaddr.sin_family = AF_INET; 
+               pcoex_info->bt_sockaddr.sin_port = htons(CONNECT_PORT_BT); 
+               pcoex_info->bt_sockaddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+               pcoex_info->sk_store = NULL;
+               kernel_socket_err = pcoex_info->udpsock->ops->bind(pcoex_info->udpsock, (struct sockaddr *)&pcoex_info->wifi_sockaddr, 
+                       sizeof(pcoex_info->wifi_sockaddr)); 
+               if (kernel_socket_err == 0) {   
+                       DBG_871X("binding socket success\n"); 
+                       pcoex_info->udpsock->sk->sk_data_ready = rtw_btcoex_recvmsg_init;
+                       pcoex_info->sock_open |=  KERNEL_SOCKET_OK;
+                       pcoex_info->BT_attend = _FALSE;
+                       DBG_871X("WIFI sending attend_req\n"); 
+                       rtw_btcoex_sendmsgbysocket(padapter, attend_req, sizeof(attend_req), _TRUE);
+                       status = _SUCCESS;
+               } else { 
+                       pcoex_info->BT_attend = _FALSE;
+                       sock_release(pcoex_info->udpsock); /* bind fail release socket */
+                       DBG_871X("Error binding socket: %d\n", kernel_socket_err); 
+                       status = _FAIL;
+               } 
+                       
+       }
+
+       return status;
+}
+
+void rtw_btcoex_close_kernel_socket(_adapter *padapter)
+{
+       struct bt_coex_info *pcoex_info = &padapter->coex_info;
+       if (pcoex_info->sock_open & KERNEL_SOCKET_OK) {
+               DBG_871X("release kernel socket\n");
+               sock_release(pcoex_info->udpsock);
+               pcoex_info->sock_open &= ~(KERNEL_SOCKET_OK);   
+               if (_TRUE == pcoex_info->BT_attend)
+                       pcoex_info->BT_attend = _FALSE;
+               
+               DBG_871X("sock_open:%d, BT_attend:%d\n", pcoex_info->sock_open, pcoex_info->BT_attend);
+       }
+}
+
+void rtw_btcoex_init_socket(_adapter *padapter)
+{
+               
+       u8 is_invite = _FALSE;
+       struct bt_coex_info *pcoex_info = &padapter->coex_info;
+       DBG_871X("%s\n", __func__);
+       if (_FALSE == pcoex_info->is_exist) {
+               _rtw_memset(pcoex_info,0,sizeof(struct bt_coex_info));
+               pcoex_info->btcoex_wq = create_workqueue("BTCOEX");
+               INIT_DELAYED_WORK(&pcoex_info->recvmsg_work,
+                         (void *)rtw_btcoex_recvmsgbysocket);
+               pbtcoexadapter = padapter;
+               if (rtw_btcoex_create_kernel_socket(padapter) == _SUCCESS) {
+                       pcoex_info->is_exist = _TRUE;
+               } else {
+                       pcoex_info->is_exist = _FALSE;
+                       pbtcoexadapter = NULL;
+               }
+               
+               DBG_871X("%s: pbtcoexadapter:%p, coex_info->is_exist: %s\n"
+                       , __func__, pbtcoexadapter, pcoex_info->is_exist == _TRUE?"TRUE":"FALSE");
+       }
+}
+
+void rtw_btcoex_close_socket(_adapter *padapter)
+{
+       struct bt_coex_info *pcoex_info = &padapter->coex_info;
+
+       DBG_871X("%s--coex_info->is_exist: %s, pcoex_info->BT_attend:%s\n"
+               , __func__, pcoex_info->is_exist == _TRUE?"TRUE":"FALSE", pcoex_info->BT_attend == _TRUE?"TRUE":"FALSE");
+       
+       if (_TRUE == pcoex_info->is_exist) {
+               if (_TRUE == pcoex_info->BT_attend) {
+                       /*inform BT wifi leave*/
+                       rtw_btcoex_sendmsgbysocket(padapter, wifi_leave, sizeof(wifi_leave), _FALSE);
+                       msleep(50);
+               }
+               rtw_btcoex_close_kernel_socket(padapter);
+               pbtcoexadapter = NULL;
+               pcoex_info->is_exist = _FALSE;
+       }
+       if (pcoex_info->btcoex_wq != NULL) {
+               flush_workqueue(pcoex_info->btcoex_wq);
+               destroy_workqueue(pcoex_info->btcoex_wq);
+       }
+}
+
+void rtw_btcoex_dump_tx_msg(u8 *tx_msg, u8 len, u8 *msg_name)
+{
+       u8      i = 0;
+       DBG_871X("======> Msg name: %s\n", msg_name);
+       for(i=0;i<len;i++)
+       {
+               printk("%02x ", tx_msg[i]);
+       }
+       printk("\n");
+       DBG_871X("Msg name: %s <======\n", msg_name);
+}
+
+/* Porting from Windows team */
+void rtw_btcoex_SendEventExtBtCoexControl(PADAPTER padapter, u8 bNeedDbgRsp, u8 dataLen, void *pData)
+{
+       u8                      len=0, tx_event_length = 0;
+       u8                      localBuf[32] = "";
+       u8                      *pRetPar;
+       u8                      opCode=0;
+       u8                      *pInBuf=(pu1Byte)pData;
+       u8                      *pOpCodeContent;
+       rtw_HCI_event *pEvent;
+
+       opCode = pInBuf[0];     
+
+       DBG_871X("%s, OPCode:%02x\n",__func__,opCode);
+
+       pEvent = (rtw_HCI_event*)(&localBuf[0]);
+
+       //len += bthci_ExtensionEventHeaderRtk(&localBuf[0], 
+       //      HCI_EVENT_EXT_BT_COEX_CONTROL);
+       pEvent->EventCode = HCI_EVENT_EXTENSION_RTK;
+       pEvent->Data[0] = HCI_EVENT_EXT_BT_COEX_CONTROL;        //extension event code
+       len ++;
+       
+       // Return parameters starts from here
+       pRetPar = &pEvent->Data[len];
+       _rtw_memcpy(&pRetPar[0], pData, dataLen);
+
+       len += dataLen;
+
+       pEvent->Length = len;
+
+       //total tx event length + EventCode length + sizeof(length)
+       tx_event_length = pEvent->Length + 2;
+#if 0
+       rtw_btcoex_dump_tx_msg((u8 *)pEvent, tx_event_length, "BT COEX CONTROL", _FALSE);
+#endif
+       rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+
+}
+
+/* Porting from Windows team */
+void rtw_btcoex_SendEventExtBtInfoControl(PADAPTER padapter, u8 dataLen, void *pData)
+{
+       rtw_HCI_event *pEvent;
+       u8                      *pRetPar;
+       u8                      len=0, tx_event_length = 0;
+       u8                      localBuf[32] = "";
+
+       struct bt_coex_info *pcoex_info = &padapter->coex_info;
+       PBT_MGNT                pBtMgnt = &pcoex_info->BtMgnt;
+       
+       DBG_871X("%s\n",__func__);
+       if(pBtMgnt->ExtConfig.HCIExtensionVer < 4) //not support
+       {
+               DBG_871X("ERROR: HCIExtensionVer = %d, HCIExtensionVer<4 !!!!\n",pBtMgnt->ExtConfig.HCIExtensionVer);
+               return;
+       }
+
+       pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+       //len += bthci_ExtensionEventHeaderRtk(&localBuf[0], 
+       //              HCI_EVENT_EXT_BT_INFO_CONTROL);
+       pEvent->EventCode = HCI_EVENT_EXTENSION_RTK;
+       pEvent->Data[0] = HCI_EVENT_EXT_BT_INFO_CONTROL;                //extension event code
+       len ++;
+
+       // Return parameters starts from here
+       pRetPar = &pEvent->Data[len];
+       _rtw_memcpy(&pRetPar[0], pData, dataLen);
+
+       len += dataLen;
+
+       pEvent->Length = len;
+
+       //total tx event length + EventCode length + sizeof(length)
+       tx_event_length = pEvent->Length + 2;
+#if 0
+       rtw_btcoex_dump_tx_msg((u8 *)pEvent, tx_event_length, "BT INFO CONTROL");
+#endif
+       rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+       
+}
+
+void rtw_btcoex_SendScanNotify(PADAPTER padapter, u8 scanType)
+{
+       u8      len=0, tx_event_length=0;
+       u8      localBuf[7] = "";
+       u8      *pRetPar;
+       u8      *pu1Temp;
+       rtw_HCI_event *pEvent;
+       struct bt_coex_info *pcoex_info = &padapter->coex_info;
+       PBT_MGNT                pBtMgnt = &pcoex_info->BtMgnt;
+
+//     if(!pBtMgnt->BtOperationOn)
+//             return;
+               
+       pEvent = (rtw_HCI_event *)(&localBuf[0]);
+
+//     len += bthci_ExtensionEventHeaderRtk(&localBuf[0], 
+//                     HCI_EVENT_EXT_WIFI_SCAN_NOTIFY);
+
+       pEvent->EventCode = HCI_EVENT_EXTENSION_RTK;
+       pEvent->Data[0] = HCI_EVENT_EXT_WIFI_SCAN_NOTIFY;               //extension event code
+       len ++;
+
+       // Return parameters starts from here
+       //pRetPar = &PPacketIrpEvent->Data[len];
+       //pu1Temp = (u8 *)&pRetPar[0];
+       //*pu1Temp = scanType;
+       pEvent->Data[len] = scanType;
+       len += 1;
+
+       pEvent->Length = len;
+
+       //total tx event length + EventCode length + sizeof(length)
+       tx_event_length = pEvent->Length + 2;
+#if 0
+       rtw_btcoex_dump_tx_msg((u8 *)pEvent, tx_event_length, "WIFI SCAN OPERATION");
+#endif 
+       rtw_btcoex_sendmsgbysocket(padapter, (u8 *)pEvent, tx_event_length, _FALSE);
+}
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
 #endif // CONFIG_BT_COEXIST
 
 #endif // CONFIG_BT_COEXIST
 
index 6ed8f22b49479ec319e012d1943412cfaef3cc42..e6309a874ea016f4c6dbbafc881f907b9ed78ae4 100755 (executable)
@@ -20,7 +20,6 @@
 #define _RTW_CMD_C_
 
 #include <drv_types.h>
 #define _RTW_CMD_C_
 
 #include <drv_types.h>
-
 /*
 Caller and the rtw_cmd_thread can protect cmd_q by spin_lock.
 No irqsave is necessary.
 /*
 Caller and the rtw_cmd_thread can protect cmd_q by spin_lock.
 No irqsave is necessary.
@@ -651,8 +650,8 @@ post_process:
                _enter_critical_mutex(&(pcmd->padapter->cmdpriv.sctx_mutex), NULL);
                if (pcmd->sctx) {
                        if (0)
                _enter_critical_mutex(&(pcmd->padapter->cmdpriv.sctx_mutex), NULL);
                if (pcmd->sctx) {
                        if (0)
-                       DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" pcmd->sctx\n",
-                               FUNC_ADPT_ARG(pcmd->padapter));
+                               DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" pcmd->sctx\n",
+                                       FUNC_ADPT_ARG(pcmd->padapter));
                        if (pcmd->res == H2C_SUCCESS)
                                rtw_sctx_done(&pcmd->sctx);
                        else
                        if (pcmd->res == H2C_SUCCESS)
                                rtw_sctx_done(&pcmd->sctx);
                        else
@@ -912,8 +911,8 @@ _func_enter_;
                                _rtw_memcpy(&psurveyPara->ssid[i], &ssid[i], sizeof(NDIS_802_11_SSID));
                                psurveyPara->ssid_num++;
                                if (0)
                                _rtw_memcpy(&psurveyPara->ssid[i], &ssid[i], sizeof(NDIS_802_11_SSID));
                                psurveyPara->ssid_num++;
                                if (0)
-                               DBG_871X(FUNC_ADPT_FMT" ssid:(%s, %d)\n", FUNC_ADPT_ARG(padapter),
-                                       psurveyPara->ssid[i].Ssid, psurveyPara->ssid[i].SsidLength);
+                                       DBG_871X(FUNC_ADPT_FMT" ssid:(%s, %d)\n", FUNC_ADPT_ARG(padapter),
+                                               psurveyPara->ssid[i].Ssid, psurveyPara->ssid[i].SsidLength);
                        }
                }
        }
                        }
                }
        }
@@ -926,8 +925,8 @@ _func_enter_;
                                _rtw_memcpy(&psurveyPara->ch[i], &ch[i], sizeof(struct rtw_ieee80211_channel));
                                psurveyPara->ch_num++;
                                if (0)
                                _rtw_memcpy(&psurveyPara->ch[i], &ch[i], sizeof(struct rtw_ieee80211_channel));
                                psurveyPara->ch_num++;
                                if (0)
-                               DBG_871X(FUNC_ADPT_FMT" ch:%u\n", FUNC_ADPT_ARG(padapter),
-                                       psurveyPara->ch[i].hw_value);
+                                       DBG_871X(FUNC_ADPT_FMT" ch:%u\n", FUNC_ADPT_ARG(padapter),
+                                               psurveyPara->ch[i].hw_value);
                        }
                }
        }
                        }
                }
        }
@@ -942,11 +941,16 @@ _func_enter_;
 
 #ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
                if((padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state&0x03) == WIFI_FW_AP_STATE)
 
 #ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
                if((padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state&0x03) == WIFI_FW_AP_STATE)
-                       _set_timer(&pmlmepriv->scan_to_timer, SURVEY_TO * 
-                                               ( padapter->mlmeextpriv.max_chan_nums + ( padapter->mlmeextpriv.max_chan_nums / RTW_SCAN_NUM_OF_CH ) * RTW_STAY_AP_CH_MILLISECOND ) + 1000 );
+               {
+                       if(IsSupported5G(padapter->registrypriv.wireless_mode) 
+                               && IsSupported24G(padapter->registrypriv.wireless_mode)) //dual band
+                               mlme_set_scan_to_timer(pmlmepriv, CONC_SCANNING_TIMEOUT_DUAL_BAND);
+                       else //single band
+                               mlme_set_scan_to_timer(pmlmepriv, CONC_SCANNING_TIMEOUT_SINGLE_BAND);
+               }               
                else
 #endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
                else
 #endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
-                       _set_timer(&pmlmepriv->scan_to_timer, SCANNING_TIMEOUT);
+                       mlme_set_scan_to_timer(pmlmepriv, SCANNING_TIMEOUT);
 
                rtw_led_control(padapter, LED_CTL_SITE_SURVEY);
        } else {
 
                rtw_led_control(padapter, LED_CTL_SITE_SURVEY);
        } else {
@@ -1437,6 +1441,7 @@ _func_enter_;
                        case Ndis802_11APMode:
                        case Ndis802_11AutoUnknown:
                        case Ndis802_11InfrastructureMax:
                        case Ndis802_11APMode:
                        case Ndis802_11AutoUnknown:
                        case Ndis802_11InfrastructureMax:
+                       case Ndis802_11Monitor:
                                break;
 
                }
                                break;
 
                }
@@ -1667,7 +1672,7 @@ _func_exit_;
        return res;
 }
 
        return res;
 }
 
-u8 rtw_setstakey_cmd(_adapter *padapter, struct sta_info *sta, u8 unicast_key, bool enqueue)
+u8 rtw_setstakey_cmd(_adapter *padapter, struct sta_info *sta, u8 key_type, bool enqueue)
 {
        struct cmd_obj*                 ph2c;
        struct set_stakey_parm  *psetstakey_para;
 {
        struct cmd_obj*                 ph2c;
        struct set_stakey_parm  *psetstakey_para;
@@ -1689,27 +1694,23 @@ _func_enter_;
        _rtw_memcpy(psetstakey_para->addr, sta->hwaddr,ETH_ALEN);
                
        if(check_fwstate(pmlmepriv, WIFI_STATION_STATE)){
        _rtw_memcpy(psetstakey_para->addr, sta->hwaddr,ETH_ALEN);
                
        if(check_fwstate(pmlmepriv, WIFI_STATION_STATE)){
-#ifdef CONFIG_TDLS             
-               if(sta->tdls_sta_state&TDLS_LINKED_STATE)
-                       psetstakey_para->algorithm=(u8)sta->dot118021XPrivacy;
-               else
-#endif //CONFIG_TDLS
                        psetstakey_para->algorithm =(unsigned char) psecuritypriv->dot11PrivacyAlgrthm;
        }else{
                GET_ENCRY_ALGO(psecuritypriv, sta, psetstakey_para->algorithm, _FALSE);
        }
 
                        psetstakey_para->algorithm =(unsigned char) psecuritypriv->dot11PrivacyAlgrthm;
        }else{
                GET_ENCRY_ALGO(psecuritypriv, sta, psetstakey_para->algorithm, _FALSE);
        }
 
-       if (unicast_key == _TRUE) {
+       if (key_type == GROUP_KEY) {
+               _rtw_memcpy(&psetstakey_para->key, &psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey, 16);
+       }
+       else if (key_type == UNICAST_KEY) {
+               _rtw_memcpy(&psetstakey_para->key, &sta->dot118021x_UncstKey, 16);
+       }
 #ifdef CONFIG_TDLS
 #ifdef CONFIG_TDLS
-               if((sta->tdls_sta_state&TDLS_LINKED_STATE)==TDLS_LINKED_STATE)
+       else if(key_type == TDLS_KEY){
                        _rtw_memcpy(&psetstakey_para->key, sta->tpk.tk, 16);
                        _rtw_memcpy(&psetstakey_para->key, sta->tpk.tk, 16);
-               else
-#endif //CONFIG_TDLS
-                       _rtw_memcpy(&psetstakey_para->key, &sta->dot118021x_UncstKey, 16);
-       }
-       else {
-               _rtw_memcpy(&psetstakey_para->key, &psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey, 16);
+               psetstakey_para->algorithm=(u8)sta->dot118021XPrivacy;
        }
        }
+#endif /* CONFIG_TDLS */
 
        //jeff: set this becasue at least sw key is ready
        padapter->securitypriv.busetkipkey=_TRUE;
 
        //jeff: set this becasue at least sw key is ready
        padapter->securitypriv.busetkipkey=_TRUE;
@@ -2318,7 +2319,8 @@ _func_enter_;
        }
 
        _rtw_spinlock(&(padapter->tdlsinfo.cmd_lock));
        }
 
        _rtw_spinlock(&(padapter->tdlsinfo.cmd_lock));
-       _rtw_memcpy(TDLSoption->addr, addr, 6); 
+       if (addr != NULL)
+               _rtw_memcpy(TDLSoption->addr, addr, 6);
        TDLSoption->option = option;
        _rtw_spinunlock(&(padapter->tdlsinfo.cmd_lock));
        init_h2fwcmd_w_parm_no_rsp(pcmdobj, TDLSoption, GEN_CMD_CODE(_TDLS));
        TDLSoption->option = option;
        _rtw_spinunlock(&(padapter->tdlsinfo.cmd_lock));
        init_h2fwcmd_w_parm_no_rsp(pcmdobj, TDLSoption, GEN_CMD_CODE(_TDLS));
@@ -2458,8 +2460,8 @@ u8 traffic_status_watchdog(_adapter *padapter, u8 from_timer)
                
 #ifdef CONFIG_TDLS
 #ifdef CONFIG_TDLS_AUTOSETUP
                
 #ifdef CONFIG_TDLS
 #ifdef CONFIG_TDLS_AUTOSETUP
-               if( ( ptdlsinfo->watchdog_count % TDLS_WATCHDOG_PERIOD ) == 0 ) //10 * 2sec, periodically sending
-               {
+               /* TDLS_WATCHDOG_PERIOD * 2sec, periodically send */
+               if ((ptdlsinfo->watchdog_count % TDLS_WATCHDOG_PERIOD ) == 0) {
                        _rtw_memcpy(txmgmt.peer, baddr, ETH_ALEN);
                        issue_tdls_dis_req( padapter, &txmgmt );
                }
                        _rtw_memcpy(txmgmt.peer, baddr, ETH_ALEN);
                        issue_tdls_dis_req( padapter, &txmgmt );
                }
@@ -2477,7 +2479,10 @@ u8 traffic_status_watchdog(_adapter *padapter, u8 from_timer)
 #endif //CONFIG_LPS_SLOW_TRANSITION
                        )
                {
 #endif //CONFIG_LPS_SLOW_TRANSITION
                        )
                {
-                       //DBG_871X("(-)Tx = %d, Rx = %d \n",pmlmepriv->LinkDetectInfo.NumTxOkInPeriod,pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod);
+#ifdef DBG_RX_COUNTER_DUMP
+                       if( padapter->dump_rx_cnt_mode & DUMP_DRV_TRX_COUNTER_DATA)
+                               DBG_871X("(-)Tx = %d, Rx = %d \n",pmlmepriv->LinkDetectInfo.NumTxOkInPeriod,pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod);
+#endif 
                        bEnterPS= _FALSE;
 #ifdef CONFIG_LPS_SLOW_TRANSITION
                        if(bBusyTraffic == _TRUE)
                        bEnterPS= _FALSE;
 #ifdef CONFIG_LPS_SLOW_TRANSITION
                        if(bBusyTraffic == _TRUE)
@@ -2499,7 +2504,10 @@ u8 traffic_status_watchdog(_adapter *padapter, u8 from_timer)
                }
                else
                {
                }
                else
                {
-                       //DBG_871X("(+)Tx = %d, Rx = %d \n",pmlmepriv->LinkDetectInfo.NumTxOkInPeriod,pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod);
+#ifdef DBG_RX_COUNTER_DUMP             
+                       if( padapter->dump_rx_cnt_mode & DUMP_DRV_TRX_COUNTER_DATA)
+                               DBG_871X("(+)Tx = %d, Rx = %d \n",pmlmepriv->LinkDetectInfo.NumTxOkInPeriod,pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod);
+#endif                 
 #ifdef CONFIG_LPS_SLOW_TRANSITION
                        if(pmlmepriv->LinkDetectInfo.TrafficTransitionCount>=2)
                                pmlmepriv->LinkDetectInfo.TrafficTransitionCount -=2;
 #ifdef CONFIG_LPS_SLOW_TRANSITION
                        if(pmlmepriv->LinkDetectInfo.TrafficTransitionCount>=2)
                                pmlmepriv->LinkDetectInfo.TrafficTransitionCount -=2;
@@ -2627,8 +2635,11 @@ void dynamic_chk_wk_hdl(_adapter *padapter)
 
        //if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING|_FW_UNDER_SURVEY)==_FALSE)
        {
 
        //if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING|_FW_UNDER_SURVEY)==_FALSE)
        {
-               linked_status_chk(padapter, 0); 
+               linked_status_chk(padapter, 0);
                traffic_status_watchdog(padapter, 0);
                traffic_status_watchdog(padapter, 0);
+               #ifdef DBG_RX_COUNTER_DUMP
+               rtw_dump_rx_counters(padapter);
+               #endif
                dm_DynamicUsbTxAgg(padapter, 0);
        }
 
                dm_DynamicUsbTxAgg(padapter, 0);
        }
 
@@ -3282,35 +3293,39 @@ void btinfo_evt_dump(void *sel, void *buf)
        DBG_871X_SEL_NL(sel, "cid:0x%02x, len:%u\n", info->cid, info->len);
 
        if (info->len > 2)
        DBG_871X_SEL_NL(sel, "cid:0x%02x, len:%u\n", info->cid, info->len);
 
        if (info->len > 2)
-       DBG_871X_SEL_NL(sel, "byte2:%s%s%s%s%s%s%s%s\n"
-               , info->bConnection?"bConnection ":""
-               , info->bSCOeSCO?"bSCOeSCO ":""
-               , info->bInQPage?"bInQPage ":""
-               , info->bACLBusy?"bACLBusy ":""
-               , info->bSCOBusy?"bSCOBusy ":""
-               , info->bHID?"bHID ":""
-               , info->bA2DP?"bA2DP ":""
-               , info->bFTP?"bFTP":""
-       );
+               DBG_871X_SEL_NL(sel, "byte2:%s%s%s%s%s%s%s%s\n"
+                       , info->bConnection?"bConnection ":""
+                       , info->bSCOeSCO?"bSCOeSCO ":""
+                       , info->bInQPage?"bInQPage ":""
+                       , info->bACLBusy?"bACLBusy ":""
+                       , info->bSCOBusy?"bSCOBusy ":""
+                       , info->bHID?"bHID ":""
+                       , info->bA2DP?"bA2DP ":""
+                       , info->bFTP?"bFTP":""
+               );
 
        if (info->len > 3)
 
        if (info->len > 3)
-       DBG_871X_SEL_NL(sel, "retry_cnt:%u\n", info->retry_cnt);
+               DBG_871X_SEL_NL(sel, "retry_cnt:%u\n", info->retry_cnt);
 
        if (info->len > 4)
 
        if (info->len > 4)
-       DBG_871X_SEL_NL(sel, "rssi:%u\n", info->rssi);
+               DBG_871X_SEL_NL(sel, "rssi:%u\n", info->rssi);
 
        if (info->len > 5)
 
        if (info->len > 5)
-       DBG_871X_SEL_NL(sel, "byte5:%s%s\n"
-               , info->eSCO_SCO?"eSCO_SCO ":""
-               , info->Master_Slave?"Master_Slave ":""
-       );
+               DBG_871X_SEL_NL(sel, "byte5:%s%s\n"
+                       , info->eSCO_SCO?"eSCO_SCO ":""
+                       , info->Master_Slave?"Master_Slave ":""
+               );
 }
 
 static void rtw_btinfo_hdl(_adapter *adapter, u8 *buf, u16 buf_len)
 {
        #define BTINFO_WIFI_FETCH 0x23
        #define BTINFO_BT_AUTO_RPT 0x27
 }
 
 static void rtw_btinfo_hdl(_adapter *adapter, u8 *buf, u16 buf_len)
 {
        #define BTINFO_WIFI_FETCH 0x23
        #define BTINFO_BT_AUTO_RPT 0x27
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+       struct btinfo_8761ATV *info = (struct btinfo_8761ATV *)buf;
+#else //!CONFIG_BT_COEXIST_SOCKET_TRX
        struct btinfo *info = (struct btinfo *)buf;
        struct btinfo *info = (struct btinfo *)buf;
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
        u8 cmd_idx;
        u8 len;
 
        u8 cmd_idx;
        u8 len;
 
@@ -3325,14 +3340,23 @@ static void rtw_btinfo_hdl(_adapter *adapter, u8 *buf, u16 buf_len)
 
 //#define DBG_PROC_SET_BTINFO_EVT
 #ifdef DBG_PROC_SET_BTINFO_EVT
 
 //#define DBG_PROC_SET_BTINFO_EVT
 #ifdef DBG_PROC_SET_BTINFO_EVT
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+       DBG_871X("%s: btinfo[0]=%x,btinfo[1]=%x,btinfo[2]=%x,btinfo[3]=%x btinfo[4]=%x,btinfo[5]=%x,btinfo[6]=%x,btinfo[7]=%x\n"
+                               , __func__, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
+#else//!CONFIG_BT_COEXIST_SOCKET_TRX
        btinfo_evt_dump(RTW_DBGDUMP, info);
        btinfo_evt_dump(RTW_DBGDUMP, info);
-#endif
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
+#endif // DBG_PROC_SET_BTINFO_EVT
 
        /* transform BT-FW btinfo to WiFI-FW C2H format and notify */
        if (cmd_idx == BTINFO_WIFI_FETCH)
                buf[1] = 0;
        else if (cmd_idx == BTINFO_BT_AUTO_RPT)
                buf[1] = 2;
 
        /* transform BT-FW btinfo to WiFI-FW C2H format and notify */
        if (cmd_idx == BTINFO_WIFI_FETCH)
                buf[1] = 0;
        else if (cmd_idx == BTINFO_BT_AUTO_RPT)
                buf[1] = 2;
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+       else if(0x01 == cmd_idx || 0x02 == cmd_idx)
+               buf[1] = buf[0];
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
        rtw_btcoex_BtInfoNotify(adapter ,len+1, &buf[1]);
 }
 
        rtw_btcoex_BtInfoNotify(adapter ,len+1, &buf[1]);
 }
 
@@ -3379,7 +3403,7 @@ u8 rtw_btinfo_cmd(_adapter *adapter, u8 *buf, u16 len)
 exit:
        return res;
 }
 exit:
        return res;
 }
-#endif
+#endif //CONFIG_BT_COEXIST
 
 //#ifdef CONFIG_C2H_PACKET_EN
 u8 rtw_c2h_packet_wk_cmd(PADAPTER padapter, u8 *pbuf, u16 length)
 
 //#ifdef CONFIG_C2H_PACKET_EN
 u8 rtw_c2h_packet_wk_cmd(PADAPTER padapter, u8 *pbuf, u16 length)
@@ -3536,6 +3560,9 @@ static void c2h_wk_callback(_workitem *work)
                                rtw_mfree(c2h_evt, 16);
                                continue;
                        }
                                rtw_mfree(c2h_evt, 16);
                                continue;
                        }
+               } else {
+                       rtw_warn_on(1);
+                       continue;
                }
 
                /* Special pointer to trigger c2h_evt_clear only */
                }
 
                /* Special pointer to trigger c2h_evt_clear only */
@@ -3676,10 +3703,10 @@ _func_enter_;
        {
                //TODO: cancel timer and do timeout handler directly...
                //need to make timeout handlerOS independent
        {
                //TODO: cancel timer and do timeout handler directly...
                //need to make timeout handlerOS independent
-               _set_timer(&pmlmepriv->scan_to_timer, 1);
+               mlme_set_scan_to_timer(pmlmepriv, 1);
        }
        else if (pcmd->res != H2C_SUCCESS) {
        }
        else if (pcmd->res != H2C_SUCCESS) {
-               _set_timer(&pmlmepriv->scan_to_timer, 1);
+               mlme_set_scan_to_timer(pmlmepriv, 1);
                RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\n ********Error: MgntActrtw_set_802_11_bssid_LIST_SCAN Fail ************\n\n."));
        } 
 
                RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\n ********Error: MgntActrtw_set_802_11_bssid_LIST_SCAN Fail ************\n\n."));
        } 
 
index 72cad7378d2c9fd850bf7ecbe233c93f6d5d4577..ab58df17deb99c633a10abe4025b4276eb2be069 100755 (executable)
@@ -60,6 +60,10 @@ u32 GlobalDebugLevel = _drv_err_;
 
 #include <rtw_version.h>
 
 
 #include <rtw_version.h>
 
+#ifdef CONFIG_TDLS
+#define TDLS_DBG_INFO_SPACE_BTWN_ITEM_AND_VALUE        41
+#endif
+
 void dump_drv_version(void *sel)
 {
        DBG_871X_SEL_NL(sel, "%s %s\n", DRV_NAME, DRIVERVERSION);
 void dump_drv_version(void *sel)
 {
        DBG_871X_SEL_NL(sel, "%s %s\n", DRV_NAME, DRIVERVERSION);
@@ -105,6 +109,19 @@ void mac_reg_dump(void *sel, _adapter *adapter)
                if((j++)%4 == 0)
                        DBG_871X_SEL(sel, "\n");
        }
                if((j++)%4 == 0)
                        DBG_871X_SEL(sel, "\n");
        }
+       
+#ifdef CONFIG_RTL8814A
+       {
+               for(i=0x1000;i<0x1650;i+=4)
+               {
+                       if(j%4==1)
+                               DBG_871X_SEL_NL(sel, "0x%03x",i);
+                       DBG_871X_SEL(sel, " 0x%08x ", rtw_read32(adapter,i));
+                       if((j++)%4 == 0)
+                               DBG_871X_SEL(sel, "\n");
+               }
+       }
+#endif /* CONFIG_RTL8814A */
 }
 
 void bb_reg_dump(void *sel, _adapter *adapter)
 }
 
 void bb_reg_dump(void *sel, _adapter *adapter)
@@ -154,7 +171,7 @@ void rf_reg_dump(void *sel, _adapter *adapter)
 static u8 fwdl_test_chksum_fail = 0;
 static u8 fwdl_test_wintint_rdy_fail = 0;
 
 static u8 fwdl_test_chksum_fail = 0;
 static u8 fwdl_test_wintint_rdy_fail = 0;
 
-bool rtw_fwdl_test_trigger_chksum_fail()
+bool rtw_fwdl_test_trigger_chksum_fail(void)
 {
        if (fwdl_test_chksum_fail) {
                DBG_871X_LEVEL(_drv_always_, "fwdl test case: trigger chksum_fail\n");
 {
        if (fwdl_test_chksum_fail) {
                DBG_871X_LEVEL(_drv_always_, "fwdl test case: trigger chksum_fail\n");
@@ -164,7 +181,7 @@ bool rtw_fwdl_test_trigger_chksum_fail()
        return _FALSE;
 }
 
        return _FALSE;
 }
 
-bool rtw_fwdl_test_trigger_wintint_rdy_fail()
+bool rtw_fwdl_test_trigger_wintint_rdy_fail(void)
 {
        if (fwdl_test_wintint_rdy_fail) {
                DBG_871X_LEVEL(_drv_always_, "fwdl test case: trigger wintint_rdy_fail\n");
 {
        if (fwdl_test_wintint_rdy_fail) {
                DBG_871X_LEVEL(_drv_always_, "fwdl test case: trigger wintint_rdy_fail\n");
@@ -176,11 +193,23 @@ bool rtw_fwdl_test_trigger_wintint_rdy_fail()
 
 static u32 g_wait_hiq_empty_ms = 0;
 
 
 static u32 g_wait_hiq_empty_ms = 0;
 
-u32 rtw_get_wait_hiq_empty_ms()
+u32 rtw_get_wait_hiq_empty_ms(void)
 {
        return g_wait_hiq_empty_ms;
 }
 
 {
        return g_wait_hiq_empty_ms;
 }
 
+static u8 del_rx_ampdu_test_no_tx_fail = 0;
+
+bool rtw_del_rx_ampdu_test_trigger_no_tx_fail(void)
+{
+       if (del_rx_ampdu_test_no_tx_fail) {
+               DBG_871X_LEVEL(_drv_always_, "del_rx_ampdu test case: trigger no_tx_fail\n");
+               del_rx_ampdu_test_no_tx_fail--;
+               return _TRUE;
+       }
+       return _FALSE;
+}
+
 void rtw_sink_rtp_seq_dbg( _adapter *adapter,_pkt *pkt)
 {
        struct recv_priv *precvpriv = &(adapter->recvpriv);
 void rtw_sink_rtp_seq_dbg( _adapter *adapter,_pkt *pkt)
 {
        struct recv_priv *precvpriv = &(adapter->recvpriv);
@@ -196,6 +225,21 @@ void rtw_sink_rtp_seq_dbg( _adapter *adapter,_pkt *pkt)
        }
 }
 
        }
 }
 
+void sta_rx_reorder_ctl_dump(void *sel, struct sta_info *sta)
+{
+       struct recv_reorder_ctrl *reorder_ctl;
+       int i;
+
+       for (i = 0; i < 16; i++) {
+               reorder_ctl = &sta->recvreorder_ctrl[i];
+               if (reorder_ctl->ampdu_size != RX_AMPDU_SIZE_INVALID || reorder_ctl->indicate_seq != 0xFFFF) {
+                       DBG_871X_SEL_NL(sel, "tid=%d, enable=%d, ampdu_size=%u, indicate_seq=%u\n"
+                               , i, reorder_ctl->enable, reorder_ctl->ampdu_size, reorder_ctl->indicate_seq
+                       );
+               }
+       }
+}
+
 #ifdef CONFIG_PROC_DEBUG
 ssize_t proc_set_write_reg(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
 {
 #ifdef CONFIG_PROC_DEBUG
 ssize_t proc_set_write_reg(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
 {
@@ -593,16 +637,8 @@ int proc_get_ap_info(struct seq_file *m, void *v)
                DBG_871X_SEL_NL(m, "vht_ldpc_cap=0x%x, vht_stbc_cap=0x%x, vht_beamform_cap=0x%x\n", psta->vhtpriv.ldpc_cap, psta->vhtpriv.stbc_cap, psta->vhtpriv.beamform_cap);
                DBG_871X_SEL_NL(m, "vht_mcs_map=0x%x, vht_highest_rate=0x%x, vht_ampdu_len=%d\n", *(u16*)psta->vhtpriv.vht_mcs_map, psta->vhtpriv.vht_highest_rate, psta->vhtpriv.ampdu_len);
 #endif
                DBG_871X_SEL_NL(m, "vht_ldpc_cap=0x%x, vht_stbc_cap=0x%x, vht_beamform_cap=0x%x\n", psta->vhtpriv.ldpc_cap, psta->vhtpriv.stbc_cap, psta->vhtpriv.beamform_cap);
                DBG_871X_SEL_NL(m, "vht_mcs_map=0x%x, vht_highest_rate=0x%x, vht_ampdu_len=%d\n", *(u16*)psta->vhtpriv.vht_mcs_map, psta->vhtpriv.vht_highest_rate, psta->vhtpriv.ampdu_len);
 #endif
-                                       
-               for(i=0;i<16;i++)
-               {                                                       
-                       preorder_ctrl = &psta->recvreorder_ctrl[i];
-                       if(preorder_ctrl->enable)
-                       {
-                               DBG_871X_SEL_NL(m, "tid=%d, indicate_seq=%d\n", i, preorder_ctrl->indicate_seq);
-                       }
-               }       
-                                                       
+
+               sta_rx_reorder_ctl_dump(m, psta);
        }
        else
        {                                                       
        }
        else
        {                                                       
@@ -628,6 +664,27 @@ int proc_get_adapter_state(struct seq_file *m, void *v)
 
        return 0;
 }
 
        return 0;
 }
+
+ssize_t proc_reset_trx_info(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
+{
+       struct net_device *dev = data;
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct dvobj_priv *psdpriv = padapter->dvobj;
+       struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
+       char cmd[32];
+       if (buffer && !copy_from_user(cmd, buffer, sizeof(cmd))) {
+               if('0' == cmd[0]){
+                       pdbgpriv->dbg_rx_ampdu_drop_count = 0;
+                       pdbgpriv->dbg_rx_ampdu_forced_indicate_count = 0;
+                       pdbgpriv->dbg_rx_ampdu_loss_count = 0;
+                       pdbgpriv->dbg_rx_dup_mgt_frame_drop_count = 0;
+                       pdbgpriv->dbg_rx_ampdu_window_shift_cnt = 0;
+                       pdbgpriv->dbg_rx_conflic_mac_addr_cnt = 0;
+               }
+       }
+
+       return count;
+}
        
 int proc_get_trx_info(struct seq_file *m, void *v)
 {
        
 int proc_get_trx_info(struct seq_file *m, void *v)
 {
@@ -636,6 +693,8 @@ int proc_get_trx_info(struct seq_file *m, void *v)
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
        struct recv_priv  *precvpriv = &padapter->recvpriv;
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
        struct recv_priv  *precvpriv = &padapter->recvpriv;
+       struct dvobj_priv *psdpriv = padapter->dvobj;
+       struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
        struct hw_xmit *phwxmit;
 
        dump_os_queue(m, padapter);
        struct hw_xmit *phwxmit;
 
        dump_os_queue(m, padapter);
@@ -657,6 +716,17 @@ int proc_get_trx_info(struct seq_file *m, void *v)
        DBG_871X_SEL_NL(m, "rx_urb_pending_cn=%d\n", ATOMIC_READ(&(precvpriv->rx_pending_cnt)));
 #endif
 
        DBG_871X_SEL_NL(m, "rx_urb_pending_cn=%d\n", ATOMIC_READ(&(precvpriv->rx_pending_cnt)));
 #endif
 
+       //Folowing are RX info
+       //Counts of packets whose seq_num is less than preorder_ctrl->indicate_seq, Ex delay, retransmission, redundant packets and so on
+       DBG_871X_SEL_NL(m,"Rx: Counts of Packets Whose Seq_Num Less Than Reorder Control Seq_Num: %llu\n",(unsigned long long)pdbgpriv->dbg_rx_ampdu_drop_count);
+       //How many times the Rx Reorder Timer is triggered.
+       DBG_871X_SEL_NL(m,"Rx: Reorder Time-out Trigger Counts: %llu\n",(unsigned long long)pdbgpriv->dbg_rx_ampdu_forced_indicate_count);
+       //Total counts of packets loss
+       DBG_871X_SEL_NL(m,"Rx: Packet Loss Counts: %llu\n",(unsigned long long)pdbgpriv->dbg_rx_ampdu_loss_count);
+       DBG_871X_SEL_NL(m,"Rx: Duplicate Management Frame Drop Count: %llu\n",(unsigned long long)pdbgpriv->dbg_rx_dup_mgt_frame_drop_count);
+       DBG_871X_SEL_NL(m,"Rx: AMPDU BA window shift Count: %llu\n",(unsigned long long)pdbgpriv->dbg_rx_ampdu_window_shift_cnt);
+       /*The same mac addr counts*/
+       DBG_871X_SEL_NL(m, "Rx: Conflict MAC Address Frames Count: %llu\n", (unsigned long long)pdbgpriv->dbg_rx_conflic_mac_addr_cnt);
        return 0;
 }
 
        return 0;
 }
 
@@ -704,7 +774,7 @@ int proc_get_rate_ctl(struct seq_file *m, void *v)
                data_fb = adapter->data_fb?1:0;
                DBG_871X_SEL_NL(m, "FIXED %s%s%s\n"
                        , HDATA_RATE(data_rate)
                data_fb = adapter->data_fb?1:0;
                DBG_871X_SEL_NL(m, "FIXED %s%s%s\n"
                        , HDATA_RATE(data_rate)
-                       , sgi?" SGI":" LGI"
+                       , data_rate>DESC_RATE54M?(sgi?" SGI":" LGI"):""
                        , data_fb?" FB":""
                );
                DBG_871X_SEL_NL(m, "0x%02x %u\n", adapter->fix_rate, adapter->data_fb);
                        , data_fb?" FB":""
                );
                DBG_871X_SEL_NL(m, "0x%02x %u\n", adapter->fix_rate, adapter->data_fb);
@@ -738,7 +808,43 @@ ssize_t proc_set_rate_ctl(struct file *file, const char __user *buffer, size_t c
 
        return count;
 }
 
        return count;
 }
+#ifdef DBG_RX_COUNTER_DUMP
+int proc_get_rx_cnt_dump(struct seq_file *m, void *v)
+{
+       struct net_device *dev = m->private;
+       int i;
+       _adapter *adapter = (_adapter *)rtw_netdev_priv(dev);
+
+       DBG_871X_SEL_NL(m, "BIT0- Dump RX counters of DRV \n");
+       DBG_871X_SEL_NL(m, "BIT1- Dump RX counters of MAC \n");
+       DBG_871X_SEL_NL(m, "BIT2- Dump RX counters of PHY \n");
+       DBG_871X_SEL_NL(m, "BIT3- Dump TRX data frame of DRV \n");
+       DBG_871X_SEL_NL(m, "dump_rx_cnt_mode = 0x%02x \n", adapter->dump_rx_cnt_mode);
+
+       return 0;
+}
+ssize_t proc_set_rx_cnt_dump(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
+{
+       struct net_device *dev = data;
+       _adapter *adapter = (_adapter *)rtw_netdev_priv(dev);
+       char tmp[32];
+       u8 dump_rx_cnt_mode;
+
+       if (count < 1)
+               return -EFAULT;
 
 
+       if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {              
+
+               int num = sscanf(tmp, "%hhx", &dump_rx_cnt_mode);
+
+               rtw_dump_phy_rxcnts_preprocess(adapter,dump_rx_cnt_mode);
+               adapter->dump_rx_cnt_mode = dump_rx_cnt_mode;
+               
+       }
+
+       return count;
+}
+#endif
 ssize_t proc_set_fwdl_test_case(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
 {
        struct net_device *dev = data;
 ssize_t proc_set_fwdl_test_case(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
 {
        struct net_device *dev = data;
@@ -755,6 +861,22 @@ ssize_t proc_set_fwdl_test_case(struct file *file, const char __user *buffer, si
        return count;
 }
 
        return count;
 }
 
+ssize_t proc_set_del_rx_ampdu_test_case(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
+{
+       struct net_device *dev = data;
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       char tmp[32];
+       int num;
+
+       if (count < 1)
+               return -EFAULT;
+
+       if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp)))
+               num = sscanf(tmp, "%hhu", &del_rx_ampdu_test_no_tx_fail);
+
+       return count;
+}
+
 ssize_t proc_set_wait_hiq_empty(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
 {
        struct net_device *dev = data;
 ssize_t proc_set_wait_hiq_empty(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
 {
        struct net_device *dev = data;
@@ -1096,9 +1218,11 @@ int proc_get_rx_signal(struct seq_file *m, void *v)
        //DBG_871X_SEL_NL(m, "rxpwdb:%d\n", padapter->recvpriv.rxpwdb);
        DBG_871X_SEL_NL(m, "signal_strength:%u\n", padapter->recvpriv.signal_strength);
        DBG_871X_SEL_NL(m, "signal_qual:%u\n", padapter->recvpriv.signal_qual);
        //DBG_871X_SEL_NL(m, "rxpwdb:%d\n", padapter->recvpriv.rxpwdb);
        DBG_871X_SEL_NL(m, "signal_strength:%u\n", padapter->recvpriv.signal_strength);
        DBG_871X_SEL_NL(m, "signal_qual:%u\n", padapter->recvpriv.signal_qual);
+
+       rtw_get_noise(padapter);
        DBG_871X_SEL_NL(m, "noise:%d\n", padapter->recvpriv.noise);
        DBG_871X_SEL_NL(m, "noise:%d\n", padapter->recvpriv.noise);
-       rtw_odm_get_perpkt_rssi(m,padapter);
        #ifdef DBG_RX_SIGNAL_DISPLAY_RAW_DATA
        #ifdef DBG_RX_SIGNAL_DISPLAY_RAW_DATA
+       rtw_odm_get_perpkt_rssi(m,padapter);
        rtw_get_raw_rssi_info(m,padapter);
        #endif
        return 0;
        rtw_get_raw_rssi_info(m,padapter);
        #endif
        return 0;
@@ -1261,14 +1385,24 @@ int proc_get_rx_ampdu(struct seq_file *m, void *v)
 {
        struct net_device *dev = m->private;
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
 {
        struct net_device *dev = m->private;
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
 
 
-       if(pregpriv)
-               DBG_871X_SEL_NL(m,
-                       "bAcceptAddbaReq = %d , 0:Reject AP's Add BA req, 1:Accept AP's Add BA req.\n", pmlmeinfo->bAcceptAddbaReq
-                       );
+       DBG_871X_SEL(m, "accept: ");
+       if (padapter->fix_rx_ampdu_accept == RX_AMPDU_ACCEPT_INVALID)
+               DBG_871X_SEL_NL(m, "%u%s\n", rtw_rx_ampdu_is_accept(padapter), "(auto)");
+       else
+               DBG_871X_SEL_NL(m, "%u%s\n", padapter->fix_rx_ampdu_accept, "(fixed)");
+
+       DBG_871X_SEL(m, "size: ");
+       if (padapter->fix_rx_ampdu_size == RX_AMPDU_SIZE_INVALID)
+               DBG_871X_SEL_NL(m, "%u%s\n", rtw_rx_ampdu_size(padapter), "(auto)");
+       else
+               DBG_871X_SEL_NL(m, "%u%s\n", padapter->fix_rx_ampdu_size, "(fixed)");
+
+       DBG_871X_SEL_NL(m, "%19s %17s\n", "fix_rx_ampdu_accept", "fix_rx_ampdu_size");
+
+       DBG_871X_SEL(m, "%-19d %-17u\n"
+               , padapter->fix_rx_ampdu_accept
+               , padapter->fix_rx_ampdu_size);
 
        return 0;
 }
 
        return 0;
 }
@@ -1281,28 +1415,25 @@ ssize_t proc_set_rx_ampdu(struct file *file, const char __user *buffer, size_t c
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        char tmp[32];
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        char tmp[32];
-       u32 mode;
+       u8 accept;
+       u8 size;
 
        if (count < 1)
                return -EFAULT;
 
 
        if (count < 1)
                return -EFAULT;
 
-       if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {              
+       if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
 
 
-               int num = sscanf(tmp, "%d ", &mode);
+               int num = sscanf(tmp, "%hhu %hhu", &accept, &size);
 
 
-               if( pregpriv && mode < 2 )
-               {
-                       pmlmeinfo->bAcceptAddbaReq = mode;
-                       DBG_871X("pmlmeinfo->bAcceptAddbaReq=%d \n",pmlmeinfo->bAcceptAddbaReq);
-                       if(mode == 0)
-                       {
-                               //tear down Rx AMPDU
-                               send_delba(padapter, 0, get_my_bssid(&(pmlmeinfo->network)));// recipient
-                       }
-               }
+               if (num >= 1)
+                       rtw_rx_ampdu_set_accept(padapter, accept, RX_AMPDU_DRV_FIXED);
+               if (num >= 2)
+                       rtw_rx_ampdu_set_size(padapter, size, RX_AMPDU_DRV_FIXED);
 
 
+               rtw_rx_ampdu_apply(padapter);
        }
 
        }
 
+exit:
        return count;
 }
 int proc_get_rx_ampdu_factor(struct seq_file *m, void *v)
        return count;
 }
 int proc_get_rx_ampdu_factor(struct seq_file *m, void *v)
@@ -1588,9 +1719,8 @@ int proc_get_all_sta_info(struct seq_file *m, void *v)
        struct sta_info *psta;
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        struct sta_priv *pstapriv = &padapter->stapriv;
        struct sta_info *psta;
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        struct sta_priv *pstapriv = &padapter->stapriv;
-       int i, j;
+       int i;
        _list   *plist, *phead;
        _list   *plist, *phead;
-       struct recv_reorder_ctrl *preorder_ctrl;
 
        DBG_871X_SEL_NL(m, "sta_dz_bitmap=0x%x, tim_bitmap=0x%x\n", pstapriv->sta_dz_bitmap, pstapriv->tim_bitmap);
 
 
        DBG_871X_SEL_NL(m, "sta_dz_bitmap=0x%x, tim_bitmap=0x%x\n", pstapriv->sta_dz_bitmap, pstapriv->tim_bitmap);
 
@@ -1632,15 +1762,8 @@ int proc_get_all_sta_info(struct seq_file *m, void *v)
                                DBG_871X_SEL_NL(m, "wpa2_pairwise_cipher=0x%x\n", psta->wpa2_pairwise_cipher);
                                DBG_871X_SEL_NL(m, "qos_info=0x%x\n", psta->qos_info);
                                DBG_871X_SEL_NL(m, "dot118021XPrivacy=0x%x\n", psta->dot118021XPrivacy);
                                DBG_871X_SEL_NL(m, "wpa2_pairwise_cipher=0x%x\n", psta->wpa2_pairwise_cipher);
                                DBG_871X_SEL_NL(m, "qos_info=0x%x\n", psta->qos_info);
                                DBG_871X_SEL_NL(m, "dot118021XPrivacy=0x%x\n", psta->dot118021XPrivacy);
-                                                               
-                               for(j=0;j<16;j++)
-                               {                                                       
-                                       preorder_ctrl = &psta->recvreorder_ctrl[j];
-                                       if(preorder_ctrl->enable)
-                                       {
-                                               DBG_871X_SEL_NL(m, "tid=%d, indicate_seq=%d\n", j, preorder_ctrl->indicate_seq);
-                                       }
-                               }
+
+                               sta_rx_reorder_ctl_dump(m, psta);
 
 #ifdef CONFIG_TDLS
                                DBG_871X_SEL_NL(m, "tdls_sta_state=0x%08x\n", psta->tdls_sta_state);
 
 #ifdef CONFIG_TDLS
                                DBG_871X_SEL_NL(m, "tdls_sta_state=0x%08x\n", psta->tdls_sta_state);
@@ -2040,5 +2163,538 @@ ssize_t proc_set_new_bcn_max(struct file *file, const char __user *buffer, size_
 
        return count;
 }
 
        return count;
 }
+
+#ifdef CONFIG_POWER_SAVING
+int proc_get_ps_info(struct seq_file *m, void *v)
+{      
+       struct net_device *dev = m->private;
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+       u8 ips_mode = pwrpriv->ips_mode;
+       u8 lps_mode = pwrpriv->power_mgnt;
+       char *str = "";
+
+       DBG_871X_SEL_NL(m, "======Power Saving Info:======\n");
+       DBG_871X_SEL_NL(m, "*IPS:\n");
+
+       if (ips_mode == IPS_NORMAL) {
+#ifdef CONFIG_FWLPS_IN_IPS
+               str = "FW_LPS_IN_IPS";
+#else
+               str = "Card Disable";
+#endif
+       } else if (ips_mode == IPS_NONE) {
+               str = "NO IPS";
+       } else if (ips_mode == IPS_LEVEL_2) {
+               str = "IPS_LEVEL_2";
+       } else {
+               str = "invalid ips_mode";
+       }
+
+       DBG_871X_SEL_NL(m, " IPS mode: %s\n", str);
+       DBG_871X_SEL_NL(m, " IPS enter count:%d, IPS leave count:%d\n",
+                       pwrpriv->ips_enter_cnts, pwrpriv->ips_leave_cnts);
+       DBG_871X_SEL_NL(m, "------------------------------\n");
+       DBG_871X_SEL_NL(m, "*LPS:\n");
+
+       if (lps_mode == PS_MODE_ACTIVE) {
+               str = "NO LPS";
+       } else if (lps_mode == PS_MODE_MIN) {
+               str = "MIN";
+       } else if (lps_mode == PS_MODE_MAX) {
+               str = "MAX";
+       } else if (lps_mode == PS_MODE_DTIM) {
+               str = "DTIM";
+       } else {
+               sprintf(str, "%d", lps_mode);
+       }
+
+       DBG_871X_SEL_NL(m, " LPS mode: %s\n", str);
+
+       if (pwrpriv->dtim != 0)
+               DBG_871X_SEL_NL(m, " DTIM: %d\n", pwrpriv->dtim);
+       DBG_871X_SEL_NL(m, " LPS enter count:%d, LPS leave count:%d\n",
+                       pwrpriv->lps_enter_cnts, pwrpriv->lps_leave_cnts);
+       DBG_871X_SEL_NL(m, "=============================\n");
+       return 0;
+}
+#endif //CONFIG_POWER_SAVING
+
+#ifdef CONFIG_TDLS
+static int proc_tdls_display_tdls_function_info(struct seq_file *m)
+{
+       struct net_device *dev = m->private;
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+       u8 SpaceBtwnItemAndValue = TDLS_DBG_INFO_SPACE_BTWN_ITEM_AND_VALUE;
+       u8 SpaceBtwnItemAndValueTmp = 0;
+       BOOLEAN FirstMatchFound = _FALSE;
+       int j= 0;
+       
+       DBG_871X_SEL_NL(m, "============[TDLS Function Info]============\n");
+       DBG_871X_SEL_NL(m, "%-*s = %s\n", SpaceBtwnItemAndValue, "TDLS Prohibited", (ptdlsinfo->ap_prohibited == _TRUE) ? "_TRUE" : "_FALSE");
+       DBG_871X_SEL_NL(m, "%-*s = %s\n", SpaceBtwnItemAndValue, "TDLS Channel Switch Prohibited", (ptdlsinfo->ch_switch_prohibited == _TRUE) ? "_TRUE" : "_FALSE");
+       DBG_871X_SEL_NL(m, "%-*s = %s\n", SpaceBtwnItemAndValue, "TDLS Link Established", (ptdlsinfo->link_established == _TRUE) ? "_TRUE" : "_FALSE");
+       DBG_871X_SEL_NL(m, "%-*s = %d/%d\n", SpaceBtwnItemAndValue, "TDLS STA Num (Linked/Allowed)", ptdlsinfo->sta_cnt, MAX_ALLOWED_TDLS_STA_NUM);
+       DBG_871X_SEL_NL(m, "%-*s = %s\n", SpaceBtwnItemAndValue, "TDLS Allowed STA Num Reached", (ptdlsinfo->sta_maximum == _TRUE) ? "_TRUE" : "_FALSE");
+
+#ifdef CONFIG_TDLS_CH_SW
+       DBG_871X_SEL_NL(m, "%-*s =", SpaceBtwnItemAndValue, "TDLS CH SW State");
+       if (ptdlsinfo->chsw_info.ch_sw_state == TDLS_STATE_NONE)
+       {
+               DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_STATE_NONE");
+       }
+       else
+       {
+               for (j = 0; j < 32; j++)
+               {
+                       if (ptdlsinfo->chsw_info.ch_sw_state & BIT(j))
+                       {
+                               if (FirstMatchFound ==  _FALSE)
+                               {
+                                       SpaceBtwnItemAndValueTmp = 1;
+                                       FirstMatchFound = _TRUE;
+                               }
+                               else
+                               {
+                                       SpaceBtwnItemAndValueTmp = SpaceBtwnItemAndValue + 3;
+                               }
+                               switch (BIT(j))
+                               {
+                                       case TDLS_INITIATOR_STATE:
+                                               DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_INITIATOR_STATE");
+                                               break;
+                                       case TDLS_RESPONDER_STATE:
+                                               DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_RESPONDER_STATE");
+                                               break;
+                                       case TDLS_LINKED_STATE:
+                                               DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_LINKED_STATE");
+                                               break;
+                                       case TDLS_WAIT_PTR_STATE:               
+                                               DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_WAIT_PTR_STATE");
+                                               break;
+                                       case TDLS_ALIVE_STATE:          
+                                               DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_ALIVE_STATE");
+                                               break;
+                                       case TDLS_CH_SWITCH_ON_STATE:   
+                                               DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_CH_SWITCH_ON_STATE");
+                                               break;
+                                       case TDLS_PEER_AT_OFF_STATE:            
+                                               DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_PEER_AT_OFF_STATE");
+                                               break;
+                                       case TDLS_CH_SW_INITIATOR_STATE:                
+                                               DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_CH_SW_INITIATOR_STATE");
+                                               break;
+                                       case TDLS_WAIT_CH_RSP_STATE:            
+                                               DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValue, " ", "TDLS_WAIT_CH_RSP_STATE");
+                                               break;
+                                       default:
+                                               DBG_871X_SEL_NL(m, "%-*sBIT(%d)\n", SpaceBtwnItemAndValueTmp, " ", j);
+                                               break;
+                               }
+                       }
+               }
+       }
+
+       DBG_871X_SEL_NL(m, "%-*s = %s\n", SpaceBtwnItemAndValue, "TDLS CH SW On", (ATOMIC_READ(&ptdlsinfo->chsw_info.chsw_on) == _TRUE) ? "_TRUE" : "_FALSE");
+       DBG_871X_SEL_NL(m, "%-*s = %d\n", SpaceBtwnItemAndValue, "TDLS CH SW Off-Channel Num", ptdlsinfo->chsw_info.off_ch_num);
+       DBG_871X_SEL_NL(m, "%-*s = %d\n", SpaceBtwnItemAndValue, "TDLS CH SW Channel Offset", ptdlsinfo->chsw_info.ch_offset);
+       DBG_871X_SEL_NL(m, "%-*s = %d\n", SpaceBtwnItemAndValue, "TDLS CH SW Current Time", ptdlsinfo->chsw_info.cur_time);
+       DBG_871X_SEL_NL(m, "%-*s = %s\n", SpaceBtwnItemAndValue, "TDLS CH SW Delay Switch Back", (ptdlsinfo->chsw_info.delay_switch_back == _TRUE) ? "_TRUE" : "_FALSE");
+       DBG_871X_SEL_NL(m, "%-*s = %d\n", SpaceBtwnItemAndValue, "TDLS CH SW Dump Back", ptdlsinfo->chsw_info.dump_stack);
+#endif
+
+       DBG_871X_SEL_NL(m, "%-*s = %s\n", SpaceBtwnItemAndValue, "TDLS Device Discovered", (ptdlsinfo->dev_discovered == _TRUE) ? "_TRUE" : "_FALSE");
+       DBG_871X_SEL_NL(m, "%-*s = %s\n", SpaceBtwnItemAndValue, "TDLS Enable", (ptdlsinfo->tdls_enable == _TRUE) ? "_TRUE" : "_FALSE");
+       DBG_871X_SEL_NL(m, "%-*s = %s\n", SpaceBtwnItemAndValue, "TDLS Driver Setup", (ptdlsinfo->driver_setup == _TRUE) ? "_TRUE" : "_FALSE");
+       
+       return 0;
+}
+
+static int proc_tdls_display_network_info(struct seq_file *m)
+{
+       struct net_device *dev = m->private;
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+       struct wlan_network *cur_network = &(pmlmepriv->cur_network);
+       int i = 0;
+       u8 SpaceBtwnItemAndValue = TDLS_DBG_INFO_SPACE_BTWN_ITEM_AND_VALUE;
+
+       /* Display the linked AP/GO info */
+       DBG_871X_SEL_NL(m, "============[Associated AP/GO Info]============\n");
+       
+       if ((pmlmepriv->fw_state & WIFI_STATION_STATE) && (pmlmepriv->fw_state & _FW_LINKED))
+       {
+               DBG_871X_SEL_NL(m, "%-*s = %s\n", SpaceBtwnItemAndValue, "BSSID", cur_network->network.Ssid.Ssid);
+               DBG_871X_SEL_NL(m, "%-*s = "MAC_FMT"\n", SpaceBtwnItemAndValue, "Mac Address", MAC_ARG(cur_network->network.MacAddress));
+               
+               DBG_871X_SEL_NL(m, "%-*s = ", SpaceBtwnItemAndValue, "Wireless Mode");
+               for (i = 0; i < 8; i++)
+               {
+                       if (pmlmeext->cur_wireless_mode & BIT(i))
+                       {
+                               switch (BIT(i))
+                               {
+                                       case WIRELESS_11B: 
+                                               DBG_871X_SEL_NL(m, "%4s", "11B ");
+                                               break;
+                                       case WIRELESS_11G:
+                                               DBG_871X_SEL_NL(m, "%4s", "11G ");
+                                               break;
+                                       case WIRELESS_11A:
+                                               DBG_871X_SEL_NL(m, "%4s", "11A ");
+                                               break;
+                                       case WIRELESS_11_24N:
+                                               DBG_871X_SEL_NL(m, "%7s", "11_24N ");
+                                               break;
+                                       case WIRELESS_11_5N:
+                                               DBG_871X_SEL_NL(m, "%6s", "11_5N ");
+                                               break;
+                                       case WIRELESS_AUTO:
+                                               DBG_871X_SEL_NL(m, "%5s", "AUTO ");
+                                               break;
+                                       case WIRELESS_11AC:
+                                               DBG_871X_SEL_NL(m, "%5s", "11AC ");
+                                               break;
+                               }
+                       }
+               }
+               DBG_871X_SEL_NL(m, "\n");
+
+               DBG_871X_SEL_NL(m, "%-*s = ", SpaceBtwnItemAndValue, "Privacy");
+               switch (padapter->securitypriv.dot11PrivacyAlgrthm)
+               {
+                       case _NO_PRIVACY_:
+                               DBG_871X_SEL_NL(m, "%s\n", "NO PRIVACY");
+                               break;
+                       case _WEP40_:   
+                               DBG_871X_SEL_NL(m, "%s\n", "WEP 40");
+                               break;
+                       case _TKIP_:
+                               DBG_871X_SEL_NL(m, "%s\n", "TKIP");
+                               break;
+                       case _TKIP_WTMIC_:
+                               DBG_871X_SEL_NL(m, "%s\n", "TKIP WTMIC");
+                               break;
+                       case _AES_:                             
+                               DBG_871X_SEL_NL(m, "%s\n", "AES");
+                               break;
+                       case _WEP104_:
+                               DBG_871X_SEL_NL(m, "%s\n", "WEP 104");
+                               break;
+                       case _WEP_WPA_MIXED_:
+                               DBG_871X_SEL_NL(m, "%s\n", "WEP/WPA Mixed");
+                               break;
+                       case _SMS4_:
+                               DBG_871X_SEL_NL(m, "%s\n", "SMS4");
+                               break;
+#ifdef CONFIG_IEEE80211W
+                       case _BIP_:
+                               DBG_871X_SEL_NL(m, "%s\n", "BIP");
+                               break;  
+#endif //CONFIG_IEEE80211W
+               }
+               
+               DBG_871X_SEL_NL(m, "%-*s = %d\n", SpaceBtwnItemAndValue, "Channel", pmlmeext->cur_channel);
+               DBG_871X_SEL_NL(m, "%-*s = ", SpaceBtwnItemAndValue, "Channel Offset");
+               switch (pmlmeext->cur_ch_offset)
+               {
+                       case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
+                               DBG_871X_SEL_NL(m, "%s\n", "N/A");
+                               break;
+                       case HAL_PRIME_CHNL_OFFSET_LOWER:
+                               DBG_871X_SEL_NL(m, "%s\n", "Lower");
+                               break;
+                       case HAL_PRIME_CHNL_OFFSET_UPPER:
+                               DBG_871X_SEL_NL(m, "%s\n", "Upper");
+                               break;
+               }
+               
+               DBG_871X_SEL_NL(m, "%-*s = ", SpaceBtwnItemAndValue, "Bandwidth Mode");
+               switch (pmlmeext->cur_bwmode)
+               {
+                       case CHANNEL_WIDTH_20:
+                               DBG_871X_SEL_NL(m, "%s\n", "20MHz");
+                               break;
+                       case CHANNEL_WIDTH_40:
+                               DBG_871X_SEL_NL(m, "%s\n", "40MHz");
+                               break;
+                       case CHANNEL_WIDTH_80:
+                               DBG_871X_SEL_NL(m, "%s\n", "80MHz");
+                               break;
+                       case CHANNEL_WIDTH_160:
+                               DBG_871X_SEL_NL(m, "%s\n", "160MHz");
+                               break;
+                       case CHANNEL_WIDTH_80_80:
+                               DBG_871X_SEL_NL(m, "%s\n", "80MHz + 80MHz");
+                               break;
+               }
+       }
+       else
+       {
+               DBG_871X_SEL_NL(m, "No association with AP/GO exists!\n");
+       }
+
+       return 0;
+}
+
+static int proc_tdls_display_tdls_sta_info(struct seq_file *m)
+{
+       struct net_device *dev = m->private;
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct sta_priv *pstapriv = &padapter->stapriv;
+       struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+       struct sta_info *psta;
+       int i = 0, j = 0;
+       _irqL irqL;
+       _list   *plist, *phead;
+       u8 SpaceBtwnItemAndValue = TDLS_DBG_INFO_SPACE_BTWN_ITEM_AND_VALUE;
+       u8 SpaceBtwnItemAndValueTmp = 0;
+       u8 NumOfTdlsStaToShow = 0;
+       BOOLEAN FirstMatchFound = _FALSE;
+       
+       /* Search for TDLS sta info to display */
+       _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
+       for (i=0; i< NUM_STA; i++)
+       {
+               phead = &(pstapriv->sta_hash[i]);
+               plist = get_next(phead);        
+               while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
+               {
+                               psta = LIST_CONTAINOR(plist, struct sta_info, hash_list);
+                               plist = get_next(plist);
+                               if (psta->tdls_sta_state != TDLS_STATE_NONE)
+                               {
+                                       /* We got one TDLS sta info to show */
+                                       DBG_871X_SEL_NL(m, "============[TDLS Peer STA Info: STA %d]============\n", ++NumOfTdlsStaToShow);
+                                       DBG_871X_SEL_NL(m, "%-*s = "MAC_FMT"\n", SpaceBtwnItemAndValue, "Mac Address", MAC_ARG(psta->hwaddr));
+                                       DBG_871X_SEL_NL(m, "%-*s =", SpaceBtwnItemAndValue, "TDLS STA State");
+                                       SpaceBtwnItemAndValueTmp = 0;
+                                       FirstMatchFound = _FALSE;
+                                       for (j = 0; j < 32; j++)
+                                       {
+                                               if (psta->tdls_sta_state & BIT(j))
+                                               {
+                                                       if (FirstMatchFound ==  _FALSE)
+                                                       {
+                                                               SpaceBtwnItemAndValueTmp = 1;
+                                                               FirstMatchFound = _TRUE;
+                                                       }
+                                                       else
+                                                       {
+                                                               SpaceBtwnItemAndValueTmp = SpaceBtwnItemAndValue + 3;
+                                                       }
+                                                       switch (BIT(j))
+                                                       {
+                                                               case TDLS_INITIATOR_STATE:
+                                                                       DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_INITIATOR_STATE");
+                                                                       break;
+                                                               case TDLS_RESPONDER_STATE:
+                                                                       DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_RESPONDER_STATE");
+                                                                       break;
+                                                               case TDLS_LINKED_STATE:
+                                                                       DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_LINKED_STATE");
+                                                                       break;
+                                                               case TDLS_WAIT_PTR_STATE:               
+                                                                       DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_WAIT_PTR_STATE");
+                                                                       break;
+                                                               case TDLS_ALIVE_STATE:          
+                                                                       DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_ALIVE_STATE");
+                                                                       break;
+                                                               case TDLS_CH_SWITCH_ON_STATE:   
+                                                                       DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_CH_SWITCH_ON_STATE");
+                                                                       break;
+                                                               case TDLS_PEER_AT_OFF_STATE:            
+                                                                       DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_PEER_AT_OFF_STATE");
+                                                                       break;
+                                                               case TDLS_CH_SW_INITIATOR_STATE:                
+                                                                       DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValueTmp, " ", "TDLS_CH_SW_INITIATOR_STATE");
+                                                                       break;
+                                                               case TDLS_WAIT_CH_RSP_STATE:            
+                                                                       DBG_871X_SEL_NL(m, "%-*s%s\n", SpaceBtwnItemAndValue, " ", "TDLS_WAIT_CH_RSP_STATE");
+                                                                       break;
+                                                               default:
+                                                                       DBG_871X_SEL_NL(m, "%-*sBIT(%d)\n", SpaceBtwnItemAndValueTmp, " ", j);
+                                                                       break;
+                                                       }
+                                               }
+                                       }
+
+                                       DBG_871X_SEL_NL(m, "%-*s = ", SpaceBtwnItemAndValue, "Wireless Mode");
+                                       for (j = 0; j < 8; j++)
+                                       {
+                                               if (psta->wireless_mode & BIT(j))
+                                               {
+                                                       switch (BIT(j))
+                                                       {
+                                                               case WIRELESS_11B: 
+                                                                       DBG_871X_SEL_NL(m, "%4s", "11B ");
+                                                                       break;
+                                                               case WIRELESS_11G:
+                                                                       DBG_871X_SEL_NL(m, "%4s", "11G ");
+                                                                       break;
+                                                               case WIRELESS_11A:
+                                                                       DBG_871X_SEL_NL(m, "%4s", "11A ");
+                                                                       break;
+                                                               case WIRELESS_11_24N:
+                                                                       DBG_871X_SEL_NL(m, "%7s", "11_24N ");
+                                                                       break;
+                                                               case WIRELESS_11_5N:
+                                                                       DBG_871X_SEL_NL(m, "%6s", "11_5N ");
+                                                                       break;
+                                                               case WIRELESS_AUTO:
+                                                                       DBG_871X_SEL_NL(m, "%5s", "AUTO ");
+                                                                       break;
+                                                               case WIRELESS_11AC:
+                                                                       DBG_871X_SEL_NL(m, "%5s", "11AC ");
+                                                                       break;
+                                                       }
+                                               }
+                                       }
+                                       DBG_871X_SEL_NL(m, "\n");
+
+                                       DBG_871X_SEL_NL(m, "%-*s = ", SpaceBtwnItemAndValue, "Bandwidth Mode");
+                                       switch (psta->bw_mode)
+                                       {
+                                               case CHANNEL_WIDTH_20:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "20MHz");
+                                                       break;
+                                               case CHANNEL_WIDTH_40:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "40MHz");
+                                                       break;
+                                               case CHANNEL_WIDTH_80:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "80MHz");
+                                                       break;
+                                               case CHANNEL_WIDTH_160:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "160MHz");
+                                                       break;
+                                               case CHANNEL_WIDTH_80_80:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "80MHz + 80MHz");
+                                                       break;
+                                       }
+
+                                       DBG_871X_SEL_NL(m, "%-*s = ", SpaceBtwnItemAndValue, "Privacy");
+                                       switch (psta->dot118021XPrivacy)
+                                       {
+                                               case _NO_PRIVACY_:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "NO PRIVACY");
+                                                       break;
+                                               case _WEP40_:   
+                                                       DBG_871X_SEL_NL(m, "%s\n", "WEP 40");
+                                                       break;
+                                               case _TKIP_:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "TKIP");
+                                                       break;
+                                               case _TKIP_WTMIC_:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "TKIP WTMIC");
+                                                       break;
+                                               case _AES_:                             
+                                                       DBG_871X_SEL_NL(m, "%s\n", "AES");
+                                                       break;
+                                               case _WEP104_:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "WEP 104");
+                                                       break;
+                                               case _WEP_WPA_MIXED_:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "WEP/WPA Mixed");
+                                                       break;
+                                               case _SMS4_:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "SMS4");
+                                                       break;
+#ifdef CONFIG_IEEE80211W
+                                               case _BIP_:
+                                                       DBG_871X_SEL_NL(m, "%s\n", "BIP");
+                                                       break;
+#endif //CONFIG_IEEE80211W
+                                       }
+
+                                       DBG_871X_SEL_NL(m, "%-*s = %d sec/%d sec\n", SpaceBtwnItemAndValue, "TPK Lifetime (Current/Expire)", psta->TPK_count, psta->TDLS_PeerKey_Lifetime);
+                                       DBG_871X_SEL_NL(m, "%-*s = %llu\n", SpaceBtwnItemAndValue, "Tx Packets Over Direct Link", psta->sta_stats.tx_pkts);
+                                       DBG_871X_SEL_NL(m, "%-*s = %llu\n", SpaceBtwnItemAndValue, "Rx Packets Over Direct Link", psta->sta_stats.rx_data_pkts);
+                               }
+               }
+       }
+       _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
+       if (NumOfTdlsStaToShow == 0)
+       {
+               DBG_871X_SEL_NL(m, "============[TDLS Peer STA Info]============\n");
+               DBG_871X_SEL_NL(m, "No TDLS direct link exists!\n");
+       }
+
+       return 0;
+}
+
+int proc_get_tdls_info(struct seq_file *m, void *v)
+{
+       struct net_device *dev = m->private;
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+       struct wlan_network *cur_network = &(pmlmepriv->cur_network);
+       struct sta_priv *pstapriv = &padapter->stapriv;
+       struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+       struct sta_info *psta;
+       int i = 0, j = 0;
+       _irqL irqL;
+       _list   *plist, *phead;
+       u8 SpaceBtwnItemAndValue = 41;
+       u8 SpaceBtwnItemAndValueTmp = 0;
+       u8 NumOfTdlsStaToShow = 0;
+       BOOLEAN FirstMatchFound = _FALSE;
+
+       proc_tdls_display_tdls_function_info(m);
+       proc_tdls_display_network_info(m);
+       proc_tdls_display_tdls_sta_info(m);     
+
+       return 0;
+}
+#endif
+
+int proc_get_monitor(struct seq_file *m, void *v)
+{
+       struct net_device *dev = m->private;
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+
+       if (WIFI_MONITOR_STATE == get_fwstate(pmlmepriv)) {
+               DBG_871X_SEL_NL(m, "Monitor mode : Enable\n");
+
+               DBG_871X_SEL_NL(m, "ch=%d, ch_offset=%d, bw=%d\n",
+                                               rtw_get_oper_ch(padapter), rtw_get_oper_choffset(padapter), rtw_get_oper_bw(padapter));
+       } else {
+               DBG_871X_SEL_NL(m, "Monitor mode : Disable\n");
+       }
+
+       return 0;
+}
+
+ssize_t proc_set_monitor(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
+{
+       char tmp[32];
+       struct net_device *dev = data;
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       u8 target_chan, target_offset, target_bw;
+
+       if (count < 3) {
+               DBG_871X("argument size is less than 3\n");
+               return -EFAULT;
+       }
+
+       if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
+               int num = sscanf(tmp, "%hhu %hhu %hhu", &target_chan, &target_offset, &target_bw);
+
+               if (num != 3) {
+                       DBG_871X("invalid write_reg parameter!\n");
+                       return count;
+               }
+
+               padapter->mlmeextpriv.cur_channel  = target_chan;
+               set_channel_bwmode(padapter, target_chan, target_offset, target_bw);
+       }
+
+       return count;
+}
+
 #endif
 
 #endif
 
index ba6cad26514bcd58634f97d0c8bc59b8e28b021b..6c5f744e7c742ae275e5868cbd1d5b9693f5faad 100755 (executable)
@@ -88,7 +88,7 @@ uint  rtw_is_cckrates_included(u8 *rate)
                {               
                        if  (  (((rate[i]) & 0x7f) == 2)        || (((rate[i]) & 0x7f) == 4) ||         
                        (((rate[i]) & 0x7f) == 11)  || (((rate[i]) & 0x7f) == 22) )             
                {               
                        if  (  (((rate[i]) & 0x7f) == 2)        || (((rate[i]) & 0x7f) == 4) ||         
                        (((rate[i]) & 0x7f) == 11)  || (((rate[i]) & 0x7f) == 22) )             
-                       return _TRUE;   
+                               return _TRUE;
                        i++;
                }
                
                        i++;
                }
                
@@ -104,8 +104,7 @@ uint        rtw_is_cckratesonly_included(u8 *rate)
        {
                        if  (  (((rate[i]) & 0x7f) != 2) && (((rate[i]) & 0x7f) != 4) &&
                                (((rate[i]) & 0x7f) != 11)  && (((rate[i]) & 0x7f) != 22) )
        {
                        if  (  (((rate[i]) & 0x7f) != 2) && (((rate[i]) & 0x7f) != 4) &&
                                (((rate[i]) & 0x7f) != 11)  && (((rate[i]) & 0x7f) != 22) )
-
-                       return _FALSE;          
+                               return _FALSE;
 
                        i++;
        }
 
                        i++;
        }
@@ -933,41 +932,45 @@ u8 *rtw_get_wps_ie_from_scan_queue(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps
 u8 *rtw_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen)
 {
        uint cnt;
 u8 *rtw_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen)
 {
        uint cnt;
-       u8 *wpsie_ptr=NULL;
-       u8 eid, wps_oui[4]={0x0,0x50,0xf2,0x04};
+       u8 *wpsie_ptr = NULL;
+       u8 eid, wps_oui[4] = {0x00, 0x50, 0xf2, 0x04};
 
 
-       if(wps_ielen)
+       if (wps_ielen)
                *wps_ielen = 0;
 
                *wps_ielen = 0;
 
-       if(!in_ie || in_len<=0)
+       if (!in_ie) {
+               rtw_warn_on(1);
+               return wpsie_ptr;
+       }
+
+       if (in_len <= 0)
                return wpsie_ptr;
 
        cnt = 0;
 
                return wpsie_ptr;
 
        cnt = 0;
 
-       while(cnt<in_len)
-       {
+       while (cnt + 1 + 4 < in_len) {
                eid = in_ie[cnt];
 
                eid = in_ie[cnt];
 
-               if((eid==_WPA_IE_ID_)&&(_rtw_memcmp(&in_ie[cnt+2], wps_oui, 4)==_TRUE))
-               {
-                       wpsie_ptr = &in_ie[cnt];
+               if (cnt + 1 + 4 >= MAX_IE_SZ) {
+                       rtw_warn_on(1);
+                       return NULL;
+               }
 
 
-                       if(wps_ie)
-                               _rtw_memcpy(wps_ie, &in_ie[cnt], in_ie[cnt+1]+2);
-                       
-                       if(wps_ielen)
-                               *wps_ielen = in_ie[cnt+1]+2;
-                       
-                       cnt+=in_ie[cnt+1]+2;
+               if (eid == WLAN_EID_VENDOR_SPECIFIC && _rtw_memcmp(&in_ie[cnt + 2], wps_oui, 4) == _TRUE) {
+                       wpsie_ptr = in_ie + cnt;
+
+                       if (wps_ie)
+                               _rtw_memcpy(wps_ie, &in_ie[cnt], in_ie[cnt + 1] + 2);
+
+                       if (wps_ielen)
+                               *wps_ielen = in_ie[cnt + 1] + 2;
 
                        break;
 
                        break;
+               } else {
+                       cnt += in_ie[cnt + 1] + 2;
                }
                }
-               else
-               {
-                       cnt+=in_ie[cnt+1]+2; //goto next        
-               }               
 
 
-       }       
+       }
 
        return wpsie_ptr;
 }
 
        return wpsie_ptr;
 }
@@ -1382,60 +1385,119 @@ int rtw_get_mac_addr_intel(unsigned char *buf)
 }
 #endif //CONFIG_PLATFORM_INTEL_BYT
 
 }
 #endif //CONFIG_PLATFORM_INTEL_BYT
 
+/*
+ * Description:
+ * rtw_check_invalid_mac_address: 
+ * This is only used for checking mac address valid or not.
+ *
+ * Input:
+ * adapter: mac_address pointer.
+ *
+ * Output:
+ * _TRUE: The mac address is invalid.
+ * _FALSE: The mac address is valid.
+ *
+ * Auther: Isaac.Li
+ */
+u8 rtw_check_invalid_mac_address(u8 *mac_addr)
+{
+       u8 null_mac_addr[ETH_ALEN] = {0, 0, 0, 0, 0, 0};
+       u8 multi_mac_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+       u8 res = _FALSE;
+
+       if (_rtw_memcmp(mac_addr, null_mac_addr, ETH_ALEN)) {
+               res = _TRUE;
+               goto func_exit;
+       }
+
+       if (_rtw_memcmp(mac_addr, multi_mac_addr, ETH_ALEN)) {
+               res = _TRUE;
+               goto func_exit;
+       }
+
+       if (mac_addr[0] & BIT0) {
+               res = _TRUE;
+               goto func_exit;
+       }
+
+       if (mac_addr[0] & BIT1) {
+               res = _TRUE;
+               goto func_exit;
+       }
+
+func_exit:
+       return res;
+}
+
 extern char* rtw_initmac;
 #include <linux/rfkill-wlan.h>
 extern char* rtw_initmac;
 #include <linux/rfkill-wlan.h>
-void rtw_macaddr_cfg(u8 *mac_addr)
+/**
+ * rtw_macaddr_cfg - Decide the mac address used
+ * @out: buf to store mac address decided
+ * @hw_mac_addr: mac address from efuse/epprom
+ */
+void rtw_macaddr_cfg(u8 *out, const u8 *hw_mac_addr)
 {
        u8 mac[ETH_ALEN];
 {
        u8 mac[ETH_ALEN];
-       if(mac_addr == NULL)    return;
-       
-       if ( rtw_initmac )
-       {       //      Users specify the mac address
-               int jj,kk;
 
 
-               for( jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3 )
-               {
-                       mac[jj] = key_2char2num(rtw_initmac[kk], rtw_initmac[kk+ 1]);
-               }
-               _rtw_memcpy(mac_addr, mac, ETH_ALEN);
-       }
-#ifdef CONFIG_PLATFORM_INTEL_BYT
-       else if (0 == rtw_get_mac_addr_intel(mac))
-       {
-               _rtw_memcpy(mac_addr, mac, ETH_ALEN);
+       if (out == NULL) {
+               rtw_warn_on(1);
+               return;
        }
        }
-#endif //CONFIG_PLATFORM_INTEL_BYT
-       else
-    {
-        printk("Wifi Efuse Mac => %02x:%02x:%02x:%02x:%02x:%02x\n", mac_addr[0], mac_addr[1],
-            mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
+
+       /* Users specify the mac address */
+       if (rtw_initmac) {
+               int jj,kk;
+
+               for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3)
+                       mac[jj] = key_2char2num(rtw_initmac[kk], rtw_initmac[kk + 1]);
+
+               goto err_chk;
+         }
+        
+        else {
+
+        printk("Wifi Efuse Mac => %02x:%02x:%02x:%02x:%02x:%02x\n", out[0], out[1],
+            out[2], out[3], out[4], out[5]);
         if (!rockchip_wifi_mac_addr(mac)) {
             printk("=========> get mac address from flash=[%02x:%02x:%02x:%02x:%02x:%02x]\n", mac[0], mac[1],
                 mac[2], mac[3], mac[4], mac[5]);
         if (!rockchip_wifi_mac_addr(mac)) {
             printk("=========> get mac address from flash=[%02x:%02x:%02x:%02x:%02x:%02x]\n", mac[0], mac[1],
                 mac[2], mac[3], mac[4], mac[5]);
-            _rtw_memcpy(mac_addr, mac, ETH_ALEN);
+            _rtw_memcpy(out, mac, ETH_ALEN);
+            goto err_chk;
         } else {
             //  Use the mac address stored in the Efuse
         } else {
             //  Use the mac address stored in the Efuse
-            _rtw_memcpy(mac, mac_addr, ETH_ALEN);
+            _rtw_memcpy(mac, hw_mac_addr, ETH_ALEN);
+              goto err_chk;
         }
         }
-    }
 
 
-       if (((mac[0]==0xff) &&(mac[1]==0xff) && (mac[2]==0xff) &&
-            (mac[3]==0xff) && (mac[4]==0xff) &&(mac[5]==0xff)) ||
-           ((mac[0]==0x0) && (mac[1]==0x0) && (mac[2]==0x0) &&
-            (mac[3]==0x0) && (mac[4]==0x0) &&(mac[5]==0x0)))
-       {
+     }
+
+#ifdef CONFIG_PLATFORM_INTEL_BYT
+       if (rtw_get_mac_addr_intel(mac) == 0)
+               goto err_chk;
+#endif
+
+       
+
+err_chk:
+       //if (rtw_check_invalid_mac_address(mac) == _TRUE) 
+        if (((mac[0]==0xff) &&(mac[1]==0xff) && (mac[2]==0xff) &&
+             (mac[3]==0xff) && (mac[4]==0xff) &&(mac[5]==0xff)) ||
+            ((mac[0]==0x0) && (mac[1]==0x0) && (mac[2]==0x0) &&
+             (mac[3]==0x0) && (mac[4]==0x0) &&(mac[5]==0x0))){
+               DBG_871X_LEVEL(_drv_err_, "invalid mac addr:"MAC_FMT", assign default one!!!\n", MAC_ARG(mac));
+
+               /* use default mac address */
                mac[0] = 0x00;
                mac[1] = 0xe0;
                mac[2] = 0x4c;
                mac[3] = 0x87;
                mac[4] = 0x00;
                mac[5] = 0x00;
                mac[0] = 0x00;
                mac[1] = 0xe0;
                mac[2] = 0x4c;
                mac[3] = 0x87;
                mac[4] = 0x00;
                mac[5] = 0x00;
-               // use default mac addresss
-               _rtw_memcpy(mac_addr, mac, ETH_ALEN);
-               DBG_871X("MAC Address from efuse error, assign default one !!!\n");
-       }       
+       }
 
 
-       DBG_871X("rtw_macaddr_cfg MAC Address  = "MAC_FMT"\n", MAC_ARG(mac_addr));
+       _rtw_memcpy(out, mac, ETH_ALEN);
+       DBG_871X("%s mac addr:"MAC_FMT"\n", __func__, MAC_ARG(out));
 }
 
 #ifdef CONFIG_80211N_HT
 }
 
 #ifdef CONFIG_80211N_HT
@@ -1647,47 +1709,48 @@ u8 *rtw_get_p2p_ie_from_scan_queue(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_
  */
 u8 *rtw_get_p2p_ie(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen)
 {
  */
 u8 *rtw_get_p2p_ie(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen)
 {
-       uint cnt = 0;
-       u8 *p2p_ie_ptr;
-       u8 eid, p2p_oui[4]={0x50,0x6F,0x9A,0x09};
+       uint cnt;
+       u8 *p2p_ie_ptr = NULL;
+       u8 eid, p2p_oui[4] = {0x50, 0x6F, 0x9A, 0x09};
 
 
-       if ( p2p_ielen != NULL )
+       if (p2p_ielen)
                *p2p_ielen = 0;
 
                *p2p_ielen = 0;
 
-       while(cnt<in_len)
-       {
+       if (!in_ie || in_len < 0) {
+               rtw_warn_on(1);
+               return p2p_ie_ptr;
+       }
+
+       if (in_len <= 0)
+               return p2p_ie_ptr;
+
+       cnt = 0;
+
+       while (cnt + 1 + 4 < in_len) {
                eid = in_ie[cnt];
                eid = in_ie[cnt];
-               if ((in_len < 0) || (cnt > MAX_IE_SZ)) {
-                       rtw_dump_stack();
+
+               if (cnt + 1 + 4 >= MAX_IE_SZ) {
+                       rtw_warn_on(1);
                        return NULL;
                        return NULL;
-               }               
-               if( ( eid == _VENDOR_SPECIFIC_IE_ ) && ( _rtw_memcmp( &in_ie[cnt+2], p2p_oui, 4) == _TRUE ) )
-               {
+               }
+
+               if (eid == WLAN_EID_VENDOR_SPECIFIC && _rtw_memcmp(&in_ie[cnt + 2], p2p_oui, 4) == _TRUE) {
                        p2p_ie_ptr = in_ie + cnt;
                        p2p_ie_ptr = in_ie + cnt;
-               
-                       if ( p2p_ie != NULL )
-                       {
-                               _rtw_memcpy( p2p_ie, &in_ie[ cnt ], in_ie[ cnt + 1 ] + 2 );
-                       }
 
 
-                       if ( p2p_ielen != NULL )
-                       {
-                               *p2p_ielen = in_ie[ cnt + 1 ] + 2;
-                       }
-                       
-                       return p2p_ie_ptr;
+                       if (p2p_ie)
+                               _rtw_memcpy(p2p_ie, &in_ie[cnt], in_ie[cnt + 1] + 2);
+
+                       if (p2p_ielen)
+                               *p2p_ielen = in_ie[cnt + 1] + 2;
 
                        break;
 
                        break;
+               } else {
+                       cnt += in_ie[cnt + 1] + 2;
                }
                }
-               else
-               {
-                       cnt += in_ie[ cnt + 1 ] +2; //goto next 
-               }               
-               
-       }       
 
 
-       return NULL;
+       }
 
 
+       return p2p_ie_ptr;
 }
 
 /**
 }
 
 /**
@@ -1850,10 +1913,10 @@ void rtw_WLAN_BSSID_EX_remove_p2p_attr(WLAN_BSSID_EX *bss_ex, u8 attr_id)
        if( (p2p_ie=rtw_get_p2p_ie(bss_ex->IEs+_FIXED_IE_LENGTH_, bss_ex->IELength-_FIXED_IE_LENGTH_, NULL, &p2p_ielen_ori)) ) 
        {
                if (0)
        if( (p2p_ie=rtw_get_p2p_ie(bss_ex->IEs+_FIXED_IE_LENGTH_, bss_ex->IELength-_FIXED_IE_LENGTH_, NULL, &p2p_ielen_ori)) ) 
        {
                if (0)
-               if(rtw_get_p2p_attr(p2p_ie, p2p_ielen_ori, attr_id, NULL, NULL)) {
-                       DBG_871X("rtw_get_p2p_attr: GOT P2P_ATTR:%u!!!!!!!!\n", attr_id);
-                       dump_ies(RTW_DBGDUMP, bss_ex->IEs+_FIXED_IE_LENGTH_, bss_ex->IELength-_FIXED_IE_LENGTH_);
-               }
+                       if(rtw_get_p2p_attr(p2p_ie, p2p_ielen_ori, attr_id, NULL, NULL)) {
+                               DBG_871X("rtw_get_p2p_attr: GOT P2P_ATTR:%u!!!!!!!!\n", attr_id);
+                               dump_ies(RTW_DBGDUMP, bss_ex->IEs+_FIXED_IE_LENGTH_, bss_ex->IELength-_FIXED_IE_LENGTH_);
+                       }
 
                p2p_ielen=rtw_p2p_attr_remove(p2p_ie, p2p_ielen_ori, attr_id);
                if(p2p_ielen != p2p_ielen_ori) {
 
                p2p_ielen=rtw_p2p_attr_remove(p2p_ie, p2p_ielen_ori, attr_id);
                if(p2p_ielen != p2p_ielen_ori) {
index d97d3aa71a099f6b5644d5d96ffe0139cbfb6359..998965975491d9faeca6b8a17bdab19bbc0e6d54 100755 (executable)
@@ -492,7 +492,6 @@ NDIS_STATUS oid_rt_get_channelplan_hdl(struct oid_par_priv* poid_par_priv)
 {
        NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
        PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
 {
        NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
        PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
-       struct eeprom_priv*     peeprompriv = &padapter->eeprompriv;    
 
        if(poid_par_priv->type_of_oid != QUERY_OID)
        {
 
        if(poid_par_priv->type_of_oid != QUERY_OID)
        {
@@ -500,7 +499,7 @@ NDIS_STATUS oid_rt_get_channelplan_hdl(struct oid_par_priv* poid_par_priv)
                return status;
        }               
        *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
                return status;
        }               
        *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
-       *(u16 *)poid_par_priv->information_buf = peeprompriv->channel_plan ;
+       *(u16 *)poid_par_priv->information_buf = padapter->mlmepriv.ChannelPlan ;
 
        return status;
 }
 
        return status;
 }
@@ -508,7 +507,6 @@ NDIS_STATUS oid_rt_set_channelplan_hdl(struct oid_par_priv* poid_par_priv)
 {
        NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
        PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
 {
        NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
        PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
-       struct eeprom_priv*     peeprompriv = &padapter->eeprompriv;    
        
        if(poid_par_priv->type_of_oid != SET_OID)
        {
        
        if(poid_par_priv->type_of_oid != SET_OID)
        {
@@ -516,7 +514,7 @@ NDIS_STATUS oid_rt_set_channelplan_hdl(struct oid_par_priv* poid_par_priv)
                return status;
        }               
        
                return status;
        }               
        
-       peeprompriv->channel_plan = *(u16 *)poid_par_priv->information_buf ;
+       padapter->mlmepriv.ChannelPlan  = *(u16 *)poid_par_priv->information_buf ;
 
        return status;
 }
 
        return status;
 }
index 59b88f4d5c10b138f3719aa94ca0528f33f3dd97..5ca4a56b57ab0c7eb4719de4cfa0ad5faf355089 100755 (executable)
@@ -673,7 +673,10 @@ _func_enter_;
 
                        case Ndis802_11AutoUnknown:
                        case Ndis802_11InfrastructureMax:
 
                        case Ndis802_11AutoUnknown:
                        case Ndis802_11InfrastructureMax:
-                               break;                                                  
+                               break;
+                       case Ndis802_11Monitor:
+                               set_fwstate(pmlmepriv, WIFI_MONITOR_STATE);
+                               break;
                }
 
                //SecClearAllKeys(adapter);
                }
 
                //SecClearAllKeys(adapter);
@@ -996,8 +999,8 @@ _func_enter_;
                        }
                }
 
                        }
                }
 
-               // Check key length for WEP. For NDTEST, 2005.01.27, by rcnjko.
-               if(     (encryptionalgo== _WEP40_|| encryptionalgo== _WEP104_) && (key->KeyLength != 5 || key->KeyLength != 13)) {
+               /* Check key length for WEP. For NDTEST, 2005.01.27, by rcnjko. -> modify checking condition*/
+               if (((encryptionalgo == _WEP40_) && (key->KeyLength != 5)) || ((encryptionalgo == _WEP104_) && (key->KeyLength != 13))) {
                        RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("WEP KeyLength:0x%x != 5 or 13\n", key->KeyLength));
                        ret=_FAIL;
                        goto exit;
                        RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("WEP KeyLength:0x%x != 5 or 13\n", key->KeyLength));
                        ret=_FAIL;
                        goto exit;
@@ -1252,16 +1255,22 @@ _func_enter_;
 
                
                        //Set key to CAM through H2C command
 
                
                        //Set key to CAM through H2C command
+                       #if 0
                        if(bgrouptkey)//never go to here
                        {
                        if(bgrouptkey)//never go to here
                        {
-                               res=rtw_setstakey_cmd(padapter, stainfo, _FALSE, _TRUE);
+                               res=rtw_setstakey_cmd(padapter, stainfo, GROUP_KEY, _TRUE);
                                RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n rtw_set_802_11_add_key:rtw_setstakey_cmd(group)\n"));
                        }
                        else{
                                RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n rtw_set_802_11_add_key:rtw_setstakey_cmd(group)\n"));
                        }
                        else{
-                               res=rtw_setstakey_cmd(padapter, stainfo, _TRUE, _TRUE);
+                               res=rtw_setstakey_cmd(padapter, stainfo, UNICAST_KEY, _TRUE);
                                RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n rtw_set_802_11_add_key:rtw_setstakey_cmd(unicast)\n"));
                        }
                                RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n rtw_set_802_11_add_key:rtw_setstakey_cmd(unicast)\n"));
                        }
+                       #else
                        
                        
+                       res = rtw_setstakey_cmd(padapter, stainfo, UNICAST_KEY, _TRUE);
+                       RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("\n rtw_set_802_11_add_key:rtw_setstakey_cmd(unicast)\n"));
+                       #endif
+
                        if(res ==_FALSE)
                                ret= _FAIL;
                        
                        if(res ==_FALSE)
                                ret= _FAIL;
                        
@@ -1469,7 +1478,7 @@ int rtw_set_country(_adapter *adapter, const char *country_code)
 * 
 * Return _SUCCESS or _FAIL
 */
 * 
 * Return _SUCCESS or _FAIL
 */
-int rtw_set_band(_adapter *adapter, enum _BAND band)
+int rtw_set_band(_adapter *adapter, u8 band)
 {
        if (rtw_band_valid(band)) {
                DBG_871X(FUNC_ADPT_FMT" band:%d\n", FUNC_ADPT_ARG(adapter), band);
 {
        if (rtw_band_valid(band)) {
                DBG_871X(FUNC_ADPT_FMT" band:%d\n", FUNC_ADPT_ARG(adapter), band);
index a4de3e61431fb4feb9ec1d94bbf2f1cafcd00ea4..5675b63d55c813173c94481d53892108a9e79b08 100755 (executable)
@@ -52,6 +52,8 @@ static int __init rtw_mem_init(void)
        struct sk_buff *pskb=NULL;\r
 \r
        printk("%s\n", __func__);\r
        struct sk_buff *pskb=NULL;\r
 \r
        printk("%s\n", __func__);\r
+       pr_info("NR_PREALLOC_RECV_SKB: %d\n", NR_PREALLOC_RECV_SKB);\r
+       pr_info("MAX_RECVBUF_SZ: %d\n", MAX_RECVBUF_SZ);\r
 \r
 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX\r
        for(i=0; i<NR_RECVBUFF; i++)\r\r
 \r
 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX\r
        for(i=0; i<NR_RECVBUFF; i++)\r\r
index 1047bc0269bed6e8cfa9f5816bc7a82759118ecc..c6c707952c265705fba96befeef4e50573f5da5e 100755 (executable)
@@ -1025,7 +1025,8 @@ _func_enter_;
        //_enter_critical_bh(&queue->lock, &irqL);
 
        #if defined(CONFIG_P2P) && defined(CONFIG_P2P_REMOVE_GROUP_INFO)
        //_enter_critical_bh(&queue->lock, &irqL);
 
        #if defined(CONFIG_P2P) && defined(CONFIG_P2P_REMOVE_GROUP_INFO)
-       rtw_WLAN_BSSID_EX_remove_p2p_attr(pnetwork, P2P_ATTR_GROUP_INFO);
+       if (adapter->registrypriv.wifi_spec == 0)
+               rtw_WLAN_BSSID_EX_remove_p2p_attr(pnetwork, P2P_ATTR_GROUP_INFO);
        #endif
        
        update_current_network(adapter, pnetwork);
        #endif
        
        update_current_network(adapter, pnetwork);
@@ -1203,46 +1204,34 @@ _func_exit_;
 void rtw_surveydone_event_callback(_adapter    *adapter, u8 *pbuf)
 {
        _irqL  irqL;
 void rtw_surveydone_event_callback(_adapter    *adapter, u8 *pbuf)
 {
        _irqL  irqL;
-       u8 timer_cancelled = _FALSE;
+       u8 timer_cancelled;
        struct  mlme_priv       *pmlmepriv = &(adapter->mlmepriv);
        struct  mlme_priv       *pmlmepriv = &(adapter->mlmepriv);
-       
-#ifdef CONFIG_MLME_EXT 
 
 
+#ifdef CONFIG_MLME_EXT
        mlmeext_surveydone_event_callback(adapter);
        mlmeext_surveydone_event_callback(adapter);
-
 #endif
 
 #endif
 
-_func_enter_;                  
+_func_enter_;
 
        _enter_critical_bh(&pmlmepriv->lock, &irqL);
 
        _enter_critical_bh(&pmlmepriv->lock, &irqL);
-       if(pmlmepriv->wps_probe_req_ie)
-       {
+       if (pmlmepriv->wps_probe_req_ie) {
                u32 free_len = pmlmepriv->wps_probe_req_ie_len;
                pmlmepriv->wps_probe_req_ie_len = 0;
                rtw_mfree(pmlmepriv->wps_probe_req_ie, free_len);
                u32 free_len = pmlmepriv->wps_probe_req_ie_len;
                pmlmepriv->wps_probe_req_ie_len = 0;
                rtw_mfree(pmlmepriv->wps_probe_req_ie, free_len);
-               pmlmepriv->wps_probe_req_ie = NULL;                     
+               pmlmepriv->wps_probe_req_ie = NULL;
        }
        }
-       
+
        RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("rtw_surveydone_event_callback: fw_state:%x\n\n", get_fwstate(pmlmepriv)));
        RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("rtw_surveydone_event_callback: fw_state:%x\n\n", get_fwstate(pmlmepriv)));
-       
-       if (check_fwstate(pmlmepriv,_FW_UNDER_SURVEY))
-       {
-               //u8 timer_cancelled;
 
 
-               timer_cancelled = _TRUE;
-               //_cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
-               
-               _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
-       }
-       else {
-       
-               RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("nic status =%x, survey done event comes too late!\n", get_fwstate(pmlmepriv)));    
+       if (check_fwstate(pmlmepriv,_FW_UNDER_SURVEY) == _FALSE) {
+               DBG_871X(FUNC_ADPT_FMT" fw_state:0x%x\n", FUNC_ADPT_ARG(adapter), get_fwstate(pmlmepriv));
+               //rtw_warn_on(1);
        }
        }
-       _exit_critical_bh(&pmlmepriv->lock, &irqL);
 
 
-       if(timer_cancelled)
-               _cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
+       _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
+       _exit_critical_bh(&pmlmepriv->lock, &irqL);
 
 
+       _cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
 
        _enter_critical_bh(&pmlmepriv->lock, &irqL);
 
 
        _enter_critical_bh(&pmlmepriv->lock, &irqL);
 
@@ -1258,12 +1247,12 @@ _func_enter_;
                        {
                                set_fwstate(pmlmepriv, _FW_UNDER_LINKING);      
                                
                        {
                                set_fwstate(pmlmepriv, _FW_UNDER_LINKING);      
                                
-                               if(rtw_select_and_join_from_scanned_queue(pmlmepriv)==_SUCCESS)
-                               {
-                                       _set_timer(&pmlmepriv->assoc_timer, MAX_JOIN_TIMEOUT );
-                               }
-                               else    
-                               {
+                               if(rtw_select_and_join_from_scanned_queue(pmlmepriv)==_SUCCESS)
+                               {
+                                       _set_timer(&pmlmepriv->assoc_timer, MAX_JOIN_TIMEOUT);
+                               }
+                               else
+                               {
                                        WLAN_BSSID_EX    *pdev_network = &(adapter->registrypriv.dev_network);                  
                                        u8 *pibss = adapter->registrypriv.dev_network.MacAddress;
 
                                        WLAN_BSSID_EX    *pdev_network = &(adapter->registrypriv.dev_network);                  
                                        u8 *pibss = adapter->registrypriv.dev_network.MacAddress;
 
@@ -1278,7 +1267,8 @@ _func_enter_;
                                        rtw_update_registrypriv_dev_network(adapter);
                                        rtw_generate_random_ibss(pibss);
 
                                        rtw_update_registrypriv_dev_network(adapter);
                                        rtw_generate_random_ibss(pibss);
 
-                                               pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE;
+       
+                                       pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE;
                        
                                        if(rtw_createbss_cmd(adapter)!=_SUCCESS)
                                        {
                        
                                        if(rtw_createbss_cmd(adapter)!=_SUCCESS)
                                        {
@@ -1360,9 +1350,6 @@ _func_enter_;
 #ifdef CONFIG_CONCURRENT_MODE  
        rtw_os_xmit_schedule(adapter->pbuddy_adapter);
 #endif
 #ifdef CONFIG_CONCURRENT_MODE  
        rtw_os_xmit_schedule(adapter->pbuddy_adapter);
 #endif
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       dc_resume_xmit(adapter);
-#endif
 
 #ifdef CONFIG_DRVEXT_MODULE_WSC
        drvext_surveydone_callback(&adapter->drvextpriv);
 
 #ifdef CONFIG_DRVEXT_MODULE_WSC
        drvext_surveydone_callback(&adapter->drvextpriv);
@@ -1490,9 +1477,8 @@ _func_enter_;
                psta = rtw_get_stainfo(&adapter->stapriv, tgt_network->network.MacAddress);
 
 #ifdef CONFIG_TDLS
                psta = rtw_get_stainfo(&adapter->stapriv, tgt_network->network.MacAddress);
 
 #ifdef CONFIG_TDLS
-               if(ptdlsinfo->link_established == _TRUE)
-               {
-                       rtw_tdls_cmd(adapter, myid(&(adapter->eeprompriv)), TDLS_RS_RCR);
+               if (ptdlsinfo->link_established == _TRUE) {
+                       rtw_tdls_cmd(adapter, NULL, TDLS_RS_RCR);
                        rtw_reset_tdls_info(adapter);
                        rtw_free_all_stainfo(adapter);
                        //_enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
                        rtw_reset_tdls_info(adapter);
                        rtw_free_all_stainfo(adapter);
                        //_enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
@@ -1524,9 +1510,8 @@ _func_enter_;
 
        if(lock_scanned_queue)
                _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
 
        if(lock_scanned_queue)
                _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
-       
-//     pwlan = rtw_find_network(&pmlmepriv->scanned_queue, tgt_network->network.MacAddress);
-        pwlan = _rtw_find_same_network(&pmlmepriv->scanned_queue, tgt_network);
+
+       pwlan = _rtw_find_same_network(&pmlmepriv->scanned_queue, tgt_network);
        if(pwlan)               
        {
                pwlan->fixed = _FALSE;
        if(pwlan)               
        {
                pwlan->fixed = _FALSE;
@@ -1735,8 +1720,8 @@ u32 rtw_scan_abort_timeout(_adapter *adapter, u32 timeout_ms)
 {
        u32 start;
        u32 pass_ms;
 {
        u32 start;
        u32 pass_ms;
-       struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
-       struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
+       struct mlme_priv        *pmlmepriv = &(adapter->mlmepriv);
+       struct mlme_ext_priv    *pmlmeext = &(adapter->mlmeextpriv);
 
        start = rtw_get_current_time();
        pmlmeext->scan_abort = _TRUE;
 
        start = rtw_get_current_time();
        pmlmeext->scan_abort = _TRUE;
@@ -1873,6 +1858,7 @@ static struct sta_info *rtw_joinbss_update_stainfo(_adapter *padapter, struct wl
                        #endif
                        preorder_ctrl->wend_b= 0xffff;
                        preorder_ctrl->wsize_b = 64;//max_ampdu_sz;//ex. 32(kbytes) -> wsize_b=32
                        #endif
                        preorder_ctrl->wend_b= 0xffff;
                        preorder_ctrl->wsize_b = 64;//max_ampdu_sz;//ex. 32(kbytes) -> wsize_b=32
+                       preorder_ctrl->ampdu_size = RX_AMPDU_SIZE_INVALID;
                }
 
                
                }
 
                
@@ -1891,6 +1877,7 @@ static struct sta_info *rtw_joinbss_update_stainfo(_adapter *padapter, struct wl
                                #endif
                                preorder_ctrl->wend_b= 0xffff;
                                preorder_ctrl->wsize_b = 64;//max_ampdu_sz;//ex. 32(kbytes) -> wsize_b=32
                                #endif
                                preorder_ctrl->wend_b= 0xffff;
                                preorder_ctrl->wsize_b = 64;//max_ampdu_sz;//ex. 32(kbytes) -> wsize_b=32
+                               preorder_ctrl->ampdu_size = RX_AMPDU_SIZE_INVALID;
                        }
                }
        }
                        }
                }
        }
@@ -2207,10 +2194,6 @@ _func_enter_;
        rtw_os_xmit_schedule(adapter->pbuddy_adapter);
 #endif 
 
        rtw_os_xmit_schedule(adapter->pbuddy_adapter);
 #endif 
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       dc_resume_xmit(adapter);
-#endif
-
 _func_exit_;
 }
 
 _func_exit_;
 }
 
@@ -2416,7 +2399,7 @@ _func_enter_;
        
 #ifdef CONFIG_RTL8711
        //submit SetStaKey_cmd to tell fw, fw will allocate an CAM entry for this sta   
        
 #ifdef CONFIG_RTL8711
        //submit SetStaKey_cmd to tell fw, fw will allocate an CAM entry for this sta   
-       rtw_setstakey_cmd(adapter, psta, _FALSE, _TRUE);
+       rtw_setstakey_cmd(adapter, psta, GROUP_KEY, _TRUE);
 #endif
                
 exit:
 #endif
                
 exit:
@@ -2705,16 +2688,19 @@ _func_exit_;
 void rtw_scan_timeout_handler (_adapter *adapter)
 {      
        _irqL irqL;
 void rtw_scan_timeout_handler (_adapter *adapter)
 {      
        _irqL irqL;
-       struct  mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       
+       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
        DBG_871X(FUNC_ADPT_FMT" fw_state=%x\n", FUNC_ADPT_ARG(adapter), get_fwstate(pmlmepriv));
 
        _enter_critical_bh(&pmlmepriv->lock, &irqL);
        
        _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
        DBG_871X(FUNC_ADPT_FMT" fw_state=%x\n", FUNC_ADPT_ARG(adapter), get_fwstate(pmlmepriv));
 
        _enter_critical_bh(&pmlmepriv->lock, &irqL);
        
        _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
-
+       
        _exit_critical_bh(&pmlmepriv->lock, &irqL);
        _exit_critical_bh(&pmlmepriv->lock, &irqL);
-
+       
+#ifdef CONFIG_IOCTL_CFG80211
+       rtw_cfg80211_surveydone_event_callback(adapter);
+#endif //CONFIG_IOCTL_CFG80211
+       
        rtw_indicate_scan_done(adapter, _TRUE);
 
 #if defined(CONFIG_CONCURRENT_MODE) && defined(CONFIG_IOCTL_CFG80211)
        rtw_indicate_scan_done(adapter, _TRUE);
 
 #if defined(CONFIG_CONCURRENT_MODE) && defined(CONFIG_IOCTL_CFG80211)
@@ -2854,7 +2840,7 @@ void rtw_dynamic_check_timer_handlder(_adapter *adapter)
                DBG_871X("IsBtDisabled=%d, IsBtControlLps=%d\n", rtw_btcoex_IsBtDisabled(adapter), rtw_btcoex_IsBtControlLps(adapter));
 #endif
 
                DBG_871X("IsBtDisabled=%d, IsBtControlLps=%d\n", rtw_btcoex_IsBtDisabled(adapter), rtw_btcoex_IsBtControlLps(adapter));
 #endif
 
-#ifdef CONFIG_LPS_LCLK_WD_TIMER
+#ifdef CONFIG_LPS_LCLK_WD_TIMER /* to avoid leaving lps 32k frequently*/
        if ((adapter_to_pwrctl(adapter)->bFwCurrentInPSMode ==_TRUE )
 #ifdef CONFIG_BT_COEXIST
                && (rtw_btcoex_IsBtControlLps(adapter) == _FALSE)
        if ((adapter_to_pwrctl(adapter)->bFwCurrentInPSMode ==_TRUE )
 #ifdef CONFIG_BT_COEXIST
                && (rtw_btcoex_IsBtControlLps(adapter) == _FALSE)
@@ -2946,7 +2932,7 @@ inline void rtw_clear_scan_deny(_adapter *adapter)
        struct mlme_priv *mlmepriv = &adapter->mlmepriv;
        ATOMIC_SET(&mlmepriv->set_scan_deny, 0);
        if (0)
        struct mlme_priv *mlmepriv = &adapter->mlmepriv;
        ATOMIC_SET(&mlmepriv->set_scan_deny, 0);
        if (0)
-       DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter));
+               DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter));
 }
 
 void rtw_set_scan_deny_timer_hdl(_adapter *adapter)
 }
 
 void rtw_set_scan_deny_timer_hdl(_adapter *adapter)
@@ -2962,7 +2948,7 @@ void rtw_set_scan_deny(_adapter *adapter, u32 ms)
 #endif
 
        if (0)
 #endif
 
        if (0)
-       DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter));
+               DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter));
        ATOMIC_SET(&mlmepriv->set_scan_deny, 1);
        _set_timer(&mlmepriv->set_scan_deny_timer, ms);
        
        ATOMIC_SET(&mlmepriv->set_scan_deny, 1);
        _set_timer(&mlmepriv->set_scan_deny_timer, ms);
        
@@ -2971,7 +2957,7 @@ void rtw_set_scan_deny(_adapter *adapter, u32 ms)
                return;
 
        if (0)
                return;
 
        if (0)
-       DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter->pbuddy_adapter));
+               DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter->pbuddy_adapter));
        b_mlmepriv = &adapter->pbuddy_adapter->mlmepriv;
        ATOMIC_SET(&b_mlmepriv->set_scan_deny, 1);
        _set_timer(&b_mlmepriv->set_scan_deny_timer, ms);       
        b_mlmepriv = &adapter->pbuddy_adapter->mlmepriv;
        ATOMIC_SET(&b_mlmepriv->set_scan_deny, 1);
        _set_timer(&b_mlmepriv->set_scan_deny_timer, ms);       
@@ -3071,11 +3057,11 @@ _func_enter_;
                mlme->pscanned = get_next(mlme->pscanned);
 
                if (0)
                mlme->pscanned = get_next(mlme->pscanned);
 
                if (0)
-               DBG_871X("%s("MAC_FMT", ch%u) rssi:%d\n"
-                       , pnetwork->network.Ssid.Ssid
-                       , MAC_ARG(pnetwork->network.MacAddress)
-                       , pnetwork->network.Configuration.DSConfig
-                       , (int)pnetwork->network.Rssi);
+                       DBG_871X("%s("MAC_FMT", ch%u) rssi:%d\n"
+                               , pnetwork->network.Ssid.Ssid
+                               , MAC_ARG(pnetwork->network.MacAddress)
+                               , pnetwork->network.Configuration.DSConfig
+                               , (int)pnetwork->network.Rssi);
 
                rtw_check_roaming_candidate(mlme, &candidate, pnetwork);
  
 
                rtw_check_roaming_candidate(mlme, &candidate, pnetwork);
  
@@ -3149,16 +3135,11 @@ static int rtw_check_join_candidate(struct mlme_priv *mlme
        }
 
        if(updated){
        }
 
        if(updated){
-               DBG_871X("[by_bssid:%u][assoc_ssid:%s]"
-                       #ifdef  CONFIG_LAYER2_ROAMING
-                       "[to_roam:%u] "
-                       #endif
+               DBG_871X("[by_bssid:%u][assoc_ssid:%s][to_roam:%u] "
                        "new candidate: %s("MAC_FMT", ch%u) rssi:%d\n",
                        mlme->assoc_by_bssid,
                        mlme->assoc_ssid.Ssid,
                        "new candidate: %s("MAC_FMT", ch%u) rssi:%d\n",
                        mlme->assoc_by_bssid,
                        mlme->assoc_ssid.Ssid,
-                       #ifdef  CONFIG_LAYER2_ROAMING
                        rtw_to_roam(adapter),
                        rtw_to_roam(adapter),
-                       #endif
                        (*candidate)->network.Ssid.Ssid,
                        MAC_ARG((*candidate)->network.MacAddress),
                        (*candidate)->network.Configuration.DSConfig,
                        (*candidate)->network.Ssid.Ssid,
                        MAC_ARG((*candidate)->network.MacAddress),
                        (*candidate)->network.Configuration.DSConfig,
@@ -3221,11 +3202,11 @@ _func_enter_;
                pmlmepriv->pscanned = get_next(pmlmepriv->pscanned);
 
                if (0)
                pmlmepriv->pscanned = get_next(pmlmepriv->pscanned);
 
                if (0)
-               DBG_871X("%s("MAC_FMT", ch%u) rssi:%d\n"
-                       , pnetwork->network.Ssid.Ssid
-                       , MAC_ARG(pnetwork->network.MacAddress)
-                       , pnetwork->network.Configuration.DSConfig
-                       , (int)pnetwork->network.Rssi);
+                       DBG_871X("%s("MAC_FMT", ch%u) rssi:%d\n"
+                               , pnetwork->network.Ssid.Ssid
+                               , MAC_ARG(pnetwork->network.MacAddress)
+                               , pnetwork->network.Configuration.DSConfig
+                               , (int)pnetwork->network.Rssi);
 
                rtw_check_join_candidate(pmlmepriv, &candidate, pnetwork);
  
 
                rtw_check_join_candidate(pmlmepriv, &candidate, pnetwork);
  
@@ -3668,9 +3649,8 @@ _func_exit_;
 void rtw_init_registrypriv_dev_network(        _adapter* adapter)
 {
        struct registry_priv* pregistrypriv = &adapter->registrypriv;
 void rtw_init_registrypriv_dev_network(        _adapter* adapter)
 {
        struct registry_priv* pregistrypriv = &adapter->registrypriv;
-       struct eeprom_priv* peepriv = &adapter->eeprompriv;
        WLAN_BSSID_EX    *pdev_network = &pregistrypriv->dev_network;
        WLAN_BSSID_EX    *pdev_network = &pregistrypriv->dev_network;
-       u8 *myhwaddr = myid(peepriv);
+       u8 *myhwaddr = adapter_mac_addr(adapter);
        
 _func_enter_;
 
        
 _func_enter_;
 
@@ -3698,6 +3678,7 @@ void rtw_update_registrypriv_dev_network(_adapter* adapter)
        struct  security_priv*  psecuritypriv = &adapter->securitypriv;
        struct  wlan_network    *cur_network = &adapter->mlmepriv.cur_network;
        //struct        xmit_priv       *pxmitpriv = &adapter->xmitpriv;
        struct  security_priv*  psecuritypriv = &adapter->securitypriv;
        struct  wlan_network    *cur_network = &adapter->mlmepriv.cur_network;
        //struct        xmit_priv       *pxmitpriv = &adapter->xmitpriv;
+       struct mlme_ext_priv    *pmlmeext = &adapter->mlmeextpriv;
 
 _func_enter_;
 
 
 _func_enter_;
 
@@ -3745,9 +3726,15 @@ _func_enter_;
        pdev_network->Configuration.DSConfig = (pregistrypriv->channel);
        RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("pregistrypriv->channel=%d, pdev_network->Configuration.DSConfig=0x%x\n", pregistrypriv->channel, pdev_network->Configuration.DSConfig));  
 
        pdev_network->Configuration.DSConfig = (pregistrypriv->channel);
        RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("pregistrypriv->channel=%d, pdev_network->Configuration.DSConfig=0x%x\n", pregistrypriv->channel, pdev_network->Configuration.DSConfig));  
 
-       if(cur_network->network.InfrastructureMode == Ndis802_11IBSS)
+       if (cur_network->network.InfrastructureMode == Ndis802_11IBSS) {
                pdev_network->Configuration.ATIMWindow = (0);
 
                pdev_network->Configuration.ATIMWindow = (0);
 
+               if (pmlmeext->cur_channel != 0)
+                       pdev_network->Configuration.DSConfig = pmlmeext->cur_channel;
+               else 
+                       pdev_network->Configuration.DSConfig = 1;
+       }
+
        pdev_network->InfrastructureMode = (cur_network->network.InfrastructureMode);
 
        // 1. Supported rates
        pdev_network->InfrastructureMode = (cur_network->network.InfrastructureMode);
 
        // 1. Supported rates
@@ -3973,6 +3960,12 @@ unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, ui
        /* todo: disable SM power save mode */
        ht_capie.cap_info |= IEEE80211_HT_CAP_SM_PS;
 
        /* todo: disable SM power save mode */
        ht_capie.cap_info |= IEEE80211_HT_CAP_SM_PS;
 
+       /* RX LDPC */
+       if (TEST_FLAG(phtpriv->ldpc_cap, LDPC_HT_ENABLE_RX)) {
+               ht_capie.cap_info |= IEEE80211_HT_CAP_LDPC_CODING;
+               DBG_871X("[HT] Declare supporting RX LDPC\n");
+       }
+
        if (TEST_FLAG(phtpriv->stbc_cap, STBC_HT_ENABLE_RX)) {
                if((pregistrypriv->rx_stbc == 0x3) ||                                                   /* enable for 2.4/5 GHz */
                        ((channel <= 14) && (pregistrypriv->rx_stbc == 0x1)) || /* enable for 2.4GHz */
        if (TEST_FLAG(phtpriv->stbc_cap, STBC_HT_ENABLE_RX)) {
                if((pregistrypriv->rx_stbc == 0x3) ||                                                   /* enable for 2.4/5 GHz */
                        ((channel <= 14) && (pregistrypriv->rx_stbc == 0x1)) || /* enable for 2.4GHz */
@@ -4001,8 +3994,6 @@ unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, ui
 
        case RF_2T2R:
        case RF_1T2R:
 
        case RF_2T2R:
        case RF_1T2R:
-       default:
-
                if (stbc_rx_enable)
                        ht_capie.cap_info |= IEEE80211_HT_CAP_RX_STBC_2R;//RX STBC two spatial stream
 
                if (stbc_rx_enable)
                        ht_capie.cap_info |= IEEE80211_HT_CAP_RX_STBC_2R;//RX STBC two spatial stream
 
@@ -4012,9 +4003,14 @@ unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, ui
                else
                                set_mcs_rate_by_mask(ht_capie.supp_mcs_set, MCS_RATE_2R);       
                #else //CONFIG_DISABLE_MCS13TO15
                else
                                set_mcs_rate_by_mask(ht_capie.supp_mcs_set, MCS_RATE_2R);       
                #else //CONFIG_DISABLE_MCS13TO15
-                       set_mcs_rate_by_mask(ht_capie.supp_mcs_set, MCS_RATE_2R);       
+                       set_mcs_rate_by_mask(ht_capie.supp_mcs_set, MCS_RATE_2R);
                #endif //CONFIG_DISABLE_MCS13TO15
                break;
                #endif //CONFIG_DISABLE_MCS13TO15
                break;
+       case RF_3T3R:
+               set_mcs_rate_by_mask(ht_capie.supp_mcs_set, MCS_RATE_3R);
+               break;
+       default:
+               DBG_871X("[warning] rf_type %d is not expected\n", rf_type);
        }
 
        {
        }
 
        {
@@ -4186,7 +4182,7 @@ void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len, u8 channel)
                (pmlmeinfo->HT_info.infos[0] & BIT(2)))
        {
                int i;
                (pmlmeinfo->HT_info.infos[0] & BIT(2)))
        {
                int i;
-               u8      rf_type;
+               u8      rf_type = RF_1T1R;
 
                rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
 
 
                rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
 
@@ -4201,9 +4197,8 @@ void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len, u8 channel)
                        case RF_1T2R:
                                set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_1R);                                                        
                                break;
                        case RF_1T2R:
                                set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_1R);                                                        
                                break;
-                       case RF_2T2R:                   
-                       default:
-#ifdef CONFIG_DISABLE_MCS13TO15
+                       case RF_2T2R:
+                               #ifdef CONFIG_DISABLE_MCS13TO15
                                if(pmlmeext->cur_bwmode == CHANNEL_WIDTH_40 && pregistrypriv->wifi_spec != 1 )                          
                                        set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_2R_13TO15_OFF);                             
                                else
                                if(pmlmeext->cur_bwmode == CHANNEL_WIDTH_40 && pregistrypriv->wifi_spec != 1 )                          
                                        set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_2R_13TO15_OFF);                             
                                else
@@ -4211,6 +4206,12 @@ void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len, u8 channel)
 #else //CONFIG_DISABLE_MCS13TO15
                                set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_2R);
 #endif //CONFIG_DISABLE_MCS13TO15
 #else //CONFIG_DISABLE_MCS13TO15
                                set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_2R);
 #endif //CONFIG_DISABLE_MCS13TO15
+                               break;
+                       case RF_3T3R:
+                               set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_3R);
+                               break;
+                       default:
+                               DBG_871X("[warning] rf_type %d is not expected\n", rf_type);
                }
 
                //switch to the 40M Hz mode accoring to the AP
                }
 
                //switch to the 40M Hz mode accoring to the AP
@@ -4307,21 +4308,17 @@ void rtw_issue_addbareq_cmd_tdls(_adapter *padapter, struct xmit_frame *pxmitfra
 
        priority = pattrib->priority;
 
 
        priority = pattrib->priority;
 
-       if(pattrib->direct_link == _TRUE)
-       {
+       if (pattrib->direct_link == _TRUE) {
                ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->dst);
                ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->dst);
-               if((ptdls_sta != NULL) && (ptdls_sta->tdls_sta_state & TDLS_ESTABLISHED))
-               {
+               if ((ptdls_sta != NULL) && (ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE)) {
                        phtpriv = &ptdls_sta->htpriv;
 
                        phtpriv = &ptdls_sta->htpriv;
 
-                       if((phtpriv->ht_option==_TRUE) && (phtpriv->ampdu_enable==_TRUE)) 
-                       {
+                       if ((phtpriv->ht_option == _TRUE) && (phtpriv->ampdu_enable == _TRUE)) {
                                issued = (phtpriv->agg_enable_bitmap>>priority)&0x1;
                                issued |= (phtpriv->candidate_tid_bitmap>>priority)&0x1;
 
                                issued = (phtpriv->agg_enable_bitmap>>priority)&0x1;
                                issued |= (phtpriv->candidate_tid_bitmap>>priority)&0x1;
 
-                               if(0==issued)
-                               {
-                                       DBG_871X("rtw_issue_addbareq_cmd, p=%d\n", priority);
+                               if (0 == issued) {
+                                       DBG_871X("[%s], p=%d\n", __FUNCTION__, priority);
                                        ptdls_sta->htpriv.candidate_tid_bitmap |= BIT((u8)priority);
                                        rtw_addbareq_cmd(padapter,(u8)priority, pattrib->dst);
                                }
                                        ptdls_sta->htpriv.candidate_tid_bitmap |= BIT((u8)priority);
                                        rtw_addbareq_cmd(padapter,(u8)priority, pattrib->dst);
                                }
@@ -4396,7 +4393,7 @@ void rtw_append_exented_cap(_adapter *padapter, u8 *out_ie, uint *pout_len)
 #endif //CONFIG_80211AC_VHT
        u8      cap_content[8] = {0};
        u8      *pframe;
 #endif //CONFIG_80211AC_VHT
        u8      cap_content[8] = {0};
        u8      *pframe;
-
+       u8   null_content[8] = {0};
 
        if (phtpriv->bss_coexist) {
                SET_EXT_CAPABILITY_ELE_BSS_COEXIST(cap_content, 1);
 
        if (phtpriv->bss_coexist) {
                SET_EXT_CAPABILITY_ELE_BSS_COEXIST(cap_content, 1);
@@ -4407,8 +4404,13 @@ void rtw_append_exented_cap(_adapter *padapter, u8 *out_ie, uint *pout_len)
                SET_EXT_CAPABILITY_ELE_OP_MODE_NOTIF(cap_content, 1);
        }
 #endif //CONFIG_80211AC_VHT
                SET_EXT_CAPABILITY_ELE_OP_MODE_NOTIF(cap_content, 1);
        }
 #endif //CONFIG_80211AC_VHT
-
-       pframe = rtw_set_ie(out_ie+*pout_len, EID_EXTCapability, 8, cap_content , pout_len);
+       /*
+               From 802.11 specification,if a STA does not support any of capabilities defined
+               in the Extended Capabilities element, then the STA is not required to 
+               transmit the Extended Capabilities element. 
+       */
+       if (_FALSE == _rtw_memcmp(cap_content, null_content, 8))
+               pframe = rtw_set_ie(out_ie + *pout_len, EID_EXTCapability, 8, cap_content , pout_len);
 }
 #endif
 
 }
 #endif
 
@@ -4567,3 +4569,4 @@ const char *get_miracast_mode_str(int mode)
 
        return miracast_mode_str[mode];
 }
 
        return miracast_mode_str[mode];
 }
+
index 7cf52d00d1359325a7b2619fabc13fed2bddf701..41ec95655e95cc820fc75222a9506fb3d0ae112e 100755 (executable)
@@ -288,7 +288,7 @@ static RT_CHANNEL_PLAN_MAP  RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = {
        {0x01,0x23},    //0x58, RT_CHANNEL_DOMAIN_WORLD_MKK4
 };
 
        {0x01,0x23},    //0x58, RT_CHANNEL_DOMAIN_WORLD_MKK4
 };
 
-static RT_CHANNEL_PLAN_MAP     RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = {0x01,0x02}; //use the conbination for max channel numbers
+static RT_CHANNEL_PLAN_MAP     RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = {0x00,0x02}; //use the conbination for max channel numbers
 
 /*
  * Search the @param ch in given @param ch_set
 
 /*
  * Search the @param ch in given @param ch_set
@@ -319,9 +319,9 @@ int rtw_ch_set_search_ch(RT_CHANNEL_INFO *ch_set, const u32 ch)
  */
 bool rtw_mlme_band_check(_adapter *adapter, const u32 ch)
 {
  */
 bool rtw_mlme_band_check(_adapter *adapter, const u32 ch)
 {
-       if (adapter->setband == GHZ24_50 /* 2.4G and 5G */
-               || (adapter->setband == GHZ_24 && ch < 35) /* 2.4G only */
-               || (adapter->setband == GHZ_50 && ch > 35) /* 5G only */
+       if (adapter->setband == WIFI_FREQUENCY_BAND_AUTO /* 2.4G and 5G */
+               || (adapter->setband == WIFI_FREQUENCY_BAND_2GHZ && ch < 35) /* 2.4G only */
+               || (adapter->setband == WIFI_FREQUENCY_BAND_5GHZ && ch > 35) /* 5G only */
        ) {
                return _TRUE;
        }
        ) {
                return _TRUE;
        }
@@ -351,7 +351,7 @@ void init_mlme_default_rate_set(_adapter* padapter)
 
        unsigned char   mixed_datarate[NumRates] = {_1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_,_9M_RATE_, _12M_RATE_, _18M_RATE_, _24M_RATE_, _36M_RATE_, _48M_RATE_, _54M_RATE_, 0xff};
        unsigned char   mixed_basicrate[NumRates] ={_1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_, _12M_RATE_, _24M_RATE_, 0xff,};
 
        unsigned char   mixed_datarate[NumRates] = {_1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_,_9M_RATE_, _12M_RATE_, _18M_RATE_, _24M_RATE_, _36M_RATE_, _48M_RATE_, _54M_RATE_, 0xff};
        unsigned char   mixed_basicrate[NumRates] ={_1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_, _12M_RATE_, _24M_RATE_, 0xff,};
-       unsigned char   supported_mcs_set[16] = {0xff, 0xff, 0x00, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
+       unsigned char   supported_mcs_set[16] = {0xff, 0xff, 0xff, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
 
        _rtw_memcpy(pmlmeext->datarate, mixed_datarate, NumRates);
        _rtw_memcpy(pmlmeext->basicrate, mixed_basicrate, NumRates);
 
        _rtw_memcpy(pmlmeext->datarate, mixed_datarate, NumRates);
        _rtw_memcpy(pmlmeext->basicrate, mixed_basicrate, NumRates);
@@ -679,7 +679,7 @@ static void _mgt_dispatcher(_adapter *padapter, struct mlme_handler *ptable, uni
          if(ptable->func)
         {
                 //receive the frames that ra(a1) is my address or ra(a1) is bc address.
          if(ptable->func)
         {
                 //receive the frames that ra(a1) is my address or ra(a1) is bc address.
-               if (!_rtw_memcmp(GetAddr1Ptr(pframe), myid(&padapter->eeprompriv), ETH_ALEN) &&
+               if (!_rtw_memcmp(GetAddr1Ptr(pframe), adapter_mac_addr(padapter), ETH_ALEN) &&
                        !_rtw_memcmp(GetAddr1Ptr(pframe), bc_addr, ETH_ALEN)) 
                {
                        return;
                        !_rtw_memcmp(GetAddr1Ptr(pframe), bc_addr, ETH_ALEN)) 
                {
                        return;
@@ -726,7 +726,7 @@ void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame)
        }
 
        //receive the frames that ra(a1) is my address or ra(a1) is bc address.
        }
 
        //receive the frames that ra(a1) is my address or ra(a1) is bc address.
-       if (!_rtw_memcmp(GetAddr1Ptr(pframe), myid(&padapter->eeprompriv), ETH_ALEN) &&
+       if (!_rtw_memcmp(GetAddr1Ptr(pframe), adapter_mac_addr(padapter), ETH_ALEN) &&
                !_rtw_memcmp(GetAddr1Ptr(pframe), bc_addr, ETH_ALEN))
        {
                return;
                !_rtw_memcmp(GetAddr1Ptr(pframe), bc_addr, ETH_ALEN))
        {
                return;
@@ -738,9 +738,9 @@ void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame)
 
 #ifdef CONFIG_TDLS
        if((index << 4)==WIFI_ACTION){
 
 #ifdef CONFIG_TDLS
        if((index << 4)==WIFI_ACTION){
-               //category==public (4), action==TDLS_DISCOVERY_RESPONSE
-               if(*(pframe+24)==0x04 && *(pframe+25)==TDLS_DISCOVERY_RESPONSE){
-                       DBG_871X("recv tdls discovery response frame from "MAC_FMT"\n", MAC_ARG(GetAddr2Ptr(pframe)));
+               /* category==public (4), action==TDLS_DISCOVERY_RESPONSE */
+               if (*(pframe+24) == RTW_WLAN_CATEGORY_PUBLIC && *(pframe+25) == TDLS_DISCOVERY_RESPONSE) {
+                       DBG_871X("[TDLS] Recv %s from "MAC_FMT"\n", rtw_tdls_action_txt(TDLS_DISCOVERY_RESPONSE), MAC_ARG(GetAddr2Ptr(pframe)));
                        On_TDLS_Dis_Rsp(padapter, precv_frame);
                }
        }
                        On_TDLS_Dis_Rsp(padapter, precv_frame);
                }
        }
@@ -1043,7 +1043,7 @@ _continue:
                        _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
 
                        //generate pairing ID
                        _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
 
                        //generate pairing ID
-                       mac_addr = myid(&(padapter->eeprompriv));
+                       mac_addr = adapter_mac_addr(padapter);
                        peer_addr = psta->hwaddr;
                        psta->pid = (u16)(((mac_addr[4]<<8) + mac_addr[5]) + ((peer_addr[4]<<8) + peer_addr[5]));
 
                        peer_addr = psta->hwaddr;
                        psta->pid = (u16)(((mac_addr[4]<<8) + mac_addr[5]) + ((peer_addr[4]<<8) + peer_addr[5]));
 
@@ -1221,9 +1221,6 @@ unsigned int OnProbeRsp(_adapter *padapter, union recv_frame *precv_frame)
                report_survey_event(padapter, precv_frame);     
 #ifdef CONFIG_CONCURRENT_MODE
                report_survey_event(padapter->pbuddy_adapter, precv_frame);     
                report_survey_event(padapter, precv_frame);     
 #ifdef CONFIG_CONCURRENT_MODE
                report_survey_event(padapter->pbuddy_adapter, precv_frame);     
-#endif
-#ifdef CONFIG_DUALMAC_CONCURRENT
-               dc_report_survey_event(padapter, precv_frame);
 #endif
                return _SUCCESS;
        }
 #endif
                return _SUCCESS;
        }
@@ -1259,6 +1256,10 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
        int ret = _SUCCESS;
        u8 *p = NULL;
        u32 ielen = 0;
        int ret = _SUCCESS;
        u8 *p = NULL;
        u32 ielen = 0;
+#ifdef CONFIG_TDLS
+       struct sta_info *ptdls_sta;
+       struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+#endif /* CONFIG_TDLS */
 
 #ifdef CONFIG_ATTEMPT_TO_FIX_AP_BEACON_ERROR
        p = rtw_get_ie(pframe + sizeof(struct rtw_ieee80211_hdr_3addr) + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ielen, precv_frame->u.hdr.len -sizeof(struct rtw_ieee80211_hdr_3addr) - _BEACON_IE_OFFSET_);
 
 #ifdef CONFIG_ATTEMPT_TO_FIX_AP_BEACON_ERROR
        p = rtw_get_ie(pframe + sizeof(struct rtw_ieee80211_hdr_3addr) + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ielen, precv_frame->u.hdr.len -sizeof(struct rtw_ieee80211_hdr_3addr) - _BEACON_IE_OFFSET_);
@@ -1279,11 +1280,6 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
 #ifdef CONFIG_CONCURRENT_MODE
                report_survey_event(padapter->pbuddy_adapter, precv_frame);     
 #endif
 #ifdef CONFIG_CONCURRENT_MODE
                report_survey_event(padapter->pbuddy_adapter, precv_frame);     
 #endif
-
-#ifdef CONFIG_DUALMAC_CONCURRENT
-               dc_report_survey_event(padapter, precv_frame);
-#endif
-
                return _SUCCESS;
        }
 
                return _SUCCESS;
        }
 
@@ -1334,6 +1330,17 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
                        process_p2p_ps_ie(padapter, (pframe + WLAN_HDR_A3_LEN), (len - WLAN_HDR_A3_LEN));
 #endif //CONFIG_P2P_PS
 
                        process_p2p_ps_ie(padapter, (pframe + WLAN_HDR_A3_LEN), (len - WLAN_HDR_A3_LEN));
 #endif //CONFIG_P2P_PS
 
+#if defined(CONFIG_P2P)&&defined(CONFIG_CONCURRENT_MODE)
+                       if (padapter->registrypriv.wifi_spec) {
+                               if (process_p2p_cross_connect_ie(padapter, (pframe + WLAN_HDR_A3_LEN), (len - WLAN_HDR_A3_LEN)) == _FALSE) {
+                                       if((padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state&0x03) == WIFI_FW_AP_STATE) {
+                                               DBG_871X_LEVEL(_drv_always_, "no issue auth, P2P cross-connect does not permit\n ");
+                                               return _SUCCESS;
+                                       }
+                               }
+                       }
+#endif // CONFIG_P2P CONFIG_P2P and CONFIG_CONCURRENT_MODE
+
                        //start auth
                        start_clnt_auth(padapter);
 
                        //start auth
                        start_clnt_auth(padapter);
 
@@ -1372,6 +1379,24 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
 
                                adaptive_early_32k(pmlmeext, pframe, len);                              
                                
 
                                adaptive_early_32k(pmlmeext, pframe, len);                              
                                
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+                               if (padapter->tdlsinfo.ch_switch_prohibited == _FALSE)
+                               {
+                                       /* Send TDLS Channel Switch Request when receiving Beacon */
+                                       if ((padapter->tdlsinfo.chsw_info.ch_sw_state & TDLS_CH_SW_INITIATOR_STATE) && (pmlmeext->cur_channel == rtw_get_oper_ch(padapter))) {
+                                               ptdlsinfo->chsw_info.ch_sw_state |= TDLS_WAIT_CH_RSP_STATE;
+                                               /* DBG_871X("[%s] issue_tdls_ch_switch_req to "MAC_FMT"\n", __FUNCTION__, MAC_ARG(padapter->tdlsinfo.chsw_info.addr)); */
+                                               ptdls_sta = rtw_get_stainfo(&padapter->stapriv, padapter->tdlsinfo.chsw_info.addr);
+                                               if (ptdls_sta != NULL) {
+                                                       if (ptdls_sta->tdls_sta_state | TDLS_LINKED_STATE)
+                                                               issue_tdls_ch_switch_req(padapter, ptdls_sta);
+                                               }
+                                       }
+                               }
+#endif                         
+#endif /* CONFIG_TDLS */
+
 #ifdef CONFIG_DFS
                                process_csa_ie(padapter, pframe, len);  //channel switch announcement
 #endif //CONFIG_DFS
 #ifdef CONFIG_DFS
                                process_csa_ie(padapter, pframe, len);  //channel switch announcement
 #endif //CONFIG_DFS
@@ -1721,7 +1746,7 @@ unsigned int OnAuthClient(_adapter *padapter, union recv_frame *precv_frame)
        DBG_871X("%s\n", __FUNCTION__);
 
        //check A1 matches or not
        DBG_871X("%s\n", __FUNCTION__);
 
        //check A1 matches or not
-       if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), get_da(pframe), ETH_ALEN))
+       if (!_rtw_memcmp(adapter_mac_addr(padapter), get_da(pframe), ETH_ALEN))
                return _SUCCESS;
 
        if (!(pmlmeinfo->state & WIFI_FW_AUTH_STATE))
                return _SUCCESS;
 
        if (!(pmlmeinfo->state & WIFI_FW_AUTH_STATE))
@@ -2339,25 +2364,24 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
        if (pstat->aid > 0) {
                DBG_871X("  old AID %d\n", pstat->aid);
        } else {
        if (pstat->aid > 0) {
                DBG_871X("  old AID %d\n", pstat->aid);
        } else {
-               for (pstat->aid = 1; pstat->aid <= NUM_STA; pstat->aid++)
-                       if (pstapriv->sta_aid[pstat->aid - 1] == NULL)
-                               break;
+               for (pstat->aid = 1; pstat->aid <= NUM_STA; pstat->aid++) {
+                       if (pstapriv->sta_aid[pstat->aid - 1] == NULL) {
+                               if (pstat->aid > pstapriv->max_num_sta) {
+                                       pstat->aid = 0;
                                
                                
-               //if (pstat->aid > NUM_STA) {
-               if (pstat->aid > pstapriv->max_num_sta) {
-                               
-                       pstat->aid = 0;
-                               
-                       DBG_871X("  no room for more AIDs\n");
+                                       DBG_871X("  no room for more AIDs\n");
 
 
-                       status = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA;
+                                       status = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA;
                                
                                
-                       goto OnAssocReqFail;
+                                       goto OnAssocReqFail;
                                
                        
                                
                        
-               } else {
-                       pstapriv->sta_aid[pstat->aid - 1] = pstat;
-                       DBG_871X("allocate new AID = (%d)\n", pstat->aid);
+                               } else {
+                                       pstapriv->sta_aid[pstat->aid - 1] = pstat;
+                                       DBG_871X("allocate new AID = (%d)\n", pstat->aid);
+                                       break;
+                               }                               
+                       }
                }       
        }
 
                }       
        }
 
@@ -2465,7 +2489,7 @@ unsigned int OnAssocRsp(_adapter *padapter, union recv_frame *precv_frame)
        DBG_871X("%s\n", __FUNCTION__);
        
        //check A1 matches or not
        DBG_871X("%s\n", __FUNCTION__);
        
        //check A1 matches or not
-       if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), get_da(pframe), ETH_ALEN))
+       if (!_rtw_memcmp(adapter_mac_addr(padapter), get_da(pframe), ETH_ALEN))
                return _SUCCESS;
 
        if (!(pmlmeinfo->state & (WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE)))
                return _SUCCESS;
 
        if (!(pmlmeinfo->state & (WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE)))
@@ -2543,7 +2567,15 @@ unsigned int OnAssocRsp(_adapter *padapter, union recv_frame *precv_frame)
 
                        case _ERPINFO_IE_:
                                ERP_IE_handler(padapter, pIE);
 
                        case _ERPINFO_IE_:
                                ERP_IE_handler(padapter, pIE);
-
+                               break;
+#ifdef CONFIG_TDLS
+                       case _EXT_CAP_IE_:
+                               if (check_ap_tdls_prohibited(pIE->data, pIE->Length) == _TRUE)
+                                       padapter->tdlsinfo.ap_prohibited = _TRUE;
+                               if (check_ap_tdls_ch_switching_prohibited(pIE->data, pIE->Length) == _TRUE)
+                                       padapter->tdlsinfo.ch_switch_prohibited = _TRUE;
+                               break;
+#endif /* CONFIG_TDLS */
                        default:
                                break;
                }
                        default:
                                break;
                }
@@ -2598,8 +2630,6 @@ unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame)
 
        reason = le16_to_cpu(*(unsigned short *)(pframe + WLAN_HDR_A3_LEN));
 
 
        reason = le16_to_cpu(*(unsigned short *)(pframe + WLAN_HDR_A3_LEN));
 
-       DBG_871X("%s Reason code(%d)\n", __FUNCTION__,reason);
-
        rtw_lock_rx_suspend_timeout(8000);
 
 #ifdef CONFIG_AP_MODE
        rtw_lock_rx_suspend_timeout(8000);
 
 #ifdef CONFIG_AP_MODE
@@ -2613,8 +2643,8 @@ unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame)
                //rtw_free_stainfo(padapter, psta);
                //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);         
 
                //rtw_free_stainfo(padapter, psta);
                //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);         
 
-               DBG_871X_LEVEL(_drv_always_, "ap recv deauth reason code(%d) sta:%pM\n",
-                               reason, GetAddr2Ptr(pframe));
+               DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" reason=%u, ta=%pM\n"
+                       , FUNC_ADPT_ARG(padapter), reason, GetAddr2Ptr(pframe));
 
                psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));  
                if(psta)
 
                psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));  
                if(psta)
@@ -2659,12 +2689,12 @@ unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame)
                        }
                }
 
                        }
                }
 
-               DBG_871X_LEVEL(_drv_always_, "sta recv deauth reason code(%d) sta:%pM, ignore = %d\n",
-                               reason, GetAddr3Ptr(pframe), ignore_received_deauth);
-               
+               DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" reason=%u, ta=%pM, ignore=%d\n"
+                       , FUNC_ADPT_ARG(padapter), reason, GetAddr2Ptr(pframe), ignore_received_deauth);
+
                if ( 0 == ignore_received_deauth )
                {
                if ( 0 == ignore_received_deauth )
                {
-                       receive_disconnect(padapter, GetAddr3Ptr(pframe) ,reason);
+                       receive_disconnect(padapter, GetAddr2Ptr(pframe), reason);
                }
        }       
        pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
                }
        }       
        pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
@@ -2697,8 +2727,6 @@ unsigned int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame)
 
        reason = le16_to_cpu(*(unsigned short *)(pframe + WLAN_HDR_A3_LEN));
 
 
        reason = le16_to_cpu(*(unsigned short *)(pframe + WLAN_HDR_A3_LEN));
 
-        DBG_871X("%s Reason code(%d)\n", __FUNCTION__,reason);
-
        rtw_lock_rx_suspend_timeout(8000);
        
 #ifdef CONFIG_AP_MODE
        rtw_lock_rx_suspend_timeout(8000);
        
 #ifdef CONFIG_AP_MODE
@@ -2712,8 +2740,8 @@ unsigned int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame)
                //rtw_free_stainfo(padapter, psta);
                //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);         
 
                //rtw_free_stainfo(padapter, psta);
                //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);         
 
-               DBG_871X_LEVEL(_drv_always_, "ap recv disassoc reason code(%d) sta:%pM\n",
-                               reason, GetAddr2Ptr(pframe));
+               DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" reason=%u, ta=%pM\n"
+                       , FUNC_ADPT_ARG(padapter), reason, GetAddr2Ptr(pframe));
 
                psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));  
                if(psta)
 
                psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));  
                if(psta)
@@ -2738,10 +2766,10 @@ unsigned int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame)
        else
 #endif
        {
        else
 #endif
        {
-               DBG_871X_LEVEL(_drv_always_, "sta recv disassoc reason code(%d) sta:%pM\n",
-                               reason, GetAddr3Ptr(pframe));
-               
-               receive_disconnect(padapter, GetAddr3Ptr(pframe), reason);
+               DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" reason=%u, ta=%pM\n"
+                       , FUNC_ADPT_ARG(padapter), reason, GetAddr2Ptr(pframe));
+
+               receive_disconnect(padapter, GetAddr2Ptr(pframe), reason);
        }       
        pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
        return _SUCCESS;
        }       
        pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
        return _SUCCESS;
@@ -2865,6 +2893,261 @@ unsigned int OnAction_dls(_adapter *padapter, union recv_frame *precv_frame)
        return _SUCCESS;
 }
 
        return _SUCCESS;
 }
 
+/**
+ * rtw_rx_ampdu_size - Get the target RX AMPDU buffer size for the specific @adapter
+ * @adapter: the adapter to get target RX AMPDU buffer size
+ *
+ * Returns: the target RX AMPDU buffer size
+ */
+u8 rtw_rx_ampdu_size(_adapter *adapter)
+{
+       u8 size;
+       HT_CAP_AMPDU_FACTOR max_rx_ampdu_factor;
+
+       if (adapter->fix_rx_ampdu_size != RX_AMPDU_SIZE_INVALID) {
+               size = adapter->fix_rx_ampdu_size;
+               goto exit;
+       }
+
+#ifdef CONFIG_BT_COEXIST
+       if (rtw_btcoex_IsBTCoexCtrlAMPDUSize(adapter) == _TRUE) {
+               size = rtw_btcoex_GetAMPDUSize(adapter);
+               goto exit;
+       }
+#endif
+
+       /* default value based on max_rx_ampdu_factor */
+       if (adapter->driver_rx_ampdu_factor != 0xFF)
+               max_rx_ampdu_factor = (HT_CAP_AMPDU_FACTOR)adapter->driver_rx_ampdu_factor;
+       else
+               rtw_hal_get_def_var(adapter, HW_VAR_MAX_RX_AMPDU_FACTOR, &max_rx_ampdu_factor);
+
+       if (MAX_AMPDU_FACTOR_64K == max_rx_ampdu_factor)
+               size = 64;
+       else if (MAX_AMPDU_FACTOR_32K == max_rx_ampdu_factor)
+               size = 32;
+       else if (MAX_AMPDU_FACTOR_16K == max_rx_ampdu_factor)
+               size = 16;
+       else if (MAX_AMPDU_FACTOR_8K == max_rx_ampdu_factor)
+               size = 8;
+       else
+               size = 64;
+
+exit:
+
+       if (size > 127)
+               size = 127;
+
+       return size;
+}
+
+/**
+ * rtw_rx_ampdu_is_accept - Get the permission if RX AMPDU should be set up for the specific @adapter
+ * @adapter: the adapter to get the permission if RX AMPDU should be set up
+ *
+ * Returns: accept or not
+ */
+bool rtw_rx_ampdu_is_accept(_adapter *adapter)
+{
+       bool accept;
+
+       if (adapter->fix_rx_ampdu_accept != RX_AMPDU_ACCEPT_INVALID) {
+               accept = adapter->fix_rx_ampdu_accept;
+               goto exit;
+       }
+
+#ifdef CONFIG_BT_COEXIST
+       if (rtw_btcoex_IsBTCoexRejectAMPDU(adapter) == _TRUE) {
+               accept = _FALSE;
+               goto exit;
+       }
+#endif
+
+       /* default value for other cases */
+       accept = adapter->mlmeextpriv.mlmext_info.bAcceptAddbaReq;
+
+exit:
+       return accept;
+}
+
+/**
+ * rtw_rx_ampdu_set_size - Set the target RX AMPDU buffer size for the specific @adapter and specific @reason
+ * @adapter: the adapter to set target RX AMPDU buffer size
+ * @size: the target RX AMPDU buffer size to set
+ * @reason: reason for the target RX AMPDU buffer size setting
+ *
+ * Returns: whether the target RX AMPDU buffer size is changed
+ */
+bool rtw_rx_ampdu_set_size(_adapter *adapter, u8 size, u8 reason)
+{
+       bool is_adj = _FALSE;
+       struct mlme_ext_priv *mlmeext;
+       struct mlme_ext_info *mlmeinfo;
+
+       mlmeext = &adapter->mlmeextpriv;
+       mlmeinfo = &mlmeext->mlmext_info;
+
+       if (reason == RX_AMPDU_DRV_FIXED) {
+               if (adapter->fix_rx_ampdu_size != size) {
+                       adapter->fix_rx_ampdu_size = size;
+                       is_adj = _TRUE;
+                       DBG_871X(FUNC_ADPT_FMT" fix_rx_ampdu_size:%u\n", FUNC_ADPT_ARG(adapter), size);
+               }
+       }
+
+       return is_adj;
+}
+
+/**
+ * rtw_rx_ampdu_set_accept - Set the permission if RX AMPDU should be set up for the specific @adapter and specific @reason
+ * @adapter: the adapter to set if RX AMPDU should be set up
+ * @accept: if RX AMPDU should be set up
+ * @reason: reason for the permission if RX AMPDU should be set up
+ *
+ * Returns: whether the permission if RX AMPDU should be set up is changed
+ */
+bool rtw_rx_ampdu_set_accept(_adapter *adapter, u8 accept, u8 reason)
+{
+       bool is_adj = _FALSE;
+       struct mlme_ext_priv *mlmeext;
+       struct mlme_ext_info *mlmeinfo;
+
+       mlmeext = &adapter->mlmeextpriv;
+       mlmeinfo = &mlmeext->mlmext_info;
+
+       if (reason == RX_AMPDU_DRV_FIXED) {
+               if (adapter->fix_rx_ampdu_accept != accept) {
+                       adapter->fix_rx_ampdu_accept = accept;
+                       is_adj = _TRUE;
+                       DBG_871X(FUNC_ADPT_FMT" fix_rx_ampdu_accept:%u\n", FUNC_ADPT_ARG(adapter), accept);
+               }
+       }
+
+       return is_adj;
+}
+
+/**
+ * rx_ampdu_apply_sta_tid - Apply RX AMPDU setting to the specific @sta and @tid
+ * @adapter: the adapter to which @sta belongs
+ * @sta: the sta to be checked
+ * @tid: the tid to be checked
+ * @accept: the target permission if RX AMPDU should be set up
+ * @size: the target RX AMPDU buffer size
+ *
+ * Returns:
+ * 0: no canceled
+ * 1: canceled by no permission
+ * 2: canceled by different buffer size
+ * 3: canceled by potential mismatched status
+ *
+ * Blocking function, may sleep
+ */
+u8 rx_ampdu_apply_sta_tid(_adapter *adapter, struct sta_info *sta, u8 tid, u8 accept, u8 size)
+{
+       u8 ret = 0;
+       struct recv_reorder_ctrl *reorder_ctl = &sta->recvreorder_ctrl[tid];
+
+       if (reorder_ctl->enable == _FALSE) {
+               if (reorder_ctl->ampdu_size != RX_AMPDU_SIZE_INVALID) {
+                       send_delba_sta_tid_wait_ack(adapter, 0, sta, tid, 1);
+                       ret = 3;
+               }
+               goto exit;
+       }
+
+       if (accept == _FALSE) {
+               send_delba_sta_tid_wait_ack(adapter, 0, sta, tid, 0);
+               ret = 1;
+       } else if (reorder_ctl->ampdu_size != size) {
+               send_delba_sta_tid_wait_ack(adapter, 0, sta, tid, 0);
+               ret = 2;
+       }
+
+exit:
+       return ret;
+}
+
+/**
+ * rx_ampdu_apply_sta - Apply RX AMPDU setting to the specific @sta
+ * @adapter: the adapter to which @sta belongs
+ * @sta: the sta to be checked
+ * @accept: the target permission if RX AMPDU should be set up
+ * @size: the target RX AMPDU buffer size
+ *
+ * Returns: number of the RX AMPDU assciation canceled for applying current target setting
+ *
+ * Blocking function, may sleep
+ */
+u8 rx_ampdu_apply_sta(_adapter *adapter, struct sta_info *sta, u8 accept, u8 size)
+{
+       u8 change_cnt = 0;
+       int i;
+
+       for (i = 0; i < TID_NUM; i++) {
+               if (rx_ampdu_apply_sta_tid(adapter, sta, i, accept, size) != 0)
+                       change_cnt++;
+       }
+
+       return change_cnt;
+}
+
+/**
+ * rtw_rx_ampdu_apply - Apply the current target RX AMPDU setting for the specific @adapter
+ * @adapter: the adapter to be applied
+ *
+ * Returns: number of the RX AMPDU assciation canceled for applying current target setting
+ */
+u16 rtw_rx_ampdu_apply(_adapter *adapter)
+{
+       u16 adj_cnt = 0;
+       struct mlme_ext_priv *mlmeext;
+       struct sta_info *sta;
+       u8 accept = rtw_rx_ampdu_is_accept(adapter);
+       u8 size = rtw_rx_ampdu_size(adapter);
+
+       mlmeext = &adapter->mlmeextpriv;
+
+       if (mlmeext_msr(mlmeext) == WIFI_FW_STATION_STATE) {
+               sta = rtw_get_stainfo(&adapter->stapriv, get_bssid(&adapter->mlmepriv));
+               if (sta)
+                       adj_cnt += rx_ampdu_apply_sta(adapter, sta, accept, size);
+
+       } else if (mlmeext_msr(mlmeext) == WIFI_FW_AP_STATE) {
+               _irqL irqL;
+               _list *phead, *plist;
+               u8 peer_num = 0;
+               char peers[NUM_STA];
+               struct sta_priv *pstapriv = &adapter->stapriv;
+               int i;
+
+               _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+               phead = &pstapriv->asoc_list;
+               plist = get_next(phead);
+
+               while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
+                       int stainfo_offset;
+
+                       sta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
+                       plist = get_next(plist);
+
+                       stainfo_offset = rtw_stainfo_offset(pstapriv, sta);
+                       if (stainfo_offset_valid(stainfo_offset))
+                               peers[peer_num++] = stainfo_offset;
+               }
+
+               _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+               for (i = 0; i < peer_num; i++) {
+                       sta = rtw_get_stainfo_by_offset(pstapriv, peers[i]);
+                       if (sta)
+                               adj_cnt += rx_ampdu_apply_sta(adapter, sta, accept, size);
+               }
+       }
+
+       return adj_cnt;
+}
+
 unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame)
 {
        u8 *addr;
 unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame)
 {
        u8 *addr;
@@ -2882,12 +3165,12 @@ unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame)
        DBG_871X("%s\n", __FUNCTION__);
 
        //check RA matches or not       
        DBG_871X("%s\n", __FUNCTION__);
 
        //check RA matches or not       
-       if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))//for if1, sta/ap mode
+       if (!_rtw_memcmp(adapter_mac_addr(padapter), GetAddr1Ptr(pframe), ETH_ALEN))
                return _SUCCESS;
 
 /*
        //check A1 matches or not
                return _SUCCESS;
 
 /*
        //check A1 matches or not
-       if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), get_da(pframe), ETH_ALEN))
+       if (!_rtw_memcmp(adapter_mac_addr(padapter), get_da(pframe), ETH_ALEN))
                return _SUCCESS;
 */
 
                return _SUCCESS;
 */
 
@@ -2929,15 +3212,6 @@ unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame)
                                _rtw_memcpy(&(pmlmeinfo->ADDBA_req), &(frame_body[2]), sizeof(struct ADDBA_request));
                                //process_addba_req(padapter, (u8*)&(pmlmeinfo->ADDBA_req), GetAddr3Ptr(pframe));
                                process_addba_req(padapter, (u8*)&(pmlmeinfo->ADDBA_req), addr);
                                _rtw_memcpy(&(pmlmeinfo->ADDBA_req), &(frame_body[2]), sizeof(struct ADDBA_request));
                                //process_addba_req(padapter, (u8*)&(pmlmeinfo->ADDBA_req), GetAddr3Ptr(pframe));
                                process_addba_req(padapter, (u8*)&(pmlmeinfo->ADDBA_req), addr);
-                               
-                               if(pmlmeinfo->bAcceptAddbaReq == _TRUE)
-                               {
-                                       issue_action_BA(padapter, addr, RTW_WLAN_ACTION_ADDBA_RESP, 0);
-                               }
-                               else
-                               {
-                                       issue_action_BA(padapter, addr, RTW_WLAN_ACTION_ADDBA_RESP, 37);//reject ADDBA Req
-                               }
                                                                
                                break;
 
                                                                
                                break;
 
@@ -2982,13 +3256,9 @@ unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame)
                                {                                               
                                        tid = (frame_body[3] >> 4) & 0x0F;
                                
                                {                                               
                                        tid = (frame_body[3] >> 4) & 0x0F;
                                
-                                       preorder_ctrl =  &psta->recvreorder_ctrl[tid];
+                                       preorder_ctrl = &psta->recvreorder_ctrl[tid];
                                        preorder_ctrl->enable = _FALSE;
                                        preorder_ctrl->enable = _FALSE;
-                                       preorder_ctrl->indicate_seq = 0xffff;
-                                       #ifdef DBG_RX_SEQ
-                                       DBG_871X("DBG_RX_SEQ %s:%d indicate_seq:%u \n", __FUNCTION__, __LINE__,
-                                               preorder_ctrl->indicate_seq);
-                                       #endif
+                                       preorder_ctrl->ampdu_size = RX_AMPDU_SIZE_INVALID;
                                }
                                
                                DBG_871X("%s(): DELBA: %x(%x)\n", __FUNCTION__,pmlmeinfo->agg_enable_bitmap, reason_code);
                                }
                                
                                DBG_871X("%s(): DELBA: %x(%x)\n", __FUNCTION__,pmlmeinfo->agg_enable_bitmap, reason_code);
@@ -3088,8 +3358,8 @@ void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr3, adapter_mac_addr(padapter), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        pmlmeext->mgnt_seq++;
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        pmlmeext->mgnt_seq++;
@@ -3275,7 +3545,7 @@ void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
        p2pielen += 2;
 
        //      Value:
        p2pielen += 2;
 
        //      Value:
-       _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+       _rtw_memcpy(p2pie + p2pielen, adapter_mac_addr(padapter), ETH_ALEN);
        p2pielen += ETH_ALEN;
 
 
        p2pielen += ETH_ALEN;
 
 
@@ -3394,7 +3664,7 @@ void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
 
        //      Value:
        //      P2P Device Address
 
        //      Value:
        //      P2P Device Address
-       _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+       _rtw_memcpy(p2pie + p2pielen, adapter_mac_addr(padapter), ETH_ALEN);
        p2pielen += ETH_ALEN;
 
        //      Config Method
        p2pielen += ETH_ALEN;
 
        //      Config Method
@@ -3536,8 +3806,8 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr3, adapter_mac_addr(padapter), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        pmlmeext->mgnt_seq++;
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        pmlmeext->mgnt_seq++;
@@ -3775,7 +4045,7 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
        p2pielen += 2;
 
        //      Value:
        p2pielen += 2;
 
        //      Value:
-       _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+       _rtw_memcpy(p2pie + p2pielen, adapter_mac_addr(padapter), ETH_ALEN);
        p2pielen += ETH_ALEN;
 
        //      Channel List
        p2pielen += ETH_ALEN;
 
        //      Channel List
@@ -3893,7 +4163,7 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
 
        //      Value:
        //      P2P Device Address
 
        //      Value:
        //      P2P Device Address
-       _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+       _rtw_memcpy(p2pie + p2pielen, adapter_mac_addr(padapter), ETH_ALEN);
        p2pielen += ETH_ALEN;
 
        //      Config Method
        p2pielen += ETH_ALEN;
 
        //      Config Method
@@ -4011,8 +4281,8 @@ void issue_p2p_GO_confirm(_adapter *padapter, u8* raddr, u8 result)
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr3, adapter_mac_addr(padapter), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        pmlmeext->mgnt_seq++;
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        pmlmeext->mgnt_seq++;
@@ -4287,7 +4557,7 @@ void issue_p2p_invitation_request(_adapter *padapter, u8* raddr )
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, raddr,  ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, raddr,  ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -4374,7 +4644,7 @@ void issue_p2p_invitation_request(_adapter *padapter, u8* raddr )
        //      Channel Number
        p2pie[ p2pielen++ ] = pwdinfo->invitereq_info.operating_ch;     //      operating channel number
 
        //      Channel Number
        p2pie[ p2pielen++ ] = pwdinfo->invitereq_info.operating_ch;     //      operating channel number
 
-       if ( _rtw_memcmp( myid( &padapter->eeprompriv ), pwdinfo->invitereq_info.go_bssid, ETH_ALEN ) )
+       if (_rtw_memcmp(adapter_mac_addr(padapter), pwdinfo->invitereq_info.go_bssid, ETH_ALEN))
        {
                //      P2P Group BSSID
                //      Type:
        {
                //      P2P Group BSSID
                //      Type:
@@ -4524,7 +4794,7 @@ void issue_p2p_invitation_request(_adapter *padapter, u8* raddr )
        
        //      Value:
        //      P2P Device Address
        
        //      Value:
        //      P2P Device Address
-       _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+       _rtw_memcpy(p2pie + p2pielen, adapter_mac_addr(padapter), ETH_ALEN);
        p2pielen += ETH_ALEN;
 
        //      Config Method
        p2pielen += ETH_ALEN;
 
        //      Config Method
@@ -4627,7 +4897,7 @@ void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, raddr,  ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, raddr,  ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -4732,7 +5002,7 @@ void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken
 
                        //      Value:
                        //      P2P Device Address for GO
 
                        //      Value:
                        //      P2P Device Address for GO
-                       _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+                       _rtw_memcpy(p2pie + p2pielen, adapter_mac_addr(padapter), ETH_ALEN);
                        p2pielen += ETH_ALEN;
 
                }
                        p2pielen += ETH_ALEN;
 
                }
@@ -4900,7 +5170,7 @@ void issue_p2p_provision_request(_adapter *padapter, u8* pssid, u8 ussidlen, u8*
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, pdev_raddr, ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, pdev_raddr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, pdev_raddr, ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, pdev_raddr, ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -5032,7 +5302,7 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;  
        
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;  
        
-       mac = myid(&(padapter->eeprompriv));
+       mac = adapter_mac_addr(padapter);
        
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
        
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
@@ -5191,7 +5461,7 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
                //      Value:
                if (pwdinfo->external_uuid == 0) {
                        _rtw_memset( wpsie + wpsielen, 0x0, 16 );
                //      Value:
                if (pwdinfo->external_uuid == 0) {
                        _rtw_memset( wpsie + wpsielen, 0x0, 16 );
-                       _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+                       _rtw_memcpy(wpsie + wpsielen, mac, ETH_ALEN);
                } else {
                        _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
                }
                } else {
                        _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
                }
@@ -5374,7 +5644,7 @@ int _issue_probereq_p2p(_adapter *padapter, u8 *da, int wait_ack)
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
 
-       mac = myid(&(padapter->eeprompriv));
+       mac = adapter_mac_addr(padapter);
 
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
 
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
@@ -5471,7 +5741,7 @@ int _issue_probereq_p2p(_adapter *padapter, u8 *da, int wait_ack)
                        //      Value:
                        if (pwdinfo->external_uuid == 0) {
                                _rtw_memset( wpsie + wpsielen, 0x0, 16 );
                        //      Value:
                        if (pwdinfo->external_uuid == 0) {
                                _rtw_memset( wpsie + wpsielen, 0x0, 16 );
-                               _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+                               _rtw_memcpy(wpsie + wpsielen, mac, ETH_ALEN);
                        } else {
                                _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
                        }
                        } else {
                                _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
                        }
@@ -5978,7 +6248,7 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
                                                        rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
                                                        if ( attr_contentlen )
                                                        {
                                                        rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
                                                        if ( attr_contentlen )
                                                        {
-                                                               if ( _rtw_memcmp( group_id.go_device_addr, myid( &padapter->eeprompriv ), ETH_ALEN ) )
+                                                               if (_rtw_memcmp(group_id.go_device_addr, adapter_mac_addr(padapter), ETH_ALEN))
                                                                {
                                                                        //      The p2p device sending this p2p invitation request wants this Wi-Fi device to be the persistent GO.
                                                                        rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_GO );
                                                                {
                                                                        //      The p2p device sending this p2p invitation request wants this Wi-Fi device to be the persistent GO.
                                                                        rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_GO );
@@ -6053,7 +6323,7 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
                                                        rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
                                                        if ( attr_contentlen )
                                                        {
                                                        rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
                                                        if ( attr_contentlen )
                                                        {
-                                                               if ( _rtw_memcmp( group_id.go_device_addr, myid( &padapter->eeprompriv ), ETH_ALEN ) )
+                                                               if (_rtw_memcmp(group_id.go_device_addr, adapter_mac_addr(padapter), ETH_ALEN))
                                                                {
                                                                        //      In this case, the GO can't be myself.
                                                                        rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH );
                                                                {
                                                                        //      In this case, the GO can't be myself.
                                                                        rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH );
@@ -6119,14 +6389,11 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
 
                                                if ( attr_content == P2P_STATUS_SUCCESS )
                                                {
 
                                                if ( attr_content == P2P_STATUS_SUCCESS )
                                                {
-                                                       if ( _rtw_memcmp( pwdinfo->invitereq_info.go_bssid, myid( &padapter->eeprompriv ), ETH_ALEN ))
-                                                       {
+                                                       if (_rtw_memcmp(pwdinfo->invitereq_info.go_bssid, adapter_mac_addr(padapter), ETH_ALEN))
                                                                rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO );
                                                                rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO );
-                                                       }
                                                        else
                                                        else
-                                                       {
                                                                rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
                                                                rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-                                                       }
+
                                                        rtw_p2p_set_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_OK );
                                                }
                                                else
                                                        rtw_p2p_set_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_OK );
                                                }
                                                else
@@ -6262,7 +6529,7 @@ unsigned int on_action_public(_adapter *padapter, union recv_frame *precv_frame)
        u8 category, action;
 
        /* check RA matches or not */
        u8 category, action;
 
        /* check RA matches or not */
-       if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))
+       if (!_rtw_memcmp(adapter_mac_addr(padapter), GetAddr1Ptr(pframe), ETH_ALEN))
                goto exit;
 
        category = frame_body[0];
                goto exit;
 
        category = frame_body[0];
@@ -6291,7 +6558,7 @@ unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame)
        u8 category, action;
 
        /* check RA matches or not */
        u8 category, action;
 
        /* check RA matches or not */
-       if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))
+       if (!_rtw_memcmp(adapter_mac_addr(padapter), GetAddr1Ptr(pframe), ETH_ALEN))
                goto exit;
 
        category = frame_body[0];
                goto exit;
 
        category = frame_body[0];
@@ -6370,7 +6637,7 @@ unsigned int OnAction_vht(_adapter *padapter, union recv_frame *precv_frame)
        struct sta_info *psta = NULL;
 
        /* check RA matches or not */
        struct sta_info *psta = NULL;
 
        /* check RA matches or not */
-       if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))
+       if (!_rtw_memcmp(adapter_mac_addr(padapter), GetAddr1Ptr(pframe), ETH_ALEN))
                goto exit;
 
        category = frame_body[0];
                goto exit;
 
        category = frame_body[0];
@@ -6412,7 +6679,7 @@ unsigned int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame)
        struct  wifidirect_info *pwdinfo = &( padapter->wdinfo );
 
        //check RA matches or not
        struct  wifidirect_info *pwdinfo = &( padapter->wdinfo );
 
        //check RA matches or not
-       if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))//for if1, sta/ap mode
+       if (!_rtw_memcmp(adapter_mac_addr(padapter), GetAddr1Ptr(pframe), ETH_ALEN))
                return _SUCCESS;
 
        frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
                return _SUCCESS;
 
        frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
@@ -6785,7 +7052,7 @@ void issue_beacon(_adapter *padapter, int timeout_ms)
        *(fctrl) = 0;
        
        _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
        *(fctrl) = 0;
        
        _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
@@ -7098,7 +7365,7 @@ void issue_probersp(_adapter *padapter, unsigned char *da, u8 is_valid_p2p_probe
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;  
        
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;  
        
-       mac = myid(&(padapter->eeprompriv));
+       mac = adapter_mac_addr(padapter);
        bssid = cur_network->MacAddress;
        
        fctrl = &(pwlanhdr->frame_ctl);
        bssid = cur_network->MacAddress;
        
        fctrl = &(pwlanhdr->frame_ctl);
@@ -7378,7 +7645,7 @@ int _issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 *da, u8 ch,
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
 
-       mac = myid(&(padapter->eeprompriv));
+       mac = adapter_mac_addr(padapter);
 
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
 
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
@@ -7543,8 +7810,8 @@ void issue_auth(_adapter *padapter, struct sta_info *psta, unsigned short status
 #ifdef CONFIG_NATIVEAP_MLME
 
                _rtw_memcpy(pwlanhdr->addr1, psta->hwaddr, ETH_ALEN);           
 #ifdef CONFIG_NATIVEAP_MLME
 
                _rtw_memcpy(pwlanhdr->addr1, psta->hwaddr, ETH_ALEN);           
-               _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
-               _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
+               _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
+               _rtw_memcpy(pwlanhdr->addr3, adapter_mac_addr(padapter), ETH_ALEN);
 
        
                // setting auth algo number
 
        
                // setting auth algo number
@@ -7580,7 +7847,7 @@ void issue_auth(_adapter *padapter, struct sta_info *psta, unsigned short status
        else
        {               
                _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
        else
        {               
                _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-               _rtw_memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
+               _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
                _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
        
                // setting auth algo number             
                _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
        
                // setting auth algo number             
@@ -7688,7 +7955,7 @@ void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *p
        *(fctrl) = 0;
 
        _rtw_memcpy((void *)GetAddr1Ptr(pwlanhdr), pstat->hwaddr, ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy((void *)GetAddr1Ptr(pwlanhdr), pstat->hwaddr, ETH_ALEN);
-       _rtw_memcpy((void *)GetAddr2Ptr(pwlanhdr), myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy((void *)GetAddr2Ptr(pwlanhdr), adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy((void *)GetAddr3Ptr(pwlanhdr), get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
 
        _rtw_memcpy((void *)GetAddr3Ptr(pwlanhdr), get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
 
@@ -7904,7 +8171,7 @@ void issue_assocreq(_adapter *padapter)
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -8036,13 +8303,16 @@ void issue_assocreq(_adapter *padapter)
        }
 
 
        }
 
 
-       if (bssrate_len > 8) {
+       if (bssrate_len > 8)
+       {
                pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
                pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
                pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
                pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
-       } else if (bssrate_len > 0) {
+       }
+       else if (bssrate_len > 0)
+       {
                pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
        } else {
                pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
        } else {
-               DBG_871X("%s: Connect to AP without 11b and 11g data rate!\n", __FUNCTION__);
+               DBG_871X("%s: Connect to AP without 11b and 11g data rate!\n",__FUNCTION__);
        }
 
        //vendor specific IE, such as WPA, WMM, WPS
        }
 
        //vendor specific IE, such as WPA, WMM, WPS
@@ -8206,7 +8476,7 @@ void issue_assocreq(_adapter *padapter)
 
                        //      Value:
                        //      P2P Device Address
 
                        //      Value:
                        //      P2P Device Address
-                       _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+                       _rtw_memcpy(p2pie + p2pielen, adapter_mac_addr(padapter), ETH_ALEN);
                        p2pielen += ETH_ALEN;
 
                        //      Config Method
                        p2pielen += ETH_ALEN;
 
                        //      Config Method
@@ -8370,7 +8640,7 @@ static int _issue_nulldata(_adapter *padapter, unsigned char *da, unsigned int p
        }
 
        _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
        }
 
        _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -8546,7 +8816,7 @@ static int _issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid, i
        SetAckpolicy(qc, pattrib->ack_policy);
 
        _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
        SetAckpolicy(qc, pattrib->ack_policy);
 
        _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -8665,7 +8935,7 @@ static int _issue_deauth(_adapter *padapter, unsigned char *da, unsigned short r
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -8777,7 +9047,7 @@ void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_of
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, ra, ETH_ALEN); /* RA */
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, ra, ETH_ALEN); /* RA */
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); /* TA */
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN); /* TA */
        _rtw_memcpy(pwlanhdr->addr3, ra, ETH_ALEN); /* DA = RA */
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, ra, ETH_ALEN); /* DA = RA */
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -8849,7 +9119,7 @@ void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned ch
                _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
        else
                _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
                _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
        else
                _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -8885,16 +9155,30 @@ void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned ch
 }
 #endif //CONFIG_IEEE80211W
 
 }
 #endif //CONFIG_IEEE80211W
 
-void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status)
+/**
+ * issue_action_ba - internal function to TX Block Ack action frame
+ * @padapter: the adapter to TX
+ * @raddr: receiver address
+ * @action: Block Ack Action
+ * @tid: tid
+ * @size: the announced AMPDU buffer size. used by ADDBA_RESP
+ * @status: status/reason code. used by ADDBA_RESP, DELBA
+ * @initiator: if we are the initiator of AMPDU association. used by DELBA
+ * @wait_ack: used xmit ack
+ *
+ * Returns:
+ * _SUCCESS: No xmit ack is used or acked
+ * _FAIL: not acked when using xmit ack
+ */
+static int issue_action_ba(_adapter *padapter, unsigned char *raddr, unsigned char action
+       , u8 tid, u8 size, u16 status, u8 initiator, int wait_ack)
 {
 {
+       int ret = _FAIL;
        u8      category = RTW_WLAN_CATEGORY_BACK;
        u16     start_seq;
        u16     BA_para_set;
        u8      category = RTW_WLAN_CATEGORY_BACK;
        u16     start_seq;
        u16     BA_para_set;
-       u16     reason_code;
        u16     BA_timeout_value;
        u16     BA_starting_seqctrl;
        u16     BA_timeout_value;
        u16     BA_starting_seqctrl;
-       HT_CAP_AMPDU_FACTOR max_rx_ampdu_factor;
-       u8 ba_rxbuf_sz;
        struct xmit_frame               *pmgntframe;
        struct pkt_attrib               *pattrib;
        u8                                      *pframe;
        struct xmit_frame               *pmgntframe;
        struct pkt_attrib               *pattrib;
        u8                                      *pframe;
@@ -8910,9 +9194,7 @@ void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char act
 #ifdef CONFIG_80211N_HT
 
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
 #ifdef CONFIG_80211N_HT
 
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
-       {
-               return;
-       }
+               goto exit;
 
        //update attribute
        pattrib = &pmgntframe->attrib;
 
        //update attribute
        pattrib = &pmgntframe->attrib;
@@ -8928,7 +9210,7 @@ void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char act
 
        //_rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
 
        //_rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -8941,23 +9223,20 @@ void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char act
        pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
        pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
 
        pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
        pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
 
-      status = cpu_to_le16(status);
-       
-
        if (category == 3)
        {
                switch (action)
                {
        if (category == 3)
        {
                switch (action)
                {
-                       case 0: //ADDBA req
+                       case RTW_WLAN_ACTION_ADDBA_REQ:
                                do {
                                        pmlmeinfo->dialogToken++;
                                } while (pmlmeinfo->dialogToken == 0);
                                pframe = rtw_set_fixed_ie(pframe, 1, &(pmlmeinfo->dialogToken), &(pattrib->pktlen));
 
                                #if defined(CONFIG_RTL8188E) && defined(CONFIG_SDIO_HCI)
                                do {
                                        pmlmeinfo->dialogToken++;
                                } while (pmlmeinfo->dialogToken == 0);
                                pframe = rtw_set_fixed_ie(pframe, 1, &(pmlmeinfo->dialogToken), &(pattrib->pktlen));
 
                                #if defined(CONFIG_RTL8188E) && defined(CONFIG_SDIO_HCI)
-                               BA_para_set = (0x0802 | ((status & 0xf) << 2)); //immediate ack & 16 buffer size
+                               BA_para_set = (0x0802 | ((tid & 0xf) << 2)); /* immediate ack & 16 buffer size */
                                #else
                                #else
-                               BA_para_set = (0x1002 | ((status & 0xf) << 2)); //immediate ack & 64 buffer size
+                               BA_para_set = (0x1002 | ((tid & 0xf) << 2)); /* immediate ack & 64 buffer size */
                                #endif
 
                                BA_para_set = cpu_to_le16(BA_para_set);
                                #endif
 
                                BA_para_set = cpu_to_le16(BA_para_set);
@@ -8971,55 +9250,31 @@ void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char act
                                //if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
                                if ((psta = rtw_get_stainfo(pstapriv, raddr)) != NULL)
                                {
                                //if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
                                if ((psta = rtw_get_stainfo(pstapriv, raddr)) != NULL)
                                {
-                                       start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07]&0xfff) + 1;
+                                       start_seq = (psta->sta_xmitpriv.txseq_tid[tid & 0x07]&0xfff) + 1;
 
 
-                                       DBG_871X("BA_starting_seqctrl = %d for TID=%d\n", start_seq, status & 0x07);
+                                       DBG_871X("BA_starting_seqctrl = %d for TID=%d\n", start_seq, tid & 0x07);
                                        
                                        
-                                       psta->BA_starting_seqctrl[status & 0x07] = start_seq;
+                                       psta->BA_starting_seqctrl[tid & 0x07] = start_seq;
                                        
                                        BA_starting_seqctrl = start_seq << 4;
                                }
                                
                                BA_starting_seqctrl = cpu_to_le16(BA_starting_seqctrl);
                                pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_starting_seqctrl)), &(pattrib->pktlen));
                                        
                                        BA_starting_seqctrl = start_seq << 4;
                                }
                                
                                BA_starting_seqctrl = cpu_to_le16(BA_starting_seqctrl);
                                pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_starting_seqctrl)), &(pattrib->pktlen));
-                               DBG_871X("%s, category=%d, action=%d, status=%d\n", __FUNCTION__, category, action, status);
                                break;
 
                                break;
 
-                       case 1: //ADDBA rsp
+                       case RTW_WLAN_ACTION_ADDBA_RESP:
                                pframe = rtw_set_fixed_ie(pframe, 1, &(pmlmeinfo->ADDBA_req.dialog_token), &(pattrib->pktlen));
                                pframe = rtw_set_fixed_ie(pframe, 1, &(pmlmeinfo->ADDBA_req.dialog_token), &(pattrib->pktlen));
+                               status = cpu_to_le16(status);
                                pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&status), &(pattrib->pktlen));
 
                                BA_para_set = le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set);
 
                                pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&status), &(pattrib->pktlen));
 
                                BA_para_set = le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set);
 
-                               if(padapter->driver_rx_ampdu_factor != 0xFF)
-                                       max_rx_ampdu_factor = (HT_CAP_AMPDU_FACTOR)padapter->driver_rx_ampdu_factor;
-                               else
-                                       rtw_hal_get_def_var(padapter, HW_VAR_MAX_RX_AMPDU_FACTOR, &max_rx_ampdu_factor);
-                               
-                               if(MAX_AMPDU_FACTOR_64K == max_rx_ampdu_factor)
-                                       ba_rxbuf_sz = 64;
-                               else if(MAX_AMPDU_FACTOR_32K == max_rx_ampdu_factor)
-                                       ba_rxbuf_sz = 32;
-                               else if(MAX_AMPDU_FACTOR_16K == max_rx_ampdu_factor)
-                                       ba_rxbuf_sz = 16;
-                               else if(MAX_AMPDU_FACTOR_8K == max_rx_ampdu_factor)
-                                       ba_rxbuf_sz = 8;
-                               else
-                                       ba_rxbuf_sz = 64;
-
-                               #ifdef CONFIG_BT_COEXIST
-                               if (rtw_btcoex_IsBTCoexCtrlAMPDUSize(padapter) == _TRUE)
-                                       ba_rxbuf_sz = rtw_btcoex_GetAMPDUSize(padapter);
-                               #endif
-
-                               if (padapter->fix_ba_rxbuf_bz != 0xFF)
-                                       ba_rxbuf_sz = padapter->fix_ba_rxbuf_bz;
-
-                               if (ba_rxbuf_sz > 127)
-                                       ba_rxbuf_sz = 127;
+                               BA_para_set &= ~IEEE80211_ADDBA_PARAM_TID_MASK;
+                               BA_para_set |= (tid << 2) & IEEE80211_ADDBA_PARAM_TID_MASK;
 
                                BA_para_set &= ~RTW_IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK;
 
                                BA_para_set &= ~RTW_IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK;
-                               BA_para_set |= (ba_rxbuf_sz << 6) & RTW_IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK;
+                               BA_para_set |= (size << 6) & RTW_IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK;
 
                                if (!padapter->registrypriv.wifi_spec) {
                                        if(pregpriv->ampdu_amsdu==0)//disabled
 
                                if (!padapter->registrypriv.wifi_spec) {
                                        if(pregpriv->ampdu_amsdu==0)//disabled
@@ -9032,17 +9287,17 @@ void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char act
 
                                pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_para_set)), &(pattrib->pktlen));
                                pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(pmlmeinfo->ADDBA_req.BA_timeout_value)), &(pattrib->pktlen));
 
                                pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_para_set)), &(pattrib->pktlen));
                                pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(pmlmeinfo->ADDBA_req.BA_timeout_value)), &(pattrib->pktlen));
-                               DBG_871X("%s, category=%d, action=%d, status=%d, rxbuf_sz=%u\n", __FUNCTION__, category, action, status, ba_rxbuf_sz);
                                break;
                                break;
-                       case 2://DELBA
-                               BA_para_set = (status & 0x1F) << 3;
+
+                       case RTW_WLAN_ACTION_DELBA:
+                               BA_para_set = 0;
+                               BA_para_set |= (tid << 12) & IEEE80211_DELBA_PARAM_TID_MASK;
+                               BA_para_set |= (initiator << 11) & IEEE80211_DELBA_PARAM_INITIATOR_MASK;
+
                                BA_para_set = cpu_to_le16(BA_para_set);                         
                                pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_para_set)), &(pattrib->pktlen));
                                BA_para_set = cpu_to_le16(BA_para_set);                         
                                pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_para_set)), &(pattrib->pktlen));
-
-                               reason_code = 37;//Requested from peer STA as it does not want to use the mechanism
-                               reason_code = cpu_to_le16(reason_code);
-                               pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(reason_code)), &(pattrib->pktlen));
-                               DBG_871X("%s, category=%d, action=%d, status=%d\n", __FUNCTION__, category, action, status);
+                               status = cpu_to_le16(status);
+                               pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(status)), &(pattrib->pktlen));
                                break;
                        default:
                                break;
                                break;
                        default:
                                break;
@@ -9051,8 +9306,130 @@ void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char act
 
        pattrib->last_txcmdsz = pattrib->pktlen;
 
 
        pattrib->last_txcmdsz = pattrib->pktlen;
 
-       dump_mgntframe(padapter, pmgntframe);
+       if (wait_ack) {
+               ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
+       } else {
+               dump_mgntframe(padapter, pmgntframe);
+               ret = _SUCCESS;
+       }
+
+exit:
 #endif //CONFIG_80211N_HT
 #endif //CONFIG_80211N_HT
+       return ret;
+}
+
+/**
+ * issue_addba_req - TX ADDBA_REQ
+ * @adapter: the adapter to TX
+ * @ra: receiver address
+ * @tid: tid
+ */
+inline void issue_addba_req(_adapter *adapter, unsigned char *ra, u8 tid)
+{
+       issue_action_ba(adapter, ra, RTW_WLAN_ACTION_ADDBA_REQ
+               , tid
+               , 0 /* unused */
+               , 0 /* unused */
+               , 0 /* unused */
+               , _FALSE
+       );
+       DBG_871X(FUNC_ADPT_FMT" ra="MAC_FMT" tid=%u\n"
+               , FUNC_ADPT_ARG(adapter), MAC_ARG(ra), tid);
+
+}
+
+/**
+ * issue_addba_rsp - TX ADDBA_RESP
+ * @adapter: the adapter to TX
+ * @ra: receiver address
+ * @tid: tid
+ * @status: status code
+ * @size: the announced AMPDU buffer size
+ */
+inline void issue_addba_rsp(_adapter *adapter, unsigned char *ra, u8 tid, u16 status, u8 size)
+{
+       issue_action_ba(adapter, ra, RTW_WLAN_ACTION_ADDBA_RESP
+               , tid
+               , size
+               , status
+               , 0 /* unused */
+               , _FALSE
+       );
+       DBG_871X(FUNC_ADPT_FMT" ra="MAC_FMT" status=%u, tid=%u, size=%u\n"
+               , FUNC_ADPT_ARG(adapter), MAC_ARG(ra), status, tid, size);
+}
+
+/**
+ * issue_del_ba - TX DELBA
+ * @adapter: the adapter to TX
+ * @ra: receiver address
+ * @tid: tid
+ * @reason: reason code
+ * @initiator: if we are the initiator of AMPDU association. used by DELBA
+ */
+inline void issue_del_ba(_adapter *adapter, unsigned char *ra, u8 tid, u16 reason, u8 initiator)
+{
+       issue_action_ba(adapter, ra, RTW_WLAN_ACTION_DELBA
+               , tid
+               , 0 /* unused */
+               , reason
+               , initiator
+               , _FALSE
+       );
+       DBG_871X(FUNC_ADPT_FMT" ra="MAC_FMT" reason=%u, tid=%u, initiator=%u\n"
+               , FUNC_ADPT_ARG(adapter), MAC_ARG(ra), reason, tid, initiator);
+}
+
+/**
+ * issue_del_ba_ex - TX DELBA with xmit ack options
+ * @adapter: the adapter to TX
+ * @ra: receiver address
+ * @tid: tid
+ * @reason: reason code
+ * @initiator: if we are the initiator of AMPDU association. used by DELBA
+ * @try_cnt: the max driver level TX count to try
+ * @wait_ms: the waiting ms for each driver level TX
+ */
+int issue_del_ba_ex(_adapter *adapter, unsigned char *ra, u8 tid, u16 reason, u8 initiator
+       , int try_cnt, int wait_ms)
+{
+       int ret;
+       int i = 0;
+       u32 start = rtw_get_current_time();
+
+       do {
+               ret = issue_action_ba(adapter, ra, RTW_WLAN_ACTION_DELBA
+                       , tid
+                       , 0 /* unused */
+                       , reason
+                       , initiator
+                       , wait_ms > 0?_TRUE:_FALSE
+               );
+
+               i++;
+
+               if (adapter->bDriverStopped || adapter->bSurpriseRemoved)
+                       break;
+
+               if (i < try_cnt && wait_ms > 0 && ret == _FAIL)
+                       rtw_msleep_os(wait_ms);
+
+       } while ((i < try_cnt) && ((ret == _FAIL) || (wait_ms == 0)));
+
+       if (ret != _FAIL) {
+               ret = _SUCCESS;
+       #ifndef DBG_XMIT_ACK
+               /* goto exit; */
+       #endif
+       }
+
+       if (try_cnt && wait_ms) {
+               DBG_871X(FUNC_ADPT_FMT" ra="MAC_FMT" reason=%u, tid=%u, initiator=%u%s, %d/%d in %u ms\n"
+                       , FUNC_ADPT_ARG(adapter), MAC_ARG(ra), reason, tid, initiator
+                       , ret == _SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
+       }
+exit:
+       return ret;
 }
 
 static void issue_action_BSSCoexistPacket(_adapter *padapter)
 }
 
 static void issue_action_BSSCoexistPacket(_adapter *padapter)
@@ -9105,7 +9482,7 @@ static void issue_action_BSSCoexistPacket(_adapter *padapter)
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -9266,7 +9643,7 @@ int _issue_action_SM_PS(_adapter *padapter ,  unsigned char *raddr , u8 NewMimoP
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN); /* RA */
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN); /* RA */
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); /* TA */
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN); /* TA */
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN); /* DA = RA */
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN); /* DA = RA */
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
@@ -9347,62 +9724,101 @@ int issue_action_SM_PS(_adapter *padapter ,  unsigned char *raddr , u8 NewMimoPs
        return _issue_action_SM_PS(padapter, raddr, NewMimoPsMode , _FALSE );
 }
 
        return _issue_action_SM_PS(padapter, raddr, NewMimoPsMode , _FALSE );
 }
 
-unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr)
+/**
+ * _send_delba_sta_tid - Cancel the AMPDU association for the specific @sta, @tid
+ * @adapter: the adapter to which @sta belongs
+ * @initiator: if we are the initiator of AMPDU association
+ * @sta: the sta to be checked
+ * @tid: the tid to be checked
+ * @force: cancel and send DELBA even when no AMPDU association is setup
+ * @wait_ack: send delba with xmit ack (valid when initiator == 0)
+ *
+ * Returns:
+ * _FAIL if sta is NULL
+ * when initiator is 1, always _SUCCESS
+ * when initiator is 0, _SUCCESS if DELBA is acked
+ */
+static unsigned int _send_delba_sta_tid(_adapter *adapter, u8 initiator, struct sta_info *sta, u8 tid
+       , u8 force, int wait_ack)
 {
 {
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info *psta = NULL;
-       //struct recv_reorder_ctrl *preorder_ctrl;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
-       u16 tid;
+       int ret = _SUCCESS;
 
 
-       if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE) 
-               if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS))
-                       return _SUCCESS;
-       
-       psta = rtw_get_stainfo(pstapriv, addr);
-       if(psta==NULL)
-               return _SUCCESS;
+       if (sta == NULL) {
+               ret = _FAIL;
+               goto exit;
+       }
 
 
-       //DBG_871X("%s:%s\n", __FUNCTION__, (initiator==0)?"RX_DIR":"TX_DIR");
-       
-       if(initiator==0) // recipient
-       {
-               for(tid = 0;tid<MAXTID;tid++)
-               {
-                       if(psta->recvreorder_ctrl[tid].enable == _TRUE)
-                       {
-                               DBG_871X("rx agg disable tid(%d)\n",tid);
-                               issue_action_BA(padapter, addr, RTW_WLAN_ACTION_DELBA, (((tid <<1) |initiator)&0x1F));
-                               psta->recvreorder_ctrl[tid].enable = _FALSE;
-                               psta->recvreorder_ctrl[tid].indicate_seq = 0xffff;
-                               #ifdef DBG_RX_SEQ
-                               DBG_871X("DBG_RX_SEQ %s:%d indicate_seq:%u \n", __FUNCTION__, __LINE__,
-                                       psta->recvreorder_ctrl[tid].indicate_seq);
-                               #endif
-                       }               
+       if (initiator == 0) {
+               /* recipient */
+               if (force || sta->recvreorder_ctrl[tid].enable == _TRUE) {
+                       u8 ampdu_size_bak = sta->recvreorder_ctrl[tid].ampdu_size;
+
+                       sta->recvreorder_ctrl[tid].enable = _FALSE;
+                       sta->recvreorder_ctrl[tid].ampdu_size = RX_AMPDU_SIZE_INVALID;
+
+                       if (rtw_del_rx_ampdu_test_trigger_no_tx_fail())
+                               ret = _FAIL;
+                       else if (wait_ack)
+                               ret = issue_del_ba_ex(adapter, sta->hwaddr, tid, 37, initiator, 3, 1);
+                       else
+                               issue_del_ba(adapter, sta->hwaddr, tid, 37, initiator);
+
+                       if (ret == _FAIL && sta->recvreorder_ctrl[tid].enable == _FALSE)
+                               sta->recvreorder_ctrl[tid].ampdu_size = ampdu_size_bak;
                }
                }
-       }
-       else if(initiator == 1)// originator
-       {
+       } else if (initiator == 1) {
+               /* originator */
 #ifdef CONFIG_80211N_HT
 #ifdef CONFIG_80211N_HT
-               //DBG_871X("tx agg_enable_bitmap(0x%08x)\n", psta->htpriv.agg_enable_bitmap);
-               for(tid = 0;tid<MAXTID;tid++)
-               {
-                       if(psta->htpriv.agg_enable_bitmap & BIT(tid))
-                       {
-                               DBG_871X("tx agg disable tid(%d)\n",tid);
-                               issue_action_BA(padapter, addr, RTW_WLAN_ACTION_DELBA, (((tid <<1) |initiator)&0x1F) );
-                               psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
-                               psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
-                               
-                       }                       
+               if (force || sta->htpriv.agg_enable_bitmap & BIT(tid)) {
+                       sta->htpriv.agg_enable_bitmap &= ~BIT(tid);
+                       sta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
+                       issue_del_ba(adapter, sta->hwaddr, tid, 37, initiator);
                }
                }
-#endif //CONFIG_80211N_HT
+#endif
        }
        }
-       
+
+exit:
+       return ret;
+}
+
+inline unsigned int send_delba_sta_tid(_adapter *adapter, u8 initiator, struct sta_info *sta, u8 tid
+       , u8 force)
+{
+       return _send_delba_sta_tid(adapter, initiator, sta, tid, force, 0);
+}
+
+inline unsigned int send_delba_sta_tid_wait_ack(_adapter *adapter, u8 initiator, struct sta_info *sta, u8 tid
+       , u8 force)
+{
+       return _send_delba_sta_tid(adapter, initiator, sta, tid, force, 1);
+}
+
+unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr)
+{
+       struct sta_priv *pstapriv = &padapter->stapriv;
+       struct sta_info *psta = NULL;
+       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
+       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
+       u16 tid;
+
+       if ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
+               if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS))
+                       return _SUCCESS;
+
+       psta = rtw_get_stainfo(pstapriv, addr);
+       if(psta==NULL)
+               return _SUCCESS;
+
+       #if 0
+       DBG_871X("%s:%s\n", __func__, (initiator == 0)?"RX_DIR":"TX_DIR");
+       if (initiator == 1) /* originator */
+               DBG_871X("tx agg_enable_bitmap(0x%08x)\n", psta->htpriv.agg_enable_bitmap);
+       #endif
+
+       for (tid = 0; tid < TID_NUM; tid++)
+               send_delba_sta_tid(padapter, initiator, psta, tid, 0);
+
        return _SUCCESS;
        return _SUCCESS;
-       
 }
 
 unsigned int send_beacon(_adapter *padapter)
 }
 
 unsigned int send_beacon(_adapter *padapter)
@@ -9501,7 +9917,7 @@ void site_survey(_adapter *padapter)
        RT_SCAN_TYPE    ScanType = SCAN_PASSIVE;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        RT_SCAN_TYPE    ScanType = SCAN_PASSIVE;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
-       u32 initialgain = 0;
+       u8 initialgain = 0;
        u32 channel_scan_time_ms = 0,val32 = 0;
 
 #ifdef CONFIG_P2P
        u32 channel_scan_time_ms = 0,val32 = 0;
 
 #ifdef CONFIG_P2P
@@ -9603,12 +10019,17 @@ void site_survey(_adapter *padapter)
                                } else {
                                        pmlmeinfo->backop_cnt++;
                                        set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
                                } else {
                                        pmlmeinfo->backop_cnt++;
                                        set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
-                                       return;
+                                       return; 
                                }
                        } else {
                                }
                        } else {
-
                                pmlmeinfo->scan_cnt++;
                        }
                                pmlmeinfo->scan_cnt++;
                        }
+               } else {
+                       if (pmlmeinfo->backop_cnt > 0) {
+                               stay_buddy_ch = 2;
+                               pmlmeinfo->scan_cnt = 1;
+                               pmlmeinfo->backop_cnt = 0;
+                       }       
                }
 #endif
                if(pmlmeext->sitesurvey_res.channel_idx == 0)
                }
 #endif
                if(pmlmeext->sitesurvey_res.channel_idx == 0)
@@ -9726,8 +10147,8 @@ void site_survey(_adapter *padapter)
                if (rtw_get_ch_setting_union(padapter, &cur_channel, &cur_bwmode, &cur_ch_offset) != 0)
                {
                        if (0)
                if (rtw_get_ch_setting_union(padapter, &cur_channel, &cur_bwmode, &cur_ch_offset) != 0)
                {
                        if (0)
-                       DBG_871X(FUNC_ADPT_FMT" back to linked/linking union - ch:%u, bw:%u, offset:%u\n",
-                               FUNC_ADPT_ARG(padapter), cur_channel, cur_bwmode, cur_ch_offset);
+                               DBG_871X(FUNC_ADPT_FMT" back to linked/linking union - ch:%u, bw:%u, offset:%u\n",
+                                       FUNC_ADPT_ARG(padapter), cur_channel, cur_bwmode, cur_ch_offset);
                }
                #ifdef CONFIG_IOCTL_CFG80211
                else if(padapter->pbuddy_adapter
                }
                #ifdef CONFIG_IOCTL_CFG80211
                else if(padapter->pbuddy_adapter
@@ -9773,7 +10194,6 @@ void site_survey(_adapter *padapter)
 
                        //turn on phy-dynamic functions
                        Restore_DM_Func_Flag(padapter);
 
                        //turn on phy-dynamic functions
                        Restore_DM_Func_Flag(padapter);
-                       //Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
                        
                        initialgain = 0xff; //restore RX GAIN
                        rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));         
                        
                        initialgain = 0xff; //restore RX GAIN
                        rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));         
@@ -9831,9 +10251,6 @@ void site_survey(_adapter *padapter)
 #ifdef CONFIG_CONCURRENT_MODE
                                set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
 #else
 #ifdef CONFIG_CONCURRENT_MODE
                                set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
 #else
-#ifdef CONFIG_DUALMAC_CONCURRENT
-                               dc_set_channel_bwmode_survey_done(padapter);
-#else
 
 #ifdef CONFIG_P2P
                        if( (pwdinfo->driver_interface == DRIVER_WEXT) && (rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN)) )
 
 #ifdef CONFIG_P2P
                        if( (pwdinfo->driver_interface == DRIVER_WEXT) && (rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN)) )
@@ -9842,7 +10259,6 @@ void site_survey(_adapter *padapter)
 #endif //CONFIG_P2P
                                set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
 
 #endif //CONFIG_P2P
                                set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
 
-#endif //CONFIG_DUALMAC_CONCURRENT
 #endif //CONFIG_CONCURRENT_MODE
                        }
 
 #endif //CONFIG_CONCURRENT_MODE
                        }
 
@@ -9855,7 +10271,6 @@ void site_survey(_adapter *padapter)
 
                        //turn on phy-dynamic functions
                        Restore_DM_Func_Flag(padapter);
 
                        //turn on phy-dynamic functions
                        Restore_DM_Func_Flag(padapter);
-                       //Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, _TRUE);
                        
                        initialgain = 0xff; //restore RX GAIN
                        rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain)); 
                        
                        initialgain = 0xff; //restore RX GAIN
                        rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain)); 
@@ -10254,6 +10669,7 @@ void start_clnt_join(_adapter* padapter)
                u8 iot_flag = _TRUE;
                rtw_hal_set_hwreg(padapter, HW_VAR_ASIX_IOT, (u8 *)(&iot_flag));
        }
                u8 iot_flag = _TRUE;
                rtw_hal_set_hwreg(padapter, HW_VAR_ASIX_IOT, (u8 *)(&iot_flag));
        }
+       
        if (caps&cap_ESS)
        {
                Set_MSR(padapter, WIFI_FW_STATION_STATE);
        if (caps&cap_ESS)
        {
                Set_MSR(padapter, WIFI_FW_STATION_STATE);
@@ -10291,8 +10707,6 @@ void start_clnt_join(_adapter* padapter)
                        for (pos = get_next(head);!rtw_end_of_queue_search(head, pos); pos = get_next(pos)) {
                                
                                scanned = LIST_CONTAINOR(pos, struct wlan_network, list);
                        for (pos = get_next(head);!rtw_end_of_queue_search(head, pos); pos = get_next(pos)) {
                                
                                scanned = LIST_CONTAINOR(pos, struct wlan_network, list);
-                               if(scanned==NULL)
-                                       rtw_warn_on(1);
 
                                if (_rtw_memcmp(&(scanned->network.Ssid), &(pnetwork->Ssid), sizeof(NDIS_802_11_SSID)) == _TRUE
                                        && _rtw_memcmp(scanned->network.MacAddress, pnetwork->MacAddress, sizeof(NDIS_802_11_MAC_ADDRESS)) == _TRUE
 
                                if (_rtw_memcmp(&(scanned->network.Ssid), &(pnetwork->Ssid), sizeof(NDIS_802_11_SSID)) == _TRUE
                                        && _rtw_memcmp(scanned->network.MacAddress, pnetwork->MacAddress, sizeof(NDIS_802_11_MAC_ADDRESS)) == _TRUE
@@ -10388,7 +10802,6 @@ unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsi
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
 
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
 
-       //check A3
        if (!(_rtw_memcmp(MacAddr, get_my_bssid(&pmlmeinfo->network), ETH_ALEN)))
                return _SUCCESS;
 
        if (!(_rtw_memcmp(MacAddr, get_my_bssid(&pmlmeinfo->network), ETH_ALEN)))
                return _SUCCESS;
 
@@ -10576,7 +10989,7 @@ static void process_80211d(PADAPTER padapter, WLAN_BSSID_EX *bssid)
                if (pregistrypriv->wireless_mode & WIRELESS_11A)
                {
                        do {
                if (pregistrypriv->wireless_mode & WIRELESS_11A)
                {
                        do {
-                               if ((i == MAX_CHANNEL_NUM) ||
+                               if ((i >= MAX_CHANNEL_NUM) ||
                                        (chplan_sta[i].ChannelNum == 0))
                                        break;
 
                                        (chplan_sta[i].ChannelNum == 0))
                                        break;
 
@@ -11246,21 +11659,19 @@ static void rtw_mlmeext_disconnect(_adapter *padapter)
                }
        }
 
                }
        }
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       dc_set_channel_bwmode_disconnect(padapter);
-#else //!CONFIG_DUALMAC_CONCURRENT
 #ifdef CONFIG_CONCURRENT_MODE
        if((check_buddy_fwstate(padapter, _FW_LINKED)) != _TRUE)
 #ifdef CONFIG_CONCURRENT_MODE
        if((check_buddy_fwstate(padapter, _FW_LINKED)) != _TRUE)
+#endif //CONFIG_CONCURRENT_MODE        
        {
        {
-#endif //CONFIG_CONCURRENT_MODE
+
                //switch to the 20M Hz mode after disconnect
                pmlmeext->cur_bwmode = CHANNEL_WIDTH_20;
                pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
 
                set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
                //switch to the 20M Hz mode after disconnect
                pmlmeext->cur_bwmode = CHANNEL_WIDTH_20;
                pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
 
                set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-#ifdef CONFIG_CONCURRENT_MODE
        }
        }
-#endif //CONFIG_CONCURRENT_MODE
+
+
 #ifdef CONFIG_FCS_MODE
        else
        {
 #ifdef CONFIG_FCS_MODE
        else
        {
@@ -11279,7 +11690,6 @@ static void rtw_mlmeext_disconnect(_adapter *padapter)
                }       
        }
 #endif //!CONFIG_FCS_MODE
                }       
        }
 #endif //!CONFIG_FCS_MODE
-#endif //!CONFIG_DUALMAC_CONCURRENT
 
 
        flush_all_cam_entry(padapter);
 
 
        flush_all_cam_entry(padapter);
@@ -11290,6 +11700,16 @@ static void rtw_mlmeext_disconnect(_adapter *padapter)
        pmlmepriv->LinkDetectInfo.TrafficTransitionCount = 0;
        pmlmepriv->LinkDetectInfo.LowPowerTransitionCount = 0;
 
        pmlmepriv->LinkDetectInfo.TrafficTransitionCount = 0;
        pmlmepriv->LinkDetectInfo.LowPowerTransitionCount = 0;
 
+#ifdef CONFIG_TDLS
+       padapter->tdlsinfo.ap_prohibited = _FALSE;
+
+       /* For TDLS channel switch, currently we only allow it to work in wifi logo test mode */
+       if (padapter->registrypriv.wifi_spec == 1)
+       {
+               padapter->tdlsinfo.ch_switch_prohibited = _FALSE;
+       }
+#endif /* CONFIG_TDLS */
+
 }
 
 void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
 }
 
 void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
@@ -11318,7 +11738,7 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
 
 
        //turn on dynamic functions
 
 
        //turn on dynamic functions
-       Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, _TRUE);
+       /* Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, _TRUE); */
 
        // update IOT-releated issue
        update_IOT_info(padapter);
 
        // update IOT-releated issue
        update_IOT_info(padapter);
@@ -11393,9 +11813,6 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
 
 exit_mlmeext_joinbss_event_callback:
 
 
 exit_mlmeext_joinbss_event_callback:
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       dc_handle_join_done(padapter, join_res);
-#endif
 #ifdef CONFIG_CONCURRENT_MODE
        concurrent_chk_joinbss_done(padapter, join_res);
 #endif
 #ifdef CONFIG_CONCURRENT_MODE
        concurrent_chk_joinbss_done(padapter, join_res);
 #endif
@@ -11485,7 +11902,7 @@ void _linked_info_dump(_adapter *padapter)
        int i;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        int i;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
-       int UndecoratedSmoothedPWDB;
+       int UndecoratedSmoothedPWDB = 0;
        struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
        struct macid_ctl_t *macid_ctl = dvobj_to_macidctl(dvobj);
        
        struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
        struct macid_ctl_t *macid_ctl = dvobj_to_macidctl(dvobj);
        
@@ -11660,8 +12077,7 @@ struct candidate_pool{
                        for(i=0; i< num_checkalive; i++)
                        {
 #ifdef CONFIG_XMIT_ACK
                        for(i=0; i< num_checkalive; i++)
                        {
 #ifdef CONFIG_XMIT_ACK
-                               //TDLS: Should we set wait_ms to 300 for keeping alive?
-                               ack_chk = issue_nulldata_to_TDLS_peer_STA(padapter,     checkalive[i].addr, 0, 3, 300);
+                               ack_chk = issue_nulldata_to_TDLS_peer_STA(padapter,     checkalive[i].addr, 0, 3, 500);
 
                                if(ack_chk == _SUCCESS)
                                {
 
                                if(ack_chk == _SUCCESS)
                                {
@@ -11735,13 +12151,16 @@ void linked_status_chk(_adapter *padapter, u8 from_timer)
                                link_count_limit = 29; // 60 sec
                }               
 
                                link_count_limit = 29; // 60 sec
                }               
 
-               // Marked by Kurt 20130715
-               // For WiDi 3.5 and latered on, they don't ask WiDi sink to do roaming, so we could not check rx limit that strictly.
-               // todo: To check why we under miracast session, rx_chk would be _FALSE
-               //#ifdef CONFIG_INTEL_WIDI
-               //if (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_NONE)
-               //      rx_chk_limit = 1;
-               //#endif
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+               if (ATOMIC_READ(&padapter->tdlsinfo.chsw_info.chsw_on) == _TRUE)
+                       return;
+#endif /* CONFIG_TDLS_CH_SW */
+
+#ifdef CONFIG_TDLS_AUTOCHECKALIVE
+               linked_status_chk_tdls(padapter);
+#endif /* CONFIG_TDLS_AUTOCHECKALIVE */
+#endif /* CONFIG_TDLS */
 
                if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
                {
 
                if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
                {
@@ -11825,10 +12244,6 @@ void linked_status_chk(_adapter *padapter, u8 from_timer)
 
                } //end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.MacAddress)) != NULL)
 
 
                } //end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.MacAddress)) != NULL)
 
-#if defined (CONFIG_TDLS) && defined (CONFIG_TDLS_AUTOCHECKALIVE)
-               linked_status_chk_tdls(padapter);
-#endif //CONFIG_TDLS
-
        }
        else if (is_client_associated_to_ibss(padapter))
        {
        }
        else if (is_client_associated_to_ibss(padapter))
        {
@@ -12241,6 +12656,8 @@ u8 setopmode_hdl(_adapter *padapter, u8 *pbuf)
        else if(psetop->mode == Ndis802_11IBSS)
        {
                type = _HW_STATE_ADHOC_;
        else if(psetop->mode == Ndis802_11IBSS)
        {
                type = _HW_STATE_ADHOC_;
+       } else if (psetop->mode == Ndis802_11Monitor) {
+               type = _HW_STATE_MONITOR_;
        }
        else
        {
        }
        else
        {
@@ -12290,7 +12707,7 @@ u8 createbss_hdl(_adapter *padapter, u8 *pbuf)
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        WLAN_BSSID_EX   *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
        struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        WLAN_BSSID_EX   *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
        struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf;
-       //u32   initialgain;
+       //u   initialgain;
        
 #ifdef CONFIG_AP_MODE
        if (pmlmeinfo->state == WIFI_FW_AP_STATE) {
        
 #ifdef CONFIG_AP_MODE
        if (pmlmeinfo->state == WIFI_FW_AP_STATE) {
@@ -12358,7 +12775,7 @@ u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf)
 #endif //CONFIG_ANTENNA_DIVERSITY
        u32 i;
        u8      cbw40_enable=0;
 #endif //CONFIG_ANTENNA_DIVERSITY
        u32 i;
        u8      cbw40_enable=0;
-       //u32   initialgain;
+       //u   initialgain;
        //u32   acparm;
        u8 ch, bw, offset;
 
        //u32   acparm;
        u8 ch, bw, offset;
 
@@ -12412,7 +12829,11 @@ u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf)
        
        if(pnetwork->IELength>MAX_IE_SZ)//Check pbuf->IELength
                return H2C_PARAMETERS_ERROR;    
        
        if(pnetwork->IELength>MAX_IE_SZ)//Check pbuf->IELength
                return H2C_PARAMETERS_ERROR;    
-               
+       
+       if (pnetwork->IELength < 2) {
+               report_join_res(padapter, (-4));
+               return H2C_SUCCESS;
+       }
        _rtw_memcpy(pnetwork->IEs, ((WLAN_BSSID_EX *)pbuf)->IEs, pnetwork->IELength); 
 
        pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
        _rtw_memcpy(pnetwork->IEs, ((WLAN_BSSID_EX *)pbuf)->IEs, pnetwork->IELength); 
 
        pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
@@ -12422,8 +12843,7 @@ u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf)
        //pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->IEs, pnetwork->IELength);
 
        //sizeof(NDIS_802_11_FIXED_IEs) 
        //pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->IEs, pnetwork->IELength);
 
        //sizeof(NDIS_802_11_FIXED_IEs) 
-       for (i = _FIXED_IE_LENGTH_; i < pnetwork->IELength;)
-       {
+       for (i = _FIXED_IE_LENGTH_ ; i < pnetwork->IELength - 2 ;) {
                pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
 
                switch (pIE->ElementID)
                pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
 
                switch (pIE->ElementID)
@@ -12444,9 +12864,6 @@ u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf)
                                pmlmeinfo->HT_info_enable = 1;
 
                                //spec case only for cisco's ap because cisco's ap issue assoc rsp using mcs rate @40MHz or @20MHz      
                                pmlmeinfo->HT_info_enable = 1;
 
                                //spec case only for cisco's ap because cisco's ap issue assoc rsp using mcs rate @40MHz or @20MHz      
-//#if !defined(CONFIG_CONCURRENT_MODE) && !defined(CONFIG_DUALMAC_CONCURRENT)
-//                             if(pmlmeinfo->assoc_AP_vendor == ciscoAP)
-//#endif
                                {                               
                                        struct HT_info_element *pht_info = (struct HT_info_element *)(pIE->data);
 
                                {                               
                                        struct HT_info_element *pht_info = (struct HT_info_element *)(pIE->data);
 
@@ -12534,17 +12951,10 @@ u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf)
 #endif
 
        /* check channel, bandwidth, offset and switch */
 #endif
 
        /* check channel, bandwidth, offset and switch */
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       if(dc_handle_join_request(padapter, &ch, &bw, &offset) == _FAIL) {
-               DBG_871X("dc_handle_join_request fail !!!\n");
-               return H2C_SUCCESS;
-       }
-#else //NON CONFIG_DUALMAC_CONCURRENT
        if(rtw_chk_start_clnt_join(padapter, &ch, &bw, &offset) == _FAIL) {
                report_join_res(padapter, (-4));
                return H2C_SUCCESS;
        }
        if(rtw_chk_start_clnt_join(padapter, &ch, &bw, &offset) == _FAIL) {
                report_join_res(padapter, (-4));
                return H2C_SUCCESS;
        }
-#endif
 
        //disable dynamic functions, such as high power, DIG
        //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
 
        //disable dynamic functions, such as high power, DIG
        //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
@@ -12709,7 +13119,8 @@ exit:
        return ret_num;
 }
 
        return ret_num;
 }
 
-static int rtw_scan_ch_decision(_adapter *padapter, struct rtw_ieee80211_channel *out, u32 out_num, struct rtw_ieee80211_channel *in, u32 in_num)
+static int rtw_scan_ch_decision(_adapter *padapter, struct rtw_ieee80211_channel *out,
+       u32 out_num, struct rtw_ieee80211_channel *in, u32 in_num)
 {
        int i, j;
        int scan_ch_num = 0;
 {
        int i, j;
        int scan_ch_num = 0;
@@ -12724,7 +13135,7 @@ static int rtw_scan_ch_decision(_adapter *padapter, struct rtw_ieee80211_channel
        for (i=0;i<in_num;i++) {
 
                if (0)
        for (i=0;i<in_num;i++) {
 
                if (0)
-               DBG_871X(FUNC_ADPT_FMT" "CHAN_FMT"\n", FUNC_ADPT_ARG(padapter), CHAN_ARG(&in[i]));
+                       DBG_871X(FUNC_ADPT_FMT" "CHAN_FMT"\n", FUNC_ADPT_ARG(padapter), CHAN_ARG(&in[i]));
 
                if(in[i].hw_value && !(in[i].flags & RTW_IEEE80211_CHAN_DISABLED)
                        && (set_idx=rtw_ch_set_search_ch(pmlmeext->channel_set, in[i].hw_value)) >=0
 
                if(in[i].hw_value && !(in[i].flags & RTW_IEEE80211_CHAN_DISABLED)
                        && (set_idx=rtw_ch_set_search_ch(pmlmeext->channel_set, in[i].hw_value)) >=0
@@ -12753,7 +13164,7 @@ static int rtw_scan_ch_decision(_adapter *padapter, struct rtw_ieee80211_channel
                for (i=0;i<pmlmeext->max_chan_nums;i++) {
 
                        if (0)
                for (i=0;i<pmlmeext->max_chan_nums;i++) {
 
                        if (0)
-                       DBG_871X(FUNC_ADPT_FMT" ch:%u\n", FUNC_ADPT_ARG(padapter), pmlmeext->channel_set[i].ChannelNum);
+                               DBG_871X(FUNC_ADPT_FMT" ch:%u\n", FUNC_ADPT_ARG(padapter), pmlmeext->channel_set[i].ChannelNum);
 
                        if (rtw_mlme_band_check(padapter, pmlmeext->channel_set[i].ChannelNum) == _TRUE) {
 
 
                        if (rtw_mlme_band_check(padapter, pmlmeext->channel_set[i].ChannelNum) == _TRUE) {
 
@@ -12785,7 +13196,7 @@ u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf)
        struct sitesurvey_parm  *pparm = (struct sitesurvey_parm *)pbuf;
        u8      bdelayscan = _FALSE;
        u8      val8;
        struct sitesurvey_parm  *pparm = (struct sitesurvey_parm *)pbuf;
        u8      bdelayscan = _FALSE;
        u8      val8;
-       u32     initialgain;
+       u     initialgain;
        u32     i;
        struct dvobj_priv *psdpriv = padapter->dvobj;
        struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
        u32     i;
        struct dvobj_priv *psdpriv = padapter->dvobj;
        struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
@@ -12828,10 +13239,6 @@ u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf)
 
                pmlmeext->sitesurvey_res.scan_mode = pparm->scan_mode;
 
 
                pmlmeext->sitesurvey_res.scan_mode = pparm->scan_mode;
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-               bdelayscan = dc_handle_site_survey(padapter);
-#endif
-
                //issue null data if associating to the AP
                if (is_client_associated_to_ap(padapter) == _TRUE)
                {
                //issue null data if associating to the AP
                if (is_client_associated_to_ap(padapter) == _TRUE)
                {
@@ -12967,7 +13374,7 @@ u8 setkey_hdl(_adapter *padapter, u8 *pbuf)
        #endif
 
        //allow multicast packets to driver
        #endif
 
        //allow multicast packets to driver
-       padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_ON_RCR_AM, null_addr);
+       rtw_hal_set_hwreg(padapter, HW_VAR_ON_RCR_AM, null_addr);
 
        return H2C_SUCCESS;
 }
 
        return H2C_SUCCESS;
 }
@@ -12982,9 +13389,6 @@ u8 set_stakey_hdl(_adapter *padapter, u8 *pbuf)
        struct set_stakey_parm  *pparm = (struct set_stakey_parm *)pbuf;
        struct sta_priv *pstapriv = &padapter->stapriv;
        struct sta_info *psta;
        struct set_stakey_parm  *pparm = (struct set_stakey_parm *)pbuf;
        struct sta_priv *pstapriv = &padapter->stapriv;
        struct sta_info *psta;
-#ifdef CONFIG_TDLS
-       struct tdls_info        *ptdlsinfo = &padapter->tdlsinfo;
-#endif //CONFIG_TDLS
 
        if(pparm->algorithm == _NO_PRIVACY_)
                goto write_to_cam;
 
        if(pparm->algorithm == _NO_PRIVACY_)
                goto write_to_cam;
@@ -13038,7 +13442,7 @@ u8 add_ba_hdl(_adapter *padapter, unsigned char *pbuf)
                //pmlmeinfo->ADDBA_retry_count = 0;
                //pmlmeinfo->candidate_tid_bitmap |= (0x1 << pparm->tid);               
                //psta->htpriv.candidate_tid_bitmap |= BIT(pparm->tid);
                //pmlmeinfo->ADDBA_retry_count = 0;
                //pmlmeinfo->candidate_tid_bitmap |= (0x1 << pparm->tid);               
                //psta->htpriv.candidate_tid_bitmap |= BIT(pparm->tid);
-               issue_action_BA(padapter, pparm->addr, RTW_WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid);             
+               issue_addba_req(padapter, pparm->addr, (u8)pparm->tid);
                //_set_timer(&pmlmeext->ADDBA_timer, ADDBA_TO);
                _set_timer(&psta->addba_retry_timer, ADDBA_TO);
        }
                //_set_timer(&pmlmeext->ADDBA_timer, ADDBA_TO);
                _set_timer(&psta->addba_retry_timer, ADDBA_TO);
        }
@@ -13047,8 +13451,7 @@ u8 add_ba_hdl(_adapter *padapter, unsigned char *pbuf)
                (psta->htpriv.ht_option==_TRUE) && 
                (psta->htpriv.ampdu_enable==_TRUE) )
        {
                (psta->htpriv.ht_option==_TRUE) && 
                (psta->htpriv.ampdu_enable==_TRUE) )
        {
-               issue_action_BA(padapter, pparm->addr, RTW_WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid);             
-               //_set_timer(&pmlmeext->ADDBA_timer, ADDBA_TO);
+               issue_addba_req(padapter, pparm->addr, (u8)pparm->tid);
                _set_timer(&psta->addba_retry_timer, ADDBA_TO);
        }
 #endif //CONFIG
                _set_timer(&psta->addba_retry_timer, ADDBA_TO);
        }
 #endif //CONFIG
@@ -13343,572 +13746,6 @@ void change_band_update_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork)
        }
 }
 
        }
 }
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-void dc_SelectChannel(_adapter *padapter, unsigned char channel)
-{
-       PADAPTER ptarget_adapter;
-
-       if( (padapter->pbuddy_adapter != NULL) && 
-               (padapter->DualMacConcurrent == _TRUE) &&
-               (padapter->adapter_type == SECONDARY_ADAPTER))
-       {
-               // only mac0 could control BB&RF
-               ptarget_adapter = padapter->pbuddy_adapter;
-       }
-       else
-       {
-               ptarget_adapter = padapter;
-       }
-
-       _enter_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setch_mutex), NULL);
-
-       rtw_hal_set_chan(ptarget_adapter, channel);
-
-       _exit_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setch_mutex), NULL);
-}
-
-void dc_SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset)
-{
-       PADAPTER ptarget_adapter;
-
-       if( (padapter->pbuddy_adapter != NULL) && 
-               (padapter->DualMacConcurrent == _TRUE) &&
-               (padapter->adapter_type == SECONDARY_ADAPTER))
-       {
-               // only mac0 could control BB&RF
-               ptarget_adapter = padapter->pbuddy_adapter;
-       }
-       else
-       {
-               ptarget_adapter = padapter;
-       }
-
-       _enter_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setbw_mutex), NULL);
-
-       rtw_hal_set_bwmode(ptarget_adapter, (CHANNEL_WIDTH)bwmode, channel_offset);
-
-       _exit_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setbw_mutex), NULL);
-}
-
-void dc_set_channel_bwmode_disconnect(_adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
-       struct mlme_priv *pbuddy_mlmepriv = NULL;
-
-       if(pbuddy_adapter != NULL && 
-               padapter->DualMacConcurrent == _TRUE)
-       {
-               pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
-               if((check_fwstate(pbuddy_mlmepriv, _FW_LINKED)) != _TRUE)
-               {
-                       //switch to the 20M Hz mode after disconnect
-                       pmlmeext->cur_bwmode = CHANNEL_WIDTH_20;
-                       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
-                       set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-               }
-       }
-       else
-       {
-               //switch to the 20M Hz mode after disconnect
-               pmlmeext->cur_bwmode = CHANNEL_WIDTH_20;
-               pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
-               set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-       }
-}
-
-u8 dc_handle_join_request(_adapter *padapter, u8 *ch, u8 *bw, u8 *offset)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
-       WLAN_BSSID_EX           *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
-       PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;             
-       struct mlme_ext_priv *pbuddy_mlmeext = NULL;
-       struct mlme_priv        *pbuddy_mlmepriv = NULL;
-       u8      ret = _SUCCESS;
-
-       if(pbuddy_adapter != NULL && 
-               padapter->DualMacConcurrent == _TRUE)
-       {
-               pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
-               pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
-
-               if(pmlmeext->cur_channel != pbuddy_mlmeext->cur_channel ||
-                       pmlmeext->cur_bwmode != pbuddy_mlmeext->cur_bwmode ||
-                       pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset)
-               {
-                       if((check_fwstate(pbuddy_mlmepriv, WIFI_AP_STATE)) == _TRUE)
-                       {
-                               //issue deauth to all stas if if2 is at ap mode
-                               rtw_sta_flush(pbuddy_adapter);
-
-                               //rtw_hal_set_hwreg(padapter, HW_VAR_CHECK_TXBUF, 0);
-                               rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_CHECK_TXBUF, 0);
-                       }
-                       else if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED) == _TRUE)
-                       {
-                               if(pmlmeext->cur_channel == pbuddy_mlmeext->cur_channel)
-                               {
-                                       // CHANNEL_WIDTH_40 or CHANNEL_WIDTH_20 but channel offset is different
-                                       if((pmlmeext->cur_bwmode == pbuddy_mlmeext->cur_bwmode) &&
-                                               (pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset) )
-                                       {
-                                               report_join_res(padapter, -4);
-                                               ret = _FAIL;
-                                       }
-                               }
-                               else
-                               {
-                                       report_join_res(padapter, -4);
-                                       ret = _FAIL;
-                               }
-                       }
-               }
-               else     if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
-               {
-                       issue_nulldata(pbuddy_adapter, NULL, 1, 0, 0);
-               }
-       }
-
-       if (!ch || !bw || !offset) {
-               rtw_warn_on(1);
-               ret = _FAIL;
-       }
-
-       if (ret == _SUCCESS) {
-               *ch = pmlmeext->cur_channel;
-               *bw = pmlmeext->cur_bwmode;
-               *offset = pmlmeext->cur_ch_offset;
-       }
-
-exit:
-       return ret;
-}
-
-void dc_handle_join_done(_adapter *padapter, u8 join_res)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
-       PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
-       struct mlme_priv *pbuddy_mlmepriv = NULL;
-       struct mlme_ext_priv *pbuddy_mlmeext = NULL;
-       struct mlme_ext_info *pbuddy_mlmeinfo = NULL;
-       WLAN_BSSID_EX *pbuddy_network_mlmeext = NULL;
-       u8      change_band = _FALSE;
-
-
-       if(pbuddy_adapter != NULL && 
-               padapter->DualMacConcurrent == _TRUE)
-       {
-               pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
-               pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
-               pbuddy_mlmeinfo = &(pbuddy_mlmeext->mlmext_info);
-               pbuddy_network_mlmeext = &(pbuddy_mlmeinfo->network);
-       
-               if(((pbuddy_mlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
-                               check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
-               {
-                       //restart and update beacon
-                       DBG_871X("after join, current adapter, CH=%d, BW=%d, offset=%d\n", pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
-
-                       if(join_res >= 0)
-                       {
-                               u8 *p;
-                               int     ie_len;
-                               struct HT_info_element *pht_info=NULL;
-
-                               if((pbuddy_mlmeext->cur_channel <= 14 && pmlmeext->cur_channel >= 36) ||
-                                       (pbuddy_mlmeext->cur_channel >= 36 && pmlmeext->cur_channel <= 14))
-                               {
-                                       change_band = _TRUE;
-                               }
-
-                               //sync channel/bwmode/ch_offset with another adapter
-                               pbuddy_mlmeext->cur_channel = pmlmeext->cur_channel;
-                               
-                               if(pbuddy_mlmeext->cur_bwmode == CHANNEL_WIDTH_40)
-                               {
-                                       p = rtw_get_ie((pbuddy_network_mlmeext->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pbuddy_network_mlmeext->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
-                                       if( p && ie_len)
-                                       {
-                                               pht_info = (struct HT_info_element *)(p+2);
-                                               pht_info->infos[0] &= ~(BIT(0)|BIT(1)); //no secondary channel is present
-                                       }       
-                               
-                                       if(pmlmeext->cur_bwmode == CHANNEL_WIDTH_40)
-                                       {
-                                               pbuddy_mlmeext->cur_ch_offset = pmlmeext->cur_ch_offset;
-
-                                               //to update cur_ch_offset value in beacon
-                                               if( pht_info )
-                                               {
-                                                       switch(pmlmeext->cur_ch_offset)
-                                                       {
-                                                               case HAL_PRIME_CHNL_OFFSET_LOWER:
-                                                                       pht_info->infos[0] |= 0x1;
-                                                                       break;
-                                                               case HAL_PRIME_CHNL_OFFSET_UPPER:
-                                                                       pht_info->infos[0] |= 0x3;
-                                                                       break;
-                                                               case HAL_PRIME_CHNL_OFFSET_DONT_CARE:                                                   
-                                                               default:                                                        
-                                                                       break;                                  
-                                                       }
-                                               }
-                                       }
-                                       else if(pmlmeext->cur_bwmode == CHANNEL_WIDTH_20)
-                                       {
-                                               pbuddy_mlmeext->cur_bwmode = CHANNEL_WIDTH_20;
-                                               pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
-                                               if(pmlmeext->cur_channel>0 && pmlmeext->cur_channel<5)
-                                               {
-                                                       if(pht_info)
-                                                               pht_info->infos[0] |= 0x1;
-
-                                                       pbuddy_mlmeext->cur_bwmode = CHANNEL_WIDTH_40;
-                                                       pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
-                                               }
-
-                                               if(pmlmeext->cur_channel>7 && pmlmeext->cur_channel<(14+1))
-                                               {
-                                                       if(pht_info)
-                                                               pht_info->infos[0] |= 0x3;
-
-                                                       pbuddy_mlmeext->cur_bwmode = CHANNEL_WIDTH_40;
-                                                       pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
-                                               }
-
-                                               set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
-                                       }
-                               }
-
-                               // to update channel value in beacon
-                               pbuddy_network_mlmeext->Configuration.DSConfig = pmlmeext->cur_channel;
-                               p = rtw_get_ie((pbuddy_network_mlmeext->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _DSSET_IE_, &ie_len, (pbuddy_network_mlmeext->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
-                               if(p && ie_len>0)
-                                       *(p + 2) = pmlmeext->cur_channel;
-
-                               p = rtw_get_ie((pbuddy_network_mlmeext->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pbuddy_network_mlmeext->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
-                               if( p && ie_len)
-                               {
-                                       pht_info = (struct HT_info_element *)(p+2);
-                                       pht_info->primary_channel = pmlmeext->cur_channel;
-                               }
-
-                               // update mlmepriv's cur_network
-                               _rtw_memcpy(&pbuddy_mlmepriv->cur_network.network, pbuddy_network_mlmeext, pbuddy_network_mlmeext->Length);
-                       }
-                       else
-                       {
-                               // switch back to original channel/bwmode/ch_offset;
-                               set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
-                       }
-
-                       DBG_871X("after join, another adapter, CH=%d, BW=%d, offset=%d\n", pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
-
-                       if(change_band == _TRUE)
-                               change_band_update_ie(pbuddy_adapter, pbuddy_network_mlmeext);
-
-                       DBG_871X("update pbuddy_adapter's beacon\n");
-
-                       update_beacon(pbuddy_adapter, 0, NULL, _TRUE);
-               }
-               else     if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
-               {
-                       if((pbuddy_mlmeext->cur_bwmode == CHANNEL_WIDTH_40) &&
-                               (pmlmeext->cur_bwmode == CHANNEL_WIDTH_20))
-                       {
-                               set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
-                       }
-               
-                       issue_nulldata(pbuddy_adapter, NULL, 0, 0, 0);
-               }
-       }
-}
-
-sint   dc_check_fwstate(_adapter *padapter, sint fw_state)
-{
-       PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
-       struct mlme_priv *pbuddy_mlmepriv = NULL;
-
-       if(padapter->pbuddy_adapter != NULL && 
-               padapter->DualMacConcurrent == _TRUE)
-
-       {
-               pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
-
-               return check_fwstate(pbuddy_mlmepriv, fw_state);
-       }
-
-       return _FALSE;
-}
-
-u8 dc_handle_site_survey(_adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
-       PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;             
-
-       // only mac0 can do scan request, help issue nulldata(1) for mac1
-       if(pbuddy_adapter != NULL && 
-               padapter->DualMacConcurrent == _TRUE)
-       {
-               if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
-               {
-                       pmlmeext->sitesurvey_res.state = SCAN_TXNULL;
-               
-                       issue_nulldata(pbuddy_adapter, NULL, 1, 2, 0);                  
-
-                       return _TRUE;
-               }
-       }
-
-       return _FALSE;
-}
-
-void   dc_report_survey_event(_adapter *padapter, union recv_frame *precv_frame)
-{
-       if(padapter->pbuddy_adapter != NULL && 
-               padapter->DualMacConcurrent == _TRUE)
-       {
-               report_survey_event(padapter->pbuddy_adapter, precv_frame);     
-       }
-}
-
-void dc_set_channel_bwmode_survey_done(_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
-       struct mlme_priv *pbuddy_mlmepriv = NULL;
-       struct mlme_ext_priv *pbuddy_mlmeext = NULL;
-       struct mlme_ext_info *pbuddy_mlmeinfo = NULL;
-       u8 cur_channel;
-       u8 cur_bwmode;
-       u8 cur_ch_offset;
-
-       if(pbuddy_adapter != NULL && 
-               padapter->DualMacConcurrent == _TRUE)
-       {
-               pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
-               pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
-               pbuddy_mlmeinfo = &(pbuddy_mlmeext->mlmext_info);
-
-               if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
-               {
-                       if(check_fwstate(pmlmepriv, _FW_LINKED) &&
-                               (pmlmeext->cur_bwmode == CHANNEL_WIDTH_40))
-                       {
-                               cur_channel = pmlmeext->cur_channel;
-                               cur_bwmode = pmlmeext->cur_bwmode;
-                               cur_ch_offset = pmlmeext->cur_ch_offset;
-                       }
-                       else
-                       {
-                               cur_channel = pbuddy_mlmeext->cur_channel;
-                               cur_bwmode = pbuddy_mlmeext->cur_bwmode;
-                               cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
-                       }
-               }
-               else
-               {
-                       cur_channel = pmlmeext->cur_channel;
-                       cur_bwmode = pmlmeext->cur_bwmode;
-                       cur_ch_offset = pmlmeext->cur_ch_offset;
-               }
-
-               set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
-
-               if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
-               {
-                       //issue null data 
-                       issue_nulldata(pbuddy_adapter, NULL, 0, 0, 0);
-               }
-
-               if(((pbuddy_mlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
-                       check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
-               {
-
-                       DBG_871X("survey done, current CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
-
-                       DBG_871X("restart pbuddy_adapter's beacon\n");
-               
-                       update_beacon(pbuddy_adapter, 0, NULL, _TRUE);
-               }
-       }
-       else
-       {
-               set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-       }
-}
-
-void dc_set_ap_channel_bandwidth(_adapter *padapter, u8 channel, u8 channel_offset, u8 bwmode)
-{
-       u8      *p;
-       u8      val8, cur_channel, cur_bwmode, cur_ch_offset, change_band;
-       int     ie_len; 
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       struct mlme_priv                *pmlmepriv = &(padapter->mlmepriv);
-       WLAN_BSSID_EX           *pnetwork = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
-       struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
-       struct HT_info_element  *pht_info=NULL;
-       _adapter        *pbuddy_adapter = padapter->pbuddy_adapter;
-       struct mlme_priv        *pbuddy_mlmepriv = NULL;
-       struct mlme_ext_priv    *pbuddy_mlmeext = NULL;
-
-       DBG_871X("dualmac_concurrent_ap_set_channel_bwmode ==>\n");
-
-       cur_channel = channel;
-       cur_bwmode = bwmode;
-       cur_ch_offset = channel_offset;
-       change_band = _FALSE;
-
-       p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
-       if( p && ie_len)
-       {
-               pht_info = (struct HT_info_element *)(p+2);
-       }
-
-       if(pbuddy_adapter != NULL && 
-               padapter->DualMacConcurrent == _TRUE)
-       {
-               pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
-               pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
-               
-               if(!check_fwstate(pbuddy_mlmepriv, _FW_LINKED|_FW_UNDER_LINKING|_FW_UNDER_SURVEY))
-               {
-                       set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
-               }
-               else if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED)==_TRUE)
-               {
-                       //To sync cur_channel/cur_bwmode/cur_ch_offset with another adapter
-                       DBG_871X("Another iface is at linked state, sync cur_channel/cur_bwmode/cur_ch_offset\n");
-                       DBG_871X("Another adapter, CH=%d, BW=%d, offset=%d\n", pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
-                       DBG_871X("Current adapter, CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
-                       
-                       cur_channel = pbuddy_mlmeext->cur_channel;
-                       if(cur_bwmode == CHANNEL_WIDTH_40)
-                       {
-                               if(pht_info)
-                                       pht_info->infos[0] &= ~(BIT(0)|BIT(1));
-
-                               if(pbuddy_mlmeext->cur_bwmode == CHANNEL_WIDTH_40)
-                               {
-                                       cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
-
-                                       //to update cur_ch_offset value in beacon
-                                       if(pht_info)
-                                       {                               
-                                               switch(cur_ch_offset)
-                                               {
-                                                       case HAL_PRIME_CHNL_OFFSET_LOWER:
-                                                               pht_info->infos[0] |= 0x1;
-                                                               break;
-                                                       case HAL_PRIME_CHNL_OFFSET_UPPER:
-                                                               pht_info->infos[0] |= 0x3;
-                                                               break;
-                                                       case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
-                                                       default:                                                        
-                                                               break;                                  
-                                               }
-                                       }
-                               }
-                               else if(pbuddy_mlmeext->cur_bwmode == CHANNEL_WIDTH_20)
-                               {
-                                       cur_bwmode = CHANNEL_WIDTH_20;
-                                       cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
-                                       if(cur_channel>0 && cur_channel<5)
-                                       {
-                                               if(pht_info)
-                                                       pht_info->infos[0] |= 0x1;              
-
-                                               cur_bwmode = CHANNEL_WIDTH_40;
-                                               cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
-                                       }
-
-                                       if(cur_channel>7 && cur_channel<(14+1))
-                                       {
-                                               if(pht_info)
-                                                       pht_info->infos[0] |= 0x3;
-
-                                               cur_bwmode = CHANNEL_WIDTH_40;
-                                               cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
-                                       }
-
-                                       set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
-                               }
-                       }
-
-                       // to update channel value in beacon
-                       pnetwork->Configuration.DSConfig = cur_channel;         
-                       p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _DSSET_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
-                       if(p && ie_len>0)
-                               *(p + 2) = cur_channel;
-
-                       if(pht_info)
-                               pht_info->primary_channel = cur_channel;
-               }
-       }
-       else
-       {
-               set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
-       }
-
-       DBG_871X("CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
-
-       if((channel <= 14 && cur_channel >= 36) ||
-               (channel >= 36 && cur_channel <= 14))
-       {
-               change_band = _TRUE;
-       }
-
-       pmlmeext->cur_channel = cur_channel;
-       pmlmeext->cur_bwmode = cur_bwmode;
-       pmlmeext->cur_ch_offset = cur_ch_offset;
-
-       if(change_band == _TRUE)
-               change_band_update_ie(padapter, pnetwork);
-
-       DBG_871X("dualmac_concurrent_ap_set_channel_bwmode <==\n");
-}
-
-void dc_resume_xmit(_adapter *padapter)
-{
-       PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
-       
-       if(pbuddy_adapter != NULL && 
-               padapter->DualMacConcurrent == _TRUE)
-       {
-               DBG_871X("dc_resume_xmit,  resume pbuddy_adapter Tx\n");
-               rtw_os_xmit_schedule(pbuddy_adapter);
-       }
-}
-
-u8     dc_check_xmit(_adapter *padapter)
-{
-       PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
-       struct mlme_priv *pbuddy_mlmepriv = NULL;
-
-       if(pbuddy_adapter != NULL && 
-               padapter->DualMacConcurrent == _TRUE)
-       {
-               pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
-               if (check_fwstate(pbuddy_mlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
-               {
-                       DBG_871X("dc_check_xmit  pbuddy_adapter is under survey or under linking\n");
-                       return _FALSE;
-               }
-       }
-
-       return _TRUE;
-}
-#endif
-
 #ifdef CONFIG_CONCURRENT_MODE
 sint check_buddy_mlmeinfo_state(_adapter *padapter, u32 state)
 {
 #ifdef CONFIG_CONCURRENT_MODE
 sint check_buddy_mlmeinfo_state(_adapter *padapter, u32 state)
 {
@@ -14216,7 +14053,23 @@ int rtw_chk_start_clnt_join(_adapter *padapter, u8 *ch, u8 *bw, u8 *offset)
        struct mlme_ext_priv *pbuddy_mlmeext;
        struct mlme_ext_info    *pbuddy_pmlmeinfo;
        struct mlme_priv *pbuddy_mlmepriv;
        struct mlme_ext_priv *pbuddy_mlmeext;
        struct mlme_ext_info    *pbuddy_pmlmeinfo;
        struct mlme_priv *pbuddy_mlmepriv;
+#endif
+
+       if (!ch || !bw || !offset) {
+               connect_allow = _FALSE;
+               rtw_warn_on(1);
+               goto exit;
+       }
 
 
+       if (cur_ch == 0) {
+               connect_allow = _FALSE;
+               DBG_871X_LEVEL(_drv_err_, FUNC_ADPT_FMT" cur_ch:%u\n"
+                       , FUNC_ADPT_ARG(padapter), cur_ch);
+               rtw_warn_on(1);
+               goto exit;
+       }
+
+#ifdef CONFIG_CONCURRENT_MODE
        if (!rtw_buddy_adapter_up(padapter)) {
                goto exit;
        }
        if (!rtw_buddy_adapter_up(padapter)) {
                goto exit;
        }
@@ -14350,13 +14203,9 @@ int rtw_chk_start_clnt_join(_adapter *padapter, u8 *ch, u8 *bw, u8 *offset)
                }
        }       
 
                }
        }       
 
-exit:
 #endif /* CONFIG_CONCURRENT_MODE */
 
 #endif /* CONFIG_CONCURRENT_MODE */
 
-       if (!ch || !bw || !offset) {
-               rtw_warn_on(1);
-               connect_allow = _FALSE;
-       }
+exit:
 
        if (connect_allow == _TRUE) {
                DBG_871X("start_join_set_ch_bw: ch=%d, bwmode=%d, ch_offset=%d\n", cur_ch, cur_bw, cur_ch_offset);
 
        if (connect_allow == _TRUE) {
                DBG_871X("start_join_set_ch_bw: ch=%d, bwmode=%d, ch_offset=%d\n", cur_ch, cur_bw, cur_ch_offset);
@@ -14531,201 +14380,171 @@ u8 set_csa_hdl(_adapter *padapter, unsigned char *pbuf)
 
 }
 
 
 }
 
-// TDLS_ESTABLISHED    : write RCR DATA BIT
-// TDLS_CS_OFF         : go back to the channel linked with AP, terminating channel switch procedure
-// TDLS_INIT_CH_SEN    : init channel sensing, receive all data and mgnt frame
-// TDLS_DONE_CH_SEN: channel sensing and report candidate channel
-// TDLS_OFF_CH         : first time set channel to off channel
-// TDLS_BASE_CH                : go back tp the channel linked with AP when set base channel as target channel
-// TDLS_P_OFF_CH       : periodically go to off channel
-// TDLS_P_BASE_CH      : periodically go back to base channel
-// TDLS_RS_RCR         : restore RCR
-// TDLS_TEAR_STA       : free tdls sta
 u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
 {
 #ifdef CONFIG_TDLS
        _irqL irqL;
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
 u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
 {
 #ifdef CONFIG_TDLS
        _irqL irqL;
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+#ifdef CONFIG_TDLS_CH_SW       
+       struct tdls_ch_switch *pchsw_info = &ptdlsinfo->chsw_info;
+#endif
        struct TDLSoption_param *TDLSoption;
        struct TDLSoption_param *TDLSoption;
-       struct sta_info *ptdls_sta;
+       struct sta_info *ptdls_sta = NULL;
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
        u8 survey_channel, i, min, option;
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
        u8 survey_channel, i, min, option;
+       struct tdls_txmgmt txmgmt;
+       u32 setchtime, resp_sleep = 0, wait_time;
+       u8 zaddr[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
 
 
-       if(!pbuf)
+       if (!pbuf)
                return H2C_PARAMETERS_ERROR;
 
        TDLSoption = (struct TDLSoption_param *)pbuf;
                return H2C_PARAMETERS_ERROR;
 
        TDLSoption = (struct TDLSoption_param *)pbuf;
-
-       ptdls_sta = rtw_get_stainfo( &(padapter->stapriv), TDLSoption->addr );
        option = TDLSoption->option;
 
        option = TDLSoption->option;
 
-       if( ptdls_sta == NULL )
-       {
-               if( option != TDLS_RS_RCR )
+       if (!_rtw_memcmp(TDLSoption->addr, zaddr, ETH_ALEN)) {
+               ptdls_sta = rtw_get_stainfo( &(padapter->stapriv), TDLSoption->addr );
+               if (ptdls_sta == NULL) {
+                       return H2C_REJECTED;
+               }
+       } else {
+               if (!(option == TDLS_RS_RCR || option == TDLS_CH_SW_BACK))
                        return H2C_REJECTED;
        }
 
        //_enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
                        return H2C_REJECTED;
        }
 
        //_enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
-       DBG_871X("[%s] option:%d\n", __FUNCTION__, option);
+       //DBG_871X("[%s] option:%d\n", __FUNCTION__, option);
                
                
-       switch(option){
-               case TDLS_ESTABLISHED:
-               {
-                       u8 sta_band = 0;
-                       
-                       //leave ALL PS when TDLS is established
+       switch (option) {
+       case TDLS_ESTABLISHED:
+       {
+               /* As long as TDLS handshake success, we should set RCR_CBSSID_DATA bit to 0 */
+               /* So we can receive all kinds of data frames. */
+               u8 sta_band = 0;
+
+               //leave ALL PS when TDLS is established
                        rtw_pwr_wakeup(padapter);
                        rtw_pwr_wakeup(padapter);
+
+               rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_WRCR, 0);
+               DBG_871X("Created Direct Link with "MAC_FMT"\n", MAC_ARG(ptdls_sta->hwaddr));
+
+               pmlmeinfo->FW_sta_info[ptdls_sta->mac_id].psta = ptdls_sta;
+               /* Set TDLS sta rate. */
+               /* Update station supportRate */
+               rtw_hal_update_sta_rate_mask(padapter, ptdls_sta);
+               if (pmlmeext->cur_channel > 14) {
+                       if (ptdls_sta->ra_mask & 0xffff000)
+                               sta_band |= WIRELESS_11_5N ;
+
+                       if (ptdls_sta->ra_mask & 0xff0)
+                               sta_band |= WIRELESS_11A;
+
+                       /* 5G band */
+                       #ifdef CONFIG_80211AC_VHT
+                       if (ptdls_sta->vhtpriv.vht_option)
+                               sta_band = WIRELESS_11_5AC;
+                       #endif
                        
                        
-                       //As long as TDLS handshake success, we should set RCR_CBSSID_DATA bit to 0
-                       //so we can receive all kinds of data frames.                   
-                       rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_WRCR, 0);
-                       DBG_871X("Created Direct Link with "MAC_FMT"\n", MAC_ARG(ptdls_sta->hwaddr));
-
-                       pmlmeinfo->FW_sta_info[ptdls_sta->mac_id].psta = ptdls_sta;
-                       //set TDLS sta rate.
-                       //update station supportRate
-                       rtw_hal_update_sta_rate_mask(padapter, ptdls_sta);
-                       if(padapter->mlmeextpriv.cur_channel > 14) {
-                               if (ptdls_sta->ra_mask & 0xffff000)
-                                       sta_band |= WIRELESS_11_5N ;
-
-                               if (ptdls_sta->ra_mask & 0xff0)
-                                       sta_band |= WIRELESS_11A;
-
-                               // 5G band
-                               #ifdef CONFIG_80211AC_VHT
-                               if (ptdls_sta->vhtpriv.vht_option)  {
-                                       sta_band = WIRELESS_11_5AC;
-                               }               
-                               #endif
-                               
-                       } else {
-                               if (ptdls_sta->ra_mask & 0xffff000)
-                                       sta_band |= WIRELESS_11_24N;
+               } else {
+                       if (ptdls_sta->ra_mask & 0xffff000)
+                               sta_band |= WIRELESS_11_24N;
 
 
-                               if (ptdls_sta->ra_mask & 0xff0)
-                                       sta_band |= WIRELESS_11G;
+                       if (ptdls_sta->ra_mask & 0xff0)
+                               sta_band |= WIRELESS_11G;
 
 
-                               if (ptdls_sta->ra_mask & 0x0f)
-                                       sta_band |= WIRELESS_11B;
-                       }
-                       ptdls_sta->wireless_mode = sta_band;
-                       ptdls_sta->raid = rtw_hal_networktype_to_raid(padapter,ptdls_sta);
-                       set_sta_rate(padapter, ptdls_sta);
-                       //sta mode
-                       rtw_hal_set_odm_var(padapter,HAL_ODM_STA_INFO,ptdls_sta,_TRUE);
-                       break;
+                       if (ptdls_sta->ra_mask & 0x0f)
+                               sta_band |= WIRELESS_11B;
                }
                }
-               case TDLS_SD_PTI:
-                       ptdls_sta->tdls_sta_state |= TDLS_WAIT_PTR_STATE;
-                       issue_tdls_peer_traffic_indication(padapter, ptdls_sta);
-                       _set_timer(&ptdls_sta->pti_timer, TDLS_PTI_TIME);
-                       break;
-               case TDLS_CS_OFF:
-                       _cancel_timer_ex(&ptdls_sta->base_ch_timer);
-                       _cancel_timer_ex(&ptdls_sta->off_ch_timer);
-                       SelectChannel(padapter, pmlmeext->cur_channel);
-                       ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SWITCH_ON_STATE | 
-                                                               TDLS_PEER_AT_OFF_STATE | 
-                                                               TDLS_AT_OFF_CH_STATE);
-                       DBG_871X("go back to base channel\n ");
+               ptdls_sta->wireless_mode = sta_band;
+               ptdls_sta->raid = rtw_hal_networktype_to_raid(padapter,ptdls_sta);
+               set_sta_rate(padapter, ptdls_sta);
+               rtw_sta_media_status_rpt(padapter, ptdls_sta, 1);
+               /* Sta mode */
+               rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, ptdls_sta,_TRUE);
+               break;
+       }
+       case TDLS_ISSUE_PTI:
+               ptdls_sta->tdls_sta_state |= TDLS_WAIT_PTR_STATE;
+               issue_tdls_peer_traffic_indication(padapter, ptdls_sta);
+               _set_timer(&ptdls_sta->pti_timer, TDLS_PTI_TIME);
+               break;
+#ifdef CONFIG_TDLS_CH_SW               
+       case TDLS_CH_SW_RESP:
+               _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));
+               txmgmt.status_code = 0;
+               _rtw_memcpy(txmgmt.peer, ptdls_sta->hwaddr, ETH_ALEN);
+
+               issue_nulldata(padapter, NULL, 1, 0, 0);
+
+               DBG_871X("issue tdls channel switch response\n");
+               issue_tdls_ch_switch_rsp(padapter, &txmgmt, _FALSE);
+               resp_sleep = 5;
+               rtw_msleep_os(resp_sleep);
+
+               /* If we receive TDLS_CH_SW_REQ at off channel which it's target is AP's channel */
+               /* then we just SelectChannel to AP's channel*/
+               if (padapter->mlmeextpriv.cur_channel == pchsw_info->off_ch_num) {
+                       SelectChannel(padapter, padapter->mlmeextpriv.cur_channel);
                        issue_nulldata(padapter, NULL, 0, 0, 0);
                        issue_nulldata(padapter, NULL, 0, 0, 0);
+                       pchsw_info->ch_sw_state &= ~(TDLS_PEER_AT_OFF_STATE);
+                       ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);
                        break;
                        break;
-               case TDLS_INIT_CH_SEN:
-                       rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_INIT_CH_SEN, 0);
-                       pmlmeext->sitesurvey_res.channel_idx = 0;
-                       ptdls_sta->option = TDLS_DONE_CH_SEN;
-                       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_DONE_CH_SEN);
-                       break;
-               case TDLS_DONE_CH_SEN:
-                       survey_channel = pmlmeext->channel_set[pmlmeext->sitesurvey_res.channel_idx].ChannelNum;
-                       if(survey_channel){
-                               SelectChannel(padapter, survey_channel);
-                               ptdlsinfo->cur_channel = survey_channel;
-                               pmlmeext->sitesurvey_res.channel_idx++;
-                               _set_timer(&ptdls_sta->option_timer, SURVEY_TO);
-                       }else{
-                               SelectChannel(padapter, pmlmeext->cur_channel);
-
-                               rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_DONE_CH_SEN, 0);
-
-                               if(ptdlsinfo->ch_sensing==1){
-                                       ptdlsinfo->ch_sensing=0;
-                                       ptdlsinfo->cur_channel=1;
-                                       min=ptdlsinfo->collect_pkt_num[0];
-                                       for(i=1; i<MAX_CHANNEL_NUM-1; i++){
-                                               if(min > ptdlsinfo->collect_pkt_num[i]){
-                                                       ptdlsinfo->cur_channel=i+1;
-                                                       min=ptdlsinfo->collect_pkt_num[i];
-                                               }
-                                               ptdlsinfo->collect_pkt_num[i]=0;
-                                       }
-                                       ptdlsinfo->collect_pkt_num[0]=0;
-                                       ptdlsinfo->candidate_ch=ptdlsinfo->cur_channel;
-                                       DBG_871X("TDLS channel sensing done, candidate channel: %02x\n", ptdlsinfo->candidate_ch);
-                                       ptdlsinfo->cur_channel=0;
+               }
 
 
-                               }
+               _set_timer(&ptdls_sta->delay_timer, pmlmeinfo->bcn_interval - 40);
 
 
-                               if(ptdls_sta->tdls_sta_state & TDLS_PEER_SLEEP_STATE){
-                                       ptdls_sta->tdls_sta_state |= TDLS_APSD_CHSW_STATE;
-                               }else{
-                                       //send null data with pwrbit==1 before send ch_switching_req to peer STA.
-                                       issue_nulldata(padapter, NULL, 1, 0, 0);
+               /* Continue following actions */
 
 
-                                       ptdls_sta->tdls_sta_state |= TDLS_CH_SW_INITIATOR_STATE;
+       case TDLS_CH_SW:
+               issue_nulldata(padapter, NULL, 1, 0, 0);
+               _set_timer(&ptdls_sta->ch_sw_timer, (u32)(ptdls_sta->ch_switch_timeout)/1000);
 
 
-                                       issue_tdls_ch_switch_req(padapter, ptdls_sta->hwaddr);
-                                       DBG_871X("issue tdls ch switch req\n");
-                               }
-                       }
-                       break;
-               case TDLS_OFF_CH:
-                       issue_nulldata(padapter, NULL, 1, 0, 0);
-                       SelectChannel(padapter, ptdls_sta->off_ch);
-
-                       DBG_871X("change channel to tar ch:%02x\n", ptdls_sta->off_ch);
-                       ptdls_sta->tdls_sta_state |= TDLS_AT_OFF_CH_STATE;
-                       ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_AT_OFF_STATE);
-                       _set_timer(&ptdls_sta->option_timer, (u32)ptdls_sta->ch_switch_time);
-                       break;
-               case TDLS_BASE_CH:
-                       _cancel_timer_ex(&ptdls_sta->base_ch_timer);
-                       _cancel_timer_ex(&ptdls_sta->off_ch_timer);
-                       SelectChannel(padapter, pmlmeext->cur_channel);
-                       ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SWITCH_ON_STATE | 
-                                                               TDLS_PEER_AT_OFF_STATE | 
-                                                               TDLS_AT_OFF_CH_STATE);
-                       DBG_871X("go back to base channel\n ");
-                       issue_nulldata(padapter, NULL, 0, 0, 0);
-                       _set_timer(&ptdls_sta->option_timer, (u32)ptdls_sta->ch_switch_time);
-                       break;
-               case TDLS_P_OFF_CH:
-                       SelectChannel(padapter, pmlmeext->cur_channel);
+               setchtime = rtw_systime_to_ms(rtw_get_current_time());
+               SelectChannel(padapter, pchsw_info->off_ch_num);
+               setchtime = rtw_systime_to_ms(rtw_get_current_time()) - setchtime;
+               setchtime += resp_sleep;
+
+               if (pmlmeext->cur_channel != rtw_get_oper_ch(padapter))
                        issue_nulldata(padapter, NULL, 0, 0, 0);
                        issue_nulldata(padapter, NULL, 0, 0, 0);
-                       DBG_871X("change channel to base ch:%02x\n", pmlmeext->cur_channel);
-                       ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_AT_OFF_STATE| TDLS_AT_OFF_CH_STATE);
-                       _set_timer(&ptdls_sta->off_ch_timer, TDLS_STAY_TIME);
-                       break;
-               case TDLS_P_BASE_CH:
-                       issue_nulldata(ptdls_sta->padapter, NULL, 1, 0, 0);
-                       SelectChannel(padapter, ptdls_sta->off_ch);
-                       DBG_871X("change channel to off ch:%02x\n", ptdls_sta->off_ch);
-                       ptdls_sta->tdls_sta_state |= TDLS_AT_OFF_CH_STATE;
-                       if((ptdls_sta->tdls_sta_state & TDLS_PEER_AT_OFF_STATE) != TDLS_PEER_AT_OFF_STATE){
-                               issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta->hwaddr, 0, 3, 300);
-                       }
-                       _set_timer(&ptdls_sta->base_ch_timer, TDLS_STAY_TIME);  
-                       break;
-               case TDLS_RS_RCR:
-                       rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_RS_RCR, 0);
-                       DBG_871X("wirte REG_RCR, set bit6 on\n");
-                       break;
-               case TDLS_TEAR_STA:
-                       free_tdls_sta(padapter, ptdls_sta);
-                       break;
-                       
+               pchsw_info->ch_sw_state &= ~(TDLS_PEER_AT_OFF_STATE);
+
+               if ((u32)ptdls_sta->ch_switch_time/1000 > setchtime)
+                       wait_time = (u32)ptdls_sta->ch_switch_time/1000 - setchtime;
+               else
+                       wait_time = 0;
+
+               if (wait_time > 0)
+                       rtw_msleep_os(wait_time);
+
+               issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta->hwaddr, 0, 0, 0);
+               issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta->hwaddr, 0, 0, 0);
+
+               break;
+       case TDLS_CH_SW_BACK:
+               pchsw_info->ch_sw_state &= ~(TDLS_PEER_AT_OFF_STATE | TDLS_WAIT_CH_RSP_STATE);
+               ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);
+               SelectChannel(padapter, padapter->mlmeextpriv.cur_channel);
+               issue_nulldata(padapter, NULL, 0, 0, 0);
+               break;
+#endif         
+       case TDLS_RS_RCR:
+               rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_RS_RCR, 0);
+               DBG_871X("wirte REG_RCR, set bit6 on\n");
+               break;
+       case TDLS_TEAR_STA:
+#ifdef CONFIG_TDLS_CH_SW       
+               if (_rtw_memcmp(TDLSoption->addr, pchsw_info->addr, ETH_ALEN) == _TRUE) {
+                       pchsw_info->ch_sw_state &= ~(TDLS_CH_SW_INITIATOR_STATE |
+                                                                               TDLS_CH_SWITCH_ON_STATE |
+                                                                               TDLS_PEER_AT_OFF_STATE);
+                       ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);
+                       _rtw_memset(pchsw_info->addr, 0x00, ETH_ALEN);
+               }
+#endif         
+               rtw_sta_media_status_rpt(padapter, ptdls_sta, 0);
+               free_tdls_sta(padapter, ptdls_sta);
+               break;                  
        }
 
        //_exit_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
        }
 
        //_exit_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
@@ -14733,7 +14552,7 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
        return H2C_SUCCESS;
 #else
        return H2C_REJECTED;
        return H2C_SUCCESS;
 #else
        return H2C_REJECTED;
-#endif //CONFIG_TDLS
+#endif /* CONFIG_TDLS */
 
 }
 
 
 }
 
index 772633e1111e7e4e8fcadf8c03f0a3d0eca49514..779340bbc3d8c9cd5f4b16bfa96fa1fc0bacd081 100755 (executable)
@@ -26,7 +26,7 @@
 #endif
 
 #include "../hal/OUTSRC/phydm_precomp.h"               
 #endif
 
 #include "../hal/OUTSRC/phydm_precomp.h"               
-#if defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8821A)
+#if defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8821A)
 #include <rtw_bt_mp.h>
 #endif
 
 #include <rtw_bt_mp.h>
 #endif
 
@@ -139,12 +139,19 @@ static void _init_mp_priv_(struct mp_priv *pmp_priv)
        pmp_priv->network_macaddr[5] = 0x55;
 
        pmp_priv->bSetRxBssid = _FALSE;
        pmp_priv->network_macaddr[5] = 0x55;
 
        pmp_priv->bSetRxBssid = _FALSE;
+       pmp_priv->bRTWSmbCfg = _FALSE;
 
        pnetwork = &pmp_priv->mp_network.network;
        _rtw_memcpy(pnetwork->MacAddress, pmp_priv->network_macaddr, ETH_ALEN);
 
        pnetwork->Ssid.SsidLength = 8;
        _rtw_memcpy(pnetwork->Ssid.Ssid, "mp_871x", pnetwork->Ssid.SsidLength);
 
        pnetwork = &pmp_priv->mp_network.network;
        _rtw_memcpy(pnetwork->MacAddress, pmp_priv->network_macaddr, ETH_ALEN);
 
        pnetwork->Ssid.SsidLength = 8;
        _rtw_memcpy(pnetwork->Ssid.Ssid, "mp_871x", pnetwork->Ssid.SsidLength);
+
+       pmp_priv->tx.payload = 2;
+#ifdef CONFIG_80211N_HT
+       pmp_priv->tx.attrib.ht_en = 1;
+#endif
+
 }
 
 #ifdef PLATFORM_WINDOWS
 }
 
 #ifdef PLATFORM_WINDOWS
@@ -255,6 +262,8 @@ _exit_init_mp_priv:
 
 static void mp_init_xmit_attrib(struct mp_tx *pmptx, PADAPTER padapter)
 {
 
 static void mp_init_xmit_attrib(struct mp_tx *pmptx, PADAPTER padapter)
 {
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+
        struct pkt_attrib *pattrib;
 
        // init xmitframe attribute
        struct pkt_attrib *pattrib;
 
        // init xmitframe attribute
@@ -263,8 +272,10 @@ static void mp_init_xmit_attrib(struct mp_tx *pmptx, PADAPTER padapter)
        _rtw_memset(pmptx->desc, 0, TXDESC_SIZE);
 
        pattrib->ether_type = 0x8712;
        _rtw_memset(pmptx->desc, 0, TXDESC_SIZE);
 
        pattrib->ether_type = 0x8712;
-       //_rtw_memcpy(pattrib->src, padapter->eeprompriv.mac_addr, ETH_ALEN);
-//     _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+       #if 0
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);
+       _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+       #endif
        _rtw_memset(pattrib->dst, 0xFF, ETH_ALEN);
 
 //     pattrib->dhcp_pkt = 0;
        _rtw_memset(pattrib->dst, 0xFF, ETH_ALEN);
 
 //     pattrib->dhcp_pkt = 0;
@@ -280,12 +291,28 @@ static void mp_init_xmit_attrib(struct mp_tx *pmptx, PADAPTER padapter)
        pattrib->encrypt = 0;
        pattrib->bswenc = _FALSE;
        pattrib->qos_en = _FALSE;
        pattrib->encrypt = 0;
        pattrib->bswenc = _FALSE;
        pattrib->qos_en = _FALSE;
+
+       pattrib->pktlen = 1500;
+       
+#ifdef CONFIG_80211AC_VHT
+               if (pHalData->rf_type == RF_1T1R)
+                       pattrib->raid = RATEID_IDX_VHT_1SS;
+               else if (pHalData->rf_type == RF_2T2R || pHalData->rf_type == RF_2T4R)
+                       pattrib->raid = RATEID_IDX_VHT_2SS;
+               else if (pHalData->rf_type == RF_3T3R)
+                       pattrib->raid = RATEID_IDX_VHT_3SS;
+               else
+                       pattrib->raid = RATEID_IDX_BGN_40M_1SS;
+#endif         
 }
 
 s32 init_mp_priv(PADAPTER padapter)
 {
        struct mp_priv *pmppriv = &padapter->mppriv;
 }
 
 s32 init_mp_priv(PADAPTER padapter)
 {
        struct mp_priv *pmppriv = &padapter->mppriv;
+       PHAL_DATA_TYPE pHalData;
 
 
+       pHalData = GET_HAL_DATA(padapter);
+       
        _init_mp_priv_(pmppriv);
        pmppriv->papdater = padapter;
        pmppriv->mp_dm =0;
        _init_mp_priv_(pmppriv);
        pmppriv->papdater = padapter;
        pmppriv->mp_dm =0;
@@ -312,11 +339,14 @@ s32 init_mp_priv(PADAPTER padapter)
                        pmppriv->antenna_rx = ANTENNA_AB;
                        break;
                case RF_2T4R:
                        pmppriv->antenna_rx = ANTENNA_AB;
                        break;
                case RF_2T4R:
-                       pmppriv->antenna_tx = ANTENNA_AB;
+                       pmppriv->antenna_tx = ANTENNA_BC;
                        pmppriv->antenna_rx = ANTENNA_ABCD;
                        break;
        }
                        pmppriv->antenna_rx = ANTENNA_ABCD;
                        break;
        }
-
+       
+       pHalData->AntennaRxPath = pmppriv->antenna_rx;
+       pHalData->AntennaTxPath = pmppriv->antenna_tx;
+       
        return _SUCCESS;
 }
 
        return _SUCCESS;
 }
 
@@ -356,8 +386,7 @@ static VOID PHY_SetRFPathSwitch_default(
 
 void mpt_InitHWConfig(PADAPTER Adapter)
 {
 
 void mpt_InitHWConfig(PADAPTER Adapter)
 {
-       if (IS_HARDWARE_TYPE_8723B(Adapter))
-       {
+       if (IS_HARDWARE_TYPE_8723B(Adapter)) {
                // TODO: <20130114, Kordan> The following setting is only for DPDT and Fixed board type.
                // TODO:  A better solution is configure it according EFUSE during the run-time. 
 
                // TODO: <20130114, Kordan> The following setting is only for DPDT and Fixed board type.
                // TODO:  A better solution is configure it according EFUSE during the run-time. 
 
@@ -376,32 +405,38 @@ void mpt_InitHWConfig(PADAPTER Adapter)
                PHY_SetMacReg(Adapter, 0x64, bMaskDWord, 0x36000000);    //Fix BT S0/S1
                PHY_SetMacReg(Adapter, 0x948, bMaskDWord, 0x0);                    //Fix BT can't Tx
 
                PHY_SetMacReg(Adapter, 0x64, bMaskDWord, 0x36000000);    //Fix BT S0/S1
                PHY_SetMacReg(Adapter, 0x948, bMaskDWord, 0x0);                    //Fix BT can't Tx
 
-               // <20130522, Kordan> Turn off equalizer to improve Rx sensitivity. (Asked by EEChou)
-               PHY_SetBBReg(Adapter, 0xA00, BIT8, 0x0);                        //0xA01[0] = 0
-       }       
+               /* <20130522, Kordan> Turn off equalizer to improve Rx sensitivity. (Asked by EEChou) */
+               PHY_SetBBReg(Adapter, 0xA00, BIT8, 0x0);                        /*0xA01[0] = 0*/
+        } else if (IS_HARDWARE_TYPE_8821(Adapter)) {
+               /* <20131121, VincentL> Add for 8821AU DPDT setting and fix switching antenna issue (Asked by Rock)
+               <20131122, VincentL> Enable for all 8821A/8811AU  (Asked by Alex)*/
+               PHY_SetMacReg(Adapter, 0x4C, BIT23, 0x0);                  /*0x4C[23:22]=01*/
+               PHY_SetMacReg(Adapter, 0x4C, BIT22, 0x1);                  /*0x4C[23:22]=01*/
+       } else if (IS_HARDWARE_TYPE_8188ES(Adapter))
+               PHY_SetMacReg(Adapter, 0x4C , BIT23, 0);                /*select DPDT_P and DPDT_N as output pin*/
+#ifdef CONFIG_RTL8814A 
+         else if (IS_HARDWARE_TYPE_8814A(Adapter))
+               PlatformEFIOWrite2Byte(Adapter, REG_RXFLTMAP1_8814A, 0x2000);
+#endif         
+       /*
+       else if(IS_HARDWARE_TYPE_8822B(Adapter))
+       {
+               PlatformEFIOWrite2Byte(Adapter, REG_RXFLTMAP1_8822B, 0x2000);
+       }*/
 }
 
 }
 
-
-#if defined (CONFIG_RTL8192C) || defined (CONFIG_RTL8723A)
-#define PHY_IQCalibrate(a,b)   rtl8192c_PHY_IQCalibrate(a,b)
-#define PHY_LCCalibrate(a)     rtl8192c_PHY_LCCalibrate(a)
-//#define dm_CheckTXPowerTracking(a)   rtl8192c_odm_CheckTXPowerTracking(a)
-#define PHY_SetRFPathSwitch(a,b)       rtl8192c_PHY_SetRFPathSwitch(a,b)
-#endif
-
-#ifdef CONFIG_RTL8192D
-#define PHY_IQCalibrate(a,b)   rtl8192d_PHY_IQCalibrate(a)
-#define PHY_LCCalibrate(a)     rtl8192d_PHY_LCCalibrate(a)
-//#define dm_CheckTXPowerTracking(a)   rtl8192d_odm_CheckTXPowerTracking(a)
-#define PHY_SetRFPathSwitch(a,b)       rtl8192d_PHY_SetRFPathSwitch(a,b)
-#endif
-
 #ifdef CONFIG_RTL8188E
 #define PHY_IQCalibrate(a,b)   PHY_IQCalibrate_8188E(a,b)
 #define PHY_LCCalibrate(a)     PHY_LCCalibrate_8188E(&(GET_HAL_DATA(a)->odmpriv))
 #define PHY_SetRFPathSwitch(a,b) PHY_SetRFPathSwitch_8188E(a,b)
 #endif
 
 #ifdef CONFIG_RTL8188E
 #define PHY_IQCalibrate(a,b)   PHY_IQCalibrate_8188E(a,b)
 #define PHY_LCCalibrate(a)     PHY_LCCalibrate_8188E(&(GET_HAL_DATA(a)->odmpriv))
 #define PHY_SetRFPathSwitch(a,b) PHY_SetRFPathSwitch_8188E(a,b)
 #endif
 
+#ifdef CONFIG_RTL8814A
+#define PHY_IQCalibrate(a,b)   PHY_IQCalibrate_8814A(&(GET_HAL_DATA(a)->odmpriv), b)
+#define PHY_LCCalibrate(a)     PHY_LCCalibrate_8814A(&(GET_HAL_DATA(a)->odmpriv))
+#define PHY_SetRFPathSwitch(a,b) PHY_SetRFPathSwitch_8814A(a,b)
+#endif /* CONFIG_RTL8814A */
+
 #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
 /*
 #define PHY_IQCalibrate(a,b)   PHY_IQCalibrate_8812A(a,b)
 #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
 /*
 #define PHY_IQCalibrate(a,b)   PHY_IQCalibrate_8812A(a,b)
@@ -477,7 +512,7 @@ MPT_InitializeAdapter(
        pMptCtx->bMptIndexEven = _TRUE; //default gain index is -6.0db
        pMptCtx->h2cReqNum = 0x0;
        //init for BT MP
        pMptCtx->bMptIndexEven = _TRUE; //default gain index is -6.0db
        pMptCtx->h2cReqNum = 0x0;
        //init for BT MP
-#if defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8821A)
+#if defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8821A)
        pMptCtx->bMPh2c_timeout = _FALSE;
        pMptCtx->MptH2cRspEvent = _FALSE;
        pMptCtx->MptBtC2hEvent = _FALSE;
        pMptCtx->bMPh2c_timeout = _FALSE;
        pMptCtx->MptH2cRspEvent = _FALSE;
        pMptCtx->MptBtC2hEvent = _FALSE;
@@ -485,64 +520,40 @@ MPT_InitializeAdapter(
        _init_timer( &pMptCtx->MPh2c_timeout_timer, pAdapter->pnetdev, MPh2c_timeout_handle, pAdapter );
 #endif
 
        _init_timer( &pMptCtx->MPh2c_timeout_timer, pAdapter->pnetdev, MPh2c_timeout_handle, pAdapter );
 #endif
 
-#ifdef CONFIG_RTL8723A
-       rtl8723a_InitAntenna_Selection(pAdapter);
-#endif //CONFIG_RTL8723A
+       mpt_InitHWConfig(pAdapter);
+
 #ifdef CONFIG_RTL8723B
        rtl8723b_InitAntenna_Selection(pAdapter);
        if (IS_HARDWARE_TYPE_8723B(pAdapter))
        {
 #ifdef CONFIG_RTL8723B
        rtl8723b_InitAntenna_Selection(pAdapter);
        if (IS_HARDWARE_TYPE_8723B(pAdapter))
        {
-               mpt_InitHWConfig(pAdapter);
-               // <20130522, Kordan> Turn off equalizer to improve Rx sensitivity. (Asked by EEChou)
-               PHY_SetBBReg(pAdapter, 0xA00, BIT8, 0x0);               //0xA01[0] = 0
-               PHY_SetRFPathSwitch(pAdapter, 1/*pHalData->bDefaultAntenna*/); //default use Main
-               //<20130522, Kordan> 0x51 and 0x71 should be set immediately after path switched, or they might be overwritten.
+
+               /* <20130522, Kordan> Turn off equalizer to improve Rx sensitivity. (Asked by EEChou)*/
+               PHY_SetBBReg(pAdapter, 0xA00, BIT8, 0x0);
+               PHY_SetRFPathSwitch(pAdapter, 1/*pHalData->bDefaultAntenna*/); /*default use Main*/
+               /*<20130522, Kordan> 0x51 and 0x71 should be set immediately after path switched, or they might be overwritten. */
                if ((pHalData->PackageType == PACKAGE_TFBGA79) || (pHalData->PackageType == PACKAGE_TFBGA90))
                                        PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, 0x51, bRFRegOffsetMask, 0x6B10E);
                else
                                        PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, 0x51, bRFRegOffsetMask, 0x6B04E);
        }       
                if ((pHalData->PackageType == PACKAGE_TFBGA79) || (pHalData->PackageType == PACKAGE_TFBGA90))
                                        PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, 0x51, bRFRegOffsetMask, 0x6B10E);
                else
                                        PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, 0x51, bRFRegOffsetMask, 0x6B04E);
        }       
+       /*set ant to wifi side in mp mode*/
+       rtw_write16(pAdapter, 0x870, 0x300);
+       rtw_write16(pAdapter, 0x860, 0x110);
 #endif
 
        pMptCtx->bMptWorkItemInProgress = _FALSE;
        pMptCtx->CurrMptAct = NULL;
        pMptCtx->MptRfPath = ODM_RF_PATH_A;
        //-------------------------------------------------------------------------
 #endif
 
        pMptCtx->bMptWorkItemInProgress = _FALSE;
        pMptCtx->CurrMptAct = NULL;
        pMptCtx->MptRfPath = ODM_RF_PATH_A;
        //-------------------------------------------------------------------------
-
-#if 1
        // Don't accept any packets
        rtw_write32(pAdapter, REG_RCR, 0);
        // Don't accept any packets
        rtw_write32(pAdapter, REG_RCR, 0);
-#else
-       // Accept CRC error and destination address
-       //pHalData->ReceiveConfig |= (RCR_ACRC32|RCR_AAP);
-       //rtw_write32(pAdapter, REG_RCR, pHalData->ReceiveConfig);
-       rtw_write32(pAdapter, REG_RCR, 0x70000101);
-#endif
-
-#if 0
-       // If EEPROM or EFUSE is empty,we assign as RF 2T2R for MP.
-       if (pHalData->AutoloadFailFlag == TRUE)
-       {
-               pHalData->RF_Type = RF_2T2R;
-       }
-#endif
 
        //ledsetting = rtw_read32(pAdapter, REG_LEDCFG0);
        //rtw_write32(pAdapter, REG_LEDCFG0, ledsetting & ~LED0DIS);
        
 
        //ledsetting = rtw_read32(pAdapter, REG_LEDCFG0);
        //rtw_write32(pAdapter, REG_LEDCFG0, ledsetting & ~LED0DIS);
        
-       if(IS_HARDWARE_TYPE_8192DU(pAdapter))
-       {
-               rtw_write32(pAdapter, REG_LEDCFG0, 0x8888);
-       }
-       else
-       {
-               //rtw_write32(pAdapter, REG_LEDCFG0, 0x08080);
-               ledsetting = rtw_read32(pAdapter, REG_LEDCFG0);
-               
-       #if defined (CONFIG_RTL8192C) || defined( CONFIG_RTL8192D )
-                       rtw_write32(pAdapter, REG_LEDCFG0, ledsetting & ~BIT(7));
-       #endif
-       }
+       //rtw_write32(pAdapter, REG_LEDCFG0, 0x08080);
+       ledsetting = rtw_read32(pAdapter, REG_LEDCFG0);
+       
        
        PHY_LCCalibrate(pAdapter);
        PHY_IQCalibrate(pAdapter, _FALSE);
        
        PHY_LCCalibrate(pAdapter);
        PHY_IQCalibrate(pAdapter, _FALSE);
@@ -553,17 +564,12 @@ MPT_InitializeAdapter(
        pMptCtx->backup0xc50 = (u1Byte)PHY_QueryBBReg(pAdapter, rOFDM0_XAAGCCore1, bMaskByte0);
        pMptCtx->backup0xc58 = (u1Byte)PHY_QueryBBReg(pAdapter, rOFDM0_XBAGCCore1, bMaskByte0);
        pMptCtx->backup0xc30 = (u1Byte)PHY_QueryBBReg(pAdapter, rOFDM0_RxDetector1, bMaskByte0);
        pMptCtx->backup0xc50 = (u1Byte)PHY_QueryBBReg(pAdapter, rOFDM0_XAAGCCore1, bMaskByte0);
        pMptCtx->backup0xc58 = (u1Byte)PHY_QueryBBReg(pAdapter, rOFDM0_XBAGCCore1, bMaskByte0);
        pMptCtx->backup0xc30 = (u1Byte)PHY_QueryBBReg(pAdapter, rOFDM0_RxDetector1, bMaskByte0);
-#ifdef CONFIG_RTL8188E
        pMptCtx->backup0x52_RF_A = (u1Byte)PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0);
        pMptCtx->backup0x52_RF_A = (u1Byte)PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0);
-       pMptCtx->backup0x52_RF_B = (u1Byte)PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0);
+       pMptCtx->backup0x52_RF_B = (u1Byte)PHY_QueryRFReg(pAdapter, RF_PATH_B, RF_0x52, 0x000F0);
+#ifdef CONFIG_RTL8188E
        rtw_write32(pAdapter, REG_MACID_NO_LINK_0, 0x0);
        rtw_write32(pAdapter, REG_MACID_NO_LINK_1, 0x0);
 #endif
        rtw_write32(pAdapter, REG_MACID_NO_LINK_0, 0x0);
        rtw_write32(pAdapter, REG_MACID_NO_LINK_1, 0x0);
 #endif
-
-       //set ant to wifi side in mp mode
-       rtw_write16(pAdapter, 0x870, 0x300);
-       rtw_write16(pAdapter, 0x860, 0x110);
-
        return  rtStatus;
 }
 
        return  rtStatus;
 }
 
@@ -592,7 +598,7 @@ MPT_DeInitAdapter(
        PMPT_CONTEXT            pMptCtx = &pAdapter->mppriv.MptCtx;
 
        pMptCtx->bMptDrvUnload = _TRUE;
        PMPT_CONTEXT            pMptCtx = &pAdapter->mppriv.MptCtx;
 
        pMptCtx->bMptDrvUnload = _TRUE;
-       #if defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B)
+       #if defined(CONFIG_RTL8723B)
        _rtw_free_sema(&(pMptCtx->MPh2c_Sema));
        _cancel_timer_ex( &pMptCtx->MPh2c_timeout_timer);
        #endif
        _rtw_free_sema(&(pMptCtx->MPh2c_Sema));
        _cancel_timer_ex( &pMptCtx->MPh2c_timeout_timer);
        #endif
@@ -645,34 +651,22 @@ void GetPowerTracking(PADAPTER padapter, u8 *enable)
 
 static void disable_dm(PADAPTER padapter)
 {
 
 static void disable_dm(PADAPTER padapter)
 {
-#ifndef CONFIG_RTL8723A
        u8 v8;
        u8 v8;
-#endif
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-
+       PDM_ODM_T               pDM_Odm = &pHalData->odmpriv;
 
        //3 1. disable firmware dynamic mechanism
        // disable Power Training, Rate Adaptive
 
        //3 1. disable firmware dynamic mechanism
        // disable Power Training, Rate Adaptive
-#ifdef CONFIG_RTL8723A
-       SetBcnCtrlReg(padapter, 0, EN_BCN_FUNCTION);
-#else
        v8 = rtw_read8(padapter, REG_BCN_CTRL);
        v8 &= ~EN_BCN_FUNCTION;
        rtw_write8(padapter, REG_BCN_CTRL, v8);
        v8 = rtw_read8(padapter, REG_BCN_CTRL);
        v8 &= ~EN_BCN_FUNCTION;
        rtw_write8(padapter, REG_BCN_CTRL, v8);
-#endif
 
        //3 2. disable driver dynamic mechanism
 
        //3 2. disable driver dynamic mechanism
-       // disable Dynamic Initial Gain
-       // disable High Power
-       // disable Power Tracking
        Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
 
        // enable APK, LCK and IQK but disable power tracking
        Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
 
        // enable APK, LCK and IQK but disable power tracking
-#if !(defined(CONFIG_RTL8188E) || defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)|| defined(CONFIG_RTL8192E))
-       pdmpriv->TxPowerTrackControl = _FALSE;
-#endif
-       Switch_DM_Func(padapter, DYNAMIC_RF_CALIBRATION, _TRUE);
+       pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _FALSE;
+       Switch_DM_Func(padapter, ODM_RF_CALIBRATION, _TRUE);
 
 //#ifdef CONFIG_BT_COEXIST
 //     rtw_btcoex_Switch(padapter, 0); //remove for BT MP Down.
 
 //#ifdef CONFIG_BT_COEXIST
 //     rtw_btcoex_Switch(padapter, 0); //remove for BT MP Down.
@@ -683,35 +677,29 @@ static void disable_dm(PADAPTER padapter)
 void MPT_PwrCtlDM(PADAPTER padapter, u32 bstart)
 {
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
 void MPT_PwrCtlDM(PADAPTER padapter, u32 bstart)
 {
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
        PDM_ODM_T               pDM_Odm = &pHalData->odmpriv;
 
        if (bstart==1){
                DBG_871X("in MPT_PwrCtlDM start \n");           
        PDM_ODM_T               pDM_Odm = &pHalData->odmpriv;
 
        if (bstart==1){
                DBG_871X("in MPT_PwrCtlDM start \n");           
-               Switch_DM_Func(padapter, DYNAMIC_RF_TX_PWR_TRACK, _TRUE);
-               pdmpriv->InitODMFlag |= ODM_RF_TX_PWR_TRACK ;
-               pdmpriv->InitODMFlag |= ODM_RF_CALIBRATION ;
-               pdmpriv->TxPowerTrackControl = _TRUE;
+               Switch_DM_Func(padapter, ODM_RF_TX_PWR_TRACK |ODM_RF_CALIBRATION , _TRUE);
                pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _TRUE;
                padapter->mppriv.mp_dm =1;
                pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _TRUE;
                padapter->mppriv.mp_dm =1;
-               odm_TXPowerTrackingInit(pDM_Odm);
-               ODM_ClearTxPowerTrackingState(pDM_Odm);
                
        }else{
                DBG_871X("in MPT_PwrCtlDM stop \n");
                disable_dm(padapter);
                
        }else{
                DBG_871X("in MPT_PwrCtlDM stop \n");
                disable_dm(padapter);
-               pdmpriv->InitODMFlag = 0 ;
-               pdmpriv->TxPowerTrackControl = _FALSE;
                pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _FALSE;
                padapter->mppriv.mp_dm = 0;
                {
                        TXPWRTRACK_CFG  c;
                        u1Byte  chnl =0 ;
                pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _FALSE;
                padapter->mppriv.mp_dm = 0;
                {
                        TXPWRTRACK_CFG  c;
                        u1Byte  chnl =0 ;
-               
+                       _rtw_memset(&c, 0, sizeof(TXPWRTRACK_CFG));
                        ConfigureTxpowerTrack(pDM_Odm, &c);
                        ODM_ClearTxPowerTrackingState(pDM_Odm);
                        ConfigureTxpowerTrack(pDM_Odm, &c);
                        ODM_ClearTxPowerTrackingState(pDM_Odm);
-                       (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, ODM_RF_PATH_A, chnl);
-                       (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, ODM_RF_PATH_B, chnl);
+                       if (*c.ODM_TxPwrTrackSetPwr) {
+                               (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, ODM_RF_PATH_A, chnl);
+                               (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, ODM_RF_PATH_B, chnl);
+                       }
                }
        }
                
                }
        }
                
@@ -730,7 +718,14 @@ u32 mp_join(PADAPTER padapter,u8 mode)
        struct mp_priv *pmppriv = &padapter->mppriv;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct wlan_network *tgt_network = &pmlmepriv->cur_network;
        struct mp_priv *pmppriv = &padapter->mppriv;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct wlan_network *tgt_network = &pmlmepriv->cur_network;
-
+       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
+       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
+       WLAN_BSSID_EX           *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
+       
+#ifdef CONFIG_IOCTL_CFG80211           
+       struct wireless_dev *pwdev = padapter->rtw_wdev;
+       pwdev->iftype = NL80211_IFTYPE_ADHOC;
+#endif //#ifdef CONFIG_IOCTL_CFG80211
        // 1. initialize a new WLAN_BSSID_EX
        _rtw_memset(&bssid, 0, sizeof(WLAN_BSSID_EX));
        DBG_8192C("%s ,pmppriv->network_macaddr=%x %x %x %x %x %x \n",__func__,
        // 1. initialize a new WLAN_BSSID_EX
        _rtw_memset(&bssid, 0, sizeof(WLAN_BSSID_EX));
        DBG_8192C("%s ,pmppriv->network_macaddr=%x %x %x %x %x %x \n",__func__,
@@ -743,6 +738,7 @@ u32 mp_join(PADAPTER padapter,u8 mode)
                bssid.InfrastructureMode = Ndis802_11IBSS;
                bssid.NetworkTypeInUse = Ndis802_11DS;
                bssid.IELength = 0;
                bssid.InfrastructureMode = Ndis802_11IBSS;
                bssid.NetworkTypeInUse = Ndis802_11DS;
                bssid.IELength = 0;
+               bssid.Configuration.DSConfig=pmppriv->channel;
 
        }else if(mode==WIFI_FW_STATION_STATE){
                bssid.Ssid.SsidLength = strlen("mp_pseudo_STATION");
 
        }else if(mode==WIFI_FW_STATION_STATE){
                bssid.Ssid.SsidLength = strlen("mp_pseudo_STATION");
@@ -752,7 +748,6 @@ u32 mp_join(PADAPTER padapter,u8 mode)
                bssid.IELength = 0;
        }
        
                bssid.IELength = 0;
        }
        
-       
        length = get_WLAN_BSSID_EX_sz(&bssid);
        if (length % 4)
                bssid.Length = ((length >> 2) + 1) << 2; //round up to multiple of 4 bytes.
        length = get_WLAN_BSSID_EX_sz(&bssid);
        if (length % 4)
                bssid.Length = ((length >> 2) + 1) << 2; //round up to multiple of 4 bytes.
@@ -772,14 +767,7 @@ u32 mp_join(PADAPTER padapter,u8 mode)
        }
        pmppriv->prev_fw_state = get_fwstate(pmlmepriv);
        pmlmepriv->fw_state = WIFI_MP_STATE;
        }
        pmppriv->prev_fw_state = get_fwstate(pmlmepriv);
        pmlmepriv->fw_state = WIFI_MP_STATE;
-#if 0
-       if (pmppriv->mode == _LOOPBOOK_MODE_) {
-               set_fwstate(pmlmepriv, WIFI_MP_LPBK_STATE); //append txdesc
-               RT_TRACE(_module_mp_, _drv_notice_, ("+start mp in Lookback mode\n"));
-       } else {
-               RT_TRACE(_module_mp_, _drv_notice_, ("+start mp in normal mode\n"));
-       }
-#endif
+
        set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
 
        //3 2. create a new psta for mp driver
        set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
 
        //3 2. create a new psta for mp driver
@@ -798,8 +786,18 @@ u32 mp_join(PADAPTER padapter,u8 mode)
        //3 3. join psudo AdHoc
        tgt_network->join_res = 1;
        tgt_network->aid = psta->aid = 1;
        //3 3. join psudo AdHoc
        tgt_network->join_res = 1;
        tgt_network->aid = psta->aid = 1;
-       _rtw_memcpy(&tgt_network->network, &bssid, length);
 
 
+       _rtw_memcpy(&padapter->registrypriv.dev_network, &bssid, length);
+       rtw_update_registrypriv_dev_network(padapter);
+       _rtw_memcpy(&tgt_network->network,&padapter->registrypriv.dev_network, padapter->registrypriv.dev_network.Length);
+       _rtw_memcpy(pnetwork,&padapter->registrypriv.dev_network, padapter->registrypriv.dev_network.Length);
+       
+       if(rtw_createbss_cmd(padapter)!=_SUCCESS)
+        {
+               DBG_871X("mp_join: rtw_createbss_cmd status FAIL*** \n ");                                              
+               res =  _FALSE;
+               return res;
+        }
        rtw_indicate_connect(padapter);
        _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
        set_fwstate(pmlmepriv,_FW_LINKED);
        rtw_indicate_connect(padapter);
        _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
        set_fwstate(pmlmepriv,_FW_LINKED);
@@ -839,15 +837,15 @@ s32 mp_start_test(PADAPTER padapter)
 
        //3 disable dynamic mechanism
        disable_dm(padapter);
 
        //3 disable dynamic mechanism
        disable_dm(padapter);
+       #ifdef CONFIG_RTL8814A
+       rtl8814_InitHalDm(padapter);
+       #endif /* CONFIG_RTL8814A */
        #ifdef CONFIG_RTL8812A
        rtl8812_InitHalDm(padapter);
        #ifdef CONFIG_RTL8812A
        rtl8812_InitHalDm(padapter);
-#endif
-       #ifdef CONFIG_RTL8723A
-       rtl8723a_InitHalDm(padapter);
-       #endif
+       #endif /* CONFIG_RTL8812A */
        #ifdef CONFIG_RTL8723B
        rtl8723b_InitHalDm(padapter);
        #ifdef CONFIG_RTL8723B
        rtl8723b_InitHalDm(padapter);
-#endif
+       #endif /* CONFIG_RTL8723B */
        #ifdef CONFIG_RTL8192E
        rtl8192e_InitHalDm(padapter);
        #endif
        #ifdef CONFIG_RTL8192E
        rtl8192e_InitHalDm(padapter);
        #endif
@@ -925,9 +923,6 @@ end_of_mp_stop_test:
        #ifdef CONFIG_RTL8812A
        rtl8812_InitHalDm(padapter);
        #endif
        #ifdef CONFIG_RTL8812A
        rtl8812_InitHalDm(padapter);
        #endif
-       #ifdef CONFIG_RTL8723A
-       rtl8723a_InitHalDm(padapter);
-       #endif
        #ifdef CONFIG_RTL8723B
        rtl8723b_InitHalDm(padapter);
        #endif
        #ifdef CONFIG_RTL8723B
        rtl8723b_InitHalDm(padapter);
        #endif
@@ -1079,7 +1074,7 @@ int SetTxPower(PADAPTER pAdapter)
        }
 
        TxPower[ODM_RF_PATH_A] = (u1Byte)(u1TxPower&0xff);
        }
 
        TxPower[ODM_RF_PATH_A] = (u1Byte)(u1TxPower&0xff);
-       TxPower[ODM_RF_PATH_B] = (u1Byte)((u1TxPower&0xff00)>>8);
+       TxPower[ODM_RF_PATH_B] = (u1Byte)(u1TxPower&0xff);
        DBG_871X("TxPower(A, B) = (0x%x, 0x%x)\n", TxPower[ODM_RF_PATH_A], TxPower[ODM_RF_PATH_B]);
 
        for(rf=0; rf<2; rf++)
        DBG_871X("TxPower(A, B) = (0x%x, 0x%x)\n", TxPower[ODM_RF_PATH_A], TxPower[ODM_RF_PATH_B]);
 
        for(rf=0; rf<2; rf++)
@@ -1189,12 +1184,6 @@ void PhySetTxPowerLevel(PADAPTER pAdapter)
 #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
                PHY_SetTxPowerLevel8812(pAdapter,pmp_priv->channel);
 #endif
 #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
                PHY_SetTxPowerLevel8812(pAdapter,pmp_priv->channel);
 #endif
-#if defined(CONFIG_RTL8192D)
-               PHY_SetTxPowerLevel8192D(pAdapter,pmp_priv->channel);
-#endif
-#if defined(CONFIG_RTL8192C)
-               PHY_SetTxPowerLevel8192C(pAdapter,pmp_priv->channel);
-#endif
 #if defined(CONFIG_RTL8192E)
                PHY_SetTxPowerLevel8192E(pAdapter,pmp_priv->channel);
 #endif
 #if defined(CONFIG_RTL8192E)
                PHY_SetTxPowerLevel8192E(pAdapter,pmp_priv->channel);
 #endif
@@ -1305,46 +1294,6 @@ void fill_txdesc_for_mp(PADAPTER padapter, u8 *ptxdesc)
        _rtw_memcpy(ptxdesc, pmp_priv->tx.desc, TXDESC_SIZE);
 }
 
        _rtw_memcpy(ptxdesc, pmp_priv->tx.desc, TXDESC_SIZE);
 }
 
-#if defined(CONFIG_RTL8192C) || defined(CONFIG_RTL8192D)
-void fill_tx_desc_8192cd(PADAPTER padapter)
-{
-       struct mp_priv *pmp_priv = &padapter->mppriv;
-       struct tx_desc *desc   = (struct tx_desc *)&(pmp_priv->tx.desc);
-       struct pkt_attrib *pattrib = &(pmp_priv->tx.attrib);
-       
-       desc->txdw1 |= cpu_to_le32(BK); // don't aggregate(AMPDU)
-       desc->txdw1 |= cpu_to_le32((pattrib->mac_id) & 0x1F); //CAM_ID(MAC_ID)
-       desc->txdw1 |= cpu_to_le32((pattrib->qsel << QSEL_SHT) & 0x00001F00); // Queue Select, TID
-       desc->txdw1 |= cpu_to_le32((pattrib->raid << Rate_ID_SHT) & 0x000F0000); // Rate Adaptive ID
-
-       // offset 8
-       //      desc->txdw2 |= cpu_to_le32(AGG_BK);//AGG BK
-       desc->txdw3 |= cpu_to_le32((pattrib->seqnum<<16)&0x0fff0000);
-       desc->txdw4 |= cpu_to_le32(HW_SEQ_EN);
-               
-       desc->txdw4 |= cpu_to_le32(USERATE);
-       desc->txdw4 |= cpu_to_le32(DISDATAFB);
-
-       if( pmp_priv->preamble ){
-               if (pmp_priv->rateidx <=  MPT_RATE_54M)
-                       desc->txdw4 |= cpu_to_le32(DATA_SHORT); // CCK Short Preamble
-       }
-
-       if (pmp_priv->bandwidth == CHANNEL_WIDTH_40)
-               desc->txdw4 |= cpu_to_le32(DATA_BW);
-
-       // offset 20
-       desc->txdw5 |= cpu_to_le32(pmp_priv->rateidx & 0x0000001F);
-
-       if( pmp_priv->preamble ){
-               if (pmp_priv->rateidx > MPT_RATE_54M)
-                       desc->txdw5 |= cpu_to_le32(SGI); // MCS Short Guard Interval
-       }
-
-       desc->txdw5 |= cpu_to_le32(0x0001FF00); // DATA/RTS Rate Fallback Limit
-}
-#endif
-
 #if defined(CONFIG_RTL8188E) 
 void fill_tx_desc_8188e(PADAPTER padapter)
 {
 #if defined(CONFIG_RTL8188E) 
 void fill_tx_desc_8188e(PADAPTER padapter)
 {
@@ -1397,6 +1346,64 @@ void fill_tx_desc_8188e(PADAPTER padapter)
        
 }
 #endif
        
 }
 #endif
+
+#if defined(CONFIG_RTL8814A)
+void fill_tx_desc_8814a(PADAPTER padapter)
+{
+       struct mp_priv *pmp_priv = &padapter->mppriv;
+       u8 *pDesc   = (u8 *)&(pmp_priv->tx.desc);
+       struct pkt_attrib *pattrib = &(pmp_priv->tx.attrib);
+       
+       u32     pkt_size = pattrib->last_txcmdsz;
+       s32 bmcast = IS_MCAST(pattrib->ra);
+       u8 data_rate,pwr_status,offset;
+
+       //SET_TX_DESC_FIRST_SEG_8814A(pDesc, 1);
+       SET_TX_DESC_LAST_SEG_8814A(pDesc, 1);
+       //SET_TX_DESC_OWN_(pDesc, 1);
+       
+       SET_TX_DESC_PKT_SIZE_8814A(pDesc, pkt_size);
+       
+       offset = TXDESC_SIZE + OFFSET_SZ;               
+
+       SET_TX_DESC_OFFSET_8814A(pDesc, offset);
+       SET_TX_DESC_PKT_OFFSET_8814A(pDesc, 1);
+       
+       if (bmcast) {
+               SET_TX_DESC_BMC_8814A(pDesc, 1);
+       }
+
+       SET_TX_DESC_MACID_8814A(pDesc, pattrib->mac_id);
+       SET_TX_DESC_RATE_ID_8814A(pDesc, pattrib->raid);
+       
+       //SET_TX_DESC_RATE_ID_8812(pDesc, RATEID_IDX_G);
+       SET_TX_DESC_QUEUE_SEL_8814A(pDesc,  pattrib->qsel);
+       //SET_TX_DESC_QUEUE_SEL_8812(pDesc,  QSLT_MGNT);
+
+       if ( pmp_priv->preamble ){
+               SET_TX_DESC_DATA_SHORT_8814A(pDesc, 1);
+       }
+       
+       if (!pattrib->qos_en) {
+               SET_TX_DESC_HWSEQ_EN_8814A(pDesc, 1); // Hw set sequence number
+       } else {
+               SET_TX_DESC_SEQ_8814A(pDesc, pattrib->seqnum);
+       }
+       
+       if (pmp_priv->bandwidth <= CHANNEL_WIDTH_160) {
+               SET_TX_DESC_DATA_BW_8814A(pDesc, pmp_priv->bandwidth);
+       } else {
+               DBG_871X("%s:Err: unknown bandwidth %d, use 20M\n", __func__,pmp_priv->bandwidth);
+               SET_TX_DESC_DATA_BW_8814A(pDesc, CHANNEL_WIDTH_20);
+       }
+
+       SET_TX_DESC_DISABLE_FB_8814A(pDesc, 1);
+       SET_TX_DESC_USE_RATE_8814A(pDesc, 1);
+       SET_TX_DESC_TX_RATE_8814A(pDesc, pmp_priv->rateidx);
+
+}
+#endif
+
 #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
 void fill_tx_desc_8812a(PADAPTER padapter)
 {
 #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
 void fill_tx_desc_8812a(PADAPTER padapter)
 {
@@ -1468,11 +1475,13 @@ void fill_tx_desc_8192e(PADAPTER padapter)
        SET_TX_DESC_OFFSET_92E(pDesc, offset);
 
        #if defined(CONFIG_PCI_HCI) //8192EE
        SET_TX_DESC_OFFSET_92E(pDesc, offset);
 
        #if defined(CONFIG_PCI_HCI) //8192EE
-       SET_TX_DESC_OFFSET_92E(pDesc, offset+8); //work around
-       SET_TX_DESC_PKT_OFFSET_92E(pDesc, 0); /* 8192EE pkt_offset is 0 */
-       #else //8192EU 8192ES
-       SET_TX_DESC_OFFSET_92E(pDesc, offset);
-       SET_TX_DESC_PKT_OFFSET_92E(pDesc, 1);
+               SET_TX_DESC_OFFSET_92E(pDesc, offset+8); //work around
+               SET_TX_DESC_PKT_OFFSET_92E(pDesc, 0); /* 8192EE pkt_offset is 0 */
+       #elif  defined(CONFIG_SDIO_HCI)
+               SET_TX_DESC_OFFSET_92E(pDesc, offset);
+       #else //8192EU
+               SET_TX_DESC_OFFSET_92E(pDesc, offset);
+               SET_TX_DESC_PKT_OFFSET_92E(pDesc, 1);
        #endif
                
        if (bmcast) {
        #endif
                
        if (bmcast) {
@@ -1576,7 +1585,7 @@ void SetPacketTx(PADAPTER padapter)
 
        //3 1. update_attrib()
        pattrib = &pmp_priv->tx.attrib;
 
        //3 1. update_attrib()
        pattrib = &pmp_priv->tx.attrib;
-       _rtw_memcpy(pattrib->src, padapter->eeprompriv.mac_addr, ETH_ALEN);
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
        _rtw_memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
        bmcast = IS_MCAST(pattrib->ra);
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
        _rtw_memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
        bmcast = IS_MCAST(pattrib->ra);
@@ -1611,19 +1620,26 @@ void SetPacketTx(PADAPTER padapter)
        pkt_end = pkt_start + pkt_size;
 
        //3 3. init TX descriptor
        pkt_end = pkt_start + pkt_size;
 
        //3 3. init TX descriptor
-#if defined(CONFIG_RTL8192C) || defined(CONFIG_RTL8192D)
-       if(IS_HARDWARE_TYPE_8192C(padapter) ||IS_HARDWARE_TYPE_8192D(padapter))
-               fill_tx_desc_8192cd(padapter);
-#endif
-
 #if defined(CONFIG_RTL8188E)
        if(IS_HARDWARE_TYPE_8188E(padapter))
                fill_tx_desc_8188e(padapter);
 #endif
 
 #if defined(CONFIG_RTL8188E)
        if(IS_HARDWARE_TYPE_8188E(padapter))
                fill_tx_desc_8188e(padapter);
 #endif
 
+#if defined(CONFIG_RTL8814A)
+       if(IS_HARDWARE_TYPE_8814A(padapter)) 
+               fill_tx_desc_8814a(padapter);
+#endif /* defined(CONFIG_RTL8814A) */
+
 #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
        if(IS_HARDWARE_TYPE_8812(padapter) || IS_HARDWARE_TYPE_8821(padapter)) 
                fill_tx_desc_8812a(padapter);
 #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
        if(IS_HARDWARE_TYPE_8812(padapter) || IS_HARDWARE_TYPE_8821(padapter)) 
                fill_tx_desc_8812a(padapter);
+       if (IS_HARDWARE_TYPE_8812AU(padapter)) {
+               /* <20130425, Kordan> Turn off OFDM Rx to prevent from CCA causing Tx hang.*/
+               if (pmp_priv->mode == MP_PACKET_TX) 
+                       PHY_SetBBReg(padapter, rCCAonSec_Jaguar, BIT3, 1);
+               else 
+                       PHY_SetBBReg(padapter, rCCAonSec_Jaguar, BIT3, 0);
+       }       
 #endif
 
 #if defined(CONFIG_RTL8192E)
 #endif
 
 #if defined(CONFIG_RTL8192E)
@@ -1704,7 +1720,7 @@ exit:
        return;
 }
 
        return;
 }
 
-void SetPacketRx(PADAPTER pAdapter, u8 bStartRx)
+void SetPacketRx(PADAPTER pAdapter, u8 bStartRx, u8 bAB)
 {
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
        struct mp_priv *pmppriv = &pAdapter->mppriv;
 {
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
        struct mp_priv *pmppriv = &pAdapter->mppriv;
@@ -1745,6 +1761,11 @@ void SetPacketRx(PADAPTER pAdapter, u8 bStartRx)
 #endif
                rtw_write32(pAdapter, REG_RCR, 0);
        }
 #endif
                rtw_write32(pAdapter, REG_RCR, 0);
        }
+
+       if (bAB)
+               rtw_write32(pAdapter, REG_RCR, rtw_read32(pAdapter, REG_RCR)|RCR_AB);
+       else
+               rtw_write32(pAdapter, REG_RCR, rtw_read32(pAdapter, REG_RCR)&(~RCR_AB));
 }
 
 void ResetPhyRxPktCount(PADAPTER pAdapter)
 }
 
 void ResetPhyRxPktCount(PADAPTER pAdapter)
@@ -1802,14 +1823,12 @@ static u32 rtw_GetPSDData(PADAPTER pAdapter, u32 point)
 {
        u32 psd_val=0;
        
 {
        u32 psd_val=0;
        
-#if defined(CONFIG_RTL8812A)||defined(CONFIG_RTL8821A) //MP PSD for 8812A      
+#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8814A)
        u16 psd_reg = 0x910;
        u16 psd_regL= 0xF44;
        u16 psd_reg = 0x910;
        u16 psd_regL= 0xF44;
-       
 #else  
        u16 psd_reg = 0x808;
        u16 psd_regL= 0x8B4;
 #else  
        u16 psd_reg = 0x808;
        u16 psd_regL= 0x8B4;
-       
 #endif
 
        psd_val = rtw_read32(pAdapter, psd_reg);
 #endif
 
        psd_val = rtw_read32(pAdapter, psd_reg);
@@ -2424,11 +2443,6 @@ ULONG mpt_ProQueryCalTxPower(
        ULONG                   TxPower = 1, PwrGroup=0, PowerDiffByRate=0;     
        u1Byte                  limit = 0, rate = 0;
        
        ULONG                   TxPower = 1, PwrGroup=0, PowerDiffByRate=0;     
        u1Byte                  limit = 0, rate = 0;
        
-      #if 0// defined(CONFIG_RTL8192D) ||defined(CONFIG_RTL8192C)
-       if(IS_HARDWARE_TYPE_8188E_before(pAdapter))     
-               return mpt_ProQueryCalTxPower_8192C(pAdapter, RfPath);
-       #endif
-       
        #if defined(CONFIG_RTL8188E)
        if (IS_HARDWARE_TYPE_8188E(pAdapter))
        {
        #if defined(CONFIG_RTL8188E)
        if (IS_HARDWARE_TYPE_8188E(pAdapter))
        {
@@ -2490,31 +2504,22 @@ void Hal_ProSetCrystalCap (PADAPTER pAdapter , u32 CrystalCap)
 
        CrystalCap = CrystalCap & 0x3F;
 
 
        CrystalCap = CrystalCap & 0x3F;
 
-       if(IS_HARDWARE_TYPE_8192D(pAdapter))
-       {
-               PHY_SetBBReg(pAdapter, REG_AFE_XTAL_CTRL, 0xF0, CrystalCap & 0x0F);
-               PHY_SetBBReg(pAdapter, REG_AFE_PLL_CTRL, 0xF0000000, (CrystalCap & 0xF0) >> 4);
-       }
-       else if(IS_HARDWARE_TYPE_8188E(pAdapter))
-       {
-               // write 0x24[16:11] = 0x24[22:17] = CrystalCap
+       if (IS_HARDWARE_TYPE_8188E(pAdapter)) {
+               /* write 0x24[16:11] = 0x24[22:17] = CrystalCap*/
                PHY_SetBBReg(pAdapter, REG_AFE_XTAL_CTRL, 0x7FF800, (CrystalCap | (CrystalCap << 6)));
                PHY_SetBBReg(pAdapter, REG_AFE_XTAL_CTRL, 0x7FF800, (CrystalCap | (CrystalCap << 6)));
-       }
-       else if(IS_HARDWARE_TYPE_8812(pAdapter))
-       {
-               // write 0x2C[30:25] = 0x2C[24:19] = CrystalCap
+       } else if (IS_HARDWARE_TYPE_8812(pAdapter)) {
+               /* write 0x2C[30:25] = 0x2C[24:19] = CrystalCap*/
                PHY_SetBBReg(pAdapter, REG_MAC_PHY_CTRL, 0x7FF80000, (CrystalCap | (CrystalCap << 6)));
                PHY_SetBBReg(pAdapter, REG_MAC_PHY_CTRL, 0x7FF80000, (CrystalCap | (CrystalCap << 6)));
-       }       
-       else if(IS_HARDWARE_TYPE_8821(pAdapter) || IS_HARDWARE_TYPE_8192E(pAdapter) || 
-                   IS_HARDWARE_TYPE_8723B(pAdapter))
-       {
-               // write 0x2C[23:18] = 0x2C[17:12] = CrystalCap
-               PHY_SetBBReg(pAdapter, REG_MAC_PHY_CTRL, 0xFFF000, (CrystalCap | (CrystalCap << 6)));   
-       }       
-       else
-       {
+       } else if (IS_HARDWARE_TYPE_8821(pAdapter) || IS_HARDWARE_TYPE_8192E(pAdapter) || 
+                   IS_HARDWARE_TYPE_8723B(pAdapter)) {
+               /* write 0x2C[23:18] = 0x2C[17:12] = CrystalCap*/
                PHY_SetBBReg(pAdapter, REG_MAC_PHY_CTRL, 0xFFF000, (CrystalCap | (CrystalCap << 6)));   
                PHY_SetBBReg(pAdapter, REG_MAC_PHY_CTRL, 0xFFF000, (CrystalCap | (CrystalCap << 6)));   
-       }
+       } else if (IS_HARDWARE_TYPE_8814A(pAdapter)) {
+               /* write 0x2C[26:21] = 0x2C[20:15] = CrystalCap*/
+               PHY_SetBBReg(pAdapter, REG_MAC_PHY_CTRL, 0x07FF8000, (CrystalCap | (CrystalCap << 6)));
+       } else
+               DBG_871X("%s ,unknown HARDWARE_TYPE\n", __func__);
+
 }
 #endif
 
 }
 #endif
 
index 2b4c94fbc18f803596bad92de26f9a9e39b12f60..bb94bfb471c27511c1b900fa24243fd07a1effbd 100755 (executable)
@@ -2237,8 +2237,6 @@ NDIS_STATUS oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
                RT_TRACE(_module_rtl871x_ioctl_c_,_drv_err_, ("Query Information, OID_RT_PRO_RX_PACKET_TYPE:%d \n",\
                                                                                                Adapter->mppriv.rx_with_status));
 
                RT_TRACE(_module_rtl871x_ioctl_c_,_drv_err_, ("Query Information, OID_RT_PRO_RX_PACKET_TYPE:%d \n",\
                                                                                                Adapter->mppriv.rx_with_status));
 
-               //*(u32 *)&Adapter->eeprompriv.mac_addr[0]=rtw_read32(Adapter, 0x10250050);
-               //*(u16 *)&Adapter->eeprompriv.mac_addr[4]=rtw_read16(Adapter, 0x10250054);
                RT_TRACE(_module_rtl871x_ioctl_c_,_drv_err_,("MAC addr=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x  \n",
                        Adapter->eeprompriv.mac_addr[0],Adapter->eeprompriv.mac_addr[1],Adapter->eeprompriv.mac_addr[2],\
                        Adapter->eeprompriv.mac_addr[3],Adapter->eeprompriv.mac_addr[4],Adapter->eeprompriv.mac_addr[5]));
                RT_TRACE(_module_rtl871x_ioctl_c_,_drv_err_,("MAC addr=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x  \n",
                        Adapter->eeprompriv.mac_addr[0],Adapter->eeprompriv.mac_addr[1],Adapter->eeprompriv.mac_addr[2],\
                        Adapter->eeprompriv.mac_addr[3],Adapter->eeprompriv.mac_addr[4],Adapter->eeprompriv.mac_addr[5]));
index 05063bfdf990fb70f860265c637999f28ec7ce8b..44719c51e1f02acbc8117a1ac7910c04f90d43a4 100755 (executable)
@@ -40,18 +40,18 @@ const char *odm_comp_str[] = {
        /* BIT15 */"ODM_COMP_CFO_TRACKING",
        /* BIT16 */"ODM_COMP_ACS",
        /* BIT17 */"PHYDM_COMP_ADAPTIVITY",
        /* BIT15 */"ODM_COMP_CFO_TRACKING",
        /* BIT16 */"ODM_COMP_ACS",
        /* BIT17 */"PHYDM_COMP_ADAPTIVITY",
-       /* BIT18 */NULL,
-       /* BIT19 */NULL,
+       /* BIT18 */"PHYDM_COMP_RA_DBG",
+       /* BIT19 */"PHYDM_COMP_TXBF",
        /* BIT20 */"ODM_COMP_EDCA_TURBO",
        /* BIT21 */"ODM_COMP_EARLY_MODE",
        /* BIT20 */"ODM_COMP_EDCA_TURBO",
        /* BIT21 */"ODM_COMP_EARLY_MODE",
-       /* BIT22 */NULL,
+       /* BIT22 */"ODM_FW_DEBUG_TRACE",
        /* BIT23 */NULL,
        /* BIT24 */"ODM_COMP_TX_PWR_TRACK",
        /* BIT25 */"ODM_COMP_RX_GAIN_TRACK",
        /* BIT26 */"ODM_COMP_CALIBRATION",
        /* BIT27 */NULL,
        /* BIT28 */NULL,
        /* BIT23 */NULL,
        /* BIT24 */"ODM_COMP_TX_PWR_TRACK",
        /* BIT25 */"ODM_COMP_RX_GAIN_TRACK",
        /* BIT26 */"ODM_COMP_CALIBRATION",
        /* BIT27 */NULL,
        /* BIT28 */NULL,
-       /* BIT29 */NULL,
+       /* BIT29 */"BEAMFORMING_DEBUG",
        /* BIT30 */"ODM_COMP_COMMON",
        /* BIT31 */"ODM_COMP_INIT",
 };
        /* BIT30 */"ODM_COMP_COMMON",
        /* BIT31 */"ODM_COMP_INIT",
 };
@@ -76,7 +76,7 @@ const char *odm_ability_str[] = {
        /* BIT14 */"ODM_BB_CFO_TRACKING",
        /* BIT15 */"ODM_BB_NHM_CNT",
        /* BIT16 */"ODM_BB_PRIMARY_CCA",
        /* BIT14 */"ODM_BB_CFO_TRACKING",
        /* BIT15 */"ODM_BB_NHM_CNT",
        /* BIT16 */"ODM_BB_PRIMARY_CCA",
-       /* BIT17 */NULL,
+       /* BIT17 */"ODM_BB_TXBF",
        /* BIT18 */NULL,
        /* BIT19 */NULL,
        /* BIT20 */"ODM_MAC_EDCA_TURBO",
        /* BIT18 */NULL,
        /* BIT19 */NULL,
        /* BIT20 */"ODM_MAC_EDCA_TURBO",
@@ -106,15 +106,15 @@ void rtw_odm_dbg_comp_msg(void *sel, _adapter *adapter)
        HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
        DM_ODM_T *odm = &pHalData->odmpriv;
        int cnt = 0;
        HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
        DM_ODM_T *odm = &pHalData->odmpriv;
        int cnt = 0;
-       u64 dbg_comp;
+       u64 dbg_comp = 0;
        int i;
 
        rtw_hal_get_def_var(adapter, HW_DEF_ODM_DBG_FLAG, &dbg_comp);
        DBG_871X_SEL_NL(sel, "odm.DebugComponents = 0x%016llx \n", dbg_comp);
        for (i=0;i<RTW_ODM_COMP_MAX;i++) {
                if (odm_comp_str[i])
        int i;
 
        rtw_hal_get_def_var(adapter, HW_DEF_ODM_DBG_FLAG, &dbg_comp);
        DBG_871X_SEL_NL(sel, "odm.DebugComponents = 0x%016llx \n", dbg_comp);
        for (i=0;i<RTW_ODM_COMP_MAX;i++) {
                if (odm_comp_str[i])
-               DBG_871X_SEL_NL(sel, "%cBIT%-2d %s\n",
-                       (BIT0 << i) & dbg_comp ? '+' : ' ', i, odm_comp_str[i]);
+                       DBG_871X_SEL_NL(sel, "%cBIT%-2d %s\n",
+                               (BIT0 << i) & dbg_comp ? '+' : ' ', i, odm_comp_str[i]);
        }
 }
 
        }
 }
 
@@ -128,7 +128,7 @@ void rtw_odm_dbg_level_msg(void *sel, _adapter *adapter)
        HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
        DM_ODM_T *odm = &pHalData->odmpriv;
        int cnt = 0;
        HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
        DM_ODM_T *odm = &pHalData->odmpriv;
        int cnt = 0;
-       u32 dbg_level;
+       u32 dbg_level = 0;
        int i;
 
        rtw_hal_get_def_var(adapter, HW_DEF_ODM_DBG_LEVEL, &dbg_level);
        int i;
 
        rtw_hal_get_def_var(adapter, HW_DEF_ODM_DBG_LEVEL, &dbg_level);
@@ -156,8 +156,8 @@ void rtw_odm_ability_msg(void *sel, _adapter *adapter)
        DBG_871X_SEL_NL(sel, "odm.SupportAbility = 0x%08x\n", ability);
        for (i=0;i<RTW_ODM_ABILITY_MAX;i++) {
                if (odm_ability_str[i])
        DBG_871X_SEL_NL(sel, "odm.SupportAbility = 0x%08x\n", ability);
        for (i=0;i<RTW_ODM_ABILITY_MAX;i++) {
                if (odm_ability_str[i])
-               DBG_871X_SEL_NL(sel, "%cBIT%-2d %s\n",
-                       (BIT0 << i) & ability ? '+' : ' ', i, odm_ability_str[i]);
+                       DBG_871X_SEL_NL(sel, "%cBIT%-2d %s\n",
+                               (BIT0 << i) & ability ? '+' : ' ', i, odm_ability_str[i]);
        }
 }
 
        }
 }
 
@@ -173,7 +173,6 @@ void rtw_odm_adaptivity_ver_msg(void *sel, _adapter *adapter)
 
 #define RTW_ADAPTIVITY_EN_DISABLE 0
 #define RTW_ADAPTIVITY_EN_ENABLE 1
 
 #define RTW_ADAPTIVITY_EN_DISABLE 0
 #define RTW_ADAPTIVITY_EN_ENABLE 1
-#define RTW_ADAPTIVITY_EN_AUTO 2
 
 void rtw_odm_adaptivity_en_msg(void *sel, _adapter *adapter)
 {
 
 void rtw_odm_adaptivity_en_msg(void *sel, _adapter *adapter)
 {
@@ -188,9 +187,6 @@ void rtw_odm_adaptivity_en_msg(void *sel, _adapter *adapter)
                DBG_871X_SEL(sel, "DISABLE\n");
        } else if (regsty->adaptivity_en == RTW_ADAPTIVITY_EN_ENABLE) {
                DBG_871X_SEL(sel, "ENABLE\n");
                DBG_871X_SEL(sel, "DISABLE\n");
        } else if (regsty->adaptivity_en == RTW_ADAPTIVITY_EN_ENABLE) {
                DBG_871X_SEL(sel, "ENABLE\n");
-       } else if (regsty->adaptivity_en == RTW_ADAPTIVITY_EN_AUTO) {
-               DBG_871X_SEL(sel, "AUTO, chplan:0x%02x, Regulation:%u,%u\n"
-                       , mlme->ChannelPlan, odm->odm_Regulation2_4G, odm->odm_Regulation5G);
        } else {
                DBG_871X_SEL(sel, "INVALID\n");
        }
        } else {
                DBG_871X_SEL(sel, "INVALID\n");
        }
@@ -214,39 +210,46 @@ void rtw_odm_adaptivity_mode_msg(void *sel, _adapter *adapter)
        }
 }
 
        }
 }
 
-#define RTW_NHM_EN_DISABLE 0
-#define RTW_NHM_EN_ENABLE 1
+#define RTW_ADAPTIVITY_DML_DISABLE 0
+#define RTW_ADAPTIVITY_DML_ENABLE 1
 
 
-void rtw_odm_nhm_en_msg(void *sel, _adapter *adapter)
+void rtw_odm_adaptivity_dml_msg(void *sel, _adapter *adapter)
 {
        struct registry_priv *regsty = &adapter->registrypriv;
 
 {
        struct registry_priv *regsty = &adapter->registrypriv;
 
-       DBG_871X_SEL_NL(sel, "RTW_NHM_EN_");
+       DBG_871X_SEL_NL(sel, "RTW_ADAPTIVITY_DML_");
 
 
-       if (regsty->nhm_en == RTW_NHM_EN_DISABLE) {
+       if (regsty->adaptivity_dml == RTW_ADAPTIVITY_DML_DISABLE) {
                DBG_871X_SEL(sel, "DISABLE\n");
                DBG_871X_SEL(sel, "DISABLE\n");
-       } else if (regsty->nhm_en == RTW_NHM_EN_ENABLE) {
+       } else if (regsty->adaptivity_dml == RTW_ADAPTIVITY_DML_ENABLE) {
                DBG_871X_SEL(sel, "ENABLE\n");
        } else {
                DBG_871X_SEL(sel, "INVALID\n");
        }
 }
 
                DBG_871X_SEL(sel, "ENABLE\n");
        } else {
                DBG_871X_SEL(sel, "INVALID\n");
        }
 }
 
+void rtw_odm_adaptivity_dc_backoff_msg(void *sel, _adapter *adapter)
+{
+       struct registry_priv *regsty = &adapter->registrypriv;
+
+       DBG_871X_SEL_NL(sel, "RTW_ADAPTIVITY_DC_BACKOFF:%u\n", regsty->adaptivity_dc_backoff);
+}
+
 bool rtw_odm_adaptivity_needed(_adapter *adapter)
 {
        struct registry_priv *regsty = &adapter->registrypriv;
        struct mlme_priv *mlme = &adapter->mlmepriv;
        bool ret = _FALSE;
 
 bool rtw_odm_adaptivity_needed(_adapter *adapter)
 {
        struct registry_priv *regsty = &adapter->registrypriv;
        struct mlme_priv *mlme = &adapter->mlmepriv;
        bool ret = _FALSE;
 
-       if (regsty->adaptivity_en == RTW_ADAPTIVITY_EN_ENABLE
-               || regsty->adaptivity_en == RTW_ADAPTIVITY_EN_AUTO)
+       if (regsty->adaptivity_en == RTW_ADAPTIVITY_EN_ENABLE)
                ret = _TRUE;
 
        if (ret == _TRUE) {
                rtw_odm_adaptivity_ver_msg(RTW_DBGDUMP, adapter);
                rtw_odm_adaptivity_en_msg(RTW_DBGDUMP, adapter);
                rtw_odm_adaptivity_mode_msg(RTW_DBGDUMP, adapter);
                ret = _TRUE;
 
        if (ret == _TRUE) {
                rtw_odm_adaptivity_ver_msg(RTW_DBGDUMP, adapter);
                rtw_odm_adaptivity_en_msg(RTW_DBGDUMP, adapter);
                rtw_odm_adaptivity_mode_msg(RTW_DBGDUMP, adapter);
-               rtw_odm_nhm_en_msg(RTW_DBGDUMP, adapter);
+               rtw_odm_adaptivity_dml_msg(RTW_DBGDUMP, adapter);
+               rtw_odm_adaptivity_dc_backoff_msg(RTW_DBGDUMP, adapter);
        }
 
        return ret;
        }
 
        return ret;
@@ -260,40 +263,32 @@ void rtw_odm_adaptivity_parm_msg(void *sel, _adapter *adapter)
        rtw_odm_adaptivity_ver_msg(sel, adapter);
        rtw_odm_adaptivity_en_msg(sel, adapter);
        rtw_odm_adaptivity_mode_msg(sel, adapter);
        rtw_odm_adaptivity_ver_msg(sel, adapter);
        rtw_odm_adaptivity_en_msg(sel, adapter);
        rtw_odm_adaptivity_mode_msg(sel, adapter);
-       rtw_odm_nhm_en_msg(sel, adapter);
+       rtw_odm_adaptivity_dml_msg(sel, adapter);
+       rtw_odm_adaptivity_dc_backoff_msg(sel, adapter);
 
 
-       DBG_871X_SEL_NL(sel, "%10s %16s %8s %10s %11s %14s\n"
-               , "TH_L2H_ini", "TH_EDCCA_HL_diff", "IGI_Base", "ForceEDCCA", "AdapEn_RSSI", "IGI_LowerBound");
-       DBG_871X_SEL_NL(sel, "0x%-8x %-16d 0x%-6x %-10d %-11u %-14u\n"
+       DBG_871X_SEL_NL(sel, "%10s %16s\n"
+               , "TH_L2H_ini", "TH_EDCCA_HL_diff");
+       DBG_871X_SEL_NL(sel, "0x%-8x %-16d\n"
                , (u8)odm->TH_L2H_ini
                , odm->TH_EDCCA_HL_diff
                , (u8)odm->TH_L2H_ini
                , odm->TH_EDCCA_HL_diff
-               , odm->IGI_Base
-               , odm->ForceEDCCA
-               , odm->AdapEn_RSSI
-               , odm->IGI_LowerBound
        );
 
        );
 
-       DBG_871X_SEL_NL(sel, "%8s %9s\n", "EDCCA_ES","Adap_Flag");
-       DBG_871X_SEL_NL(sel, "%-8x %-9x \n"
-               , odm->EDCCA_enable_state
+       DBG_871X_SEL_NL(sel, "%15s %9s\n", "AdapEnableState","Adap_Flag");
+       DBG_871X_SEL_NL(sel, "%-15x %-9x \n"
+               , odm->Adaptivity_enable
                , odm->adaptivity_flag
        );
        
        
 }
 
                , odm->adaptivity_flag
        );
        
        
 }
 
-void rtw_odm_adaptivity_parm_set(_adapter *adapter, s8 TH_L2H_ini, s8 TH_EDCCA_HL_diff,
-       s8 IGI_Base, bool ForceEDCCA, u8 AdapEn_RSSI, u8 IGI_LowerBound)
+void rtw_odm_adaptivity_parm_set(_adapter *adapter, s8 TH_L2H_ini, s8 TH_EDCCA_HL_diff)
 {
        HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
        DM_ODM_T *odm = &pHalData->odmpriv;
 
        odm->TH_L2H_ini = TH_L2H_ini;
        odm->TH_EDCCA_HL_diff = TH_EDCCA_HL_diff;
 {
        HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
        DM_ODM_T *odm = &pHalData->odmpriv;
 
        odm->TH_L2H_ini = TH_L2H_ini;
        odm->TH_EDCCA_HL_diff = TH_EDCCA_HL_diff;
-       odm->IGI_Base = IGI_Base;
-       odm->ForceEDCCA = ForceEDCCA;
-       odm->AdapEn_RSSI = AdapEn_RSSI;
-       odm->IGI_LowerBound = IGI_LowerBound;
 }
 
 void rtw_odm_get_perpkt_rssi(void *sel, _adapter *adapter)
 }
 
 void rtw_odm_get_perpkt_rssi(void *sel, _adapter *adapter)
@@ -309,13 +304,12 @@ void rtw_odm_get_perpkt_rssi(void *sel, _adapter *adapter)
 void rtw_odm_acquirespinlock(_adapter *adapter,        RT_SPINLOCK_TYPE type)
 {
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(adapter);
 void rtw_odm_acquirespinlock(_adapter *adapter,        RT_SPINLOCK_TYPE type)
 {
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
        _irqL irqL;
 
        switch(type)
        {
                case RT_IQK_SPINLOCK:
        _irqL irqL;
 
        switch(type)
        {
                case RT_IQK_SPINLOCK:
-                       _enter_critical_bh(&pdmpriv->IQKSpinLock, &irqL);
+                       _enter_critical_bh(&pHalData->IQKSpinLock, &irqL);
                default:
                        break;
        }
                default:
                        break;
        }
@@ -324,13 +318,12 @@ void rtw_odm_acquirespinlock(_adapter *adapter,   RT_SPINLOCK_TYPE type)
 void rtw_odm_releasespinlock(_adapter *adapter,        RT_SPINLOCK_TYPE type)
 {
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(adapter);
 void rtw_odm_releasespinlock(_adapter *adapter,        RT_SPINLOCK_TYPE type)
 {
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
        _irqL irqL;
 
        switch(type)
        {
                case RT_IQK_SPINLOCK:
        _irqL irqL;
 
        switch(type)
        {
                case RT_IQK_SPINLOCK:
-                       _exit_critical_bh(&pdmpriv->IQKSpinLock, &irqL);
+                       _exit_critical_bh(&pHalData->IQKSpinLock, &irqL);
                default:
                        break;
        }
                default:
                        break;
        }
index 697a69f680339f07a04823e015b35e2eee159f8b..d85822d5d7cbf2b4f575fa5db0c3ea840838ba09 100755 (executable)
@@ -325,8 +325,8 @@ static void issue_p2p_provision_resp(struct wifidirect_info *pwdinfo, u8* raddr,
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr3, adapter_mac_addr(padapter), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        pmlmeext->mgnt_seq++;
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        pmlmeext->mgnt_seq++;
@@ -953,7 +953,7 @@ u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 tunnel
 
                //      Value:
                //      Alternative MAC Address
 
                //      Value:
                //      Alternative MAC Address
-               _rtw_memcpy( wfdie + wfdielen, &padapter->pbuddy_adapter->eeprompriv.mac_addr[ 0 ], ETH_ALEN );
+               _rtw_memcpy(wfdie + wfdielen, adapter_mac_addr(padapter->pbuddy_adapter), ETH_ALEN);
                //      This mac address is used to make the WFD session when TDLS is enable.
 
                wfdielen += ETH_ALEN;
                //      This mac address is used to make the WFD session when TDLS is enable.
 
                wfdielen += ETH_ALEN;
@@ -3422,7 +3422,7 @@ void pre_tx_invitereq_handler( _adapter*  padapter )
 _func_enter_;
 
        set_channel_bwmode(padapter, pwdinfo->invitereq_info.peer_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, CHANNEL_WIDTH_20);
 _func_enter_;
 
        set_channel_bwmode(padapter, pwdinfo->invitereq_info.peer_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, CHANNEL_WIDTH_20);
-       padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));     
+       rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));     
        issue_probereq_p2p(padapter, NULL);
        _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
        
        issue_probereq_p2p(padapter, NULL);
        _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
        
@@ -3482,8 +3482,9 @@ _func_enter_;
                        DBG_871X("%s, switch ch back to buddy's cur_channel=%d\n", __func__, pbuddy_mlmeext->cur_channel);
 
                        set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
                        DBG_871X("%s, switch ch back to buddy's cur_channel=%d\n", __func__, pbuddy_mlmeext->cur_channel);
 
                        set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
-               
-                       issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
+
+                       if (check_buddy_fwstate(padapter, WIFI_FW_STATION_STATE))
+                               issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
                }
                else if( pwdinfo->driver_interface == DRIVER_WEXT )
                {
                }
                else if( pwdinfo->driver_interface == DRIVER_WEXT )
                {
@@ -3531,7 +3532,7 @@ _func_enter_;
                                        if(!check_buddy_mlmeinfo_state(padapter, WIFI_FW_AP_STATE) &&!(pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
                                        {                                               
                                                val8 = 0;
                                        if(!check_buddy_mlmeinfo_state(padapter, WIFI_FW_AP_STATE) &&!(pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
                                        {                                               
                                                val8 = 0;
-                                               padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
+                                               rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
                                        }
                                        rtw_p2p_set_state(pwdinfo, P2P_STATE_IDLE);
                                        issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
                                        }
                                        rtw_p2p_set_state(pwdinfo, P2P_STATE_IDLE);
                                        issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
@@ -3596,24 +3597,24 @@ _func_enter_;
 
        if (rtw_get_ch_setting_union(padapter, &ch, &bw, &offset) != 0) {
                if (0)
 
        if (rtw_get_ch_setting_union(padapter, &ch, &bw, &offset) != 0) {
                if (0)
-               DBG_871X(FUNC_ADPT_FMT" back to linked/linking union - ch:%u, bw:%u, offset:%u\n",
-                       FUNC_ADPT_ARG(padapter), ch, bw, offset);
+                       DBG_871X(FUNC_ADPT_FMT" back to linked/linking union - ch:%u, bw:%u, offset:%u\n",
+                               FUNC_ADPT_ARG(padapter), ch, bw, offset);
        }
        else if (adapter_wdev_data(padapter)->p2p_enabled && pwdinfo->listen_channel) {
                ch = pwdinfo->listen_channel;
                bw = CHANNEL_WIDTH_20;
                offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
                if (0)
        }
        else if (adapter_wdev_data(padapter)->p2p_enabled && pwdinfo->listen_channel) {
                ch = pwdinfo->listen_channel;
                bw = CHANNEL_WIDTH_20;
                offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
                if (0)
-               DBG_871X(FUNC_ADPT_FMT" back to listen ch - ch:%u, bw:%u, offset:%u\n",
-                       FUNC_ADPT_ARG(padapter), ch, bw, offset);
+                       DBG_871X(FUNC_ADPT_FMT" back to listen ch - ch:%u, bw:%u, offset:%u\n",
+                               FUNC_ADPT_ARG(padapter), ch, bw, offset);
        }
        else {
                ch = pcfg80211_wdinfo->restore_channel;
                bw = CHANNEL_WIDTH_20;
                offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
                if (0)
        }
        else {
                ch = pcfg80211_wdinfo->restore_channel;
                bw = CHANNEL_WIDTH_20;
                offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
                if (0)
-               DBG_871X(FUNC_ADPT_FMT" back to restore ch - ch:%u, bw:%u, offset:%u\n",
-                       FUNC_ADPT_ARG(padapter), ch, bw, offset);
+                       DBG_871X(FUNC_ADPT_FMT" back to restore ch - ch:%u, bw:%u, offset:%u\n",
+                               FUNC_ADPT_ARG(padapter), ch, bw, offset);
        }
 
        set_channel_bwmode(padapter, ch, offset, bw);
        }
 
        set_channel_bwmode(padapter, ch, offset, bw);
@@ -3626,9 +3627,9 @@ _func_enter_;
        pcfg80211_wdinfo->is_ro_ch = _FALSE;
        pcfg80211_wdinfo->last_ro_ch_time = rtw_get_current_time();
 
        pcfg80211_wdinfo->is_ro_ch = _FALSE;
        pcfg80211_wdinfo->last_ro_ch_time = rtw_get_current_time();
 
-       DBG_871X("cfg80211_remain_on_channel_expired cookie:0x%llx, ch=%d, bw=%d, offset=%d\n",
-               pcfg80211_wdinfo->remain_on_ch_cookie,
-               rtw_get_oper_ch(padapter), rtw_get_oper_bw(padapter), rtw_get_oper_choffset(padapter));
+       DBG_871X("cfg80211_remain_on_channel_expired cookie:0x%llx, ch=%d, bw=%d, offset=%d\n"
+               , pcfg80211_wdinfo->remain_on_ch_cookie
+               rtw_get_oper_ch(padapter), rtw_get_oper_bw(padapter), rtw_get_oper_choffset(padapter));
 
        rtw_cfg80211_remain_on_channel_expired(padapter, 
                pcfg80211_wdinfo->remain_on_ch_cookie, 
 
        rtw_cfg80211_remain_on_channel_expired(padapter, 
                pcfg80211_wdinfo->remain_on_ch_cookie, 
@@ -4503,6 +4504,46 @@ _func_enter_;
 _func_exit_;
 }
 
 _func_exit_;
 }
 
+int process_p2p_cross_connect_ie(PADAPTER padapter, u8 *IEs, u32 IELength)
+{
+       int ret = _TRUE;
+       u8 * ies;
+       u32 ies_len;
+       u8 * p2p_ie;
+       u32     p2p_ielen = 0;
+       u8      p2p_attr[MAX_P2P_IE_LEN] = { 0x00 };// NoA length should be n*(13) + 2
+       u32     attr_contentlen = 0;
+
+       struct wifidirect_info  *pwdinfo = &( padapter->wdinfo );
+
+_func_enter_;
+
+       if(IELength <= _BEACON_IE_OFFSET_)
+               return ret;
+       
+       ies = IEs + _BEACON_IE_OFFSET_;
+       ies_len = IELength - _BEACON_IE_OFFSET_;
+
+       p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen);
+       
+       while(p2p_ie)
+       {
+               // Get P2P Manageability IE.
+               if(rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_MANAGEABILITY, p2p_attr, &attr_contentlen))
+               {
+                       if ((p2p_attr[0]&(BIT(0)|BIT(1))) == 0x01) {
+                               ret = _FALSE; 
+                       }
+                       break;
+               }
+               //Get the next P2P IE
+               p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
+       }
+
+_func_exit_;
+       return ret;
+}
+
 #ifdef CONFIG_P2P_PS
 void process_p2p_ps_ie(PADAPTER padapter, u8 *IEs, u32 IELength)
 {
 #ifdef CONFIG_P2P_PS
 void process_p2p_ps_ie(PADAPTER padapter, u8 *IEs, u32 IELength)
 {
index 0a16ad5c2e3b576846d589561f43630936cb938b..99236dec978c0d8572ce0af1c14cb24fd74059ea 100755 (executable)
@@ -532,9 +532,7 @@ _func_enter_;
        {
                if ( (pwrpriv->rpwm == pslv)
 #ifdef CONFIG_LPS_LCLK
        {
                if ( (pwrpriv->rpwm == pslv)
 #ifdef CONFIG_LPS_LCLK
-#ifndef CONFIG_RTL8723A
                        || ((pwrpriv->rpwm >= PS_STATE_S2)&&(pslv >= PS_STATE_S2))
                        || ((pwrpriv->rpwm >= PS_STATE_S2)&&(pslv >= PS_STATE_S2))
-#endif
 #endif
                        )
                {
 #endif
                        )
                {
@@ -610,14 +608,11 @@ _func_enter_;
                do {
                        rtw_msleep_os(1);
                        poll_cnt++;
                do {
                        rtw_msleep_os(1);
                        poll_cnt++;
+                       cpwm_now = 0;
                        rtw_hal_get_hwreg(padapter, HW_VAR_CPWM, &cpwm_now);
                        if ((cpwm_orig ^ cpwm_now) & 0x80)
                        {
                        rtw_hal_get_hwreg(padapter, HW_VAR_CPWM, &cpwm_now);
                        if ((cpwm_orig ^ cpwm_now) & 0x80)
                        {
-#ifdef CONFIG_RTL8723A
-                               pwrpriv->cpwm = PS_STATE(cpwm_now);
-#else // !CONFIG_RTL8723A
                                pwrpriv->cpwm = PS_STATE_S4;
                                pwrpriv->cpwm = PS_STATE_S4;
-#endif // !CONFIG_RTL8723A
                                pwrpriv->cpwm_tog = cpwm_now & PS_TOGGLE;
 #ifdef DBG_CHECK_FW_PS_STATE
                                DBG_871X("%s: polling cpwm OK! poll_cnt=%d, cpwm_orig=%02x, cpwm_now=%02x , 0x100=0x%x\n"
                                pwrpriv->cpwm_tog = cpwm_now & PS_TOGGLE;
 #ifdef DBG_CHECK_FW_PS_STATE
                                DBG_871X("%s: polling cpwm OK! poll_cnt=%d, cpwm_orig=%02x, cpwm_now=%02x , 0x100=0x%x\n"
@@ -722,15 +717,14 @@ u8 PS_RDY_CHECK(_adapter * padapter)
        return _TRUE;
 }
 
        return _TRUE;
 }
 
-#if defined(CONFIG_FWLPS_IN_IPS) && defined(CONFIG_PNO_SUPPORT)
+#if defined(CONFIG_FWLPS_IN_IPS)
 void rtw_set_fw_in_ips_mode(PADAPTER padapter, u8 enable)
 {
 void rtw_set_fw_in_ips_mode(PADAPTER padapter, u8 enable)
 {
-       struct hal_ops *pHalFunc = &padapter->HalFunc;
        struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
        int cnt=0;
        u32 start_time;
        u8 val8 = 0;
        struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
        int cnt=0;
        u32 start_time;
        u8 val8 = 0;
-       u8 cpwm_orig, cpwm_now;
+       u8 cpwm_orig = 0, cpwm_now = 0;
        u8 parm[H2C_INACTIVE_PS_LEN]={0};
 
        if (padapter->netif_up == _FALSE) {
        u8 parm[H2C_INACTIVE_PS_LEN]={0};
 
        if (padapter->netif_up == _FALSE) {
@@ -738,23 +732,25 @@ void rtw_set_fw_in_ips_mode(PADAPTER padapter, u8 enable)
                return;
        }
 
                return;
        }
 
-       if (pHalFunc->fill_h2c_cmd == NULL) {
-               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               return;
-       }
-
        //u8 cmd_param; //BIT0:enable, BIT1:NoConnect32k
        if (enable) {
        //u8 cmd_param; //BIT0:enable, BIT1:NoConnect32k
        if (enable) {
-
 #ifdef CONFIG_BT_COEXIST
                rtw_btcoex_IpsNotify(padapter, pwrpriv->ips_mode_req);
 #endif
                //Enter IPS
                DBG_871X("%s: issue H2C to FW when entering IPS\n", __func__);
 #ifdef CONFIG_BT_COEXIST
                rtw_btcoex_IpsNotify(padapter, pwrpriv->ips_mode_req);
 #endif
                //Enter IPS
                DBG_871X("%s: issue H2C to FW when entering IPS\n", __func__);
+
+#ifdef CONFIG_PNO_SUPPORT
                parm[0] = 0x03;
                parm[0] = 0x03;
-               parm[1] = 0x01;
-               parm[2] = 0x01;
-               pHalFunc->fill_h2c_cmd(padapter, //H2C_FWLPS_IN_IPS_,
+               parm[1] = pwrpriv->pnlo_info->fast_scan_iterations;
+               parm[2] = pwrpriv->pnlo_info->slow_scan_period;
+#else
+               parm[0] = 0x03;
+               parm[1] = 0x0;
+               parm[2] = 0x0;
+#endif//CONFIG_PNO_SUPPORT
+
+               rtw_hal_fill_h2c_cmd(padapter, //H2C_FWLPS_IN_IPS_,
                                        H2C_INACTIVE_PS_,
                                        H2C_INACTIVE_PS_LEN, parm);
                //poll 0x1cc to make sure H2C command already finished by FW; MAC_0x1cc=0 means H2C done by FW.
                                        H2C_INACTIVE_PS_,
                                        H2C_INACTIVE_PS_LEN, parm);
                //poll 0x1cc to make sure H2C command already finished by FW; MAC_0x1cc=0 means H2C done by FW.
@@ -777,33 +773,18 @@ void rtw_set_fw_in_ips_mode(PADAPTER padapter, u8 enable)
                        DBG_871X("%s: write rpwm=%02x\n", __FUNCTION__, val8);
                        adapter_to_pwrctl(padapter)->tog = (val8 + 0x80) & 0x80;
                        cnt = val8 = 0;
                        DBG_871X("%s: write rpwm=%02x\n", __FUNCTION__, val8);
                        adapter_to_pwrctl(padapter)->tog = (val8 + 0x80) & 0x80;
                        cnt = val8 = 0;
-                       do {
-                               val8 = rtw_read8(padapter, REG_CR);
-                               cnt++;
-                               DBG_871X("%s  polling 0x100=0x%x, cnt=%d \n",
-                                               __func__, val8, cnt);
-                               DBG_871X("%s 0x08:%02x, 0x03:%02x\n",
-                                               __func__,
-                                               rtw_read8(padapter, 0x08),
-                                               rtw_read8(padapter, 0x03));
-                               rtw_mdelay_os(10);
-                       } while(cnt<20 && (val8!=0xEA));
-#ifdef DBG_CHECK_FW_PS_STATE
-                       if(val8 != 0xEA) {
-                               DBG_871X("MAC_1B8=0x%08x\n",
-                                               rtw_read32(padapter, 0x1b8));
-                               DBG_871X("MAC_1C0=%08x, MAC_1C4=%08x, MAC_1C8=%08x, MAC_1CC=%08x\n",
-                                               rtw_read32(padapter, 0x1c0),
-                                               rtw_read32(padapter, 0x1c4),
-                                               rtw_read32(padapter, 0x1c8),
-                                               rtw_read32(padapter, 0x1cc));
-#endif //DBG_CHECK_FW_PS_STATE
-                       } else {
-                               DBG_871X("MAC_1C0=%08x, MAC_1C4=%08x, MAC_1C8=%08x, MAC_1CC=%08x\n",
-                                               rtw_read32(padapter, 0x1c0),
-                                               rtw_read32(padapter, 0x1c4),
-                                               rtw_read32(padapter, 0x1c8),
-                                               rtw_read32(padapter, 0x1cc));
+                       if (parm[1] == 0 || parm[2] == 0) {
+                               do {
+                                       val8 = rtw_read8(padapter, REG_CR);
+                                       cnt++;
+                                       DBG_871X("%s  polling 0x100=0x%x, cnt=%d \n",
+                                                       __func__, val8, cnt);
+                                       DBG_871X("%s 0x08:%02x, 0x03:%02x\n",
+                                                       __func__,
+                                                       rtw_read8(padapter, 0x08),
+                                                       rtw_read8(padapter, 0x03));
+                                       rtw_mdelay_os(10);
+                               } while(cnt<20 && (val8!=0xEA));
                        }
                }
        } else {
                        }
                }
        } else {
@@ -831,10 +812,6 @@ void rtw_set_fw_in_ips_mode(PADAPTER padapter, u8 enable)
 
                        rtw_hal_get_hwreg(padapter, HW_VAR_CPWM, &cpwm_now);
                        if ((cpwm_orig ^ cpwm_now) & 0x80) {
 
                        rtw_hal_get_hwreg(padapter, HW_VAR_CPWM, &cpwm_now);
                        if ((cpwm_orig ^ cpwm_now) & 0x80) {
-#ifdef DBG_CHECK_FW_PS_STATE                           
-                               DBG_871X("%s: polling cpwm ok when leaving IPS in FWLPS state, cpwm_orig=%02x, cpwm_now=%02x, 0x100=0x%x \n"
-                               , __FUNCTION__, cpwm_orig, cpwm_now, rtw_read8(padapter, REG_CR));
-#endif //DBG_CHECK_FW_PS_STATE
                                break;
                        }
 
                                break;
                        }
 
@@ -848,7 +825,7 @@ void rtw_set_fw_in_ips_mode(PADAPTER padapter, u8 enable)
                parm[0] = 0x0;
                parm[1] = 0x0;
                parm[2] = 0x0;
                parm[0] = 0x0;
                parm[1] = 0x0;
                parm[2] = 0x0;
-               pHalFunc->fill_h2c_cmd(padapter, H2C_INACTIVE_PS_,
+               rtw_hal_fill_h2c_cmd(padapter, H2C_INACTIVE_PS_,
                                        H2C_INACTIVE_PS_LEN, parm);
 #ifdef CONFIG_BT_COEXIST
                rtw_btcoex_IpsNotify(padapter, IPS_NONE);
                                        H2C_INACTIVE_PS_LEN, parm);
 #ifdef CONFIG_BT_COEXIST
                rtw_btcoex_IpsNotify(padapter, IPS_NONE);
@@ -924,6 +901,10 @@ _func_enter_;
                        DBG_871X(FUNC_ADPT_FMT" Leave 802.11 power save - %s\n",
                                FUNC_ADPT_ARG(padapter), msg);
 
                        DBG_871X(FUNC_ADPT_FMT" Leave 802.11 power save - %s\n",
                                FUNC_ADPT_ARG(padapter), msg);
 
+                       if (pwrpriv->lps_leave_cnts < UINT_MAX)
+                               pwrpriv->lps_leave_cnts++;
+                       else
+                               pwrpriv->lps_leave_cnts = 0;
 #ifdef CONFIG_TDLS
                        _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
 
 #ifdef CONFIG_TDLS
                        _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
 
@@ -999,6 +980,10 @@ _func_enter_;
                        DBG_871X(FUNC_ADPT_FMT" Enter 802.11 power save - %s\n",
                                FUNC_ADPT_ARG(padapter), msg);
 
                        DBG_871X(FUNC_ADPT_FMT" Enter 802.11 power save - %s\n",
                                FUNC_ADPT_ARG(padapter), msg);
 
+                       if (pwrpriv->lps_enter_cnts < UINT_MAX)
+                               pwrpriv->lps_enter_cnts++;
+                       else
+                               pwrpriv->lps_enter_cnts = 0;
 #ifdef CONFIG_TDLS
                        _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
 
 #ifdef CONFIG_TDLS
                        _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
 
@@ -1052,19 +1037,6 @@ _func_enter_;
                                if (val8 & BIT(4))
                                        pslv = PS_STATE_S2;
 
                                if (val8 & BIT(4))
                                        pslv = PS_STATE_S2;
 
-#ifdef CONFIG_RTL8723A
-                               val8 = rtw_btcoex_RpwmVal(padapter);
-                               switch (val8)
-                               {
-                                       case 0x4:
-                                               pslv = PS_STATE_S3;
-                                               break;
-
-                                       case 0xC:
-                                               pslv = PS_STATE_S4;
-                                               break;
-                               }
-#endif // CONFIG_RTL8723A
                        }
 #endif // CONFIG_BT_COEXIST
 
                        }
 #endif // CONFIG_BT_COEXIST
 
@@ -1291,11 +1263,7 @@ _func_enter_;
                        rtw_hal_get_hwreg(Adapter, HW_VAR_CPWM, &cpwm_now);
                        if ((cpwm_orig ^ cpwm_now) & 0x80)
                        {
                        rtw_hal_get_hwreg(Adapter, HW_VAR_CPWM, &cpwm_now);
                        if ((cpwm_orig ^ cpwm_now) & 0x80)
                        {
-#ifdef CONFIG_RTL8723A
-                               pwrpriv->cpwm = PS_STATE(cpwm_now);
-#else // !CONFIG_RTL8723A
                                pwrpriv->cpwm = PS_STATE_S4;
                                pwrpriv->cpwm = PS_STATE_S4;
-#endif // !CONFIG_RTL8723A
                                pwrpriv->cpwm_tog = cpwm_now & PS_TOGGLE;
 #ifdef DBG_CHECK_FW_PS_STATE
                                DBG_871X("%s: polling cpwm OK! cpwm_orig=%02x, cpwm_now=%02x, 0x100=0x%x \n"
                                pwrpriv->cpwm_tog = cpwm_now & PS_TOGGLE;
 #ifdef DBG_CHECK_FW_PS_STATE
                                DBG_871X("%s: polling cpwm OK! cpwm_orig=%02x, cpwm_now=%02x, 0x100=0x%x \n"
@@ -1680,24 +1648,6 @@ _func_enter_;
        pwrctrl = adapter_to_pwrctl(padapter);
        pslv = PS_STATE_S2;
 
        pwrctrl = adapter_to_pwrctl(padapter);
        pslv = PS_STATE_S2;
 
-#if defined(CONFIG_RTL8723A) && defined(CONFIG_BT_COEXIST)
-       if (rtw_btcoex_IsBtControlLps(padapter) == _TRUE)
-       {
-               u8 btcoex_rpwm;
-               btcoex_rpwm = rtw_btcoex_RpwmVal(padapter);
-               switch (btcoex_rpwm)
-               {
-                       case 0x4:
-                               pslv = PS_STATE_S3;
-                               break;
-
-                       case 0xC:
-                               pslv = PS_STATE_S4;
-                               break;
-               }
-       }
-#endif // CONFIG_RTL8723A & CONFIG_BT_COEXIST
-
        _enter_pwrlock(&pwrctrl->lock);
 
        register_task_alive(pwrctrl, task);
        _enter_pwrlock(&pwrctrl->lock);
 
        register_task_alive(pwrctrl, task);
@@ -1762,19 +1712,6 @@ _func_enter_;
                if (val8 & BIT(4))
                        pslv = PS_STATE_S2;
 
                if (val8 & BIT(4))
                        pslv = PS_STATE_S2;
 
-#ifdef CONFIG_RTL8723A
-               val8 = rtw_btcoex_RpwmVal(padapter);
-               switch (val8)
-               {
-                       case 0x4:
-                               pslv = PS_STATE_S3;
-                               break;
-
-                       case 0xC:
-                               pslv = PS_STATE_S4;
-                               break;
-               }
-#endif // CONFIG_RTL8723A
        }
 #endif // CONFIG_BT_COEXIST
 
        }
 #endif // CONFIG_BT_COEXIST
 
@@ -1826,24 +1763,6 @@ _func_enter_;
        pwrctrl = adapter_to_pwrctl(padapter);
        pslv = PS_STATE_S2;
 
        pwrctrl = adapter_to_pwrctl(padapter);
        pslv = PS_STATE_S2;
 
-#if defined(CONFIG_RTL8723A) && defined(CONFIG_BT_COEXIST)
-       if (rtw_btcoex_IsBtControlLps(padapter) == _TRUE)
-       {
-               u8 btcoex_rpwm;
-               btcoex_rpwm = rtw_btcoex_RpwmVal(padapter);
-               switch (btcoex_rpwm)
-               {
-                       case 0x4:
-                               pslv = PS_STATE_S3;
-                               break;
-
-                       case 0xC:
-                               pslv = PS_STATE_S4;
-                               break;
-               }
-       }
-#endif // CONFIG_RTL8723A & CONFIG_BT_COEXIST
-
        _enter_pwrlock(&pwrctrl->lock);
 
        register_task_alive(pwrctrl, XMIT_ALIVE);
        _enter_pwrlock(&pwrctrl->lock);
 
        register_task_alive(pwrctrl, XMIT_ALIVE);
@@ -1903,24 +1822,6 @@ _func_enter_;
        pwrctrl = adapter_to_pwrctl(padapter);
        pslv = PS_STATE_S2;
 
        pwrctrl = adapter_to_pwrctl(padapter);
        pslv = PS_STATE_S2;
 
-#if defined(CONFIG_RTL8723A) && defined(CONFIG_BT_COEXIST)
-       if (rtw_btcoex_IsBtControlLps(padapter) == _TRUE)
-       {
-               u8 btcoex_rpwm;
-               btcoex_rpwm = rtw_btcoex_RpwmVal(padapter);
-               switch (btcoex_rpwm)
-               {
-                       case 0x4:
-                               pslv = PS_STATE_S3;
-                               break;
-
-                       case 0xC:
-                               pslv = PS_STATE_S4;
-                               break;
-               }
-       }
-#endif // CONFIG_RTL8723A & CONFIG_BT_COEXIST
-
        _enter_pwrlock(&pwrctrl->lock);
 
        register_task_alive(pwrctrl, CMD_ALIVE);
        _enter_pwrlock(&pwrctrl->lock);
 
        register_task_alive(pwrctrl, CMD_ALIVE);
@@ -2044,19 +1945,6 @@ _func_enter_;
                if (val8 & BIT(4))
                        pslv = PS_STATE_S2;
 
                if (val8 & BIT(4))
                        pslv = PS_STATE_S2;
 
-#ifdef CONFIG_RTL8723A
-               val8 = rtw_btcoex_RpwmVal(padapter);
-               switch (val8)
-               {
-                       case 0x4:
-                               pslv = PS_STATE_S3;
-                               break;
-
-                       case 0xC:
-                               pslv = PS_STATE_S4;
-                               break;
-               }
-#endif // CONFIG_RTL8723A
        }
 #endif // CONFIG_BT_COEXIST
 
        }
 #endif // CONFIG_BT_COEXIST
 
@@ -2124,19 +2012,6 @@ _func_enter_;
                if (val8 & BIT(4))
                        pslv = PS_STATE_S2;
 
                if (val8 & BIT(4))
                        pslv = PS_STATE_S2;
 
-#ifdef CONFIG_RTL8723A
-               val8 = rtw_btcoex_RpwmVal(padapter);
-               switch (val8)
-               {
-                       case 0x4:
-                               pslv = PS_STATE_S3;
-                               break;
-
-                       case 0xC:
-                               pslv = PS_STATE_S4;
-                               break;
-               }
-#endif // CONFIG_RTL8723A
        }
 #endif // CONFIG_BT_COEXIST
 
        }
 #endif // CONFIG_BT_COEXIST
 
@@ -2245,6 +2120,8 @@ _func_enter_;
        pwrctrlpriv->rf_pwrstate = rf_on;
        pwrctrlpriv->ips_enter_cnts=0;
        pwrctrlpriv->ips_leave_cnts=0;
        pwrctrlpriv->rf_pwrstate = rf_on;
        pwrctrlpriv->ips_enter_cnts=0;
        pwrctrlpriv->ips_leave_cnts=0;
+       pwrctrlpriv->lps_enter_cnts=0;
+       pwrctrlpriv->lps_leave_cnts=0;
        pwrctrlpriv->bips_processing = _FALSE;
 
        pwrctrlpriv->ips_mode = padapter->registrypriv.ips_mode;
        pwrctrlpriv->bips_processing = _FALSE;
 
        pwrctrlpriv->ips_mode = padapter->registrypriv.ips_mode;
index a5e4e2d4a333cdf625c19570a23a2352163d5d6f..27bf5844f73fdd1276069fb523504c79e60fdaff 100755 (executable)
@@ -20,6 +20,7 @@
 #define _RTW_RECV_C_
 
 #include <drv_types.h>
 #define _RTW_RECV_C_
 
 #include <drv_types.h>
+#include <hal_data.h>
 
 #if defined (PLATFORM_LINUX) && defined (PLATFORM_WINDOWS)
 
 
 #if defined (PLATFORM_LINUX) && defined (PLATFORM_WINDOWS)
 
 
 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
 void rtw_signal_stat_timer_hdl(RTW_TIMER_HDL_ARGS);
 
 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
 void rtw_signal_stat_timer_hdl(RTW_TIMER_HDL_ARGS);
-#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
 
 
+enum {
+       SIGNAL_STAT_CALC_PROFILE_0 = 0,
+       SIGNAL_STAT_CALC_PROFILE_1,
+       SIGNAL_STAT_CALC_PROFILE_MAX
+};
+
+u8 signal_stat_calc_profile[SIGNAL_STAT_CALC_PROFILE_MAX][2] = {
+       {4, 1}, /* Profile 0 => pre_stat : curr_stat = 4 : 1 */
+       {3, 7}  /* Profile 1 => pre_stat : curr_stat = 3 : 7 */
+};
+
+#ifndef RTW_SIGNAL_STATE_CALC_PROFILE  
+#define RTW_SIGNAL_STATE_CALC_PROFILE SIGNAL_STAT_CALC_PROFILE_0
+#endif
+
+#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
 
 void _rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv)
 {
 
 void _rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv)
 {
@@ -646,7 +662,7 @@ _func_enter_;
 #ifdef CONFIG_CONCURRENT_MODE
                if(!IS_MCAST(prxattrib->ra))//bc/mc packets use sw decryption for concurrent mode
 #endif                 
 #ifdef CONFIG_CONCURRENT_MODE
                if(!IS_MCAST(prxattrib->ra))//bc/mc packets use sw decryption for concurrent mode
 #endif                 
-               psecuritypriv->hw_decrypted=_FALSE;
+                       psecuritypriv->hw_decrypted=_FALSE;
 
                #ifdef DBG_RX_DECRYPTOR
                DBG_871X("[%s] %d:prxstat->bdecrypted:%d,  prxattrib->encrypt:%d,  Setting psecuritypriv->hw_decrypted = %d\n",
 
                #ifdef DBG_RX_DECRYPTOR
                DBG_871X("[%s] %d:prxstat->bdecrypted:%d,  prxattrib->encrypt:%d,  Setting psecuritypriv->hw_decrypted = %d\n",
@@ -998,10 +1014,10 @@ sint OnTDLS(_adapter *adapter, union recv_frame *precv_frame)
        u8 category_field = 1;
 #ifdef CONFIG_WFD
        u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a };
        u8 category_field = 1;
 #ifdef CONFIG_WFD
        u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a };
-#endif //CONFIG_WFD
+#endif /* CONFIG_WFD */
        struct tdls_info *ptdlsinfo = &(adapter->tdlsinfo);
 
        struct tdls_info *ptdlsinfo = &(adapter->tdlsinfo);
 
-       //point to action field
+       /* point to action field */
        paction+=pattrib->hdrlen 
                        + pattrib->iv_len 
                        + SNAP_SIZE 
        paction+=pattrib->hdrlen 
                        + pattrib->iv_len 
                        + SNAP_SIZE 
@@ -1009,82 +1025,76 @@ sint OnTDLS(_adapter *adapter, union recv_frame *precv_frame)
                        + PAYLOAD_TYPE_LEN 
                        + category_field;
 
                        + PAYLOAD_TYPE_LEN 
                        + category_field;
 
-       if(ptdlsinfo->tdls_enable == _FALSE)
-       {
+       if (ptdlsinfo->tdls_enable == _FALSE) {
                DBG_871X("recv tdls frame, "
                                "but tdls haven't enabled\n");
                ret = _FAIL;
                return ret;
        }
                DBG_871X("recv tdls frame, "
                                "but tdls haven't enabled\n");
                ret = _FAIL;
                return ret;
        }
+
+       DBG_871X("[TDLS] Recv %s from "MAC_FMT"\n", rtw_tdls_action_txt(*paction), MAC_ARG(pattrib->src));
        
        switch(*paction){
        
        switch(*paction){
-               case TDLS_SETUP_REQUEST:
-                       DBG_871X("recv tdls setup request frame from "MAC_FMT"\n", MAC_ARG(pattrib->src));
-                       ret=On_TDLS_Setup_Req(adapter, precv_frame);
-                       break;
-               case TDLS_SETUP_RESPONSE:
-                       DBG_871X("recv tdls setup response frame from "MAC_FMT"\n", MAC_ARG(pattrib->src));
-                       ret=On_TDLS_Setup_Rsp(adapter, precv_frame);
-                       break;
-               case TDLS_SETUP_CONFIRM:
-                       DBG_871X("recv tdls setup confirm frame from "MAC_FMT"\n", MAC_ARG(pattrib->src));
-                       ret=On_TDLS_Setup_Cfm(adapter, precv_frame);
-                       break;
-               case TDLS_TEARDOWN:
-                       DBG_871X("recv tdls teardown, free sta_info from "MAC_FMT"\n", MAC_ARG(pattrib->src));
-                       ret=On_TDLS_Teardown(adapter, precv_frame);
-                       break;
-               case TDLS_DISCOVERY_REQUEST:
-                       DBG_871X("recv tdls discovery request frame from "MAC_FMT"\n", MAC_ARG(pattrib->src));
-                       ret=On_TDLS_Dis_Req(adapter, precv_frame);
-                       break;
-               case TDLS_PEER_TRAFFIC_INDICATION:
-                       DBG_871X("recv tdls peer traffic indication frame\n");
-                       ret=On_TDLS_Peer_Traffic_Indication(adapter, precv_frame);
-                       break;
-               case TDLS_PEER_TRAFFIC_RESPONSE:
-                       DBG_871X("recv tdls peer traffic response frame\n");
-                       ret=On_TDLS_Peer_Traffic_Rsp(adapter, precv_frame);
-                       break;
-               case TDLS_CHANNEL_SWITCH_REQUEST:
-                       DBG_871X("recv tdls channel switch request frame\n");
-                       ret=On_TDLS_Ch_Switch_Req(adapter, precv_frame);
-                       break;
-               case TDLS_CHANNEL_SWITCH_RESPONSE:
-                       DBG_871X("recv tdls channel switch response frame\n");
-                       ret=On_TDLS_Ch_Switch_Rsp(adapter, precv_frame);
-                       break;
+       case TDLS_SETUP_REQUEST:
+               ret=On_TDLS_Setup_Req(adapter, precv_frame);
+               break;
+       case TDLS_SETUP_RESPONSE:
+               ret=On_TDLS_Setup_Rsp(adapter, precv_frame);
+               break;
+       case TDLS_SETUP_CONFIRM:
+               ret=On_TDLS_Setup_Cfm(adapter, precv_frame);
+               break;
+       case TDLS_TEARDOWN:
+               ret=On_TDLS_Teardown(adapter, precv_frame);
+               break;
+       case TDLS_DISCOVERY_REQUEST:
+               ret=On_TDLS_Dis_Req(adapter, precv_frame);
+               break;
+       case TDLS_PEER_TRAFFIC_INDICATION:
+               ret=On_TDLS_Peer_Traffic_Indication(adapter, precv_frame);
+               break;
+       case TDLS_PEER_TRAFFIC_RESPONSE:
+               ret=On_TDLS_Peer_Traffic_Rsp(adapter, precv_frame);
+               break;
+#ifdef CONFIG_TDLS_CH_SW               
+       case TDLS_CHANNEL_SWITCH_REQUEST:
+               ret=On_TDLS_Ch_Switch_Req(adapter, precv_frame);
+               break;
+       case TDLS_CHANNEL_SWITCH_RESPONSE:
+               ret=On_TDLS_Ch_Switch_Rsp(adapter, precv_frame);
+               break;
+#endif         
 #ifdef CONFIG_WFD                      
 #ifdef CONFIG_WFD                      
-               case 0x50:      //First byte of WFA OUI
-                       if( _rtw_memcmp(WFA_OUI, (paction), 3) )
-                       {
-                               if( *(paction + 3) == 0x04)     //Probe request frame
-                               {
-                                       //WFDTDLS: for sigma test, do not setup direct link automatically
-                                       ptdlsinfo->dev_discovered = 1;
-                                       DBG_871X("recv tunneled probe request frame\n");
-                                       issue_tunneled_probe_rsp(adapter, precv_frame);
-                               }
-                               if( *(paction + 3) == 0x05)     //Probe response frame
-                               {
-                                       //WFDTDLS: for sigma test, do not setup direct link automatically
-                                       ptdlsinfo->dev_discovered = 1;
-                                       DBG_871X("recv tunneled probe response frame\n");
-                               }
+       /* First byte of WFA OUI */
+       case 0x50:
+               if (_rtw_memcmp(WFA_OUI, paction, 3)) {
+                       /* Probe request frame */
+                       if (*(paction + 3) == 0x04) {
+                               /* WFDTDLS: for sigma test, do not setup direct link automatically */
+                               ptdlsinfo->dev_discovered = _TRUE;
+                               DBG_871X("recv tunneled probe request frame\n");
+                               issue_tunneled_probe_rsp(adapter, precv_frame);
                        }
                        }
-                       break;
-#endif //CONFIG_WFD
-               default:
-                       DBG_871X("receive TDLS frame %d but not support\n", *paction);
-                       ret=_FAIL;
-                       break;
+                       /* Probe response frame */ 
+                       if (*(paction + 3) == 0x05) {
+                               /* WFDTDLS: for sigma test, do not setup direct link automatically */
+                               ptdlsinfo->dev_discovered = _TRUE;
+                               DBG_871X("recv tunneled probe response frame\n");
+                       }
+               }
+               break;
+#endif /* CONFIG_WFD */
+       default:
+               DBG_871X("receive TDLS frame %d but not support\n", *paction);
+               ret=_FAIL;
+               break;
        }
 
 exit:
        return ret;
        
 }
        }
 
 exit:
        return ret;
        
 }
-#endif
+#endif /* CONFIG_TDLS */
 
 void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_info*sta);
 void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_info*sta)
 
 void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_info*sta);
 void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_info*sta)
@@ -1117,7 +1127,6 @@ void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_in
                pstats->rx_bytes += sz;
 
 #ifdef CONFIG_TDLS
                pstats->rx_bytes += sz;
 
 #ifdef CONFIG_TDLS
-
                if(psta->tdls_sta_state & TDLS_LINKED_STATE)
                {
                        struct sta_info *pap_sta = NULL;
                if(psta->tdls_sta_state & TDLS_LINKED_STATE)
                {
                        struct sta_info *pap_sta = NULL;
@@ -1155,12 +1164,15 @@ sint sta2sta_data_frame(
        struct  sta_priv                *pstapriv = &adapter->stapriv;
        struct  mlme_priv       *pmlmepriv = &adapter->mlmepriv;
        u8 *mybssid  = get_bssid(pmlmepriv);
        struct  sta_priv                *pstapriv = &adapter->stapriv;
        struct  mlme_priv       *pmlmepriv = &adapter->mlmepriv;
        u8 *mybssid  = get_bssid(pmlmepriv);
-       u8 *myhwaddr = myid(&adapter->eeprompriv);
+       u8 *myhwaddr = adapter_mac_addr(adapter);
        u8 * sta_addr = NULL;
        sint bmcast = IS_MCAST(pattrib->dst);
 
 #ifdef CONFIG_TDLS     
        struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
        u8 * sta_addr = NULL;
        sint bmcast = IS_MCAST(pattrib->dst);
 
 #ifdef CONFIG_TDLS     
        struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
+#ifdef CONFIG_TDLS_CH_SW
+       struct tdls_ch_switch *pchsw_info = &ptdlsinfo->chsw_info;
+#endif
        struct sta_info *ptdls_sta=NULL;
        u8 *psnap_type=ptr+pattrib->hdrlen + pattrib->iv_len+SNAP_SIZE;
        //frame body located after [+2]: ether-type, [+1]: payload type
        struct sta_info *ptdls_sta=NULL;
        u8 *psnap_type=ptr+pattrib->hdrlen + pattrib->iv_len+SNAP_SIZE;
        //frame body located after [+2]: ether-type, [+1]: payload type
@@ -1201,69 +1213,66 @@ _func_enter_;
        {
 #ifdef CONFIG_TDLS
 
        {
 #ifdef CONFIG_TDLS
 
-               //direct link data transfer
-               if(ptdlsinfo->link_established == _TRUE){
+               /* direct link data transfer */
+               if (ptdlsinfo->link_established == _TRUE) {
                        ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);
                        ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);
-                       if(ptdls_sta==NULL)
-                       {
+                       if (ptdls_sta == NULL) {
                                ret=_FAIL;
                                goto exit;
                                ret=_FAIL;
                                goto exit;
-                       }
-                       else if(ptdls_sta->tdls_sta_state&TDLS_LINKED_STATE)
-                       {
-                               // filter packets that SA is myself or multicast or broadcast
-                               if (_rtw_memcmp(myhwaddr, pattrib->src, ETH_ALEN)){
+                       } else if (ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) {
+                               /* filter packets that SA is myself or multicast or broadcast */
+                               if (_rtw_memcmp(myhwaddr, pattrib->src, ETH_ALEN)) {
                                        ret= _FAIL;
                                        goto exit;
                                }
                                        ret= _FAIL;
                                        goto exit;
                                }
-                               // da should be for me
-                               if((!_rtw_memcmp(myhwaddr, pattrib->dst, ETH_ALEN))&& (!bmcast))
-                               {
+                               /* da should be for me */
+                               if ((!_rtw_memcmp(myhwaddr, pattrib->dst, ETH_ALEN)) && (!bmcast)) {
                                        ret= _FAIL;
                                        goto exit;
                                }
                                        ret= _FAIL;
                                        goto exit;
                                }
-                               // check BSSID
-                               if_rtw_memcmp(pattrib->bssid, "\x0\x0\x0\x0\x0\x0", ETH_ALEN) ||
+                               /* check BSSID */
+                               if (_rtw_memcmp(pattrib->bssid, "\x0\x0\x0\x0\x0\x0", ETH_ALEN) ||
                                     _rtw_memcmp(mybssid, "\x0\x0\x0\x0\x0\x0", ETH_ALEN) ||
                                     _rtw_memcmp(mybssid, "\x0\x0\x0\x0\x0\x0", ETH_ALEN) ||
-                                    (!_rtw_memcmp(pattrib->bssid, mybssid, ETH_ALEN)) )
-                               {
+                                    (!_rtw_memcmp(pattrib->bssid, mybssid, ETH_ALEN))) {
                                        ret= _FAIL;
                                        goto exit;
                                }
 
                                        ret= _FAIL;
                                        goto exit;
                                }
 
-                               //process UAPSD tdls sta
+#ifdef CONFIG_TDLS_CH_SW
+                               pchsw_info->ch_sw_state |= TDLS_PEER_AT_OFF_STATE;
+
+                               if(ATOMIC_READ(&pchsw_info->chsw_on) == _TRUE) {
+                                       if (!(pchsw_info->ch_sw_state & TDLS_PEER_AT_OFF_STATE)) {
+                                               DBG_871X("%s %d\n", __FUNCTION__, __LINE__);
+                                               issue_nulldata_to_TDLS_peer_STA(adapter, ptdls_sta->hwaddr, 0, 0, 0);
+                                               pchsw_info->ch_sw_state |= TDLS_PEER_AT_OFF_STATE;
+                                               /* On_TDLS_Peer_Traffic_Rsp(adapter, precv_frame); */
+                                       }
+                               }
+#endif
+
+                               /* process UAPSD tdls sta */
                                process_pwrbit_data(adapter, precv_frame);
 
                                process_pwrbit_data(adapter, precv_frame);
 
-                               // if NULL-frame, check pwrbit
-                               if ((GetFrameSubType(ptr) & WIFI_DATA_NULL) == WIFI_DATA_NULL)
-                               {
-                                       //NULL-frame with pwrbit=1, buffer_STA should buffer frames for sleep_STA
-                                       if(GetPwrMgt(ptr))
-                                       {
+                               /* if NULL-frame, check pwrbit */
+                               if ((GetFrameSubType(ptr) & WIFI_DATA_NULL) == WIFI_DATA_NULL) {
+                                       /* NULL-frame with pwrbit=1, buffer_STA should buffer frames for sleep_STA */
+                                       if (GetPwrMgt(ptr)) {
+                                               /* it would be triggered when we are off channel and receiving NULL DATA */
+                                               /* we can confirm that peer STA is at off channel */
                                                DBG_871X("TDLS: recv peer null frame with pwr bit 1\n");
                                                //ptdls_sta->tdls_sta_state|=TDLS_PEER_SLEEP_STATE;
                                                DBG_871X("TDLS: recv peer null frame with pwr bit 1\n");
                                                //ptdls_sta->tdls_sta_state|=TDLS_PEER_SLEEP_STATE;
-                                       // it would be triggered when we are off channel and receiving NULL DATA
-                                       // we can confirm that peer STA is at off channel
-                                       }
-                                       else if(ptdls_sta->tdls_sta_state&TDLS_CH_SWITCH_ON_STATE)
-                                       {
-                                               if((ptdls_sta->tdls_sta_state & TDLS_PEER_AT_OFF_STATE) != TDLS_PEER_AT_OFF_STATE)
-                                               {
-                                                       issue_nulldata_to_TDLS_peer_STA(adapter, ptdls_sta->hwaddr, 0, 0, 0);
-                                                       ptdls_sta->tdls_sta_state |= TDLS_PEER_AT_OFF_STATE;
-                                                       On_TDLS_Peer_Traffic_Rsp(adapter, precv_frame);
-                                               }
                                        }
 
                                        }
 
-                                       //[TDLS] TODO: Updated BSSID's seq.
-                                       DBG_871X("drop Null Data\n");
+                                       /* TODO: Updated BSSID's seq. */
+                                       //DBG_871X("drop Null Data\n");
                                        ptdls_sta->tdls_sta_state &= ~(TDLS_WAIT_PTR_STATE);
                                        ret= _FAIL;
                                        goto exit;
                                }
 
                                        ptdls_sta->tdls_sta_state &= ~(TDLS_WAIT_PTR_STATE);
                                        ret= _FAIL;
                                        goto exit;
                                }
 
-                               //receive some of all TDLS management frames, process it at ON_TDLS
-                               if((_rtw_memcmp(psnap_type, SNAP_ETH_TYPE_TDLS, 2))){
+                               /* receive some of all TDLS management frames, process it at ON_TDLS */
+                               if (_rtw_memcmp(psnap_type, SNAP_ETH_TYPE_TDLS, 2)) {
                                        ret= OnTDLS(adapter, precv_frame);
                                        goto exit;
                                }
                                        ret= OnTDLS(adapter, precv_frame);
                                        goto exit;
                                }
@@ -1280,7 +1289,7 @@ _func_enter_;
                        
                }               
                else
                        
                }               
                else
-#endif //CONFIG_TDLS
+#endif /* CONFIG_TDLS */
                {
                        // For Station mode, sa and bssid should always be BSSID, and DA is my mac-address
                        if(!_rtw_memcmp(pattrib->bssid, pattrib->src, ETH_ALEN) )
                {
                        // For Station mode, sa and bssid should always be BSSID, and DA is my mac-address
                        if(!_rtw_memcmp(pattrib->bssid, pattrib->src, ETH_ALEN) )
@@ -1351,7 +1360,7 @@ _func_enter_;
                if (adapter->registrypriv.mp_mode == 1)
                {
                        if(check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
                if (adapter->registrypriv.mp_mode == 1)
                {
                        if(check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
-                       adapter->mppriv.rx_pktloss++;
+                               adapter->mppriv.rx_pktloss++;
                }
 #endif
                ret= _FAIL;
                }
 #endif
                ret= _FAIL;
@@ -1379,7 +1388,7 @@ sint ap2sta_data_frame(
        struct  sta_priv                *pstapriv = &adapter->stapriv;
        struct  mlme_priv       *pmlmepriv = &adapter->mlmepriv;
        u8 *mybssid  = get_bssid(pmlmepriv);
        struct  sta_priv                *pstapriv = &adapter->stapriv;
        struct  mlme_priv       *pmlmepriv = &adapter->mlmepriv;
        u8 *mybssid  = get_bssid(pmlmepriv);
-       u8 *myhwaddr = myid(&adapter->eeprompriv);
+       u8 *myhwaddr = adapter_mac_addr(adapter);
        sint bmcast = IS_MCAST(pattrib->dst);
 
 _func_enter_;
        sint bmcast = IS_MCAST(pattrib->dst);
 
 _func_enter_;
@@ -1473,7 +1482,8 @@ _func_enter_;
                _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
 
                //
                _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
 
                //
-               _rtw_memcpy(pattrib->bssid,  mybssid, ETH_ALEN);
+               if(adapter->mppriv.bRTWSmbCfg==_FALSE)
+                       _rtw_memcpy(pattrib->bssid,  mybssid, ETH_ALEN);
 
 
                *psta = rtw_get_stainfo(pstapriv, pattrib->bssid); // get sta_info
 
 
                *psta = rtw_get_stainfo(pstapriv, pattrib->bssid); // get sta_info
@@ -1587,17 +1597,15 @@ _func_enter_;
        else if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE) &&
                     (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) )
        {
        else if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE) &&
                     (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) )
        {
-               DBG_871X("%s ,in WIFI_MP_STATE \n",__func__);
-
+               //DBG_871X("%s ,in WIFI_MP_STATE \n",__func__);
                _rtw_memcpy(pattrib->dst, GetAddr1Ptr(ptr), ETH_ALEN);
                _rtw_memcpy(pattrib->src, GetAddr2Ptr(ptr), ETH_ALEN);
                _rtw_memcpy(pattrib->bssid, GetAddr3Ptr(ptr), ETH_ALEN);
                _rtw_memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
                _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
                _rtw_memcpy(pattrib->dst, GetAddr1Ptr(ptr), ETH_ALEN);
                _rtw_memcpy(pattrib->src, GetAddr2Ptr(ptr), ETH_ALEN);
                _rtw_memcpy(pattrib->bssid, GetAddr3Ptr(ptr), ETH_ALEN);
                _rtw_memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
                _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
                //
                //
-               _rtw_memcpy(pattrib->bssid,  mybssid, ETH_ALEN);
-
+               if(adapter->mppriv.bRTWSmbCfg == _FALSE)
+                       _rtw_memcpy(pattrib->bssid,  mybssid, ETH_ALEN);
 
                *psta = rtw_get_stainfo(pstapriv, pattrib->bssid); // get sta_info
                if (*psta == NULL) {
 
                *psta = rtw_get_stainfo(pstapriv, pattrib->bssid); // get sta_info
                if (*psta == NULL) {
@@ -1611,7 +1619,7 @@ _func_enter_;
 
        }
        else {
 
        }
        else {
-               u8 *myhwaddr = myid(&adapter->eeprompriv);
+               u8 *myhwaddr = adapter_mac_addr(adapter);
                if (!_rtw_memcmp(pattrib->ra, myhwaddr, ETH_ALEN)) {
                        ret = RTW_RX_HANDLED;
                        goto exit;
                if (!_rtw_memcmp(pattrib->ra, myhwaddr, ETH_ALEN)) {
                        ret = RTW_RX_HANDLED;
                        goto exit;
@@ -1647,10 +1655,8 @@ sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv_frame)
        }
 
        //receive the frames that ra(a1) is my address
        }
 
        //receive the frames that ra(a1) is my address
-       if (!_rtw_memcmp(GetAddr1Ptr(pframe), myid(&padapter->eeprompriv), ETH_ALEN))
-       {
+       if (!_rtw_memcmp(GetAddr1Ptr(pframe), adapter_mac_addr(padapter), ETH_ALEN))
                return _FAIL;
                return _FAIL;
-       }
 
        psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
        if (psta==NULL)
 
        psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
        if (psta==NULL)
@@ -1842,7 +1848,7 @@ sint validate_recv_mgnt_frame(PADAPTER padapter, union recv_frame *precv_frame)
                        else if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_PROBEREQ)
                                psta->sta_stats.rx_probereq_pkts++;
                        else if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_PROBERSP) {
                        else if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_PROBEREQ)
                                psta->sta_stats.rx_probereq_pkts++;
                        else if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_PROBERSP) {
-                               if (_rtw_memcmp(padapter->eeprompriv.mac_addr, GetAddr1Ptr(precv_frame->u.hdr.rx_data), ETH_ALEN) == _TRUE)
+                               if (_rtw_memcmp(adapter_mac_addr(padapter), GetAddr1Ptr(precv_frame->u.hdr.rx_data), ETH_ALEN) == _TRUE)
                                        psta->sta_stats.rx_probersp_pkts++;
                                else if (is_broadcast_mac_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data))
                                        || is_multicast_mac_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data)))
                                        psta->sta_stats.rx_probersp_pkts++;
                                else if (is_broadcast_mac_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data))
                                        || is_multicast_mac_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data)))
@@ -2009,9 +2015,9 @@ _func_enter_;
                pattrib->hdrlen = pattrib->to_fr_ds==3 ? 32 : 26;
 
                if(pattrib->priority!=0 && pattrib->priority!=3)
                pattrib->hdrlen = pattrib->to_fr_ds==3 ? 32 : 26;
 
                if(pattrib->priority!=0 && pattrib->priority!=3)
-               {
                        adapter->recvpriv.bIsAnyNonBEPkts = _TRUE;
                        adapter->recvpriv.bIsAnyNonBEPkts = _TRUE;
-               }
+               else
+                       adapter->recvpriv.bIsAnyNonBEPkts = _FALSE;
        }
        else
        {
        }
        else
        {
@@ -2038,14 +2044,6 @@ _func_enter_;
                goto exit;
        }
 
                goto exit;
        }
 
-#if 0
-       if(psta->tdls_sta_state & TDLS_LINKED_STATE )
-       {
-               if(psta->dot118021XPrivacy==_AES_)
-                       pattrib->encrypt=psta->dot118021XPrivacy;
-       }
-#endif //CONFIG_TDLS
-
        if(pattrib->privacy){
 
                RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("validate_recv_data_frame:pattrib->privacy=%x\n", pattrib->privacy));
        if(pattrib->privacy){
 
                RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("validate_recv_data_frame:pattrib->privacy=%x\n", pattrib->privacy));
@@ -2695,6 +2693,7 @@ static void recvframe_expand_pkt(
        _pkt *ppkt;
        u8 shift_sz;
        u32 alloc_sz;
        _pkt *ppkt;
        u8 shift_sz;
        u32 alloc_sz;
+       u8 *ptr;
 
 
        pfhdr = &prframe->u.hdr;
 
 
        pfhdr = &prframe->u.hdr;
@@ -2724,7 +2723,9 @@ static void recvframe_expand_pkt(
        skb_reserve(ppkt, shift_sz);
 
        // copy data to new pkt
        skb_reserve(ppkt, shift_sz);
 
        // copy data to new pkt
-       _rtw_memcpy(skb_put(ppkt, pfhdr->len), pfhdr->rx_data, pfhdr->len);
+       ptr = skb_put(ppkt, pfhdr->len);
+       if (ptr)
+               _rtw_memcpy(ptr, pfhdr->rx_data, pfhdr->len);
 
        rtw_skb_free(pfhdr->pkt);
 
 
        rtw_skb_free(pfhdr->pkt);
 
@@ -3703,6 +3704,8 @@ static sint MPwlanhdr_to_ethhdr ( union recv_frame *precvframe)
        u16 eth_type, len;
        u8      bsnaphdr;
        u8      *psnap_type;
        u16 eth_type, len;
        u8      bsnaphdr;
        u8      *psnap_type;
+       u8 mcastheadermac[]={0x01,0x00,0x5e};
+       
        struct ieee80211_snap_hdr       *psnap;
        
        sint ret=_SUCCESS;
        struct ieee80211_snap_hdr       *psnap;
        
        sint ret=_SUCCESS;
@@ -3756,19 +3759,28 @@ _func_enter_;
                _rtw_memcpy(ptr+12, &len, 2);
        }
        
                _rtw_memcpy(ptr+12, &len, 2);
        }
        
-       if (adapter->registrypriv.mp_mode == 1)
-       {
+
                len = htons(pattrib->seq_num);
                //DBG_871X("wlan seq = %d ,seq_num =%x\n",len,pattrib->seq_num);
                _rtw_memcpy(ptr+12,&len, 2);
                len = htons(pattrib->seq_num);
                //DBG_871X("wlan seq = %d ,seq_num =%x\n",len,pattrib->seq_num);
                _rtw_memcpy(ptr+12,&len, 2);
+       if(adapter->mppriv.bRTWSmbCfg==_TRUE)
+       {
+//             if(_rtw_memcmp(mcastheadermac, pattrib->dst, 3) == _TRUE)//SimpleConfig Dest.
+//                     _rtw_memcpy(ptr+ETH_ALEN, pattrib->bssid, ETH_ALEN);
+
+               if(_rtw_memcmp(mcastheadermac, pattrib->bssid, 3) == _TRUE) //SimpleConfig Dest.
+                       _rtw_memcpy(ptr, pattrib->bssid, ETH_ALEN);
+
        }
        }
+
+       
 _func_exit_;   
        return ret;
 
 }
 
 
 _func_exit_;   
        return ret;
 
 }
 
 
-int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe)
+int mp_recv_frame(_adapter *padapter, union recv_frame *rframe)
 {
        int ret = _SUCCESS;
        struct rx_pkt_attrib *pattrib = &rframe->u.hdr.attrib;
 {
        int ret = _SUCCESS;
        struct rx_pkt_attrib *pattrib = &rframe->u.hdr.attrib;
@@ -3782,37 +3794,30 @@ int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe)
        u8 *ptr = rframe->u.hdr.rx_data;
        u8 *psa, *pda, *pbssid;
        struct sta_info *psta = NULL;
        u8 *ptr = rframe->u.hdr.rx_data;
        u8 *psa, *pda, *pbssid;
        struct sta_info *psta = NULL;
-    DBG_COUNTER(padapter->rx_logs.core_rx_pre);
-
-#ifdef CONFIG_MP_INCLUDED
-       if (padapter->registrypriv.mp_mode == 1)
+       DBG_COUNTER(padapter->rx_logs.core_rx_pre);
+       
+       if ( (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) )//&&(padapter->mppriv.check_mp_pkt == 0))
        {
        {
-       
-               if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE) && (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) )//&&(padapter->mppriv.check_mp_pkt == 0))
+               if (pattrib->crc_err == 1){
+                       padapter->mppriv.rx_crcerrpktcount++;
+               }
+               else{
+                       if(_SUCCESS == validate_mp_recv_frame(padapter, rframe))
+                               padapter->mppriv.rx_pktcount++;
+                       else
+                               padapter->mppriv.rx_pktcount_filter_out++;
+               }
+
+               if(pmppriv->rx_bindicatePkt == _FALSE)
                {
                {
-                       if (pattrib->crc_err == 1){
-                               padapter->mppriv.rx_crcerrpktcount++;
-                       }
-                       else{
-                               if(_SUCCESS == validate_mp_recv_frame(padapter, rframe))
-                                       padapter->mppriv.rx_pktcount++;
-                               else
-                                       padapter->mppriv.rx_pktcount_filter_out++;
-                               
-                       }
-                       
-                       if(pmppriv->rx_bindicatePkt == _FALSE)
-                       {
-                               //if (check_fwstate(pmlmepriv, WIFI_MP_LPBK_STATE) == _FALSE) {
-                                       //RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("MP - Not in loopback mode , drop pkt \n"));
-                                       ret = _FAIL;
-                                       rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
-                                       goto exit;
-                               
-                       }
-                       else {                  
-                       
-                       type =  GetFrameType(ptr);
+                       //RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("MP - Not in loopback mode , drop pkt \n"));
+                       ret = _FAIL;
+                       rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
+                       goto exit;
+               }
+               else 
+               {                               
+                       type =  GetFrameType(ptr);
                        pattrib->to_fr_ds = get_tofr_ds(ptr);
                        pattrib->frag_num = GetFragNum(ptr);
                        pattrib->seq_num = GetSequence(ptr);
                        pattrib->to_fr_ds = get_tofr_ds(ptr);
                        pattrib->frag_num = GetFragNum(ptr);
                        pattrib->seq_num = GetSequence(ptr);
@@ -3870,22 +3875,21 @@ int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe)
                                
                        if (ret != _SUCCESS)
                        {
                                
                        if (ret != _SUCCESS)
                        {
-                                                       RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("wlanhdr_to_ethhdr: drop pkt \n"));
+                               RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("wlanhdr_to_ethhdr: drop pkt \n"));
                                #ifdef DBG_RX_DROP_FRAME
                                #ifdef DBG_RX_DROP_FRAME
-                                                       DBG_871X("DBG_RX_DROP_FRAME %s wlanhdr_to_ethhdr: drop pkt\n", __FUNCTION__);
+                                       DBG_871X("DBG_RX_DROP_FRAME %s wlanhdr_to_ethhdr: drop pkt\n", __FUNCTION__);
                                #endif
                                #endif
-                                                       rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
-                                                       ret = _FAIL;
-                                                       goto exit;
-                                               }
-                               
-                                               if ((padapter->bDriverStopped == _FALSE) && (padapter->bSurpriseRemoved == _FALSE))
-                                               {
-                                                       RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("@@@@ recv_func: recv_func rtw_recv_indicatepkt\n" ));
+                                       rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
+                                       ret = _FAIL;
+                                       goto exit;
+                               }
+                               if ((padapter->bDriverStopped == _FALSE) && (padapter->bSurpriseRemoved == _FALSE))
+                               {
+                                       RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("@@@@ recv_func: recv_func rtw_recv_indicatepkt\n" ));
                                                        //indicate this recv_frame
                                                        //indicate this recv_frame
-                                                       ret = rtw_recv_indicatepkt(padapter, rframe);
-                                                       if (ret != _SUCCESS)
-                                                       {       
+                                       ret = rtw_recv_indicatepkt(padapter, rframe);
+                                       if (ret != _SUCCESS)
+                                       {       
                                        #ifdef DBG_RX_DROP_FRAME
                                                                DBG_871X("DBG_RX_DROP_FRAME %s rtw_recv_indicatepkt fail!\n", __FUNCTION__);
                                        #endif
                                        #ifdef DBG_RX_DROP_FRAME
                                                                DBG_871X("DBG_RX_DROP_FRAME %s rtw_recv_indicatepkt fail!\n", __FUNCTION__);
                                        #endif
@@ -3893,34 +3897,414 @@ int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe)
                                                                ret = _FAIL;
 
                                                                goto exit;
                                                                ret = _FAIL;
 
                                                                goto exit;
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("@@@@  recv_func: rtw_free_recvframe\n" ));
-                                                                               RT_TRACE(_module_rtl871x_recv_c_, _drv_debug_, ("recv_func:bDriverStopped(%d) OR bSurpriseRemoved(%d)", padapter->bDriverStopped, padapter->bSurpriseRemoved));
-                                                       #ifdef DBG_RX_DROP_FRAME
-                                                                               DBG_871X("DBG_RX_DROP_FRAME %s ecv_func:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n", __FUNCTION__,
-                                                                                       padapter->bDriverStopped, padapter->bSurpriseRemoved);
-                                                       #endif
-                                                       ret = _FAIL;
-                                                       rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
-                                                       goto exit;
-                                               }
-
                                        }
                                }
                                        }
                                }
+                               else
+                               {
+                                       RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("@@@@  recv_func: rtw_free_recvframe\n" ));
+                                       RT_TRACE(_module_rtl871x_recv_c_, _drv_debug_, ("recv_func:bDriverStopped(%d) OR bSurpriseRemoved(%d)", padapter->bDriverStopped, padapter->bSurpriseRemoved));
+                                       #ifdef DBG_RX_DROP_FRAME
+                                               DBG_871X("DBG_RX_DROP_FRAME %s ecv_func:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n", __FUNCTION__,
+                                                                       padapter->bDriverStopped, padapter->bSurpriseRemoved);
+                                       #endif
+                                       ret = _FAIL;
+                                       rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
+                                               goto exit;
+                               }
+
+                       }
+               }
                                
                                
+       }
+
+       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("recv_func: validate_recv_frame fail! drop pkt\n"));
+       rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
+       ret = _FAIL;
+
+exit:
+               return ret;
+
+}
+
+static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe, u8 *buf)
+{
+#define CHAN2FREQ(a) ((a < 14)?(2407+5*a):(5000+5*a))
+
+#if 0
+#define RTW_RX_RADIOTAP_PRESENT (                 \
+               (1 << IEEE80211_RADIOTAP_TSFT)              | \
+               (1 << IEEE80211_RADIOTAP_FLAGS)             | \
+               (1 << IEEE80211_RADIOTAP_RATE)              | \
+               (1 << IEEE80211_RADIOTAP_CHANNEL)           | \
+               (0 << IEEE80211_RADIOTAP_FHSS)              | \
+               (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL)     | \
+               (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE)      | \
+               (0 << IEEE80211_RADIOTAP_LOCK_QUALITY)      | \
+               (0 << IEEE80211_RADIOTAP_TX_ATTENUATION)    | \
+               (0 << IEEE80211_RADIOTAP_DB_TX_ATTENUATION) | \
+               (0 << IEEE80211_RADIOTAP_DBM_TX_POWER)      | \
+               (1 << IEEE80211_RADIOTAP_ANTENNA)           | \
+               (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)      | \
+               (0 << IEEE80211_RADIOTAP_DB_ANTNOISE)       | \
+               (0 << IEEE80211_RADIOTAP_RX_FLAGS)          | \
+               (0 << IEEE80211_RADIOTAP_TX_FLAGS)          | \
+               (0 << IEEE80211_RADIOTAP_RTS_RETRIES)       | \
+               (0 << IEEE80211_RADIOTAP_DATA_RETRIES)      | \
+               (0 << IEEE80211_RADIOTAP_MCS)               | \
+               (0 << IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE)| \
+               (0 << IEEE80211_RADIOTAP_VENDOR_NAMESPACE)  | \
+               (0 << IEEE80211_RADIOTAP_EXT)               | \
+               0)
+
+       /* (0 << IEEE80211_RADIOTAP_AMPDU_STATUS)      | \ */
+       /* (0 << IEEE80211_RADIOTAP_VHT)               | \ */
+#endif
+#ifndef IEEE80211_RADIOTAP_MCS
+#define IEEE80211_RADIOTAP_MCS 19
+#endif
+#ifndef IEEE80211_RADIOTAP_VHT
+#define IEEE80211_RADIOTAP_VHT 21
+#endif
+
+#ifndef IEEE80211_RADIOTAP_F_BADFCS
+#define IEEE80211_RADIOTAP_F_BADFCS 0x40 /* bad FCS */
+#endif
+
+       sint ret = _SUCCESS;
+       _adapter                        *adapter = precvframe->u.hdr.adapter;
+       struct mlme_priv        *pmlmepriv = &adapter->mlmepriv;
+       struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
+
+       HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+
+       u16 tmp_16bit = 0;
+
+       u8 data_rate[] = {
+               2, 4, 11, 22, /* CCK */
+               12, 18, 24, 36, 48, 72, 93, 108, /* OFDM */
+               0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* HT MCS index */
+               16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+               0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* VHT Nss 1 */
+               0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* VHT Nss 2 */
+               0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* VHT Nss 3 */
+               0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* VHT Nss 4 */
+       };
+
+       _pkt *pskb = NULL;
+
+       struct ieee80211_radiotap_header *rtap_hdr = NULL;
+       u8 *ptr = NULL;
+
+       u8 hdr_buf[64] = {0};
+       u16 rt_len = 8;
+
+       /* create header */
+       rtap_hdr = (struct ieee80211_radiotap_header *)&hdr_buf[0];
+       rtap_hdr->it_version = PKTHDR_RADIOTAP_VERSION;
+
+       /* tsft */
+       if (pattrib->tsfl) {
+               u64 tmp_64bit;
+
+               rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_TSFT);
+               tmp_64bit = cpu_to_le64(pattrib->tsfl);
+               memcpy(&hdr_buf[rt_len], &tmp_64bit, 8);
+               rt_len += 8;
+       }
+
+       /* flags */
+       rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_FLAGS);
+       if (0)
+               hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_CFP;
+
+       if (0)
+               hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_SHORTPRE;
+
+       if ((pattrib->encrypt == 1) || (pattrib->encrypt == 5))
+               hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_WEP;
+
+       if (pattrib->mfrag)
+               hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_FRAG;
+
+#ifndef CONFIG_RX_PACKET_APPEND_FCS
+               hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_FCS;
+#endif
+
+       if (0)
+               hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_DATAPAD;
+
+       if (pattrib->crc_err)
+               hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_BADFCS;
+
+       if (pattrib->sgi) {
+               /* Currently unspecified but used */
+               hdr_buf[rt_len] |= 0x80;
+       }
+       rt_len += 1;
+
+       /* rate */
+       if (pattrib->data_rate < 12) {
+               rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_RATE);
+               if (pattrib->data_rate < 4) {
+                       /* CCK */
+                       hdr_buf[rt_len] = data_rate[pattrib->data_rate];
+               } else {
+                       /* OFDM */
+                       hdr_buf[rt_len] = data_rate[pattrib->data_rate];
                }
                }
+       }
+       rt_len += 1; /* force padding 1 byte for aligned */
+
+       /* channel */
+       tmp_16bit = 0;
+       rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_CHANNEL);
+       tmp_16bit = CHAN2FREQ(rtw_get_oper_ch(padapter));
+       /*tmp_16bit = CHAN2FREQ(pHalData->CurrentChannel);*/
+       memcpy(&hdr_buf[rt_len], &tmp_16bit, 2);
+       rt_len += 2;
+
+       /* channel flags */
+       tmp_16bit = 0;
+       if (pHalData->CurrentBandType == 0) 
+               tmp_16bit |= cpu_to_le16(IEEE80211_CHAN_2GHZ);
+       else 
+               tmp_16bit |= cpu_to_le16(IEEE80211_CHAN_5GHZ);
+
+       if (pattrib->data_rate < 12) {
+               if (pattrib->data_rate < 4) {
+                       /* CCK */
+                       tmp_16bit |= cpu_to_le16(IEEE80211_CHAN_CCK);
+               } else {
+                       /* OFDM */
+                       tmp_16bit |= cpu_to_le16(IEEE80211_CHAN_OFDM);
+               }
+       } else {
+               tmp_16bit |= cpu_to_le16(IEEE80211_CHAN_DYN);
+       }
+       memcpy(&hdr_buf[rt_len], &tmp_16bit, 2);
+       rt_len += 2;
 
 
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("recv_func: validate_recv_frame fail! drop pkt\n"));
-               rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
+       /* dBm Antenna Signal */
+       rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL);
+       hdr_buf[rt_len] = pattrib->phy_info.RecvSignalPower;
+       rt_len += 1;
+
+#if 0
+       /* dBm Antenna Noise */
+       rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE);
+       hdr_buf[rt_len] = 0;
+       rt_len += 1;
+
+       /* Signal Quality */
+       rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_LOCK_QUALITY);
+       hdr_buf[rt_len] = pattrib->phy_info.SignalQuality;
+       rt_len += 1;
+#endif
+
+       /* Antenna */
+       rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_ANTENNA);
+       hdr_buf[rt_len] = 0; /* pHalData->rf_type; */
+       rt_len += 1;
+
+       /* RX flags */
+       rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_RX_FLAGS);
+#if 0
+       tmp_16bit = cpu_to_le16(0);
+       memcpy(ptr, &tmp_16bit, 1);
+#endif
+       rt_len += 2;
+
+       /* MCS information */
+       if (pattrib->data_rate >= 12 && pattrib->data_rate < 44) {
+               rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_MCS);
+               /* known, flag */
+               hdr_buf[rt_len] |= BIT1; /* MCS index known */
+
+               /* bandwidth */
+               hdr_buf[rt_len] |= BIT0;
+               hdr_buf[rt_len+1] |= (pattrib->bw & 0x03);
+
+               /* guard interval */
+               hdr_buf[rt_len] |= BIT2;
+               hdr_buf[rt_len+1] |= (pattrib->sgi & 0x01) << 2;
+
+               /* STBC */
+               hdr_buf[rt_len] |= BIT5;
+               hdr_buf[rt_len+1] |= (pattrib->stbc & 0x03) << 5;
+
+               rt_len += 2;
+
+               /* MCS rate index */
+               hdr_buf[rt_len] = data_rate[pattrib->data_rate];
+               rt_len += 1;
+       }
+
+       /* VHT */
+       if (pattrib->data_rate >= 44 && pattrib->data_rate < 84) {
+               rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_VHT);
+
+               /* known 16 bit, flag 8 bit */
+               tmp_16bit = 0;
+
+               /* Bandwidth */
+               tmp_16bit |= BIT6;
+
+               /* Group ID */
+               tmp_16bit |= BIT7;
+
+               /* Partial AID */
+               tmp_16bit |= BIT8;
+
+               /* STBC */
+               tmp_16bit |= BIT0;
+               hdr_buf[rt_len+2] |= (pattrib->stbc & 0x01);
+
+               /* Guard interval */
+               tmp_16bit |= BIT2;
+               hdr_buf[rt_len+2] |= (pattrib->sgi & 0x01) << 2;
+
+               /* LDPC extra OFDM symbol */
+               tmp_16bit |= BIT4;
+               hdr_buf[rt_len+2] |= (pattrib->ldpc & 0x01) << 4;
+
+               memcpy(&hdr_buf[rt_len], &tmp_16bit, 2);
+               rt_len += 3;
+
+               /* bandwidth */
+               if (pattrib->bw == 0) 
+                       hdr_buf[rt_len] |= 0;
+               else if (pattrib->bw == 1) 
+                       hdr_buf[rt_len] |= 1;
+               else if (pattrib->bw == 2) 
+                       hdr_buf[rt_len] |= 4;
+               else if (pattrib->bw == 3) 
+                       hdr_buf[rt_len] |= 11;
+               rt_len += 1;
+
+               /* mcs_nss */
+               if (pattrib->data_rate >= 44 && pattrib->data_rate < 54) {
+                       hdr_buf[rt_len] |= 1;
+                       hdr_buf[rt_len] |= data_rate[pattrib->data_rate] << 4;
+               } else if (pattrib->data_rate >= 54 && pattrib->data_rate < 64) {
+                       hdr_buf[rt_len + 1] |= 2;
+                       hdr_buf[rt_len + 1] |= data_rate[pattrib->data_rate] << 4;
+               } else if (pattrib->data_rate >= 64 && pattrib->data_rate < 74) {
+                       hdr_buf[rt_len + 2] |= 3;
+                       hdr_buf[rt_len + 2] |= data_rate[pattrib->data_rate] << 4;
+               } else if (pattrib->data_rate >= 74 && pattrib->data_rate < 84) {
+                       hdr_buf[rt_len + 3] |= 4;
+                       hdr_buf[rt_len + 3] |= data_rate[pattrib->data_rate] << 4;
+               }
+               rt_len += 4;
+
+               /* coding */
+               hdr_buf[rt_len] = 0;
+               rt_len += 1;
+
+               /* group_id */
+               hdr_buf[rt_len] = 0;
+               rt_len += 1;
+
+               /* partial_aid */
+               tmp_16bit = 0;
+               memcpy(&hdr_buf[rt_len], &tmp_16bit, 2);
+               rt_len += 2;
+       }
+
+       /* push to skb */
+       pskb = (_pkt *)buf;
+       if (skb_headroom(pskb) < rt_len) {
+               DBG_871X("%s:%d %s headroom is too small.\n", __FILE__, __LINE__, __func__);
                ret = _FAIL;
                ret = _FAIL;
+               return ret;
+       }
+
+       ptr = skb_push(pskb, rt_len);
+       if (ptr) {
+               rtap_hdr->it_len = cpu_to_le16(rt_len);
+               memcpy(ptr, rtap_hdr, rt_len);
+       } else {
+               ret = _FAIL;
+       }
+
+       return ret;
+
+}
+
+int recv_frame_monitor(_adapter *padapter, union recv_frame *rframe)
+{
+       int ret = _SUCCESS;
+       struct rx_pkt_attrib *pattrib = &rframe->u.hdr.attrib;
+       struct recv_priv *precvpriv = &padapter->recvpriv;
+       _queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
+       _pkt *pskb = NULL;
+
+       /* read skb information from recv frame */
+       pskb = rframe->u.hdr.pkt;
+       pskb->len = rframe->u.hdr.len;
+       pskb->data = rframe->u.hdr.rx_data;
+       skb_set_tail_pointer(pskb, rframe->u.hdr.len);
+
+       /* fill radiotap header */
+       if (fill_radiotap_hdr(padapter, rframe, (u8 *)pskb) == _FAIL) {
+               ret = _FAIL;
+               rtw_free_recvframe(rframe, pfree_recv_queue); /* free this recv_frame */
                goto exit;
                goto exit;
-        }
-       
+       }
+
+       /* write skb information to recv frame */
+       skb_reset_mac_header(pskb);
+       rframe->u.hdr.len = pskb->len;
+       rframe->u.hdr.rx_data = pskb->data;
+       rframe->u.hdr.rx_head = pskb->head;
+       rframe->u.hdr.rx_tail = skb_tail_pointer(pskb);
+       rframe->u.hdr.rx_end = skb_end_pointer(pskb);
+
+       if ((padapter->bDriverStopped == _FALSE) && (padapter->bSurpriseRemoved == _FALSE)) {
+               /* indicate this recv_frame */
+               ret = rtw_recv_monitor(padapter, rframe);
+               if (ret != _SUCCESS) {
+                       ret = _FAIL;
+                       rtw_free_recvframe(rframe, pfree_recv_queue); /* free this recv_frame */
+                       goto exit;
+               }
+       } else {
+               ret = _FAIL;
+               rtw_free_recvframe(rframe, pfree_recv_queue); /* free this recv_frame */
+               goto exit;
+       }
+
+exit:
+       return ret;
+}
+
+int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe)
+{
+       int ret = _SUCCESS;
+       struct rx_pkt_attrib *pattrib = &rframe->u.hdr.attrib;
+       struct recv_priv *precvpriv = &padapter->recvpriv;
+       _queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
+
+#ifdef DBG_RX_COUNTER_DUMP
+       if( padapter->dump_rx_cnt_mode & DUMP_DRV_RX_COUNTER )
+       {
+               if (pattrib->crc_err == 1)
+                       padapter->drv_rx_cnt_crcerror++;
+               else
+                       padapter->drv_rx_cnt_ok++;
+       }
 #endif
 
 #endif
 
+#ifdef CONFIG_MP_INCLUDED
+       if (padapter->registrypriv.mp_mode == 1 || padapter->mppriv.bRTWSmbCfg ==_TRUE)
+       {
+               mp_recv_frame(padapter,rframe);
+               ret = _FAIL;
+               goto exit;
+        }
+       else
+#endif
+       {
        //check the frame crtl field and decache
        ret = validate_recv_frame(padapter, rframe);
        if (ret != _SUCCESS)
        //check the frame crtl field and decache
        ret = validate_recv_frame(padapter, rframe);
        if (ret != _SUCCESS)
@@ -3929,7 +4313,7 @@ int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe)
                rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
                goto exit;
        }
                rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
                goto exit;
        }
-
+       }
 exit:
        return ret;
 }
 exit:
        return ret;
 }
@@ -3984,10 +4368,9 @@ int recv_func_posthandle(_adapter *padapter, union recv_frame *prframe)
 
        if((_rtw_memcmp(psnap_type, SNAP_ETH_TYPE_TDLS, ETH_TYPE_LEN)) &&
                ((*pcategory==RTW_WLAN_CATEGORY_TDLS) || (*pcategory==RTW_WLAN_CATEGORY_P2P))){
 
        if((_rtw_memcmp(psnap_type, SNAP_ETH_TYPE_TDLS, ETH_TYPE_LEN)) &&
                ((*pcategory==RTW_WLAN_CATEGORY_TDLS) || (*pcategory==RTW_WLAN_CATEGORY_P2P))){
-               ret = OnTDLS(padapter, prframe);        //all of functions will return _FAIL
+               ret = OnTDLS(padapter, prframe);
                if(ret == _FAIL)
                        goto _exit_recv_func;
                if(ret == _FAIL)
                        goto _exit_recv_func;
-               //goto _exit_recv_func;
        }
 #endif //CONFIG_TDLS
 
        }
 #endif //CONFIG_TDLS
 
@@ -4110,6 +4493,13 @@ int recv_func(_adapter *padapter, union recv_frame *rframe)
        struct security_priv *psecuritypriv=&padapter->securitypriv;
        struct mlme_priv *mlmepriv = &padapter->mlmepriv;
 
        struct security_priv *psecuritypriv=&padapter->securitypriv;
        struct mlme_priv *mlmepriv = &padapter->mlmepriv;
 
+       if (check_fwstate(mlmepriv, WIFI_MONITOR_STATE)) {
+               /* monitor mode */
+               recv_frame_monitor(padapter, rframe);
+               ret = _SUCCESS;
+               goto exit;
+       } else
+
        /* check if need to handle uc_swdec_pending_queue*/
        if (check_fwstate(mlmepriv, WIFI_STATION_STATE) && psecuritypriv->busetkipkey)
        {
        /* check if need to handle uc_swdec_pending_queue*/
        if (check_fwstate(mlmepriv, WIFI_STATION_STATE) && psecuritypriv->busetkipkey)
        {
@@ -4213,7 +4603,7 @@ void rtw_signal_stat_timer_hdl(RTW_TIMER_HDL_ARGS){
        u8 avg_signal_qual = 0;
        u32 num_signal_strength = 0;
        u32 num_signal_qual = 0;
        u8 avg_signal_qual = 0;
        u32 num_signal_strength = 0;
        u32 num_signal_qual = 0;
-       u8 _alpha = 5; // this value is based on converging_constant = 5000 and sampling_interval = 1000
+       u8 ratio_pre_stat = 0, ratio_curr_stat = 0, ratio_total = 0, ratio_profile = SIGNAL_STAT_CALC_PROFILE_0;
 
        if(adapter->recvpriv.is_signal_dbg) {
                //update the user specific value, signal_strength_dbg, to signal_strength, rssi
 
        if(adapter->recvpriv.is_signal_dbg) {
                //update the user specific value, signal_strength_dbg, to signal_strength, rssi
@@ -4254,21 +4644,28 @@ void rtw_signal_stat_timer_hdl(RTW_TIMER_HDL_ARGS){
                        goto set_timer;
                #endif
 
                        goto set_timer;
                #endif
 
+               if (RTW_SIGNAL_STATE_CALC_PROFILE < SIGNAL_STAT_CALC_PROFILE_MAX)
+                       ratio_profile = RTW_SIGNAL_STATE_CALC_PROFILE;
+
+               ratio_pre_stat = signal_stat_calc_profile[ratio_profile][0];
+               ratio_curr_stat = signal_stat_calc_profile[ratio_profile][1];
+               ratio_total = ratio_pre_stat + ratio_curr_stat;
+
                //update value of signal_strength, rssi, signal_qual
                //update value of signal_strength, rssi, signal_qual
-               tmp_s = (avg_signal_strength+(_alpha-1)*recvpriv->signal_strength);
-               if(tmp_s %_alpha)
-                       tmp_s = tmp_s/_alpha + 1;
+               tmp_s = (ratio_curr_stat * avg_signal_strength + ratio_pre_stat * recvpriv->signal_strength);
+               if (tmp_s % ratio_total)
+                       tmp_s = tmp_s / ratio_total + 1;
                else
                else
-                       tmp_s = tmp_s/_alpha;
-               if(tmp_s>100)
+                       tmp_s = tmp_s / ratio_total;
+               if (tmp_s > 100)
                        tmp_s = 100;
 
                        tmp_s = 100;
 
-               tmp_q = (avg_signal_qual+(_alpha-1)*recvpriv->signal_qual);
-               if(tmp_q %_alpha)
-                       tmp_q = tmp_q/_alpha + 1;
+               tmp_q = (ratio_curr_stat * avg_signal_qual + ratio_pre_stat * recvpriv->signal_qual);
+               if (tmp_q % ratio_total)
+                       tmp_q = tmp_q / ratio_total + 1;
                else
                else
-                       tmp_q = tmp_q/_alpha;
-               if(tmp_q>100)
+                       tmp_q = tmp_q / ratio_total;
+               if (tmp_q > 100)
                        tmp_q = 100;
 
                recvpriv->signal_strength = tmp_s;
                        tmp_q = 100;
 
                recvpriv->signal_strength = tmp_s;
@@ -4296,5 +4693,219 @@ set_timer:
 }
 #endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
 
 }
 #endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
 
+static void rx_process_rssi(_adapter *padapter,union recv_frame *prframe)
+{
+       u32     last_rssi, tmp_val;
+       struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
+#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
+       struct signal_stat * signal_stat = &padapter->recvpriv.signal_strength_data;
+#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
+
+       //DBG_8192C("process_rssi=> pattrib->rssil(%d) signal_strength(%d)\n ",pattrib->RecvSignalPower,pattrib->signal_strength);
+       //if(pRfd->Status.bPacketToSelf || pRfd->Status.bPacketBeacon)
+       {
+       #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
+               if(signal_stat->update_req) {
+                       signal_stat->total_num = 0;
+                       signal_stat->total_val = 0;
+                       signal_stat->update_req = 0;
+               }
+
+               signal_stat->total_num++;
+               signal_stat->total_val  += pattrib->phy_info.SignalStrength;
+               signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;         
+       #else //CONFIG_NEW_SIGNAL_STAT_PROCESS
+       
+               //Adapter->RxStats.RssiCalculateCnt++;  //For antenna Test
+               if(padapter->recvpriv.signal_strength_data.total_num++ >= PHY_RSSI_SLID_WIN_MAX)
+               {
+                       padapter->recvpriv.signal_strength_data.total_num = PHY_RSSI_SLID_WIN_MAX;
+                       last_rssi = padapter->recvpriv.signal_strength_data.elements[padapter->recvpriv.signal_strength_data.index];
+                       padapter->recvpriv.signal_strength_data.total_val -= last_rssi;
+               }
+               padapter->recvpriv.signal_strength_data.total_val  +=pattrib->phy_info.SignalStrength;
+
+               padapter->recvpriv.signal_strength_data.elements[padapter->recvpriv.signal_strength_data.index++] = pattrib->phy_info.SignalStrength;
+               if(padapter->recvpriv.signal_strength_data.index >= PHY_RSSI_SLID_WIN_MAX)
+                       padapter->recvpriv.signal_strength_data.index = 0;
+
+
+               tmp_val = padapter->recvpriv.signal_strength_data.total_val/padapter->recvpriv.signal_strength_data.total_num;
+               
+               if(padapter->recvpriv.is_signal_dbg) {
+                       padapter->recvpriv.signal_strength= padapter->recvpriv.signal_strength_dbg;
+                       padapter->recvpriv.rssi=(s8)translate_percentage_to_dbm(padapter->recvpriv.signal_strength_dbg);
+               } else {
+                       padapter->recvpriv.signal_strength= tmp_val;
+                       padapter->recvpriv.rssi=(s8)translate_percentage_to_dbm(tmp_val);
+               }
+
+               RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("UI RSSI = %d, ui_rssi.TotalVal = %d, ui_rssi.TotalNum = %d\n", tmp_val, padapter->recvpriv.signal_strength_data.total_val,padapter->recvpriv.signal_strength_data.total_num));
+       #endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
+       }
+}
+
+static void rx_process_link_qual(_adapter *padapter,union recv_frame *prframe)
+{
+       u32     last_evm=0, tmpVal;
+       struct rx_pkt_attrib *pattrib;
+#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
+       struct signal_stat * signal_stat;
+#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
+
+       if(prframe == NULL || padapter==NULL){
+               return;
+       }
+
+       pattrib = &prframe->u.hdr.attrib;
+#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
+       signal_stat = &padapter->recvpriv.signal_qual_data;
+#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
+
+       //DBG_8192C("process_link_qual=> pattrib->signal_qual(%d)\n ",pattrib->signal_qual);
+
+#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
+       if(signal_stat->update_req) {
+               signal_stat->total_num = 0;
+               signal_stat->total_val = 0;
+               signal_stat->update_req = 0;
+       }
+
+       signal_stat->total_num++;
+       signal_stat->total_val  += pattrib->phy_info.SignalQuality;
+       signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
+       
+#else //CONFIG_NEW_SIGNAL_STAT_PROCESS
+       if(pattrib->phy_info.SignalQuality != 0)
+       {
+                       //
+                       // 1. Record the general EVM to the sliding window.
+                       //
+                       if(padapter->recvpriv.signal_qual_data.total_num++ >= PHY_LINKQUALITY_SLID_WIN_MAX)
+                       {
+                               padapter->recvpriv.signal_qual_data.total_num = PHY_LINKQUALITY_SLID_WIN_MAX;
+                               last_evm = padapter->recvpriv.signal_qual_data.elements[padapter->recvpriv.signal_qual_data.index];
+                               padapter->recvpriv.signal_qual_data.total_val -= last_evm;
+                       }
+                       padapter->recvpriv.signal_qual_data.total_val += pattrib->phy_info.SignalQuality;
+
+                       padapter->recvpriv.signal_qual_data.elements[padapter->recvpriv.signal_qual_data.index++] = pattrib->phy_info.SignalQuality;
+                       if(padapter->recvpriv.signal_qual_data.index >= PHY_LINKQUALITY_SLID_WIN_MAX)
+                               padapter->recvpriv.signal_qual_data.index = 0;
+
+                       RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("Total SQ=%d  pattrib->signal_qual= %d\n", padapter->recvpriv.signal_qual_data.total_val, pattrib->phy_info.SignalQuality));
+
+                       // <1> Showed on UI for user, in percentage.
+                       tmpVal = padapter->recvpriv.signal_qual_data.total_val/padapter->recvpriv.signal_qual_data.total_num;
+                       padapter->recvpriv.signal_qual=(u8)tmpVal;
+
+       }
+       else
+       {
+               RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" pattrib->signal_qual =%d\n", pattrib->phy_info.SignalQuality));
+       }
+#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
+}
+
+void rx_process_phy_info(_adapter *padapter, union recv_frame *rframe)
+{
+       /* Check RSSI */
+       rx_process_rssi(padapter, rframe);
+
+       /* Check PWDB */
+       //process_PWDB(padapter, rframe); 
+
+       //UpdateRxSignalStatistics8192C(Adapter, pRfd);
+       
+       /* Check EVM */
+       rx_process_link_qual(padapter, rframe);
+       #ifdef DBG_RX_SIGNAL_DISPLAY_RAW_DATA
+       rtw_store_phy_info( padapter, rframe);
+       #endif
+}
+
+void rx_query_phy_status(
+       union recv_frame        *precvframe,
+       u8 *pphy_status)
+{
+       PADAPTER                        padapter = precvframe->u.hdr.adapter;
+       struct rx_pkt_attrib    *pattrib = &precvframe->u.hdr.attrib;
+       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(padapter);     
+       PODM_PHY_INFO_T         pPHYInfo  = (PODM_PHY_INFO_T)(&pattrib->phy_info);
+       u8                                      *wlanhdr;
+       ODM_PACKET_INFO_T       pkt_info;
+       u8 *sa;
+       struct sta_priv *pstapriv;
+       struct sta_info *psta = NULL;
+       struct dvobj_priv *psdpriv = padapter->dvobj;
+       struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
+       //_irqL         irqL;
+       
+       pkt_info.bPacketMatchBSSID =_FALSE;
+       pkt_info.bPacketToSelf = _FALSE;
+       pkt_info.bPacketBeacon = _FALSE;
+
+       wlanhdr = get_recvframe_data(precvframe);
 
 
+       pkt_info.bPacketMatchBSSID = (!IsFrameTypeCtrl(wlanhdr))
+               && (!pattrib->icv_err) && (!pattrib->crc_err)
+               && _rtw_memcmp(get_hdr_bssid(wlanhdr), get_bssid(&padapter->mlmepriv), ETH_ALEN);
+
+       pkt_info.bToSelf = (!pattrib->icv_err) && (!pattrib->crc_err)
+               && _rtw_memcmp(get_ra(wlanhdr), adapter_mac_addr(padapter), ETH_ALEN);
+
+       pkt_info.bPacketToSelf = pkt_info.bPacketMatchBSSID
+               && _rtw_memcmp(get_ra(wlanhdr), adapter_mac_addr(padapter), ETH_ALEN);
+
+       pkt_info.bPacketBeacon = pkt_info.bPacketMatchBSSID
+               && (GetFrameSubType(wlanhdr) == WIFI_BEACON);
+
+       sa = get_ta(wlanhdr);
+
+       pkt_info.StationID = 0xFF;
+
+       if (_rtw_memcmp(adapter_mac_addr(padapter), sa, ETH_ALEN) == _TRUE) {
+               static u32 start_time = 0;
+
+               if ((start_time == 0) || (rtw_get_passing_time_ms(start_time) > 5000)) {
+                       DBG_871X_LEVEL(_drv_always_, "Warning!!! %s: Confilc mac addr!!\n", __func__);
+                       start_time = rtw_get_current_time();
+               }
+               pdbgpriv->dbg_rx_conflic_mac_addr_cnt++;
+       } else{
+               pstapriv = &padapter->stapriv;
+               psta = rtw_get_stainfo(pstapriv, sa);
+               if (psta)
+                       pkt_info.StationID = psta->mac_id;
+       }
+
+       pkt_info.DataRate = pattrib->data_rate;
+
+       //_enter_critical_bh(&pHalData->odm_stainfo_lock, &irqL);
+       ODM_PhyStatusQuery(&pHalData->odmpriv, pPHYInfo, pphy_status, &pkt_info);
+       if (psta)
+               psta->rssi = pattrib->phy_info.RecvSignalPower;
+       //_exit_critical_bh(&pHalData->odm_stainfo_lock, &irqL);
+
+#ifdef CONFIG_SW_ANTENNA_DIVERSITY
+       if (GET_HAL_DATA(padapter)->odmpriv.RSSI_test == _FALSE)
+#endif
+       {
+               precvframe->u.hdr.psta = NULL;
+               if (pkt_info.bPacketMatchBSSID
+                       && (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE)
+               ) {
+                       if (psta) {
+                               precvframe->u.hdr.psta = psta;
+                               rx_process_phy_info(padapter, precvframe);
+                       }
+               } else if (pkt_info.bPacketToSelf || pkt_info.bPacketBeacon) {
+                       if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE) {
+                               if (psta)
+                                       precvframe->u.hdr.psta = psta;
+                       }
+                       rx_process_phy_info(padapter, precvframe);
+               }
+       }
+}
 
 
index 9841568494ecf248916e632c668c841a517f57d6..874ab1ad2e4368039c11e4d1a65311231f6f67ff 100755 (executable)
@@ -1733,8 +1733,9 @@ _func_enter_;
                                prwskey=pattrib->dot118021x_UncstKey.skey;
                        }
 
                                prwskey=pattrib->dot118021x_UncstKey.skey;
                        }
 
-#ifdef CONFIG_TDLS     //swencryption
+#ifdef CONFIG_TDLS
                        {
                        {
+                               /* Swencryption */
                                struct  sta_info                *ptdls_sta;
                                ptdls_sta=rtw_get_stainfo(&padapter->stapriv ,&pattrib->dst[0] );
                                if((ptdls_sta != NULL) && (ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) )
                                struct  sta_info                *ptdls_sta;
                                ptdls_sta=rtw_get_stainfo(&padapter->stapriv ,&pattrib->dst[0] );
                                if((ptdls_sta != NULL) && (ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) )
@@ -3029,12 +3030,12 @@ void wpa_tdls_generate_tpk(_adapter *padapter, PVOID sta)
         * added by the KDF anyway..
         */
 
         * added by the KDF anyway..
         */
 
-       if (os_memcmp(myid(&(padapter->eeprompriv)), psta->hwaddr, ETH_ALEN) < 0) {
-               _rtw_memcpy(data, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       if (os_memcmp(adapter_mac_addr(padapter), psta->hwaddr, ETH_ALEN) < 0) {
+               _rtw_memcpy(data, adapter_mac_addr(padapter), ETH_ALEN);
                _rtw_memcpy(data + ETH_ALEN, psta->hwaddr, ETH_ALEN);
        } else {
                _rtw_memcpy(data, psta->hwaddr, ETH_ALEN);
                _rtw_memcpy(data + ETH_ALEN, psta->hwaddr, ETH_ALEN);
        } else {
                _rtw_memcpy(data, psta->hwaddr, ETH_ALEN);
-               _rtw_memcpy(data + ETH_ALEN, myid(&(padapter->eeprompriv)), ETH_ALEN);
+               _rtw_memcpy(data + ETH_ALEN, adapter_mac_addr(padapter), ETH_ALEN);
        }
        _rtw_memcpy(data + 2 * ETH_ALEN, get_bssid(pmlmepriv), ETH_ALEN);
 
        }
        _rtw_memcpy(data + 2 * ETH_ALEN, get_bssid(pmlmepriv), ETH_ALEN);
 
@@ -3101,6 +3102,55 @@ int wpa_tdls_ftie_mic(u8 *kck, u8 trans_seq,
 
 }
 
 
 }
 
+/**
+ * wpa_tdls_teardown_ftie_mic - Calculate TDLS TEARDOWN FTIE MIC
+ * @kck: TPK-KCK
+ * @lnkid: Pointer to the beginning of Link Identifier IE
+ * @reason: Reason code of TDLS Teardown
+ * @dialog_token: Dialog token that was used in the MIC calculation for TPK Handshake Message 3
+ * @trans_seq: Transaction Sequence number (1 octet) which shall be set to the value 4
+ * @ftie: Pointer to the beginning of FT IE
+ * @mic: Pointer for writing MIC
+ *
+ * Calculate MIC for TDLS TEARDOWN frame according to Section 10.22.5 in IEEE 802.11 - 2012.
+ */
+int wpa_tdls_teardown_ftie_mic(u8 *kck, u8 *lnkid, u16 reason, 
+       u8 dialog_token, u8 trans_seq, u8 *ftie, u8 *mic)
+{
+       u8 *buf, *pos;
+       struct wpa_tdls_ftie *_ftie;
+       int ret;
+       int len = 2 + lnkid[1] + 2 + 1 + 1 + 2 + ftie[1];
+       
+       buf = rtw_zmalloc(len);
+       if (!buf) {
+               DBG_871X("TDLS: No memory for MIC calculation\n");
+               return -1;
+       }
+
+       pos = buf;
+       /* 1) Link Identifier IE */
+       _rtw_memcpy(pos, lnkid, 2 + lnkid[1]);
+       pos += 2 + lnkid[1];
+       /* 2) Reason Code */
+       _rtw_memcpy(pos, (u8 *)&reason, 2);
+       pos += 2;
+       /* 3) Dialog Token */
+       *pos++ = dialog_token;
+       /* 4) Transaction Sequence number */
+       *pos++ = trans_seq;
+       /* 5) FTIE, with the MIC field of the FTIE set to 0 */
+       _rtw_memcpy(pos, ftie, 2 + ftie[1]);
+       _ftie = (struct wpa_tdls_ftie *) pos;
+       _rtw_memset(_ftie->mic, 0, TDLS_MIC_LEN);
+       pos += 2 + ftie[1];
+
+       ret = omac1_aes_128(kck, buf, pos - buf, mic);
+       rtw_mfree(buf, len);
+       return ret;
+
+}
+
 int tdls_verify_mic(u8 *kck, u8 trans_seq,
                                                        u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie)
 {
 int tdls_verify_mic(u8 *kck, u8 trans_seq,
                                                        u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie)
 {
@@ -3112,14 +3162,14 @@ int tdls_verify_mic(u8 *kck, u8 trans_seq,
 
        if (lnkid == NULL || rsnie == NULL ||
            timeoutie == NULL || ftie == NULL){
 
        if (lnkid == NULL || rsnie == NULL ||
            timeoutie == NULL || ftie == NULL){
-               return 0;
+               return _FAIL;
        }
        
        len = 2 * ETH_ALEN + 1 + 2 + 18 + 2 + *(rsnie+1) + 2 + *(timeoutie+1) + 2 + *(ftie+1);
 
        buf = rtw_zmalloc(len);
        if (buf == NULL)
        }
        
        len = 2 * ETH_ALEN + 1 + 2 + 18 + 2 + *(rsnie+1) + 2 + *(timeoutie+1) + 2 + *(ftie+1);
 
        buf = rtw_zmalloc(len);
        if (buf == NULL)
-               return 0;
+               return _FAIL;
 
        pos = buf;
        /* 1) TDLS initiator STA MAC address */
 
        pos = buf;
        /* 1) TDLS initiator STA MAC address */
@@ -3149,17 +3199,17 @@ int tdls_verify_mic(u8 *kck, u8 trans_seq,
        ret = omac1_aes_128(kck, buf, pos - buf, mic);
        rtw_mfree(buf, len);
        if (ret)
        ret = omac1_aes_128(kck, buf, pos - buf, mic);
        rtw_mfree(buf, len);
        if (ret)
-               return 0;
+               return _FAIL;
        rx_ftie = ftie+4;
 
        if (os_memcmp(mic, rx_ftie, 16) == 0) {
                //Valid MIC
        rx_ftie = ftie+4;
 
        if (os_memcmp(mic, rx_ftie, 16) == 0) {
                //Valid MIC
-               return 1;
+               return _SUCCESS;
        }
 
        //Invalid MIC
        DBG_871X( "[%s] Invalid MIC\n", __FUNCTION__);
        }
 
        //Invalid MIC
        DBG_871X( "[%s] Invalid MIC\n", __FUNCTION__);
-       return 0;
+       return _FAIL;
 
 }
 #endif //CONFIG_TDLS
 
 }
 #endif //CONFIG_TDLS
index c7066f8fb9eb34d9493d0af611b8f29053661fc5..ec95b41515928f5aff753852d92a59087874caec 100755 (executable)
@@ -162,7 +162,7 @@ void sreset_restore_security_station(_adapter *padapter)
                else\r
                {\r
                        //pairwise key\r
                else\r
                {\r
                        //pairwise key\r
-                       rtw_setstakey_cmd(padapter, psta, _TRUE,_FALSE);\r
+                       rtw_setstakey_cmd(padapter, psta, UNICAST_KEY,_FALSE);\r
                        //group key\r
                        rtw_set_key(padapter,&padapter->securitypriv,padapter->securitypriv.dot118021XGrpKeyid, 0,_FALSE);\r
                }\r
                        //group key\r
                        rtw_set_key(padapter,&padapter->securitypriv,padapter->securitypriv.dot118021XGrpKeyid, 0,_FALSE);\r
                }\r
index f17b2a2dc475e6e22e3ef859f71f741537f14bfe..be20de650e5e38b70f3cb5484f9a38b916d83132 100755 (executable)
@@ -412,6 +412,7 @@ _func_enter_;
                        preorder_ctrl->wend_b= 0xffff;       
                        //preorder_ctrl->wsize_b = (NR_RECVBUFF-2);
                        preorder_ctrl->wsize_b = 64;//64;
                        preorder_ctrl->wend_b= 0xffff;       
                        //preorder_ctrl->wsize_b = (NR_RECVBUFF-2);
                        preorder_ctrl->wsize_b = 64;//64;
+                       preorder_ctrl->ampdu_size = RX_AMPDU_SIZE_INVALID;
 
                        _rtw_init_queue(&preorder_ctrl->pending_recvframe_queue);
 
 
                        _rtw_init_queue(&preorder_ctrl->pending_recvframe_queue);
 
@@ -540,6 +541,7 @@ _func_enter_;
        _cancel_timer_ex(&psta->addba_retry_timer);
 
 #ifdef CONFIG_TDLS
        _cancel_timer_ex(&psta->addba_retry_timer);
 
 #ifdef CONFIG_TDLS
+       psta->tdls_sta_state = TDLS_STATE_NONE;
        rtw_free_tdls_timer(psta);
 #endif //CONFIG_TDLS
 
        rtw_free_tdls_timer(psta);
 #endif //CONFIG_TDLS
 
index 21f9fcc8342b9269398afb27a9b260f65308fea0..5aed6aeb8fd14a3ec151fc265f07f6b326e8d4b8 100755 (executable)
 #include <drv_types.h>\r
 \r
 #ifdef CONFIG_TDLS\r
 #include <drv_types.h>\r
 \r
 #ifdef CONFIG_TDLS\r
+#define ONE_SEC        1000 /* 1000 ms */\r
+\r
+extern unsigned char MCS_rate_2R[16];\r
+extern unsigned char MCS_rate_1R[16];\r
 extern void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame);\r
 \r
 void rtw_reset_tdls_info(_adapter* padapter)\r
 extern void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame);\r
 \r
 void rtw_reset_tdls_info(_adapter* padapter)\r
@@ -29,18 +33,38 @@ void rtw_reset_tdls_info(_adapter* padapter)
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;\r
 \r
        ptdlsinfo->ap_prohibited = _FALSE;\r
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;\r
 \r
        ptdlsinfo->ap_prohibited = _FALSE;\r
+       \r
+       /* For TDLS channel switch, currently we only allow it to work in wifi logo test mode */\r
+       if (padapter->registrypriv.wifi_spec == 1)\r
+       {\r
+               ptdlsinfo->ch_switch_prohibited = _FALSE;\r
+       }\r
+       else\r
+       {\r
+               ptdlsinfo->ch_switch_prohibited = _TRUE;\r
+       }\r
+\r
        ptdlsinfo->link_established = _FALSE;\r
        ptdlsinfo->sta_cnt = 0;\r
        ptdlsinfo->sta_maximum = _FALSE;\r
        ptdlsinfo->link_established = _FALSE;\r
        ptdlsinfo->sta_cnt = 0;\r
        ptdlsinfo->sta_maximum = _FALSE;\r
+\r
+#ifdef CONFIG_TDLS_CH_SW\r
+       ptdlsinfo->chsw_info.ch_sw_state = TDLS_STATE_NONE;\r
+       ATOMIC_SET(&ptdlsinfo->chsw_info.chsw_on, _FALSE);\r
+       ptdlsinfo->chsw_info.off_ch_num = 0;\r
+       ptdlsinfo->chsw_info.ch_offset = 0;\r
+       ptdlsinfo->chsw_info.cur_time = 0;\r
+       ptdlsinfo->chsw_info.delay_switch_back = _FALSE;\r
+       ptdlsinfo->chsw_info.dump_stack = _FALSE;\r
+#endif\r
+       \r
        ptdlsinfo->ch_sensing = 0;\r
        ptdlsinfo->ch_sensing = 0;\r
-       ptdlsinfo->cur_channel = 0;\r
-       ptdlsinfo->candidate_ch = 1;    //when inplement channel switching, default candidate channel is 1\r
        ptdlsinfo->watchdog_count = 0;\r
        ptdlsinfo->watchdog_count = 0;\r
-       ptdlsinfo->dev_discovered = 0;\r
+       ptdlsinfo->dev_discovered = _FALSE;\r
 \r
 #ifdef CONFIG_WFD\r
        ptdlsinfo->wfd_info = &padapter->wfd_info;\r
 \r
 #ifdef CONFIG_WFD\r
        ptdlsinfo->wfd_info = &padapter->wfd_info;\r
-#endif //CONFIG_WFD\r
+#endif /* ONFIG_WFD */\r
 }\r
 \r
 int rtw_init_tdls_info(_adapter* padapter)\r
 }\r
 \r
 int rtw_init_tdls_info(_adapter* padapter)\r
@@ -48,9 +72,15 @@ int rtw_init_tdls_info(_adapter* padapter)
        int     res = _SUCCESS;\r
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;\r
 \r
        int     res = _SUCCESS;\r
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;\r
 \r
-       ptdlsinfo->tdls_enable = _TRUE;\r
        rtw_reset_tdls_info(padapter);\r
 \r
        rtw_reset_tdls_info(padapter);\r
 \r
+       ptdlsinfo->tdls_enable = _TRUE;\r
+#ifdef CONFIG_TDLS_DRIVER_SETUP\r
+       ptdlsinfo->driver_setup = _TRUE;\r
+#else\r
+       ptdlsinfo->driver_setup = _FALSE;\r
+#endif /* CONFIG_TDLS_DRIVER_SETUP */\r
+\r
        _rtw_spinlock_init(&ptdlsinfo->cmd_lock);\r
        _rtw_spinlock_init(&ptdlsinfo->hdl_lock);\r
 \r
        _rtw_spinlock_init(&ptdlsinfo->cmd_lock);\r
        _rtw_spinlock_init(&ptdlsinfo->hdl_lock);\r
 \r
@@ -67,6 +97,36 @@ void rtw_free_tdls_info(struct tdls_info *ptdlsinfo)
 \r
 }\r
 \r
 \r
 }\r
 \r
+int check_ap_tdls_prohibited(u8 *pframe, u8 pkt_len)\r
+{\r
+       u8 tdls_prohibited_bit = 0x40; /* bit(38); TDLS_prohibited */\r
+\r
+       if (pkt_len < 5) {\r
+               return _FALSE;\r
+       }\r
+\r
+       pframe += 4;\r
+       if ((*pframe) & tdls_prohibited_bit)\r
+               return _TRUE;\r
+\r
+       return _FALSE;\r
+}\r
+\r
+int check_ap_tdls_ch_switching_prohibited(u8 *pframe, u8 pkt_len)\r
+{\r
+       u8 tdls_ch_swithcing_prohibited_bit = 0x80; /* bit(39); TDLS_channel_switching prohibited */\r
+\r
+       if (pkt_len < 5) {\r
+               return _FALSE;\r
+       }\r
+\r
+       pframe += 4;\r
+       if ((*pframe) & tdls_ch_swithcing_prohibited_bit)\r
+               return _TRUE;\r
+\r
+       return _FALSE;\r
+}\r
+\r
 int _issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsigned int power_mode, int wait_ack)\r
 {\r
        int ret = _FAIL;\r
 int _issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsigned int power_mode, int wait_ack)\r
 {\r
        int ret = _FAIL;\r
@@ -74,19 +134,22 @@ int _issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsi
        struct pkt_attrib                       *pattrib;\r
        unsigned char                                   *pframe;\r
        struct rtw_ieee80211_hdr        *pwlanhdr;\r
        struct pkt_attrib                       *pattrib;\r
        unsigned char                                   *pframe;\r
        struct rtw_ieee80211_hdr        *pwlanhdr;\r
-       unsigned short                          *fctrl;\r
+       unsigned short                          *fctrl, *qc;\r
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);\r
        struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);\r
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);\r
        struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);\r
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
 \r
 \r
-       //update attribute\r
        pattrib = &pmgntframe->attrib;\r
        update_mgntframe_attrib(padapter, pattrib);\r
        pattrib = &pmgntframe->attrib;\r
        update_mgntframe_attrib(padapter, pattrib);\r
+\r
+       pattrib->hdrlen +=2;\r
+       pattrib->qos_en = _TRUE;\r
+       pattrib->eosp = 1;\r
+       pattrib->ack_policy = 0;\r
+       pattrib->mdata = 0;     \r
        pattrib->retry_ctrl = _FALSE;\r
 \r
        _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);\r
        pattrib->retry_ctrl = _FALSE;\r
 \r
        _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);\r
@@ -97,32 +160,33 @@ int _issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsi
        fctrl = &(pwlanhdr->frame_ctl);\r
        *(fctrl) = 0;\r
 \r
        fctrl = &(pwlanhdr->frame_ctl);\r
        *(fctrl) = 0;\r
 \r
-       //      SetToDs(fctrl);\r
-\r
        if (power_mode)\r
        if (power_mode)\r
-       {\r
                SetPwrMgt(fctrl);\r
                SetPwrMgt(fctrl);\r
-       }\r
+\r
+       qc = (unsigned short *)(pframe + pattrib->hdrlen - 2);\r
+       \r
+       SetPriority(qc, 7);     /* Set priority to VO */\r
+\r
+       SetEOSP(qc, pattrib->eosp);\r
+\r
+       SetAckpolicy(qc, pattrib->ack_policy);\r
 \r
        _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);\r
 \r
        _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);\r
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);\r
 \r
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);\r
        pmlmeext->mgnt_seq++;\r
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);\r
 \r
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);\r
        pmlmeext->mgnt_seq++;\r
-       SetFrameSubType(pframe, WIFI_DATA_NULL);\r
+       SetFrameSubType(pframe, WIFI_QOS_DATA_NULL);\r
 \r
 \r
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr);\r
-       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);\r
+       pframe += sizeof(struct rtw_ieee80211_hdr_3addr_qos);\r
+       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr_qos);\r
 \r
        pattrib->last_txcmdsz = pattrib->pktlen;\r
 \r
 \r
        pattrib->last_txcmdsz = pattrib->pktlen;\r
 \r
-       if(wait_ack)\r
-       {\r
+       if (wait_ack)\r
                ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);\r
                ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);\r
-       }\r
-       else\r
-       {\r
+       else {\r
                dump_mgntframe(padapter, pmgntframe);\r
                ret = _SUCCESS;\r
        }\r
                dump_mgntframe(padapter, pmgntframe);\r
                ret = _SUCCESS;\r
        }\r
@@ -131,7 +195,6 @@ exit:
        return ret;\r
 \r
 }\r
        return ret;\r
 \r
 }\r
-\r
 int issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms)\r
 {\r
        int ret;\r
 int issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms)\r
 {\r
        int ret;\r
@@ -140,7 +203,6 @@ int issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsig
        struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);\r
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);\r
 \r
        struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);\r
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);\r
 \r
-       //[TDLS] UAPSD : merge this from issue_nulldata() and mark it first.\r
        #if 0\r
        psta = rtw_get_stainfo(&padapter->stapriv, da);\r
        if (psta) {\r
        #if 0\r
        psta = rtw_get_stainfo(&padapter->stapriv, da);\r
        if (psta) {\r
@@ -155,8 +217,7 @@ int issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsig
        }\r
        #endif\r
 \r
        }\r
        #endif\r
 \r
-       do\r
-       {\r
+       do {\r
                ret = _issue_nulldata_to_TDLS_peer_STA(padapter, da, power_mode, wait_ms>0 ? _TRUE : _FALSE);\r
 \r
                i++;\r
                ret = _issue_nulldata_to_TDLS_peer_STA(padapter, da, power_mode, wait_ms>0 ? _TRUE : _FALSE);\r
 \r
                i++;\r
@@ -164,10 +225,10 @@ int issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsig
                if (padapter->bDriverStopped || padapter->bSurpriseRemoved)\r
                        break;\r
 \r
                if (padapter->bDriverStopped || padapter->bSurpriseRemoved)\r
                        break;\r
 \r
-               if(i < try_cnt && wait_ms > 0 && ret==_FAIL)\r
+               if (i < try_cnt && wait_ms > 0 && ret == _FAIL)\r
                        rtw_msleep_os(wait_ms);\r
 \r
                        rtw_msleep_os(wait_ms);\r
 \r
-       }while((i<try_cnt) && ((ret==_FAIL)||(wait_ms==0)));\r
+       } while ((i < try_cnt) && (ret==_FAIL || wait_ms==0));\r
 \r
        if (ret != _FAIL) {\r
                ret = _SUCCESS;\r
 \r
        if (ret != _FAIL) {\r
                ret = _SUCCESS;\r
@@ -196,22 +257,22 @@ void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta)
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        _irqL irqL;\r
        \r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        _irqL irqL;\r
        \r
-       //free peer sta_info\r
+       /* free peer sta_info */\r
        _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);\r
        _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);\r
-       if(ptdlsinfo->sta_cnt != 0)\r
+       if (ptdlsinfo->sta_cnt != 0)\r
                ptdlsinfo->sta_cnt--;\r
        _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);\r
                ptdlsinfo->sta_cnt--;\r
        _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);\r
-       if( ptdlsinfo->sta_cnt < (NUM_STA - 2 - 4) )    // -2: AP + BC/MC sta, -4: default key\r
-       {\r
+       /* -2: AP + BC/MC sta, -4: default key */\r
+       if (ptdlsinfo->sta_cnt < MAX_ALLOWED_TDLS_STA_NUM) {\r
                ptdlsinfo->sta_maximum = _FALSE;\r
                _rtw_memset( &ptdlsinfo->ss_record, 0x00, sizeof(struct tdls_ss_record) );\r
        }\r
 \r
                ptdlsinfo->sta_maximum = _FALSE;\r
                _rtw_memset( &ptdlsinfo->ss_record, 0x00, sizeof(struct tdls_ss_record) );\r
        }\r
 \r
-       //clear cam\r
+       /* clear cam */\r
        rtw_clearstakey_cmd(padapter, ptdls_sta, _TRUE);\r
 \r
        rtw_clearstakey_cmd(padapter, ptdls_sta, _TRUE);\r
 \r
-       if(ptdlsinfo->sta_cnt==0){\r
-               rtw_tdls_cmd(padapter, myid(&(padapter->eeprompriv)), TDLS_RS_RCR);\r
+       if (ptdlsinfo->sta_cnt == 0) {\r
+               rtw_tdls_cmd(padapter, NULL, TDLS_RS_RCR);\r
                ptdlsinfo->link_established = _FALSE;\r
        }\r
        else\r
                ptdlsinfo->link_established = _FALSE;\r
        }\r
        else\r
@@ -222,65 +283,51 @@ void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta)
 }\r
 \r
 \r
 }\r
 \r
 \r
-//TDLS encryption(if needed) will always be CCMP\r
-void rtw_tdls_set_key(_adapter *padapter, struct rx_pkt_attrib *prx_pkt_attrib, struct sta_info *ptdls_sta)\r
+/* TDLS encryption(if needed) will always be CCMP */\r
+void rtw_tdls_set_key(_adapter *padapter, struct sta_info *ptdls_sta)\r
 {\r
 {\r
-       if(prx_pkt_attrib->encrypt)\r
-       {\r
-               ptdls_sta->dot118021XPrivacy=_AES_;\r
-               rtw_setstakey_cmd(padapter, ptdls_sta, _TRUE, _TRUE);\r
-       }\r
+       ptdls_sta->dot118021XPrivacy=_AES_;\r
+       rtw_setstakey_cmd(padapter, ptdls_sta, TDLS_KEY, _TRUE);\r
 }\r
 \r
 void rtw_tdls_process_ht_cap(_adapter *padapter, struct sta_info *ptdls_sta, u8 *data, u8 Length)\r
 {\r
 }\r
 \r
 void rtw_tdls_process_ht_cap(_adapter *padapter, struct sta_info *ptdls_sta, u8 *data, u8 Length)\r
 {\r
-       /* save HT capabilities in the sta object */\r
+       /* Save HT capabilities in the sta object */\r
        _rtw_memset(&ptdls_sta->htpriv.ht_cap, 0, sizeof(struct rtw_ieee80211_ht_cap));\r
        _rtw_memset(&ptdls_sta->htpriv.ht_cap, 0, sizeof(struct rtw_ieee80211_ht_cap));\r
-       if (data && Length >= sizeof(struct rtw_ieee80211_ht_cap) )\r
-       {\r
+       if (data && Length >= sizeof(struct rtw_ieee80211_ht_cap)) {\r
                ptdls_sta->flags |= WLAN_STA_HT;\r
                ptdls_sta->flags |= WLAN_STA_HT;\r
-               \r
                ptdls_sta->flags |= WLAN_STA_WME;\r
                ptdls_sta->flags |= WLAN_STA_WME;\r
-               \r
+\r
                _rtw_memcpy(&ptdls_sta->htpriv.ht_cap, data, sizeof(struct rtw_ieee80211_ht_cap));                      \r
                _rtw_memcpy(&ptdls_sta->htpriv.ht_cap, data, sizeof(struct rtw_ieee80211_ht_cap));                      \r
-               \r
        } else\r
                ptdls_sta->flags &= ~WLAN_STA_HT;\r
 \r
        } else\r
                ptdls_sta->flags &= ~WLAN_STA_HT;\r
 \r
-       if(ptdls_sta->flags & WLAN_STA_HT)\r
-       {\r
-               if(padapter->registrypriv.ht_enable == _TRUE)\r
-               {\r
+       if (ptdls_sta->flags & WLAN_STA_HT) {\r
+               if (padapter->registrypriv.ht_enable == _TRUE) {\r
                        ptdls_sta->htpriv.ht_option = _TRUE;\r
                        ptdls_sta->htpriv.ht_option = _TRUE;\r
-               }\r
-               else\r
-               {\r
+                       ptdls_sta->qos_option = _TRUE;\r
+               } else {\r
                        ptdls_sta->htpriv.ht_option = _FALSE;\r
                        ptdls_sta->htpriv.ht_option = _FALSE;\r
-                       ptdls_sta->stat_code = _STATS_FAILURE_;\r
+                       ptdls_sta->qos_option = _FALSE;\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
-       //HT related cap\r
-       if(ptdls_sta->htpriv.ht_option)\r
-       {\r
-               //check if sta supports rx ampdu\r
-               if(padapter->registrypriv.ampdu_enable==1)\r
+       /* HT related cap */\r
+       if (ptdls_sta->htpriv.ht_option) {\r
+               /* Check if sta supports rx ampdu */\r
+               if (padapter->registrypriv.ampdu_enable == 1)\r
                        ptdls_sta->htpriv.ampdu_enable = _TRUE;\r
 \r
                        ptdls_sta->htpriv.ampdu_enable = _TRUE;\r
 \r
-               //check if sta support s Short GI 20M\r
-               if(ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SGI_20))\r
-               {\r
+               /* Check if sta support s Short GI 20M */\r
+               if (ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SGI_20))\r
                        ptdls_sta->htpriv.sgi_20m = _TRUE;\r
                        ptdls_sta->htpriv.sgi_20m = _TRUE;\r
-               }\r
-               //check if sta support s Short GI 40M\r
-               if(ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SGI_40))\r
-               {\r
+\r
+               /* Check if sta support s Short GI 40M */\r
+               if (ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SGI_40))\r
                        ptdls_sta->htpriv.sgi_40m = _TRUE;\r
                        ptdls_sta->htpriv.sgi_40m = _TRUE;\r
-               }\r
 \r
 \r
-               // bwmode would still followed AP's setting\r
-               if(ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))\r
-               {\r
+               /* Bwmode would still followed AP's setting */\r
+               if (ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH)) {\r
                        if (padapter->mlmeextpriv.cur_bwmode >= CHANNEL_WIDTH_40)\r
                                ptdls_sta->bw_mode = CHANNEL_WIDTH_40;\r
                        ptdls_sta->htpriv.ch_offset = padapter->mlmeextpriv.cur_ch_offset;\r
                        if (padapter->mlmeextpriv.cur_bwmode >= CHANNEL_WIDTH_40)\r
                                ptdls_sta->bw_mode = CHANNEL_WIDTH_40;\r
                        ptdls_sta->htpriv.ch_offset = padapter->mlmeextpriv.cur_ch_offset;\r
@@ -289,17 +336,13 @@ void rtw_tdls_process_ht_cap(_adapter *padapter, struct sta_info *ptdls_sta, u8
 \r
 }\r
 \r
 \r
 }\r
 \r
-int rtw_tdls_set_ht_cap(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)\r
+u8 *rtw_tdls_set_ht_cap(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)\r
 {\r
 {\r
-       int tmplen;\r
-\r
        rtw_ht_use_default_setting(padapter);\r
 \r
        rtw_ht_use_default_setting(padapter);\r
 \r
-       tmplen = pattrib->pktlen;\r
        rtw_restructure_ht_ie(padapter, NULL, pframe, 0, &(pattrib->pktlen), padapter->mlmeextpriv.cur_channel);\r
 \r
        rtw_restructure_ht_ie(padapter, NULL, pframe, 0, &(pattrib->pktlen), padapter->mlmeextpriv.cur_channel);\r
 \r
-       return (pattrib->pktlen - tmplen);\r
-\r
+       return pframe + pattrib->pktlen;\r
 }\r
 \r
 u8 *rtw_tdls_set_sup_ch(struct mlme_ext_priv *pmlmeext, u8 *pframe, struct pkt_attrib *pattrib)\r
 }\r
 \r
 u8 *rtw_tdls_set_sup_ch(struct mlme_ext_priv *pmlmeext, u8 *pframe, struct pkt_attrib *pattrib)\r
@@ -308,64 +351,270 @@ u8 *rtw_tdls_set_sup_ch(struct mlme_ext_priv *pmlmeext, u8 *pframe, struct pkt_a
        u8 ch_24g = 0, b1 = 0, b4 = 0;\r
        u8 bit_table = 0, sup_ch_idx = 0;\r
 \r
        u8 ch_24g = 0, b1 = 0, b4 = 0;\r
        u8 bit_table = 0, sup_ch_idx = 0;\r
 \r
-       do{\r
-               if( pmlmeext->channel_set[ch_set_idx].ChannelNum >= 1 &&\r
-                       pmlmeext->channel_set[ch_set_idx].ChannelNum <= 14 )\r
-               {\r
-                       ch_24g = 1;     // 2.4 G channels\r
-               }\r
-               else if( pmlmeext->channel_set[ch_set_idx].ChannelNum >= 36 && \r
+       do {\r
+               if (pmlmeext->channel_set[ch_set_idx].ChannelNum >= 1 &&\r
+                       pmlmeext->channel_set[ch_set_idx].ChannelNum <= 14)\r
+                       ch_24g = 1;     /* 2.4 G channels */\r
+               else if (pmlmeext->channel_set[ch_set_idx].ChannelNum >= 36 && \r
                        pmlmeext->channel_set[ch_set_idx].ChannelNum <= 48)\r
                        pmlmeext->channel_set[ch_set_idx].ChannelNum <= 48)\r
-               {\r
-                       b1 = 1; // 5 G band1\r
-               }\r
-               else if( pmlmeext->channel_set[ch_set_idx].ChannelNum >= 149 && \r
+                       b1 = 1; /* 5 G band1 */\r
+               else if (pmlmeext->channel_set[ch_set_idx].ChannelNum >= 149 && \r
                        pmlmeext->channel_set[ch_set_idx].ChannelNum <= 165)\r
                        pmlmeext->channel_set[ch_set_idx].ChannelNum <= 165)\r
-               {\r
-                       b4 = 1; // 5 G band4\r
-               }\r
-               else\r
-               {\r
-                       ch_set_idx++;   // We don't claim that we support DFS channels.\r
+                       b4 = 1; /* 5 G band4 */\r
+               else {\r
+                       ch_set_idx++;   /* We don't support DFS channels. */\r
                        continue;\r
                }\r
 \r
                sup_ch_idx = (ch_24g + b1 + b4 - 1) * 2;\r
                        continue;\r
                }\r
 \r
                sup_ch_idx = (ch_24g + b1 + b4 - 1) * 2;\r
-               if( sup_ch_idx >= 0)\r
-               {\r
-                       if(sup_ch[sup_ch_idx] == 0)\r
+               if (sup_ch_idx >= 0) {\r
+                       if (sup_ch[sup_ch_idx] == 0)\r
                                sup_ch[sup_ch_idx] = pmlmeext->channel_set[ch_set_idx].ChannelNum;\r
                        sup_ch[sup_ch_idx+1]++; //Number of channel\r
                }\r
 \r
                ch_set_idx++;\r
                                sup_ch[sup_ch_idx] = pmlmeext->channel_set[ch_set_idx].ChannelNum;\r
                        sup_ch[sup_ch_idx+1]++; //Number of channel\r
                }\r
 \r
                ch_set_idx++;\r
-       }\r
-       while( pmlmeext->channel_set[ch_set_idx].ChannelNum != 0 && ch_set_idx < MAX_CHANNEL_NUM );\r
+       } while (pmlmeext->channel_set[ch_set_idx].ChannelNum != 0 && ch_set_idx < MAX_CHANNEL_NUM);\r
 \r
        return(rtw_set_ie(pframe, _SUPPORTED_CH_IE_, sup_ch_idx+2, sup_ch, &(pattrib->pktlen)));\r
 }\r
 \r
 \r
        return(rtw_set_ie(pframe, _SUPPORTED_CH_IE_, sup_ch_idx+2, sup_ch, &(pattrib->pktlen)));\r
 }\r
 \r
+u8 *rtw_tdls_set_rsnie(struct tdls_txmgmt *ptxmgmt, u8 *pframe, struct pkt_attrib *pattrib,  int init, struct sta_info *ptdls_sta)\r
+{\r
+       u8 *p = NULL;\r
+       int len = 0;\r
+\r
+       if (ptxmgmt->len > 0)\r
+               p = rtw_get_ie(ptxmgmt->buf, _RSN_IE_2_, &len, ptxmgmt->len);\r
+\r
+       if (p != NULL)\r
+               return rtw_set_ie(pframe, _RSN_IE_2_, len, p+2, &(pattrib->pktlen));\r
+       else\r
+               if (init == _TRUE)\r
+                       return rtw_set_ie(pframe, _RSN_IE_2_, sizeof(TDLS_RSNIE), TDLS_RSNIE, &(pattrib->pktlen));\r
+               else\r
+                       return rtw_set_ie(pframe, _RSN_IE_2_, sizeof(ptdls_sta->TDLS_RSNIE), ptdls_sta->TDLS_RSNIE, &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_ext_cap(u8 *pframe, struct pkt_attrib *pattrib)\r
+{\r
+       return rtw_set_ie(pframe, _EXT_CAP_IE_ , sizeof(TDLS_EXT_CAPIE), TDLS_EXT_CAPIE, &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_qos_cap(u8 *pframe, struct pkt_attrib *pattrib)\r
+{\r
+       return rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, sizeof(TDLS_WMMIE), TDLS_WMMIE,  &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_ftie(struct tdls_txmgmt *ptxmgmt, u8 *pframe, struct pkt_attrib *pattrib, u8 *ANonce, u8 *SNonce)\r
+{\r
+       struct wpa_tdls_ftie FTIE = {0};\r
+       u8 *p = NULL;\r
+       int len = 0;\r
+\r
+       if (ptxmgmt->len > 0)\r
+               p = rtw_get_ie(ptxmgmt->buf, _FTIE_, &len, ptxmgmt->len);\r
+\r
+       if (p != NULL)\r
+               return rtw_set_ie(pframe, _FTIE_, len, p+2, &(pattrib->pktlen));\r
+       else {\r
+               if (ANonce != NULL)\r
+                       _rtw_memcpy(FTIE.Anonce, ANonce, WPA_NONCE_LEN);\r
+               if (SNonce != NULL)\r
+                       _rtw_memcpy(FTIE.Snonce, SNonce, WPA_NONCE_LEN);\r
+               return rtw_set_ie(pframe, _FTIE_ , 82, (u8 *)FTIE.mic_ctrl, &(pattrib->pktlen));\r
+       }\r
+}\r
+\r
+u8 *rtw_tdls_set_timeout_interval(struct tdls_txmgmt *ptxmgmt, u8 *pframe, struct pkt_attrib *pattrib, int init, struct sta_info *ptdls_sta)\r
+{\r
+       u8 timeout_itvl[5];     /* set timeout interval to maximum value */\r
+       u32 timeout_interval= TPK_RESEND_COUNT;\r
+       u8 *p = NULL;\r
+       int len = 0;\r
+\r
+       if (ptxmgmt->len > 0)\r
+               p = rtw_get_ie(ptxmgmt->buf, _TIMEOUT_ITVL_IE_, &len, ptxmgmt->len);\r
+\r
+       if (p != NULL)\r
+               return rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, len, p+2, &(pattrib->pktlen));\r
+       else {\r
+               /* Timeout interval */\r
+               timeout_itvl[0]=0x02;\r
+               if (init == _TRUE)\r
+                       _rtw_memcpy(timeout_itvl+1, &timeout_interval, 4);\r
+               else\r
+                       _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);\r
+\r
+               return rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));\r
+       }\r
+}\r
+\r
+u8 *rtw_tdls_set_bss_coexist(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)\r
+{\r
+       u8 iedata=0;\r
+\r
+       if (padapter->mlmepriv.num_FortyMHzIntolerant > 0)\r
+               iedata |= BIT(2);       /* 20 MHz BSS Width Request */\r
+\r
+       /* Information Bit should be set by TDLS test plan 5.9 */\r
+       iedata |= BIT(0);\r
+       return rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_payload_type(u8 *pframe, struct pkt_attrib *pattrib)\r
+{\r
+       u8 payload_type = 0x02;\r
+       return rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_category(u8 *pframe, struct pkt_attrib *pattrib, u8 category)\r
+{\r
+       return rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_action(u8 *pframe, struct pkt_attrib *pattrib, struct tdls_txmgmt *ptxmgmt)\r
+{\r
+       return rtw_set_fixed_ie(pframe, 1, &(ptxmgmt->action_code), &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_status_code(u8 *pframe, struct pkt_attrib *pattrib, struct tdls_txmgmt *ptxmgmt)\r
+{\r
+       return rtw_set_fixed_ie(pframe, 2, (u8 *)&(ptxmgmt->status_code), &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_dialog(u8 *pframe, struct pkt_attrib *pattrib, struct tdls_txmgmt *ptxmgmt)\r
+{\r
+       u8 dialogtoken = 1;\r
+       if (ptxmgmt->dialog_token)\r
+               return rtw_set_fixed_ie(pframe, 1, &(ptxmgmt->dialog_token), &(pattrib->pktlen));\r
+       else\r
+               return rtw_set_fixed_ie(pframe, 1, &(dialogtoken), &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_reg_class(u8 *pframe, struct pkt_attrib *pattrib, struct sta_info *ptdls_sta)\r
+{\r
+       u8 reg_class = 1;\r
+       return rtw_set_fixed_ie(pframe, 1, &(reg_class), &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_capability(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)\r
+{\r
+       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;\r
+       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;\r
+       u8 cap_from_ie[2] = {0};\r
+\r
+       _rtw_memcpy(cap_from_ie, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);\r
+\r
+       return rtw_set_fixed_ie(pframe, 2, cap_from_ie, &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_supported_rate(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)\r
+{\r
+       u8 bssrate[NDIS_802_11_LENGTH_RATES_EX];\r
+       int bssrate_len = 0;\r
+       u8 more_supportedrates = 0;\r
+\r
+       rtw_set_supported_rate(bssrate, padapter->registrypriv.wireless_mode);\r
+       bssrate_len = rtw_get_rateset_len(bssrate);\r
+\r
+       if (bssrate_len > 8) {\r
+               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));\r
+               more_supportedrates = 1;\r
+       } else {\r
+               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));\r
+       }\r
+\r
+       /* extended supported rates */\r
+       if (more_supportedrates == 1) {\r
+               pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));\r
+       }\r
+\r
+       return pframe;\r
+}\r
+\r
+u8 *rtw_tdls_set_sup_reg_class(u8 *pframe, struct pkt_attrib *pattrib)\r
+{\r
+       return rtw_set_ie(pframe, _SRC_IE_ , sizeof(TDLS_SRC), TDLS_SRC, &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_linkid(u8 *pframe, struct pkt_attrib *pattrib, u8 init)\r
+{\r
+       u8 link_id_addr[18] = {0};\r
+       if (init == _TRUE) {\r
+               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
+               _rtw_memcpy((link_id_addr+6), pattrib->src, 6);\r
+               _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);\r
+       } else {\r
+               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
+               _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);\r
+               _rtw_memcpy((link_id_addr+12), pattrib->src, 6);\r
+       }\r
+       return rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));\r
+}\r
+\r
+#ifdef CONFIG_TDLS_CH_SW\r
+u8 *rtw_tdls_set_target_ch(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)\r
+{\r
+       u8 target_ch = 1;\r
+       if (padapter->tdlsinfo.chsw_info.off_ch_num)\r
+               return rtw_set_fixed_ie(pframe, 1, &(padapter->tdlsinfo.chsw_info.off_ch_num), &(pattrib->pktlen));\r
+       else\r
+               return rtw_set_fixed_ie(pframe, 1, &(target_ch), &(pattrib->pktlen));\r
+}\r
+\r
+u8 *rtw_tdls_set_ch_sw(u8 *pframe, struct pkt_attrib *pattrib, struct sta_info *ptdls_sta)\r
+{\r
+       u8 ch_switch_timing[4] = {0};\r
+       u16 switch_time = (ptdls_sta->ch_switch_time >= CH_SWITCH_TIME * 1000) ? \r
+               ptdls_sta->ch_switch_time : CH_SWITCH_TIME;\r
+       u16 switch_timeout = (ptdls_sta->ch_switch_timeout >= CH_SWITCH_TIMEOUT * 1000) ? \r
+               ptdls_sta->ch_switch_timeout : CH_SWITCH_TIMEOUT;\r
+\r
+       _rtw_memcpy(ch_switch_timing, &switch_time, 2);\r
+       _rtw_memcpy(ch_switch_timing + 2, &switch_timeout, 2);\r
+\r
+       return rtw_set_ie(pframe, _CH_SWITCH_TIMING_,  4, ch_switch_timing, &(pattrib->pktlen));\r
+}\r
+#endif\r
+\r
+u8 *rtw_tdls_set_wmm_params(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)\r
+{\r
+       struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);   \r
+       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);\r
+       u8 wmm_param_ele[24] = {0};\r
+\r
+       if (&pmlmeinfo->WMM_param) {\r
+               _rtw_memcpy(wmm_param_ele, WMM_PARA_OUI, 6);\r
+               if (_rtw_memcmp(&pmlmeinfo->WMM_param, &wmm_param_ele[6], 18) == _TRUE)\r
+                       /* Use default WMM Param */\r
+                       _rtw_memcpy(wmm_param_ele + 6, (u8 *)&TDLS_WMM_PARAM_IE, sizeof(TDLS_WMM_PARAM_IE));\r
+               else    \r
+                       _rtw_memcpy(wmm_param_ele + 6, (u8 *)&pmlmeinfo->WMM_param, sizeof(pmlmeinfo->WMM_param));\r
+               return rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_,  24, wmm_param_ele, &(pattrib->pktlen));                \r
+       }\r
+       else\r
+               return pframe;\r
+}\r
+\r
 #ifdef CONFIG_WFD\r
 void rtw_tdls_process_wfd_ie(struct tdls_info *ptdlsinfo, u8 *ptr, u8 length)\r
 {\r
        u8      wfd_ie[ 128 ] = { 0x00 };\r
        u32     wfd_ielen = 0;\r
        u32     wfd_offset = 0;\r
 #ifdef CONFIG_WFD\r
 void rtw_tdls_process_wfd_ie(struct tdls_info *ptdlsinfo, u8 *ptr, u8 length)\r
 {\r
        u8      wfd_ie[ 128 ] = { 0x00 };\r
        u32     wfd_ielen = 0;\r
        u32     wfd_offset = 0;\r
-       //      Try to get the TCP port information when receiving the negotiation response.\r
-       //\r
+       /* Try to get the TCP port information when receiving the negotiation response. */\r
 \r
        wfd_offset = 0;\r
        wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );\r
 \r
        wfd_offset = 0;\r
        wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );\r
-       while( wfd_offset )\r
-       {\r
+       while (wfd_offset) {\r
                u8      attr_content[ 10 ] = { 0x00 };\r
                u32     attr_contentlen = 0;\r
                int     i;\r
 \r
                DBG_871X( "[%s] WFD IE Found!!\n", __FUNCTION__ );\r
                rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);\r
                u8      attr_content[ 10 ] = { 0x00 };\r
                u32     attr_contentlen = 0;\r
                int     i;\r
 \r
                DBG_871X( "[%s] WFD IE Found!!\n", __FUNCTION__ );\r
                rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);\r
-               if ( attr_contentlen )\r
-               {\r
+               if (attr_contentlen) {\r
                        ptdlsinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );\r
                        DBG_871X( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, ptdlsinfo->wfd_info->peer_rtsp_ctrlport );\r
                }\r
                        ptdlsinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );\r
                        DBG_871X( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, ptdlsinfo->wfd_info->peer_rtsp_ctrlport );\r
                }\r
@@ -373,13 +622,11 @@ void rtw_tdls_process_wfd_ie(struct tdls_info *ptdlsinfo, u8 *ptr, u8 length)
                _rtw_memset( attr_content, 0x00, 10);\r
                attr_contentlen = 0;\r
                rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_LOCAL_IP_ADDR, attr_content, &attr_contentlen);\r
                _rtw_memset( attr_content, 0x00, 10);\r
                attr_contentlen = 0;\r
                rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_LOCAL_IP_ADDR, attr_content, &attr_contentlen);\r
-               if ( attr_contentlen )\r
-               {\r
+               if (attr_contentlen) {\r
                        _rtw_memcpy(ptdlsinfo->wfd_info->peer_ip_address, ( attr_content + 1 ), 4);\r
                        DBG_871X( "[%s] Peer IP = %02u.%02u.%02u.%02u \n", __FUNCTION__, \r
                                ptdlsinfo->wfd_info->peer_ip_address[0], ptdlsinfo->wfd_info->peer_ip_address[1],\r
                        _rtw_memcpy(ptdlsinfo->wfd_info->peer_ip_address, ( attr_content + 1 ), 4);\r
                        DBG_871X( "[%s] Peer IP = %02u.%02u.%02u.%02u \n", __FUNCTION__, \r
                                ptdlsinfo->wfd_info->peer_ip_address[0], ptdlsinfo->wfd_info->peer_ip_address[1],\r
-                               ptdlsinfo->wfd_info->peer_ip_address[2], ptdlsinfo->wfd_info->peer_ip_address[3]\r
-                               );\r
+                               ptdlsinfo->wfd_info->peer_ip_address[2], ptdlsinfo->wfd_info->peer_ip_address[3]);\r
                }\r
                wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );\r
        }\r
                }\r
                wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );\r
        }\r
@@ -401,18 +648,15 @@ int issue_tunneled_probe_req(_adapter *padapter)
        txmgmt.action_code = TUNNELED_PROBE_REQ;\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
        txmgmt.action_code = TUNNELED_PROBE_REQ;\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
-       \r
-       //update attribute\r
+\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);\r
-       _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
@@ -445,18 +689,15 @@ int issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame)
        txmgmt.action_code = TUNNELED_PROBE_RSP;\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
        txmgmt.action_code = TUNNELED_PROBE_RSP;\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
-       \r
-       //update attribute\r
+\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, precv_frame->u.hdr.attrib.src, ETH_ALEN);\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, precv_frame->u.hdr.attrib.src, ETH_ALEN);\r
-       _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
@@ -473,7 +714,7 @@ exit:
 \r
        return ret;\r
 }\r
 \r
        return ret;\r
 }\r
-#endif //CONFIG_WFD\r
+#endif /* CONFIG_WFD */\r
 \r
 int issue_tdls_setup_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wait_ack)\r
 {\r
 \r
 int issue_tdls_setup_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wait_ack)\r
 {\r
@@ -485,38 +726,35 @@ int issue_tdls_setup_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wa
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        struct sta_info *ptdls_sta= NULL;\r
        _irqL irqL;\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        struct sta_info *ptdls_sta= NULL;\r
        _irqL irqL;\r
-       static u8 dialogtoken = 0;\r
        int ret = _FAIL;\r
        int ret = _FAIL;\r
-       u32 timeout_interval= TPK_RESEND_COUNT * 1000;  //retry timer should set at least 301 sec, using TPK_count counting 301 times.\r
+       /* Retry timer should be set at least 301 sec, using TPK_count counting 301 times. */\r
+       u32 timeout_interval= TPK_RESEND_COUNT;\r
+\r
+       DBG_871X("[TDLS] %s\n", __FUNCTION__);\r
 \r
        ptxmgmt->action_code = TDLS_SETUP_REQUEST;\r
 \r
        ptxmgmt->action_code = TDLS_SETUP_REQUEST;\r
-       if(ptdlsinfo->ap_prohibited == _TRUE)\r
+       if (ptdlsinfo->ap_prohibited == _TRUE)\r
                goto exit;\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
                goto exit;\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
-       \r
-       //update attribute\r
+\r
        pattrib = &pmgntframe->attrib;\r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);\r
        pattrib = &pmgntframe->attrib;\r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);\r
-       _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        update_tdls_attrib(padapter, pattrib);\r
 \r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        update_tdls_attrib(padapter, pattrib);\r
 \r
-       //init peer sta_info\r
+       /* init peer sta_info */\r
        ptdls_sta = rtw_get_stainfo(pstapriv, ptxmgmt->peer);\r
        ptdls_sta = rtw_get_stainfo(pstapriv, ptxmgmt->peer);\r
-       if(ptdls_sta==NULL)\r
-       {\r
+       if (ptdls_sta == NULL) {\r
                ptdls_sta = rtw_alloc_stainfo(pstapriv, ptxmgmt->peer);\r
                ptdls_sta = rtw_alloc_stainfo(pstapriv, ptxmgmt->peer);\r
-               if(ptdls_sta==NULL)\r
-               {\r
+               if (ptdls_sta == NULL) {\r
                        DBG_871X("[%s] rtw_alloc_stainfo fail\n", __FUNCTION__);        \r
                        rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);\r
                        rtw_free_xmitframe(pxmitpriv, pmgntframe);\r
                        DBG_871X("[%s] rtw_alloc_stainfo fail\n", __FUNCTION__);        \r
                        rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);\r
                        rtw_free_xmitframe(pxmitpriv, pmgntframe);\r
@@ -526,21 +764,20 @@ int issue_tdls_setup_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wa
        \r
        if(!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))\r
                ptdlsinfo->sta_cnt++;\r
        \r
        if(!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))\r
                ptdlsinfo->sta_cnt++;\r
-       if( ptdlsinfo->sta_cnt == (NUM_STA - 2 - 4) )   // -2: AP + BC/MC sta, -4: default key\r
-       {\r
+\r
+       if (ptdlsinfo->sta_cnt == MAX_ALLOWED_TDLS_STA_NUM)\r
                ptdlsinfo->sta_maximum  = _TRUE;\r
                ptdlsinfo->sta_maximum  = _TRUE;\r
-       }\r
 \r
        ptdls_sta->tdls_sta_state |= TDLS_RESPONDER_STATE;\r
 \r
        ptdls_sta->tdls_sta_state |= TDLS_RESPONDER_STATE;\r
-       //for tdls; ptdls_sta->aid is used to fill dialogtoken\r
-       ptdls_sta->dialog = dialogtoken;\r
-       dialogtoken = (dialogtoken+1)%256;\r
-       ptdls_sta->TDLS_PeerKey_Lifetime = timeout_interval;\r
-       _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME );\r
+\r
+       if (rtw_tdls_is_driver_setup(padapter) == _TRUE) {\r
+               ptdls_sta->TDLS_PeerKey_Lifetime = timeout_interval;\r
+               _set_timer(&ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME);\r
+       }\r
 \r
        pattrib->qsel = pattrib->priority;\r
 \r
 \r
        pattrib->qsel = pattrib->priority;\r
 \r
-       if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, ptxmgmt) !=_SUCCESS ){\r
+       if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, ptxmgmt) !=_SUCCESS) {\r
                rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);\r
                rtw_free_xmitframe(pxmitpriv, pmgntframe);\r
                goto exit;\r
                rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);\r
                rtw_free_xmitframe(pxmitpriv, pmgntframe);\r
                goto exit;\r
@@ -553,14 +790,12 @@ int issue_tdls_setup_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wa
                ret = _SUCCESS;\r
        }\r
 \r
                ret = _SUCCESS;\r
        }\r
 \r
-       ret = _SUCCESS;\r
-\r
 exit:\r
 \r
        return ret;\r
 }\r
 \r
 exit:\r
 \r
        return ret;\r
 }\r
 \r
-int issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wait_ack)\r
+int _issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wait_ack)\r
 {\r
        struct xmit_frame                       *pmgntframe;\r
        struct pkt_attrib                       *pattrib;\r
 {\r
        struct xmit_frame                       *pmgntframe;\r
        struct pkt_attrib                       *pattrib;\r
@@ -571,26 +806,33 @@ int issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wait
        _irqL irqL;\r
        int ret = _FAIL;\r
 \r
        _irqL irqL;\r
        int ret = _FAIL;\r
 \r
+       DBG_871X("[TDLS] %s\n", __FUNCTION__);\r
+\r
        ptxmgmt->action_code = TDLS_TEARDOWN;\r
        ptdls_sta = rtw_get_stainfo(pstapriv, ptxmgmt->peer);\r
        ptxmgmt->action_code = TDLS_TEARDOWN;\r
        ptdls_sta = rtw_get_stainfo(pstapriv, ptxmgmt->peer);\r
-       if(ptdls_sta==NULL){\r
+       if (ptdls_sta == NULL) {\r
                DBG_871X("Np tdls_sta for tearing down\n");\r
                goto exit;\r
        }\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
                DBG_871X("Np tdls_sta for tearing down\n");\r
                goto exit;\r
        }\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
-       \r
-       //update attribute\r
+\r
+       rtw_set_scan_deny(padapter, 550);\r
+\r
+       rtw_scan_abort(padapter);\r
+#ifdef CONFIG_CONCURRENT_MODE          \r
+       if (rtw_buddy_adapter_up(padapter))     \r
+               rtw_scan_abort(padapter->pbuddy_adapter);\r
+#endif /* CONFIG_CONCURRENT_MODE */\r
+\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);\r
-       _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
@@ -602,6 +844,11 @@ int issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wait
                goto exit;\r
        }\r
 \r
                goto exit;\r
        }\r
 \r
+       if (rtw_tdls_is_driver_setup(padapter) == _TRUE) \r
+               if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE)\r
+                       if (pattrib->encrypt) \r
+                               _cancel_timer_ex(&ptdls_sta->TPK_timer);\r
+\r
        if (wait_ack) {\r
                ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);\r
        } else {\r
        if (wait_ack) {\r
                ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);\r
        } else {\r
@@ -609,27 +856,28 @@ int issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wait
                ret = _SUCCESS;\r
        }\r
 \r
                ret = _SUCCESS;\r
        }\r
 \r
-       if(ret == _SUCCESS)\r
-       {\r
-               if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){\r
-                       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CS_OFF);\r
-               }\r
-               \r
-               if( ptdls_sta->timer_flag == 1 )\r
-               {\r
-                       _enter_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);\r
-                       ptdls_sta->timer_flag = 2;\r
-                       _exit_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);\r
-               }\r
-               else\r
-                       rtw_tdls_cmd(padapter, ptxmgmt->peer, TDLS_TEAR_STA );\r
-       }\r
+       if (ret == _SUCCESS && rtw_tdls_is_driver_setup(padapter))\r
+               rtw_tdls_cmd(padapter, ptxmgmt->peer, TDLS_TEAR_STA);\r
 \r
 exit:\r
 \r
        return ret;\r
 }\r
 \r
 \r
 exit:\r
 \r
        return ret;\r
 }\r
 \r
+int issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wait_ack)\r
+{\r
+       int ret = _FAIL;\r
+       \r
+       ret = _issue_tdls_teardown(padapter, ptxmgmt, wait_ack);\r
+       if ((ptxmgmt->status_code == _RSON_TDLS_TEAR_UN_RSN_) && (ret == _FAIL)) {\r
+               /* Change status code and send teardown again via AP */\r
+               ptxmgmt->status_code = _RSON_TDLS_TEAR_TOOFAR_;\r
+               ret = _issue_tdls_teardown(padapter, ptxmgmt, wait_ack);\r
+       }\r
+\r
+       return ret;\r
+}\r
+\r
 int issue_tdls_dis_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt)\r
 {\r
        struct xmit_frame                       *pmgntframe;\r
 int issue_tdls_dis_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt)\r
 {\r
        struct xmit_frame                       *pmgntframe;\r
@@ -638,19 +886,18 @@ int issue_tdls_dis_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt)
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);\r
        int ret = _FAIL;\r
        \r
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);\r
        int ret = _FAIL;\r
        \r
+       DBG_871X("[TDLS] %s\n", __FUNCTION__);\r
+       \r
        ptxmgmt->action_code = TDLS_DISCOVERY_REQUEST;\r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
        ptxmgmt->action_code = TDLS_DISCOVERY_REQUEST;\r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
 \r
 \r
-       //update attribute\r
        pattrib = &pmgntframe->attrib;\r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);\r
        pattrib = &pmgntframe->attrib;\r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);\r
-       _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
@@ -677,19 +924,18 @@ int issue_tdls_setup_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt)
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);\r
        int ret = _FAIL;\r
 \r
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);\r
        int ret = _FAIL;\r
 \r
+       DBG_871X("[TDLS] %s\n", __FUNCTION__);\r
+\r
        ptxmgmt->action_code = TDLS_SETUP_RESPONSE;             \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
        ptxmgmt->action_code = TDLS_SETUP_RESPONSE;             \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
-       \r
-       //update attribute\r
+\r
        pattrib = &pmgntframe->attrib;\r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);\r
        pattrib = &pmgntframe->attrib;\r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);\r
-       _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, get_bssid(&(padapter->mlmepriv)), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        _rtw_memcpy(pattrib->ra, get_bssid(&(padapter->mlmepriv)), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
@@ -718,19 +964,18 @@ int issue_tdls_setup_cfm(_adapter *padapter, struct tdls_txmgmt *ptxmgmt)
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);\r
        int ret = _FAIL;\r
        \r
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);\r
        int ret = _FAIL;\r
        \r
+       DBG_871X("[TDLS] %s\n", __FUNCTION__);\r
+       \r
        ptxmgmt->action_code = TDLS_SETUP_CONFIRM;\r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
        ptxmgmt->action_code = TDLS_SETUP_CONFIRM;\r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
-       \r
-       //update attribute\r
+\r
        pattrib = &pmgntframe->attrib;\r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);\r
        pattrib = &pmgntframe->attrib;\r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);\r
-       _rtw_memcpy(pattrib->src, myid(&padapter->eeprompriv), ETH_ALEN);\r
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, get_bssid(&padapter->mlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        _rtw_memcpy(pattrib->ra, get_bssid(&padapter->mlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
@@ -751,7 +996,7 @@ exit:
 \r
 }\r
 \r
 \r
 }\r
 \r
-//TDLS Discovery Response frame is a management action frame\r
+/* TDLS Discovery Response frame is a management action frame */\r
 int issue_tdls_dis_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 privacy)\r
 {\r
        struct xmit_frame               *pmgntframe;\r
 int issue_tdls_dis_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 privacy)\r
 {\r
        struct xmit_frame               *pmgntframe;\r
@@ -763,12 +1008,11 @@ int issue_tdls_dis_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 priva
        struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);\r
        int ret = _FAIL;\r
 \r
        struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);\r
        int ret = _FAIL;\r
 \r
+       DBG_871X("[TDLS] %s\n", __FUNCTION__);\r
+\r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
 \r
 \r
-       //update attribute\r
        pattrib = &pmgntframe->attrib;\r
        update_mgntframe_attrib(padapter, pattrib);\r
 \r
        pattrib = &pmgntframe->attrib;\r
        update_mgntframe_attrib(padapter, pattrib);\r
 \r
@@ -780,14 +1024,14 @@ int issue_tdls_dis_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 priva
        fctrl = &(pwlanhdr->frame_ctl);\r
        *(fctrl) = 0;\r
 \r
        fctrl = &(pwlanhdr->frame_ctl);\r
        *(fctrl) = 0;\r
 \r
-       //      unicast probe request frame\r
+       /* unicast probe request frame */\r
        _rtw_memcpy(pwlanhdr->addr1, ptxmgmt->peer, ETH_ALEN);\r
        _rtw_memcpy(pattrib->dst, pwlanhdr->addr1, ETH_ALEN);\r
        _rtw_memcpy(pwlanhdr->addr1, ptxmgmt->peer, ETH_ALEN);\r
        _rtw_memcpy(pattrib->dst, pwlanhdr->addr1, ETH_ALEN);\r
-       _rtw_memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);\r
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->src, pwlanhdr->addr2, ETH_ALEN);\r
        _rtw_memcpy(pwlanhdr->addr3, get_bssid(&padapter->mlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, pwlanhdr->addr3, ETH_ALEN);\r
        _rtw_memcpy(pattrib->src, pwlanhdr->addr2, ETH_ALEN);\r
        _rtw_memcpy(pwlanhdr->addr3, get_bssid(&padapter->mlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, pwlanhdr->addr3, ETH_ALEN);\r
-       \r
+\r
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);\r
        pmlmeext->mgnt_seq++;\r
        SetFrameSubType(pframe, WIFI_ACTION);\r
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);\r
        pmlmeext->mgnt_seq++;\r
        SetFrameSubType(pframe, WIFI_ACTION);\r
@@ -795,7 +1039,7 @@ int issue_tdls_dis_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 priva
        pframe += sizeof (struct rtw_ieee80211_hdr_3addr);\r
        pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);\r
 \r
        pframe += sizeof (struct rtw_ieee80211_hdr_3addr);\r
        pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);\r
 \r
-       rtw_build_tdls_dis_rsp_ies(padapter, pmgntframe, pframe, ptxmgmt->dialog_token, privacy);\r
+       rtw_build_tdls_dis_rsp_ies(padapter, pmgntframe, pframe, ptxmgmt, privacy);\r
 \r
        pattrib->nr_frags = 1;\r
        pattrib->last_txcmdsz = pattrib->pktlen;\r
 \r
        pattrib->nr_frags = 1;\r
        pattrib->last_txcmdsz = pattrib->pktlen;\r
@@ -807,38 +1051,35 @@ exit:
        return ret;\r
 }\r
 \r
        return ret;\r
 }\r
 \r
-int issue_tdls_peer_traffic_rsp(_adapter *padapter, struct sta_info *ptdls_sta)\r
+int issue_tdls_peer_traffic_rsp(_adapter *padapter, struct sta_info *ptdls_sta, struct tdls_txmgmt *ptxmgmt)\r
 {\r
        struct xmit_frame       *pmgntframe;\r
        struct pkt_attrib       *pattrib;\r
        struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;\r
        struct xmit_priv        *pxmitpriv = &(padapter->xmitpriv);\r
 {\r
        struct xmit_frame       *pmgntframe;\r
        struct pkt_attrib       *pattrib;\r
        struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;\r
        struct xmit_priv        *pxmitpriv = &(padapter->xmitpriv);\r
-       struct tdls_txmgmt txmgmt;\r
        int ret = _FAIL;\r
 \r
        int ret = _FAIL;\r
 \r
-       _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
-       txmgmt.action_code = TDLS_PEER_TRAFFIC_RESPONSE;\r
+       DBG_871X("[TDLS] %s\n", __FUNCTION__);\r
+\r
+       ptxmgmt->action_code = TDLS_PEER_TRAFFIC_RESPONSE;\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
-       \r
-       //update attribute\r
+\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptdls_sta->hwaddr, ETH_ALEN);\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptdls_sta->hwaddr, ETH_ALEN);\r
-       _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        update_tdls_attrib(padapter, pattrib);\r
        pattrib->qsel = pattrib->priority;\r
 \r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        update_tdls_attrib(padapter, pattrib);\r
        pattrib->qsel = pattrib->priority;\r
 \r
-       if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, &txmgmt) !=_SUCCESS ){\r
+       if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, ptxmgmt) !=_SUCCESS) {\r
                rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);\r
                rtw_free_xmitframe(pxmitpriv, pmgntframe);\r
                goto exit;      \r
                rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);\r
                rtw_free_xmitframe(pxmitpriv, pmgntframe);\r
                goto exit;      \r
@@ -860,31 +1101,26 @@ int issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *ptdl
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);\r
        struct tdls_txmgmt txmgmt;\r
        int ret = _FAIL;\r
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);\r
        struct tdls_txmgmt txmgmt;\r
        int ret = _FAIL;\r
-       static u8 dialogtoken=0;\r
+\r
+       DBG_871X("[TDLS] %s\n", __FUNCTION__);\r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        txmgmt.action_code = TDLS_PEER_TRAFFIC_INDICATION;\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        txmgmt.action_code = TDLS_PEER_TRAFFIC_INDICATION;\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
-       \r
-       //update attribute\r
+\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptdls_sta->hwaddr, ETH_ALEN);\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        _rtw_memcpy(pattrib->dst, ptdls_sta->hwaddr, ETH_ALEN);\r
-       _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
-       //for tdls; pattrib->nr_frags is used to fill dialogtoken\r
-       ptdls_sta->dialog = dialogtoken;\r
-       dialogtoken = (dialogtoken+1)%256;\r
-       //PTI frame's priority should be AC_VO\r
+       /* PTI frame's priority should be AC_VO */\r
        pattrib->priority = 7; \r
 \r
        update_tdls_attrib(padapter, pattrib);\r
        pattrib->priority = 7; \r
 \r
        update_tdls_attrib(padapter, pattrib);\r
@@ -903,7 +1139,7 @@ exit:
        return ret;\r
 }\r
 \r
        return ret;\r
 }\r
 \r
-int issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr)\r
+int issue_tdls_ch_switch_req(_adapter *padapter, struct sta_info *ptdls_sta)\r
 {\r
        struct xmit_frame       *pmgntframe;\r
        struct pkt_attrib       *pattrib;\r
 {\r
        struct xmit_frame       *pmgntframe;\r
        struct pkt_attrib       *pattrib;\r
@@ -912,28 +1148,32 @@ int issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr)
        struct tdls_txmgmt txmgmt;\r
        int ret = _FAIL;\r
 \r
        struct tdls_txmgmt txmgmt;\r
        int ret = _FAIL;\r
 \r
+       DBG_871X("[TDLS] %s\n", __FUNCTION__);\r
+\r
+       if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)\r
+       {       DBG_871X("[TDLS] Ignore %s since ch_switch_prohibited = _TRUE\n", __FUNCTION__);\r
+               goto exit;\r
+       }\r
+\r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        txmgmt.action_code = TDLS_CHANNEL_SWITCH_REQUEST;\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        txmgmt.action_code = TDLS_CHANNEL_SWITCH_REQUEST;\r
 \r
        if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
                goto exit;\r
                goto exit;\r
-       }\r
-       \r
-       //update attribute\r
+\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
-       _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);\r
-       _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pattrib->dst, ptdls_sta->hwaddr, ETH_ALEN);\r
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        update_tdls_attrib(padapter, pattrib);\r
        pattrib->qsel = pattrib->priority;\r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        update_tdls_attrib(padapter, pattrib);\r
        pattrib->qsel = pattrib->priority;\r
-       if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, &txmgmt) !=_SUCCESS ){\r
+       if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, &txmgmt) !=_SUCCESS) {\r
                rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);\r
                rtw_free_xmitframe(pxmitpriv, pmgntframe);\r
                goto exit;\r
                rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);\r
                rtw_free_xmitframe(pxmitpriv, pmgntframe);\r
                goto exit;\r
@@ -946,31 +1186,33 @@ exit:
        return ret;\r
 }\r
 \r
        return ret;\r
 }\r
 \r
-int issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr)\r
+int issue_tdls_ch_switch_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wait_ack)\r
 {\r
        struct xmit_frame       *pmgntframe;\r
        struct pkt_attrib       *pattrib;\r
        struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;\r
        struct xmit_priv        *pxmitpriv = &(padapter->xmitpriv);\r
 {\r
        struct xmit_frame       *pmgntframe;\r
        struct pkt_attrib       *pattrib;\r
        struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;\r
        struct xmit_priv        *pxmitpriv = &(padapter->xmitpriv);\r
-       struct tdls_txmgmt txmgmt;\r
        int ret = _FAIL;\r
 \r
        int ret = _FAIL;\r
 \r
-       _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
-       txmgmt.action_code = TDLS_CHANNEL_SWITCH_RESPONSE;\r
+       DBG_871X("[TDLS] %s\n", __FUNCTION__);\r
 \r
 \r
-       if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
-       {\r
+       if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)\r
+       {       DBG_871X("[TDLS] Ignore %s since ch_switch_prohibited = _TRUE\n", __FUNCTION__);\r
                goto exit;\r
        }\r
                goto exit;\r
        }\r
-       \r
-       //update attribute\r
+\r
+       ptxmgmt->action_code = TDLS_CHANNEL_SWITCH_RESPONSE;\r
+\r
+       if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)\r
+               goto exit;\r
+\r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
        pattrib = &pmgntframe->attrib;\r
 \r
        pmgntframe->frame_tag = DATA_FRAMETAG;\r
        pattrib->ether_type = 0x890d;\r
 \r
-       _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);\r
-       _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);\r
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
        _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);\r
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);\r
 \r
@@ -983,12 +1225,18 @@ int issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr)
                return _FALSE;\r
        }\r
 */\r
                return _FALSE;\r
        }\r
 */\r
-       if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, &txmgmt) !=_SUCCESS ){\r
+       if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, ptxmgmt) !=_SUCCESS) {\r
                rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);\r
                rtw_free_xmitframe(pxmitpriv, pmgntframe);\r
                rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);\r
                rtw_free_xmitframe(pxmitpriv, pmgntframe);\r
-               goto exit;      \r
+               goto exit;\r
+       }\r
+\r
+       if (wait_ack) {\r
+               ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);\r
+       } else {\r
+               dump_mgntframe(padapter, pmgntframe);\r
+               ret = _SUCCESS;\r
        }\r
        }\r
-       dump_mgntframe(padapter, pmgntframe);\r
        ret = _SUCCESS;\r
 exit:\r
 \r
        ret = _SUCCESS;\r
 exit:\r
 \r
@@ -1008,71 +1256,55 @@ int On_TDLS_Dis_Rsp(_adapter *padapter, union recv_frame *precv_frame)
        int ret = _SUCCESS;\r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        int ret = _SUCCESS;\r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
-       //WFDTDLS: for sigma test, not to setup direct link automatically\r
-       ptdlsinfo->dev_discovered = 1;\r
+       /* WFDTDLS: for sigma test, not to setup direct link automatically */\r
+       ptdlsinfo->dev_discovered = _TRUE;\r
 \r
 #ifdef CONFIG_TDLS_AUTOSETUP\r
 \r
 #ifdef CONFIG_TDLS_AUTOSETUP\r
+\r
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(&(padapter->stapriv), psa);\r
 \r
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(&(padapter->stapriv), psa);\r
 \r
-       if(ptdls_sta != NULL)\r
-       {\r
+       if (ptdls_sta != NULL) {\r
                ptdls_sta->tdls_sta_state |= TDLS_ALIVE_STATE;\r
 \r
                ptdls_sta->tdls_sta_state |= TDLS_ALIVE_STATE;\r
 \r
-               //Record the tdls sta with lowest signal strength\r
-               if( (ptdlsinfo->sta_maximum == _TRUE) && (ptdls_sta->alive_count >= 1) )\r
-               {\r
-                       if( _rtw_memcmp(ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN) )\r
-                       {\r
+               /* Record the tdls sta with lowest signal strength */\r
+               if (ptdlsinfo->sta_maximum == _TRUE && ptdls_sta->alive_count >= 1 ) {\r
+                       if (_rtw_memcmp(ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN)) {\r
                                _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);\r
                                _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);\r
-                               ptdlsinfo->ss_record.RxPWDBAll = pattrib->RxPWDBAll;\r
-                       }\r
-                       else\r
-                       {\r
-                               if( ptdlsinfo->ss_record.RxPWDBAll < pattrib->RxPWDBAll )\r
-                               {\r
+                               ptdlsinfo->ss_record.RxPWDBAll = pattrib->phy_info.RxPWDBAll;\r
+                       } else {\r
+                               if (ptdlsinfo->ss_record.RxPWDBAll < pattrib->phy_info.RxPWDBAll) {\r
                                        _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);\r
                                        _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);\r
-                                       ptdlsinfo->ss_record.RxPWDBAll = pattrib->RxPWDBAll;\r
+                                       ptdlsinfo->ss_record.RxPWDBAll = pattrib->phy_info.RxPWDBAll;\r
                                }\r
                        }\r
                }\r
                                }\r
                        }\r
                }\r
-\r
-       }\r
-       else\r
-       {\r
-               if( ptdlsinfo->sta_maximum == _TRUE)\r
-               {\r
-                       if( _rtw_memcmp( ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN ) )\r
-                       {\r
-                               //All traffics are busy, do not set up another direct link.\r
+       } else {\r
+               if (ptdlsinfo->sta_maximum == _TRUE) {\r
+                       if (_rtw_memcmp( ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN)) {\r
+                               /* All traffics are busy, do not set up another direct link. */\r
                                ret = _FAIL;\r
                                goto exit;\r
                                ret = _FAIL;\r
                                goto exit;\r
-                       }\r
-                       else\r
-                       {\r
-                               if( pattrib->RxPWDBAll > ptdlsinfo->ss_record.RxPWDBAll )\r
-                               {\r
+                       } else {\r
+                               if (pattrib->phy_info.RxPWDBAll > ptdlsinfo->ss_record.RxPWDBAll) {\r
                                        _rtw_memcpy(txmgmt.peer, ptdlsinfo->ss_record.macaddr, ETH_ALEN);\r
                                        _rtw_memcpy(txmgmt.peer, ptdlsinfo->ss_record.macaddr, ETH_ALEN);\r
-                                       //issue_tdls_teardown(padapter, ptdlsinfo->ss_record.macaddr, _FALSE);\r
-                               }\r
-                               else\r
-                               {\r
+                                       /* issue_tdls_teardown(padapter, ptdlsinfo->ss_record.macaddr, _FALSE); */\r
+                               } else {\r
                                        ret = _FAIL;\r
                                        goto exit;\r
                                }\r
                        }\r
                }\r
 \r
                                        ret = _FAIL;\r
                                        goto exit;\r
                                }\r
                        }\r
                }\r
 \r
-               padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);\r
+               rtw_hal_get_def_var(padapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);\r
 \r
 \r
-               if( pattrib->RxPWDBAll + TDLS_SIGNAL_THRESH >= UndecoratedSmoothedPWDB);\r
-               {\r
-                       DBG_871X("pattrib->RxPWDBAll=%d, pdmpriv->UndecoratedSmoothedPWDB=%d\n", pattrib->RxPWDBAll, UndecoratedSmoothedPWDB);\r
+               if (pattrib->phy_info.RxPWDBAll + TDLS_SIGNAL_THRESH >= UndecoratedSmoothedPWDB) {\r
+                       DBG_871X("pattrib->RxPWDBAll=%d, pdmpriv->UndecoratedSmoothedPWDB=%d\n", pattrib->phy_info.RxPWDBAll, UndecoratedSmoothedPWDB);\r
                        _rtw_memcpy(txmgmt.peer, psa, ETH_ALEN);\r
                        issue_tdls_setup_req(padapter, &txmgmt, _FALSE);\r
                }\r
        }\r
                        _rtw_memcpy(txmgmt.peer, psa, ETH_ALEN);\r
                        issue_tdls_setup_req(padapter, &txmgmt, _FALSE);\r
                }\r
        }\r
-#endif //CONFIG_TDLS_AUTOSETUP\r
+#endif /* CONFIG_TDLS_AUTOSETUP */\r
 \r
 exit:\r
        return ret;\r
 \r
 exit:\r
        return ret;\r
@@ -1095,20 +1327,23 @@ sint On_TDLS_Setup_Req(_adapter *padapter, union recv_frame *precv_frame)
        u8 ccmp_included=0, rsnie_included=0;\r
        u16 j, pairwise_count;\r
        u8 SNonce[32];\r
        u8 ccmp_included=0, rsnie_included=0;\r
        u16 j, pairwise_count;\r
        u8 SNonce[32];\r
-       u32 *timeout_interval=NULL;\r
-       sint parsing_length;    //frame body length, without icv_len\r
+       u32 timeout_interval = TPK_RESEND_COUNT;\r
+       sint parsing_length;    /* Frame body length, without icv_len */\r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
        u8 FIXED_IE = 5;\r
        unsigned char           supportRate[16];\r
        int                             supportRateNum = 0;\r
        struct tdls_txmgmt txmgmt;\r
 \r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
        u8 FIXED_IE = 5;\r
        unsigned char           supportRate[16];\r
        int                             supportRateNum = 0;\r
        struct tdls_txmgmt txmgmt;\r
 \r
+       if (ptdlsinfo->ap_prohibited == _TRUE)\r
+               goto exit;\r
+\r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
 \r
-       pmyid=myid(&(padapter->eeprompriv));\r
-       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;\r
+       pmyid = adapter_mac_addr(padapter);\r
+       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+ETH_TYPE_LEN+PAYLOAD_TYPE_LEN;\r
        parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len\r
                        -prx_pkt_attrib->hdrlen\r
                        -prx_pkt_attrib->iv_len\r
        parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len\r
                        -prx_pkt_attrib->hdrlen\r
                        -prx_pkt_attrib->iv_len\r
@@ -1118,33 +1353,28 @@ sint On_TDLS_Setup_Req(_adapter *padapter, union recv_frame *precv_frame)
                        -PAYLOAD_TYPE_LEN\r
                        -FIXED_IE;\r
 \r
                        -PAYLOAD_TYPE_LEN\r
                        -FIXED_IE;\r
 \r
-       if(ptdlsinfo->ap_prohibited == _TRUE)\r
-       {\r
-               goto exit;\r
-       }\r
-\r
-       if(ptdls_sta==NULL){\r
+       if (ptdls_sta == NULL) {\r
                ptdls_sta = rtw_alloc_stainfo(pstapriv, psa);\r
                ptdls_sta = rtw_alloc_stainfo(pstapriv, psa);\r
-       }else{\r
-               if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){\r
-                       //If the direct link is already set up\r
-                       //Process as re-setup after tear down\r
+       } else {\r
+               if (ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) {\r
+                       /* If the direct link is already set up */\r
+                       /* Process as re-setup after tear down */\r
                        DBG_871X("re-setup a direct link\n");\r
                }\r
                        DBG_871X("re-setup a direct link\n");\r
                }\r
-               //already receiving TDLS setup request\r
-               else if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){\r
+               /* Already receiving TDLS setup request */\r
+               else if (ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE) {\r
                        DBG_871X("receive duplicated TDLS setup request frame in handshaking\n");\r
                        goto exit;\r
                }\r
                        DBG_871X("receive duplicated TDLS setup request frame in handshaking\n");\r
                        goto exit;\r
                }\r
-               //When receiving and sending setup_req to the same link at the same time, STA with higher MAC_addr would be initiator\r
-               //following is to check out MAC_addr\r
-               else if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){\r
+               /* When receiving and sending setup_req to the same link at the same time */\r
+               /* STA with higher MAC_addr would be initiator */\r
+               else if (ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE) {\r
                        DBG_871X("receive setup_req after sending setup_req\n");\r
                        for (i=0;i<6;i++){\r
                                if(*(pmyid+i)==*(psa+i)){\r
                                }\r
                                else if(*(pmyid+i)>*(psa+i)){\r
                        DBG_871X("receive setup_req after sending setup_req\n");\r
                        for (i=0;i<6;i++){\r
                                if(*(pmyid+i)==*(psa+i)){\r
                                }\r
                                else if(*(pmyid+i)>*(psa+i)){\r
-                                       ptdls_sta->tdls_sta_state=TDLS_INITIATOR_STATE;\r
+                                       ptdls_sta->tdls_sta_state = TDLS_INITIATOR_STATE;\r
                                        break;\r
                                }else if(*(pmyid+i)<*(psa+i)){\r
                                        goto exit;\r
                                        break;\r
                                }else if(*(pmyid+i)<*(psa+i)){\r
                                        goto exit;\r
@@ -1153,147 +1383,132 @@ sint On_TDLS_Setup_Req(_adapter *padapter, union recv_frame *precv_frame)
                }\r
        }\r
 \r
                }\r
        }\r
 \r
-       if(ptdls_sta) \r
-       {\r
-               ptdls_sta->dialog = *(ptr+2);   //copy dialog token\r
-               ptdls_sta->stat_code = 0;\r
+       if (ptdls_sta) {\r
+               txmgmt.dialog_token = *(ptr+2); /* Copy dialog token */\r
+               txmgmt.status_code = _STATS_SUCCESSFUL_;\r
 \r
 \r
-               //parsing information element\r
-               for(j=FIXED_IE; j<parsing_length;){\r
+               /* Parsing information element */\r
+               for (j=FIXED_IE; j<parsing_length;) {\r
 \r
                        pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
 \r
                        pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
-                       switch (pIE->ElementID)\r
-                       {\r
-                               case _SUPPORTEDRATES_IE_:\r
-                                       _rtw_memcpy(supportRate, pIE->data, pIE->Length);\r
-                                       supportRateNum = pIE->Length;\r
-                                       break;\r
-                               case _COUNTRY_IE_:\r
-                                       break;\r
-                               case _EXT_SUPPORTEDRATES_IE_:\r
-                                       if(supportRateNum<=sizeof(supportRate))\r
-                                       {\r
-                                               _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);\r
-                                               supportRateNum += pIE->Length;\r
-                                       }\r
-                                       break;\r
-                               case _SUPPORTED_CH_IE_:\r
-                                       break;\r
-                               case _RSN_IE_2_:\r
-                                       rsnie_included=1;\r
-                                       if(prx_pkt_attrib->encrypt){\r
-                                               prsnie=(u8*)pIE;\r
-                                               //check whether initiator STA has CCMP pairwise_cipher.\r
-                                               ppairwise_cipher=prsnie+10;\r
-                                               _rtw_memcpy(ptdls_sta->TDLS_RSNIE, pIE->data, pIE->Length);\r
-                                               pairwise_count = *(u16*)(ppairwise_cipher-2);\r
-                                               for(k=0;k<pairwise_count;k++){\r
-                                                       if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)\r
-                                                               ccmp_included=1;\r
-                                               }\r
-                                               if(ccmp_included==0){\r
-                                                       //invalid contents of RSNIE\r
-                                                       ptdls_sta->stat_code=72;\r
-                                               }\r
-                                       }\r
-                                       break;\r
-                               case _EXT_CAP_IE_:\r
-                                       break;\r
-                               case _VENDOR_SPECIFIC_IE_:\r
-                                       break;\r
-                               case _FTIE_:\r
-                                       if(prx_pkt_attrib->encrypt)\r
-                                               _rtw_memcpy(SNonce, (ptr+j+52), 32);\r
-                                       break;\r
-                               case _TIMEOUT_ITVL_IE_:\r
-                                       if(prx_pkt_attrib->encrypt)\r
-                                               timeout_interval = (u32 *)(ptr+j+3);\r
-                                       break;\r
-                               case _RIC_Descriptor_IE_:\r
-                                       break;\r
-                               case _HT_CAPABILITY_IE_:\r
-                                       rtw_tdls_process_ht_cap(padapter, ptdls_sta, pIE->data, pIE->Length);\r
-                                       break;\r
-                               case EID_BSSCoexistence:\r
-                                       break;\r
-                               case _LINK_ID_IE_:\r
-                                       if(_rtw_memcmp(get_bssid(pmlmepriv), pIE->data, 6) == _FALSE)\r
-                                       {\r
-                                               //not in the same BSS\r
-                                               ptdls_sta->stat_code=7;\r
+                       switch (pIE->ElementID) {\r
+                       case _SUPPORTEDRATES_IE_:\r
+                               _rtw_memcpy(supportRate, pIE->data, pIE->Length);\r
+                               supportRateNum = pIE->Length;\r
+                               break;\r
+                       case _COUNTRY_IE_:\r
+                               break;\r
+                       case _EXT_SUPPORTEDRATES_IE_:\r
+                               if (supportRateNum<=sizeof(supportRate)) {\r
+                                       _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);\r
+                                       supportRateNum += pIE->Length;\r
+                               }\r
+                               break;\r
+                       case _SUPPORTED_CH_IE_:\r
+                               break;\r
+                       case _RSN_IE_2_:\r
+                               rsnie_included=1;\r
+                               if (prx_pkt_attrib->encrypt) {\r
+                                       prsnie=(u8*)pIE;\r
+                                       /* Check CCMP pairwise_cipher presence. */\r
+                                       ppairwise_cipher=prsnie+10;\r
+                                       _rtw_memcpy(ptdls_sta->TDLS_RSNIE, pIE->data, pIE->Length);\r
+                                       pairwise_count = *(u16*)(ppairwise_cipher-2);\r
+                                       for (k=0; k<pairwise_count; k++) {\r
+                                               if (_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)\r
+                                                       ccmp_included=1;\r
                                        }\r
                                        }\r
-                                       break;\r
-                               default:\r
-                                       break;\r
+\r
+                                       if (ccmp_included == 0)\r
+                                               txmgmt.status_code=_STATS_INVALID_RSNIE_;\r
+                               }\r
+                               break;\r
+                       case _EXT_CAP_IE_:\r
+                               break;\r
+                       case _VENDOR_SPECIFIC_IE_:\r
+                               break;\r
+                       case _FTIE_:\r
+                               if (prx_pkt_attrib->encrypt)\r
+                                       _rtw_memcpy(SNonce, (ptr+j+52), 32);\r
+                               break;\r
+                       case _TIMEOUT_ITVL_IE_:\r
+                               if (prx_pkt_attrib->encrypt)\r
+                                       timeout_interval = cpu_to_le32(*(u32*)(ptr+j+3));\r
+                               break;\r
+                       case _RIC_Descriptor_IE_:\r
+                               break;\r
+                       case _HT_CAPABILITY_IE_:\r
+                               rtw_tdls_process_ht_cap(padapter, ptdls_sta, pIE->data, pIE->Length);\r
+                               break;\r
+                       case EID_BSSCoexistence:\r
+                               break;\r
+                       case _LINK_ID_IE_:\r
+                               if (_rtw_memcmp(get_bssid(pmlmepriv), pIE->data, 6) == _FALSE)\r
+                                       txmgmt.status_code=_STATS_NOT_IN_SAME_BSS_;\r
+                               break;\r
+                       default:\r
+                               break;\r
                        }\r
 \r
                        j += (pIE->Length + 2);\r
                        \r
                }\r
 \r
                        }\r
 \r
                        j += (pIE->Length + 2);\r
                        \r
                }\r
 \r
-               //check status code\r
-               //if responder STA has/hasn't security on AP, but request hasn't/has RSNIE, it should reject\r
-               if(ptdls_sta->stat_code == 0 )\r
-               {\r
-                       if(rsnie_included && (prx_pkt_attrib->encrypt==0)){\r
-                               //security disabled\r
-                               ptdls_sta->stat_code = 5;\r
-                       }else if(rsnie_included==0 && (prx_pkt_attrib->encrypt)){\r
-                               //request haven't RSNIE\r
-                               ptdls_sta->stat_code = 38;\r
-                       }\r
+               /* Check status code */\r
+               /* If responder STA has/hasn't security on AP, but request hasn't/has RSNIE, it should reject */\r
+               if (txmgmt.status_code == _STATS_SUCCESSFUL_) {\r
+                       if (rsnie_included && prx_pkt_attrib->encrypt == 0)\r
+                               txmgmt.status_code = _STATS_SEC_DISABLED_;\r
+                       else if (rsnie_included==0 && prx_pkt_attrib->encrypt)\r
+                               txmgmt.status_code = _STATS_INVALID_PARAMETERS_;\r
 \r
 #ifdef CONFIG_WFD\r
 \r
 #ifdef CONFIG_WFD\r
-                       //WFD test plan version 0.18.2 test item 5.1.5\r
-                       //SoUT does not use TDLS if AP uses weak security\r
-                       if ( padapter->wdinfo.wfd_tdls_enable )\r
-                       {\r
-                               if(rsnie_included && (prx_pkt_attrib->encrypt != _AES_))\r
-                               {\r
-                                       ptdls_sta->stat_code = 5;\r
-                               }\r
-                       }\r
-#endif //CONFIG_WFD\r
+                       /* WFD test plan version 0.18.2 test item 5.1.5 */\r
+                       /* SoUT does not use TDLS if AP uses weak security */\r
+                       if (padapter->wdinfo.wfd_tdls_enable && (rsnie_included && prx_pkt_attrib->encrypt != _AES_))\r
+                                       txmgmt.status_code = _STATS_SEC_DISABLED_;\r
+#endif /* CONFIG_WFD */\r
                }\r
 \r
                ptdls_sta->tdls_sta_state|= TDLS_INITIATOR_STATE;\r
                }\r
 \r
                ptdls_sta->tdls_sta_state|= TDLS_INITIATOR_STATE;\r
-               if(prx_pkt_attrib->encrypt){\r
+               if (prx_pkt_attrib->encrypt) {\r
                        _rtw_memcpy(ptdls_sta->SNonce, SNonce, 32);\r
                        _rtw_memcpy(ptdls_sta->SNonce, SNonce, 32);\r
-                       _rtw_memcpy(&(ptdls_sta->TDLS_PeerKey_Lifetime), timeout_interval, 4);\r
+\r
+                       if (timeout_interval <= 300) \r
+                               ptdls_sta->TDLS_PeerKey_Lifetime = TPK_RESEND_COUNT;\r
+                       else\r
+                               ptdls_sta->TDLS_PeerKey_Lifetime = timeout_interval;\r
                }\r
 \r
                }\r
 \r
-               //update station supportRate    \r
+               /* Update station supportRate */\r
                ptdls_sta->bssratelen = supportRateNum;\r
                _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);\r
 \r
                ptdls_sta->bssratelen = supportRateNum;\r
                _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);\r
 \r
-               if(!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))\r
+               if (!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))\r
                        ptdlsinfo->sta_cnt++;\r
                        ptdlsinfo->sta_cnt++;\r
-               if( ptdlsinfo->sta_cnt == (NUM_STA - 2 - 4) )   // -2: AP + BC/MC sta, -4: default key\r
-               {\r
+               /* -2: AP + BC/MC sta, -4: default key */\r
+               if (ptdlsinfo->sta_cnt == MAX_ALLOWED_TDLS_STA_NUM)\r
                        ptdlsinfo->sta_maximum = _TRUE;\r
                        ptdlsinfo->sta_maximum = _TRUE;\r
-               }\r
 \r
 #ifdef CONFIG_WFD\r
                rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);\r
 \r
 #ifdef CONFIG_WFD\r
                rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);\r
-#endif // CONFIG_WFD\r
+#endif /* CONFIG_WFD */\r
 \r
 \r
-       }\r
-       else\r
-       {\r
+       }else {\r
                goto exit;\r
        }\r
 \r
        _rtw_memcpy(txmgmt.peer, prx_pkt_attrib->src, ETH_ALEN);\r
                goto exit;\r
        }\r
 \r
        _rtw_memcpy(txmgmt.peer, prx_pkt_attrib->src, ETH_ALEN);\r
-       issue_tdls_setup_rsp(padapter, &txmgmt);\r
 \r
 \r
-       if(ptdls_sta->stat_code==0)\r
-       {\r
-               _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME);\r
-       }\r
-       else            //status code!=0 ; setup unsuccess\r
-       {\r
-               free_tdls_sta(padapter, ptdls_sta);\r
+       if (rtw_tdls_is_driver_setup(padapter)) {\r
+               issue_tdls_setup_rsp(padapter, &txmgmt);\r
+\r
+               if (txmgmt.status_code==_STATS_SUCCESSFUL_) {\r
+                       _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME);\r
+               }else {\r
+                       free_tdls_sta(padapter, ptdls_sta);\r
+               }\r
        }\r
                \r
 exit:\r
        }\r
                \r
 exit:\r
@@ -1303,6 +1518,7 @@ exit:
 \r
 int On_TDLS_Setup_Rsp(_adapter *padapter, union recv_frame *precv_frame)\r
 {\r
 \r
 int On_TDLS_Setup_Rsp(_adapter *padapter, union recv_frame *precv_frame)\r
 {\r
+       struct registry_priv    *pregistrypriv = &padapter->registrypriv;\r
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;\r
        struct sta_info *ptdls_sta= NULL;\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;\r
        struct sta_info *ptdls_sta= NULL;\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
@@ -1310,8 +1526,8 @@ int On_TDLS_Setup_Rsp(_adapter *padapter, union recv_frame *precv_frame)
        _irqL irqL;\r
        struct rx_pkt_attrib    *prx_pkt_attrib = &precv_frame->u.hdr.attrib;\r
        u8 *psa;\r
        _irqL irqL;\r
        struct rx_pkt_attrib    *prx_pkt_attrib = &precv_frame->u.hdr.attrib;\r
        u8 *psa;\r
-       u16 stat_code;\r
-       sint parsing_length;    //frame body length, without icv_len\r
+       u16 status_code=0;\r
+       sint parsing_length;    /* Frame body length, without icv_len */\r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
        u8 FIXED_IE =7;\r
        u8 ANonce[32];\r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
        u8 FIXED_IE =7;\r
        u8 ANonce[32];\r
@@ -1322,161 +1538,162 @@ int On_TDLS_Setup_Rsp(_adapter *padapter, union recv_frame *precv_frame)
        int                             supportRateNum = 0;\r
        struct tdls_txmgmt txmgmt;\r
        int ret = _SUCCESS;\r
        int                             supportRateNum = 0;\r
        struct tdls_txmgmt txmgmt;\r
        int ret = _SUCCESS;\r
+       u32 timeout_interval = TPK_RESEND_COUNT;\r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
 \r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
 \r
-       if ( NULL == ptdls_sta )\r
-       {\r
+       if (NULL == ptdls_sta) {\r
                ret = _FAIL;\r
                goto exit;\r
        }\r
 \r
                ret = _FAIL;\r
                goto exit;\r
        }\r
 \r
-       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;\r
+       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+ETH_TYPE_LEN+PAYLOAD_TYPE_LEN;\r
        parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len\r
                        -prx_pkt_attrib->hdrlen\r
                        -prx_pkt_attrib->iv_len\r
                        -prx_pkt_attrib->icv_len\r
                        -LLC_HEADER_SIZE\r
        parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len\r
                        -prx_pkt_attrib->hdrlen\r
                        -prx_pkt_attrib->iv_len\r
                        -prx_pkt_attrib->icv_len\r
                        -LLC_HEADER_SIZE\r
-                       -TYPE_LENGTH_FIELD_SIZE\r
-                       -1\r
+                       -ETH_TYPE_LEN\r
+                       -PAYLOAD_TYPE_LEN\r
                        -FIXED_IE;\r
 \r
                        -FIXED_IE;\r
 \r
-       _rtw_memcpy(&stat_code, ptr+2, 2);\r
+       _rtw_memcpy(&status_code, ptr+2, 2);\r
        \r
        \r
-       if(stat_code!=0)\r
-       {\r
-               DBG_871X( "[%s] status_code = %d, free_tdls_sta\n", __FUNCTION__, stat_code );\r
+       if (status_code != 0) {\r
+               DBG_871X( "[TDLS] %s status_code = %d, free_tdls_sta\n", __FUNCTION__, status_code );\r
                free_tdls_sta(padapter, ptdls_sta);\r
                ret = _FAIL;\r
                goto exit;\r
        }\r
 \r
                free_tdls_sta(padapter, ptdls_sta);\r
                ret = _FAIL;\r
                goto exit;\r
        }\r
 \r
-       stat_code = 0;\r
+       status_code = 0;\r
 \r
 \r
-       //parsing information element\r
-       for(j=FIXED_IE; j<parsing_length;)\r
-       {\r
+       /* parsing information element */\r
+       for (j = FIXED_IE; j<parsing_length;) {\r
                pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
                pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
-               switch (pIE->ElementID)\r
-               {\r
-                       case _SUPPORTEDRATES_IE_:\r
-                               _rtw_memcpy(supportRate, pIE->data, pIE->Length);\r
-                               supportRateNum = pIE->Length;\r
-                               break;\r
-                       case _COUNTRY_IE_:\r
-                               break;\r
-                       case _EXT_SUPPORTEDRATES_IE_:\r
-                               if(supportRateNum<=sizeof(supportRate))\r
-                               {\r
-                                       _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);\r
-                                       supportRateNum += pIE->Length;\r
-                               }\r
-                               break;\r
-                       case _SUPPORTED_CH_IE_:\r
-                               break;\r
-                       case _RSN_IE_2_:\r
-                               prsnie=(u8*)pIE;\r
-                               //check whether responder STA has CCMP pairwise_cipher.\r
-                               ppairwise_cipher=prsnie+10;\r
-                               _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 2);\r
-                               for(k=0;k<pairwise_count;k++){\r
-                                       if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)\r
-                                               verify_ccmp=1;\r
-                               }\r
-                       case _EXT_CAP_IE_:\r
-                               break;\r
-                       case _VENDOR_SPECIFIC_IE_:\r
-                               break;\r
-                       case _FTIE_:\r
-                               pftie=(u8*)pIE;\r
-                               //_rtw_memcpy(ptdls_sta->ANonce, (ptr+j+20), 32);\r
-                               _rtw_memcpy(ANonce, (ptr+j+20), 32);\r
-                               break;\r
-                       case _TIMEOUT_ITVL_IE_:\r
-                               ptimeout_ie=(u8*)pIE;\r
-                               break;\r
-                       case _RIC_Descriptor_IE_:\r
-                               break;\r
-                       case _HT_CAPABILITY_IE_:\r
-                               rtw_tdls_process_ht_cap(padapter, ptdls_sta, pIE->data, pIE->Length);\r
-                               break;\r
-                       case EID_BSSCoexistence:\r
-                               break;\r
-                       case _LINK_ID_IE_:\r
-                               plinkid_ie=(u8*)pIE;\r
-                               break;\r
-                       default:\r
-                               break;\r
+               switch (pIE->ElementID) {\r
+               case _SUPPORTEDRATES_IE_:\r
+                       _rtw_memcpy(supportRate, pIE->data, pIE->Length);\r
+                       supportRateNum = pIE->Length;\r
+                       break;\r
+               case _COUNTRY_IE_:\r
+                       break;\r
+               case _EXT_SUPPORTEDRATES_IE_:\r
+                       if (supportRateNum<=sizeof(supportRate)) {\r
+                               _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);\r
+                               supportRateNum += pIE->Length;\r
+                       }\r
+                       break;\r
+               case _SUPPORTED_CH_IE_:\r
+                       break;\r
+               case _RSN_IE_2_:\r
+                       prsnie=(u8*)pIE;\r
+                       /* Check CCMP pairwise_cipher presence. */\r
+                       ppairwise_cipher=prsnie+10;\r
+                       _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 2);\r
+                       for (k=0;k<pairwise_count;k++) {\r
+                               if (_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4) == _TRUE)\r
+                                       verify_ccmp=1;\r
+                       }\r
+               case _EXT_CAP_IE_:\r
+                       break;\r
+               case _VENDOR_SPECIFIC_IE_:\r
+                       if (_rtw_memcmp((u8 *)pIE + 2, WMM_INFO_OUI, 6) == _TRUE) {     \r
+                               /* WMM Info ID and OUI */\r
+                               if ((pregistrypriv->wmm_enable == _TRUE) || (padapter->mlmepriv.htpriv.ht_option == _TRUE))\r
+                                       ptdls_sta->qos_option = _TRUE;\r
+                       }\r
+                       break;\r
+               case _FTIE_:\r
+                       pftie=(u8*)pIE;\r
+                       _rtw_memcpy(ANonce, (ptr+j+20), 32);\r
+                       break;\r
+               case _TIMEOUT_ITVL_IE_:\r
+                       ptimeout_ie=(u8*)pIE;\r
+                       timeout_interval = cpu_to_le32(*(u32*)(ptimeout_ie+3));\r
+                       break;\r
+               case _RIC_Descriptor_IE_:\r
+                       break;\r
+               case _HT_CAPABILITY_IE_:\r
+                       rtw_tdls_process_ht_cap(padapter, ptdls_sta, pIE->data, pIE->Length);\r
+                       break;\r
+               case EID_BSSCoexistence:\r
+                       break;\r
+               case _LINK_ID_IE_:\r
+                       plinkid_ie=(u8*)pIE;\r
+                       break;\r
+               default:\r
+                       break;\r
                }\r
 \r
                j += (pIE->Length + 2);\r
                }\r
 \r
                j += (pIE->Length + 2);\r
-               \r
+\r
        }\r
 \r
        }\r
 \r
-       //update station's supportRate  \r
        ptdls_sta->bssratelen = supportRateNum;\r
        _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);\r
        ptdls_sta->bssratelen = supportRateNum;\r
        _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);\r
-\r
        _rtw_memcpy(ptdls_sta->ANonce, ANonce, 32);\r
 \r
 #ifdef CONFIG_WFD\r
        rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);\r
        _rtw_memcpy(ptdls_sta->ANonce, ANonce, 32);\r
 \r
 #ifdef CONFIG_WFD\r
        rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);\r
-#endif // CONFIG_WFD\r
+#endif /* CONFIG_WFD */\r
 \r
 \r
-       if(stat_code != 0)\r
-       {\r
-               ptdls_sta->stat_code = stat_code;\r
-       }\r
-       else\r
-       {\r
-               if(prx_pkt_attrib->encrypt)\r
-               {\r
-                       if(verify_ccmp==1)\r
-                       {\r
-                               wpa_tdls_generate_tpk(padapter, ptdls_sta);\r
-                               ptdls_sta->stat_code=0;\r
-                               if(tdls_verify_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie)==0)   //0: Invalid, 1: valid\r
-                               {\r
-                                       free_tdls_sta(padapter, ptdls_sta);\r
-                                       ret = _FAIL;\r
-                                       goto exit;\r
+       if (status_code != _STATS_SUCCESSFUL_) {\r
+               txmgmt.status_code = status_code;\r
+       } else {\r
+               if (prx_pkt_attrib->encrypt) {\r
+                       if (verify_ccmp == 1) {\r
+                               txmgmt.status_code = _STATS_SUCCESSFUL_;\r
+                               if (rtw_tdls_is_driver_setup(padapter) == _TRUE) {\r
+                                       wpa_tdls_generate_tpk(padapter, ptdls_sta);\r
+                                       if (tdls_verify_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie) == _FAIL) {\r
+                                               DBG_871X( "[TDLS] %s tdls_verify_mic fail, free_tdls_sta\n", __FUNCTION__);\r
+                                               free_tdls_sta(padapter, ptdls_sta);\r
+                                               ret = _FAIL;\r
+                                               goto exit;\r
+                                       }\r
+                                       ptdls_sta->TDLS_PeerKey_Lifetime = timeout_interval;\r
                                }\r
                        }\r
                        else\r
                        {\r
                                }\r
                        }\r
                        else\r
                        {\r
-                               ptdls_sta->stat_code=72;        //invalide contents of RSNIE\r
+                               txmgmt.status_code = _STATS_INVALID_RSNIE_;\r
                        }\r
 \r
                }else{\r
                        }\r
 \r
                }else{\r
-                       ptdls_sta->stat_code=0;\r
+                       txmgmt.status_code = _STATS_SUCCESSFUL_;\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
-       DBG_871X("issue_tdls_setup_cfm\n");\r
-       _rtw_memcpy(txmgmt.peer, prx_pkt_attrib->src, ETH_ALEN);\r
-       issue_tdls_setup_cfm(padapter, &txmgmt);\r
+       if (rtw_tdls_is_driver_setup(padapter) == _TRUE) {\r
+               _rtw_memcpy(txmgmt.peer, prx_pkt_attrib->src, ETH_ALEN);\r
+               issue_tdls_setup_cfm(padapter, &txmgmt);\r
 \r
 \r
-       if(ptdls_sta->stat_code==0)\r
-       {\r
-               ptdlsinfo->link_established = _TRUE;\r
+               if (txmgmt.status_code == _STATS_SUCCESSFUL_) {\r
+                       ptdlsinfo->link_established = _TRUE;\r
 \r
 \r
-               if( ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE )\r
-               {\r
-                       ptdls_sta->tdls_sta_state |= TDLS_LINKED_STATE;\r
-                       _cancel_timer_ex( &ptdls_sta->handshake_timer);\r
-               }\r
+                       if (ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE) {\r
+                               ptdls_sta->tdls_sta_state |= TDLS_LINKED_STATE;\r
+                               ptdls_sta->state |= _FW_LINKED;\r
+                               _cancel_timer_ex( &ptdls_sta->handshake_timer);\r
+                       }\r
 \r
 \r
-               rtw_tdls_set_key(padapter, prx_pkt_attrib, ptdls_sta);\r
+                       if (prx_pkt_attrib->encrypt)\r
+                               rtw_tdls_set_key(padapter, ptdls_sta);\r
 \r
 \r
-               rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_ESTABLISHED);\r
+                       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_ESTABLISHED);\r
 \r
 \r
+               }\r
        }\r
 \r
 exit:\r
        }\r
 \r
 exit:\r
-       return ret;\r
+       if (rtw_tdls_is_driver_setup(padapter) == _TRUE)\r
+               return ret;\r
+       else\r
+               return _SUCCESS;\r
 \r
 }\r
 \r
 \r
 }\r
 \r
@@ -1489,7 +1706,7 @@ int On_TDLS_Setup_Cfm(_adapter *padapter, union recv_frame *precv_frame)
        _irqL irqL;\r
        struct rx_pkt_attrib    *prx_pkt_attrib = &precv_frame->u.hdr.attrib;\r
        u8 *psa; \r
        _irqL irqL;\r
        struct rx_pkt_attrib    *prx_pkt_attrib = &precv_frame->u.hdr.attrib;\r
        u8 *psa; \r
-       u16 stat_code;\r
+       u16 status_code=0;\r
        sint parsing_length;\r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
        u8 FIXED_IE =5;\r
        sint parsing_length;\r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
        u8 FIXED_IE =5;\r
@@ -1500,14 +1717,13 @@ int On_TDLS_Setup_Cfm(_adapter *padapter, union recv_frame *precv_frame)
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
 \r
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
 \r
-       if(ptdls_sta == NULL)\r
-       {\r
-               DBG_871X( "[%s] Direct Link Peer = "MAC_FMT" not found\n", __FUNCTION__, MAC_ARG(psa) );\r
+       if (ptdls_sta == NULL) {\r
+               DBG_871X("[%s] Direct Link Peer = "MAC_FMT" not found\n", __FUNCTION__, MAC_ARG(psa));\r
                ret = _FAIL;\r
                goto exit;\r
        }\r
 \r
                ret = _FAIL;\r
                goto exit;\r
        }\r
 \r
-       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;\r
+       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+ETH_TYPE_LEN+PAYLOAD_TYPE_LEN;\r
        parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len\r
                        -prx_pkt_attrib->hdrlen\r
                        -prx_pkt_attrib->iv_len\r
        parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len\r
                        -prx_pkt_attrib->hdrlen\r
                        -prx_pkt_attrib->iv_len\r
@@ -1516,49 +1732,54 @@ int On_TDLS_Setup_Cfm(_adapter *padapter, union recv_frame *precv_frame)
                        -ETH_TYPE_LEN\r
                        -PAYLOAD_TYPE_LEN\r
                        -FIXED_IE;\r
                        -ETH_TYPE_LEN\r
                        -PAYLOAD_TYPE_LEN\r
                        -FIXED_IE;\r
-       _rtw_memcpy(&stat_code, ptr+2, 2);\r
 \r
 \r
-       if(stat_code!=0){\r
-               DBG_871X( "[%s] stat_code = %d\n, free_tdls_sta", __FUNCTION__, stat_code );\r
+       _rtw_memcpy(&status_code, ptr+2, 2);\r
+\r
+       if (status_code!= 0) {\r
+               DBG_871X("[%s] status_code = %d\n, free_tdls_sta", __FUNCTION__, status_code);\r
                free_tdls_sta(padapter, ptdls_sta);\r
                ret = _FAIL;\r
                goto exit;\r
        }\r
 \r
                free_tdls_sta(padapter, ptdls_sta);\r
                ret = _FAIL;\r
                goto exit;\r
        }\r
 \r
-       if(prx_pkt_attrib->encrypt){\r
-               //parsing information element\r
-               for(j=FIXED_IE; j<parsing_length;){\r
+       if (prx_pkt_attrib->encrypt) {\r
+               /* Parsing information element */\r
+               for(j=FIXED_IE; j<parsing_length;) {\r
 \r
                        pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
 \r
                        pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
-                       switch (pIE->ElementID)\r
-                       {\r
-                               case _RSN_IE_2_:\r
-                                       prsnie=(u8*)pIE;\r
-                                       break;\r
-                               case _VENDOR_SPECIFIC_IE_:\r
-                                       break;\r
-                               case _FTIE_:\r
-                                       pftie=(u8*)pIE;\r
-                                       break;\r
-                               case _TIMEOUT_ITVL_IE_:\r
-                                       ptimeout_ie=(u8*)pIE;\r
-                                       break;\r
-                               case _HT_EXTRA_INFO_IE_:\r
-                                       break;\r
-                               case _LINK_ID_IE_:\r
-                                       plinkid_ie=(u8*)pIE;\r
-                                       break;\r
-                               default:\r
-                                       break;\r
+                       switch (pIE->ElementID) {\r
+                       case _RSN_IE_2_:\r
+                               prsnie=(u8*)pIE;\r
+                               break;\r
+                       case _VENDOR_SPECIFIC_IE_:\r
+                               if (_rtw_memcmp((u8 *)pIE + 2, WMM_PARA_OUI, 6) == _TRUE) {     \r
+                                       /* WMM Parameter ID and OUI */\r
+                                       ptdls_sta->qos_option = _TRUE;\r
+                               }\r
+                               break;\r
+                       case _FTIE_:\r
+                               pftie=(u8*)pIE;\r
+                               break;\r
+                       case _TIMEOUT_ITVL_IE_:\r
+                               ptimeout_ie=(u8*)pIE;\r
+                               break;\r
+                       case _HT_EXTRA_INFO_IE_:\r
+                               break;\r
+                       case _LINK_ID_IE_:\r
+                               plinkid_ie=(u8*)pIE;\r
+                               break;\r
+                       default:\r
+                               break;\r
                        }\r
 \r
                        j += (pIE->Length + 2);\r
                        \r
                }\r
 \r
                        }\r
 \r
                        j += (pIE->Length + 2);\r
                        \r
                }\r
 \r
-               //verify mic in FTIE MIC field\r
-               if(tdls_verify_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie)==0){  //0: Invalid, 1: Valid\r
+               /* Verify mic in FTIE MIC field */\r
+               if (rtw_tdls_is_driver_setup(padapter) &&\r
+                       (tdls_verify_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie) == _FAIL)) {\r
                        free_tdls_sta(padapter, ptdls_sta);\r
                        ret = _FAIL;\r
                        goto exit;\r
                        free_tdls_sta(padapter, ptdls_sta);\r
                        ret = _FAIL;\r
                        goto exit;\r
@@ -1566,16 +1787,25 @@ int On_TDLS_Setup_Cfm(_adapter *padapter, union recv_frame *precv_frame)
 \r
        }\r
 \r
 \r
        }\r
 \r
-       ptdlsinfo->link_established = _TRUE;\r
-       if( ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE )\r
-       {\r
-               ptdls_sta->tdls_sta_state|=TDLS_LINKED_STATE;\r
-               _cancel_timer_ex( &ptdls_sta->handshake_timer);\r
-       }\r
+       if (rtw_tdls_is_driver_setup(padapter)) {\r
+               ptdlsinfo->link_established = _TRUE;\r
 \r
 \r
-       rtw_tdls_set_key(padapter, prx_pkt_attrib, ptdls_sta);\r
+               if (ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE) {\r
+                       ptdls_sta->tdls_sta_state|=TDLS_LINKED_STATE;\r
+                       ptdls_sta->state |= _FW_LINKED;\r
+                       _cancel_timer_ex(&ptdls_sta->handshake_timer);\r
+               }\r
+\r
+               if (prx_pkt_attrib->encrypt) {\r
+                       rtw_tdls_set_key(padapter, ptdls_sta);\r
+\r
+                       /* Start  TPK timer */\r
+                       ptdls_sta->TPK_count = 0;\r
+                       _set_timer(&ptdls_sta->TPK_timer, ONE_SEC);\r
+               }\r
 \r
 \r
-       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_ESTABLISHED);\r
+               rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_ESTABLISHED);\r
+       }\r
 \r
 exit:\r
        return ret;\r
 \r
 exit:\r
        return ret;\r
@@ -1588,15 +1818,18 @@ int On_TDLS_Dis_Req(_adapter *padapter, union recv_frame *precv_frame)
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        struct sta_info *psta_ap;\r
        u8 *ptr = precv_frame->u.hdr.rx_data;\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        struct sta_info *psta_ap;\r
        u8 *ptr = precv_frame->u.hdr.rx_data;\r
-       sint parsing_length;    //frame body length, without icv_len\r
+       sint parsing_length;    /* Frame body length, without icv_len */\r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
        u8 FIXED_IE = 3, *dst;\r
        u16 j;\r
        struct tdls_txmgmt txmgmt;\r
        int ret = _SUCCESS;\r
 \r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
        u8 FIXED_IE = 3, *dst;\r
        u16 j;\r
        struct tdls_txmgmt txmgmt;\r
        int ret = _SUCCESS;\r
 \r
+       if (rtw_tdls_is_driver_setup(padapter) == _FALSE)\r
+               goto exit;\r
+\r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
-       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len + LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE + 1;\r
+       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+ETH_TYPE_LEN+PAYLOAD_TYPE_LEN;\r
        txmgmt.dialog_token = *(ptr+2);\r
        _rtw_memcpy(&txmgmt.peer, precv_frame->u.hdr.attrib.src, ETH_ALEN);\r
        txmgmt.action_code = TDLS_DISCOVERY_RESPONSE;\r
        txmgmt.dialog_token = *(ptr+2);\r
        _rtw_memcpy(&txmgmt.peer, precv_frame->u.hdr.attrib.src, ETH_ALEN);\r
        txmgmt.action_code = TDLS_DISCOVERY_RESPONSE;\r
@@ -1605,31 +1838,26 @@ int On_TDLS_Dis_Req(_adapter *padapter, union recv_frame *precv_frame)
                        -prx_pkt_attrib->iv_len\r
                        -prx_pkt_attrib->icv_len\r
                        -LLC_HEADER_SIZE\r
                        -prx_pkt_attrib->iv_len\r
                        -prx_pkt_attrib->icv_len\r
                        -LLC_HEADER_SIZE\r
-                       -TYPE_LENGTH_FIELD_SIZE\r
-                       -1\r
+                       -ETH_TYPE_LEN\r
+                       -PAYLOAD_TYPE_LEN\r
                        -FIXED_IE;\r
 \r
                        -FIXED_IE;\r
 \r
-       //parsing information element\r
-       for(j=FIXED_IE; j<parsing_length;){\r
+       /* Parsing information element */\r
+       for (j=FIXED_IE; j<parsing_length;) {\r
 \r
                pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
 \r
                pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
-               switch (pIE->ElementID)\r
-               {\r
-                       case _LINK_ID_IE_:\r
-                               psta_ap = rtw_get_stainfo(pstapriv, pIE->data);\r
-                               if(psta_ap == NULL)\r
-                               {\r
-                                       goto exit;\r
-                               }\r
-                               dst = pIE->data + 12;\r
-                               if( (MacAddr_isBcst(dst) == _FALSE) && (_rtw_memcmp(myid(&(padapter->eeprompriv)), dst, 6) == _FALSE) )\r
-                               {\r
-                                       goto exit;\r
-                               }\r
-                               break;\r
-                       default:\r
-                               break;\r
+               switch (pIE->ElementID) {\r
+               case _LINK_ID_IE_:\r
+                       psta_ap = rtw_get_stainfo(pstapriv, pIE->data);\r
+                       if (psta_ap == NULL)\r
+                               goto exit;\r
+                       dst = pIE->data + 12;\r
+                       if (MacAddr_isBcst(dst) == _FALSE && (_rtw_memcmp(adapter_mac_addr(padapter), dst, 6) == _FALSE))\r
+                               goto exit;\r
+                       break;\r
+               default:\r
+                       break;\r
                }\r
 \r
                j += (pIE->Length + 2);\r
                }\r
 \r
                j += (pIE->Length + 2);\r
@@ -1637,7 +1865,7 @@ int On_TDLS_Dis_Req(_adapter *padapter, union recv_frame *precv_frame)
        }\r
 \r
        issue_tdls_dis_rsp(padapter, &txmgmt, prx_pkt_attrib->privacy);\r
        }\r
 \r
        issue_tdls_dis_rsp(padapter, &txmgmt, prx_pkt_attrib->privacy);\r
-\r
+               \r
 exit:\r
        return ret;\r
        \r
 exit:\r
        return ret;\r
        \r
@@ -1653,51 +1881,51 @@ int On_TDLS_Teardown(_adapter *padapter, union recv_frame *precv_frame)
        struct sta_priv         *pstapriv = &padapter->stapriv;\r
        struct sta_info *ptdls_sta= NULL;\r
        _irqL irqL;\r
        struct sta_priv         *pstapriv = &padapter->stapriv;\r
        struct sta_info *ptdls_sta= NULL;\r
        _irqL irqL;\r
+       u8 reason;\r
+\r
+       reason = *(ptr + prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len + LLC_HEADER_SIZE + ETH_TYPE_LEN + PAYLOAD_TYPE_LEN + 2);\r
+       DBG_871X("[TDLS] %s Reason code(%d)\n", __FUNCTION__,reason);\r
 \r
        psa = get_sa(ptr);\r
 \r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
 \r
        psa = get_sa(ptr);\r
 \r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
-       if(ptdls_sta!=NULL){\r
-               if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){\r
-                       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CS_OFF);\r
-               }\r
-               free_tdls_sta(padapter, ptdls_sta);\r
+       if (ptdls_sta != NULL) {\r
+               if (rtw_tdls_is_driver_setup(padapter))\r
+                       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_TEAR_STA);\r
        }\r
        }\r
-               \r
+\r
        return _SUCCESS;\r
        \r
 }\r
 \r
        return _SUCCESS;\r
        \r
 }\r
 \r
+#if 0\r
 u8 TDLS_check_ch_state(uint state){\r
 u8 TDLS_check_ch_state(uint state){\r
-       if(     (state & TDLS_CH_SWITCH_ON_STATE) &&\r
-               (state & TDLS_AT_OFF_CH_STATE) &&\r
-               (state & TDLS_PEER_AT_OFF_STATE) ){\r
-\r
-               if(state & TDLS_PEER_SLEEP_STATE)\r
-                       return 2;       //U-APSD + ch. switch\r
+       if (state & TDLS_CH_SWITCH_ON_STATE &&\r
+               state & TDLS_PEER_AT_OFF_STATE) {\r
+               if (state & TDLS_PEER_SLEEP_STATE)\r
+                       return 2;       /* U-APSD + ch. switch */\r
                else\r
                else\r
-                       return 1;       //ch. switch\r
+                       return 1;       /* ch. switch */\r
        }else\r
                return 0;\r
 }\r
        }else\r
                return 0;\r
 }\r
+#endif\r
 \r
 int On_TDLS_Peer_Traffic_Indication(_adapter *padapter, union recv_frame *precv_frame)\r
 {\r
        struct rx_pkt_attrib    *pattrib = &precv_frame->u.hdr.attrib;\r
        struct sta_info *ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->src); \r
        u8 *ptr = precv_frame->u.hdr.rx_data;\r
 \r
 int On_TDLS_Peer_Traffic_Indication(_adapter *padapter, union recv_frame *precv_frame)\r
 {\r
        struct rx_pkt_attrib    *pattrib = &precv_frame->u.hdr.attrib;\r
        struct sta_info *ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->src); \r
        u8 *ptr = precv_frame->u.hdr.rx_data;\r
+       struct tdls_txmgmt txmgmt;\r
 \r
 \r
-       ptr +=pattrib->hdrlen + pattrib->iv_len + LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE + 1;\r
-\r
-       if(ptdls_sta != NULL)\r
-       {\r
-               ptdls_sta->dialog = *(ptr+2);\r
-               issue_tdls_peer_traffic_rsp(padapter, ptdls_sta);\r
+       ptr +=pattrib->hdrlen + pattrib->iv_len+LLC_HEADER_SIZE+ETH_TYPE_LEN+PAYLOAD_TYPE_LEN;\r
+       _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
 \r
 \r
+       if (ptdls_sta != NULL) {\r
+               txmgmt.dialog_token = *(ptr+2);\r
+               issue_tdls_peer_traffic_rsp(padapter, ptdls_sta, &txmgmt);\r
                //issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta->hwaddr, 0, 0, 0);\r
                //issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta->hwaddr, 0, 0, 0);\r
-       }\r
-       else\r
-       {\r
+       } else {\r
                DBG_871X("from unknown sta:"MAC_FMT"\n", MAC_ARG(pattrib->src));\r
                return _FAIL;\r
        }\r
                DBG_871X("from unknown sta:"MAC_FMT"\n", MAC_ARG(pattrib->src));\r
                return _FAIL;\r
        }\r
@@ -1705,44 +1933,29 @@ int On_TDLS_Peer_Traffic_Indication(_adapter *padapter, union recv_frame *precv_
        return _SUCCESS;\r
 }\r
 \r
        return _SUCCESS;\r
 }\r
 \r
-//we process buffered data for 1. U-APSD, 2. ch. switch, 3. U-APSD + ch. switch here\r
+/* We process buffered data for 1. U-APSD, 2. ch. switch, 3. U-APSD + ch. switch here */\r
 int On_TDLS_Peer_Traffic_Rsp(_adapter *padapter, union recv_frame *precv_frame)\r
 {\r
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;\r
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;\r
        struct rx_pkt_attrib    *pattrib = & precv_frame->u.hdr.attrib;\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
 int On_TDLS_Peer_Traffic_Rsp(_adapter *padapter, union recv_frame *precv_frame)\r
 {\r
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;\r
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;\r
        struct rx_pkt_attrib    *pattrib = & precv_frame->u.hdr.attrib;\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
-       //get peer sta infomation\r
        struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);\r
        struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);\r
-       u8 wmmps_ac=0, state=TDLS_check_ch_state(ptdls_sta->tdls_sta_state);\r
+       u8 wmmps_ac=0;\r
+       /* u8 state=TDLS_check_ch_state(ptdls_sta->tdls_sta_state); */\r
        int i;\r
        \r
        ptdls_sta->sta_stats.rx_data_pkts++;\r
 \r
        ptdls_sta->tdls_sta_state &= ~(TDLS_WAIT_PTR_STATE);\r
 \r
        int i;\r
        \r
        ptdls_sta->sta_stats.rx_data_pkts++;\r
 \r
        ptdls_sta->tdls_sta_state &= ~(TDLS_WAIT_PTR_STATE);\r
 \r
-       //receive peer traffic response frame, sleeping STA wakes up\r
-       //ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_SLEEP_STATE);\r
-       //process_wmmps_data( padapter, precv_frame);\r
-\r
-       // if noticed peer STA wakes up by receiving peer traffic response\r
-       // and we want to do channel swtiching, then we will transmit channel switch request first\r
-       if(ptdls_sta->tdls_sta_state & TDLS_APSD_CHSW_STATE){\r
-               issue_tdls_ch_switch_req(padapter, pattrib->src);\r
-               ptdls_sta->tdls_sta_state &= ~(TDLS_APSD_CHSW_STATE);\r
-               return  _SUCCESS;\r
-       }\r
-\r
-       //check 4-AC queue bit\r
-       if(ptdls_sta->uapsd_vo || ptdls_sta->uapsd_vi || ptdls_sta->uapsd_be || ptdls_sta->uapsd_bk)\r
+       /* Check 4-AC queue bit */\r
+       if (ptdls_sta->uapsd_vo || ptdls_sta->uapsd_vi || ptdls_sta->uapsd_be || ptdls_sta->uapsd_bk)\r
                wmmps_ac=1;\r
 \r
                wmmps_ac=1;\r
 \r
-       //if it's a direct link and have buffered frame\r
-       if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){\r
-               //[TDLS] UAPSD\r
-               //if(wmmps_ac && state)\r
-               if(wmmps_ac && 1)\r
-               {\r
+       /* If it's a direct link and have buffered frame */\r
+       if (ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) {\r
+               if (wmmps_ac) {\r
                        _irqL irqL;      \r
                        _list   *xmitframe_plist, *xmitframe_phead;\r
                        struct xmit_frame *pxmitframe=NULL;\r
                        _irqL irqL;      \r
                        _list   *xmitframe_plist, *xmitframe_phead;\r
                        struct xmit_frame *pxmitframe=NULL;\r
@@ -1752,48 +1965,31 @@ int On_TDLS_Peer_Traffic_Rsp(_adapter *padapter, union recv_frame *precv_frame)
                        xmitframe_phead = get_list_head(&ptdls_sta->sleep_q);\r
                        xmitframe_plist = get_next(xmitframe_phead);\r
 \r
                        xmitframe_phead = get_list_head(&ptdls_sta->sleep_q);\r
                        xmitframe_plist = get_next(xmitframe_phead);\r
 \r
-                       //transmit buffered frames\r
-                       while ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == _FALSE)\r
-                       {                       \r
+                       /* transmit buffered frames */\r
+                       while (rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist) == _FALSE) {\r
                                pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);\r
                                xmitframe_plist = get_next(xmitframe_plist);\r
                                rtw_list_delete(&pxmitframe->list);\r
 \r
                                ptdls_sta->sleepq_len--;\r
                                ptdls_sta->sleepq_ac_len--;\r
                                pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);\r
                                xmitframe_plist = get_next(xmitframe_plist);\r
                                rtw_list_delete(&pxmitframe->list);\r
 \r
                                ptdls_sta->sleepq_len--;\r
                                ptdls_sta->sleepq_ac_len--;\r
-                               if(ptdls_sta->sleepq_len>0){\r
+                               if (ptdls_sta->sleepq_len>0) {\r
                                        pxmitframe->attrib.mdata = 1;\r
                                        pxmitframe->attrib.eosp = 0;\r
                                        pxmitframe->attrib.mdata = 1;\r
                                        pxmitframe->attrib.eosp = 0;\r
-                               }else{\r
+                               } else {\r
                                        pxmitframe->attrib.mdata = 0;\r
                                        pxmitframe->attrib.eosp = 1;\r
                                }\r
                                pxmitframe->attrib.triggered = 1;\r
 \r
                                rtw_hal_xmitframe_enqueue(padapter, pxmitframe);\r
                                        pxmitframe->attrib.mdata = 0;\r
                                        pxmitframe->attrib.eosp = 1;\r
                                }\r
                                pxmitframe->attrib.triggered = 1;\r
 \r
                                rtw_hal_xmitframe_enqueue(padapter, pxmitframe);\r
-\r
-\r
                        }\r
 \r
                        }\r
 \r
-                       if(ptdls_sta->sleepq_len==0)\r
-                       {\r
+                       if (ptdls_sta->sleepq_len==0)\r
                                DBG_871X("no buffered packets for tdls to xmit\n");\r
                                DBG_871X("no buffered packets for tdls to xmit\n");\r
-                               //on U-APSD + CH. switch state, when there is no buffered date to xmit,\r
-                               // we should go back to base channel\r
-                               if(state==2){\r
-                                       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CS_OFF);\r
-                               }else if(ptdls_sta->tdls_sta_state&TDLS_SW_OFF_STATE){\r
-                                               ptdls_sta->tdls_sta_state &= ~(TDLS_SW_OFF_STATE);\r
-                                               ptdlsinfo->candidate_ch= pmlmeext->cur_channel;\r
-                                               issue_tdls_ch_switch_req(padapter, pattrib->src);\r
-                                               DBG_871X("issue tdls ch switch req back to base channel\n");\r
-                               }\r
-                               \r
-                       }\r
-                       else\r
-                       {\r
+                       else {\r
                                DBG_871X("error!psta->sleepq_len=%d\n", ptdls_sta->sleepq_len);\r
                                DBG_871X("error!psta->sleepq_len=%d\n", ptdls_sta->sleepq_len);\r
-                               ptdls_sta->sleepq_len=0;                                                \r
+                               ptdls_sta->sleepq_len=0;\r
                        }\r
 \r
                        _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);                     \r
                        }\r
 \r
                        _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);                     \r
@@ -1805,8 +2001,10 @@ int On_TDLS_Peer_Traffic_Rsp(_adapter *padapter, union recv_frame *precv_frame)
        return _SUCCESS;\r
 }\r
 \r
        return _SUCCESS;\r
 }\r
 \r
+#ifdef CONFIG_TDLS_CH_SW\r
 sint On_TDLS_Ch_Switch_Req(_adapter *padapter, union recv_frame *precv_frame)\r
 {\r
 sint On_TDLS_Ch_Switch_Req(_adapter *padapter, union recv_frame *precv_frame)\r
 {\r
+       struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;\r
        struct sta_info *ptdls_sta= NULL;\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        u8 *ptr = precv_frame->u.hdr.rx_data;\r
        struct sta_info *ptdls_sta= NULL;\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        u8 *ptr = precv_frame->u.hdr.rx_data;\r
@@ -1814,14 +2012,25 @@ sint On_TDLS_Ch_Switch_Req(_adapter *padapter, union recv_frame *precv_frame)
        u8 *psa; \r
        sint parsing_length;\r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
        u8 *psa; \r
        sint parsing_length;\r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
-       u8 FIXED_IE =3;\r
+       u8 FIXED_IE = 4;\r
        u16 j;\r
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;\r
        u16 j;\r
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;\r
+       struct tdls_txmgmt txmgmt;\r
+       u16 switch_time= CH_SWITCH_TIME * 1000, switch_timeout=CH_SWITCH_TIMEOUT * 1000;\r
 \r
 \r
+       if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)\r
+       {       DBG_871X("[TDLS] Ignore %s since ch_switch_prohibited = _TRUE\n", __FUNCTION__);\r
+               return _SUCCESS;\r
+       }\r
+       \r
+       _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
-       \r
-       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;\r
+\r
+       ptdls_sta->ch_switch_time=switch_time;\r
+       ptdls_sta->ch_switch_timeout=switch_timeout;\r
+\r
+       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+ETH_TYPE_LEN+PAYLOAD_TYPE_LEN;\r
        parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len\r
                        -prx_pkt_attrib->hdrlen\r
                        -prx_pkt_attrib->iv_len\r
        parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len\r
                        -prx_pkt_attrib->hdrlen\r
                        -prx_pkt_attrib->iv_len\r
@@ -1831,55 +2040,54 @@ sint On_TDLS_Ch_Switch_Req(_adapter *padapter, union recv_frame *precv_frame)
                        -PAYLOAD_TYPE_LEN\r
                        -FIXED_IE;\r
 \r
                        -PAYLOAD_TYPE_LEN\r
                        -FIXED_IE;\r
 \r
-       ptdls_sta->off_ch = *(ptr+2);\r
-       \r
-       //parsing information element\r
-       for(j=FIXED_IE; j<parsing_length;){\r
+       pchsw_info->off_ch_num = *(ptr + 2);\r
 \r
 \r
+       if (*(ptr + 2) == 2) {\r
+               pchsw_info->off_ch_num = 11;\r
+       }\r
+\r
+       if (pchsw_info->off_ch_num != pmlmeext->cur_channel) {\r
+               pchsw_info->delay_switch_back = _FALSE;\r
+       }\r
+\r
+       /* Parsing information element */\r
+       for (j=FIXED_IE; j<parsing_length;) {\r
                pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
                pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
-               switch (pIE->ElementID)\r
-               {\r
-                       case _COUNTRY_IE_:\r
-                               break;\r
-                       case _CH_SWTICH_ANNOUNCE_:\r
-                               break;\r
-                       case _LINK_ID_IE_:\r
-                               break;\r
-                       case _CH_SWITCH_TIMING_:\r
-                               _rtw_memcpy(&ptdls_sta->ch_switch_time, pIE->data, 2);\r
-                               _rtw_memcpy(&ptdls_sta->ch_switch_timeout, pIE->data+2, 2);\r
-                       default:\r
-                               break;\r
+               switch (pIE->ElementID) {\r
+               case EID_SecondaryChnlOffset:\r
+                       padapter->tdlsinfo.chsw_info.ch_offset = *(pIE->data);\r
+                       break;\r
+               case _LINK_ID_IE_:\r
+                       break;\r
+               case _CH_SWITCH_TIMING_:\r
+                       ptdls_sta->ch_switch_time = (RTW_GET_LE16(pIE->data) >= CH_SWITCH_TIME * 1000) ?\r
+                               RTW_GET_LE16(pIE->data) : CH_SWITCH_TIME * 1000;\r
+                       ptdls_sta->ch_switch_timeout = (RTW_GET_LE16(pIE->data + 2) >= CH_SWITCH_TIMEOUT * 1000) ?\r
+                               RTW_GET_LE16(pIE->data + 2) : CH_SWITCH_TIMEOUT * 1000;\r
+                       DBG_871X("%s ch_switch_time:%d, ch_switch_timeout:%d\n"\r
+                               , __FUNCTION__, RTW_GET_LE16(pIE->data), RTW_GET_LE16(pIE->data + 2));\r
+               default:\r
+                       break;\r
                }\r
 \r
                j += (pIE->Length + 2);\r
                }\r
 \r
                j += (pIE->Length + 2);\r
-               \r
        }\r
 \r
        }\r
 \r
-       //todo: check status\r
-       ptdls_sta->stat_code=0;\r
-       ptdls_sta->tdls_sta_state |= TDLS_CH_SWITCH_ON_STATE;\r
-\r
-       issue_nulldata(padapter, NULL, 1, 0, 0);\r
-\r
-       issue_tdls_ch_switch_rsp(padapter, psa);\r
+       /* Todo: check status */\r
+       txmgmt.status_code = 0;\r
+       _rtw_memcpy(txmgmt.peer, psa, ETH_ALEN);\r
+       \r
+       ATOMIC_SET(&pchsw_info->chsw_on, _TRUE);\r
 \r
 \r
-       DBG_871X("issue tdls channel switch response\n");\r
+       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_RESP);\r
 \r
 \r
-       if((ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE) && ptdls_sta->off_ch==pmlmeext->cur_channel){\r
-               DBG_871X("back to base channel %x\n", pmlmeext->cur_channel);\r
-               ptdls_sta->option=TDLS_BASE_CH;\r
-               rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_BASE_CH);\r
-       }else{          \r
-               ptdls_sta->option=TDLS_OFF_CH;\r
-               rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_OFF_CH);\r
-       }\r
        return _SUCCESS;\r
 }\r
 \r
 sint On_TDLS_Ch_Switch_Rsp(_adapter *padapter, union recv_frame *precv_frame)\r
 {\r
        return _SUCCESS;\r
 }\r
 \r
 sint On_TDLS_Ch_Switch_Rsp(_adapter *padapter, union recv_frame *precv_frame)\r
 {\r
+       struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;\r
        struct sta_info *ptdls_sta= NULL;\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        u8 *ptr = precv_frame->u.hdr.rx_data;\r
        struct sta_info *ptdls_sta= NULL;\r
        struct sta_priv *pstapriv = &padapter->stapriv;\r
        u8 *ptr = precv_frame->u.hdr.rx_data;\r
@@ -1887,38 +2095,31 @@ sint On_TDLS_Ch_Switch_Rsp(_adapter *padapter, union recv_frame *precv_frame)
        u8 *psa; \r
        sint parsing_length;\r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
        u8 *psa; \r
        sint parsing_length;\r
        PNDIS_802_11_VARIABLE_IEs       pIE;\r
-       u8 FIXED_IE =4;\r
-       u16 stat_code, j, switch_time, switch_timeout;\r
+       u8 FIXED_IE = 4;\r
+       u16 status_code, j, switch_time, switch_timeout;\r
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;\r
        int ret = _SUCCESS;\r
 \r
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;\r
        int ret = _SUCCESS;\r
 \r
+       if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)\r
+       {       DBG_871X("[TDLS] Ignore %s since ch_switch_prohibited = _TRUE\n", __FUNCTION__);\r
+               return _SUCCESS;\r
+       }\r
+\r
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
 \r
        psa = get_sa(ptr);\r
        ptdls_sta = rtw_get_stainfo(pstapriv, psa);\r
 \r
-       //if channel switch is running and receiving Unsolicited TDLS Channel Switch Response,\r
-       //it will go back to base channel and terminate this channel switch procedure\r
-       if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE ){\r
-               if(pmlmeext->cur_channel==ptdls_sta->off_ch){\r
-                       DBG_871X("back to base channel %x\n", pmlmeext->cur_channel);\r
-                       ptdls_sta->option=TDLS_BASE_CH;\r
-                       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_BASE_CH);\r
-               }else{\r
+       /* If we receive Unsolicited TDLS Channel Switch Response when channel switch is running, */\r
+       /* we will go back to base channel and terminate this channel switch procedure */\r
+       if (ATOMIC_READ(&pchsw_info->chsw_on) == _TRUE) {\r
+               if (pmlmeext->cur_channel != rtw_get_oper_ch(padapter)) {\r
                        DBG_871X("receive unsolicited channel switch response \n");\r
                        DBG_871X("receive unsolicited channel switch response \n");\r
-                       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CS_OFF);\r
+                       rtw_tdls_cmd(padapter, NULL, TDLS_CH_SW_BACK);\r
+                       goto exit;\r
                }\r
                }\r
-               ret = _FAIL;\r
-               goto exit;\r
-       }\r
-\r
-       //avoiding duplicated or unconditional ch. switch. rsp\r
-       if(!(ptdls_sta->tdls_sta_state & TDLS_CH_SW_INITIATOR_STATE))\r
-       {\r
-               ret = _FAIL;\r
-               goto exit;\r
        }\r
 \r
        }\r
 \r
-       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;\r
-       parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len\r
+       ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len + LLC_HEADER_SIZE+ETH_TYPE_LEN+PAYLOAD_TYPE_LEN;\r
+       parsing_length = ((union recv_frame *)precv_frame)->u.hdr.len\r
                        -prx_pkt_attrib->hdrlen\r
                        -prx_pkt_attrib->iv_len\r
                        -prx_pkt_attrib->icv_len\r
                        -prx_pkt_attrib->hdrlen\r
                        -prx_pkt_attrib->iv_len\r
                        -prx_pkt_attrib->icv_len\r
@@ -1927,49 +2128,49 @@ sint On_TDLS_Ch_Switch_Rsp(_adapter *padapter, union recv_frame *precv_frame)
                        -PAYLOAD_TYPE_LEN\r
                        -FIXED_IE;\r
 \r
                        -PAYLOAD_TYPE_LEN\r
                        -FIXED_IE;\r
 \r
-       _rtw_memcpy(&stat_code, ptr+2, 2);\r
+       _rtw_memcpy(&status_code, ptr+2, 2);\r
 \r
 \r
-       if(stat_code!=0){\r
+       if (status_code != 0) {\r
+               DBG_871X("[%s] status_code:%d\n", __FUNCTION__, status_code);\r
+               pchsw_info->ch_sw_state &= ~(TDLS_CH_SW_INITIATOR_STATE);\r
+               ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);\r
                ret = _FAIL;\r
                goto exit;\r
        }\r
        \r
                ret = _FAIL;\r
                goto exit;\r
        }\r
        \r
-       //parsing information element\r
-       for(j=FIXED_IE; j<parsing_length;){\r
-\r
+       /* Parsing information element */\r
+       for (j = FIXED_IE; j < parsing_length;) {\r
                pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
                pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);\r
 \r
-               switch (pIE->ElementID)\r
-               {\r
-                       case _LINK_ID_IE_:\r
-                               break;\r
-                       case _CH_SWITCH_TIMING_:\r
-                               _rtw_memcpy(&switch_time, pIE->data, 2);\r
-                               if(switch_time > ptdls_sta->ch_switch_time)\r
-                                       _rtw_memcpy(&ptdls_sta->ch_switch_time, &switch_time, 2);\r
-\r
-                               _rtw_memcpy(&switch_timeout, pIE->data+2, 2);\r
-                               if(switch_timeout > ptdls_sta->ch_switch_timeout)\r
-                                       _rtw_memcpy(&ptdls_sta->ch_switch_timeout, &switch_timeout, 2);\r
-\r
-                       default:\r
-                               break;\r
+               switch (pIE->ElementID) {\r
+               case _LINK_ID_IE_:\r
+                       break;\r
+               case _CH_SWITCH_TIMING_:\r
+                       _rtw_memcpy(&switch_time, pIE->data, 2);\r
+                       if (switch_time > ptdls_sta->ch_switch_time)\r
+                               _rtw_memcpy(&ptdls_sta->ch_switch_time, &switch_time, 2);\r
+\r
+                       _rtw_memcpy(&switch_timeout, pIE->data + 2, 2);\r
+                       if (switch_timeout > ptdls_sta->ch_switch_timeout)\r
+                               _rtw_memcpy(&ptdls_sta->ch_switch_timeout, &switch_timeout, 2);\r
+                       break;\r
+               default:\r
+                       break;\r
                }\r
 \r
                j += (pIE->Length + 2);\r
                }\r
 \r
                j += (pIE->Length + 2);\r
-               \r
        }\r
 \r
        }\r
 \r
-       ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SW_INITIATOR_STATE);\r
-       ptdls_sta->tdls_sta_state |=TDLS_CH_SWITCH_ON_STATE;\r
-\r
-       //goto set_channel_workitem_callback()\r
-       ptdls_sta->option=TDLS_OFF_CH;\r
-       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_OFF_CH);\r
+       if ((pmlmeext->cur_channel == rtw_get_oper_ch(padapter)) &&\r
+               (pchsw_info->ch_sw_state & TDLS_WAIT_CH_RSP_STATE)) {\r
+               ATOMIC_SET(&pchsw_info->chsw_on, _TRUE);\r
+               rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW);\r
+       }\r
 \r
 exit:\r
        return ret;\r
 }\r
 \r
 exit:\r
        return ret;\r
 }\r
+#endif /* CONFIG_TDLS_CH_SW */\r
 \r
 #ifdef CONFIG_WFD\r
 void wfd_ie_tdls(_adapter * padapter, u8 *pframe, u32 *pktlen )\r
 \r
 #ifdef CONFIG_WFD\r
 void wfd_ie_tdls(_adapter * padapter, u8 *pframe, u32 *pktlen )\r
@@ -1979,376 +2180,230 @@ void wfd_ie_tdls(_adapter * padapter, u8 *pframe, u32 *pktlen )
        u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };\r
        u32 wfdielen = 0;\r
 \r
        u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };\r
        u32 wfdielen = 0;\r
 \r
-       //      WFD OUI\r
+       /* WFD OUI */\r
        wfdielen = 0;\r
        wfdie[ wfdielen++ ] = 0x50;\r
        wfdie[ wfdielen++ ] = 0x6F;\r
        wfdie[ wfdielen++ ] = 0x9A;\r
        wfdielen = 0;\r
        wfdie[ wfdielen++ ] = 0x50;\r
        wfdie[ wfdielen++ ] = 0x6F;\r
        wfdie[ wfdielen++ ] = 0x9A;\r
-       wfdie[ wfdielen++ ] = 0x0A;     //      WFA WFD v1.0\r
-\r
-       //      Commented by Albert 20110825\r
-       //      According to the WFD Specification, the negotiation request frame should contain 3 WFD attributes\r
-       //      1. WFD Device Information\r
-       //      2. Associated BSSID ( Optional )\r
-       //      3. Local IP Adress ( Optional )\r
-\r
-       //      WFD Device Information ATTR\r
-       //      Type:\r
+       wfdie[ wfdielen++ ] = 0x0A;     /* WFA WFD v1.0 */\r
+\r
+       /*\r
+        *      Commented by Albert 20110825\r
+        *      According to the WFD Specification, the negotiation request frame should contain 3 WFD attributes\r
+        *      1. WFD Device Information\r
+        *      2. Associated BSSID ( Optional )\r
+        *      3. Local IP Adress ( Optional )\r
+        */\r
+\r
+       /* WFD Device Information ATTR */\r
+       /* Type: */\r
        wfdie[ wfdielen++ ] = WFD_ATTR_DEVICE_INFO;\r
 \r
        wfdie[ wfdielen++ ] = WFD_ATTR_DEVICE_INFO;\r
 \r
-       //      Length:\r
-       //      Note: In the WFD specification, the size of length field is 2.\r
+       /* Length: */\r
+       /* Note: In the WFD specification, the size of length field is 2. */\r
        RTW_PUT_BE16(wfdie + wfdielen, 0x0006);\r
        wfdielen += 2;\r
 \r
        RTW_PUT_BE16(wfdie + wfdielen, 0x0006);\r
        wfdielen += 2;\r
 \r
-       //      Value1:\r
-       //      WFD device information\r
-       //      available for WFD session + Preferred TDLS + WSD ( WFD Service Discovery )\r
+       /* Value1: */\r
+       /* WFD device information */\r
+       /* available for WFD session + Preferred TDLS + WSD ( WFD Service Discovery ) */\r
        RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL \r
                                                                | WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_WSD);\r
        wfdielen += 2;\r
 \r
        RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL \r
                                                                | WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_WSD);\r
        wfdielen += 2;\r
 \r
-       //      Value2:\r
-       //      Session Management Control Port\r
-       //      Default TCP port for RTSP messages is 554\r
+       /* Value2: */\r
+       /* Session Management Control Port */\r
+       /* Default TCP port for RTSP messages is 554 */\r
        RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->rtsp_ctrlport );\r
        wfdielen += 2;\r
 \r
        RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->rtsp_ctrlport );\r
        wfdielen += 2;\r
 \r
-       //      Value3:\r
-       //      WFD Device Maximum Throughput\r
-       //      300Mbps is the maximum throughput\r
+       /* Value3: */\r
+       /* WFD Device Maximum Throughput */\r
+       /* 300Mbps is the maximum throughput */\r
        RTW_PUT_BE16(wfdie + wfdielen, 300);\r
        wfdielen += 2;\r
 \r
        RTW_PUT_BE16(wfdie + wfdielen, 300);\r
        wfdielen += 2;\r
 \r
-       //      Associated BSSID ATTR\r
-       //      Type:\r
+       /* Associated BSSID ATTR */\r
+       /* Type: */\r
        wfdie[ wfdielen++ ] = WFD_ATTR_ASSOC_BSSID;\r
 \r
        wfdie[ wfdielen++ ] = WFD_ATTR_ASSOC_BSSID;\r
 \r
-       //      Length:\r
-       //      Note: In the WFD specification, the size of length field is 2.\r
+       /* Length: */\r
+       /* Note: In the WFD specification, the size of length field is 2. */\r
        RTW_PUT_BE16(wfdie + wfdielen, 0x0006);\r
        wfdielen += 2;\r
 \r
        RTW_PUT_BE16(wfdie + wfdielen, 0x0006);\r
        wfdielen += 2;\r
 \r
-       //      Value:\r
-       //      Associated BSSID\r
-       if ( check_fwstate( pmlmepriv, _FW_LINKED) == _TRUE )\r
-       {\r
-               _rtw_memcpy( wfdie + wfdielen, &pmlmepriv->assoc_bssid[ 0 ], ETH_ALEN );\r
-       }\r
+       /* Value: */\r
+       /* Associated BSSID */\r
+       if (check_fwstate( pmlmepriv, _FW_LINKED) == _TRUE)\r
+               _rtw_memcpy(wfdie + wfdielen, &pmlmepriv->assoc_bssid[ 0 ], ETH_ALEN);\r
        else\r
        else\r
-       {\r
-               _rtw_memset( wfdie + wfdielen, 0x00, ETH_ALEN );\r
-       }\r
+               _rtw_memset(wfdie + wfdielen, 0x00, ETH_ALEN);\r
 \r
 \r
-       //      Local IP Address ATTR\r
+       /* Local IP Address ATTR */\r
        wfdie[ wfdielen++ ] = WFD_ATTR_LOCAL_IP_ADDR;\r
 \r
        wfdie[ wfdielen++ ] = WFD_ATTR_LOCAL_IP_ADDR;\r
 \r
-       //      Length:\r
-       //      Note: In the WFD specification, the size of length field is 2.\r
+       /* Length: */\r
+       /* Note: In the WFD specification, the size of length field is 2. */\r
        RTW_PUT_BE16(wfdie + wfdielen, 0x0005);\r
        wfdielen += 2;\r
 \r
        RTW_PUT_BE16(wfdie + wfdielen, 0x0005);\r
        wfdielen += 2;\r
 \r
-       //      Version:\r
-       //      0x01: Version1;IPv4\r
+       /* Version: */\r
+       /* 0x01: Version1;IPv4 */\r
        wfdie[ wfdielen++ ] = 0x01;     \r
 \r
        wfdie[ wfdielen++ ] = 0x01;     \r
 \r
-       //      IPv4 Address\r
+       /* IPv4 Address */\r
        _rtw_memcpy( wfdie + wfdielen, pwfd_info->ip_address, 4 );\r
        wfdielen += 4;\r
        \r
        pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, pktlen);\r
        \r
 }\r
        _rtw_memcpy( wfdie + wfdielen, pwfd_info->ip_address, 4 );\r
        wfdielen += 4;\r
        \r
        pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, pktlen);\r
        \r
 }\r
-#endif //CONFIG_WFD\r
+#endif /* CONFIG_WFD */\r
 \r
 void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
 \r
 void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;\r
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;\r
-       struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct registry_priv    *pregistrypriv = &padapter->registrypriv;\r
        struct registry_priv    *pregistrypriv = &padapter->registrypriv;\r
+       struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);\r
 \r
        struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);\r
 \r
-       u8 payload_type = 0x02;\r
-       u8 category = RTW_WLAN_CATEGORY_TDLS;\r
-       u8 action = TDLS_SETUP_REQUEST;\r
-       u8 bssrate[NDIS_802_11_LENGTH_RATES_EX]; //Use NDIS_802_11_LENGTH_RATES_EX in order to call func.rtw_set_supported_rate\r
-       int     bssrate_len = 0, i = 0 ;\r
-       u8 more_supportedrates = 0;\r
-       unsigned int ie_len;\r
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;\r
-       u8 link_id_addr[18] = {0};\r
-       u8 iedata=0;\r
-       u8 sup_ch[ 30 * 2 ] = {0x00 }, sup_ch_idx = 0, idx_5g = 2;      //For supported channel\r
-       u8 timeout_itvl[5];     //set timeout interval to maximum value\r
+       int i = 0 ;\r
        u32 time;\r
        u8 *pframe_head;\r
 \r
        u32 time;\r
        u8 *pframe_head;\r
 \r
-       //SNonce        \r
-       if(pattrib->encrypt){\r
-               for(i=0;i<8;i++){\r
+       /* SNonce */\r
+       if (pattrib->encrypt) {\r
+               for (i=0;i<8;i++) {\r
                        time=rtw_get_current_time();\r
                        _rtw_memcpy(&ptdls_sta->SNonce[4*i], (u8 *)&time, 4);\r
                }\r
        }\r
 \r
                        time=rtw_get_current_time();\r
                        _rtw_memcpy(&ptdls_sta->SNonce[4*i], (u8 *)&time, 4);\r
                }\r
        }\r
 \r
-       pframe_head = pframe;   // For rtw_tdls_set_ht_cap()\r
+       pframe_head = pframe;   /* For rtw_tdls_set_ht_cap() */\r
 \r
 \r
-       //payload type\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));\r
-       //category, action, dialog token\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_payload_type(pframe, pattrib);\r
+       pframe = rtw_tdls_set_category(pframe, pattrib, RTW_WLAN_CATEGORY_TDLS);\r
+       pframe = rtw_tdls_set_action(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_dialog(pframe, pattrib, ptxmgmt);\r
 \r
 \r
-       //capability\r
-       _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);\r
+       pframe = rtw_tdls_set_capability(padapter, pframe, pattrib);\r
+       pframe = rtw_tdls_set_supported_rate(padapter, pframe, pattrib);\r
+       pframe = rtw_tdls_set_sup_ch(&(padapter->mlmeextpriv), pframe, pattrib);\r
+       pframe = rtw_tdls_set_sup_reg_class(pframe, pattrib);\r
 \r
 \r
-       if(pattrib->encrypt)\r
-               *pframe =*pframe | cap_Privacy;\r
-       pframe += 2;\r
-       pattrib->pktlen += 2;\r
+       if (pattrib->encrypt)\r
+               pframe = rtw_tdls_set_rsnie(ptxmgmt, pframe, pattrib,  _TRUE, ptdls_sta);\r
 \r
 \r
-       //supported rates\r
-       if(pmlmeext->cur_channel < 14 )\r
-       {\r
-               rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);\r
-               bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;\r
-       }\r
-       else\r
-       {\r
-               rtw_set_supported_rate(bssrate, WIRELESS_11A_5N);\r
-               bssrate_len = IEEE80211_NUM_OFDM_RATESLEN;\r
-       }\r
+       pframe = rtw_tdls_set_ext_cap(pframe, pattrib);\r
 \r
 \r
-       //country(optional)\r
+       if (pattrib->encrypt) {\r
+               pframe = rtw_tdls_set_ftie(ptxmgmt\r
+                                                                       , pframe\r
+                                                                       , pattrib\r
+                                                                       , NULL\r
+                                                                       , ptdls_sta->SNonce);\r
 \r
 \r
-       if (bssrate_len > 8)\r
-       {\r
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));\r
-               more_supportedrates = 1;\r
+               pframe = rtw_tdls_set_timeout_interval(ptxmgmt, pframe, pattrib, _TRUE, ptdls_sta);\r
        }\r
        }\r
-       else\r
-       {\r
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));\r
-       }\r
-\r
-       //extended supported rates\r
-       if(more_supportedrates==1){\r
-               pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));\r
-       }\r
-\r
-       //supported channels\r
-       pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);\r
-       \r
-       //      SRC IE\r
-       pframe = rtw_set_ie( pframe, _SRC_IE_, sizeof(TDLS_SRC), TDLS_SRC, &(pattrib->pktlen));\r
-       \r
-       //RSNIE\r
-       if(pattrib->encrypt)\r
-               pframe = rtw_set_ie(pframe, _RSN_IE_2_, sizeof(TDLS_RSNIE), TDLS_RSNIE, &(pattrib->pktlen));\r
-       \r
-       //extended capabilities\r
-       pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , sizeof(TDLS_EXT_CAPIE), TDLS_EXT_CAPIE, &(pattrib->pktlen));\r
 \r
 \r
-       //QoS capability(WMM_IE)\r
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, sizeof(TDLS_WMMIE), TDLS_WMMIE,  &(pattrib->pktlen));\r
+       /* Sup_reg_classes(optional) */\r
+       if (pregistrypriv->ht_enable == _TRUE)\r
+               pframe = rtw_tdls_set_ht_cap(padapter, pframe_head, pattrib);\r
 \r
 \r
+       pframe = rtw_tdls_set_bss_coexist(padapter, pframe, pattrib);\r
 \r
 \r
-       if(pattrib->encrypt){\r
-               //FTIE\r
-               _rtw_memset(pframe, 0, 84);     //All fields except SNonce shall be set to 0\r
-               _rtw_memset(pframe, _FTIE_, 1); //version\r
-               _rtw_memset((pframe+1), 82, 1); //length\r
-               _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);\r
-               pframe += 84;\r
-               pattrib->pktlen += 84;\r
+       pframe = rtw_tdls_set_linkid(pframe, pattrib, _TRUE);\r
 \r
 \r
-               //Timeout interval\r
-               timeout_itvl[0]=0x02;\r
-               _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);\r
-               pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl,  &(pattrib->pktlen));\r
-       }\r
-\r
-       //Sup_reg_classes(optional)\r
-       //HT capabilities\r
-       pframe += rtw_tdls_set_ht_cap(padapter, pframe_head, pattrib);\r
-\r
-       //20/40 BSS coexistence\r
-       if(pmlmepriv->num_FortyMHzIntolerant>0)\r
-               iedata |= BIT(2);//20 MHz BSS Width Request\r
-       pframe = rtw_set_ie(pframe, EID_BSSCoexistence,  1, &iedata, &(pattrib->pktlen));\r
-       \r
-       //Link identifier\r
-       _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-       _rtw_memcpy((link_id_addr+6), pattrib->src, 6);\r
-       _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);\r
-       pframe = rtw_set_ie(pframe, _LINK_ID_IE_,  18, link_id_addr, &(pattrib->pktlen));\r
+       if ((pregistrypriv->wmm_enable == _TRUE) || (padapter->mlmepriv.htpriv.ht_option == _TRUE))\r
+               pframe = rtw_tdls_set_qos_cap(pframe, pattrib);\r
 \r
 #ifdef CONFIG_WFD\r
        wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );\r
 \r
 #ifdef CONFIG_WFD\r
        wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );\r
-#endif //CONFIG_WFD\r
+#endif /* CONFIG_WFD */\r
 \r
 }\r
 \r
 void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
 \r
 }\r
 \r
 void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
-       struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);\r
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);\r
+       struct registry_priv    *pregistrypriv = &padapter->registrypriv;\r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct sta_info *ptdls_sta;\r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct sta_info *ptdls_sta;\r
-       struct registry_priv    *pregistrypriv = &padapter->registrypriv;\r
-\r
-       u8 payload_type = 0x02; \r
-       unsigned char category = RTW_WLAN_CATEGORY_TDLS;\r
-       unsigned char action = TDLS_SETUP_RESPONSE;\r
-       unsigned char   bssrate[NDIS_802_11_LENGTH_RATES_EX];   \r
-       int     bssrate_len = 0;\r
-       u8 more_supportedrates = 0;\r
-       unsigned int ie_len;\r
-       unsigned char *p;\r
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;\r
-       u8 link_id_addr[18] = {0};\r
-       u8 iedata=0;\r
-       u8 timeout_itvl[5];     //setup response timeout interval will copy from request\r
-       u8 ANonce[32];  //maybe it can put in ontdls_req\r
-       u8 k;           //for random ANonce\r
-       u8  *pftie=NULL, *ptimeout_ie=NULL, *plinkid_ie=NULL, *prsnie=NULL, *pftie_mic=NULL;\r
+       u8 k; /* for random ANonce */\r
+       u8  *pftie=NULL, *ptimeout_ie = NULL, *plinkid_ie = NULL, *prsnie = NULL, *pftie_mic = NULL;\r
        u32 time;\r
        u8 *pframe_head;\r
 \r
        ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);\r
 \r
        u32 time;\r
        u8 *pframe_head;\r
 \r
        ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);\r
 \r
-       if(ptdls_sta == NULL )\r
-       {\r
-               DBG_871X("[%s] %d\n", __FUNCTION__, __LINE__);\r
-               return;\r
-       }\r
+       if (ptdls_sta == NULL)\r
+               DBG_871X("[%s] %d ptdls_sta is NULL\n", __FUNCTION__, __LINE__);\r
 \r
 \r
-       if(pattrib->encrypt){\r
-               for(k=0;k<8;k++){\r
-                       time=rtw_get_current_time();\r
+       if (pattrib->encrypt && ptdls_sta != NULL) {\r
+               for (k=0;k<8;k++) {\r
+                       time = rtw_get_current_time();\r
                        _rtw_memcpy(&ptdls_sta->ANonce[4*k], (u8*)&time, 4);\r
                }\r
        }\r
 \r
        pframe_head = pframe;\r
 \r
                        _rtw_memcpy(&ptdls_sta->ANonce[4*k], (u8*)&time, 4);\r
                }\r
        }\r
 \r
        pframe_head = pframe;\r
 \r
-       //payload type\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));      \r
-       //category, action, status code\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_payload_type(pframe, pattrib);\r
+       pframe = rtw_tdls_set_category(pframe, pattrib, RTW_WLAN_CATEGORY_TDLS);\r
+       pframe = rtw_tdls_set_action(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_status_code(pframe, pattrib, ptxmgmt);\r
 \r
 \r
-       if(ptdls_sta->stat_code!=0)     //invalid setup request\r
-       {\r
-               DBG_871X("ptdls_sta->stat_code:%04x \n", ptdls_sta->stat_code);         \r
+       if (ptxmgmt->status_code != 0) {\r
+               DBG_871X("[%s] status_code:%04x \n", __FUNCTION__, ptxmgmt->status_code);\r
                return;\r
        }\r
        \r
                return;\r
        }\r
        \r
-       //dialog token\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));\r
-\r
-       //capability\r
-       _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);\r
-\r
-       if(pattrib->encrypt )\r
-               *pframe =*pframe | cap_Privacy;\r
-       pframe += 2;\r
-       pattrib->pktlen += 2;\r
-\r
-       //supported rates\r
-       //supported rates\r
-       if(pmlmeext->cur_channel < 14 )\r
-       {\r
-               rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);\r
-               bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;\r
-       }\r
-       else\r
-       {\r
-               rtw_set_supported_rate(bssrate, WIRELESS_11A_5N);\r
-               bssrate_len = IEEE80211_NUM_OFDM_RATESLEN;\r
-       }\r
-\r
-       if (bssrate_len > 8)\r
-       {\r
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));\r
-               more_supportedrates = 1;\r
-       }\r
-       else\r
-       {\r
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));\r
-       }\r
-\r
-       //country(optional)\r
-       //extended supported rates\r
-       if(more_supportedrates==1){\r
-               pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));\r
-       }\r
-\r
-       //supported channels\r
-       pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);\r
-       \r
-       // SRC IE\r
-       pframe = rtw_set_ie(pframe, _SRC_IE_ , sizeof(TDLS_SRC), TDLS_SRC, &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_dialog(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_capability(padapter, pframe, pattrib);\r
+       pframe = rtw_tdls_set_supported_rate(padapter, pframe, pattrib);\r
+       pframe = rtw_tdls_set_sup_ch(&(padapter->mlmeextpriv), pframe, pattrib);\r
+       pframe = rtw_tdls_set_sup_reg_class(pframe, pattrib);\r
 \r
 \r
-       //RSNIE\r
-       if(pattrib->encrypt){\r
+       if (pattrib->encrypt) {\r
                prsnie = pframe;\r
                prsnie = pframe;\r
-               pframe = rtw_set_ie(pframe, _RSN_IE_2_, sizeof(ptdls_sta->TDLS_RSNIE), ptdls_sta->TDLS_RSNIE, &(pattrib->pktlen));\r
+               pframe = rtw_tdls_set_rsnie(ptxmgmt, pframe, pattrib,  _FALSE, ptdls_sta);\r
        }\r
 \r
        }\r
 \r
-       //extended capabilities\r
-       pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , sizeof(TDLS_EXT_CAPIE), TDLS_EXT_CAPIE, &(pattrib->pktlen));\r
-\r
-       //QoS capability(WMM_IE)\r
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, sizeof(TDLS_WMMIE), TDLS_WMMIE,  &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_ext_cap(pframe, pattrib);\r
 \r
 \r
-       if(pattrib->encrypt){\r
-               wpa_tdls_generate_tpk(padapter, ptdls_sta);\r
+       if (pattrib->encrypt) {\r
+               if (rtw_tdls_is_driver_setup(padapter) == _TRUE)\r
+                       wpa_tdls_generate_tpk(padapter, ptdls_sta);\r
 \r
 \r
-               //FTIE\r
                pftie = pframe;\r
                pftie_mic = pframe+4;\r
                pftie = pframe;\r
                pftie_mic = pframe+4;\r
-               _rtw_memset(pframe, 0, 84);     //All fields except SNonce shall be set to 0\r
-               _rtw_memset(pframe, _FTIE_, 1); //version\r
-               _rtw_memset((pframe+1), 82, 1); //length\r
-               _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);\r
-               _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);\r
-               pframe += 84;\r
-               pattrib->pktlen += 84;\r
-\r
-               //Timeout interval\r
+               pframe = rtw_tdls_set_ftie(ptxmgmt\r
+                                                                       , pframe\r
+                                                                       , pattrib\r
+                                                                       , ptdls_sta->ANonce\r
+                                                                       , ptdls_sta->SNonce);\r
+\r
                ptimeout_ie = pframe;\r
                ptimeout_ie = pframe;\r
-               timeout_itvl[0]=0x02;\r
-               _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);\r
-               pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl,  &(pattrib->pktlen));\r
+               pframe = rtw_tdls_set_timeout_interval(ptxmgmt, pframe, pattrib, _FALSE, ptdls_sta);\r
        }\r
 \r
        }\r
 \r
-       //Sup_reg_classes(optional)\r
-       //HT capabilities\r
-       pframe += rtw_tdls_set_ht_cap(padapter, pframe_head, pattrib);\r
-\r
-       //20/40 BSS coexistence\r
-       if(pmlmepriv->num_FortyMHzIntolerant>0)\r
-               iedata |= BIT(2);//20 MHz BSS Width Request\r
-       pframe = rtw_set_ie(pframe, EID_BSSCoexistence,  1, &iedata, &(pattrib->pktlen));\r
+       /* Sup_reg_classes(optional) */\r
+       if (pregistrypriv->ht_enable == _TRUE)\r
+               pframe = rtw_tdls_set_ht_cap(padapter, pframe_head, pattrib);\r
+       \r
+       pframe = rtw_tdls_set_bss_coexist(padapter, pframe, pattrib);\r
 \r
 \r
-       //Link identifier\r
        plinkid_ie = pframe;\r
        plinkid_ie = pframe;\r
-       _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-       _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);\r
-       _rtw_memcpy((link_id_addr+12), pattrib->src, 6);\r
-       pframe = rtw_set_ie(pframe, _LINK_ID_IE_,  18, link_id_addr, &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_linkid(pframe, pattrib, _FALSE);\r
 \r
 \r
-       //fill FTIE mic\r
-       if(pattrib->encrypt)\r
+       /* Fill FTIE mic */\r
+       if (pattrib->encrypt && rtw_tdls_is_driver_setup(padapter) == _TRUE)\r
                wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);\r
 \r
                wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);\r
 \r
+       if ((pregistrypriv->wmm_enable == _TRUE) || (padapter->mlmepriv.htpriv.ht_option == _TRUE))\r
+               pframe = rtw_tdls_set_qos_cap(pframe, pattrib);\r
+\r
 #ifdef CONFIG_WFD\r
        wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );\r
 #ifdef CONFIG_WFD\r
        wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );\r
-#endif //CONFIG_WFD\r
+#endif /* CONFIG_WFD */\r
 \r
 }\r
 \r
 \r
 }\r
 \r
@@ -2360,397 +2415,231 @@ void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmit
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);\r
 \r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);\r
 \r
-       u8 payload_type = 0x02; \r
-       unsigned char category = RTW_WLAN_CATEGORY_TDLS;\r
-       unsigned char action = TDLS_SETUP_CONFIRM;\r
-       u8 more_supportedrates = 0;\r
        unsigned int ie_len;\r
        unsigned char *p;\r
        unsigned int ie_len;\r
        unsigned char *p;\r
-       u8 timeout_itvl[5];     //set timeout interval to maximum value\r
        u8 wmm_param_ele[24] = {0};\r
        u8 wmm_param_ele[24] = {0};\r
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;\r
-       u8      link_id_addr[18] = {0};\r
        u8  *pftie=NULL, *ptimeout_ie=NULL, *plinkid_ie=NULL, *prsnie=NULL, *pftie_mic=NULL;\r
 \r
        u8  *pftie=NULL, *ptimeout_ie=NULL, *plinkid_ie=NULL, *prsnie=NULL, *pftie_mic=NULL;\r
 \r
-       //payload type\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));\r
-       //category, action, status code, dialog token\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_payload_type(pframe, pattrib);\r
+       pframe = rtw_tdls_set_category(pframe, pattrib, RTW_WLAN_CATEGORY_TDLS);\r
+       pframe = rtw_tdls_set_action(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_status_code(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_dialog(pframe, pattrib, ptxmgmt);\r
 \r
 \r
-       if(ptdls_sta->stat_code!=0)     //invalid setup request\r
+       if (ptxmgmt->status_code!=0)\r
                return;\r
        \r
                return;\r
        \r
-       //RSNIE\r
-       if(pattrib->encrypt){\r
+       if (pattrib->encrypt) {\r
                prsnie = pframe;\r
                prsnie = pframe;\r
-               pframe = rtw_set_ie(pframe, _RSN_IE_2_, sizeof(TDLS_RSNIE), TDLS_RSNIE, &(pattrib->pktlen));\r
+               pframe = rtw_tdls_set_rsnie(ptxmgmt, pframe, pattrib, _TRUE, ptdls_sta);\r
        }\r
        \r
        }\r
        \r
-       //EDCA param set; WMM param ele.\r
-       if(pattrib->encrypt){\r
-               //FTIE\r
+       if (pattrib->encrypt) {\r
                pftie = pframe;\r
                pftie_mic = pframe+4;\r
                pftie = pframe;\r
                pftie_mic = pframe+4;\r
-               _rtw_memset(pframe, 0, 84);     //All fields except SNonce shall be set to 0\r
-               _rtw_memset(pframe, _FTIE_, 1); //version\r
-               _rtw_memset((pframe+1), 82, 1); //length\r
-               _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);\r
-               _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);\r
-               pframe += 84;\r
-               pattrib->pktlen += 84;\r
-\r
-               //Timeout interval\r
+               pframe = rtw_tdls_set_ftie(ptxmgmt\r
+                                                                       , pframe\r
+                                                                       , pattrib\r
+                                                                       , ptdls_sta->ANonce\r
+                                                                       , ptdls_sta->SNonce);\r
+\r
                ptimeout_ie = pframe;\r
                ptimeout_ie = pframe;\r
-               timeout_itvl[0]=0x02;\r
-               _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);\r
-               ptdls_sta->TPK_count=0;\r
-               _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);\r
-               pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl,  &(pattrib->pktlen));\r
+               pframe = rtw_tdls_set_timeout_interval(ptxmgmt, pframe, pattrib, _TRUE, ptdls_sta);\r
+\r
+               if (rtw_tdls_is_driver_setup(padapter) == _TRUE) {\r
+                       /* Start TPK timer */\r
+                       ptdls_sta->TPK_count=0;\r
+                       _set_timer(&ptdls_sta->TPK_timer, ONE_SEC);\r
+               }\r
        }\r
 \r
        }\r
 \r
-       //HT operation; todo\r
-       //Link identifier\r
+       /* HT operation; todo */\r
        plinkid_ie = pframe;\r
        plinkid_ie = pframe;\r
-       _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-       _rtw_memcpy((link_id_addr+6), pattrib->src, 6);\r
-       _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);\r
-       pframe = rtw_set_ie(pframe, _LINK_ID_IE_,  18, link_id_addr, &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_linkid(pframe, pattrib, _TRUE);\r
 \r
 \r
-       //FTIE mic\r
-       if(pattrib->encrypt)\r
+       if (pattrib->encrypt && (rtw_tdls_is_driver_setup(padapter) == _TRUE))\r
                wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);\r
 \r
                wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);\r
 \r
-       //WMM Parameter Set\r
-       if(&pmlmeinfo->WMM_param)\r
-       {\r
-               _rtw_memcpy(wmm_param_ele, WMM_PARA_OUI, 6);\r
-               _rtw_memcpy(wmm_param_ele+6, (u8 *)&pmlmeinfo->WMM_param, sizeof(pmlmeinfo->WMM_param));\r
-               pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_,  24, wmm_param_ele, &(pattrib->pktlen));              \r
-       }\r
-\r
+       if (ptdls_sta->qos_option == _TRUE)\r
+               pframe = rtw_tdls_set_wmm_params(padapter, pframe, pattrib);\r
 }\r
 \r
 void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
 }\r
 \r
 void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
-\r
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;\r
-       u8 payload_type = 0x02;\r
-       unsigned char category = RTW_WLAN_CATEGORY_TDLS;\r
-       u8 action = ptxmgmt->action_code;\r
-       u8 link_id_addr[18] = {0};\r
+       struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct sta_info *ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);\r
        struct sta_info *ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);\r
+       u8  *pftie = NULL, *pftie_mic = NULL, *plinkid_ie = NULL;\r
 \r
 \r
-       //payload type\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));      \r
-       //category, action, reason code\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptxmgmt->status_code, &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_payload_type(pframe, pattrib);\r
+       pframe = rtw_tdls_set_category(pframe, pattrib, RTW_WLAN_CATEGORY_TDLS);\r
+       pframe = rtw_tdls_set_action(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_status_code(pframe, pattrib, ptxmgmt);\r
 \r
 \r
-       //Link identifier\r
-       if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){   \r
-               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-               _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);\r
-               _rtw_memcpy((link_id_addr+12), pattrib->src, 6);\r
-       }else  if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){\r
-               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-               _rtw_memcpy((link_id_addr+6), pattrib->src, 6);\r
-               _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);\r
+       if (pattrib->encrypt) {\r
+               pftie = pframe;\r
+               pftie_mic = pframe + 4;\r
+               pframe = rtw_tdls_set_ftie(ptxmgmt\r
+                                                                       , pframe\r
+                                                                       , pattrib\r
+                                                                       , ptdls_sta->ANonce\r
+                                                                       , ptdls_sta->SNonce);\r
        }\r
        }\r
-       pframe = rtw_set_ie(pframe, _LINK_ID_IE_,  18, link_id_addr, &(pattrib->pktlen));\r
-       \r
+\r
+       plinkid_ie = pframe;\r
+       if (ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE)\r
+               pframe = rtw_tdls_set_linkid(pframe, pattrib, _FALSE);\r
+       else if (ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE)\r
+               pframe = rtw_tdls_set_linkid(pframe, pattrib, _TRUE);\r
+\r
+       if (pattrib->encrypt && (rtw_tdls_is_driver_setup(padapter) == _TRUE))\r
+               wpa_tdls_teardown_ftie_mic(ptdls_sta->tpk.kck, plinkid_ie, ptxmgmt->status_code, 1, 4, pftie, pftie_mic);\r
 }\r
 \r
 void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
 }\r
 \r
 void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
+       struct pkt_attrib *pattrib = &pxmitframe->attrib;\r
 \r
 \r
-       struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
-       u8 payload_type = 0x02;\r
-       u8 category = RTW_WLAN_CATEGORY_TDLS;\r
-       u8 action = TDLS_DISCOVERY_REQUEST;\r
-       u8      link_id_addr[18] = {0};\r
-       static u8 dialogtoken=0;\r
-\r
-       //payload type\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));              \r
-       //category, action, reason code\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));\r
-       if(ptxmgmt->external_support == _TRUE) {\r
-               pframe = rtw_set_fixed_ie(pframe, 1, &(ptxmgmt->dialog_token), &(pattrib->pktlen));\r
-       } else {\r
-               pframe = rtw_set_fixed_ie(pframe, 1, &(dialogtoken), &(pattrib->pktlen));\r
-               dialogtoken = (dialogtoken+1)%256;\r
-       }\r
+       pframe = rtw_tdls_set_payload_type(pframe, pattrib);\r
+       pframe = rtw_tdls_set_category(pframe, pattrib, RTW_WLAN_CATEGORY_TDLS);\r
+       pframe = rtw_tdls_set_action(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_dialog(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_linkid(pframe, pattrib, _TRUE);\r
 \r
 \r
-       //Link identifier\r
-       _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-       _rtw_memcpy((link_id_addr+6), pattrib->src, 6);\r
-       _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);\r
-       pframe = rtw_set_ie(pframe, _LINK_ID_IE_,  18, link_id_addr, &(pattrib->pktlen));\r
-       \r
 }\r
 \r
 }\r
 \r
-void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog, u8 privacy)\r
+void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt, u8 privacy)\r
 {\r
 {\r
+       struct registry_priv    *pregistrypriv = &padapter->registrypriv;\r
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;\r
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;\r
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;\r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
-       struct registry_priv    *pregistrypriv = &padapter->registrypriv;\r
-\r
-       u8 category = RTW_WLAN_CATEGORY_PUBLIC;\r
-       u8 action = TDLS_DISCOVERY_RESPONSE;\r
-       u8 bssrate[NDIS_802_11_LENGTH_RATES_EX];\r
-       int bssrate_len = 0;\r
-       u8 more_supportedrates = 0;\r
-       u8 *p;\r
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;\r
-       u8 link_id_addr[18] = {0};\r
-       u8 iedata=0;\r
-       u8 timeout_itvl[5];     //set timeout interval to maximum value\r
-       u32 timeout_interval= TPK_RESEND_COUNT * 1000;\r
        u8 *pframe_head, pktlen_index;\r
 \r
        u8 *pframe_head, pktlen_index;\r
 \r
-       pktlen_index = pattrib->pktlen; // For mgmt frame, pattrib->pktlen would count frame header\r
+       pktlen_index = pattrib->pktlen;\r
        pframe_head = pframe;\r
 \r
        pframe_head = pframe;\r
 \r
-       //category, action, dialog token\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(dialog), &(pattrib->pktlen));\r
-\r
-       //capability\r
-       _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);\r
-\r
-       if(privacy)\r
-               *pframe =*pframe | cap_Privacy;\r
-       pframe += 2;\r
-       pattrib->pktlen += 2;\r
+       pframe = rtw_tdls_set_category(pframe, pattrib, RTW_WLAN_CATEGORY_PUBLIC);\r
+       pframe = rtw_tdls_set_action(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_dialog(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_capability(padapter, pframe, pattrib);\r
 \r
 \r
-       //supported rates\r
-       rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);\r
-       bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;\r
+       pframe = rtw_tdls_set_supported_rate(padapter, pframe, pattrib);\r
 \r
 \r
-       if (bssrate_len > 8)\r
-       {\r
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));\r
-               more_supportedrates = 1;\r
-       }\r
-       else\r
-       {\r
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));\r
-       }\r
-\r
-       //extended supported rates\r
-       if(more_supportedrates==1){\r
-               pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));\r
-       }\r
-\r
-       //supported channels\r
        pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);\r
 \r
        pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);\r
 \r
-       //RSNIE\r
-       if(privacy)\r
-               pframe = rtw_set_ie(pframe, _RSN_IE_2_, sizeof(TDLS_RSNIE), TDLS_RSNIE, &(pattrib->pktlen));\r
-\r
-       //extended capability\r
-       pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , sizeof(TDLS_EXT_CAPIE), TDLS_EXT_CAPIE, &(pattrib->pktlen));\r
+       if (privacy)\r
+               pframe = rtw_tdls_set_rsnie(ptxmgmt, pframe, pattrib, _TRUE, NULL);\r
 \r
 \r
-       if(privacy){\r
-               //FTIE\r
-               _rtw_memset(pframe, 0, 84);     //All fields shall be set to 0\r
-               _rtw_memset(pframe, _FTIE_, 1); //version\r
-               _rtw_memset((pframe+1), 82, 1); //length\r
-               pframe += 84;\r
-               pattrib->pktlen += 84;\r
+       pframe = rtw_tdls_set_ext_cap(pframe, pattrib);\r
 \r
 \r
-               //Timeout interval\r
-               timeout_itvl[0]=0x02;\r
-               _rtw_memcpy(timeout_itvl+1, &timeout_interval, 4);\r
-               pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl,  &(pattrib->pktlen));\r
+       if (privacy) {\r
+               pframe = rtw_tdls_set_ftie(ptxmgmt, pframe, pattrib, NULL, NULL);\r
+               pframe = rtw_tdls_set_timeout_interval(ptxmgmt, pframe, pattrib,  _TRUE, NULL);\r
        }\r
 \r
        }\r
 \r
-       //Sup_reg_classes(optional)\r
-       //HT capabilities\r
-       pframe += rtw_tdls_set_ht_cap(padapter, pframe_head - pktlen_index, pattrib);\r
-\r
-       //20/40 BSS coexistence\r
-       if(pmlmepriv->num_FortyMHzIntolerant>0)\r
-               iedata |= BIT(2);//20 MHz BSS Width Request\r
-       pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));\r
-\r
-       //Link identifier\r
-       _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-       _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);\r
-       _rtw_memcpy((link_id_addr+12), pattrib->src, 6);\r
-       pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));\r
+       if (pregistrypriv->ht_enable == _TRUE)\r
+               pframe = rtw_tdls_set_ht_cap(padapter, pframe_head - pktlen_index, pattrib);\r
+       \r
+       pframe = rtw_tdls_set_bss_coexist(padapter, pframe, pattrib);\r
+       pframe = rtw_tdls_set_linkid(pframe, pattrib, _FALSE);\r
 \r
 }\r
 \r
 \r
 }\r
 \r
-void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)\r
+\r
+void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
 \r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
 {\r
 \r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
-       u8 payload_type = 0x02;\r
-       unsigned char category = RTW_WLAN_CATEGORY_TDLS;\r
-       unsigned char action = TDLS_PEER_TRAFFIC_INDICATION;\r
-\r
-       u8      link_id_addr[18] = {0};\r
        u8 AC_queue=0;\r
        struct sta_info *ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->dst);\r
 \r
        u8 AC_queue=0;\r
        struct sta_info *ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->dst);\r
 \r
-       //payload type\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));      \r
-       //category, action, reason code\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_payload_type(pframe, pattrib);\r
+       pframe = rtw_tdls_set_category(pframe, pattrib, RTW_WLAN_CATEGORY_TDLS);\r
+       pframe = rtw_tdls_set_action(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_dialog(pframe, pattrib, ptxmgmt);\r
 \r
 \r
-       //Link identifier\r
-       if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){   \r
-               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-               _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);\r
-               _rtw_memcpy((link_id_addr+12), pattrib->src, 6);\r
-       }else  if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){\r
-               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-               _rtw_memcpy((link_id_addr+6), pattrib->src, 6);\r
-               _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);\r
-       }\r
-       pframe = rtw_set_ie(pframe, _LINK_ID_IE_,  18, link_id_addr, &(pattrib->pktlen));\r
+       if (ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE)\r
+               pframe = rtw_tdls_set_linkid(pframe, pattrib, _FALSE);\r
+       else if (ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE)\r
+               pframe = rtw_tdls_set_linkid(pframe, pattrib, _TRUE);\r
 \r
 \r
-       //PTI control\r
-       //PU buffer status\r
-       if(ptdls_sta->uapsd_bk&BIT(1))\r
+       /* PTI control */\r
+       /* PU buffer status */\r
+       if (ptdls_sta->uapsd_bk & BIT(1))\r
                AC_queue=BIT(0);\r
                AC_queue=BIT(0);\r
-       if(ptdls_sta->uapsd_be&BIT(1))\r
+       if (ptdls_sta->uapsd_be & BIT(1))\r
                AC_queue=BIT(1);\r
                AC_queue=BIT(1);\r
-       if(ptdls_sta->uapsd_vi&BIT(1))\r
+       if (ptdls_sta->uapsd_vi & BIT(1))\r
                AC_queue=BIT(2);\r
                AC_queue=BIT(2);\r
-       if(ptdls_sta->uapsd_vo&BIT(1))\r
+       if (ptdls_sta->uapsd_vo & BIT(1))\r
                AC_queue=BIT(3);\r
        pframe = rtw_set_ie(pframe, _PTI_BUFFER_STATUS_, 1, &AC_queue, &(pattrib->pktlen));\r
        \r
 }\r
 \r
                AC_queue=BIT(3);\r
        pframe = rtw_set_ie(pframe, _PTI_BUFFER_STATUS_, 1, &AC_queue, &(pattrib->pktlen));\r
        \r
 }\r
 \r
-void rtw_build_tdls_peer_traffic_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)\r
+void rtw_build_tdls_peer_traffic_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
 \r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
 {\r
 \r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
-       u8 payload_type = 0x02;\r
-       u8 category = RTW_WLAN_CATEGORY_TDLS;\r
-       u8 action = TDLS_PEER_TRAFFIC_RESPONSE;\r
-       u8      link_id_addr[18] = {0};\r
        struct sta_info *ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->dst);\r
        struct sta_info *ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->dst);\r
-       static u8 dialogtoken=0;\r
 \r
 \r
-       //payload type\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));              \r
-       //category, action, reason code\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &ptdls_sta->dialog, &(pattrib->pktlen));\r
-\r
-       //Link identifier\r
-       if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){   \r
-               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-               _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);\r
-               _rtw_memcpy((link_id_addr+12), pattrib->src, 6);\r
-       }else  if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){\r
-               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-               _rtw_memcpy((link_id_addr+6), pattrib->src, 6);\r
-               _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);\r
-       }\r
-       pframe = rtw_set_ie(pframe, _LINK_ID_IE_,  18, link_id_addr, &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_payload_type(pframe, pattrib);\r
+       pframe = rtw_tdls_set_category(pframe, pattrib, RTW_WLAN_CATEGORY_TDLS);\r
+       pframe = rtw_tdls_set_action(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_dialog(pframe, pattrib, ptxmgmt);\r
 \r
 \r
+       if (ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE)\r
+               pframe = rtw_tdls_set_linkid(pframe, pattrib, _FALSE);\r
+       else if (ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE)\r
+               pframe = rtw_tdls_set_linkid(pframe, pattrib, _TRUE);\r
 }\r
 \r
 }\r
 \r
-void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)\r
+#ifdef CONFIG_TDLS_CH_SW\r
+void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
 \r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
 {\r
 \r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
-       struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;\r
-       u8 payload_type = 0x02;\r
-       unsigned char category = RTW_WLAN_CATEGORY_TDLS;\r
-       unsigned char action = TDLS_CHANNEL_SWITCH_REQUEST;\r
-       u8      link_id_addr[18] = {0};\r
-       struct sta_priv         *pstapriv = &padapter->stapriv; \r
+       struct sta_priv         *pstapriv = &padapter->stapriv;\r
        struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);\r
        struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);\r
-       u8 ch_switch_timing[4] = {0};\r
-       u16 switch_time= CH_SWITCH_TIME, switch_timeout=CH_SWITCH_TIMEOUT;      \r
+       u16 switch_time= CH_SWITCH_TIME * 1000, switch_timeout=CH_SWITCH_TIMEOUT * 1000;\r
 \r
 \r
-       //payload type\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));      \r
-       //category, action, target_ch\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(ptdlsinfo->candidate_ch), &(pattrib->pktlen));\r
+       ptdls_sta->ch_switch_time=switch_time;\r
+       ptdls_sta->ch_switch_timeout=switch_timeout;\r
 \r
 \r
-       //Link identifier\r
-       if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){   \r
-               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-               _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);\r
-               _rtw_memcpy((link_id_addr+12), pattrib->src, 6);\r
-       }else  if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){\r
-               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-               _rtw_memcpy((link_id_addr+6), pattrib->src, 6);\r
-               _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);\r
-       }\r
-       pframe = rtw_set_ie(pframe, _LINK_ID_IE_,  18, link_id_addr, &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_payload_type(pframe, pattrib);\r
+       pframe = rtw_tdls_set_category(pframe, pattrib, RTW_WLAN_CATEGORY_TDLS);\r
+       pframe = rtw_tdls_set_action(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_target_ch(padapter, pframe, pattrib);\r
+       pframe = rtw_tdls_set_reg_class(pframe, pattrib, ptdls_sta);\r
 \r
 \r
-       //ch switch timing\r
-       _rtw_memcpy(ch_switch_timing, &switch_time, 2);\r
-       _rtw_memcpy(ch_switch_timing+2, &switch_timeout, 2);\r
-       pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_,  4, ch_switch_timing, &(pattrib->pktlen));\r
+       if (ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE)\r
+               pframe = rtw_tdls_set_linkid(pframe, pattrib, _FALSE);\r
+       else if (ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE)\r
+               pframe = rtw_tdls_set_linkid(pframe, pattrib, _TRUE);\r
 \r
 \r
-       //update ch switch attrib to sta_info\r
-       ptdls_sta->off_ch=ptdlsinfo->candidate_ch;\r
-       ptdls_sta->ch_switch_time=switch_time;\r
-       ptdls_sta->ch_switch_timeout=switch_timeout;\r
+       pframe = rtw_tdls_set_ch_sw(pframe, pattrib, ptdls_sta);\r
 \r
 }\r
 \r
 \r
 }\r
 \r
-void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)\r
+void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)\r
 {\r
 \r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
 {\r
 \r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
-       u8 payload_type = 0x02;\r
-       unsigned char category = RTW_WLAN_CATEGORY_TDLS;\r
-       unsigned char action = TDLS_CHANNEL_SWITCH_RESPONSE;\r
-       u8      link_id_addr[18] = {0};\r
        struct sta_priv         *pstapriv = &padapter->stapriv; \r
        struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);\r
        struct sta_priv         *pstapriv = &padapter->stapriv; \r
        struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);\r
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;\r
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;\r
-       u8 ch_switch_timing[4] = {0};\r
 \r
 \r
-       //payload type\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));      \r
-       //category, action, status_code\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));\r
-       pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));\r
+       pframe = rtw_tdls_set_payload_type(pframe, pattrib);\r
+       pframe = rtw_tdls_set_category(pframe, pattrib, RTW_WLAN_CATEGORY_TDLS);\r
+       pframe = rtw_tdls_set_action(pframe, pattrib, ptxmgmt);\r
+       pframe = rtw_tdls_set_status_code(pframe, pattrib, ptxmgmt);\r
 \r
 \r
-       //Link identifier\r
-       if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){   \r
-               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-               _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);\r
-               _rtw_memcpy((link_id_addr+12), pattrib->src, 6);\r
-       }else  if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){\r
-               _rtw_memcpy(link_id_addr, pattrib->ra, 6);\r
-               _rtw_memcpy((link_id_addr+6), pattrib->src, 6);\r
-               _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);\r
-       }\r
-       pframe = rtw_set_ie(pframe, _LINK_ID_IE_,  18, link_id_addr, &(pattrib->pktlen));\r
-\r
-       //ch switch timing\r
-       _rtw_memcpy(ch_switch_timing, &ptdls_sta->ch_switch_time, 2);\r
-       _rtw_memcpy(ch_switch_timing+2, &ptdls_sta->ch_switch_timeout, 2);\r
-       pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_,  4, ch_switch_timing, &(pattrib->pktlen));\r
+       if (ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE)\r
+               pframe = rtw_tdls_set_linkid(pframe, pattrib, _FALSE);\r
+       else if (ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE)\r
+               pframe = rtw_tdls_set_linkid(pframe, pattrib, _TRUE);\r
 \r
 \r
+       pframe = rtw_tdls_set_ch_sw(pframe, pattrib, ptdls_sta);\r
 }\r
 }\r
+#endif\r
 \r
 #ifdef CONFIG_WFD\r
 void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)\r
 \r
 #ifdef CONFIG_WFD\r
 void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)\r
@@ -2759,27 +2648,21 @@ void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * p
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct wifidirect_info *pwdinfo = &padapter->wdinfo;\r
        struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;\r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct wifidirect_info *pwdinfo = &padapter->wdinfo;\r
        struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;\r
-       u8 payload_type = 0x02;\r
        u8 category = RTW_WLAN_CATEGORY_P2P;\r
        u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};\r
        u8 probe_req = 4;\r
        u8 wfdielen = 0;\r
 \r
        u8 category = RTW_WLAN_CATEGORY_P2P;\r
        u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};\r
        u8 probe_req = 4;\r
        u8 wfdielen = 0;\r
 \r
-       //payload type\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));              \r
-       //category, OUI, frame_body_type\r
+       pframe = rtw_tdls_set_payload_type(pframe, pattrib);\r
        pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
        pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));\r
        pframe = rtw_set_fixed_ie(pframe, 1, &(probe_req), &(pattrib->pktlen));\r
 \r
        pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
        pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));\r
        pframe = rtw_set_fixed_ie(pframe, 1, &(probe_req), &(pattrib->pktlen));\r
 \r
-       if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))\r
-       {\r
+       if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) {\r
                wfdielen = build_probe_req_wfd_ie(pwdinfo, pframe);\r
                pframe += wfdielen;\r
                pattrib->pktlen += wfdielen;\r
                wfdielen = build_probe_req_wfd_ie(pwdinfo, pframe);\r
                pframe += wfdielen;\r
                pattrib->pktlen += wfdielen;\r
-       }\r
-       else if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))\r
-       {\r
+       } else if (!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE)) {\r
                wfdielen = build_probe_req_wfd_ie(pbuddy_wdinfo, pframe);\r
                pframe += wfdielen;\r
                pattrib->pktlen += wfdielen;\r
                wfdielen = build_probe_req_wfd_ie(pbuddy_wdinfo, pframe);\r
                pframe += wfdielen;\r
                pattrib->pktlen += wfdielen;\r
@@ -2793,34 +2676,28 @@ void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * p
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct wifidirect_info *pwdinfo = &padapter->wdinfo;\r
        struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;\r
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;\r
        struct wifidirect_info *pwdinfo = &padapter->wdinfo;\r
        struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;\r
-       u8 payload_type = 0x02;\r
        u8 category = RTW_WLAN_CATEGORY_P2P;\r
        u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};\r
        u8 probe_rsp = 5;\r
        u8 wfdielen = 0;\r
 \r
        u8 category = RTW_WLAN_CATEGORY_P2P;\r
        u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};\r
        u8 probe_rsp = 5;\r
        u8 wfdielen = 0;\r
 \r
-       //payload type\r
-       pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));              \r
-       //category, OUI, frame_body_type\r
+       pframe = rtw_tdls_set_payload_type(pframe, pattrib);\r
        pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
        pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));\r
        pframe = rtw_set_fixed_ie(pframe, 1, &(probe_rsp), &(pattrib->pktlen));\r
 \r
        pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));\r
        pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));\r
        pframe = rtw_set_fixed_ie(pframe, 1, &(probe_rsp), &(pattrib->pktlen));\r
 \r
-       if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))\r
-       {\r
+       if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) {\r
                wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe, 1);\r
                pframe += wfdielen;\r
                pattrib->pktlen += wfdielen;\r
                wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe, 1);\r
                pframe += wfdielen;\r
                pattrib->pktlen += wfdielen;\r
-       }\r
-       else if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))\r
-       {\r
+       } else if (!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE)) {\r
                wfdielen = build_probe_resp_wfd_ie(pbuddy_wdinfo, pframe, 1);\r
                pframe += wfdielen;\r
                pattrib->pktlen += wfdielen;\r
        }\r
 \r
 }\r
                wfdielen = build_probe_resp_wfd_ie(pbuddy_wdinfo, pframe, 1);\r
                pframe += wfdielen;\r
                pattrib->pktlen += wfdielen;\r
        }\r
 \r
 }\r
-#endif //CONFIG_WFD\r
+#endif /* CONFIG_WFD */\r
 \r
 void _tdls_tpk_timer_hdl(void *FunctionContext)\r
 {\r
 \r
 void _tdls_tpk_timer_hdl(void *FunctionContext)\r
 {\r
@@ -2829,58 +2706,91 @@ void _tdls_tpk_timer_hdl(void *FunctionContext)
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        ptdls_sta->TPK_count++;\r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        ptdls_sta->TPK_count++;\r
-       //TPK_timer set 1000 as default\r
-       //retry timer should set at least 301 sec.\r
-       if(ptdls_sta->TPK_count==TPK_RESEND_COUNT){\r
+       /* TPK_timer expired in a second */\r
+       /* Retry timer should set at least 301 sec. */\r
+       if (ptdls_sta->TPK_count >= ptdls_sta->TDLS_PeerKey_Lifetime) {\r
+               DBG_871X("[TDLS] %s, Re-Setup TDLS link with "MAC_FMT" since TPK lifetime expires!\n", __FUNCTION__, MAC_ARG(ptdls_sta->hwaddr));\r
                ptdls_sta->TPK_count=0;\r
                _rtw_memcpy(txmgmt.peer, ptdls_sta->hwaddr, ETH_ALEN);\r
                issue_tdls_setup_req(ptdls_sta->padapter, &txmgmt, _FALSE);\r
        }\r
                ptdls_sta->TPK_count=0;\r
                _rtw_memcpy(txmgmt.peer, ptdls_sta->hwaddr, ETH_ALEN);\r
                issue_tdls_setup_req(ptdls_sta->padapter, &txmgmt, _FALSE);\r
        }\r
-       \r
-       _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);\r
+\r
+       _set_timer(&ptdls_sta->TPK_timer, ONE_SEC);\r
 }\r
 \r
 }\r
 \r
-// TDLS_DONE_CH_SEN: channel sensing and report candidate channel\r
-// TDLS_OFF_CH: first time set channel to off channel\r
-// TDLS_BASE_CH: when go back to the channel linked with AP, send null data to peer STA as an indication\r
+#ifdef CONFIG_TDLS_CH_SW\r
 void _tdls_ch_switch_timer_hdl(void *FunctionContext)\r
 {\r
 void _tdls_ch_switch_timer_hdl(void *FunctionContext)\r
 {\r
-\r
        struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;\r
        _adapter *padapter = ptdls_sta->padapter;\r
        struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;\r
        _adapter *padapter = ptdls_sta->padapter;\r
-       \r
-       if( ptdls_sta->option == TDLS_DONE_CH_SEN ){\r
-               rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_DONE_CH_SEN);\r
-       }else if( ptdls_sta->option == TDLS_OFF_CH ){\r
-               issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta->hwaddr, 0, 0, 0);\r
-               _set_timer(&ptdls_sta->base_ch_timer, 500);\r
-       }else if( ptdls_sta->option == TDLS_BASE_CH){\r
-               issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta->hwaddr, 0, 0, 0);\r
+       struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;\r
+\r
+       //DBG_871X("%s %d, tdls_sta_state:0x%08x\n", __FUNCTION__, __LINE__, ptdls_sta->tdls_sta_state);\r
+\r
+       if (padapter->mlmeextpriv.cur_channel != rtw_get_oper_ch(padapter)) {\r
+               if (!(pchsw_info->ch_sw_state & TDLS_PEER_AT_OFF_STATE)) {\r
+                       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_BACK);\r
+                       ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);\r
+                       DBG_871X("[TDLS] %s, can't get traffic from op_ch:%d\n", __FUNCTION__, rtw_get_oper_ch(padapter));\r
+               } else {\r
+                       //DBG_871X("%s %d\n", __FUNCTION__, __LINE__);\r
+                       //_set_timer(&ptdls_sta->delay_timer, padapter->mlmeextpriv.mlmext_info.bcn_interval - 5 - ptdls_sta->ch_switch_timeout/1000);\r
+               }\r
+       } else {\r
+               //DBG_871X("%s %d, op_ch:%d, tdls_state:0x%08x\n", __FUNCTION__, __LINE__, rtw_get_oper_ch(padapter), ptdls_sta->tdls_sta_state);\r
        }\r
        }\r
-}\r
 \r
 \r
-void _tdls_base_ch_timer_hdl(void *FunctionContext)\r
-{\r
-       struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;\r
-       rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_OFF_CH);\r
+#if 0\r
+       if (!(pchsw_info->ch_sw_state & TDLS_PEER_AT_OFF_STATE)) {\r
+               //SelectChannel(padapter, padapter->mlmeextpriv.cur_channel);\r
+               ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);\r
+               DBG_871X("%s %d, op_ch:%d, tdls_state:0x%08x\n", __FUNCTION__, __LINE__, rtw_get_oper_ch(padapter), ptdls_sta->tdls_sta_state);\r
+       }\r
+\r
+       if (pchsw_info->ch_sw_state & TDLS_CH_SW_INITIATOR_STATE) {\r
+               if (padapter->mlmeextpriv.cur_channel != rtw_get_oper_ch(padapter)) {\r
+                       DBG_871X("%s %d\n", __FUNCTION__, __LINE__);\r
+                       _set_timer(&ptdls_sta->delay_timer, padapter->mlmeextpriv.mlmext_info.bcn_interval - 5 - ptdls_sta->ch_switch_timeout/1000);\r
+                       //_set_timer(&ptdls_sta->delay_timer, 1000);\r
+               } else {\r
+                       DBG_871X("%s %d\n", __FUNCTION__, __LINE__);\r
+                       issue_tdls_ch_switch_req(padapter, ptdls_sta);\r
+                       //_set_timer(&ptdls_sta->delay_timer, 500);\r
+               }\r
+       }\r
+#endif\r
 }\r
 \r
 }\r
 \r
-void _tdls_off_ch_timer_hdl(void *FunctionContext)\r
+void _tdls_delay_timer_hdl(void *FunctionContext)\r
 {\r
        struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;\r
 {\r
        struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;\r
-       rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_BASE_CH );\r
+       _adapter *padapter = ptdls_sta->padapter;\r
+       struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;\r
+\r
+       DBG_871X("[TDLS] %s, op_ch:%d, tdls_state:0x%08x\n", __FUNCTION__, rtw_get_oper_ch(padapter), ptdls_sta->tdls_sta_state);\r
+       pchsw_info->delay_switch_back = _TRUE;\r
 }\r
 }\r
+#endif\r
 \r
 void _tdls_handshake_timer_hdl(void *FunctionContext)\r
 {\r
        struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;\r
 \r
 void _tdls_handshake_timer_hdl(void *FunctionContext)\r
 {\r
        struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;\r
+       _adapter *padapter = ptdls_sta->padapter;\r
+       struct tdls_txmgmt txmgmt;\r
 \r
 \r
-       if(ptdls_sta != NULL)\r
-       {\r
-               if( !(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) )\r
+       _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
+       _rtw_memcpy(txmgmt.peer, ptdls_sta->hwaddr, ETH_ALEN);\r
+       txmgmt.status_code = _RSON_TDLS_TEAR_UN_RSN_;\r
+\r
+       if (ptdls_sta != NULL) {\r
+               DBG_871X("[TDLS] Handshake time out\n");\r
+               if (ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) \r
                {\r
                {\r
-                       DBG_871X("tdls handshake time out\n");\r
-                       rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_TEAR_STA );\r
+                       issue_tdls_teardown(padapter, &txmgmt, _TRUE);\r
+               }\r
+               else\r
+               {\r
+                       rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_TEAR_STA);\r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -2895,11 +2805,10 @@ void _tdls_pti_timer_hdl(void *FunctionContext)
        _rtw_memcpy(txmgmt.peer, ptdls_sta->hwaddr, ETH_ALEN);\r
        txmgmt.status_code = _RSON_TDLS_TEAR_TOOFAR_;\r
 \r
        _rtw_memcpy(txmgmt.peer, ptdls_sta->hwaddr, ETH_ALEN);\r
        txmgmt.status_code = _RSON_TDLS_TEAR_TOOFAR_;\r
 \r
-       if(ptdls_sta != NULL)\r
-       {\r
-               if( ptdls_sta->tdls_sta_state & TDLS_WAIT_PTR_STATE )\r
-               {\r
-                       DBG_871X("Doesn't receive PTR from peer dev:"MAC_FMT"; Send TDLS Tear Down\n", MAC_ARG(ptdls_sta->hwaddr));\r
+       if (ptdls_sta != NULL) {\r
+               if (ptdls_sta->tdls_sta_state & TDLS_WAIT_PTR_STATE) {\r
+                       DBG_871X("[TDLS] Doesn't receive PTR from peer dev:"MAC_FMT"; "\r
+                               "Send TDLS Tear Down\n", MAC_ARG(ptdls_sta->hwaddr));\r
                        issue_tdls_teardown(padapter, &txmgmt, _FALSE);\r
                }\r
        }\r
                        issue_tdls_teardown(padapter, &txmgmt, _FALSE);\r
                }\r
        }\r
@@ -2909,9 +2818,10 @@ void rtw_init_tdls_timer(_adapter *padapter, struct sta_info *psta)
 {\r
        psta->padapter=padapter;\r
        _init_timer(&psta->TPK_timer, padapter->pnetdev, _tdls_tpk_timer_hdl, psta);\r
 {\r
        psta->padapter=padapter;\r
        _init_timer(&psta->TPK_timer, padapter->pnetdev, _tdls_tpk_timer_hdl, psta);\r
-       _init_timer(&psta->option_timer, padapter->pnetdev, _tdls_ch_switch_timer_hdl, psta);\r
-       _init_timer(&psta->base_ch_timer, padapter->pnetdev, _tdls_base_ch_timer_hdl, psta);\r
-       _init_timer(&psta->off_ch_timer, padapter->pnetdev, _tdls_off_ch_timer_hdl, psta);\r
+#ifdef CONFIG_TDLS_CH_SW       \r
+       _init_timer(&psta->ch_sw_timer, padapter->pnetdev, _tdls_ch_switch_timer_hdl, psta);\r
+       _init_timer(&psta->delay_timer, padapter->pnetdev, _tdls_delay_timer_hdl, psta);\r
+#endif\r
        _init_timer(&psta->handshake_timer, padapter->pnetdev, _tdls_handshake_timer_hdl, psta);\r
        _init_timer(&psta->pti_timer, padapter->pnetdev, _tdls_pti_timer_hdl, psta);\r
 }\r
        _init_timer(&psta->handshake_timer, padapter->pnetdev, _tdls_handshake_timer_hdl, psta);\r
        _init_timer(&psta->pti_timer, padapter->pnetdev, _tdls_pti_timer_hdl, psta);\r
 }\r
@@ -2919,9 +2829,10 @@ void rtw_init_tdls_timer(_adapter *padapter, struct sta_info *psta)
 void rtw_free_tdls_timer(struct sta_info *psta)\r
 {\r
        _cancel_timer_ex(&psta->TPK_timer);\r
 void rtw_free_tdls_timer(struct sta_info *psta)\r
 {\r
        _cancel_timer_ex(&psta->TPK_timer);\r
-       _cancel_timer_ex(&psta->option_timer);\r
-       _cancel_timer_ex(&psta->base_ch_timer);\r
-       _cancel_timer_ex(&psta->off_ch_timer);\r
+#ifdef CONFIG_TDLS_CH_SW       \r
+       _cancel_timer_ex(&psta->ch_sw_timer);\r
+       _cancel_timer_ex(&psta->delay_timer);\r
+#endif\r
        _cancel_timer_ex(&psta->handshake_timer);\r
        _cancel_timer_ex(&psta->pti_timer);\r
 }\r
        _cancel_timer_ex(&psta->handshake_timer);\r
        _cancel_timer_ex(&psta->pti_timer);\r
 }\r
@@ -2941,8 +2852,7 @@ u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta)
        rtw_hal_update_sta_rate_mask(padapter, psta);\r
        tx_ra_bitmap = psta->ra_mask;\r
 \r
        rtw_hal_update_sta_rate_mask(padapter, psta);\r
        tx_ra_bitmap = psta->ra_mask;\r
 \r
-       if ( pcur_network->Configuration.DSConfig > 14 ) {\r
-               // 5G band\r
+       if (pcur_network->Configuration.DSConfig > 14) {\r
                if (tx_ra_bitmap & 0xffff000)\r
                        sta_band |= WIRELESS_11_5N | WIRELESS_11A;\r
                else\r
                if (tx_ra_bitmap & 0xffff000)\r
                        sta_band |= WIRELESS_11_5N | WIRELESS_11A;\r
                else\r
@@ -2963,5 +2873,41 @@ u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta)
        return tx_ra_bitmap;\r
 }\r
 \r
        return tx_ra_bitmap;\r
 }\r
 \r
-#endif //CONFIG_TDLS\r
+int rtw_tdls_is_driver_setup(_adapter *padapter)\r
+{\r
+       return padapter->tdlsinfo.driver_setup;\r
+}\r
+\r
+const char * rtw_tdls_action_txt(enum TDLS_ACTION_FIELD action)\r
+{\r
+       switch (action) {\r
+       case TDLS_SETUP_REQUEST:\r
+               return "TDLS_SETUP_REQUEST";\r
+       case TDLS_SETUP_RESPONSE:\r
+               return "TDLS_SETUP_RESPONSE";\r
+       case TDLS_SETUP_CONFIRM:\r
+               return "TDLS_SETUP_CONFIRM";\r
+       case TDLS_TEARDOWN:\r
+               return "TDLS_TEARDOWN";\r
+       case TDLS_PEER_TRAFFIC_INDICATION:\r
+               return "TDLS_PEER_TRAFFIC_INDICATION";\r
+       case TDLS_CHANNEL_SWITCH_REQUEST:\r
+               return "TDLS_CHANNEL_SWITCH_REQUEST";\r
+       case TDLS_CHANNEL_SWITCH_RESPONSE:\r
+               return "TDLS_CHANNEL_SWITCH_RESPONSE";\r
+       case TDLS_PEER_PSM_REQUEST:\r
+               return "TDLS_PEER_PSM_REQUEST";\r
+       case TDLS_PEER_PSM_RESPONSE:\r
+               return "TDLS_PEER_PSM_RESPONSE";\r
+       case TDLS_PEER_TRAFFIC_RESPONSE:\r
+               return "TDLS_PEER_TRAFFIC_RESPONSE";\r
+       case TDLS_DISCOVERY_REQUEST:\r
+               return "TDLS_DISCOVERY_REQUEST";\r
+       case TDLS_DISCOVERY_RESPONSE:\r
+               return "TDLS_DISCOVERY_RESPONSE";\r
+       default:\r
+               return "UNKNOWN";\r
+       }\r
+}\r
 \r
 \r
+#endif /* CONFIG_TDLS */\r
index ce971d5a5ed335b0fc23c8f61bfb4b38cf7c860e..e24cc67efec34c376e0978105e3d034d9bb0cf46 100755 (executable)
@@ -64,7 +64,7 @@ u8    rtw_get_vht_highest_rate(u8 *pvht_mcs_map)
                }
        }
        
                }
        }
        
-       //DBG_871X("HighestVHTMCSRate is %x\n", vht_mcs_rate);
+       /* DBG_871X("HighestVHTMCSRate is %x\n", vht_mcs_rate); */
        return vht_mcs_rate;
 }
 
        return vht_mcs_rate;
 }
 
@@ -88,7 +88,7 @@ u8    rtw_vht_mcsmap_to_nss(u8 *pvht_mcs_map)
                }
        }
        
                }
        }
        
-       //DBG_871X("%s : %dSS\n", __FUNCTION__, nss);
+       DBG_871X("%s : %dSS\n", __FUNCTION__, nss);
        return nss;
 }
 
        return nss;
 }
 
@@ -119,9 +119,9 @@ void        rtw_vht_nss_to_mcsmap(u8 nss, u8 *target_mcs_map, u8 *cur_mcs_map)
 
 u16    rtw_vht_mcs_to_data_rate(u8 bw, u8 short_GI, u8 vht_mcs_rate)
 {
 
 u16    rtw_vht_mcs_to_data_rate(u8 bw, u8 short_GI, u8 vht_mcs_rate)
 {
-       if(vht_mcs_rate > MGN_VHT2SS_MCS9)
-               vht_mcs_rate = MGN_VHT2SS_MCS9;
-
+       if(vht_mcs_rate > MGN_VHT3SS_MCS9)
+               vht_mcs_rate = MGN_VHT3SS_MCS9;
+       /* DBG_871X("bw=%d, short_GI=%d, ((vht_mcs_rate - MGN_VHT1SS_MCS0)&0x3f)=%d\n", bw, short_GI, ((vht_mcs_rate - MGN_VHT1SS_MCS0)&0x3f)); */
        return VHT_MCS_DATA_RATE[bw][short_GI][((vht_mcs_rate - MGN_VHT1SS_MCS0)&0x3f)];
 }
 
        return VHT_MCS_DATA_RATE[bw][short_GI][((vht_mcs_rate - MGN_VHT1SS_MCS0)&0x3f)];
 }
 
@@ -189,10 +189,12 @@ void      rtw_vht_use_default_setting(_adapter *padapter)
 
        rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
 
 
        rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
 
-       if (rf_type == RF_1T1R)
-               pvhtpriv->vht_mcs_map[0] = 0xfe;        // Only support 1SS MCS 0~9;
+       if (rf_type == RF_3T3R)
+               pvhtpriv->vht_mcs_map[0] = 0xea;        /* support 1SS MCS 0~9 2SS MCS 0~9 3SS MCS 0~9 */
+       else if(rf_type == RF_2T2R)
+               pvhtpriv->vht_mcs_map[0] = 0xfa;        /* support 1SS MCS 0~9 2SS MCS 0~9 */
        else
        else
-               pvhtpriv->vht_mcs_map[0] = 0xfa;        //support 1SS MCS 0~9 2SS MCS 0~9
+               pvhtpriv->vht_mcs_map[0] = 0xfe;        /* Only support 1SS MCS 0~9; */
        pvhtpriv->vht_mcs_map[1] = 0xff;
 
        if(pregistrypriv->vht_rate_sel == 1)
        pvhtpriv->vht_mcs_map[1] = 0xff;
 
        if(pregistrypriv->vht_rate_sel == 1)
@@ -235,19 +237,21 @@ void      rtw_vht_use_default_setting(_adapter *padapter)
        pvhtpriv->vht_highest_rate = rtw_get_vht_highest_rate(pvhtpriv->vht_mcs_map);
 }
 
        pvhtpriv->vht_highest_rate = rtw_get_vht_highest_rate(pvhtpriv->vht_mcs_map);
 }
 
-u32    rtw_vht_rate_to_bitmap(u8 *pVHTRate)
+u64    rtw_vht_rate_to_bitmap(u8 *pVHTRate)
 {
 
        u8      i,j , tmpRate;
 {
 
        u8      i,j , tmpRate;
-       u32     RateBitmap = 0;
+       u64     RateBitmap = 0;
+       u8 Bits_3ss = 6;
                
                
-       for(i = j= 0; i < 4; i+=2, j+=10)
+       for(i = j= 0; i < Bits_3ss; i+=2, j+=10)
        {
        {
+               /* every two bits means single sptial stream */
                tmpRate = (pVHTRate[0] >> i) & 3;
 
                switch(tmpRate){
                case 2:
                tmpRate = (pVHTRate[0] >> i) & 3;
 
                switch(tmpRate){
                case 2:
-                       RateBitmap = RateBitmap | (0x03ff << j);        
+                       RateBitmap = RateBitmap | (0x03ff << j);
                        break;
                case 1:
                        RateBitmap = RateBitmap | (0x01ff << j);
                        break;
                case 1:
                        RateBitmap = RateBitmap | (0x01ff << j);
@@ -261,7 +265,7 @@ u32 rtw_vht_rate_to_bitmap(u8 *pVHTRate)
                        break;
                }
        }
                        break;
                }
        }
-
+       DBG_871X("RateBitmap=%016llx , pVHTRate[0]=%02x\n", RateBitmap, pVHTRate[0]);
        return RateBitmap;
 }
 
        return RateBitmap;
 }
 
@@ -425,6 +429,8 @@ void VHT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
                vht_mcs[0] |= 0xfc;
        else if (rf_type == RF_2T2R)
                vht_mcs[0] |= 0xf0;
                vht_mcs[0] |= 0xfc;
        else if (rf_type == RF_2T2R)
                vht_mcs[0] |= 0xf0;
+       else if (rf_type == RF_3T3R)
+               vht_mcs[0] |= 0xc0;
 
        _rtw_memcpy(pvhtpriv->vht_mcs_map, vht_mcs, 2);
 
 
        _rtw_memcpy(pvhtpriv->vht_mcs_map, vht_mcs, 2);
 
@@ -530,10 +536,12 @@ u32       rtw_build_vht_op_mode_notify_ie(_adapter *padapter, u8 *pbuf, u8 bw)
        chnl_width = bw;
 
        rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
        chnl_width = bw;
 
        rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
-       if(rf_type == RF_1T1R)
-               rx_nss = 1;
-       else
+       if(rf_type == RF_3T3R)
+               rx_nss = 3;
+       else if(rf_type == RF_2T2R)
                rx_nss = 2;
                rx_nss = 2;
+       else
+               rx_nss = 1;
 
        SET_VHT_OPERATING_MODE_FIELD_CHNL_WIDTH(&opmode, chnl_width);
        SET_VHT_OPERATING_MODE_FIELD_RX_NSS(&opmode, (rx_nss-1));
 
        SET_VHT_OPERATING_MODE_FIELD_CHNL_WIDTH(&opmode, chnl_width);
        SET_VHT_OPERATING_MODE_FIELD_RX_NSS(&opmode, (rx_nss-1));
@@ -558,7 +566,10 @@ u32        rtw_build_vht_cap_ie(_adapter *padapter, u8 *pbuf)
 
        pcap = pvhtpriv->vht_cap;
        _rtw_memset(pcap, 0, 32);
 
        pcap = pvhtpriv->vht_cap;
        _rtw_memset(pcap, 0, 32);
-
+       
+       /* B0 B1 Maximum MPDU Length */
+       SET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(pcap, 2); 
+       
        // B2 B3 Supported Channel Width Set
        SET_VHT_CAPABILITY_ELE_CHL_WIDTH(pcap, 0);  //indicate we don't support neither 160M nor 80+80M bandwidth.
 
        // B2 B3 Supported Channel Width Set
        SET_VHT_CAPABILITY_ELE_CHL_WIDTH(pcap, 0);  //indicate we don't support neither 160M nor 80+80M bandwidth.
 
index c2e4e48dddc9a1f78db1a2d13bcb09a2b0e103bb..1f2fc4edd780eb78ce65ac39c2c6f340d36df4bf 100755 (executable)
@@ -31,6 +31,7 @@ unsigned char ARTHEROS_OUI2[] = {0x00, 0x13, 0x74};
 unsigned char BROADCOM_OUI1[] = {0x00, 0x10, 0x18};
 unsigned char BROADCOM_OUI2[] = {0x00, 0x0a, 0xf7};
 unsigned char BROADCOM_OUI3[] = {0x00, 0x05, 0xb5};
 unsigned char BROADCOM_OUI1[] = {0x00, 0x10, 0x18};
 unsigned char BROADCOM_OUI2[] = {0x00, 0x0a, 0xf7};
 unsigned char BROADCOM_OUI3[] = {0x00, 0x05, 0xb5};
+unsigned char BROADCOM_OUI4[] = {0x00, 0x90, 0x4c};
 
 unsigned char CISCO_OUI[] = {0x00, 0x40, 0x96};
 unsigned char MARVELL_OUI[] = {0x00, 0x50, 0x43};
 
 unsigned char CISCO_OUI[] = {0x00, 0x40, 0x96};
 unsigned char MARVELL_OUI[] = {0x00, 0x50, 0x43};
@@ -80,7 +81,7 @@ int cckrates_included(unsigned char *rate, int ratelen)
        {
                if  (  (((rate[i]) & 0x7f) == 2)        || (((rate[i]) & 0x7f) == 4) ||
                           (((rate[i]) & 0x7f) == 11)  || (((rate[i]) & 0x7f) == 22) )
        {
                if  (  (((rate[i]) & 0x7f) == 2)        || (((rate[i]) & 0x7f) == 4) ||
                           (((rate[i]) & 0x7f) == 11)  || (((rate[i]) & 0x7f) == 22) )
-               return _TRUE;   
+                       return _TRUE;
        }
 
        return _FALSE;
        }
 
        return _FALSE;
@@ -95,7 +96,7 @@ int cckratesonly_included(unsigned char *rate, int ratelen)
        {
                if  ( (((rate[i]) & 0x7f) != 2) && (((rate[i]) & 0x7f) != 4) &&
                           (((rate[i]) & 0x7f) != 11)  && (((rate[i]) & 0x7f) != 22) )
        {
                if  ( (((rate[i]) & 0x7f) != 2) && (((rate[i]) & 0x7f) != 4) &&
                           (((rate[i]) & 0x7f) != 11)  && (((rate[i]) & 0x7f) != 22) )
-               return _FALSE;  
+                       return _FALSE;
        }
        
        return _TRUE;
        }
        
        return _TRUE;
@@ -139,13 +140,17 @@ u8 networktype_to_raid(_adapter *adapter,struct sta_info *psta)
 u8 networktype_to_raid_ex(_adapter *adapter, struct sta_info *psta)
 {
        struct mlme_ext_priv    *pmlmeext = &adapter->mlmeextpriv;
 u8 networktype_to_raid_ex(_adapter *adapter, struct sta_info *psta)
 {
        struct mlme_ext_priv    *pmlmeext = &adapter->mlmeextpriv;
-       u8 raid, cur_rf_type, rf_type= RF_1T1R;
+       u8 raid = RATEID_IDX_BGN_40M_1SS, cur_rf_type, rf_type, custom_rf_type;
 
 
+       cur_rf_type = rf_type = RF_1T1R;
+       custom_rf_type = adapter->registrypriv.rf_config;
        rtw_hal_get_hwreg(adapter, HW_VAR_RF_TYPE, (u8 *)(&cur_rf_type));
 
        if(cur_rf_type == RF_1T1R) {
                rf_type = RF_1T1R;
        }
        rtw_hal_get_hwreg(adapter, HW_VAR_RF_TYPE, (u8 *)(&cur_rf_type));
 
        if(cur_rf_type == RF_1T1R) {
                rf_type = RF_1T1R;
        }
+       else if(cur_rf_type == RF_3T3R)
+               rf_type = RF_3T3R;
        else if(IsSupportedVHT(psta->wireless_mode)) {
                if(psta->ra_mask & 0xffc00000)
                        rf_type = RF_2T2R;
        else if(IsSupportedVHT(psta->wireless_mode)) {
                if(psta->ra_mask & 0xffc00000)
                        rf_type = RF_2T2R;
@@ -155,6 +160,7 @@ u8 networktype_to_raid_ex(_adapter *adapter, struct sta_info *psta)
                        rf_type = RF_2T2R;
        }
 
                        rf_type = RF_2T2R;
        }
 
+
        switch(psta->wireless_mode)
        {
                case WIRELESS_11B:
        switch(psta->wireless_mode)
        {
                case WIRELESS_11B:
@@ -171,54 +177,82 @@ u8 networktype_to_raid_ex(_adapter *adapter, struct sta_info *psta)
                case WIRELESS_11_5N:
                case WIRELESS_11A_5N:
                case WIRELESS_11G_24N:
                case WIRELESS_11_5N:
                case WIRELESS_11A_5N:
                case WIRELESS_11G_24N:
-                       if (rf_type == RF_2T2R)
+                       if (rf_type == RF_1T1R || custom_rf_type == RF_1T2R)
+                               raid = RATEID_IDX_GN_N1SS;
+                       else if (rf_type == RF_2T2R || custom_rf_type == RF_2T4R)
                                raid = RATEID_IDX_GN_N2SS;
                                raid = RATEID_IDX_GN_N2SS;
+                       else if (rf_type == RF_3T3R)
+                               raid = RATEID_IDX_BGN_3SS;
                        else
                        else
-                               raid = RATEID_IDX_GN_N1SS;
+                               DBG_871X("RF type error!(rf_type=%d)\n", rf_type);
                        break;
                case WIRELESS_11B_24N:
                case WIRELESS_11BG_24N:
                        if (psta->bw_mode == CHANNEL_WIDTH_20) {
                        break;
                case WIRELESS_11B_24N:
                case WIRELESS_11BG_24N:
                        if (psta->bw_mode == CHANNEL_WIDTH_20) {
-                               if (rf_type == RF_2T2R)
+                               if (rf_type == RF_1T1R || custom_rf_type == RF_1T2R)
+                                       raid = RATEID_IDX_BGN_20M_1SS_BN;
+                               else if (rf_type == RF_2T2R || custom_rf_type == RF_2T4R)
                                        raid = RATEID_IDX_BGN_20M_2SS_BN;
                                        raid = RATEID_IDX_BGN_20M_2SS_BN;
+                               else if(rf_type == RF_3T3R)
+                                       raid = RATEID_IDX_BGN_3SS;
                                else
                                else
-                                       raid = RATEID_IDX_BGN_20M_1SS_BN;
+                               DBG_871X("RF type error!(rf_type=%d)\n", rf_type);
                        } else {
                        } else {
-                               if (rf_type == RF_2T2R)
+                               if (rf_type == RF_1T1R || custom_rf_type == RF_1T2R)
+                                       raid = RATEID_IDX_BGN_40M_1SS;
+                               else if (rf_type == RF_2T2R || custom_rf_type == RF_2T4R)
                                        raid = RATEID_IDX_BGN_40M_2SS;
                                        raid = RATEID_IDX_BGN_40M_2SS;
+                               else if(rf_type == RF_3T3R)
+                                       raid = RATEID_IDX_BGN_3SS;
                                else
                                else
-                                       raid = RATEID_IDX_BGN_40M_1SS;
+                               DBG_871X("RF type error!(rf_type=%d)\n", rf_type);
                        }
                        break;
 #ifdef CONFIG_80211AC_VHT
                case WIRELESS_11_5AC:
                        }
                        break;
 #ifdef CONFIG_80211AC_VHT
                case WIRELESS_11_5AC:
-                       if (rf_type == RF_1T1R)
+                       if (rf_type == RF_1T1R || custom_rf_type == RF_1T2R)
                                raid = RATEID_IDX_VHT_1SS;
                                raid = RATEID_IDX_VHT_1SS;
-                       else
+                       else if (rf_type == RF_2T2R || custom_rf_type == RF_2T4R)
                                raid = RATEID_IDX_VHT_2SS;
                                raid = RATEID_IDX_VHT_2SS;
+                       else if (rf_type == RF_3T3R)
+                               raid = RATEID_IDX_VHT_3SS;
+                       else
+                               DBG_871X("RF type error!(rf_type=%d)\n", rf_type);
                        break;
                case WIRELESS_11_24AC:
                        if (psta->bw_mode >= CHANNEL_WIDTH_80)
                        {
                        break;
                case WIRELESS_11_24AC:
                        if (psta->bw_mode >= CHANNEL_WIDTH_80)
                        {
-                               if (rf_type == RF_1T1R)
+                               if (rf_type == RF_1T1R || custom_rf_type == RF_1T2R)
                                        raid = RATEID_IDX_VHT_1SS;
                                        raid = RATEID_IDX_VHT_1SS;
-                               else
+                               else if (rf_type == RF_2T2R || custom_rf_type == RF_2T4R)
                                        raid = RATEID_IDX_VHT_2SS;
                                        raid = RATEID_IDX_VHT_2SS;
+                               else if (rf_type == RF_3T3R)
+                                       raid = RATEID_IDX_VHT_3SS;
+                               else
+                                       DBG_871X("RF type error!(rf_type=%d)\n", rf_type);
                        }
                        else
                        {
                        }
                        else
                        {
-                               if (rf_type == RF_1T1R)
-                                       raid = 11;
+                               if (rf_type == RF_1T1R || custom_rf_type == RF_1T2R)
+                                       raid = RATEID_IDX_MIX1;
+                               else if (rf_type == RF_2T2R || custom_rf_type == RF_2T4R)
+                                       raid = RATEID_IDX_MIX2;
+                               else if (rf_type == RF_3T3R)
+                                       raid = RATEID_IDX_VHT_3SS;
                                else
                                else
-                                       raid = 12;
+                                       DBG_871X("RF type error!(rf_type=%d)\n", rf_type);
                        }
                        break;
 #endif
                default:
                        }
                        break;
 #endif
                default:
-                       raid = RATEID_IDX_BGN_40M_2SS;
+                       DBG_871X("unexpected wireless mode!(psta->wireless_mode=%x)\n", psta->wireless_mode);
                        break;  
 
        }
                        break;  
 
        }
+       
+       /*DBG_871X("psta->wireless_mode=%x,  cur_rf_type=%d , rf_type=%d , raid=%d \n"
+       , psta->wireless_mode, cur_rf_type, rf_type, raid);*/
+       
        return raid;
        
 }
        return raid;
        
 }
@@ -662,12 +696,6 @@ void SelectChannel(_adapter *padapter, unsigned char channel)
 {
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;        
 
 {
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;        
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       //saved channel info
-       rtw_set_oper_ch(padapter, channel);
-       dc_SelectChannel(padapter, channel);
-#else //CONFIG_DUALMAC_CONCURRENT
-
        _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
        
        //saved channel info
        _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
        
        //saved channel info
@@ -677,20 +705,12 @@ void SelectChannel(_adapter *padapter, unsigned char channel)
        
        _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
                
        
        _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
                
-#endif // CONFIG_DUALMAC_CONCURRENT
 }
 
 void SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset)
 {
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
 
 }
 
 void SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset)
 {
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       //saved bw info
-       rtw_set_oper_bw(padapter, bwmode);
-       rtw_set_oper_choffset(padapter, channel_offset);
-       dc_SetBWMode(padapter, bwmode, channel_offset);
-#else //CONFIG_DUALMAC_CONCURRENT
-
        _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setbw_mutex), NULL);
 
        //saved bw info
        _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setbw_mutex), NULL);
 
        //saved bw info
@@ -700,8 +720,6 @@ void SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_
        rtw_hal_set_bwmode(padapter, (CHANNEL_WIDTH)bwmode, channel_offset);
 
        _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setbw_mutex), NULL);
        rtw_hal_set_bwmode(padapter, (CHANNEL_WIDTH)bwmode, channel_offset);
 
        _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setbw_mutex), NULL);
-
-#endif // CONFIG_DUALMAC_CONCURRENT
 }
 
 void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode)
 }
 
 void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode)
@@ -725,19 +743,10 @@ void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char
                else
                        chnl_offset80 = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
        }
                else
                        chnl_offset80 = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
        }
-
-       //set Channel
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       //saved channel/bw info
-       rtw_set_oper_ch(padapter, channel);
-       rtw_set_oper_bw(padapter, bwmode);
-       rtw_set_oper_choffset(padapter, channel_offset);
-       SelectChannel(padapter, channel);
-       SetBWMode(padapter, bwmode, channel_offset);
-#else //CONFIG_DUALMAC_CONCURRENT
-       
        _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
 
        _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
 
+
+       //set Channel
        //saved channel/bw info
        rtw_set_oper_ch(padapter, channel);
        rtw_set_oper_bw(padapter, bwmode);
        //saved channel/bw info
        rtw_set_oper_ch(padapter, channel);
        rtw_set_oper_bw(padapter, bwmode);
@@ -746,8 +755,6 @@ void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char
        rtw_hal_set_chnl_bw(padapter, center_ch, bwmode, channel_offset, chnl_offset80); // set center channel
 
        _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
        rtw_hal_set_chnl_bw(padapter, center_ch, bwmode, channel_offset, chnl_offset80); // set center channel
 
        _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
-
-#endif // CONFIG_DUALMAC_CONCURRENT
 }
 
 int get_bsstype(unsigned short capability)
 }
 
 int get_bsstype(unsigned short capability)
@@ -1659,7 +1666,7 @@ void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
 {
 #ifdef CONFIG_80211N_HT
        unsigned int    i;
 {
 #ifdef CONFIG_80211N_HT
        unsigned int    i;
-       u8      rf_type;
+       u8      rf_type = RF_1T1R;
        u8      max_AMPDU_len, min_MPDU_spacing;
        u8      cur_ldpc_cap=0, cur_stbc_cap=0, cur_beamform_cap=0;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        u8      max_AMPDU_len, min_MPDU_spacing;
        u8      cur_ldpc_cap=0, cur_stbc_cap=0, cur_beamform_cap=0;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
@@ -1730,9 +1737,8 @@ void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
                case RF_1T2R:
                        set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_1R);                                                        
                        break;
                case RF_1T2R:
                        set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_1R);                                                        
                        break;
-               case RF_2T2R:           
-               default:
-#ifdef CONFIG_DISABLE_MCS13TO15
+               case RF_2T2R:
+                       #ifdef CONFIG_DISABLE_MCS13TO15
                        if(pmlmeext->cur_bwmode == CHANNEL_WIDTH_40 && pregistrypriv->wifi_spec != 1 )                          
                                set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_2R_13TO15_OFF);                             
                        else
                        if(pmlmeext->cur_bwmode == CHANNEL_WIDTH_40 && pregistrypriv->wifi_spec != 1 )                          
                                set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_2R_13TO15_OFF);                             
                        else
@@ -1740,6 +1746,12 @@ void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
 #else //CONFIG_DISABLE_MCS13TO15
                        set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_2R);
 #endif //CONFIG_DISABLE_MCS13TO15
 #else //CONFIG_DISABLE_MCS13TO15
                        set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_2R);
 #endif //CONFIG_DISABLE_MCS13TO15
+                       break;
+               case RF_3T3R:
+                       set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_3R);
+                       break;
+               default:
+                       DBG_871X("[warning] rf_type %d is not expected\n", rf_type);
        }
 
        if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
        }
 
        if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
@@ -2007,23 +2019,6 @@ void     update_ldpc_stbc_cap(struct sta_info *psta)
 #endif //CONFIG_80211N_HT
 }
 
 #endif //CONFIG_80211N_HT
 }
 
-#ifdef CONFIG_TDLS
-int check_ap_tdls_prohibited(u8 *pframe, u8 pkt_len)
-{
-       u8 tdls_prohibited_bit = 0x40; //bit(38); TDLS_prohibited
-
-       if(pkt_len < 5)
-       {
-               return _FALSE;
-       }
-
-       pframe += 4;
-       if( (*pframe) & tdls_prohibited_bit )
-               return _TRUE;
-
-       return _FALSE;
-}
-#endif //CONFIG_TDLS
 
 /*
  * rtw_get_bcn_keys: get beacon keys from recv frame
 
 /*
  * rtw_get_bcn_keys: get beacon keys from recv frame
@@ -2495,6 +2490,8 @@ void update_beacon_info(_adapter *padapter, u8 *pframe, uint pkt_len, struct sta
                        case _EXT_CAP_IE_:
                                if( check_ap_tdls_prohibited(pIE->data, pIE->Length) == _TRUE )
                                        ptdlsinfo->ap_prohibited = _TRUE;
                        case _EXT_CAP_IE_:
                                if( check_ap_tdls_prohibited(pIE->data, pIE->Length) == _TRUE )
                                        ptdlsinfo->ap_prohibited = _TRUE;
+                               if (check_ap_tdls_ch_switching_prohibited(pIE->data, pIE->Length) == _TRUE)
+                                       ptdlsinfo->ch_switch_prohibited = _TRUE;
                                break;
 #endif //CONFIG_TDLS
                        default:
                                break;
 #endif //CONFIG_TDLS
                        default:
@@ -2608,7 +2605,7 @@ unsigned int should_forbid_n_rate(_adapter * padapter)
                                case _RSN_IE_2_:
                                        if  ((_rtw_memcmp((pIE->data + 8), RSN_CIPHER_SUITE_CCMP, 4))  ||
                                               (_rtw_memcmp((pIE->data + 12), RSN_CIPHER_SUITE_CCMP, 4)))
                                case _RSN_IE_2_:
                                        if  ((_rtw_memcmp((pIE->data + 8), RSN_CIPHER_SUITE_CCMP, 4))  ||
                                               (_rtw_memcmp((pIE->data + 12), RSN_CIPHER_SUITE_CCMP, 4)))
-                                       return _FALSE;
+                                               return _FALSE;
 
                                default:
                                        break;
 
                                default:
                                        break;
@@ -2898,9 +2895,10 @@ unsigned char check_assoc_AP(u8 *pframe, uint len)
                                        DBG_871X("link to Artheros AP\n");
                                        return HT_IOT_PEER_ATHEROS;
                                }
                                        DBG_871X("link to Artheros AP\n");
                                        return HT_IOT_PEER_ATHEROS;
                                }
-                               else if ((_rtw_memcmp(pIE->data, BROADCOM_OUI1, 3))
-                                                       || (_rtw_memcmp(pIE->data, BROADCOM_OUI2, 3))
-                                                       || (_rtw_memcmp(pIE->data, BROADCOM_OUI2, 3)))
+                               else if (       (_rtw_memcmp(pIE->data, BROADCOM_OUI1, 3))
+                                               || (_rtw_memcmp(pIE->data, BROADCOM_OUI2, 3))
+                                               || (_rtw_memcmp(pIE->data, BROADCOM_OUI3, 3))
+                                               || (_rtw_memcmp(pIE->data, BROADCOM_OUI4, 3)))
                                {
                                        DBG_871X("link to Broadcom AP\n");
                                        return HT_IOT_PEER_BROADCOM;
                                {
                                        DBG_871X("link to Broadcom AP\n");
                                        return HT_IOT_PEER_BROADCOM;
@@ -2977,38 +2975,6 @@ unsigned char check_assoc_AP(u8 *pframe, uint len)
        return HT_IOT_PEER_UNKNOWN;
 }
 
        return HT_IOT_PEER_UNKNOWN;
 }
 
-void update_IOT_info(_adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
-       
-       switch (pmlmeinfo->assoc_AP_vendor)
-       {
-               case HT_IOT_PEER_MARVELL:
-                       pmlmeinfo->turboMode_cts2self = 1;
-                       pmlmeinfo->turboMode_rtsen = 0;
-                       break;
-               
-               case HT_IOT_PEER_RALINK:
-                       pmlmeinfo->turboMode_cts2self = 0;
-                       pmlmeinfo->turboMode_rtsen = 1;
-                       //disable high power                    
-                       Switch_DM_Func(padapter, (~DYNAMIC_BB_DYNAMIC_TXPWR), _FALSE);
-                       break;
-               case HT_IOT_PEER_REALTEK:
-                       //rtw_write16(padapter, 0x4cc, 0xffff);
-                       //rtw_write16(padapter, 0x546, 0x01c0);
-                       //disable high power                    
-                       Switch_DM_Func(padapter, (~DYNAMIC_BB_DYNAMIC_TXPWR), _FALSE);
-                       break;
-               default:
-                       pmlmeinfo->turboMode_cts2self = 0;
-                       pmlmeinfo->turboMode_rtsen = 1;
-                       break;  
-       }
-       
-}
-
 void update_capinfo(PADAPTER Adapter, u16 updateCap)
 {
        struct mlme_ext_priv    *pmlmeext = &Adapter->mlmeextpriv;
 void update_capinfo(PADAPTER Adapter, u16 updateCap)
 {
        struct mlme_ext_priv    *pmlmeext = &Adapter->mlmeextpriv;
@@ -3123,6 +3089,7 @@ void update_wireless_mode(_adapter *padapter)
        }
 
        pmlmeext->cur_wireless_mode = network_type & padapter->registrypriv.wireless_mode;
        }
 
        pmlmeext->cur_wireless_mode = network_type & padapter->registrypriv.wireless_mode;
+       /* DBG_871X("network_type=%02x, padapter->registrypriv.wireless_mode=%02x\n", network_type, padapter->registrypriv.wireless_mode); */
 /*
        if((pmlmeext->cur_wireless_mode==WIRELESS_11G) ||
                (pmlmeext->cur_wireless_mode==WIRELESS_11BG))//WIRELESS_MODE_G)
 /*
        if((pmlmeext->cur_wireless_mode==WIRELESS_11G) ||
                (pmlmeext->cur_wireless_mode==WIRELESS_11BG))//WIRELESS_MODE_G)
@@ -3134,9 +3101,9 @@ void update_wireless_mode(_adapter *padapter)
        SIFS_Timer = 0x0a0a0808; //0x0808 -> for CCK, 0x0a0a -> for OFDM
                              //change this value if having IOT issues.
                
        SIFS_Timer = 0x0a0a0808; //0x0808 -> for CCK, 0x0a0a -> for OFDM
                              //change this value if having IOT issues.
                
-       padapter->HalFunc.SetHwRegHandler( padapter, HW_VAR_RESP_SIFS,  (u8 *)&SIFS_Timer);
+       rtw_hal_set_hwreg( padapter, HW_VAR_RESP_SIFS,  (u8 *)&SIFS_Timer);
 
 
-       padapter->HalFunc.SetHwRegHandler( padapter, HW_VAR_WIRELESS_MODE,  (u8 *)&(pmlmeext->cur_wireless_mode));
+       rtw_hal_set_hwreg( padapter, HW_VAR_WIRELESS_MODE,  (u8 *)&(pmlmeext->cur_wireless_mode));
 
 #ifdef CONFIG_P2P
        //      Added by Thomas 20130822
 
 #ifdef CONFIG_P2P
        //      Added by Thomas 20130822
@@ -3232,31 +3199,41 @@ void process_addba_req(_adapter *padapter, u8 *paddba_req, u8 *addr)
        struct ADDBA_request    *preq = (struct ADDBA_request*)paddba_req;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        struct ADDBA_request    *preq = (struct ADDBA_request*)paddba_req;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
+       u8 size;
 
        psta = rtw_get_stainfo(pstapriv, addr);
 
        psta = rtw_get_stainfo(pstapriv, addr);
+       if (!psta)
+               goto exit;
 
 
-       if(psta)
-       {
-               start_seq = le16_to_cpu(preq->BA_starting_seqctrl) >> 4;
-                       
-               param = le16_to_cpu(preq->BA_para_set);
-               tid = (param>>2)&0x0f;
-               
-               preorder_ctrl = &psta->recvreorder_ctrl[tid];
+       start_seq = le16_to_cpu(preq->BA_starting_seqctrl) >> 4;
 
 
-               #ifdef CONFIG_UPDATE_INDICATE_SEQ_WHILE_PROCESS_ADDBA_REQ
-               preorder_ctrl->indicate_seq = start_seq;
-               #ifdef DBG_RX_SEQ
-               DBG_871X("DBG_RX_SEQ %s:%d IndicateSeq: %d, start_seq: %d\n", __FUNCTION__, __LINE__,
-                       preorder_ctrl->indicate_seq, start_seq);
-               #endif
-               #else
-               preorder_ctrl->indicate_seq = 0xffff;
-               #endif
-               
-               preorder_ctrl->enable =(pmlmeinfo->bAcceptAddbaReq == _TRUE)? _TRUE :_FALSE;
+       param = le16_to_cpu(preq->BA_para_set);
+       tid = (param>>2)&0x0f;
+
+       preorder_ctrl = &psta->recvreorder_ctrl[tid];
+
+       #ifdef CONFIG_UPDATE_INDICATE_SEQ_WHILE_PROCESS_ADDBA_REQ
+       preorder_ctrl->indicate_seq = start_seq;
+       #ifdef DBG_RX_SEQ
+       DBG_871X("DBG_RX_SEQ %s:%d IndicateSeq: %d, start_seq: %d\n", __func__, __LINE__,
+               preorder_ctrl->indicate_seq, start_seq);
+       #endif
+       #else
+       preorder_ctrl->indicate_seq = 0xffff;
+       #endif
+
+       preorder_ctrl->enable = rtw_rx_ampdu_is_accept(padapter);
+       size = rtw_rx_ampdu_size(padapter);
+
+       if (preorder_ctrl->enable == _TRUE) {
+               preorder_ctrl->ampdu_size = size;
+               issue_addba_rsp(padapter, addr, tid, 0, size);
+       } else {
+               issue_addba_rsp(padapter, addr, tid, 37, size); /* reject ADDBA Req */
        }
 
        }
 
+exit:
+       return;
 }
 
 void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len)
 }
 
 void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len)
@@ -3511,7 +3488,7 @@ void rtw_alloc_macid(_adapter *padapter, struct sta_info *psta)
        //static u8 last_id = 0; /* for testing */
        u8 last_id = 0;
 
        //static u8 last_id = 0; /* for testing */
        u8 last_id = 0;
 
-       if (_rtw_memcmp(psta->hwaddr, myid(&padapter->eeprompriv), ETH_ALEN)) {
+       if (_rtw_memcmp(psta->hwaddr, adapter_mac_addr(padapter), ETH_ALEN)) {
                psta->mac_id = macid_ctl->num;
                return;
        }
                psta->mac_id = macid_ctl->num;
                return;
        }
@@ -3585,7 +3562,7 @@ void rtw_release_macid(_adapter *padapter, struct sta_info *psta)
        struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
        struct macid_ctl_t *macid_ctl = dvobj_to_macidctl(dvobj);
 
        struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
        struct macid_ctl_t *macid_ctl = dvobj_to_macidctl(dvobj);
 
-       if(_rtw_memcmp(psta->hwaddr, myid(&padapter->eeprompriv), ETH_ALEN))
+       if (_rtw_memcmp(psta->hwaddr, adapter_mac_addr(padapter), ETH_ALEN))
                return;
 
 #ifdef CONFIG_SHARED_BMC_MACID
                return;
 
 #ifdef CONFIG_SHARED_BMC_MACID
@@ -3679,7 +3656,7 @@ unsigned int setup_beacon_frame(_adapter *padapter, unsigned char *beacon_frame)
        *(fctrl) = 0;
        
        _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
        *(fctrl) = 0;
        
        _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
        
        SetFrameSubType(pframe, WIFI_BEACON);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
        
        SetFrameSubType(pframe, WIFI_BEACON);
@@ -3756,59 +3733,6 @@ unsigned int setup_beacon_frame(_adapter *padapter, unsigned char *beacon_frame)
 }
 #endif
 
 }
 #endif
 
-static _adapter *pbuddy_padapter = NULL;
-
-int rtw_handle_dualmac(_adapter *adapter, bool init)
-{
-       int status = _SUCCESS;
-       struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
-
-       if(adapter->chip_type != RTL8192D)      
-               goto exit;
-               
-       if (init) {
-               #if 0
-               /* For SMSP on 92DU-VC, driver do not probe another Interface. */
-               if(dvobj->NumInterfaces == 2 && dvobj->InterfaceNumber != 0 &&
-                       adapter->registrypriv.mac_phy_mode == 1) {
-                       DBG_871X("%s(): Do not init another USB Interface because SMSP\n",__FUNCTION__);
-                       status = _FAIL;
-                       goto exit;
-               }
-               #endif
-               
-               if (pbuddy_padapter == NULL) {
-                       pbuddy_padapter = adapter;
-                       DBG_871X("%s(): pbuddy_padapter == NULL, Set pbuddy_padapter\n",__FUNCTION__);
-               } else {
-                       adapter->pbuddy_adapter = pbuddy_padapter;
-                       pbuddy_padapter->pbuddy_adapter = adapter;
-                       // clear global value
-                       pbuddy_padapter = NULL;
-                       DBG_871X("%s(): pbuddy_padapter exist, Exchange Information\n",__FUNCTION__);
-               }
-#ifdef CONFIG_DUALMAC_CONCURRENT
-               if (dvobj->InterfaceNumber == 0) {
-                       //set adapter_type/iface type
-                       adapter->isprimary = _TRUE;
-                       adapter->adapter_type = PRIMARY_ADAPTER;
-                       adapter->iface_type = IFACE_PORT0;
-                       DBG_871X("%s(): PRIMARY_ADAPTER\n",__FUNCTION__);
-               } else {
-                       //set adapter_type/iface type
-                       adapter->isprimary = _FALSE;
-                       adapter->adapter_type = SECONDARY_ADAPTER;
-                       adapter->iface_type = IFACE_PORT1;
-                       DBG_871X("%s(): SECONDARY_ADAPTER\n",__FUNCTION__);
-               }
-#endif
-       }else {
-               pbuddy_padapter = NULL;
-       }
-exit:
-       return status;
-}
-
 _adapter *dvobj_get_port0_adapter(struct dvobj_priv *dvobj)
 {
        _adapter *port0_iface = NULL;
 _adapter *dvobj_get_port0_adapter(struct dvobj_priv *dvobj)
 {
        _adapter *port0_iface = NULL;
@@ -3826,51 +3750,6 @@ _adapter *dvobj_get_port0_adapter(struct dvobj_priv *dvobj)
        return port0_iface;
 }
 
        return port0_iface;
 }
 
-/*
- * Description:
- * rtw_check_invalid_mac_address: 
- * This is only used for checking mac address valid or not.
- *
- * Input:
- * adapter: mac_address pointer.
- *
- * Output:
- * _TRUE: The mac address is invalid.
- * _FALSE: The mac address is valid.
- *
- * Auther: Isaac.Li
- */
-u8 rtw_check_invalid_mac_address(u8 *mac_addr) {
-       u8 null_mac_addr[ETH_ALEN] = {0, 0, 0, 0, 0, 0};
-       u8 multi_mac_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-       u8 res = _FALSE;
-
-       if (_rtw_memcmp(mac_addr, null_mac_addr, ETH_ALEN)) {
-               res = _TRUE;
-               goto func_exit;
-       }
-
-       if (_rtw_memcmp(mac_addr, multi_mac_addr, ETH_ALEN)) {
-               res = _TRUE;
-               goto func_exit;
-       }
-
-       if (mac_addr[0] & BIT0) {
-               res = _TRUE;
-               goto func_exit;
-       }
-
-       if (mac_addr[0] & BIT1) {
-               res = _TRUE;
-               goto func_exit;
-       }
-
-func_exit:
-       return res;
-}
-
-
-
 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
 void rtw_get_current_ip_address(PADAPTER padapter, u8 *pcurrentip)
 {
 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
 void rtw_get_current_ip_address(PADAPTER padapter, u8 *pcurrentip)
 {
index 581113925c235a7d6ec8b9fd8032bdaae46db747..7902a737878a427d71ee122351b746447f7671ff 100755 (executable)
@@ -658,6 +658,19 @@ static void update_attrib_phy_info(_adapter *padapter, struct pkt_attrib *pattri
        //              pattrib->ampdu_en = _TRUE;
        //}     
 
        //              pattrib->ampdu_en = _TRUE;
        //}     
 
+#ifdef CONFIG_TDLS
+       if (pattrib->direct_link==_TRUE) {
+               psta = pattrib->ptdls_sta;
+
+               pattrib->raid = psta->raid;
+#ifdef CONFIG_80211N_HT
+               pattrib->bwmode = psta->bw_mode;
+               pattrib->ht_en = psta->htpriv.ht_option;
+               pattrib->ch_offset = psta->htpriv.ch_offset;
+               pattrib->sgi= query_ra_short_GI(psta);
+#endif /* CONFIG_80211N_HT */
+       }
+#endif /* CONFIG_TDLS */
 
        pattrib->retry_ctrl = _FALSE;
 
 
        pattrib->retry_ctrl = _FALSE;
 
@@ -728,6 +741,13 @@ static s32 update_attrib_sec_info(_adapter *padapter, struct pkt_attrib *pattrib
                
        }
        
                
        }
        
+#ifdef CONFIG_TDLS
+       if (pattrib->direct_link == _TRUE) {
+               if (pattrib->encrypt > 0)
+                       pattrib->encrypt = _AES_;
+       }
+#endif 
+       
        switch (pattrib->encrypt)
        {
                case _WEP40_:
        switch (pattrib->encrypt)
        {
                case _WEP40_:
@@ -816,19 +836,6 @@ static s32 update_attrib_sec_info(_adapter *padapter, struct pkt_attrib *pattrib
                pattrib->bswenc = _FALSE;
 #endif
 
                pattrib->bswenc = _FALSE;
 #endif
 
-#ifdef CONFIG_TDLS
-       if(pattrib->direct_link == _TRUE)
-       {
-               pattrib->mac_id = pattrib->ptdls_sta->mac_id;
-               if(pattrib->encrypt>0)
-               {
-                       pattrib->encrypt= _AES_;
-                       pattrib->iv_len=8;
-                       pattrib->icv_len=8;
-                       pattrib->bswenc = _FALSE;
-               }
-       }
-#endif //CONFIG_TDLS
 exit:
 
        return res;
 exit:
 
        return res;
@@ -896,20 +903,37 @@ static void set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib)
 }
 
 #ifdef CONFIG_TDLS
 }
 
 #ifdef CONFIG_TDLS
-void rtw_check_tdls_established(_adapter *padapter, struct pkt_attrib *pattrib)
+u8 rtw_check_tdls_established(_adapter *padapter, struct pkt_attrib *pattrib)
 {
        pattrib->ptdls_sta = NULL;
 
        pattrib->direct_link = _FALSE;
 {
        pattrib->ptdls_sta = NULL;
 
        pattrib->direct_link = _FALSE;
-       if((padapter->tdlsinfo.link_established == _TRUE)){
+       if (padapter->tdlsinfo.link_established == _TRUE) {
                pattrib->ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->dst);
                pattrib->ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->dst);
+#if 1
                if((pattrib->ptdls_sta!=NULL)&&
                        (pattrib->ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE)&&
                        (pattrib->ether_type!=0x0806)){
                                pattrib->direct_link = _TRUE;
                                //DBG_871X("send ptk to "MAC_FMT" using direct link\n", MAC_ARG(pattrib->dst));
                }
                if((pattrib->ptdls_sta!=NULL)&&
                        (pattrib->ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE)&&
                        (pattrib->ether_type!=0x0806)){
                                pattrib->direct_link = _TRUE;
                                //DBG_871X("send ptk to "MAC_FMT" using direct link\n", MAC_ARG(pattrib->dst));
                }
+#else
+               if (pattrib->ptdls_sta != NULL &&
+                       pattrib->ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) {
+                               pattrib->direct_link = _TRUE;
+                               #if 0
+                               DBG_871X("send ptk to "MAC_FMT" using direct link\n", MAC_ARG(pattrib->dst));
+                               #endif
+               }
+
+               /* ARP frame may be helped by AP*/
+               if (pattrib->ether_type != 0x0806) {
+                               pattrib->direct_link = _FALSE;
+               }       
+#endif
        }
        }
+
+       return pattrib->direct_link;
 }
 
 s32 update_tdls_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
 }
 
 s32 update_tdls_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
@@ -933,7 +957,7 @@ s32 update_tdls_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
        pattrib->psta = psta;
        pattrib->ack_policy = 0;
        // get ether_hdr_len
        pattrib->psta = psta;
        pattrib->ack_policy = 0;
        // get ether_hdr_len
-       pattrib->pkt_hdrlen = ETH_HLEN;//(pattrib->ether_type == 0x8100) ? (14 + 4 ): 14; //vlan tag
+       pattrib->pkt_hdrlen = ETH_HLEN;
 
        // [TDLS] TODO: setup req/rsp should be AC_BK
        if (pqospriv->qos_option &&  psta->qos_option) {
 
        // [TDLS] TODO: setup req/rsp should be AC_BK
        if (pqospriv->qos_option &&  psta->qos_option) {
@@ -1007,12 +1031,17 @@ static s32 update_attrib(_adapter *padapter, _pkt *pkt, struct pkt_attrib *pattr
        if ((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE) ||
                (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE)) {
                _rtw_memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
        if ((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE) ||
                (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE)) {
                _rtw_memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
-               _rtw_memcpy(pattrib->ta, myid(&padapter->eeprompriv), ETH_ALEN);
+               _rtw_memcpy(pattrib->ta, adapter_mac_addr(padapter), ETH_ALEN);
                DBG_COUNTER(padapter->tx_logs.core_tx_upd_attrib_adhoc);
        }
        else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
                DBG_COUNTER(padapter->tx_logs.core_tx_upd_attrib_adhoc);
        }
        else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
+#ifdef CONFIG_TDLS
+               if (rtw_check_tdls_established(padapter, pattrib) == _TRUE)
+                       _rtw_memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);       /* For TDLS direct link Tx, set ra to be same to dst */
+               else
+#endif
                _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
                _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
-               _rtw_memcpy(pattrib->ta, myid(&padapter->eeprompriv), ETH_ALEN);
+               _rtw_memcpy(pattrib->ta, adapter_mac_addr(padapter), ETH_ALEN);
                DBG_COUNTER(padapter->tx_logs.core_tx_upd_attrib_sta);
        }
        else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
                DBG_COUNTER(padapter->tx_logs.core_tx_upd_attrib_sta);
        }
        else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
@@ -1023,10 +1052,6 @@ static s32 update_attrib(_adapter *padapter, _pkt *pkt, struct pkt_attrib *pattr
        else
                DBG_COUNTER(padapter->tx_logs.core_tx_upd_attrib_unknown);
 
        else
                DBG_COUNTER(padapter->tx_logs.core_tx_upd_attrib_unknown);
 
-#ifdef CONFIG_TDLS
-       rtw_check_tdls_established(padapter, pattrib);
-#endif //CONFIG_TDLS
-
        pattrib->pktlen = pktfile.pkt_len;
 
        if (ETH_P_IP == pattrib->ether_type)
        pattrib->pktlen = pktfile.pkt_len;
 
        if (ETH_P_IP == pattrib->ether_type)
@@ -1181,13 +1206,18 @@ static s32 update_attrib(_adapter *padapter, _pkt *pkt, struct pkt_attrib *pattr
        }
        else
        {
        }
        else
        {
-               if(pqospriv->qos_option)
+#ifdef CONFIG_TDLS
+               if (pattrib->direct_link == _TRUE) {
+                       if (pattrib->qos_en)
+                               set_qos(&pktfile, pattrib);
+               } else 
+#endif
                {
                {
-                       set_qos(&pktfile, pattrib);
+                       if (pqospriv->qos_option) {
+                               set_qos(&pktfile, pattrib);
 
 
-                       if(pmlmepriv->acm_mask != 0)
-                       {
-                               pattrib->priority = qos_acm(pmlmepriv->acm_mask, pattrib->priority);
+                               if (pmlmepriv->acm_mask != 0)
+                                       pattrib->priority = qos_acm(pmlmepriv->acm_mask, pattrib->priority);
                        }
                }
        }
                        }
                }
        }
@@ -1404,11 +1434,6 @@ s32 rtw_make_wlanhdr (_adapter *padapter , u8 *hdr, struct pkt_attrib *pattrib)
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct qos_priv *pqospriv = &pmlmepriv->qospriv;
        u8 qos_option = _FALSE;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct qos_priv *pqospriv = &pmlmepriv->qospriv;
        u8 qos_option = _FALSE;
-#ifdef CONFIG_TDLS
-       struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
-       struct sta_priv         *pstapriv = &padapter->stapriv;
-#endif //CONFIG_TDLS
-
        sint res = _SUCCESS;
        u16 *fctrl = &pwlanhdr->frame_ctl;
 
        sint res = _SUCCESS;
        u16 *fctrl = &pwlanhdr->frame_ctl;
 
@@ -1452,6 +1477,9 @@ _func_enter_;
                                _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
                                _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
                                _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
                                _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
                                _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
                                _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
+
+                               if (pattrib->qos_en)
+                                       qos_option = _TRUE;
                        } 
                        else
 #endif //CONFIG_TDLS
                        } 
                        else
 #endif //CONFIG_TDLS
@@ -1463,11 +1491,10 @@ _func_enter_;
                                _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
                                _rtw_memcpy(pwlanhdr->addr2, pattrib->ta, ETH_ALEN);
                                _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
                                _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
                                _rtw_memcpy(pwlanhdr->addr2, pattrib->ta, ETH_ALEN);
                                _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
-                       } 
-
-                       if (pqospriv->qos_option)
-                               qos_option = _TRUE;
 
 
+                               if (pqospriv->qos_option)
+                                       qos_option = _TRUE;
+                       } 
                }
                else if ((check_fwstate(pmlmepriv,  WIFI_AP_STATE) == _TRUE) ) {
                        //to_ds = 0, fr_ds = 1;
                }
                else if ((check_fwstate(pmlmepriv,  WIFI_AP_STATE) == _TRUE) ) {
                        //to_ds = 0, fr_ds = 1;
@@ -1539,25 +1566,6 @@ _func_enter_;
                
                        if(psta)
                        {
                
                        if(psta)
                        {
-#ifdef CONFIG_TDLS
-                               if(pattrib->direct_link==_TRUE)
-                               {
-                                       psta = pattrib->ptdls_sta;
-
-                                       //qos_en, ht_en, init rate, ,bw, ch_offset, sgi
-                                       //pattrib->qos_en = ptdls_sta->qos_option;
-
-                                       pattrib->raid = psta->raid;
-#ifdef CONFIG_80211N_HT
-                                       pattrib->bwmode = psta->bw_mode;
-                                       pattrib->ht_en = psta->htpriv.ht_option;
-                                       pattrib->ch_offset = psta->htpriv.ch_offset;
-                                       pattrib->sgi= query_ra_short_GI(psta);
-#endif //CONFIG_80211N_HT
-                               }
-#endif //CONFIG_TDLS
-
-
                                psta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
                                psta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
                                pattrib->seqnum = psta->sta_xmitpriv.txseq_tid[pattrib->priority];
                                psta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
                                psta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
                                pattrib->seqnum = psta->sta_xmitpriv.txseq_tid[pattrib->priority];
@@ -1709,16 +1717,18 @@ int rtw_build_tdls_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *
                        rtw_build_tdls_dis_req_ies(padapter, pxmitframe, pframe, ptxmgmt);
                        break;                  
                case TDLS_PEER_TRAFFIC_INDICATION:
                        rtw_build_tdls_dis_req_ies(padapter, pxmitframe, pframe, ptxmgmt);
                        break;                  
                case TDLS_PEER_TRAFFIC_INDICATION:
-                       rtw_build_tdls_peer_traffic_indication_ies(padapter, pxmitframe, pframe);
+                       rtw_build_tdls_peer_traffic_indication_ies(padapter, pxmitframe, pframe, ptxmgmt);
                        break;
                        break;
+#ifdef CONFIG_TDLS_CH_SW                       
                case TDLS_CHANNEL_SWITCH_REQUEST:
                case TDLS_CHANNEL_SWITCH_REQUEST:
-                       rtw_build_tdls_ch_switch_req_ies(padapter, pxmitframe, pframe);
+                       rtw_build_tdls_ch_switch_req_ies(padapter, pxmitframe, pframe, ptxmgmt);
                        break;
                case TDLS_CHANNEL_SWITCH_RESPONSE:
                        break;
                case TDLS_CHANNEL_SWITCH_RESPONSE:
-                       rtw_build_tdls_ch_switch_rsp_ies(padapter, pxmitframe, pframe);
+                       rtw_build_tdls_ch_switch_rsp_ies(padapter, pxmitframe, pframe, ptxmgmt);
                        break;
                        break;
+#endif                 
                case TDLS_PEER_TRAFFIC_RESPONSE:
                case TDLS_PEER_TRAFFIC_RESPONSE:
-                       rtw_build_tdls_peer_traffic_rsp_ies(padapter, pxmitframe, pframe);
+                       rtw_build_tdls_peer_traffic_rsp_ies(padapter, pxmitframe, pframe, ptxmgmt);
                        break;
 #ifdef CONFIG_WFD                      
                case TUNNELED_PROBE_REQ:
                        break;
 #ifdef CONFIG_WFD                      
                case TUNNELED_PROBE_REQ:
@@ -1760,7 +1770,7 @@ _func_enter_;
                case TDLS_SETUP_RESPONSE:
                case TDLS_SETUP_CONFIRM:
                case TDLS_PEER_TRAFFIC_INDICATION:
                case TDLS_SETUP_RESPONSE:
                case TDLS_SETUP_CONFIRM:
                case TDLS_PEER_TRAFFIC_INDICATION:
-               case TDLS_PEER_PSM_REQUEST:     //directly to peer STA or via AP
+       case TDLS_PEER_PSM_REQUEST:
                case TUNNELED_PROBE_REQ:
                case TUNNELED_PROBE_RSP:
                case TDLS_DISCOVERY_REQUEST:
                case TUNNELED_PROBE_REQ:
                case TUNNELED_PROBE_RSP:
                case TDLS_DISCOVERY_REQUEST:
@@ -1876,11 +1886,15 @@ _func_enter_;
                }
        }
 
                }
        }
 
-       if(psta==NULL)
-               return _FAIL;
+       if (psta==NULL) {
+               res = _FAIL;
+               goto exit;
+       }
 
 
-       if (pxmitframe->buf_addr == NULL)
-               return _FAIL;
+       if (pxmitframe->buf_addr == NULL) {
+               res = _FAIL;
+               goto exit;
+       }
 
        pbuf_start = pxmitframe->buf_addr;
        mem_start = pbuf_start + TXDESC_OFFSET;
 
        pbuf_start = pxmitframe->buf_addr;
        mem_start = pbuf_start + TXDESC_OFFSET;
@@ -1944,6 +1958,7 @@ _func_enter_;
        
        if (xmitframe_addmic(padapter, pxmitframe) == _FAIL)
        {
        
        if (xmitframe_addmic(padapter, pxmitframe) == _FAIL)
        {
+               res = _FAIL;
                goto exit;
        }
 
                goto exit;
        }
 
@@ -3096,7 +3111,7 @@ static struct xmit_frame *dequeue_one_xmitframe(struct xmit_priv *pxmitpriv, str
        {
                pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
 
        {
                pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
 
-               xmitframe_plist = get_next(xmitframe_plist);
+               /* xmitframe_plist = get_next(xmitframe_plist); */
 
 /*#ifdef RTK_DMP_PLATFORM
 #ifdef CONFIG_USB_TX_AGGREGATION
 
 /*#ifdef RTK_DMP_PLATFORM
 #ifdef CONFIG_USB_TX_AGGREGATION
@@ -3900,13 +3915,11 @@ sint xmitframe_enqueue_for_tdls_sleeping_sta(_adapter *padapter, struct xmit_fra
                                        break;
                        }
 
                                        break;
                        }
 
+                       /* Transmit TDLS PTI via AP */
                        if(ptdls_sta->sleepq_len==1)
                        if(ptdls_sta->sleepq_len==1)
-                       {
-                               //transmit TDLS PTI via AP
-                               rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_SD_PTI);
-                       }
-                       ret = _TRUE;
+                               rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_ISSUE_PTI);
 
 
+                       ret = _TRUE;
                }
 
                _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);     
                }
 
                _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);     
@@ -3941,8 +3954,8 @@ if (adapter->interface_type != RTW_PCIE) {
                        || attrib->dhcp_pkt
                ) {
                        if (0)
                        || attrib->dhcp_pkt
                ) {
                        if (0)
-                       DBG_871X(FUNC_ADPT_FMT" ether_type:0x%04x%s\n", FUNC_ADPT_ARG(xmitframe->padapter)
-                               , attrib->ether_type, attrib->dhcp_pkt?" DHCP":"");
+                               DBG_871X(FUNC_ADPT_FMT" ether_type:0x%04x%s\n", FUNC_ADPT_ARG(xmitframe->padapter)
+                                       , attrib->ether_type, attrib->dhcp_pkt?" DHCP":"");
                        allow = _TRUE;
                }
        }
                        allow = _TRUE;
                }
        }
@@ -4236,10 +4249,7 @@ void stop_sta_xmit(_adapter *padapter, struct sta_info *psta)
        rtw_list_delete(&(pstaxmitpriv->bk_q.tx_pending));
 
 #ifdef CONFIG_TDLS
        rtw_list_delete(&(pstaxmitpriv->bk_q.tx_pending));
 
 #ifdef CONFIG_TDLS
-       if( !(psta->tdls_sta_state & TDLS_LINKED_STATE) )
-       {
-               if( psta_bmc != NULL )
-               {
+       if (!(psta->tdls_sta_state & TDLS_LINKED_STATE) && (psta_bmc != NULL)) {
 #endif //CONFIG_TDLS
 
 
 #endif //CONFIG_TDLS
 
 
@@ -4251,7 +4261,6 @@ void stop_sta_xmit(_adapter *padapter, struct sta_info *psta)
 
 #ifdef CONFIG_TDLS     
                }
 
 #ifdef CONFIG_TDLS     
                }
-       }
 #endif //CONFIG_TDLS   
        _exit_critical_bh(&pxmitpriv->lock, &irqL0);
        
 #endif //CONFIG_TDLS   
        _exit_critical_bh(&pxmitpriv->lock, &irqL0);
        
@@ -4539,7 +4548,7 @@ exit:
        return;
 }
 
        return;
 }
 
-#endif
+#endif /* defined(CONFIG_AP_MODE) || defined(CONFIG_TDLS) */
 
 #ifdef CONFIG_XMIT_THREAD_MODE
 void enqueue_pending_xmitbuf(
 
 #ifdef CONFIG_XMIT_THREAD_MODE
 void enqueue_pending_xmitbuf(
index 6e9454ca5ccad201b7f70fab7da6392d267906ce..d8d4a11fa8e233f3fe4aa8bedb47bcee5f661802 100755 (executable)
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtc8188c2Ant.tmh"\r
+#endif\r
+\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
@@ -45,12 +50,10 @@ halbtc8188c2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8188C_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8188C_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -58,12 +61,10 @@ halbtc8188c2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -71,7 +72,7 @@ halbtc8188c2ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -81,12 +82,10 @@ halbtc8188c2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8188C_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8188C_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -95,17 +94,14 @@ halbtc8188c2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8188C_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8188C_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -113,12 +109,10 @@ halbtc8188c2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -139,7 +133,7 @@ halbtc8188c2ant_ActionAlgorithm(
        \r
        if(!pStackInfo->bBtLinkExist)\r
        {\r
        \r
        if(!pStackInfo->bBtLinkExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No profile exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No profile exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
@@ -154,7 +148,7 @@ halbtc8188c2ant_ActionAlgorithm(
 \r
        if(pStackInfo->bScoExist)\r
        {\r
 \r
        if(pStackInfo->bScoExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO algorithm\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO algorithm\n"));\r
                algorithm = BT_8188C_2ANT_COEX_ALGO_SCO;\r
        }\r
        else\r
                algorithm = BT_8188C_2ANT_COEX_ALGO_SCO;\r
        }\r
        else\r
@@ -163,17 +157,17 @@ halbtc8188c2ant_ActionAlgorithm(
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID only\n"));\r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP only\n"));\r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN only\n"));\r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_PAN;\r
                        }\r
                }\r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_PAN;\r
                        }\r
                }\r
@@ -182,19 +176,19 @@ halbtc8188c2ant_ActionAlgorithm(
                        if( pStackInfo->bHidExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {\r
                        if( pStackInfo->bHidExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP\n"));\r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pStackInfo->bHidExist &&\r
                                pStackInfo->bPanExist )\r
                        {                               \r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pStackInfo->bHidExist &&\r
                                pStackInfo->bPanExist )\r
                        {                               \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN\n"));\r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_HID_PAN;\r
                        }\r
                        else if( pStackInfo->bPanExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {                               \r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_HID_PAN;\r
                        }\r
                        else if( pStackInfo->bPanExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {                               \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN + A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN + A2DP\n"));\r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_PAN_A2DP;\r
                        }\r
                }               \r
                                algorithm = BT_8188C_2ANT_COEX_ALGO_PAN_A2DP;\r
                        }\r
                }               \r
@@ -225,7 +219,7 @@ halbtc8188c2ant_SetFwBalance(
                H2C_Parameter[0] = 0;\r
        }\r
        \r
                H2C_Parameter[0] = 0;\r
        }\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Balance=[%s:%dms:%dms], write 0xc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Balance=[%s:%dms:%dms], write 0xc=0x%x\n", \r
                bBalanceOn?"ON":"OFF", ms0, ms1,\r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
                bBalanceOn?"ON":"OFF", ms0, ms1,\r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
@@ -241,15 +235,12 @@ halbtc8188c2ant_Balance(
        IN      u1Byte                  ms1\r
        )\r
 {\r
        IN      u1Byte                  ms1\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Balance %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Balance %s\n", \r
                (bForceExec? "force to":""), (bBalanceOn? "ON":"OFF")));\r
        pCoexDm->bCurBalanceOn = bBalanceOn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bBalanceOn? "ON":"OFF")));\r
        pCoexDm->bCurBalanceOn = bBalanceOn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBalanceOn = %d, bCurBalanceOn = %d!!\n", \r
-                       pCoexDm->bPreBalanceOn, pCoexDm->bCurBalanceOn));\r
-\r
                if(pCoexDm->bPreBalanceOn == pCoexDm->bCurBalanceOn)\r
                        return;\r
        }\r
                if(pCoexDm->bPreBalanceOn == pCoexDm->bCurBalanceOn)\r
                        return;\r
        }\r
@@ -271,7 +262,7 @@ halbtc8188c2ant_SetFwDiminishWifi(
 \r
        if((pBtCoexist->stackInfo.minBtRssi <= -5) && (fwDacSwingLvl == 0x20))\r
        {\r
 \r
        if((pBtCoexist->stackInfo.minBtRssi <= -5) && (fwDacSwingLvl == 0x20))\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], DiminishWiFi 0x20 original, but set 0x18 for Low RSSI!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], DiminishWiFi 0x20 original, but set 0x18 for Low RSSI!\n"));\r
                fwDacSwingLvl = 0x18;\r
        }\r
 \r
                fwDacSwingLvl = 0x18;\r
        }\r
 \r
@@ -291,7 +282,7 @@ halbtc8188c2ant_SetFwDiminishWifi(
                H2C_Parameter[2] |= 0x08;       //BIT3\r
        }\r
 \r
                H2C_Parameter[2] |= 0x08;       //BIT3\r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], bDacOn=%s, bInterruptOn=%s, bNavOn=%s, write 0xe=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], bDacOn=%s, bInterruptOn=%s, bNavOn=%s, write 0xe=0x%x\n", \r
                (bDacOn?"ON":"OFF"), (bInterruptOn?"ON":"OFF"), (bNavOn?"ON":"OFF"),\r
                (H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2])));\r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0xe, 3, H2C_Parameter);\r
                (bDacOn?"ON":"OFF"), (bInterruptOn?"ON":"OFF"), (bNavOn?"ON":"OFF"),\r
                (H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2])));\r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0xe, 3, H2C_Parameter);\r
@@ -307,7 +298,7 @@ halbtc8188c2ant_DiminishWifi(
        IN      BOOLEAN                 bNavOn\r
        )\r
 {\r
        IN      BOOLEAN                 bNavOn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set Diminish Wifi, bDacOn=%s, bInterruptOn=%s, fwDacSwingLvl=%d, bNavOn=%s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set Diminish Wifi, bDacOn=%s, bInterruptOn=%s, fwDacSwingLvl=%d, bNavOn=%s\n", \r
                (bForceExec? "force to":""), (bDacOn? "ON":"OFF"), (bInterruptOn? "ON":"OFF"), fwDacSwingLvl, (bNavOn? "ON":"OFF")));\r
 \r
        pCoexDm->bCurDacOn = bDacOn;\r
                (bForceExec? "force to":""), (bDacOn? "ON":"OFF"), (bInterruptOn? "ON":"OFF"), fwDacSwingLvl, (bNavOn? "ON":"OFF")));\r
 \r
        pCoexDm->bCurDacOn = bDacOn;\r
@@ -317,16 +308,6 @@ halbtc8188c2ant_DiminishWifi(
 \r
        if(!bForceExec)\r
        {\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreDacOn=%d, bCurDacOn=%d!!\n", \r
-                       pCoexDm->bPreDacOn, pCoexDm->bCurDacOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreInterruptOn=%d, bCurInterruptOn=%d!!\n", \r
-                       pCoexDm->bPreInterruptOn, pCoexDm->bCurInterruptOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d!!\n", \r
-                       pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreNavOn=%d, bCurNavOn=%d!!\n", \r
-                       pCoexDm->bPreNavOn, pCoexDm->bCurNavOn));\r
-\r
-\r
                if( (pCoexDm->bPreDacOn==pCoexDm->bCurDacOn) &&\r
                        (pCoexDm->bPreInterruptOn==pCoexDm->bCurInterruptOn) &&\r
                        (pCoexDm->preFwDacSwingLvl==pCoexDm->curFwDacSwingLvl) &&\r
                if( (pCoexDm->bPreDacOn==pCoexDm->bCurDacOn) &&\r
                        (pCoexDm->bPreInterruptOn==pCoexDm->bCurInterruptOn) &&\r
                        (pCoexDm->preFwDacSwingLvl==pCoexDm->curFwDacSwingLvl) &&\r
@@ -350,7 +331,7 @@ halbtc8188c2ant_SetSwRfRxLpfCorner(
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xf0, 0xf);                \r
        }\r
        else\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xf0, 0xf);                \r
        }\r
        else\r
@@ -359,7 +340,7 @@ halbtc8188c2ant_SetSwRfRxLpfCorner(
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xf0, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xf0, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
@@ -372,15 +353,12 @@ halbtc8188c2ant_RfShrink(
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
-                       pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
-\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
@@ -400,12 +378,12 @@ halbtc8188c2ant_SetSwPenaltyTxRateAdaptive(
        tmpU1 = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x4fd);\r
        if(bLowPenaltyRa)\r
        {\r
        tmpU1 = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x4fd);\r
        if(bLowPenaltyRa)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
                tmpU1 |= BIT2;\r
        }\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x4fd, tmpU1);\r
                tmpU1 |= BIT2;\r
        }\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x4fd, tmpU1);\r
@@ -418,15 +396,12 @@ halbtc8188c2ant_LowPenaltyRa(
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
-                       pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
-\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
@@ -470,17 +445,13 @@ halbtc8188c2ant_DacSwing(
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
-                       pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
-                       pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
-\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
@@ -500,12 +471,12 @@ halbtc8188c2ant_SetAdcBackOff(
 {\r
        if(bAdcBackOff)\r
        {\r
 {\r
        if(bAdcBackOff)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level On!\n"));\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a07611);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a07611);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));                \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level Off!\n"));           \r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a05611);\r
        }\r
 }\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a05611);\r
        }\r
 }\r
@@ -517,15 +488,12 @@ halbtc8188c2ant_AdcBackOff(
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
-                       pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
-\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
@@ -544,7 +512,7 @@ halbtc8188c2ant_SetAgcTable(
 \r
        if(bAgcTableEn)\r
        {\r
 \r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table On!\n"));\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4e1c0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4d1d0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4c1e0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4e1c0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4d1d0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4c1e0001);\r
@@ -559,7 +527,7 @@ halbtc8188c2ant_SetAgcTable(
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table Off!\n"));\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x641c0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x631d0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x621e0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x641c0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x631d0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x621e0001);\r
@@ -585,15 +553,12 @@ halbtc8188c2ant_AgcTable(
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s %s Agc Table\n",  \r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
-                       pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
-\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
@@ -610,13 +575,13 @@ halbtc8188c2ant_SetCoexTable(
        IN      u4Byte          val0x6cc\r
        )\r
 {\r
        IN      u4Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -629,19 +594,14 @@ halbtc8188c2ant_CoexTable(
        IN      u4Byte                  val0x6cc\r
        )\r
 {\r
        IN      u4Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
                (bForceExec? "force to":""), val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
                (bForceExec? "force to":""), val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
-       \r
+       {       \r
                if( (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                        (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )\r
                if( (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                        (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )\r
@@ -691,7 +651,7 @@ halbtc8188c2ant_MonitorBtState(
        BOOLEAN                 bRejApAggPkt=FALSE;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
        BOOLEAN                 bRejApAggPkt=FALSE;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], FirmwareVersion = 0x%x(%d)\n", fwVer, fwVer));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], FirmwareVersion = 0x%x(%d)\n", fwVer, fwVer));\r
        if(fwVer < 62)\r
        {\r
                regBTActive = 0x488;\r
        if(fwVer < 62)\r
        {\r
                regBTActive = 0x488;\r
@@ -710,15 +670,15 @@ halbtc8188c2ant_MonitorBtState(
        btBusyThresh = 60;\r
        \r
        BT_Active = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTActive);\r
        btBusyThresh = 60;\r
        \r
        BT_Active = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTActive);\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT_Active(0x%x)=0x%x\n", regBTActive, BT_Active));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT_Active(0x%x)=0x%x\n", regBTActive, BT_Active));\r
        BT_Active = BT_Active & 0x00ffffff;\r
 \r
        BT_State = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTState);\r
        BT_Active = BT_Active & 0x00ffffff;\r
 \r
        BT_State = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTState);\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT_State(0x%x)=0x%x\n", regBTState, BT_State));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT_State(0x%x)=0x%x\n", regBTState, BT_State));\r
        BT_State = BT_State & 0x00ffffff;\r
 \r
        BT_Polling = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTPolling);\r
        BT_State = BT_State & 0x00ffffff;\r
 \r
        BT_Polling = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTPolling);\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT_Polling(0x%x)=0x%x\n", regBTPolling, BT_Polling));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT_Polling(0x%x)=0x%x\n", regBTPolling, BT_Polling));\r
 \r
        if(BT_Active==0xffffffff && BT_State==0xffffffff && BT_Polling==0xffffffff )\r
                return;\r
 \r
        if(BT_Active==0xffffffff && BT_State==0xffffffff && BT_Polling==0xffffffff )\r
                return;\r
@@ -733,8 +693,8 @@ halbtc8188c2ant_MonitorBtState(
        Ratio_Act = BT_Active*1000/BT_Polling;\r
        Ratio_STA = BT_State*1000/BT_Polling;\r
                \r
        Ratio_Act = BT_Active*1000/BT_Polling;\r
        Ratio_STA = BT_State*1000/BT_Polling;\r
                \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Ratio_Act=%d\n", Ratio_Act));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Ratio_STA=%d\n", Ratio_STA));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ratio_Act=%d\n", Ratio_Act));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ratio_STA=%d\n", Ratio_STA));\r
 \r
        if(BTC_CHIP_CSR_BC8 == pBtCoexist->boardInfo.btChipType)\r
        {\r
 \r
        if(BTC_CHIP_CSR_BC8 == pBtCoexist->boardInfo.btChipType)\r
        {\r
@@ -1738,7 +1698,7 @@ EXhalbtc8188c2ant_InitHwConfig(
 {\r
        u1Byte  u1Tmp=0;\r
 \r
 {\r
        u1Byte  u1Tmp=0;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
@@ -1759,7 +1719,7 @@ EXhalbtc8188c2ant_InitCoexDm(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
        \r
        halbtc8188c2ant_InitCoexDm(pBtCoexist);\r
 }\r
        \r
        halbtc8188c2ant_InitCoexDm(pBtCoexist);\r
 }\r
@@ -1791,7 +1751,7 @@ EXhalbtc8188c2ant_DisplayCoexInfo(
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \\r
                ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);\r
        CL_PRINTF(cliBuf);\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \\r
                ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);\r
        CL_PRINTF(cliBuf);\r
-\r
+       \r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
@@ -1857,12 +1817,12 @@ EXhalbtc8188c2ant_IpsNotify(
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                halbtc8188c2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
                halbtc8188c2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
                //halbtc8188c2ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
                //halbtc8188c2ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
@@ -1875,12 +1835,12 @@ EXhalbtc8188c2ant_LpsNotify(
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
                halbtc8188c2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
                halbtc8188c2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                halbtc8188c2ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
                halbtc8188c2ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
@@ -1893,11 +1853,11 @@ EXhalbtc8188c2ant_ScanNotify(
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -1909,11 +1869,11 @@ EXhalbtc8188c2ant_ConnectNotify(
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -1925,11 +1885,11 @@ EXhalbtc8188c2ant_MediaStatusNotify(
 {      \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 {      \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
        }\r
        \r
 }\r
        }\r
        \r
 }\r
@@ -1942,7 +1902,7 @@ EXhalbtc8188c2ant_SpecialPacketNotify(
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], DHCP Packet notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -1960,7 +1920,7 @@ EXhalbtc8188c2ant_HaltNotify(
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
        EXhalbtc8188c2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
 }\r
 \r
        EXhalbtc8188c2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
 }\r
@@ -1972,7 +1932,7 @@ EXhalbtc8188c2ant_Periodical(
 {\r
        u1Byte  algorithm;\r
 \r
 {\r
        u1Byte  algorithm;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], 2Ant Periodical!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 2Ant Periodical!!\n"));\r
 \r
        // NOTE:\r
        // sw mechanism must be done after fw mechanism\r
 \r
        // NOTE:\r
        // sw mechanism must be done after fw mechanism\r
@@ -1989,31 +1949,31 @@ EXhalbtc8188c2ant_Periodical(
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8188C_2ANT_COEX_ALGO_SCO:\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8188C_2ANT_COEX_ALGO_SCO:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = SCO\n"));\r
                                halbtc8188c2ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_HID:\r
                                halbtc8188c2ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID\n"));\r
                                halbtc8188c2ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_A2DP:\r
                                halbtc8188c2ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP\n"));\r
                                halbtc8188c2ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_PAN:\r
                                halbtc8188c2ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_PAN:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN\n"));\r
                                halbtc8188c2ant_ActionPan(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_HID_A2DP:\r
                                halbtc8188c2ant_ActionPan(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_HID_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP\n"));\r
                                halbtc8188c2ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_HID_PAN:\r
                                halbtc8188c2ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_HID_PAN:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN+HID\n"));\r
                                halbtc8188c2ant_ActionHidPan(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_PAN_A2DP:\r
                                halbtc8188c2ant_ActionHidPan(pBtCoexist);\r
                                break;\r
                        case BT_8188C_2ANT_COEX_ALGO_PAN_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP\n"));\r
                                halbtc8188c2ant_ActionPanA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
                                halbtc8188c2ant_ActionPanA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
index cb60379c9a866a95ef5471af5207c180b55f14f7..239c073c1b8b618e069ec139a5e82aca5af72640 100755 (executable)
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtc8192d2Ant.tmh"\r
+#endif\r
+\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
@@ -45,12 +50,10 @@ halbtc8192d2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192D_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192D_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -58,12 +61,10 @@ halbtc8192d2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -71,7 +72,7 @@ halbtc8192d2ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -81,12 +82,10 @@ halbtc8192d2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192D_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192D_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -95,17 +94,14 @@ halbtc8192d2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8192D_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8192D_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -113,12 +109,10 @@ halbtc8192d2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -142,7 +136,7 @@ halbtc8192d2ant_ActionAlgorithm(
        \r
        if(!pStackInfo->bBtLinkExist)\r
        {\r
        \r
        if(!pStackInfo->bBtLinkExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No profile exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No profile exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
@@ -157,7 +151,7 @@ halbtc8192d2ant_ActionAlgorithm(
 \r
        if(pStackInfo->bScoExist)\r
        {\r
 \r
        if(pStackInfo->bScoExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO algorithm\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO algorithm\n"));\r
                algorithm = BT_8192D_2ANT_COEX_ALGO_SCO;\r
        }\r
        else\r
                algorithm = BT_8192D_2ANT_COEX_ALGO_SCO;\r
        }\r
        else\r
@@ -166,17 +160,17 @@ halbtc8192d2ant_ActionAlgorithm(
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID only\n"));\r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP only\n"));\r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN only\n"));\r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_PAN;\r
                        }\r
                }\r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_PAN;\r
                        }\r
                }\r
@@ -185,19 +179,19 @@ halbtc8192d2ant_ActionAlgorithm(
                        if( pStackInfo->bHidExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {\r
                        if( pStackInfo->bHidExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP\n"));\r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pStackInfo->bHidExist &&\r
                                pStackInfo->bPanExist )\r
                        {                               \r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pStackInfo->bHidExist &&\r
                                pStackInfo->bPanExist )\r
                        {                               \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN\n"));\r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_HID_PAN;\r
                        }\r
                        else if( pStackInfo->bPanExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {                               \r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_HID_PAN;\r
                        }\r
                        else if( pStackInfo->bPanExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {                               \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN + A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN + A2DP\n"));\r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_PAN_A2DP;\r
                        }\r
                }               \r
                                algorithm = BT_8192D_2ANT_COEX_ALGO_PAN_A2DP;\r
                        }\r
                }               \r
@@ -228,7 +222,7 @@ halbtc8192d2ant_SetFwBalance(
                H2C_Parameter[0] = 0;\r
        }\r
        \r
                H2C_Parameter[0] = 0;\r
        }\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Balance=[%s:%dms:%dms], write 0xc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Balance=[%s:%dms:%dms], write 0xc=0x%x\n", \r
                bBalanceOn?"ON":"OFF", ms0, ms1,\r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
                bBalanceOn?"ON":"OFF", ms0, ms1,\r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
@@ -244,15 +238,12 @@ halbtc8192d2ant_Balance(
        IN      u1Byte                  ms1\r
        )\r
 {\r
        IN      u1Byte                  ms1\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Balance %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Balance %s\n", \r
                (bForceExec? "force to":""), (bBalanceOn? "ON":"OFF")));\r
        pCoexDm->bCurBalanceOn = bBalanceOn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bBalanceOn? "ON":"OFF")));\r
        pCoexDm->bCurBalanceOn = bBalanceOn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBalanceOn = %d, bCurBalanceOn = %d!!\n", \r
-                       pCoexDm->bPreBalanceOn, pCoexDm->bCurBalanceOn));\r
-\r
                if(pCoexDm->bPreBalanceOn == pCoexDm->bCurBalanceOn)\r
                        return;\r
        }\r
                if(pCoexDm->bPreBalanceOn == pCoexDm->bCurBalanceOn)\r
                        return;\r
        }\r
@@ -274,7 +265,7 @@ halbtc8192d2ant_SetFwDiminishWifi(
 \r
        if((pBtCoexist->stackInfo.minBtRssi <= -5) && (fwDacSwingLvl == 0x20))\r
        {\r
 \r
        if((pBtCoexist->stackInfo.minBtRssi <= -5) && (fwDacSwingLvl == 0x20))\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], DiminishWiFi 0x20 original, but set 0x18 for Low RSSI!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], DiminishWiFi 0x20 original, but set 0x18 for Low RSSI!\n"));\r
                fwDacSwingLvl = 0x18;\r
        }\r
 \r
                fwDacSwingLvl = 0x18;\r
        }\r
 \r
@@ -294,7 +285,7 @@ halbtc8192d2ant_SetFwDiminishWifi(
                H2C_Parameter[2] |= 0x08;       //BIT3\r
        }\r
                \r
                H2C_Parameter[2] |= 0x08;       //BIT3\r
        }\r
                \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], bDacOn=%s, bInterruptOn=%s, bNavOn=%s, write 0x12=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], bDacOn=%s, bInterruptOn=%s, bNavOn=%s, write 0x12=0x%x\n", \r
                (bDacOn?"ON":"OFF"), (bInterruptOn?"ON":"OFF"), (bNavOn?"ON":"OFF"),\r
                (H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2])));          \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x12, 3, H2C_Parameter);\r
                (bDacOn?"ON":"OFF"), (bInterruptOn?"ON":"OFF"), (bNavOn?"ON":"OFF"),\r
                (H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2])));          \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x12, 3, H2C_Parameter);\r
@@ -311,7 +302,7 @@ halbtc8192d2ant_DiminishWifi(
        IN      BOOLEAN                 bNavOn\r
        )\r
 {\r
        IN      BOOLEAN                 bNavOn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set Diminish Wifi, bDacOn=%s, bInterruptOn=%s, fwDacSwingLvl=%d, bNavOn=%s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set Diminish Wifi, bDacOn=%s, bInterruptOn=%s, fwDacSwingLvl=%d, bNavOn=%s\n", \r
                (bForceExec? "force to":""), (bDacOn? "ON":"OFF"), (bInterruptOn? "ON":"OFF"), fwDacSwingLvl, (bNavOn? "ON":"OFF")));\r
 \r
        pCoexDm->bCurDacOn = bDacOn;\r
                (bForceExec? "force to":""), (bDacOn? "ON":"OFF"), (bInterruptOn? "ON":"OFF"), fwDacSwingLvl, (bNavOn? "ON":"OFF")));\r
 \r
        pCoexDm->bCurDacOn = bDacOn;\r
@@ -321,16 +312,6 @@ halbtc8192d2ant_DiminishWifi(
 \r
        if(!bForceExec)\r
        {\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreDacOn=%d, bCurDacOn=%d!!\n", \r
-                       pCoexDm->bPreDacOn, pCoexDm->bCurDacOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreInterruptOn=%d, bCurInterruptOn=%d!!\n", \r
-                       pCoexDm->bPreInterruptOn, pCoexDm->bCurInterruptOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d!!\n", \r
-                       pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreNavOn=%d, bCurNavOn=%d!!\n", \r
-                       pCoexDm->bPreNavOn, pCoexDm->bCurNavOn));\r
-\r
-\r
                if( (pCoexDm->bPreDacOn==pCoexDm->bCurDacOn) &&\r
                        (pCoexDm->bPreInterruptOn==pCoexDm->bCurInterruptOn) &&\r
                        (pCoexDm->preFwDacSwingLvl==pCoexDm->curFwDacSwingLvl) &&\r
                if( (pCoexDm->bPreDacOn==pCoexDm->bCurDacOn) &&\r
                        (pCoexDm->bPreInterruptOn==pCoexDm->bCurInterruptOn) &&\r
                        (pCoexDm->preFwDacSwingLvl==pCoexDm->curFwDacSwingLvl) &&\r
@@ -354,7 +335,7 @@ halbtc8192d2ant_SetSwRfRxLpfCorner(
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xf2ff7);\r
        }\r
        else\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xf2ff7);\r
        }\r
        else\r
@@ -363,7 +344,7 @@ halbtc8192d2ant_SetSwRfRxLpfCorner(
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
@@ -377,15 +358,12 @@ halbtc8192d2ant_RfShrink(
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
-                       pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
-\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
@@ -405,12 +383,12 @@ halbtc8192d2ant_SetSwPenaltyTxRateAdaptive(
        tmpU1 = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x4fd);\r
        if(bLowPenaltyRa)\r
        {\r
        tmpU1 = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x4fd);\r
        if(bLowPenaltyRa)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
                tmpU1 |= BIT2;\r
        }\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x4fd, tmpU1);\r
                tmpU1 |= BIT2;\r
        }\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x4fd, tmpU1);\r
@@ -423,15 +401,12 @@ halbtc8192d2ant_LowPenaltyRa(
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
-                       pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
-\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
@@ -475,17 +450,13 @@ halbtc8192d2ant_DacSwing(
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
-                       pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
-                       pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
-\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
@@ -505,12 +476,12 @@ halbtc8192d2ant_SetAdcBackOff(
 {\r
        if(bAdcBackOff)\r
        {\r
 {\r
        if(bAdcBackOff)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level On!\n"));\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a07611);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a07611);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));                \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level Off!\n"));           \r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a05611);\r
        }\r
 }\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a05611);\r
        }\r
 }\r
@@ -522,15 +493,12 @@ halbtc8192d2ant_AdcBackOff(
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
-                       pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
-\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
@@ -549,7 +517,7 @@ halbtc8192d2ant_SetAgcTable(
 \r
        if(bAgcTableEn)\r
        {\r
 \r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table On!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1a, 0xfffff, 0xa99);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x12, 0xfffff, 0xd4000);\r
                \r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1a, 0xfffff, 0xa99);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x12, 0xfffff, 0xd4000);\r
                \r
@@ -602,7 +570,7 @@ halbtc8192d2ant_SetAgcTable(
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table Off!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1a, 0xfffff, 0x30a99);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x12, 0xfffff, 0xdc000);\r
 \r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1a, 0xfffff, 0x30a99);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x12, 0xfffff, 0xdc000);\r
 \r
@@ -665,15 +633,12 @@ halbtc8192d2ant_AgcTable(
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s %s Agc Table\n",  \r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
-                       pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
-\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
@@ -690,13 +655,13 @@ halbtc8192d2ant_SetCoexTable(
        IN      u4Byte          val0x6cc\r
        )\r
 {\r
        IN      u4Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -709,19 +674,14 @@ halbtc8192d2ant_CoexTable(
        IN      u4Byte                  val0x6cc\r
        )\r
 {\r
        IN      u4Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
                (bForceExec? "force to":""), val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
                (bForceExec? "force to":""), val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
-       \r
+       {       \r
                if( (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                        (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )\r
                if( (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                        (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )\r
@@ -772,23 +732,23 @@ halbtc8192d2ant_MonitorBtEnableDisable(
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt all counters=0, %d times!!\n", \r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is disabled !!\n"));\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n", \r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
 \r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
 \r
@@ -815,7 +775,7 @@ halbtc8192d2ant_MonitorBtState(
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
 \r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], FirmwareVersion = 0x%x(%d)\n", fwVer, fwVer));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], FirmwareVersion = 0x%x(%d)\n", fwVer, fwVer));\r
        \r
        regBTActive = 0x444;\r
        regBTState = 0x448;\r
        \r
        regBTActive = 0x444;\r
        regBTState = 0x448;\r
@@ -824,15 +784,15 @@ halbtc8192d2ant_MonitorBtState(
        btBusyThresh = 40;\r
        \r
        BT_Active = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTActive);\r
        btBusyThresh = 40;\r
        \r
        BT_Active = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTActive);\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT_Active(0x%x)=0x%x\n", regBTActive, BT_Active));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT_Active(0x%x)=0x%x\n", regBTActive, BT_Active));\r
        BT_Active = BT_Active & 0x00ffffff;\r
 \r
        BT_State = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTState);\r
        BT_Active = BT_Active & 0x00ffffff;\r
 \r
        BT_State = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTState);\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT_State(0x%x)=0x%x\n", regBTState, BT_State));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT_State(0x%x)=0x%x\n", regBTState, BT_State));\r
        BT_State = BT_State & 0x00ffffff;\r
 \r
        BT_Polling = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTPolling);\r
        BT_State = BT_State & 0x00ffffff;\r
 \r
        BT_Polling = pBtCoexist->fBtcRead4Byte(pBtCoexist, regBTPolling);\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT_Polling(0x%x)=0x%x\n", regBTPolling, BT_Polling));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT_Polling(0x%x)=0x%x\n", regBTPolling, BT_Polling));\r
 \r
        if(BT_Active==0xffffffff && BT_State==0xffffffff && BT_Polling==0xffffffff )\r
                return;\r
 \r
        if(BT_Active==0xffffffff && BT_State==0xffffffff && BT_Polling==0xffffffff )\r
                return;\r
@@ -849,8 +809,8 @@ halbtc8192d2ant_MonitorBtState(
        Ratio_Act = BT_Active*1000/BT_Polling;\r
        Ratio_STA = BT_State*1000/BT_Polling;\r
                \r
        Ratio_Act = BT_Active*1000/BT_Polling;\r
        Ratio_STA = BT_State*1000/BT_Polling;\r
                \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Ratio_Act=%d\n", Ratio_Act));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Ratio_STA=%d\n", Ratio_STA));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ratio_Act=%d\n", Ratio_Act));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ratio_STA=%d\n", Ratio_STA));\r
 \r
        if(BTC_CHIP_CSR_BC8 == pBtCoexist->boardInfo.btChipType)\r
        {\r
 \r
        if(BTC_CHIP_CSR_BC8 == pBtCoexist->boardInfo.btChipType)\r
        {\r
@@ -1695,13 +1655,13 @@ halbtc8192d2ant_IsBtCoexistEnter(
        \r
        if(BTC_SMSP != macPhyMode)\r
        {\r
        \r
        if(BTC_SMSP != macPhyMode)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Only support single mac single phy!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Only support single mac single phy!!\n"));\r
                bRet = FALSE;\r
        }\r
 \r
        if(bWifiUnder5G)\r
        {\r
                bRet = FALSE;\r
        }\r
 \r
        if(bWifiUnder5G)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is under 5G or A band\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is under 5G or A band\n"));\r
                halbtc8192d2ant_CoexAllOff(pBtCoexist);\r
                bRet = FALSE;\r
        }\r
                halbtc8192d2ant_CoexAllOff(pBtCoexist);\r
                bRet = FALSE;\r
        }\r
@@ -1727,7 +1687,7 @@ EXhalbtc8192d2ant_InitHwConfig(
 {\r
        u1Byte  u1Tmp=0;\r
 \r
 {\r
        u1Byte  u1Tmp=0;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
@@ -1765,7 +1725,7 @@ EXhalbtc8192d2ant_InitCoexDm(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
        \r
        halbtc8192d2ant_InitCoexDm(pBtCoexist);\r
 }\r
        \r
        halbtc8192d2ant_InitCoexDm(pBtCoexist);\r
 }\r
@@ -1863,12 +1823,12 @@ EXhalbtc8192d2ant_IpsNotify(
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                halbtc8192d2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
                halbtc8192d2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
                //halbtc8192d2ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
                //halbtc8192d2ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
@@ -1881,12 +1841,12 @@ EXhalbtc8192d2ant_LpsNotify(
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
                halbtc8192d2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
                halbtc8192d2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                halbtc8192d2ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
                halbtc8192d2ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
@@ -1899,11 +1859,11 @@ EXhalbtc8192d2ant_ScanNotify(
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -1915,11 +1875,11 @@ EXhalbtc8192d2ant_ConnectNotify(
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -1931,11 +1891,11 @@ EXhalbtc8192d2ant_MediaStatusNotify(
 {      \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 {      \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
        }       \r
 }\r
 \r
        }       \r
 }\r
 \r
@@ -1947,7 +1907,7 @@ EXhalbtc8192d2ant_SpecialPacketNotify(
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], DHCP Packet notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -1965,7 +1925,7 @@ EXhalbtc8192d2ant_HaltNotify(
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
        EXhalbtc8192d2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
 }\r
 \r
        EXhalbtc8192d2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
 }\r
@@ -1977,7 +1937,7 @@ EXhalbtc8192d2ant_Periodical(
 {\r
        u1Byte  algorithm;\r
 \r
 {\r
        u1Byte  algorithm;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], 2Ant Periodical!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 2Ant Periodical!!\n"));\r
 \r
        // NOTE:\r
        // sw mechanism must be done after fw mechanism\r
 \r
        // NOTE:\r
        // sw mechanism must be done after fw mechanism\r
@@ -1995,31 +1955,31 @@ EXhalbtc8192d2ant_Periodical(
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8192D_2ANT_COEX_ALGO_SCO:\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8192D_2ANT_COEX_ALGO_SCO:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = SCO\n"));\r
                                halbtc8192d2ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_HID:\r
                                halbtc8192d2ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID\n"));\r
                                halbtc8192d2ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_A2DP:\r
                                halbtc8192d2ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP\n"));\r
                                halbtc8192d2ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_PAN:\r
                                halbtc8192d2ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_PAN:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN\n"));\r
                                halbtc8192d2ant_ActionPan(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_HID_A2DP:\r
                                halbtc8192d2ant_ActionPan(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_HID_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP\n"));\r
                                halbtc8192d2ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_HID_PAN:\r
                                halbtc8192d2ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_HID_PAN:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN+HID\n"));\r
                                halbtc8192d2ant_ActionHidPan(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_PAN_A2DP:\r
                                halbtc8192d2ant_ActionHidPan(pBtCoexist);\r
                                break;\r
                        case BT_8192D_2ANT_COEX_ALGO_PAN_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP\n"));\r
                                halbtc8192d2ant_ActionPanA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
                                halbtc8192d2ant_ActionPanA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
index 12dfe4b210eb3974bfb7f4b9d2ac7ead61b9163b..86e006dba32b33f7d264f1627e2a04056a19f1dc 100755 (executable)
@@ -1,7 +1,7 @@
 //============================================================\r
 // Description:\r
 //\r
 //============================================================\r
 // Description:\r
 //\r
-// This file is for 8192e1ant Co-exist mechanism\r
+// This file is for RTL8192E Co-exist mechanism\r
 //\r
 // History\r
 // 2012/11/15 Cosa first check in.\r
 //\r
 // History\r
 // 2012/11/15 Cosa first check in.\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtc8192e1Ant.tmh"\r
+#endif\r
+\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
@@ -27,8 +32,8 @@ const char *const GLBtInfoSrc8192e1Ant[]={
        "BT Info[bt auto report]",\r
 };\r
 \r
        "BT Info[bt auto report]",\r
 };\r
 \r
-u4Byte GLCoexVerDate8192e1Ant=20130729;\r
-u4Byte GLCoexVer8192e1Ant=0x10;\r
+u4Byte GLCoexVerDate8192e1Ant=20140527;\r
+u4Byte GLCoexVer8192e1Ant=0x4f;\r
 \r
 //============================================================\r
 // local function proto type if needed\r
 \r
 //============================================================\r
 // local function proto type if needed\r
@@ -56,12 +61,10 @@ halbtc8192e1ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -69,12 +72,10 @@ halbtc8192e1ant_BtRssiState(
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -82,7 +83,7 @@ halbtc8192e1ant_BtRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Rssi thresh error!!\n"));\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
@@ -92,12 +93,10 @@ halbtc8192e1ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -106,17 +105,14 @@ halbtc8192e1ant_BtRssiState(
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -124,12 +120,10 @@ halbtc8192e1ant_BtRssiState(
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -161,12 +155,10 @@ halbtc8192e1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -174,12 +166,10 @@ halbtc8192e1ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -187,7 +177,7 @@ halbtc8192e1ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -197,12 +187,10 @@ halbtc8192e1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -211,17 +199,14 @@ halbtc8192e1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -229,12 +214,10 @@ halbtc8192e1ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -248,18 +231,10 @@ VOID
 halbtc8192e1ant_UpdateRaMask(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bForceExec,\r
 halbtc8192e1ant_UpdateRaMask(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bForceExec,\r
-       IN      u1Byte                          type,\r
-       IN      u4Byte                          rateMask\r
+       IN      u4Byte                          disRateMask\r
        )\r
 {\r
        )\r
 {\r
-       if(BTC_RATE_DISABLE == type)\r
-       {\r
-               pCoexDm->curRaMask |= rateMask;         // disable rate\r
-       }\r
-       else if(BTC_RATE_ENABLE == type)\r
-       {\r
-               pCoexDm->curRaMask &= ~rateMask;        // enable rate\r
-       }\r
+       pCoexDm->curRaMask = disRateMask;\r
        \r
        if( bForceExec || (pCoexDm->preRaMask != pCoexDm->curRaMask))\r
        {\r
        \r
        if( bForceExec || (pCoexDm->preRaMask != pCoexDm->curRaMask))\r
        {\r
@@ -268,15 +243,197 @@ halbtc8192e1ant_UpdateRaMask(
        pCoexDm->preRaMask = pCoexDm->curRaMask;\r
 }\r
 \r
        pCoexDm->preRaMask = pCoexDm->curRaMask;\r
 }\r
 \r
+VOID\r
+halbtc8192e1ant_AutoRateFallbackRetry(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      u1Byte                          type\r
+       )\r
+{\r
+       BOOLEAN bWifiUnderBMode=FALSE;\r
+       \r
+       pCoexDm->curArfrType = type;\r
+\r
+       if( bForceExec || (pCoexDm->preArfrType != pCoexDm->curArfrType))\r
+       {\r
+               switch(pCoexDm->curArfrType)\r
+               {\r
+                       case 0: // normal mode\r
+                               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, pCoexDm->backupArfrCnt1);\r
+                               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, pCoexDm->backupArfrCnt2);\r
+                               break;\r
+                       case 1: \r
+                               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode);\r
+                               if(bWifiUnderBMode)\r
+                               {\r
+                                       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, 0x0);\r
+                                       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, 0x01010101);\r
+                               }\r
+                               else\r
+                               {\r
+                                       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, 0x0);\r
+                                       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, 0x04030201);\r
+                               }\r
+                               break;\r
+                       default:\r
+                               break;\r
+               }\r
+       }\r
+\r
+       pCoexDm->preArfrType = pCoexDm->curArfrType;\r
+}\r
+\r
+VOID\r
+halbtc8192e1ant_RetryLimit(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      u1Byte                          type\r
+       )\r
+{\r
+       pCoexDm->curRetryLimitType = type;\r
+\r
+       if( bForceExec || (pCoexDm->preRetryLimitType != pCoexDm->curRetryLimitType))\r
+       {\r
+               switch(pCoexDm->curRetryLimitType)\r
+               {\r
+                       case 0: // normal mode\r
+                               pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x42a, pCoexDm->backupRetryLimit);\r
+                               break;\r
+                       case 1: // retry limit=8\r
+                               pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x42a, 0x0808);\r
+                               break;\r
+                       default:\r
+                               break;\r
+               }\r
+       }\r
+\r
+       pCoexDm->preRetryLimitType = pCoexDm->curRetryLimitType;\r
+}\r
+\r
+VOID\r
+halbtc8192e1ant_AmpduMaxTime(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      u1Byte                          type\r
+       )\r
+{\r
+       pCoexDm->curAmpduTimeType = type;\r
+\r
+       if( bForceExec || (pCoexDm->preAmpduTimeType != pCoexDm->curAmpduTimeType))\r
+       {\r
+               switch(pCoexDm->curAmpduTimeType)\r
+               {\r
+                       case 0: // normal mode\r
+                               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x456, pCoexDm->backupAmpduMaxTime);\r
+                               break;\r
+                       case 1: // AMPDU timw = 0x38 * 32us\r
+                               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x456, 0x38);\r
+                               break;\r
+                       default:\r
+                               break;\r
+               }\r
+       }\r
+\r
+       pCoexDm->preAmpduTimeType = pCoexDm->curAmpduTimeType;\r
+}\r
+\r
+VOID\r
+halbtc8192e1ant_LimitedTx(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      u1Byte                          raMaskType,\r
+       IN      u1Byte                          arfrType,\r
+       IN      u1Byte                          retryLimitType,\r
+       IN      u1Byte                          ampduTimeType\r
+       )\r
+{\r
+       switch(raMaskType)\r
+       {\r
+               case 0: // normal mode\r
+                       halbtc8192e1ant_UpdateRaMask(pBtCoexist, bForceExec, 0x0);\r
+                       break;\r
+               case 1: // disable cck 1/2\r
+                       halbtc8192e1ant_UpdateRaMask(pBtCoexist, bForceExec, 0x00000003);\r
+                       break;\r
+               case 2: // disable cck 1/2/5.5, ofdm 6/9/12/18/24, mcs 0/1/2/3/4\r
+                       halbtc8192e1ant_UpdateRaMask(pBtCoexist, bForceExec, 0x0001f1f7);\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+\r
+       halbtc8192e1ant_AutoRateFallbackRetry(pBtCoexist, bForceExec, arfrType);\r
+       halbtc8192e1ant_RetryLimit(pBtCoexist, bForceExec, retryLimitType);\r
+       halbtc8192e1ant_AmpduMaxTime(pBtCoexist, bForceExec, ampduTimeType);\r
+}\r
+\r
+VOID\r
+halbtc8192e1ant_LimitedRx(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      BOOLEAN                         bRejApAggPkt,\r
+       IN      BOOLEAN                         bBtCtrlAggBufSize,\r
+       IN      u1Byte                          aggBufSize\r
+       )\r
+{\r
+       BOOLEAN bRejectRxAgg=bRejApAggPkt;\r
+       BOOLEAN bBtCtrlRxAggSize=bBtCtrlAggBufSize;\r
+       u1Byte  rxAggSize=aggBufSize;\r
+\r
+       //============================================\r
+       //      Rx Aggregation related setting\r
+       //============================================\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT, &bRejectRxAgg);\r
+       // decide BT control aggregation buf size or not\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE, &bBtCtrlRxAggSize);\r
+       // aggregation buf size, only work when BT control Rx aggregation size.\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_AGG_BUF_SIZE, &rxAggSize);\r
+       // real update aggregation setting\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);\r
+\r
+\r
+}\r
+\r
+VOID\r
+halbtc8192e1ant_QueryBtInfo(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       u1Byte                  H2C_Parameter[1] ={0};\r
+\r
+       pCoexSta->bC2hBtInfoReqSent = TRUE;\r
+\r
+       H2C_Parameter[0] |= BIT0;       // trigger\r
+\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
+               H2C_Parameter[0]));\r
+\r
+       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
+}\r
+\r
 VOID\r
 halbtc8192e1ant_MonitorBtCtr(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 halbtc8192e1ant_MonitorBtCtr(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u4Byte                  regHPTxRx, regLPTxRx, u4Tmp;\r
+       u4Byte                  regHPTxRx, regLPTxRx, u4Tmp, u4Tmp1;\r
        u4Byte                  regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;\r
        u4Byte                  regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;\r
-       u1Byte                  u1Tmp;\r
-       \r
+       u1Byte                  u1Tmp, u1Tmp1;\r
+       s4Byte                  wifiRssi;\r
+       static u1Byte           NumOfBtCounterChk = 0;\r
+\r
+       //to avoid 0x76e[3] = 1 (WLAN_Act control by PTA) during IPS\r
+       //if (! (pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e) & 0x8) ) \r
+\r
+       if (pCoexSta->bUnderIps)\r
+       {\r
+               pCoexSta->highPriorityTx = 65535;\r
+               pCoexSta->highPriorityRx = 65535;\r
+               pCoexSta->lowPriorityTx = 65535;\r
+               pCoexSta->lowPriorityRx = 65535;\r
+               return;\r
+       }\r
+               \r
        regHPTxRx = 0x770;\r
        regLPTxRx = 0x774;\r
 \r
        regHPTxRx = 0x770;\r
        regLPTxRx = 0x774;\r
 \r
@@ -293,30 +450,122 @@ halbtc8192e1ant_MonitorBtCtr(
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
-               regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
-               regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
+       if( (pCoexSta->lowPriorityTx >= 1050)  && (!pCoexSta->bC2hBtInquiryPage))\r
+               pCoexSta->popEventCnt++;\r
+\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Hi-Pri Rx/Tx: %d/%d, Lo-Pri Rx/Tx: %d/%d\n",\r
+               regHPRx, regHPTx, regLPRx, regLPTx));\r
 \r
        // reset counter\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);\r
 \r
        // reset counter\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);\r
+\r
+       if ((regHPTx == 0) && (regHPRx ==0) && (regLPTx == 0) && (regLPRx == 0))\r
+       {\r
+               NumOfBtCounterChk++;\r
+               if (NumOfBtCounterChk >= 3)\r
+               {\r
+                       halbtc8192e1ant_QueryBtInfo(pBtCoexist);\r
+                       NumOfBtCounterChk = 0;\r
+               }\r
+       }\r
 }\r
 \r
 }\r
 \r
+\r
 VOID\r
 VOID\r
-halbtc8192e1ant_QueryBtInfo(\r
+halbtc8192e1ant_MonitorWiFiCtr(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte                  H2C_Parameter[1] ={0};\r
+       u4Byte  u4Tmp;\r
+       u2Byte  u2Tmp[3];\r
+       s4Byte  wifiRssi=0;\r
+       BOOLEAN bWifiBusy = FALSE, bWifiUnderBMode = FALSE;\r
+       static u1Byte nCCKLockCounter = 0;\r
 \r
 \r
-       pCoexSta->bC2hBtInfoReqSent = TRUE;\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode);\r
 \r
 \r
-       H2C_Parameter[0] |= BIT0;       // trigger\r
+       if (pCoexSta->bUnderIps)\r
+       {\r
+               pCoexSta->nCRCOK_CCK = 0;\r
+               pCoexSta->nCRCOK_11g = 0;\r
+               pCoexSta->nCRCOK_11n = 0;\r
+               pCoexSta->nCRCOK_11nAgg = 0;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
-               H2C_Parameter[0]));\r
+               pCoexSta->nCRCErr_CCK = 0;\r
+               pCoexSta->nCRCErr_11g = 0;\r
+               pCoexSta->nCRCErr_11n = 0;\r
+               pCoexSta->nCRCErr_11nAgg = 0;   \r
+       }\r
+       else\r
+       {\r
+               pCoexSta->nCRCOK_CCK    = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf88);\r
+               pCoexSta->nCRCOK_11g    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf94);\r
+               pCoexSta->nCRCOK_11n    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf90);\r
+               pCoexSta->nCRCOK_11nAgg= pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xfb8);\r
+\r
+               pCoexSta->nCRCErr_CCK    = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf84);\r
+               pCoexSta->nCRCErr_11g    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf96);\r
+               pCoexSta->nCRCErr_11n    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf92);\r
+               pCoexSta->nCRCErr_11nAgg = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xfba);                \r
+       }\r
+\r
+\r
+       //reset counter\r
+       pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xf16, 0x1, 0x1);\r
+       pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xf16, 0x1, 0x0);\r
+\r
+       if ( (bWifiBusy) && (wifiRssi >= 30) && (!bWifiUnderBMode))\r
+       {\r
+               if ( (pCoexDm->btStatus == BT_8192E_1ANT_BT_STATUS_ACL_BUSY) ||\r
+                       (pCoexDm->btStatus == BT_8192E_1ANT_BT_STATUS_ACL_SCO_BUSY) ||\r
+                       (pCoexDm->btStatus == BT_8192E_1ANT_BT_STATUS_SCO_BUSY) )\r
+               {\r
+                       if (pCoexSta->nCRCOK_CCK >(pCoexSta->nCRCOK_11g + pCoexSta->nCRCOK_11n + \r
+                               pCoexSta->nCRCOK_11nAgg) )\r
+                       {\r
+                               if (nCCKLockCounter < 5)\r
+                                nCCKLockCounter++;\r
+                       }\r
+                       else\r
+                       {\r
+                               if (nCCKLockCounter > 0)\r
+                                nCCKLockCounter--;\r
+                       }\r
+\r
+               }\r
+               else\r
+               {\r
+                       if (nCCKLockCounter > 0)\r
+                         nCCKLockCounter--;\r
+               }\r
+       }\r
+       else\r
+       {\r
+               if (nCCKLockCounter > 0)\r
+                       nCCKLockCounter--;\r
+       }\r
+\r
+       if (!pCoexSta->bPreCCKLock)\r
+       {\r
+\r
+               if (nCCKLockCounter >= 5)\r
+                pCoexSta->bCCKLock = TRUE;\r
+               else\r
+                pCoexSta->bCCKLock = FALSE;                    \r
+       }\r
+       else\r
+       {\r
+               if (nCCKLockCounter == 0)\r
+                pCoexSta->bCCKLock = FALSE;\r
+               else\r
+                pCoexSta->bCCKLock = TRUE;             \r
+       }\r
+\r
+       pCoexSta->bPreCCKLock =  pCoexSta->bCCKLock;    \r
+               \r
 \r
 \r
-       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
 }\r
 \r
 BOOLEAN\r
 }\r
 \r
 BOOLEAN\r
@@ -325,8 +574,8 @@ halbtc8192e1ant_IsWifiStatusChanged(
        )\r
 {\r
        static BOOLEAN  bPreWifiBusy=FALSE, bPreUnder4way=FALSE, bPreBtHsOn=FALSE;\r
        )\r
 {\r
        static BOOLEAN  bPreWifiBusy=FALSE, bPreUnder4way=FALSE, bPreBtHsOn=FALSE;\r
-       BOOLEAN bWifiBusy=FALSE, bUnder4way=FALSE, bBtHsOn=FALSE;\r
-       BOOLEAN bWifiConnected=FALSE;\r
+       BOOLEAN bWifiBusy=FALSE, bUnder4way=FALSE, bBtHsOn=FALSE;\r
+       BOOLEAN bWifiConnected=FALSE;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
@@ -361,6 +610,9 @@ halbtc8192e1ant_UpdateBtLinkInfo(
        )\r
 {\r
        PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        )\r
 {\r
        PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       BOOLEAN                         bBtHsOn=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
 \r
        pBtLinkInfo->bBtLinkExist = pCoexSta->bBtLinkExist;\r
        pBtLinkInfo->bScoExist = pCoexSta->bScoExist;\r
 \r
        pBtLinkInfo->bBtLinkExist = pCoexSta->bBtLinkExist;\r
        pBtLinkInfo->bScoExist = pCoexSta->bScoExist;\r
@@ -368,6 +620,13 @@ halbtc8192e1ant_UpdateBtLinkInfo(
        pBtLinkInfo->bPanExist = pCoexSta->bPanExist;\r
        pBtLinkInfo->bHidExist = pCoexSta->bHidExist;\r
 \r
        pBtLinkInfo->bPanExist = pCoexSta->bPanExist;\r
        pBtLinkInfo->bHidExist = pCoexSta->bHidExist;\r
 \r
+       // work around for HS mode.\r
+       if(bBtHsOn)\r
+       {\r
+               pBtLinkInfo->bPanExist = TRUE;\r
+               pBtLinkInfo->bBtLinkExist = TRUE;\r
+       }\r
+\r
        // check if Sco only\r
        if( pBtLinkInfo->bScoExist &&\r
                !pBtLinkInfo->bA2dpExist &&\r
        // check if Sco only\r
        if( pBtLinkInfo->bScoExist &&\r
                !pBtLinkInfo->bA2dpExist &&\r
@@ -416,10 +675,10 @@ halbtc8192e1ant_ActionAlgorithm(
        u1Byte                          numOfDiffProfile=0;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        u1Byte                          numOfDiffProfile=0;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
-               \r
+\r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No BT link exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No BT link exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
@@ -436,31 +695,31 @@ halbtc8192e1ant_ActionAlgorithm(
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO only\n"));\r
                        algorithm = BT_8192E_1ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                        algorithm = BT_8192E_1ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID only\n"));\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP only\n"));\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = PAN(HS) only\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = PAN(EDR) only\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
@@ -472,24 +731,24 @@ halbtc8192e1ant_ActionAlgorithm(
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID\n"));\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP ==> SCO\n"));\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + PAN(EDR)\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -499,7 +758,7 @@ halbtc8192e1ant_ActionAlgorithm(
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP\n"));\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
@@ -507,12 +766,12 @@ halbtc8192e1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -521,12 +780,12 @@ halbtc8192e1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
@@ -539,7 +798,7 @@ halbtc8192e1ant_ActionAlgorithm(
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + A2DP ==> HID\n"));\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
                                algorithm = BT_8192E_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
@@ -547,12 +806,12 @@ halbtc8192e1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -561,12 +820,12 @@ halbtc8192e1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP + PAN(EDR) ==> HID\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -579,12 +838,12 @@ halbtc8192e1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
@@ -600,12 +859,12 @@ halbtc8192e1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Error!!! BT Profile = SCO + HID + A2DP + PAN(HS)\n"));\r
 \r
                                }\r
                                else\r
                                {\r
 \r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -615,64 +874,6 @@ halbtc8192e1ant_ActionAlgorithm(
        return algorithm;\r
 }\r
 \r
        return algorithm;\r
 }\r
 \r
-VOID\r
-halbtc8192e1ant_SetFwDacSwingLevel(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      u1Byte                  dacSwingLvl\r
-       )\r
-{\r
-       u1Byte                  H2C_Parameter[1] ={0};\r
-\r
-       // There are several type of dacswing\r
-       // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
-       H2C_Parameter[0] = dacSwingLvl;\r
-\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
-\r
-       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
-}\r
-\r
-VOID\r
-halbtc8192e1ant_SetFwDecBtPwr(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      u1Byte                          decBtPwrLvl\r
-       )\r
-{\r
-       u1Byte                  H2C_Parameter[1] ={0};\r
-       \r
-       H2C_Parameter[0] = decBtPwrLvl;\r
-\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power level = %d, FW write 0x62=0x%x\n", \r
-               decBtPwrLvl, H2C_Parameter[0]));\r
-\r
-       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);\r
-}\r
-\r
-VOID\r
-halbtc8192e1ant_DecBtPwr(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      BOOLEAN                         bForceExec,\r
-       IN      u1Byte                          decBtPwrLvl\r
-       )\r
-{\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power level = %d\n",  \r
-               (bForceExec? "force to":""), decBtPwrLvl));\r
-       pCoexDm->curBtDecPwrLvl = decBtPwrLvl;\r
-\r
-       if(!bForceExec)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], BtDecPwrLvl=%d, curBtDecPwrLvl=%d\n", \r
-                       pCoexDm->preBtDecPwrLvl, pCoexDm->curBtDecPwrLvl));\r
-\r
-               if(pCoexDm->preBtDecPwrLvl == pCoexDm->curBtDecPwrLvl) \r
-                       return;\r
-       }\r
-       halbtc8192e1ant_SetFwDecBtPwr(pBtCoexist, pCoexDm->curBtDecPwrLvl);\r
-\r
-       pCoexDm->preBtDecPwrLvl = pCoexDm->curBtDecPwrLvl;\r
-}\r
-\r
 VOID\r
 halbtc8192e1ant_SetBtAutoReport(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8192e1ant_SetBtAutoReport(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -688,7 +889,7 @@ halbtc8192e1ant_SetBtAutoReport(
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
@@ -701,15 +902,12 @@ halbtc8192e1ant_BtAutoReport(
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s BT Auto report = %s\n",  \r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
-                       pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
-\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
@@ -718,53 +916,29 @@ halbtc8192e1ant_BtAutoReport(
        pCoexDm->bPreBtAutoReport = pCoexDm->bCurBtAutoReport;\r
 }\r
 \r
        pCoexDm->bPreBtAutoReport = pCoexDm->bCurBtAutoReport;\r
 }\r
 \r
-VOID\r
-halbtc8192e1ant_FwDacSwingLvl(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      BOOLEAN                 bForceExec,\r
-       IN      u1Byte                  fwDacSwingLvl\r
-       )\r
-{\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
-               (bForceExec? "force to":""), fwDacSwingLvl));\r
-       pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
-\r
-       if(!bForceExec)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n", \r
-                       pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
-\r
-               if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
-                       return;\r
-       }\r
-\r
-       halbtc8192e1ant_SetFwDacSwingLevel(pBtCoexist, pCoexDm->curFwDacSwingLvl);\r
-\r
-       pCoexDm->preFwDacSwingLvl = pCoexDm->curFwDacSwingLvl;\r
-}\r
-\r
 VOID\r
 halbtc8192e1ant_SetSwPenaltyTxRateAdaptive(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
 VOID\r
 halbtc8192e1ant_SetSwPenaltyTxRateAdaptive(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
-       u1Byte  tmpU1;\r
+       u1Byte                  H2C_Parameter[6] ={0};\r
+       \r
+       H2C_Parameter[0] = 0x6; // opCode, 0x6= Retry_Penalty\r
 \r
 \r
-       tmpU1 = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x4fd);\r
-       tmpU1 |= BIT0;\r
        if(bLowPenaltyRa)\r
        {\r
        if(bLowPenaltyRa)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
-               tmpU1 &= ~BIT2;\r
-       }\r
-       else\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
-               tmpU1 |= BIT2;\r
+               H2C_Parameter[1] |= BIT0;\r
+               H2C_Parameter[2] = 0x00;  //normal rate except MCS7/6/5, OFDM54/48/36\r
+               H2C_Parameter[3] = 0xf7;  //MCS7 or OFDM54\r
+               H2C_Parameter[4] = 0xf8;  //MCS6 or OFDM48\r
+               H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
        }\r
 \r
-       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x4fd, tmpU1);\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
+               (bLowPenaltyRa? "ON!!":"OFF!!") ));\r
+\r
+       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -774,16 +948,10 @@ halbtc8192e1ant_LowPenaltyRa(
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
-       return;\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
-               (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
-                       pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
-\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
@@ -793,110 +961,46 @@ halbtc8192e1ant_LowPenaltyRa(
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-halbtc8192e1ant_SetDacSwingReg(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      u4Byte                  level\r
+halbtc8192e1ant_SetCoexTable(\r
+       IN      PBTC_COEXIST    pBtCoexist,\r
+       IN      u4Byte          val0x6c0,\r
+       IN      u4Byte          val0x6c4,\r
+       IN      u4Byte          val0x6c8,\r
+       IN      u1Byte          val0x6cc\r
        )\r
 {\r
        )\r
 {\r
-       u1Byte  val=(u1Byte)level;\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
+       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
+\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
+       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
+\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
-       pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x883, 0x3e, val);\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-halbtc8192e1ant_SetSwFullTimeDacSwing(\r
+halbtc8192e1ant_CoexTable(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      BOOLEAN                 bSwDacSwingOn,\r
-       IN      u4Byte                  swDacSwingLvl\r
+       IN      BOOLEAN                 bForceExec,\r
+       IN      u4Byte                  val0x6c0,\r
+       IN      u4Byte                  val0x6c4,\r
+       IN      u4Byte                  val0x6c8,\r
+       IN      u1Byte                  val0x6cc\r
        )\r
 {\r
        )\r
 {\r
-       if(bSwDacSwingOn)\r
-       {\r
-               halbtc8192e1ant_SetDacSwingReg(pBtCoexist, swDacSwingLvl);\r
-       }\r
-       else\r
-       {\r
-               halbtc8192e1ant_SetDacSwingReg(pBtCoexist, 0x18);\r
-       }\r
-}\r
-\r
-VOID\r
-halbtc8192e1ant_DacSwing(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      BOOLEAN                 bForceExec,\r
-       IN      BOOLEAN                 bDacSwingOn,\r
-       IN      u4Byte                  dacSwingLvl\r
-       )\r
-{\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
-               (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
-       pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
-       pCoexDm->curDacSwingLvl = dacSwingLvl;\r
-\r
-       if(!bForceExec)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
-                       pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
-                       pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
-\r
-               if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
-                       (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
-                       return;\r
-       }\r
-       delay_ms(30);\r
-       halbtc8192e1ant_SetSwFullTimeDacSwing(pBtCoexist, bDacSwingOn, dacSwingLvl);\r
-\r
-       pCoexDm->bPreDacSwingOn = pCoexDm->bCurDacSwingOn;\r
-       pCoexDm->preDacSwingLvl = pCoexDm->curDacSwingLvl;\r
-}\r
-\r
-VOID\r
-halbtc8192e1ant_SetCoexTable(\r
-       IN      PBTC_COEXIST    pBtCoexist,\r
-       IN      u4Byte          val0x6c0,\r
-       IN      u4Byte          val0x6c4,\r
-       IN      u4Byte          val0x6c8,\r
-       IN      u1Byte          val0x6cc\r
-       )\r
-{\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
-       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
-\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
-       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
-\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
-       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
-\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
-       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
-}\r
-\r
-VOID\r
-halbtc8192e1ant_CoexTable(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      BOOLEAN                 bForceExec,\r
-       IN      u4Byte                  val0x6c0,\r
-       IN      u4Byte                  val0x6c4,\r
-       IN      u4Byte                  val0x6c8,\r
-       IN      u1Byte                  val0x6cc\r
-       )\r
-{\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
-               (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6cc=0x%x\n", \r
+               (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
-       \r
+       {       \r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
@@ -918,6 +1022,10 @@ halbtc8192e1ant_CoexTableWithType(
        IN      u1Byte                          type\r
        )\r
 {\r
        IN      u1Byte                          type\r
        )\r
 {\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** CoexTable(%d) **********\n", type));\r
+       \r
+       pCoexSta->nCoexTableType = type;\r
+       \r
        switch(type)\r
        {\r
                case 0:\r
        switch(type)\r
        {\r
                case 0:\r
@@ -930,25 +1038,19 @@ halbtc8192e1ant_CoexTableWithType(
                        halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0x5a5a5a5a, 0x5a5a5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 3:\r
                        halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0x5a5a5a5a, 0x5a5a5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 3:\r
-                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0xaaaaaaaa, 0xaaaaaaaa, 0xffffff, 0x3);\r
+                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x5a5a5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 4:\r
                        break;\r
                case 4:\r
-                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0xffffffff, 0xffffffff, 0xffffff, 0x3);\r
+                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0xaaaa5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 5:\r
                        break;\r
                case 5:\r
-                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5fff5fff, 0xffffff, 0x3);\r
+                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0x5a5a5a5a, 0xaa5a5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 6:\r
                        break;\r
                case 6:\r
-                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5a5a5a5a, 0xffffff, 0x3);\r
+                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0xaaaaaaaa, 0xffffff, 0x3);\r
                        break;\r
                case 7:\r
                        break;\r
                case 7:\r
-                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0xddffddff, 0xddffddff, 0xffffff, 0x3);\r
-                       break;\r
-               case 8:\r
-                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5afa5afa, 0xffffff, 0x3);\r
-                       break;          \r
-               case 9:\r
-                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0x5f5f5f5f, 0x5f5f5f5f, 0xffffff, 0x3);\r
+                       halbtc8192e1ant_CoexTable(pBtCoexist, bForceExec, 0xaaaaaaaa, 0xaaaaaaaa, 0xffffff, 0x3);\r
                        break;\r
                default:\r
                        break;\r
                        break;\r
                default:\r
                        break;\r
@@ -968,7 +1070,7 @@ halbtc8192e1ant_SetFwIgnoreWlanAct(
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
@@ -981,15 +1083,12 @@ halbtc8192e1ant_IgnoreWlanAct(
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
-                       pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
-\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
@@ -998,37 +1097,6 @@ halbtc8192e1ant_IgnoreWlanAct(
        pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;\r
 }\r
 \r
        pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;\r
 }\r
 \r
-VOID\r
-halbtc8192e1ant_SetFwPstdma(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      u1Byte                  byte1,\r
-       IN      u1Byte                  byte2,\r
-       IN      u1Byte                  byte3,\r
-       IN      u1Byte                  byte4,\r
-       IN      u1Byte                  byte5\r
-       )\r
-{\r
-       u1Byte                  H2C_Parameter[5] ={0};\r
-\r
-       H2C_Parameter[0] = byte1;       \r
-       H2C_Parameter[1] = byte2;       \r
-       H2C_Parameter[2] = byte3;\r
-       H2C_Parameter[3] = byte4;\r
-       H2C_Parameter[4] = byte5;\r
-\r
-       pCoexDm->psTdmaPara[0] = byte1;\r
-       pCoexDm->psTdmaPara[1] = byte2;\r
-       pCoexDm->psTdmaPara[2] = byte3;\r
-       pCoexDm->psTdmaPara[3] = byte4;\r
-       pCoexDm->psTdmaPara[4] = byte5;\r
-       \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n", \r
-               H2C_Parameter[0], \r
-               H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
-\r
-       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);\r
-}\r
-\r
 VOID\r
 halbtc8192e1ant_SetLpsRpwm(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8192e1ant_SetLpsRpwm(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -1053,16 +1121,13 @@ halbtc8192e1ant_LpsRpwm(
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preLps/curLps=0x%x/0x%x, preRpwm/curRpwm=0x%x/0x%x!!\n", \r
-                       pCoexDm->preLps, pCoexDm->curLps, pCoexDm->preRpwm, pCoexDm->curRpwm));\r
-\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
@@ -1075,6 +1140,15 @@ halbtc8192e1ant_LpsRpwm(
        pCoexDm->preRpwm = pCoexDm->curRpwm;\r
 }\r
 \r
        pCoexDm->preRpwm = pCoexDm->curRpwm;\r
 }\r
 \r
+VOID\r
+halbtc8192e1ant_SwMechanism(\r
+       IN      PBTC_COEXIST    pBtCoexist,     \r
+       IN      BOOLEAN                 bLowPenaltyRA\r
+       ) \r
+{\r
+       halbtc8192e1ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);\r
+}\r
+\r
 VOID\r
 halbtc8192e1ant_SetAntPath(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8192e1ant_SetAntPath(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -1130,6 +1204,55 @@ halbtc8192e1ant_SetAntPath(
        }\r
 }\r
 \r
        }\r
 }\r
 \r
+VOID\r
+halbtc8192e1ant_SetFwPstdma(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                  byte1,\r
+       IN      u1Byte                  byte2,\r
+       IN      u1Byte                  byte3,\r
+       IN      u1Byte                  byte4,\r
+       IN      u1Byte                  byte5\r
+       )\r
+{\r
+       u1Byte                  H2C_Parameter[5] ={0};\r
+       u1Byte                  realByte1=byte1, realByte5=byte5;\r
+       BOOLEAN                 bApEnable=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+\r
+       if(bApEnable)\r
+       {\r
+               if(byte1&BIT4 && !(byte1&BIT5))\r
+               {                       \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], FW for 1Ant AP mode\n"));\r
+                       realByte1 &= ~BIT4;\r
+                       realByte1 |= BIT5;\r
+\r
+                       realByte5 |= BIT5;\r
+                       realByte5 &= ~BIT6;\r
+               }\r
+       }\r
+\r
+       H2C_Parameter[0] = realByte1;   \r
+       H2C_Parameter[1] = byte2;       \r
+       H2C_Parameter[2] = byte3;\r
+       H2C_Parameter[3] = byte4;\r
+       H2C_Parameter[4] = realByte5;\r
+\r
+       pCoexDm->psTdmaPara[0] = realByte1;\r
+       pCoexDm->psTdmaPara[1] = byte2;\r
+       pCoexDm->psTdmaPara[2] = byte3;\r
+       pCoexDm->psTdmaPara[3] = byte4;\r
+       pCoexDm->psTdmaPara[4] = realByte5;\r
+       \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], PS-TDMA H2C cmd =0x%x%08x\n", \r
+               H2C_Parameter[0], \r
+               H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
+\r
+       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);\r
+}\r
+\r
+\r
 VOID\r
 halbtc8192e1ant_PsTdma(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8192e1ant_PsTdma(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -1138,52 +1261,80 @@ halbtc8192e1ant_PsTdma(
        IN      u1Byte                  type\r
        )\r
 {\r
        IN      u1Byte                  type\r
        )\r
 {\r
-       BOOLEAN                 bTurnOnByCnt=FALSE;\r
+       PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       BOOLEAN                 bTurnOnByCnt=FALSE, bWifiBusy=FALSE, bWiFiNoisy=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0, rssiAdjustVal=0;\r
        u1Byte                  psTdmaTypeByCnt=0, rssiAdjustVal=0;\r
+       u1Byte                  psTdmaByte4Val = 0x50, psTdmaByte0Val = 0x51, psTdmaByte3Val =  0x10;\r
+       s1Byte                  nWiFiDurationAdjust = 0x0;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
-               (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);      \r
+\r
+       if (pCoexDm->bCurPsTdmaOn)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
+                       pCoexDm->curPsTdma));\r
+       }\r
+       else\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** TDMA(off, %d) **********\n", \r
+                       pCoexDm->curPsTdma));\r
+       }\r
+                       \r
        if(!bForceExec)\r
        {\r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
-                       pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
-                       pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
-\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
        }\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
        }\r
-       if(bTurnOn)\r
+\r
+       if (pCoexSta->nScanAPNum <= 5)\r
+               nWiFiDurationAdjust = 5;\r
+       else if  (pCoexSta->nScanAPNum >= 40)\r
+               nWiFiDurationAdjust = -15;      \r
+       else if  (pCoexSta->nScanAPNum >= 20)\r
+               nWiFiDurationAdjust = -10;      \r
+       \r
+       if (!pCoexSta->bForceLpsOn)  //only for A2DP-only case 1/2/9/11 while wifi noisy threshold > 30\r
        {\r
        {\r
+               psTdmaByte0Val = 0x61;  //no null-pkt\r
+               psTdmaByte3Val = 0x11; // no tx-pause at BT-slot\r
+               psTdmaByte4Val = 0x10; // 0x778 = d/1 toggle\r
+       }\r
+       \r
+       if (  (type == 3) || (type == 13) || (type == 14) )\r
+               psTdmaByte4Val = psTdmaByte4Val & 0xbf;  //no dynamic slot for multi-profile\r
+       \r
+       if (pBtLinkInfo->bSlaveRole == TRUE)\r
+               psTdmaByte4Val = psTdmaByte4Val | 0x1;  //0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts)\r
+               \r
+       if(bTurnOn)\r
+       {        \r
                switch(type)\r
                {\r
                        default:\r
                switch(type)\r
                {\r
                        default:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x53, 0x2c, 0x03, 0x10, 0x50);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x51, 0x1a, 0x1a, 0x0, psTdmaByte4Val);\r
                                break;\r
                        case 1:\r
                                break;\r
                        case 1:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x53, 0x2c, 0x03, 0x10, 0x50);\r
-                               rssiAdjustVal = 11;\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x3a+nWiFiDurationAdjust, 0x03, psTdmaByte3Val, psTdmaByte4Val);                                                                \r
                                break;\r
                        case 2:\r
                                break;\r
                        case 2:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x53, 0x25, 0x03, 0x10, 0x50);\r
-                               rssiAdjustVal = 14;\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x2d+nWiFiDurationAdjust, 0x03, psTdmaByte3Val, psTdmaByte4Val);                                                        \r
                                break;\r
                        case 3:\r
                                break;\r
                        case 3:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x40);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x51, 0x1d, 0x1d, 0x0, psTdmaByte4Val);\r
                                break;\r
                        case 4:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x14, 0x0);\r
                                break;\r
                        case 4:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x14, 0x0);\r
-                               rssiAdjustVal = 17;\r
                                break;\r
                        case 5:\r
                                break;\r
                        case 5:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x61, 0x15, 0x3, 0x31, 0x0);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x61, 0x15, 0x3, 0x11, 0x11);\r
                                break;\r
                        case 6:\r
                                break;\r
                        case 6:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0x3, 0x0, 0x0);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x61, 0x20, 0x3, 0x11, 0x11);\r
                                break;\r
                        case 7:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x13, 0xc, 0x5, 0x0, 0x0);\r
                                break;\r
                        case 7:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x13, 0xc, 0x5, 0x0, 0x0);\r
@@ -1192,61 +1343,55 @@ halbtc8192e1ant_PsTdma(
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0);\r
                                break;\r
                        case 9: \r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0);\r
                                break;\r
                        case 9: \r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x53, 0x1e, 0x03, 0x10, 0x50);\r
-                               rssiAdjustVal = 18;\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x21, 0x3, psTdmaByte3Val, psTdmaByte4Val);                             \r
                                break;\r
                        case 10:        \r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0xa, 0x0, 0x40);\r
                                break;\r
                        case 11:        \r
                                break;\r
                        case 10:        \r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0xa, 0x0, 0x40);\r
                                break;\r
                        case 11:        \r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x53, 0x12, 0x03, 0x10, 0x50);\r
-                               rssiAdjustVal = 20;\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x21, 0x03, psTdmaByte3Val, psTdmaByte4Val);                    \r
                                break;\r
                        case 12:\r
                                break;\r
                        case 12:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xeb, 0xa, 0x3, 0x31, 0x18);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x51, 0x0a, 0x0a, 0x0, 0x50);\r
+                               break;\r
+                       case 13:\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x51, 0x12, 0x12, 0x0, psTdmaByte4Val);\r
+                               break;\r
+                       case 14:\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x51, 0x21, 0x3, 0x10, psTdmaByte4Val);\r
                                break;\r
                                break;\r
-\r
                        case 15:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0x3, 0x8, 0x0);\r
                                break;\r
                        case 16:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x10, 0x0);\r
                        case 15:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0x3, 0x8, 0x0);\r
                                break;\r
                        case 16:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x10, 0x0);\r
-                               rssiAdjustVal = 18;\r
                                break;\r
                                break;\r
-\r
                        case 18:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0);\r
                        case 18:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0);\r
-                               rssiAdjustVal = 14;\r
                                break;                  \r
                                break;                  \r
-                               \r
                        case 20:\r
                        case 20:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x13, 0x25, 0x25, 0x0, 0x0);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x61, 0x3f, 0x03, 0x11, 0x10);\r
                                break;\r
                        case 21:\r
                                break;\r
                        case 21:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x93, 0x20, 0x3, 0x10, 0x40);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x61, 0x25, 0x03, 0x11, 0x11);\r
                                break;\r
                        case 22:\r
                                break;\r
                        case 22:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x13, 0x8, 0x8, 0x0, 0x40);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x61, 0x25, 0x03, 0x11, 0x10);\r
                                break;\r
                        case 23:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x18);\r
                                break;\r
                        case 23:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x18);\r
-                               rssiAdjustVal = 22;\r
                                break;\r
                        case 24:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x3, 0x31, 0x18);\r
                                break;\r
                        case 24:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x3, 0x31, 0x18);\r
-                               rssiAdjustVal = 22;\r
                                break;\r
                        case 25:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0x3, 0x31, 0x18);\r
                                break;\r
                        case 25:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0x3, 0x31, 0x18);\r
-                               rssiAdjustVal = 22;\r
                                break;\r
                        case 26:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0x3, 0x31, 0x18);\r
                                break;\r
                        case 26:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0x3, 0x31, 0x18);\r
-                               rssiAdjustVal = 22;\r
                                break;\r
                        case 27:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x98);\r
                                break;\r
                        case 27:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x98);\r
-                               rssiAdjustVal = 22;\r
                                break;\r
                        case 28:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x69, 0x25, 0x3, 0x31, 0x0);\r
                                break;\r
                        case 28:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x69, 0x25, 0x3, 0x31, 0x0);\r
@@ -1255,133 +1400,72 @@ halbtc8192e1ant_PsTdma(
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xab, 0x1a, 0x1a, 0x1, 0x10);\r
                                break;\r
                        case 30:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xab, 0x1a, 0x1a, 0x1, 0x10);\r
                                break;\r
                        case 30:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x14, 0x0);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x51, 0x30, 0x3, 0x10, 0x10);\r
                                break;\r
                        case 31:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1a, 0x1a, 0, 0x58);\r
                                break;\r
                        case 32:\r
                                break;\r
                        case 31:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1a, 0x1a, 0, 0x58);\r
                                break;\r
                        case 32:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xab, 0xa, 0x3, 0x31, 0x90);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x61, 0x35, 0x3, 0x11, 0x11);\r
                                break;\r
                        case 33:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xa3, 0x25, 0x3, 0x30, 0x90);\r
                                break;\r
                        case 34:\r
                                break;\r
                        case 33:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xa3, 0x25, 0x3, 0x30, 0x90);\r
                                break;\r
                        case 34:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1a, 0x1a, 0x0, 0x10);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x53, 0x1a, 0x1a, 0x0, 0x10);\r
                                break;\r
                        case 35:\r
                                break;\r
                        case 35:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x0, 0x10);\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x63, 0x1a, 0x1a, 0x0, 0x10);\r
                                break;\r
                        case 36:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x12, 0x3, 0x14, 0x50);\r
                                break;\r
                                break;\r
                        case 36:\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x12, 0x3, 0x14, 0x50);\r
                                break;\r
-                       case 37:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x53, 0x25, 0x3, 0x10, 0x50);\r
-                               break;\r
-                       case 38:\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
-                               break;\r
+                       case 40: // SoftAP only with no sta associated,BT disable ,TDMA mode for power saving\r
+                               /* here softap mode screen off will cost 70-80mA for phone */\r
+                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x23, 0x18, 0x00, 0x10, 0x24);\r
+                               break;  \r
                }\r
        }\r
        else\r
                }\r
        }\r
        else\r
-       {\r
+       {               \r
+\r
                // disable PS tdma\r
                switch(type)\r
                {\r
                // disable PS tdma\r
                switch(type)\r
                {\r
-                       case 8:         //0x778 = 1, ant2PTA\r
+                       case 8: //PTA Control\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x8, 0x0, 0x0, 0x0, 0x0);\r
                                halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FALSE, FALSE);\r
                                break;\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x8, 0x0, 0x0, 0x0, 0x0);\r
                                halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FALSE, FALSE);\r
                                break;\r
-                       case 0:         //0x778 = 1, ant2BT\r
-                       default:\r
+                       case 0:\r
+                       default:  //Software control, Antenna at BT side\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);\r
-                               delay_ms(5);\r
                                halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, FALSE);\r
                                break;\r
                                halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, FALSE);\r
                                break;\r
-                       case 9:         //0x778 = 1, ant2WIFI\r
+                       case 9:   //Software control, Antenna at WiFi side\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);\r
                                halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_WIFI, FALSE, FALSE);\r
                                halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);\r
                                halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_WIFI, FALSE, FALSE);\r
-                               break;\r
-                       case 10:        //0x778 = 3, ant2BT\r
-                               halbtc8192e1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x8, 0x0);\r
-                               delay_ms(5);\r
-                               halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, FALSE);\r
-                               break;\r
+                               break;                  \r
                }\r
        }\r
        rssiAdjustVal =0;\r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE, &rssiAdjustVal);\r
 \r
                }\r
        }\r
        rssiAdjustVal =0;\r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE, &rssiAdjustVal);\r
 \r
+\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x67=0x%x\n",\r
+               pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948),   pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765), pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67)));\r
+\r
        // update pre state\r
        pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;\r
        pCoexDm->prePsTdma = pCoexDm->curPsTdma;\r
 }\r
 \r
        // update pre state\r
        pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;\r
        pCoexDm->prePsTdma = pCoexDm->curPsTdma;\r
 }\r
 \r
-VOID\r
-halbtc8192e1ant_SetSwitchSsType(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      u1Byte                          ssType\r
-       )\r
-{\r
-       u1Byte  mimoPs=BTC_MIMO_PS_DYNAMIC;\r
-\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], REAL set SS Type = %d\n", ssType));\r
-\r
-       if(ssType == 1)\r
-       {\r
-               halbtc8192e1ant_UpdateRaMask(pBtCoexist, FORCE_EXEC, BTC_RATE_DISABLE, 0xfff00000);     // disable 2ss\r
-               halbtc8192e1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
-               // switch ofdm path\r
-               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xc04, 0x11);\r
-               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xd04, 0x1);\r
-               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x90c, 0x81111111);\r
-               // switch cck patch\r
-               pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xe77, 0x4, 0x1);\r
-               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xa07, 0x81);\r
-               mimoPs=BTC_MIMO_PS_STATIC;\r
-       }\r
-       else if(ssType == 2)\r
-       {\r
-               halbtc8192e1ant_UpdateRaMask(pBtCoexist, FORCE_EXEC, BTC_RATE_ENABLE, 0xfff00000);      // enable 2ss\r
-               halbtc8192e1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);\r
-               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xc04, 0x33);\r
-               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xd04, 0x3);\r
-               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x90c, 0x81121313);\r
-               pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xe77, 0x4, 0x0);\r
-               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xa07, 0x41);\r
-               mimoPs=BTC_MIMO_PS_DYNAMIC;\r
-       }\r
-       \r
-       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_SEND_MIMO_PS, &mimoPs);     // set rx 1ss or 2ss\r
-}\r
-\r
-VOID\r
-halbtc8192e1ant_SwitchSsType(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      BOOLEAN                         bForceExec,\r
-       IN      u1Byte                          newSsType\r
-       )\r
-{\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], %s Switch SS Type = %d\n",  \r
-               (bForceExec? "force to":""), newSsType));\r
-       pCoexDm->curSsType = newSsType;\r
-\r
-       if(!bForceExec)\r
-       {\r
-               if(pCoexDm->preSsType == pCoexDm->curSsType) \r
-                       return;\r
-       }\r
-       halbtc8192e1ant_SetSwitchSsType(pBtCoexist, pCoexDm->curSsType);\r
-\r
-       pCoexDm->preSsType = pCoexDm->curSsType;\r
-}\r
-\r
 VOID\r
 halbtc8192e1ant_CoexAllOff(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 halbtc8192e1ant_CoexAllOff(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+       // sw all off\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
        // hw all off\r
        halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // hw all off\r
        halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
@@ -1400,39 +1484,59 @@ halbtc8192e1ant_IsCommonAction(
        if(!bWifiConnected && \r
                BT_8192E_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
        {\r
        if(!bWifiConnected && \r
                BT_8192E_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT non connected-idle!!\n"));            \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT non connected-idle!!\n"));\r
+               \r
+               //halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
+\r
                bCommon = TRUE;\r
        }\r
        else if(bWifiConnected && \r
                (BT_8192E_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
                bCommon = TRUE;\r
        }\r
        else if(bWifiConnected && \r
                (BT_8192E_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
+\r
+               //halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(!bWifiConnected && \r
                (BT_8192E_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(!bWifiConnected && \r
                (BT_8192E_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT connected-idle!!\n"));\r
+\r
+               //halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(bWifiConnected && \r
                (BT_8192E_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(bWifiConnected && \r
                (BT_8192E_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
+\r
+               //halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(!bWifiConnected && \r
                (BT_8192E_1ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus) )\r
        {\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(!bWifiConnected && \r
                (BT_8192E_1ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT Busy!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT Busy!!\n"));\r
+\r
+               //halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
                \r
                bCommon = TRUE;\r
        }\r
        else\r
                \r
                bCommon = TRUE;\r
        }\r
        else\r
-       {       \r
+       {\r
+               if (bWifiBusy)                  \r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
+               }\r
+               else\r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
+               }\r
+               \r
                bCommon = FALSE;\r
        }\r
        \r
                bCommon = FALSE;\r
        }\r
        \r
@@ -1449,8 +1553,15 @@ halbtc8192e1ant_TdmaDurationAdjustForAcl(
        static s4Byte           up,dn,m,n,WaitCount;\r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0, btInfoExt;\r
        static s4Byte           up,dn,m,n,WaitCount;\r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0, btInfoExt;\r
+       static BOOLEAN  bPreWifiBusy=FALSE;\r
+       BOOLEAN                 bWifiBusy = FALSE;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjustForAcl()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TdmaDurationAdjustForAcl()\n"));\r
+\r
+       if(BT_8192E_1ANT_WIFI_STATUS_CONNECTED_BUSY == wifiStatus) \r
+               bWifiBusy = TRUE;\r
+       else\r
+               bWifiBusy = FALSE;              \r
 \r
        if( (BT_8192E_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus) ||\r
                (BT_8192E_1ANT_WIFI_STATUS_CONNECTED_SCAN == wifiStatus) ||\r
 \r
        if( (BT_8192E_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus) ||\r
                (BT_8192E_1ANT_WIFI_STATUS_CONNECTED_SCAN == wifiStatus) ||\r
@@ -1477,7 +1588,7 @@ halbtc8192e1ant_TdmaDurationAdjustForAcl(
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
 \r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                pCoexDm->psTdmaDuAdjType = 2;\r
 \r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                pCoexDm->psTdmaDuAdjType = 2;\r
@@ -1494,9 +1605,10 @@ halbtc8192e1ant_TdmaDurationAdjustForAcl(
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
                btInfoExt = pCoexSta->btInfoExt;\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
                btInfoExt = pCoexSta->btInfoExt;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
-                       up, dn, m, n, WaitCount));\r
+\r
+               if ( (pCoexSta->lowPriorityTx) > 1050 ||  (pCoexSta->lowPriorityRx) > 1250 )\r
+                       retryCount++;   \r
+               \r
                result = 0;\r
                WaitCount++; \r
                  \r
                result = 0;\r
                WaitCount++; \r
                  \r
@@ -1515,7 +1627,7 @@ halbtc8192e1ant_TdmaDurationAdjustForAcl(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -1541,7 +1653,7 @@ halbtc8192e1ant_TdmaDurationAdjustForAcl(
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -1559,7 +1671,7 @@ halbtc8192e1ant_TdmaDurationAdjustForAcl(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
 \r
                if(result == -1)\r
                }\r
 \r
                if(result == -1)\r
@@ -1610,6 +1722,19 @@ halbtc8192e1ant_TdmaDurationAdjustForAcl(
                                pCoexDm->psTdmaDuAdjType = 1;\r
                        }\r
                }\r
                                pCoexDm->psTdmaDuAdjType = 1;\r
                        }\r
                }\r
+               else      //no change\r
+               {\r
+                       /* Bryant Modify        \r
+                       if(bWifiBusy != bPreWifiBusy)  //if busy / idle change\r
+                       {\r
+                               bPreWifiBusy = bWifiBusy;\r
+                               halbtc8192e1ant_PsTdma(pBtCoexist, FORCE_EXEC, TRUE, pCoexDm->curPsTdma);\r
+                       }\r
+                       */\r
+               \r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
+                               pCoexDm->curPsTdma));\r
+               }\r
 \r
                if( pCoexDm->curPsTdma != 1 &&\r
                        pCoexDm->curPsTdma != 2 &&\r
 \r
                if( pCoexDm->curPsTdma != 1 &&\r
                        pCoexDm->curPsTdma != 2 &&\r
@@ -1622,41 +1747,6 @@ halbtc8192e1ant_TdmaDurationAdjustForAcl(
        }\r
 }\r
 \r
        }\r
 }\r
 \r
-u1Byte\r
-halbtc8192e1ant_PsTdmaTypeByWifiRssi(\r
-       IN      s4Byte  wifiRssi,\r
-       IN      s4Byte  preWifiRssi,\r
-       IN      u1Byte  wifiRssiThresh\r
-       )\r
-{\r
-       u1Byte  psTdmaType=0;\r
-       \r
-       if(wifiRssi > preWifiRssi)\r
-       {\r
-               if(wifiRssi > (wifiRssiThresh+5))\r
-               {\r
-                       psTdmaType = 26;\r
-               }\r
-               else\r
-               {\r
-                       psTdmaType = 25;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if(wifiRssi > wifiRssiThresh)\r
-               {\r
-                       psTdmaType = 26;\r
-               }\r
-               else\r
-               {\r
-                       psTdmaType = 25;\r
-               }\r
-       }\r
-\r
-       return psTdmaType;\r
-}\r
-\r
 VOID\r
 halbtc8192e1ant_PsTdmaCheckForPowerSaveState(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8192e1ant_PsTdmaCheckForPowerSaveState(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -1702,7 +1792,7 @@ halbtc8192e1ant_PowerSaveState(
        )\r
 {\r
        BOOLEAN         bLowPwrDisable=FALSE;\r
        )\r
 {\r
        BOOLEAN         bLowPwrDisable=FALSE;\r
-\r
+       \r
        switch(psType)\r
        {\r
                case BTC_PS_WIFI_NATIVE:\r
        switch(psType)\r
        {\r
                case BTC_PS_WIFI_NATIVE:\r
@@ -1710,26 +1800,28 @@ halbtc8192e1ant_PowerSaveState(
                        bLowPwrDisable = FALSE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);\r
                        bLowPwrDisable = FALSE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = FALSE;\r
                        break;\r
                case BTC_PS_LPS_ON:\r
                        halbtc8192e1ant_PsTdmaCheckForPowerSaveState(pBtCoexist, TRUE);\r
                        break;\r
                case BTC_PS_LPS_ON:\r
                        halbtc8192e1ant_PsTdmaCheckForPowerSaveState(pBtCoexist, TRUE);\r
-                       halbtc8192e1ant_LpsRpwm(pBtCoexist, NORMAL_EXEC, lpsVal, rpwmVal);\r
+                       halbtc8192e1ant_LpsRpwm(pBtCoexist, NORMAL_EXEC, lpsVal, rpwmVal);                      \r
                        // when coex force to enter LPS, do not enter 32k low power.\r
                        bLowPwrDisable = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
                        // when coex force to enter LPS, do not enter 32k low power.\r
                        bLowPwrDisable = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
-                       // power save must executed before psTdma.\r
+                       // power save must executed before psTdma.                      \r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_ENTER_LPS, NULL);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_ENTER_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = TRUE;\r
                        break;\r
                case BTC_PS_LPS_OFF:\r
                        halbtc8192e1ant_PsTdmaCheckForPowerSaveState(pBtCoexist, FALSE);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);\r
                        break;\r
                case BTC_PS_LPS_OFF:\r
                        halbtc8192e1ant_PsTdmaCheckForPowerSaveState(pBtCoexist, FALSE);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = FALSE;\r
                        break;\r
                default:\r
                        break;\r
        }\r
 }\r
 \r
                        break;\r
                default:\r
                        break;\r
        }\r
 }\r
 \r
-\r
 VOID\r
 halbtc8192e1ant_ActionWifiOnly(\r
        IN      PBTC_COEXIST            pBtCoexist\r
 VOID\r
 halbtc8192e1ant_ActionWifiOnly(\r
        IN      PBTC_COEXIST            pBtCoexist\r
@@ -1769,24 +1861,24 @@ halbtc8192e1ant_MonitorBtEnableDisable(
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt all counters=0, %d times!!\n", \r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is disabled !!\n"));\r
                        halbtc8192e1ant_ActionWifiOnly(pBtCoexist);\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                        halbtc8192e1ant_ActionWifiOnly(pBtCoexist);\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n", \r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
@@ -1808,18 +1900,23 @@ halbtc8192e1ant_MonitorBtEnableDisable(
 //=============================================\r
 \r
 // SCO only or SCO+PAN(HS)\r
 //=============================================\r
 \r
 // SCO only or SCO+PAN(HS)\r
+\r
+/*\r
 VOID\r
 halbtc8192e1ant_ActionSco(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 halbtc8192e1ant_ActionSco(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, TRUE);\r
 }\r
 \r
 }\r
 \r
+\r
 VOID\r
 halbtc8192e1ant_ActionHid(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 halbtc8192e1ant_ActionHid(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, TRUE);\r
 }\r
 \r
 //A2DP only / PAN(EDR) only/ A2DP+PAN(HS)\r
 }\r
 \r
 //A2DP only / PAN(EDR) only/ A2DP+PAN(HS)\r
@@ -1828,6 +1925,7 @@ halbtc8192e1ant_ActionA2dp(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1835,6 +1933,7 @@ halbtc8192e1ant_ActionA2dpPanHs(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1842,6 +1941,7 @@ halbtc8192e1ant_ActionPanEdr(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
 }\r
 \r
 //PAN(HS) only\r
 }\r
 \r
 //PAN(HS) only\r
@@ -1850,6 +1950,7 @@ halbtc8192e1ant_ActionPanHs(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
 }\r
 \r
 //PAN(EDR)+A2DP\r
 }\r
 \r
 //PAN(EDR)+A2DP\r
@@ -1858,6 +1959,7 @@ halbtc8192e1ant_ActionPanEdrA2dp(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1865,6 +1967,7 @@ halbtc8192e1ant_ActionPanEdrHid(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, TRUE);\r
 }\r
 \r
 // HID+A2DP+PAN(EDR)\r
 }\r
 \r
 // HID+A2DP+PAN(EDR)\r
@@ -1873,6 +1976,7 @@ halbtc8192e1ant_ActionHidA2dpPanEdr(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, TRUE);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1880,58 +1984,77 @@ halbtc8192e1ant_ActionHidA2dp(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, TRUE);\r
 }\r
 \r
 }\r
 \r
+*/\r
+\r
 //=============================================\r
 //\r
 //     Non-Software Coex Mechanism start\r
 //\r
 //=============================================\r
 VOID\r
 //=============================================\r
 //\r
 //     Non-Software Coex Mechanism start\r
 //\r
 //=============================================\r
 VOID\r
-halbtc8192e1ant_ActionBtInquiry(\r
+halbtc8192e1ant_ActionWifiMultiPort(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
-       BOOLEAN                         bWifiConnected=FALSE, bBtHsOn=FALSE;\r
-       \r
-       // Note:\r
-       // Do not do DacSwing here, use original setting.\r
+       halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
        \r
        \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
-\r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
-       if(bBtHsOn)\r
-               return;\r
+       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
+       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+}\r
 \r
 \r
-       if(!bWifiConnected)\r
-       {\r
-               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
-               \r
-               halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+VOID\r
+halbtc8192e1ant_ActionHs(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
+       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+}\r
 \r
 \r
+VOID\r
+halbtc8192e1ant_ActionBtInquiry(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{      \r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       BOOLEAN                 bWifiConnected=FALSE, bApEnable=FALSE, bWifiBusy=FALSE, bBtBusy=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);\r
+\r
+       if((!bWifiConnected) && (!pCoexSta->bWiFiIsHighPriTask))\r
+       {\r
+               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
-               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);          \r
        }\r
        }\r
-       else if( (pBtLinkInfo->bScoExist) ||\r
-                       (pBtLinkInfo->bHidOnly) )\r
+       else if((pBtLinkInfo->bScoExist) || (pBtLinkInfo->bHidExist) || (pBtLinkInfo->bA2dpExist))\r
        {\r
        {\r
-               // SCO/HID-only busy\r
+               // SCO/HID/A2DP  busy\r
                halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
-               \r
-               halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-\r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
-               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 1);\r
+\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
+       }\r
+       else if ((pBtLinkInfo->bPanExist) || (bWifiBusy))\r
+       {\r
+               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 20);              \r
+               \r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x0);\r
-\r
-               halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
 \r
 \r
-               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 30);\r
-               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -1942,141 +2065,100 @@ halbtc8192e1ant_ActionBtScoHidOnlyBusy(
        )\r
 {\r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        )\r
 {\r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
-       u1Byte          btRssiState=BTC_RSSI_STATE_HIGH;\r
+       BOOLEAN bWifiConnected=FALSE;\r
+       u1Byte  wifiRssiState=BTC_RSSI_STATE_HIGH;\r
 \r
 \r
-       if(BT_8192E_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus)\r
-       {               \r
-               halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
-       \r
-               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
-               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
-       }\r
-       else\r
-       {\r
-               if(pBtLinkInfo->bHidOnly)\r
-               {\r
-                       halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-                       halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
-               \r
-                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
-                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
-               }\r
-               else\r
-               {\r
-                       // dec bt power for diff level\r
-                       btRssiState = halbtc8192e1ant_BtRssiState(3, 34, 42);\r
-                       if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
-                               (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
-                       {\r
-                               halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-                       }\r
-                       else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
-                                       (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
-                       {\r
-                               halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
-                       }\r
-                       else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-                       {\r
-                               halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 6);\r
-                       }\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
 \r
 \r
-                       // sw dacSwing\r
-                       halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, TRUE, 0xc);\r
+       // tdma and coex table\r
 \r
 \r
-                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
-                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);                  \r
-               }\r
+       if(pBtLinkInfo->bScoExist)\r
+       {\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
+       }\r
+       else //HID\r
+       {\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
        }\r
 }\r
 \r
 VOID\r
        }\r
 }\r
 \r
 VOID\r
-halbtc8192e1ant_ActionHs(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
+halbtc8192e1ant_ActionWifiConnectedBtAclBusy(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                          wifiStatus\r
        )\r
 {\r
        )\r
 {\r
+       u1Byte          btRssiState;\r
+       \r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       btRssiState = halbtc8192e1ant_BtRssiState(2, 28, 0);    \r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action for HS!!!\n"));\r
-\r
-       halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
-\r
-       if(BT_8192E_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
+       if ( (pCoexSta->lowPriorityRx >= 1000)  && (pCoexSta->lowPriorityRx != 65535) )\r
        {\r
        {\r
-               // error, should not be here\r
-               pCoexDm->errorCondition = 1;\r
+               pBtLinkInfo->bSlaveRole = TRUE;\r
        }\r
        }\r
-       else if(BT_8192E_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)\r
+       else\r
        {\r
        {\r
-               halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
+               pBtLinkInfo->bSlaveRole = FALSE;\r
+       }\r
 \r
 \r
-               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 10);\r
-               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+       if(pBtLinkInfo->bHidOnly)  //HID\r
+       {\r
+               halbtc8192e1ant_ActionBtScoHidOnlyBusy(pBtCoexist, wifiStatus);\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+               return;\r
        }\r
        }\r
-       else if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus && \r
-                       !pBtCoexist->btLinkInfo.bHidOnly)\r
+       else if(pBtLinkInfo->bA2dpOnly)  //A2DP         \r
        {\r
        {\r
-               if(pCoexDm->curSsType == 1)\r
+               if(BT_8192E_1ANT_WIFI_STATUS_CONNECTED_IDLE == wifiStatus)\r
                {\r
                {\r
-                       halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-                       halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
-                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 10);\r
-                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
+                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+                       pCoexDm->bAutoTdmaAdjust = FALSE;\r
+               }\r
+               else\r
+               {\r
+                       halbtc8192e1ant_TdmaDurationAdjustForAcl(pBtCoexist, wifiStatus);\r
+#if 0\r
+                       if (pCoexSta->bCCKLock)\r
+                               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
+                       else\r
+#endif                         \r
+                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+                       pCoexDm->bAutoTdmaAdjust = TRUE;\r
                }\r
        }\r
                }\r
        }\r
-       else\r
+       else if ( ((pBtLinkInfo->bA2dpExist) && (pBtLinkInfo->bPanExist)) ||\r
+                      (pBtLinkInfo->bHidExist&&pBtLinkInfo->bA2dpExist&&pBtLinkInfo->bPanExist) ) //A2DP+PAN(OPP,FTP), HID+A2DP+PAN(OPP,FTP)\r
        {\r
        {\r
-               halbtc8192e1ant_ActionBtScoHidOnlyBusy(pBtCoexist,\r
-                       BT_8192E_1ANT_WIFI_STATUS_CONNECTED_BUSY);\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
        }\r
        }\r
-}\r
-\r
-VOID\r
-halbtc8192e1ant_ActionWifiConnectedBtAclBusy(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      u1Byte                          wifiStatus\r
-       )\r
-{\r
-       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
-\r
-       if(pBtLinkInfo->bHidOnly)\r
+       else if(pBtLinkInfo->bHidExist&&pBtLinkInfo->bA2dpExist)  //HID+A2DP\r
        {\r
        {\r
-               halbtc8192e1ant_ActionBtScoHidOnlyBusy(pBtCoexist, wifiStatus);\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
-               return;\r
-       }\r
-       \r
-       halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-       halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
 \r
 \r
-       if( (pBtLinkInfo->bA2dpOnly) ||\r
-               (pBtLinkInfo->bHidExist&&pBtLinkInfo->bA2dpExist) )\r
-       {\r
-               halbtc8192e1ant_TdmaDurationAdjustForAcl(pBtCoexist, wifiStatus);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
        }\r
        }\r
-       else if( (pBtLinkInfo->bPanOnly) ||\r
-                       (pBtLinkInfo->bHidExist&&pBtLinkInfo->bPanExist) )\r
+       else if( (pBtLinkInfo->bPanOnly) || (pBtLinkInfo->bHidExist&&pBtLinkInfo->bPanExist) ) //PAN(OPP,FTP), HID+PAN(OPP,FTP)                 \r
        {\r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
        {\r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
        }\r
        else\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
        }\r
        else\r
-       {\r
-               if( (BT_8192E_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus) ||\r
-                       (BT_8192E_1ANT_WIFI_STATUS_CONNECTED_SCAN == wifiStatus) ||\r
-                       (BT_8192E_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT == wifiStatus) )\r
-                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
-               else\r
-                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
+       {               \r
+               //BT no-profile busy (0x9)\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);      \r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
-       }\r
-               \r
-       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 1);\r
+       }       \r
 }\r
 \r
 }\r
 \r
-\r
 VOID\r
 halbtc8192e1ant_ActionWifiNotConnected(\r
        IN      PBTC_COEXIST            pBtCoexist\r
 VOID\r
 halbtc8192e1ant_ActionWifiNotConnected(\r
        IN      PBTC_COEXIST            pBtCoexist\r
@@ -2085,25 +2167,78 @@ halbtc8192e1ant_ActionWifiNotConnected(
        // power save state\r
        halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        // power save state\r
        halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
-       halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-       halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
-\r
-       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
-       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);  \r
+       // tdma and coex table\r
+       halbtc8192e1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);\r
+       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-halbtc8192e1ant_ActionWifiNotConnectedAssoAuthScan(\r
+halbtc8192e1ant_ActionWifiNotConnectedScan(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       \r
        halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
-       halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-       halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+       // tdma and coex table\r
+       if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
+       {\r
+               if (pBtLinkInfo->bA2dpExist)\r
+               {\r
+                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
+                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
+               else if (pBtLinkInfo->bA2dpExist && pBtLinkInfo->bPanExist)\r
+               {\r
+                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
+                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
+               else\r
+               {\r
+                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 20);\r
+                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
+       }\r
+       else if( (BT_8192E_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
+                       (BT_8192E_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
+       {\r
+               halbtc8192e1ant_ActionBtScoHidOnlyBusy(pBtCoexist,\r
+                       BT_8192E_1ANT_WIFI_STATUS_CONNECTED_SCAN);\r
+       }\r
+       else\r
+       {\r
+               //Bryant Add\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+       }\r
+}\r
+\r
+VOID\r
+halbtc8192e1ant_ActionWifiNotConnectedAssoAuth(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       \r
+       halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
 \r
-       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
-       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+       // tdma and coex table\r
+       if( (pBtLinkInfo->bScoExist)  || (pBtLinkInfo->bHidExist) ||  (pBtLinkInfo->bA2dpExist) )\r
+       {\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
+       }\r
+       else if (pBtLinkInfo->bPanExist)                        \r
+       {\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 20);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
+       }\r
+       else    \r
+       {               \r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+       }\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -2111,16 +2246,28 @@ halbtc8192e1ant_ActionWifiConnectedScan(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       // power save state\r
-       if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus && !pBtCoexist->btLinkInfo.bHidOnly)\r
-               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x0);\r
-       else\r
-               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       \r
+       halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
 \r
+       // tdma and coex table\r
        if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
        {\r
        if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
        {\r
-               halbtc8192e1ant_ActionWifiConnectedBtAclBusy(pBtCoexist,\r
-                       BT_8192E_1ANT_WIFI_STATUS_CONNECTED_SCAN);\r
+               if (pBtLinkInfo->bA2dpExist)\r
+               {\r
+                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
+                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
+               else if (pBtLinkInfo->bA2dpExist && pBtLinkInfo->bPanExist)\r
+               {\r
+                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
+                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
+               else\r
+               {\r
+                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 20);\r
+                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
        }\r
        else if( (BT_8192E_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
                        (BT_8192E_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
        }\r
        else if( (BT_8192E_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
                        (BT_8192E_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
@@ -2129,35 +2276,35 @@ halbtc8192e1ant_ActionWifiConnectedScan(
                        BT_8192E_1ANT_WIFI_STATUS_CONNECTED_SCAN);\r
        }\r
        else\r
                        BT_8192E_1ANT_WIFI_STATUS_CONNECTED_SCAN);\r
        }\r
        else\r
-       {               \r
-               halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+       {\r
+               //Bryant Add\r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        }\r
 }\r
 \r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        }\r
 }\r
 \r
-\r
 VOID\r
 halbtc8192e1ant_ActionWifiConnectedSpecialPacket(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 halbtc8192e1ant_ActionWifiConnectedSpecialPacket(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       // power save state\r
-       if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus && !pBtCoexist->btLinkInfo.bHidOnly)\r
-               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x0);\r
-       else\r
-               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
 \r
 \r
-       if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
+       halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+\r
+       // tdma and coex table\r
+       if((pBtLinkInfo->bScoExist) || (pBtLinkInfo->bHidExist) || (pBtLinkInfo->bA2dpExist))\r
        {\r
        {\r
-               halbtc8192e1ant_ActionWifiConnectedBtAclBusy(pBtCoexist,\r
-                       BT_8192E_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT);\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
        }\r
        }\r
-       else\r
+       else if(pBtLinkInfo->bPanExist) \r
+       {\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 20);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
+       }\r
+       else    \r
        {               \r
        {               \r
-               halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        }\r
                halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        }\r
@@ -2168,45 +2315,65 @@ halbtc8192e1ant_ActionWifiConnected(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BOOLEAN         bWifiConnected=FALSE, bWifiBusy=FALSE;\r
-       BOOLEAN         bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
-       BOOLEAN         bUnder4way=FALSE;\r
+       BOOLEAN         bWifiBusy=FALSE;\r
+       BOOLEAN         bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
+       BOOLEAN         bUnder4way=FALSE, bApEnable=FALSE;\r
        u4Byte          wifiBw;\r
 \r
        u4Byte          wifiBw;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect()===>\n"));\r
-\r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
-       if(!bWifiConnected)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect(), return for wifi not connected<===\n"));\r
-               return;\r
-       }\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect()===>\n"));\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
        if(bUnder4way)\r
        {\r
                halbtc8192e1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
        if(bUnder4way)\r
        {\r
                halbtc8192e1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect(), return for wifi is under 4way<===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect(), return for wifi is under 4way<===\n"));\r
                return;\r
        }\r
                return;\r
        }\r
-\r
+       \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
        if(bScan || bLink || bRoam)\r
        {\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
        if(bScan || bLink || bRoam)\r
        {\r
-               halbtc8192e1ant_ActionWifiConnectedScan(pBtCoexist);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect(), return for wifi is under scan<===\n"));\r
+               if(bScan)       \r
+                       halbtc8192e1ant_ActionWifiConnectedScan(pBtCoexist);\r
+               else\r
+                       halbtc8192e1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect(), return for wifi is under scan<===\n"));\r
                return;\r
        }\r
 \r
                return;\r
        }\r
 \r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
+       \r
        // power save state\r
        // power save state\r
-       if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus && !pBtCoexist->btLinkInfo.bHidOnly)\r
-               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x0);\r
+       if(!bApEnable && BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus && !pBtCoexist->btLinkInfo.bHidOnly)\r
+       {\r
+               if(pBtCoexist->btLinkInfo.bA2dpOnly)    //A2DP\r
+                       {                       \r
+                       if(!bWifiBusy)\r
+                               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                               \r
+                       else //busy\r
+                       {\r
+                               if  (pCoexSta->nScanAPNum >= BT_8192E_1ANT_WIFI_NOISY_THRESH)  //no force LPS, no PS-TDMA, use pure TDMA\r
+                               {\r
+                                       halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                                                               \r
+                               }\r
+                               else\r
+                               {\r
+                                       halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);                                   \r
+                               }\r
+                       }\r
+               }\r
+               else if ((pCoexSta->bPanExist == FALSE) && (pCoexSta->bA2dpExist == FALSE) && (pCoexSta->bHidExist == FALSE))\r
+                       halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+               else\r
+                       halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+       }\r
        else\r
                halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        else\r
                halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);      \r
+       // tdma and coex table\r
        if(!bWifiBusy)\r
        {\r
                if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
        if(!bWifiBusy)\r
        {\r
                if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
@@ -2221,30 +2388,18 @@ halbtc8192e1ant_ActionWifiConnected(
                                BT_8192E_1ANT_WIFI_STATUS_CONNECTED_IDLE);\r
                }\r
                else\r
                                BT_8192E_1ANT_WIFI_STATUS_CONNECTED_IDLE);\r
                }\r
                else\r
-               {                               \r
-                       halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-                       halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+               {\r
                        halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                        halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
-                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+                       \r
+                       if ( (pCoexSta->highPriorityTx) + (pCoexSta->highPriorityRx) <= 60 )\r
+                               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+                       else\r
+                               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);           \r
                }\r
        }\r
        else\r
        {\r
                }\r
        }\r
        else\r
        {\r
-               if(BT_8192E_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
-               {                               \r
-                       halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-                       halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
-                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
-                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
-               }\r
-               else if(BT_8192E_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)\r
-               {                               \r
-                       halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-                       halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, FALSE, 0);                    \r
-                       halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
-                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
-               }\r
-               else if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
+               if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
                {\r
                        halbtc8192e1ant_ActionWifiConnectedBtAclBusy(pBtCoexist,\r
                                BT_8192E_1ANT_WIFI_STATUS_CONNECTED_BUSY);\r
                {\r
                        halbtc8192e1ant_ActionWifiConnectedBtAclBusy(pBtCoexist,\r
                                BT_8192E_1ANT_WIFI_STATUS_CONNECTED_BUSY);\r
@@ -2256,11 +2411,13 @@ halbtc8192e1ant_ActionWifiConnected(
                                BT_8192E_1ANT_WIFI_STATUS_CONNECTED_BUSY);\r
                }\r
                else \r
                                BT_8192E_1ANT_WIFI_STATUS_CONNECTED_BUSY);\r
                }\r
                else \r
-               {                               \r
-                       halbtc8192e1ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-                       halbtc8192e1ant_DacSwing(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+               {\r
                        halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                        halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
-                       halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+                               \r
+                       if ( (pCoexSta->highPriorityTx) + (pCoexSta->highPriorityRx) <= 60 )\r
+                               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+                       else\r
+                               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7); \r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -2270,65 +2427,62 @@ halbtc8192e1ant_RunSwCoexistMechanism(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BOOLEAN                         bWifiUnder5G=FALSE, bWifiBusy=FALSE, bWifiConnected=FALSE;\r
-       u1Byte                          btInfoOriginal=0, btRetryCnt=0;\r
        u1Byte                          algorithm=0;\r
 \r
        u1Byte                          algorithm=0;\r
 \r
-       return;\r
-\r
        algorithm = halbtc8192e1ant_ActionAlgorithm(pBtCoexist);\r
        pCoexDm->curAlgorithm = algorithm;\r
 \r
        if(halbtc8192e1ant_IsCommonAction(pBtCoexist))\r
        {\r
        algorithm = halbtc8192e1ant_ActionAlgorithm(pBtCoexist);\r
        pCoexDm->curAlgorithm = algorithm;\r
 \r
        if(halbtc8192e1ant_IsCommonAction(pBtCoexist))\r
        {\r
+\r
        }\r
        else\r
        {\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8192E_1ANT_COEX_ALGO_SCO:\r
        }\r
        else\r
        {\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8192E_1ANT_COEX_ALGO_SCO:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = SCO.\n"));\r
-                               halbtc8192e1ant_ActionSco(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = SCO.\n"));\r
+                               //halbtc8192e1ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_HID:\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID.\n"));\r
-                               halbtc8192e1ant_ActionHid(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID.\n"));\r
+                               //halbtc8192e1ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_A2DP:\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = A2DP.\n"));\r
-                               halbtc8192e1ant_ActionA2dp(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = A2DP.\n"));\r
+                               //halbtc8192e1ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_A2DP_PANHS:\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_A2DP_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = A2DP+PAN(HS).\n"));\r
-                               halbtc8192e1ant_ActionA2dpPanHs(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = A2DP+PAN(HS).\n"));\r
+                               //halbtc8192e1ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_PANEDR:\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN(EDR).\n"));\r
-                               halbtc8192e1ant_ActionPanEdr(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN(EDR).\n"));\r
+                               //halbtc8192e1ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_PANHS:\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HS mode.\n"));\r
-                               halbtc8192e1ant_ActionPanHs(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HS mode.\n"));\r
+                               //halbtc8192e1ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_PANEDR_A2DP:\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_PANEDR_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN+A2DP.\n"));\r
-                               halbtc8192e1ant_ActionPanEdrA2dp(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN+A2DP.\n"));\r
+                               //halbtc8192e1ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_PANEDR_HID:\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_PANEDR_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN(EDR)+HID.\n"));\r
-                               halbtc8192e1ant_ActionPanEdrHid(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN(EDR)+HID.\n"));\r
+                               //halbtc8192e1ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID+A2DP+PAN.\n"));\r
-                               halbtc8192e1ant_ActionHidA2dpPanEdr(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID+A2DP+PAN.\n"));\r
+                               //halbtc8192e1ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_HID_A2DP:\r
                                break;\r
                        case BT_8192E_1ANT_COEX_ALGO_HID_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID+A2DP.\n"));\r
-                               halbtc8192e1ant_ActionHidA2dp(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID+A2DP.\n"));\r
+                               //halbtc8192e1ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
                                break;\r
                        default:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = coexist All Off!!\n"));\r
-                               halbtc8192e1ant_CoexAllOff(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = coexist All Off!!\n"));\r
+                               //halbtc8192e1ant_CoexAllOff(pBtCoexist);\r
                                break;\r
                }\r
                pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
                                break;\r
                }\r
                pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
@@ -2340,76 +2494,139 @@ halbtc8192e1ant_RunCoexistMechanism(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE;\r
        BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE;\r
+       BOOLEAN bIncreaseScanDevNum=FALSE;\r
+       BOOLEAN bBtCtrlAggBufSize=FALSE;\r
+       BOOLEAN bMiracastPlusBt=FALSE;\r
+       u1Byte  aggBufSize=5;\r
+       u1Byte  wifiRssiState=BTC_RSSI_STATE_HIGH;\r
+       u4Byte  wifiLinkStatus=0;\r
+       u4Byte  numOfWifiLink=0;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
                return;\r
        }\r
 \r
        if(pBtCoexist->bStopCoexDm)\r
        {\r
                return;\r
        }\r
 \r
        if(pBtCoexist->bStopCoexDm)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Stop Coex DM <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Stop Coex DM <===\n"));\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is under IPS !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is under IPS !!!\n"));\r
                return;\r
        }\r
                return;\r
        }\r
-       \r
-       halbtc8192e1ant_RunSwCoexistMechanism(pBtCoexist);\r
 \r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
-       if(pCoexSta->bC2hBtInquiryPage)\r
+       if( (BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
+               (BT_8192E_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
+               (BT_8192E_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
        {\r
        {\r
-               halbtc8192e1ant_ActionBtInquiry(pBtCoexist);\r
-               return;\r
+               bIncreaseScanDevNum = TRUE;\r
        }\r
 \r
        }\r
 \r
-       // 1ss or 2ss\r
-       if(pBtLinkInfo->bScoExist)\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_INC_SCAN_DEV_NUM, &bIncreaseScanDevNum);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
+       numOfWifiLink = wifiLinkStatus>>16;\r
+       \r
+       if((numOfWifiLink>=2) || (wifiLinkStatus&WIFI_P2P_GO_CONNECTED))\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex],  Multi-Port numOfWifiLink = %d, wifiLinkStatus = 0x%x\n", numOfWifiLink,wifiLinkStatus) );\r
+\r
+               if(pBtLinkInfo->bBtLinkExist)\r
+               {\r
+                       halbtc8192e1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 1, 1, 0, 1);\r
+                       bMiracastPlusBt = TRUE;\r
+               }\r
+               else\r
+               {\r
+                       halbtc8192e1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);\r
+                       bMiracastPlusBt = FALSE;\r
+               }\r
+               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);\r
+               halbtc8192e1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, bBtCtrlAggBufSize, aggBufSize);\r
+\r
+               if ( (pBtLinkInfo->bA2dpExist) && (pCoexSta->bC2hBtInquiryPage) )\r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex],  BT Is Inquirying \n") );       \r
+                       halbtc8192e1ant_ActionBtInquiry(pBtCoexist);\r
+               }\r
+               else\r
+                       halbtc8192e1ant_ActionWifiMultiPort(pBtCoexist);\r
+               \r
+               return;\r
+       }\r
+       else\r
        {\r
        {\r
-               halbtc8192e1ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
+               bMiracastPlusBt = FALSE;\r
+               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);\r
        }\r
        }\r
-       else if(bBtHsOn)\r
+\r
+       if ( (pBtLinkInfo->bBtLinkExist) && (bWifiConnected) )\r
        {\r
        {\r
-               if(pBtLinkInfo->bHidOnly)\r
-                       halbtc8192e1ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 2);\r
+               halbtc8192e1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 1, 1, 0, 1); \r
+\r
+               if(pBtLinkInfo->bScoExist)\r
+                       halbtc8192e1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x5);\r
                else\r
                else\r
-                       halbtc8192e1ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
+                       halbtc8192e1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
+\r
+               halbtc8192e1ant_SwMechanism(pBtCoexist, TRUE);\r
+               halbtc8192e1ant_RunSwCoexistMechanism(pBtCoexist);  //just print debug message\r
        }\r
        else\r
        }\r
        else\r
-               halbtc8192e1ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 2);\r
-       \r
-       if(bBtHsOn)\r
+       {\r
+               halbtc8192e1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0); \r
+\r
+               halbtc8192e1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x5);\r
+\r
+               halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
+               halbtc8192e1ant_RunSwCoexistMechanism(pBtCoexist); ////just print debug message\r
+       }\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
+       if(pCoexSta->bC2hBtInquiryPage)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex],  BT Is Inquirying \n") );               \r
+               halbtc8192e1ant_ActionBtInquiry(pBtCoexist);\r
+               return;\r
+       }\r
+       else if(bBtHsOn)\r
        {\r
                halbtc8192e1ant_ActionHs(pBtCoexist);\r
                return;\r
        }\r
 \r
        {\r
                halbtc8192e1ant_ActionHs(pBtCoexist);\r
                return;\r
        }\r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+       \r
        if(!bWifiConnected)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
                \r
        if(!bWifiConnected)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
                \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is non connected-idle !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is non connected-idle !!!\n"));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
 \r
                if(bScan || bLink || bRoam)\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
 \r
                if(bScan || bLink || bRoam)\r
-                       halbtc8192e1ant_ActionWifiNotConnectedAssoAuthScan(pBtCoexist);\r
+               {\r
+                        if (bScan)     \r
+                               halbtc8192e1ant_ActionWifiNotConnectedScan(pBtCoexist); \r
+                        else\r
+                               halbtc8192e1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);     \r
+               }\r
                else\r
                        halbtc8192e1ant_ActionWifiNotConnected(pBtCoexist);\r
        }\r
                else\r
                        halbtc8192e1ant_ActionWifiNotConnected(pBtCoexist);\r
        }\r
-       else\r
+       else    // wifi LPS/Busy\r
        {\r
                halbtc8192e1ant_ActionWifiConnected(pBtCoexist);\r
        }\r
        {\r
                halbtc8192e1ant_ActionWifiConnected(pBtCoexist);\r
        }\r
@@ -2421,30 +2638,18 @@ halbtc8192e1ant_InitCoexDm(
        )\r
 {      \r
        // force to reset coex mechanism\r
        )\r
 {      \r
        // force to reset coex mechanism\r
-       halbtc8192e1ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);\r
-       halbtc8192e1ant_DecBtPwr(pBtCoexist, FORCE_EXEC, 0);\r
-\r
-       halbtc8192e1ant_SwitchSsType(pBtCoexist, FORCE_EXEC, 2);\r
 \r
 \r
-       halbtc8192e1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);\r
+       // sw all off\r
+       halbtc8192e1ant_SwMechanism(pBtCoexist, FALSE);\r
+       \r
+       //halbtc8192e1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);\r
        halbtc8192e1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);\r
        halbtc8192e1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);\r
-}\r
 \r
 \r
-//============================================================\r
-// work around function start with wa_halbtc8192e1ant_\r
-//============================================================\r
-//============================================================\r
-// extern function start with EXhalbtc8192e1ant_\r
-//============================================================\r
-VOID\r
-EXhalbtc8192e1ant_PowerOnSetting(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
-       )\r
-{\r
+       pCoexSta->popEventCnt = 0;\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-EXhalbtc8192e1ant_InitHwConfig(\r
+halbtc8192e1ant_InitHwConfig(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bWifiOnly\r
        )\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bWifiOnly\r
        )\r
@@ -2453,7 +2658,7 @@ EXhalbtc8192e1ant_InitHwConfig(
        u2Byte  u2Tmp=0;\r
        u1Byte  u1Tmp=0;\r
 \r
        u2Byte  u2Tmp=0;\r
        u1Byte  u1Tmp=0;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 1Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 1Ant Init HW Config!!\n"));\r
 \r
        // antenna sw ctrl to bt\r
        halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, TRUE, FALSE);\r
 \r
        // antenna sw ctrl to bt\r
        halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, TRUE, FALSE);\r
@@ -2496,16 +2701,122 @@ EXhalbtc8192e1ant_InitHwConfig(
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x7, u1Tmp);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x7, u1Tmp);\r
 }\r
 \r
+\r
+/*\r
+VOID\r
+halbtc8192e1ant_WifiOffHwCfg(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       // set wlan_act to low\r
+       //pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4);\r
+}\r
+*/\r
+\r
+//============================================================\r
+// work around function start with wa_halbtc8192e1ant_\r
+//============================================================\r
+//============================================================\r
+// extern function start with EXhalbtc8192e1ant_\r
+//============================================================\r
+VOID\r
+EXhalbtc8192e1ant_PowerOnSetting(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+#if 0\r
+       PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
+       u1Byte u1Tmp=0x0;\r
+       u2Byte u2Tmp=0x0;\r
+\r
+       pBtCoexist->bStopCoexDm = TRUE;\r
+\r
+       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x67, 0x20);\r
+\r
+       // enable BB, REG_SYS_FUNC_EN such that we can write 0x948 correctly.\r
+       u2Tmp = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0x2);\r
+       pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x2, u2Tmp|BIT0|BIT1);\r
+\r
+       // set GRAN_BT = 1\r
+       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x18);\r
+       // set WLAN_ACT = 0\r
+       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4);     \r
+\r
+       // \r
+       // S0 or S1 setting and Local register setting(By the setting fw can get ant number, S0/S1, ... info)\r
+       // Local setting bit define\r
+       //      BIT0: "0" for no antenna inverse; "1" for antenna inverse \r
+       //      BIT1: "0" for internal switch; "1" for external switch\r
+       //      BIT2: "0" for one antenna; "1" for two antenna\r
+       // NOTE: here default all internal switch and 1-antenna ==> BIT1=0 and BIT2=0\r
+       if(pBtCoexist->chipInterface == BTC_INTF_USB)\r
+       {\r
+               // fixed at S0 for USB interface\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);\r
+               \r
+               u1Tmp |= 0x1;   // antenna inverse\r
+               pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0xfe08, u1Tmp);\r
+\r
+               pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_AUX_PORT;\r
+       }\r
+       else\r
+       {\r
+               // for PCIE and SDIO interface, we check efuse 0xc3[6]\r
+               if(pBoardInfo->singleAntPath == 0)\r
+               {\r
+                       // set to S1\r
+                       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x280);\r
+                       pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT;\r
+               }\r
+               else if(pBoardInfo->singleAntPath == 1)\r
+               {\r
+                       // set to S0\r
+                       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);\r
+                       u1Tmp |= 0x1;   // antenna inverse\r
+                       pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_AUX_PORT;\r
+               }\r
+\r
+               if(pBtCoexist->chipInterface == BTC_INTF_PCI)\r
+               {\r
+                       pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x384, u1Tmp);\r
+               }\r
+               else if(pBtCoexist->chipInterface == BTC_INTF_SDIO)\r
+               {\r
+                       pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x60, u1Tmp);\r
+               }\r
+       }\r
+#endif\r
+}\r
+\r
+VOID\r
+EXhalbtc8192e1ant_PreLoadFirmware(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+}\r
+\r
+VOID\r
+EXhalbtc8192e1ant_InitHwConfig(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bWifiOnly\r
+       )\r
+{\r
+       halbtc8192e1ant_InitHwConfig(pBtCoexist, bWifiOnly);\r
+       pBtCoexist->bStopCoexDm = FALSE;\r
+}\r
+\r
 VOID\r
 EXhalbtc8192e1ant_InitCoexDm(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 EXhalbtc8192e1ant_InitCoexDm(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
 \r
        pBtCoexist->bStopCoexDm = FALSE;\r
        \r
        halbtc8192e1ant_InitCoexDm(pBtCoexist);\r
 \r
        pBtCoexist->bStopCoexDm = FALSE;\r
        \r
        halbtc8192e1ant_InitCoexDm(pBtCoexist);\r
+\r
+       halbtc8192e1ant_QueryBtInfo(pBtCoexist);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -2557,7 +2868,7 @@ EXhalbtc8192e1ant_DisplayCoexInfo(
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
-\r
+       \r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
@@ -2689,7 +3000,6 @@ EXhalbtc8192e1ant_DisplayCoexInfo(
        pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_COEX_STATISTICS);\r
 }\r
 \r
        pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_COEX_STATISTICS);\r
 }\r
 \r
-\r
 VOID\r
 EXhalbtc8192e1ant_IpsNotify(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 EXhalbtc8192e1ant_IpsNotify(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -2703,15 +3013,21 @@ EXhalbtc8192e1ant_IpsNotify(
 \r
        if(BTC_IPS_ENTER == type)\r
        {\r
 \r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                pCoexSta->bUnderIps = TRUE;\r
                pCoexSta->bUnderIps = TRUE;\r
-               halbtc8192e1ant_CoexAllOff(pBtCoexist);\r
-               halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
+               \r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+               halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);   \r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
                pCoexSta->bUnderIps = FALSE;\r
                pCoexSta->bUnderIps = FALSE;\r
+\r
+               halbtc8192e1ant_InitHwConfig(pBtCoexist, FALSE);\r
+               halbtc8192e1ant_InitCoexDm(pBtCoexist);\r
+               halbtc8192e1ant_QueryBtInfo(pBtCoexist);\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -2726,12 +3042,12 @@ EXhalbtc8192e1ant_LpsNotify(
 \r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 \r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
@@ -2742,14 +3058,59 @@ EXhalbtc8192e1ant_ScanNotify(
        IN      u1Byte                  type\r
        )\r
 {\r
        IN      u1Byte                  type\r
        )\r
 {\r
-       BOOLEAN                 bWifiConnected=FALSE, bBtHsOn=FALSE;    \r
+       BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE;\r
+       u4Byte  wifiLinkStatus=0;\r
+       u4Byte  numOfWifiLink=0;\r
+       BOOLEAN bBtCtrlAggBufSize=FALSE;\r
+       u1Byte  aggBufSize=5;\r
+\r
+       u1Byte u1Tmpa, u1Tmpb;\r
+       u4Byte u4Tmp;\r
 \r
        if(pBtCoexist->bManualControl ||\r
 \r
        if(pBtCoexist->bManualControl ||\r
-               pBtCoexist->bStopCoexDm ||\r
-               pBtCoexist->btInfo.bBtDisabled )\r
+               pBtCoexist->bStopCoexDm )\r
+               return;\r
+\r
+       if(BTC_SCAN_START == type)\r
+       {\r
+               pCoexSta->bWiFiIsHighPriTask = TRUE;\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
+\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
+               u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);\r
+               u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
+               u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67);\r
+                 \r
+\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 0x948=0x%x, 0x765=0x%x, 0x67=0x%x\n",\r
+                       u4Tmp,  u1Tmpa, u1Tmpb));\r
+       }\r
+       else\r
+       {\r
+               pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
+\r
+               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &pCoexSta->nScanAPNum);              \r
+       }       \r
+\r
+       if(pBtCoexist->btInfo.bBtDisabled)\r
                return;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
                return;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+\r
+       halbtc8192e1ant_QueryBtInfo(pBtCoexist);\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
+       numOfWifiLink = wifiLinkStatus>>16;\r
+       if(numOfWifiLink >= 2)\r
+       {\r
+               halbtc8192e1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);\r
+               halbtc8192e1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, bBtCtrlAggBufSize, aggBufSize);\r
+               halbtc8192e1ant_ActionWifiMultiPort(pBtCoexist);\r
+               return;\r
+       }\r
+       \r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
                halbtc8192e1ant_ActionBtInquiry(pBtCoexist);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
                halbtc8192e1ant_ActionBtInquiry(pBtCoexist);\r
@@ -2761,13 +3122,12 @@ EXhalbtc8192e1ant_ScanNotify(
                return;\r
        }\r
 \r
                return;\r
        }\r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
        if(BTC_SCAN_START == type)\r
        {       \r
        if(BTC_SCAN_START == type)\r
        {       \r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
-                       halbtc8192e1ant_ActionWifiNotConnectedAssoAuthScan(pBtCoexist);\r
+                       halbtc8192e1ant_ActionWifiNotConnectedScan(pBtCoexist);\r
                }\r
                else    // wifi is connected\r
                {\r
                }\r
                else    // wifi is connected\r
                {\r
@@ -2776,7 +3136,7 @@ EXhalbtc8192e1ant_ScanNotify(
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8192e1ant_ActionWifiNotConnected(pBtCoexist);\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8192e1ant_ActionWifiNotConnected(pBtCoexist);\r
@@ -2794,13 +3154,40 @@ EXhalbtc8192e1ant_ConnectNotify(
        IN      u1Byte                  type\r
        )\r
 {\r
        IN      u1Byte                  type\r
        )\r
 {\r
-       BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE;\r
+       BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE;    \r
+       u4Byte  wifiLinkStatus=0;\r
+       u4Byte  numOfWifiLink=0;\r
+       BOOLEAN bBtCtrlAggBufSize=FALSE;\r
+       u1Byte  aggBufSize=5;\r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
                pBtCoexist->btInfo.bBtDisabled )\r
                return;\r
 \r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
                pBtCoexist->btInfo.bBtDisabled )\r
                return;\r
 \r
+       if(BTC_ASSOCIATE_START == type)\r
+       {\r
+                pCoexSta->bWiFiIsHighPriTask = TRUE;\r
+                RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));   \r
+                pCoexDm->nArpCnt = 0;\r
+       }\r
+       else\r
+       {\r
+               pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));   \r
+               //pCoexDm->nArpCnt = 0;\r
+       }\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
+       numOfWifiLink = wifiLinkStatus>>16;\r
+       if(numOfWifiLink >= 2)\r
+       {\r
+               halbtc8192e1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);\r
+               halbtc8192e1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, bBtCtrlAggBufSize, aggBufSize);\r
+               halbtc8192e1ant_ActionWifiMultiPort(pBtCoexist);\r
+               return;\r
+       }\r
+\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
@@ -2815,12 +3202,12 @@ EXhalbtc8192e1ant_ConnectNotify(
 \r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 \r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
-               halbtc8192e1ant_ActionWifiNotConnectedAssoAuthScan(pBtCoexist);\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));          \r
+               halbtc8192e1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
                \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                if(!bWifiConnected) // non-connected scan\r
                \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                if(!bWifiConnected) // non-connected scan\r
@@ -2843,6 +3230,7 @@ EXhalbtc8192e1ant_MediaStatusNotify(
        u1Byte                  H2C_Parameter[3] ={0};\r
        u4Byte                  wifiBw;\r
        u1Byte                  wifiCentralChnl;\r
        u1Byte                  H2C_Parameter[3] ={0};\r
        u4Byte                  wifiBw;\r
        u1Byte                  wifiCentralChnl;\r
+       BOOLEAN                 bWifiUnderBMode = FALSE;\r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
@@ -2851,11 +3239,34 @@ EXhalbtc8192e1ant_MediaStatusNotify(
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
+\r
+               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode);\r
+\r
+               //Set CCK Tx/Rx high Pri except 11b mode\r
+               if (bWifiUnderBMode)\r
+               {\r
+                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cd, 0x00); //CCK Tx\r
+                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cf, 0x00); //CCK Rx\r
+               }\r
+               else\r
+               {\r
+                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cd, 0x10); //CCK Tx\r
+                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cf, 0x10); //CCK Rx\r
+               }\r
+               \r
+               pCoexDm->backupArfrCnt1 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x430);\r
+               pCoexDm->backupArfrCnt2 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x434);\r
+               pCoexDm->backupRetryLimit = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0x42a);\r
+               pCoexDm->backupAmpduMaxTime = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x456);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               pCoexDm->nArpCnt = 0;\r
+\r
+               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cd, 0x0); //CCK Tx\r
+               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cf, 0x0); //CCK Rx\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
@@ -2863,7 +3274,8 @@ EXhalbtc8192e1ant_MediaStatusNotify(
        if( (BTC_MEDIA_CONNECT == type) &&\r
                (wifiCentralChnl <= 14) )\r
        {\r
        if( (BTC_MEDIA_CONNECT == type) &&\r
                (wifiCentralChnl <= 14) )\r
        {\r
-               H2C_Parameter[0] = 0x1;\r
+               //H2C_Parameter[0] = 0x1;\r
+               H2C_Parameter[0] = 0x0;\r
                H2C_Parameter[1] = wifiCentralChnl;\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
                if(BTC_WIFI_BW_HT40 == wifiBw)\r
                H2C_Parameter[1] = wifiCentralChnl;\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
                if(BTC_WIFI_BW_HT40 == wifiBw)\r
@@ -2876,7 +3288,7 @@ EXhalbtc8192e1ant_MediaStatusNotify(
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x66=0x%x\n", \r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);\r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);\r
@@ -2889,12 +3301,60 @@ EXhalbtc8192e1ant_SpecialPacketNotify(
        )\r
 {\r
        BOOLEAN bBtHsOn=FALSE;\r
        )\r
 {\r
        BOOLEAN bBtHsOn=FALSE;\r
+       u4Byte  wifiLinkStatus=0;\r
+       u4Byte  numOfWifiLink=0;\r
+       BOOLEAN bBtCtrlAggBufSize=FALSE;\r
+       u1Byte  aggBufSize=5;\r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
                pBtCoexist->btInfo.bBtDisabled )\r
                return;\r
 \r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
                pBtCoexist->btInfo.bBtDisabled )\r
                return;\r
 \r
+       if( BTC_PACKET_DHCP == type || \r
+               BTC_PACKET_EAPOL == type ||\r
+               BTC_PACKET_ARP == type )\r
+       {\r
+               if(BTC_PACKET_ARP == type)\r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet ARP notify\n"));                \r
+\r
+                       pCoexDm->nArpCnt++;\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ARP Packet Count = %d\n", pCoexDm->nArpCnt));\r
+                       \r
+                       if(pCoexDm->nArpCnt >= 10) // if APR PKT > 10 after connect, do not go to ActionWifiConnectedSpecialPacket(pBtCoexist) \r
+                       {\r
+                               pCoexSta->bWiFiIsHighPriTask = FALSE;                                   \r
+                       }                       \r
+                       else\r
+                       {\r
+                               pCoexSta->bWiFiIsHighPriTask = TRUE;\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       pCoexSta->bWiFiIsHighPriTask = TRUE;\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet DHCP or EAPOL notify\n"));              \r
+               }\r
+       }\r
+       else\r
+       {\r
+               pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet [Type = %d] notify\n", type));\r
+       }\r
+\r
+       pCoexSta->specialPktPeriodCnt = 0;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
+       numOfWifiLink = wifiLinkStatus>>16;\r
+       if(numOfWifiLink >= 2)\r
+       {\r
+               halbtc8192e1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);\r
+               halbtc8192e1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, bBtCtrlAggBufSize, aggBufSize);\r
+               halbtc8192e1ant_ActionWifiMultiPort(pBtCoexist);\r
+               return;\r
+       }\r
+\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
@@ -2908,9 +3368,9 @@ EXhalbtc8192e1ant_SpecialPacketNotify(
        }\r
 \r
        if( BTC_PACKET_DHCP == type ||\r
        }\r
 \r
        if( BTC_PACKET_DHCP == type ||\r
-               BTC_PACKET_EAPOL == type )\r
+               BTC_PACKET_EAPOL == type || \r
+               ( (BTC_PACKET_ARP == type ) && (pCoexSta->bWiFiIsHighPriTask) ) )\r
        {\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], special Packet(%d) notify\n", type));\r
                halbtc8192e1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
        }\r
 }\r
                halbtc8192e1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
        }\r
 }\r
@@ -2925,11 +3385,9 @@ EXhalbtc8192e1ant_BtInfoNotify(
        PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        u1Byte                          btInfo=0;\r
        u1Byte                          i, rspSource=0;\r
        PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        u1Byte                          btInfo=0;\r
        u1Byte                          i, rspSource=0;\r
-       static u4Byte           setBtPsdMode=0;\r
-       BOOLEAN                         bBtBusy=FALSE;\r
        BOOLEAN                         bWifiConnected=FALSE;\r
        BOOLEAN                         bWifiConnected=FALSE;\r
-       BOOLEAN                         bBtCtrlAggBufSize=FALSE;\r
-\r
+       BOOLEAN                         bBtBusy=FALSE;\r
+       \r
        pCoexSta->bC2hBtInfoReqSent = FALSE;\r
 \r
        rspSource = tmpBuf[0]&0xf;\r
        pCoexSta->bC2hBtInfoReqSent = FALSE;\r
 \r
        rspSource = tmpBuf[0]&0xf;\r
@@ -2937,7 +3395,7 @@ EXhalbtc8192e1ant_BtInfoNotify(
                rspSource = BT_INFO_SRC_8192E_1ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
                rspSource = BT_INFO_SRC_8192E_1ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
@@ -2945,47 +3403,48 @@ EXhalbtc8192e1ant_BtInfoNotify(
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x]\n", tmpBuf[i]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x, ", tmpBuf[i]));\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
-       if(pBtCoexist->btInfo.bBtDisabled)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), return for BT is disabled <===\n"));\r
-               return;\r
-       }       \r
-\r
-       if(pBtCoexist->bManualControl)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), return for Manual CTRL<===\n"));\r
-               return;\r
-       }\r
-       if(pBtCoexist->bStopCoexDm)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), return for Coex STOPPED!!<===\n"));\r
-               return;\r
-       }\r
-\r
        if(BT_INFO_SRC_8192E_1ANT_WIFI_FW != rspSource)\r
        {\r
                pCoexSta->btRetryCnt =  // [3:0]\r
                        pCoexSta->btInfoC2h[rspSource][2]&0xf;\r
 \r
        if(BT_INFO_SRC_8192E_1ANT_WIFI_FW != rspSource)\r
        {\r
                pCoexSta->btRetryCnt =  // [3:0]\r
                        pCoexSta->btInfoC2h[rspSource][2]&0xf;\r
 \r
+               if (pCoexSta->btRetryCnt >= 1)\r
+                       pCoexSta->popEventCnt++;\r
+\r
+               if (pCoexSta->btInfoC2h[rspSource][2]&0x20)\r
+                       pCoexSta->bC2hBtPage = TRUE;\r
+               else\r
+                       pCoexSta->bC2hBtPage = FALSE;                   \r
+\r
                pCoexSta->btRssi =\r
                pCoexSta->btRssi =\r
-                       pCoexSta->btInfoC2h[rspSource][3]*2+10;\r
+                       pCoexSta->btInfoC2h[rspSource][3]*2-90;\r
+                       //pCoexSta->btInfoC2h[rspSource][3]*2+10;\r
 \r
                pCoexSta->btInfoExt = \r
                        pCoexSta->btInfoC2h[rspSource][4];\r
 \r
 \r
                pCoexSta->btInfoExt = \r
                        pCoexSta->btInfoC2h[rspSource][4];\r
 \r
+               pCoexSta->bBtTxRxMask = (pCoexSta->btInfoC2h[rspSource][2]&0x40);\r
+               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TX_RX_MASK, &pCoexSta->bBtTxRxMask);\r
+               if(!pCoexSta->bBtTxRxMask)\r
+               {\r
+                       /* BT into is responded by BT FW and BT RF REG 0x3C != 0x15 => Need to switch BT TRx Mask */                            \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x15\n"));\r
+                       pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15);\r
+               }\r
+               \r
                // Here we need to resend some wifi info to BT\r
                // because bt is reset and loss of the info.\r
                // Here we need to resend some wifi info to BT\r
                // because bt is reset and loss of the info.\r
-               if( (pCoexSta->btInfoExt & BIT1) )\r
+               if(pCoexSta->btInfoExt & BIT1)\r
                {                       \r
                {                       \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
@@ -2995,35 +3454,30 @@ EXhalbtc8192e1ant_BtInfoNotify(
                        {\r
                                EXhalbtc8192e1ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
                        }\r
                        {\r
                                EXhalbtc8192e1ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
                        }\r
-\r
-                       setBtPsdMode = 0;\r
                }\r
                }\r
-\r
-               // test-chip bt patch only rsp the status for BT_RSP, \r
-               // so temporary we consider the following only under BT_RSP\r
-               if(BT_INFO_SRC_8192E_1ANT_BT_RSP == rspSource)\r
+                               \r
+               if(pCoexSta->btInfoExt & BIT3)\r
                {\r
                {\r
-                       if( (pCoexSta->btInfoExt & BIT3) )\r
+                       if(!pBtCoexist->bManualControl && !pBtCoexist->bStopCoexDm)\r
                        {\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
                                halbtc8192e1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                        }\r
                                halbtc8192e1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                        }\r
-                       else\r
-                       {\r
-                               // BT already NOT ignore Wlan active, do nothing here.\r
-                       }\r
+               }\r
+               else\r
+               {\r
+                       // BT already NOT ignore Wlan active, do nothing here.\r
+               }\r
 #if(BT_AUTO_REPORT_ONLY_8192E_1ANT == 0)\r
 #if(BT_AUTO_REPORT_ONLY_8192E_1ANT == 0)\r
-                       if( (pCoexSta->btInfoExt & BIT4) )\r
-                       {\r
-                               // BT auto report already enabled, do nothing\r
-                       }\r
-                       else\r
-                       {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit4 check, set BT to enable Auto Report!!\n"));\r
-                               halbtc8192e1ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);\r
-                       }\r
-#endif\r
+               if( (pCoexSta->btInfoExt & BIT4) )\r
+               {\r
+                       // BT auto report already enabled, do nothing\r
+               }\r
+               else\r
+               {\r
+                       halbtc8192e1ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);\r
                }\r
                }\r
+#endif\r
        }\r
                \r
        // check BIT2 first ==> check if bt is under inquiry or page scan\r
        }\r
                \r
        // check BIT2 first ==> check if bt is under inquiry or page scan\r
@@ -3041,7 +3495,7 @@ EXhalbtc8192e1ant_BtInfoNotify(
                pCoexSta->bHidExist = FALSE;\r
                pCoexSta->bScoExist = FALSE;\r
        }\r
                pCoexSta->bHidExist = FALSE;\r
                pCoexSta->bScoExist = FALSE;\r
        }\r
-       else // connection exists \r
+       else    // connection exists\r
        {\r
                pCoexSta->bBtLinkExist = TRUE;\r
                if(btInfo & BT_INFO_8192E_1ANT_B_FTP)\r
        {\r
                pCoexSta->bBtLinkExist = TRUE;\r
                if(btInfo & BT_INFO_8192E_1ANT_B_FTP)\r
@@ -3063,75 +3517,86 @@ EXhalbtc8192e1ant_BtInfoNotify(
        }\r
 \r
        halbtc8192e1ant_UpdateBtLinkInfo(pBtCoexist);\r
        }\r
 \r
        halbtc8192e1ant_UpdateBtLinkInfo(pBtCoexist);\r
-\r
+       \r
+       btInfo = btInfo & 0x1f;  //mask profile bit for connect-ilde identification ( for CSR case: A2DP idle --> 0x41)\r
+       \r
        if(!(btInfo&BT_INFO_8192E_1ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8192E_1ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
        if(!(btInfo&BT_INFO_8192E_1ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8192E_1ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), bt non-connected idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
        }\r
        else if(btInfo == BT_INFO_8192E_1ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8192E_1ANT_BT_STATUS_CONNECTED_IDLE;\r
        }\r
        else if(btInfo == BT_INFO_8192E_1ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8192E_1ANT_BT_STATUS_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), bt connected-idle!!!\n"));\r
-       }               \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
+       }\r
        else if((btInfo&BT_INFO_8192E_1ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8192E_1ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8192E_1ANT_BT_STATUS_SCO_BUSY;\r
        else if((btInfo&BT_INFO_8192E_1ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8192E_1ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8192E_1ANT_BT_STATUS_SCO_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), bt sco busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
        }\r
        }\r
-       else if( (btInfo&BT_INFO_8192E_1ANT_B_ACL_BUSY) ||\r
-                       (btInfo&BT_INFO_8192E_1ANT_B_A2DP) ||\r
-                       (btInfo&BT_INFO_8192E_1ANT_B_FTP) )\r
+       else if(btInfo&BT_INFO_8192E_1ANT_B_ACL_BUSY)\r
        {\r
                if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY != pCoexDm->btStatus)\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->btStatus = BT_8192E_1ANT_BT_STATUS_ACL_BUSY;\r
        {\r
                if(BT_8192E_1ANT_BT_STATUS_ACL_BUSY != pCoexDm->btStatus)\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->btStatus = BT_8192E_1ANT_BT_STATUS_ACL_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), bt acl busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8192E_1ANT_BT_STATUS_MAX;\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8192E_1ANT_BT_STATUS_MAX;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), bt non-defined state!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
        }\r
 \r
        }\r
 \r
-       // ra mask check\r
-       if(pBtLinkInfo->bScoExist || pBtLinkInfo->bHidExist)\r
-       {\r
-               halbtc8192e1ant_UpdateRaMask(pBtCoexist, NORMAL_EXEC, BTC_RATE_DISABLE, 0x00000003);    // disable tx cck 1M/2M\r
-       }\r
-       else\r
-       {\r
-               halbtc8192e1ant_UpdateRaMask(pBtCoexist, NORMAL_EXEC, BTC_RATE_ENABLE, 0x00000003);     // enable tx cck 1M/2M\r
-       }\r
-       \r
        if( (BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
                (BT_8192E_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
                (BT_8192E_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
        if( (BT_8192E_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
                (BT_8192E_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
                (BT_8192E_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
-       {\r
                bBtBusy = TRUE;\r
                bBtBusy = TRUE;\r
-               if(pBtLinkInfo->bHidExist)\r
-                       bBtCtrlAggBufSize = TRUE;\r
-       }\r
        else\r
        else\r
-       {\r
                bBtBusy = FALSE;\r
                bBtBusy = FALSE;\r
-       }\r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);\r
 \r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);\r
 \r
-       //============================================\r
-       //      Aggregation related setting\r
-       //============================================\r
-       // if sco, reject AddBA\r
-       //pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT, &bRejApAggPkt);\r
+       halbtc8192e1ant_RunCoexistMechanism(pBtCoexist);\r
+}\r
 \r
 \r
-       // decide BT control aggregation buf size or not\r
-       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE, &bBtCtrlAggBufSize);\r
-       // real update aggregation setting\r
-       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);\r
-       //============================================\r
+VOID\r
+EXhalbtc8192e1ant_RfStatusNotify(\r
+       IN      PBTC_COEXIST                    pBtCoexist,\r
+       IN      u1Byte                                  type\r
+       )\r
+{\r
+       u4Byte  u4Tmp;\r
+       u1Byte  u1Tmpa,u1Tmpb, u1Tmpc;\r
+       \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RF Status notify\n"));\r
 \r
 \r
-       halbtc8192e1ant_RunCoexistMechanism(pBtCoexist);\r
+       if(BTC_RF_ON == type)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RF is turned ON!!\n"));\r
+               pBtCoexist->bStopCoexDm = FALSE;\r
+       }\r
+       else if(BTC_RF_OFF == type)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RF is turned OFF!!\n"));\r
+               \r
+               halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+               halbtc8192e1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
+               halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
+               \r
+               halbtc8192e1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+               pBtCoexist->bStopCoexDm = TRUE;\r
+\r
+               u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);\r
+               u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
+               u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67);\r
+               u1Tmpc = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);\r
+\r
+\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x67=0x%x, 0x76e=0x%x\n",\r
+                       u4Tmp,  u1Tmpa, u1Tmpb, u1Tmpc));\r
+\r
+       }\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -3139,16 +3604,19 @@ EXhalbtc8192e1ant_HaltNotify(
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
-\r
-       pBtCoexist->bStopCoexDm = TRUE;\r
-       halbtc8192e1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+       u4Byte  u4Tmp;\r
+       \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
        halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
-       \r
+       halbtc8192e1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
        halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
 \r
        halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
 \r
+       halbtc8192e1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+\r
        EXhalbtc8192e1ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
        EXhalbtc8192e1ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
+\r
+       pBtCoexist->bStopCoexDm = TRUE; \r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -3157,21 +3625,42 @@ EXhalbtc8192e1ant_PnpNotify(
        IN      u1Byte                          pnpState\r
        )\r
 {\r
        IN      u1Byte                          pnpState\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify\n"));\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
-               pBtCoexist->bStopCoexDm = TRUE;\r
-               halbtc8192e1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to SLEEP\n"));\r
+\r
                halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8192e1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
-               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 9);      \r
+               halbtc8192e1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+               halbtc8192e1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+               halbtc8192e1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
+\r
+               pBtCoexist->bStopCoexDm = TRUE;\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
-               \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
+               pBtCoexist->bStopCoexDm = FALSE;\r
+               halbtc8192e1ant_InitHwConfig(pBtCoexist, FALSE);\r
+               halbtc8192e1ant_InitCoexDm(pBtCoexist);\r
+               halbtc8192e1ant_QueryBtInfo(pBtCoexist);\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
+VOID\r
+EXhalbtc8192e1ant_CoexDmReset(\r
+       IN      PBTC_COEXIST                    pBtCoexist\r
+       )\r
+{\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], *****************Coex DM Reset*****************\n"));\r
+\r
+       halbtc8192e1ant_InitHwConfig(pBtCoexist, FALSE);\r
+       //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+       //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x2, 0xfffff, 0x0);\r
+       halbtc8192e1ant_InitCoexDm(pBtCoexist);\r
+}\r
+\r
 VOID\r
 EXhalbtc8192e1ant_Periodical(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
 VOID\r
 EXhalbtc8192e1ant_Periodical(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
@@ -3182,35 +3671,42 @@ EXhalbtc8192e1ant_Periodical(
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ==========================Periodical===========================\n"));\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n",\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n",\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n",\r
                        GLCoexVerDate8192e1Ant, GLCoexVer8192e1Ant, fwVer, btPatchVer, btPatchVer));\r
                        GLCoexVerDate8192e1Ant, GLCoexVer8192e1Ant, fwVer, btPatchVer, btPatchVer));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
        }\r
        }\r
+\r
 #if(BT_AUTO_REPORT_ONLY_8192E_1ANT == 0)\r
        halbtc8192e1ant_QueryBtInfo(pBtCoexist);\r
 #if(BT_AUTO_REPORT_ONLY_8192E_1ANT == 0)\r
        halbtc8192e1ant_QueryBtInfo(pBtCoexist);\r
-       halbtc8192e1ant_MonitorBtCtr(pBtCoexist);\r
        halbtc8192e1ant_MonitorBtEnableDisable(pBtCoexist);\r
 #else\r
        halbtc8192e1ant_MonitorBtEnableDisable(pBtCoexist);\r
 #else\r
+       halbtc8192e1ant_MonitorBtCtr(pBtCoexist);\r
+       halbtc8192e1ant_MonitorWiFiCtr(pBtCoexist);\r
+\r
        if( halbtc8192e1ant_IsWifiStatusChanged(pBtCoexist) ||\r
        if( halbtc8192e1ant_IsWifiStatusChanged(pBtCoexist) ||\r
-               pCoexDm->bAutoTdmaAdjust)\r
+               pCoexDm->bAutoTdmaAdjust )\r
        {\r
        {\r
-               halbtc8192e1ant_RunCoexistMechanism(pBtCoexist);\r
+\r
+                       halbtc8192e1ant_RunCoexistMechanism(pBtCoexist);        \r
        }\r
        }\r
+\r
+       pCoexSta->specialPktPeriodCnt++;\r
 #endif\r
 }\r
 \r
 #endif\r
 }\r
 \r
+\r
 VOID\r
 EXhalbtc8192e1ant_DbgControl(\r
        IN      PBTC_COEXIST                    pBtCoexist,\r
 VOID\r
 EXhalbtc8192e1ant_DbgControl(\r
        IN      PBTC_COEXIST                    pBtCoexist,\r
@@ -3237,5 +3733,6 @@ EXhalbtc8192e1ant_DbgControl(
                        break;\r
        }\r
 }\r
                        break;\r
        }\r
 }\r
+\r
 #endif\r
 \r
 #endif\r
 \r
index 8792ec8d381caac737828f429c8a46a6c8105f58..02914bcad506043f8ea48cd2c009f531be9c4da2 100755 (executable)
@@ -1,7 +1,7 @@
 //===========================================\r
 //===========================================\r
-// The following is for 8192E_1ANT BT Co-exist definition\r
+// The following is for 8192E 1ANT BT Co-exist definition\r
 //===========================================\r
 //===========================================\r
-#define        BT_AUTO_REPORT_ONLY_8192E_1ANT                          0\r
+#define        BT_AUTO_REPORT_ONLY_8192E_1ANT                          1\r
 \r
 #define        BT_INFO_8192E_1ANT_B_FTP                                                BIT7\r
 #define        BT_INFO_8192E_1ANT_B_A2DP                                       BIT6\r
 \r
 #define        BT_INFO_8192E_1ANT_B_FTP                                                BIT7\r
 #define        BT_INFO_8192E_1ANT_B_A2DP                                       BIT6\r
@@ -17,6 +17,8 @@
 \r
 #define        BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT             2\r
 \r
 \r
 #define        BTC_RSSI_COEX_THRESH_TOL_8192E_1ANT             2\r
 \r
+#define  BT_8192E_1ANT_WIFI_NOISY_THRESH                                                               30   //max: 255\r
+\r
 typedef enum _BT_INFO_SRC_8192E_1ANT{\r
        BT_INFO_SRC_8192E_1ANT_WIFI_FW                  = 0x0,\r
        BT_INFO_SRC_8192E_1ANT_BT_RSP                           = 0x1,\r
 typedef enum _BT_INFO_SRC_8192E_1ANT{\r
        BT_INFO_SRC_8192E_1ANT_WIFI_FW                  = 0x0,\r
        BT_INFO_SRC_8192E_1ANT_BT_RSP                           = 0x1,\r
@@ -61,10 +63,6 @@ typedef enum _BT_8192E_1ANT_COEX_ALGO{
 \r
 typedef struct _COEX_DM_8192E_1ANT{\r
        // fw mechanism\r
 \r
 typedef struct _COEX_DM_8192E_1ANT{\r
        // fw mechanism\r
-       u1Byte          preBtDecPwrLvl;\r
-       u1Byte          curBtDecPwrLvl;\r
-       u1Byte          preFwDacSwingLvl;\r
-       u1Byte          curFwDacSwingLvl;\r
        BOOLEAN         bCurIgnoreWlanAct;\r
        BOOLEAN         bPreIgnoreWlanAct;\r
        u1Byte          prePsTdma;\r
        BOOLEAN         bCurIgnoreWlanAct;\r
        BOOLEAN         bPreIgnoreWlanAct;\r
        u1Byte          prePsTdma;\r
@@ -84,10 +82,6 @@ typedef struct _COEX_DM_8192E_1ANT{
        // sw mechanism\r
        BOOLEAN         bPreLowPenaltyRa;\r
        BOOLEAN         bCurLowPenaltyRa;\r
        // sw mechanism\r
        BOOLEAN         bPreLowPenaltyRa;\r
        BOOLEAN         bCurLowPenaltyRa;\r
-       BOOLEAN         bPreDacSwingOn;\r
-       u4Byte          preDacSwingLvl;\r
-       BOOLEAN         bCurDacSwingOn;\r
-       u4Byte          curDacSwingLvl;\r
        u4Byte          preVal0x6c0;\r
        u4Byte          curVal0x6c0;\r
        u4Byte          preVal0x6c4;\r
        u4Byte          preVal0x6c0;\r
        u4Byte          curVal0x6c0;\r
        u4Byte          preVal0x6c4;\r
@@ -96,6 +90,12 @@ typedef struct _COEX_DM_8192E_1ANT{
        u4Byte          curVal0x6c8;\r
        u1Byte          preVal0x6cc;\r
        u1Byte          curVal0x6cc;\r
        u4Byte          curVal0x6c8;\r
        u1Byte          preVal0x6cc;\r
        u1Byte          curVal0x6cc;\r
+       BOOLEAN         bLimitedDig;\r
+\r
+       u4Byte          backupArfrCnt1; // Auto Rate Fallback Retry cnt\r
+       u4Byte          backupArfrCnt2; // Auto Rate Fallback Retry cnt\r
+       u2Byte          backupRetryLimit;\r
+       u1Byte          backupAmpduMaxTime;\r
 \r
        // algorithm related\r
        u1Byte          preAlgorithm;\r
 \r
        // algorithm related\r
        u1Byte          preAlgorithm;\r
@@ -103,11 +103,15 @@ typedef struct _COEX_DM_8192E_1ANT{
        u1Byte          btStatus;\r
        u1Byte          wifiChnlInfo[3];\r
 \r
        u1Byte          btStatus;\r
        u1Byte          wifiChnlInfo[3];\r
 \r
-       u1Byte          preSsType;\r
-       u1Byte          curSsType;\r
-\r
        u4Byte          preRaMask;\r
        u4Byte          curRaMask;\r
        u4Byte          preRaMask;\r
        u4Byte          curRaMask;\r
+       u1Byte          preArfrType;\r
+       u1Byte          curArfrType;\r
+       u1Byte          preRetryLimitType;\r
+       u1Byte          curRetryLimitType;\r
+       u1Byte          preAmpduTimeType;\r
+       u1Byte          curAmpduTimeType;\r
+       u4Byte          nArpCnt;\r
 \r
        u1Byte          errorCondition;\r
 } COEX_DM_8192E_1ANT, *PCOEX_DM_8192E_1ANT;\r
 \r
        u1Byte          errorCondition;\r
 } COEX_DM_8192E_1ANT, *PCOEX_DM_8192E_1ANT;\r
@@ -121,19 +125,41 @@ typedef struct _COEX_STA_8192E_1ANT{
 \r
        BOOLEAN                                 bUnderLps;\r
        BOOLEAN                                 bUnderIps;\r
 \r
        BOOLEAN                                 bUnderLps;\r
        BOOLEAN                                 bUnderIps;\r
+       u4Byte                                  specialPktPeriodCnt;\r
        u4Byte                                  highPriorityTx;\r
        u4Byte                                  highPriorityRx;\r
        u4Byte                                  lowPriorityTx;\r
        u4Byte                                  lowPriorityRx;\r
        u4Byte                                  highPriorityTx;\r
        u4Byte                                  highPriorityRx;\r
        u4Byte                                  lowPriorityTx;\r
        u4Byte                                  lowPriorityRx;\r
-       u1Byte                                  btRssi;\r
+       s1Byte                                  btRssi;\r
+       BOOLEAN                                 bBtTxRxMask;\r
        u1Byte                                  preBtRssiState;\r
        u1Byte                                  preWifiRssiState[4];\r
        BOOLEAN                                 bC2hBtInfoReqSent;\r
        u1Byte                                  btInfoC2h[BT_INFO_SRC_8192E_1ANT_MAX][10];\r
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8192E_1ANT_MAX];\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
        u1Byte                                  preBtRssiState;\r
        u1Byte                                  preWifiRssiState[4];\r
        BOOLEAN                                 bC2hBtInfoReqSent;\r
        u1Byte                                  btInfoC2h[BT_INFO_SRC_8192E_1ANT_MAX][10];\r
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8192E_1ANT_MAX];\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
+       BOOLEAN                                 bC2hBtPage;                             //Add for win8.1 page out issue\r
+       BOOLEAN                                 bWiFiIsHighPriTask;             //Add for win8.1 page out issue\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
+       u4Byte                                  popEventCnt;\r
+       u1Byte                                  nScanAPNum;\r
+\r
+       u4Byte                                  nCRCOK_CCK;\r
+       u4Byte                                  nCRCOK_11g;\r
+       u4Byte                                  nCRCOK_11n;\r
+       u4Byte                                  nCRCOK_11nAgg;\r
+       \r
+       u4Byte                                  nCRCErr_CCK;\r
+       u4Byte                                  nCRCErr_11g;\r
+       u4Byte                                  nCRCErr_11n;\r
+       u4Byte                                  nCRCErr_11nAgg; \r
+\r
+       BOOLEAN                                 bCCKLock;\r
+       BOOLEAN                                 bPreCCKLock;\r
+       u1Byte                                  nCoexTableType;\r
+\r
+       BOOLEAN                                 bForceLpsOn;\r
 }COEX_STA_8192E_1ANT, *PCOEX_STA_8192E_1ANT;\r
 \r
 //===========================================\r
 }COEX_STA_8192E_1ANT, *PCOEX_STA_8192E_1ANT;\r
 \r
 //===========================================\r
@@ -144,6 +170,10 @@ EXhalbtc8192e1ant_PowerOnSetting(
        IN      PBTC_COEXIST            pBtCoexist\r
        );\r
 VOID\r
        IN      PBTC_COEXIST            pBtCoexist\r
        );\r
 VOID\r
+EXhalbtc8192e1ant_PreLoadFirmware(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+VOID\r
 EXhalbtc8192e1ant_InitHwConfig(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bWifiOnly\r
 EXhalbtc8192e1ant_InitHwConfig(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bWifiOnly\r
@@ -189,6 +219,11 @@ EXhalbtc8192e1ant_BtInfoNotify(
        IN      u1Byte                  length\r
        );\r
 VOID\r
        IN      u1Byte                  length\r
        );\r
 VOID\r
+EXhalbtc8192e1ant_RfStatusNotify(\r
+       IN      PBTC_COEXIST                    pBtCoexist,\r
+       IN      u1Byte                                  type\r
+       );\r
+VOID\r
 EXhalbtc8192e1ant_HaltNotify(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        );\r
 EXhalbtc8192e1ant_HaltNotify(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        );\r
@@ -198,6 +233,10 @@ EXhalbtc8192e1ant_PnpNotify(
        IN      u1Byte                          pnpState\r
        );\r
 VOID\r
        IN      u1Byte                          pnpState\r
        );\r
 VOID\r
+EXhalbtc8192e1ant_CoexDmReset(\r
+       IN      PBTC_COEXIST                    pBtCoexist\r
+       );\r
+VOID\r
 EXhalbtc8192e1ant_Periodical(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        );\r
 EXhalbtc8192e1ant_Periodical(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        );\r
@@ -212,3 +251,4 @@ EXhalbtc8192e1ant_DbgControl(
        IN      u1Byte                          opLen,\r
        IN      pu1Byte                         pData\r
        );\r
        IN      u1Byte                          opLen,\r
        IN      pu1Byte                         pData\r
        );\r
+\r
index 8bde294c93f23a3e6e024fe7d1ab41b14f423312..798eec7439e9299c9f83db70b081784d7eaca5ed 100755 (executable)
@@ -27,8 +27,8 @@ const char *const GLBtInfoSrc8192e2Ant[]={
        "BT Info[bt auto report]",\r
 };\r
 \r
        "BT Info[bt auto report]",\r
 };\r
 \r
-u4Byte GLCoexVerDate8192e2Ant=20130912;\r
-u4Byte GLCoexVer8192e2Ant=0x35;\r
+u4Byte GLCoexVerDate8192e2Ant=20150105;\r
+u4Byte GLCoexVer8192e2Ant=0x40;\r
 \r
 //============================================================\r
 // local function proto type if needed\r
 \r
 //============================================================\r
 // local function proto type if needed\r
@@ -53,30 +53,24 @@ halbtc8192e2ant_BtRssiState(
                if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
                {\r
                if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi pre state=LOW\n"));\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                {\r
                        }\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi pre state=HIGH\n"));\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -84,57 +78,47 @@ halbtc8192e2ant_BtRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Rssi thresh error!!\n"));\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
                {\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi pre state=LOW\n"));\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_MEDIUM))\r
                {\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_MEDIUM))\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi pre state=MEDIUM\n"));\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                {\r
                        }\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi pre state=HIGH\n"));\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -166,12 +150,10 @@ halbtc8192e2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -179,12 +161,10 @@ halbtc8192e2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
+                               wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;                               \r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -192,7 +172,7 @@ halbtc8192e2ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -202,12 +182,10 @@ halbtc8192e2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -216,17 +194,14 @@ halbtc8192e2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -234,12 +209,10 @@ halbtc8192e2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -279,23 +252,23 @@ halbtc8192e2ant_MonitorBtEnableDisable(
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt all counters=0, %d times!!\n", \r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is disabled !!\n"));\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n", \r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
@@ -527,9 +500,9 @@ halbtc8192e2ant_MonitorBtCtr(
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
@@ -547,7 +520,7 @@ halbtc8192e2ant_QueryBtInfo(
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
@@ -561,6 +534,8 @@ halbtc8192e2ant_IsWifiStatusChanged(
        static BOOLEAN  bPreWifiBusy=FALSE, bPreUnder4way=FALSE, bPreBtHsOn=FALSE;\r
        BOOLEAN bWifiBusy=FALSE, bUnder4way=FALSE, bBtHsOn=FALSE;\r
        BOOLEAN bWifiConnected=FALSE;\r
        static BOOLEAN  bPreWifiBusy=FALSE, bPreUnder4way=FALSE, bPreBtHsOn=FALSE;\r
        BOOLEAN bWifiBusy=FALSE, bUnder4way=FALSE, bBtHsOn=FALSE;\r
        BOOLEAN bWifiConnected=FALSE;\r
+       u1Byte                  wifiRssiState=BTC_RSSI_STATE_HIGH;\r
+       \r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
@@ -584,6 +559,15 @@ halbtc8192e2ant_IsWifiStatusChanged(
                        bPreBtHsOn = bBtHsOn;\r
                        return TRUE;\r
                }\r
                        bPreBtHsOn = bBtHsOn;\r
                        return TRUE;\r
                }\r
+\r
+\r
+               wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist,3, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);    \r
+\r
+               if ( (BTC_RSSI_STATE_HIGH ==wifiRssiState ) ||  (BTC_RSSI_STATE_LOW ==wifiRssiState ))\r
+               {\r
+                       return TRUE;\r
+               }\r
+       \r
        }\r
 \r
        return FALSE;\r
        }\r
 \r
        return FALSE;\r
@@ -664,7 +648,7 @@ halbtc8192e2ant_ActionAlgorithm(
                \r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
                \r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No BT link exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No BT link exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
@@ -676,36 +660,37 @@ halbtc8192e2ant_ActionAlgorithm(
                numOfDiffProfile++;\r
        if(pBtLinkInfo->bA2dpExist)\r
                numOfDiffProfile++;\r
                numOfDiffProfile++;\r
        if(pBtLinkInfo->bA2dpExist)\r
                numOfDiffProfile++;\r
-       \r
+\r
+\r
        if(numOfDiffProfile == 1)\r
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
        if(numOfDiffProfile == 1)\r
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO only\n"));\r
                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID only\n"));\r
                                algorithm = BT_8192E_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8192E_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP only\n"));\r
                                algorithm = BT_8192E_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8192E_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(HS) only\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(EDR) only\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
@@ -717,24 +702,24 @@ halbtc8192e2ant_ActionAlgorithm(
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID\n"));\r
                                algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
                                algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(EDR)\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO_PAN;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO_PAN;\r
                                }\r
                        }\r
@@ -746,12 +731,12 @@ halbtc8192e2ant_ActionAlgorithm(
                        {\r
                                if(pStackInfo->numOfHid >= 2)\r
                                {\r
                        {\r
                                if(pStackInfo->numOfHid >= 2)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID*2 + A2DP\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID*2 + A2DP\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                                else\r
                                {                       \r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                                else\r
                                {                       \r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                        }\r
@@ -760,12 +745,12 @@ halbtc8192e2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_HID;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_HID;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -774,12 +759,12 @@ halbtc8192e2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
@@ -792,7 +777,7 @@ halbtc8192e2ant_ActionAlgorithm(
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
                                algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
                                algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
@@ -800,12 +785,12 @@ halbtc8192e2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO_PAN;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO_PAN;\r
                                }\r
                        }\r
@@ -814,12 +799,12 @@ halbtc8192e2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -832,12 +817,12 @@ halbtc8192e2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
@@ -853,12 +838,12 @@ halbtc8192e2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
 \r
                                }\r
                                else\r
                                {\r
 \r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -880,8 +865,8 @@ halbtc8192e2ant_SetFwDacSwingLevel(
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
 }\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
 }\r
@@ -896,7 +881,7 @@ halbtc8192e2ant_SetFwDecBtPwr(
        \r
        H2C_Parameter[0] = decBtPwrLvl;\r
 \r
        \r
        H2C_Parameter[0] = decBtPwrLvl;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power level = %d, FW write 0x62=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], decrease Bt Power level = %d, FW write 0x62=0x%x\n", \r
                decBtPwrLvl, H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);    \r
                decBtPwrLvl, H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);    \r
@@ -909,13 +894,13 @@ halbtc8192e2ant_DecBtPwr(
        IN      u1Byte                          decBtPwrLvl\r
        )\r
 {\r
        IN      u1Byte                          decBtPwrLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power level = %d\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s Dec BT power level = %d\n",  \r
                (bForceExec? "force to":""), decBtPwrLvl));\r
        pCoexDm->curBtDecPwrLvl = decBtPwrLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), decBtPwrLvl));\r
        pCoexDm->curBtDecPwrLvl = decBtPwrLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preBtDecPwrLvl=%d, curBtDecPwrLvl=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], preBtDecPwrLvl=%d, curBtDecPwrLvl=%d\n", \r
                        pCoexDm->preBtDecPwrLvl, pCoexDm->curBtDecPwrLvl));\r
 #if 0  // work around, avoid h2c command fail.\r
                if(pCoexDm->preBtDecPwrLvl == pCoexDm->curBtDecPwrLvl) \r
                        pCoexDm->preBtDecPwrLvl, pCoexDm->curBtDecPwrLvl));\r
 #if 0  // work around, avoid h2c command fail.\r
                if(pCoexDm->preBtDecPwrLvl == pCoexDm->curBtDecPwrLvl) \r
@@ -942,7 +927,7 @@ halbtc8192e2ant_SetBtAutoReport(
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
@@ -955,13 +940,13 @@ halbtc8192e2ant_BtAutoReport(
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s BT Auto report = %s\n",  \r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
                        pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
 \r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
 \r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
@@ -979,13 +964,13 @@ halbtc8192e2ant_FwDacSwingLvl(
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n", \r
                        pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
 \r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
                        pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
 \r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
@@ -1006,7 +991,7 @@ halbtc8192e2ant_SetSwRfRxLpfCorner(
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
        }\r
        else\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
        }\r
        else\r
@@ -1015,7 +1000,7 @@ halbtc8192e2ant_SetSwRfRxLpfCorner(
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
@@ -1028,13 +1013,13 @@ halbtc8192e2ant_RfShrink(
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
                        pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
 \r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
 \r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
@@ -1064,7 +1049,7 @@ halbtc8192e2ant_SetSwPenaltyTxRateAdaptive(
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
                (bLowPenaltyRa? "ON!!":"OFF!!")) );\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
                (bLowPenaltyRa? "ON!!":"OFF!!")) );\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
@@ -1078,13 +1063,13 @@ halbtc8192e2ant_LowPenaltyRa(
        )\r
 {\r
        //return;\r
        )\r
 {\r
        //return;\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
                        pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
 \r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
 \r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
@@ -1103,7 +1088,7 @@ halbtc8192e2ant_SetDacSwingReg(
 {\r
        u1Byte  val=(u1Byte)level;\r
 \r
 {\r
        u1Byte  val=(u1Byte)level;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x883, 0x3e, val);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x883, 0x3e, val);\r
 }\r
 \r
@@ -1133,14 +1118,14 @@ halbtc8192e2ant_DacSwing(
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
                        pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
                        pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
 \r
                        pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
                        pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
 \r
@@ -1163,12 +1148,12 @@ halbtc8192e2ant_SetAdcBackOff(
 {\r
        if(bAdcBackOff)\r
        {\r
 {\r
        if(bAdcBackOff)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level On!\n"));\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x3);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x3);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level Off!\n"));\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x1);\r
        }\r
 }\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x1);\r
        }\r
 }\r
@@ -1180,13 +1165,13 @@ halbtc8192e2ant_AdcBackOff(
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
                        pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
 \r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
 \r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
@@ -1208,7 +1193,7 @@ halbtc8192e2ant_SetAgcTable(
        //=================BB AGC Gain Table\r
        if(bAgcTableEn)\r
        {\r
        //=================BB AGC Gain Table\r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB Agc Table On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB Agc Table On!\n"));\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x0a1A0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x091B0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x081C0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x0a1A0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x091B0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x081C0001);\r
@@ -1218,7 +1203,7 @@ halbtc8192e2ant_SetAgcTable(
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB Agc Table Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB Agc Table Off!\n"));\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xaa1A0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa91B0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa81C0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xaa1A0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa91B0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa81C0001);\r
@@ -1232,13 +1217,13 @@ halbtc8192e2ant_SetAgcTable(
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
        if(bAgcTableEn)\r
        {\r
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table On!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38fff);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38ffe);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38fff);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38ffe);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table Off!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x380c3);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x28ce6);\r
        }\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x380c3);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x28ce6);\r
        }\r
@@ -1247,13 +1232,13 @@ halbtc8192e2ant_SetAgcTable(
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x1);\r
        if(bAgcTableEn)\r
        {\r
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x1);\r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table On!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38fff);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38ffe);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38fff);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38ffe);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table Off!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x380c3);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x28ce6);\r
        }\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x380c3);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x28ce6);\r
        }\r
@@ -1276,13 +1261,13 @@ halbtc8192e2ant_AgcTable(
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s %s Agc Table\n",  \r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
                        pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
 \r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
 \r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
@@ -1302,16 +1287,16 @@ halbtc8192e2ant_SetCoexTable(
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -1325,7 +1310,7 @@ halbtc8192e2ant_CoexTable(
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
@@ -1334,9 +1319,9 @@ halbtc8192e2ant_CoexTable(
 \r
        if(!bForceExec)\r
        {\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
                        pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
                        pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
                        pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
        \r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
        \r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
@@ -1360,6 +1345,8 @@ halbtc8192e2ant_CoexTableWithType(
        IN      u1Byte                          type\r
        )\r
 {\r
        IN      u1Byte                          type\r
        )\r
 {\r
+       pCoexSta->nCoexTableType = type;\r
+       \r
        switch(type)\r
        {\r
                case 0:\r
        switch(type)\r
        {\r
                case 0:\r
@@ -1377,7 +1364,21 @@ halbtc8192e2ant_CoexTableWithType(
                case 4:\r
                        halbtc8192e2ant_CoexTable(pBtCoexist, bForceExec, 0xdfffdfff, 0x5ffb5ffb, 0xffffff, 0x3);\r
                        break;\r
                case 4:\r
                        halbtc8192e2ant_CoexTable(pBtCoexist, bForceExec, 0xdfffdfff, 0x5ffb5ffb, 0xffffff, 0x3);\r
                        break;\r
-\r
+               case 5:\r
+                       halbtc8192e2ant_CoexTable(pBtCoexist, bForceExec, 0x5ddd5ddd, 0x5fdb5fdb, 0xffffff, 0x3);\r
+                       break;\r
+               case 6:\r
+                       halbtc8192e2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5a5a5a5a, 0xffffff, 0x3);\r
+                       break;\r
+               case 7:\r
+                       if(pCoexSta->nScanAPNum <= NOISY_AP_NUM_THRESH)\r
+                               halbtc8192e2ant_CoexTable(pBtCoexist, bForceExec, 0xffffffff, 0xfafafafa, 0xffffff, 0x3);\r
+                       else\r
+                               halbtc8192e2ant_CoexTable(pBtCoexist, bForceExec, 0xffffffff, 0x5a5a5a5a, 0xffffff, 0x3);\r
+                       break;\r
+               case 8:\r
+                       halbtc8192e2ant_CoexTable(pBtCoexist, bForceExec, 0x5f5f5f5f, 0x5a5a5a5a, 0xffffff, 0x3);\r
+                       break;\r
                default:\r
                        break;\r
        }\r
                default:\r
                        break;\r
        }\r
@@ -1396,12 +1397,13 @@ halbtc8192e2ant_SetFwIgnoreWlanAct(
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
 }\r
 \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
 }\r
 \r
+\r
 VOID\r
 halbtc8192e2ant_IgnoreWlanAct(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8192e2ant_IgnoreWlanAct(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -1409,13 +1411,13 @@ halbtc8192e2ant_IgnoreWlanAct(
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
                        pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
 \r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
 \r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
@@ -1426,6 +1428,59 @@ halbtc8192e2ant_IgnoreWlanAct(
        pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;\r
 }\r
 \r
        pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;\r
 }\r
 \r
+\r
+VOID\r
+halbtc8192e2ant_SetLpsRpwm(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                  lpsVal,\r
+       IN      u1Byte                  rpwmVal\r
+       )\r
+{\r
+       u1Byte  lps=lpsVal;\r
+       u1Byte  rpwm=rpwmVal;\r
+       \r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_LPS_VAL, &lps);\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RPWM_VAL, &rpwm);\r
+}\r
+\r
+\r
+VOID\r
+halbtc8192e2ant_LpsRpwm(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                 bForceExec,\r
+       IN      u1Byte                  lpsVal,\r
+       IN      u1Byte                  rpwmVal\r
+       )\r
+{\r
+       BOOLEAN bForceExecPwrCmd=FALSE;\r
+       \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
+               (bForceExec? "force to":""), lpsVal, rpwmVal));\r
+       pCoexDm->curLps = lpsVal;\r
+       pCoexDm->curRpwm = rpwmVal;\r
+\r
+       if(!bForceExec)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], preLps/curLps=0x%x/0x%x, preRpwm/curRpwm=0x%x/0x%x!!\n", \r
+                       pCoexDm->preLps, pCoexDm->curLps, pCoexDm->preRpwm, pCoexDm->curRpwm));\r
+\r
+               if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
+                       (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], LPS-RPWM_Last=0x%x , LPS-RPWM_Now=0x%x!!\n", \r
+                                pCoexDm->preRpwm, pCoexDm->curRpwm));\r
+\r
+                       return;\r
+               }\r
+       }\r
+       halbtc8192e2ant_SetLpsRpwm(pBtCoexist, lpsVal, rpwmVal);\r
+\r
+       pCoexDm->preLps = pCoexDm->curLps;\r
+       pCoexDm->preRpwm = pCoexDm->curRpwm;\r
+}\r
+\r
+\r
+\r
 VOID\r
 halbtc8192e2ant_SetFwPstdma(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8192e2ant_SetFwPstdma(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -1437,26 +1492,44 @@ halbtc8192e2ant_SetFwPstdma(
        )\r
 {\r
        u1Byte                  H2C_Parameter[5] ={0};\r
        )\r
 {\r
        u1Byte                  H2C_Parameter[5] ={0};\r
+       u1Byte                  realByte1=byte1, realByte5=byte5;\r
+       BOOLEAN                 bApEnable=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+\r
+       if(bApEnable)\r
+       {\r
+               if(byte1&BIT4 && !(byte1&BIT5))\r
+               {                       \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], FW for 1Ant AP mode\n"));\r
+                       realByte1 &= ~BIT4;\r
+                       realByte1 |= BIT5;\r
+\r
+                       realByte5 |= BIT5;\r
+                       realByte5 &= ~BIT6;\r
+               }\r
+       }\r
 \r
 \r
-       H2C_Parameter[0] = byte1;       \r
+       H2C_Parameter[0] = realByte1;   \r
        H2C_Parameter[1] = byte2;       \r
        H2C_Parameter[2] = byte3;\r
        H2C_Parameter[3] = byte4;\r
        H2C_Parameter[1] = byte2;       \r
        H2C_Parameter[2] = byte3;\r
        H2C_Parameter[3] = byte4;\r
-       H2C_Parameter[4] = byte5;\r
+       H2C_Parameter[4] = realByte5;\r
 \r
 \r
-       pCoexDm->psTdmaPara[0] = byte1;\r
+       pCoexDm->psTdmaPara[0] = realByte1;\r
        pCoexDm->psTdmaPara[1] = byte2;\r
        pCoexDm->psTdmaPara[2] = byte3;\r
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[1] = byte2;\r
        pCoexDm->psTdmaPara[2] = byte3;\r
        pCoexDm->psTdmaPara[3] = byte4;\r
-       pCoexDm->psTdmaPara[4] = byte5;\r
+       pCoexDm->psTdmaPara[4] = realByte5;\r
        \r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], PS-TDMA H2C cmd =0x%x%08x\n", \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);\r
 }\r
 \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);\r
 }\r
 \r
+\r
 VOID\r
 halbtc8192e2ant_SwMechanism1(\r
        IN      PBTC_COEXIST    pBtCoexist,     \r
 VOID\r
 halbtc8192e2ant_SwMechanism1(\r
        IN      PBTC_COEXIST    pBtCoexist,     \r
@@ -1561,75 +1634,103 @@ halbtc8192e2ant_PsTdma(
 {\r
        BOOLEAN                 bTurnOnByCnt=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0;\r
 {\r
        BOOLEAN                 bTurnOnByCnt=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0;\r
+       s1Byte                  nWiFiDurationAdjust = 0x0;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
                (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
                        pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
                        pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
                        pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
 \r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
        }       \r
                        pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
 \r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
        }       \r
+\r
+       if  (pCoexSta->nScanAPNum >= 40)\r
+               nWiFiDurationAdjust = -15;      \r
+       else if  (pCoexSta->nScanAPNum >= 20)\r
+               nWiFiDurationAdjust = -10;      \r
+\r
+/*     \r
+       if (!pCoexSta->bForceLpsOn)  //only for A2DP-only case 1/2/9/11 while wifi noisy threshold > 30\r
+       {\r
+               psTdmaByte0Val = 0x61;  //no null-pkt\r
+               psTdmaByte3Val = 0x11; // no tx-pause at BT-slot\r
+               psTdmaByte4Val = 0x10; // 0x778 = d/1 toggle\r
+       }\r
+\r
+       \r
+       if (  (type == 3) || (type == 13) || (type == 14) )\r
+       {\r
+               psTdmaByte4Val = psTdmaByte4Val & 0xbf;  //no dynamic slot for multi-profile\r
+       \r
+               if (!bWifiBusy)\r
+                psTdmaByte4Val = psTdmaByte4Val | 0x1;  //0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts)\r
+       }\r
+       \r
+       if (pBtLinkInfo->bSlaveRole == TRUE)\r
+               psTdmaByte4Val = psTdmaByte4Val | 0x1;  //0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts)\r
+       \r
+*/\r
        if(bTurnOn)\r
        {\r
                switch(type)\r
                {\r
                        case 1:\r
        if(bTurnOn)\r
        {\r
                switch(type)\r
                {\r
                        case 1:\r
-                       default:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
+                       default:        //d1,wb\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0x11, 0x10);\r
                                break;\r
                        case 2:\r
                                break;\r
                        case 2:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x32, 0x03, 0x11, 0x10);\r
                                break;\r
                        case 3:\r
                                break;\r
                        case 3:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x28, 0x03, 0x11, 0x10);\r
                                break;\r
                        case 4:\r
                                break;\r
                        case 4:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0xf1, 0x90);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1e, 0x03, 0x11, 0x10);\r
                                break;\r
                                break;\r
-                       case 5:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
+                       case 5:         //d1,pb,TXpause\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x63, 0x3c, 0x03, 0x90, 0x10);\r
                                break;\r
                        case 6:\r
                                break;\r
                        case 6:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x63, 0x32, 0x03, 0x90, 0x10);\r
                                break;\r
                        case 7:\r
                                break;\r
                        case 7:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x63, 0x28, 0x03, 0x90, 0x10);\r
                                break;\r
                                break;\r
-                       case 8: \r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70, 0x90);\r
+                       case 8: \r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x63, 0x1e, 0x03, 0x90, 0x10);\r
                                break;\r
                                break;\r
-                       case 9: \r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x10);\r
+                       case 9:         //d1,bb\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0x31, 0x10);\r
                                break;\r
                        case 10:        \r
                                break;\r
                        case 10:        \r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x10);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x32, 0x03, 0x31, 0x10);\r
                                break;\r
                        case 11:        \r
                                break;\r
                        case 11:        \r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x10);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x28, 0x03, 0x31, 0x10);\r
                                break;\r
                        case 12:\r
                                break;\r
                        case 12:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0xf1, 0x10);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1e, 0x03, 0x31, 0x10);\r
                                break;\r
                                break;\r
-                       case 13:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe0, 0x10);\r
+                       case 13:        //d1,bb,TXpause\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0x30, 0x10);\r
                                break;\r
                        case 14:\r
                                break;\r
                        case 14:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe0, 0x10);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x32, 0x03, 0x30, 0x10);\r
                                break;\r
                        case 15:\r
                                break;\r
                        case 15:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf0, 0x10);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x28, 0x03, 0x30, 0x10);\r
                                break;\r
                        case 16:\r
                                break;\r
                        case 16:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x3, 0xf0, 0x10);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1e, 0x03, 0x30, 0x10);\r
                                break;\r
                        case 17:\r
                                halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x61, 0x20, 0x03, 0x10, 0x10);\r
                                break;\r
                        case 17:\r
                                halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x61, 0x20, 0x03, 0x10, 0x10);\r
@@ -1644,11 +1745,35 @@ halbtc8192e2ant_PsTdma(
                                halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);\r
                                break;\r
                        case 21:\r
                                halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);\r
                                break;\r
                        case 21:\r
-                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x61, 0x35, 0x03, 0x11, 0x11);\r
                                break;  \r
                        case 71:\r
                                halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
                                break;\r
                                break;  \r
                        case 71:\r
                                halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
                                break;\r
+\r
+                       // following cases is for wifi rssi low // bad antenna isolation, started from 81\r
+                       case 80:\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x53, 0x3c, 0x3, 0x90, 0x50);\r
+                               break;\r
+                       case 81:\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x53, 0x3a+nWiFiDurationAdjust, 0x3, 0x90, 0x50);\r
+                               break;\r
+                       case 82:\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x53, 0x30+nWiFiDurationAdjust, 0x03, 0x90, 0x50);\r
+                               break;\r
+                       case 83:\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x53, 0x21, 0x03, 0x90, 0x50);\r
+                               break;\r
+                       case 84:\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x53, 0x15, 0x3, 0x90, 0x50);\r
+                               break;\r
+                       case 85:\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x53, 0x1d, 0x1d, 0x80, 0x50);\r
+                               break;\r
+                       case 86:\r
+                               halbtc8192e2ant_SetFwPstdma(pBtCoexist, 0x53, 0x15, 0x15, 0x80, 0x50);\r
+                               break;\r
+\r
                }\r
        }\r
        else\r
                }\r
        }\r
        else\r
@@ -1684,7 +1809,7 @@ halbtc8192e2ant_SetSwitchSsType(
        u1Byte  mimoPs=BTC_MIMO_PS_DYNAMIC;\r
        u4Byte  disRaMask=0x0;\r
 \r
        u1Byte  mimoPs=BTC_MIMO_PS_DYNAMIC;\r
        u4Byte  disRaMask=0x0;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], REAL set SS Type = %d\n", ssType));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], REAL set SS Type = %d\n", ssType));\r
        \r
        disRaMask = halbtc8192e2ant_DecideRaMask(pBtCoexist, ssType, pCoexDm->curRaMaskType);\r
        halbtc8192e2ant_UpdateRaMask(pBtCoexist, FORCE_EXEC, disRaMask);\r
        \r
        disRaMask = halbtc8192e2ant_DecideRaMask(pBtCoexist, ssType, pCoexDm->curRaMaskType);\r
        halbtc8192e2ant_UpdateRaMask(pBtCoexist, FORCE_EXEC, disRaMask);\r
@@ -1697,7 +1822,6 @@ halbtc8192e2ant_SetSwitchSsType(
                pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xd04, 0x1);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x90c, 0x81111111);\r
                // switch cck patch\r
                pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xd04, 0x1);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x90c, 0x81111111);\r
                // switch cck patch\r
-               //Jenyu suggest to remove 0xe77 this line for tx issue\r
                //pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xe77, 0x4, 0x1);\r
                //pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xa07, 0x81);\r
                mimoPs=BTC_MIMO_PS_STATIC;\r
                //pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xe77, 0x4, 0x1);\r
                //pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xa07, 0x81);\r
                mimoPs=BTC_MIMO_PS_STATIC;\r
@@ -1708,7 +1832,7 @@ halbtc8192e2ant_SetSwitchSsType(
                pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xc04, 0x33);\r
                pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xd04, 0x3);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x90c, 0x81121313);\r
                pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xc04, 0x33);\r
                pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xd04, 0x3);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x90c, 0x81121313);\r
-                //Jenyu suggest to remove 0xe77 this line for tx issue\r
+               // remove, if 0xe77[2]=0x0 then CCK will fail, advised by Jenyu\r
                //pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xe77, 0x4, 0x0);\r
                //pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xa07, 0x41);\r
                mimoPs=BTC_MIMO_PS_DYNAMIC;\r
                //pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xe77, 0x4, 0x0);\r
                //pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xa07, 0x41);\r
                mimoPs=BTC_MIMO_PS_DYNAMIC;\r
@@ -1724,7 +1848,7 @@ halbtc8192e2ant_SwitchSsType(
        IN      u1Byte                          newSsType\r
        )\r
 {\r
        IN      u1Byte                          newSsType\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], %s Switch SS Type = %d\n",  \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], %s Switch SS Type = %d\n",  \r
                (bForceExec? "force to":""), newSsType));\r
        pCoexDm->curSsType = newSsType;\r
 \r
                (bForceExec? "force to":""), newSsType));\r
        pCoexDm->curSsType = newSsType;\r
 \r
@@ -1738,12 +1862,89 @@ halbtc8192e2ant_SwitchSsType(
        pCoexDm->preSsType = pCoexDm->curSsType;\r
 }\r
 \r
        pCoexDm->preSsType = pCoexDm->curSsType;\r
 }\r
 \r
+VOID\r
+halbtc8192e2ant_PsTdmaCheckForPowerSaveState(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                 bNewPsState\r
+       )\r
+{\r
+       u1Byte  lpsMode=0x0;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_LPS_MODE, &lpsMode);\r
+       \r
+       if(lpsMode)     // already under LPS state\r
+       {\r
+               if(bNewPsState)         \r
+               {\r
+                       // keep state under LPS, do nothing.\r
+               }\r
+               else\r
+               {\r
+                       // will leave LPS state, turn off psTdma first\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+               }\r
+       }\r
+       else                                            // NO PS state\r
+       {\r
+               if(bNewPsState)\r
+               {\r
+                       // will enter LPS state, turn off psTdma first\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+               }\r
+               else\r
+               {\r
+                       // keep state under NO PS state, do nothing.\r
+               }\r
+       }\r
+}\r
+\r
+VOID\r
+halbtc8192e2ant_PowerSaveState(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                          psType,\r
+       IN      u1Byte                          lpsVal,\r
+       IN      u1Byte                          rpwmVal\r
+       )\r
+{\r
+       BOOLEAN         bLowPwrDisable=FALSE;\r
+       \r
+       switch(psType)\r
+       {\r
+               case BTC_PS_WIFI_NATIVE:\r
+                       // recover to original 32k low power setting\r
+                       bLowPwrDisable = TRUE;\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = FALSE;\r
+                       break;\r
+               case BTC_PS_LPS_ON:\r
+                       halbtc8192e2ant_PsTdmaCheckForPowerSaveState(pBtCoexist, TRUE);\r
+                       halbtc8192e2ant_LpsRpwm(pBtCoexist, NORMAL_EXEC, lpsVal, rpwmVal);                      \r
+                       // when coex force to enter LPS, do not enter 32k low power.\r
+                       bLowPwrDisable = TRUE;\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+                       // power save must executed before psTdma.\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_ENTER_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = TRUE;\r
+                       break;\r
+               case BTC_PS_LPS_OFF:\r
+                       halbtc8192e2ant_PsTdmaCheckForPowerSaveState(pBtCoexist, FALSE);\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = FALSE;\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+}\r
+\r
+\r
 VOID\r
 halbtc8192e2ant_CoexAllOff(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        // fw all off\r
 VOID\r
 halbtc8192e2ant_CoexAllOff(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        // fw all off\r
+    halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
        halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
        halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
@@ -1763,6 +1964,7 @@ halbtc8192e2ant_InitCoexDm(
 {      \r
        // force to reset coex mechanism\r
        \r
 {      \r
        // force to reset coex mechanism\r
        \r
+       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
        halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);\r
        halbtc8192e2ant_DecBtPwr(pBtCoexist, FORCE_EXEC, 0);\r
        halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);\r
        halbtc8192e2ant_DecBtPwr(pBtCoexist, FORCE_EXEC, 0);\r
@@ -1779,14 +1981,15 @@ halbtc8192e2ant_ActionBtInquiry(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BOOLEAN bLowPwrDisable=TRUE;\r
+//     BOOLEAN bLowPwrDisable=TRUE;\r
        \r
        \r
-       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+//     pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
 \r
-       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
+//     halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
 \r
 \r
-       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
-       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
+       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 21);\r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
        halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
        halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
@@ -1794,6 +1997,14 @@ halbtc8192e2ant_ActionBtInquiry(
        halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
        halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
+VOID\r
+halbtc8192e2ant_ActionWiFiLinkProcess(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+\r
+}\r
+\r
 BOOLEAN\r
 halbtc8192e2ant_IsCommonAction(\r
        IN      PBTC_COEXIST            pBtCoexist\r
 BOOLEAN\r
 halbtc8192e2ant_IsCommonAction(\r
        IN      PBTC_COEXIST            pBtCoexist\r
@@ -1818,21 +2029,23 @@ halbtc8192e2ant_IsCommonAction(
 \r
        if(!bWifiConnected)\r
        {\r
 \r
        if(!bWifiConnected)\r
        {\r
-               bLowPwrDisable = FALSE;\r
-               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
-               \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non-connected idle!!\n"));\r
+//             bLowPwrDisable = FALSE;\r
+//             pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+\r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                                       \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non-connected idle!!\n"));\r
 \r
                if( (BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) ||\r
                        (BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
                {\r
 \r
                if( (BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) ||\r
                        (BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
                {\r
-                       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 2);\r
+//                     halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 2);\r
                        halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 1);\r
                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                }\r
                else\r
                {                       \r
                        halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 1);\r
                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                }\r
                else\r
                {                       \r
-                       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
+//                     halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
                        halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                }\r
                        halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                }\r
@@ -1849,13 +2062,13 @@ halbtc8192e2ant_IsCommonAction(
        {\r
                if(BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
                {\r
        {\r
                if(BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
                {\r
-                       bLowPwrDisable = FALSE;\r
-                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+//                     bLowPwrDisable = FALSE;\r
+//                     pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
 \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
-\r
-                       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 2);\r
-                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 1);\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+//                     halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 2);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);              \r
                        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                        halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);              \r
                        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                        halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
@@ -1867,15 +2080,16 @@ halbtc8192e2ant_IsCommonAction(
                }\r
                else if(BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)\r
                {\r
                }\r
                else if(BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)\r
                {\r
-                       bLowPwrDisable = TRUE;\r
-                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+//                     bLowPwrDisable = TRUE;\r
+//                     pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
                        if(bBtHsOn)\r
                                return FALSE;\r
 \r
                        if(bBtHsOn)\r
                                return FALSE;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
 \r
 \r
-                       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 2);\r
-                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 1);\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+//                     halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 2);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                        halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                        halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
@@ -1887,20 +2101,21 @@ halbtc8192e2ant_IsCommonAction(
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       bLowPwrDisable = TRUE;\r
-                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+//                     bLowPwrDisable = TRUE;\r
+//                     pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
                        if(bWifiBusy)\r
                        {\r
 \r
                        if(bWifiBusy)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
                                bCommon = FALSE;\r
                        }\r
                        else\r
                        {\r
                                bCommon = FALSE;\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
 \r
 \r
-                               halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
-                               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+                               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+//                             halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
+                               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                                halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 21);\r
                                halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);      \r
                                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                                halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 21);\r
                                halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);      \r
                                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
@@ -1913,6 +2128,8 @@ halbtc8192e2ant_IsCommonAction(
 \r
        return bCommon;\r
 }\r
 \r
        return bCommon;\r
 }\r
+\r
+\r
 VOID\r
 halbtc8192e2ant_TdmaDurationAdjust(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8192e2ant_TdmaDurationAdjust(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -1925,12 +2142,12 @@ halbtc8192e2ant_TdmaDurationAdjust(
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TdmaDurationAdjust()\n"));\r
 \r
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
 \r
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
                {\r
                        if(bScoHid)\r
                        {\r
                {\r
                        if(bScoHid)\r
                        {\r
@@ -2043,8 +2260,8 @@ halbtc8192e2ant_TdmaDurationAdjust(
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], retryCount = %d\n", retryCount));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
@@ -2064,7 +2281,7 @@ halbtc8192e2ant_TdmaDurationAdjust(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -2090,7 +2307,7 @@ halbtc8192e2ant_TdmaDurationAdjust(
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -2108,22 +2325,17 @@ halbtc8192e2ant_TdmaDurationAdjust(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
 \r
                }\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], max Interval = %d\n", maxInterval));\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
 \r
 \r
-                               if(pCoexDm->curPsTdma == 71)\r
-                               {\r
-                                       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
-                                       pCoexDm->psTdmaDuAdjType = 5;\r
-                               }\r
-                               else if(pCoexDm->curPsTdma == 1)\r
+                               if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
                                        pCoexDm->psTdmaDuAdjType = 5;\r
                                {\r
                                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
                                        pCoexDm->psTdmaDuAdjType = 5;\r
@@ -2233,11 +2445,11 @@ halbtc8192e2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
-                                       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
-                                       pCoexDm->psTdmaDuAdjType = 71;\r
+                                       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
+                                       pCoexDm->psTdmaDuAdjType = 1;\r
                                }\r
                                else if(pCoexDm->curPsTdma == 6)\r
                                {\r
                                }\r
                                else if(pCoexDm->curPsTdma == 6)\r
                                {\r
@@ -2277,12 +2489,7 @@ halbtc8192e2ant_TdmaDurationAdjust(
                                \r
                                if(result == -1)\r
                                {\r
                                \r
                                if(result == -1)\r
                                {\r
-                                       if(pCoexDm->curPsTdma == 71)\r
-                                       {\r
-                                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
-                                               pCoexDm->psTdmaDuAdjType = 1;\r
-                                       }\r
-                                       else if(pCoexDm->curPsTdma == 1)\r
+                                       if(pCoexDm->curPsTdma == 1)\r
                                        {\r
                                                halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                                pCoexDm->psTdmaDuAdjType = 2;\r
                                        {\r
                                                halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                                pCoexDm->psTdmaDuAdjType = 2;\r
@@ -2330,11 +2537,6 @@ halbtc8192e2ant_TdmaDurationAdjust(
                                                halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
                                                pCoexDm->psTdmaDuAdjType = 1;\r
                                        }\r
                                                halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
                                                pCoexDm->psTdmaDuAdjType = 1;\r
                                        }\r
-                                       else if(pCoexDm->curPsTdma == 1)\r
-                                       {\r
-                                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
-                                               pCoexDm->psTdmaDuAdjType = 71;\r
-                                       }\r
                                        else if(pCoexDm->curPsTdma == 12)\r
                                        {\r
                                                halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
                                        else if(pCoexDm->curPsTdma == 12)\r
                                        {\r
                                                halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
@@ -2357,7 +2559,7 @@ halbtc8192e2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
@@ -2467,7 +2669,7 @@ halbtc8192e2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
@@ -2580,7 +2782,7 @@ halbtc8192e2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
@@ -2690,7 +2892,7 @@ halbtc8192e2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
@@ -2806,7 +3008,7 @@ halbtc8192e2ant_TdmaDurationAdjust(
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
@@ -2819,392 +3021,725 @@ halbtc8192e2ant_TdmaDurationAdjust(
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
                }\r
        }\r
 }\r
 \r
                }\r
        }\r
 }\r
 \r
-// SCO only or SCO+PAN(HS)\r
 VOID\r
 VOID\r
-halbtc8192e2ant_ActionSco(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
+halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(\r
+       IN      PBTC_COEXIST            pBtCoexist//,\r
+       //IN    u1Byte                          wifiStatus\r
        )\r
 {\r
        )\r
 {\r
-       u1Byte  wifiRssiState, btRssiState=BTC_RSSI_STATE_STAY_LOW;\r
-       u4Byte  wifiBw;\r
-\r
-       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-\r
-       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
-       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
-\r
-       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       static s4Byte           up,dn,m,n,WaitCount;\r
+       s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
+       u1Byte                  retryCount=0, btInfoExt;\r
+\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow()\n"));\r
+#if 0\r
+       if( (BT_8192E_2ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus) ||\r
+               (BT_8192E_2ANT_WIFI_STATUS_CONNECTED_SCAN == wifiStatus) ||\r
+               (BT_8192E_2ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT == wifiStatus) )\r
+       {\r
+               if( pCoexDm->curPsTdma != 81 &&\r
+                       pCoexDm->curPsTdma != 82 &&\r
+                       pCoexDm->curPsTdma != 83 &&\r
+                       pCoexDm->curPsTdma != 84 )\r
+               {\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 82);\r
+                       pCoexDm->psTdmaDuAdjType = 82;\r
 \r
 \r
-       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+                       up = 0;\r
+                       dn = 0;\r
+                       m = 1;\r
+                       n= 3;\r
+                       result = 0;\r
+                       WaitCount = 0;\r
+               }               \r
+               return;\r
+       }\r
+#endif\r
+       pCoexDm->bAutoTdmaAdjust = FALSE;\r
 \r
 \r
-       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+       retryCount = pCoexSta->btRetryCnt;\r
+       btInfoExt = pCoexSta->btInfoExt;\r
 \r
 \r
-       if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
-               (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
+       if(!pCoexDm->bAutoTdmaAdjustLowRssi)\r
        {\r
        {\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
-       {\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-       {\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
-       }\r
-       \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+               pCoexDm->bAutoTdmaAdjustLowRssi = TRUE;\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjustForWifiRssiLow()!!\n"));\r
 \r
 \r
-       // sw mechanism\r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+/*\r
+               if(BT_INFO_8192E_2ANT_A2DP_BASIC_RATE(btInfoExt))\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x6);                  \r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 83);\r
+                       pCoexDm->psTdmaDuAdjType = 83;\r
                }\r
                else\r
                }\r
                else\r
+*/\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x6); \r
-               }               \r
+               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 81);\r
+               pCoexDm->psTdmaDuAdjType = 81;\r
+               }\r
+               //============\r
+               up = 0;\r
+               dn = 0;\r
+               m = 1;\r
+               n= 3;\r
+               result = 0;\r
+               WaitCount = 0;\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x6);\r
-               }\r
-               else\r
+               //accquire the BT TRx retry count from BT_Info byte2\r
+//             retryCount = pCoexSta->btRetryCnt;\r
+//             btInfoExt = pCoexSta->btInfoExt;\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], retryCount = %d\n", retryCount));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
+                       up, dn, m, n, WaitCount));\r
+               result = 0;\r
+               WaitCount++; \r
+                 \r
+               if ( (pCoexSta->lowPriorityTx) > 1050 ||  (pCoexSta->lowPriorityRx) > 1250 )\r
+                       retryCount++;   \r
+                               \r
+               if(retryCount == 0)  // no retry in the last 2-second duration\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x6);\r
-               }               \r
-       }\r
-}\r
-\r
-VOID\r
-halbtc8192e2ant_ActionScoPan(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
-       )\r
-{\r
-       u1Byte  wifiRssiState, btRssiState=BTC_RSSI_STATE_STAY_LOW;\r
-       u4Byte  wifiBw;\r
+                       up++;\r
+                       dn--;\r
 \r
 \r
-       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
+                       if (dn <= 0)\r
+                               dn = 0;                          \r
 \r
 \r
-       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
-       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+                       if(up >= n)     // if ³sÄò n ­Ó2¬í retry count¬°0, «h½Õ¼eWiFi duration\r
+                       {\r
+                               WaitCount = 0; \r
+                               n = 3;\r
+                               up = 0;\r
+                               dn = 0;\r
+                               result = 1; \r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
+                       }\r
+               }\r
+               else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
+               {\r
+                       up--; \r
+                       dn++;\r
 \r
 \r
-       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+                       if (up <= 0)\r
+                               up = 0;\r
 \r
 \r
-       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+                       if (dn == 2)    // if ³sÄò 2 ­Ó2¬í retry count< 3, «h½Õ¯¶WiFi duration\r
+                       {\r
+                               if (WaitCount <= 2)\r
+                                       m++; // ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^\r
+                               else\r
+                                       m = 1;\r
 \r
 \r
-       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+                               if ( m >= 20) //m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.\r
+                                       m = 20;\r
 \r
 \r
-       if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
-               (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
-       {\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
-       {\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-       {\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
-       }\r
-       \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
-\r
-       // sw mechanism\r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+                               n = 3*m;\r
+                               up = 0;\r
+                               dn = 0;\r
+                               WaitCount = 0;\r
+                               result = -1; \r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                       }\r
+               }\r
+               else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x6);                  \r
+                       if (WaitCount == 1)\r
+                               m++; // ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^\r
+                       else\r
+                               m = 1;\r
+\r
+                       if ( m >= 20) //m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.\r
+                               m = 20;\r
+\r
+                       n = 3*m;\r
+                       up = 0;\r
+                       dn = 0;\r
+                       WaitCount = 0; \r
+                       result = -1;\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
                }\r
-               else\r
+\r
+               if(result == -1)\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x6); \r
-               }               \r
-       }\r
-       else\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+/*\r
+                       if( (BT_INFO_8192E_2ANT_A2DP_BASIC_RATE(btInfoExt)) &&\r
+                               ((pCoexDm->curPsTdma == 81) ||(pCoexDm->curPsTdma == 82)) )\r
+                               if( (BT_INFO_8192E_2ANT_A2DP_BASIC_RATE(btInfoExt)) &&\r
+                                       ((pCoexDm->curPsTdma == 81) ||(pCoexDm->curPsTdma == 82)) )\r
+\r
+                       {\r
+                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 84);\r
+                               pCoexDm->psTdmaDuAdjType = 84;\r
+                       }\r
+*/\r
+                       if(pCoexDm->curPsTdma == 80)\r
+                       {\r
+                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 81);\r
+                               pCoexDm->psTdmaDuAdjType = 81;\r
+                       }\r
+                       else if(pCoexDm->curPsTdma == 81)\r
+                       {\r
+                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 82);\r
+                               pCoexDm->psTdmaDuAdjType = 82;\r
+                       }\r
+                       else if(pCoexDm->curPsTdma == 82)\r
+                       {\r
+                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 83);\r
+                               pCoexDm->psTdmaDuAdjType = 83;\r
+                       }\r
+                       else if(pCoexDm->curPsTdma == 83)\r
+                       {\r
+                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 84);\r
+                               pCoexDm->psTdmaDuAdjType = 84;\r
+                       }\r
+               }\r
+               else if(result == 1)\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x6);\r
+/*\r
+                       if( (BT_INFO_8192E_2ANT_A2DP_BASIC_RATE(btInfoExt)) &&\r
+                               ((pCoexDm->curPsTdma == 81) ||(pCoexDm->curPsTdma == 82)) )\r
+                       {\r
+                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 83);\r
+                               pCoexDm->psTdmaDuAdjType = 83;\r
+                       }\r
+*/\r
+                       if(pCoexDm->curPsTdma == 84)\r
+                       {\r
+                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 83);\r
+                               pCoexDm->psTdmaDuAdjType = 83;\r
+                       }\r
+                       else if(pCoexDm->curPsTdma == 83)\r
+                       {\r
+                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 82);\r
+                               pCoexDm->psTdmaDuAdjType = 82;\r
+                       }\r
+                       else if(pCoexDm->curPsTdma == 82)\r
+                       {\r
+                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 81);\r
+                               pCoexDm->psTdmaDuAdjType = 81;\r
+                       }\r
+                       else if((pCoexDm->curPsTdma == 81)&&((pCoexSta->nScanAPNum <= NOISY_AP_NUM_THRESH)))\r
+                       {\r
+                               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 80);\r
+                               pCoexDm->psTdmaDuAdjType = 80;\r
+                       }\r
+\r
                }\r
                }\r
-               else\r
+\r
+               if( pCoexDm->curPsTdma != 80 &&\r
+                       pCoexDm->curPsTdma != 81 &&\r
+                       pCoexDm->curPsTdma != 82 &&\r
+                       pCoexDm->curPsTdma != 83 &&\r
+                       pCoexDm->curPsTdma != 84 )\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x6);\r
-               }               \r
+                       // recover to previous adjust type\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, pCoexDm->psTdmaDuAdjType);\r
+               }\r
        }\r
 }\r
 \r
 VOID\r
        }\r
 }\r
 \r
 VOID\r
-halbtc8192e2ant_ActionHid(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
+halbtc8192e2ant_GetBtRssiThreshold(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      pu1Byte                         pThres0,\r
+       IN      pu1Byte                         pThres1\r
        )\r
 {\r
        )\r
 {\r
-       u1Byte  wifiRssiState, btRssiState=BTC_RSSI_STATE_HIGH; \r
-       u4Byte  wifiBw;\r
+       u1Byte antType, btThreshold=0;\r
+       \r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_ANT_TYPE, &antType);\r
 \r
 \r
-       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+       switch(antType)\r
+       {\r
+               case BTC_ANT_TYPE_0:    // 92E with SPDT\r
+                       *pThres0 = 100;\r
+                       *pThres1 = 100;\r
+                       break;\r
+               case BTC_ANT_TYPE_1:    //92E without SPDT, poor antenna isolation\r
+                       *pThres0 = 34;\r
+                       *pThres1 = 42;\r
+                       break;\r
+               case BTC_ANT_TYPE_2:    //92E without SPDT, normal antenna isolation\r
+                       *pThres0 = 34;          //92E with coupler, goodl antenna isolation\r
+                       *pThres1 = 42;\r
+                       break;\r
+               case BTC_ANT_TYPE_3:\r
+                       *pThres0 = 34;\r
+                       *pThres1 = 42;\r
+                       break;\r
+               case BTC_ANT_TYPE_4:\r
+                       *pThres0 = 34;\r
+                       *pThres1 = 42;\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+}\r
+\r
+\r
+//undefined\r
+VOID\r
+halbtc8192e2ant_ActionUndefined(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       // power save state\r
+       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       \r
+       // coex table\r
+       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+       \r
+       // pstdma\r
+       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+       \r
+       // decrease BT power\r
+       halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
 \r
-       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
+       // limited Rx\r
        halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
        halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
+       // fw dac swing level\r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+       // sw mechanism\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+}\r
 \r
 \r
-       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
 \r
 \r
-       if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
-               (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
-       {\r
+// SCO only or SCO+PAN(HS)\r
+VOID\r
+halbtc8192e2ant_ActionSco(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+               u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
+               u4Byte          wifiBw;\r
+               u1Byte          btThresh0=0, btThresh1=0;\r
+               BOOLEAN         bApEnable=FALSE;\r
+       \r
+               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+       \r
+               halbtc8192e2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+               btRssiState = halbtc8192e2ant_BtRssiState(3, btThresh0, btThresh1);\r
+       \r
+               wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
+               //      btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+       \r
+               // power save state\r
+               if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState))))\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+               else\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       //              halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
+       \r
+               // coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+               else\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+       \r
+               // pstdma\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)))\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+               else\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+       \r
+               // decrease BT power\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
-       {\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-       {\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
-       }\r
+\r
+       // limited Rx\r
+       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+\r
+       // fw dac swing level\r
+       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
        // sw mechanism\r
 \r
        // sw mechanism\r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }       \r
-       }\r
-       else\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }               \r
-       }\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
 }\r
 \r
-//A2DP only / PAN(EDR) only/ A2DP+PAN(HS)\r
 VOID\r
 VOID\r
-halbtc8192e2ant_ActionA2dp(\r
+halbtc8192e2ant_ActionScoPan(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState=BTC_RSSI_STATE_HIGH;\r
+       u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
        u4Byte          wifiBw;\r
-       BOOLEAN         bLongDist=FALSE;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+       BOOLEAN                 bApEnable=FALSE;\r
 \r
 \r
-       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
 \r
 \r
-       if( (btRssiState == BTC_RSSI_STATE_LOW||btRssiState == BTC_RSSI_STATE_STAY_LOW) &&\r
-               (wifiRssiState == BTC_RSSI_STATE_LOW||wifiRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2dp, wifi/bt rssi both LOW!!\n"));\r
-               bLongDist = TRUE;\r
-       }\r
-       if(bLongDist)\r
-       {\r
-               halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 2);\r
-               halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x4);\r
-       }\r
+       halbtc8192e2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8192e2ant_BtRssiState(3, btThresh0, btThresh1);\r
+\r
+       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
+       //      btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+\r
+       // power save state\r
+       if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState))))\r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
        else\r
        else\r
-       {\r
-               halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
-               halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
-       }\r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+\r
+       // coex table\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+       else\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
 \r
+\r
+       // pstdm\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);      //shielding room\r
+       else if (BTC_RSSI_HIGH(wifiRssiState) &&        (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, TRUE, 10);       //open space    //antenna at BT\r
+       else    //low RSSI\r
+               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 86);\r
+\r
+\r
+       \r
+       // decrease BT power\r
+       if(BTC_RSSI_LOW(btRssiState))\r
+               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+       else if(BTC_RSSI_MEDIUM(btRssiState)) \r
+               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
+       else if (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH)  // BT HIGH RSSI & shielding room\r
+               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
+       \r
+       // limited Rx\r
+       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       \r
+       // fw dac swing level\r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
-       if(bLongDist)\r
-               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
-       else\r
-               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+       // sw mechanism\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);        //shielding room\r
+       else if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);                //open space \r
+       else    //low RSSI\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+}\r
+\r
+VOID\r
+halbtc8192e2ant_ActionHid(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
+       u4Byte          wifiBw;\r
+       u1Byte          anttype=0;\r
+       BOOLEAN         bApEnable=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_ANT_TYPE, &anttype);\r
 \r
 \r
+//     halbtc8192e2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+//     btRssiState = halbtc8192e2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
 \r
-       if(bLongDist)\r
+       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
+       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+\r
+       if(anttype == 0)//ANTTYPE = 0   92E 2ant with SPDT\r
        {\r
        {\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 17);\r
-               pCoexDm->bAutoTdmaAdjust = FALSE;\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+               // power save state & pstdma & coex table\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+               pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+               halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
        }\r
        }\r
-       else\r
-       {\r
-               if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
-               {\r
-                       halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
-                       halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               }\r
-               else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
-                               (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
-               {\r
-                       halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
-                       halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
+       else if(anttype == 1) //92E 2ant with coupler and bad ant. isolation, 92E 3ant with bad ant. isolation\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+               pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+               halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+       }\r
+       else if(anttype == 2)//ANTTYPE = 2, 92E 2ant with coupler and normal/good ant. isolation, 92E 3ant with normal ant. isolation\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & shielding room\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, TRUE, 9);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);  \r
                }\r
                }\r
-               else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                               (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+        {      //WIFI RSSI = high & BT RSSI = high & noisy enviroment\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, TRUE, 9);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
+        }\r
+               else    //WIFI RSSI || BT RSSI == low\r
                {\r
                {\r
-                       halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
-                       halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, TRUE, 9);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
                }\r
        }\r
                }\r
        }\r
-       \r
-       // sw mechanism\r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+       else if(anttype == 3)   //ANTTYPE = 3,  92E 3ant with good ant. isolation\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & shielding room\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
                }\r
                }\r
-               else\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & noisy enviroment\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+               }\r
+               else    //WIFI RSSI || BT RSSI == low\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                }\r
        }\r
                }\r
        }\r
-       else\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+       else    //ANTTYPE = 4 for test\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & shielding room\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
                }\r
                }\r
-               else\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & noisy enviroment\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
+               else    //WIFI RSSI || BT RSSI == low\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }               \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
        }\r
        }\r
+\r
+       // power save state\r
+       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+\r
+       // coex table\r
+       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+       // pstdma\r
+       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+\r
+       // decrease BT power\r
+       halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+       \r
+       // limited Rx\r
+       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       \r
+       // fw dac swing level\r
+       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       \r
+       // sw mechanism\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
 }\r
 \r
+//A2DP only / PAN(EDR) only/ A2DP+PAN(HS)\r
 VOID\r
 VOID\r
-halbtc8192e2ant_ActionA2dpPanHs(\r
+halbtc8192e2ant_ActionA2dp(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState=BTC_RSSI_STATE_HIGH;\r
+       u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
        u4Byte          wifiBw;\r
+       u1Byte          anttype=0;\r
+       BOOLEAN         bApEnable=FALSE;\r
 \r
 \r
-       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_ANT_TYPE, &anttype);\r
 \r
 \r
-       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
-       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+//     halbtc8192e2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+//     btRssiState = halbtc8192e2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
 \r
-       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
-       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
+       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
 \r
 \r
-       if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
-               (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
+//     anttype = 4;\r
+\r
+       if(anttype == 0)//ANTTYPE = 0   92E 2ant with SPDT\r
        {\r
        {\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & shielding room\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+        {      //WIFI RSSI = high & BT RSSI = high & noisy enviroment\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+        }\r
+               else    //WIFI RSSI || BT RSSI == low\r
+               {\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
        }\r
        }\r
-       else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
-       {\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 2);\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
+       else if(anttype == 1) //92E 2ant with coupler and bad ant. isolation, 92E 3ant with bad ant. isolation\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & shielding room\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1); //shielding room\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+        {      //WIFI RSSI = high & BT RSSI = high & noisy enviroment\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+        }\r
+               else    //WIFI RSSI || BT RSSI == low\r
+               {\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
+\r
        }\r
        }\r
-       else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-       {\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 2);\r
-               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
+       else if(anttype == 2)//ANTTYPE = 2, 92E 2ant with coupler and normal/good ant. isolation, 92E 3ant with normal ant. isolation\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & shielding room\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);  \r
+               }\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+        {      //WIFI RSSI = high & BT RSSI = high & noisy enviroment\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+        }\r
+               else    //WIFI RSSI || BT RSSI == low\r
+               {\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
        }\r
        }\r
+       else if(anttype == 3)   //ANTTYPE = 3,  92E 3ant with good ant. isolation\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & shielding room\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
 \r
-       // sw mechanism\r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x6);\r
                }\r
                }\r
-               else\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & noisy enviroment\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+               }\r
+               else    //WIFI RSSI || BT RSSI == low\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x6);\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                }\r
        }\r
                }\r
        }\r
-       else\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x6);\r
+       else    //ANTTYPE = 4 for test\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & shielding room\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
                }\r
                }\r
-               else\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & noisy enviroment\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
+               else    //WIFI RSSI || BT RSSI == low\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x6);\r
-               }               \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
        }\r
        }\r
+\r
+       // decrease BT power\r
+       if(BTC_RSSI_LOW(btRssiState))\r
+               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+       else if(BTC_RSSI_MEDIUM(btRssiState)) \r
+               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
+       else if (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH)  // BT HIGH RSSI & shielding room\r
+               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
+\r
+       // limited Rx\r
+       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       \r
+       // fw dac swing level\r
+       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       \r
+       // sw mechanism\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);        //shielding room\r
+       else if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x06);         //open space \r
+       else    //low RSSI\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-halbtc8192e2ant_ActionPanEdr(\r
+halbtc8192e2ant_ActionA2dpPanHs(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
@@ -3214,134 +3749,104 @@ halbtc8192e2ant_ActionPanEdr(
        wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
 \r
        wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
 \r
-       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
+//     halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
        halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
        halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
-\r
        halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
 \r
        if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
                (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
        {\r
        halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
 \r
        if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
                (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
        {\r
+               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
        }\r
        else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
        {\r
        }\r
        else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
        {\r
+               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 2);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
        }\r
        else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
        {\r
        }\r
        else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
        {\r
+               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 2);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
        }\r
        }\r
-       \r
+\r
        // sw mechanism\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
        // sw mechanism\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }\r
-       }\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
 }\r
 \r
-//PAN(HS) only\r
 VOID\r
 VOID\r
-halbtc8192e2ant_ActionPanHs(\r
+halbtc8192e2ant_ActionPanEdr(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState=BTC_RSSI_STATE_HIGH;\r
+       u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+       BOOLEAN                 bApEnable=FALSE;\r
 \r
 \r
-       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
 \r
 \r
-       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
-       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       halbtc8192e2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8192e2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
 \r
-       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
+       //      btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
 \r
 \r
-       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+       // power save state\r
+       if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState))))\r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       else\r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
 \r
 \r
-       if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
-               (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
-       {\r
+       // coex table\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+       // pstdma\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);       //shielding room\r
+       else if (BTC_RSSI_HIGH(wifiRssiState) &&        (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);       //open space    //antenna at BT\r
+       else    //low RSSI\r
+               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 85);\r
+\r
+       \r
+       // decrease BT power\r
+       if(BTC_RSSI_LOW(btRssiState))\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
-       {\r
+       else if(BTC_RSSI_MEDIUM(btRssiState)) \r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-       {\r
+       else if (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH)  // BT HIGH RSSI & shielding room\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
-       }\r
-       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
 \r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }\r
-       }\r
+       \r
+       // limited Rx\r
+       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       \r
+       // fw dac swing level\r
+       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       \r
+       // sw mechanism\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);        //shielding room\r
+       else if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);                //open space \r
+       else    //low RSSI\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
 }\r
 \r
-//PAN(EDR)+A2DP\r
+//PAN(HS) only\r
 VOID\r
 VOID\r
-halbtc8192e2ant_ActionPanEdrA2dp(\r
+halbtc8192e2ant_ActionPanHs(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
@@ -3351,272 +3856,417 @@ halbtc8192e2ant_ActionPanEdrA2dp(
        wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
 \r
        wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
 \r
-       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
+//     halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
        halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
        halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
-\r
+       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
        halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
-\r
        halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
 \r
        halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
-\r
        if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
                (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
        {\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
        if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
                (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
        {\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
        }\r
        else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
        {\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
        }\r
        else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
        {\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
        }\r
        else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
        {\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
        }\r
        else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
        {\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
-       }\r
-       \r
-       // sw mechanism \r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }\r
        }\r
        }\r
+       halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
 }\r
 \r
+//PAN(EDR)+A2DP\r
 VOID\r
 VOID\r
-halbtc8192e2ant_ActionPanEdrHid(\r
+halbtc8192e2ant_ActionPanEdrA2dp(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState=BTC_RSSI_STATE_HIGH;\r
+       u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+       BOOLEAN                 bApEnable=FALSE;\r
 \r
 \r
-       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
 \r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+       halbtc8192e2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8192e2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
 \r
-       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
-       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
+       //      btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
 \r
 \r
-       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       // power save state\r
+       if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState))))\r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       else\r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
 \r
 \r
-       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
+       // coex table\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
 \r
-       if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
-               (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
-       {\r
+       // pstdma\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);        //shielding room\r
+       else if (BTC_RSSI_HIGH(wifiRssiState) &&        (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);        //open space    //antenna at BT\r
+       else    //low RSSI\r
+{\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;   \r
+                pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;\r
+               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 86);\r
+}\r
+       \r
+       // decrease BT power\r
+       if(BTC_RSSI_LOW(btRssiState))\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
-       {\r
+       else if(BTC_RSSI_MEDIUM(btRssiState)) \r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-       {\r
+       else if (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH)  // BT HIGH RSSI & shielding room\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
-               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
-       }\r
+\r
+       \r
+       // limited Rx\r
+       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       \r
+       // fw dac swing level\r
+       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
        \r
        // sw mechanism\r
        \r
        // sw mechanism\r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }\r
-       }\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);        //shielding room\r
+       else if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);                //open space \r
+       else    //low RSSI\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
 }\r
 \r
-// HID+A2DP+PAN(EDR)\r
 VOID\r
 VOID\r
-halbtc8192e2ant_ActionHidA2dpPanEdr(\r
+halbtc8192e2ant_ActionPanEdrHid(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState=BTC_RSSI_STATE_HIGH;\r
+       u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+       BOOLEAN                 bApEnable=FALSE;\r
 \r
 \r
-       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
 \r
 \r
-       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
-       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       halbtc8192e2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8192e2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
 \r
-       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
+       //      btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
 \r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+       // power save state\r
+       if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState))))\r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       else\r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
 \r
 \r
-       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
+       // coex table\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
+       else\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
 \r
-       if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
-               (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
-       {\r
+       // pstdm\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+           halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);  //shielding room\r
+       else if (BTC_RSSI_HIGH(wifiRssiState) &&        (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+           halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);  //open space    //antenna at BT\r
+       else    //low RSSI\r
+               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 86);\r
+\r
+       \r
+       // decrease BT power\r
+       if(BTC_RSSI_LOW(btRssiState))\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
-       {\r
+       else if(BTC_RSSI_MEDIUM(btRssiState)) \r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-       {\r
+       else if (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH)  // BT HIGH RSSI & shielding room\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
-       }\r
 \r
 \r
+       \r
+       // limited Rx\r
+       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       \r
+       // fw dac swing level\r
+       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       \r
        // sw mechanism\r
        // sw mechanism\r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               }\r
-       }\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);        //shielding room\r
+       else if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);                //open space \r
+       else    //low RSSI\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
 }\r
 \r
+// HID+A2DP+PAN(EDR)\r
 VOID\r
 VOID\r
-halbtc8192e2ant_ActionHidA2dp(\r
+halbtc8192e2ant_ActionHidA2dpPanEdr(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState=BTC_RSSI_STATE_HIGH;\r
+       u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+       BOOLEAN                 bApEnable=FALSE;\r
 \r
 \r
-       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
 \r
 \r
-       halbtc8192e2ant_SwitchSsType(pBtCoexist, NORMAL_EXEC, 1);\r
-       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       halbtc8192e2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8192e2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
+       //      btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
 \r
 \r
-       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
+       // power save state\r
+       if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState))))\r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       else\r
+               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+\r
+       // coex table\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
+       else\r
+               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0); //6\r
+\r
+       // pstdma\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3); //shielding room\r
+       else if (BTC_RSSI_HIGH(wifiRssiState) &&        (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3); //open space    //antenna at BT\r
+       else    //low RSSI\r
+       {\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;   \r
+                pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;\r
+               halbtc8192e2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 86);\r
+         }\r
        \r
        \r
-       if( (btRssiState == BTC_RSSI_STATE_LOW) ||\r
-               (btRssiState == BTC_RSSI_STATE_STAY_LOW) )\r
-       {\r
+       // decrease BT power\r
+       if(BTC_RSSI_LOW(btRssiState))\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_MEDIUM) )\r
-       {\r
+       else if(BTC_RSSI_MEDIUM(btRssiState)) \r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
-       }\r
-       else if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-       {\r
+       else if (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH)  // BT HIGH RSSI & shielding room\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
                halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
-               halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
-       }       \r
+       \r
+       // limited Rx\r
+       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       \r
+       // fw dac swing level\r
+       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
        \r
        // sw mechanism\r
        \r
        // sw mechanism\r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);        //shielding room\r
+       else if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);                //open space \r
+       else    //low RSSI\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+}\r
+\r
+VOID\r
+halbtc8192e2ant_ActionHidA2dp(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
+       u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0, anttype=0;\r
+       BOOLEAN                 bApEnable=FALSE;\r
+       \r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_ANT_TYPE, &anttype);\r
+       \r
+       //      halbtc8192e2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       //      btRssiState = halbtc8192e2ant_BtRssiState(3, btThresh0, btThresh1);\r
+       \r
+       wifiRssiState = halbtc8192e2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
+       btRssiState = halbtc8192e2ant_BtRssiState(3, 34, 42);\r
+       \r
+       if(anttype == 0)//ANTTYPE = 0   92E 2ant with SPDT\r
        {\r
        {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, TRUE, 83);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);\r
+\r
+               }\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, TRUE, 83);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);\r
                }\r
        }\r
                }\r
        }\r
-       else\r
-       {\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+       else if(anttype == 1) //92E 2ant with coupler and bad ant. isolation, 92E 3ant with bad ant. isolation\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);\r
+               }\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
                {\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                       halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                               halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                               halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, TRUE, 83);\r
+                               halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);\r
+               }\r
+       }\r
+       else if(anttype == 2)//ANTTYPE = 2, 92E 2ant with coupler and normal/good ant. isolation, 92E 3ant with normal ant. isolation\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & shielding room\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);  \r
+               }\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+        {      //WIFI RSSI = high & BT RSSI = high & noisy enviroment\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);\r
+        }\r
+               else    //WIFI RSSI || BT RSSI == low\r
+               {\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, TRUE, 83);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);\r
+               }\r
+       }\r
+       else if(anttype == 3)   //ANTTYPE = 3,  92E 3ant with good ant. isolation\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & shielding room\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+               }\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & noisy enviroment\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+               }\r
+               else    //WIFI RSSI || BT RSSI == low\r
+               {\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;   \r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8192e2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                }\r
        }\r
                }\r
        }\r
+       else    //ANTTYPE = 4 for test\r
+       {               \r
+               // power save state & pstdma & coex table\r
+               if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & shielding room\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
+               else if (BTC_RSSI_HIGH(wifiRssiState)&&(!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               {       //WIFI RSSI = high & BT RSSI = high & noisy enviroment\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
+               else    //WIFI RSSI || BT RSSI == low\r
+               {\r
+                       halbtc8192e2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+                       halbtc8192e2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
+                       halbtc8192e2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               }\r
+       }\r
+\r
+       // decrease BT power\r
+       if(BTC_RSSI_LOW(btRssiState))\r
+               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+       else if(BTC_RSSI_MEDIUM(btRssiState)) \r
+               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
+       else if (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH)  // BT HIGH RSSI & shielding room\r
+               halbtc8192e2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
+\r
+               \r
+       // limited Rx\r
+       halbtc8192e2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+               \r
+       // fw dac swing level\r
+       halbtc8192e2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       \r
+       // sw mechanism\r
+       halbtc8192e2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&      (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum < NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);        //shielding room\r
+       else if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)) && (pCoexSta->nScanAPNum > NOISY_AP_NUM_THRESH))\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x06);         //open space \r
+       else    //low RSSI\r
+               halbtc8192e2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+}\r
+\r
+VOID\r
+halbtc8192e2ant_ActionBtWhckTest(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+\r
+}\r
+\r
+VOID\r
+halbtc8192e2ant_ActionWifiMultiPort(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{              \r
+\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -3628,93 +4278,95 @@ halbtc8192e2ant_RunCoexistMechanism(
        u1Byte                          btInfoOriginal=0, btRetryCnt=0;\r
        u1Byte                          algorithm=0;\r
 \r
        u1Byte                          btInfoOriginal=0, btRetryCnt=0;\r
        u1Byte                          algorithm=0;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is under IPS !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is under IPS !!!\n"));\r
                return;\r
        }\r
 \r
        algorithm = halbtc8192e2ant_ActionAlgorithm(pBtCoexist);\r
        if(pCoexSta->bC2hBtInquiryPage && (BT_8192E_2ANT_COEX_ALGO_PANHS!=algorithm))\r
        {\r
                return;\r
        }\r
 \r
        algorithm = halbtc8192e2ant_ActionAlgorithm(pBtCoexist);\r
        if(pCoexSta->bC2hBtInquiryPage && (BT_8192E_2ANT_COEX_ALGO_PANHS!=algorithm))\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
                halbtc8192e2ant_ActionBtInquiry(pBtCoexist);\r
                return;\r
        }\r
 \r
        pCoexDm->curAlgorithm = algorithm;\r
                halbtc8192e2ant_ActionBtInquiry(pBtCoexist);\r
                return;\r
        }\r
 \r
        pCoexDm->curAlgorithm = algorithm;\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
 \r
        if(halbtc8192e2ant_IsCommonAction(pBtCoexist))\r
        {\r
 \r
        if(halbtc8192e2ant_IsCommonAction(pBtCoexist))\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant common.\n"));\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
+               pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;\r
        }\r
        else\r
        {\r
                if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
                {\r
        }\r
        else\r
        {\r
                if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
                                pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
                                pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
+                       pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;\r
                }\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8192E_2ANT_COEX_ALGO_SCO:\r
                }\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8192E_2ANT_COEX_ALGO_SCO:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
                                halbtc8192e2ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_SCO_PAN:\r
                                halbtc8192e2ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_SCO_PAN:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO+PAN(EDR).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = SCO+PAN(EDR).\n"));\r
                                halbtc8192e2ant_ActionScoPan(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_HID:\r
                                halbtc8192e2ant_ActionScoPan(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
                                halbtc8192e2ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_A2DP:\r
                                halbtc8192e2ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
                                halbtc8192e2ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_A2DP_PANHS:\r
                                halbtc8192e2ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_A2DP_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
                                halbtc8192e2ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_PANEDR:\r
                                halbtc8192e2ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
                                halbtc8192e2ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_PANHS:\r
                                halbtc8192e2ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
                                halbtc8192e2ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_PANEDR_A2DP:\r
                                halbtc8192e2ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_PANEDR_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
                                halbtc8192e2ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_PANEDR_HID:\r
                                halbtc8192e2ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_PANEDR_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
                                halbtc8192e2ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
                                halbtc8192e2ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
                                halbtc8192e2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_HID_A2DP:\r
                                halbtc8192e2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8192E_2ANT_COEX_ALGO_HID_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
                                halbtc8192e2ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
                                halbtc8192e2ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = unknown!!\n"));\r
-                               //halbtc8192e2ant_CoexAllOff(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = undefined!!\n"));\r
+                               halbtc8192e2ant_ActionUndefined(pBtCoexist);\r
                                break;\r
                }\r
                pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
                                break;\r
                }\r
                pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
@@ -3731,7 +4383,7 @@ halbtc8192e2ant_InitHwConfig(
        u2Byte  u2Tmp=0;\r
        u1Byte  u1Tmp=0;\r
 \r
        u2Byte  u2Tmp=0;\r
        u1Byte  u1Tmp=0;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
 \r
        if(bBackUp)\r
        {\r
 \r
        if(bBackUp)\r
        {\r
@@ -3813,7 +4465,7 @@ EXhalbtc8192e2ant_InitCoexDm(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
        \r
        halbtc8192e2ant_InitCoexDm(pBtCoexist);\r
 }\r
        \r
        halbtc8192e2ant_InitCoexDm(pBtCoexist);\r
 }\r
@@ -3847,6 +4499,10 @@ EXhalbtc8192e2ant_DisplayCoexInfo(
                pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum);\r
        CL_PRINTF(cliBuf);\r
        \r
                pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum);\r
        CL_PRINTF(cliBuf);\r
        \r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "Antenna type:", \\r
+               pBoardInfo->antType);\r
+       CL_PRINTF(cliBuf);\r
+       \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \\r
                ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);\r
        CL_PRINTF(cliBuf);\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \\r
                ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);\r
        CL_PRINTF(cliBuf);\r
@@ -3861,7 +4517,7 @@ EXhalbtc8192e2ant_DisplayCoexInfo(
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
-\r
+       \r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
@@ -3898,11 +4554,11 @@ EXhalbtc8192e2ant_DisplayCoexInfo(
                        CL_PRINTF(cliBuf);\r
                }\r
        }\r
                        CL_PRINTF(cliBuf);\r
                }\r
        }\r
-\r
+/*\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x ", "SS Type", \\r
                pCoexDm->curSsType);\r
        CL_PRINTF(cliBuf);\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x ", "SS Type", \\r
                pCoexDm->curSsType);\r
        CL_PRINTF(cliBuf);\r
-\r
+*/\r
        // Sw mechanism \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");\r
        CL_PRINTF(cliBuf);\r
        // Sw mechanism \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");\r
        CL_PRINTF(cliBuf);\r
@@ -4016,14 +4672,14 @@ EXhalbtc8192e2ant_IpsNotify(
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                pCoexSta->bUnderIps = TRUE;\r
                halbtc8192e2ant_CoexAllOff(pBtCoexist);\r
                halbtc8192e2ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
                pCoexSta->bUnderIps = TRUE;\r
                halbtc8192e2ant_CoexAllOff(pBtCoexist);\r
                halbtc8192e2ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
                pCoexSta->bUnderIps = FALSE;\r
        }\r
 }\r
                pCoexSta->bUnderIps = FALSE;\r
        }\r
 }\r
@@ -4036,12 +4692,12 @@ EXhalbtc8192e2ant_LpsNotify(
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
@@ -4054,11 +4710,13 @@ EXhalbtc8192e2ant_ScanNotify(
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
+               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &pCoexSta->nScanAPNum);\r
+\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4070,11 +4728,11 @@ EXhalbtc8192e2ant_ConnectNotify(
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4095,13 +4753,14 @@ EXhalbtc8192e2ant_MediaStatusNotify(
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
        }\r
 \r
        }\r
 \r
+       \r
        // only 2.4G we need to inform bt the chnl mask\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifiCentralChnl);\r
        if( (BTC_MEDIA_CONNECT == type) &&\r
        // only 2.4G we need to inform bt the chnl mask\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifiCentralChnl);\r
        if( (BTC_MEDIA_CONNECT == type) &&\r
@@ -4120,7 +4779,7 @@ EXhalbtc8192e2ant_MediaStatusNotify(
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x66=0x%x\n", \r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);    \r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);    \r
@@ -4134,7 +4793,7 @@ EXhalbtc8192e2ant_SpecialPacketNotify(
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], DHCP Packet notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4158,7 +4817,7 @@ EXhalbtc8192e2ant_BtInfoNotify(
                rspSource = BT_INFO_SRC_8192E_2ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
                rspSource = BT_INFO_SRC_8192E_2ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
@@ -4166,11 +4825,11 @@ EXhalbtc8192e2ant_BtInfoNotify(
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x]\n", tmpBuf[i]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x, ", tmpBuf[i]));\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
@@ -4189,7 +4848,7 @@ EXhalbtc8192e2ant_BtInfoNotify(
                // because bt is reset and loss of the info.\r
                if( (pCoexSta->btInfoExt & BIT1) )\r
                {\r
                // because bt is reset and loss of the info.\r
                if( (pCoexSta->btInfoExt & BIT1) )\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
@@ -4205,7 +4864,7 @@ EXhalbtc8192e2ant_BtInfoNotify(
                {\r
                        if(!pBtCoexist->bManualControl && !pBtCoexist->bStopCoexDm)\r
                        {\r
                {\r
                        if(!pBtCoexist->bManualControl && !pBtCoexist->bStopCoexDm)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
                                halbtc8192e2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                        }\r
                }\r
                                halbtc8192e2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                        }\r
                }\r
@@ -4267,28 +4926,28 @@ EXhalbtc8192e2ant_BtInfoNotify(
        if(!(btInfo&BT_INFO_8192E_2ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
        if(!(btInfo&BT_INFO_8192E_2ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
        }\r
        else if(btInfo == BT_INFO_8192E_2ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE;\r
        }\r
        else if(btInfo == BT_INFO_8192E_2ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
        }\r
        else if((btInfo&BT_INFO_8192E_2ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8192E_2ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8192E_2ANT_BT_STATUS_SCO_BUSY;\r
        }\r
        else if((btInfo&BT_INFO_8192E_2ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8192E_2ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8192E_2ANT_BT_STATUS_SCO_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
        }\r
        else if(btInfo&BT_INFO_8192E_2ANT_B_ACL_BUSY)\r
        {\r
                pCoexDm->btStatus = BT_8192E_2ANT_BT_STATUS_ACL_BUSY;\r
        }\r
        else if(btInfo&BT_INFO_8192E_2ANT_B_ACL_BUSY)\r
        {\r
                pCoexDm->btStatus = BT_8192E_2ANT_BT_STATUS_ACL_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8192E_2ANT_BT_STATUS_MAX;\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8192E_2ANT_BT_STATUS_MAX;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
        }\r
        \r
        if( (BT_8192E_2ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
        }\r
        \r
        if( (BT_8192E_2ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
@@ -4317,7 +4976,7 @@ EXhalbtc8192e2ant_HaltNotify(
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
        halbtc8192e2ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
        halbtc8192e2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
 \r
        halbtc8192e2ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
        halbtc8192e2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
@@ -4334,21 +4993,21 @@ EXhalbtc8192e2ant_Periodical(
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ==========================Periodical===========================\n"));\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \r
                        GLCoexVerDate8192e2Ant, GLCoexVer8192e2Ant, fwVer, btPatchVer, btPatchVer));\r
                        GLCoexVerDate8192e2Ant, GLCoexVer8192e2Ant, fwVer, btPatchVer, btPatchVer));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
        }\r
 \r
 #if(BT_AUTO_REPORT_ONLY_8192E_2ANT == 0)\r
        }\r
 \r
 #if(BT_AUTO_REPORT_ONLY_8192E_2ANT == 0)\r
index 58cddce87a412c4b5987d53ae09ae2264d4fb96b..1876bf4708922ee3e12f13d7bbeb71bf31a531f2 100755 (executable)
 #define        BT_INFO_8192E_2ANT_B_SCO_ESCO                           BIT1\r
 #define        BT_INFO_8192E_2ANT_B_CONNECTION                         BIT0\r
 \r
 #define        BT_INFO_8192E_2ANT_B_SCO_ESCO                           BIT1\r
 #define        BT_INFO_8192E_2ANT_B_CONNECTION                         BIT0\r
 \r
+#define        BT_INFO_8192E_2ANT_A2DP_BASIC_RATE(_BT_INFO_EXT_)       \\r
+               (((_BT_INFO_EXT_&BIT0))? TRUE:FALSE)\r
+\r
 #define                BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT             2\r
 #define                BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT             2\r
+#define        NOISY_AP_NUM_THRESH                                             5\r
 \r
 typedef enum _BT_INFO_SRC_8192E_2ANT{\r
        BT_INFO_SRC_8192E_2ANT_WIFI_FW                  = 0x0,\r
 \r
 typedef enum _BT_INFO_SRC_8192E_2ANT{\r
        BT_INFO_SRC_8192E_2ANT_WIFI_FW                  = 0x0,\r
@@ -61,10 +65,15 @@ typedef struct _COEX_DM_8192E_2ANT{
        u1Byte          psTdmaDuAdjType;\r
        BOOLEAN         bResetTdmaAdjust;\r
        BOOLEAN         bAutoTdmaAdjust;\r
        u1Byte          psTdmaDuAdjType;\r
        BOOLEAN         bResetTdmaAdjust;\r
        BOOLEAN         bAutoTdmaAdjust;\r
+       BOOLEAN         bAutoTdmaAdjustLowRssi;\r
        BOOLEAN         bPrePsTdmaOn;\r
        BOOLEAN         bCurPsTdmaOn;\r
        BOOLEAN         bPreBtAutoReport;\r
        BOOLEAN         bCurBtAutoReport;\r
        BOOLEAN         bPrePsTdmaOn;\r
        BOOLEAN         bCurPsTdmaOn;\r
        BOOLEAN         bPreBtAutoReport;\r
        BOOLEAN         bCurBtAutoReport;\r
+       u1Byte          preLps;\r
+       u1Byte          curLps;\r
+       u1Byte          preRpwm;\r
+       u1Byte          curRpwm;\r
 \r
        // sw mechanism\r
        BOOLEAN         bPreRfRxLpfShrink;\r
 \r
        // sw mechanism\r
        BOOLEAN         bPreRfRxLpfShrink;\r
@@ -137,6 +146,22 @@ typedef struct _COEX_STA_8192E_2ANT{
        BOOLEAN                                 bC2hBtInquiryPage;\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
+       u1Byte                                  nScanAPNum;\r
+\r
+       u4Byte                                  nCRCOK_CCK;\r
+       u4Byte                                  nCRCOK_11g;\r
+       u4Byte                                  nCRCOK_11n;\r
+       u4Byte                                  nCRCOK_11nAgg;\r
+       \r
+       u4Byte                                  nCRCErr_CCK;\r
+       u4Byte                                  nCRCErr_11g;\r
+       u4Byte                                  nCRCErr_11n;\r
+       u4Byte                                  nCRCErr_11nAgg;\r
+\r
+       u1Byte                                  nCoexTableType;\r
+       BOOLEAN                                 bForceLpsOn;\r
+\r
+       u1Byte                                  disVerInfoCnt;\r
 }COEX_STA_8192E_2ANT, *PCOEX_STA_8192E_2ANT;\r
 \r
 //===========================================\r
 }COEX_STA_8192E_2ANT, *PCOEX_STA_8192E_2ANT;\r
 \r
 //===========================================\r
index 8ea08e87d3de1cb38066226680b3ac3cc8cb2e38..db5b42e48b3f209329215d6b0ccb6a0fc06fb8cc 100755 (executable)
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtc8723a1Ant.tmh"\r
+#endif\r
+\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
@@ -52,7 +57,7 @@ halbtc8723a1ant_Reg0x550Bit3(
                u1tmp &= ~BIT3;\r
        }\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x550, u1tmp);\r
                u1tmp &= ~BIT3;\r
        }\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x550, u1tmp);\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], set 0x550[3]=%d\n", (bSet? 1:0)));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], set 0x550[3]=%d\n", (bSet? 1:0)));\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -66,7 +71,7 @@ halbtc8723a1ant_NotifyFwScan(
        if(BTC_SCAN_START == scanType)\r
                H2C_Parameter[0] = 0x1;\r
 \r
        if(BTC_SCAN_START == scanType)\r
                H2C_Parameter[0] = 0x1;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Notify FW for wifi scan, write 0x3b=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Notify FW for wifi scan, write 0x3b=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x3b, 1, H2C_Parameter);\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x3b, 1, H2C_Parameter);\r
@@ -83,7 +88,7 @@ halbtc8723a1ant_QueryBtInfo(
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x38=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Query Bt Info, FW write 0x38=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x38, 1, H2C_Parameter);\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x38, 1, H2C_Parameter);\r
@@ -98,7 +103,7 @@ halbtc8723a1ant_SetSwRfRxLpfCorner(
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xf0ff7);\r
        }\r
        else\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xf0ff7);\r
        }\r
        else\r
@@ -107,7 +112,7 @@ halbtc8723a1ant_SetSwRfRxLpfCorner(
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
@@ -120,15 +125,12 @@ halbtc8723a1ant_RfShrink(
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
-                       pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
-\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
@@ -149,12 +151,12 @@ halbtc8723a1ant_SetSwPenaltyTxRateAdaptive(
        tmpU1 |= BIT0;\r
        if(bLowPenaltyRa)\r
        {\r
        tmpU1 |= BIT0;\r
        if(bLowPenaltyRa)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
                tmpU1 |= BIT2;\r
        }\r
 \r
                tmpU1 |= BIT2;\r
        }\r
 \r
@@ -169,15 +171,12 @@ halbtc8723a1ant_LowPenaltyRa(
        )\r
 {\r
        return;\r
        )\r
 {\r
        return;\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
-                       pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
-\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
@@ -194,13 +193,13 @@ halbtc8723a1ant_SetCoexTable(
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -213,19 +212,14 @@ halbtc8723a1ant_CoexTable(
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
                (bForceExec? "force to":""), val0x6c0, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
                (bForceExec? "force to":""), val0x6c0, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
-       \r
+       {       \r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                        (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )\r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                        (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )\r
@@ -251,7 +245,7 @@ halbtc8723a1ant_SetFwIgnoreWlanAct(
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x25=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x25=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x25, 1, H2C_Parameter);    \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x25, 1, H2C_Parameter);    \r
@@ -264,15 +258,12 @@ halbtc8723a1ant_IgnoreWlanAct(
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
-                       pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
-\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
@@ -306,7 +297,7 @@ halbtc8723a1ant_SetFwPstdma(
                {\r
                        if(type != 5 && type != 12)\r
                        {\r
                {\r
                        if(type != 5 && type != 12)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], FW for 1Ant AP mode\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], FW for 1Ant AP mode\n"));\r
                                realByte1 &= ~BIT4;\r
                                realByte1 |= BIT5;\r
 \r
                                realByte1 &= ~BIT4;\r
                                realByte1 |= BIT5;\r
 \r
@@ -327,7 +318,7 @@ halbtc8723a1ant_SetFwPstdma(
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = realByte5;\r
        \r
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = realByte5;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x3a(5bytes)=0x%x%08x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x3a(5bytes)=0x%x%08x\n", \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
@@ -342,18 +333,13 @@ halbtc8723a1ant_PsTdma(
        IN      u1Byte                  type\r
        )\r
 {\r
        IN      u1Byte                  type\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
                (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));             \r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));             \r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
-                       pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
-                       pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
-\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
@@ -515,9 +501,9 @@ halbtc8723a1ant_MonitorBtCtr(
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
@@ -554,23 +540,23 @@ halbtc8723a1ant_MonitorBtEnableDisable(
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt all counters=0, %d times!!\n", \r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is disabled !!\n"));\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n", \r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
@@ -600,7 +586,7 @@ halbtc8723a1ant_TdmaDurationAdjust(
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
        btState = pCoexDm->btStatus;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
        btState = pCoexDm->btStatus;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], TdmaDurationAdjust()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], TdmaDurationAdjust()\n"));\r
        if(pCoexDm->psTdmaGlobalCnt != pCoexDm->psTdmaMonitorCnt)\r
        {\r
                pCoexDm->psTdmaMonitorCnt = 0;\r
        if(pCoexDm->psTdmaGlobalCnt != pCoexDm->psTdmaMonitorCnt)\r
        {\r
                pCoexDm->psTdmaMonitorCnt = 0;\r
@@ -608,7 +594,7 @@ halbtc8723a1ant_TdmaDurationAdjust(
        }\r
        if(pCoexDm->psTdmaMonitorCnt == 0)\r
        {\r
        }\r
        if(pCoexDm->psTdmaMonitorCnt == 0)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], first run BT A2DP + WiFi busy state!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], first run BT A2DP + WiFi busy state!!\n"));\r
                if(btState == BT_STATE_8723A_1ANT_ACL_ONLY_BUSY)\r
                {\r
                        halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
                if(btState == BT_STATE_8723A_1ANT_ACL_ONLY_BUSY)\r
                {\r
                        halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
@@ -631,7 +617,7 @@ halbtc8723a1ant_TdmaDurationAdjust(
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], retryCount = %d\n", retryCount));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], retryCount = %d\n", retryCount));\r
                result = 0;\r
                WaitCount++; \r
                  \r
                result = 0;\r
                WaitCount++; \r
                  \r
@@ -650,7 +636,7 @@ halbtc8723a1ant_TdmaDurationAdjust(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -676,7 +662,7 @@ halbtc8723a1ant_TdmaDurationAdjust(
                                dn = 0;\r
                                WaitCount = 0;  \r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;  \r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -694,17 +680,17 @@ halbtc8723a1ant_TdmaDurationAdjust(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
                \r
                {\r
                }\r
                \r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT TxRx counter H+L <= 1200\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT TxRx counter H+L <= 1200\n"));\r
                        if(btState != BT_STATE_8723A_1ANT_ACL_ONLY_BUSY)\r
                        {\r
                        if(btState != BT_STATE_8723A_1ANT_ACL_ONLY_BUSY)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], NOT ACL only busy!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], NOT ACL only busy!\n"));\r
                                if(BTC_WIFI_BW_HT40 != wifiBw)\r
                                {\r
                                if(BTC_WIFI_BW_HT40 != wifiBw)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], 20MHz\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 20MHz\n"));\r
                                        if(result == -1)\r
                                        {\r
                                                if(pCoexDm->curPsTdma == 22)\r
                                        if(result == -1)\r
                                        {\r
                                                if(pCoexDm->curPsTdma == 22)\r
@@ -748,14 +734,14 @@ halbtc8723a1ant_TdmaDurationAdjust(
                                                (pCoexDm->psTdmaDuAdjType != 24) &&\r
                                                (pCoexDm->psTdmaDuAdjType != 25) )\r
                                        {\r
                                                (pCoexDm->psTdmaDuAdjType != 24) &&\r
                                                (pCoexDm->psTdmaDuAdjType != 25) )\r
                                        {\r
-                                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], duration case out of handle!!\n"));\r
+                                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], duration case out of handle!!\n"));\r
                                                halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 23);\r
                                                pCoexDm->psTdmaDuAdjType = 23;\r
                                        }\r
                                }\r
                                else\r
                                {\r
                                                halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 23);\r
                                                pCoexDm->psTdmaDuAdjType = 23;\r
                                        }\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], 40MHz\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 40MHz\n"));\r
                                        if(result == -1)\r
                                        {\r
                                                if(pCoexDm->curPsTdma == 23)\r
                                        if(result == -1)\r
                                        {\r
                                                if(pCoexDm->curPsTdma == 23)\r
@@ -799,7 +785,7 @@ halbtc8723a1ant_TdmaDurationAdjust(
                                                (pCoexDm->psTdmaDuAdjType != 25) &&\r
                                                (pCoexDm->psTdmaDuAdjType != 27) )\r
                                        {\r
                                                (pCoexDm->psTdmaDuAdjType != 25) &&\r
                                                (pCoexDm->psTdmaDuAdjType != 27) )\r
                                        {\r
-                                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], duration case out of handle!!\n"));\r
+                                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], duration case out of handle!!\n"));\r
                                                halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 24);\r
                                                pCoexDm->psTdmaDuAdjType = 24;\r
                                        }\r
                                                halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 24);\r
                                                pCoexDm->psTdmaDuAdjType = 24;\r
                                        }\r
@@ -807,7 +793,7 @@ halbtc8723a1ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ACL only busy\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ACL only busy\n"));\r
                                if (result == -1)\r
                                {\r
                                        if(pCoexDm->curPsTdma == 1)\r
                                if (result == -1)\r
                                {\r
                                        if(pCoexDm->curPsTdma == 1)\r
@@ -852,7 +838,7 @@ halbtc8723a1ant_TdmaDurationAdjust(
                                        (pCoexDm->psTdmaDuAdjType != 9) &&\r
                                        (pCoexDm->psTdmaDuAdjType != 11) )\r
                                {\r
                                        (pCoexDm->psTdmaDuAdjType != 9) &&\r
                                        (pCoexDm->psTdmaDuAdjType != 11) )\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], duration case out of handle!!\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], duration case out of handle!!\n"));\r
                                        halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                        pCoexDm->psTdmaDuAdjType = 2;\r
                                }\r
                                        halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                        pCoexDm->psTdmaDuAdjType = 2;\r
                                }\r
@@ -864,7 +850,7 @@ halbtc8723a1ant_TdmaDurationAdjust(
        // then we have to adjust it back to the previous record one.\r
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
        // then we have to adjust it back to the previous record one.\r
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
@@ -877,7 +863,7 @@ halbtc8723a1ant_TdmaDurationAdjust(
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
                }\r
        }\r
        pCoexDm->psTdmaMonitorCnt++;\r
                }\r
        }\r
        pCoexDm->psTdmaMonitorCnt++;\r
@@ -899,14 +885,14 @@ halbtc8723a1ant_CoexForWifiConnect(
 \r
        if(bWifiConnected)\r
        {\r
 \r
        if(bWifiConnected)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi connected!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi connected!!\n"));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
                \r
                if( !bWifiBusy &&\r
                        ((BT_STATE_8723A_1ANT_NO_CONNECTION == btState) ||\r
                        (BT_STATE_8723A_1ANT_CONNECT_IDLE == btState)) )\r
                {\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
                \r
                if( !bWifiBusy &&\r
                        ((BT_STATE_8723A_1ANT_NO_CONNECTION == btState) ||\r
                        (BT_STATE_8723A_1ANT_CONNECT_IDLE == btState)) )\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], [Wifi is idle] or [Bt is non connected idle or Bt is connected idle]!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], [Wifi is idle] or [Bt is non connected idle or Bt is connected idle]!!\n"));\r
 \r
                        if(BT_STATE_8723A_1ANT_NO_CONNECTION == btState)\r
                                halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 9);\r
 \r
                        if(BT_STATE_8723A_1ANT_NO_CONNECTION == btState)\r
                                halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 9);\r
@@ -965,14 +951,14 @@ halbtc8723a1ant_CoexForWifiConnect(
                                        }\r
                                        break;\r
                                default:\r
                                        }\r
                                        break;\r
                                default:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], error!!!, undefined case in halbtc8723a1ant_CoexForWifiConnect()!!\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], error!!!, undefined case in halbtc8723a1ant_CoexForWifiConnect()!!\n"));\r
                                        break;\r
                        }\r
                }\r
        }\r
        else\r
        {\r
                                        break;\r
                        }\r
                }\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is disconnected!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is disconnected!!\n"));\r
        }\r
 \r
        pCoexDm->psTdmaGlobalCnt++;\r
        }\r
 \r
        pCoexDm->psTdmaGlobalCnt++;\r
@@ -1021,7 +1007,7 @@ EXhalbtc8723a1ant_InitHwConfig(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 1Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 1Ant Init HW Config!!\n"));\r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
@@ -1053,7 +1039,7 @@ EXhalbtc8723a1ant_InitCoexDm(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
        \r
        halbtc8723a1ant_InitCoexDm(pBtCoexist);\r
 }\r
        \r
        halbtc8723a1ant_InitCoexDm(pBtCoexist);\r
 }\r
@@ -1090,7 +1076,7 @@ EXhalbtc8723a1ant_DisplayCoexInfo(
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
-\r
+       \r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
@@ -1236,12 +1222,12 @@ EXhalbtc8723a1ant_IpsNotify(
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                halbtc8723a1ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
                halbtc8723a1ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
                //halbtc8723a1ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
                //halbtc8723a1ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
@@ -1254,11 +1240,11 @@ EXhalbtc8723a1ant_LpsNotify(
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
        }\r
 }\r
                halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
        }\r
 }\r
@@ -1282,7 +1268,7 @@ EXhalbtc8723a1ant_ScanNotify(
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                if(BTC_SCAN_START == type)\r
                {\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                if(BTC_SCAN_START == type)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
                        if(!bWifiConnected)     // non-connected scan\r
                        {\r
                                //set 0x550[3]=1 before PsTdma\r
                        if(!bWifiConnected)     // non-connected scan\r
                        {\r
                                //set 0x550[3]=1 before PsTdma\r
@@ -1293,7 +1279,7 @@ EXhalbtc8723a1ant_ScanNotify(
                }\r
                else if(BTC_SCAN_FINISH == type)\r
                {\r
                }\r
                else if(BTC_SCAN_FINISH == type)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
                        if(!bWifiConnected)     // non-connected scan\r
                        {\r
                                halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); \r
                        if(!bWifiConnected)     // non-connected scan\r
                        {\r
                                halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); \r
@@ -1322,14 +1308,14 @@ EXhalbtc8723a1ant_ConnectNotify(
        {\r
                if(BTC_ASSOCIATE_START == type)\r
                {\r
        {\r
                if(BTC_ASSOCIATE_START == type)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));\r
                        //set 0x550[3]=1 before PsTdma\r
                        halbtc8723a1ant_Reg0x550Bit3(pBtCoexist, TRUE);\r
                        halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);       // extend wifi slot     \r
                }\r
                else if(BTC_ASSOCIATE_FINISH == type)\r
                {\r
                        //set 0x550[3]=1 before PsTdma\r
                        halbtc8723a1ant_Reg0x550Bit3(pBtCoexist, TRUE);\r
                        halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);       // extend wifi slot     \r
                }\r
                else if(BTC_ASSOCIATE_FINISH == type)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(!bWifiConnected)     // non-connected scan\r
                        {\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(!bWifiConnected)     // non-connected scan\r
                        {\r
@@ -1351,11 +1337,11 @@ EXhalbtc8723a1ant_MediaStatusNotify(
 {\r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 {\r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -1367,7 +1353,7 @@ EXhalbtc8723a1ant_SpecialPacketNotify(
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], DHCP Packet notify\n"));\r
                if(pBtCoexist->btInfo.bBtDisabled)\r
                {\r
                        halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 9);      \r
                if(pBtCoexist->btInfo.bBtDisabled)\r
                {\r
                        halbtc8723a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 9);      \r
@@ -1395,7 +1381,7 @@ EXhalbtc8723a1ant_BtInfoNotify(
        rspSource = BT_INFO_SRC_8723A_1ANT_BT_RSP;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
        rspSource = BT_INFO_SRC_8723A_1ANT_BT_RSP;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
@@ -1403,11 +1389,11 @@ EXhalbtc8723a1ant_BtInfoNotify(
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x]\n", tmpBuf[i]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x, ", tmpBuf[i]));\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
@@ -1508,7 +1494,7 @@ EXhalbtc8723a1ant_Periodical(
 {\r
        BOOLEAN         bScan=FALSE, bLink=FALSE, bRoam=FALSE, bWifiConnected=FALSE;\r
        \r
 {\r
        BOOLEAN         bScan=FALSE, bLink=FALSE, bRoam=FALSE, bWifiConnected=FALSE;\r
        \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], 1Ant Periodical!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 1Ant Periodical!!\n"));\r
        \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
        \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
index ffe117596f5b981a1a6de7adfa3ac313511a3c4f..f32bd9f8e33ea26e1938cb6c2857aa5f6dbc52ba 100755 (executable)
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtc8723a2Ant.tmh"\r
+#endif\r
+\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
@@ -103,12 +108,10 @@ halbtc8723a2ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -116,12 +119,10 @@ halbtc8723a2ant_BtRssiState(
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -129,7 +130,7 @@ halbtc8723a2ant_BtRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Rssi thresh error!!\n"));\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
@@ -139,12 +140,10 @@ halbtc8723a2ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -153,17 +152,14 @@ halbtc8723a2ant_BtRssiState(
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -171,12 +167,10 @@ halbtc8723a2ant_BtRssiState(
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -208,12 +202,10 @@ halbtc8723a2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -221,12 +213,10 @@ halbtc8723a2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -234,7 +224,7 @@ halbtc8723a2ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -244,12 +234,10 @@ halbtc8723a2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -258,17 +246,14 @@ halbtc8723a2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -276,12 +261,10 @@ halbtc8723a2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -319,7 +302,7 @@ halbtc8723a2ant_IndicateWifiChnlBwInfo(
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x19=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x19=0x%x\n", \r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x19, 3, H2C_Parameter);\r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x19, 3, H2C_Parameter);\r
@@ -336,7 +319,7 @@ halbtc8723a2ant_QueryBtInfo(
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x38=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Query Bt Info, FW write 0x38=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x38, 1, H2C_Parameter);\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x38, 1, H2C_Parameter);\r
@@ -360,7 +343,7 @@ halbtc8723a2ant_ActionAlgorithm(
        \r
        if((pStackInfo->bScoExist) ||(bBtHsOn) ||(pStackInfo->bHidExist))\r
        {\r
        \r
        if((pStackInfo->bScoExist) ||(bBtHsOn) ||(pStackInfo->bHidExist))\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO or HID or HS exists, set BT non-idle !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO or HID or HS exists, set BT non-idle !!!\n"));\r
                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_NON_IDLE;\r
        }\r
        else\r
                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_NON_IDLE;\r
        }\r
        else\r
@@ -371,12 +354,12 @@ halbtc8723a2ant_ActionAlgorithm(
                {               \r
                        if( (pCoexSta->lowPriorityTx+   pCoexSta->lowPriorityRx) < 100)\r
                        {\r
                {               \r
                        if( (pCoexSta->lowPriorityTx+   pCoexSta->lowPriorityRx) < 100)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP, low priority tx+rx < 100, set BT connected-idle!!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP, low priority tx+rx < 100, set BT connected-idle!!!\n"));\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
                        }\r
                        else\r
                        {\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP, low priority tx+rx >= 100, set BT non-idle!!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP, low priority tx+rx >= 100, set BT non-idle!!!\n"));\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_NON_IDLE;\r
                        }\r
                }\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_NON_IDLE;\r
                        }\r
                }\r
@@ -386,7 +369,7 @@ halbtc8723a2ant_ActionAlgorithm(
                {               \r
                        if((pCoexSta->lowPriorityTx+    pCoexSta->lowPriorityRx) < 600)\r
                        {\r
                {               \r
                        if((pCoexSta->lowPriorityTx+    pCoexSta->lowPriorityRx) < 600)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN, low priority tx+rx < 600, set BT connected-idle!!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN, low priority tx+rx < 600, set BT connected-idle!!!\n"));\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
                        }\r
                        else\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
                        }\r
                        else\r
@@ -395,14 +378,14 @@ halbtc8723a2ant_ActionAlgorithm(
                                {\r
                                        if((pCoexSta->lowPriorityRx /pCoexSta->lowPriorityTx)>9 )\r
                                        {\r
                                {\r
                                        if((pCoexSta->lowPriorityRx /pCoexSta->lowPriorityTx)>9 )\r
                                        {\r
-                                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN, low priority rx/tx > 9, set BT connected-idle!!!\n"));\r
+                                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN, low priority rx/tx > 9, set BT connected-idle!!!\n"));\r
                                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
                                        }\r
                                }\r
                        }\r
                        if(BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus)\r
                        {\r
                                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
                                        }\r
                                }\r
                        }\r
                        if(BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN, set BT non-idle!!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN, set BT non-idle!!!\n"));\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_NON_IDLE;\r
                        }\r
                }\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_NON_IDLE;\r
                        }\r
                }\r
@@ -413,7 +396,7 @@ halbtc8723a2ant_ActionAlgorithm(
                {\r
                        if((pCoexSta->lowPriorityTx+    pCoexSta->lowPriorityRx) < 600)\r
                        {\r
                {\r
                        if((pCoexSta->lowPriorityTx+    pCoexSta->lowPriorityRx) < 600)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN+A2DP, low priority tx+rx < 600, set BT connected-idle!!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN+A2DP, low priority tx+rx < 600, set BT connected-idle!!!\n"));\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
                        }\r
                        else\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
                        }\r
                        else\r
@@ -422,14 +405,14 @@ halbtc8723a2ant_ActionAlgorithm(
                                {\r
                                        if((pCoexSta->lowPriorityRx /pCoexSta->lowPriorityTx)>9 )\r
                                        {\r
                                {\r
                                        if((pCoexSta->lowPriorityRx /pCoexSta->lowPriorityTx)>9 )\r
                                        {\r
-                                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN+A2DP, low priority rx/tx > 9, set BT connected-idle!!!\n"));\r
+                                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN+A2DP, low priority rx/tx > 9, set BT connected-idle!!!\n"));\r
                                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
                                        }\r
                                }\r
                        }\r
                        if(BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus)\r
                        {\r
                                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
                                        }\r
                                }\r
                        }\r
                        if(BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN+A2DP, set BT non-idle!!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN+A2DP, set BT non-idle!!!\n"));\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_NON_IDLE;\r
                        }\r
                }\r
                                pCoexDm->btStatus = BT_8723A_2ANT_BT_STATUS_NON_IDLE;\r
                        }\r
                }\r
@@ -450,7 +433,7 @@ halbtc8723a2ant_ActionAlgorithm(
 \r
        if(!pStackInfo->bBtLinkExist)\r
        {\r
 \r
        if(!pStackInfo->bBtLinkExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No profile exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No profile exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
@@ -467,31 +450,31 @@ halbtc8723a2ant_ActionAlgorithm(
        {\r
                if(pStackInfo->bScoExist)\r
                {\r
        {\r
                if(pStackInfo->bScoExist)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO only\n"));\r
                        algorithm = BT_8723A_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
                        algorithm = BT_8723A_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID only\n"));\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP only\n"));\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(HS) only\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(EDR) only\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
@@ -503,24 +486,24 @@ halbtc8723a2ant_ActionAlgorithm(
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID\n"));\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(HS)\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(EDR)\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -530,7 +513,7 @@ halbtc8723a2ant_ActionAlgorithm(
                        if( pStackInfo->bHidExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {\r
                        if( pStackInfo->bHidExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP\n"));\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pStackInfo->bHidExist &&\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pStackInfo->bHidExist &&\r
@@ -538,12 +521,12 @@ halbtc8723a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(HS)\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -552,12 +535,12 @@ halbtc8723a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
@@ -570,7 +553,7 @@ halbtc8723a2ant_ActionAlgorithm(
                        if( pStackInfo->bHidExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {\r
                        if( pStackInfo->bHidExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if( pStackInfo->bHidExist &&\r
                                algorithm = BT_8723A_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if( pStackInfo->bHidExist &&\r
@@ -578,12 +561,12 @@ halbtc8723a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -592,12 +575,12 @@ halbtc8723a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -610,12 +593,12 @@ halbtc8723a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
@@ -631,12 +614,12 @@ halbtc8723a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
 \r
                                }\r
                                else\r
                                {\r
 \r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -673,13 +656,13 @@ halbtc8723a2ant_NeedToDecBtPwr(
                {\r
                        if(btHsRssi > 37)\r
                        {\r
                {\r
                        if(btHsRssi > 37)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for HS mode!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Need to decrease bt power for HS mode!!\n"));\r
                                bRet = TRUE;\r
                        }\r
                }\r
                else\r
                {\r
                                bRet = TRUE;\r
                        }\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for Wifi is connected!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Need to decrease bt power for Wifi is connected!!\n"));\r
                        bRet = TRUE;\r
                }\r
        }\r
                        bRet = TRUE;\r
                }\r
        }\r
@@ -699,8 +682,8 @@ halbtc8723a2ant_SetFwDacSwingLevel(
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x29=0x%x\n", H2C_Parameter[0]));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x29=0x%x\n", H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x29, 1, H2C_Parameter);\r
 }\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x29, 1, H2C_Parameter);\r
 }\r
@@ -720,7 +703,7 @@ halbtc8723a2ant_SetFwDecBtPwr(
                H2C_Parameter[0] |= BIT1;\r
        }\r
 \r
                H2C_Parameter[0] |= BIT1;\r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power : %s, FW write 0x21=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], decrease Bt Power : %s, FW write 0x21=0x%x\n", \r
                (bDecBtPwr? "Yes!!":"No!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x21, 1, H2C_Parameter);    \r
                (bDecBtPwr? "Yes!!":"No!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x21, 1, H2C_Parameter);    \r
@@ -733,15 +716,12 @@ halbtc8723a2ant_DecBtPwr(
        IN      BOOLEAN                 bDecBtPwr\r
        )\r
 {\r
        IN      BOOLEAN                 bDecBtPwr\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s Dec BT power = %s\n",  \r
                (bForceExec? "force to":""), ((bDecBtPwr)? "ON":"OFF")));\r
        pCoexDm->bCurDecBtPwr = bDecBtPwr;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bDecBtPwr)? "ON":"OFF")));\r
        pCoexDm->bCurDecBtPwr = bDecBtPwr;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreDecBtPwr=%d, bCurDecBtPwr=%d\n", \r
-                       pCoexDm->bPreDecBtPwr, pCoexDm->bCurDecBtPwr));\r
-\r
                if(pCoexDm->bPreDecBtPwr == pCoexDm->bCurDecBtPwr) \r
                        return;\r
        }\r
                if(pCoexDm->bPreDecBtPwr == pCoexDm->bCurDecBtPwr) \r
                        return;\r
        }\r
@@ -757,15 +737,12 @@ halbtc8723a2ant_FwDacSwingLvl(
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n", \r
-                       pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
-\r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
                        return;\r
        }\r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
                        return;\r
        }\r
@@ -784,7 +761,7 @@ halbtc8723a2ant_SetSwRfRxLpfCorner(
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xf0ff7);\r
        }\r
        else\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xf0ff7);\r
        }\r
        else\r
@@ -793,7 +770,7 @@ halbtc8723a2ant_SetSwRfRxLpfCorner(
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
@@ -806,15 +783,12 @@ halbtc8723a2ant_RfShrink(
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
-                       pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
-\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
@@ -835,12 +809,12 @@ halbtc8723a2ant_SetSwPenaltyTxRateAdaptive(
        tmpU1 |= BIT0;\r
        if(bLowPenaltyRa)\r
        {\r
        tmpU1 |= BIT0;\r
        if(bLowPenaltyRa)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
                tmpU1 |= BIT2;\r
        }\r
 \r
                tmpU1 |= BIT2;\r
        }\r
 \r
@@ -855,15 +829,12 @@ halbtc8723a2ant_LowPenaltyRa(
        )\r
 {\r
        return;\r
        )\r
 {\r
        return;\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
-                       pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
-\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
@@ -898,17 +869,13 @@ halbtc8723a2ant_DacSwing(
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
-                       pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
-                       pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
-\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
@@ -928,12 +895,12 @@ halbtc8723a2ant_SetAdcBackOff(
 {\r
        if(bAdcBackOff)\r
        {\r
 {\r
        if(bAdcBackOff)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level On!\n"));\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a07611);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a07611);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));                \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level Off!\n"));           \r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a05611);\r
        }\r
 }\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc04,0x3a05611);\r
        }\r
 }\r
@@ -945,15 +912,12 @@ halbtc8723a2ant_AdcBackOff(
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
-                       pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
-\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
@@ -972,7 +936,7 @@ halbtc8723a2ant_SetAgcTable(
 \r
        if(bAgcTableEn)\r
        {\r
 \r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table On!\n"));\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4e1c0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4d1d0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4c1e0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4e1c0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4d1d0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x4c1e0001);\r
@@ -989,7 +953,7 @@ halbtc8723a2ant_SetAgcTable(
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table Off!\n"));\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x641c0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x631d0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x621e0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x641c0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x631d0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78,0x621e0001);\r
@@ -1015,15 +979,12 @@ halbtc8723a2ant_AgcTable(
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s %s Agc Table\n",  \r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
-                       pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
-\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
@@ -1040,13 +1001,13 @@ halbtc8723a2ant_SetCoexTable(
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -1059,19 +1020,14 @@ halbtc8723a2ant_CoexTable(
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
                (bForceExec? "force to":""), val0x6c0, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
                (bForceExec? "force to":""), val0x6c0, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
-       \r
+       {       \r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                        (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )\r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                        (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )\r
@@ -1097,7 +1053,7 @@ halbtc8723a2ant_SetFwIgnoreWlanAct(
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x25=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x25=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x25, 1, H2C_Parameter);    \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x25, 1, H2C_Parameter);    \r
@@ -1110,15 +1066,12 @@ halbtc8723a2ant_IgnoreWlanAct(
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
-                       pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
-\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
@@ -1151,7 +1104,7 @@ halbtc8723a2ant_SetFwPstdma(
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = byte5;\r
        \r
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = byte5;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x3a(5bytes)=0x%x%08x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x3a(5bytes)=0x%x%08x\n", \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
@@ -1175,12 +1128,12 @@ halbtc8723a2ant_PsTdma(
        {               \r
                pCoexDm->bCurPsTdmaOn = TRUE;\r
                pCoexDm->curPsTdma = 8;\r
        {               \r
                pCoexDm->bCurPsTdmaOn = TRUE;\r
                pCoexDm->curPsTdma = 8;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], turn ON PS TDMA, type=%d for BT tx/rx counters=%d(>3000)\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], turn ON PS TDMA, type=%d for BT tx/rx counters=%d(>3000)\n", \r
                        pCoexDm->curPsTdma, btTxRxCnt));\r
        }\r
        else\r
        {\r
                        pCoexDm->curPsTdma, btTxRxCnt));\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
                        (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));             \r
                pCoexDm->bCurPsTdmaOn = bTurnOn;\r
                pCoexDm->curPsTdma = type;\r
                        (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));             \r
                pCoexDm->bCurPsTdmaOn = bTurnOn;\r
                pCoexDm->curPsTdma = type;\r
@@ -1188,11 +1141,6 @@ halbtc8723a2ant_PsTdma(
 \r
        if(!bForceExec)\r
        {\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
-                       pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
-                       pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
-\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
@@ -1389,9 +1337,9 @@ halbtc8723a2ant_MonitorBtCtr(
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
@@ -1428,23 +1376,23 @@ halbtc8723a2ant_MonitorBtEnableDisable(
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt all counters=0, %d times!!\n", \r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is disabled !!\n"));\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n", \r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
@@ -1480,7 +1428,7 @@ halbtc8723a2ant_IsCommonAction(
        if(halbtc8723a2ant_IsWifiIdle(pBtCoexist) && \r
                BT_8723A_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus)\r
        {\r
        if(halbtc8723a2ant_IsWifiIdle(pBtCoexist) && \r
                BT_8723A_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi idle + Bt idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi idle + Bt idle!!\n"));\r
                        \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, FALSE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, FALSE);\r
                        \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, FALSE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, FALSE);\r
@@ -1499,7 +1447,7 @@ halbtc8723a2ant_IsCommonAction(
        else if(!halbtc8723a2ant_IsWifiIdle(pBtCoexist) && \r
                        (BT_8723A_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus) )\r
        {\r
        else if(!halbtc8723a2ant_IsWifiIdle(pBtCoexist) && \r
                        (BT_8723A_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non-idle + BT idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non-idle + BT idle!!\n"));\r
 \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, FALSE);\r
 \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, FALSE);\r
@@ -1519,7 +1467,7 @@ halbtc8723a2ant_IsCommonAction(
        else if(halbtc8723a2ant_IsWifiIdle(pBtCoexist) && \r
                (BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
        else if(halbtc8723a2ant_IsWifiIdle(pBtCoexist) && \r
                (BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi idle + Bt connected idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi idle + Bt connected idle!!\n"));\r
                \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, TRUE);\r
                \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, TRUE);\r
@@ -1539,7 +1487,7 @@ halbtc8723a2ant_IsCommonAction(
        else if(!halbtc8723a2ant_IsWifiIdle(pBtCoexist) && \r
                (BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
        else if(!halbtc8723a2ant_IsWifiIdle(pBtCoexist) && \r
                (BT_8723A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non-idle + Bt connected idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non-idle + Bt connected idle!!\n"));\r
 \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, TRUE);\r
 \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, TRUE);\r
@@ -1559,7 +1507,7 @@ halbtc8723a2ant_IsCommonAction(
        else if(halbtc8723a2ant_IsWifiIdle(pBtCoexist) && \r
                        (BT_8723A_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus) )\r
        {\r
        else if(halbtc8723a2ant_IsWifiIdle(pBtCoexist) && \r
                        (BT_8723A_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi idle + BT non-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi idle + BT non-idle!!\n"));\r
                \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, TRUE);\r
                \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, TRUE);\r
@@ -1579,7 +1527,7 @@ halbtc8723a2ant_IsCommonAction(
        else if(halbtc8723a2ant_IsWifiConnectedIdle(pBtCoexist) && \r
                        (BT_8723A_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus) )\r
        {\r
        else if(halbtc8723a2ant_IsWifiConnectedIdle(pBtCoexist) && \r
                        (BT_8723A_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected-idle + BT non-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected-idle + BT non-idle!!\n"));\r
 \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, TRUE);\r
 \r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, TRUE);\r
@@ -1598,7 +1546,7 @@ halbtc8723a2ant_IsCommonAction(
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non-idle + BT non-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non-idle + BT non-idle!!\n"));\r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_IgnoreWlanAct(pBtCoexist, NORMAL_EXEC, FALSE);\r
                halbtc8723a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, TRUE);\r
                halbtc8723a2ant_IgnoreWlanAct(pBtCoexist, NORMAL_EXEC, FALSE);\r
@@ -1621,12 +1569,12 @@ halbtc8723a2ant_TdmaDurationAdjust(
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TdmaDurationAdjust()\n"));\r
 \r
        if(pCoexDm->bResetTdmaAdjust)\r
        {\r
                pCoexDm->bResetTdmaAdjust = FALSE;\r
 \r
        if(pCoexDm->bResetTdmaAdjust)\r
        {\r
                pCoexDm->bResetTdmaAdjust = FALSE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
                {\r
                        if(bScoHid)\r
                        {\r
                {\r
                        if(bScoHid)\r
                        {\r
@@ -1739,8 +1687,8 @@ halbtc8723a2ant_TdmaDurationAdjust(
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], retryCount = %d\n", retryCount));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
@@ -1760,7 +1708,7 @@ halbtc8723a2ant_TdmaDurationAdjust(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -1786,7 +1734,7 @@ halbtc8723a2ant_TdmaDurationAdjust(
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -1804,15 +1752,15 @@ halbtc8723a2ant_TdmaDurationAdjust(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
 \r
                }\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], max Interval = %d\n", maxInterval));\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
 \r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
 \r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
@@ -1924,7 +1872,7 @@ halbtc8723a2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
@@ -2038,7 +1986,7 @@ halbtc8723a2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8723a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8723a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
@@ -2148,7 +2096,7 @@ halbtc8723a2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
@@ -2261,7 +2209,7 @@ halbtc8723a2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8723a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8723a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
@@ -2371,7 +2319,7 @@ halbtc8723a2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
@@ -2487,7 +2435,7 @@ halbtc8723a2ant_TdmaDurationAdjust(
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
@@ -2500,7 +2448,7 @@ halbtc8723a2ant_TdmaDurationAdjust(
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -3253,7 +3201,7 @@ halbtc8723a2ant_RunCoexistMechanism(
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Manual control!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Manual control!!!\n"));\r
                return;\r
        }\r
 \r
                return;\r
        }\r
 \r
@@ -3268,7 +3216,7 @@ halbtc8723a2ant_RunCoexistMechanism(
                algorithm = halbtc8723a2ant_ActionAlgorithm(pBtCoexist);\r
                if(pCoexSta->bHoldPeriodCnt && (BT_8723A_2ANT_COEX_ALGO_PANHS!=algorithm))\r
                {\r
                algorithm = halbtc8723a2ant_ActionAlgorithm(pBtCoexist);\r
                if(pCoexSta->bHoldPeriodCnt && (BT_8723A_2ANT_COEX_ALGO_PANHS!=algorithm))\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex],Hold BT inquiry/page scan setting (cnt = %d)!!\n", \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex],Hold BT inquiry/page scan setting (cnt = %d)!!\n", \r
                                pCoexSta->bHoldPeriodCnt));\r
                        if(pCoexSta->bHoldPeriodCnt >= 6)\r
                        {\r
                                pCoexSta->bHoldPeriodCnt));\r
                        if(pCoexSta->bHoldPeriodCnt >= 6)\r
                        {\r
@@ -3281,60 +3229,60 @@ halbtc8723a2ant_RunCoexistMechanism(
                }\r
 \r
                pCoexDm->curAlgorithm = algorithm;\r
                }\r
 \r
                pCoexDm->curAlgorithm = algorithm;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
                if(halbtc8723a2ant_IsCommonAction(pBtCoexist))\r
                {\r
                if(halbtc8723a2ant_IsCommonAction(pBtCoexist))\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant common.\n"));\r
                        pCoexDm->bResetTdmaAdjust = TRUE;\r
                }\r
                else\r
                {\r
                        if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
                        {\r
                        pCoexDm->bResetTdmaAdjust = TRUE;\r
                }\r
                else\r
                {\r
                        if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
                                        pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
                                pCoexDm->bResetTdmaAdjust = TRUE;\r
                        }\r
                        switch(pCoexDm->curAlgorithm)\r
                        {\r
                                case BT_8723A_2ANT_COEX_ALGO_SCO:\r
                                        pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
                                pCoexDm->bResetTdmaAdjust = TRUE;\r
                        }\r
                        switch(pCoexDm->curAlgorithm)\r
                        {\r
                                case BT_8723A_2ANT_COEX_ALGO_SCO:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
                                        halbtc8723a2ant_ActionSco(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_HID:\r
                                        halbtc8723a2ant_ActionSco(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_HID:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
                                        halbtc8723a2ant_ActionHid(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_A2DP:\r
                                        halbtc8723a2ant_ActionHid(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_A2DP:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
                                        halbtc8723a2ant_ActionA2dp(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_PANEDR:\r
                                        halbtc8723a2ant_ActionA2dp(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_PANEDR:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
                                        halbtc8723a2ant_ActionPanEdr(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_PANHS:\r
                                        halbtc8723a2ant_ActionPanEdr(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_PANHS:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
                                        halbtc8723a2ant_ActionPanHs(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_PANEDR_A2DP:\r
                                        halbtc8723a2ant_ActionPanHs(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_PANEDR_A2DP:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
                                        halbtc8723a2ant_ActionPanEdrA2dp(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_PANEDR_HID:\r
                                        halbtc8723a2ant_ActionPanEdrA2dp(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_PANEDR_HID:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
                                        halbtc8723a2ant_ActionPanEdrHid(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
                                        halbtc8723a2ant_ActionPanEdrHid(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
                                        halbtc8723a2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_HID_A2DP:\r
                                        halbtc8723a2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                        break;\r
                                case BT_8723A_2ANT_COEX_ALGO_HID_A2DP:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
                                        halbtc8723a2ant_ActionHidA2dp(pBtCoexist);\r
                                        break;\r
                                default:\r
                                        halbtc8723a2ant_ActionHidA2dp(pBtCoexist);\r
                                        break;\r
                                default:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
                                        halbtc8723a2ant_CoexAllOff(pBtCoexist);\r
                                        break;\r
                        }\r
                                        halbtc8723a2ant_CoexAllOff(pBtCoexist);\r
                                        break;\r
                        }\r
@@ -3397,7 +3345,7 @@ EXhalbtc8723a2ant_InitHwConfig(
        u4Byte  u4Tmp=0;\r
        u1Byte  u1Tmp=0;\r
 \r
        u4Byte  u4Tmp=0;\r
        u1Byte  u1Tmp=0;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
@@ -3414,7 +3362,7 @@ EXhalbtc8723a2ant_InitCoexDm(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
        \r
        halbtc8723a2ant_InitCoexDm(pBtCoexist);\r
 }\r
        \r
        halbtc8723a2ant_InitCoexDm(pBtCoexist);\r
 }\r
@@ -3451,7 +3399,7 @@ EXhalbtc8723a2ant_DisplayCoexInfo(
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
-\r
+       \r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
@@ -3600,12 +3548,12 @@ EXhalbtc8723a2ant_IpsNotify(
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                halbtc8723a2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
                halbtc8723a2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
                //halbtc8723a2ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
                //halbtc8723a2ant_InitCoexDm(pBtCoexist);\r
        }\r
 }\r
@@ -3618,11 +3566,11 @@ EXhalbtc8723a2ant_LpsNotify(
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -3634,11 +3582,11 @@ EXhalbtc8723a2ant_ScanNotify(
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -3650,11 +3598,11 @@ EXhalbtc8723a2ant_ConnectNotify(
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -3666,11 +3614,11 @@ EXhalbtc8723a2ant_MediaStatusNotify(
 {\r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 {\r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
        }\r
 \r
        halbtc8723a2ant_IndicateWifiChnlBwInfo(pBtCoexist, type);\r
        }\r
 \r
        halbtc8723a2ant_IndicateWifiChnlBwInfo(pBtCoexist, type);\r
@@ -3684,7 +3632,7 @@ EXhalbtc8723a2ant_SpecialPacketNotify(
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], DHCP Packet notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -3705,7 +3653,7 @@ EXhalbtc8723a2ant_BtInfoNotify(
        rspSource = BT_INFO_SRC_8723A_2ANT_BT_RSP;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
        rspSource = BT_INFO_SRC_8723A_2ANT_BT_RSP;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
@@ -3713,11 +3661,11 @@ EXhalbtc8723a2ant_BtInfoNotify(
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x]\n", tmpBuf[i]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x, ", tmpBuf[i]));\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
@@ -3753,14 +3701,14 @@ EXhalbtc8723a2ant_StackOperationNotify(
 {\r
        if(BTC_STACK_OP_INQ_PAGE_PAIR_START == type)\r
        {\r
 {\r
        if(BTC_STACK_OP_INQ_PAGE_PAIR_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], StackOP Inquiry/page/pair start notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], StackOP Inquiry/page/pair start notify\n"));\r
                pCoexSta->bHoldForStackOperation = TRUE;\r
                pCoexSta->bHoldPeriodCnt = 1;\r
                halbtc8723a2ant_BtInquiryPage(pBtCoexist);\r
        }\r
        else if(BTC_STACK_OP_INQ_PAGE_PAIR_FINISH == type)\r
        {\r
                pCoexSta->bHoldForStackOperation = TRUE;\r
                pCoexSta->bHoldPeriodCnt = 1;\r
                halbtc8723a2ant_BtInquiryPage(pBtCoexist);\r
        }\r
        else if(BTC_STACK_OP_INQ_PAGE_PAIR_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], StackOP Inquiry/page/pair finish notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], StackOP Inquiry/page/pair finish notify\n"));\r
                pCoexSta->bHoldForStackOperation = FALSE;\r
        }\r
 }\r
                pCoexSta->bHoldForStackOperation = FALSE;\r
        }\r
 }\r
@@ -3770,7 +3718,7 @@ EXhalbtc8723a2ant_HaltNotify(
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
        halbtc8723a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
        EXhalbtc8723a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
 \r
        halbtc8723a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
        EXhalbtc8723a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
@@ -3781,7 +3729,7 @@ EXhalbtc8723a2ant_Periodical(
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], 2Ant Periodical!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 2Ant Periodical!!\n"));\r
 \r
        // work around for c2h hang\r
        wa_halbtc8723a2ant_MonitorC2h(pBtCoexist);\r
 \r
        // work around for c2h hang\r
        wa_halbtc8723a2ant_MonitorC2h(pBtCoexist);\r
index bada4139b1f24c97b3a25cc41221628326b6033c..265ef130af0d33e232d4b508b14c6ed4b815bc93 100755 (executable)
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtc8723b1Ant.tmh"\r
+#endif\r
+\r
+//#include <Math.h>\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
@@ -30,8 +36,8 @@ const char *const GLBtInfoSrc8723b1Ant[]={
        "BT Info[bt auto report]",\r
 };\r
 \r
        "BT Info[bt auto report]",\r
 };\r
 \r
-u4Byte GLCoexVerDate8723b1Ant=20140929;\r
-u4Byte GLCoexVer8723b1Ant=0x54;\r
+u4Byte GLCoexVerDate8723b1Ant=20150119;\r
+u4Byte GLCoexVer8723b1Ant=0x58;\r
 \r
 //============================================================\r
 // local function proto type if needed\r
 \r
 //============================================================\r
 // local function proto type if needed\r
@@ -59,12 +65,10 @@ halbtc8723b1ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -72,12 +76,10 @@ halbtc8723b1ant_BtRssiState(
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -85,7 +87,7 @@ halbtc8723b1ant_BtRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Rssi thresh error!!\n"));\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
@@ -95,12 +97,10 @@ halbtc8723b1ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -109,17 +109,14 @@ halbtc8723b1ant_BtRssiState(
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -127,12 +124,10 @@ halbtc8723b1ant_BtRssiState(
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -164,12 +159,10 @@ halbtc8723b1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -177,12 +170,10 @@ halbtc8723b1ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -190,7 +181,7 @@ halbtc8723b1ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -200,12 +191,10 @@ halbtc8723b1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -214,17 +203,14 @@ halbtc8723b1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -232,12 +218,10 @@ halbtc8723b1ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -425,7 +409,7 @@ halbtc8723b1ant_QueryBtInfo(
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
@@ -440,7 +424,7 @@ halbtc8723b1ant_MonitorBtCtr(
        u4Byte                  regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;\r
        u1Byte                  u1Tmp, u1Tmp1;\r
        s4Byte                  wifiRssi;\r
        u4Byte                  regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;\r
        u1Byte                  u1Tmp, u1Tmp1;\r
        s4Byte                  wifiRssi;\r
-       static u1Byte           NumOfBtCounterChk = 0;\r
+       static u4Byte           NumOfBtCounterChk = 0;\r
        \r
        //to avoid 0x76e[3] = 1 (WLAN_Act control by PTA) during IPS\r
        //if (! (pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e) & 0x8) ) \r
        \r
        //to avoid 0x76e[3] = 1 (WLAN_Act control by PTA) during IPS\r
        //if (! (pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e) & 0x8) ) \r
@@ -470,25 +454,34 @@ halbtc8723b1ant_MonitorBtCtr(
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
-       if( (pCoexSta->lowPriorityTx > 1150)  && (!pCoexSta->bC2hBtInquiryPage))\r
+       if( (pCoexSta->lowPriorityTx > 1050)  && (!pCoexSta->bC2hBtInquiryPage))\r
                pCoexSta->popEventCnt++;\r
 \r
                pCoexSta->popEventCnt++;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Hi-Pri Rx/Tx: %d/%d, Lo-Pri Rx/Tx: %d/%d\n",\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Hi-Pri Rx/Tx: %d/%d, Lo-Pri Rx/Tx: %d/%d\n",\r
                regHPRx, regHPTx, regLPRx, regLPTx));\r
 \r
        // reset counter\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);\r
 \r
                regHPRx, regHPTx, regLPRx, regLPTx));\r
 \r
        // reset counter\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);\r
 \r
+       // This part is for wifi FW and driver to update BT's status as disabled.\r
+       // The flow is as the following \r
+       // 1. disable BT\r
+       // 2. if all BT Tx/Rx counter=0, after 6 sec we query bt info\r
+       // 3. Because BT will not rsp from mailbox, so wifi fw will know BT is disabled\r
+       // 4. FW will rsp c2h for BT that driver will know BT is disabled.\r
        if ((regHPTx == 0) && (regHPRx ==0) && (regLPTx == 0) && (regLPRx == 0))\r
        {\r
                NumOfBtCounterChk++;\r
        if ((regHPTx == 0) && (regHPRx ==0) && (regLPTx == 0) && (regLPRx == 0))\r
        {\r
                NumOfBtCounterChk++;\r
-               if (NumOfBtCounterChk >= 3)\r
+               if (NumOfBtCounterChk == 3)\r
 {\r
                        halbtc8723b1ant_QueryBtInfo(pBtCoexist);\r
 {\r
                        halbtc8723b1ant_QueryBtInfo(pBtCoexist);\r
+               }\r
+       }\r
+       else\r
+       {\r
                        NumOfBtCounterChk = 0;\r
                }\r
        }\r
                        NumOfBtCounterChk = 0;\r
                }\r
        }\r
-}\r
 \r
 \r
 VOID\r
 \r
 \r
 VOID\r
@@ -501,6 +494,7 @@ halbtc8723b1ant_MonitorWiFiCtr(
        s4Byte  wifiRssi=0;\r
        BOOLEAN bWifiBusy = FALSE, bWifiUnderBMode = FALSE;\r
        static u1Byte nCCKLockCounter = 0;\r
        s4Byte  wifiRssi=0;\r
        BOOLEAN bWifiBusy = FALSE, bWifiUnderBMode = FALSE;\r
        static u1Byte nCCKLockCounter = 0;\r
+       u4Byte  TotalCnt;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);\r
@@ -538,14 +532,16 @@ halbtc8723b1ant_MonitorWiFiCtr(
 \r
        if ( (bWifiBusy) && (wifiRssi >= 30) && (!bWifiUnderBMode))\r
        {\r
 \r
        if ( (bWifiBusy) && (wifiRssi >= 30) && (!bWifiUnderBMode))\r
        {\r
+               TotalCnt = pCoexSta->nCRCOK_CCK + pCoexSta->nCRCOK_11g + pCoexSta->nCRCOK_11n + \r
+                               pCoexSta->nCRCOK_11nAgg;\r
+       \r
                if ( (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_BUSY) ||\r
                        (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY) ||\r
                        (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_SCO_BUSY) )\r
                {\r
                if ( (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_BUSY) ||\r
                        (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY) ||\r
                        (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_SCO_BUSY) )\r
                {\r
-                       if (pCoexSta->nCRCOK_CCK >(pCoexSta->nCRCOK_11g + pCoexSta->nCRCOK_11n + \r
-                               pCoexSta->nCRCOK_11nAgg) )\r
+                       if (pCoexSta->nCRCOK_CCK >(TotalCnt -pCoexSta->nCRCOK_CCK)) \r
                        {\r
                        {\r
-                               if (nCCKLockCounter < 5)\r
+                               if (nCCKLockCounter < 3)\r
                                 nCCKLockCounter++;\r
                        }\r
                        else\r
                                 nCCKLockCounter++;\r
                        }\r
                        else\r
@@ -570,7 +566,7 @@ halbtc8723b1ant_MonitorWiFiCtr(
        if (!pCoexSta->bPreCCKLock)\r
        {\r
 \r
        if (!pCoexSta->bPreCCKLock)\r
        {\r
 \r
-               if (nCCKLockCounter >= 5)\r
+               if (nCCKLockCounter >= 3)\r
                 pCoexSta->bCCKLock = TRUE;\r
                else\r
                 pCoexSta->bCCKLock = FALSE;                    \r
                 pCoexSta->bCCKLock = TRUE;\r
                else\r
                 pCoexSta->bCCKLock = FALSE;                    \r
@@ -599,6 +595,7 @@ halbtc8723b1ant_IsWifiStatusChanged(
        static BOOLEAN  bPreWifiBusy=FALSE, bPreUnder4way=FALSE, bPreBtHsOn=FALSE;\r
        BOOLEAN bWifiBusy=FALSE, bUnder4way=FALSE, bBtHsOn=FALSE;\r
        BOOLEAN bWifiConnected=FALSE;\r
        static BOOLEAN  bPreWifiBusy=FALSE, bPreUnder4way=FALSE, bPreBtHsOn=FALSE;\r
        BOOLEAN bWifiBusy=FALSE, bUnder4way=FALSE, bBtHsOn=FALSE;\r
        BOOLEAN bWifiConnected=FALSE;\r
+       u1Byte  wifiRssiState=BTC_RSSI_STATE_HIGH;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
@@ -622,6 +619,8 @@ halbtc8723b1ant_IsWifiStatusChanged(
                        bPreBtHsOn = bBtHsOn;\r
                        return TRUE;\r
                }\r
                        bPreBtHsOn = bBtHsOn;\r
                        return TRUE;\r
                }\r
+\r
+            \r
        }\r
 \r
        return FALSE;\r
        }\r
 \r
        return FALSE;\r
@@ -702,7 +701,7 @@ halbtc8723b1ant_ActionAlgorithm(
 \r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
 \r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No BT link exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No BT link exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
@@ -719,31 +718,31 @@ halbtc8723b1ant_ActionAlgorithm(
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO only\n"));\r
                        algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                        algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID only\n"));\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP only\n"));\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = PAN(HS) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = PAN(HS) only\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = PAN(EDR) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = PAN(EDR) only\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
@@ -755,24 +754,24 @@ halbtc8723b1ant_ActionAlgorithm(
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID\n"));\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + A2DP ==> SCO\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP ==> SCO\n"));\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + PAN(EDR)\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -782,7 +781,7 @@ halbtc8723b1ant_ActionAlgorithm(
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID + A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP\n"));\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
@@ -790,12 +789,12 @@ halbtc8723b1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -804,12 +803,12 @@ halbtc8723b1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
@@ -822,7 +821,7 @@ halbtc8723b1ant_ActionAlgorithm(
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + HID + A2DP ==> HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + A2DP ==> HID\n"));\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
                                algorithm = BT_8723B_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
@@ -830,12 +829,12 @@ halbtc8723b1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -844,12 +843,12 @@ halbtc8723b1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + A2DP + PAN(EDR) ==> HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP + PAN(EDR) ==> HID\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -862,12 +861,12 @@ halbtc8723b1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID + A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
@@ -883,12 +882,12 @@ halbtc8723b1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! BT Profile = SCO + HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Error!!! BT Profile = SCO + HID + A2DP + PAN(HS)\n"));\r
 \r
                                }\r
                                else\r
                                {\r
 \r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -913,7 +912,7 @@ halbtc8723b1ant_SetBtAutoReport(
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
@@ -926,15 +925,12 @@ halbtc8723b1ant_BtAutoReport(
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s BT Auto report = %s\n",  \r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
-                       pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
-\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
@@ -962,7 +958,7 @@ halbtc8723b1ant_SetSwPenaltyTxRateAdaptive(
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
                (bLowPenaltyRa? "ON!!":"OFF!!") ));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
                (bLowPenaltyRa? "ON!!":"OFF!!") ));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
@@ -996,16 +992,16 @@ halbtc8723b1ant_SetCoexTable(
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -1019,7 +1015,7 @@ halbtc8723b1ant_CoexTable(
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6cc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6cc=0x%x\n", \r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
@@ -1028,11 +1024,6 @@ halbtc8723b1ant_CoexTable(
 \r
        if(!bForceExec)\r
        {\r
 \r
        if(!bForceExec)\r
        {\r
-               //BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
-               //      pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               //BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
-               //      pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
-       \r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
@@ -1054,7 +1045,23 @@ halbtc8723b1ant_CoexTableWithType(
        IN      u1Byte                          type\r
        )\r
 {\r
        IN      u1Byte                          type\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ********** CoexTable(%d) **********\n", type));\r
+       PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;\r
+\r
+#if BT_8723B_1ANT_ANTDET_ENABLE\r
+#if BT_8723B_1ANT_ANTDET_COEXMECHANISMSWITCH_ENABLE    \r
+       if (pBoardInfo->btdmAntNumByAntDet == 2)\r
+       {\r
+               if (type == 3)\r
+                       type = 14;\r
+               else if (type == 4)\r
+                       type  = 13;\r
+               else if (type == 5)\r
+                       type = 8;\r
+       }\r
+#endif\r
+#endif\r
+\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], ********** CoexTable(%d) **********\n", type));\r
        \r
        pCoexSta->nCoexTableType = type;\r
        \r
        \r
        pCoexSta->nCoexTableType = type;\r
        \r
@@ -1073,13 +1080,16 @@ halbtc8723b1ant_CoexTableWithType(
                        halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x5a5a5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 4:\r
                        halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x5a5a5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 4:\r
-                       if ((pCoexSta->nScanAPNum <= 5) || ( pCoexSta->bCCKEverLock) )\r
+                       if  ( pCoexSta->bCCKEverLock) \r
                                halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0xaaaaaaaa, 0xffffff, 0x3);\r
                        else\r
                                halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0xaaaa5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 5:\r
                                halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0xaaaaaaaa, 0xffffff, 0x3);\r
                        else\r
                                halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0xaaaa5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 5:\r
-                       halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x5a5a5a5a, 0xaaaa5a5a, 0xffffff, 0x3);\r
+                       if  ( pCoexSta->bCCKEverLock) \r
+                               halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0xaaaa5a5a, 0xaaaa5a5a, 0xffffff, 0x3);\r
+                       else\r
+                       halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x5a5a5a5a, 0x5a5a5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 6:\r
                        halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0xaaaaaaaa, 0xffffff, 0x3);\r
                        break;\r
                case 6:\r
                        halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0xaaaaaaaa, 0xffffff, 0x3);\r
@@ -1087,6 +1097,30 @@ halbtc8723b1ant_CoexTableWithType(
                case 7:\r
                        halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0xaaaaaaaa, 0xaaaaaaaa, 0xffffff, 0x3);\r
                        break;\r
                case 7:\r
                        halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0xaaaaaaaa, 0xaaaaaaaa, 0xffffff, 0x3);\r
                        break;\r
+               case 8:\r
+                       halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 9:\r
+                       halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 10:\r
+                       halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 11:\r
+                       halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 12:\r
+                       halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 13:\r
+                       halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0xaaaaaaaa, 0xffffff, 0x3);\r
+                       break;\r
+               case 14:\r
+                       halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 15:\r
+                       halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0xaaaaaaaa, 0xffffff, 0x3);\r
+                       break;  \r
                default:\r
                        break;\r
        }\r
                default:\r
                        break;\r
        }\r
@@ -1105,7 +1139,7 @@ halbtc8723b1ant_SetFwIgnoreWlanAct(
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
@@ -1118,15 +1152,12 @@ halbtc8723b1ant_IgnoreWlanAct(
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
-                       pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
-\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
@@ -1159,22 +1190,16 @@ halbtc8723b1ant_LpsRpwm(
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], LPS-RxBeaconMode=0x%x , LPS-RPWM=0x%x!!\n", \r
-                        pCoexDm->curLps, pCoexDm->curRpwm));\r
-\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], LPS-RPWM_Last=0x%x , LPS-RPWM_Now=0x%x!!\n", \r
-                                pCoexDm->preRpwm, pCoexDm->curRpwm));\r
-\r
                        return;\r
                }\r
        }\r
                        return;\r
                }\r
        }\r
@@ -1190,9 +1215,6 @@ halbtc8723b1ant_SwMechanism(
        IN      BOOLEAN                 bLowPenaltyRA\r
        ) \r
 {\r
        IN      BOOLEAN                 bLowPenaltyRA\r
        ) \r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], SM[LpRA] = %d\n", \r
-               bLowPenaltyRA));\r
-\r
        halbtc8723b1ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);\r
 }\r
 \r
        halbtc8723b1ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);\r
 }\r
 \r
@@ -1220,6 +1242,21 @@ halbtc8723b1ant_SetAntPath(
        if((fwVer>0 && fwVer<0xc0000) || bPgExtSwitch)\r
                bUseExtSwitch = TRUE;\r
 \r
        if((fwVer>0 && fwVer<0xc0000) || bPgExtSwitch)\r
                bUseExtSwitch = TRUE;\r
 \r
+#if BT_8723B_1ANT_ANTDET_ENABLE\r
+#if BT_8723B_1ANT_ANTDET_COEXMECHANISMSWITCH_ENABLE\r
+               if (antPosType == BTC_ANT_PATH_PTA)\r
+               {\r
+                       if ((pBoardInfo->btdmAntDetFinish) && (pBoardInfo->btdmAntNumByAntDet == 2))\r
+                       {\r
+                               if(pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)\r
+                                       antPosType = BTC_ANT_PATH_WIFI;\r
+                               else\r
+                                       antPosType = BTC_ANT_PATH_BT;\r
+                       }\r
+               }\r
+#endif         \r
+#endif\r
+\r
        if(bInitHwCfg)\r
        {\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780); //WiFi TRx Mask on\r
        if(bInitHwCfg)\r
        {\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780); //WiFi TRx Mask on\r
@@ -1295,12 +1332,12 @@ halbtc8723b1ant_SetAntPath(
                                cntBtCalChk++;\r
                                if(u1Tmp & BIT0)\r
                                {\r
                                cntBtCalChk++;\r
                                if(u1Tmp & BIT0)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ########### BT is calibrating (wait cnt=%d) ###########\n", cntBtCalChk));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ########### BT is calibrating (wait cnt=%d) ###########\n", cntBtCalChk));\r
                                        delay_ms(50);\r
                                }\r
                                else\r
                                {\r
                                        delay_ms(50);\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ********** BT is NOT calibrating (wait cnt=%d)**********\n", cntBtCalChk));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** BT is NOT calibrating (wait cnt=%d)**********\n", cntBtCalChk));\r
                                        break;\r
                                }\r
                        }\r
                                        break;\r
                                }\r
                        }\r
@@ -1448,7 +1485,7 @@ halbtc8723b1ant_SetAntPathDCut(
        u1Byte  dataLen=5;\r
        u1Byte  buf[6] = {0};\r
 \r
        u1Byte  dataLen=5;\r
        u1Byte  buf[6] = {0};\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set BT Ant, bAntennaAux/bExtSwitch/bTwoAntenna/antennaPos/wifiState=%d/%d/%d/%d/%d\n",\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set BT Ant, bAntennaAux/bExtSwitch/bTwoAntenna/antennaPos/wifiState=%d/%d/%d/%d/%d\n",\r
                bAntennaAux, bExtSwitch, bTwoAntenna, antennaPos, wifiState));\r
 \r
        buf[0] = dataLen; \r
                bAntennaAux, bExtSwitch, bTwoAntenna, antennaPos, wifiState));\r
 \r
        buf[0] = dataLen; \r
@@ -1489,7 +1526,7 @@ halbtc8723b1ant_SetFwPstdma(
        {\r
                if(byte1&BIT4 && !(byte1&BIT5))\r
                {                       \r
        {\r
                if(byte1&BIT4 && !(byte1&BIT5))\r
                {                       \r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], FW for 1Ant AP mode\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], FW for 1Ant AP mode\n"));\r
                        realByte1 &= ~BIT4;\r
                        realByte1 |= BIT5;\r
 \r
                        realByte1 &= ~BIT4;\r
                        realByte1 |= BIT5;\r
 \r
@@ -1510,7 +1547,7 @@ halbtc8723b1ant_SetFwPstdma(
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = realByte5;\r
        \r
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = realByte5;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], PS-TDMA H2C cmd =0x%x%08x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], PS-TDMA H2C cmd =0x%x%08x\n", \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
@@ -1534,11 +1571,22 @@ halbtc8723b1ant_PsTdma(
        s1Byte                  nWiFiDurationAdjust = 0x0;\r
        static BOOLEAN   bPreWifiBusy=FALSE;\r
 \r
        s1Byte                  nWiFiDurationAdjust = 0x0;\r
        static BOOLEAN   bPreWifiBusy=FALSE;\r
 \r
-       //BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
-       //      (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
+#if BT_8723B_1ANT_ANTDET_ENABLE\r
+#if BT_8723B_1ANT_ANTDET_COEXMECHANISMSWITCH_ENABLE\r
+       if (pBoardInfo->btdmAntNumByAntDet == 2)\r
+       {\r
+               if (bTurnOn)\r
+                       type = type +100;  //for WiFi RSSI low or BT RSSI low\r
+               else\r
+                       type = 1; //always translate to TDMA(off,1) for TDMA-off case\r
+       }\r
+       \r
+#endif \r
+#endif\r
+\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);      \r
 \r
        if (bWifiBusy != bPreWifiBusy)\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);      \r
 \r
        if (bWifiBusy != bPreWifiBusy)\r
@@ -1549,12 +1597,12 @@ halbtc8723b1ant_PsTdma(
 \r
        if (pCoexDm->bCurPsTdmaOn)\r
        {\r
 \r
        if (pCoexDm->bCurPsTdmaOn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
                                pCoexDm->curPsTdma));\r
        }\r
        else\r
        {\r
                                pCoexDm->curPsTdma));\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ********** TDMA(off, %d) **********\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** TDMA(off, %d) **********\n", \r
                                pCoexDm->curPsTdma));\r
        }\r
                        \r
                                pCoexDm->curPsTdma));\r
        }\r
                        \r
@@ -1566,31 +1614,85 @@ halbtc8723b1ant_PsTdma(
        }\r
 \r
        if (pCoexSta->nScanAPNum <= 5)\r
        }\r
 \r
        if (pCoexSta->nScanAPNum <= 5)\r
+       {\r
                nWiFiDurationAdjust = 5;\r
                nWiFiDurationAdjust = 5;\r
-               //nWiFiDurationAdjust = 2;\r
+               \r
+               if (pCoexSta->nA2DPBitPool >= 35)\r
+                 nWiFiDurationAdjust = -10;\r
+               else if (pCoexSta->nA2DPBitPool >= 45)\r
+                 nWiFiDurationAdjust = -15;    \r
+       }\r
        else if  (pCoexSta->nScanAPNum >= 40)\r
        else if  (pCoexSta->nScanAPNum >= 40)\r
+       {\r
                nWiFiDurationAdjust = -15;      \r
                nWiFiDurationAdjust = -15;      \r
+\r
+               if (pCoexSta->nA2DPBitPool < 35)\r
+                 nWiFiDurationAdjust = -5;\r
+               else if (pCoexSta->nA2DPBitPool < 45)\r
+                 nWiFiDurationAdjust = -10; \r
+       }\r
        else if  (pCoexSta->nScanAPNum >= 20)\r
        else if  (pCoexSta->nScanAPNum >= 20)\r
+       {\r
                nWiFiDurationAdjust = -10;      \r
        \r
                nWiFiDurationAdjust = -10;      \r
        \r
-       if (!pCoexSta->bForceLpsOn)  //only for A2DP-only case 1/2/9/11 while wifi noisy threshold > 30\r
+               if (pCoexSta->nA2DPBitPool >= 45)\r
+                 nWiFiDurationAdjust = -15;\r
+       }       \r
+       else\r
+       {\r
+               nWiFiDurationAdjust = 0;               \r
+               \r
+               if (pCoexSta->nA2DPBitPool >= 35)\r
+                 nWiFiDurationAdjust = -10;\r
+               else if (pCoexSta->nA2DPBitPool >= 45)\r
+                 nWiFiDurationAdjust = -15;    \r
+       }\r
+       \r
+       if ((type == 1) || (type == 2) || (type == 9) || (type == 11) || (type == 101)\r
+               || (type == 102) || (type == 109) || (type == 101))\r
+       {\r
+               if (!pCoexSta->bForceLpsOn)  //Native power save TDMA, only for A2DP-only case 1/2/9/11 while wifi noisy threshold > 30\r
        {\r
                psTdmaByte0Val = 0x61;  //no null-pkt\r
                psTdmaByte3Val = 0x11; // no tx-pause at BT-slot\r
        {\r
                psTdmaByte0Val = 0x61;  //no null-pkt\r
                psTdmaByte3Val = 0x11; // no tx-pause at BT-slot\r
-               psTdmaByte4Val = 0x10; // 0x778 = d/1 toggle\r
+               psTdmaByte4Val = 0x10; // 0x778 = d/1 toggle, no dynamic slot\r
        }\r
        }\r
-       \r
-       if (  (type == 3) || (type == 13) || (type == 14) )\r
+               else\r
+               {\r
+                       psTdmaByte0Val = 0x51;  //null-pkt\r
+                       psTdmaByte3Val = 0x10; //tx-pause at BT-slot\r
+                       psTdmaByte4Val = 0x50; // 0x778 = d/1 toggle, dynamic slot\r
+               }\r
+       }\r
+       else if ((type == 3) || (type == 13) || (type == 14) || (type == 103) || (type == 113) || (type == 114))\r
        {\r
        {\r
-               psTdmaByte4Val = psTdmaByte4Val & 0xbf;  //no dynamic slot for multi-profile\r
-       \r
+               psTdmaByte0Val = 0x51;  //null-pkt\r
+               psTdmaByte3Val = 0x10; //tx-pause at BT-slot\r
+               psTdmaByte4Val = 0x10; // 0x778 = d/1 toggle, no dynamic slot\r
+#if 0  \r
                if (!bWifiBusy)\r
                        psTdmaByte4Val = psTdmaByte4Val | 0x1;  //0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts)\r
                if (!bWifiBusy)\r
                        psTdmaByte4Val = psTdmaByte4Val | 0x1;  //0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts)\r
+#endif         \r
+       }\r
+       else  //native power save case\r
+       {\r
+               psTdmaByte0Val = 0x61;  //no null-pkt\r
+               psTdmaByte3Val = 0x11; // no tx-pause at BT-slot\r
+               psTdmaByte4Val = 0x11; // 0x778 = d/1 toggle, no dynamic slot\r
+               //psTdmaByte4Va is not defne for 0x778 = d/1, 1/1 case \r
                }\r
                 \r
                }\r
                 \r
-       if (pBtLinkInfo->bSlaveRole == TRUE)\r
+       //if (pBtLinkInfo->bSlaveRole == TRUE)\r
+       if ((pBtLinkInfo->bSlaveRole == TRUE)   && (pBtLinkInfo->bA2dpExist))\r
                psTdmaByte4Val = psTdmaByte4Val | 0x1;  //0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts)\r
                \r
                psTdmaByte4Val = psTdmaByte4Val | 0x1;  //0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts)\r
                \r
+       if (type > 100)\r
+       {\r
+               psTdmaByte0Val = psTdmaByte0Val | 0x82; //set antenna control by SW     \r
+               psTdmaByte3Val = psTdmaByte3Val | 0x60;  //set antenna no toggle, control by antenna diversity\r
+       }\r
+\r
+               \r
        if(bTurnOn)\r
        {        \r
                switch(type)\r
        if(bTurnOn)\r
        {        \r
                switch(type)\r
@@ -1605,16 +1707,16 @@ halbtc8723b1ant_PsTdma(
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x2d+nWiFiDurationAdjust, 0x03, psTdmaByte3Val, psTdmaByte4Val);                                                        \r
                                break;\r
                        case 3:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x2d+nWiFiDurationAdjust, 0x03, psTdmaByte3Val, psTdmaByte4Val);                                                        \r
                                break;\r
                        case 3:\r
-                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x51, 0x1d, 0x1d, 0x0, psTdmaByte4Val);\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x3a, 0x03, psTdmaByte3Val, psTdmaByte4Val);\r
                                break;\r
                        case 4:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x14, 0x0);\r
                                break;\r
                        case 5:\r
                                break;\r
                        case 4:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x14, 0x0);\r
                                break;\r
                        case 5:\r
-                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x61, 0x15, 0x3, 0x11, 0x11);\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x15, 0x3, psTdmaByte3Val, 0x11);\r
                                break;\r
                        case 6:\r
                                break;\r
                        case 6:\r
-                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x61, 0x20, 0x3, 0x11, 0x11);\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x20, 0x3, psTdmaByte3Val, 0x11);\r
                                break;\r
                        case 7:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x13, 0xc, 0x5, 0x0, 0x0);\r
                                break;\r
                        case 7:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x13, 0xc, 0x5, 0x0, 0x0);\r
@@ -1635,10 +1737,10 @@ halbtc8723b1ant_PsTdma(
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x51, 0x0a, 0x0a, 0x0, 0x50);\r
                                break;\r
                        case 13:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x51, 0x0a, 0x0a, 0x0, 0x50);\r
                                break;\r
                        case 13:\r
-                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x51, 0x12, 0x12, 0x0, psTdmaByte4Val);\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x21, 0x3, psTdmaByte3Val, psTdmaByte4Val);\r
                                break;\r
                        case 14:\r
                                break;\r
                        case 14:\r
-                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x51, 0x21, 0x3, 0x10, psTdmaByte4Val);\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x21, 0x3, psTdmaByte3Val, psTdmaByte4Val);                             \r
                                break;\r
                        case 15:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0x3, 0x8, 0x0);\r
                                break;\r
                        case 15:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0x3, 0x8, 0x0);\r
@@ -1650,13 +1752,13 @@ halbtc8723b1ant_PsTdma(
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0);\r
                                break;                  \r
                        case 20:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0);\r
                                break;                  \r
                        case 20:\r
-                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x61, 0x3f, 0x03, 0x11, 0x10);\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x3f, 0x03, psTdmaByte3Val, 0x10);\r
                                break;\r
                        case 21:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x61, 0x25, 0x03, 0x11, 0x11);\r
                                break;\r
                        case 22:\r
                                break;\r
                        case 21:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x61, 0x25, 0x03, 0x11, 0x11);\r
                                break;\r
                        case 22:\r
-                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x61, 0x25, 0x03, 0x11, 0x10);\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x25, 0x03, psTdmaByte3Val, 0x10);\r
                                break;\r
                        case 23:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x18);\r
                                break;\r
                        case 23:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x18);\r
@@ -1686,10 +1788,10 @@ halbtc8723b1ant_PsTdma(
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1a, 0x1a, 0, 0x58);\r
                                break;\r
                        case 32:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1a, 0x1a, 0, 0x58);\r
                                break;\r
                        case 32:\r
-                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x61, 0x35, 0x3, 0x11, 0x11);\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x35, 0x3, psTdmaByte3Val, psTdmaByte4Val);\r
                                break;\r
                        case 33:\r
                                break;\r
                        case 33:\r
-                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0xa3, 0x25, 0x3, 0x30, 0x90);\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x35, 0x3, psTdmaByte3Val, 0x10);\r
                                break;\r
                        case 34:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x53, 0x1a, 0x1a, 0x0, 0x10);\r
                                break;\r
                        case 34:\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x53, 0x1a, 0x1a, 0x0, 0x10);\r
@@ -1704,6 +1806,50 @@ halbtc8723b1ant_PsTdma(
                                /* here softap mode screen off will cost 70-80mA for phone */\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x23, 0x18, 0x00, 0x10, 0x24);\r
                                break;  \r
                                /* here softap mode screen off will cost 70-80mA for phone */\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x23, 0x18, 0x00, 0x10, 0x24);\r
                                break;  \r
+                               \r
+                       //for 1-Ant translate to 2-Ant  \r
+                       case 101:\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x3a+nWiFiDurationAdjust, 0x03, psTdmaByte3Val, psTdmaByte4Val);                                                                \r
+                               break;\r
+                       case 102:\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x2d+nWiFiDurationAdjust, 0x03, psTdmaByte3Val, psTdmaByte4Val);                                                        \r
+                               break;\r
+                       case 103:\r
+                               //halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x51, 0x1d, 0x1d, 0x0, psTdmaByte4Val);\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x3a, 0x03, psTdmaByte3Val, psTdmaByte4Val);\r
+                               break;\r
+                       case 105:\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x15, 0x3, psTdmaByte3Val, 0x11);\r
+                               break;\r
+                       case 106:\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x20, 0x3, psTdmaByte3Val, 0x11);\r
+                               break;  \r
+                       case 109:       \r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x21, 0x3, psTdmaByte3Val, psTdmaByte4Val);                             \r
+                               break;                  \r
+                       case 111:       \r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x21, 0x03, psTdmaByte3Val, psTdmaByte4Val);                    \r
+                               break;  \r
+                       case 113:\r
+                               //halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x51, 0x12, 0x12, 0x0, psTdmaByte4Val);\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x21, 0x3, psTdmaByte3Val, psTdmaByte4Val);\r
+                               break;\r
+                       case 114:\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x21, 0x3, psTdmaByte3Val, psTdmaByte4Val);                             \r
+                               break;  \r
+                       case 120:\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x3f, 0x03, psTdmaByte3Val, 0x10);\r
+                               break;                  \r
+                       case 122:\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x25, 0x03, psTdmaByte3Val, 0x10);\r
+                               break;\r
+                       case 132:\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x25, 0x03, psTdmaByte3Val, psTdmaByte4Val);\r
+                               break;  \r
+                       case 133:\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x25, 0x03, psTdmaByte3Val, 0x11);\r
+                               break;          \r
+                               \r
                }\r
        }\r
        else\r
                }\r
        }\r
        else\r
@@ -1714,14 +1860,13 @@ halbtc8723b1ant_PsTdma(
                {\r
                        case 8: //PTA Control\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x8, 0x0, 0x0, 0x0, 0x0);\r
                {\r
                        case 8: //PTA Control\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x8, 0x0, 0x0, 0x0, 0x0);\r
-                               //halbtc8723b1ant_SetAntPathDCut(pBtCoexist, FALSE, FALSE, FALSE, BTC_ANT_PATH_PTA, BTC_WIFI_STAT_NORMAL);\r
-                               //halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FALSE, FALSE);\r
                                break;\r
                        case 0:\r
                        default:  //Software control, Antenna at BT side\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);\r
                                break;\r
                        case 0:\r
                        default:  //Software control, Antenna at BT side\r
                                halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);\r
-                               //halbtc8723b1ant_SetAntPathDCut(pBtCoexist, FALSE, FALSE, FALSE, BTC_ANT_PATH_BT, BTC_WIFI_STAT_NORMAL);\r
-                               //halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, FALSE);\r
+                               break;\r
+                       case 1: // 2-Ant, 0x778=3, antenna control by antenna diversity\r
+                               halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x48, 0x0);\r
                                break;\r
 #if 0\r
                        case 9:   //Software control, Antenna at WiFi side\r
                                break;\r
 #if 0\r
                        case 9:   //Software control, Antenna at WiFi side\r
@@ -1736,7 +1881,7 @@ halbtc8723b1ant_PsTdma(
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE, &rssiAdjustVal);\r
 \r
 \r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE, &rssiAdjustVal);\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x67=0x%x\n",\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x67=0x%x\n",\r
                pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948),   pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765), pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67)));\r
 \r
        // update pre state\r
                pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948),   pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765), pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67)));\r
 \r
        // update pre state\r
@@ -1757,7 +1902,7 @@ halbtc8723b1ant_IsCommonAction(
        if(!bWifiConnected && \r
                BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
        {\r
        if(!bWifiConnected && \r
                BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT non connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT non connected-idle!!\n"));\r
                \r
                //halbtc8723b1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                \r
                //halbtc8723b1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
@@ -1766,7 +1911,7 @@ halbtc8723b1ant_IsCommonAction(
        else if(bWifiConnected && \r
                (BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
        else if(bWifiConnected && \r
                (BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
 \r
                //halbtc8723b1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
 \r
                //halbtc8723b1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
@@ -1775,7 +1920,7 @@ halbtc8723b1ant_IsCommonAction(
        else if(!bWifiConnected && \r
                (BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
        else if(!bWifiConnected && \r
                (BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT connected-idle!!\n"));\r
 \r
                //halbtc8723b1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
 \r
                //halbtc8723b1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
@@ -1784,7 +1929,7 @@ halbtc8723b1ant_IsCommonAction(
        else if(bWifiConnected && \r
                (BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
        else if(bWifiConnected && \r
                (BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
 \r
                //halbtc8723b1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
 \r
                //halbtc8723b1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
@@ -1793,7 +1938,7 @@ halbtc8723b1ant_IsCommonAction(
        else if(!bWifiConnected && \r
                (BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus) )\r
        {\r
        else if(!bWifiConnected && \r
                (BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT Busy!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT Busy!!\n"));\r
 \r
                //halbtc8723b1ant_SwMechanism(pBtCoexist, FALSE);\r
                \r
 \r
                //halbtc8723b1ant_SwMechanism(pBtCoexist, FALSE);\r
                \r
@@ -1803,11 +1948,11 @@ halbtc8723b1ant_IsCommonAction(
        {\r
                if (bWifiBusy)                  \r
                {\r
        {\r
                if (bWifiBusy)                  \r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
                }\r
                \r
                bCommon = FALSE;\r
                }\r
                \r
                bCommon = FALSE;\r
@@ -1829,7 +1974,7 @@ halbtc8723b1ant_TdmaDurationAdjustForAcl(
        static BOOLEAN  bPreWifiBusy=FALSE;\r
        BOOLEAN                 bWifiBusy = FALSE;\r
 \r
        static BOOLEAN  bPreWifiBusy=FALSE;\r
        BOOLEAN                 bWifiBusy = FALSE;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjustForAcl()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TdmaDurationAdjustForAcl()\n"));\r
 \r
        if(BT_8723B_1ANT_WIFI_STATUS_CONNECTED_BUSY == wifiStatus) \r
                bWifiBusy = TRUE;\r
 \r
        if(BT_8723B_1ANT_WIFI_STATUS_CONNECTED_BUSY == wifiStatus) \r
                bWifiBusy = TRUE;\r
@@ -1861,7 +2006,7 @@ halbtc8723b1ant_TdmaDurationAdjustForAcl(
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
 \r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                pCoexDm->psTdmaDuAdjType = 2;\r
 \r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                pCoexDm->psTdmaDuAdjType = 2;\r
@@ -1878,11 +2023,8 @@ halbtc8723b1ant_TdmaDurationAdjustForAcl(
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
                btInfoExt = pCoexSta->btInfoExt;\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
                btInfoExt = pCoexSta->btInfoExt;\r
-               //BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
-               //BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
-               //      up, dn, m, n, WaitCount));\r
 \r
 \r
-               if ( (pCoexSta->lowPriorityTx) > 1150 ||  (pCoexSta->lowPriorityRx) > 1250 )\r
+               if ( (pCoexSta->lowPriorityTx) > 1050 ||  (pCoexSta->lowPriorityRx) > 1250 )\r
                        retryCount++;   \r
                \r
                result = 0;\r
                        retryCount++;   \r
                \r
                result = 0;\r
@@ -1903,7 +2045,7 @@ halbtc8723b1ant_TdmaDurationAdjustForAcl(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -1929,7 +2071,7 @@ halbtc8723b1ant_TdmaDurationAdjustForAcl(
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -1947,18 +2089,18 @@ halbtc8723b1ant_TdmaDurationAdjustForAcl(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
 \r
                if(result == -1)\r
                {\r
                }\r
 \r
                if(result == -1)\r
                {\r
-                       if( (BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(btInfoExt)) &&\r
+/*                     if( (BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(btInfoExt)) &&\r
                                ((pCoexDm->curPsTdma == 1) ||(pCoexDm->curPsTdma == 2)) )\r
                        {\r
                                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
                                pCoexDm->psTdmaDuAdjType = 9;\r
                        }\r
                                ((pCoexDm->curPsTdma == 1) ||(pCoexDm->curPsTdma == 2)) )\r
                        {\r
                                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
                                pCoexDm->psTdmaDuAdjType = 9;\r
                        }\r
-                       else if(pCoexDm->curPsTdma == 1)\r
+                       else */ if(pCoexDm->curPsTdma == 1)\r
                        {\r
                                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                pCoexDm->psTdmaDuAdjType = 2;\r
                        {\r
                                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                pCoexDm->psTdmaDuAdjType = 2;\r
@@ -1976,13 +2118,13 @@ halbtc8723b1ant_TdmaDurationAdjustForAcl(
                }\r
                else if(result == 1)\r
                {\r
                }\r
                else if(result == 1)\r
                {\r
-                       if( (BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(btInfoExt)) &&\r
+/*                     if( (BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(btInfoExt)) &&\r
                                ((pCoexDm->curPsTdma == 1) ||(pCoexDm->curPsTdma == 2)) )\r
                        {\r
                                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
                                pCoexDm->psTdmaDuAdjType = 9;\r
                        }\r
                                ((pCoexDm->curPsTdma == 1) ||(pCoexDm->curPsTdma == 2)) )\r
                        {\r
                                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
                                pCoexDm->psTdmaDuAdjType = 9;\r
                        }\r
-                       else if(pCoexDm->curPsTdma == 11)\r
+                       else */ if(pCoexDm->curPsTdma == 11)\r
                        {\r
                                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
                                pCoexDm->psTdmaDuAdjType = 9;\r
                        {\r
                                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
                                pCoexDm->psTdmaDuAdjType = 9;\r
@@ -2008,7 +2150,7 @@ halbtc8723b1ant_TdmaDurationAdjustForAcl(
                        }\r
                        */\r
                \r
                        }\r
                        */\r
                \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
                                pCoexDm->curPsTdma));\r
                }\r
 \r
                                pCoexDm->curPsTdma));\r
                }\r
 \r
@@ -2137,33 +2279,26 @@ halbtc8723b1ant_MonitorBtEnableDisable(
        {\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
        {\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
-               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
-                               btDisableCnt));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt all counters=0, %d times!!\n",  btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
-                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
-                       halbtc8723b1ant_ActionWifiOnly(pBtCoexist);\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
-                       (bPreBtDisabled ? "disabled":"enabled"), \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n",  (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                        (bBtDisabled ? "disabled":"enabled")));\r
+\r
                bPreBtDisabled = bBtDisabled;\r
                bPreBtDisabled = bBtDisabled;\r
-               if(!bBtDisabled)\r
-               {\r
-               }\r
-               else\r
+               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
+               if(bBtDisabled)\r
                {\r
                {\r
+                       halbtc8723b1ant_ActionWifiOnly(pBtCoexist);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);\r
                }\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);\r
                }\r
@@ -2328,6 +2463,10 @@ halbtc8723b1ant_ActionBtInquiry(
        {\r
                // SCO/HID/A2DP busy\r
                halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
        {\r
                // SCO/HID/A2DP busy\r
                halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+\r
+               if (pCoexSta->bC2hBtRemoteNameReq)\r
+                       halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 33);\r
+               else \r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
                \r
                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
                \r
                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
@@ -2336,8 +2475,9 @@ halbtc8723b1ant_ActionBtInquiry(
        {\r
                halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
 \r
        {\r
                halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
 \r
-               //for BT inquiry/page fail after S4 resume\r
-               //halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 20);            \r
+               if (pCoexSta->bC2hBtRemoteNameReq)\r
+                       halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 33);\r
+               else            \r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
                \r
                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
                \r
                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
@@ -2350,9 +2490,6 @@ halbtc8723b1ant_ActionBtInquiry(
                halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);          \r
                \r
                halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);          \r
                \r
-\r
-               //halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
-               //halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);                                \r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -2446,7 +2583,7 @@ halbtc8723b1ant_ActionWifiConnectedBtAclBusy(
        else\r
        {               \r
                //BT no-profile busy (0x9)\r
        else\r
        {               \r
                //BT no-profile busy (0x9)\r
-               halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);      \r
+               halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 33);      \r
                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
        }       \r
                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
        }       \r
@@ -2586,11 +2723,23 @@ halbtc8723b1ant_ActionWifiConnectedSpecialPacket(
        )\r
 {\r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        )\r
 {\r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       BOOLEAN bWifiBusy = FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
+\r
+       //no special packet process for both WiFi and BT very busy\r
+       if ((bWifiBusy) && ((pBtLinkInfo->bPanExist) || (pCoexSta->nNumOfProfile >= 2)))\r
+        return;        \r
 \r
        halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        // tdma and coex table\r
 \r
        halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        // tdma and coex table\r
-       if( (pBtLinkInfo->bScoExist)  || (pBtLinkInfo->bHidExist) || (pBtLinkInfo->bA2dpExist) )\r
+       if((pBtLinkInfo->bScoExist) || (pBtLinkInfo->bHidExist))\r
+       {\r
+               halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
+               halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);          \r
+       }\r
+       else if  (pBtLinkInfo->bA2dpExist)\r
        {\r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
        {\r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
@@ -2618,13 +2767,13 @@ halbtc8723b1ant_ActionWifiConnected(
        BOOLEAN         bUnder4way=FALSE, bApEnable=FALSE;\r
        u4Byte          wifiBw;\r
 \r
        BOOLEAN         bUnder4way=FALSE, bApEnable=FALSE;\r
        u4Byte          wifiBw;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect()===>\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect()===>\n"));\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
        if(bUnder4way)\r
        {\r
                halbtc8723b1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
        if(bUnder4way)\r
        {\r
                halbtc8723b1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect(), return for wifi is under 4way<===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect(), return for wifi is under 4way<===\n"));\r
                return;\r
        }\r
        \r
                return;\r
        }\r
        \r
@@ -2637,7 +2786,7 @@ halbtc8723b1ant_ActionWifiConnected(
                        halbtc8723b1ant_ActionWifiConnectedScan(pBtCoexist);\r
                else\r
                        halbtc8723b1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
                        halbtc8723b1ant_ActionWifiConnectedScan(pBtCoexist);\r
                else\r
                        halbtc8723b1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect(), return for wifi is under scan<===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect(), return for wifi is under scan<===\n"));\r
                return;\r
        }\r
 \r
                return;\r
        }\r
 \r
@@ -2690,7 +2839,7 @@ halbtc8723b1ant_ActionWifiConnected(
                        halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                        halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
                        if ( (pCoexSta->highPriorityTx) + (pCoexSta->highPriorityRx) <= 60 )\r
                        halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                        halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
                        if ( (pCoexSta->highPriorityTx) + (pCoexSta->highPriorityRx) <= 60 )\r
-                       halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+                               halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
                        else\r
                                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);           \r
                }\r
                        else\r
                                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);           \r
                }\r
@@ -2713,7 +2862,7 @@ halbtc8723b1ant_ActionWifiConnected(
                        halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                        halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);    \r
                        if ( (pCoexSta->highPriorityTx) + (pCoexSta->highPriorityRx) <= 60 )\r
                        halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                        halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);    \r
                        if ( (pCoexSta->highPriorityTx) + (pCoexSta->highPriorityRx) <= 60 )\r
-                       halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+                               halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
                        else\r
                                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7); \r
                }\r
                        else\r
                                halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7); \r
                }\r
@@ -2739,47 +2888,47 @@ halbtc8723b1ant_RunSwCoexistMechanism(
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8723B_1ANT_COEX_ALGO_SCO:\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8723B_1ANT_COEX_ALGO_SCO:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = SCO.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = SCO.\n"));\r
                                //halbtc8723b1ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_HID:\r
                                //halbtc8723b1ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID.\n"));\r
                                //halbtc8723b1ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_A2DP:\r
                                //halbtc8723b1ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = A2DP.\n"));\r
                                //halbtc8723b1ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_A2DP_PANHS:\r
                                //halbtc8723b1ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_A2DP_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = A2DP+PAN(HS).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = A2DP+PAN(HS).\n"));\r
                                //halbtc8723b1ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_PANEDR:\r
                                //halbtc8723b1ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN(EDR).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN(EDR).\n"));\r
                                //halbtc8723b1ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_PANHS:\r
                                //halbtc8723b1ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HS mode.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HS mode.\n"));\r
                                //halbtc8723b1ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_PANEDR_A2DP:\r
                                //halbtc8723b1ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_PANEDR_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN+A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN+A2DP.\n"));\r
                                //halbtc8723b1ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_PANEDR_HID:\r
                                //halbtc8723b1ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_PANEDR_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN(EDR)+HID.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN(EDR)+HID.\n"));\r
                                //halbtc8723b1ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
                                //halbtc8723b1ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID+A2DP+PAN.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID+A2DP+PAN.\n"));\r
                                //halbtc8723b1ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_HID_A2DP:\r
                                //halbtc8723b1ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8723B_1ANT_COEX_ALGO_HID_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID+A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID+A2DP.\n"));\r
                                //halbtc8723b1ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
                                //halbtc8723b1ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = coexist All Off!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = coexist All Off!!\n"));\r
                                //halbtc8723b1ant_CoexAllOff(pBtCoexist);\r
                                break;\r
                }\r
                                //halbtc8723b1ant_CoexAllOff(pBtCoexist);\r
                                break;\r
                }\r
@@ -2793,7 +2942,7 @@ halbtc8723b1ant_RunCoexistMechanism(
        )\r
 {\r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        )\r
 {\r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
-       BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE;\r
+       BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE, bWifiBusy = FALSE;\r
        BOOLEAN bIncreaseScanDevNum=FALSE;\r
        BOOLEAN bBtCtrlAggBufSize=FALSE;\r
        BOOLEAN bMiracastPlusBt=FALSE;\r
        BOOLEAN bIncreaseScanDevNum=FALSE;\r
        BOOLEAN bBtCtrlAggBufSize=FALSE;\r
        BOOLEAN bMiracastPlusBt=FALSE;\r
@@ -2801,30 +2950,31 @@ halbtc8723b1ant_RunCoexistMechanism(
        u1Byte  wifiRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte  wifiLinkStatus=0;\r
        u4Byte  numOfWifiLink=0, wifiBw;\r
        u1Byte  wifiRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte  wifiLinkStatus=0;\r
        u4Byte  numOfWifiLink=0, wifiBw;\r
+       u1Byte  iotPeer=BTC_IOT_PEER_UNKNOWN;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
                return;\r
        }\r
 \r
        if(pBtCoexist->bStopCoexDm)\r
        {\r
                return;\r
        }\r
 \r
        if(pBtCoexist->bStopCoexDm)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Stop Coex DM <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Stop Coex DM <===\n"));\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is under IPS !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is under IPS !!!\n"));\r
                return;\r
        }\r
 \r
        if(pCoexSta->bBtWhckTest)\r
        {\r
                return;\r
        }\r
 \r
        if(pCoexSta->bBtWhckTest)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under WHCK TEST!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is under WHCK TEST!!!\n"));\r
                halbtc8723b1ant_ActionBtWhckTest(pBtCoexist);\r
                return;\r
        }\r
                halbtc8723b1ant_ActionBtWhckTest(pBtCoexist);\r
                return;\r
        }\r
@@ -2838,13 +2988,14 @@ halbtc8723b1ant_RunCoexistMechanism(
 \r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_INC_SCAN_DEV_NUM, &bIncreaseScanDevNum);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
 \r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_INC_SCAN_DEV_NUM, &bIncreaseScanDevNum);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
        numOfWifiLink = wifiLinkStatus>>16;\r
        \r
        if((numOfWifiLink>=2) || (wifiLinkStatus&WIFI_P2P_GO_CONNECTED))\r
        {\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
        numOfWifiLink = wifiLinkStatus>>16;\r
        \r
        if((numOfWifiLink>=2) || (wifiLinkStatus&WIFI_P2P_GO_CONNECTED))\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex],  Multi-Port numOfWifiLink = %d, wifiLinkStatus = 0x%x\n", numOfWifiLink,wifiLinkStatus) );\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex],  Multi-Port numOfWifiLink = %d, wifiLinkStatus = 0x%x\n", numOfWifiLink,wifiLinkStatus) );\r
 \r
                if(pBtLinkInfo->bBtLinkExist)\r
                {\r
 \r
                if(pBtLinkInfo->bBtLinkExist)\r
                {\r
@@ -2859,9 +3010,9 @@ halbtc8723b1ant_RunCoexistMechanism(
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);\r
                halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, bBtCtrlAggBufSize, aggBufSize);\r
 \r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);\r
                halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, bBtCtrlAggBufSize, aggBufSize);\r
 \r
-               if ( (pBtLinkInfo->bA2dpExist) && (pCoexSta->bC2hBtInquiryPage) )\r
+               if ((  (pBtLinkInfo->bA2dpExist) || (bWifiBusy) ) && (pCoexSta->bC2hBtInquiryPage) )\r
                {\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex],  BT Is Inquirying \n") );   \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex],  BT Is Inquirying \n") );       \r
                        halbtc8723b1ant_ActionBtInquiry(pBtCoexist);\r
                }\r
                else\r
                        halbtc8723b1ant_ActionBtInquiry(pBtCoexist);\r
                }\r
                else\r
@@ -2881,21 +3032,29 @@ halbtc8723b1ant_RunCoexistMechanism(
        {\r
                halbtc8723b1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 1, 1, 0, 1); \r
 \r
        {\r
                halbtc8723b1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 1, 1, 0, 1); \r
 \r
-               if(pBtLinkInfo->bScoExist)//if (pBtLinkInfo->bBtHiPriLinkExist)\r
-                       halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, TRUE, FALSE, 0x5);   \r
-               else\r
-                       halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x5);\r
-               /*\r
-               if(pBtLinkInfo->bScoExist)\r
-                       halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, TRUE, FALSE, 0x5);\r
-               else\r
+               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_IOT_PEER, &iotPeer);\r
+\r
+               if(BTC_IOT_PEER_CISCO != iotPeer)\r
                {\r
                {\r
-                       if (BTC_WIFI_BW_HT40==wifiBw)\r
-                       halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x10);  \r
+                       if(pBtLinkInfo->bScoExist)//if (pBtLinkInfo->bBtHiPriLinkExist)\r
+                               //halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, TRUE, FALSE, 0x5);                         \r
+                               halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x5);\r
+                       else\r
+                               halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x5);\r
+                               //halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);         \r
+               }\r
                else\r
                else\r
-                       halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
+               {\r
+                       if(pBtLinkInfo->bScoExist)\r
+                               halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, TRUE, FALSE, 0x5);\r
+                       else\r
+                       {\r
+                               if (BTC_WIFI_BW_HT40==wifiBw)\r
+                                       halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x10);  \r
+                               else\r
+                                       halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
+                       }\r
                }\r
                }\r
-               */\r
 \r
                halbtc8723b1ant_SwMechanism(pBtCoexist, TRUE);\r
                halbtc8723b1ant_RunSwCoexistMechanism(pBtCoexist);  //just print debug message\r
 \r
                halbtc8723b1ant_SwMechanism(pBtCoexist, TRUE);\r
                halbtc8723b1ant_RunSwCoexistMechanism(pBtCoexist);  //just print debug message\r
@@ -2913,7 +3072,7 @@ halbtc8723b1ant_RunCoexistMechanism(
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex],  BT Is Inquirying \n") );           \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex],  BT Is Inquirying \n") );               \r
                halbtc8723b1ant_ActionBtInquiry(pBtCoexist);\r
                return;\r
        }\r
                halbtc8723b1ant_ActionBtInquiry(pBtCoexist);\r
                return;\r
        }\r
@@ -2928,7 +3087,7 @@ halbtc8723b1ant_RunCoexistMechanism(
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
                \r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
                \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is non connected-idle !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is non connected-idle !!!\n"));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
@@ -2951,7 +3110,7 @@ halbtc8723b1ant_RunCoexistMechanism(
 }\r
 \r
 u4Byte\r
 }\r
 \r
 u4Byte\r
-halbtc8723b1ant_Log2Base(\r
+halbtc8723b1ant_PSD_Log2Base(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      u4Byte                          val\r
        \r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      u4Byte                          val\r
        \r
@@ -3001,8 +3160,6 @@ halbtc8723b1ant_Log2Base(
 \r
 }\r
 \r
 \r
 }\r
 \r
-\r
-\r
 VOID\r
 halbtc8723b1ant_InitCoexDm(\r
        IN      PBTC_COEXIST            pBtCoexist\r
 VOID\r
 halbtc8723b1ant_InitCoexDm(\r
        IN      PBTC_COEXIST            pBtCoexist\r
@@ -3032,9 +3189,13 @@ halbtc8723b1ant_InitHwConfig(
        u1Byte                          u1Tmp=0, u1Tmpa=0, u1Tmpb=0;\r
        u1Byte                          H2C_Parameter[2] ={0};\r
 \r
        u1Byte                          u1Tmp=0, u1Tmpa=0, u1Tmpb=0;\r
        u1Byte                          H2C_Parameter[2] ={0};\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 1Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 1Ant Init HW Config!!\n"));\r
+\r
+       pPsdScan->nAntDet_IsAntDetAvailable = FALSE;\r
 \r
 \r
-       pPsdScan->bIsAntDetEnable = FALSE;\r
+       //0xf0[15:12] --> Chip Cut information \r
+       pCoexSta->nCutVersion = (pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xf1) & 0xf0) >> 4;\r
+       \r
 #if 0//move to BTC_MEDIA_CONNECT\r
        if(bBackUp)\r
        {\r
 #if 0//move to BTC_MEDIA_CONNECT\r
        if(bBackUp)\r
        {\r
@@ -3084,12 +3245,182 @@ halbtc8723b1ant_InitHwConfig(
        u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
        u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67);\r
 \r
        u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
        u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67);\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x67=0x%x\n",\r
+        RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x67=0x%x\n",\r
                        u4Tmp,  u1Tmpa, u1Tmpb));\r
 }\r
 \r
                        u4Tmp,  u1Tmpa, u1Tmpb));\r
 }\r
 \r
+\r
+\r
+\r
+\r
+VOID\r
+halbtc8723b1ant_MechanismSwitch(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bSwitchTo2Antenna\r
+       )\r
+{\r
+\r
+       if (bSwitchTo2Antenna)  // 1-Ant -> 2-Ant\r
+       {\r
+               //un-lock TRx Mask setup for 8723b f-cut\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xdd, 0x80, 0x1);\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xdf, 0x1, 0x1);\r
+               //WiFi TRx Mask on                              \r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0); \r
+\r
+               //BT TRx Mask un-lock 0x2c[0], 0x30[0] = 1\r
+               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x2c, 0x7c45); \r
+               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x30, 0x7c45); \r
+       \r
+               //BT TRx Mask on\r
+               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x1); \r
+\r
+               halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FORCE_EXEC, FALSE, FALSE);\r
+       }\r
+       else\r
+       {\r
+               //WiFi TRx Mask on                              \r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780); \r
+\r
+               //lock TRx Mask setup for 8723b f-cut\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xdd, 0x80, 0x0);\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xdf, 0x1, 0x0);\r
+\r
+               //BT TRx Mask on\r
+               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15); \r
+\r
+               //BT TRx Mask ock 0x2c[0], 0x30[0]  = 0\r
+               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x2c, 0x7c44); \r
+               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x30, 0x7c44); \r
+               \r
+\r
+               halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
+       }\r
+\r
+}\r
+\r
+\r
+\r
+\r
+VOID\r
+halbtc8723b1ant_PSD_ShowAntennaDetectResult(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{      \r
+       pu1Byte         cliBuf=pBtCoexist->cliBuf;\r
+       PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
+       \r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n============[Antenna Detection info]  ============\n");\r
+       CL_PRINTF(cliBuf);\r
+\r
+       if (pPsdScan->nAntDet_Result == 1) \r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s (>%d)", "Ant Det Result", "2-Antenna (Bad-Isolation)", \r
+                               BT_8723B_1ANT_ANTDET_PSDTHRES_2ANT_BADISOLATION);\r
+       else if (pPsdScan->nAntDet_Result == 2)\r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s (%d~%d)", "Ant Det Result", "2-Antenna (Good-Isolation)", \r
+                               BT_8723B_1ANT_ANTDET_PSDTHRES_2ANT_GOODISOLATION+pPsdScan->nAntDet_ThresOffset, BT_8723B_1ANT_ANTDET_PSDTHRES_2ANT_BADISOLATION);\r
+       else\r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s (%d~%d)", "Ant Det Result", "1-Antenna",\r
+                               BT_8723B_1ANT_ANTDET_PSDTHRES_1ANT, BT_8723B_1ANT_ANTDET_PSDTHRES_2ANT_GOODISOLATION+pPsdScan->nAntDet_ThresOffset);\r
+\r
+       CL_PRINTF(cliBuf);\r
+       \r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s ", "Antenna Detection Finish",\r
+                                                       (pBoardInfo->btdmAntDetFinish? "Yes":"No"));    \r
+       CL_PRINTF(cliBuf);\r
+\r
+       switch(pPsdScan->nAntDet_Result)\r
+       {\r
+               case 0:\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(BT is not available)");\r
+                       break;\r
+               case 1:  // 2-Ant bad-isolation\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(BT is available)");\r
+                       break;\r
+               case 2:  // 2-Ant good-isolation\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(BT is available)");\r
+                       break;\r
+               case 3:  // 1-Ant \r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(BT is available)");\r
+                       break;\r
+               case 4:  \r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(Uncertainty result)");\r
+                       break;\r
+               case 5:\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(Pre-Scan fai)");\r
+                       break;  \r
+               case 6:\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(WiFi is Scanning)");\r
+                       break;  \r
+               case 7:\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(BT is not idle)");\r
+                       break;  \r
+               case 8:\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(Abort by WiFi Scanning)");\r
+                       break;          \r
+               case 9:\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(Antenna Init is not ready)");\r
+                       break;  \r
+               case 10:\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(BT is Inquiry or page)");\r
+                       break;  \r
+               case 11:\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "(BT is Disabled)");\r
+                       break;          \r
+}\r
+       CL_PRINTF(cliBuf);      \r
+\r
+       \r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "Ant Detect Total Count",pPsdScan->bAntDet_TryCount);\r
+       CL_PRINTF(cliBuf);\r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "Ant Detect Fail Count",pPsdScan->bAntDet_FailCount);\r
+       CL_PRINTF(cliBuf);\r
+\r
+       if ( (!pBoardInfo->btdmAntDetFinish) && (pPsdScan->nAntDet_Result != 5) )\r
+        return;        \r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "BT Response",(pPsdScan->nAntDet_Result? "ok":"fail"));\r
+       CL_PRINTF(cliBuf);\r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d ms", "BT Tx Time", pPsdScan->nAntDet_BTTxTime);\r
+       CL_PRINTF(cliBuf);\r
+       \r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "BT Tx Ch", pPsdScan->nAntDet_BTLEChannel);\r
+       CL_PRINTF(cliBuf);\r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d", "WiFi PSD Cent-Ch/Offset/Span", \r
+                               pPsdScan->nRealCentFreq, pPsdScan->nRealOffset, pPsdScan->nRealSpan);\r
+       CL_PRINTF(cliBuf);      \r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d dB", "PSD Pre-Scan Peak Value", pPsdScan->nAntDet_PrePSDScanPeakVal/100);\r
+       CL_PRINTF(cliBuf);\r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s (<= %d)", "PSD Pre-Scan result", \r
+                               (pPsdScan->nAntDet_Result != 5? "ok":"fail"), BT_8723B_1ANT_ANTDET_PSDTHRES_BACKGROUND+pPsdScan->nAntDet_ThresOffset);  \r
+       CL_PRINTF(cliBuf);\r
+       \r
+       if (pPsdScan->nAntDet_Result == 5)\r
+               return;\r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s dB", "PSD Scan Peak Value", pPsdScan->nAntDet_PeakVal);\r
+       CL_PRINTF(cliBuf);      \r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s MHz", "PSD Scan Peak Freq", pPsdScan->nAntDet_PeakFreq);\r
+       CL_PRINTF(cliBuf);\r
+\r
+       \r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "TFBGA Package", \r
+                       (pBoardInfo->bTfbgaPackage)?  "Yes":"No");\r
+       CL_PRINTF(cliBuf);\r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "PSD Threshold Offset", pPsdScan->nAntDet_ThresOffset);\r
+       CL_PRINTF(cliBuf);\r
+\r
+}\r
+\r
 VOID\r
 VOID\r
-halbtc8723b1ant_ShowPSDData(\r
+halbtc8723b1ant_PSD_ShowData(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
@@ -3097,13 +3428,11 @@ halbtc8723b1ant_ShowPSDData(
        u4Byte          nDeltaFreqPerPoint;\r
        u4Byte          freq,freq1,freq2,n=0,i=0, j=0, m=0, PsdRep1, PsdRep2;\r
        \r
        u4Byte          nDeltaFreqPerPoint;\r
        u4Byte          freq,freq1,freq2,n=0,i=0, j=0, m=0, PsdRep1, PsdRep2;\r
        \r
-       DbgPrint("xxxxxxxxxxxxxxxx DisplayAntIsolation()\n");\r
-\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n============[Antenna Detection info]  (%d/%d)============\n",\r
-                       pPsdScan->nPSDGenCount, pPsdScan->nPSDGenTotalCount);\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n\n============[PSD info]  (%d)============\n",\r
+                       pPsdScan->nPSDGenCount);\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_PRINTF(cliBuf);\r
 \r
-       if (pPsdScan->nPSDGenTotalCount == 0)\r
+       if (pPsdScan->nPSDGenCount == 0)\r
        {\r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n No Data !!\n");\r
                CL_PRINTF(cliBuf);\r
        {\r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n No Data !!\n");\r
                CL_PRINTF(cliBuf);\r
@@ -3115,12 +3444,13 @@ halbtc8723b1ant_ShowPSDData(
        else                    \r
                nDeltaFreqPerPoint = pPsdScan->nPSDBandWidth/pPsdScan->nPSDPoint;               \r
 \r
        else                    \r
                nDeltaFreqPerPoint = pPsdScan->nPSDBandWidth/pPsdScan->nPSDPoint;               \r
 \r
-       if (pPsdScan->bIsPSDShowMaxOnly)\r
+       //if (pPsdScan->bIsPSDShowMaxOnly)\r
+       if (0)\r
        {       \r
                PsdRep1 = pPsdScan->nPSDMaxValue/100;\r
                PsdRep2 = pPsdScan->nPSDMaxValue - PsdRep1 * 100;\r
                                \r
        {       \r
                PsdRep1 = pPsdScan->nPSDMaxValue/100;\r
                PsdRep2 = pPsdScan->nPSDMaxValue - PsdRep1 * 100;\r
                                \r
-               freq = ((pPsdScan->realcentFreq-20) * 1000000 + pPsdScan->nPSDMaxValuePoint * nDeltaFreqPerPoint);\r
+               freq = ((pPsdScan->nRealCentFreq-20) * 1000000 + pPsdScan->nPSDMaxValuePoint * nDeltaFreqPerPoint);\r
                freq1 = freq/1000000;\r
                freq2 = freq/1000 - freq1 * 1000;\r
 \r
                freq1 = freq/1000000;\r
                freq2 = freq/1000 - freq1 * 1000;\r
 \r
@@ -3132,11 +3462,11 @@ halbtc8723b1ant_ShowPSDData(
                          freq1, freq2);\r
 \r
                if (PsdRep2 < 10)       \r
                          freq1, freq2);\r
 \r
                if (PsdRep2 < 10)       \r
-                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, ", Value = %d.0%d dB, (%d/%d) \n",  \r
-                         PsdRep1, PsdRep2, pPsdScan->nPSDGenCount, pPsdScan->nPSDGenTotalCount);\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, ", Value = %d.0%d dB, (%d) \n",  \r
+                         PsdRep1, PsdRep2, pPsdScan->nPSDMaxValue);\r
                else\r
                else\r
-                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, ", Value = %d.%d dB, %d, (%d/%d)\n",  \r
-                         PsdRep1, PsdRep2, pPsdScan->nPSDMaxValue, pPsdScan->nPSDGenCount, pPsdScan->nPSDGenTotalCount);\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, ", Value = %d.%d dB, (%d)\n",  \r
+                         PsdRep1, PsdRep2, pPsdScan->nPSDMaxValue);\r
                \r
                CL_PRINTF(cliBuf);\r
        }\r
                \r
                CL_PRINTF(cliBuf);\r
        }\r
@@ -3151,7 +3481,7 @@ halbtc8723b1ant_ShowPSDData(
         {\r
                do\r
                {\r
         {\r
                do\r
                {\r
-                       freq = ((pPsdScan->realcentFreq-20) * 1000000 + m * nDeltaFreqPerPoint);\r
+                       freq = ((pPsdScan->nRealCentFreq-20) * 1000000 + m * nDeltaFreqPerPoint);\r
                        freq1 = freq/1000000;\r
                        freq2 = freq/1000 - freq1 * 1000;\r
                        \r
                        freq1 = freq/1000000;\r
                        freq2 = freq/1000 - freq1 * 1000;\r
                        \r
@@ -3181,7 +3511,7 @@ halbtc8723b1ant_ShowPSDData(
                                        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "%6d.0%2d", freq1,freq2);\r
                                else\r
                                        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "%6d.%3d", freq1,freq2);\r
                                        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "%6d.0%2d", freq1,freq2);\r
                                else\r
                                        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "%6d.%3d", freq1,freq2);\r
-}\r
+                       }\r
 \r
                        i++;                                    \r
                        m++;\r
 \r
                        i++;                                    \r
                        m++;\r
@@ -3237,30 +3567,87 @@ halbtc8723b1ant_ShowPSDData(
 \r
 }\r
 \r
 \r
 }\r
 \r
-u4Byte\r
-halbtc8723b1ant_GetPSDData(\r
+VOID\r
+halbtc8723b1ant_PSD_MaxHoldData(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      u4Byte                          nPoint\r
+       IN      u4Byte                          GenCount\r
        )\r
 {\r
        )\r
 {\r
-       //reg 0x808[9:0]: FFT data x\r
-       //reg 0x808[22]: 0-->1 to get 1 FFT data y\r
-       //reg 0x8b4[15:0]: FFT data y report\r
-\r
-       u4Byte val = 0, psd_report =0;\r
-       \r
-       val = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x808);\r
+                u4Byte i=0, i_max=0, val_max=0, j;\r
+                \r
+               if (GenCount== 1)\r
+               {\r
+                       memcpy(pPsdScan->nPSDReport_MaxHold, pPsdScan->nPSDReport, BT_8723B_1ANT_ANTDET_PSD_POINTS*sizeof(u4Byte));\r
 \r
 \r
-       val &= 0xffbffc00;\r
-       val |= nPoint;\r
-       \r
-        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x808, val);\r
+                       for (i= pPsdScan->nPSDStartPoint; i<=pPsdScan->nPSDStopPoint; i++)\r
+                       {\r
+                               //RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx SweepPSDPoint(), Max_Hold i = %d, PSDReport = %d dB\n", i,  pPsdScan->nPSDReport_MaxHold[i]));\r
+                       }\r
 \r
 \r
-       val |= 0x00400000;\r
-        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x808, val);\r
+                       pPsdScan->nPSDMaxValuePoint = 0;\r
+                       pPsdScan->nPSDMaxValue = 0;\r
 \r
 \r
+               }       \r
+               else\r
+               {\r
+                       for (i= pPsdScan->nPSDStartPoint; i<=pPsdScan->nPSDStopPoint; i++)\r
+                       {\r
+                               if (pPsdScan->nPSDReport[i] > pPsdScan->nPSDReport_MaxHold[i])\r
+                                       pPsdScan->nPSDReport_MaxHold[i] = pPsdScan->nPSDReport[i];\r
 \r
 \r
-       val = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x8b4);\r
+                               //search Max Value\r
+                               if (i ==pPsdScan->nPSDStartPoint )\r
+                               {\r
+                                       i_max = i;\r
+                                       val_max = pPsdScan->nPSDReport_MaxHold[i];\r
+                               }\r
+                               else\r
+                               {\r
+                                       if (pPsdScan->nPSDReport_MaxHold[i] > val_max)\r
+                                       {\r
+                                               i_max = i;\r
+                                               val_max = pPsdScan->nPSDReport_MaxHold[i];\r
+                                       }\r
+                               }\r
+\r
+                               //RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx SweepPSDPoint(), Max_Hold i = %d, PSDReport = %d dB\n", i,  pPsdScan->nPSDReport_MaxHold[i]));\r
+\r
+                       }\r
+       \r
+                       pPsdScan->nPSDMaxValuePoint = i_max;\r
+                       pPsdScan->nPSDMaxValue = val_max;\r
+\r
+                       //RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx SweepPSDPoint(), Max_Hold i_Max = %d, PSDReport_Max = %d dB\n", pPsdScan->nPSDMaxValuePoint\r
+                       //              ,pPsdScan->nPSDMaxValue));\r
+               }\r
+\r
+\r
+}\r
+\r
+u4Byte\r
+halbtc8723b1ant_PSD_GetData(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u4Byte                          nPoint\r
+       )\r
+{\r
+       //reg 0x808[9:0]: FFT data x\r
+       //reg 0x808[22]: 0-->1 to get 1 FFT data y\r
+       //reg 0x8b4[15:0]: FFT data y report\r
+\r
+       u4Byte val = 0, psd_report =0;\r
+       \r
+       val = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x808);\r
+\r
+       val &= 0xffbffc00;\r
+       val |= nPoint;\r
+       \r
+        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x808, val);\r
+\r
+       val |= 0x00400000;\r
+        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x808, val);\r
+\r
+\r
+       val = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x8b4);\r
 \r
        psd_report = val & 0x0000ffff;\r
         \r
 \r
        psd_report = val & 0x0000ffff;\r
         \r
@@ -3268,11 +3655,11 @@ halbtc8723b1ant_GetPSDData(
 }\r
 \r
 \r
 }\r
 \r
 \r
-void\r
-halbtc8723b1ant_SweepPSDPoint(\r
+VOID\r
+halbtc8723b1ant_PSD_SweepPoint(\r
 IN     PBTC_COEXIST                    pBtCoexist,\r
        IN      u4Byte                          centFreq,\r
 IN     PBTC_COEXIST                    pBtCoexist,\r
        IN      u4Byte                          centFreq,\r
-       IN      u4Byte                          offset,\r
+       IN      s4Byte                          offset,\r
        IN      u4Byte                          span,\r
        IN      u4Byte                          points,\r
        IN      u4Byte                          avgnum\r
        IN      u4Byte                          span,\r
        IN      u4Byte                          points,\r
        IN      u4Byte                          avgnum\r
@@ -3285,6 +3672,7 @@ IN        PBTC_COEXIST                    pBtCoexist,
        BOOLEAN outloop = FALSE;\r
        u1Byte   flag = 0;      \r
        u4Byte  tmp, PsdRep1, PsdRep2;\r
        BOOLEAN outloop = FALSE;\r
        u1Byte   flag = 0;      \r
        u4Byte  tmp, PsdRep1, PsdRep2;\r
+       u4Byte  WiFi_OriginalChannel = 1;\r
 \r
        pPsdScan->bIsPSDRunning = TRUE;\r
        \r
 \r
        pPsdScan->bIsPSDRunning = TRUE;\r
        \r
@@ -3294,13 +3682,17 @@ IN      PBTC_COEXIST                    pBtCoexist,
                {\r
                   case 0:  //Get PSD parameters\r
                   default:     \r
                {\r
                   case 0:  //Get PSD parameters\r
                   default:     \r
-                       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), centFreq=0x%x, offset=0x%x, span=0x%x\n", \r
-                            centFreq, offset, span);\r
+                       //RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx SweepPSDPoint(), centFreq=0x%x, offset=0x%x, span=0x%x\n", \r
+                      //     centFreq, offset, span));\r
 \r
                        pPsdScan->nPSDBandWidth = 40*1000000;\r
                        pPsdScan->nPSDPoint = points;\r
                        pPsdScan->nPSDStartBase = points/2; \r
                        pPsdScan->nPSDAvgNum = avgnum;\r
 \r
                        pPsdScan->nPSDBandWidth = 40*1000000;\r
                        pPsdScan->nPSDPoint = points;\r
                        pPsdScan->nPSDStartBase = points/2; \r
                        pPsdScan->nPSDAvgNum = avgnum;\r
+                       pPsdScan->nRealCentFreq = centFreq;\r
+                       pPsdScan->nRealOffset = offset;\r
+                       pPsdScan->nRealSpan = span;\r
+               \r
                        \r
                        nPoints = pPsdScan->nPSDPoint;\r
                        nDeltaFreqPerPoint = pPsdScan->nPSDBandWidth/pPsdScan->nPSDPoint;\r
                        \r
                        nPoints = pPsdScan->nPSDPoint;\r
                        nDeltaFreqPerPoint = pPsdScan->nPSDBandWidth/pPsdScan->nPSDPoint;\r
@@ -3344,21 +3736,21 @@ IN      PBTC_COEXIST                    pBtCoexist,
                        }\r
                         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x808, val);\r
 \r
                        }\r
                         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x808, val);\r
 \r
-                       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), PSD BW= %d, DeltaFreq=%d\n"\r
-                               , pPsdScan->nPSDBandWidth, nDeltaFreqPerPoint);\r
+                       //RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx SweepPSDPoint(), PSD BW= %d, DeltaFreq=%d\n"\r
+                       //      , pPsdScan->nPSDBandWidth, nDeltaFreqPerPoint));\r
                        flag = 1;\r
                        break;\r
                  case 1:         //calculate the PSD point index from freq/offset/span\r
                        nPSDCenterFreq = pPsdScan->nPSDBandWidth /2 +offset*(1000000);\r
                        flag = 1;\r
                        break;\r
                  case 1:         //calculate the PSD point index from freq/offset/span\r
                        nPSDCenterFreq = pPsdScan->nPSDBandWidth /2 +offset*(1000000);\r
-                       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), PSD Center Freq = %d\n", (centFreq + offset));\r
+                       //RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx SweepPSDPoint(), PSD Center Freq = %d\n", (centFreq + offset)));\r
                        \r
                        nStartP = pPsdScan->nPSDStartBase + (nPSDCenterFreq - span *(1000000)/2) /nDeltaFreqPerPoint;\r
                        pPsdScan->nPSDStartPoint = nStartP - pPsdScan->nPSDStartBase;\r
                        \r
                        nStartP = pPsdScan->nPSDStartBase + (nPSDCenterFreq - span *(1000000)/2) /nDeltaFreqPerPoint;\r
                        pPsdScan->nPSDStartPoint = nStartP - pPsdScan->nPSDStartBase;\r
-                       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), Start PSD Poin Matrix Index = %d\n", pPsdScan->nPSDStartPoint);\r
+                       //RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx SweepPSDPoint(), Start PSD Poin Matrix Index = %d\n", pPsdScan->nPSDStartPoint));\r
 \r
                        nStopP = pPsdScan->nPSDStartBase + (nPSDCenterFreq + span *(1000000)/2) /nDeltaFreqPerPoint;\r
                        pPsdScan->nPSDStopPoint = nStopP - pPsdScan->nPSDStartBase-1;\r
 \r
                        nStopP = pPsdScan->nPSDStartBase + (nPSDCenterFreq + span *(1000000)/2) /nDeltaFreqPerPoint;\r
                        pPsdScan->nPSDStopPoint = nStopP - pPsdScan->nPSDStartBase-1;\r
-                       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), Stop PSD Poin Matrix Index = %d\n",pPsdScan->nPSDStopPoint);\r
+                       //RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx SweepPSDPoint(), Stop PSD Poin Matrix Index = %d\n",pPsdScan->nPSDStopPoint));\r
 \r
                        flag = 2;\r
                        break;\r
 \r
                        flag = 2;\r
                        break;\r
@@ -3374,15 +3766,21 @@ IN      PBTC_COEXIST                    pBtCoexist,
                        val &= 0xfeffffff;\r
                        pBtCoexist->fBtcWrite4Byte(pBtCoexist,0x800,val);               \r
 \r
                        val &= 0xfeffffff;\r
                        pBtCoexist->fBtcWrite4Byte(pBtCoexist,0x800,val);               \r
 \r
+                       //store WiFi original channel\r
+                       WiFi_OriginalChannel = pBtCoexist->fBtcGetRfReg(pBtCoexist, BTC_RF_A, 0x18, 0x3ff);\r
+\r
                        //Set RF channel\r
                       if (centFreq == 2484)\r
                        //Set RF channel\r
                       if (centFreq == 2484)\r
-                               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x18, 0x3ff, 0xe); //WiFi TRx Mask on\r
+                               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x18, 0x3ff, 0xe); \r
                        else\r
                                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x18, 0x3ff, (centFreq-2412)/5 + 1); //WiFi TRx Mask on\r
 \r
                        //Set  RF mode = Rx, RF Gain = 0x8a0\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x0, 0xfffff, 0x308a0);\r
 \r
                        else\r
                                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x18, 0x3ff, (centFreq-2412)/5 + 1); //WiFi TRx Mask on\r
 \r
                        //Set  RF mode = Rx, RF Gain = 0x8a0\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x0, 0xfffff, 0x308a0);\r
 \r
+                       //Set RF Rx filter corner\r
+                       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0x3e4);\r
+\r
                        //Set TRx mask off\r
                        //un-lock TRx Mask setup\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xdd, 0x80, 0x1);\r
                        //Set TRx mask off\r
                        //un-lock TRx Mask setup\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xdd, 0x80, 0x1);\r
@@ -3403,11 +3801,11 @@ IN      PBTC_COEXIST                    pBtCoexist,
                        {\r
                                if (i >= nPoints)\r
                                {\r
                        {\r
                                if (i >= nPoints)\r
                                {\r
-                                       psd_report = halbtc8723b1ant_GetPSDData(pBtCoexist,i-nPoints);\r
+                                       psd_report = halbtc8723b1ant_PSD_GetData(pBtCoexist,i-nPoints);\r
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       psd_report = halbtc8723b1ant_GetPSDData(pBtCoexist,i);\r
+                                       psd_report = halbtc8723b1ant_PSD_GetData(pBtCoexist,i);\r
                                }\r
 \r
                                if (psd_report == 0)\r
                                }\r
 \r
                                if (psd_report == 0)\r
@@ -3415,8 +3813,7 @@ IN        PBTC_COEXIST                    pBtCoexist,
                                else\r
                                        //tmp =  20*log10((double)psd_report);\r
                                        //20*log2(x)/log2(10), log2Base return theresult of the psd_report*100\r
                                else\r
                                        //tmp =  20*log10((double)psd_report);\r
                                        //20*log2(x)/log2(10), log2Base return theresult of the psd_report*100\r
-                                       tmp = 6 * halbtc8723b1ant_Log2Base(pBtCoexist, psd_report);\r
-                               \r
+                                       tmp = 6 * halbtc8723b1ant_PSD_Log2Base(pBtCoexist, psd_report);                         \r
 \r
                                n = i-pPsdScan->nPSDStartBase;\r
                                pPsdScan->nPSDReport[n] =  tmp;\r
 \r
                                n = i-pPsdScan->nPSDStartBase;\r
                                pPsdScan->nPSDReport[n] =  tmp;\r
@@ -3426,17 +3823,17 @@ IN      PBTC_COEXIST                    pBtCoexist,
                                freq =  ((centFreq-20) * 1000000 + n * nDeltaFreqPerPoint);\r
                                freq1 = freq/1000000;\r
                                freq2 = freq/1000 - freq1 * 1000;\r
                                freq =  ((centFreq-20) * 1000000 + n * nDeltaFreqPerPoint);\r
                                freq1 = freq/1000000;\r
                                freq2 = freq/1000 - freq1 * 1000;\r
-\r
+/*\r
                                if (freq2 < 100)\r
                                if (freq2 < 100)\r
-                                       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), i = %d (%d.0%d MHz)", n, freq1, freq2);\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx SweepPSDPoint(), i = %d (%d.0%d MHz)", n, freq1, freq2));\r
                                else\r
                                else\r
-                                       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), i = %d (%d.%d MHz)", n, freq1, freq2);\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx SweepPSDPoint(), i = %d (%d.%d MHz)", n, freq1, freq2));\r
 \r
                                if (PsdRep2 < 10)\r
 \r
                                if (PsdRep2 < 10)\r
-                                       DbgPrint(", PSDReport = %d (%d.0%d dB)\n",psd_report, PsdRep1, PsdRep2);\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, (", PSDReport = %d (%d.0%d dB)\n",psd_report, PsdRep1, PsdRep2));\r
                                else\r
                                else\r
-                                       DbgPrint(", PSDReport = %d (%d.%d dB)\n",psd_report, PsdRep1,PsdRep2);  \r
-\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, (", PSDReport = %d (%d.%d dB)\n",psd_report, PsdRep1,PsdRep2));   \r
+*/\r
                                i++;\r
 \r
                                k=0;\r
                                i++;\r
 \r
                                k=0;\r
@@ -3448,7 +3845,7 @@ IN        PBTC_COEXIST                    pBtCoexist,
                                         break;\r
                                }\r
 \r
                                         break;\r
                                }\r
 \r
-                               DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint()==============\n");\r
+                               //RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx SweepPSDPoint()==============\n"));\r
                        }       \r
 \r
                        flag = 100;\r
                        }       \r
 \r
                        flag = 100;\r
@@ -3475,10 +3872,17 @@ IN      PBTC_COEXIST                    pBtCoexist,
                        pBtCoexist->fBtcWrite4Byte(pBtCoexist,0x808,val);\r
                        \r
                        //TRx Mask on\r
                        pBtCoexist->fBtcWrite4Byte(pBtCoexist,0x808,val);\r
                        \r
                        //TRx Mask on\r
+                       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780);\r
+\r
+                       //lock TRx Mask setup\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xdd, 0x80, 0x0);\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xdf, 0x1, 0x0);\r
 \r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xdd, 0x80, 0x0);\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xdf, 0x1, 0x0);\r
 \r
-                       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780);\r
+                       //Set RF Rx filter corner\r
+                       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0x0);\r
+\r
+                       //restore WiFi original channel\r
+                       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x18, 0x3ff, WiFi_OriginalChannel); \r
                        \r
                        outloop = TRUE;\r
                        break;\r
                        \r
                        outloop = TRUE;\r
                        break;\r
@@ -3495,98 +3899,337 @@ IN     PBTC_COEXIST                    pBtCoexist,
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-halbtc8723b1ant_AntennaDetection(\r
+halbtc8723b1ant_PSD_AntennaDetection(\r
        IN      PBTC_COEXIST                    pBtCoexist,\r
        IN      PBTC_COEXIST                    pBtCoexist,\r
-       IN      u4Byte                                  centFreq,\r
-       IN      u4Byte                                  offset,\r
-       IN      u4Byte                                  span,\r
-       IN      u4Byte                                  seconds\r
+       IN      u4Byte                                  BTTxTime,\r
+       IN      u4Byte                                  BTLEChannel\r
        )\r
 {\r
        )\r
 {\r
-       u4Byte realseconds = 0, i=0, i_max=0, val_max=0, j;\r
+       u4Byte  realseconds = 0, i=0, j=0;\r
+       u4Byte  WLPSD_CentFreq = 2484, WLPSD_Span = 2, WLPSD_SweepCount = 50; \r
+       s4Byte  WLPSD_Offset = -4;\r
+       u1Byte  BTLECh[13] = {3,6,8,11,13,16,18,21,23,26,28,31,33};\r
+\r
+       u1Byte  H2C_Parameter[3] ={0},u1Tmpa,u1Tmpb;\r
+       \r
+       u1Byte  state=0;\r
+       BOOLEAN         outloop = FALSE, BTResp = FALSE, bScan ,bRoam;\r
+       u4Byte          freq,freq1,freq2,PsdRep1, PsdRep2, nDeltaFreqPerPoint,u4Tmp;\r
+       PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
+\r
+       pBoardInfo->btdmAntDetFinish = FALSE;   \r
+       memset(pPsdScan->nAntDet_PeakVal, 0, 16*sizeof(UCHAR));\r
+       memset(pPsdScan->nAntDet_PeakFreq, 0, 16*sizeof(UCHAR));\r
+\r
+       if (pBoardInfo->bTfbgaPackage) //for TFBGA\r
+               pPsdScan->nAntDet_ThresOffset = 5;\r
+       else\r
+               pPsdScan->nAntDet_ThresOffset = 0;\r
+\r
+       do\r
+       {\r
+               switch(state)\r
+               {\r
+                       case 0:\r
+                               if (BTLEChannel == 39)\r
+                                WLPSD_CentFreq = 2484;\r
+                               else\r
+                               {\r
+                                       for (i=1; i<=13; i++)\r
+                                       {\r
+                                               if (BTLECh[i-1] == BTLEChannel)\r
+                                               {\r
+                                                        WLPSD_CentFreq = 2412 + (i-1) * 5;\r
+                                                        break;\r
+                                               }\r
+                                       }\r
+\r
+                                       if (i == 14)\r
+                                       {\r
+\r
+                                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Abort!!, Invalid LE channel = %d\n ",  BTLEChannel));\r
+                                               outloop = TRUE;\r
+                                               break;                                  \r
+                                       }\r
+                               }\r
+                               \r
+                               WLPSD_SweepCount = BTTxTime * 238 /100;  //BTTxTime/0.42                                                                \r
 \r
 \r
+                               if (WLPSD_SweepCount % 5 != 0)\r
+                                       WLPSD_SweepCount = (WLPSD_SweepCount/5 + 1) * 5;\r
+\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), BT_LETxTime=%d,  BT_LECh = %d\n", BTTxTime, BTLEChannel));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), WLPSD_CentFreq=%d,  WLPSD_Offset = %d, WLPSD_Span = %d, WLPSD_SweepCount = %d\n",\r
+                                                                       WLPSD_CentFreq, WLPSD_Offset, WLPSD_Span,WLPSD_SweepCount));\r
+                               \r
+                               state = 1;\r
+                               break;\r
+                       case 1: //stop coex DM & set antenna path\r
        //Stop Coex DM\r
        pBtCoexist->bStopCoexDm = TRUE;\r
 \r
        //Stop Coex DM\r
        pBtCoexist->bStopCoexDm = TRUE;\r
 \r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Stop Coex DM!!\n"));\r
+\r
+                               //set native power save\r
+                               halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+\r
+                               //Set TDMA off,                                 \r
+                               halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);                               \r
+\r
+                               //Set coex table\r
+                               halbtc8723b1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);\r
+\r
+                               if(pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)\r
+                               {\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Antenna at Main Port\n"));\r
+                               }\r
+                               else\r
+                               {\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Antenna at Aux Port\n"));\r
+                               }\r
+               \r
        //Set Antenna path, switch WiFi to un-certain antenna port\r
        halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FORCE_EXEC, FALSE, FALSE);\r
 \r
        //Set Antenna path, switch WiFi to un-certain antenna port\r
        halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FORCE_EXEC, FALSE, FALSE);\r
 \r
-       //Mailbox handshake\r
-       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, 0x0);      \r
-       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), Set BT LE Tx\n");\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Set Antenna to BT!!\n"));\r
 \r
 \r
-       //sweep PSD\r
-       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), \n");\r
-       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), \n");\r
-       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), \n");\r
+                               //Set AFH mask on at WiFi channel 2472MHz +/- 10MHz\r
+                               H2C_Parameter[0] = 0x1;\r
+                               H2C_Parameter[1] = 0xd;\r
+                               H2C_Parameter[2] = 0x14;\r
 \r
 \r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Set AFH on, Cent-Ch= %d,  Mask=%d\n",\r
+                                                                       H2C_Parameter[1],H2C_Parameter[2]));\r
        \r
        \r
-       //Analysis Data\r
+                               pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);\r
 \r
 \r
-       do\r
+                               u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);\r
+                               u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
+                               u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x778);\r
+       \r
+                                RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x778=0x%x\n",\r
+                                               u4Tmp,  u1Tmpa, u1Tmpb));\r
+\r
+                               state =2;\r
+                               break;\r
+                       case 2: //Pre-sweep background psd\r
+                               for (pPsdScan->nPSDGenCount=1; pPsdScan->nPSDGenCount<=3; pPsdScan->nPSDGenCount++)\r
        {\r
        {\r
-               halbtc8723b1ant_SweepPSDPoint(pBtCoexist, centFreq, offset,span, BT_8723B_1ANT_ANTDET_PSD_POINTS, BT_8723B_1ANT_ANTDET_PSD_AVGNUM);     \r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), PSDGenCount = %d\n ",  pPsdScan->nPSDGenCount));\r
+                                       halbtc8723b1ant_PSD_SweepPoint(pBtCoexist, WLPSD_CentFreq, WLPSD_Offset, WLPSD_Span, BT_8723B_1ANT_ANTDET_PSD_POINTS, BT_8723B_1ANT_ANTDET_PSD_AVGNUM);                         \r
+                                       halbtc8723b1ant_PSD_MaxHoldData(pBtCoexist,  pPsdScan->nPSDGenCount);                                   \r
+                               }\r
                \r
                \r
-               DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), PSDGenCount = %d\n ", pPsdScan->nPSDGenCount);\r
+                               pPsdScan->nAntDet_PrePSDScanPeakVal = pPsdScan->nPSDMaxValue;\r
        \r
        \r
-               if (pPsdScan->nPSDGenCount == 0)\r
+                               if (pPsdScan->nPSDMaxValue > (BT_8723B_1ANT_ANTDET_PSDTHRES_BACKGROUND+pPsdScan->nAntDet_ThresOffset)*100)\r
+                               {\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Abort Antenna Detection!! becaus background = %d > thres (%d)\n",\r
+                                               pPsdScan->nPSDMaxValue/100, BT_8723B_1ANT_ANTDET_PSDTHRES_BACKGROUND+pPsdScan->nAntDet_ThresOffset));\r
+                                       pBoardInfo->btdmAntDetFinish = FALSE;\r
+                                       pBoardInfo->btdmAntNumByAntDet = 1;\r
+                                       pPsdScan->nAntDet_Result = 5;\r
+                                       state = 99;\r
+                               }\r
+                               else\r
+                               {\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Start Antenna Detection!! becaus background = %d <= thres (%d)\n",\r
+                                               pPsdScan->nPSDMaxValue/100, BT_8723B_1ANT_ANTDET_PSDTHRES_BACKGROUND+pPsdScan->nAntDet_ThresOffset));\r
+                                       state = 3;\r
+                               }\r
+                               break;\r
+                       case 3: \r
+                               BTResp = pBtCoexist->fBtcSetBtAntDetection(pBtCoexist, (u1Byte)(BTTxTime&0xff), (u1Byte)(BTLEChannel&0xff)); \r
+       \r
+                               for (pPsdScan->nPSDGenCount=1; pPsdScan->nPSDGenCount<=WLPSD_SweepCount; pPsdScan->nPSDGenCount++)\r
                {\r
                {\r
-                       memcpy(pPsdScan->nPSDReport_MaxHold, pPsdScan->nPSDReport, BT_8723B_1ANT_ANTDET_PSD_POINTS*sizeof(u4Byte));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), PSDGenCount = %d\n ",  pPsdScan->nPSDGenCount));\r
+                                       halbtc8723b1ant_PSD_SweepPoint(pBtCoexist, WLPSD_CentFreq, WLPSD_Offset, WLPSD_Span, BT_8723B_1ANT_ANTDET_PSD_POINTS, BT_8723B_1ANT_ANTDET_PSD_AVGNUM);                         \r
+                                       halbtc8723b1ant_PSD_MaxHoldData(pBtCoexist,  pPsdScan->nPSDGenCount);   \r
 \r
 \r
-                       for (i= pPsdScan->nPSDStartPoint; i<=pPsdScan->nPSDStopPoint; i++)\r
+                                       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
+                                       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
+\r
+                                       if (bScan ||bRoam)\r
                        {\r
                        {\r
-                               DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), Max_Hold i = %d, PSDReport = %d dB\n", i,  pPsdScan->nPSDReport_MaxHold[i]);\r
+                                               pBoardInfo->btdmAntDetFinish = FALSE;\r
+                                               pBoardInfo->btdmAntNumByAntDet = 1;\r
+                                               pPsdScan->nAntDet_Result = 8;\r
+                                               state = 99;     \r
+                                               break;\r
                        }\r
                }       \r
                        }\r
                }       \r
+\r
+                               pPsdScan->nAntDet_PSDScanPeakVal = pPsdScan->nPSDMaxValue;\r
+                               pPsdScan->nAntDet_PSDScanPeakFreq = pPsdScan->nPSDMaxValuePoint;\r
+                               state = 4;\r
+                               break;\r
+                       case 4:                         \r
+\r
+                               if (pPsdScan->nPSDPoint == 0)\r
+                                       nDeltaFreqPerPoint = 0;\r
                else\r
                else\r
+                                       nDeltaFreqPerPoint = pPsdScan->nPSDBandWidth/pPsdScan->nPSDPoint;               \r
+\r
+                               PsdRep1 = pPsdScan->nPSDMaxValue/100;\r
+                               PsdRep2 = pPsdScan->nPSDMaxValue - PsdRep1 * 100;\r
+                               \r
+                               freq = ((pPsdScan->nRealCentFreq-20) * 1000000 + pPsdScan->nPSDMaxValuePoint * nDeltaFreqPerPoint);\r
+                               freq1 = freq/1000000;\r
+                               freq2 = freq/1000 - freq1 * 1000;\r
+\r
+                               if (freq2 < 100)\r
                {\r
                {\r
-                       for (i= pPsdScan->nPSDStartPoint; i<=pPsdScan->nPSDStopPoint; i++)\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Max Value: Freq = %d.0%d MHz", freq1, freq2));\r
+                                       CL_SPRINTF(pPsdScan->nAntDet_PeakFreq, BT_8723B_1ANT_ANTDET_BUF_LEN, "%d.0%d", freq1,freq2);\r
+                               }\r
+                               else\r
                        {\r
                        {\r
-                               if (pPsdScan->nPSDReport[i] > pPsdScan->nPSDReport_MaxHold[i])\r
-                               pPsdScan->nPSDReport_MaxHold[i] = pPsdScan->nPSDReport[i];      \r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Max Value: Freq = %d.%d MHz",  freq1, freq2));\r
+                                       CL_SPRINTF(pPsdScan->nAntDet_PeakFreq, BT_8723B_1ANT_ANTDET_BUF_LEN, "%d.%d", freq1,freq2);\r
+                               }\r
 \r
 \r
-                               //search Max Value\r
-                               if (i ==pPsdScan->nPSDStartPoint )\r
+                               if (PsdRep2 < 10)       \r
                                {\r
                                {\r
-                                       i_max = i;\r
-                                       val_max = pPsdScan->nPSDReport_MaxHold[i];\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, (", Value = %d.0%d dB\n",   PsdRep1, PsdRep2));\r
+                                       CL_SPRINTF(pPsdScan->nAntDet_PeakVal, BT_8723B_1ANT_ANTDET_BUF_LEN, "%d.0%d", PsdRep1,PsdRep2);\r
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       if (pPsdScan->nPSDReport_MaxHold[i] > val_max)\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, (", Value = %d.%d dB\n",PsdRep1, PsdRep2));\r
+                                       CL_SPRINTF(pPsdScan->nAntDet_PeakVal, BT_8723B_1ANT_ANTDET_BUF_LEN, "%d.%d", PsdRep1,PsdRep2);\r
+                               }\r
+\r
+                               pPsdScan->nAntDet_IsBTReplyAvailable = TRUE;\r
+                               \r
+                               if (BTResp == FALSE)\r
+                               {\r
+                                       pPsdScan->nAntDet_IsBTReplyAvailable = FALSE;\r
+                                       pPsdScan->nAntDet_Result = 0;\r
+                                       pBoardInfo->btdmAntDetFinish = FALSE;\r
+                                       pBoardInfo->btdmAntNumByAntDet = 1;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), BT Response = Fail \n "));\r
+                               }\r
+                               else if (pPsdScan->nPSDMaxValue > (BT_8723B_1ANT_ANTDET_PSDTHRES_2ANT_BADISOLATION)*100)\r
+                               {\r
+                                       pPsdScan->nAntDet_Result = 1;\r
+                                       pBoardInfo->btdmAntDetFinish = TRUE;\r
+                                       pBoardInfo->btdmAntNumByAntDet = 2;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Detect Result = 2-Ant, Bad-Isolation!! \n"));\r
+                               }\r
+                               else if (pPsdScan->nPSDMaxValue > (BT_8723B_1ANT_ANTDET_PSDTHRES_2ANT_GOODISOLATION+pPsdScan->nAntDet_ThresOffset)*100)\r
                                        {\r
                                        {\r
-                                               i_max = i;\r
-                                               val_max = pPsdScan->nPSDReport_MaxHold[i];\r
+                                       pPsdScan->nAntDet_Result = 2;\r
+                                       pBoardInfo->btdmAntDetFinish = TRUE;\r
+                                       pBoardInfo->btdmAntNumByAntDet = 2;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Detect Result = 2-Ant, Good-Isolation!! \n"));\r
+                               }\r
+                               else if (pPsdScan->nPSDMaxValue > (BT_8723B_1ANT_ANTDET_PSDTHRES_1ANT)*100)\r
+                               {\r
+                                       pPsdScan->nAntDet_Result = 3;\r
+                                       pBoardInfo->btdmAntDetFinish = TRUE;\r
+                                       pBoardInfo->btdmAntNumByAntDet = 1;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Detect Result = 1-Ant!!\n"));\r
                                        }\r
                                        }\r
+                               else\r
+                               {\r
+                                       pPsdScan->nAntDet_Result = 4;\r
+                                       pBoardInfo->btdmAntDetFinish = FALSE;\r
+                                       pBoardInfo->btdmAntNumByAntDet = 1;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Detect Result = 1-Ant, un-certainity!!\n"));\r
                                }\r
 \r
                                }\r
 \r
-                               DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), Max_Hold i = %d, PSDReport = %d dB\n", i,  pPsdScan->nPSDReport_MaxHold[i]);\r
+                               state = 99;\r
+                               break;\r
+                       case 99:  //restore setup\r
+                       \r
+                               //Set AFH mask off at WiFi channel 2472MHz +/- 10MHz\r
+                               H2C_Parameter[0] = 0x0;\r
+                               H2C_Parameter[1] = 0x0;\r
+                               H2C_Parameter[2] = 0x0;\r
+       \r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Set AFH on, Cent-Ch= %d,  Mask=%d\n",\r
+                                       H2C_Parameter[1],H2C_Parameter[2]));            \r
+\r
+                               pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);\r
+                               \r
+                               //Set Antenna Path                                      \r
+                               halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Set Antenna to PTA\n!!"));\r
+\r
+                               //Resume Coex DM\r
+                               pBtCoexist->bStopCoexDm = FALSE;\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Resume Coex DM\n!!"));\r
+\r
+                               //stimulate coex running\r
+                               halbtc8723b1ant_RunCoexistMechanism(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Stimulate Coex running\n!!"));\r
 \r
 \r
+                               outloop = TRUE;\r
+                               break;\r
                        }\r
        \r
                        }\r
        \r
-                       pPsdScan->nPSDMaxValuePoint = i_max;\r
-                       pPsdScan->nPSDMaxValue = val_max;\r
+       }while(!outloop);\r
+       \r
+\r
 \r
 \r
-                       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), Max_Hold i_Max = %d, PSDReport_Max = %d dB, TotalCnt = %d\n", pPsdScan->nPSDMaxValuePoint\r
-                                       ,pPsdScan->nPSDMaxValue, pPsdScan->nPSDGenTotalCount);\r
                }\r
 \r
                }\r
 \r
-               if (pPsdScan->nPSDGenCount+1 <=  pPsdScan->realseconds)\r
+VOID\r
+halbtc8723b1ant_PSD_AntennaDetectionCheck(\r
+       IN      PBTC_COEXIST                    pBtCoexist\r
+       )\r
+{\r
+       static u4Byte AntDetCount = 0, AntDetFailCount = 0;\r
+       PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
+       \r
+       BOOLEAN bScan, bRoam;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);  \r
+\r
+\r
+       pPsdScan->nAntDet_BTTxTime = 20;  //0.42ms*50 = 20ms\r
+       pPsdScan->nAntDet_BTLEChannel = 39;             \r
+\r
+       AntDetCount++;\r
+       \r
+       pPsdScan->bAntDet_TryCount = AntDetCount;       \r
+                       \r
+       if (bScan ||bRoam)\r
                {\r
                {\r
-                       pPsdScan->nPSDGenCount++;\r
-                       pPsdScan->nPSDGenTotalCount++;\r
+               pBoardInfo->btdmAntDetFinish = FALSE;\r
+               pPsdScan->nAntDet_Result = 6;\r
+       }\r
+       else if(pBtCoexist->btInfo.bBtDisabled)\r
+       {\r
+               pBoardInfo->btdmAntDetFinish = FALSE;\r
+               pPsdScan->nAntDet_Result = 11;\r
+       }\r
+       else if (pCoexSta->nNumOfProfile >= 1) \r
+       {\r
+               pBoardInfo->btdmAntDetFinish = FALSE;\r
+               pPsdScan->nAntDet_Result = 7;\r
+       }\r
+       else if (!pPsdScan->nAntDet_IsAntDetAvailable)  //Antenna initial setup is not ready\r
+       {\r
+               pBoardInfo->btdmAntDetFinish = FALSE;\r
+               pPsdScan->nAntDet_Result = 9;\r
+       }\r
+       else if (pCoexSta->bC2hBtInquiryPage)\r
+               {\r
+               pBoardInfo->btdmAntDetFinish = FALSE;\r
+               pPsdScan->nAntDet_Result = 10;\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       break;\r
+               halbtc8723b1ant_PSD_AntennaDetection(pBtCoexist,  pPsdScan->nAntDet_BTTxTime, pPsdScan->nAntDet_BTLEChannel);                   \r
                }\r
 \r
                }\r
 \r
-       } while (1);\r
-       //Set Antenna Path      \r
-       halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
+       if (!pBoardInfo->btdmAntDetFinish)\r
+               AntDetFailCount++;\r
 \r
 \r
-       //Resume Coex DM\r
-       pBtCoexist->bStopCoexDm = FALSE;\r
+       pPsdScan->bAntDet_FailCount = AntDetFailCount;\r
 \r
 }\r
 \r
 \r
 }\r
 \r
@@ -3606,6 +4249,11 @@ EXhalbtc8723b1ant_PowerOnSetting(
        u1Byte u1Tmp=0x0;\r
        u2Byte u2Tmp=0x0;\r
 \r
        u1Byte u1Tmp=0x0;\r
        u2Byte u2Tmp=0x0;\r
 \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx Execute 8723b 1-Ant PowerOn Setting xxxxxxxxxxxxxxxx!!\n"));\r
+\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("Ant Det Finish = %s, Ant Det Number  = %d\n",  \r
+                (pBoardInfo->btdmAntDetFinish? "Yes":"No"), pBoardInfo->btdmAntNumByAntDet));\r
+\r
        pBtCoexist->bStopCoexDm = TRUE;\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x67, 0x20);\r
        pBtCoexist->bStopCoexDm = TRUE;\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x67, 0x20);\r
@@ -3686,7 +4334,7 @@ EXhalbtc8723b1ant_InitCoexDm(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
 \r
        pBtCoexist->bStopCoexDm = FALSE;\r
        \r
 \r
        pBtCoexist->bStopCoexDm = FALSE;\r
        \r
@@ -3711,12 +4359,6 @@ EXhalbtc8723b1ant_DisplayCoexInfo(
        u4Byte                          fwVer=0, btPatchVer=0;\r
        static u1Byte                   PopReportIn10s = 0;     \r
 \r
        u4Byte                          fwVer=0, btPatchVer=0;\r
        static u1Byte                   PopReportIn10s = 0;     \r
 \r
-       if (pPsdScan->bIsAntDetEnable == TRUE)\r
-       {\r
-               halbtc8723b1ant_ShowPSDData(pBtCoexist);\r
-               return;\r
-       }\r
-\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");\r
        CL_PRINTF(cliBuf);\r
 \r
@@ -3735,9 +4377,25 @@ EXhalbtc8723b1ant_DisplayCoexInfo(
                CL_PRINTF(cliBuf);\r
        }\r
 \r
                CL_PRINTF(cliBuf);\r
        }\r
 \r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d", "Ant PG Num/ Ant Mech/ Ant Pos:", \\r
+       if (pPsdScan->bAntDet_TryCount == 0)\r
+       {\r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d", "Ant PG Num/ Mech/ Pos",\r
                pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos);\r
        CL_PRINTF(cliBuf);      \r
                pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos);\r
        CL_PRINTF(cliBuf);      \r
+       }\r
+       else\r
+       {\r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d  (%d/%d/%d)", "Ant PG Num/ Mech(Ant_Det)/ Pos", \r
+               pBoardInfo->pgAntNum, pBoardInfo->btdmAntNumByAntDet, pBoardInfo->btdmAntPos, \r
+               pPsdScan->bAntDet_TryCount, pPsdScan->bAntDet_FailCount, pPsdScan->nAntDet_Result);             \r
+               CL_PRINTF(cliBuf);\r
+\r
+               if (pBoardInfo->btdmAntDetFinish)\r
+               {\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "Ant Det PSD Value",  pPsdScan->nAntDet_PeakVal);                \r
+                       CL_PRINTF(cliBuf);\r
+               }\r
+       }\r
        \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \\r
                ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);\r
        \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \\r
                ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);\r
@@ -3745,15 +4403,15 @@ EXhalbtc8723b1ant_DisplayCoexInfo(
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d_%x/ 0x%x/ 0x%x(%d)", "CoexVer/ FwVer/ PatchVer", \\r
-               GLCoexVerDate8723b1Ant, GLCoexVer8723b1Ant, fwVer, btPatchVer, btPatchVer);\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d_%x/ 0x%x/ 0x%x(%d)/ %c", "Version Coex/ Fw/ Patch/ Cut", \\r
+               GLCoexVerDate8723b1Ant, GLCoexVer8723b1Ant, fwVer, btPatchVer, btPatchVer, pCoexSta->nCutVersion+65);\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ", "Wifi channel informed to BT", \\r
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ", "Wifi channel informed to BT", \\r
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s/ %s/ %s", "Wifi bHi-Pri/ CCK lock/ CCK ever-lock", \\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s/ %s/ %s", "WifibHiPri/ Ccklock/ CckEverLock", \\r
                (pCoexSta->bWiFiIsHighPriTask? "Yes":"No"),\r
                (pCoexSta->bCCKLock? "Yes":"No"),\r
                (pCoexSta->bCCKEverLock? "Yes":"No"));\r
                (pCoexSta->bWiFiIsHighPriTask? "Yes":"No"),\r
                (pCoexSta->bCCKLock? "Yes":"No"),\r
                (pCoexSta->bCCKEverLock? "Yes":"No"));\r
@@ -3780,8 +4438,8 @@ EXhalbtc8723b1ant_DisplayCoexInfo(
                PopReportIn10s = 0;\r
        }\r
        \r
                PopReportIn10s = 0;\r
        }\r
        \r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d / %d", "SCO/HID/PAN/A2DP/Hi-Pri", \\r
-               pBtLinkInfo->bScoExist, pBtLinkInfo->bHidExist, pBtLinkInfo->bPanExist, pBtLinkInfo->bA2dpExist, pBtLinkInfo->bBtHiPriLinkExist);\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d / %d / %d", "SCO/HID/PAN/A2DP/NameReq/WHQL", \\r
+               pBtLinkInfo->bScoExist, pBtLinkInfo->bHidExist, pBtLinkInfo->bPanExist, pBtLinkInfo->bA2dpExist, pCoexSta->bC2hBtRemoteNameReq, pCoexSta->bBtWhckTest );\r
        CL_PRINTF(cliBuf);\r
 \r
        if (pStackInfo->bProfileNotified)\r
        CL_PRINTF(cliBuf);\r
 \r
        if (pStackInfo->bProfileNotified)\r
@@ -3796,8 +4454,8 @@ EXhalbtc8723b1ant_DisplayCoexInfo(
        }       \r
 \r
        btInfoExt = pCoexSta->btInfoExt;\r
        }       \r
 \r
        btInfoExt = pCoexSta->btInfoExt;\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "BT Info A2DP rate", \\r
-               (btInfoExt&BIT0)? "Basic rate":"EDR rate");\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s/ %d", "A2DP Rate/Bitpool", \\r
+               (btInfoExt&BIT0)? "BR":"EDR", pCoexSta->nA2DPBitPool);\r
        CL_PRINTF(cliBuf);      \r
 \r
        for(i=0; i<BT_INFO_SRC_8723B_1ANT_MAX; i++)\r
        CL_PRINTF(cliBuf);      \r
 \r
        for(i=0; i<BT_INFO_SRC_8723B_1ANT_MAX; i++)\r
@@ -3813,10 +4471,16 @@ EXhalbtc8723b1ant_DisplayCoexInfo(
                }\r
        }\r
 \r
                }\r
        }\r
 \r
-       if(!pBtCoexist->bManualControl)\r
+       \r
+       if(pBtCoexist->bManualControl)\r
+       {                       \r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism] (before Manual)============");                    \r
+       }\r
+       else\r
        {\r
        {\r
-               // Sw mechanism \r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");\r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");\r
+       }       \r
+\r
                CL_PRINTF(cliBuf);\r
        \r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "SM[LowPenaltyRA]", \\r
                CL_PRINTF(cliBuf);\r
        \r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "SM[LowPenaltyRA]", \\r
@@ -3832,14 +4496,33 @@ EXhalbtc8723b1ant_DisplayCoexInfo(
                CL_PRINTF(cliBuf);\r
 \r
                // Fw mechanism         \r
                CL_PRINTF(cliBuf);\r
 \r
                // Fw mechanism         \r
-               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");\r
+               if(pBtCoexist->bManualControl)\r
+               {\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism] (before Manual) ============");                   \r
+               }\r
+               else\r
+               {\r
+                       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");\r
+               }\r
+               \r
                CL_PRINTF(cliBuf);      \r
 \r
                psTdmaCase = pCoexDm->curPsTdma;\r
                CL_PRINTF(cliBuf);      \r
 \r
                psTdmaCase = pCoexDm->curPsTdma;\r
-               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x case-%d (auto:%d)", "PS TDMA", \\r
+               if (pBoardInfo->btdmAntNumByAntDet == 2)\r
+               {\r
+                       if (pCoexDm->bCurPsTdmaOn)\r
+                               psTdmaCase = psTdmaCase +100;  //for WiFi RSSI low or BT RSSI low\r
+                       else\r
+                               psTdmaCase = 1; //always translate to TDMA(off,1) for TDMA-off case\r
+               }\r
+               \r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x case-%d (%s,%s)", "PS TDMA", \\r
                        pCoexDm->psTdmaPara[0], pCoexDm->psTdmaPara[1],\r
                        pCoexDm->psTdmaPara[2], pCoexDm->psTdmaPara[3],\r
                        pCoexDm->psTdmaPara[0], pCoexDm->psTdmaPara[1],\r
                        pCoexDm->psTdmaPara[2], pCoexDm->psTdmaPara[3],\r
-                       pCoexDm->psTdmaPara[4], psTdmaCase, pCoexDm->bAutoTdmaAdjust);\r
+                       pCoexDm->psTdmaPara[4], psTdmaCase, \r
+                       (pCoexDm->bCurPsTdmaOn? "On":"Off"),\r
+                       (pCoexDm->bAutoTdmaAdjust? "Adj":"Fix") );\r
+               \r
                CL_PRINTF(cliBuf);\r
                \r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "Coex Table Type", \\r
                CL_PRINTF(cliBuf);\r
                \r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "Coex Table Type", \\r
@@ -3855,7 +4538,6 @@ EXhalbtc8723b1ant_DisplayCoexInfo(
                        pCoexDm->errorCondition);\r
                CL_PRINTF(cliBuf);\r
                */\r
                        pCoexDm->errorCondition);\r
                CL_PRINTF(cliBuf);\r
                */\r
-       }\r
 \r
        // Hw setting           \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Hw setting]============");\r
 \r
        // Hw setting           \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Hw setting]============");\r
@@ -3973,7 +4655,7 @@ EXhalbtc8723b1ant_IpsNotify(
 \r
        if(BTC_IPS_ENTER == type)\r
        {\r
 \r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                pCoexSta->bUnderIps = TRUE;\r
                \r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                pCoexSta->bUnderIps = TRUE;\r
                \r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
@@ -3983,7 +4665,7 @@ EXhalbtc8723b1ant_IpsNotify(
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
 \r
                halbtc8723b1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
                halbtc8723b1ant_InitCoexDm(pBtCoexist);\r
 \r
                halbtc8723b1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
                halbtc8723b1ant_InitCoexDm(pBtCoexist);\r
@@ -4004,12 +4686,12 @@ EXhalbtc8723b1ant_LpsNotify(
 \r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 \r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
@@ -4036,8 +4718,8 @@ EXhalbtc8723b1ant_ScanNotify(
        if(BTC_SCAN_START == type)\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = TRUE;\r
        if(BTC_SCAN_START == type)\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = TRUE;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
-\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
+               pPsdScan->nAntDet_IsAntDetAvailable = TRUE;\r
                halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
                halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
                u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);\r
                halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
                halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
                u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);\r
@@ -4045,13 +4727,13 @@ EXhalbtc8723b1ant_ScanNotify(
                u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67);\r
           \r
           \r
                u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67);\r
           \r
           \r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], 0x948=0x%x, 0x765=0x%x, 0x67=0x%x\n",\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 0x948=0x%x, 0x765=0x%x, 0x67=0x%x\n",\r
                        u4Tmp,  u1Tmpa, u1Tmpb));\r
        }\r
        else\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
                        u4Tmp,  u1Tmpa, u1Tmpb));\r
        }\r
        else\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &pCoexSta->nScanAPNum);              \r
        }\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &pCoexSta->nScanAPNum);              \r
        }\r
@@ -4087,7 +4769,7 @@ EXhalbtc8723b1ant_ScanNotify(
 \r
        if(BTC_SCAN_START == type)\r
        {       \r
 \r
        if(BTC_SCAN_START == type)\r
        {       \r
-               //BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8723b1ant_ActionWifiNotConnectedScan(pBtCoexist);\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8723b1ant_ActionWifiNotConnectedScan(pBtCoexist);\r
@@ -4099,7 +4781,7 @@ EXhalbtc8723b1ant_ScanNotify(
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               //BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8723b1ant_ActionWifiNotConnected(pBtCoexist);\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8723b1ant_ActionWifiNotConnected(pBtCoexist);\r
@@ -4131,15 +4813,16 @@ EXhalbtc8723b1ant_ConnectNotify(
        if(BTC_ASSOCIATE_START == type)\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = TRUE;\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = TRUE;\r
+                pPsdScan->nAntDet_IsAntDetAvailable = TRUE;\r
                halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
                halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
                halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
                halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));        \r
+                RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));   \r
                 pCoexDm->nArpCnt = 0;\r
        }\r
        else\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
                 pCoexDm->nArpCnt = 0;\r
        }\r
        else\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));       \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));   \r
                //pCoexDm->nArpCnt = 0;\r
        }\r
 \r
                //pCoexDm->nArpCnt = 0;\r
        }\r
 \r
@@ -4167,12 +4850,12 @@ EXhalbtc8723b1ant_ConnectNotify(
 \r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 \r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               //BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));              \r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));          \r
                halbtc8723b1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
                halbtc8723b1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               //BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
                \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                if(!bWifiConnected) // non-connected scan\r
                \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                if(!bWifiConnected) // non-connected scan\r
@@ -4204,9 +4887,10 @@ EXhalbtc8723b1ant_MediaStatusNotify(
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
                halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
                halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
                halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
                halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
+               pPsdScan->nAntDet_IsAntDetAvailable = TRUE;\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode);\r
 \r
                //Set CCK Tx/Rx high Pri except 11b mode\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode);\r
 \r
                //Set CCK Tx/Rx high Pri except 11b mode\r
@@ -4228,7 +4912,7 @@ EXhalbtc8723b1ant_MediaStatusNotify(
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
                pCoexDm->nArpCnt = 0;\r
 \r
                pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cd, 0x0); //CCK Tx\r
                pCoexDm->nArpCnt = 0;\r
 \r
                pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cd, 0x0); //CCK Tx\r
@@ -4256,7 +4940,7 @@ EXhalbtc8723b1ant_MediaStatusNotify(
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x66=0x%x\n", \r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);\r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);\r
@@ -4271,9 +4955,11 @@ EXhalbtc8723b1ant_SpecialPacketNotify(
        BOOLEAN bBtHsOn=FALSE;\r
        u4Byte  wifiLinkStatus=0;\r
        u4Byte  numOfWifiLink=0;\r
        BOOLEAN bBtHsOn=FALSE;\r
        u4Byte  wifiLinkStatus=0;\r
        u4Byte  numOfWifiLink=0;\r
-       BOOLEAN bBtCtrlAggBufSize=FALSE;\r
+       BOOLEAN bBtCtrlAggBufSize=FALSE, bUnder4way=FALSE;\r
        u1Byte  aggBufSize=5;\r
        \r
        u1Byte  aggBufSize=5;\r
        \r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
+\r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
                pBtCoexist->btInfo.bBtDisabled )\r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
                pBtCoexist->btInfo.bBtDisabled )\r
@@ -4285,12 +4971,12 @@ EXhalbtc8723b1ant_SpecialPacketNotify(
        {\r
                if (BTC_PACKET_ARP == type)\r
                {\r
        {\r
                if (BTC_PACKET_ARP == type)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], special Packet ARP notify\n"));            \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet ARP notify\n"));                \r
 \r
                        pCoexDm->nArpCnt++;\r
 \r
                        pCoexDm->nArpCnt++;\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], ARP Packet Count = %d\n", pCoexDm->nArpCnt));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ARP Packet Count = %d\n", pCoexDm->nArpCnt));\r
                        \r
                        \r
-                       if(pCoexDm->nArpCnt >= 10) // if APR PKT > 10 after connect, do not go to ActionWifiConnectedSpecialPacket(pBtCoexist) \r
+                       if((pCoexDm->nArpCnt >= 10) && (!bUnder4way)) // if APR PKT > 10 after connect, do not go to ActionWifiConnectedSpecialPacket(pBtCoexist) \r
                        {\r
                                pCoexSta->bWiFiIsHighPriTask = FALSE;                                   \r
                        }                       \r
                        {\r
                                pCoexSta->bWiFiIsHighPriTask = FALSE;                                   \r
                        }                       \r
@@ -4302,13 +4988,13 @@ EXhalbtc8723b1ant_SpecialPacketNotify(
                else\r
                {\r
                        pCoexSta->bWiFiIsHighPriTask = TRUE;\r
                else\r
                {\r
                        pCoexSta->bWiFiIsHighPriTask = TRUE;\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], special Packet DHCP or EAPOL notify\n"));          \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet DHCP or EAPOL notify\n"));              \r
                }\r
        } \r
        else\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = FALSE;\r
                }\r
        } \r
        else\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = FALSE;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], special Packet [Type = %d] notify\n", type));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet [Type = %d] notify\n", type));\r
        }\r
 \r
        pCoexSta->specialPktPeriodCnt = 0;\r
        }\r
 \r
        pCoexSta->specialPktPeriodCnt = 0;\r
@@ -4355,6 +5041,7 @@ EXhalbtc8723b1ant_BtInfoNotify(
        u1Byte                          i, rspSource=0;\r
        BOOLEAN                         bWifiConnected=FALSE;\r
        BOOLEAN                         bBtBusy=FALSE;\r
        u1Byte                          i, rspSource=0;\r
        BOOLEAN                         bWifiConnected=FALSE;\r
        BOOLEAN                         bBtBusy=FALSE;\r
+       PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        \r
        pCoexSta->bC2hBtInfoReqSent = FALSE;\r
 \r
        \r
        pCoexSta->bC2hBtInfoReqSent = FALSE;\r
 \r
@@ -4363,7 +5050,7 @@ EXhalbtc8723b1ant_BtInfoNotify(
                rspSource = BT_INFO_SRC_8723B_1ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
                rspSource = BT_INFO_SRC_8723B_1ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
@@ -4371,11 +5058,11 @@ EXhalbtc8723b1ant_BtInfoNotify(
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x]\n", tmpBuf[i]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x, ", tmpBuf[i]));\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
@@ -4394,9 +5081,9 @@ EXhalbtc8723b1ant_BtInfoNotify(
                        pCoexSta->popEventCnt++;\r
 \r
                if (pCoexSta->btInfoC2h[rspSource][2]&0x20)\r
                        pCoexSta->popEventCnt++;\r
 \r
                if (pCoexSta->btInfoC2h[rspSource][2]&0x20)\r
-                       pCoexSta->bC2hBtPage = TRUE;\r
+                       pCoexSta->bC2hBtRemoteNameReq = TRUE;\r
                else\r
                else\r
-                       pCoexSta->bC2hBtPage = FALSE;                   \r
+                       pCoexSta->bC2hBtRemoteNameReq = FALSE;                  \r
 \r
                pCoexSta->btRssi =\r
                        pCoexSta->btInfoC2h[rspSource][3]*2-90;\r
 \r
                pCoexSta->btRssi =\r
                        pCoexSta->btInfoC2h[rspSource][3]*2-90;\r
@@ -4405,20 +5092,55 @@ EXhalbtc8723b1ant_BtInfoNotify(
                pCoexSta->btInfoExt = \r
                        pCoexSta->btInfoC2h[rspSource][4];\r
                \r
                pCoexSta->btInfoExt = \r
                        pCoexSta->btInfoC2h[rspSource][4];\r
                \r
+               if (pCoexSta->btInfoC2h[rspSource][1] == 0x49)\r
+               {\r
+                       pCoexSta->nA2DPBitPool = \r
+                               pCoexSta->btInfoC2h[rspSource][6]; \r
+               }\r
+               else\r
+                       pCoexSta->nA2DPBitPool = 0;\r
+\r
                pCoexSta->bBtTxRxMask = (pCoexSta->btInfoC2h[rspSource][2]&0x40);\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TX_RX_MASK, &pCoexSta->bBtTxRxMask);\r
                pCoexSta->bBtTxRxMask = (pCoexSta->btInfoC2h[rspSource][2]&0x40);\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TX_RX_MASK, &pCoexSta->bBtTxRxMask);\r
-               if(!pCoexSta->bBtTxRxMask)\r
+\r
+#if BT_8723B_1ANT_ANTDET_ENABLE\r
+#if BT_8723B_1ANT_ANTDET_COEXMECHANISMSWITCH_ENABLE\r
+               if ((pBoardInfo->btdmAntDetFinish) && (pBoardInfo->btdmAntNumByAntDet == 2))\r
+               {\r
+                       if(pCoexSta->bBtTxRxMask)\r
+                       {\r
+                               /* BT into is responded by BT FW and BT RF REG 0x3C != 0x15 => Need to switch BT TRx Mask */                            \r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x1\n"));\r
+\r
+                               //BT TRx Mask un-lock 0x2c[0], 0x30[0] = 1\r
+                               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x2c, 0x7c45); \r
+                               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x30, 0x7c45); \r
+       \r
+                               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x1);\r
+                       }       \r
+               }\r
+               else    \r
+#endif                 \r
+#endif\r
+\r
                {\r
                {\r
-                       /* BT into is responded by BT FW and BT RF REG 0x3C != 0x15 => Need to switch BT TRx Mask */                            \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x15\n"));\r
-                       pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15);\r
+                       if(!pCoexSta->bBtTxRxMask)\r
+                       {\r
+                               /* BT into is responded by BT FW and BT RF REG 0x3C != 0x15 => Need to switch BT TRx Mask */                            \r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x15\n"));\r
+                               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15);\r
+\r
+                               //BT TRx Mask lock 0x2c[0], 0x30[0] = 0\r
+                               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x2c, 0x7c44); \r
+                               pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x30, 0x7c44);      \r
+                       }\r
                }\r
                \r
                // Here we need to resend some wifi info to BT\r
                // because bt is reset and loss of the info.\r
                if(pCoexSta->btInfoExt & BIT1)\r
                {                       \r
                }\r
                \r
                // Here we need to resend some wifi info to BT\r
                // because bt is reset and loss of the info.\r
                if(pCoexSta->btInfoExt & BIT1)\r
                {                       \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
@@ -4434,7 +5156,7 @@ EXhalbtc8723b1ant_BtInfoNotify(
                {\r
                        if(!pBtCoexist->bManualControl && !pBtCoexist->bStopCoexDm)\r
                        {\r
                {\r
                        if(!pBtCoexist->bManualControl && !pBtCoexist->bStopCoexDm)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
                                halbtc8723b1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                        }\r
                }\r
                                halbtc8723b1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                        }\r
                }\r
@@ -4460,6 +5182,8 @@ EXhalbtc8723b1ant_BtInfoNotify(
        else\r
                pCoexSta->bC2hBtInquiryPage = FALSE;\r
 \r
        else\r
                pCoexSta->bC2hBtInquiryPage = FALSE;\r
 \r
+       pCoexSta->nNumOfProfile = 0;\r
+\r
        // set link exist status\r
        if(!(btInfo&BT_INFO_8723B_1ANT_B_CONNECTION))\r
        {\r
        // set link exist status\r
        if(!(btInfo&BT_INFO_8723B_1ANT_B_CONNECTION))\r
        {\r
@@ -4475,32 +5199,60 @@ EXhalbtc8723b1ant_BtInfoNotify(
        {\r
                pCoexSta->bBtLinkExist = TRUE;\r
                if(btInfo & BT_INFO_8723B_1ANT_B_FTP)\r
        {\r
                pCoexSta->bBtLinkExist = TRUE;\r
                if(btInfo & BT_INFO_8723B_1ANT_B_FTP)\r
+               {\r
                        pCoexSta->bPanExist = TRUE;\r
                        pCoexSta->bPanExist = TRUE;\r
+                       pCoexSta->nNumOfProfile++;\r
+               }\r
                else\r
                        pCoexSta->bPanExist = FALSE;\r
                if(btInfo & BT_INFO_8723B_1ANT_B_A2DP)\r
                else\r
                        pCoexSta->bPanExist = FALSE;\r
                if(btInfo & BT_INFO_8723B_1ANT_B_A2DP)\r
+               {\r
                        pCoexSta->bA2dpExist = TRUE;\r
                        pCoexSta->bA2dpExist = TRUE;\r
+                       pCoexSta->nNumOfProfile++;\r
+               }\r
                else\r
                        pCoexSta->bA2dpExist = FALSE;\r
                if(btInfo & BT_INFO_8723B_1ANT_B_HID)\r
                else\r
                        pCoexSta->bA2dpExist = FALSE;\r
                if(btInfo & BT_INFO_8723B_1ANT_B_HID)\r
+               {\r
                        pCoexSta->bHidExist = TRUE;\r
                        pCoexSta->bHidExist = TRUE;\r
+                       pCoexSta->nNumOfProfile++;\r
+               }\r
                else\r
                        pCoexSta->bHidExist = FALSE;\r
                if(btInfo & BT_INFO_8723B_1ANT_B_SCO_ESCO)\r
                else\r
                        pCoexSta->bHidExist = FALSE;\r
                if(btInfo & BT_INFO_8723B_1ANT_B_SCO_ESCO)\r
+               {\r
                        pCoexSta->bScoExist = TRUE;\r
                        pCoexSta->bScoExist = TRUE;\r
+                       pCoexSta->nNumOfProfile++;\r
+               }\r
                else\r
                        pCoexSta->bScoExist = FALSE;\r
 \r
                else\r
                        pCoexSta->bScoExist = FALSE;\r
 \r
-               if ( (pCoexSta->bHidExist == FALSE) && (pCoexSta->bC2hBtInquiryPage == FALSE) )\r
+               if ((pCoexSta->bHidExist == FALSE) && (pCoexSta->bC2hBtInquiryPage == FALSE) &&( pCoexSta->bScoExist == FALSE))\r
                {\r
                        if (pCoexSta->highPriorityTx  + pCoexSta->highPriorityRx >= 160)                \r
                {\r
                        if (pCoexSta->highPriorityTx  + pCoexSta->highPriorityRx >= 160)                \r
+                       {\r
                                pCoexSta->bHidExist = TRUE;\r
                                pCoexSta->bHidExist = TRUE;\r
+                               pCoexSta->wrongProfileNotification++;\r
+                               pCoexSta->nNumOfProfile++;\r
+                               btInfo = btInfo | 0x28;\r
+                       }\r
                }\r
 \r
                //Add Hi-Pri Tx/Rx counter to avoid false detection\r
                }\r
 \r
                //Add Hi-Pri Tx/Rx counter to avoid false detection\r
-               if ( ( (pCoexSta->bHidExist) || (pCoexSta->bScoExist) ) && (pCoexSta->highPriorityTx > 60)  &&  (pCoexSta->highPriorityRx > 60)\r
-                         && (!pCoexSta->bC2hBtInquiryPage))\r
+               if (((pCoexSta->bHidExist) || (pCoexSta->bScoExist)) && (pCoexSta->highPriorityTx + pCoexSta->highPriorityRx >= 160)\r
+                        && (!pCoexSta->bC2hBtInquiryPage))\r
                        pCoexSta->bBtHiPriLinkExist = TRUE;\r
                        pCoexSta->bBtHiPriLinkExist = TRUE;\r
+                       \r
+               if((btInfo&BT_INFO_8723B_1ANT_B_ACL_BUSY) && (pCoexSta->nNumOfProfile == 0))\r
+               {\r
+                       if (pCoexSta->lowPriorityTx + pCoexSta->lowPriorityRx >= 160)\r
+                       {\r
+                               pCoexSta->bPanExist = TRUE;\r
+                               pCoexSta->nNumOfProfile++;\r
+                               pCoexSta->wrongProfileNotification++;\r
+                               btInfo = btInfo | 0x88;\r
+                       }\r
+               }\r
        }\r
 \r
        halbtc8723b1ant_UpdateBtLinkInfo(pBtCoexist);\r
        }\r
 \r
        halbtc8723b1ant_UpdateBtLinkInfo(pBtCoexist);\r
@@ -4510,30 +5262,30 @@ EXhalbtc8723b1ant_BtInfoNotify(
        if(!(btInfo&BT_INFO_8723B_1ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
        if(!(btInfo&BT_INFO_8723B_1ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
        }\r
        else if(btInfo == BT_INFO_8723B_1ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE;\r
        }\r
        else if(btInfo == BT_INFO_8723B_1ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
        }\r
        else if((btInfo&BT_INFO_8723B_1ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8723B_1ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_SCO_BUSY;\r
        }\r
        else if((btInfo&BT_INFO_8723B_1ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8723B_1ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_SCO_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
        }\r
        else if(btInfo&BT_INFO_8723B_1ANT_B_ACL_BUSY)\r
        {\r
                if(BT_8723B_1ANT_BT_STATUS_ACL_BUSY != pCoexDm->btStatus)\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_ACL_BUSY;\r
        }\r
        else if(btInfo&BT_INFO_8723B_1ANT_B_ACL_BUSY)\r
        {\r
                if(BT_8723B_1ANT_BT_STATUS_ACL_BUSY != pCoexDm->btStatus)\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_ACL_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_MAX;\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_MAX;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
        }\r
 \r
        if( (BT_8723B_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
        }\r
 \r
        if( (BT_8723B_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
@@ -4556,16 +5308,16 @@ EXhalbtc8723b1ant_RfStatusNotify(
        u4Byte  u4Tmp;\r
        u1Byte  u1Tmpa,u1Tmpb, u1Tmpc;\r
        \r
        u4Byte  u4Tmp;\r
        u1Byte  u1Tmpa,u1Tmpb, u1Tmpc;\r
        \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], RF Status notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RF Status notify\n"));\r
 \r
        if(BTC_RF_ON == type)\r
        {\r
 \r
        if(BTC_RF_ON == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], RF is turned ON!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RF is turned ON!!\n"));\r
                pBtCoexist->bStopCoexDm = FALSE;\r
        }\r
        else if(BTC_RF_OFF == type)\r
        {\r
                pBtCoexist->bStopCoexDm = FALSE;\r
        }\r
        else if(BTC_RF_OFF == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], RF is turned OFF!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RF is turned OFF!!\n"));\r
                \r
                halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
                \r
                halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
@@ -4581,7 +5333,7 @@ EXhalbtc8723b1ant_RfStatusNotify(
                u1Tmpc = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);\r
 \r
 \r
                u1Tmpc = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);\r
 \r
 \r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x67=0x%x, 0x76e=0x%x\n",\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x67=0x%x, 0x76e=0x%x\n",\r
                        u4Tmp,  u1Tmpa, u1Tmpb, u1Tmpc));\r
 \r
        }\r
                        u4Tmp,  u1Tmpa, u1Tmpb, u1Tmpc));\r
 \r
        }\r
@@ -4594,7 +5346,7 @@ EXhalbtc8723b1ant_HaltNotify(
 {\r
        u4Byte  u4Tmp;\r
        \r
 {\r
        u4Byte  u4Tmp;\r
        \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
        halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
        halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
 \r
        halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
        halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
@@ -4614,11 +5366,11 @@ EXhalbtc8723b1ant_PnpNotify(
        IN      u1Byte                          pnpState\r
        )\r
 {\r
        IN      u1Byte                          pnpState\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify\n"));\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to SLEEP\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to SLEEP\n"));\r
 \r
                halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
 \r
                halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
@@ -4630,7 +5382,7 @@ EXhalbtc8723b1ant_PnpNotify(
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
                pBtCoexist->bStopCoexDm = FALSE;\r
                halbtc8723b1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
                halbtc8723b1ant_InitCoexDm(pBtCoexist);\r
                pBtCoexist->bStopCoexDm = FALSE;\r
                halbtc8723b1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
                halbtc8723b1ant_InitCoexDm(pBtCoexist);\r
@@ -4643,7 +5395,7 @@ EXhalbtc8723b1ant_CoexDmReset(
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], *****************Coex DM Reset*****************\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], *****************Coex DM Reset*****************\n"));\r
 \r
        halbtc8723b1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
        //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
 \r
        halbtc8723b1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
        //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
@@ -4660,22 +5412,23 @@ EXhalbtc8723b1ant_Periodical(
        u4Byte                          fwVer=0, btPatchVer=0;\r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
        u4Byte                          fwVer=0, btPatchVer=0;\r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
+       PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ==========================Periodical===========================\n"));\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n",\r
                        GLCoexVerDate8723b1Ant, GLCoexVer8723b1Ant, fwVer, btPatchVer, btPatchVer));\r
                        GLCoexVerDate8723b1Ant, GLCoexVer8723b1Ant, fwVer, btPatchVer, btPatchVer));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
        }\r
 \r
 #if(BT_AUTO_REPORT_ONLY_8723B_1ANT == 0)\r
        }\r
 \r
 #if(BT_AUTO_REPORT_ONLY_8723B_1ANT == 0)\r
@@ -4684,16 +5437,25 @@ EXhalbtc8723b1ant_Periodical(
 #else\r
        halbtc8723b1ant_MonitorBtCtr(pBtCoexist);\r
        halbtc8723b1ant_MonitorWiFiCtr(pBtCoexist);\r
 #else\r
        halbtc8723b1ant_MonitorBtCtr(pBtCoexist);\r
        halbtc8723b1ant_MonitorWiFiCtr(pBtCoexist);\r
+#if BT_8723B_1ANT_ANTDET_ENABLE\r
+       halbtc8723b1ant_MonitorBtEnableDisable(pBtCoexist);\r
+#endif\r
+\r
+       if ( (pCoexSta->highPriorityTx  + pCoexSta->highPriorityRx < 50) && (pBtLinkInfo->bHidExist == TRUE))\r
+       {\r
+               pBtLinkInfo->bHidExist  = FALSE;\r
+       }\r
 \r
        if( halbtc8723b1ant_IsWifiStatusChanged(pBtCoexist) ||\r
                pCoexDm->bAutoTdmaAdjust )\r
        {\r
 \r
        if( halbtc8723b1ant_IsWifiStatusChanged(pBtCoexist) ||\r
                pCoexDm->bAutoTdmaAdjust )\r
        {\r
-\r
                halbtc8723b1ant_RunCoexistMechanism(pBtCoexist);        \r
        }\r
 \r
        pCoexSta->specialPktPeriodCnt++;\r
 \r
                halbtc8723b1ant_RunCoexistMechanism(pBtCoexist);        \r
        }\r
 \r
        pCoexSta->specialPktPeriodCnt++;\r
 \r
+       // sample to set bt to execute Ant detection\r
+       //pBtCoexist->fBtcSetBtAntDetection(pBtCoexist, 20, 14);\r
 /*\r
        if (pPsdScan->bIsAntDetEnable)\r
        {\r
 /*\r
        if (pPsdScan->bIsAntDetEnable)\r
        {\r
@@ -4717,70 +5479,111 @@ EXhalbtc8723b1ant_AntennaDetection(
        IN      u4Byte                                  seconds\r
        )\r
 {\r
        IN      u4Byte                                  seconds\r
        )\r
 {\r
-       pPsdScan->bIsAntDetEnable       = FALSE;\r
+       static u4Byte AntDetCount = 0, AntDetFailCount = 0;\r
+       PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;      \r
+       BOOLEAN bScan, bRoam;\r
+\r
+#if BT_8723B_1ANT_ANTDET_ENABLE        \r
 \r
 \r
-       //do antenna detection periodically (every 2 seconds)\r
-       if (centFreq == 0)\r
+       if (seconds == 0)\r
        {\r
        {\r
+               pPsdScan->bAntDet_TryCount      = 0;\r
+               pPsdScan->bAntDet_FailCount     = 0;\r
+               AntDetCount = 0;\r
+               AntDetFailCount = 0;\r
+               pBoardInfo->btdmAntDetFinish = FALSE;\r
+               pBoardInfo->btdmAntNumByAntDet = 1;\r
                return;\r
        }\r
                return;\r
        }\r
+\r
+       if (!pBoardInfo->btdmAntDetFinish)\r
+       {\r
+               pPsdScan->nAntDet_IntevalCount = pPsdScan->nAntDet_IntevalCount+2;\r
+\r
+               if (pPsdScan->nAntDet_IntevalCount >= BT_8723B_1ANT_ANTDET_RETRY_INTERVAL)\r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Antenna Det Timer is up, Try Detect!!\n"));\r
+                       halbtc8723b1ant_PSD_AntennaDetectionCheck(pBtCoexist);  \r
+                       \r
+                       if (pBoardInfo->btdmAntDetFinish)\r
+                       {\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Antenna Det Success!!\n"));\r
+#if 1\r
+                               if (pBoardInfo->btdmAntNumByAntDet == 2)\r
+                                       halbtc8723b1ant_MechanismSwitch(pBtCoexist, TRUE);\r
+                               else\r
+                                       halbtc8723b1ant_MechanismSwitch(pBtCoexist, FALSE);     \r
+#endif\r
+                       }\r
+                       else\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Antenna Det Fail!!\n"));\r
+                               \r
+                       pPsdScan->nAntDet_IntevalCount = 0;\r
+               }\r
        else\r
        {       \r
        else\r
        {       \r
-               //parse parameter\r
-               pPsdScan->realcentFreq = ((centFreq & 0xf000) >> 12) * 1000 + ((centFreq & 0xf00) >> 8) * 100 +\r
-                                        ((centFreq & 0xf0) >> 4) * 10 + (centFreq & 0xf);\r
-               DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), real freq = %d\n", pPsdScan->realcentFreq);\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("xxxxxxxxxxxxxxxx AntennaDetect(), Antenna Det Timer is not up! (%d)\n", pPsdScan->nAntDet_IntevalCount));\r
+               }\r
+                       \r
+       }\r
+#endif\r
                \r
                \r
                \r
                \r
-               pPsdScan->realoffset =( (offset & 0x70) >> 4) * 10 + (offset & 0xf);            \r
-               if (offset & 0x80)      \r
-                       pPsdScan->realoffset = 0 - pPsdScan->realoffset;                                        \r
-               DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), real offst = %d\n", pPsdScan->realoffset);\r
+/*\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);  \r
 \r
 \r
-               if (span & 0x80)\r
-                       pPsdScan->bIsPSDShowMaxOnly = TRUE;\r
-               else\r
-                       pPsdScan->bIsPSDShowMaxOnly = FALSE;            \r
-               pPsdScan->realspan = ((span & 0x70) >> 4) * 10 + (span & 0xf);\r
-               DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), real span = %d\n", pPsdScan->realspan);\r
+\r
+       pPsdScan->nAntDet_BTTxTime = seconds;  //0.42ms*50 = 20ms\r
+       pPsdScan->nAntDet_BTLEChannel = centFreq;               \r
                \r
                \r
-               if ( (pPsdScan->realcentFreq < 2412) || ( (pPsdScan->realcentFreq > 2472) && (pPsdScan->realcentFreq != 2484) ) )\r
+       if (seconds == 0)\r
                {\r
                {\r
-                        DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), center freq is not valid!!\n");    \r
+               pPsdScan->bAntDet_TryCount      = 0;\r
+               pPsdScan->bAntDet_FailCount     = 0;\r
+               AntDetCount = 0;\r
+               AntDetFailCount = 0;\r
+               pBoardInfo->btdmAntDetFinish = FALSE;\r
+               pBoardInfo->btdmAntNumByAntDet = 1;\r
                         return;\r
                         return;\r
+       }\r
+       else\r
+       {\r
+               AntDetCount++;\r
+       \r
+               pPsdScan->bAntDet_TryCount = AntDetCount;       \r
                                \r
                                \r
+               if (bScan ||bRoam)\r
+               {\r
+                       pBoardInfo->btdmAntDetFinish = FALSE;\r
+                       pPsdScan->nAntDet_Result = 6;\r
                }\r
                }\r
-               else if ( ( (pPsdScan->realcentFreq - 2412) % 5 != 0 ) && (pPsdScan->realcentFreq != 2484) \r
+               else if (pCoexSta->nNumOfProfile >= 1\r
                {\r
                {\r
-                       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), center freq is not valid!!\n");\r
-                        return;\r
+                       pBoardInfo->btdmAntDetFinish = FALSE;\r
+                       pPsdScan->nAntDet_Result = 7;\r
                }                       \r
                }                       \r
-\r
-               if ( (pPsdScan->realoffset > 20) || (pPsdScan->realoffset < -20) )\r
+               else if (!pPsdScan->nAntDet_IsAntDetAvailable)  //Antenna initial setup is not ready\r
                {\r
                {\r
-                       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), freq offset is not valid!!\n");\r
-                        return;                                \r
+                       pBoardInfo->btdmAntDetFinish = FALSE;\r
+                       pPsdScan->nAntDet_Result = 9;\r
                }                               \r
                }                               \r
-\r
-               if (pPsdScan->realspan > 40)  \r
+               else if (pCoexSta->bC2hBtInquiryPage)\r
                {\r
                {\r
-                       DbgPrint("xxxxxxxxxxxxxxxx SweepPSDPoint(), freq span is not valid!!\n");\r
-                       return;         \r
+                       pBoardInfo->btdmAntDetFinish = FALSE;\r
+                       pPsdScan->nAntDet_Result = 10;\r
                }       \r
                }       \r
-               \r
-               pPsdScan->realseconds =( (seconds & 0xf0) >> 4) * 10 + (seconds & 0xf);         \r
-               pPsdScan->nPSDGenCount = 0;\r
-               pPsdScan->nPSDGenTotalCount= 0;\r
+               else\r
+               {\r
+                       //halbtc8723b1ant_PSD_AntennaDetection(pBtCoexist,  pPsdScan->nAntDet_BTTxTime, pPsdScan->nAntDet_BTLEChannel);                 \r
        }\r
 \r
        }\r
 \r
+               if (!pBoardInfo->btdmAntDetFinish)\r
+                       AntDetFailCount++;\r
 \r
 \r
-       pPsdScan->bIsAntDetEnable       = TRUE;\r
-\r
-       \r
-       halbtc8723b1ant_AntennaDetection(pBtCoexist, pPsdScan->realcentFreq,   pPsdScan->realoffset, pPsdScan->realspan,  pPsdScan->realseconds);                       \r
-\r
-       \r
-\r
+               pPsdScan->bAntDet_FailCount = AntDetFailCount;\r
+       }\r
+*/\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -4810,10 +5613,22 @@ EXhalbtc8723b1ant_PSDScan(
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-EXhalbtc8723b1ant_DisplayAntIsolation(\r
+EXhalbtc8723b1ant_DisplayAntDetection(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
+       PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
+\r
+#if BT_8723B_1ANT_ANTDET_ENABLE\r
+       if (pPsdScan->bAntDet_TryCount != 0)\r
+       {\r
+               halbtc8723b1ant_PSD_ShowAntennaDetectResult(pBtCoexist);\r
+\r
+               if (pBoardInfo->btdmAntDetFinish)\r
+                       halbtc8723b1ant_PSD_ShowData(pBtCoexist);\r
+               return;\r
+       }\r
+#endif\r
        \r
        //halbtc8723b1ant_ShowPSDData(pBtCoexist);\r
 }\r
        \r
        //halbtc8723b1ant_ShowPSDData(pBtCoexist);\r
 }\r
index 248874d55f56ee49cf8612f7567b9978cc3f591a..8e70ac6636c2287aadff0a900a61b93901098fb9 100755 (executable)
 \r
 #define        BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT             2\r
 \r
 \r
 #define        BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT             2\r
 \r
-#define  BT_8723B_1ANT_WIFI_NOISY_THRESH                                                               30   //max: 255\r
+#define  BT_8723B_1ANT_WIFI_NOISY_THRESH                                                               50 //30   //max: 255                                                            \r
+\r
+//for Antenna detection\r
+#define        BT_8723B_1ANT_ANTDET_PSDTHRES_BACKGROUND                                        50\r
+#define        BT_8723B_1ANT_ANTDET_PSDTHRES_2ANT_BADISOLATION                         70\r
+#define        BT_8723B_1ANT_ANTDET_PSDTHRES_2ANT_GOODISOLATION                        55\r
+#define        BT_8723B_1ANT_ANTDET_PSDTHRES_1ANT                                                      35\r
+#define        BT_8723B_1ANT_ANTDET_RETRY_INTERVAL                                                     10      //retry timer if ant det is fail, unit: second\r
+#define        BT_8723B_1ANT_ANTDET_ENABLE                                                                     0\r
+#define        BT_8723B_1ANT_ANTDET_COEXMECHANISMSWITCH_ENABLE                         0\r
 \r
 typedef enum _BT_INFO_SRC_8723B_1ANT{\r
        BT_INFO_SRC_8723B_1ANT_WIFI_FW                  = 0x0,\r
 \r
 typedef enum _BT_INFO_SRC_8723B_1ANT{\r
        BT_INFO_SRC_8723B_1ANT_WIFI_FW                  = 0x0,\r
@@ -126,6 +135,7 @@ typedef struct _COEX_STA_8723B_1ANT{
        BOOLEAN                                 bHidExist;\r
        BOOLEAN                                 bPanExist;\r
        BOOLEAN                                 bBtHiPriLinkExist;\r
        BOOLEAN                                 bHidExist;\r
        BOOLEAN                                 bPanExist;\r
        BOOLEAN                                 bBtHiPriLinkExist;\r
+       u1Byte                                  nNumOfProfile;\r
 \r
        BOOLEAN                                 bUnderLps;\r
        BOOLEAN                                 bUnderIps;\r
 \r
        BOOLEAN                                 bUnderLps;\r
        BOOLEAN                                 bUnderIps;\r
@@ -143,7 +153,7 @@ typedef struct _COEX_STA_8723B_1ANT{
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8723B_1ANT_MAX];\r
        BOOLEAN                                 bBtWhckTest;\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8723B_1ANT_MAX];\r
        BOOLEAN                                 bBtWhckTest;\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
-       BOOLEAN                                 bC2hBtPage;                             //Add for win8.1 page out issue\r
+       BOOLEAN                                 bC2hBtRemoteNameReq;                            \r
        BOOLEAN                                 bWiFiIsHighPriTask;             //Add for win8.1 page out issue\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
        BOOLEAN                                 bWiFiIsHighPriTask;             //Add for win8.1 page out issue\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
@@ -166,24 +176,38 @@ typedef struct _COEX_STA_8723B_1ANT{
        u1Byte                                  nCoexTableType;\r
 \r
        BOOLEAN                                 bForceLpsOn;\r
        u1Byte                                  nCoexTableType;\r
 \r
        BOOLEAN                                 bForceLpsOn;\r
+       u4Byte                                  wrongProfileNotification;\r
+\r
+       u1Byte                                  nA2DPBitPool;\r
+       u1Byte                                  nCutVersion;\r
 }COEX_STA_8723B_1ANT, *PCOEX_STA_8723B_1ANT;\r
 \r
 #define  BT_8723B_1ANT_ANTDET_PSD_POINTS                       256     //MAX:1024\r
 }COEX_STA_8723B_1ANT, *PCOEX_STA_8723B_1ANT;\r
 \r
 #define  BT_8723B_1ANT_ANTDET_PSD_POINTS                       256     //MAX:1024\r
-#define  BT_8723B_1ANT_ANTDET_PSD_AVGNUM               1       //MAX:3\r
+#define  BT_8723B_1ANT_ANTDET_PSD_AVGNUM                       1       //MAX:3\r
+#define        BT_8723B_1ANT_ANTDET_BUF_LEN                            16\r
 \r
 typedef struct _PSDSCAN_STA_8723B_1ANT{\r
 \r
 \r
 typedef struct _PSDSCAN_STA_8723B_1ANT{\r
 \r
-BOOLEAN                        bIsAntDetEnable;\r
-BOOLEAN                        bIsAntIsoEnable;\r
-BOOLEAN                        bIsPSDScanEnable;\r
+u4Byte                 nAntDet_BTLEChannel;  //BT LE Channel ex:2412\r
+u4Byte                 nAntDet_BTTxTime;\r
+u4Byte                 nAntDet_PrePSDScanPeakVal;\r
+BOOLEAN                        nAntDet_IsAntDetAvailable;\r
+u4Byte                 nAntDet_PSDScanPeakVal;\r
+BOOLEAN                        nAntDet_IsBTReplyAvailable;\r
+u4Byte                 nAntDet_PSDScanPeakFreq;\r
+\r
+u1Byte                 nAntDet_Result;\r
+u1Byte                 nAntDet_PeakVal[BT_8723B_1ANT_ANTDET_BUF_LEN];\r
+u1Byte                 nAntDet_PeakFreq[BT_8723B_1ANT_ANTDET_BUF_LEN];\r
+u4Byte                 bAntDet_TryCount;\r
+u4Byte                 bAntDet_FailCount;\r
+u4Byte                 nAntDet_IntevalCount;\r
+u4Byte                 nAntDet_ThresOffset;\r
 \r
 \r
-u4Byte                 realcentFreq;  //ex:2412\r
-s4Byte                 realoffset;\r
-u4Byte                 realspan;\r
-u4Byte                 realseconds;\r
+u4Byte                 nRealCentFreq;\r
+s4Byte                 nRealOffset;\r
+u4Byte                 nRealSpan;\r
        \r
        \r
-BOOLEAN                        bAntDetFinish;\r
-u1Byte                 nAntIsolation;\r
 u4Byte                 nPSDBandWidth;  //unit: Hz\r
 u4Byte                 nPSDPoint;              //128/256/512/1024\r
 u4Byte                 nPSDReport[1024];  //unit:dB (20logx), 0~255\r
 u4Byte                 nPSDBandWidth;  //unit: Hz\r
 u4Byte                 nPSDPoint;              //128/256/512/1024\r
 u4Byte                 nPSDReport[1024];  //unit:dB (20logx), 0~255\r
@@ -195,8 +219,6 @@ u4Byte                      nPSDMaxValue;
 u4Byte                 nPSDStartBase;\r
 u4Byte                 nPSDAvgNum;     // 1/8/16/32\r
 u4Byte                 nPSDGenCount;\r
 u4Byte                 nPSDStartBase;\r
 u4Byte                 nPSDAvgNum;     // 1/8/16/32\r
 u4Byte                 nPSDGenCount;\r
-u4Byte                 nPSDGenTotalCount;      \r
-BOOLEAN                        bIsSetupFinish;\r
 BOOLEAN                        bIsPSDRunning;\r
 BOOLEAN                        bIsPSDShowMaxOnly;\r
 } PSDSCAN_STA_8723B_1ANT, *PPSDSCAN_STA_8723B_1ANT;\r
 BOOLEAN                        bIsPSDRunning;\r
 BOOLEAN                        bIsPSDShowMaxOnly;\r
 } PSDSCAN_STA_8723B_1ANT, *PPSDSCAN_STA_8723B_1ANT;\r
@@ -309,7 +331,7 @@ EXhalbtc8723b1ant_PSDScan(
        IN      u4Byte                                  seconds\r
        );\r
 VOID\r
        IN      u4Byte                                  seconds\r
        );\r
 VOID\r
-EXhalbtc8723b1ant_DisplayAntIsolation(\r
+EXhalbtc8723b1ant_DisplayAntDetection(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        );\r
 \r
        IN      PBTC_COEXIST                    pBtCoexist\r
        );\r
 \r
index c0ced8e21a89313331c1e14d91b6923f63099d0e..6273bcc75fa0b97903736760f65dfa8fe9e755d1 100755 (executable)
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtc8723b2Ant.tmh"\r
+#endif\r
+\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
@@ -27,8 +32,8 @@ const char *const GLBtInfoSrc8723b2Ant[]={
        "BT Info[bt auto report]",\r
 };\r
 \r
        "BT Info[bt auto report]",\r
 };\r
 \r
-u4Byte GLCoexVerDate8723b2Ant=20140903;\r
-u4Byte GLCoexVer8723b2Ant=0x43;\r
+u4Byte GLCoexVerDate8723b2Ant=20150119;\r
+u4Byte GLCoexVer8723b2Ant=0x44;\r
 \r
 //============================================================\r
 // local function proto type if needed\r
 \r
 //============================================================\r
 // local function proto type if needed\r
@@ -56,12 +61,10 @@ halbtc8723b2ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -69,12 +72,10 @@ halbtc8723b2ant_BtRssiState(
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -82,7 +83,7 @@ halbtc8723b2ant_BtRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Rssi thresh error!!\n"));\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
@@ -92,12 +93,10 @@ halbtc8723b2ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -106,17 +105,14 @@ halbtc8723b2ant_BtRssiState(
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -124,12 +120,10 @@ halbtc8723b2ant_BtRssiState(
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -161,12 +155,10 @@ halbtc8723b2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -174,12 +166,10 @@ halbtc8723b2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -187,7 +177,7 @@ halbtc8723b2ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -197,12 +187,10 @@ halbtc8723b2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -211,17 +199,14 @@ halbtc8723b2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -229,12 +214,10 @@ halbtc8723b2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -273,36 +256,32 @@ halbtc8723b2ant_MonitorBtEnableDisable(
        {\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
        {\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
-               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
-                               btDisableCnt));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt all counters=0, %d times!!\n",  btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
-                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
-                       (bPreBtDisabled ? "disabled":"enabled"), \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n",  (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                        (bBtDisabled ? "disabled":"enabled")));\r
+\r
                bPreBtDisabled = bBtDisabled;\r
                bPreBtDisabled = bBtDisabled;\r
-               if(!bBtDisabled)\r
-               {\r
-               }\r
-               else\r
+               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
+               if(bBtDisabled)\r
                {\r
                {\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);\r
                }\r
        }\r
 }\r
 \r
                }\r
        }\r
 }\r
 \r
+\r
 VOID\r
 halbtc8723b2ant_LimitedRx(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8723b2ant_LimitedRx(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -355,6 +334,9 @@ halbtc8723b2ant_MonitorBtCtr(
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
+       if( (pCoexSta->lowPriorityTx > 1050)  && (!pCoexSta->bC2hBtInquiryPage))\r
+               pCoexSta->popEventCnt++;\r
+\r
        if ( (pCoexSta->lowPriorityRx >= 950)  &&  (pCoexSta->lowPriorityRx >= pCoexSta->lowPriorityTx) && (!pCoexSta->bUnderIps) )\r
        {\r
                pBtLinkInfo->bSlaveRole = TRUE;\r
        if ( (pCoexSta->lowPriorityRx >= 950)  &&  (pCoexSta->lowPriorityRx >= pCoexSta->lowPriorityTx) && (!pCoexSta->bUnderIps) )\r
        {\r
                pBtLinkInfo->bSlaveRole = TRUE;\r
@@ -364,9 +346,9 @@ halbtc8723b2ant_MonitorBtCtr(
                pBtLinkInfo->bSlaveRole = FALSE;\r
        }\r
 \r
                pBtLinkInfo->bSlaveRole = FALSE;\r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
@@ -426,7 +408,7 @@ halbtc8723b2ant_QueryBtInfo(
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
@@ -568,7 +550,7 @@ halbtc8723b2ant_ActionAlgorithm(
                \r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
                \r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No BT link exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No BT link exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
@@ -585,31 +567,31 @@ halbtc8723b2ant_ActionAlgorithm(
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO only\n"));\r
                        algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                        algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID only\n"));\r
                                algorithm = BT_8723B_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8723B_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP only\n"));\r
                                algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(HS) only\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(EDR) only\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
@@ -621,24 +603,24 @@ halbtc8723b2ant_ActionAlgorithm(
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID\n"));\r
                                algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
                                algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(EDR)\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -651,13 +633,13 @@ halbtc8723b2ant_ActionAlgorithm(
 #if 0\r
                                if(pStackInfo->numOfHid >= 2)\r
                                {\r
 #if 0\r
                                if(pStackInfo->numOfHid >= 2)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID*2 + A2DP\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID*2 + A2DP\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                                else\r
 #endif\r
                                {                       \r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                                else\r
 #endif\r
                                {                       \r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                        }\r
@@ -666,12 +648,12 @@ halbtc8723b2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_HID;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_HID;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -680,12 +662,12 @@ halbtc8723b2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
@@ -698,7 +680,7 @@ halbtc8723b2ant_ActionAlgorithm(
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
                                algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
                                algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
@@ -706,12 +688,12 @@ halbtc8723b2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -720,12 +702,12 @@ halbtc8723b2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -738,12 +720,12 @@ halbtc8723b2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
@@ -759,12 +741,12 @@ halbtc8723b2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
 \r
                                }\r
                                else\r
                                {\r
 \r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -786,8 +768,8 @@ halbtc8723b2ant_SetFwDacSwingLevel(
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
 }\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
 }\r
@@ -802,7 +784,7 @@ halbtc8723b2ant_SetFwDecBtPwr(
        \r
        H2C_Parameter[0] = decBtPwrLvl;\r
 \r
        \r
        H2C_Parameter[0] = decBtPwrLvl;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power level = %d, FW write 0x62=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], decrease Bt Power level = %d, FW write 0x62=0x%x\n", \r
                decBtPwrLvl, H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);    \r
                decBtPwrLvl, H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);    \r
@@ -815,15 +797,12 @@ halbtc8723b2ant_DecBtPwr(
        IN      u1Byte                          decBtPwrLvl\r
        )\r
 {\r
        IN      u1Byte                          decBtPwrLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power level = %d\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s Dec BT power level = %d\n",  \r
                (bForceExec? "force to":""), decBtPwrLvl));\r
        pCoexDm->curBtDecPwrLvl = decBtPwrLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), decBtPwrLvl));\r
        pCoexDm->curBtDecPwrLvl = decBtPwrLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preBtDecPwrLvl=%d, curBtDecPwrLvl=%d\n", \r
-                       pCoexDm->preBtDecPwrLvl, pCoexDm->curBtDecPwrLvl));\r
-\r
                if(pCoexDm->preBtDecPwrLvl == pCoexDm->curBtDecPwrLvl) \r
                        return;\r
        }\r
                if(pCoexDm->preBtDecPwrLvl == pCoexDm->curBtDecPwrLvl) \r
                        return;\r
        }\r
@@ -847,7 +826,7 @@ halbtc8723b2ant_SetBtAutoReport(
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
@@ -860,15 +839,12 @@ halbtc8723b2ant_BtAutoReport(
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s BT Auto report = %s\n",  \r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
-                       pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
-\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
@@ -884,15 +860,12 @@ halbtc8723b2ant_FwDacSwingLvl(
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n", \r
-                       pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
-\r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
                        return;\r
        }\r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
                        return;\r
        }\r
@@ -911,7 +884,7 @@ halbtc8723b2ant_SetSwRfRxLpfCorner(
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
        }\r
        else\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
        }\r
        else\r
@@ -920,7 +893,7 @@ halbtc8723b2ant_SetSwRfRxLpfCorner(
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
@@ -933,15 +906,12 @@ halbtc8723b2ant_RfShrink(
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
-                       pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
-\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
@@ -969,7 +939,7 @@ halbtc8723b2ant_SetSwPenaltyTxRateAdaptive(
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
                (bLowPenaltyRa? "ON!!":"OFF!!")) );\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
                (bLowPenaltyRa? "ON!!":"OFF!!")) );\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
@@ -983,15 +953,12 @@ halbtc8723b2ant_LowPenaltyRa(
        )\r
 {\r
        //return;\r
        )\r
 {\r
        //return;\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
-                       pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
-\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
@@ -1008,7 +975,7 @@ halbtc8723b2ant_SetDacSwingReg(
 {\r
        u1Byte  val=(u1Byte)level;\r
 \r
 {\r
        u1Byte  val=(u1Byte)level;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x883, 0x3e, val);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x883, 0x3e, val);\r
 }\r
 \r
@@ -1038,17 +1005,13 @@ halbtc8723b2ant_DacSwing(
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
-                       pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
-                       pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
-\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
@@ -1068,12 +1031,12 @@ halbtc8723b2ant_SetAdcBackOff(
 {\r
        if(bAdcBackOff)\r
        {\r
 {\r
        if(bAdcBackOff)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level On!\n"));\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x3);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x3);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level Off!\n"));\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x1);\r
        }\r
 }\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x1);\r
        }\r
 }\r
@@ -1085,15 +1048,12 @@ halbtc8723b2ant_AdcBackOff(
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
-                       pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
-\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
@@ -1113,7 +1073,7 @@ halbtc8723b2ant_SetAgcTable(
        //=================BB AGC Gain Table\r
        if(bAgcTableEn)\r
        {\r
        //=================BB AGC Gain Table\r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB Agc Table On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB Agc Table On!\n"));\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6e1A0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6d1B0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6c1C0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6e1A0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6d1B0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6c1C0001);\r
@@ -1124,7 +1084,7 @@ halbtc8723b2ant_SetAgcTable(
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB Agc Table Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB Agc Table Off!\n"));\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xaa1A0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa91B0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa81C0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xaa1A0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa91B0001);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa81C0001);\r
@@ -1139,13 +1099,13 @@ halbtc8723b2ant_SetAgcTable(
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
        if(bAgcTableEn)\r
        {\r
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table On!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38fff);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38ffe);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38fff);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38ffe);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table Off!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x380c3);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x28ce6);\r
        }\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x380c3);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x28ce6);\r
        }\r
@@ -1154,13 +1114,13 @@ halbtc8723b2ant_SetAgcTable(
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x1);\r
        if(bAgcTableEn)\r
        {\r
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x1);\r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table On!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38fff);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38ffe);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38fff);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38ffe);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table Off!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x380c3);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x28ce6);\r
        }\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x380c3);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x28ce6);\r
        }\r
@@ -1181,15 +1141,12 @@ halbtc8723b2ant_AgcTable(
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s %s Agc Table\n",  \r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
-                       pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
-\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
@@ -1207,16 +1164,16 @@ halbtc8723b2ant_SetCoexTable(
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -1230,7 +1187,7 @@ halbtc8723b2ant_CoexTable(
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
@@ -1239,11 +1196,6 @@ halbtc8723b2ant_CoexTable(
 \r
        if(!bForceExec)\r
        {\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
-       \r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
@@ -1335,7 +1287,7 @@ halbtc8723b2ant_SetFwIgnoreWlanAct(
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
@@ -1365,22 +1317,16 @@ halbtc8723b2ant_LpsRpwm(
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], LPS-RxBeaconMode=0x%x , LPS-RPWM=0x%x!!\n", \r
-                        pCoexDm->curLps, pCoexDm->curRpwm));\r
-\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], LPS-RPWM_Last=0x%x , LPS-RPWM_Now=0x%x!!\n", \r
-                                pCoexDm->preRpwm, pCoexDm->curRpwm));\r
-\r
                        return;\r
                }\r
        }\r
                        return;\r
                }\r
        }\r
@@ -1397,15 +1343,12 @@ halbtc8723b2ant_IgnoreWlanAct(
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
-                       pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
-\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
@@ -1444,7 +1387,7 @@ halbtc8723b2ant_SetFwPstdma(
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = byte5;\r
        \r
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = byte5;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n", \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
@@ -1630,96 +1573,130 @@ halbtc8723b2ant_PsTdma(
        BOOLEAN                 bTurnOnByCnt=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0;\r
        u1Byte                  wifiRssiState1, btRssiState;\r
        BOOLEAN                 bTurnOnByCnt=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0;\r
        u1Byte                  wifiRssiState1, btRssiState;\r
+       s1Byte                  nWiFiDurationAdjust = 0x0;\r
+       u1Byte                  psTdmaByte4Modify = 0x0;\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
 \r
        \r
        wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);\r
        btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
 \r
 \r
        \r
        wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);\r
        btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
 \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
+               (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
+       pCoexDm->bCurPsTdmaOn = bTurnOn;\r
+       pCoexDm->curPsTdma = type;\r
+\r
        if (!(BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState)) && bTurnOn)\r
        {\r
                type = type +100;  //for WiFi RSSI low or BT RSSI low\r
        if (!(BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState)) && bTurnOn)\r
        {\r
                type = type +100;  //for WiFi RSSI low or BT RSSI low\r
+               pCoexDm->bIsSwitchTo1dot5Ant = TRUE;\r
+       }\r
+       else\r
+       {\r
+               pCoexDm->bIsSwitchTo1dot5Ant = FALSE;\r
        }\r
 \r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
-               (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
-       pCoexDm->bCurPsTdmaOn = bTurnOn;\r
-       pCoexDm->curPsTdma = type;\r
 \r
        if(!bForceExec)\r
        {\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
-                       pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
-                       pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
-\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
        }       \r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
        }       \r
+\r
+       if (pCoexSta->nScanAPNum <= 5)\r
+       {               \r
+               if (pCoexSta->nA2DPBitPool >= 45)\r
+                 nWiFiDurationAdjust = -15;\r
+               else if (pCoexSta->nA2DPBitPool >= 35)\r
+                 nWiFiDurationAdjust = -10;    \r
+               else\r
+                 nWiFiDurationAdjust = 5;              \r
+       }\r
+       else  if  (pCoexSta->nScanAPNum <= 20)\r
+       {                       \r
+               if (pCoexSta->nA2DPBitPool >= 45)\r
+                 nWiFiDurationAdjust = -15;\r
+               else if (pCoexSta->nA2DPBitPool >= 35)\r
+                 nWiFiDurationAdjust = -10;\r
+               else\r
+                nWiFiDurationAdjust = 0;               \r
+       }\r
+       else if  (pCoexSta->nScanAPNum <= 40)\r
+       {\r
+               if (pCoexSta->nA2DPBitPool >= 45)\r
+                 nWiFiDurationAdjust = -15;\r
+               else if (pCoexSta->nA2DPBitPool >= 35)\r
+                 nWiFiDurationAdjust = -10;    \r
+               else\r
+                 nWiFiDurationAdjust = -5;     \r
+       }\r
+       else\r
+       {\r
+               if (pCoexSta->nA2DPBitPool >= 45)\r
+                 nWiFiDurationAdjust = -15;\r
+               else if (pCoexSta->nA2DPBitPool >= 35)\r
+                 nWiFiDurationAdjust = -10;    \r
+               else\r
+                 nWiFiDurationAdjust = -10;    \r
+       }\r
+\r
+       if ( (pBtLinkInfo->bSlaveRole == TRUE)  && (pBtLinkInfo->bA2dpExist) )\r
+               psTdmaByte4Modify = 0x1;  //0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts)\r
+               \r
+       \r
        if(bTurnOn)\r
        {\r
                switch(type)\r
                {\r
                        case 1:\r
                        default:\r
        if(bTurnOn)\r
        {\r
                switch(type)\r
                {\r
                        case 1:\r
                        default:\r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c+nWiFiDurationAdjust, 0x03, 0xf1, 0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 2:\r
                                break;\r
                        case 2:\r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x03, 0xf1, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d+nWiFiDurationAdjust, 0x03, 0xf1,  0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 3:\r
                                break;\r
                        case 3:\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1,  0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 4:\r
                                break;\r
                        case 4:\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xf1, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xf1,  0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 5:\r
                                break;\r
                        case 5:\r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x3, 0x70, 0x90);                           \r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c+nWiFiDurationAdjust, 0x3, 0x70,  0x90|psTdmaByte4Modify);                            \r
                                break;\r
                        case 6:\r
                                break;\r
                        case 6:\r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x3, 0x70, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d+nWiFiDurationAdjust, 0x3, 0x70,  0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 7:\r
                                break;\r
                        case 7:\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70,  0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 8: \r
                                break;\r
                        case 8: \r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70,  0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 9: \r
                                break;\r
                        case 9: \r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c+nWiFiDurationAdjust, 0x03, 0xf1,  0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 10:        \r
                                break;\r
                        case 10:        \r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x03, 0xf1, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d+nWiFiDurationAdjust, 0x03, 0xf1,  0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 11:        \r
                                break;\r
                        case 11:        \r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0xe1, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1,  0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 12:\r
                                break;\r
                        case 12:\r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0xf1, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0xf1,  0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 13:\r
                                break;\r
                        case 13:\r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x3, 0x70, 0x90);           \r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c+nWiFiDurationAdjust, 0x3, 0x70,  0x90|psTdmaByte4Modify);            \r
                                break;\r
                        case 14:\r
                                break;\r
                        case 14:\r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x3, 0x70, 0x90);           \r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d+nWiFiDurationAdjust, 0x3, 0x70,  0x90|psTdmaByte4Modify);            \r
                                break;\r
                        case 15:\r
                                break;\r
                        case 15:\r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0x60, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);           \r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70,  0x90|psTdmaByte4Modify);                \r
                                break;\r
                        case 16:\r
                                break;\r
                        case 16:\r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0x60, 0x90);\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0x70, 0x90);           \r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0x70,  0x90|psTdmaByte4Modify);                \r
                                break;\r
                        case 17:\r
                                halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x2f, 0x2f, 0x60, 0x90);\r
                                break;\r
                        case 17:\r
                                halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x2f, 0x2f, 0x60, 0x90);\r
@@ -1737,41 +1714,39 @@ halbtc8723b2ant_PsTdma(
                                halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
                                break;  \r
                        case 71:\r
                                halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
                                break;  \r
                        case 71:\r
-                               //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
-\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c+nWiFiDurationAdjust, 0x03, 0xf1, 0x90);\r
                                break;\r
                        case 101:\r
                        case 105:\r
                        case 171:       \r
                                break;\r
                        case 101:\r
                        case 105:\r
                        case 171:       \r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x3a, 0x03, 0x70, 0x50);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x3a+nWiFiDurationAdjust, 0x03, 0x70, 0x50|psTdmaByte4Modify);\r
                                break;\r
                        case 102:\r
                        case 106:\r
                        case 110:\r
                        case 114:       \r
                                break;\r
                        case 102:\r
                        case 106:\r
                        case 110:\r
                        case 114:       \r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x2d, 0x03, 0x70, 0x50);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x2d+nWiFiDurationAdjust, 0x03, 0x70, 0x50|psTdmaByte4Modify);\r
                                break;  \r
                        case 103:\r
                        case 107:\r
                        case 111:\r
                        case 115:       \r
                                break;  \r
                        case 103:\r
                        case 107:\r
                        case 111:\r
                        case 115:       \r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1c, 0x03, 0x70, 0x50);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1c, 0x03, 0x70, 0x50|psTdmaByte4Modify);\r
                                break;          \r
                        case 104:\r
                        case 108:\r
                        case 112:\r
                        case 116:       \r
                                break;          \r
                        case 104:\r
                        case 108:\r
                        case 112:\r
                        case 116:       \r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x10, 0x03, 0x70, 0x50);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x10, 0x03, 0x70, 0x50|psTdmaByte4Modify);\r
                                break;  \r
                        case 109:\r
                                break;  \r
                        case 109:\r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 113:       \r
                                break;\r
                        case 113:       \r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0x70, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0x70, 0x90|psTdmaByte4Modify);\r
                                break;\r
                        case 121:       \r
                                break;\r
                        case 121:       \r
-                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
+                               halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90|psTdmaByte4Modify);\r
                                break;  \r
                        case 22:\r
                        case 122:\r
                                break;  \r
                        case 22:\r
                        case 122:\r
@@ -1912,6 +1887,9 @@ halbtc8723b2ant_InitCoexDm(
 \r
        halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
        halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 \r
        halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
        halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+\r
+       pCoexSta->popEventCnt = 0;\r
+\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1941,19 +1919,19 @@ halbtc8723b2ant_ActionBtInquiry(
 \r
        if(bScan || bLink || bRoam)\r
        {\r
 \r
        if(bScan || bLink || bRoam)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi link process + BT Inq/Page!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi link process + BT Inq/Page!!\n"));\r
                halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);         \r
                halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
        }\r
        else if(bWifiConnected)\r
        {\r
                halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);         \r
                halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
        }\r
        else if(bWifiConnected)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT Inq/Page!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT Inq/Page!!\n"));\r
                halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);         \r
                halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
        }\r
        else\r
        {\r
                halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);         \r
                halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi no-link + BT Inq/Page!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi no-link + BT Inq/Page!!\n"));\r
                halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
        }       \r
                halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
        }       \r
@@ -1991,7 +1969,7 @@ halbtc8723b2ant_ActionWiFiLinkProcess(
         u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
         u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);\r
 \r
         u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
         u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);\r
 \r
-        BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x76e=0x%x\n",\r
+        RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x76e=0x%x\n",\r
                      u4Tmp,  u1Tmpa, u1Tmpb));\r
 }\r
 \r
                      u4Tmp,  u1Tmpa, u1Tmpb));\r
 }\r
 \r
@@ -2016,7 +1994,7 @@ halbtc8723b2ant_ActionWifiIdleProcess(
                        (pCoexSta->bHidExist == TRUE) && (pCoexSta->bA2dpExist == TRUE))\r
        {\r
 \r
                        (pCoexSta->bHidExist == TRUE) && (pCoexSta->bA2dpExist == TRUE))\r
        {\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi  idle process for BT HID+A2DP exist!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi  idle process for BT HID+A2DP exist!!\n"));\r
                \r
                halbtc8723b2ant_DacSwing(pBtCoexist, NORMAL_EXEC, TRUE, 0x6);\r
                halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                \r
                halbtc8723b2ant_DacSwing(pBtCoexist, NORMAL_EXEC, TRUE, 0x6);\r
                halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
@@ -2063,7 +2041,7 @@ halbtc8723b2ant_IsCommonAction(
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
                halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
                halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non-connected idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non-connected idle!!\n"));\r
 \r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
                halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
                halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
@@ -2086,7 +2064,7 @@ halbtc8723b2ant_IsCommonAction(
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
                        halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
                        halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
 \r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
                        halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
                        halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
@@ -2108,7 +2086,7 @@ halbtc8723b2ant_IsCommonAction(
 \r
                        if(bBtHsOn)\r
                                return FALSE;\r
 \r
                        if(bBtHsOn)\r
                                return FALSE;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
                        halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
                        halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
@@ -2131,16 +2109,16 @@ halbtc8723b2ant_IsCommonAction(
 \r
                        if(bWifiBusy)\r
                        {\r
 \r
                        if(bWifiBusy)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
                                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_IS_ASUS_8723B, &bAsus8723b);\r
                                if(!bAsus8723b)\r
                                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_IS_ASUS_8723B, &bAsus8723b);\r
                                if(!bAsus8723b)\r
-                               bCommon = FALSE;\r
+                                       bCommon = FALSE;\r
                                else\r
                                        bCommon = halbtc8723b2ant_ActionWifiIdleProcess(pBtCoexist);    \r
                        }\r
                        else\r
                        {\r
                                else\r
                                        bCommon = halbtc8723b2ant_ActionWifiIdleProcess(pBtCoexist);    \r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
                                //bCommon = FALSE;      \r
                                bCommon = halbtc8723b2ant_ActionWifiIdleProcess(pBtCoexist);                    \r
                        }\r
                                //bCommon = FALSE;      \r
                                bCommon = halbtc8723b2ant_ActionWifiIdleProcess(pBtCoexist);                    \r
                        }\r
@@ -2161,12 +2139,12 @@ halbtc8723b2ant_TdmaDurationAdjust(
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TdmaDurationAdjust()\n"));\r
 \r
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
 \r
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
                {\r
                        if(bScoHid)\r
                        {\r
                {\r
                        if(bScoHid)\r
                        {\r
@@ -2279,8 +2257,12 @@ halbtc8723b2ant_TdmaDurationAdjust(
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
+\r
+               if ( (pCoexSta->lowPriorityTx) > 1050 ||  (pCoexSta->lowPriorityRx) > 1250 )\r
+                       retryCount++;\r
+               \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], retryCount = %d\n", retryCount));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
@@ -2300,7 +2282,7 @@ halbtc8723b2ant_TdmaDurationAdjust(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -2326,7 +2308,7 @@ halbtc8723b2ant_TdmaDurationAdjust(
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -2344,15 +2326,15 @@ halbtc8723b2ant_TdmaDurationAdjust(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
 \r
                }\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], max Interval = %d\n", maxInterval));\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
 \r
                                if(pCoexDm->curPsTdma == 71)\r
                                {\r
 \r
                                if(pCoexDm->curPsTdma == 71)\r
                                {\r
@@ -2469,7 +2451,7 @@ halbtc8723b2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
@@ -2593,7 +2575,7 @@ halbtc8723b2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
@@ -2703,7 +2685,7 @@ halbtc8723b2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
@@ -2816,7 +2798,7 @@ halbtc8723b2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
@@ -2926,7 +2908,7 @@ halbtc8723b2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
@@ -3042,7 +3024,7 @@ halbtc8723b2ant_TdmaDurationAdjust(
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
@@ -3055,7 +3037,7 @@ halbtc8723b2ant_TdmaDurationAdjust(
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -3919,23 +3901,23 @@ halbtc8723b2ant_RunCoexistMechanism(
        BOOLEAN                         bMiracastPlusBt=FALSE;\r
        BOOLEAN                         bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
 \r
        BOOLEAN                         bMiracastPlusBt=FALSE;\r
        BOOLEAN                         bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is under IPS !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is under IPS !!!\n"));\r
                return;\r
        }\r
 \r
        if(pCoexSta->bBtWhckTest)\r
        {\r
                return;\r
        }\r
 \r
        if(pCoexSta->bBtWhckTest)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under WHCK TEST!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is under WHCK TEST!!!\n"));\r
                halbtc8723b2ant_ActionBtWhckTest(pBtCoexist);\r
                return;\r
        }\r
                halbtc8723b2ant_ActionBtWhckTest(pBtCoexist);\r
                return;\r
        }\r
@@ -3943,7 +3925,7 @@ halbtc8723b2ant_RunCoexistMechanism(
        algorithm = halbtc8723b2ant_ActionAlgorithm(pBtCoexist);\r
        if(pCoexSta->bC2hBtInquiryPage && (BT_8723B_2ANT_COEX_ALGO_PANHS!=algorithm))\r
        {\r
        algorithm = halbtc8723b2ant_ActionAlgorithm(pBtCoexist);\r
        if(pCoexSta->bC2hBtInquiryPage && (BT_8723B_2ANT_COEX_ALGO_PANHS!=algorithm))\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
                halbtc8723b2ant_ActionBtInquiry(pBtCoexist);\r
                return;\r
        }\r
                halbtc8723b2ant_ActionBtInquiry(pBtCoexist);\r
                return;\r
        }\r
@@ -3964,7 +3946,7 @@ halbtc8723b2ant_RunCoexistMechanism(
 \r
        if(bScan || bLink || bRoam)\r
        {\r
 \r
        if(bScan || bLink || bRoam)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], WiFi is under Link Process !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], WiFi is under Link Process !!\n"));\r
                halbtc8723b2ant_ActionWiFiLinkProcess(pBtCoexist);\r
                return;\r
        }\r
                halbtc8723b2ant_ActionWiFiLinkProcess(pBtCoexist);\r
                return;\r
        }\r
@@ -3976,7 +3958,7 @@ halbtc8723b2ant_RunCoexistMechanism(
        \r
        if((numOfWifiLink>=2) || (wifiLinkStatus&WIFI_P2P_GO_CONNECTED))\r
        {\r
        \r
        if((numOfWifiLink>=2) || (wifiLinkStatus&WIFI_P2P_GO_CONNECTED))\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex],  Multi-Port numOfWifiLink = %d, wifiLinkStatus = 0x%x\n", numOfWifiLink,wifiLinkStatus) );\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex],  Multi-Port numOfWifiLink = %d, wifiLinkStatus = 0x%x\n", numOfWifiLink,wifiLinkStatus) );\r
 \r
                if(pBtLinkInfo->bBtLinkExist)\r
                {\r
 \r
                if(pBtLinkInfo->bBtLinkExist)\r
                {\r
@@ -3999,65 +3981,65 @@ halbtc8723b2ant_RunCoexistMechanism(
        }\r
 \r
        pCoexDm->curAlgorithm = algorithm;\r
        }\r
 \r
        pCoexDm->curAlgorithm = algorithm;\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
 \r
        if(halbtc8723b2ant_IsCommonAction(pBtCoexist))\r
        {\r
 \r
        if(halbtc8723b2ant_IsCommonAction(pBtCoexist))\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant common.\n"));\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
        }\r
        else\r
        {\r
                if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
                {\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
        }\r
        else\r
        {\r
                if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
                                pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
                }\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8723B_2ANT_COEX_ALGO_SCO:\r
                                pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
                }\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8723B_2ANT_COEX_ALGO_SCO:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
                                halbtc8723b2ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_HID:\r
                                halbtc8723b2ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
                                halbtc8723b2ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_A2DP:\r
                                halbtc8723b2ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
                                halbtc8723b2ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS:\r
                                halbtc8723b2ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
                                halbtc8723b2ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_PANEDR:\r
                                halbtc8723b2ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
                                halbtc8723b2ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_PANHS:\r
                                halbtc8723b2ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
                                halbtc8723b2ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP:\r
                                halbtc8723b2ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
                                halbtc8723b2ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_PANEDR_HID:\r
                                halbtc8723b2ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_PANEDR_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
                                halbtc8723b2ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
                                halbtc8723b2ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
                                halbtc8723b2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_HID_A2DP:\r
                                halbtc8723b2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8723B_2ANT_COEX_ALGO_HID_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
                                halbtc8723b2ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
                                halbtc8723b2ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
                                halbtc8723b2ant_CoexAllOff(pBtCoexist);\r
                                break;\r
                }\r
                                halbtc8723b2ant_CoexAllOff(pBtCoexist);\r
                                break;\r
                }\r
@@ -4110,7 +4092,10 @@ halbtc8723b2ant_InitHwConfig(
        u1Byte                          H2C_Parameter[2] ={0};\r
                \r
 \r
        u1Byte                          H2C_Parameter[2] ={0};\r
                \r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
+\r
+       //0xf0[15:12] --> Chip Cut information \r
+       pCoexSta->nCutVersion = (pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xf1) & 0xf0) >> 4;\r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
@@ -4236,7 +4221,7 @@ EXhalbtc8723b2ant_InitCoexDm(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
        \r
        halbtc8723b2ant_InitCoexDm(pBtCoexist);\r
 }\r
        \r
        halbtc8723b2ant_InitCoexDm(pBtCoexist);\r
 }\r
@@ -4254,6 +4239,7 @@ EXhalbtc8723b2ant_DisplayCoexInfo(
        u4Byte                          u4Tmp[4];\r
        u4Byte                          faOfdm, faCck;\r
        u4Byte                          fwVer=0, btPatchVer=0;\r
        u4Byte                          u4Tmp[4];\r
        u4Byte                          faOfdm, faCck;\r
        u4Byte                          fwVer=0, btPatchVer=0;\r
+       static u1Byte                   PopReportIn10s = 0;\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");\r
        CL_PRINTF(cliBuf);\r
@@ -4276,8 +4262,8 @@ EXhalbtc8723b2ant_DisplayCoexInfo(
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d_%x/ 0x%x/ 0x%x(%d)", "CoexVer/ FwVer/ PatchVer", \\r
-               GLCoexVerDate8723b2Ant, GLCoexVer8723b2Ant, fwVer, btPatchVer, btPatchVer);\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d_%x/ 0x%x/ 0x%x(%d)/ %c", "Version Coex/ Fw/ Patch/ Cut", \\r
+               GLCoexVerDate8723b2Ant, GLCoexVer8723b2Ant, fwVer, btPatchVer, btPatchVer, pCoexSta->nCutVersion+65);\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ", "Wifi channel informed to BT", \\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ", "Wifi channel informed to BT", \\r
@@ -4293,14 +4279,22 @@ EXhalbtc8723b2ant_DisplayCoexInfo(
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[BT Status]============");\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[BT Status]============");\r
        CL_PRINTF(cliBuf);\r
 \r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = [%s/ %ddBm/ %d] ", "BT [status/ rssi/ retryCnt]", \\r
-               ((pBtCoexist->btInfo.bBtDisabled)? ("disabled"):        ((pCoexSta->bC2hBtInquiryPage)?("inquiry/page scan"):((BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)? "non-connected idle":\r
+       PopReportIn10s++;\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = [%s/ %d/ %d/ %d] ", "BT [status/ rssi/ retryCnt/ popCnt]", \\r
+               ((pBtCoexist->btInfo.bBtDisabled)? ("disabled"):        ((pCoexSta->bC2hBtInquiryPage)?("inquiry/page scan"):((BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)? "non-connected idle":\r
                (  (BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)? "connected-idle":"busy")))),\r
                (  (BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)? "connected-idle":"busy")))),\r
-               pCoexSta->btRssi-100, pCoexSta->btRetryCnt);\r
+               pCoexSta->btRssi-100, pCoexSta->btRetryCnt, pCoexSta->popEventCnt);\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_PRINTF(cliBuf);\r
 \r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "SCO/HID/PAN/A2DP", \\r
-               pBtLinkInfo->bScoExist, pBtLinkInfo->bHidExist, pBtLinkInfo->bPanExist, pBtLinkInfo->bA2dpExist);\r
+       if (PopReportIn10s >= 5)\r
+       {\r
+               pCoexSta->popEventCnt = 0;      \r
+               PopReportIn10s = 0;\r
+       }\r
+       \r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d / %d / %d", "SCO/HID/PAN/A2DP/NameReq/WHQL", \\r
+               pBtLinkInfo->bScoExist, pBtLinkInfo->bHidExist, pBtLinkInfo->bPanExist, pBtLinkInfo->bA2dpExist, pCoexSta->bC2hBtRemoteNameReq, pCoexSta->bBtWhckTest );\r
        CL_PRINTF(cliBuf);\r
 \r
        if (pStackInfo->bProfileNotified)\r
        CL_PRINTF(cliBuf);\r
 \r
        if (pStackInfo->bProfileNotified)\r
@@ -4315,8 +4309,8 @@ EXhalbtc8723b2ant_DisplayCoexInfo(
        }       \r
 \r
        btInfoExt = pCoexSta->btInfoExt;\r
        }       \r
 \r
        btInfoExt = pCoexSta->btInfoExt;\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "BT Info A2DP rate", \\r
-               (btInfoExt&BIT0)? "Basic rate":"EDR rate");\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "A2DP Rate/Bitpool", \\r
+               (btInfoExt&BIT0)? "BR":"EDR", pCoexSta->nA2DPBitPool);\r
        CL_PRINTF(cliBuf);      \r
 \r
        for(i=0; i<BT_INFO_SRC_8723B_2ANT_MAX; i++)\r
        CL_PRINTF(cliBuf);      \r
 \r
        for(i=0; i<BT_INFO_SRC_8723B_2ANT_MAX; i++)\r
@@ -4333,8 +4327,15 @@ EXhalbtc8723b2ant_DisplayCoexInfo(
        }\r
 \r
        // Sw mechanism \r
        }\r
 \r
        // Sw mechanism \r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");\r
-       CL_PRINTF(cliBuf);\r
+       if(pBtCoexist->bManualControl)\r
+       {                       \r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism] (before Manual)============");                    \r
+       }\r
+       else\r
+       {\r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");\r
+       }\r
+       \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ", "SM1[ShRf/ LpRA/ LimDig]", \\r
                pCoexDm->bCurRfRxLpfShrink, pCoexDm->bCurLowPenaltyRa, pCoexDm->bLimitedDig);\r
        CL_PRINTF(cliBuf);\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ", "SM1[ShRf/ LpRA/ LimDig]", \\r
                pCoexDm->bCurRfRxLpfShrink, pCoexDm->bCurLowPenaltyRa, pCoexDm->bLimitedDig);\r
        CL_PRINTF(cliBuf);\r
@@ -4343,14 +4344,26 @@ EXhalbtc8723b2ant_DisplayCoexInfo(
        CL_PRINTF(cliBuf);\r
 \r
        // Fw mechanism         \r
        CL_PRINTF(cliBuf);\r
 \r
        // Fw mechanism         \r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");\r
-       CL_PRINTF(cliBuf);      \r
+       if(pBtCoexist->bManualControl)\r
+       {\r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism] (before Manual) ============");                   \r
+       }\r
+       else\r
+       {\r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");\r
+       }\r
 \r
        psTdmaCase = pCoexDm->curPsTdma;\r
 \r
        psTdmaCase = pCoexDm->curPsTdma;\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x case-%d (auto:%d)", "PS TDMA", \\r
+\r
+       if (pCoexDm->bIsSwitchTo1dot5Ant)\r
+               psTdmaCase = psTdmaCase + 100;\r
+               \r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x case-%d (%s,%s)", "PS TDMA", \\r
                pCoexDm->psTdmaPara[0], pCoexDm->psTdmaPara[1],\r
                pCoexDm->psTdmaPara[2], pCoexDm->psTdmaPara[3],\r
                pCoexDm->psTdmaPara[0], pCoexDm->psTdmaPara[1],\r
                pCoexDm->psTdmaPara[2], pCoexDm->psTdmaPara[3],\r
-               pCoexDm->psTdmaPara[4], psTdmaCase, pCoexDm->bAutoTdmaAdjust);\r
+                       pCoexDm->psTdmaPara[4], psTdmaCase, \r
+                       (pCoexDm->bCurPsTdmaOn? "On":"Off"),\r
+                       (pCoexDm->bAutoTdmaAdjust? "Adj":"Fix") );\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "Coex Table Type", \\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "Coex Table Type", \\r
@@ -4464,7 +4477,7 @@ EXhalbtc8723b2ant_IpsNotify(
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                pCoexSta->bUnderIps = TRUE;\r
                halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);\r
                halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
                pCoexSta->bUnderIps = TRUE;\r
                halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);\r
                halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
@@ -4472,7 +4485,7 @@ EXhalbtc8723b2ant_IpsNotify(
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
                pCoexSta->bUnderIps = FALSE;\r
                halbtc8723b2ant_InitHwConfig(pBtCoexist, FALSE);\r
                halbtc8723b2ant_InitCoexDm(pBtCoexist);\r
                pCoexSta->bUnderIps = FALSE;\r
                halbtc8723b2ant_InitHwConfig(pBtCoexist, FALSE);\r
                halbtc8723b2ant_InitCoexDm(pBtCoexist);\r
@@ -4488,12 +4501,12 @@ EXhalbtc8723b2ant_LpsNotify(
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
@@ -4515,14 +4528,15 @@ EXhalbtc8723b2ant_ScanNotify(
        \r
        if(BTC_SCAN_START == type)\r
        {\r
        \r
        if(BTC_SCAN_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
+               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &pCoexSta->nScanAPNum);              \r
        }\r
 \r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x76e=0x%x\n",\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x76e=0x%x\n",\r
                u4Tmp,  u1Tmpa, u1Tmpb));\r
 }\r
 \r
                u4Tmp,  u1Tmpa, u1Tmpb));\r
 }\r
 \r
@@ -4534,11 +4548,11 @@ EXhalbtc8723b2ant_ConnectNotify(
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4555,11 +4569,11 @@ EXhalbtc8723b2ant_MediaStatusNotify(
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
@@ -4586,7 +4600,7 @@ EXhalbtc8723b2ant_MediaStatusNotify(
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x66=0x%x\n", \r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);    \r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);    \r
@@ -4600,7 +4614,7 @@ EXhalbtc8723b2ant_SpecialPacketNotify(
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], DHCP Packet notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4626,7 +4640,7 @@ EXhalbtc8723b2ant_BtInfoNotify(
                rspSource = BT_INFO_SRC_8723B_2ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
                rspSource = BT_INFO_SRC_8723B_2ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
@@ -4634,17 +4648,17 @@ EXhalbtc8723b2ant_BtInfoNotify(
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x]\n", tmpBuf[i]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x, ", tmpBuf[i]));\r
                }\r
        }\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
                }\r
        }\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), return for Manual CTRL<===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), return for Manual CTRL<===\n"));\r
                return;\r
        }\r
 \r
                return;\r
        }\r
 \r
@@ -4659,18 +4673,34 @@ EXhalbtc8723b2ant_BtInfoNotify(
                pCoexSta->btRetryCnt =  // [3:0]\r
                        pCoexSta->btInfoC2h[rspSource][2]&0xf;\r
 \r
                pCoexSta->btRetryCnt =  // [3:0]\r
                        pCoexSta->btInfoC2h[rspSource][2]&0xf;\r
 \r
+               if (pCoexSta->btRetryCnt >= 1)\r
+                       pCoexSta->popEventCnt++;\r
+\r
                pCoexSta->btRssi =\r
                        pCoexSta->btInfoC2h[rspSource][3]*2+10;\r
 \r
                pCoexSta->btInfoExt = \r
                        pCoexSta->btInfoC2h[rspSource][4];\r
 \r
                pCoexSta->btRssi =\r
                        pCoexSta->btInfoC2h[rspSource][3]*2+10;\r
 \r
                pCoexSta->btInfoExt = \r
                        pCoexSta->btInfoC2h[rspSource][4];\r
 \r
+               if (pCoexSta->btInfoC2h[rspSource][2]&0x20)\r
+                       pCoexSta->bC2hBtRemoteNameReq = TRUE;\r
+               else\r
+                       pCoexSta->bC2hBtRemoteNameReq = FALSE;                  \r
+\r
+               if (pCoexSta->btInfoC2h[rspSource][1] == 0x49)\r
+               {\r
+                       pCoexSta->nA2DPBitPool = \r
+                               pCoexSta->btInfoC2h[rspSource][6]; \r
+               }\r
+               else\r
+                       pCoexSta->nA2DPBitPool = 0;\r
+\r
                pCoexSta->bBtTxRxMask = (pCoexSta->btInfoC2h[rspSource][2]&0x40);\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TX_RX_MASK, &pCoexSta->bBtTxRxMask);\r
                if (pCoexSta->bBtTxRxMask)\r
                {\r
                        /* BT into is responded by BT FW and BT RF REG 0x3C != 0x01 => Need to switch BT TRx Mask */                            \r
                pCoexSta->bBtTxRxMask = (pCoexSta->btInfoC2h[rspSource][2]&0x40);\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TX_RX_MASK, &pCoexSta->bBtTxRxMask);\r
                if (pCoexSta->bBtTxRxMask)\r
                {\r
                        /* BT into is responded by BT FW and BT RF REG 0x3C != 0x01 => Need to switch BT TRx Mask */                            \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x01\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x01\n"));\r
                        pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x01);\r
                }\r
 \r
                        pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x01);\r
                }\r
 \r
@@ -4678,7 +4708,7 @@ EXhalbtc8723b2ant_BtInfoNotify(
                // because bt is reset and loss of the info.\r
                if( (pCoexSta->btInfoExt & BIT1) )\r
                {\r
                // because bt is reset and loss of the info.\r
                if( (pCoexSta->btInfoExt & BIT1) )\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
@@ -4692,7 +4722,7 @@ EXhalbtc8723b2ant_BtInfoNotify(
                \r
                if( (pCoexSta->btInfoExt & BIT3) )\r
                {\r
                \r
                if( (pCoexSta->btInfoExt & BIT3) )\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
                        halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                }\r
                else\r
                        halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                }\r
                else\r
@@ -4746,10 +4776,13 @@ EXhalbtc8723b2ant_BtInfoNotify(
                else\r
                        pCoexSta->bScoExist = FALSE;\r
 \r
                else\r
                        pCoexSta->bScoExist = FALSE;\r
 \r
-               if ( (pCoexSta->bHidExist == FALSE) && (pCoexSta->bC2hBtInquiryPage == FALSE) )\r
+               if ( (pCoexSta->bHidExist == FALSE) && (pCoexSta->bC2hBtInquiryPage == FALSE) && (pCoexSta->bScoExist == FALSE))\r
                {\r
                        if (pCoexSta->highPriorityTx  + pCoexSta->highPriorityRx >= 160)                \r
                {\r
                        if (pCoexSta->highPriorityTx  + pCoexSta->highPriorityRx >= 160)                \r
+                       {\r
                                pCoexSta->bHidExist = TRUE;\r
                                pCoexSta->bHidExist = TRUE;\r
+                               btInfo = btInfo | 0x28;\r
+                       }\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
@@ -4758,28 +4791,28 @@ EXhalbtc8723b2ant_BtInfoNotify(
        if(!(btInfo&BT_INFO_8723B_2ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
        if(!(btInfo&BT_INFO_8723B_2ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
        }\r
        else if(btInfo == BT_INFO_8723B_2ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE;\r
        }\r
        else if(btInfo == BT_INFO_8723B_2ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
        }\r
        else if((btInfo&BT_INFO_8723B_2ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8723B_2ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_SCO_BUSY;\r
        }\r
        else if((btInfo&BT_INFO_8723B_2ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8723B_2ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_SCO_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
        }\r
        else if(btInfo&BT_INFO_8723B_2ANT_B_ACL_BUSY)\r
        {\r
                pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_ACL_BUSY;\r
        }\r
        else if(btInfo&BT_INFO_8723B_2ANT_B_ACL_BUSY)\r
        {\r
                pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_ACL_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_MAX;\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_MAX;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
        }\r
        \r
        if( (BT_8723B_2ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
        }\r
        \r
        if( (BT_8723B_2ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
@@ -4808,7 +4841,7 @@ EXhalbtc8723b2ant_HaltNotify(
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
        halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);\r
        //remove due to interrupt is disabled that polling c2h will fail and delay 100ms.\r
 \r
        halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);\r
        //remove due to interrupt is disabled that polling c2h will fail and delay 100ms.\r
@@ -4824,15 +4857,15 @@ EXhalbtc8723b2ant_PnpNotify(
        IN      u1Byte                          pnpState\r
        )\r
 {\r
        IN      u1Byte                          pnpState\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify\n"));\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to SLEEP\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to SLEEP\n"));\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
                halbtc8723b2ant_InitHwConfig(pBtCoexist, FALSE);\r
                halbtc8723b2ant_InitCoexDm(pBtCoexist);\r
                halbtc8723b2ant_QueryBtInfo(pBtCoexist);\r
                halbtc8723b2ant_InitHwConfig(pBtCoexist, FALSE);\r
                halbtc8723b2ant_InitCoexDm(pBtCoexist);\r
                halbtc8723b2ant_QueryBtInfo(pBtCoexist);\r
@@ -4848,27 +4881,28 @@ EXhalbtc8723b2ant_Periodical(
        u4Byte                          fwVer=0, btPatchVer=0;\r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
        u4Byte                          fwVer=0, btPatchVer=0;\r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
+       PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ==========================Periodical===========================\n"));\r
 \r
        if(pCoexSta->disVerInfoCnt <= 5)\r
        {\r
                pCoexSta->disVerInfoCnt += 1;\r
 \r
        if(pCoexSta->disVerInfoCnt <= 5)\r
        {\r
                pCoexSta->disVerInfoCnt += 1;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n",\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n",\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n",\r
                        GLCoexVerDate8723b2Ant, GLCoexVer8723b2Ant, fwVer, btPatchVer, btPatchVer));\r
                        GLCoexVerDate8723b2Ant, GLCoexVer8723b2Ant, fwVer, btPatchVer, btPatchVer));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
 \r
                if (pCoexSta->disVerInfoCnt == 3)\r
                {\r
                        //Antenna config to set 0x765 = 0x0 (GNT_BT control by PTA) after initial \r
 \r
                if (pCoexSta->disVerInfoCnt == 3)\r
                {\r
                        //Antenna config to set 0x765 = 0x0 (GNT_BT control by PTA) after initial \r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Set GNT_BT control by PTA\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set GNT_BT control by PTA\n"));\r
                        halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, FALSE, FALSE);\r
                }\r
        }\r
                        halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, FALSE, FALSE);\r
                }\r
        }\r
@@ -4880,6 +4914,12 @@ EXhalbtc8723b2ant_Periodical(
        halbtc8723b2ant_MonitorBtCtr(pBtCoexist);\r
        halbtc8723b2ant_MonitorWiFiCtr(pBtCoexist);\r
        \r
        halbtc8723b2ant_MonitorBtCtr(pBtCoexist);\r
        halbtc8723b2ant_MonitorWiFiCtr(pBtCoexist);\r
        \r
+       //for some BT speaker that Hi-Pri pkt appear begore start play, this will cause HID exist\r
+       if ( (pCoexSta->highPriorityTx  + pCoexSta->highPriorityRx < 50) && (pBtLinkInfo->bHidExist == TRUE))\r
+       {\r
+               pBtLinkInfo->bHidExist  = FALSE;\r
+       }\r
+       \r
        if( halbtc8723b2ant_IsWifiStatusChanged(pBtCoexist) ||\r
                pCoexDm->bAutoTdmaAdjust)\r
        {\r
        if( halbtc8723b2ant_IsWifiStatusChanged(pBtCoexist) ||\r
                pCoexDm->bAutoTdmaAdjust)\r
        {\r
index 2c049f9fcebfd2116296ac191c8e845f08a084e6..de7a9bda4e60417439c529e2faaf852a7a90e85c 100755 (executable)
@@ -107,6 +107,8 @@ typedef struct _COEX_DM_8723B_2ANT{
        u1Byte          curLps;\r
        u1Byte          preRpwm;\r
        u1Byte          curRpwm;\r
        u1Byte          curLps;\r
        u1Byte          preRpwm;\r
        u1Byte          curRpwm;\r
+\r
+       BOOLEAN         bIsSwitchTo1dot5Ant;\r
 } COEX_DM_8723B_2ANT, *PCOEX_DM_8723B_2ANT;\r
 \r
 typedef struct _COEX_STA_8723B_2ANT{   \r
 } COEX_DM_8723B_2ANT, *PCOEX_DM_8723B_2ANT;\r
 \r
 typedef struct _COEX_STA_8723B_2ANT{   \r
@@ -131,8 +133,11 @@ typedef struct _COEX_STA_8723B_2ANT{
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8723B_2ANT_MAX];\r
        BOOLEAN                                 bBtWhckTest;\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8723B_2ANT_MAX];\r
        BOOLEAN                                 bBtWhckTest;\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
+       BOOLEAN                                 bC2hBtRemoteNameReq;\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
+       u4Byte                                  popEventCnt;\r
+       u1Byte                                  nScanAPNum;\r
 \r
        u4Byte                                  nCRCOK_CCK;\r
        u4Byte                                  nCRCOK_11g;\r
 \r
        u4Byte                                  nCRCOK_CCK;\r
        u4Byte                                  nCRCOK_11g;\r
@@ -148,6 +153,9 @@ typedef struct _COEX_STA_8723B_2ANT{
        BOOLEAN                                 bForceLpsOn;\r
 \r
        u1Byte                                  disVerInfoCnt;\r
        BOOLEAN                                 bForceLpsOn;\r
 \r
        u1Byte                                  disVerInfoCnt;\r
+\r
+       u1Byte                                  nA2DPBitPool;\r
+       u1Byte                                  nCutVersion;\r
 }COEX_STA_8723B_2ANT, *PCOEX_STA_8723B_2ANT;\r
 \r
 //===========================================\r
 }COEX_STA_8723B_2ANT, *PCOEX_STA_8723B_2ANT;\r
 \r
 //===========================================\r
index d081053b8c5c0c733edd816004a61d84f0e79b62..b911f31dbcfe6251132c7898206c251e4352e503 100755 (executable)
@@ -1,7 +1,7 @@
 //============================================================\r
 // Description:\r
 //\r
 //============================================================\r
 // Description:\r
 //\r
-// This file is for 8812a1ant Co-exist mechanism\r
+// This file is for RTL8812A Co-exist mechanism\r
 //\r
 // History\r
 // 2012/11/15 Cosa first check in.\r
 //\r
 // History\r
 // 2012/11/15 Cosa first check in.\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtc8812a1Ant.tmh"\r
+#endif\r
+\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
@@ -27,8 +32,8 @@ const char *const GLBtInfoSrc8812a1Ant[]={
        "BT Info[bt auto report]",\r
 };\r
 \r
        "BT Info[bt auto report]",\r
 };\r
 \r
-u4Byte GLCoexVerDate8812a1Ant=20130729;\r
-u4Byte GLCoexVer8812a1Ant=0x10;\r
+u4Byte GLCoexVerDate8812a1Ant=20140708;\r
+u4Byte GLCoexVer8812a1Ant=0x52;\r
 \r
 //============================================================\r
 // local function proto type if needed\r
 \r
 //============================================================\r
 // local function proto type if needed\r
@@ -56,12 +61,10 @@ halbtc8812a1ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -69,12 +72,10 @@ halbtc8812a1ant_BtRssiState(
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -82,7 +83,7 @@ halbtc8812a1ant_BtRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Rssi thresh error!!\n"));\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
@@ -92,12 +93,10 @@ halbtc8812a1ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -106,17 +105,14 @@ halbtc8812a1ant_BtRssiState(
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -124,12 +120,10 @@ halbtc8812a1ant_BtRssiState(
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -161,12 +155,10 @@ halbtc8812a1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -174,12 +166,10 @@ halbtc8812a1ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -187,7 +177,7 @@ halbtc8812a1ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -197,12 +187,10 @@ halbtc8812a1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -211,17 +199,14 @@ halbtc8812a1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -229,12 +214,10 @@ halbtc8812a1ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -248,18 +231,10 @@ VOID
 halbtc8812a1ant_UpdateRaMask(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bForceExec,\r
 halbtc8812a1ant_UpdateRaMask(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bForceExec,\r
-       IN      u1Byte                          type,\r
-       IN      u4Byte                          rateMask\r
+       IN      u4Byte                          disRateMask\r
        )\r
 {\r
        )\r
 {\r
-       if(BTC_RATE_DISABLE == type)\r
-       {\r
-               pCoexDm->curRaMask |= rateMask;         // disable rate\r
-       }\r
-       else if(BTC_RATE_ENABLE == type)\r
-       {\r
-               pCoexDm->curRaMask &= ~rateMask;        // enable rate\r
-       }\r
+       pCoexDm->curRaMask = disRateMask;\r
        \r
        if( bForceExec || (pCoexDm->preRaMask != pCoexDm->curRaMask))\r
        {\r
        \r
        if( bForceExec || (pCoexDm->preRaMask != pCoexDm->curRaMask))\r
        {\r
@@ -268,15 +243,195 @@ halbtc8812a1ant_UpdateRaMask(
        pCoexDm->preRaMask = pCoexDm->curRaMask;\r
 }\r
 \r
        pCoexDm->preRaMask = pCoexDm->curRaMask;\r
 }\r
 \r
+//to check 0x430/0x434 is correct??\r
+VOID\r
+halbtc8812a1ant_AutoRateFallbackRetry(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      u1Byte                          type\r
+       )\r
+{\r
+       BOOLEAN bWifiUnderBMode=FALSE;\r
+       \r
+       pCoexDm->curArfrType = type;\r
+\r
+       if( bForceExec || (pCoexDm->preArfrType != pCoexDm->curArfrType))\r
+       {\r
+               switch(pCoexDm->curArfrType)\r
+               {\r
+                       case 0: // normal mode\r
+                               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, pCoexDm->backupArfrCnt1);\r
+                               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, pCoexDm->backupArfrCnt2);\r
+                               break;\r
+                       case 1: \r
+                               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode);\r
+                               if(bWifiUnderBMode)\r
+                               {\r
+                                       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, 0x0);\r
+                                       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, 0x01010101);\r
+                               }\r
+                               else\r
+                               {\r
+                                       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, 0x0);\r
+                                       pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, 0x04030201);\r
+                               }\r
+                               break;\r
+                       default:\r
+                               break;\r
+               }\r
+       }\r
+\r
+       pCoexDm->preArfrType = pCoexDm->curArfrType;\r
+}\r
+\r
+//to check 0x42a ??\r
+VOID\r
+halbtc8812a1ant_RetryLimit(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      u1Byte                          type\r
+       )\r
+{\r
+       pCoexDm->curRetryLimitType = type;\r
+\r
+       if( bForceExec || (pCoexDm->preRetryLimitType != pCoexDm->curRetryLimitType))\r
+       {\r
+               switch(pCoexDm->curRetryLimitType)\r
+               {\r
+                       case 0: // normal mode\r
+                               pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x42a, pCoexDm->backupRetryLimit);\r
+                               break;\r
+                       case 1: // retry limit=8\r
+                               pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x42a, 0x0808);\r
+                               break;\r
+                       default:\r
+                               break;\r
+               }\r
+       }\r
+\r
+       pCoexDm->preRetryLimitType = pCoexDm->curRetryLimitType;\r
+}\r
+\r
+//to check 0x456??\r
+VOID\r
+halbtc8812a1ant_AmpduMaxTime(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      u1Byte                          type\r
+       )\r
+{\r
+       pCoexDm->curAmpduTimeType = type;\r
+\r
+       if( bForceExec || (pCoexDm->preAmpduTimeType != pCoexDm->curAmpduTimeType))\r
+       {\r
+               switch(pCoexDm->curAmpduTimeType)\r
+               {\r
+                       case 0: // normal mode\r
+                               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x456, pCoexDm->backupAmpduMaxTime);\r
+                               break;\r
+                       case 1: // AMPDU timw = 0x38 * 32us\r
+                               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x456, 0x38);\r
+                               break;\r
+                       default:\r
+                               break;\r
+               }\r
+       }\r
+\r
+       pCoexDm->preAmpduTimeType = pCoexDm->curAmpduTimeType;\r
+}\r
+\r
+VOID\r
+halbtc8812a1ant_LimitedTx(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      u1Byte                          raMaskType,\r
+       IN      u1Byte                          arfrType,\r
+       IN      u1Byte                          retryLimitType,\r
+       IN      u1Byte                          ampduTimeType\r
+       )\r
+{\r
+       switch(raMaskType)\r
+       {\r
+               case 0: // normal mode\r
+                       halbtc8812a1ant_UpdateRaMask(pBtCoexist, bForceExec, 0x0);\r
+                       break;\r
+               case 1: // disable cck 1/2\r
+                       halbtc8812a1ant_UpdateRaMask(pBtCoexist, bForceExec, 0x00000003);\r
+                       break;\r
+               case 2: // disable cck 1/2/5.5, ofdm 6/9/12/18/24, mcs 0/1/2/3/4\r
+                       halbtc8812a1ant_UpdateRaMask(pBtCoexist, bForceExec, 0x0001f1f7);\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+\r
+       halbtc8812a1ant_AutoRateFallbackRetry(pBtCoexist, bForceExec, arfrType);\r
+       halbtc8812a1ant_RetryLimit(pBtCoexist, bForceExec, retryLimitType);\r
+       halbtc8812a1ant_AmpduMaxTime(pBtCoexist, bForceExec, ampduTimeType);\r
+}\r
+\r
+VOID\r
+halbtc8812a1ant_LimitedRx(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      BOOLEAN                         bRejApAggPkt,\r
+       IN      BOOLEAN                         bBtCtrlAggBufSize,\r
+       IN      u1Byte                          aggBufSize\r
+       )\r
+{\r
+       BOOLEAN bRejectRxAgg=bRejApAggPkt;\r
+       BOOLEAN bBtCtrlRxAggSize=bBtCtrlAggBufSize;\r
+       u1Byte  rxAggSize=aggBufSize;\r
+\r
+       //============================================\r
+       //      Rx Aggregation related setting\r
+       //============================================\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT, &bRejectRxAgg);\r
+       // decide BT control aggregation buf size or not\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE, &bBtCtrlRxAggSize);\r
+       // aggregation buf size, only work when BT control Rx aggregation size.\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_AGG_BUF_SIZE, &rxAggSize);\r
+       // real update aggregation setting\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);\r
+\r
+\r
+}\r
+\r
+VOID\r
+halbtc8812a1ant_QueryBtInfo(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{      \r
+       u1Byte  dataLen=3;\r
+       u1Byte  buf[5] = {0};\r
+\r
+       if(!pBtCoexist->btInfo.bBtDisabled)\r
+       {\r
+               if(!pCoexSta->btInfoQueryCnt ||\r
+                       (pCoexSta->btInfoC2hCnt[BT_INFO_SRC_8812A_1ANT_BT_RSP]-pCoexSta->btInfoQueryCnt)>2)\r
+               {\r
+                       buf[0] = dataLen;\r
+                       buf[1] = 0x1;   // polling enable, 1=enable, 0=disable\r
+                       buf[2] = 0x2;   // polling time in seconds\r
+                       buf[3] = 0x1;   // auto report enable, 1=enable, 0=disable\r
+                               \r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_INFO, (PVOID)&buf[0]);\r
+               }\r
+       }\r
+       pCoexSta->btInfoQueryCnt++;\r
+}\r
+\r
 VOID\r
 halbtc8812a1ant_MonitorBtCtr(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 halbtc8812a1ant_MonitorBtCtr(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u4Byte                  regHPTxRx, regLPTxRx, u4Tmp;\r
+       u4Byte                  regHPTxRx, regLPTxRx, u4Tmp, u4Tmp1;\r
        u4Byte                  regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;\r
        u4Byte                  regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;\r
-       u1Byte                  u1Tmp;\r
-       \r
+       u1Byte                  u1Tmp, u1Tmp1;\r
+       s4Byte                  wifiRssi;\r
+       static u1Byte           NumOfBtCounterChk = 0;\r
+               \r
        regHPTxRx = 0x770;\r
        regLPTxRx = 0x774;\r
 \r
        regHPTxRx = 0x770;\r
        regLPTxRx = 0x774;\r
 \r
@@ -293,37 +448,158 @@ halbtc8812a1ant_MonitorBtCtr(
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
-               regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
-               regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
+       if( (pCoexSta->lowPriorityTx > 1150)  && (!pCoexSta->bC2hBtInquiryPage))\r
+               pCoexSta->popEventCnt++;\r
+\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Hi-Pri Rx/Tx: %d/%d, Lo-Pri Rx/Tx: %d/%d\n",\r
+               regHPRx, regHPTx, regLPRx, regLPTx));\r
 \r
        // reset counter\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);\r
 \r
        // reset counter\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);\r
+\r
+       if ((regHPTx == 0) && (regHPRx ==0) && (regLPTx == 0) && (regLPRx == 0))\r
+       {\r
+               NumOfBtCounterChk++;\r
+               if (NumOfBtCounterChk >= 3)\r
+               {\r
+                       halbtc8812a1ant_QueryBtInfo(pBtCoexist);\r
+                       NumOfBtCounterChk = 0;\r
+               }\r
+       }\r
 }\r
 \r
 }\r
 \r
+//to check registers\r
 VOID\r
 VOID\r
-halbtc8812a1ant_QueryBtInfo(\r
+halbtc8812a1ant_MonitorWiFiCtr(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
-{      \r
-       u1Byte  dataLen=3;\r
-       u1Byte  buf[5] = {0};\r
+{\r
+       u4Byte  u4Tmp;\r
+       u2Byte  u2Tmp[3];\r
+       s4Byte  wifiRssi=0;\r
+       BOOLEAN bWifiBusy = FALSE, bWifiUnderBMode = FALSE;\r
+       static u1Byte nCCKLockCounter = 0;\r
 \r
 \r
-       if(!pBtCoexist->btInfo.bBtDisabled)\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode);\r
+\r
+       if (pCoexSta->bUnderIps)\r
        {\r
        {\r
-               if(!pCoexSta->btInfoQueryCnt ||\r
-                       (pCoexSta->btInfoC2hCnt[BT_INFO_SRC_8812A_1ANT_BT_RSP]-pCoexSta->btInfoQueryCnt)>2)\r
+               pCoexSta->nCRCOK_CCK = 0;\r
+               pCoexSta->nCRCOK_11g = 0;\r
+               pCoexSta->nCRCOK_11n = 0;\r
+               pCoexSta->nCRCOK_11nAgg = 0;\r
+\r
+               pCoexSta->nCRCErr_CCK = 0;\r
+               pCoexSta->nCRCErr_11g = 0;\r
+               pCoexSta->nCRCErr_11n = 0;\r
+               pCoexSta->nCRCErr_11nAgg = 0;   \r
+       }\r
+       else\r
+       {\r
+               pCoexSta->nCRCOK_CCK    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf04);\r
+               pCoexSta->nCRCOK_11g    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf14);\r
+               pCoexSta->nCRCOK_11n    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf10);\r
+               pCoexSta->nCRCOK_11nAgg= pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf40);\r
+\r
+               pCoexSta->nCRCErr_CCK    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf06);\r
+               pCoexSta->nCRCErr_11g    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf16);\r
+               pCoexSta->nCRCErr_11n    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf12);\r
+               pCoexSta->nCRCErr_11nAgg = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf42);                \r
+       }\r
+\r
+\r
+       //reset counter\r
+       pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xb58, 0x1, 0x1);\r
+       pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xb58, 0x1, 0x0);\r
+\r
+       if ( (bWifiBusy) && (wifiRssi >= 30) && (!bWifiUnderBMode))\r
+       {\r
+               if ( (pCoexDm->btStatus == BT_8812A_1ANT_BT_STATUS_ACL_BUSY) ||\r
+                       (pCoexDm->btStatus == BT_8812A_1ANT_BT_STATUS_ACL_SCO_BUSY) ||\r
+                       (pCoexDm->btStatus == BT_8812A_1ANT_BT_STATUS_SCO_BUSY) )\r
                {\r
                {\r
-                       buf[0] = dataLen;\r
-                       buf[1] = 0x1;   // polling enable, 1=enable, 0=disable\r
-                       buf[2] = 0x2;   // polling time in seconds\r
-                       buf[3] = 0x1;   // auto report enable, 1=enable, 0=disable\r
-                               \r
-                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_INFO, (PVOID)&buf[0]);\r
+                       if (pCoexSta->nCRCOK_CCK >(pCoexSta->nCRCOK_11g + pCoexSta->nCRCOK_11n + \r
+                               pCoexSta->nCRCOK_11nAgg) )\r
+                       {\r
+                               if (nCCKLockCounter < 5)\r
+                                nCCKLockCounter++;\r
+                       }\r
+                       else\r
+                       {\r
+                               if (nCCKLockCounter > 0)\r
+                                nCCKLockCounter--;\r
+                       }\r
+\r
+               }\r
+               else\r
+               {\r
+                       if (nCCKLockCounter > 0)\r
+                         nCCKLockCounter--;\r
                }\r
        }\r
                }\r
        }\r
-       pCoexSta->btInfoQueryCnt++;\r
+       else\r
+       {\r
+               if (nCCKLockCounter > 0)\r
+                       nCCKLockCounter--;\r
+       }\r
+\r
+       if (!pCoexSta->bPreCCKLock)\r
+       {\r
+\r
+               if (nCCKLockCounter >= 5)\r
+                pCoexSta->bCCKLock = TRUE;\r
+               else\r
+                pCoexSta->bCCKLock = FALSE;                    \r
+       }\r
+       else\r
+       {\r
+               if (nCCKLockCounter == 0)\r
+                pCoexSta->bCCKLock = FALSE;\r
+               else\r
+                pCoexSta->bCCKLock = TRUE;             \r
+       }\r
+\r
+       pCoexSta->bPreCCKLock =  pCoexSta->bCCKLock;    \r
+               \r
+\r
+}\r
+\r
+BOOLEAN\r
+halbtc8812a1ant_IsWifiStatusChanged(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       static BOOLEAN  bPreWifiBusy=FALSE, bPreUnder4way=FALSE, bPreBtHsOn=FALSE;\r
+       BOOLEAN bWifiBusy=FALSE, bUnder4way=FALSE, bBtHsOn=FALSE;\r
+       BOOLEAN bWifiConnected=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
+\r
+       if(bWifiConnected)\r
+       {\r
+               if(bWifiBusy != bPreWifiBusy)\r
+               {\r
+                       bPreWifiBusy = bWifiBusy;\r
+                       return TRUE;\r
+               }\r
+               if(bUnder4way != bPreUnder4way)\r
+               {\r
+                       bPreUnder4way = bUnder4way;\r
+                       return TRUE;\r
+               }\r
+               if(bBtHsOn != bPreBtHsOn)\r
+               {\r
+                       bPreBtHsOn = bBtHsOn;\r
+                       return TRUE;\r
+               }\r
+       }\r
+\r
+       return FALSE;\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -332,6 +608,9 @@ halbtc8812a1ant_UpdateBtLinkInfo(
        )\r
 {\r
        PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        )\r
 {\r
        PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       BOOLEAN                         bBtHsOn=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
 \r
        pBtLinkInfo->bBtLinkExist = pCoexSta->bBtLinkExist;\r
        pBtLinkInfo->bScoExist = pCoexSta->bScoExist;\r
 \r
        pBtLinkInfo->bBtLinkExist = pCoexSta->bBtLinkExist;\r
        pBtLinkInfo->bScoExist = pCoexSta->bScoExist;\r
@@ -339,6 +618,13 @@ halbtc8812a1ant_UpdateBtLinkInfo(
        pBtLinkInfo->bPanExist = pCoexSta->bPanExist;\r
        pBtLinkInfo->bHidExist = pCoexSta->bHidExist;\r
 \r
        pBtLinkInfo->bPanExist = pCoexSta->bPanExist;\r
        pBtLinkInfo->bHidExist = pCoexSta->bHidExist;\r
 \r
+       // work around for HS mode.\r
+       if(bBtHsOn)\r
+       {\r
+               pBtLinkInfo->bPanExist = TRUE;\r
+               pBtLinkInfo->bBtLinkExist = TRUE;\r
+       }\r
+\r
        // check if Sco only\r
        if( pBtLinkInfo->bScoExist &&\r
                !pBtLinkInfo->bA2dpExist &&\r
        // check if Sco only\r
        if( pBtLinkInfo->bScoExist &&\r
                !pBtLinkInfo->bA2dpExist &&\r
@@ -387,10 +673,10 @@ halbtc8812a1ant_ActionAlgorithm(
        u1Byte                          numOfDiffProfile=0;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        u1Byte                          numOfDiffProfile=0;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
-       \r
+\r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No profile exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No BT link exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
@@ -407,31 +693,31 @@ halbtc8812a1ant_ActionAlgorithm(
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO only\n"));\r
                        algorithm = BT_8812A_1ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                        algorithm = BT_8812A_1ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID only\n"));\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP only\n"));\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = PAN(HS) only\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = PAN(EDR) only\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
@@ -443,24 +729,24 @@ halbtc8812a1ant_ActionAlgorithm(
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID\n"));\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP ==> SCO\n"));\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + PAN(HS)\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + PAN(EDR)\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -470,7 +756,7 @@ halbtc8812a1ant_ActionAlgorithm(
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP\n"));\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
@@ -478,12 +764,12 @@ halbtc8812a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + PAN(HS)\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -492,12 +778,12 @@ halbtc8812a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
@@ -510,7 +796,7 @@ halbtc8812a1ant_ActionAlgorithm(
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + A2DP ==> HID\n"));\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
                                algorithm = BT_8812A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
@@ -518,12 +804,12 @@ halbtc8812a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + PAN(HS)\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -532,12 +818,12 @@ halbtc8812a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP + PAN(EDR) ==> HID\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -550,12 +836,12 @@ halbtc8812a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
@@ -571,12 +857,12 @@ halbtc8812a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Error!!! BT Profile = SCO + HID + A2DP + PAN(HS)\n"));\r
 \r
                                }\r
                                else\r
                                {\r
 \r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -592,6 +878,19 @@ halbtc8812a1ant_SetBtAutoReport(
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
+       u1Byte                  H2C_Parameter[1] ={0};\r
+       \r
+       H2C_Parameter[0] = 0;\r
+\r
+       if(bEnableAutoReport)\r
+       {\r
+               H2C_Parameter[0] |= BIT0;\r
+       }\r
+\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
+               (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
+\r
+       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -601,15 +900,12 @@ halbtc8812a1ant_BtAutoReport(
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s BT Auto report = %s\n",  \r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
-                       pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
-\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
@@ -618,6 +914,7 @@ halbtc8812a1ant_BtAutoReport(
        pCoexDm->bPreBtAutoReport = pCoexDm->bCurBtAutoReport;\r
 }\r
 \r
        pCoexDm->bPreBtAutoReport = pCoexDm->bCurBtAutoReport;\r
 }\r
 \r
+//to check\r
 VOID\r
 halbtc8812a1ant_SetSwPenaltyTxRateAdaptive(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8812a1ant_SetSwPenaltyTxRateAdaptive(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -630,12 +927,12 @@ halbtc8812a1ant_SetSwPenaltyTxRateAdaptive(
        tmpU1 |= BIT0;\r
        if(bLowPenaltyRa)\r
        {\r
        tmpU1 |= BIT0;\r
        if(bLowPenaltyRa)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
                tmpU1 |= BIT2;\r
        }\r
 \r
                tmpU1 |= BIT2;\r
        }\r
 \r
@@ -649,16 +946,10 @@ halbtc8812a1ant_LowPenaltyRa(
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
-       return;\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
-               (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
-                       pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
-\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
@@ -676,16 +967,16 @@ halbtc8812a1ant_SetCoexTable(
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -699,8 +990,8 @@ halbtc8812a1ant_CoexTable(
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
-               (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6cc=0x%x\n", \r
+               (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
        pCoexDm->curVal0x6c8 = val0x6c8;\r
@@ -708,11 +999,6 @@ halbtc8812a1ant_CoexTable(
 \r
        if(!bForceExec)\r
        {\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
-       \r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
@@ -734,31 +1020,35 @@ halbtc8812a1ant_CoexTableWithType(
        IN      u1Byte                          type\r
        )\r
 {\r
        IN      u1Byte                          type\r
        )\r
 {\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** CoexTable(%d) **********\n", type));\r
+       \r
+       pCoexSta->nCoexTableType = type;\r
+       \r
        switch(type)\r
        {\r
                case 0:\r
        switch(type)\r
        {\r
                case 0:\r
-                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x55555555, 0xffff, 0x3);\r
+                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x55555555, 0xffffff, 0x3);\r
                        break;\r
                case 1:\r
                        break;\r
                case 1:\r
-                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x5a5a5a5a, 0xffff, 0x3);\r
+                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x5a5a5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 2:\r
                        break;\r
                case 2:\r
-                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x5a5a5a5a, 0x5a5a5a5a, 0xffff, 0x3);\r
+                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x5a5a5a5a, 0x5a5a5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 3:\r
                        break;\r
                case 3:\r
-                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0xaaaaaaaa, 0xaaaaaaaa, 0xffff, 0x3);\r
+                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x5a5a5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 4:\r
                        break;\r
                case 4:\r
-                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0xffffffff, 0xffffffff, 0xffff, 0x3);\r
+                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0xaaaa5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 5:\r
                        break;\r
                case 5:\r
-                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5fff5fff, 0xffff, 0x3);\r
+                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x5a5a5a5a, 0xaa5a5a5a, 0xffffff, 0x3);\r
                        break;\r
                case 6:\r
                        break;\r
                case 6:\r
-                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
+                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0xaaaaaaaa, 0xffffff, 0x3);\r
                        break;\r
                case 7:\r
                        break;\r
                case 7:\r
-                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0x5afa5afa, 0x5afa5afa, 0xffff, 0x3);\r
+                       halbtc8812a1ant_CoexTable(pBtCoexist, bForceExec, 0xaaaaaaaa, 0xaaaaaaaa, 0xffffff, 0x3);\r
                        break;\r
                default:\r
                        break;\r
                        break;\r
                default:\r
                        break;\r
@@ -774,14 +1064,14 @@ halbtc8812a1ant_SetFwIgnoreWlanAct(
        u1Byte  dataLen=3;\r
        u1Byte  buf[5] = {0};\r
 \r
        u1Byte  dataLen=3;\r
        u1Byte  buf[5] = {0};\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], %s BT Ignore Wlan_Act\n",\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s BT Ignore Wlan_Act\n",\r
                (bEnable? "Enable":"Disable")));\r
 \r
        buf[0] = dataLen;\r
        buf[1] = 0x1;                   // OP_Code\r
        buf[2] = 0x1;                   // OP_Code_Length\r
        if(bEnable)\r
                (bEnable? "Enable":"Disable")));\r
 \r
        buf[0] = dataLen;\r
        buf[1] = 0x1;                   // OP_Code\r
        buf[2] = 0x1;                   // OP_Code_Length\r
        if(bEnable)\r
-               buf[3] = 0x1;           // OP_Code_Content\r
+               buf[3] = 0x1;           // OP_Code_Content\r
        else\r
                buf[3] = 0x0;\r
                \r
        else\r
                buf[3] = 0x0;\r
                \r
@@ -795,15 +1085,12 @@ halbtc8812a1ant_IgnoreWlanAct(
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
-                       pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
-\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
@@ -812,37 +1099,6 @@ halbtc8812a1ant_IgnoreWlanAct(
        pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;\r
 }\r
 \r
        pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;\r
 }\r
 \r
-VOID\r
-halbtc8812a1ant_SetFwPstdma(\r
-       IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      u1Byte                  byte1,\r
-       IN      u1Byte                  byte2,\r
-       IN      u1Byte                  byte3,\r
-       IN      u1Byte                  byte4,\r
-       IN      u1Byte                  byte5\r
-       )\r
-{\r
-       u1Byte                  H2C_Parameter[5] ={0};\r
-\r
-       H2C_Parameter[0] = byte1;       \r
-       H2C_Parameter[1] = byte2;       \r
-       H2C_Parameter[2] = byte3;\r
-       H2C_Parameter[3] = byte4;\r
-       H2C_Parameter[4] = byte5;\r
-\r
-       pCoexDm->psTdmaPara[0] = byte1;\r
-       pCoexDm->psTdmaPara[1] = byte2;\r
-       pCoexDm->psTdmaPara[2] = byte3;\r
-       pCoexDm->psTdmaPara[3] = byte4;\r
-       pCoexDm->psTdmaPara[4] = byte5;\r
-       \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n", \r
-               H2C_Parameter[0], \r
-               H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
-\r
-       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);\r
-}\r
-\r
 VOID\r
 halbtc8812a1ant_SetLpsRpwm(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8812a1ant_SetLpsRpwm(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -867,16 +1123,13 @@ halbtc8812a1ant_LpsRpwm(
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preLps/curLps=0x%x/0x%x, preRpwm/curRpwm=0x%x/0x%x!!\n", \r
-                       pCoexDm->preLps, pCoexDm->curLps, pCoexDm->preRpwm, pCoexDm->curRpwm));\r
-\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
@@ -889,53 +1142,123 @@ halbtc8812a1ant_LpsRpwm(
        pCoexDm->preRpwm = pCoexDm->curRpwm;\r
 }\r
 \r
        pCoexDm->preRpwm = pCoexDm->curRpwm;\r
 }\r
 \r
+VOID\r
+halbtc8812a1ant_SwMechanism(\r
+       IN      PBTC_COEXIST    pBtCoexist,     \r
+       IN      BOOLEAN                 bLowPenaltyRA\r
+       ) \r
+{\r
+       halbtc8812a1ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);\r
+}\r
+\r
+//to check bForceExec\r
 VOID\r
 halbtc8812a1ant_SetAntPath(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      u1Byte                          antPosType,\r
 VOID\r
 halbtc8812a1ant_SetAntPath(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      u1Byte                          antPosType,\r
+       IN      BOOLEAN                         bForceExec,\r
        IN      BOOLEAN                         bInitHwCfg,\r
        IN      BOOLEAN                         bWifiOff\r
        )\r
 {\r
        u1Byte                  u1Tmp=0;\r
        IN      BOOLEAN                         bInitHwCfg,\r
        IN      BOOLEAN                         bWifiOff\r
        )\r
 {\r
        u1Byte                  u1Tmp=0;\r
+\r
+       pCoexDm->curAntPosType = antPosType;\r
        \r
        if(bInitHwCfg)\r
        {\r
                pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb3, 0x77);\r
        \r
        if(bInitHwCfg)\r
        {\r
                pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb3, 0x77);\r
-               \r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x900, 0x00000400);\r
                pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x900, 0x00000400);\r
-               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76d, 0x1);\r
+               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76d, 0x1);\r
        }\r
        else if(bWifiOff)\r
        {\r
        }\r
        else if(bWifiOff)\r
        {\r
+               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb3, 0x77);\r
+               u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xcb7);\r
+               u1Tmp &= ~BIT3;\r
+               u1Tmp |= BIT2;\r
+               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb7, u1Tmp);\r
+       }\r
 \r
 \r
+       if(bForceExec || (pCoexDm->curAntPosType != pCoexDm->preAntPosType))\r
+       {               \r
+               // ext switch setting\r
+               switch(antPosType)\r
+               {\r
+                       case BTC_ANT_PATH_WIFI:\r
+                               u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xcb7);\r
+                               u1Tmp |= BIT3;\r
+                               u1Tmp &= ~BIT2;                 \r
+                               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb7, u1Tmp);\r
+                               break;\r
+                       case BTC_ANT_PATH_BT:\r
+                               u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xcb7);\r
+                               u1Tmp &= ~BIT3;\r
+                               u1Tmp |= BIT2;\r
+                               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb7, u1Tmp);\r
+                               break;\r
+                       default:\r
+                       case BTC_ANT_PATH_PTA:\r
+                               u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xcb7);\r
+                               u1Tmp |= BIT3;\r
+                               u1Tmp &= ~BIT2;                 \r
+                               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb7, u1Tmp);\r
+                               break;\r
+               }\r
        }\r
        \r
        }\r
        \r
-       // ext switch setting\r
-       switch(antPosType)\r
-       {\r
-               case BTC_ANT_PATH_WIFI:\r
-                       u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xcb7);\r
-                       u1Tmp |= BIT3;\r
-                       u1Tmp &= ~BIT2;                 \r
-                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb7, u1Tmp);\r
-                       break;\r
-               case BTC_ANT_PATH_BT:\r
-                       u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xcb7);\r
-                       u1Tmp &= ~BIT3;\r
-                       u1Tmp |= BIT2;\r
-                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb7, u1Tmp);\r
-                       break;\r
-               default:\r
-               case BTC_ANT_PATH_PTA:\r
-                       u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xcb7);\r
-                       u1Tmp |= BIT3;\r
-                       u1Tmp &= ~BIT2;                 \r
-                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb7, u1Tmp);\r
-                       break;\r
+       pCoexDm->preAntPosType = pCoexDm->curAntPosType;\r
+}\r
+\r
+VOID\r
+halbtc8812a1ant_SetFwPstdma(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                  byte1,\r
+       IN      u1Byte                  byte2,\r
+       IN      u1Byte                  byte3,\r
+       IN      u1Byte                  byte4,\r
+       IN      u1Byte                  byte5\r
+       )\r
+{\r
+       u1Byte                  H2C_Parameter[5] ={0};\r
+       u1Byte                  realByte1=byte1, realByte5=byte5;\r
+       BOOLEAN                 bApEnable=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+\r
+       if(bApEnable)\r
+       {\r
+               if(byte1&BIT4 && !(byte1&BIT5))\r
+               {                       \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], FW for 1Ant AP mode\n"));\r
+                       realByte1 &= ~BIT4;\r
+                       realByte1 |= BIT5;\r
+\r
+                       realByte5 |= BIT5;\r
+                       realByte5 &= ~BIT6;\r
+               }\r
        }\r
        }\r
+\r
+       H2C_Parameter[0] = realByte1;   \r
+       H2C_Parameter[1] = byte2;       \r
+       H2C_Parameter[2] = byte3;\r
+       H2C_Parameter[3] = byte4;\r
+       H2C_Parameter[4] = realByte5;\r
+\r
+       pCoexDm->psTdmaPara[0] = realByte1;\r
+       pCoexDm->psTdmaPara[1] = byte2;\r
+       pCoexDm->psTdmaPara[2] = byte3;\r
+       pCoexDm->psTdmaPara[3] = byte4;\r
+       pCoexDm->psTdmaPara[4] = realByte5;\r
+       \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], PS-TDMA H2C cmd =0x%x%08x\n", \r
+               H2C_Parameter[0], \r
+               H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
+\r
+       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);\r
 }\r
 \r
 }\r
 \r
+\r
 VOID\r
 halbtc8812a1ant_PsTdma(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8812a1ant_PsTdma(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -944,52 +1267,92 @@ halbtc8812a1ant_PsTdma(
        IN      u1Byte                  type\r
        )\r
 {\r
        IN      u1Byte                  type\r
        )\r
 {\r
-       BOOLEAN                 bTurnOnByCnt=FALSE;\r
+       PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       BOOLEAN                 bTurnOnByCnt=FALSE, bWifiBusy=FALSE, bWiFiNoisy=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0, rssiAdjustVal=0;\r
        u1Byte                  psTdmaTypeByCnt=0, rssiAdjustVal=0;\r
+       u1Byte                  psTdmaByte4Val = 0x50, psTdmaByte0Val = 0x51, psTdmaByte3Val =  0x10;\r
+       s1Byte                  nWiFiDurationAdjust = 0x0;\r
+       static BOOLEAN   bPreWifiBusy=FALSE;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
-               (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
-       if(!bForceExec)\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);      \r
+\r
+       if (bWifiBusy != bPreWifiBusy)\r
        {\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
-                       pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
-                       pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
+                bForceExec = TRUE;     \r
+                bPreWifiBusy = bWifiBusy;\r
+       }\r
 \r
 \r
+       if (pCoexDm->bCurPsTdmaOn)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
+                       pCoexDm->curPsTdma));\r
+       }\r
+       else\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** TDMA(off, %d) **********\n", \r
+                       pCoexDm->curPsTdma));\r
+       }\r
+                       \r
+       if(!bForceExec)\r
+       {\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
        }\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
        }\r
-       if(bTurnOn)\r
+\r
+       if (pCoexSta->nScanAPNum <= 5)\r
+               nWiFiDurationAdjust = 2;\r
+       else if  (pCoexSta->nScanAPNum >= 40)\r
+               nWiFiDurationAdjust = -15;      \r
+       else if  (pCoexSta->nScanAPNum >= 20)\r
+               nWiFiDurationAdjust = -10;      \r
+       \r
+       if (!pCoexSta->bForceLpsOn)  //only for A2DP-only case 1/2/9/11 while wifi noisy threshold > 30\r
        {\r
        {\r
+               psTdmaByte0Val = 0x61;  //no null-pkt\r
+               psTdmaByte3Val = 0x11; // no tx-pause at BT-slot\r
+               psTdmaByte4Val = 0x10; // 0x778 = d/1 toggle\r
+       }\r
+       \r
+       if (  (type == 3) || (type == 13) || (type == 14) )\r
+       {\r
+               psTdmaByte4Val = psTdmaByte4Val & 0xbf;  //no dynamic slot for multi-profile\r
+       \r
+               if (!bWifiBusy)\r
+                psTdmaByte4Val = psTdmaByte4Val | 0x1;  //0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts)\r
+       }\r
+       \r
+       if (pBtLinkInfo->bSlaveRole == TRUE)\r
+               psTdmaByte4Val = psTdmaByte4Val | 0x1;  //0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts)\r
+               \r
+       if(bTurnOn)\r
+       {        \r
                switch(type)\r
                {\r
                        default:\r
                switch(type)\r
                {\r
                        default:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1a, 0x1a, 0x0, 0x50);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x51, 0x1a, 0x1a, 0x0, psTdmaByte4Val);\r
                                break;\r
                        case 1:\r
                                break;\r
                        case 1:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1a, 0x1a, 0x0, 0x50);\r
-                               rssiAdjustVal = 11;\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x3a+nWiFiDurationAdjust, 0x03, psTdmaByte3Val, psTdmaByte4Val);                                                                \r
                                break;\r
                        case 2:\r
                                break;\r
                        case 2:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x12, 0x12, 0x0, 0x50);\r
-                               rssiAdjustVal = 14;\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x2d+nWiFiDurationAdjust, 0x03, psTdmaByte3Val, psTdmaByte4Val);                                                        \r
                                break;\r
                        case 3:\r
                                break;\r
                        case 3:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x40);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x51, 0x1d, 0x1d, 0x0, psTdmaByte4Val);\r
                                break;\r
                        case 4:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x14, 0x0);\r
                                break;\r
                        case 4:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x14, 0x0);\r
-                               rssiAdjustVal = 17;\r
                                break;\r
                        case 5:\r
                                break;\r
                        case 5:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x61, 0x15, 0x3, 0x31, 0x0);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x61, 0x15, 0x3, 0x11, 0x11);\r
                                break;\r
                        case 6:\r
                                break;\r
                        case 6:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0x3, 0x0, 0x0);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x61, 0x20, 0x3, 0x11, 0x11);\r
                                break;\r
                        case 7:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x13, 0xc, 0x5, 0x0, 0x0);\r
                                break;\r
                        case 7:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x13, 0xc, 0x5, 0x0, 0x0);\r
@@ -998,61 +1361,55 @@ halbtc8812a1ant_PsTdma(
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0);\r
                                break;\r
                        case 9: \r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0);\r
                                break;\r
                        case 9: \r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xd3, 0xa, 0xa, 0x0, 0x50);\r
-                               rssiAdjustVal = 18;\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x21, 0x3, psTdmaByte3Val, psTdmaByte4Val);                             \r
                                break;\r
                        case 10:        \r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0xa, 0x0, 0x40);\r
                                break;\r
                        case 11:        \r
                                break;\r
                        case 10:        \r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0xa, 0x0, 0x40);\r
                                break;\r
                        case 11:        \r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x5, 0x5, 0x0, 0x50);\r
-                               rssiAdjustVal = 20;\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, psTdmaByte0Val, 0x21, 0x03, psTdmaByte3Val, psTdmaByte4Val);                    \r
                                break;\r
                        case 12:\r
                                break;\r
                        case 12:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xeb, 0xa, 0x3, 0x31, 0x18);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x51, 0x0a, 0x0a, 0x0, 0x50);\r
+                               break;\r
+                       case 13:\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x51, 0x12, 0x12, 0x0, psTdmaByte4Val);\r
+                               break;\r
+                       case 14:\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x51, 0x21, 0x3, 0x10, psTdmaByte4Val);\r
                                break;\r
                                break;\r
-\r
                        case 15:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0x3, 0x8, 0x0);\r
                                break;\r
                        case 16:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x10, 0x0);\r
                        case 15:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0x3, 0x8, 0x0);\r
                                break;\r
                        case 16:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x10, 0x0);\r
-                               rssiAdjustVal = 18;\r
                                break;\r
                                break;\r
-\r
                        case 18:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0);\r
                        case 18:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0);\r
-                               rssiAdjustVal = 14;\r
                                break;                  \r
                                break;                  \r
-                               \r
                        case 20:\r
                        case 20:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x13, 0x25, 0x25, 0x0, 0x0);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x61, 0x3f, 0x03, 0x11, 0x10);\r
                                break;\r
                        case 21:\r
                                break;\r
                        case 21:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x93, 0x20, 0x3, 0x10, 0x40);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x61, 0x25, 0x03, 0x11, 0x11);\r
                                break;\r
                        case 22:\r
                                break;\r
                        case 22:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x13, 0x8, 0x8, 0x0, 0x40);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x61, 0x25, 0x03, 0x11, 0x10);\r
                                break;\r
                        case 23:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x18);\r
                                break;\r
                        case 23:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x18);\r
-                               rssiAdjustVal = 22;\r
                                break;\r
                        case 24:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x3, 0x31, 0x18);\r
                                break;\r
                        case 24:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x3, 0x31, 0x18);\r
-                               rssiAdjustVal = 22;\r
                                break;\r
                        case 25:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0x3, 0x31, 0x18);\r
                                break;\r
                        case 25:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0x3, 0x31, 0x18);\r
-                               rssiAdjustVal = 22;\r
                                break;\r
                        case 26:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0x3, 0x31, 0x18);\r
                                break;\r
                        case 26:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0x3, 0x31, 0x18);\r
-                               rssiAdjustVal = 22;\r
                                break;\r
                        case 27:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x98);\r
                                break;\r
                        case 27:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x98);\r
-                               rssiAdjustVal = 22;\r
                                break;\r
                        case 28:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x69, 0x25, 0x3, 0x31, 0x0);\r
                                break;\r
                        case 28:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x69, 0x25, 0x3, 0x31, 0x0);\r
@@ -1061,72 +1418,56 @@ halbtc8812a1ant_PsTdma(
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xab, 0x1a, 0x1a, 0x1, 0x10);\r
                                break;\r
                        case 30:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xab, 0x1a, 0x1a, 0x1, 0x10);\r
                                break;\r
                        case 30:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x93, 0x15, 0x3, 0x14, 0x0);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x51, 0x30, 0x3, 0x10, 0x10);\r
                                break;\r
                        case 31:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1a, 0x1a, 0, 0x58);\r
                                break;\r
                        case 32:\r
                                break;\r
                        case 31:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1a, 0x1a, 0, 0x58);\r
                                break;\r
                        case 32:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xab, 0xa, 0x3, 0x31, 0x90);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x61, 0x35, 0x3, 0x11, 0x11);\r
                                break;\r
                        case 33:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xa3, 0x25, 0x3, 0x30, 0x90);\r
                                break;\r
                        case 34:\r
                                break;\r
                        case 33:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xa3, 0x25, 0x3, 0x30, 0x90);\r
                                break;\r
                        case 34:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1a, 0x1a, 0x0, 0x10);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x53, 0x1a, 0x1a, 0x0, 0x10);\r
                                break;\r
                        case 35:\r
                                break;\r
                        case 35:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x0, 0x10);\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x63, 0x1a, 0x1a, 0x0, 0x10);\r
                                break;\r
                        case 36:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x12, 0x3, 0x14, 0x50);\r
                                break;\r
                                break;\r
                        case 36:\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0xd3, 0x12, 0x3, 0x14, 0x50);\r
                                break;\r
-                       case 37:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x53, 0x25, 0x3, 0x10, 0x50);\r
-                               break;\r
+                       case 40: // SoftAP only with no sta associated,BT disable ,TDMA mode for power saving\r
+                               /* here softap mode screen off will cost 70-80mA for phone */\r
+                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x23, 0x18, 0x00, 0x10, 0x24);\r
+                               break;  \r
                }\r
        }\r
        else\r
                }\r
        }\r
        else\r
-       {\r
+       {               \r
+\r
                // disable PS tdma\r
                switch(type)\r
                {\r
                // disable PS tdma\r
                switch(type)\r
                {\r
-                       case 8:\r
+                       case 8: //PTA Control\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x8, 0x0, 0x0, 0x0, 0x0);\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x8, 0x0, 0x0, 0x0, 0x0);\r
-                               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FALSE, FALSE);\r
                                break;\r
                        case 0:\r
                                break;\r
                        case 0:\r
-                       default:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);\r
-                               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, FALSE);\r
-                               break;\r
-                       case 9:\r
+                       default:  //Software control, Antenna at BT side\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);\r
                                halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);\r
-                               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_WIFI, FALSE, FALSE);\r
-                               break;\r
-                       case 10:\r
-                               halbtc8812a1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x8, 0x0);\r
-                               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, FALSE);\r
                                break;\r
                }\r
        }\r
        rssiAdjustVal =0;\r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE, &rssiAdjustVal);\r
 \r
                                break;\r
                }\r
        }\r
        rssiAdjustVal =0;\r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE, &rssiAdjustVal);\r
 \r
+\r
        // update pre state\r
        pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;\r
        pCoexDm->prePsTdma = pCoexDm->curPsTdma;\r
 }\r
 \r
        // update pre state\r
        pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;\r
        pCoexDm->prePsTdma = pCoexDm->curPsTdma;\r
 }\r
 \r
-VOID\r
-halbtc8812a1ant_CoexAllOff(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
-       )\r
-{\r
-       // hw all off\r
-       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
-}\r
-\r
 BOOLEAN\r
 halbtc8812a1ant_IsCommonAction(\r
        IN      PBTC_COEXIST            pBtCoexist\r
 BOOLEAN\r
 halbtc8812a1ant_IsCommonAction(\r
        IN      PBTC_COEXIST            pBtCoexist\r
@@ -1140,40 +1481,59 @@ halbtc8812a1ant_IsCommonAction(
        if(!bWifiConnected && \r
                BT_8812A_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
        {\r
        if(!bWifiConnected && \r
                BT_8812A_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT non connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT non connected-idle!!\n"));\r
+               \r
+               //halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(bWifiConnected && \r
                (BT_8812A_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(bWifiConnected && \r
                (BT_8812A_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
+\r
+               //halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(!bWifiConnected && \r
                (BT_8812A_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(!bWifiConnected && \r
                (BT_8812A_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT connected-idle!!\n"));\r
+\r
+               //halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(bWifiConnected && \r
                (BT_8812A_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(bWifiConnected && \r
                (BT_8812A_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
+\r
+               //halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(!bWifiConnected && \r
                (BT_8812A_1ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus) )\r
        {\r
 \r
                bCommon = TRUE;\r
        }\r
        else if(!bWifiConnected && \r
                (BT_8812A_1ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT Busy!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT Busy!!\n"));\r
+\r
+               //halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
                \r
                bCommon = TRUE;\r
        }\r
        else\r
                \r
                bCommon = TRUE;\r
        }\r
        else\r
-       {       \r
+       {\r
+               if (bWifiBusy)                  \r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
+               }\r
+               else\r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
+               }\r
+               \r
                bCommon = FALSE;\r
        }\r
        \r
                bCommon = FALSE;\r
        }\r
        \r
@@ -1190,8 +1550,15 @@ halbtc8812a1ant_TdmaDurationAdjustForAcl(
        static s4Byte           up,dn,m,n,WaitCount;\r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0, btInfoExt;\r
        static s4Byte           up,dn,m,n,WaitCount;\r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0, btInfoExt;\r
+       static BOOLEAN  bPreWifiBusy=FALSE;\r
+       BOOLEAN                 bWifiBusy = FALSE;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjustForAcl()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TdmaDurationAdjustForAcl()\n"));\r
+\r
+       if(BT_8812A_1ANT_WIFI_STATUS_CONNECTED_BUSY == wifiStatus) \r
+               bWifiBusy = TRUE;\r
+       else\r
+               bWifiBusy = FALSE;              \r
 \r
        if( (BT_8812A_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus) ||\r
                (BT_8812A_1ANT_WIFI_STATUS_CONNECTED_SCAN == wifiStatus) ||\r
 \r
        if( (BT_8812A_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus) ||\r
                (BT_8812A_1ANT_WIFI_STATUS_CONNECTED_SCAN == wifiStatus) ||\r
@@ -1214,11 +1581,11 @@ halbtc8812a1ant_TdmaDurationAdjustForAcl(
                }               \r
                return;\r
        }\r
                }               \r
                return;\r
        }\r
-       \r
-       if(pCoexDm->bResetTdmaAdjust)\r
+\r
+       if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
        {\r
-               pCoexDm->bResetTdmaAdjust = FALSE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
+               pCoexDm->bAutoTdmaAdjust = TRUE;\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
 \r
                halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                pCoexDm->psTdmaDuAdjType = 2;\r
 \r
                halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                pCoexDm->psTdmaDuAdjType = 2;\r
@@ -1235,9 +1602,10 @@ halbtc8812a1ant_TdmaDurationAdjustForAcl(
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
                btInfoExt = pCoexSta->btInfoExt;\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
                btInfoExt = pCoexSta->btInfoExt;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
-                       up, dn, m, n, WaitCount));\r
+\r
+               if ( (pCoexSta->lowPriorityTx) > 1150 ||  (pCoexSta->lowPriorityRx) > 1250 )\r
+                       retryCount++;   \r
+               \r
                result = 0;\r
                WaitCount++; \r
                  \r
                result = 0;\r
                WaitCount++; \r
                  \r
@@ -1256,7 +1624,7 @@ halbtc8812a1ant_TdmaDurationAdjustForAcl(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -1282,7 +1650,7 @@ halbtc8812a1ant_TdmaDurationAdjustForAcl(
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -1300,7 +1668,7 @@ halbtc8812a1ant_TdmaDurationAdjustForAcl(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
 \r
                if(result == -1)\r
                }\r
 \r
                if(result == -1)\r
@@ -1351,6 +1719,19 @@ halbtc8812a1ant_TdmaDurationAdjustForAcl(
                                pCoexDm->psTdmaDuAdjType = 1;\r
                        }\r
                }\r
                                pCoexDm->psTdmaDuAdjType = 1;\r
                        }\r
                }\r
+               else      //no change\r
+               {\r
+                       /* Bryant Modify        \r
+                       if(bWifiBusy != bPreWifiBusy)  //if busy / idle change\r
+                       {\r
+                               bPreWifiBusy = bWifiBusy;\r
+                               halbtc8812a1ant_PsTdma(pBtCoexist, FORCE_EXEC, TRUE, pCoexDm->curPsTdma);\r
+                       }\r
+                       */\r
+               \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
+                               pCoexDm->curPsTdma));\r
+               }\r
 \r
                if( pCoexDm->curPsTdma != 1 &&\r
                        pCoexDm->curPsTdma != 2 &&\r
 \r
                if( pCoexDm->curPsTdma != 1 &&\r
                        pCoexDm->curPsTdma != 2 &&\r
@@ -1363,41 +1744,6 @@ halbtc8812a1ant_TdmaDurationAdjustForAcl(
        }\r
 }\r
 \r
        }\r
 }\r
 \r
-u1Byte\r
-halbtc8812a1ant_PsTdmaTypeByWifiRssi(\r
-       IN      s4Byte  wifiRssi,\r
-       IN      s4Byte  preWifiRssi,\r
-       IN      u1Byte  wifiRssiThresh\r
-       )\r
-{\r
-       u1Byte  psTdmaType=0;\r
-       \r
-       if(wifiRssi > preWifiRssi)\r
-       {\r
-               if(wifiRssi > (wifiRssiThresh+5))\r
-               {\r
-                       psTdmaType = 26;\r
-               }\r
-               else\r
-               {\r
-                       psTdmaType = 25;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if(wifiRssi > wifiRssiThresh)\r
-               {\r
-                       psTdmaType = 26;\r
-               }\r
-               else\r
-               {\r
-                       psTdmaType = 25;\r
-               }\r
-       }\r
-\r
-       return psTdmaType;\r
-}\r
-\r
 VOID\r
 halbtc8812a1ant_PsTdmaCheckForPowerSaveState(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8812a1ant_PsTdmaCheckForPowerSaveState(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -1417,7 +1763,7 @@ halbtc8812a1ant_PsTdmaCheckForPowerSaveState(
                else\r
                {\r
                        // will leave LPS state, turn off psTdma first\r
                else\r
                {\r
                        // will leave LPS state, turn off psTdma first\r
-                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                }\r
        }\r
        else                                            // NO PS state\r
                }\r
        }\r
        else                                            // NO PS state\r
@@ -1425,7 +1771,7 @@ halbtc8812a1ant_PsTdmaCheckForPowerSaveState(
                if(bNewPsState)\r
                {\r
                        // will enter LPS state, turn off psTdma first\r
                if(bNewPsState)\r
                {\r
                        // will enter LPS state, turn off psTdma first\r
-                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
@@ -1443,7 +1789,7 @@ halbtc8812a1ant_PowerSaveState(
        )\r
 {\r
        BOOLEAN         bLowPwrDisable=FALSE;\r
        )\r
 {\r
        BOOLEAN         bLowPwrDisable=FALSE;\r
-\r
+       \r
        switch(psType)\r
        {\r
                case BTC_PS_WIFI_NATIVE:\r
        switch(psType)\r
        {\r
                case BTC_PS_WIFI_NATIVE:\r
@@ -1451,45 +1797,36 @@ halbtc8812a1ant_PowerSaveState(
                        bLowPwrDisable = FALSE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);\r
                        bLowPwrDisable = FALSE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = FALSE;\r
                        break;\r
                case BTC_PS_LPS_ON:\r
                        halbtc8812a1ant_PsTdmaCheckForPowerSaveState(pBtCoexist, TRUE);\r
                        break;\r
                case BTC_PS_LPS_ON:\r
                        halbtc8812a1ant_PsTdmaCheckForPowerSaveState(pBtCoexist, TRUE);\r
-                       halbtc8812a1ant_LpsRpwm(pBtCoexist, NORMAL_EXEC, lpsVal, rpwmVal);\r
+                       halbtc8812a1ant_LpsRpwm(pBtCoexist, NORMAL_EXEC, lpsVal, rpwmVal);                      \r
                        // when coex force to enter LPS, do not enter 32k low power.\r
                        bLowPwrDisable = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
                        // when coex force to enter LPS, do not enter 32k low power.\r
                        bLowPwrDisable = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
-                       // power save must executed before psTdma.\r
+                       // power save must executed before psTdma.                      \r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_ENTER_LPS, NULL);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_ENTER_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = TRUE;\r
                        break;\r
                case BTC_PS_LPS_OFF:\r
                        halbtc8812a1ant_PsTdmaCheckForPowerSaveState(pBtCoexist, FALSE);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);\r
                        break;\r
                case BTC_PS_LPS_OFF:\r
                        halbtc8812a1ant_PsTdmaCheckForPowerSaveState(pBtCoexist, FALSE);\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = FALSE;\r
                        break;\r
                default:\r
                        break;\r
        }\r
 }\r
 \r
                        break;\r
                default:\r
                        break;\r
        }\r
 }\r
 \r
-\r
-VOID\r
-halbtc8812a1ant_CoexUnder5G(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
-       )\r
-{\r
-       halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
-       \r
-       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 10);\r
-\r
-       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
-}\r
-\r
 VOID\r
 halbtc8812a1ant_ActionWifiOnly(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 halbtc8812a1ant_ActionWifiOnly(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
-       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 9);      \r
+       halbtc8812a1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);\r
+       halbtc8812a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);\r
+       halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1497,17 +1834,10 @@ halbtc8812a1ant_MonitorBtEnableDisable(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       PBTC_STACK_INFO pStackInfo=&pBtCoexist->stackInfo;\r
        static BOOLEAN  bPreBtDisabled=FALSE;\r
        static BOOLEAN  bPreBtDisabled=FALSE;\r
-       static u4Byte   btDisableCnt=0;\r
+       static u4Byte           btDisableCnt=0;\r
        BOOLEAN                 bBtActive=TRUE, bBtDisabled=FALSE;\r
 \r
        BOOLEAN                 bBtActive=TRUE, bBtDisabled=FALSE;\r
 \r
-       // only 8812a need to consider if core stack is installed.\r
-       if(!pStackInfo->hciVersion)\r
-       {\r
-               bBtActive = FALSE;\r
-       }\r
-\r
        // This function check if bt is disabled\r
 \r
        if(     pCoexSta->highPriorityTx == 0 &&\r
        // This function check if bt is disabled\r
 \r
        if(     pCoexSta->highPriorityTx == 0 &&\r
@@ -1529,24 +1859,24 @@ halbtc8812a1ant_MonitorBtEnableDisable(
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt all counters=0, %d times!!\n", \r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is disabled !!\n"));\r
                        halbtc8812a1ant_ActionWifiOnly(pBtCoexist);\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                        halbtc8812a1ant_ActionWifiOnly(pBtCoexist);\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n", \r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
@@ -1568,18 +1898,23 @@ halbtc8812a1ant_MonitorBtEnableDisable(
 //=============================================\r
 \r
 // SCO only or SCO+PAN(HS)\r
 //=============================================\r
 \r
 // SCO only or SCO+PAN(HS)\r
+\r
+/*\r
 VOID\r
 halbtc8812a1ant_ActionSco(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 halbtc8812a1ant_ActionSco(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8812a1ant_SwMechanism(pBtCoexist, TRUE);\r
 }\r
 \r
 }\r
 \r
+\r
 VOID\r
 halbtc8812a1ant_ActionHid(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 halbtc8812a1ant_ActionHid(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8812a1ant_SwMechanism(pBtCoexist, TRUE);\r
 }\r
 \r
 //A2DP only / PAN(EDR) only/ A2DP+PAN(HS)\r
 }\r
 \r
 //A2DP only / PAN(EDR) only/ A2DP+PAN(HS)\r
@@ -1588,6 +1923,7 @@ halbtc8812a1ant_ActionA2dp(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1595,6 +1931,7 @@ halbtc8812a1ant_ActionA2dpPanHs(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1602,6 +1939,7 @@ halbtc8812a1ant_ActionPanEdr(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
 }\r
 \r
 //PAN(HS) only\r
 }\r
 \r
 //PAN(HS) only\r
@@ -1610,6 +1948,7 @@ halbtc8812a1ant_ActionPanHs(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
 }\r
 \r
 //PAN(EDR)+A2DP\r
 }\r
 \r
 //PAN(EDR)+A2DP\r
@@ -1618,6 +1957,7 @@ halbtc8812a1ant_ActionPanEdrA2dp(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1625,6 +1965,7 @@ halbtc8812a1ant_ActionPanEdrHid(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8812a1ant_SwMechanism(pBtCoexist, TRUE);\r
 }\r
 \r
 // HID+A2DP+PAN(EDR)\r
 }\r
 \r
 // HID+A2DP+PAN(EDR)\r
@@ -1633,6 +1974,7 @@ halbtc8812a1ant_ActionHidA2dpPanEdr(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8812a1ant_SwMechanism(pBtCoexist, TRUE);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1640,69 +1982,78 @@ halbtc8812a1ant_ActionHidA2dp(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       halbtc8812a1ant_SwMechanism(pBtCoexist, TRUE);\r
 }\r
 \r
 }\r
 \r
+*/\r
+\r
 //=============================================\r
 //\r
 //     Non-Software Coex Mechanism start\r
 //\r
 //=============================================\r
 //=============================================\r
 //\r
 //     Non-Software Coex Mechanism start\r
 //\r
 //=============================================\r
-\r
 VOID\r
 VOID\r
-halbtc8812a1ant_ActionHs(\r
+halbtc8812a1ant_ActionWifiMultiPort(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BOOLEAN                 bHsConnecting=FALSE;\r
-\r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_CONNECTING, &bHsConnecting);\r
-\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action for HS, bHsConnecting=%d!!!\n", bHsConnecting));\r
+       halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       \r
        halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
        halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
+       halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
+       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+}\r
 \r
 \r
-       if(bHsConnecting)\r
-       {\r
-               halbtc8812a1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 3);\r
-       }\r
-       else\r
-       {\r
-               if((pCoexSta->highPriorityTx+pCoexSta->highPriorityRx+\r
-                       pCoexSta->lowPriorityTx+pCoexSta->lowPriorityRx)<=1200)\r
-                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 3);\r
-               else\r
-                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 4);   \r
-       }\r
+VOID\r
+halbtc8812a1ant_ActionHs(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
+       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
 }\r
 \r
 VOID\r
 halbtc8812a1ant_ActionBtInquiry(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 }\r
 \r
 VOID\r
 halbtc8812a1ant_ActionBtInquiry(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
-{\r
+{      \r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
-       BOOLEAN                 bWifiConnected=FALSE;\r
-       \r
+       BOOLEAN                 bWifiConnected=FALSE, bApEnable=FALSE, bWifiBusy=FALSE, bBtBusy=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);\r
 \r
 \r
-       if(!bWifiConnected)\r
+       if((!bWifiConnected) && (!pCoexSta->bWiFiIsHighPriTask))\r
        {\r
                halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
        {\r
                halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
-               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);          \r
        }\r
        }\r
-       else if( (pBtLinkInfo->bScoExist) ||\r
-                       (pBtLinkInfo->bHidOnly) )\r
+       else if((pBtLinkInfo->bScoExist) || (pBtLinkInfo->bHidExist) || (pBtLinkInfo->bA2dpExist))\r
        {\r
        {\r
-               // SCO/HID-only busy\r
+               // SCO/HID/A2DP  busy\r
                halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
                halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
-               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 1);\r
+\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
+       }\r
+       else if ((pBtLinkInfo->bPanExist) || (bWifiBusy))\r
+       {\r
+               halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 20);              \r
+               \r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x0);\r
-               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 30);\r
-               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+               halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
+               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -1712,13 +2063,24 @@ halbtc8812a1ant_ActionBtScoHidOnlyBusy(
        IN      u1Byte                          wifiStatus\r
        )\r
 {\r
        IN      u1Byte                          wifiStatus\r
        )\r
 {\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       BOOLEAN bWifiConnected=FALSE;\r
+       u1Byte  wifiRssiState=BTC_RSSI_STATE_HIGH;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+\r
        // tdma and coex table\r
        // tdma and coex table\r
-       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
 \r
 \r
-       if(BT_8812A_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus)\r
-               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);          \r
-       else\r
-               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+       if(pBtLinkInfo->bScoExist)\r
+       {\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
+       }\r
+       else //HID\r
+       {\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
+       }\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1727,37 +2089,68 @@ halbtc8812a1ant_ActionWifiConnectedBtAclBusy(
        IN      u1Byte                          wifiStatus\r
        )\r
 {\r
        IN      u1Byte                          wifiStatus\r
        )\r
 {\r
+       u1Byte          btRssiState;\r
+       \r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       btRssiState = halbtc8812a1ant_BtRssiState(2, 28, 0);    \r
+\r
+       if ( (pCoexSta->lowPriorityRx >= 950)  && (!pCoexSta->bUnderIps) )\r
+       {\r
+               pBtLinkInfo->bSlaveRole = TRUE;\r
+       }\r
+       else\r
+       {\r
+               pBtLinkInfo->bSlaveRole = FALSE;\r
+       }\r
 \r
 \r
-       if(pBtLinkInfo->bHidOnly)\r
+       if(pBtLinkInfo->bHidOnly)  //HID\r
        {\r
                halbtc8812a1ant_ActionBtScoHidOnlyBusy(pBtCoexist, wifiStatus);\r
        {\r
                halbtc8812a1ant_ActionBtScoHidOnlyBusy(pBtCoexist, wifiStatus);\r
-               pCoexDm->bResetTdmaAdjust = TRUE;\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
                return;\r
        }\r
                return;\r
        }\r
-       else if( (pBtLinkInfo->bA2dpOnly) ||\r
-                        (pBtLinkInfo->bHidExist&&pBtLinkInfo->bA2dpExist) )\r
+       else if(pBtLinkInfo->bA2dpOnly)  //A2DP         \r
        {\r
        {\r
-               halbtc8812a1ant_TdmaDurationAdjustForAcl(pBtCoexist, wifiStatus);\r
+               if(BT_8812A_1ANT_WIFI_STATUS_CONNECTED_IDLE == wifiStatus)\r
+               {\r
+                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
+                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+                       pCoexDm->bAutoTdmaAdjust = FALSE;\r
+               }\r
+               else\r
+               {\r
+                       halbtc8812a1ant_TdmaDurationAdjustForAcl(pBtCoexist, wifiStatus);\r
+                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+                       pCoexDm->bAutoTdmaAdjust = TRUE;\r
+               }\r
        }\r
        }\r
-       else if( (pBtLinkInfo->bPanOnly) ||\r
-                       (pBtLinkInfo->bHidExist&&pBtLinkInfo->bPanExist) )\r
+       else if ( ((pBtLinkInfo->bA2dpExist) && (pBtLinkInfo->bPanExist)) ||\r
+                      (pBtLinkInfo->bHidExist&&pBtLinkInfo->bA2dpExist&&pBtLinkInfo->bPanExist) ) //A2DP+PAN(OPP,FTP), HID+A2DP+PAN(OPP,FTP)\r
        {\r
        {\r
-               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
-               pCoexDm->bResetTdmaAdjust = TRUE;\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
        }\r
        }\r
-       else\r
+       else if(pBtLinkInfo->bHidExist&&pBtLinkInfo->bA2dpExist)  //HID+A2DP\r
        {\r
        {\r
-               if( (BT_8812A_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus) ||\r
-                       (BT_8812A_1ANT_WIFI_STATUS_CONNECTED_SCAN == wifiStatus) ||\r
-                       (BT_8812A_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT == wifiStatus) )\r
-                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
-               else\r
-                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
-               pCoexDm->bResetTdmaAdjust = TRUE;\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
        }\r
        }\r
-               \r
-       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 1);\r
+       else if( (pBtLinkInfo->bPanOnly) || (pBtLinkInfo->bHidExist&&pBtLinkInfo->bPanExist) ) //PAN(OPP,FTP), HID+PAN(OPP,FTP)                 \r
+       {\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+       }\r
+       else\r
+       {               \r
+               //BT no-profile busy (0x9)\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);      \r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+       }       \r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1768,21 +2161,81 @@ halbtc8812a1ant_ActionWifiNotConnected(
        // power save state\r
        halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        // power save state\r
        halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
-       // tdma and coex table  \r
-       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
+       // tdma and coex table\r
+       halbtc8812a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);\r
+       halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
        halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 }\r
 \r
 VOID\r
        halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 }\r
 \r
 VOID\r
-halbtc8812a1ant_ActionWifiNotConnectedAssoAuthScan(\r
+halbtc8812a1ant_ActionWifiNotConnectedScan(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       \r
        halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        // tdma and coex table\r
        halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        // tdma and coex table\r
-       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
-       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+       if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
+       {\r
+               if (pBtLinkInfo->bA2dpExist)\r
+               {\r
+                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
+                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
+               else if (pBtLinkInfo->bA2dpExist && pBtLinkInfo->bPanExist)\r
+               {\r
+                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
+                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
+               else\r
+               {\r
+                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 20);\r
+                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
+       }\r
+       else if( (BT_8812A_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
+                       (BT_8812A_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
+       {\r
+               halbtc8812a1ant_ActionBtScoHidOnlyBusy(pBtCoexist,\r
+                       BT_8812A_1ANT_WIFI_STATUS_CONNECTED_SCAN);\r
+       }\r
+       else\r
+       {\r
+               //Bryant Add\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
+               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+       }\r
+}\r
+\r
+VOID\r
+halbtc8812a1ant_ActionWifiNotConnectedAssoAuth(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       \r
+       halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+\r
+       // tdma and coex table\r
+       if( (pBtLinkInfo->bScoExist)  || (pBtLinkInfo->bHidExist) ||  (pBtLinkInfo->bA2dpExist) )\r
+       {\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 4);           \r
+       }\r
+       else if (pBtLinkInfo->bPanExist)                        \r
+       {\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 20);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 4);           \r
+       }\r
+       else    \r
+       {               \r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
+               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 2);\r
+       }\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1790,17 +2243,28 @@ halbtc8812a1ant_ActionWifiConnectedScan(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       // power save state\r
-       if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus && !pBtCoexist->btLinkInfo.bHidOnly)\r
-               halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x0);\r
-       else\r
-               halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       \r
+       halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        // tdma and coex table\r
        if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
        {\r
 \r
        // tdma and coex table\r
        if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
        {\r
-               halbtc8812a1ant_ActionWifiConnectedBtAclBusy(pBtCoexist,\r
-                       BT_8812A_1ANT_WIFI_STATUS_CONNECTED_SCAN);\r
+               if (pBtLinkInfo->bA2dpExist)\r
+               {\r
+                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
+                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
+               else if (pBtLinkInfo->bA2dpExist && pBtLinkInfo->bPanExist)\r
+               {\r
+                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
+                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
+               else\r
+               {\r
+                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 20);\r
+                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
+               }\r
        }\r
        else if( (BT_8812A_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
                        (BT_8812A_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
        }\r
        else if( (BT_8812A_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
                        (BT_8812A_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
@@ -1810,7 +2274,9 @@ halbtc8812a1ant_ActionWifiConnectedScan(
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
+               //Bryant Add\r
                halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
+               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
                halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        }\r
 }\r
                halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        }\r
 }\r
@@ -1820,21 +2286,25 @@ halbtc8812a1ant_ActionWifiConnectedSpecialPacket(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       // power save state\r
-       if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus && !pBtCoexist->btLinkInfo.bHidOnly)\r
-               halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x0);\r
-       else\r
-               halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+\r
+       halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        // tdma and coex table\r
 \r
        // tdma and coex table\r
-       if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
+       if((pBtLinkInfo->bScoExist) || (pBtLinkInfo->bHidExist) || (pBtLinkInfo->bA2dpExist))\r
        {\r
        {\r
-               halbtc8812a1ant_ActionWifiConnectedBtAclBusy(pBtCoexist,\r
-                       BT_8812A_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT);\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 32);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
        }\r
        }\r
-       else\r
+       else if(pBtLinkInfo->bPanExist) \r
        {\r
        {\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 20);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);          \r
+       }\r
+       else    \r
+       {               \r
                halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
+               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
                halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        }\r
 }\r
                halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        }\r
 }\r
@@ -1844,25 +2314,18 @@ halbtc8812a1ant_ActionWifiConnected(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BOOLEAN         bWifiConnected=FALSE, bWifiBusy=FALSE;\r
-       BOOLEAN         bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
-       BOOLEAN         bUnder4way=FALSE;\r
+       BOOLEAN         bWifiBusy=FALSE;\r
+       BOOLEAN         bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
+       BOOLEAN         bUnder4way=FALSE, bApEnable=FALSE;\r
        u4Byte          wifiBw;\r
 \r
        u4Byte          wifiBw;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect()===>\n"));\r
-\r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
-       if(!bWifiConnected)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect(), return for wifi not connected<===\n"));\r
-               return;\r
-       }\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect()===>\n"));\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
        if(bUnder4way)\r
        {\r
                halbtc8812a1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
        if(bUnder4way)\r
        {\r
                halbtc8812a1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect(), return for wifi is under 4way<===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect(), return for wifi is under 4way<===\n"));\r
                return;\r
        }\r
        \r
                return;\r
        }\r
        \r
@@ -1871,19 +2334,45 @@ halbtc8812a1ant_ActionWifiConnected(
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
        if(bScan || bLink || bRoam)\r
        {\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
        if(bScan || bLink || bRoam)\r
        {\r
-               halbtc8812a1ant_ActionWifiConnectedScan(pBtCoexist);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect(), return for wifi is under scan<===\n"));\r
+               if(bScan)       \r
+                       halbtc8812a1ant_ActionWifiConnectedScan(pBtCoexist);\r
+               else\r
+                       halbtc8812a1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect(), return for wifi is under scan<===\n"));\r
                return;\r
        }\r
 \r
                return;\r
        }\r
 \r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
+       \r
        // power save state\r
        // power save state\r
-       if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus && !pBtCoexist->btLinkInfo.bHidOnly)\r
-               halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x0);\r
+       if(!bApEnable && BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus && !pBtCoexist->btLinkInfo.bHidOnly)\r
+       {\r
+               if(pBtCoexist->btLinkInfo.bA2dpOnly)    //A2DP\r
+                       {                       \r
+                       if(!bWifiBusy)\r
+                               halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                               \r
+                       else //busy\r
+                       {\r
+                               if  (pCoexSta->nScanAPNum >= BT_8812A_1ANT_WIFI_NOISY_THRESH)  //no force LPS, no PS-TDMA, use pure TDMA\r
+                               {\r
+                                       halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                                                               \r
+                               }\r
+                               else\r
+                               {\r
+                                       halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);                                   \r
+                               }\r
+                       }\r
+               }\r
+               else if ((pCoexSta->bPanExist == FALSE) && (pCoexSta->bA2dpExist == FALSE) && (pCoexSta->bHidExist == FALSE))\r
+                       halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+               else\r
+                       halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
+       }\r
        else\r
                halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        // tdma and coex table\r
        else\r
                halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
 \r
        // tdma and coex table\r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);      \r
        if(!bWifiBusy)\r
        {\r
                if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
        if(!bWifiBusy)\r
        {\r
                if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
@@ -1900,22 +2389,16 @@ halbtc8812a1ant_ActionWifiConnected(
                else\r
                {\r
                        halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                else\r
                {\r
                        halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
-                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+                       halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);\r
+                       if ( (pCoexSta->highPriorityTx) + (pCoexSta->highPriorityRx) <= 60 )\r
+                               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+                       else\r
+                               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);           \r
                }\r
        }\r
        else\r
        {\r
                }\r
        }\r
        else\r
        {\r
-               if(BT_8812A_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
-               {\r
-                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
-                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
-               }\r
-               else if(BT_8812A_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)\r
-               {                       \r
-                       halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
-                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
-               }\r
-               else if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
+               if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus)\r
                {\r
                        halbtc8812a1ant_ActionWifiConnectedBtAclBusy(pBtCoexist,\r
                                BT_8812A_1ANT_WIFI_STATUS_CONNECTED_BUSY);\r
                {\r
                        halbtc8812a1ant_ActionWifiConnectedBtAclBusy(pBtCoexist,\r
                                BT_8812A_1ANT_WIFI_STATUS_CONNECTED_BUSY);\r
@@ -1929,7 +2412,11 @@ halbtc8812a1ant_ActionWifiConnected(
                else \r
                {\r
                        halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
                else \r
                {\r
                        halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 8);\r
-                       halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+                       halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC, FALSE, FALSE);    \r
+                       if ( (pCoexSta->highPriorityTx) + (pCoexSta->highPriorityRx) <= 60 )\r
+                               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+                       else\r
+                               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7); \r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -1939,65 +2426,62 @@ halbtc8812a1ant_RunSwCoexistMechanism(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BOOLEAN                         bWifiUnder5G=FALSE, bWifiBusy=FALSE, bWifiConnected=FALSE;\r
-       u1Byte                          btInfoOriginal=0, btRetryCnt=0;\r
        u1Byte                          algorithm=0;\r
 \r
        u1Byte                          algorithm=0;\r
 \r
-       return;\r
-\r
        algorithm = halbtc8812a1ant_ActionAlgorithm(pBtCoexist);\r
        algorithm = halbtc8812a1ant_ActionAlgorithm(pBtCoexist);\r
-       pCoexDm->curAlgorithm = algorithm;              \r
+       pCoexDm->curAlgorithm = algorithm;\r
 \r
        if(halbtc8812a1ant_IsCommonAction(pBtCoexist))\r
        {\r
 \r
        if(halbtc8812a1ant_IsCommonAction(pBtCoexist))\r
        {\r
+\r
        }\r
        else\r
        {\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8812A_1ANT_COEX_ALGO_SCO:\r
        }\r
        else\r
        {\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8812A_1ANT_COEX_ALGO_SCO:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = SCO.\n"));\r
-                               halbtc8812a1ant_ActionSco(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = SCO.\n"));\r
+                               //halbtc8812a1ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_HID:\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID.\n"));\r
-                               halbtc8812a1ant_ActionHid(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID.\n"));\r
+                               //halbtc8812a1ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_A2DP:\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = A2DP.\n"));\r
-                               halbtc8812a1ant_ActionA2dp(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = A2DP.\n"));\r
+                               //halbtc8812a1ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_A2DP_PANHS:\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_A2DP_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = A2DP+PAN(HS).\n"));\r
-                               halbtc8812a1ant_ActionA2dpPanHs(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = A2DP+PAN(HS).\n"));\r
+                               //halbtc8812a1ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_PANEDR:\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN(EDR).\n"));\r
-                               halbtc8812a1ant_ActionPanEdr(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN(EDR).\n"));\r
+                               //halbtc8812a1ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_PANHS:\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HS mode.\n"));\r
-                               halbtc8812a1ant_ActionPanHs(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HS mode.\n"));\r
+                               //halbtc8812a1ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_PANEDR_A2DP:\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_PANEDR_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN+A2DP.\n"));\r
-                               halbtc8812a1ant_ActionPanEdrA2dp(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN+A2DP.\n"));\r
+                               //halbtc8812a1ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_PANEDR_HID:\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_PANEDR_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN(EDR)+HID.\n"));\r
-                               halbtc8812a1ant_ActionPanEdrHid(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN(EDR)+HID.\n"));\r
+                               //halbtc8812a1ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID+A2DP+PAN.\n"));\r
-                               halbtc8812a1ant_ActionHidA2dpPanEdr(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID+A2DP+PAN.\n"));\r
+                               //halbtc8812a1ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_HID_A2DP:\r
                                break;\r
                        case BT_8812A_1ANT_COEX_ALGO_HID_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID+A2DP.\n"));\r
-                               halbtc8812a1ant_ActionHidA2dp(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID+A2DP.\n"));\r
+                               //halbtc8812a1ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
                                break;\r
                        default:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = coexist All Off!!\n"));\r
-                               halbtc8812a1ant_CoexAllOff(pBtCoexist);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = coexist All Off!!\n"));\r
+                               //halbtc8812a1ant_CoexAllOff(pBtCoexist);\r
                                break;\r
                }\r
                pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
                                break;\r
                }\r
                pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
@@ -2009,41 +2493,115 @@ halbtc8812a1ant_RunCoexistMechanism(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BOOLEAN bWifiUnder5G=FALSE, bWifiBusy=FALSE, bWifiConnected=FALSE, bBtHsOn=FALSE;\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE;\r
+       BOOLEAN bIncreaseScanDevNum=FALSE;\r
+       BOOLEAN bBtCtrlAggBufSize=FALSE;\r
+       BOOLEAN bMiracastPlusBt=FALSE;\r
+       u1Byte  aggBufSize=5;\r
+       u1Byte  wifiRssiState=BTC_RSSI_STATE_HIGH;\r
+       u4Byte  wifiLinkStatus=0;\r
+       u4Byte  numOfWifiLink=0, wifiBw;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
                return;\r
        }\r
                return;\r
        }\r
-       \r
+\r
        if(pBtCoexist->bStopCoexDm)\r
        {\r
        if(pBtCoexist->bStopCoexDm)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Stop Coex DM <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Stop Coex DM <===\n"));\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is under IPS !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is under IPS !!!\n"));\r
+               return;\r
+       }\r
+\r
+       if( (BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
+               (BT_8812A_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
+               (BT_8812A_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
+       {\r
+               bIncreaseScanDevNum = TRUE;\r
+       }\r
+\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_INC_SCAN_DEV_NUM, &bIncreaseScanDevNum);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
+       numOfWifiLink = wifiLinkStatus>>16;\r
+       \r
+       if((numOfWifiLink>=2) || (wifiLinkStatus&WIFI_P2P_GO_CONNECTED))\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex],  Multi-Port numOfWifiLink = %d, wifiLinkStatus = 0x%x\n", numOfWifiLink,wifiLinkStatus) );\r
+\r
+               if(pBtLinkInfo->bBtLinkExist)\r
+               {\r
+                       halbtc8812a1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 1, 1, 0, 1);\r
+                       bMiracastPlusBt = TRUE;\r
+               }\r
+               else\r
+               {\r
+                       halbtc8812a1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);\r
+                       bMiracastPlusBt = FALSE;\r
+               }\r
+               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);\r
+               halbtc8812a1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, bBtCtrlAggBufSize, aggBufSize);\r
+\r
+               if ( (pBtLinkInfo->bA2dpExist) && (pCoexSta->bC2hBtInquiryPage) )\r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex],  BT Is Inquirying \n") );       \r
+                       halbtc8812a1ant_ActionBtInquiry(pBtCoexist);\r
+               }\r
+               else\r
+                       halbtc8812a1ant_ActionWifiMultiPort(pBtCoexist);\r
+               \r
                return;\r
        }\r
                return;\r
        }\r
+       else\r
+       {\r
+               bMiracastPlusBt = FALSE;\r
+               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);\r
+       }\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
 \r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
-       if(bWifiUnder5G)\r
+       if ( (pBtLinkInfo->bBtLinkExist) && (bWifiConnected) )\r
        {\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n"));\r
-               halbtc8812a1ant_CoexUnder5G(pBtCoexist);\r
-               return;\r
+               halbtc8812a1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 1, 1, 0, 1); \r
+\r
+               if(pBtLinkInfo->bScoExist)\r
+                       halbtc8812a1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, TRUE, FALSE, 0x5);\r
+               else\r
+               {\r
+                       if (BTC_WIFI_BW_HT40==wifiBw)\r
+                        halbtc8812a1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x10); \r
+                       else\r
+                        halbtc8812a1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);          \r
+               }\r
+\r
+               halbtc8812a1ant_SwMechanism(pBtCoexist, TRUE);\r
+               halbtc8812a1ant_RunSwCoexistMechanism(pBtCoexist);  //just print debug message\r
        }\r
        }\r
+       else\r
+       {\r
+               halbtc8812a1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0); \r
 \r
 \r
-       halbtc8812a1ant_RunSwCoexistMechanism(pBtCoexist);\r
+               halbtc8812a1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x5);\r
+\r
+               halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
+               halbtc8812a1ant_RunSwCoexistMechanism(pBtCoexist); ////just print debug message\r
+       }\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex],  BT Is Inquirying \n") );               \r
                halbtc8812a1ant_ActionBtInquiry(pBtCoexist);\r
                return;\r
        }\r
                halbtc8812a1ant_ActionBtInquiry(pBtCoexist);\r
                return;\r
        }\r
@@ -2053,19 +2611,24 @@ halbtc8812a1ant_RunCoexistMechanism(
                return;\r
        }\r
 \r
                return;\r
        }\r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+       \r
        if(!bWifiConnected)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
                \r
        if(!bWifiConnected)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
                \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is non connected-idle !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is non connected-idle !!!\n"));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
 \r
                if(bScan || bLink || bRoam)\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
 \r
                if(bScan || bLink || bRoam)\r
-                       halbtc8812a1ant_ActionWifiNotConnectedAssoAuthScan(pBtCoexist);\r
+               {\r
+                        if (bScan)     \r
+                               halbtc8812a1ant_ActionWifiNotConnectedScan(pBtCoexist); \r
+                        else\r
+                               halbtc8812a1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);     \r
+               }\r
                else\r
                        halbtc8812a1ant_ActionWifiNotConnected(pBtCoexist);\r
        }\r
                else\r
                        halbtc8812a1ant_ActionWifiNotConnected(pBtCoexist);\r
        }\r
@@ -2081,26 +2644,20 @@ halbtc8812a1ant_InitCoexDm(
        )\r
 {      \r
        // force to reset coex mechanism\r
        )\r
 {      \r
        // force to reset coex mechanism\r
-       halbtc8812a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);\r
-       halbtc8812a1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);\r
-}\r
 \r
 \r
-//============================================================\r
-// work around function start with wa_halbtc8812a1ant_\r
-//============================================================\r
-//============================================================\r
-// extern function start with EXhalbtc8812a1ant_\r
-//============================================================\r
-VOID\r
-EXhalbtc8812a1ant_PowerOnSetting(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
-       )\r
-{\r
+       // sw all off\r
+       halbtc8812a1ant_SwMechanism(pBtCoexist, FALSE);\r
+       \r
+       //halbtc8812a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);\r
+       //halbtc8812a1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);\r
+\r
+       pCoexSta->popEventCnt = 0;\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-EXhalbtc8812a1ant_InitHwConfig(\r
+halbtc8812a1ant_InitHwConfig(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bBackUp,\r
        IN      BOOLEAN                         bWifiOnly\r
        )\r
 {\r
        IN      BOOLEAN                         bWifiOnly\r
        )\r
 {\r
@@ -2108,10 +2665,10 @@ EXhalbtc8812a1ant_InitHwConfig(
        u2Byte  u2Tmp=0;\r
        u1Byte  u1Tmp=0;\r
 \r
        u2Byte  u2Tmp=0;\r
        u1Byte  u1Tmp=0;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 1Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 1Ant Init HW Config!!\n"));\r
        \r
        //ant sw control to BT\r
        \r
        //ant sw control to BT\r
-       halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, TRUE, FALSE);\r
+       halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FORCE_EXEC, TRUE, FALSE);\r
 \r
        // 0x790[5:0]=0x5\r
        u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x790);\r
 \r
        // 0x790[5:0]=0x5\r
        u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x790);\r
@@ -2145,16 +2702,48 @@ EXhalbtc8812a1ant_InitHwConfig(
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x7, u1Tmp);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x7, u1Tmp);\r
 }\r
 \r
+//============================================================\r
+// work around function start with wa_halbtc8812a1ant_\r
+//============================================================\r
+//============================================================\r
+// extern function start with EXhalbtc8812a1ant_\r
+//============================================================\r
 VOID\r
 VOID\r
-EXhalbtc8812a1ant_InitCoexDm(\r
+EXhalbtc8812a1ant_PowerOnSetting(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+}\r
+\r
+VOID\r
+EXhalbtc8812a1ant_PreLoadFirmware(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+}\r
 \r
 \r
+VOID\r
+EXhalbtc8812a1ant_InitHwConfig(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bWifiOnly\r
+       )\r
+{\r
+       halbtc8812a1ant_InitHwConfig(pBtCoexist, TRUE, bWifiOnly);\r
        pBtCoexist->bStopCoexDm = FALSE;\r
        pBtCoexist->bStopCoexDm = FALSE;\r
+}\r
+\r
+VOID\r
+EXhalbtc8812a1ant_InitCoexDm(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
 \r
 \r
+       pBtCoexist->bStopCoexDm = FALSE;\r
+       \r
        halbtc8812a1ant_InitCoexDm(pBtCoexist);\r
        halbtc8812a1ant_InitCoexDm(pBtCoexist);\r
+\r
+       halbtc8812a1ant_QueryBtInfo(pBtCoexist);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -2162,10 +2751,10 @@ EXhalbtc8812a1ant_DisplayCoexInfo(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
-       PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
+       PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
+       PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
        PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
-       pu1Byte                         cliBuf=pBtCoexist->cliBuf;\r
+       pu1Byte                         cliBuf=pBtCoexist->cliBuf;\r
        u1Byte                          u1Tmp[4], i, btInfoExt, psTdmaCase=0;\r
        u4Byte                          u4Tmp[4];\r
        u4Byte                          fwVer=0, btPatchVer=0;\r
        u1Byte                          u1Tmp[4], i, btInfoExt, psTdmaCase=0;\r
        u4Byte                          u4Tmp[4];\r
        u4Byte                          fwVer=0, btPatchVer=0;\r
@@ -2206,7 +2795,7 @@ EXhalbtc8812a1ant_DisplayCoexInfo(
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
-\r
+       \r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
@@ -2246,7 +2835,7 @@ EXhalbtc8812a1ant_DisplayCoexInfo(
 \r
        if(!pBtCoexist->bManualControl)\r
        {\r
 \r
        if(!pBtCoexist->bManualControl)\r
        {\r
-               // Sw mechanism \r
+               // Sw mechanism \r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");\r
                CL_PRINTF(cliBuf);\r
        \r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");\r
                CL_PRINTF(cliBuf);\r
        \r
@@ -2258,7 +2847,7 @@ EXhalbtc8812a1ant_DisplayCoexInfo(
                                pBtCoexist->btInfo.raMask);\r
                CL_PRINTF(cliBuf);\r
 \r
                                pBtCoexist->btInfo.raMask);\r
                CL_PRINTF(cliBuf);\r
 \r
-               // Fw mechanism         \r
+               // Fw mechanism         \r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");\r
                CL_PRINTF(cliBuf);      \r
 \r
                CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");\r
                CL_PRINTF(cliBuf);      \r
 \r
@@ -2329,6 +2918,7 @@ EXhalbtc8812a1ant_DisplayCoexInfo(
 }\r
 \r
 \r
 }\r
 \r
 \r
+\r
 VOID\r
 EXhalbtc8812a1ant_IpsNotify(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 EXhalbtc8812a1ant_IpsNotify(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -2342,14 +2932,21 @@ EXhalbtc8812a1ant_IpsNotify(
 \r
        if(BTC_IPS_ENTER == type)\r
        {\r
 \r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
-               pCoexSta->bUnderIps = TRUE;             \r
-               halbtc8812a1ant_CoexAllOff(pBtCoexist);\r
-               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
+               pCoexSta->bUnderIps = TRUE;\r
+               \r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FORCE_EXEC, FALSE, TRUE);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);  \r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
+\r
+               halbtc8812a1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
+               halbtc8812a1ant_InitCoexDm(pBtCoexist);\r
+               halbtc8812a1ant_QueryBtInfo(pBtCoexist);\r
+\r
                pCoexSta->bUnderIps = FALSE;\r
        }\r
 }\r
                pCoexSta->bUnderIps = FALSE;\r
        }\r
 }\r
@@ -2365,12 +2962,12 @@ EXhalbtc8812a1ant_LpsNotify(
 \r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 \r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
@@ -2381,14 +2978,53 @@ EXhalbtc8812a1ant_ScanNotify(
        IN      u1Byte                  type\r
        )\r
 {\r
        IN      u1Byte                  type\r
        )\r
 {\r
-       BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE;    \r
+       BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE;\r
+       u4Byte  wifiLinkStatus=0;\r
+       u4Byte  numOfWifiLink=0;\r
+       BOOLEAN bBtCtrlAggBufSize=FALSE;\r
+       u1Byte  aggBufSize=5;\r
+\r
+       u1Byte u1Tmpa, u1Tmpb;\r
+       u4Byte u4Tmp;\r
 \r
        if(pBtCoexist->bManualControl ||\r
 \r
        if(pBtCoexist->bManualControl ||\r
-               pBtCoexist->bStopCoexDm ||\r
-               pBtCoexist->btInfo.bBtDisabled )\r
+               pBtCoexist->bStopCoexDm )\r
+               return;\r
+\r
+       if(BTC_SCAN_START == type)\r
+       {\r
+               pCoexSta->bWiFiIsHighPriTask = TRUE;\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
+\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
+               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
+       }\r
+       else\r
+       {\r
+               pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
+\r
+               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &pCoexSta->nScanAPNum);              \r
+       }       \r
+\r
+       if(pBtCoexist->btInfo.bBtDisabled)\r
                return;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
                return;\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+\r
+       halbtc8812a1ant_QueryBtInfo(pBtCoexist);\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
+       numOfWifiLink = wifiLinkStatus>>16;\r
+       if(numOfWifiLink >= 2)\r
+       {\r
+               halbtc8812a1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);\r
+               halbtc8812a1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, bBtCtrlAggBufSize, aggBufSize);\r
+               halbtc8812a1ant_ActionWifiMultiPort(pBtCoexist);\r
+               return;\r
+       }\r
+       \r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
                halbtc8812a1ant_ActionBtInquiry(pBtCoexist);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
                halbtc8812a1ant_ActionBtInquiry(pBtCoexist);\r
@@ -2400,13 +3036,12 @@ EXhalbtc8812a1ant_ScanNotify(
                return;\r
        }\r
 \r
                return;\r
        }\r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
        if(BTC_SCAN_START == type)\r
        {       \r
        if(BTC_SCAN_START == type)\r
        {       \r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
-                       halbtc8812a1ant_ActionWifiNotConnectedAssoAuthScan(pBtCoexist);\r
+                       halbtc8812a1ant_ActionWifiNotConnectedScan(pBtCoexist);\r
                }\r
                else    // wifi is connected\r
                {\r
                }\r
                else    // wifi is connected\r
                {\r
@@ -2415,7 +3050,7 @@ EXhalbtc8812a1ant_ScanNotify(
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8812a1ant_ActionWifiNotConnected(pBtCoexist);\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8812a1ant_ActionWifiNotConnected(pBtCoexist);\r
@@ -2434,12 +3069,41 @@ EXhalbtc8812a1ant_ConnectNotify(
        )\r
 {\r
        BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE;    \r
        )\r
 {\r
        BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE;    \r
+       u4Byte  wifiLinkStatus=0;\r
+       u4Byte  numOfWifiLink=0;\r
+       BOOLEAN bBtCtrlAggBufSize=FALSE;\r
+       u1Byte  aggBufSize=5;\r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
                pBtCoexist->btInfo.bBtDisabled )\r
                return;\r
 \r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
                pBtCoexist->btInfo.bBtDisabled )\r
                return;\r
 \r
+       if(BTC_ASSOCIATE_START == type)\r
+       {\r
+                pCoexSta->bWiFiIsHighPriTask = TRUE;\r
+                halbtc8812a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
+                halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
+                RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));   \r
+                pCoexDm->nArpCnt = 0;\r
+       }\r
+       else\r
+       {\r
+               pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));   \r
+               //pCoexDm->nArpCnt = 0;\r
+       }\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
+       numOfWifiLink = wifiLinkStatus>>16;\r
+       if(numOfWifiLink >= 2)\r
+       {\r
+               halbtc8812a1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);\r
+               halbtc8812a1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, bBtCtrlAggBufSize, aggBufSize);\r
+               halbtc8812a1ant_ActionWifiMultiPort(pBtCoexist);\r
+               return;\r
+       }\r
+\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
@@ -2454,12 +3118,12 @@ EXhalbtc8812a1ant_ConnectNotify(
 \r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 \r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
-               halbtc8812a1ant_ActionWifiNotConnectedAssoAuthScan(pBtCoexist);\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));          \r
+               halbtc8812a1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
                \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                if(!bWifiConnected) // non-connected scan\r
                \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                if(!bWifiConnected) // non-connected scan\r
@@ -2473,6 +3137,7 @@ EXhalbtc8812a1ant_ConnectNotify(
        }\r
 }\r
 \r
        }\r
 }\r
 \r
+//to check registers...\r
 VOID\r
 EXhalbtc8812a1ant_MediaStatusNotify(\r
        IN      PBTC_COEXIST                    pBtCoexist,\r
 VOID\r
 EXhalbtc8812a1ant_MediaStatusNotify(\r
        IN      PBTC_COEXIST                    pBtCoexist,\r
@@ -2484,6 +3149,7 @@ EXhalbtc8812a1ant_MediaStatusNotify(
        u1Byte                  H2C_Parameter[3] ={0};\r
        u4Byte                  wifiBw;\r
        u1Byte                  wifiCentralChnl;\r
        u1Byte                  H2C_Parameter[3] ={0};\r
        u4Byte                  wifiBw;\r
        u1Byte                  wifiCentralChnl;\r
+       BOOLEAN                 bWifiUnderBMode = FALSE;\r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
@@ -2492,11 +3158,35 @@ EXhalbtc8812a1ant_MediaStatusNotify(
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
+               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_PTA, FORCE_EXEC, FALSE, FALSE);\r
+               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode);\r
+#if 0\r
+               //Set CCK Tx/Rx high Pri except 11b mode\r
+               if (bWifiUnderBMode)\r
+               {\r
+                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cd, 0x00); //CCK Tx\r
+                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cf, 0x00); //CCK Rx\r
+               }\r
+               else\r
+               {\r
+                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cd, 0x10); //CCK Tx\r
+                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cf, 0x10); //CCK Rx\r
+               }\r
+#endif \r
+               pCoexDm->backupArfrCnt1 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x430);\r
+               pCoexDm->backupArfrCnt2 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x434);\r
+               pCoexDm->backupRetryLimit = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0x42a);\r
+               pCoexDm->backupAmpduMaxTime = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x456);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               pCoexDm->nArpCnt = 0;\r
+\r
+               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cd, 0x0); //CCK Tx\r
+               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cf, 0x0); //CCK Rx\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
@@ -2504,7 +3194,8 @@ EXhalbtc8812a1ant_MediaStatusNotify(
        if( (BTC_MEDIA_CONNECT == type) &&\r
                (wifiCentralChnl <= 14) )\r
        {\r
        if( (BTC_MEDIA_CONNECT == type) &&\r
                (wifiCentralChnl <= 14) )\r
        {\r
-               H2C_Parameter[0] = 0x1;\r
+               //H2C_Parameter[0] = 0x1;\r
+               H2C_Parameter[0] = 0x0;\r
                H2C_Parameter[1] = wifiCentralChnl;\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
                if(BTC_WIFI_BW_HT40 == wifiBw)\r
                H2C_Parameter[1] = wifiCentralChnl;\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
                if(BTC_WIFI_BW_HT40 == wifiBw)\r
@@ -2516,15 +3207,15 @@ EXhalbtc8812a1ant_MediaStatusNotify(
        pCoexDm->wifiChnlInfo[0] = H2C_Parameter[0];\r
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        pCoexDm->wifiChnlInfo[0] = H2C_Parameter[0];\r
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
-       \r
+\r
        buf[0] = dataLen;\r
        buf[1] = 0x5;                           // OP_Code\r
        buf[2] = 0x3;                           // OP_Code_Length\r
        buf[3] = H2C_Parameter[0];      // OP_Code_Content\r
        buf[4] = H2C_Parameter[1];\r
        buf[5] = H2C_Parameter[2];\r
        buf[0] = dataLen;\r
        buf[1] = 0x5;                           // OP_Code\r
        buf[2] = 0x3;                           // OP_Code_Length\r
        buf[3] = H2C_Parameter[0];      // OP_Code_Content\r
        buf[4] = H2C_Parameter[1];\r
        buf[5] = H2C_Parameter[2];\r
-               \r
-       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);              \r
+\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -2533,13 +3224,61 @@ EXhalbtc8812a1ant_SpecialPacketNotify(
        IN      u1Byte                          type\r
        )\r
 {\r
        IN      u1Byte                          type\r
        )\r
 {\r
-       BOOLEAN bBtHsOn=FALSE;\r
+       BOOLEAN bBtHsOn=FALSE;\r
+       u4Byte  wifiLinkStatus=0;\r
+       u4Byte  numOfWifiLink=0;\r
+       BOOLEAN bBtCtrlAggBufSize=FALSE;\r
+       u1Byte  aggBufSize=5;\r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
                pBtCoexist->btInfo.bBtDisabled )\r
                return;\r
 \r
 \r
        if(pBtCoexist->bManualControl ||\r
                pBtCoexist->bStopCoexDm ||\r
                pBtCoexist->btInfo.bBtDisabled )\r
                return;\r
 \r
+       if( BTC_PACKET_DHCP == type || \r
+               BTC_PACKET_EAPOL == type ||\r
+               BTC_PACKET_ARP == type )\r
+       {\r
+               if(BTC_PACKET_ARP == type)\r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet ARP notify\n"));                \r
+\r
+                       pCoexDm->nArpCnt++;\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ARP Packet Count = %d\n", pCoexDm->nArpCnt));\r
+                       \r
+                       if(pCoexDm->nArpCnt >= 10) // if APR PKT > 10 after connect, do not go to ActionWifiConnectedSpecialPacket(pBtCoexist) \r
+                       {\r
+                               pCoexSta->bWiFiIsHighPriTask = FALSE;                                   \r
+                       }                       \r
+                       else\r
+                       {\r
+                               pCoexSta->bWiFiIsHighPriTask = TRUE;\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       pCoexSta->bWiFiIsHighPriTask = TRUE;\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet DHCP or EAPOL notify\n"));              \r
+               }\r
+       }\r
+       else\r
+       {\r
+               pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet [Type = %d] notify\n", type));\r
+       }\r
+\r
+       pCoexSta->specialPktPeriodCnt = 0;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
+       numOfWifiLink = wifiLinkStatus>>16;\r
+       if(numOfWifiLink >= 2)\r
+       {\r
+               halbtc8812a1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);\r
+               halbtc8812a1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, bBtCtrlAggBufSize, aggBufSize);\r
+               halbtc8812a1ant_ActionWifiMultiPort(pBtCoexist);\r
+               return;\r
+       }\r
+\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        if(pCoexSta->bC2hBtInquiryPage)\r
        {\r
@@ -2553,9 +3292,9 @@ EXhalbtc8812a1ant_SpecialPacketNotify(
        }\r
 \r
        if( BTC_PACKET_DHCP == type ||\r
        }\r
 \r
        if( BTC_PACKET_DHCP == type ||\r
-               BTC_PACKET_EAPOL == type )\r
+               BTC_PACKET_EAPOL == type || \r
+               ( (BTC_PACKET_ARP == type ) && (pCoexSta->bWiFiIsHighPriTask) ) )\r
        {\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], special Packet(%d) notify\n", type));\r
                halbtc8812a1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
        }\r
 }\r
                halbtc8812a1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
        }\r
 }\r
@@ -2570,20 +3309,17 @@ EXhalbtc8812a1ant_BtInfoNotify(
        PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        u1Byte                          btInfo=0;\r
        u1Byte                          i, rspSource=0;\r
        PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        u1Byte                          btInfo=0;\r
        u1Byte                          i, rspSource=0;\r
-       static u4Byte           setBtPsdMode=0;\r
-       BOOLEAN                         bBtBusy=FALSE;\r
        BOOLEAN                         bWifiConnected=FALSE;\r
        BOOLEAN                         bWifiConnected=FALSE;\r
-       BOOLEAN                         bBtCtrlAggBufSize=FALSE, bRejApAggPkt=FALSE;\r
+       BOOLEAN                         bBtBusy=FALSE;\r
+       \r
+       pCoexSta->bC2hBtInfoReqSent = FALSE;\r
 \r
        rspSource = tmpBuf[0]&0xf;\r
        if(rspSource >= BT_INFO_SRC_8812A_1ANT_MAX)\r
                rspSource = BT_INFO_SRC_8812A_1ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
 \r
        rspSource = tmpBuf[0]&0xf;\r
        if(rspSource >= BT_INFO_SRC_8812A_1ANT_MAX)\r
                rspSource = BT_INFO_SRC_8812A_1ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
-       if(BT_INFO_SRC_8812A_1ANT_BT_RSP == rspSource)\r
-               pCoexSta->btInfoQueryCnt = pCoexSta->btInfoC2hCnt[BT_INFO_SRC_8812A_1ANT_BT_RSP];\r
-\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
@@ -2591,47 +3327,48 @@ EXhalbtc8812a1ant_BtInfoNotify(
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x]\n", tmpBuf[i]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x, ", tmpBuf[i]));\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
-       if(pBtCoexist->btInfo.bBtDisabled)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), return for BT is disabled <===\n"));\r
-               return;\r
-       }       \r
-\r
-       if(pBtCoexist->bManualControl)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), return for Manual CTRL<===\n"));\r
-               return;\r
-       }\r
-       if(pBtCoexist->bStopCoexDm)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), return for Coex STOPPED!!<===\n"));\r
-               return;\r
-       }\r
-\r
        if(BT_INFO_SRC_8812A_1ANT_WIFI_FW != rspSource)\r
        {\r
                pCoexSta->btRetryCnt =  // [3:0]\r
                        pCoexSta->btInfoC2h[rspSource][2]&0xf;\r
 \r
        if(BT_INFO_SRC_8812A_1ANT_WIFI_FW != rspSource)\r
        {\r
                pCoexSta->btRetryCnt =  // [3:0]\r
                        pCoexSta->btInfoC2h[rspSource][2]&0xf;\r
 \r
+               if (pCoexSta->btRetryCnt >= 1)\r
+                       pCoexSta->popEventCnt++;\r
+\r
+               if (pCoexSta->btInfoC2h[rspSource][2]&0x20)\r
+                       pCoexSta->bC2hBtPage = TRUE;\r
+               else\r
+                       pCoexSta->bC2hBtPage = FALSE;                   \r
+\r
                pCoexSta->btRssi =\r
                pCoexSta->btRssi =\r
-                       pCoexSta->btInfoC2h[rspSource][3]*2+10;\r
+                       pCoexSta->btInfoC2h[rspSource][3]*2-90;\r
+                       //pCoexSta->btInfoC2h[rspSource][3]*2+10;\r
 \r
                pCoexSta->btInfoExt = \r
                        pCoexSta->btInfoC2h[rspSource][4];\r
 \r
 \r
                pCoexSta->btInfoExt = \r
                        pCoexSta->btInfoC2h[rspSource][4];\r
 \r
+               pCoexSta->bBtTxRxMask = (pCoexSta->btInfoC2h[rspSource][2]&0x40);\r
+               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TX_RX_MASK, &pCoexSta->bBtTxRxMask);\r
+               if(!pCoexSta->bBtTxRxMask)\r
+               {\r
+                       /* BT into is responded by BT FW and BT RF REG 0x3C != 0x15 => Need to switch BT TRx Mask */                            \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x15\n"));\r
+                       pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15);\r
+               }\r
+               \r
                // Here we need to resend some wifi info to BT\r
                // because bt is reset and loss of the info.\r
                // Here we need to resend some wifi info to BT\r
                // because bt is reset and loss of the info.\r
-               if( (pCoexSta->btInfoExt & BIT1) )\r
-               {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
+               if(pCoexSta->btInfoExt & BIT1)\r
+               {                       \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
@@ -2641,34 +3378,30 @@ EXhalbtc8812a1ant_BtInfoNotify(
                        {\r
                                EXhalbtc8812a1ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
                        }\r
                        {\r
                                EXhalbtc8812a1ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
                        }\r
-\r
-                       setBtPsdMode = 0;\r
                }\r
                }\r
-\r
-               // test-chip bt patch only rsp the status for BT_RSP, \r
-               // so temporary we consider the following only under BT_RSP\r
-               if(BT_INFO_SRC_8812A_1ANT_BT_RSP == rspSource)\r
+                               \r
+               if(pCoexSta->btInfoExt & BIT3)\r
                {\r
                {\r
-                       if( (pCoexSta->btInfoExt & BIT3) )\r
+                       if(!pBtCoexist->bManualControl && !pBtCoexist->bStopCoexDm)\r
                        {\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
                                halbtc8812a1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                        }\r
                                halbtc8812a1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                        }\r
-                       else\r
-                       {\r
-                               // BT already NOT ignore Wlan active, do nothing here.\r
-                       }\r
-\r
-                       if( (pCoexSta->btInfoExt & BIT4) )\r
-                       {\r
-                               // BT auto report already enabled, do nothing\r
-                       }\r
-                       else\r
-                       {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit4 check, set BT to enable Auto Report!!\n"));\r
-                               halbtc8812a1ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);\r
-                       }\r
                }\r
                }\r
+               else\r
+               {\r
+                       // BT already NOT ignore Wlan active, do nothing here.\r
+               }\r
+#if(BT_AUTO_REPORT_ONLY_8812A_1ANT == 0)\r
+               if( (pCoexSta->btInfoExt & BIT4) )\r
+               {\r
+                       // BT auto report already enabled, do nothing\r
+               }\r
+               else\r
+               {\r
+                       halbtc8812a1ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);\r
+               }\r
+#endif\r
        }\r
                \r
        // check BIT2 first ==> check if bt is under inquiry or page scan\r
        }\r
                \r
        // check BIT2 first ==> check if bt is under inquiry or page scan\r
@@ -2709,84 +3442,95 @@ EXhalbtc8812a1ant_BtInfoNotify(
 \r
        halbtc8812a1ant_UpdateBtLinkInfo(pBtCoexist);\r
        \r
 \r
        halbtc8812a1ant_UpdateBtLinkInfo(pBtCoexist);\r
        \r
+       btInfo = btInfo & 0x1f;  //mask profile bit for connect-ilde identification ( for CSR case: A2DP idle --> 0x41)\r
+       \r
        if(!(btInfo&BT_INFO_8812A_1ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8812A_1ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
        if(!(btInfo&BT_INFO_8812A_1ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8812A_1ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), bt non-connected idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
        }\r
        else if(btInfo == BT_INFO_8812A_1ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8812A_1ANT_BT_STATUS_CONNECTED_IDLE;\r
        }\r
        else if(btInfo == BT_INFO_8812A_1ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8812A_1ANT_BT_STATUS_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), bt connected-idle!!!\n"));\r
-       }               \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
+       }\r
        else if((btInfo&BT_INFO_8812A_1ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8812A_1ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8812A_1ANT_BT_STATUS_SCO_BUSY;\r
        else if((btInfo&BT_INFO_8812A_1ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8812A_1ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8812A_1ANT_BT_STATUS_SCO_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), bt sco busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
        }\r
        else if(btInfo&BT_INFO_8812A_1ANT_B_ACL_BUSY)\r
        {\r
                if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY != pCoexDm->btStatus)\r
        }\r
        else if(btInfo&BT_INFO_8812A_1ANT_B_ACL_BUSY)\r
        {\r
                if(BT_8812A_1ANT_BT_STATUS_ACL_BUSY != pCoexDm->btStatus)\r
-                       pCoexDm->bResetTdmaAdjust = TRUE;\r
+                       pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->btStatus = BT_8812A_1ANT_BT_STATUS_ACL_BUSY;\r
                pCoexDm->btStatus = BT_8812A_1ANT_BT_STATUS_ACL_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), bt acl busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8812A_1ANT_BT_STATUS_MAX;\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8812A_1ANT_BT_STATUS_MAX;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), bt non-defined state!!!\n"));\r
-       }\r
-\r
-       if(pBtLinkInfo->bScoExist)\r
-       {\r
-               bRejApAggPkt = TRUE;\r
-               halbtc8812a1ant_UpdateRaMask(pBtCoexist, NORMAL_EXEC, BTC_RATE_DISABLE, 0x00000003);    // disable cck 1M2M.\r
-       }\r
-       else\r
-       {\r
-               halbtc8812a1ant_UpdateRaMask(pBtCoexist, NORMAL_EXEC, BTC_RATE_ENABLE, 0x00000003);     // enable cck 1M2M.\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
        }\r
 \r
        if( (BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
                (BT_8812A_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
                (BT_8812A_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
        }\r
 \r
        if( (BT_8812A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
                (BT_8812A_1ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
                (BT_8812A_1ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
-       {\r
                bBtBusy = TRUE;\r
                bBtBusy = TRUE;\r
-               if(pBtLinkInfo->bHidExist)\r
-                       bBtCtrlAggBufSize = TRUE;\r
-       }\r
        else\r
        else\r
-       {\r
                bBtBusy = FALSE;\r
                bBtBusy = FALSE;\r
-       }\r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);\r
 \r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);\r
 \r
-       //============================================\r
-       //      Aggregation related setting\r
-       //============================================  \r
-       // if sco, reject AddBA\r
-       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT, &bRejApAggPkt);\r
-       // decide BT control aggregation buf size or not\r
-       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE, &bBtCtrlAggBufSize);\r
-       // real update aggregation setting\r
-       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);\r
-       //============================================\r
-\r
        halbtc8812a1ant_RunCoexistMechanism(pBtCoexist);\r
 }\r
 \r
        halbtc8812a1ant_RunCoexistMechanism(pBtCoexist);\r
 }\r
 \r
+VOID\r
+EXhalbtc8812a1ant_RfStatusNotify(\r
+       IN      PBTC_COEXIST                    pBtCoexist,\r
+       IN      u1Byte                                  type\r
+       )\r
+{\r
+       u4Byte  u4Tmp;\r
+       u1Byte  u1Tmpa,u1Tmpb, u1Tmpc;\r
+       \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RF Status notify\n"));\r
+\r
+       if(BTC_RF_ON == type)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RF is turned ON!!\n"));\r
+               pBtCoexist->bStopCoexDm = FALSE;\r
+       }\r
+       else if(BTC_RF_OFF == type)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RF is turned OFF!!\n"));\r
+               \r
+               halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+               halbtc8812a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
+               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FORCE_EXEC, FALSE, TRUE);\r
+               \r
+               halbtc8812a1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+               pBtCoexist->bStopCoexDm = TRUE;\r
+       }\r
+}\r
+\r
 VOID\r
 EXhalbtc8812a1ant_HaltNotify(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
 VOID\r
 EXhalbtc8812a1ant_HaltNotify(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
+       u4Byte  u4Tmp;\r
+       \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
 \r
-       halbtc8812a1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+       halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
        halbtc8812a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
        halbtc8812a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
-       halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
+       halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FORCE_EXEC, FALSE, TRUE);\r
+\r
+       halbtc8812a1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+\r
        EXhalbtc8812a1ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
        EXhalbtc8812a1ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
+\r
+       pBtCoexist->bStopCoexDm = TRUE; \r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -2795,21 +3539,40 @@ EXhalbtc8812a1ant_PnpNotify(
        IN      u1Byte                          pnpState\r
        )\r
 {\r
        IN      u1Byte                          pnpState\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify\n"));\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
-               pBtCoexist->bStopCoexDm = TRUE;\r
-               halbtc8812a1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to SLEEP\n"));\r
+\r
                halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
-               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 9);      \r
+               halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
+               halbtc8812a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FORCE_EXEC, FALSE, TRUE);\r
+               halbtc8812a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
+\r
+               pBtCoexist->bStopCoexDm = TRUE;\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
-               \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
+               pBtCoexist->bStopCoexDm = FALSE;\r
+               halbtc8812a1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
+               halbtc8812a1ant_InitCoexDm(pBtCoexist);\r
+               halbtc8812a1ant_QueryBtInfo(pBtCoexist);\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
+VOID\r
+EXhalbtc8812a1ant_CoexDmReset(\r
+       IN      PBTC_COEXIST                    pBtCoexist\r
+       )\r
+{\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], *****************Coex DM Reset*****************\n"));\r
+\r
+       halbtc8812a1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
+       halbtc8812a1ant_InitCoexDm(pBtCoexist);\r
+}\r
+\r
 VOID\r
 EXhalbtc8812a1ant_Periodical(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
 VOID\r
 EXhalbtc8812a1ant_Periodical(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
@@ -2820,26 +3583,38 @@ EXhalbtc8812a1ant_Periodical(
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ==========================Periodical===========================\n"));\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n",\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n",\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n",\r
                        GLCoexVerDate8812a1Ant, GLCoexVer8812a1Ant, fwVer, btPatchVer, btPatchVer));\r
                        GLCoexVerDate8812a1Ant, GLCoexVer8812a1Ant, fwVer, btPatchVer, btPatchVer));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
        }\r
 \r
        }\r
 \r
+#if(BT_AUTO_REPORT_ONLY_8812A_1ANT == 0)\r
        halbtc8812a1ant_QueryBtInfo(pBtCoexist);\r
        halbtc8812a1ant_QueryBtInfo(pBtCoexist);\r
-       halbtc8812a1ant_MonitorBtCtr(pBtCoexist);\r
        halbtc8812a1ant_MonitorBtEnableDisable(pBtCoexist);\r
        halbtc8812a1ant_MonitorBtEnableDisable(pBtCoexist);\r
+#else\r
+       halbtc8812a1ant_MonitorBtCtr(pBtCoexist);\r
+       halbtc8812a1ant_MonitorWiFiCtr(pBtCoexist);\r
+\r
+       if( halbtc8812a1ant_IsWifiStatusChanged(pBtCoexist) ||\r
+               pCoexDm->bAutoTdmaAdjust )\r
+       {\r
+               halbtc8812a1ant_RunCoexistMechanism(pBtCoexist);        \r
+       }\r
+\r
+       pCoexSta->specialPktPeriodCnt++;\r
+#endif\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -2853,24 +3628,24 @@ EXhalbtc8812a1ant_DbgControl(
        switch(opCode)\r
        {\r
                case BTC_DBG_SET_COEX_NORMAL:\r
        switch(opCode)\r
        {\r
                case BTC_DBG_SET_COEX_NORMAL:\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set CoexMode to Normal\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set CoexMode to Normal\n"));\r
                        pBtCoexist->bManualControl = FALSE;\r
                        halbtc8812a1ant_InitCoexDm(pBtCoexist);\r
                        break;\r
                case BTC_DBG_SET_COEX_WIFI_ONLY:\r
                        pBtCoexist->bManualControl = FALSE;\r
                        halbtc8812a1ant_InitCoexDm(pBtCoexist);\r
                        break;\r
                case BTC_DBG_SET_COEX_WIFI_ONLY:\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set CoexMode to Wifi Only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set CoexMode to Wifi Only\n"));\r
                        pBtCoexist->bManualControl = TRUE;\r
                        halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                        halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 9);      \r
                        break;\r
                case BTC_DBG_SET_COEX_BT_ONLY:\r
                        pBtCoexist->bManualControl = TRUE;\r
                        halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                        halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 9);      \r
                        break;\r
                case BTC_DBG_SET_COEX_BT_ONLY:\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set CoexMode to BT only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set CoexMode to BT only\n"));\r
                        pBtCoexist->bManualControl = TRUE;\r
                        halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                        halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);      \r
                        break;\r
                case BTC_DBG_SET_COEX_DEC_BT_PWR:\r
                        pBtCoexist->bManualControl = TRUE;\r
                        halbtc8812a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                        halbtc8812a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);      \r
                        break;\r
                case BTC_DBG_SET_COEX_DEC_BT_PWR:\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set Dec BT power\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set Dec BT power\n"));\r
                        {\r
                                u1Byte  dataLen=4;\r
                                u1Byte  buf[6] = {0};\r
                        {\r
                                u1Byte  dataLen=4;\r
                                u1Byte  buf[6] = {0};\r
@@ -2886,14 +3661,14 @@ EXhalbtc8812a1ant_DbgControl(
                                        \r
                                        buf[3] = decBtPwr;      // OP_Code_Content\r
                                        buf[4] = pwrLevel;\r
                                        \r
                                        buf[3] = decBtPwr;      // OP_Code_Content\r
                                        buf[4] = pwrLevel;\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set Dec BT power=%d, pwrLevel=%d\n", decBtPwr, pwrLevel));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set Dec BT power=%d, pwrLevel=%d\n", decBtPwr, pwrLevel));\r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);      \r
                                }\r
                        }\r
                        break;\r
 \r
                case BTC_DBG_SET_COEX_BT_AFH_MAP:\r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);      \r
                                }\r
                        }\r
                        break;\r
 \r
                case BTC_DBG_SET_COEX_BT_AFH_MAP:\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set BT AFH Map\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set BT AFH Map\n"));\r
                        {\r
                                u1Byte  dataLen=5;\r
                                u1Byte  buf[6] = {0};\r
                        {\r
                                u1Byte  dataLen=5;\r
                                u1Byte  buf[6] = {0};\r
@@ -2907,7 +3682,7 @@ EXhalbtc8812a1ant_DbgControl(
                                        buf[4] = pData[1];\r
                                        buf[5] = pData[2];\r
 \r
                                        buf[4] = pData[1];\r
                                        buf[5] = pData[2];\r
 \r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set BT AFH Map = %02x %02x %02x\n", \r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set BT AFH Map = %02x %02x %02x\n", \r
                                                pData[0], pData[1], pData[2]));\r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);\r
                                }\r
                                                pData[0], pData[1], pData[2]));\r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);\r
                                }\r
@@ -2915,7 +3690,7 @@ EXhalbtc8812a1ant_DbgControl(
                        break;\r
                \r
                case BTC_DBG_SET_COEX_BT_IGNORE_WLAN_ACT:\r
                        break;\r
                \r
                case BTC_DBG_SET_COEX_BT_IGNORE_WLAN_ACT:\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set BT Ignore Wlan Active\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set BT Ignore Wlan Active\n"));\r
                        {\r
                                u1Byte  dataLen=3;\r
                                u1Byte  buf[6] = {0};\r
                        {\r
                                u1Byte  dataLen=3;\r
                                u1Byte  buf[6] = {0};\r
@@ -2926,7 +3701,7 @@ EXhalbtc8812a1ant_DbgControl(
                                        buf[2] = 0x1;                   // OP_Code_Length\r
 \r
                                        buf[3] = pData[0];              // OP_Code_Content\r
                                        buf[2] = 0x1;                   // OP_Code_Length\r
 \r
                                        buf[3] = pData[0];              // OP_Code_Content\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set BT Ignore Wlan Active = 0x%x\n", \r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set BT Ignore Wlan Active = 0x%x\n", \r
                                                pData[0]));\r
                                                \r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);\r
                                                pData[0]));\r
                                                \r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);\r
@@ -2937,5 +3712,6 @@ EXhalbtc8812a1ant_DbgControl(
                        break;\r
        }\r
 }\r
                        break;\r
        }\r
 }\r
+\r
 #endif\r
 \r
 #endif\r
 \r
index 4f2df7a6033d662217ec23e934c384f777aa1d5b..c4ec1a4c8f164e7a0a5bb8741ca6bf859e5bdde5 100755 (executable)
@@ -1,6 +1,8 @@
 //===========================================\r
 //===========================================\r
-// The following is for 8812A_1ANT BT Co-exist definition\r
+// The following is for 8812A 1ANT BT Co-exist definition\r
 //===========================================\r
 //===========================================\r
+#define        BT_AUTO_REPORT_ONLY_8812A_1ANT                          1\r
+\r
 #define        BT_INFO_8812A_1ANT_B_FTP                                                BIT7\r
 #define        BT_INFO_8812A_1ANT_B_A2DP                                       BIT6\r
 #define        BT_INFO_8812A_1ANT_B_HID                                                BIT5\r
 #define        BT_INFO_8812A_1ANT_B_FTP                                                BIT7\r
 #define        BT_INFO_8812A_1ANT_B_A2DP                                       BIT6\r
 #define        BT_INFO_8812A_1ANT_B_HID                                                BIT5\r
@@ -15,8 +17,7 @@
 \r
 #define        BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT             2\r
 \r
 \r
 #define        BTC_RSSI_COEX_THRESH_TOL_8812A_1ANT             2\r
 \r
-#define        BTC_8812A_1ANT_SWITCH_TO_WIFI                           0\r
-#define        BTC_8812A_1ANT_SWITCH_TO_BT                                     1\r
+#define  BT_8812A_1ANT_WIFI_NOISY_THRESH                                                               30   //max: 255\r
 \r
 typedef enum _BT_INFO_SRC_8812A_1ANT{\r
        BT_INFO_SRC_8812A_1ANT_WIFI_FW                  = 0x0,\r
 \r
 typedef enum _BT_INFO_SRC_8812A_1ANT{\r
        BT_INFO_SRC_8812A_1ANT_WIFI_FW                  = 0x0,\r
@@ -61,6 +62,9 @@ typedef enum _BT_8812A_1ANT_COEX_ALGO{
 }BT_8812A_1ANT_COEX_ALGO,*PBT_8812A_1ANT_COEX_ALGO;\r
 \r
 typedef struct _COEX_DM_8812A_1ANT{\r
 }BT_8812A_1ANT_COEX_ALGO,*PBT_8812A_1ANT_COEX_ALGO;\r
 \r
 typedef struct _COEX_DM_8812A_1ANT{\r
+       // hw setting\r
+       u1Byte          preAntPosType;\r
+       u1Byte          curAntPosType;\r
        // fw mechanism\r
        BOOLEAN         bCurIgnoreWlanAct;\r
        BOOLEAN         bPreIgnoreWlanAct;\r
        // fw mechanism\r
        BOOLEAN         bCurIgnoreWlanAct;\r
        BOOLEAN         bPreIgnoreWlanAct;\r
@@ -68,7 +72,7 @@ typedef struct _COEX_DM_8812A_1ANT{
        u1Byte          curPsTdma;\r
        u1Byte          psTdmaPara[5];\r
        u1Byte          psTdmaDuAdjType;\r
        u1Byte          curPsTdma;\r
        u1Byte          psTdmaPara[5];\r
        u1Byte          psTdmaDuAdjType;\r
-       BOOLEAN         bResetTdmaAdjust;\r
+       BOOLEAN         bAutoTdmaAdjust;\r
        BOOLEAN         bPrePsTdmaOn;\r
        BOOLEAN         bCurPsTdmaOn;\r
        BOOLEAN         bPreBtAutoReport;\r
        BOOLEAN         bPrePsTdmaOn;\r
        BOOLEAN         bCurPsTdmaOn;\r
        BOOLEAN         bPreBtAutoReport;\r
@@ -81,7 +85,6 @@ typedef struct _COEX_DM_8812A_1ANT{
        // sw mechanism\r
        BOOLEAN         bPreLowPenaltyRa;\r
        BOOLEAN         bCurLowPenaltyRa;\r
        // sw mechanism\r
        BOOLEAN         bPreLowPenaltyRa;\r
        BOOLEAN         bCurLowPenaltyRa;\r
-       BOOLEAN         bPreDacSwingOn;\r
        u4Byte          preVal0x6c0;\r
        u4Byte          curVal0x6c0;\r
        u4Byte          preVal0x6c4;\r
        u4Byte          preVal0x6c0;\r
        u4Byte          curVal0x6c0;\r
        u4Byte          preVal0x6c4;\r
@@ -90,6 +93,12 @@ typedef struct _COEX_DM_8812A_1ANT{
        u4Byte          curVal0x6c8;\r
        u1Byte          preVal0x6cc;\r
        u1Byte          curVal0x6cc;\r
        u4Byte          curVal0x6c8;\r
        u1Byte          preVal0x6cc;\r
        u1Byte          curVal0x6cc;\r
+       BOOLEAN         bLimitedDig;\r
+\r
+       u4Byte          backupArfrCnt1; // Auto Rate Fallback Retry cnt\r
+       u4Byte          backupArfrCnt2; // Auto Rate Fallback Retry cnt\r
+       u2Byte          backupRetryLimit;\r
+       u1Byte          backupAmpduMaxTime;\r
 \r
        // algorithm related\r
        u1Byte          preAlgorithm;\r
 \r
        // algorithm related\r
        u1Byte          preAlgorithm;\r
@@ -99,6 +108,13 @@ typedef struct _COEX_DM_8812A_1ANT{
 \r
        u4Byte          preRaMask;\r
        u4Byte          curRaMask;\r
 \r
        u4Byte          preRaMask;\r
        u4Byte          curRaMask;\r
+       u1Byte          preArfrType;\r
+       u1Byte          curArfrType;\r
+       u1Byte          preRetryLimitType;\r
+       u1Byte          curRetryLimitType;\r
+       u1Byte          preAmpduTimeType;\r
+       u1Byte          curAmpduTimeType;\r
+       u4Byte          nArpCnt;\r
 \r
        u1Byte          errorCondition;\r
 } COEX_DM_8812A_1ANT, *PCOEX_DM_8812A_1ANT;\r
 \r
        u1Byte          errorCondition;\r
 } COEX_DM_8812A_1ANT, *PCOEX_DM_8812A_1ANT;\r
@@ -112,11 +128,13 @@ typedef struct _COEX_STA_8812A_1ANT{
 \r
        BOOLEAN                                 bUnderLps;\r
        BOOLEAN                                 bUnderIps;\r
 \r
        BOOLEAN                                 bUnderLps;\r
        BOOLEAN                                 bUnderIps;\r
+       u4Byte                                  specialPktPeriodCnt;\r
        u4Byte                                  highPriorityTx;\r
        u4Byte                                  highPriorityRx;\r
        u4Byte                                  lowPriorityTx;\r
        u4Byte                                  lowPriorityRx;\r
        u4Byte                                  highPriorityTx;\r
        u4Byte                                  highPriorityRx;\r
        u4Byte                                  lowPriorityTx;\r
        u4Byte                                  lowPriorityRx;\r
-       u1Byte                                  btRssi;\r
+       s1Byte                                  btRssi;\r
+       BOOLEAN                                 bBtTxRxMask;\r
        u1Byte                                  preBtRssiState;\r
        u1Byte                                  preWifiRssiState[4];\r
        BOOLEAN                                 bC2hBtInfoReqSent;\r
        u1Byte                                  preBtRssiState;\r
        u1Byte                                  preWifiRssiState[4];\r
        BOOLEAN                                 bC2hBtInfoReqSent;\r
@@ -124,8 +142,28 @@ typedef struct _COEX_STA_8812A_1ANT{
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8812A_1ANT_MAX];\r
        u4Byte                                  btInfoQueryCnt;\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8812A_1ANT_MAX];\r
        u4Byte                                  btInfoQueryCnt;\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
+       BOOLEAN                                 bC2hBtPage;                             //Add for win8.1 page out issue\r
+       BOOLEAN                                 bWiFiIsHighPriTask;             //Add for win8.1 page out issue\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
+       u4Byte                                  popEventCnt;\r
+       u1Byte                                  nScanAPNum;\r
+\r
+       u4Byte                                  nCRCOK_CCK;\r
+       u4Byte                                  nCRCOK_11g;\r
+       u4Byte                                  nCRCOK_11n;\r
+       u4Byte                                  nCRCOK_11nAgg;\r
+       \r
+       u4Byte                                  nCRCErr_CCK;\r
+       u4Byte                                  nCRCErr_11g;\r
+       u4Byte                                  nCRCErr_11n;\r
+       u4Byte                                  nCRCErr_11nAgg; \r
+\r
+       BOOLEAN                                 bCCKLock;\r
+       BOOLEAN                                 bPreCCKLock;\r
+       u1Byte                                  nCoexTableType;\r
+\r
+       BOOLEAN                                 bForceLpsOn;\r
 }COEX_STA_8812A_1ANT, *PCOEX_STA_8812A_1ANT;\r
 \r
 //===========================================\r
 }COEX_STA_8812A_1ANT, *PCOEX_STA_8812A_1ANT;\r
 \r
 //===========================================\r
@@ -136,6 +174,10 @@ EXhalbtc8812a1ant_PowerOnSetting(
        IN      PBTC_COEXIST            pBtCoexist\r
        );\r
 VOID\r
        IN      PBTC_COEXIST            pBtCoexist\r
        );\r
 VOID\r
+EXhalbtc8812a1ant_PreLoadFirmware(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+VOID\r
 EXhalbtc8812a1ant_InitHwConfig(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bWifiOnly\r
 EXhalbtc8812a1ant_InitHwConfig(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bWifiOnly\r
@@ -181,6 +223,11 @@ EXhalbtc8812a1ant_BtInfoNotify(
        IN      u1Byte                  length\r
        );\r
 VOID\r
        IN      u1Byte                  length\r
        );\r
 VOID\r
+EXhalbtc8812a1ant_RfStatusNotify(\r
+       IN      PBTC_COEXIST                    pBtCoexist,\r
+       IN      u1Byte                                  type\r
+       );\r
+VOID\r
 EXhalbtc8812a1ant_HaltNotify(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        );\r
 EXhalbtc8812a1ant_HaltNotify(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        );\r
@@ -190,17 +237,22 @@ EXhalbtc8812a1ant_PnpNotify(
        IN      u1Byte                          pnpState\r
        );\r
 VOID\r
        IN      u1Byte                          pnpState\r
        );\r
 VOID\r
-EXhalbtc8812a1ant_Periodical(\r
+EXhalbtc8812a1ant_CoexDmReset(\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        );\r
 VOID\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        );\r
 VOID\r
-EXhalbtc8812a1ant_DisplayCoexInfo(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
+EXhalbtc8812a1ant_Periodical(\r
+       IN      PBTC_COEXIST                    pBtCoexist\r
        );\r
 VOID\r
 EXhalbtc8812a1ant_DbgControl(\r
        IN      PBTC_COEXIST                    pBtCoexist,\r
        IN      u1Byte                          opCode,\r
        IN      u1Byte                          opLen,\r
        );\r
 VOID\r
 EXhalbtc8812a1ant_DbgControl(\r
        IN      PBTC_COEXIST                    pBtCoexist,\r
        IN      u1Byte                          opCode,\r
        IN      u1Byte                          opLen,\r
-       IN      pu1Byte                         pData\r
+       IN      pu1Byte                         pData\r
        );\r
        );\r
+VOID\r
+EXhalbtc8812a1ant_DisplayCoexInfo(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+\r
index 82029305e9b1858164cdec9c07a67ceacc06de13..796ac14bdf8648ab1d9b3093181bb436e642ff74 100755 (executable)
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtc8812a2Ant.tmh"\r
+#endif\r
+\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
@@ -28,9 +33,9 @@ const char *const GLBtInfoSrc8812a2Ant[]={
        "BT Info[bt auto report]",\r
 };\r
 \r
        "BT Info[bt auto report]",\r
 };\r
 \r
-u4Byte GLCoexVerDate8812a2Ant=20131017;\r
-u4Byte GLCoexVer8812a2Ant=0x36;\r
-\r
+u4Byte GLCoexVerDate8812a2Ant=20150127;\r
+u4Byte GLCoexVer8812a2Ant=0x37;\r
+//improve 8761ATV D-cut BT off/on fail issue\r
 //============================================================\r
 // local function proto type if needed\r
 //============================================================\r
 //============================================================\r
 // local function proto type if needed\r
 //============================================================\r
@@ -54,30 +59,24 @@ halbtc8812a2ant_BtRssiState(
                if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
                {\r
                if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi pre state=LOW\n"));\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                {\r
                        }\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi pre state=HIGH\n"));\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -85,57 +84,47 @@ halbtc8812a2ant_BtRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Rssi thresh error!!\n"));\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
                {\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi pre state=LOW\n"));\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_MEDIUM))\r
                {\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_MEDIUM))\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi pre state=MEDIUM\n"));\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                {\r
                        }\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi pre state=HIGH\n"));\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -167,12 +156,10 @@ halbtc8812a2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -180,12 +167,10 @@ halbtc8812a2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -193,7 +178,7 @@ halbtc8812a2ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -203,12 +188,10 @@ halbtc8812a2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -217,17 +200,14 @@ halbtc8812a2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -235,12 +215,10 @@ halbtc8812a2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -282,36 +260,49 @@ halbtc8812a2ant_MonitorBtEnableDisable(
        {\r
                bBtActive = FALSE;\r
        }\r
        {\r
                bBtActive = FALSE;\r
        }\r
+\r
+       if((pCoexSta->prebtInfoC2hCnt_BT_RSP == pCoexSta->btInfoC2hCnt[1]) &&\r
+               (pCoexSta->prebtInfoC2hCnt_BT_SEND == pCoexSta->btInfoC2hCnt[2]))\r
+       {\r
+               bBtActive = FALSE;\r
+       }\r
+       pCoexSta->prebtInfoC2hCnt_BT_RSP = pCoexSta->btInfoC2hCnt[1];\r
+       pCoexSta->prebtInfoC2hCnt_BT_SEND = pCoexSta->btInfoC2hCnt[2];\r
+       \r
        if(bBtActive)\r
        {\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
        if(bBtActive)\r
        {\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt is detected as disabled %d times!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt is detected as disabled %d times!!\n", \r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is disabled !!\n"));\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n", \r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
                if(!bBtDisabled)\r
                {\r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
                if(!bBtDisabled)\r
                {\r
+                       // enable PTA\r
+                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x40, 0x20);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
+                       // disable PTA\r
+                       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x40, 0x00);\r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -525,9 +516,9 @@ halbtc8812a2ant_MonitorBtCtr(
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
@@ -611,6 +602,7 @@ halbtc8812a2ant_UpdateBtLinkInfo(
        pBtLinkInfo->bA2dpExist = pCoexSta->bA2dpExist;\r
        pBtLinkInfo->bPanExist = pCoexSta->bPanExist;\r
        pBtLinkInfo->bHidExist = pCoexSta->bHidExist;\r
        pBtLinkInfo->bA2dpExist = pCoexSta->bA2dpExist;\r
        pBtLinkInfo->bPanExist = pCoexSta->bPanExist;\r
        pBtLinkInfo->bHidExist = pCoexSta->bHidExist;\r
+       pBtLinkInfo->bAclBusy = pCoexSta->bAclBusy;\r
 \r
        // work around for HS mode.\r
        if(bBtHsOn)\r
 \r
        // work around for HS mode.\r
        if(bBtHsOn)\r
@@ -684,7 +676,7 @@ halbtc8812a2ant_ActionAlgorithm(
        \r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
        \r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No BT link exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No BT link exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
@@ -697,35 +689,43 @@ halbtc8812a2ant_ActionAlgorithm(
        if(pBtLinkInfo->bA2dpExist)\r
                numOfDiffProfile++;\r
        \r
        if(pBtLinkInfo->bA2dpExist)\r
                numOfDiffProfile++;\r
        \r
-       if(numOfDiffProfile == 1)\r
+       if(numOfDiffProfile == 0)\r
+       {\r
+               if(pBtLinkInfo->bAclBusy)\r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ACL Busy only\n"));\r
+                       algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR;\r
+               }\r
+       }\r
+       else if(numOfDiffProfile == 1)\r
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO only\n"));\r
                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID only\n"));\r
                                algorithm = BT_8812A_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8812A_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP only\n"));\r
                                algorithm = BT_8812A_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8812A_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(HS) only\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(EDR) only\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
@@ -737,24 +737,24 @@ halbtc8812a2ant_ActionAlgorithm(
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID\n"));\r
                                algorithm = BT_8812A_2ANT_COEX_ALGO_SCO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8812A_2ANT_COEX_ALGO_SCO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
                                algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(HS)\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(EDR)\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                        }\r
@@ -766,12 +766,12 @@ halbtc8812a2ant_ActionAlgorithm(
                        {\r
                                if(pStackInfo->numOfHid >= 2)\r
                                {\r
                        {\r
                                if(pStackInfo->numOfHid >= 2)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID*2 + A2DP\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID*2 + A2DP\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                                else\r
                                {                       \r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                                else\r
                                {                       \r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                        }\r
@@ -780,12 +780,12 @@ halbtc8812a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(HS)\n"));\r
                                        algorithm =  BT_8812A_2ANT_COEX_ALGO_HID;\r
                                }\r
                                else\r
                                {\r
                                        algorithm =  BT_8812A_2ANT_COEX_ALGO_HID;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -794,12 +794,12 @@ halbtc8812a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
@@ -812,7 +812,7 @@ halbtc8812a2ant_ActionAlgorithm(
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
                                algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
                                algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
@@ -820,12 +820,12 @@ halbtc8812a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO_HID;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO_HID;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO_HID;\r
                                }\r
                        }\r
@@ -834,12 +834,12 @@ halbtc8812a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -852,12 +852,12 @@ halbtc8812a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
@@ -873,12 +873,12 @@ halbtc8812a2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
 \r
                                }\r
                                else\r
                                {\r
 \r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8812A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -900,8 +900,8 @@ halbtc8812a2ant_SetFwDacSwingLevel(
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
 }\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
 }\r
@@ -915,7 +915,7 @@ halbtc8812a2ant_SetFwDecBtPwr(
        u1Byte  dataLen=4;\r
        u1Byte  buf[6] = {0};\r
 \r
        u1Byte  dataLen=4;\r
        u1Byte  buf[6] = {0};\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power level = %d\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], decrease Bt Power level = %d\n", \r
                decBtPwrLvl));\r
 \r
        buf[0] = dataLen;\r
                decBtPwrLvl));\r
 \r
        buf[0] = dataLen;\r
@@ -937,15 +937,12 @@ halbtc8812a2ant_DecBtPwr(
        IN      u1Byte                  decBtPwrLvl\r
        )\r
 {\r
        IN      u1Byte                  decBtPwrLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power level = %d\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s Dec BT power level = %d\n",  \r
                (bForceExec? "force to":""), decBtPwrLvl));\r
        pCoexDm->curBtDecPwrLvl = decBtPwrLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), decBtPwrLvl));\r
        pCoexDm->curBtDecPwrLvl = decBtPwrLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preBtDecPwrLvl=%d, curBtDecPwrLvl=%d\n", \r
-                       pCoexDm->preBtDecPwrLvl, pCoexDm->curBtDecPwrLvl));\r
-\r
                if(pCoexDm->preBtDecPwrLvl == pCoexDm->curBtDecPwrLvl) \r
                        return;\r
        }\r
                if(pCoexDm->preBtDecPwrLvl == pCoexDm->curBtDecPwrLvl) \r
                        return;\r
        }\r
@@ -961,15 +958,12 @@ halbtc8812a2ant_FwDacSwingLvl(
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n", \r
-                       pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
-\r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
                        return;\r
        }\r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
                        return;\r
        }\r
@@ -988,7 +982,7 @@ halbtc8812a2ant_SetSwRfRxLpfCorner(
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
        }\r
        else\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
        }\r
        else\r
@@ -997,7 +991,7 @@ halbtc8812a2ant_SetSwRfRxLpfCorner(
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
@@ -1010,15 +1004,12 @@ halbtc8812a2ant_RfShrink(
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
-                       pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
-\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
@@ -1039,12 +1030,12 @@ halbtc8812a2ant_SetSwPenaltyTxRateAdaptive(
        tmpU1 |= BIT0;\r
        if(bLowPenaltyRa)\r
        {\r
        tmpU1 |= BIT0;\r
        if(bLowPenaltyRa)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set low penalty!!\n"));\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
                tmpU1 &= ~BIT2;\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Tx rate adaptive, set normal!!\n"));\r
                tmpU1 |= BIT2;\r
        }\r
 \r
                tmpU1 |= BIT2;\r
        }\r
 \r
@@ -1059,15 +1050,12 @@ halbtc8812a2ant_LowPenaltyRa(
        )\r
 {\r
        return;\r
        )\r
 {\r
        return;\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
-                       pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
-\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
@@ -1084,7 +1072,7 @@ halbtc8812a2ant_SetDacSwingReg(
 {\r
        u1Byte  val=(u1Byte)level;\r
 \r
 {\r
        u1Byte  val=(u1Byte)level;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc5b, 0x3e, val);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc5b, 0x3e, val);\r
 }\r
 \r
@@ -1114,17 +1102,13 @@ halbtc8812a2ant_DacSwing(
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
-                       pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
-                       pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
-\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
@@ -1144,12 +1128,12 @@ halbtc8812a2ant_SetAdcBackOff(
 {\r
        if(bAdcBackOff)\r
        {\r
 {\r
        if(bAdcBackOff)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level On!\n"));\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x3);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x3);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level Off!\n"));\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x1);\r
        }\r
 }\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x1);\r
        }\r
 }\r
@@ -1161,15 +1145,12 @@ halbtc8812a2ant_AdcBackOff(
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
-                       pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
-\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
@@ -1189,14 +1170,14 @@ halbtc8812a2ant_SetAgcTable(
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
        if(bAgcTableEn)\r
        {\r
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table On!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x28F4B);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x10AB2);\r
                rssiAdjustVal = 8;\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x28F4B);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x10AB2);\r
                rssiAdjustVal = 8;\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table Off!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x2884B);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x104B2);\r
        }\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x2884B);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x104B2);\r
        }\r
@@ -1213,15 +1194,12 @@ halbtc8812a2ant_AgcTable(
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s %s Agc Table\n",  \r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
-                       pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
-\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
@@ -1239,16 +1217,16 @@ halbtc8812a2ant_SetCoexTable(
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -1262,7 +1240,7 @@ halbtc8812a2ant_CoexTable(
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
@@ -1270,12 +1248,7 @@ halbtc8812a2ant_CoexTable(
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
-       \r
+       {       \r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
@@ -1332,7 +1305,7 @@ halbtc8812a2ant_SetFwIgnoreWlanAct(
        u1Byte  dataLen=3;\r
        u1Byte  buf[5] = {0};\r
 \r
        u1Byte  dataLen=3;\r
        u1Byte  buf[5] = {0};\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], %s BT Ignore Wlan_Act\n",\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s BT Ignore Wlan_Act\n",\r
                (bEnable? "Enable":"Disable")));\r
 \r
        buf[0] = dataLen;\r
                (bEnable? "Enable":"Disable")));\r
 \r
        buf[0] = dataLen;\r
@@ -1353,15 +1326,12 @@ halbtc8812a2ant_IgnoreWlanAct(
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
-                       pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
-\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
@@ -1381,20 +1351,38 @@ halbtc8812a2ant_SetFwPstdma(
        )\r
 {\r
        u1Byte                  H2C_Parameter[5] ={0};\r
        )\r
 {\r
        u1Byte                  H2C_Parameter[5] ={0};\r
+       u1Byte                  realByte1=byte1, realByte5=byte5;\r
+       BOOLEAN                 bApEnable=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+\r
+       if(bApEnable)\r
+       {\r
+               if(byte1&BIT4 && !(byte1&BIT5))\r
+               {                       \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], FW for 1Ant AP mode\n"));\r
+                       realByte1 &= ~BIT4;\r
+                       realByte1 |= BIT5;\r
 \r
 \r
-       H2C_Parameter[0] = byte1;       \r
+                       realByte5 |= BIT5;\r
+                       realByte5 &= ~BIT6;\r
+               }\r
+       }\r
+\r
+       H2C_Parameter[0] = realByte1;   \r
        H2C_Parameter[1] = byte2;       \r
        H2C_Parameter[2] = byte3;\r
        H2C_Parameter[3] = byte4;\r
        H2C_Parameter[1] = byte2;       \r
        H2C_Parameter[2] = byte3;\r
        H2C_Parameter[3] = byte4;\r
-       H2C_Parameter[4] = byte5;\r
+       H2C_Parameter[4] = realByte5;\r
+\r
 \r
 \r
-       pCoexDm->psTdmaPara[0] = byte1;\r
+       pCoexDm->psTdmaPara[0] = realByte1;\r
        pCoexDm->psTdmaPara[1] = byte2;\r
        pCoexDm->psTdmaPara[2] = byte3;\r
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[1] = byte2;\r
        pCoexDm->psTdmaPara[2] = byte3;\r
        pCoexDm->psTdmaPara[3] = byte4;\r
-       pCoexDm->psTdmaPara[4] = byte5;\r
-       \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n", \r
+       pCoexDm->psTdmaPara[4] = realByte5;\r
+\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], PS-TDMA H2C cmd =0x%x%08x\n", \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
@@ -1425,16 +1413,13 @@ halbtc8812a2ant_LpsRpwm(
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preLps/curLps=0x%x/0x%x, preRpwm/curRpwm=0x%x/0x%x!!\n", \r
-                       pCoexDm->preLps, pCoexDm->curLps, pCoexDm->preRpwm, pCoexDm->curRpwm));\r
-\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
@@ -1533,18 +1518,13 @@ halbtc8812a2ant_PsTdma(
        BOOLEAN                 bTurnOnByCnt=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0;\r
 \r
        BOOLEAN                 bTurnOnByCnt=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
                (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
-                       pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
-                       pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
-\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
@@ -1564,7 +1544,7 @@ halbtc8812a2ant_PsTdma(
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xb1, 0x90);\r
                                break;\r
                        case 4:\r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xb1, 0x90);\r
                                break;\r
                        case 4:\r
-                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xb1, 0x90);\r
+                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0xb1, 0x90);\r
                                break;\r
                        case 5:\r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x21, 0x10);\r
                                break;\r
                        case 5:\r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x21, 0x10);\r
@@ -1585,10 +1565,10 @@ halbtc8812a2ant_PsTdma(
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xa1, 0x10);\r
                                break;\r
                        case 11:        \r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xa1, 0x10);\r
                                break;\r
                        case 11:        \r
-                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x03, 0xb1, 0x10);\r
+                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xb1, 0x10);\r
                                break;\r
                        case 12:\r
                                break;\r
                        case 12:\r
-                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xb1, 0x10);\r
+                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0xb1, 0x10);\r
                                break;\r
                        case 13:\r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x21, 0x10);\r
                                break;\r
                        case 13:\r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x21, 0x10);\r
@@ -1597,13 +1577,13 @@ halbtc8812a2ant_PsTdma(
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x21, 0x10);\r
                                break;\r
                        case 15:\r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x21, 0x10);\r
                                break;\r
                        case 15:\r
-                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x03, 0x21, 0x10);\r
+                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x21, 0x10);\r
                                break;\r
                        case 16:\r
                                break;\r
                        case 16:\r
-                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0x21, 0x10);\r
+                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0x21, 0x10);\r
                                break;\r
                        case 17:\r
                                break;\r
                        case 17:\r
-                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0xb1, 0x10);\r
+                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x35, 0x3, 0xb1, 0x11);\r
                                break;\r
                        case 18:\r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);\r
                                break;\r
                        case 18:\r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);\r
@@ -1615,8 +1595,15 @@ halbtc8812a2ant_PsTdma(
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);\r
                                break;\r
                        case 21:        \r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);\r
                                break;\r
                        case 21:        \r
-                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
+                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x3, 0x70, 0x90);\r
+                               break;\r
+                       case 22:        \r
+                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0x61, 0x1a, 0x1a, 0x21, 0x10);\r
                                break;\r
                                break;\r
+                       case 23:        \r
+                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x03, 0x31, 0x10);\r
+                               break;\r
+\r
                        case 71:\r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
                                break;\r
                        case 71:\r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
                                break;\r
@@ -1651,12 +1638,12 @@ halbtc8812a2ant_PsTdma(
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0x8, 0x0, 0x0, 0x0, 0x0);\r
                                break;\r
                        case 1: //ANT2BT, 0x778=3\r
                                halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0x8, 0x0, 0x0, 0x0, 0x0);\r
                                break;\r
                        case 1: //ANT2BT, 0x778=3\r
-                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x08, 0x0);                              \r
+                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x8, 0x0);                               \r
                                delay_ms(5);\r
                                halbtc8812a2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_CPL_AUX, FALSE, FALSE);\r
                                break;\r
                        default:\r
                                delay_ms(5);\r
                                halbtc8812a2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_CPL_AUX, FALSE, FALSE);\r
                                break;\r
                        default:\r
-                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x00, 0x0);\r
+                               halbtc8812a2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);\r
                                break;\r
                }\r
        }\r
                                break;\r
                }\r
        }\r
@@ -1794,6 +1781,14 @@ halbtc8812a2ant_IsCommonAction(
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
 \r
+\r
+       if(pCoexSta->bC2hBtInquiryPage)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
+               halbtc8812a2ant_ActionBtInquiry(pBtCoexist);\r
+               return TRUE;\r
+       }\r
+\r
        if(pBtLinkInfo->bScoExist || pBtLinkInfo->bHidExist)\r
        {\r
                halbtc8812a2ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 1, 0, 0, 0);\r
        if(pBtLinkInfo->bScoExist || pBtLinkInfo->bHidExist)\r
        {\r
                halbtc8812a2ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 1, 0, 0, 0);\r
@@ -1808,7 +1803,7 @@ halbtc8812a2ant_IsCommonAction(
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, FALSE, 0x0, 0x0);\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, FALSE, 0x0, 0x0);\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non-connected idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non-connected idle!!\n"));\r
 \r
                if( (BT_8812A_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) ||\r
                        (BT_8812A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
 \r
                if( (BT_8812A_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) ||\r
                        (BT_8812A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
@@ -1834,11 +1829,11 @@ halbtc8812a2ant_IsCommonAction(
        {\r
                if(BT_8812A_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
                {\r
        {\r
                if(BT_8812A_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
                        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, FALSE, 0x0, 0x0);\r
                        halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
                        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, FALSE, 0x0, 0x0);\r
                        halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
-                       halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 1);\r
+                       halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);              \r
                        halbtc8812a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                        halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);              \r
                        halbtc8812a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                        halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
@@ -1853,11 +1848,11 @@ halbtc8812a2ant_IsCommonAction(
                        if(bBtHsOn)\r
                                return FALSE;\r
 \r
                        if(bBtHsOn)\r
                                return FALSE;\r
 \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
                        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
                        halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
                        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
                        halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
-                       halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 1);\r
+                       halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                        halbtc8812a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                        halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                        halbtc8812a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                        halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
@@ -1871,30 +1866,21 @@ halbtc8812a2ant_IsCommonAction(
                {\r
                        if(bWifiBusy)\r
                        {\r
                {\r
                        if(bWifiBusy)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
                                bCommon = FALSE;\r
                        }\r
                        else\r
                        {\r
                                bCommon = FALSE;\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
-                               wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
 \r
 \r
-                               if(BTC_RSSI_HIGH(wifiRssiState)) \r
-                                       halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
-                               else\r
-                                       halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
+                               halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
                                        \r
                                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
                                        \r
                                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
-                               if(BTC_RSSI_HIGH(wifiRssiState))\r
-                                       halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);\r
-                               else\r
-                                       halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+                               halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+                               halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 17);\r
 \r
 \r
-                               if(BTC_RSSI_HIGH(wifiRssiState))\r
-                                       halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 17);\r
-                               else\r
-                                       halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 83);\r
                                halbtc8812a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                                halbtc8812a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
                                halbtc8812a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                                halbtc8812a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
@@ -1919,14 +1905,14 @@ halbtc8812a2ant_TdmaDurationAdjust(
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TdmaDurationAdjust()\n"));\r
 \r
        pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;\r
        \r
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
 \r
        pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;\r
        \r
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
                {\r
                        if(bScoHid)\r
                        {\r
                {\r
                        if(bScoHid)\r
                        {\r
@@ -2039,8 +2025,8 @@ halbtc8812a2ant_TdmaDurationAdjust(
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], retryCount = %d\n", retryCount));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
@@ -2060,7 +2046,7 @@ halbtc8812a2ant_TdmaDurationAdjust(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -2086,7 +2072,7 @@ halbtc8812a2ant_TdmaDurationAdjust(
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -2104,15 +2090,15 @@ halbtc8812a2ant_TdmaDurationAdjust(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
 \r
                }\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], max Interval = %d\n", maxInterval));\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
 \r
                                if(pCoexDm->curPsTdma == 71)\r
                                {\r
 \r
                                if(pCoexDm->curPsTdma == 71)\r
                                {\r
@@ -2229,7 +2215,7 @@ halbtc8812a2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
@@ -2353,7 +2339,7 @@ halbtc8812a2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
@@ -2463,7 +2449,7 @@ halbtc8812a2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
@@ -2576,7 +2562,7 @@ halbtc8812a2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
@@ -2686,7 +2672,7 @@ halbtc8812a2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
@@ -2802,7 +2788,7 @@ halbtc8812a2ant_TdmaDurationAdjust(
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
@@ -2815,7 +2801,7 @@ halbtc8812a2ant_TdmaDurationAdjust(
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -2833,7 +2819,7 @@ halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow(
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0, btInfoExt;\r
 \r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0, btInfoExt;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow()\n"));\r
 #if 0\r
        if( (BT_8812A_2ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus) ||\r
                (BT_8812A_2ANT_WIFI_STATUS_CONNECTED_SCAN == wifiStatus) ||\r
 #if 0\r
        if( (BT_8812A_2ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus) ||\r
                (BT_8812A_2ANT_WIFI_STATUS_CONNECTED_SCAN == wifiStatus) ||\r
@@ -2859,13 +2845,24 @@ halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow(
 #endif\r
        pCoexDm->bAutoTdmaAdjust = FALSE;\r
 \r
 #endif\r
        pCoexDm->bAutoTdmaAdjust = FALSE;\r
 \r
+       retryCount = pCoexSta->btRetryCnt;\r
+       btInfoExt = pCoexSta->btInfoExt;\r
+\r
        if(!pCoexDm->bAutoTdmaAdjustLowRssi)\r
        {\r
                pCoexDm->bAutoTdmaAdjustLowRssi = TRUE;\r
        if(!pCoexDm->bAutoTdmaAdjustLowRssi)\r
        {\r
                pCoexDm->bAutoTdmaAdjustLowRssi = TRUE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjustForWifiRssiLow()!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjustForWifiRssiLow()!!\n"));\r
 \r
 \r
+               if(BT_INFO_8812A_2ANT_A2DP_BASIC_RATE(btInfoExt))\r
+               {\r
+                       halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 83);\r
+                       pCoexDm->psTdmaDuAdjType = 83;\r
+               }\r
+               else\r
+               {\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 82);\r
                pCoexDm->psTdmaDuAdjType = 82;\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 82);\r
                pCoexDm->psTdmaDuAdjType = 82;\r
+               }\r
                //============\r
                up = 0;\r
                dn = 0;\r
                //============\r
                up = 0;\r
                dn = 0;\r
@@ -2877,14 +2874,17 @@ halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow(
        else\r
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
        else\r
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
-               retryCount = pCoexSta->btRetryCnt;\r
-               btInfoExt = pCoexSta->btInfoExt;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
+//             retryCount = pCoexSta->btRetryCnt;\r
+//             btInfoExt = pCoexSta->btInfoExt;\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], retryCount = %d\n", retryCount));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
                  \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
                  \r
+               if ( (pCoexSta->lowPriorityTx) > 1150 ||  (pCoexSta->lowPriorityRx) > 1250 )\r
+                       retryCount++;   \r
+                               \r
                if(retryCount == 0)  // no retry in the last 2-second duration\r
                {\r
                        up++;\r
                if(retryCount == 0)  // no retry in the last 2-second duration\r
                {\r
                        up++;\r
@@ -2900,7 +2900,7 @@ halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -2926,7 +2926,7 @@ halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow(
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -2944,7 +2944,7 @@ halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
 \r
                if(result == -1)\r
                }\r
 \r
                if(result == -1)\r
@@ -2952,8 +2952,8 @@ halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow(
                        if( (BT_INFO_8812A_2ANT_A2DP_BASIC_RATE(btInfoExt)) &&\r
                                ((pCoexDm->curPsTdma == 81) ||(pCoexDm->curPsTdma == 82)) )\r
                        {\r
                        if( (BT_INFO_8812A_2ANT_A2DP_BASIC_RATE(btInfoExt)) &&\r
                                ((pCoexDm->curPsTdma == 81) ||(pCoexDm->curPsTdma == 82)) )\r
                        {\r
-                               halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 83);\r
-                               pCoexDm->psTdmaDuAdjType = 83;\r
+                               halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 84);\r
+                               pCoexDm->psTdmaDuAdjType = 84;\r
                        }\r
                        else if(pCoexDm->curPsTdma == 81)\r
                        {\r
                        }\r
                        else if(pCoexDm->curPsTdma == 81)\r
                        {\r
@@ -3007,6 +3007,46 @@ halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow(
        }\r
 }\r
 \r
        }\r
 }\r
 \r
+VOID\r
+halbtc8812a2ant_GetBtRssiThreshold(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      pu1Byte                         pThres0,\r
+       IN      pu1Byte                         pThres1\r
+       )\r
+{\r
+       u1Byte antType, btThreshold=0;\r
+       \r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_ANT_TYPE, &antType);\r
+\r
+       switch(antType)\r
+       {\r
+               case BTC_ANT_TYPE_0:\r
+                       *pThres0 = 100;\r
+                       *pThres1 = 100;\r
+                       break;\r
+               case BTC_ANT_TYPE_1:\r
+                       *pThres0 = 34;\r
+                       *pThres1 = 42;\r
+                       break;\r
+               case BTC_ANT_TYPE_2:\r
+                       *pThres0 = 34;\r
+                       *pThres1 = 42;\r
+                       break;\r
+               case BTC_ANT_TYPE_3:\r
+                       *pThres0 = 34;\r
+                       *pThres1 = 42;\r
+                       break;\r
+               case BTC_ANT_TYPE_4:\r
+                       *pThres0 = 34;\r
+                       *pThres1 = 42;\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+}\r
+\r
+\r
+\r
 VOID\r
 halbtc8812a2ant_ActionSco(\r
        IN      PBTC_COEXIST            pBtCoexist\r
 VOID\r
 halbtc8812a2ant_ActionSco(\r
        IN      PBTC_COEXIST            pBtCoexist\r
@@ -3014,9 +3054,14 @@ halbtc8812a2ant_ActionSco(
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+\r
+\r
+       halbtc8812a2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8812a2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
-       btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
+//     btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
 \r
        // power save state\r
        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
 \r
        // power save state\r
        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
@@ -3085,9 +3130,13 @@ halbtc8812a2ant_ActionScoHid(
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+\r
+       halbtc8812a2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8812a2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
-       btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
+//     btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
 \r
        // power save state\r
        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
 \r
        // power save state\r
        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
@@ -3153,24 +3202,28 @@ halbtc8812a2ant_ActionHid(
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+\r
+       halbtc8812a2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8812a2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
-       btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
+//     btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
 \r
        // power save state\r
        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
 \r
        // coex table\r
 \r
        // power save state\r
        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
 \r
        // coex table\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
        else\r
-               halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
+               halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
 \r
        // pstdma\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
        else\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
        else\r
-               halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
+               halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
        \r
        // decrease BT power\r
        if(BTC_RSSI_LOW(btRssiState))\r
        \r
        // decrease BT power\r
        if(BTC_RSSI_LOW(btRssiState))\r
@@ -3181,9 +3234,9 @@ halbtc8812a2ant_ActionHid(
                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
        // limited Rx\r
                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
        // limited Rx\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);  \r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);  \r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
        else\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
        else\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
@@ -3230,24 +3283,31 @@ halbtc8812a2ant_ActionA2dp(
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+       BOOLEAN                 bApEnable=FALSE;\r
 \r
 \r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+\r
+       halbtc8812a2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8812a2ant_BtRssiState(3, btThresh0, btThresh1);\r
+       \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
-       btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
+       //btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
 \r
        // power save state\r
 \r
        // power save state\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState))))\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
        else\r
                halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
        else\r
                halbtc8812a2ant_TdmaDurationAdjustForWifiRssiLow(pBtCoexist);\r
@@ -3304,21 +3364,25 @@ halbtc8812a2ant_ActionA2dpPanHs(
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+\r
+       halbtc8812a2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8812a2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
-       btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
+//     btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
 \r
        // power save state\r
        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
 \r
        // coex table   \r
 \r
        // power save state\r
        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
 \r
        // coex table   \r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
 \r
        // pstdma       \r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
 \r
        // pstdma       \r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 2);                \r
        else\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 2);                \r
        else\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
@@ -3375,24 +3439,32 @@ halbtc8812a2ant_ActionPanEdr(
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+       BOOLEAN         bApEnable=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+\r
+\r
+       halbtc8812a2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8812a2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
-       btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
+//     btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
 \r
        // power save state\r
 \r
        // power save state\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState))))\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
        else\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 85);\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
        else\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 85);\r
@@ -3515,30 +3587,38 @@ halbtc8812a2ant_ActionPanEdrA2dp(
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+       BOOLEAN                 bApEnable=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+\r
+       halbtc8812a2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8812a2ant_BtRssiState(3, btThresh0, btThresh1);\r
+\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
-       btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
+//     btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
 \r
        // power save state     \r
 \r
        // power save state     \r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState))))\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0); \r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0); \r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
        else\r
        {\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
        else\r
        {\r
@@ -3598,30 +3678,37 @@ halbtc8812a2ant_ActionPanEdrHid(
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+       BOOLEAN                 bApEnable=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+\r
+       halbtc8812a2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8812a2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
-       btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
+//     btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
 \r
        // power save state\r
 \r
        // power save state\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState))))\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0); \r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0); \r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);  \r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);  \r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);      \r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);      \r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
        else\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 85);\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
        else\r
                halbtc8812a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 85);\r
@@ -3635,9 +3722,9 @@ halbtc8812a2ant_ActionPanEdrHid(
                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
        // limited Rx\r
                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
        // limited Rx\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) &&  (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
        else\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
        else\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
@@ -3684,30 +3771,37 @@ halbtc8812a2ant_ActionHidA2dpPanEdr(
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+       BOOLEAN                 bApEnable=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+\r
+       halbtc8812a2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8812a2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
-       btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
+//     btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
 \r
        // power save state\r
 \r
        // power save state\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState))))\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0); \r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0); \r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
        else\r
        {\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
        else\r
        {\r
@@ -3724,9 +3818,9 @@ halbtc8812a2ant_ActionHidA2dpPanEdr(
                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
        // limited Rx\r
                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
        // limited Rx\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
        else\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
        else\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
@@ -3772,25 +3866,30 @@ halbtc8812a2ant_ActionHidA2dpPanHs(
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+\r
+       halbtc8812a2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8812a2ant_BtRssiState(3, btThresh0, btThresh1);\r
+       \r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
-       btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
+//     btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
 \r
        // power save state\r
        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
 \r
        // coex table\r
 \r
        // power save state\r
        halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
 \r
        // coex table\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
        else\r
-               halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
+               halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
 \r
        // pstdma\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2); \r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2); \r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
        else\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
        else\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
@@ -3804,9 +3903,9 @@ halbtc8812a2ant_ActionHidA2dpPanHs(
                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
        // limited Rx\r
                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
        // limited Rx\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
        else\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
        else\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
@@ -3852,30 +3951,37 @@ halbtc8812a2ant_ActionHidA2dp(
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
 {\r
        u1Byte          wifiRssiState=BTC_RSSI_STATE_HIGH, btRssiState=BTC_RSSI_STATE_HIGH;\r
        u4Byte          wifiBw;\r
+       u1Byte          btThresh0=0, btThresh1=0;\r
+       BOOLEAN                 bApEnable=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);\r
+\r
+       halbtc8812a2ant_GetBtRssiThreshold(pBtCoexist, &btThresh0, &btThresh1);\r
+       btRssiState = halbtc8812a2ant_BtRssiState(3, btThresh0, btThresh1);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
 \r
        wifiRssiState = halbtc8812a2ant_WifiRssiState(pBtCoexist, 0, 2, 34, 0);\r
-       btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
+//     btRssiState = halbtc8812a2ant_BtRssiState(3, 34, 42);\r
 \r
        // power save state     \r
 \r
        // power save state     \r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if((bApEnable == TRUE) || (BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState))))\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, TRUE, 0x0, 0x0);\r
        else\r
                halbtc8812a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, TRUE, 0x50, 0x4);\r
 \r
        // coex table\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 3);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);\r
        else\r
                halbtc8812a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        // pstdma\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
        else\r
        {\r
                halbtc8812a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
        else\r
        {\r
@@ -3892,9 +3998,9 @@ halbtc8812a2ant_ActionHidA2dp(
                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
        // limited Rx\r
                halbtc8812a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
        // limited Rx\r
-       if(BTC_RSSI_HIGH(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       if(BTC_RSSI_HIGH(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
-       else if(BTC_RSSI_LOW(wifiRssiState) && BTC_RSSI_HIGH(btRssiState))\r
+       else if(BTC_RSSI_LOW(wifiRssiState) && (!BTC_RSSI_LOW(btRssiState)))\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
        else\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
        else\r
                halbtc8812a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
@@ -3941,6 +4047,7 @@ halbtc8812a2ant_CoexUnder5G(
 {\r
        halbtc8812a2ant_CoexAllOff(pBtCoexist);\r
 \r
 {\r
        halbtc8812a2ant_CoexAllOff(pBtCoexist);\r
 \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Under 5G, force set BT to ignore Wlan active!!\n"));\r
        halbtc8812a2ant_IgnoreWlanAct(pBtCoexist, NORMAL_EXEC, TRUE);\r
 }\r
 //====================================================\r
        halbtc8812a2ant_IgnoreWlanAct(pBtCoexist, NORMAL_EXEC, TRUE);\r
 }\r
 //====================================================\r
@@ -3953,42 +4060,43 @@ halbtc8812a2ant_RunCoexistMechanism(
        u1Byte                          btInfoOriginal=0, btRetryCnt=0;\r
        u1Byte                          algorithm=0;\r
 \r
        u1Byte                          btInfoOriginal=0, btRetryCnt=0;\r
        u1Byte                          algorithm=0;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is under IPS !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is under IPS !!!\n"));\r
                return;\r
        }\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
        if(bWifiUnder5G)\r
        {\r
                return;\r
        }\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
        if(bWifiUnder5G)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n"));\r
                halbtc8812a2ant_CoexUnder5G(pBtCoexist);\r
                return;\r
        }\r
 \r
                halbtc8812a2ant_CoexUnder5G(pBtCoexist);\r
                return;\r
        }\r
 \r
+\r
        algorithm = halbtc8812a2ant_ActionAlgorithm(pBtCoexist);\r
        if(pCoexSta->bC2hBtInquiryPage && (BT_8812A_2ANT_COEX_ALGO_PANHS!=algorithm))\r
        {\r
        algorithm = halbtc8812a2ant_ActionAlgorithm(pBtCoexist);\r
        if(pCoexSta->bC2hBtInquiryPage && (BT_8812A_2ANT_COEX_ALGO_PANHS!=algorithm))\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
                halbtc8812a2ant_ActionBtInquiry(pBtCoexist);\r
                return;\r
        }\r
 \r
        pCoexDm->curAlgorithm = algorithm;\r
                halbtc8812a2ant_ActionBtInquiry(pBtCoexist);\r
                return;\r
        }\r
 \r
        pCoexDm->curAlgorithm = algorithm;\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
 \r
        if(halbtc8812a2ant_IsCommonAction(pBtCoexist))\r
        {\r
 \r
        if(halbtc8812a2ant_IsCommonAction(pBtCoexist))\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant common.\n"));\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;\r
        }\r
                pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;\r
        }\r
@@ -3996,7 +4104,7 @@ halbtc8812a2ant_RunCoexistMechanism(
        {\r
                if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
                {\r
        {\r
                if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
                                pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
                        pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;\r
                                pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
                        pCoexDm->bAutoTdmaAdjustLowRssi = FALSE;\r
@@ -4004,60 +4112,61 @@ halbtc8812a2ant_RunCoexistMechanism(
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8812A_2ANT_COEX_ALGO_SCO:\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8812A_2ANT_COEX_ALGO_SCO:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
                                halbtc8812a2ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_SCO_HID:\r
                                halbtc8812a2ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_SCO_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO+HID.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = SCO+HID.\n"));\r
                                halbtc8812a2ant_ActionScoHid(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_HID:\r
                                halbtc8812a2ant_ActionScoHid(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
                                halbtc8812a2ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_A2DP:\r
                                halbtc8812a2ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
                                halbtc8812a2ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_A2DP_PANHS:\r
                                halbtc8812a2ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_A2DP_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
                                halbtc8812a2ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_PANEDR:\r
                                halbtc8812a2ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
                                halbtc8812a2ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_PANHS:\r
                                halbtc8812a2ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
                                halbtc8812a2ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_PANEDR_A2DP:\r
                                halbtc8812a2ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_PANEDR_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
                                halbtc8812a2ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_PANEDR_HID:\r
                                halbtc8812a2ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_PANEDR_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
                                halbtc8812a2ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
                                halbtc8812a2ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
                                halbtc8812a2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANHS:\r
                                halbtc8812a2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN(HS).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN(HS).\n"));\r
                                halbtc8812a2ant_ActionHidA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_HID_A2DP:\r
                                halbtc8812a2ant_ActionHidA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8812A_2ANT_COEX_ALGO_HID_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
                                halbtc8812a2ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
                                halbtc8812a2ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
                                halbtc8812a2ant_CoexAllOff(pBtCoexist);\r
                                break;\r
                }\r
                pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
        }\r
                                halbtc8812a2ant_CoexAllOff(pBtCoexist);\r
                                break;\r
                }\r
                pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
        }\r
+       \r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -4070,7 +4179,7 @@ halbtc8812a2ant_InitHwConfig(
        u2Byte  u2Tmp=0;\r
        u1Byte  u1Tmp=0;\r
 \r
        u2Byte  u2Tmp=0;\r
        u1Byte  u1Tmp=0;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
 \r
        if(bBackUp)\r
        {\r
 \r
        if(bBackUp)\r
        {\r
@@ -4146,7 +4255,7 @@ EXhalbtc8812a2ant_InitCoexDm(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
        \r
        halbtc8812a2ant_InitCoexDm(pBtCoexist);\r
 }\r
        \r
        halbtc8812a2ant_InitCoexDm(pBtCoexist);\r
 }\r
@@ -4351,17 +4460,30 @@ EXhalbtc8812a2ant_IpsNotify(
        IN      u1Byte                  type\r
        )\r
 {\r
        IN      u1Byte                  type\r
        )\r
 {\r
+       BOOLEAN bWifiUnder5G=FALSE;\r
+       \r
        if(BTC_IPS_ENTER == type)\r
        {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                pCoexSta->bUnderIps = TRUE;\r
                halbtc8812a2ant_CoexAllOff(pBtCoexist);\r
                halbtc8812a2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_CPL_AUX, FALSE, TRUE);\r
                pCoexSta->bUnderIps = TRUE;\r
                halbtc8812a2ant_CoexAllOff(pBtCoexist);\r
                halbtc8812a2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_CPL_AUX, FALSE, TRUE);\r
+\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS notify, force set BT to ignore Wlan active!!\n"));\r
+               halbtc8812a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+               EXhalbtc8812a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
                pCoexSta->bUnderIps = FALSE;\r
                pCoexSta->bUnderIps = FALSE;\r
+\r
+               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
+               if(!bWifiUnder5G)\r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS notify, force set BT NOT to ignore Wlan active!!\n"));\r
+                       halbtc8812a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
+               }\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4373,12 +4495,12 @@ EXhalbtc8812a2ant_LpsNotify(
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
@@ -4391,11 +4513,11 @@ EXhalbtc8812a2ant_ScanNotify(
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4407,11 +4529,11 @@ EXhalbtc8812a2ant_ConnectNotify(
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4434,11 +4556,11 @@ EXhalbtc8812a2ant_MediaStatusNotify(
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
@@ -4477,8 +4599,9 @@ EXhalbtc8812a2ant_SpecialPacketNotify(
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], DHCP Packet notify\n"));\r
        }\r
        }\r
+\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -4496,13 +4619,13 @@ EXhalbtc8812a2ant_BtInfoNotify(
 \r
        pCoexSta->bC2hBtInfoReqSent = FALSE;\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
 \r
        pCoexSta->bC2hBtInfoReqSent = FALSE;\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
-\r
+    \r
        rspSource = tmpBuf[0]&0xf;\r
        if(rspSource >= BT_INFO_SRC_8812A_2ANT_MAX)\r
                rspSource = BT_INFO_SRC_8812A_2ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
        rspSource = tmpBuf[0]&0xf;\r
        if(rspSource >= BT_INFO_SRC_8812A_2ANT_MAX)\r
                rspSource = BT_INFO_SRC_8812A_2ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
@@ -4510,11 +4633,11 @@ EXhalbtc8812a2ant_BtInfoNotify(
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x]\n", tmpBuf[i]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x, ", tmpBuf[i]));\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
@@ -4533,7 +4656,7 @@ EXhalbtc8812a2ant_BtInfoNotify(
                // because bt is reset and loss of the info.\r
                if( (pCoexSta->btInfoExt & BIT1) )\r
                {                       \r
                // because bt is reset and loss of the info.\r
                if( (pCoexSta->btInfoExt & BIT1) )\r
                {                       \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
@@ -4547,15 +4670,26 @@ EXhalbtc8812a2ant_BtInfoNotify(
        \r
                if( (pCoexSta->btInfoExt&BIT3) && !bWifiUnder5G)\r
                {\r
        \r
                if( (pCoexSta->btInfoExt&BIT3) && !bWifiUnder5G)\r
                {\r
+                       // BT already ignored WlanAct\r
                        if(!pBtCoexist->bManualControl && !pBtCoexist->bStopCoexDm)\r
                        {\r
                        if(!pBtCoexist->bManualControl && !pBtCoexist->bStopCoexDm)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
-                               halbtc8812a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
+                               if(!pCoexSta->bUnderIps)\r
+                               {\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
+                                       halbtc8812a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
+                               }\r
                        }\r
                }\r
                else\r
                {\r
                        // BT already NOT ignore Wlan active, do nothing here.\r
                        }\r
                }\r
                else\r
                {\r
                        // BT already NOT ignore Wlan active, do nothing here.\r
+\r
+                       if(pCoexSta->bUnderIps)\r
+                       {\r
+                               // work around for 8812a combo hw bug => when IPS, wlanAct is always high.\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is under IPS, set BT to ignore Wlan active!!\n"));\r
+                               halbtc8812a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+                       }\r
                }\r
        }\r
                \r
                }\r
        }\r
                \r
@@ -4573,6 +4707,7 @@ EXhalbtc8812a2ant_BtInfoNotify(
                pCoexSta->bA2dpExist = FALSE;\r
                pCoexSta->bHidExist = FALSE;\r
                pCoexSta->bScoExist = FALSE;\r
                pCoexSta->bA2dpExist = FALSE;\r
                pCoexSta->bHidExist = FALSE;\r
                pCoexSta->bScoExist = FALSE;\r
+               pCoexSta->bAclBusy = FALSE;\r
        }\r
        else    // connection exists\r
        {\r
        }\r
        else    // connection exists\r
        {\r
@@ -4593,6 +4728,11 @@ EXhalbtc8812a2ant_BtInfoNotify(
                        pCoexSta->bScoExist = TRUE;\r
                else\r
                        pCoexSta->bScoExist = FALSE;\r
                        pCoexSta->bScoExist = TRUE;\r
                else\r
                        pCoexSta->bScoExist = FALSE;\r
+               if(btInfo & BT_INFO_8812A_2ANT_B_ACL_BUSY)\r
+                       pCoexSta->bAclBusy = TRUE;\r
+               else\r
+                       pCoexSta->bAclBusy = FALSE;                     \r
+               \r
        }\r
 \r
        halbtc8812a2ant_UpdateBtLinkInfo(pBtCoexist);\r
        }\r
 \r
        halbtc8812a2ant_UpdateBtLinkInfo(pBtCoexist);\r
@@ -4600,28 +4740,28 @@ EXhalbtc8812a2ant_BtInfoNotify(
        if(!(btInfo&BT_INFO_8812A_2ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8812A_2ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
        if(!(btInfo&BT_INFO_8812A_2ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8812A_2ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
        }\r
        else if(btInfo == BT_INFO_8812A_2ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8812A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
        }\r
        else if(btInfo == BT_INFO_8812A_2ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8812A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
        }\r
        else if((btInfo&BT_INFO_8812A_2ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8812A_2ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8812A_2ANT_BT_STATUS_SCO_BUSY;\r
        }\r
        else if((btInfo&BT_INFO_8812A_2ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8812A_2ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8812A_2ANT_BT_STATUS_SCO_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
        }\r
        else if(btInfo&BT_INFO_8812A_2ANT_B_ACL_BUSY)\r
        {\r
                pCoexDm->btStatus = BT_8812A_2ANT_BT_STATUS_ACL_BUSY;\r
        }\r
        else if(btInfo&BT_INFO_8812A_2ANT_B_ACL_BUSY)\r
        {\r
                pCoexDm->btStatus = BT_8812A_2ANT_BT_STATUS_ACL_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8812A_2ANT_BT_STATUS_MAX;\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8812A_2ANT_BT_STATUS_MAX;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
        }\r
 \r
        if( (BT_8812A_2ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
        }\r
 \r
        if( (BT_8812A_2ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
@@ -4653,9 +4793,10 @@ EXhalbtc8812a2ant_HaltNotify(
 {\r
        u1Byte u1Tmp=0;\r
        \r
 {\r
        u1Byte u1Tmp=0;\r
        \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
        halbtc8812a2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_CPL_AUX, FALSE, TRUE);\r
 \r
        halbtc8812a2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_CPL_AUX, FALSE, TRUE);\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify, force set BT to ignore Wlan active!!\n"));\r
        halbtc8812a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
        EXhalbtc8812a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
 \r
        halbtc8812a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
        EXhalbtc8812a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
 \r
@@ -4675,21 +4816,21 @@ EXhalbtc8812a2ant_Periodical(
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ==========================Periodical===========================\n"));\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n",\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n",\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n",\r
                        GLCoexVerDate8812a2Ant, GLCoexVer8812a2Ant, fwVer, btPatchVer, btPatchVer));\r
                        GLCoexVerDate8812a2Ant, GLCoexVer8812a2Ant, fwVer, btPatchVer, btPatchVer));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
        }\r
 \r
 #if(BT_AUTO_REPORT_ONLY_8812A_2ANT == 0)\r
        }\r
 \r
 #if(BT_AUTO_REPORT_ONLY_8812A_2ANT == 0)\r
@@ -4717,7 +4858,7 @@ EXhalbtc8812a2ant_DbgControl(
        switch(opCode)\r
        {\r
                case BTC_DBG_SET_COEX_DEC_BT_PWR:\r
        switch(opCode)\r
        {\r
                case BTC_DBG_SET_COEX_DEC_BT_PWR:\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set Dec BT power\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set Dec BT power\n"));\r
                        {\r
                                u1Byte  dataLen=4;\r
                                u1Byte  buf[6] = {0};\r
                        {\r
                                u1Byte  dataLen=4;\r
                                u1Byte  buf[6] = {0};\r
@@ -4733,14 +4874,14 @@ EXhalbtc8812a2ant_DbgControl(
                                        \r
                                        buf[3] = decBtPwr;      // OP_Code_Content\r
                                        buf[4] = pwrLevel;\r
                                        \r
                                        buf[3] = decBtPwr;      // OP_Code_Content\r
                                        buf[4] = pwrLevel;\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set Dec BT power=%d, pwrLevel=%d\n", decBtPwr, pwrLevel));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set Dec BT power=%d, pwrLevel=%d\n", decBtPwr, pwrLevel));\r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);      \r
                                }\r
                        }\r
                        break;\r
                        \r
                case BTC_DBG_SET_COEX_BT_AFH_MAP:\r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);      \r
                                }\r
                        }\r
                        break;\r
                        \r
                case BTC_DBG_SET_COEX_BT_AFH_MAP:\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set BT AFH Map\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set BT AFH Map\n"));\r
                        {\r
                                u1Byte  dataLen=5;\r
                                u1Byte  buf[6] = {0};\r
                        {\r
                                u1Byte  dataLen=5;\r
                                u1Byte  buf[6] = {0};\r
@@ -4754,7 +4895,7 @@ EXhalbtc8812a2ant_DbgControl(
                                        buf[4] = pData[1];\r
                                        buf[5] = pData[2];\r
                \r
                                        buf[4] = pData[1];\r
                                        buf[5] = pData[2];\r
                \r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set BT AFH Map = %02x %02x %02x\n", \r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set BT AFH Map = %02x %02x %02x\n", \r
                                                pData[0], pData[1], pData[2]));\r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);\r
                                }\r
                                                pData[0], pData[1], pData[2]));\r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);\r
                                }\r
@@ -4762,7 +4903,7 @@ EXhalbtc8812a2ant_DbgControl(
                        break;\r
                \r
                case BTC_DBG_SET_COEX_BT_IGNORE_WLAN_ACT:\r
                        break;\r
                \r
                case BTC_DBG_SET_COEX_BT_IGNORE_WLAN_ACT:\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set BT Ignore Wlan Active\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set BT Ignore Wlan Active\n"));\r
                        {\r
                                u1Byte  dataLen=3;\r
                                u1Byte  buf[6] = {0};\r
                        {\r
                                u1Byte  dataLen=3;\r
                                u1Byte  buf[6] = {0};\r
@@ -4773,7 +4914,7 @@ EXhalbtc8812a2ant_DbgControl(
                                        buf[2] = 0x1;                   // OP_Code_Length\r
                \r
                                        buf[3] = pData[0];              // OP_Code_Content\r
                                        buf[2] = 0x1;                   // OP_Code_Length\r
                \r
                                        buf[3] = pData[0];              // OP_Code_Content\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Set BT Ignore Wlan Active = 0x%x\n", \r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set BT Ignore Wlan Active = 0x%x\n", \r
                                                pData[0]));\r
                                                \r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);\r
                                                pData[0]));\r
                                                \r
                                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_CTRL_BT_COEX, (PVOID)&buf[0]);\r
index 4f6f5d1210c7ed3d1f876ab0388415eda1a04ecd..ea7480224a94d88704980a6073898bb023b7fb2d 100755 (executable)
@@ -125,6 +125,7 @@ typedef struct _COEX_STA_8812A_2ANT{
        BOOLEAN                                 bA2dpExist;\r
        BOOLEAN                                 bHidExist;\r
        BOOLEAN                                 bPanExist;\r
        BOOLEAN                                 bA2dpExist;\r
        BOOLEAN                                 bHidExist;\r
        BOOLEAN                                 bPanExist;\r
+       BOOLEAN                                 bAclBusy;\r
 \r
        BOOLEAN                                 bUnderLps;\r
        BOOLEAN                                 bUnderIps;\r
 \r
        BOOLEAN                                 bUnderLps;\r
        BOOLEAN                                 bUnderIps;\r
@@ -138,6 +139,8 @@ typedef struct _COEX_STA_8812A_2ANT{
        BOOLEAN                                 bC2hBtInfoReqSent;\r
        u1Byte                                  btInfoC2h[BT_INFO_SRC_8812A_2ANT_MAX][10];\r
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8812A_2ANT_MAX];\r
        BOOLEAN                                 bC2hBtInfoReqSent;\r
        u1Byte                                  btInfoC2h[BT_INFO_SRC_8812A_2ANT_MAX][10];\r
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8812A_2ANT_MAX];\r
+       u4Byte                                  prebtInfoC2hCnt_BT_RSP;\r
+       u4Byte                                  prebtInfoC2hCnt_BT_SEND;\r
        u4Byte                                  btInfoQueryCnt;\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
        u1Byte                                  btRetryCnt;\r
        u4Byte                                  btInfoQueryCnt;\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
        u1Byte                                  btRetryCnt;\r
index c05c7668623d8646aaa5231ad0ead788cc52fd6c..c840c77926538cd2ae8fce7e64422adab9624ca8 100755 (executable)
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtc8821a1Ant.tmh"\r
+#endif\r
+\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
@@ -56,12 +61,10 @@ halbtc8821a1ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -69,12 +72,10 @@ halbtc8821a1ant_BtRssiState(
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -82,7 +83,7 @@ halbtc8821a1ant_BtRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Rssi thresh error!!\n"));\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
@@ -92,12 +93,10 @@ halbtc8821a1ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -106,17 +105,14 @@ halbtc8821a1ant_BtRssiState(
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -124,12 +120,10 @@ halbtc8821a1ant_BtRssiState(
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -161,12 +155,10 @@ halbtc8821a1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -174,12 +166,10 @@ halbtc8821a1ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -187,7 +177,7 @@ halbtc8821a1ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -197,12 +187,10 @@ halbtc8821a1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -211,17 +199,14 @@ halbtc8821a1ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -229,12 +214,10 @@ halbtc8821a1ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -421,7 +404,7 @@ halbtc8821a1ant_MonitorBtCtr(
        u1Byte                  u1Tmp, u1Tmp1;\r
        s4Byte                  wifiRssi;\r
 #if 0\r
        u1Byte                  u1Tmp, u1Tmp1;\r
        s4Byte                  wifiRssi;\r
 #if 0\r
-       //to avoid 0x76e[3] = 1 (WLAN_Act control by PTA) during IPS\r
+       //to avoid 0x76e[3] = 1 (WLAN_Act control by PTA) during IPS\r
        if (! (pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e) & 0x8) ) \r
        {\r
                pCoexSta->highPriorityTx = 65535;\r
        if (! (pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e) & 0x8) ) \r
        {\r
                pCoexSta->highPriorityTx = 65535;\r
@@ -462,7 +445,7 @@ halbtc8821a1ant_QueryBtInfo(
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
@@ -578,7 +561,7 @@ halbtc8821a1ant_ActionAlgorithm(
 \r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
 \r
        if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No BT link exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No BT link exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
@@ -595,31 +578,31 @@ halbtc8821a1ant_ActionAlgorithm(
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
        {\r
                if(pBtLinkInfo->bScoExist)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO only\n"));\r
                        algorithm = BT_8821A_1ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                        algorithm = BT_8821A_1ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID only\n"));\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP only\n"));\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = PAN(HS) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = PAN(HS) only\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = PAN(EDR) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = PAN(EDR) only\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
@@ -631,24 +614,24 @@ halbtc8821a1ant_ActionAlgorithm(
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
                {\r
                        if(pBtLinkInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID\n"));\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + A2DP ==> SCO\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP ==> SCO\n"));\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_SCO;\r
                        }\r
                        else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -658,7 +641,7 @@ halbtc8821a1ant_ActionAlgorithm(
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID + A2DP\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP\n"));\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_HID_A2DP;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
@@ -666,12 +649,12 @@ halbtc8821a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -680,12 +663,12 @@ halbtc8821a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
@@ -698,7 +681,7 @@ halbtc8821a1ant_ActionAlgorithm(
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
                        if( pBtLinkInfo->bHidExist &&\r
                                pBtLinkInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + HID + A2DP ==> HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + A2DP ==> HID\n"));\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
                                algorithm = BT_8821A_1ANT_COEX_ALGO_HID;\r
                        }\r
                        else if( pBtLinkInfo->bHidExist &&\r
@@ -706,12 +689,12 @@ halbtc8821a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -720,12 +703,12 @@ halbtc8821a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + A2DP + PAN(EDR) ==> HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + A2DP + PAN(EDR) ==> HID\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -738,12 +721,12 @@ halbtc8821a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = HID + A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = HID + A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
@@ -759,12 +742,12 @@ halbtc8821a1ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! BT Profile = SCO + HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Error!!! BT Profile = SCO + HID + A2DP + PAN(HS)\n"));\r
 \r
                                }\r
                                else\r
                                {\r
 \r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT Profile = SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Profile = SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_1ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -789,7 +772,7 @@ halbtc8821a1ant_SetBtAutoReport(
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
@@ -802,15 +785,12 @@ halbtc8821a1ant_BtAutoReport(
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s BT Auto report = %s\n",  \r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
-                       pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
-\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
@@ -838,7 +818,7 @@ halbtc8821a1ant_SetSwPenaltyTxRateAdaptive(
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
                (bLowPenaltyRa? "ON!!":"OFF!!") ));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
                (bLowPenaltyRa? "ON!!":"OFF!!") ));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
@@ -872,16 +852,16 @@ halbtc8821a1ant_SetCoexTable(
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -895,7 +875,7 @@ halbtc8821a1ant_CoexTable(
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
@@ -925,7 +905,7 @@ halbtc8821a1ant_CoexTableWithType(
        IN      u1Byte                          type\r
        )\r
 {\r
        IN      u1Byte                          type\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ********** CoexTable(%d) **********\n", type));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** CoexTable(%d) **********\n", type));\r
        \r
        switch(type)\r
        {\r
        \r
        switch(type)\r
        {\r
@@ -971,7 +951,7 @@ halbtc8821a1ant_SetFwIgnoreWlanAct(
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
@@ -984,15 +964,12 @@ halbtc8821a1ant_IgnoreWlanAct(
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
-                       pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
-\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
@@ -1021,7 +998,7 @@ halbtc8821a1ant_SetFwPstdma(
        {\r
                if(byte1&BIT4 && !(byte1&BIT5))\r
                {                       \r
        {\r
                if(byte1&BIT4 && !(byte1&BIT5))\r
                {                       \r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], FW for 1Ant AP mode\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], FW for 1Ant AP mode\n"));\r
                        realByte1 &= ~BIT4;\r
                        realByte1 |= BIT5;\r
 \r
                        realByte1 &= ~BIT4;\r
                        realByte1 |= BIT5;\r
 \r
@@ -1042,7 +1019,7 @@ halbtc8821a1ant_SetFwPstdma(
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = realByte5;\r
        \r
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = realByte5;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], PS-TDMA H2C cmd =0x%x%08x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], PS-TDMA H2C cmd =0x%x%08x\n", \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
@@ -1073,22 +1050,16 @@ halbtc8821a1ant_LpsRpwm(
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
 {\r
        BOOLEAN bForceExecPwrCmd=FALSE;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), lpsVal, rpwmVal));\r
        pCoexDm->curLps = lpsVal;\r
        pCoexDm->curRpwm = rpwmVal;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], LPS-RxBeaconMode=0x%x , LPS-RPWM=0x%x!!\n", \r
-                        pCoexDm->curLps, pCoexDm->curRpwm));\r
-\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
                if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
                        (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], LPS-RPWM_Last=0x%x , LPS-RPWM_Now=0x%x!!\n", \r
-                                pCoexDm->preRpwm, pCoexDm->curRpwm));\r
-\r
                        return;\r
                }\r
        }\r
                        return;\r
                }\r
        }\r
@@ -1104,9 +1075,6 @@ halbtc8821a1ant_SwMechanism(
        IN      BOOLEAN         bLowPenaltyRA\r
        ) \r
 {\r
        IN      BOOLEAN         bLowPenaltyRA\r
        ) \r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], SM[LpRA] = %d\n", \r
-               bLowPenaltyRA));\r
-       \r
        halbtc8821a1ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);\r
 }\r
 \r
        halbtc8821a1ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);\r
 }\r
 \r
@@ -1215,12 +1183,12 @@ halbtc8821a1ant_PsTdma(
 \r
        if (pCoexDm->bCurPsTdmaOn)\r
        {\r
 \r
        if (pCoexDm->bCurPsTdmaOn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
                        pCoexDm->curPsTdma));\r
        }\r
        else\r
        {\r
                        pCoexDm->curPsTdma));\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ********** TDMA(off, %d) **********\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** TDMA(off, %d) **********\n", \r
                        pCoexDm->curPsTdma));\r
        }\r
 \r
                        pCoexDm->curPsTdma));\r
        }\r
 \r
@@ -1414,7 +1382,7 @@ halbtc8821a1ant_IsCommonAction(
        if(!bWifiConnected && \r
                BT_8821A_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
        {\r
        if(!bWifiConnected && \r
                BT_8821A_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT non connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT non connected-idle!!\n"));\r
                halbtc8821a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
                halbtc8821a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
@@ -1422,7 +1390,7 @@ halbtc8821a1ant_IsCommonAction(
        else if(bWifiConnected && \r
                        (BT_8821A_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
        else if(bWifiConnected && \r
                        (BT_8821A_1ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
                halbtc8821a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
                halbtc8821a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
@@ -1430,7 +1398,7 @@ halbtc8821a1ant_IsCommonAction(
        else if(!bWifiConnected && \r
                (BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
        else if(!bWifiConnected && \r
                (BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT connected-idle!!\n"));\r
                halbtc8821a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
                halbtc8821a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
@@ -1438,7 +1406,7 @@ halbtc8821a1ant_IsCommonAction(
        else if(bWifiConnected && \r
                (BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
        else if(bWifiConnected && \r
                (BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
                halbtc8821a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
                halbtc8821a1ant_SwMechanism(pBtCoexist, FALSE);\r
 \r
                bCommon = TRUE;\r
@@ -1446,7 +1414,7 @@ halbtc8821a1ant_IsCommonAction(
        else if(!bWifiConnected && \r
                (BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus) )\r
        {\r
        else if(!bWifiConnected && \r
                (BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE != pCoexDm->btStatus) )\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non connected-idle + BT Busy!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non connected-idle + BT Busy!!\n"));\r
                halbtc8821a1ant_SwMechanism(pBtCoexist, FALSE);\r
                \r
                bCommon = TRUE;\r
                halbtc8821a1ant_SwMechanism(pBtCoexist, FALSE);\r
                \r
                bCommon = TRUE;\r
@@ -1455,11 +1423,11 @@ halbtc8821a1ant_IsCommonAction(
        {\r
                if (bWifiBusy)                  \r
                {\r
        {\r
                if (bWifiBusy)                  \r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
                }\r
                \r
                bCommon = FALSE;\r
                }\r
                \r
                bCommon = FALSE;\r
@@ -1479,7 +1447,7 @@ halbtc8821a1ant_TdmaDurationAdjustForAcl(
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0, btInfoExt;\r
 \r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0, btInfoExt;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjustForAcl()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TdmaDurationAdjustForAcl()\n"));\r
 \r
        if( (BT_8821A_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus) ||\r
                (BT_8821A_1ANT_WIFI_STATUS_CONNECTED_SCAN == wifiStatus) ||\r
 \r
        if( (BT_8821A_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN == wifiStatus) ||\r
                (BT_8821A_1ANT_WIFI_STATUS_CONNECTED_SCAN == wifiStatus) ||\r
@@ -1506,7 +1474,7 @@ halbtc8821a1ant_TdmaDurationAdjustForAcl(
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
        if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
                pCoexDm->bAutoTdmaAdjust = TRUE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
 \r
                halbtc8821a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                pCoexDm->psTdmaDuAdjType = 2;\r
 \r
                halbtc8821a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                pCoexDm->psTdmaDuAdjType = 2;\r
@@ -1523,9 +1491,6 @@ halbtc8821a1ant_TdmaDurationAdjustForAcl(
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
                btInfoExt = pCoexSta->btInfoExt;\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
                btInfoExt = pCoexSta->btInfoExt;\r
-               //BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
-               //BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
-               //      up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
                  \r
                result = 0;\r
                WaitCount++; \r
                  \r
@@ -1544,7 +1509,7 @@ halbtc8821a1ant_TdmaDurationAdjustForAcl(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -1570,7 +1535,7 @@ halbtc8821a1ant_TdmaDurationAdjustForAcl(
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -1588,7 +1553,7 @@ halbtc8821a1ant_TdmaDurationAdjustForAcl(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
 \r
                if(result == -1)\r
                }\r
 \r
                if(result == -1)\r
@@ -1641,7 +1606,7 @@ halbtc8821a1ant_TdmaDurationAdjustForAcl(
                }\r
                else      //no change\r
                {\r
                }\r
                else      //no change\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ********** TDMA(on, %d) **********\n", \r
                                pCoexDm->curPsTdma));\r
                }\r
 \r
                                pCoexDm->curPsTdma));\r
                }\r
 \r
@@ -1785,24 +1750,24 @@ halbtc8821a1ant_MonitorBtEnableDisable(
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt all counters=0, %d times!!\n", \r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is disabled !!\n"));\r
                        halbtc8821a1ant_ActionWifiOnly(pBtCoexist);\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                        halbtc8821a1ant_ActionWifiOnly(pBtCoexist);\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n", \r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
@@ -2247,13 +2212,13 @@ halbtc8821a1ant_ActionWifiConnected(
        BOOLEAN         bUnder4way=FALSE, bApEnable=FALSE;\r
        u4Byte          wifiBw;\r
 \r
        BOOLEAN         bUnder4way=FALSE, bApEnable=FALSE;\r
        u4Byte          wifiBw;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect()===>\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect()===>\n"));\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
        if(bUnder4way)\r
        {\r
                halbtc8821a1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
        if(bUnder4way)\r
        {\r
                halbtc8821a1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect(), return for wifi is under 4way<===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect(), return for wifi is under 4way<===\n"));\r
                return;\r
        }\r
        \r
                return;\r
        }\r
        \r
@@ -2266,7 +2231,7 @@ halbtc8821a1ant_ActionWifiConnected(
                        halbtc8821a1ant_ActionWifiConnectedScan(pBtCoexist);\r
                else\r
                        halbtc8821a1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
                        halbtc8821a1ant_ActionWifiConnectedScan(pBtCoexist);\r
                else\r
                        halbtc8821a1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], CoexForWifiConnect(), return for wifi is under scan<===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexForWifiConnect(), return for wifi is under scan<===\n"));\r
                return;\r
        }\r
 \r
                return;\r
        }\r
 \r
@@ -2343,47 +2308,47 @@ halbtc8821a1ant_RunSwCoexistMechanism(
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8821A_1ANT_COEX_ALGO_SCO:\r
                switch(pCoexDm->curAlgorithm)\r
                {\r
                        case BT_8821A_1ANT_COEX_ALGO_SCO:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = SCO.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = SCO.\n"));\r
                                halbtc8821a1ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_HID:\r
                                halbtc8821a1ant_ActionSco(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID.\n"));\r
                                halbtc8821a1ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_A2DP:\r
                                halbtc8821a1ant_ActionHid(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = A2DP.\n"));\r
                                halbtc8821a1ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_A2DP_PANHS:\r
                                halbtc8821a1ant_ActionA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_A2DP_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = A2DP+PAN(HS).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = A2DP+PAN(HS).\n"));\r
                                halbtc8821a1ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_PANEDR:\r
                                halbtc8821a1ant_ActionA2dpPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN(EDR).\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN(EDR).\n"));\r
                                halbtc8821a1ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_PANHS:\r
                                halbtc8821a1ant_ActionPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_PANHS:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HS mode.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HS mode.\n"));\r
                                halbtc8821a1ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_PANEDR_A2DP:\r
                                halbtc8821a1ant_ActionPanHs(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_PANEDR_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN+A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN+A2DP.\n"));\r
                                halbtc8821a1ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_PANEDR_HID:\r
                                halbtc8821a1ant_ActionPanEdrA2dp(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_PANEDR_HID:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = PAN(EDR)+HID.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = PAN(EDR)+HID.\n"));\r
                                halbtc8821a1ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
                                halbtc8821a1ant_ActionPanEdrHid(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID+A2DP+PAN.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID+A2DP+PAN.\n"));\r
                                halbtc8821a1ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_HID_A2DP:\r
                                halbtc8821a1ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                break;\r
                        case BT_8821A_1ANT_COEX_ALGO_HID_A2DP:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = HID+A2DP.\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = HID+A2DP.\n"));\r
                                halbtc8821a1ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
                                halbtc8821a1ant_ActionHidA2dp(pBtCoexist);\r
                                break;\r
                        default:\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action algorithm = coexist All Off!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action algorithm = coexist All Off!!\n"));\r
                                //halbtc8821a1ant_CoexAllOff(pBtCoexist);\r
                                break;\r
                }\r
                                //halbtc8821a1ant_CoexAllOff(pBtCoexist);\r
                                break;\r
                }\r
@@ -2406,30 +2371,30 @@ halbtc8821a1ant_RunCoexistMechanism(
        u4Byte  numOfWifiLink=0;\r
        BOOLEAN bWifiUnder5G=FALSE;\r
 \r
        u4Byte  numOfWifiLink=0;\r
        BOOLEAN bWifiUnder5G=FALSE;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
                return;\r
        }\r
 \r
        if(pBtCoexist->bStopCoexDm)\r
        {\r
                return;\r
        }\r
 \r
        if(pBtCoexist->bStopCoexDm)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Stop Coex DM <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Stop Coex DM <===\n"));\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
                return;\r
        }\r
 \r
        if(pCoexSta->bUnderIps)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is under IPS !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is under IPS !!!\n"));\r
                return;\r
        }\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
        if(bWifiUnder5G)\r
        {\r
                return;\r
        }\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
        if(bWifiUnder5G)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for 5G <===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for 5G <===\n"));\r
                halbtc8821a1ant_CoexUnder5G(pBtCoexist);\r
                return;\r
        }\r
                halbtc8821a1ant_CoexUnder5G(pBtCoexist);\r
                return;\r
        }\r
@@ -2516,7 +2481,7 @@ halbtc8821a1ant_RunCoexistMechanism(
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
                \r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
                \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is non connected-idle !!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is non connected-idle !!!\n"));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
@@ -2525,9 +2490,9 @@ halbtc8821a1ant_RunCoexistMechanism(
                if(bScan || bLink || bRoam)\r
                {\r
                         if (bScan)     \r
                if(bScan || bLink || bRoam)\r
                {\r
                         if (bScan)     \r
-                               halbtc8821a1ant_ActionWifiNotConnectedScan(pBtCoexist); \r
+                               halbtc8821a1ant_ActionWifiNotConnectedScan(pBtCoexist); \r
                         else\r
                         else\r
-                               halbtc8821a1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);     \r
+                               halbtc8821a1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);     \r
                }\r
                else\r
                        halbtc8821a1ant_ActionWifiNotConnected(pBtCoexist);\r
                }\r
                else\r
                        halbtc8821a1ant_ActionWifiNotConnected(pBtCoexist);\r
@@ -2566,7 +2531,7 @@ halbtc8821a1ant_InitHwConfig(
        BOOLEAN                 bWifiUnder5G=FALSE;\r
                \r
        \r
        BOOLEAN                 bWifiUnder5G=FALSE;\r
                \r
        \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 1Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 1Ant Init HW Config!!\n"));\r
 \r
        if(bWifiOnly)\r
                return;\r
 \r
        if(bWifiOnly)\r
                return;\r
@@ -2629,7 +2594,7 @@ EXhalbtc8821a1ant_InitCoexDm(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
 \r
        pBtCoexist->bStopCoexDm = FALSE;\r
        \r
 \r
        pBtCoexist->bStopCoexDm = FALSE;\r
        \r
@@ -2689,7 +2654,7 @@ EXhalbtc8821a1ant_DisplayCoexInfo(
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
-\r
+       \r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
@@ -2857,7 +2822,7 @@ EXhalbtc8821a1ant_IpsNotify(
 \r
        if(BTC_IPS_ENTER == type)\r
        {\r
 \r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                pCoexSta->bUnderIps = TRUE;\r
                \r
                halbtc8821a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                pCoexSta->bUnderIps = TRUE;\r
                \r
                halbtc8821a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
@@ -2867,7 +2832,7 @@ EXhalbtc8821a1ant_IpsNotify(
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
                pCoexSta->bUnderIps = FALSE;\r
 \r
                halbtc8821a1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
                pCoexSta->bUnderIps = FALSE;\r
 \r
                halbtc8821a1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
@@ -2887,12 +2852,12 @@ EXhalbtc8821a1ant_LpsNotify(
 \r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 \r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
@@ -2916,14 +2881,14 @@ EXhalbtc8821a1ant_ScanNotify(
        if(BTC_SCAN_START == type)\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = TRUE;\r
        if(BTC_SCAN_START == type)\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = TRUE;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
 \r
                halbtc8821a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
        }\r
        else\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
 \r
                halbtc8821a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 8);  //Force antenna setup for no scan result issue\r
        }\r
        else\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
        }       \r
 \r
        if(pBtCoexist->btInfo.bBtDisabled)\r
        }       \r
 \r
        if(pBtCoexist->btInfo.bBtDisabled)\r
@@ -2957,7 +2922,7 @@ EXhalbtc8821a1ant_ScanNotify(
 \r
        if(BTC_SCAN_START == type)\r
        {\r
 \r
        if(BTC_SCAN_START == type)\r
        {\r
-               //BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8821a1ant_ActionWifiNotConnectedScan(pBtCoexist);\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8821a1ant_ActionWifiNotConnectedScan(pBtCoexist);\r
@@ -2969,7 +2934,7 @@ EXhalbtc8821a1ant_ScanNotify(
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               //BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8821a1ant_ActionWifiNotConnected(pBtCoexist);\r
                if(!bWifiConnected)     // non-connected scan\r
                {\r
                        halbtc8821a1ant_ActionWifiNotConnected(pBtCoexist);\r
@@ -3001,13 +2966,13 @@ EXhalbtc8821a1ant_ConnectNotify(
        if(BTC_ASSOCIATE_START == type)\r
        {\r
         pCoexSta->bWiFiIsHighPriTask = TRUE;\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
         pCoexSta->bWiFiIsHighPriTask = TRUE;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));        \r
-               pCoexDm->nArpCnt = 0;\r
+                RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));   \r
+                pCoexDm->nArpCnt = 0;\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));       \r
+        pCoexSta->bWiFiIsHighPriTask = FALSE;  \r
+                RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));  \r
                pCoexDm->nArpCnt = 0;\r
        }\r
 \r
                pCoexDm->nArpCnt = 0;\r
        }\r
 \r
@@ -3035,12 +3000,12 @@ EXhalbtc8821a1ant_ConnectNotify(
 \r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 \r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               //BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));              \r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));          \r
                halbtc8821a1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
                halbtc8821a1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               //BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
                \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                if(!bWifiConnected) // non-connected scan\r
                \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                if(!bWifiConnected) // non-connected scan\r
@@ -3071,11 +3036,11 @@ EXhalbtc8821a1ant_MediaStatusNotify(
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
                pCoexDm->nArpCnt = 0;\r
        }\r
 \r
                pCoexDm->nArpCnt = 0;\r
        }\r
 \r
@@ -3098,7 +3063,7 @@ EXhalbtc8821a1ant_MediaStatusNotify(
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x66=0x%x\n", \r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);\r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);\r
@@ -3129,17 +3094,17 @@ EXhalbtc8821a1ant_SpecialPacketNotify(
 \r
                if(BTC_PACKET_ARP == type)\r
                {\r
 \r
                if(BTC_PACKET_ARP == type)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], special Packet ARP notify\n"));            \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet ARP notify\n"));                \r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], special Packet DHCP or EAPOL notify\n"));          \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet DHCP or EAPOL notify\n"));              \r
                }\r
        }\r
        else\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
                }\r
        }\r
        else\r
        {\r
                pCoexSta->bWiFiIsHighPriTask = FALSE;   \r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], special Packet [Type = %d] notify\n", type));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet [Type = %d] notify\n", type));\r
        }\r
 \r
        pCoexSta->specialPktPeriodCnt = 0;\r
        }\r
 \r
        pCoexSta->specialPktPeriodCnt = 0;\r
@@ -3170,11 +3135,11 @@ EXhalbtc8821a1ant_SpecialPacketNotify(
                BTC_PACKET_EAPOL == type || \r
                BTC_PACKET_ARP == type )\r
        {\r
                BTC_PACKET_EAPOL == type || \r
                BTC_PACKET_ARP == type )\r
        {\r
-               //BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], special Packet(%d) notify\n", type));\r
+               //RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], special Packet(%d) notify\n", type));\r
                if(BTC_PACKET_ARP == type)\r
                {\r
                        pCoexDm->nArpCnt++;\r
                if(BTC_PACKET_ARP == type)\r
                {\r
                        pCoexDm->nArpCnt++;\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], ARP Packet Count = %d\n", pCoexDm->nArpCnt));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ARP Packet Count = %d\n", pCoexDm->nArpCnt));\r
                        if(pCoexDm->nArpCnt >= 10) // if APR PKT > 10 after connect, do not go to ActionWifiConnectedSpecialPacket(pBtCoexist) \r
                                return; \r
                }\r
                        if(pCoexDm->nArpCnt >= 10) // if APR PKT > 10 after connect, do not go to ActionWifiConnectedSpecialPacket(pBtCoexist) \r
                                return; \r
                }\r
@@ -3206,7 +3171,7 @@ EXhalbtc8821a1ant_BtInfoNotify(
                rspSource = BT_INFO_SRC_8821A_1ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
                rspSource = BT_INFO_SRC_8821A_1ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
@@ -3214,11 +3179,11 @@ EXhalbtc8821a1ant_BtInfoNotify(
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x]\n", tmpBuf[i]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x, ", tmpBuf[i]));\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
@@ -3243,7 +3208,7 @@ EXhalbtc8821a1ant_BtInfoNotify(
                if(!pCoexSta->bBtTxRxMask)\r
                {\r
                        /* BT into is responded by BT FW and BT RF REG 0x3C != 0x15 => Need to switch BT TRx Mask */                            \r
                if(!pCoexSta->bBtTxRxMask)\r
                {\r
                        /* BT into is responded by BT FW and BT RF REG 0x3C != 0x15 => Need to switch BT TRx Mask */                            \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x15\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x15\n"));\r
                        pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15);\r
                }\r
                \r
                        pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15);\r
                }\r
                \r
@@ -3251,7 +3216,7 @@ EXhalbtc8821a1ant_BtInfoNotify(
                // because bt is reset and loss of the info.\r
                if(pCoexSta->btInfoExt & BIT1)\r
                {                       \r
                // because bt is reset and loss of the info.\r
                if(pCoexSta->btInfoExt & BIT1)\r
                {                       \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
                        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
                        if(bWifiConnected)\r
                        {\r
@@ -3267,7 +3232,7 @@ EXhalbtc8821a1ant_BtInfoNotify(
                {\r
                        if(!pBtCoexist->bManualControl && !pBtCoexist->bStopCoexDm)\r
                        {\r
                {\r
                        if(!pBtCoexist->bManualControl && !pBtCoexist->bStopCoexDm)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
                                halbtc8821a1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                        }\r
                }\r
                                halbtc8821a1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                        }\r
                }\r
@@ -3330,30 +3295,30 @@ EXhalbtc8821a1ant_BtInfoNotify(
        if(!(btInfo&BT_INFO_8821A_1ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8821A_1ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
        if(!(btInfo&BT_INFO_8821A_1ANT_B_CONNECTION))\r
        {\r
                pCoexDm->btStatus = BT_8821A_1ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
        }\r
        else if(btInfo == BT_INFO_8821A_1ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE;\r
        }\r
        else if(btInfo == BT_INFO_8821A_1ANT_B_CONNECTION)      // connection exists but no busy\r
        {\r
                pCoexDm->btStatus = BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
        }\r
        else if((btInfo&BT_INFO_8821A_1ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8821A_1ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8821A_1ANT_BT_STATUS_SCO_BUSY;\r
        }\r
        else if((btInfo&BT_INFO_8821A_1ANT_B_SCO_ESCO) ||\r
                (btInfo&BT_INFO_8821A_1ANT_B_SCO_BUSY))\r
        {\r
                pCoexDm->btStatus = BT_8821A_1ANT_BT_STATUS_SCO_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
        }\r
        else if(btInfo&BT_INFO_8821A_1ANT_B_ACL_BUSY)\r
        {\r
                if(BT_8821A_1ANT_BT_STATUS_ACL_BUSY != pCoexDm->btStatus)\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->btStatus = BT_8821A_1ANT_BT_STATUS_ACL_BUSY;\r
        }\r
        else if(btInfo&BT_INFO_8821A_1ANT_B_ACL_BUSY)\r
        {\r
                if(BT_8821A_1ANT_BT_STATUS_ACL_BUSY != pCoexDm->btStatus)\r
                        pCoexDm->bAutoTdmaAdjust = FALSE;\r
                pCoexDm->btStatus = BT_8821A_1ANT_BT_STATUS_ACL_BUSY;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8821A_1ANT_BT_STATUS_MAX;\r
        }\r
        else\r
        {\r
                pCoexDm->btStatus = BT_8821A_1ANT_BT_STATUS_MAX;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
        }\r
 \r
        if( (BT_8821A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
        }\r
 \r
        if( (BT_8821A_1ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
@@ -3374,7 +3339,7 @@ EXhalbtc8821a1ant_HaltNotify(
 {\r
        u4Byte  u4Tmp;\r
        \r
 {\r
        u4Byte  u4Tmp;\r
        \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
        halbtc8821a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
        halbtc8821a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
 \r
        halbtc8821a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
        halbtc8821a1ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 0);\r
@@ -3394,23 +3359,23 @@ EXhalbtc8821a1ant_PnpNotify(
        IN      u1Byte                          pnpState\r
        )\r
 {\r
        IN      u1Byte                          pnpState\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify\n"));\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to SLEEP\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to SLEEP\n"));\r
 \r
                halbtc8821a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8821a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                halbtc8821a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
                halbtc8821a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
 \r
                halbtc8821a1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
                halbtc8821a1ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                halbtc8821a1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
                halbtc8821a1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, FALSE, TRUE);\r
-               //halbtc8821a1ant_SetAntPathDCut(pBtCoexist, FALSE, FALSE, FALSE, BTC_ANT_PATH_BT, BTC_WIFI_STAT_NORMAL_OFF);\r
+              //halbtc8821a1ant_SetAntPathDCut(pBtCoexist, FALSE, FALSE, FALSE, BTC_ANT_PATH_BT, BTC_WIFI_STAT_NORMAL_OFF);\r
 \r
                pBtCoexist->bStopCoexDm = TRUE;\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
 \r
                pBtCoexist->bStopCoexDm = TRUE;\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
                pBtCoexist->bStopCoexDm = FALSE;\r
                halbtc8821a1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
                halbtc8821a1ant_InitCoexDm(pBtCoexist);\r
                pBtCoexist->bStopCoexDm = FALSE;\r
                halbtc8821a1ant_InitHwConfig(pBtCoexist, FALSE, FALSE);\r
                halbtc8821a1ant_InitCoexDm(pBtCoexist);\r
@@ -3428,21 +3393,21 @@ EXhalbtc8821a1ant_Periodical(
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ==========================Periodical===========================\n"));\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n",\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n",\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n",\r
                        GLCoexVerDate8821a1Ant, GLCoexVer8821a1Ant, fwVer, btPatchVer, btPatchVer));\r
                        GLCoexVerDate8821a1Ant, GLCoexVer8821a1Ant, fwVer, btPatchVer, btPatchVer));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
        }\r
 \r
 #if(BT_AUTO_REPORT_ONLY_8821A_1ANT == 0)\r
        }\r
 \r
 #if(BT_AUTO_REPORT_ONLY_8821A_1ANT == 0)\r
index 14ad651a9eb36c2fce7cf09045a4fe8b8dd1a732..759418ea69add1731fd48234f4868c6e259c20cc 100755 (executable)
@@ -4,8 +4,7 @@
 // This file is for RTL8821A Co-exist mechanism\r
 //\r
 // History\r
 // This file is for RTL8821A Co-exist mechanism\r
 //\r
 // History\r
-// 2012/08/22 Cosa first check in.\r
-// 2012/11/14 Cosa Revise for 8821A 2Ant out sourcing.\r
+// 2012/11/15 Cosa first check in.\r
 //\r
 //============================================================\r
 \r
 //\r
 //============================================================\r
 \r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 // include files\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtc8821a2Ant.tmh"\r
+#endif\r
+\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 //============================================================\r
 #if(BT_30_SUPPORT == 1)\r
 //============================================================\r
 // Global variables, these are static variables\r
 //============================================================\r
-static COEX_DM_8821A_2ANT      GLCoexDm8821a2Ant;\r
+static COEX_DM_8821A_2ANT              GLCoexDm8821a2Ant;\r
 static PCOEX_DM_8821A_2ANT     pCoexDm=&GLCoexDm8821a2Ant;\r
 static PCOEX_DM_8821A_2ANT     pCoexDm=&GLCoexDm8821a2Ant;\r
-static COEX_STA_8821A_2ANT     GLCoexSta8821a2Ant;\r
+static COEX_STA_8821A_2ANT             GLCoexSta8821a2Ant;\r
 static PCOEX_STA_8821A_2ANT    pCoexSta=&GLCoexSta8821a2Ant;\r
 \r
 const char *const GLBtInfoSrc8821a2Ant[]={\r
 static PCOEX_STA_8821A_2ANT    pCoexSta=&GLCoexSta8821a2Ant;\r
 \r
 const char *const GLBtInfoSrc8821a2Ant[]={\r
@@ -28,8 +32,8 @@ const char *const GLBtInfoSrc8821a2Ant[]={
        "BT Info[bt auto report]",\r
 };\r
 \r
        "BT Info[bt auto report]",\r
 };\r
 \r
-u4Byte GLCoexVerDate8821a2Ant=20130618;\r
-u4Byte GLCoexVer8821a2Ant=0x5050;\r
+u4Byte GLCoexVerDate8821a2Ant=20150128;\r
+u4Byte GLCoexVer8821a2Ant=0x51;\r
 \r
 //============================================================\r
 // local function proto type if needed\r
 \r
 //============================================================\r
 // local function proto type if needed\r
@@ -57,12 +61,10 @@ halbtc8821a2ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -70,12 +72,10 @@ halbtc8821a2ant_BtRssiState(
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -83,7 +83,7 @@ halbtc8821a2ant_BtRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Rssi thresh error!!\n"));\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
@@ -93,12 +93,10 @@ halbtc8821a2ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -107,17 +105,14 @@ halbtc8821a2ant_BtRssiState(
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -125,12 +120,10 @@ halbtc8821a2ant_BtRssiState(
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -162,12 +155,10 @@ halbtc8821a2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -175,12 +166,10 @@ halbtc8821a2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -188,7 +177,7 @@ halbtc8821a2ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -198,12 +187,10 @@ halbtc8821a2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -212,17 +199,14 @@ halbtc8821a2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -230,12 +214,10 @@ halbtc8821a2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -275,23 +257,23 @@ halbtc8821a2ant_MonitorBtEnableDisable(
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt all counters=0, %d times!!\n", \r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is disabled !!\n"));\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n", \r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
@@ -304,6 +286,31 @@ halbtc8821a2ant_MonitorBtEnableDisable(
        }\r
 }\r
 \r
        }\r
 }\r
 \r
+VOID\r
+halbtc8821a2ant_LimitedRx(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      BOOLEAN                         bRejApAggPkt,\r
+       IN      BOOLEAN                         bBtCtrlAggBufSize,\r
+       IN      u1Byte                          aggBufSize\r
+       )\r
+{\r
+       BOOLEAN bRejectRxAgg=bRejApAggPkt;\r
+       BOOLEAN bBtCtrlRxAggSize=bBtCtrlAggBufSize;\r
+       u1Byte  rxAggSize=aggBufSize;\r
+\r
+       //============================================\r
+       //      Rx Aggregation related setting\r
+       //============================================\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT, &bRejectRxAgg);\r
+       // decide BT control aggregation buf size or not\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE, &bBtCtrlRxAggSize);\r
+       // aggregation buf size, only work when BT control Rx aggregation size.\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_AGG_BUF_SIZE, &rxAggSize);\r
+       // real update aggregation setting\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);\r
+}\r
+\r
 VOID\r
 halbtc8821a2ant_MonitorBtCtr(\r
        IN      PBTC_COEXIST            pBtCoexist\r
 VOID\r
 halbtc8821a2ant_MonitorBtCtr(\r
        IN      PBTC_COEXIST            pBtCoexist\r
@@ -313,6 +320,8 @@ halbtc8821a2ant_MonitorBtCtr(
        u4Byte                  regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;\r
        u1Byte                  u1Tmp;\r
        \r
        u4Byte                  regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;\r
        u1Byte                  u1Tmp;\r
        \r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       \r
        regHPTxRx = 0x770;\r
        regLPTxRx = 0x774;\r
 \r
        regHPTxRx = 0x770;\r
        regLPTxRx = 0x774;\r
 \r
@@ -329,15 +338,66 @@ halbtc8821a2ant_MonitorBtCtr(
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       if ( (pCoexSta->lowPriorityRx >= 950)  &&  (pCoexSta->lowPriorityRx >= pCoexSta->lowPriorityTx) && (!pCoexSta->bUnderIps) )\r
+       {\r
+               pBtLinkInfo->bSlaveRole = TRUE;\r
+       }\r
+       else\r
+       {\r
+               pBtLinkInfo->bSlaveRole = FALSE;\r
+       }\r
+\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);\r
 }\r
 \r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);\r
 }\r
 \r
+VOID\r
+halbtc8821a2ant_MonitorWiFiCtr(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       u4Byte  u4Tmp;\r
+       u2Byte  u2Tmp[3];\r
+       s4Byte  wifiRssi=0;\r
+       BOOLEAN bWifiBusy = FALSE, bWifiUnderBMode = FALSE;\r
+       static u1Byte nCCKLockCounter = 0;\r
+\r
+\r
+       if (pCoexSta->bUnderIps)\r
+       {\r
+               pCoexSta->nCRCOK_CCK = 0;\r
+               pCoexSta->nCRCOK_11g = 0;\r
+               pCoexSta->nCRCOK_11n = 0;\r
+               pCoexSta->nCRCOK_11nAgg = 0;\r
+\r
+               pCoexSta->nCRCErr_CCK = 0;\r
+               pCoexSta->nCRCErr_11g = 0;\r
+               pCoexSta->nCRCErr_11n = 0;\r
+               pCoexSta->nCRCErr_11nAgg = 0;   \r
+       }\r
+       else\r
+       {\r
+               pCoexSta->nCRCOK_CCK    = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf88);\r
+               pCoexSta->nCRCOK_11g    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf94);\r
+               pCoexSta->nCRCOK_11n    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf90);\r
+               pCoexSta->nCRCOK_11nAgg= pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xfb8);\r
+\r
+               pCoexSta->nCRCErr_CCK    = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf84);\r
+               pCoexSta->nCRCErr_11g    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf96);\r
+               pCoexSta->nCRCErr_11n    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf92);\r
+               pCoexSta->nCRCErr_11nAgg = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xfba);                \r
+       }\r
+\r
+       //reset counter\r
+       pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xf16, 0x1, 0x1);\r
+       pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xf16, 0x1, 0x0);\r
+}\r
+\r
 VOID\r
 halbtc8821a2ant_QueryBtInfo(\r
        IN      PBTC_COEXIST            pBtCoexist\r
 VOID\r
 halbtc8821a2ant_QueryBtInfo(\r
        IN      PBTC_COEXIST            pBtCoexist\r
@@ -349,74 +409,190 @@ halbtc8821a2ant_QueryBtInfo(
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
 }\r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
 }\r
-u1Byte\r
-halbtc8821a2ant_ActionAlgorithm(\r
+\r
+BOOLEAN\r
+halbtc8821a2ant_IsWifiStatusChanged(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
-       BOOLEAN                         bBtHsOn=FALSE;\r
-       u1Byte                          algorithm=BT_8821A_2ANT_COEX_ALGO_UNDEFINED;\r
-       u1Byte                          numOfDiffProfile=0;\r
+       static BOOLEAN  bPreWifiBusy=FALSE, bPreUnder4way=FALSE, bPreBtHsOn=FALSE;\r
+       BOOLEAN                 bWifiBusy=FALSE, bUnder4way=FALSE, bBtHsOn=FALSE;\r
+       BOOLEAN                 bWifiConnected=FALSE;\r
+       u1Byte                  wifiRssiState=BTC_RSSI_STATE_HIGH;\r
+       \r
 \r
 \r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
+\r
+       if(bWifiConnected)\r
+       {\r
+               if(bWifiBusy != bPreWifiBusy)\r
+               {\r
+                       bPreWifiBusy = bWifiBusy;\r
+                       return TRUE;\r
+               }\r
+               if(bUnder4way != bPreUnder4way)\r
+               {\r
+                       bPreUnder4way = bUnder4way;\r
+                       return TRUE;\r
+               }\r
+               if(bBtHsOn != bPreBtHsOn)\r
+               {\r
+                       bPreBtHsOn = bBtHsOn;\r
+                       return TRUE;\r
+               }\r
+\r
+\r
+               wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist,3, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);    \r
+\r
+               if ( (BTC_RSSI_STATE_HIGH ==wifiRssiState ) ||  (BTC_RSSI_STATE_LOW ==wifiRssiState ))\r
+               {\r
+                       return TRUE;\r
+               }\r
        \r
        \r
+       }\r
+\r
+       return FALSE;\r
+}\r
+\r
+VOID\r
+halbtc8821a2ant_UpdateBtLinkInfo(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
+       PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       BOOLEAN                         bBtHsOn=FALSE;\r
+\r
+#if(BT_AUTO_REPORT_ONLY_8821A_2ANT == 1)       // profile from bt patch\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
+\r
+       pBtLinkInfo->bBtLinkExist = pCoexSta->bBtLinkExist;\r
+       pBtLinkInfo->bScoExist = pCoexSta->bScoExist;\r
+       pBtLinkInfo->bA2dpExist = pCoexSta->bA2dpExist;\r
+       pBtLinkInfo->bPanExist = pCoexSta->bPanExist;\r
+       pBtLinkInfo->bHidExist = pCoexSta->bHidExist;\r
+\r
+       // work around for HS mode.\r
+       if(bBtHsOn)\r
+       {\r
+               pBtLinkInfo->bPanExist = TRUE;\r
+               pBtLinkInfo->bBtLinkExist = TRUE;\r
+       }\r
+#else  // profile from bt stack\r
+       pBtLinkInfo->bBtLinkExist = pStackInfo->bBtLinkExist;\r
+       pBtLinkInfo->bScoExist = pStackInfo->bScoExist;\r
+       pBtLinkInfo->bA2dpExist = pStackInfo->bA2dpExist;\r
+       pBtLinkInfo->bPanExist = pStackInfo->bPanExist;\r
+       pBtLinkInfo->bHidExist = pStackInfo->bHidExist;\r
+\r
        //for win-8 stack HID report error\r
        if(!pStackInfo->bHidExist)\r
                pStackInfo->bHidExist = pCoexSta->bHidExist;  //sync  BTInfo with BT firmware and stack\r
        // when stack HID report error, here we use the info from bt fw.\r
        if(!pStackInfo->bBtLinkExist)\r
        //for win-8 stack HID report error\r
        if(!pStackInfo->bHidExist)\r
                pStackInfo->bHidExist = pCoexSta->bHidExist;  //sync  BTInfo with BT firmware and stack\r
        // when stack HID report error, here we use the info from bt fw.\r
        if(!pStackInfo->bBtLinkExist)\r
-               pStackInfo->bBtLinkExist = pCoexSta->bBtLinkExist;\r
+               pStackInfo->bBtLinkExist = pCoexSta->bBtLinkExist;      \r
+#endif\r
+       // check if Sco only\r
+       if( pBtLinkInfo->bScoExist &&\r
+               !pBtLinkInfo->bA2dpExist &&\r
+               !pBtLinkInfo->bPanExist &&\r
+               !pBtLinkInfo->bHidExist )\r
+               pBtLinkInfo->bScoOnly = TRUE;\r
+       else\r
+               pBtLinkInfo->bScoOnly = FALSE;\r
+\r
+       // check if A2dp only\r
+       if( !pBtLinkInfo->bScoExist &&\r
+               pBtLinkInfo->bA2dpExist &&\r
+               !pBtLinkInfo->bPanExist &&\r
+               !pBtLinkInfo->bHidExist )\r
+               pBtLinkInfo->bA2dpOnly = TRUE;\r
+       else\r
+               pBtLinkInfo->bA2dpOnly = FALSE;\r
+\r
+       // check if Pan only\r
+       if( !pBtLinkInfo->bScoExist &&\r
+               !pBtLinkInfo->bA2dpExist &&\r
+               pBtLinkInfo->bPanExist &&\r
+               !pBtLinkInfo->bHidExist )\r
+               pBtLinkInfo->bPanOnly = TRUE;\r
+       else\r
+               pBtLinkInfo->bPanOnly = FALSE;\r
        \r
        \r
-       if(!pStackInfo->bBtLinkExist)\r
+       // check if Hid only\r
+       if( !pBtLinkInfo->bScoExist &&\r
+               !pBtLinkInfo->bA2dpExist &&\r
+               !pBtLinkInfo->bPanExist &&\r
+               pBtLinkInfo->bHidExist )\r
+               pBtLinkInfo->bHidOnly = TRUE;\r
+       else\r
+               pBtLinkInfo->bHidOnly = FALSE;\r
+}\r
+\r
+u1Byte\r
+halbtc8821a2ant_ActionAlgorithm(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       BOOLEAN                         bBtHsOn=FALSE;\r
+       u1Byte                          algorithm=BT_8821A_2ANT_COEX_ALGO_UNDEFINED;\r
+       u1Byte                          numOfDiffProfile=0;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
+               \r
+       if(!pBtLinkInfo->bBtLinkExist)\r
        {\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No profile exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No BT link exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
-       if(pStackInfo->bScoExist)\r
+       if(pBtLinkInfo->bScoExist)\r
                numOfDiffProfile++;\r
                numOfDiffProfile++;\r
-       if(pStackInfo->bHidExist)\r
+       if(pBtLinkInfo->bHidExist)\r
                numOfDiffProfile++;\r
                numOfDiffProfile++;\r
-       if(pStackInfo->bPanExist)\r
+       if(pBtLinkInfo->bPanExist)\r
                numOfDiffProfile++;\r
                numOfDiffProfile++;\r
-       if(pStackInfo->bA2dpExist)\r
+       if(pBtLinkInfo->bA2dpExist)\r
                numOfDiffProfile++;\r
        \r
        if(numOfDiffProfile == 1)\r
        {\r
                numOfDiffProfile++;\r
        \r
        if(numOfDiffProfile == 1)\r
        {\r
-               if(pStackInfo->bScoExist)\r
+               if(pBtLinkInfo->bScoExist)\r
                {\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO only\n"));\r
                        algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
-                       if(pStackInfo->bHidExist)\r
+                       if(pBtLinkInfo->bHidExist)\r
                        {\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID only\n"));\r
                                algorithm = BT_8821A_2ANT_COEX_ALGO_HID;\r
                        }\r
                                algorithm = BT_8821A_2ANT_COEX_ALGO_HID;\r
                        }\r
-                       else if(pStackInfo->bA2dpExist)\r
+                       else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP only\n"));\r
                                algorithm = BT_8821A_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                                algorithm = BT_8821A_2ANT_COEX_ALGO_A2DP;\r
                        }\r
-                       else if(pStackInfo->bPanExist)\r
+                       else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(HS) only\n"));\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(EDR) only\n"));\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
@@ -424,73 +600,75 @@ halbtc8821a2ant_ActionAlgorithm(
        }\r
        else if(numOfDiffProfile == 2)\r
        {\r
        }\r
        else if(numOfDiffProfile == 2)\r
        {\r
-               if(pStackInfo->bScoExist)\r
+               if(pBtLinkInfo->bScoExist)\r
                {\r
                {\r
-                       if(pStackInfo->bHidExist)\r
+                       if(pBtLinkInfo->bHidExist)\r
                        {\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));\r
-                               algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID\n"));\r
+                               algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                        }\r
                        }\r
-                       else if(pStackInfo->bA2dpExist)\r
+                       else if(pBtLinkInfo->bA2dpExist)\r
                        {\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
-                               algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
+                               algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                        }\r
                        }\r
-                       else if(pStackInfo->bPanExist)\r
+                       else if(pBtLinkInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));\r
-                                       algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(EDR)\n"));\r
+                                       algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                        }\r
                }\r
                else\r
                {\r
                                }\r
                        }\r
                }\r
                else\r
                {\r
-                       if( pStackInfo->bHidExist &&\r
-                               pStackInfo->bA2dpExist )\r
+                       if( pBtLinkInfo->bHidExist &&\r
+                               pBtLinkInfo->bA2dpExist )\r
                        {\r
                        {\r
+#if 0\r
                                if(pStackInfo->numOfHid >= 2)\r
                                {\r
                                if(pStackInfo->numOfHid >= 2)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID*2 + A2DP\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID*2 + A2DP\n"));\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                                else\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                                else\r
+#endif\r
                                {                       \r
                                {                       \r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP\n"));\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                        }\r
-                       else if( pStackInfo->bHidExist &&\r
-                               pStackInfo->bPanExist )\r
+                       else if( pBtLinkInfo->bHidExist &&\r
+                               pBtLinkInfo->bPanExist )\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));\r
-                                       algorithm =  BT_8821A_2ANT_COEX_ALGO_HID;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(HS)\n"));\r
+                                       algorithm = BT_8821A_2ANT_COEX_ALGO_HID;\r
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
-                       else if( pStackInfo->bPanExist &&\r
-                               pStackInfo->bA2dpExist )\r
+                       else if( pBtLinkInfo->bPanExist &&\r
+                               pBtLinkInfo->bA2dpExist )\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
@@ -498,57 +676,57 @@ halbtc8821a2ant_ActionAlgorithm(
        }\r
        else if(numOfDiffProfile == 3)\r
        {\r
        }\r
        else if(numOfDiffProfile == 3)\r
        {\r
-               if(pStackInfo->bScoExist)\r
+               if(pBtLinkInfo->bScoExist)\r
                {\r
                {\r
-                       if( pStackInfo->bHidExist &&\r
-                               pStackInfo->bA2dpExist )\r
+                       if( pBtLinkInfo->bHidExist &&\r
+                               pBtLinkInfo->bA2dpExist )\r
                        {\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
-                               algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP ==> SCO\n"));\r
+                               algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                        }\r
                        }\r
-                       else if( pStackInfo->bHidExist &&\r
-                               pStackInfo->bPanExist )\r
+                       else if( pBtLinkInfo->bHidExist &&\r
+                               pBtLinkInfo->bPanExist )\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
-                                       algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(HS) ==> SCO\n"));\r
+                                       algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
-                                       algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(EDR) ==> SCO\n"));\r
+                                       algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                        }\r
                                }\r
                        }\r
-                       else if( pStackInfo->bPanExist &&\r
-                               pStackInfo->bA2dpExist )\r
+                       else if( pBtLinkInfo->bPanExist &&\r
+                               pBtLinkInfo->bA2dpExist )\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
-                                       algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
+                                       algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
-                                       algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
+                                       algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                        }\r
                }\r
                else\r
                {\r
                                }\r
                        }\r
                }\r
                else\r
                {\r
-                       if( pStackInfo->bHidExist &&\r
-                               pStackInfo->bPanExist &&\r
-                               pStackInfo->bA2dpExist )\r
+                       if( pBtLinkInfo->bHidExist &&\r
+                               pBtLinkInfo->bPanExist &&\r
+                               pBtLinkInfo->bA2dpExist )\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
@@ -556,21 +734,21 @@ halbtc8821a2ant_ActionAlgorithm(
        }\r
        else if(numOfDiffProfile >= 3)\r
        {\r
        }\r
        else if(numOfDiffProfile >= 3)\r
        {\r
-               if(pStackInfo->bScoExist)\r
+               if(pBtLinkInfo->bScoExist)\r
                {\r
                {\r
-                       if( pStackInfo->bHidExist &&\r
-                               pStackInfo->bPanExist &&\r
-                               pStackInfo->bA2dpExist )\r
+                       if( pBtLinkInfo->bHidExist &&\r
+                               pBtLinkInfo->bPanExist &&\r
+                               pBtLinkInfo->bA2dpExist )\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
 \r
                                }\r
                                else\r
                                {\r
 \r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
-                                       algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
+                                       algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
                                }\r
                        }\r
                }\r
                                }\r
                        }\r
                }\r
@@ -579,50 +757,6 @@ halbtc8821a2ant_ActionAlgorithm(
        return algorithm;\r
 }\r
 \r
        return algorithm;\r
 }\r
 \r
-BOOLEAN\r
-halbtc8821a2ant_NeedToDecBtPwr(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
-       )\r
-{\r
-       BOOLEAN         bRet=FALSE;\r
-       BOOLEAN         bBtHsOn=FALSE, bWifiConnected=FALSE;\r
-       s4Byte          btHsRssi=0;\r
-       u1Byte          btRssiState;\r
-\r
-       if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn))\r
-               return FALSE;\r
-       if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected))\r
-               return FALSE;\r
-       if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_HS_RSSI, &btHsRssi))\r
-               return FALSE;\r
-\r
-       btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
-\r
-       if(bWifiConnected)\r
-       {\r
-               if(bBtHsOn)\r
-               {\r
-                       if(btHsRssi > 37)\r
-                       {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for HS mode!!\n"));\r
-                               bRet = TRUE;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-                       {\r
-               \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for Wifi is connected!!\n"));\r
-                               bRet = TRUE;\r
-                       }\r
-               }\r
-       }\r
-       \r
-       return bRet;\r
-}\r
-\r
 VOID\r
 halbtc8821a2ant_SetFwDacSwingLevel(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8821a2ant_SetFwDacSwingLevel(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -635,8 +769,8 @@ halbtc8821a2ant_SetFwDacSwingLevel(
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
 }\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
 }\r
@@ -644,20 +778,15 @@ halbtc8821a2ant_SetFwDacSwingLevel(
 VOID\r
 halbtc8821a2ant_SetFwDecBtPwr(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8821a2ant_SetFwDecBtPwr(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      BOOLEAN                 bDecBtPwr\r
+       IN      u1Byte                          decBtPwrLvl\r
        )\r
 {\r
        u1Byte                  H2C_Parameter[1] ={0};\r
        \r
        )\r
 {\r
        u1Byte                  H2C_Parameter[1] ={0};\r
        \r
-       H2C_Parameter[0] = 0;\r
-\r
-       if(bDecBtPwr)\r
-       {\r
-               H2C_Parameter[0] |= BIT1;\r
-       }\r
+       H2C_Parameter[0] = decBtPwrLvl;\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power : %s, FW write 0x62=0x%x\n", \r
-               (bDecBtPwr? "Yes!!":"No!!"), H2C_Parameter[0]));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], decrease Bt Power level = %d, FW write 0x62=0x%x\n", \r
+               decBtPwrLvl, H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);    \r
 }\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);    \r
 }\r
@@ -665,25 +794,22 @@ halbtc8821a2ant_SetFwDecBtPwr(
 VOID\r
 halbtc8821a2ant_DecBtPwr(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8821a2ant_DecBtPwr(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      BOOLEAN                 bForceExec,\r
-       IN      BOOLEAN                 bDecBtPwr\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      u1Byte                          decBtPwrLvl\r
        )\r
 {\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power = %s\n",  \r
-               (bForceExec? "force to":""), ((bDecBtPwr)? "ON":"OFF")));\r
-       pCoexDm->bCurDecBtPwr = bDecBtPwr;\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s Dec BT power level = %d\n",  \r
+               (bForceExec? "force to":""), decBtPwrLvl));\r
+       pCoexDm->curBtDecPwrLvl = decBtPwrLvl;\r
 \r
        if(!bForceExec)\r
        {\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreDecBtPwr=%d, bCurDecBtPwr=%d\n", \r
-                       pCoexDm->bPreDecBtPwr, pCoexDm->bCurDecBtPwr));\r
-\r
-               if(pCoexDm->bPreDecBtPwr == pCoexDm->bCurDecBtPwr) \r
+               if(pCoexDm->preBtDecPwrLvl == pCoexDm->curBtDecPwrLvl) \r
                        return;\r
        }\r
                        return;\r
        }\r
-       halbtc8821a2ant_SetFwDecBtPwr(pBtCoexist, pCoexDm->bCurDecBtPwr);\r
+       halbtc8821a2ant_SetFwDecBtPwr(pBtCoexist, pCoexDm->curBtDecPwrLvl);\r
 \r
 \r
-       pCoexDm->bPreDecBtPwr = pCoexDm->bCurDecBtPwr;\r
+       pCoexDm->preBtDecPwrLvl = pCoexDm->curBtDecPwrLvl;\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -701,7 +827,7 @@ halbtc8821a2ant_SetBtAutoReport(
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
@@ -714,15 +840,12 @@ halbtc8821a2ant_BtAutoReport(
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s BT Auto report = %s\n",  \r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
-                       pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
-\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
@@ -738,15 +861,12 @@ halbtc8821a2ant_FwDacSwingLvl(
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n", \r
-                       pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
-\r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
                        return;\r
        }\r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
                        return;\r
        }\r
@@ -765,7 +885,7 @@ halbtc8821a2ant_SetSwRfRxLpfCorner(
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
        }\r
        else\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
        }\r
        else\r
@@ -774,7 +894,7 @@ halbtc8821a2ant_SetSwRfRxLpfCorner(
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
@@ -787,15 +907,12 @@ halbtc8821a2ant_RfShrink(
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
-                       pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
-\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
@@ -823,8 +940,8 @@ halbtc8821a2ant_SetSwPenaltyTxRateAdaptive(
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
-               (bLowPenaltyRa? "ON!!":"OFF!!") ));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
+               (bLowPenaltyRa? "ON!!":"OFF!!"));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
 }\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
 }\r
@@ -837,15 +954,12 @@ halbtc8821a2ant_LowPenaltyRa(
        )\r
 {\r
        //return;\r
        )\r
 {\r
        //return;\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
-                       pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
-\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
@@ -862,7 +976,7 @@ halbtc8821a2ant_SetDacSwingReg(
 {\r
        u1Byte  val=(u1Byte)level;\r
 \r
 {\r
        u1Byte  val=(u1Byte)level;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc5b, 0x3e, val);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc5b, 0x3e, val);\r
 }\r
 \r
@@ -892,17 +1006,13 @@ halbtc8821a2ant_DacSwing(
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
-                       pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
-                       pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
-\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
@@ -922,12 +1032,12 @@ halbtc8821a2ant_SetAdcBackOff(
 {\r
        if(bAdcBackOff)\r
        {\r
 {\r
        if(bAdcBackOff)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level On!\n"));\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x3);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x3);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level Off!\n"));\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x1);\r
        }\r
 }\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x1);\r
        }\r
 }\r
@@ -939,15 +1049,12 @@ halbtc8821a2ant_AdcBackOff(
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
-                       pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
-\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
@@ -964,23 +1071,67 @@ halbtc8821a2ant_SetAgcTable(
 {\r
        u1Byte          rssiAdjustVal=0;\r
 \r
 {\r
        u1Byte          rssiAdjustVal=0;\r
 \r
+       //=================BB AGC Gain Table\r
+       if(bAgcTableEn)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB Agc Table On!\n"));\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6e1A0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6d1B0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6c1C0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6b1D0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6a1E0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x691F0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x68200001);\r
+       }\r
+       else\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB Agc Table Off!\n"));\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xaa1A0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa91B0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa81C0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa71D0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa61E0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa51F0001);\r
+               pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa4200001);\r
+       }\r
+       \r
+       \r
+       //=================RF Gain\r
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
        if(bAgcTableEn)\r
        {\r
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
-               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x28F4B);\r
-               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x10AB2);\r
-               rssiAdjustVal = 8;\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table On!\n"));\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38fff);\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38ffe);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
-               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x2884B);\r
-               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x104B2);\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table Off!\n"));\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x380c3);\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x28ce6);\r
        }\r
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x0);\r
 \r
        }\r
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x0);\r
 \r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x1);\r
+       if(bAgcTableEn)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table On!\n"));\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38fff);\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38ffe);\r
+       }\r
+       else\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table Off!\n"));\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x380c3);\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x28ce6);\r
+       }\r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x0);\r
+\r
        // set rssiAdjustVal for wifi module.\r
        // set rssiAdjustVal for wifi module.\r
+       if(bAgcTableEn)\r
+       {\r
+               rssiAdjustVal = 8;\r
+       }\r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON, &rssiAdjustVal);\r
 }\r
 \r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON, &rssiAdjustVal);\r
 }\r
 \r
@@ -991,15 +1142,12 @@ halbtc8821a2ant_AgcTable(
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s %s Agc Table\n",  \r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
-                       pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
-\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
@@ -1017,16 +1165,16 @@ halbtc8821a2ant_SetCoexTable(
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -1040,7 +1188,7 @@ halbtc8821a2ant_CoexTable(
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
@@ -1048,12 +1196,7 @@ halbtc8821a2ant_CoexTable(
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
        pCoexDm->curVal0x6cc = val0x6cc;\r
 \r
        if(!bForceExec)\r
-       {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
-       \r
+       {       \r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
@@ -1068,6 +1211,76 @@ halbtc8821a2ant_CoexTable(
        pCoexDm->preVal0x6cc = pCoexDm->curVal0x6cc;\r
 }\r
 \r
        pCoexDm->preVal0x6cc = pCoexDm->curVal0x6cc;\r
 }\r
 \r
+VOID\r
+halbtc8821a2ant_CoexTableWithType(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bForceExec,\r
+       IN      u1Byte                          type\r
+       )\r
+{\r
+       pCoexSta->nCoexTableType = type;\r
+       \r
+       switch(type)\r
+       {\r
+               case 0:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x55555555, 0xffffff, 0x3);\r
+                       break;\r
+               case 1:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x5afa5afa, 0xffffff, 0x3);\r
+                       break;\r
+               case 2:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x5ada5ada, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 3:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0xaaaaaaaa, 0xaaaaaaaa, 0xffffff, 0x3);\r
+                       break;\r
+               case 4:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0xffffffff, 0xffffffff, 0xffffff, 0x3);\r
+                       break;\r
+               case 5:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5fff5fff, 0xffffff, 0x3);\r
+                       break;\r
+               case 6:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5a5a5a5a, 0xffffff, 0x3);\r
+                       break;\r
+               case 7:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 8:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 9:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 10:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 11:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 12:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 13:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0xaaaaaaaa, 0xffffff, 0x3);\r
+                       break;\r
+               case 14:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5ada5ada, 0xffffff, 0x3);\r
+                       break;\r
+               case 15:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0xaaaaaaaa, 0xffffff, 0x3);\r
+                       break;\r
+               case 16:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0x5fdf5fdf, 0x5fdb5fdb, 0xffffff, 0x3);\r
+                       break;\r
+               case 17:\r
+                       halbtc8821a2ant_CoexTable(pBtCoexist, bForceExec, 0xfafafafa, 0xfafafafa, 0xffffff, 0x3);\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+}\r
+\r
 VOID\r
 halbtc8821a2ant_SetFwIgnoreWlanAct(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8821a2ant_SetFwIgnoreWlanAct(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -1081,12 +1294,55 @@ halbtc8821a2ant_SetFwIgnoreWlanAct(
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
 }\r
 \r
                H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
 }\r
 \r
+VOID\r
+halbtc8821a2ant_SetLpsRpwm(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                  lpsVal,\r
+       IN      u1Byte                  rpwmVal\r
+       )\r
+{\r
+       u1Byte  lps=lpsVal;\r
+       u1Byte  rpwm=rpwmVal;\r
+       \r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_LPS_VAL, &lps);\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RPWM_VAL, &rpwm);\r
+}\r
+\r
+VOID\r
+halbtc8821a2ant_LpsRpwm(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                 bForceExec,\r
+       IN      u1Byte                  lpsVal,\r
+       IN      u1Byte                  rpwmVal\r
+       )\r
+{\r
+       BOOLEAN bForceExecPwrCmd=FALSE;\r
+       \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
+               (bForceExec? "force to":""), lpsVal, rpwmVal));\r
+       pCoexDm->curLps = lpsVal;\r
+       pCoexDm->curRpwm = rpwmVal;\r
+\r
+       if(!bForceExec)\r
+       {\r
+               if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
+                       (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
+               {\r
+                       return;\r
+               }\r
+       }\r
+       halbtc8821a2ant_SetLpsRpwm(pBtCoexist, lpsVal, rpwmVal);\r
+\r
+       pCoexDm->preLps = pCoexDm->curLps;\r
+       pCoexDm->preRpwm = pCoexDm->curRpwm;\r
+}\r
+\r
 VOID\r
 halbtc8821a2ant_IgnoreWlanAct(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
 VOID\r
 halbtc8821a2ant_IgnoreWlanAct(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
@@ -1094,15 +1350,12 @@ halbtc8821a2ant_IgnoreWlanAct(
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
-                       pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
-\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
@@ -1122,7 +1375,7 @@ halbtc8821a2ant_SetFwPstdma(
        )\r
 {\r
        u1Byte                  H2C_Parameter[5] ={0};\r
        )\r
 {\r
        u1Byte                  H2C_Parameter[5] ={0};\r
-\r
+        \r
        H2C_Parameter[0] = byte1;       \r
        H2C_Parameter[1] = byte2;       \r
        H2C_Parameter[2] = byte3;\r
        H2C_Parameter[0] = byte1;       \r
        H2C_Parameter[1] = byte2;       \r
        H2C_Parameter[2] = byte3;\r
@@ -1135,7 +1388,7 @@ halbtc8821a2ant_SetFwPstdma(
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = byte5;\r
        \r
        pCoexDm->psTdmaPara[3] = byte4;\r
        pCoexDm->psTdmaPara[4] = byte5;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n", \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
 \r
@@ -1151,6 +1404,7 @@ halbtc8821a2ant_SwMechanism1(
        IN      BOOLEAN         bBTLNAConstrain\r
        ) \r
 {\r
        IN      BOOLEAN         bBTLNAConstrain\r
        ) \r
 {\r
+       /*\r
        u4Byte  wifiBw;\r
        \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
        u4Byte  wifiBw;\r
        \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
@@ -1160,12 +1414,10 @@ halbtc8821a2ant_SwMechanism1(
                if (bShrinkRxLPF)\r
                        bShrinkRxLPF = FALSE;\r
        }\r
                if (bShrinkRxLPF)\r
                        bShrinkRxLPF = FALSE;\r
        }\r
-               \r
-        halbtc8821a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, bShrinkRxLPF);\r
+       */\r
+       \r
+       //halbtc8821a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, bShrinkRxLPF);\r
        halbtc8821a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);\r
        halbtc8821a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);\r
-\r
-       //no limited DIG\r
-       //halbtc8821a2ant_SetBtLnaConstrain(pBtCoexist, NORMAL_EXEC, bBTLNAConstrain);\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -1178,7 +1430,7 @@ halbtc8821a2ant_SwMechanism2(
        ) \r
 {\r
        //halbtc8821a2ant_AgcTable(pBtCoexist, NORMAL_EXEC, bAGCTableShift);\r
        ) \r
 {\r
        //halbtc8821a2ant_AgcTable(pBtCoexist, NORMAL_EXEC, bAGCTableShift);\r
-       halbtc8821a2ant_AdcBackOff(pBtCoexist, NORMAL_EXEC, bADCBackOff);\r
+       //halbtc8821a2ant_AdcBackOff(pBtCoexist, NORMAL_EXEC, bADCBackOff);\r
        halbtc8821a2ant_DacSwing(pBtCoexist, NORMAL_EXEC, bSWDACSwing, dacSwingLvl);\r
 }\r
 \r
        halbtc8821a2ant_DacSwing(pBtCoexist, NORMAL_EXEC, bSWDACSwing, dacSwingLvl);\r
 }\r
 \r
@@ -1243,19 +1495,24 @@ halbtc8821a2ant_PsTdma(
 {\r
        BOOLEAN                 bTurnOnByCnt=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0;\r
 {\r
        BOOLEAN                 bTurnOnByCnt=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0;\r
+       u1Byte                  wifiRssiState1, btRssiState;\r
+\r
+       \r
+       wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);\r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
+\r
+       if (!(BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState)) && bTurnOn)\r
+       {\r
+               type = type +100;  //for WiFi RSSI low or BT RSSI low\r
+       }\r
 \r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
                (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
-                       pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
-                       pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
-\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
@@ -1266,10 +1523,12 @@ halbtc8821a2ant_PsTdma(
                {\r
                        case 1:\r
                        default:\r
                {\r
                        case 1:\r
                        default:\r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
                                break;\r
                        case 2:\r
                                break;\r
                        case 2:\r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x03, 0xf1, 0x90);\r
                                break;\r
                        case 3:\r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);\r
                                break;\r
                        case 3:\r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);\r
@@ -1278,10 +1537,12 @@ halbtc8821a2ant_PsTdma(
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xf1, 0x90);\r
                                break;\r
                        case 5:\r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xf1, 0x90);\r
                                break;\r
                        case 5:\r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x3, 0x70, 0x90);                           \r
                                break;\r
                        case 6:\r
                                break;\r
                        case 6:\r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x3, 0x70, 0x90);\r
                                break;\r
                        case 7:\r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);\r
                                break;\r
                        case 7:\r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);\r
@@ -1290,28 +1551,36 @@ halbtc8821a2ant_PsTdma(
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70, 0x90);\r
                                break;\r
                        case 9: \r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70, 0x90);\r
                                break;\r
                        case 9: \r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
                                break;\r
                        case 10:        \r
                                break;\r
                        case 10:        \r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x03, 0xf1, 0x90);\r
                                break;\r
                        case 11:        \r
                                break;\r
                        case 11:        \r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0xe1, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0xe1, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);\r
                                break;\r
                        case 12:\r
                                break;\r
                        case 12:\r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0xf1, 0x90);\r
                                break;\r
                        case 13:\r
                                break;\r
                        case 13:\r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x3, 0x70, 0x90);           \r
                                break;\r
                        case 14:\r
                                break;\r
                        case 14:\r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x3, 0x70, 0x90);           \r
                                break;\r
                        case 15:\r
                                break;\r
                        case 15:\r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0x60, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0x60, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);           \r
                                break;\r
                        case 16:\r
                                break;\r
                        case 16:\r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0x60, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0x60, 0x90);\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0x70, 0x90);           \r
                                break;\r
                        case 17:\r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x2f, 0x2f, 0x60, 0x90);\r
                                break;\r
                        case 17:\r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x2f, 0x2f, 0x60, 0x90);\r
@@ -1325,11 +1594,59 @@ halbtc8821a2ant_PsTdma(
                        case 20:\r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);\r
                                break;\r
                        case 20:\r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);\r
                                break;\r
-                       case 21:        \r
+                       case 21:\r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
                                halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
+                               break;  \r
+                       case 23:\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x03, 0xf1, 0x10);\r
+                               break;\r
+                       case 24:\r
+                       case 124:\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x3c, 0x03, 0x70, 0x50);\r
                                break;\r
                        case 71:\r
                                break;\r
                        case 71:\r
-                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
+                               //halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
+\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
+                               break;\r
+                       case 101:\r
+                       case 105:\r
+                       case 171:       \r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x3a, 0x03, 0x70, 0x50);\r
+                               break;\r
+                       case 102:\r
+                       case 106:\r
+                       case 110:\r
+                       case 114:       \r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x2d, 0x03, 0x70, 0x50);\r
+                               break;  \r
+                       case 103:\r
+                       case 107:\r
+                       case 111:\r
+                       case 115:       \r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1c, 0x03, 0x70, 0x50);\r
+                               break;          \r
+                       case 104:\r
+                       case 108:\r
+                       case 112:\r
+                       case 116:       \r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x10, 0x03, 0x70, 0x50);\r
+                               break;  \r
+                       case 109:\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
+                               break;\r
+                       case 113:       \r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0x70, 0x90);\r
+                               break;\r
+                       case 121:       \r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
+                               break;  \r
+                       case 22:\r
+                       case 122:\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x35, 0x03, 0x71, 0x11);\r
+                               break;\r
+                       case 123:\r
+                               halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x1c, 0x03, 0x70, 0x50);\r
                                break;\r
                }\r
        }\r
                                break;\r
                }\r
        }\r
@@ -1356,32 +1673,110 @@ halbtc8821a2ant_PsTdma(
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-halbtc8821a2ant_CoexAllOff(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
-       )\r
-{\r
-       // fw all off\r
-       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
-       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
-       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
-\r
-       // sw all off\r
-       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-\r
-       // hw all off\r
-       halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);\r
-}\r
-\r
-VOID\r
-halbtc8821a2ant_CoexUnder5G(\r
-       IN      PBTC_COEXIST            pBtCoexist\r
+halbtc8821a2ant_PsTdmaCheckForPowerSaveState(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                 bNewPsState\r
        )\r
 {\r
        )\r
 {\r
-       halbtc8821a2ant_CoexAllOff(pBtCoexist);\r
-\r
-       halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, NORMAL_EXEC, TRUE);\r
-}\r
+       u1Byte  lpsMode=0x0;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_LPS_MODE, &lpsMode);\r
+       \r
+       if(lpsMode)     // already under LPS state\r
+       {\r
+               if(bNewPsState)         \r
+               {\r
+                       // keep state under LPS, do nothing.\r
+               }\r
+               else\r
+               {\r
+                       // will leave LPS state, turn off psTdma first\r
+                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+               }\r
+       }\r
+       else                                            // NO PS state\r
+       {\r
+               if(bNewPsState)\r
+               {\r
+                       // will enter LPS state, turn off psTdma first\r
+                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+               }\r
+               else\r
+               {\r
+                       // keep state under NO PS state, do nothing.\r
+               }\r
+       }\r
+}\r
+\r
+VOID\r
+halbtc8821a2ant_PowerSaveState(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                          psType,\r
+       IN      u1Byte                          lpsVal,\r
+       IN      u1Byte                          rpwmVal\r
+       )\r
+{\r
+       BOOLEAN         bLowPwrDisable=FALSE;\r
+       \r
+       switch(psType)\r
+       {\r
+               case BTC_PS_WIFI_NATIVE:\r
+                       // recover to original 32k low power setting\r
+                       bLowPwrDisable = FALSE;\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = FALSE;\r
+                       break;\r
+               case BTC_PS_LPS_ON:\r
+                       halbtc8821a2ant_PsTdmaCheckForPowerSaveState(pBtCoexist, TRUE);\r
+                       halbtc8821a2ant_LpsRpwm(pBtCoexist, NORMAL_EXEC, lpsVal, rpwmVal);                      \r
+                       // when coex force to enter LPS, do not enter 32k low power.\r
+                       bLowPwrDisable = TRUE;\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+                       // power save must executed before psTdma.                      \r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_ENTER_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = TRUE;\r
+                       break;\r
+               case BTC_PS_LPS_OFF:\r
+                       halbtc8821a2ant_PsTdmaCheckForPowerSaveState(pBtCoexist, FALSE);\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);\r
+                       pCoexSta->bForceLpsOn = FALSE;\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+}\r
+\r
+\r
+VOID\r
+halbtc8821a2ant_CoexAllOff(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       // fw all off\r
+       halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
+       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+       // sw all off\r
+       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+\r
+       // hw all off\r
+       //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+       halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+}\r
+\r
+VOID\r
+halbtc8821a2ant_CoexUnder5G(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       halbtc8821a2ant_CoexAllOff(pBtCoexist);\r
+\r
+       halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, NORMAL_EXEC, TRUE);\r
+}\r
 \r
 VOID\r
 halbtc8821a2ant_InitCoexDm(\r
 \r
 VOID\r
 halbtc8821a2ant_InitCoexDm(\r
@@ -1389,169 +1784,239 @@ halbtc8821a2ant_InitCoexDm(
        )\r
 {      \r
        // force to reset coex mechanism\r
        )\r
 {      \r
        // force to reset coex mechanism\r
-       halbtc8821a2ant_CoexTable(pBtCoexist, FORCE_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);\r
-\r
+       halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+       \r
+       halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
        halbtc8821a2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);\r
        halbtc8821a2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);\r
-       halbtc8821a2ant_DecBtPwr(pBtCoexist, FORCE_EXEC, FALSE);\r
+       halbtc8821a2ant_DecBtPwr(pBtCoexist, FORCE_EXEC, 0);\r
 \r
        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
 VOID\r
 \r
        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 }\r
 \r
 VOID\r
-halbtc8821a2ant_BtInquiryPage(\r
+halbtc8821a2ant_ActionBtInquiry(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
+       BOOLEAN bWifiConnected=FALSE;\r
        BOOLEAN bLowPwrDisable=TRUE;\r
        BOOLEAN bLowPwrDisable=TRUE;\r
+       BOOLEAN         bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
+\r
+\r
+       wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
+       wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);\r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
        \r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
        \r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
+               \r
+       \r
+       halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
+\r
+       if(bScan || bLink || bRoam)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi link process + BT Inq/Page!!\n"));\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);         \r
+               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
+       }\r
+       else if(bWifiConnected)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT Inq/Page!!\n"));\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);         \r
+               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
+       }\r
+       else\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi no-link + BT Inq/Page!!\n"));\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+       }       \r
+       \r
+       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);\r
+       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
 \r
-       halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
-       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
+       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+       \r
 }\r
 }\r
-BOOLEAN\r
-halbtc8821a2ant_IsCommonAction(\r
+\r
+\r
+VOID\r
+halbtc8821a2ant_ActionWiFiLinkProcess(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BOOLEAN                 bCommon=FALSE, bWifiConnected=FALSE, bWifiBusy=FALSE;\r
-       BOOLEAN                 bLowPwrDisable=FALSE;\r
+       u1Byte  u1Tmpa, u1Tmpb;\r
+       \r
+       halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);         \r
+       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
 \r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
+       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 \r
 \r
-       halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
 \r
 \r
-       if(!bWifiConnected && \r
-               BT_8821A_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus)\r
-       {\r
-               bLowPwrDisable = FALSE;\r
-               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT IPS!!\n"));  \r
+       u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
+       u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);\r
 \r
 \r
-               \r
-               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
-               halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
-               \r
-               halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-               halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex], 0x765=0x%x, 0x76e=0x%x\n", u1Tmpa, u1Tmpb));\r
+}\r
 \r
 \r
-               bCommon = TRUE;\r
-       }\r
-       else if(bWifiConnected && \r
-                       (BT_8821A_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus) )\r
-       {               \r
-               bLowPwrDisable = FALSE;\r
-               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+BOOLEAN\r
+halbtc8821a2ant_ActionWifiIdleProcess(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{      \r
+       u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
+       u4Byte          wifiBw;\r
+       u1Byte          apNum=0;\r
 \r
 \r
-               if(bWifiBusy)\r
-               {       \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT IPS!!\n"));\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
-               }\r
-               else\r
-               {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT IPS!!\n"));\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
-               }\r
-               \r
-               halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
+       wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
+       //wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);\r
+       wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES-20, 0);\r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
 \r
 \r
-               halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-               halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);\r
 \r
 \r
-               bCommon = TRUE;\r
-       }\r
-       else if(!bWifiConnected && \r
-               (BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
+       // define the office environment\r
+       if(BTC_RSSI_HIGH(wifiRssiState1) && \r
+                       (pCoexSta->bHidExist == TRUE) && (pCoexSta->bA2dpExist == TRUE))\r
        {\r
        {\r
-               bLowPwrDisable = TRUE;\r
-               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT LPS!!\n"));          \r
-\r
-               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
-               halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi  idle process for BT HID+A2DP exist!!\n"));\r
+               \r
+               halbtc8821a2ant_DacSwing(pBtCoexist, NORMAL_EXEC, TRUE, 0x6);\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
 \r
+               // sw all off\r
                halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
                halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 \r
                halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
                halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 \r
-               bCommon = TRUE;\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
+               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+\r
+               return TRUE;\r
        }\r
        }\r
-       else if(bWifiConnected && \r
-               (BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
+       else\r
        {\r
        {\r
-               bLowPwrDisable = TRUE;\r
-               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
-               \r
-               if(bWifiBusy)\r
-               {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT LPS!!\n"));\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
-               }\r
-               else\r
-               {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT LPS!!\n"));\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
-               }\r
-               \r
-               halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
+               halbtc8821a2ant_DacSwing(pBtCoexist, NORMAL_EXEC, TRUE, 0x18);\r
+               return FALSE;   \r
+       }\r
+       \r
+       \r
+}\r
 \r
 \r
-               halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,TRUE,TRUE);\r
-               halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
 \r
 \r
-               bCommon = TRUE;\r
-       }\r
-       else if(!bWifiConnected && \r
-                       (BT_8821A_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus) )\r
+\r
+BOOLEAN\r
+halbtc8821a2ant_IsCommonAction(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       u1Byte                  btRssiState=BTC_RSSI_STATE_HIGH;\r
+       BOOLEAN                 bCommon=FALSE, bWifiConnected=FALSE, bWifiBusy=FALSE;\r
+       BOOLEAN                 bBtHsOn=FALSE, bLowPwrDisable=FALSE;\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
+\r
+       if(!bWifiConnected)\r
        {\r
                bLowPwrDisable = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
        {\r
                bLowPwrDisable = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+               halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+               \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi non-connected idle!!\n"));\r
 \r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT Busy!!\n")); \r
-\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+               \r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
                halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
-\r
-               halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-               halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
                \r
                \r
+               halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+               halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+\r
                bCommon = TRUE;\r
        }\r
        else\r
        {\r
                bCommon = TRUE;\r
        }\r
        else\r
        {\r
-               bLowPwrDisable = TRUE;\r
-               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
-\r
-               if(bWifiBusy)\r
+               if(BT_8821A_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
                {\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT Busy!!\n"));\r
-                       bCommon = FALSE;\r
+                       bLowPwrDisable = FALSE;\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
+                       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+                       \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
+\r
+                       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+                       halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+                       halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
+                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);              \r
+                       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);\r
+                       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+               halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+\r
+                       bCommon = TRUE;\r
                }\r
                }\r
-               else\r
+               else if(BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)\r
                {\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT Busy!!\n"));\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 21);\r
+                       bLowPwrDisable = TRUE;\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
 \r
-                       if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
-                               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
-                       else    \r
-                               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
+                       if(bBtHsOn)\r
+                               return FALSE;\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
+                       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
                        \r
                        \r
+                       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+                       halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+                       halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
+                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+                       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);\r
+                       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+\r
                        bCommon = TRUE;\r
                }\r
                        bCommon = TRUE;\r
                }\r
+               else\r
+               {\r
+                       bLowPwrDisable = TRUE;\r
+                       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
 \r
-               halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,TRUE,TRUE);\r
+                       if(bWifiBusy)\r
+                       {\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
+                               bCommon = FALSE;\r
+                               //bCommon = halbtc8821a2ant_ActionWifiIdleProcess(pBtCoexist);  \r
+                       }\r
+                       else\r
+                       {\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
+                               //bCommon = FALSE;      \r
+                               bCommon = halbtc8821a2ant_ActionWifiIdleProcess(pBtCoexist);                    \r
+                       }\r
+               }       \r
        }\r
        }\r
-       \r
+\r
        return bCommon;\r
 }\r
 VOID\r
        return bCommon;\r
 }\r
 VOID\r
@@ -1566,12 +2031,12 @@ halbtc8821a2ant_TdmaDurationAdjust(
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TdmaDurationAdjust()\n"));\r
 \r
 \r
-       if(pCoexDm->bResetTdmaAdjust)\r
+       if(!pCoexDm->bAutoTdmaAdjust)\r
        {\r
        {\r
-               pCoexDm->bResetTdmaAdjust = FALSE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
+               pCoexDm->bAutoTdmaAdjust = TRUE;\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
                {\r
                        if(bScoHid)\r
                        {\r
                {\r
                        if(bScoHid)\r
                        {\r
@@ -1684,8 +2149,8 @@ halbtc8821a2ant_TdmaDurationAdjust(
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], retryCount = %d\n", retryCount));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
@@ -1705,7 +2170,7 @@ halbtc8821a2ant_TdmaDurationAdjust(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -1731,7 +2196,7 @@ halbtc8821a2ant_TdmaDurationAdjust(
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -1749,15 +2214,15 @@ halbtc8821a2ant_TdmaDurationAdjust(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
 \r
                }\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], max Interval = %d\n", maxInterval));\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
 \r
                                if(pCoexDm->curPsTdma == 71)\r
                                {\r
 \r
                                if(pCoexDm->curPsTdma == 71)\r
                                {\r
@@ -1874,7 +2339,7 @@ halbtc8821a2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
@@ -1998,7 +2463,7 @@ halbtc8821a2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
@@ -2108,7 +2573,7 @@ halbtc8821a2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
@@ -2221,7 +2686,7 @@ halbtc8821a2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
@@ -2331,7 +2796,7 @@ halbtc8821a2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
@@ -2447,7 +2912,7 @@ halbtc8821a2ant_TdmaDurationAdjust(
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
@@ -2460,15 +2925,9 @@ halbtc8821a2ant_TdmaDurationAdjust(
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
                }\r
        }\r
                }\r
        }\r
-\r
-       // when halbtc8821a2ant_TdmaDurationAdjust() is called, fw dac swing is included in the function.\r
-       //if(pCoexDm->psTdmaDuAdjType == 71)\r
-       //      halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xc); //Skip because A2DP get worse at HT40\r
-       //else\r
-               halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0x6);\r
 }\r
 \r
 // SCO only or SCO+PAN(HS)\r
 }\r
 \r
 // SCO only or SCO+PAN(HS)\r
@@ -2477,85 +2936,73 @@ halbtc8821a2ant_ActionSco(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte  wifiRssiState,btRssiState;\r
+       PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       u1Byte  wifiRssiState, btRssiState;\r
        u4Byte  wifiBw;\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        u4Byte  wifiBw;\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
 \r
 \r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 4);\r
 \r
-       if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
+       if(BTC_RSSI_HIGH(btRssiState))\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
        else    \r
        else    \r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
        \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
 \r
        if (BTC_WIFI_BW_LEGACY == wifiBw) //for SCO quality at 11b/g mode\r
        {\r
        \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
 \r
        if (BTC_WIFI_BW_LEGACY == wifiBw) //for SCO quality at 11b/g mode\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x5a5a5a5a, 0x5a5a5a5a, 0xffff, 0x3);\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        }\r
        else  //for SCO quality & wifi performance balance at 11n mode\r
        {\r
        }\r
        else  //for SCO quality & wifi performance balance at 11n mode\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x5aea5aea, 0x5aea5aea, 0xffff, 0x3);\r
-       }\r
-\r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       {\r
-       \r
-               // fw mechanism\r
-               //halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
-\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
-               }\r
+               if(BTC_WIFI_BW_HT40 == wifiBw)\r
+                       halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);\r
                else\r
                {\r
                else\r
                {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
+                       if(pBtLinkInfo->bScoOnly)\r
+                               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 17);\r
+                       else\r
+                               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 12);\r
                }\r
                }\r
+       }\r
 \r
 \r
-               // sw mechanism\r
+       halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
+       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
+\r
+       // sw mechanism\r
+       if(BTC_WIFI_BW_HT40 == wifiBw)\r
+       {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);                 \r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x18);                  \r
                }\r
                else\r
                {\r
                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
                }\r
                else\r
                {\r
                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);        \r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x18); \r
                }               \r
        }\r
        else\r
        {\r
                }               \r
        }\r
        else\r
        {\r
-               // fw mechanism\r
-               //halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
-\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
-               }\r
-               else\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
-               }\r
-               \r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x18);\r
                }               \r
        }\r
 }\r
                }               \r
        }\r
 }\r
@@ -2570,76 +3017,61 @@ halbtc8821a2ant_ActionHid(
        u4Byte  wifiBw;\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        u4Byte  wifiBw;\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
+\r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
 \r
 \r
+       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
-       if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
+       if(BTC_RSSI_HIGH(btRssiState))\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
        else    \r
        else    \r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
 \r
        if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
        {\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
 \r
        if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
        }\r
        else  //for HID quality & wifi performance balance at 11n mode\r
        {\r
        }\r
        else  //for HID quality & wifi performance balance at 11n mode\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aea5aea, 0xffff, 0x3);\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
        }\r
 \r
        }\r
 \r
+       halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
+\r
+       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 24);\r
+\r
+       // sw mechanism\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
-               }\r
-\r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }       \r
        }\r
        else\r
        {\r
                }       \r
        }\r
        else\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
-               }\r
-\r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }               \r
        }\r
 }\r
                }               \r
        }\r
 }\r
@@ -2650,73 +3082,109 @@ halbtc8821a2ant_ActionA2dp(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState;\r
+       u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
        u4Byte          wifiBw;\r
        u4Byte          wifiBw;\r
+       u1Byte          apNum=0;\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
-\r
-       //fw dac swing is called in halbtc8821a2ant_TdmaDurationAdjust()\r
-       //halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
-       \r
+       wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);\r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
 \r
 \r
-       if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
-       else    \r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
-\r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);\r
 \r
 \r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
+       // define the office environment\r
+       if( (apNum >= 10) && BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
        {\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+               //DbgPrint(" AP#>10(%d)\n", apNum);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
+               \r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+               halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+               halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);      \r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);                   \r
+                                       \r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
+               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+\r
+               // sw mechanism\r
+               pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+               if(BTC_WIFI_BW_HT40 == wifiBw)\r
                {\r
                {\r
-                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x6);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x6);           \r
                }\r
                }\r
-\r
-               // sw mechanism\r
+               return;\r
+               \r
+       }\r
+\r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+\r
+       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);      \r
+\r
+       if(BTC_RSSI_HIGH(btRssiState))\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
+       else    \r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+               \r
+       if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
+       {\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
+       }\r
+       else\r
+       {\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);           \r
+       }\r
+       \r
+\r
+       if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
+               (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+       {\r
+               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
+       }\r
+       else\r
+       {\r
+               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
+       }\r
+\r
+       // sw mechanism\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+       if(BTC_WIFI_BW_HT40 == wifiBw)\r
+       {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
        else\r
        {\r
                }\r
        }\r
        else\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
-               }\r
-               \r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }               \r
        }\r
 }\r
                }               \r
        }\r
 }\r
@@ -2726,72 +3194,65 @@ halbtc8821a2ant_ActionA2dpPanHs(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
+       u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
        u4Byte          wifiBw;\r
 \r
        u4Byte          wifiBw;\r
 \r
-       btInfoExt = pCoexSta->btInfoExt;\r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8821a2ant_BtRssiState(2,35, 0);\r
+       wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
 \r
 \r
-       //fw dac swing is called in halbtc8821a2ant_TdmaDurationAdjust()\r
-       //halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
 \r
 \r
+       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
+       \r
+       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
 \r
-       if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
+       if(BTC_RSSI_HIGH(btRssiState))\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
        else    \r
        else    \r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+       if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
+       {\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
+       }\r
+       else\r
+       {\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);           \r
+       }\r
 \r
 \r
+       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
+\r
+       // sw mechanism\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
-               // fw mechanism\r
-               if(btInfoExt&BIT0)      //a2dp basic rate\r
-               {\r
-                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
-               }\r
-               else                            //a2dp edr rate\r
-               {\r
-                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
-               }\r
-\r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
        else\r
        {\r
                }\r
        }\r
        else\r
        {\r
-               // fw mechanism\r
-               if(btInfoExt&BIT0)      //a2dp basic rate\r
-               {\r
-                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
-               }\r
-               else                            //a2dp edr rate\r
-               {\r
-                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
-               }\r
-               \r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }               \r
        }\r
 }\r
                }               \r
        }\r
 }\r
@@ -2801,80 +3262,73 @@ halbtc8821a2ant_ActionPanEdr(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState;\r
+       u1Byte          wifiRssiState,wifiRssiState1, btRssiState;\r
        u4Byte          wifiBw;\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        u4Byte          wifiBw;\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
+       wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
+\r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
 \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
-       if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
+       if(BTC_RSSI_HIGH(btRssiState))\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
        else    \r
        else    \r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
-\r
-       if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
+       if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
        {\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aff5aff, 0xffff, 0x3);\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 10);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
        }\r
        }\r
-       else  //for HID quality & wifi performance balance at 11n mode\r
+       else\r
        {\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aff5aff, 0xffff, 0x3);\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);           \r
        }\r
        }\r
-\r
+       \r
+       if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
+               (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+       {\r
+               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);       //1->3 for TENCENT spp profile delay time\r
+       }\r
+       else\r
+       {\r
+               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);       \r
+       }\r
+       \r
+       // sw mechanism\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
-               }\r
-\r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
        else\r
        {\r
                }\r
        }\r
        else\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
-               }\r
-\r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -2886,77 +3340,56 @@ halbtc8821a2ant_ActionPanHs(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState;\r
+       u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
        u4Byte          wifiBw;\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        u4Byte          wifiBw;\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
+       wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
+\r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
 \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+       if(BTC_RSSI_HIGH(btRssiState))\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+       \r
+       halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+       \r
+       halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
+       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
 \r
 \r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
-               // fw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
-               }\r
-               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
-\r
-               // sw mechanism\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
-               }\r
-               else\r
-               {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
        else\r
        {\r
                }\r
        }\r
        else\r
        {\r
-               // fw mechanism\r
-               if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
-               }\r
-\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
-               }\r
-\r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -2967,109 +3400,74 @@ halbtc8821a2ant_ActionPanEdrA2dp(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
+       u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
        u4Byte          wifiBw;\r
 \r
        u4Byte          wifiBw;\r
 \r
-       btInfoExt = pCoexSta->btInfoExt;\r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
+       wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
+\r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
 \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
-       if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
+       if(BTC_RSSI_HIGH(btRssiState))\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
        else    \r
        else    \r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+       if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))                \r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
+       else\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
 \r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
 \r
-       if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
+       if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
+               (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
        {\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 12);\r
+               \r
+               if(BTC_WIFI_BW_HT40 == wifiBw)\r
+                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
+               else\r
+                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
        }\r
        }\r
-       else  //for HID quality & wifi performance balance at 11n mode\r
+       else\r
        {\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);\r
+               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
        }\r
        }\r
-\r
+       \r
+       // sw mechanism \r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
-                       }\r
-               }\r
-\r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
-               };\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+               }\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
-                       }\r
-               }\r
-\r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -3079,82 +3477,84 @@ halbtc8821a2ant_ActionPanEdrHid(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState;\r
+       u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
        u4Byte          wifiBw;\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        u4Byte          wifiBw;\r
 \r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
+       wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
 \r
 \r
-       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
 \r
-       if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
+       if(BTC_RSSI_HIGH(btRssiState))\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
        else    \r
        else    \r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
-\r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
 \r
 \r
-       if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
+       if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))        \r
        {\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5f5a5f, 0xffff, 0x3);\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
        }\r
        }\r
-       else  //for HID quality & wifi performance balance at 11n mode\r
+       else\r
        {\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5f5a5f, 0xffff, 0x3);\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
        }\r
 \r
        }\r
 \r
-       if(BTC_WIFI_BW_HT40 == wifiBw)\r
-       { \r
-               halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 3);\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+       if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
+               (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+       {\r
+               if(BTC_WIFI_BW_HT40 == wifiBw)\r
                {\r
                {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10); \r
+                       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 3);\r
+                       //halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 11);\r
+                       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14); \r
+                       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+                       //halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+                       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
                }\r
                }\r
-\r
-               // sw mechanism\r
+               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
+       }\r
+       else\r
+       {\r
+               halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+               //halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);\r
+               pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
+       }\r
+       \r
+       // sw mechanism\r
+       if(BTC_WIFI_BW_HT40 == wifiBw)\r
+       {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
        else\r
        {\r
                }\r
        }\r
        else\r
        {\r
-               halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
-               }\r
-               else\r
-               {\r
-                       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
-               }\r
-               \r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -3165,109 +3565,77 @@ halbtc8821a2ant_ActionHidA2dpPanEdr(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
+       u1Byte          wifiRssiState,wifiRssiState1,  btRssiState;\r
        u4Byte          wifiBw;\r
 \r
        u4Byte          wifiBw;\r
 \r
-       btInfoExt = pCoexSta->btInfoExt;\r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
+       wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
+       btRssiState = halbtc8821a2ant_BtRssiState(2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
+\r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
 \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
 \r
        halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
-       if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
+       if(BTC_RSSI_HIGH(btRssiState))\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
        else    \r
        else    \r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
+               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+       if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
+       {\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
+       }\r
+       else\r
+       {\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);           \r
+       }\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
 \r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
 \r
-       if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
+       if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
+               (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
        {\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
+               if(BTC_WIFI_BW_HT40 == wifiBw)\r
+                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
+               else\r
+                       halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
        }\r
        }\r
-       else  //for HID quality & wifi performance balance at 11n mode\r
+       else\r
        {\r
        {\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
+               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
        }\r
 \r
        }\r
 \r
+       // sw mechanism\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
-                       }\r
-               }\r
-               \r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
        else\r
        {\r
                }\r
        }\r
        else\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
-                       }\r
-               }\r
-\r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
 }\r
                }\r
        }\r
 }\r
@@ -3277,287 +3645,438 @@ halbtc8821a2ant_ActionHidA2dp(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
+       u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
        u4Byte          wifiBw;\r
        u4Byte          wifiBw;\r
+       u1Byte          apNum=0;\r
 \r
 \r
-       btInfoExt = pCoexSta->btInfoExt;\r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
        wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
-       btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
+       //btRssiState = halbtc8821a2ant_BtRssiState(2, 29, 0);\r
+       wifiRssiState1 = halbtc8821a2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
+       btRssiState = halbtc8821a2ant_BtRssiState(3, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 37);\r
 \r
 \r
-       if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
-       else    \r
-               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+       \r
+       halbtc8821a2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x5);\r
+\r
+       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
+       if(BTC_WIFI_BW_LEGACY == wifiBw)\r
+       {\r
+               if(BTC_RSSI_HIGH(btRssiState))\r
+                       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
+               else if(BTC_RSSI_MEDIUM(btRssiState))\r
+                       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
+               else    \r
+                       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+       }\r
+       else\r
+       {       // only 802.11N mode we have to dec bt power to 4 degree\r
+               if(BTC_RSSI_HIGH(btRssiState))\r
+               {\r
+                       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);\r
+                       // need to check ap Number of Not\r
+                       if(apNum < 10)\r
+                               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
+                       else\r
+                               halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
+               }\r
+               else if(BTC_RSSI_MEDIUM(btRssiState))\r
+                       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
+               else    \r
+                       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+       }\r
 \r
 \r
-       if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
+       if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
        {\r
        {\r
-//Allen                halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
-               halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5f5b5f5b, 0xffffff, 0x3);\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
        }\r
        }\r
-       else  //for HID quality & wifi performance balance at 11n mode\r
+       else\r
        {\r
        {\r
-//Allen                halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
-                       halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5f5b5f5b, 0xffffff, 0x3);\r
-\r
+               halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);\r
+               halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);           \r
        }\r
 \r
        }\r
 \r
+       if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
+               (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
+       {\r
+               //halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
+               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 23);\r
+       }\r
+       else\r
+       {\r
+               //halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
+               halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 23);\r
+       }\r
+       \r
+       // sw mechanism\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
        if(BTC_WIFI_BW_HT40 == wifiBw)\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
-                       }\r
-               }\r
-               \r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
        else\r
        {\r
                }\r
        }\r
        else\r
        {\r
-               // fw mechanism\r
-               if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
-                       (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-//                             halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
-\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-//Allen                                halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if(btInfoExt&BIT0)      //a2dp basic rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
-                       }\r
-                       else                            //a2dp edr rate\r
-                       {\r
-                               halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
-                       }\r
-               }\r
-\r
-               // sw mechanism\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
                if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
                        (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                        halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
-                        halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+                       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
+                       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
                }\r
        }\r
 }\r
 \r
                }\r
        }\r
 }\r
 \r
+VOID\r
+halbtc8821a2ant_ActionBtWhckTest(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+       // sw all off\r
+       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+\r
+       halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+       \r
+       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+       halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+}\r
+\r
+VOID\r
+halbtc8821a2ant_ActionWifiMultiPort(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{              \r
+       halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
+       halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+       // sw all off\r
+       halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
+       halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
+\r
+       // hw all off\r
+       //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+       halbtc8821a2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
+\r
+       halbtc8821a2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
+       halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+}\r
+\r
 VOID\r
 halbtc8821a2ant_RunCoexistMechanism(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 halbtc8821a2ant_RunCoexistMechanism(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
-       BOOLEAN                         bWifiUnder5G=FALSE;\r
+       BOOLEAN                         bWifiUnder5G=FALSE, bBtHsOn=FALSE;\r
        u1Byte                          btInfoOriginal=0, btRetryCnt=0;\r
        u1Byte                          algorithm=0;\r
        u1Byte                          btInfoOriginal=0, btRetryCnt=0;\r
        u1Byte                          algorithm=0;\r
+       u4Byte                          numOfWifiLink=0;\r
+       u4Byte                          wifiLinkStatus=0;\r
+       PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
+       BOOLEAN                         bMiracastPlusBt=FALSE;\r
+       BOOLEAN                         bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
+\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Manual control!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
                return;\r
        }\r
                return;\r
        }\r
-       \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
 \r
 \r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
        if(bWifiUnder5G)\r
        {\r
        if(bWifiUnder5G)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n"));\r
                halbtc8821a2ant_CoexUnder5G(pBtCoexist);\r
                return;\r
        }\r
 \r
                halbtc8821a2ant_CoexUnder5G(pBtCoexist);\r
                return;\r
        }\r
 \r
-       if(pStackInfo->bProfileNotified)\r
+       if(pCoexSta->bUnderIps)\r
        {\r
        {\r
-               algorithm = halbtc8821a2ant_ActionAlgorithm(pBtCoexist);\r
-               if(pCoexSta->bC2hBtInquiryPage && (BT_8821A_2ANT_COEX_ALGO_PANHS!=algorithm))\r
-               {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
-                       halbtc8821a2ant_BtInquiryPage(pBtCoexist);\r
-                       return;\r
-               }\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi is under IPS !!!\n"));\r
+               return;\r
+       }\r
+\r
+       if(pCoexSta->bBtWhckTest)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is under WHCK TEST!!!\n"));\r
+               halbtc8821a2ant_ActionBtWhckTest(pBtCoexist);\r
+               return;\r
+       }\r
+\r
+       algorithm = halbtc8821a2ant_ActionAlgorithm(pBtCoexist);\r
+       if(pCoexSta->bC2hBtInquiryPage && (BT_8821A_2ANT_COEX_ALGO_PANHS!=algorithm))\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
+               halbtc8821a2ant_ActionBtInquiry(pBtCoexist);\r
+               return;\r
+       }\r
+       else\r
+       {\r
+\r
+       }\r
+\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
+\r
+       if(bScan || bLink || bRoam)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], WiFi is under Link Process !!\n"));\r
+               halbtc8821a2ant_ActionWiFiLinkProcess(pBtCoexist);\r
+               return;\r
+       }\r
 \r
 \r
-               pCoexDm->curAlgorithm = algorithm;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
+       //for P2P\r
 \r
 \r
-               if(halbtc8821a2ant_IsCommonAction(pBtCoexist))\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
+       numOfWifiLink = wifiLinkStatus>>16;\r
+       \r
+       if((numOfWifiLink>=2) || (wifiLinkStatus&WIFI_P2P_GO_CONNECTED))\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex],  Multi-Port numOfWifiLink = %d, wifiLinkStatus = 0x%x\n", numOfWifiLink,wifiLinkStatus) );\r
+\r
+               if(pBtLinkInfo->bBtLinkExist)\r
                {\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));\r
-                       pCoexDm->bResetTdmaAdjust = TRUE;\r
+                       bMiracastPlusBt = TRUE;\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
-                       {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
-                                       pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
-                               pCoexDm->bResetTdmaAdjust = TRUE;\r
-                       }\r
-                       switch(pCoexDm->curAlgorithm)\r
-                       {\r
-                               case BT_8821A_2ANT_COEX_ALGO_SCO:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
-                                       halbtc8821a2ant_ActionSco(pBtCoexist);\r
-                                       break;\r
-                               case BT_8821A_2ANT_COEX_ALGO_HID:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
-                                       halbtc8821a2ant_ActionHid(pBtCoexist);\r
-                                       break;\r
-                               case BT_8821A_2ANT_COEX_ALGO_A2DP:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
-                                       halbtc8821a2ant_ActionA2dp(pBtCoexist);\r
-                                       break;\r
-                               case BT_8821A_2ANT_COEX_ALGO_A2DP_PANHS:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
-                                       halbtc8821a2ant_ActionA2dpPanHs(pBtCoexist);\r
-                                       break;\r
-                               case BT_8821A_2ANT_COEX_ALGO_PANEDR:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
-                                       halbtc8821a2ant_ActionPanEdr(pBtCoexist);\r
-                                       break;\r
-                               case BT_8821A_2ANT_COEX_ALGO_PANHS:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
-                                       halbtc8821a2ant_ActionPanHs(pBtCoexist);\r
-                                       break;\r
-                               case BT_8821A_2ANT_COEX_ALGO_PANEDR_A2DP:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
-                                       halbtc8821a2ant_ActionPanEdrA2dp(pBtCoexist);\r
-                                       break;\r
-                               case BT_8821A_2ANT_COEX_ALGO_PANEDR_HID:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
-                                       halbtc8821a2ant_ActionPanEdrHid(pBtCoexist);\r
-                                       break;\r
-                               case BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
-                                       halbtc8821a2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
-                                       break;\r
-                               case BT_8821A_2ANT_COEX_ALGO_HID_A2DP:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
-                                       halbtc8821a2ant_ActionHidA2dp(pBtCoexist);\r
-                                       break;\r
-                               default:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
-                                       halbtc8821a2ant_CoexAllOff(pBtCoexist);\r
-                                       break;\r
-                       }\r
-                       pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
+                       bMiracastPlusBt = FALSE;\r
                }\r
                }\r
+               \r
+               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);\r
+               halbtc8821a2ant_ActionWifiMultiPort(pBtCoexist);\r
+               \r
+               return;\r
        }\r
        else\r
        }\r
        else\r
-       {       // stack doesn't notify profile info.\r
-               // use the following profile info from bt fw.\r
-               //pCoexSta->bBtLinkExist\r
-               //pCoexSta->bScoExist\r
-               //pCoexSta->bA2dpExist\r
-               //pCoexSta->bHidExist\r
-               //pCoexSta->bPanExist\r
-}\r
-}\r
+       {\r
+               bMiracastPlusBt = FALSE;\r
+               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);\r
+       }\r
 \r
 \r
+       pCoexDm->curAlgorithm = algorithm;\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
 \r
 \r
+       if(halbtc8821a2ant_IsCommonAction(pBtCoexist))\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant common.\n"));\r
+               pCoexDm->bAutoTdmaAdjust = FALSE;\r
+       }\r
+       else\r
+       {\r
+               if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
+                               pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
+                       pCoexDm->bAutoTdmaAdjust = FALSE;\r
+               }\r
+               switch(pCoexDm->curAlgorithm)\r
+               {\r
+                       case BT_8821A_2ANT_COEX_ALGO_SCO:\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
+                               halbtc8821a2ant_ActionSco(pBtCoexist);\r
+                               break;\r
+                       case BT_8821A_2ANT_COEX_ALGO_HID:\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
+                               halbtc8821a2ant_ActionHid(pBtCoexist);\r
+                               break;\r
+                       case BT_8821A_2ANT_COEX_ALGO_A2DP:\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
+                               halbtc8821a2ant_ActionA2dp(pBtCoexist);\r
+                               break;\r
+                       case BT_8821A_2ANT_COEX_ALGO_A2DP_PANHS:\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
+                               halbtc8821a2ant_ActionA2dpPanHs(pBtCoexist);\r
+                               break;\r
+                       case BT_8821A_2ANT_COEX_ALGO_PANEDR:\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
+                               halbtc8821a2ant_ActionPanEdr(pBtCoexist);\r
+                               break;\r
+                       case BT_8821A_2ANT_COEX_ALGO_PANHS:\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
+                               halbtc8821a2ant_ActionPanHs(pBtCoexist);\r
+                               break;\r
+                       case BT_8821A_2ANT_COEX_ALGO_PANEDR_A2DP:\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
+                               halbtc8821a2ant_ActionPanEdrA2dp(pBtCoexist);\r
+                               break;\r
+                       case BT_8821A_2ANT_COEX_ALGO_PANEDR_HID:\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
+                               halbtc8821a2ant_ActionPanEdrHid(pBtCoexist);\r
+                               break;\r
+                       case BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
+                               halbtc8821a2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
+                               break;\r
+                       case BT_8821A_2ANT_COEX_ALGO_HID_A2DP:\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
+                               halbtc8821a2ant_ActionHidA2dp(pBtCoexist);\r
+                               break;\r
+                       default:\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
+                               halbtc8821a2ant_CoexAllOff(pBtCoexist);\r
+                               break;\r
+               }\r
+               pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
+       }\r
+}\r
 \r
 \r
-//============================================================\r
-// work around function start with wa_halbtc8821a2ant_\r
-//============================================================\r
-//============================================================\r
-// extern function start with EXhalbtc8821a2ant_\r
-//============================================================\r
 VOID\r
 VOID\r
-EXhalbtc8821a2ant_PowerOnSetting(\r
+halbtc8821a2ant_WifiOffHwCfg(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
+       BOOLEAN bIsInMpMode = FALSE;\r
+       u1Byte H2C_Parameter[2] ={0};\r
+       u4Byte fwVer=0;\r
+\r
+       // set wlan_act to low\r
+       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4);\r
+\r
+       pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780); //WiFi goto standby while GNT_BT 0-->1\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
+       if(fwVer >= 0x180000)\r
+       {\r
+               /* Use H2C to set GNT_BT to HIGH */\r
+               H2C_Parameter[0] = 1;\r
+               pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);\r
+       }\r
+       else\r
+       {\r
+               pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x18);\r
+       }\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-EXhalbtc8821a2ant_InitHwConfig(\r
+halbtc8821a2ant_InitHwConfig(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      PBTC_COEXIST            pBtCoexist,\r
-       IN      BOOLEAN                         bWifiOnly\r
+       IN      BOOLEAN                         bBackUp\r
        )\r
 {\r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        )\r
 {\r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
-       u4Byte  u4Tmp=0;\r
+       u4Byte  u4Tmp=0, fwVer;\r
        u2Byte                          u2Tmp=0;\r
        u1Byte  u1Tmp=0;\r
        u1Byte                          H2C_Parameter[2] ={0};\r
                \r
 \r
        u2Byte                          u2Tmp=0;\r
        u1Byte  u1Tmp=0;\r
        u1Byte                          H2C_Parameter[2] ={0};\r
                \r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
 \r
        // backup rf 0x1e value\r
        pCoexDm->btRf0x1eBackup = \r
-               pBtCoexist->fBtcGetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff);\r
+               pBtCoexist->fBtcGetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff);  \r
 \r
        // 0x790[5:0]=0x5\r
        u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x790);\r
        u1Tmp &= 0xc0;\r
        u1Tmp |= 0x5;\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x790, u1Tmp);\r
 \r
        // 0x790[5:0]=0x5\r
        u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x790);\r
        u1Tmp &= 0xc0;\r
        u1Tmp |= 0x5;\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x790, u1Tmp);\r
-       \r
-       //Antenna config\r
+\r
+       //Antenna config        \r
        halbtc8821a2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, TRUE, FALSE);\r
        halbtc8821a2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, TRUE, FALSE);\r
+       pCoexSta->disVerInfoCnt = 0;\r
 \r
        // PTA parameter\r
 \r
        // PTA parameter\r
-       halbtc8821a2ant_CoexTable(pBtCoexist, FORCE_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);\r
+       halbtc8821a2ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);\r
        \r
        // Enable counter statistics\r
        \r
        // Enable counter statistics\r
-       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc); //0x76e[3] =1, WLAN_Act control by PTA\r
+       pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4); //0x76e[3] =1, WLAN_Act control by PTA\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x778, 0x3);\r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x40, 0x20, 0x1);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x778, 0x3);\r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x40, 0x20, 0x1);\r
 }\r
 \r
+//============================================================\r
+// work around function start with wa_halbtc8821a2ant_\r
+//============================================================\r
+//============================================================\r
+// extern function start with EXhalbtc8821a2ant_\r
+//============================================================\r
+VOID\r
+EXhalbtc8821a2ant_PowerOnSetting(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+\r
+}\r
+\r
+VOID\r
+EXhalbtc8821a2ant_PreLoadFirmware(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       )\r
+{\r
+       PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
+       u1Byte u1Tmp=0x4; /* Set BIT2 by default since it's 2ant case */\r
+\r
+       // \r
+       // S0 or S1 setting and Local register setting(By the setting fw can get ant number, S0/S1, ... info)\r
+       // Local setting bit define\r
+       //      BIT0: "0" for no antenna inverse; "1" for antenna inverse \r
+       //      BIT1: "0" for internal switch; "1" for external switch\r
+       //      BIT2: "0" for one antenna; "1" for two antenna\r
+       // NOTE: here default all internal switch and 1-antenna ==> BIT1=0 and BIT2=0\r
+       if(pBtCoexist->chipInterface == BTC_INTF_USB)\r
+       {\r
+               // fixed at S0 for USB interface\r
+               u1Tmp |= 0x1;   // antenna inverse\r
+               pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0xfe08, u1Tmp);\r
+       }\r
+       else\r
+       {\r
+               // for PCIE and SDIO interface, we check efuse 0xc3[6]\r
+               if(pBoardInfo->singleAntPath == 0)\r
+               {\r
+               }\r
+               else if(pBoardInfo->singleAntPath == 1)\r
+               {\r
+                       // set to S0\r
+                       u1Tmp |= 0x1;   // antenna inverse\r
+               }\r
+\r
+               if(pBtCoexist->chipInterface == BTC_INTF_PCI)\r
+               {       \r
+                       pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x384, u1Tmp);\r
+               }\r
+               else if(pBtCoexist->chipInterface == BTC_INTF_SDIO)\r
+               {\r
+                       pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x60, u1Tmp);\r
+               }                       \r
+       }\r
+}\r
+\r
+VOID\r
+EXhalbtc8821a2ant_InitHwConfig(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bWifiOnly\r
+       )\r
+{\r
+       halbtc8821a2ant_InitHwConfig(pBtCoexist, TRUE);\r
+}\r
+\r
 VOID\r
 EXhalbtc8821a2ant_InitCoexDm(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
 VOID\r
 EXhalbtc8821a2ant_InitCoexDm(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
        \r
        halbtc8821a2ant_InitCoexDm(pBtCoexist);\r
 }\r
        \r
        halbtc8821a2ant_InitCoexDm(pBtCoexist);\r
 }\r
@@ -3569,23 +4088,27 @@ EXhalbtc8821a2ant_DisplayCoexInfo(
 {\r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 {\r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
+       PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        pu1Byte                         cliBuf=pBtCoexist->cliBuf;\r
        u1Byte                          u1Tmp[4], i, btInfoExt, psTdmaCase=0;\r
        u4Byte                          u4Tmp[4];\r
        pu1Byte                         cliBuf=pBtCoexist->cliBuf;\r
        u1Byte                          u1Tmp[4], i, btInfoExt, psTdmaCase=0;\r
        u4Byte                          u4Tmp[4];\r
+       u4Byte                          faOfdm, faCck;\r
        u4Byte                          fwVer=0, btPatchVer=0;\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");\r
        CL_PRINTF(cliBuf);\r
 \r
        u4Byte                          fwVer=0, btPatchVer=0;\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");\r
        CL_PRINTF(cliBuf);\r
 \r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "Ant PG number/ Ant mechanism:", \\r
-               pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum);\r
-       CL_PRINTF(cliBuf);      \r
-       \r
        if(pBtCoexist->bManualControl)\r
        {\r
        if(pBtCoexist->bManualControl)\r
        {\r
-               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "[Action Manual control]!!");\r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[Under Manual Control]============");\r
+               CL_PRINTF(cliBuf);\r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ==========================================");\r
                CL_PRINTF(cliBuf);\r
        }\r
                CL_PRINTF(cliBuf);\r
        }\r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "Ant PG number/ Ant mechanism:", \\r
+               pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum);\r
+       CL_PRINTF(cliBuf);\r
        \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \\r
                ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);\r
        \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \\r
                ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);\r
@@ -3593,7 +4116,7 @@ EXhalbtc8821a2ant_DisplayCoexInfo(
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
 \r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d_%d/ 0x%x/ 0x%x(%d)", "CoexVer/ FwVer/ PatchVer", \\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d_%x/ 0x%x/ 0x%x(%d)", "CoexVer/ FwVer/ PatchVer", \\r
                GLCoexVerDate8821a2Ant, GLCoexVer8821a2Ant, fwVer, btPatchVer, btPatchVer);\r
        CL_PRINTF(cliBuf);\r
 \r
                GLCoexVerDate8821a2Ant, GLCoexVer8821a2Ant, fwVer, btPatchVer, btPatchVer);\r
        CL_PRINTF(cliBuf);\r
 \r
@@ -3601,7 +4124,7 @@ EXhalbtc8821a2ant_DisplayCoexInfo(
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
                pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
                pCoexDm->wifiChnlInfo[2]);\r
        CL_PRINTF(cliBuf);\r
-\r
+       \r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
        // wifi status\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
        CL_PRINTF(cliBuf);\r
@@ -3610,19 +4133,26 @@ EXhalbtc8821a2ant_DisplayCoexInfo(
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[BT Status]============");\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[BT Status]============");\r
        CL_PRINTF(cliBuf);\r
 \r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = [%s/ %d/ %d] ", "BT [status/ rssi/ retryCnt]", \\r
-               ((pCoexSta->bC2hBtInquiryPage)?("inquiry/page scan"):((BT_8821A_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus)? "idle":(  (BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)? "connected-idle":"busy"))),\r
-               pCoexSta->btRssi, pCoexSta->btRetryCnt);\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = [%s/ %ddBm/ %d] ", "BT [status/ rssi/ retryCnt]", \\r
+               ((pBtCoexist->btInfo.bBtDisabled)? ("disabled"):        ((pCoexSta->bC2hBtInquiryPage)?("inquiry/page scan"):((BT_8821A_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)? "non-connected idle":\r
+               (  (BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)? "connected-idle":"busy")))),\r
+               pCoexSta->btRssi-100, pCoexSta->btRetryCnt);\r
+       CL_PRINTF(cliBuf);\r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "SCO/HID/PAN/A2DP", \\r
+               pBtLinkInfo->bScoExist, pBtLinkInfo->bHidExist, pBtLinkInfo->bPanExist, pBtLinkInfo->bA2dpExist);\r
        CL_PRINTF(cliBuf);\r
        CL_PRINTF(cliBuf);\r
-       \r
-       if(pStackInfo->bProfileNotified)\r
-       {                       \r
-               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "SCO/HID/PAN/A2DP", \\r
-                       pStackInfo->bScoExist, pStackInfo->bHidExist, pStackInfo->bPanExist, pStackInfo->bA2dpExist);\r
-               CL_PRINTF(cliBuf);      \r
 \r
 \r
-               pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_BT_LINK_INFO);\r
+       if (pStackInfo->bProfileNotified)\r
+       {\r
+               pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_BT_LINK_INFO);      \r
        }\r
        }\r
+       else\r
+       {\r
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "BT Role", \\r
+               (pBtLinkInfo->bSlaveRole )? "Slave":"Master");\r
+               CL_PRINTF(cliBuf);      \r
+       }       \r
 \r
        btInfoExt = pCoexSta->btInfoExt;\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "BT Info A2DP rate", \\r
 \r
        btInfoExt = pCoexSta->btInfoExt;\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "BT Info A2DP rate", \\r
@@ -3655,20 +4185,21 @@ EXhalbtc8821a2ant_DisplayCoexInfo(
        // Fw mechanism         \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");\r
        CL_PRINTF(cliBuf);      \r
        // Fw mechanism         \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");\r
        CL_PRINTF(cliBuf);      \r
-       \r
-       if(!pBtCoexist->bManualControl)\r
-       {\r
-               psTdmaCase = pCoexDm->curPsTdma;\r
-               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x case-%d", "PS TDMA", \\r
-                       pCoexDm->psTdmaPara[0], pCoexDm->psTdmaPara[1],\r
-                       pCoexDm->psTdmaPara[2], pCoexDm->psTdmaPara[3],\r
-                       pCoexDm->psTdmaPara[4], psTdmaCase);\r
-               CL_PRINTF(cliBuf);\r
-       \r
-               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "DecBtPwr/ IgnWlanAct", \\r
-                       pCoexDm->bCurDecBtPwr, pCoexDm->bCurIgnoreWlanAct);\r
+\r
+       psTdmaCase = pCoexDm->curPsTdma;\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x case-%d (auto:%d)", "PS TDMA", \\r
+               pCoexDm->psTdmaPara[0], pCoexDm->psTdmaPara[1],\r
+               pCoexDm->psTdmaPara[2], pCoexDm->psTdmaPara[3],\r
+               pCoexDm->psTdmaPara[4], psTdmaCase, pCoexDm->bAutoTdmaAdjust);\r
+       CL_PRINTF(cliBuf);\r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "Coex Table Type", \\r
+                       pCoexSta->nCoexTableType);\r
                CL_PRINTF(cliBuf);\r
                CL_PRINTF(cliBuf);\r
-       }\r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "DecBtPwr/ IgnWlanAct", \\r
+               pCoexDm->curBtDecPwrLvl, pCoexDm->bCurIgnoreWlanAct);\r
+       CL_PRINTF(cliBuf);\r
 \r
        // Hw setting           \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Hw setting]============");\r
 \r
        // Hw setting           \r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Hw setting]============");\r
@@ -3679,16 +4210,17 @@ EXhalbtc8821a2ant_DisplayCoexInfo(
        CL_PRINTF(cliBuf);\r
 \r
        u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x778);\r
        CL_PRINTF(cliBuf);\r
 \r
        u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x778);\r
-       u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x6cc);\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x ", "0x778 (W_Act)/ 0x6cc (CoTab Sel)", \\r
-               u1Tmp[0], u1Tmp[1]);\r
+       u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xc5b);\r
+       u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x880);\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x778/0x880[29:25]/0xc58[29:25]", \\r
+               u1Tmp[0], (u4Tmp[0]&0x3e000000) >> 25, ((u1Tmp[1]&0x3e)>>1));\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_PRINTF(cliBuf);\r
 \r
-       u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x8db);\r
-       u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xc5b);\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0x8db(ADC)/0xc5b[29:25](DAC)", \\r
-               ((u1Tmp[0]&0x60)>>5), ((u1Tmp[1]&0x3e)>>1));\r
-       CL_PRINTF(cliBuf); \r
+       u4Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x764);\r
+       u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x764/ 0x765/ 0x76e", \\r
+               (u4Tmp[0]&0xff), (u4Tmp[0]&0xff00)>>8, u1Tmp[0]);\r
+       CL_PRINTF(cliBuf);\r
        \r
        u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xcb4);\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0xcb4[7:0](ctrl)/ 0xcb4[29:28](val)", \\r
        \r
        u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xcb4);\r
        CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0xcb4[7:0](ctrl)/ 0xcb4[29:28](val)", \\r
@@ -3709,32 +4241,52 @@ EXhalbtc8821a2ant_DisplayCoexInfo(
        CL_PRINTF(cliBuf);\r
 \r
        u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xc50);\r
        CL_PRINTF(cliBuf);\r
 \r
        u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xc50);\r
-       u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa0a);\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0xc50(DIG)/0xa0a(CCK-TH)", \\r
-               u4Tmp[0], u1Tmp[0]);\r
+       u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x49c);\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0xc50(dig)/0x49c(null-drop)", \\r
+               u4Tmp[0]&0xff, u1Tmp[0]);\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_PRINTF(cliBuf);\r
 \r
-       u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf48);\r
+       u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda0);\r
+       u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda4);\r
+       u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda8);\r
+       u4Tmp[3] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xcf0);\r
+\r
        u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5b);\r
        u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5c);\r
        u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5b);\r
        u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5c);\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "OFDM-FA/ CCK-FA", \\r
-               u4Tmp[0], (u1Tmp[0]<<8) + u1Tmp[1]  );\r
+\r
+       faOfdm = ((u4Tmp[0]&0xffff0000) >> 16) +  ((u4Tmp[1]&0xffff0000) >> 16) + (u4Tmp[1] & 0xffff) +  (u4Tmp[2] & 0xffff) + \\r
+                            ((u4Tmp[3]&0xffff0000) >> 16) + (u4Tmp[3] & 0xffff) ;\r
+       faCck = (u1Tmp[0] << 8) + u1Tmp[1];\r
+       \r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "OFDM-CCA/OFDM-FA/CCK-FA", \\r
+               u4Tmp[0]&0xffff, faOfdm, faCck);\r
+       CL_PRINTF(cliBuf);\r
+\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d/ %d", "CRC_OK CCK/11g/11n/11n-Agg", \\r
+               pCoexSta->nCRCOK_CCK, pCoexSta->nCRCOK_11g, pCoexSta->nCRCOK_11n, pCoexSta->nCRCOK_11nAgg);\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_PRINTF(cliBuf);\r
 \r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d/ %d", "CRC_Err CCK/11g/11n/11n-Agg", \\r
+               pCoexSta->nCRCErr_CCK, pCoexSta->nCRCErr_11g, pCoexSta->nCRCErr_11n, pCoexSta->nCRCErr_11nAgg);\r
+       CL_PRINTF(cliBuf);      \r
+\r
        u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c0);\r
        u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c4);\r
        u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c8);\r
        u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c0);\r
        u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c4);\r
        u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c8);\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x6c0/0x6c4/0x6c8", \\r
-               u4Tmp[0], u4Tmp[1], u4Tmp[2]);\r
+       u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x6cc);\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x", "0x6c0/0x6c4/0x6c8/0x6cc(coexTable)", \\r
+               u4Tmp[0], u4Tmp[1], u4Tmp[2], u1Tmp[0]);\r
        CL_PRINTF(cliBuf);\r
 \r
        CL_PRINTF(cliBuf);\r
 \r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x770 (hi-pri Rx/Tx)", \\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x770(high-pri rx/tx)", \\r
                pCoexSta->highPriorityRx, pCoexSta->highPriorityTx);\r
        CL_PRINTF(cliBuf);\r
                pCoexSta->highPriorityRx, pCoexSta->highPriorityTx);\r
        CL_PRINTF(cliBuf);\r
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x774(low-pri Rx/Tx)", \\r
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x774(low-pri rx/tx)", \\r
                pCoexSta->lowPriorityRx, pCoexSta->lowPriorityTx);\r
        CL_PRINTF(cliBuf);\r
                pCoexSta->lowPriorityRx, pCoexSta->lowPriorityTx);\r
        CL_PRINTF(cliBuf);\r
-\r
+#if(BT_AUTO_REPORT_ONLY_8821A_2ANT == 1)\r
+       //halbtc8821a2ant_MonitorBtCtr(pBtCoexist);\r
+#endif\r
        pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_COEX_STATISTICS);\r
 }\r
 \r
        pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_COEX_STATISTICS);\r
 }\r
 \r
@@ -3747,15 +4299,19 @@ EXhalbtc8821a2ant_IpsNotify(
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                pCoexSta->bUnderIps = TRUE;\r
                pCoexSta->bUnderIps = TRUE;\r
+               halbtc8821a2ant_WifiOffHwCfg(pBtCoexist);\r
+               halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
                halbtc8821a2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
                halbtc8821a2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
                pCoexSta->bUnderIps = FALSE;\r
                pCoexSta->bUnderIps = FALSE;\r
-               //halbtc8821a2ant_InitCoexDm(pBtCoexist);\r
+               halbtc8821a2ant_InitHwConfig(pBtCoexist, FALSE);\r
+               halbtc8821a2ant_InitCoexDm(pBtCoexist);\r
+               halbtc8821a2ant_QueryBtInfo(pBtCoexist);\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -3767,12 +4323,12 @@ EXhalbtc8821a2ant_LpsNotify(
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
@@ -3783,14 +4339,21 @@ EXhalbtc8821a2ant_ScanNotify(
        IN      u1Byte                  type\r
        )\r
 {\r
        IN      u1Byte                  type\r
        )\r
 {\r
+       u1Byte  u1Tmpa, u1Tmpb; \r
+       \r
+       u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
+       u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);\r
+        \r
        if(BTC_SCAN_START == type)\r
        {\r
        if(BTC_SCAN_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
        }\r
        }\r
+\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("############# [BTCoex], 0x765=0x%x, 0x76e=0x%x\n", u1Tmpa, u1Tmpb));\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -3801,31 +4364,32 @@ EXhalbtc8821a2ant_ConnectNotify(
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
        }\r
 }\r
 \r
 VOID\r
 EXhalbtc8821a2ant_MediaStatusNotify(\r
        }\r
 }\r
 \r
 VOID\r
 EXhalbtc8821a2ant_MediaStatusNotify(\r
-       IN      PBTC_COEXIST                    pBtCoexist,\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
        IN      u1Byte                          type\r
        )\r
 {\r
        u1Byte                  H2C_Parameter[3] ={0};\r
        u4Byte                  wifiBw;\r
        u1Byte                  wifiCentralChnl;\r
        IN      u1Byte                          type\r
        )\r
 {\r
        u1Byte                  H2C_Parameter[3] ={0};\r
        u4Byte                  wifiBw;\r
        u1Byte                  wifiCentralChnl;\r
+       u1Byte                  apNum=0;\r
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
@@ -3839,17 +4403,23 @@ EXhalbtc8821a2ant_MediaStatusNotify(
                if(BTC_WIFI_BW_HT40 == wifiBw)\r
                        H2C_Parameter[2] = 0x30;\r
                else\r
                if(BTC_WIFI_BW_HT40 == wifiBw)\r
                        H2C_Parameter[2] = 0x30;\r
                else\r
-                       H2C_Parameter[2] = 0x20;\r
+               {\r
+                       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);\r
+                       if(apNum < 10)\r
+                               H2C_Parameter[2] = 0x30;\r
+                       else\r
+                               H2C_Parameter[2] = 0x20;\r
+               }\r
        }\r
        }\r
-                       \r
+       \r
        pCoexDm->wifiChnlInfo[0] = H2C_Parameter[0];\r
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
        pCoexDm->wifiChnlInfo[0] = H2C_Parameter[0];\r
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x66=0x%x\n", \r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
-       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);\r
+       pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);    \r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -3860,7 +4430,7 @@ EXhalbtc8821a2ant_SpecialPacketNotify(
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], DHCP Packet notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -3871,20 +4441,24 @@ EXhalbtc8821a2ant_BtInfoNotify(
        IN      u1Byte                  length\r
        )\r
 {\r
        IN      u1Byte                  length\r
        )\r
 {\r
+       PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
        u1Byte                  btInfo=0;\r
        u1Byte                  i, rspSource=0;\r
        BOOLEAN                 bBtBusy=FALSE, bLimitedDig=FALSE;\r
        u1Byte                  btInfo=0;\r
        u1Byte                  i, rspSource=0;\r
        BOOLEAN                 bBtBusy=FALSE, bLimitedDig=FALSE;\r
-       BOOLEAN                 bWifiConnected=FALSE, bBtHsOn=FALSE, bWifiUnder5G=FALSE;\r
+       BOOLEAN                 bWifiConnected=FALSE, bWifiUnder5G=FALSE;\r
+       static BOOLEAN          bPreScoExist=FALSE;\r
+       u4Byte                          raMask=0x0;\r
 \r
        pCoexSta->bC2hBtInfoReqSent = FALSE;\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
 \r
        pCoexSta->bC2hBtInfoReqSent = FALSE;\r
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
+       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
 \r
        rspSource = tmpBuf[0]&0xf;\r
        if(rspSource >= BT_INFO_SRC_8821A_2ANT_MAX)\r
                rspSource = BT_INFO_SRC_8821A_2ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
 \r
        rspSource = tmpBuf[0]&0xf;\r
        if(rspSource >= BT_INFO_SRC_8821A_2ANT_MAX)\r
                rspSource = BT_INFO_SRC_8821A_2ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
@@ -3892,15 +4466,26 @@ EXhalbtc8821a2ant_BtInfoNotify(
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x]\n", tmpBuf[i]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x, ", tmpBuf[i]));\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
+       if(pBtCoexist->bManualControl)\r
+       {\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), return for Manual CTRL<===\n"));\r
+               return;\r
+       }\r
+\r
+       // if 0xff, it means BT is under WHCK test\r
+       if (btInfo == 0xff)\r
+               pCoexSta->bBtWhckTest = TRUE;\r
+       else\r
+               pCoexSta->bBtWhckTest = FALSE;\r
+\r
        if(BT_INFO_SRC_8821A_2ANT_WIFI_FW != rspSource)\r
        {\r
                pCoexSta->btRetryCnt =  // [3:0]\r
        if(BT_INFO_SRC_8821A_2ANT_WIFI_FW != rspSource)\r
        {\r
                pCoexSta->btRetryCnt =  // [3:0]\r
@@ -3911,12 +4496,21 @@ EXhalbtc8821a2ant_BtInfoNotify(
 \r
                pCoexSta->btInfoExt = \r
                        pCoexSta->btInfoC2h[rspSource][4];\r
 \r
                pCoexSta->btInfoExt = \r
                        pCoexSta->btInfoC2h[rspSource][4];\r
-               \r
+\r
+               pCoexSta->bBtTxRxMask = (pCoexSta->btInfoC2h[rspSource][2]&0x40);\r
+               pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TX_RX_MASK, &pCoexSta->bBtTxRxMask);\r
+               if(pCoexSta->bBtTxRxMask)\r
+               {\r
+                       /* BT into is responded by BT FW and BT RF REG 0x3C != 0x01 => Need to switch BT TRx Mask */                            \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x01\n"));\r
+                       pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x01);\r
+               }\r
+\r
                // Here we need to resend some wifi info to BT\r
                // because bt is reset and loss of the info.\r
                if( (pCoexSta->btInfoExt & BIT1) )\r
                // Here we need to resend some wifi info to BT\r
                // because bt is reset and loss of the info.\r
                if( (pCoexSta->btInfoExt & BIT1) )\r
-               {                       \r
-                       \r
+               {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
                        if(bWifiConnected)\r
                        {\r
                                EXhalbtc8821a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_CONNECT);\r
                        if(bWifiConnected)\r
                        {\r
                                EXhalbtc8821a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_CONNECT);\r
@@ -3927,27 +4521,32 @@ EXhalbtc8821a2ant_BtInfoNotify(
                        }\r
                }\r
 \r
                        }\r
                }\r
 \r
+               \r
                if(!pBtCoexist->bManualControl && !bWifiUnder5G)\r
                {\r
                if(!pBtCoexist->bManualControl && !bWifiUnder5G)\r
                {\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info = 0x%x!!\n", pCoexSta->btInfoExt));\r
                        if( (pCoexSta->btInfoExt&BIT3) )\r
                        {\r
                        if( (pCoexSta->btInfoExt&BIT3) )\r
                        {\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3=1, bWifiConnected=%d\n", bWifiConnected));\r
                                if(bWifiConnected)\r
                                {\r
                                if(bWifiConnected)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
                                        halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                                }\r
                        }\r
                        else\r
                        {\r
                                        halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                                }\r
                        }\r
                        else\r
                        {\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3=0, bWifiConnected=%d\n", bWifiConnected));\r
                                // BT already NOT ignore Wlan active, do nothing here.\r
                                if(!bWifiConnected)\r
                                {\r
                                // BT already NOT ignore Wlan active, do nothing here.\r
                                if(!bWifiConnected)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT to ignore Wlan active!!\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3 check, set BT to ignore Wlan active!!\n"));\r
                                        halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
                                }\r
                        }\r
                }\r
 \r
                                        halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
                                }\r
                        }\r
                }\r
 \r
+#if(BT_AUTO_REPORT_ONLY_8821A_2ANT == 0)\r
                if( (pCoexSta->btInfoExt & BIT4) )\r
                {\r
                        // BT auto report already enabled, do nothing\r
                if( (pCoexSta->btInfoExt & BIT4) )\r
                {\r
                        // BT auto report already enabled, do nothing\r
@@ -3956,78 +4555,95 @@ EXhalbtc8821a2ant_BtInfoNotify(
                {\r
                        halbtc8821a2ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);\r
                }\r
                {\r
                        halbtc8821a2ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);\r
                }\r
+#endif\r
        }\r
        }\r
-               \r
-       pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
+\r
        // check BIT2 first ==> check if bt is under inquiry or page scan\r
        if(btInfo & BT_INFO_8821A_2ANT_B_INQ_PAGE)\r
        // check BIT2 first ==> check if bt is under inquiry or page scan\r
        if(btInfo & BT_INFO_8821A_2ANT_B_INQ_PAGE)\r
-       {\r
                pCoexSta->bC2hBtInquiryPage = TRUE;\r
                pCoexSta->bC2hBtInquiryPage = TRUE;\r
-               pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_NON_IDLE;\r
-       }\r
        else\r
        else\r
-       {\r
                pCoexSta->bC2hBtInquiryPage = FALSE;\r
                pCoexSta->bC2hBtInquiryPage = FALSE;\r
-               if(btInfo == 0x1)       // connection exists but no busy\r
-               {\r
-                       pCoexSta->bBtLinkExist = TRUE;\r
-                       pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
-               }\r
-               else if(btInfo & BT_INFO_8821A_2ANT_B_CONNECTION)       // connection exists and some link is busy\r
-               {\r
-                       pCoexSta->bBtLinkExist = TRUE;\r
-                       if(btInfo & BT_INFO_8821A_2ANT_B_FTP)\r
-                               pCoexSta->bPanExist = TRUE;\r
-                       else\r
-                               pCoexSta->bPanExist = FALSE;\r
-                       if(btInfo & BT_INFO_8821A_2ANT_B_A2DP)\r
-                               pCoexSta->bA2dpExist = TRUE;\r
-                       else\r
-                               pCoexSta->bA2dpExist = FALSE;\r
-                       if(btInfo & BT_INFO_8821A_2ANT_B_HID)\r
-                               pCoexSta->bHidExist = TRUE;\r
-                       else\r
-                               pCoexSta->bHidExist = FALSE;\r
-                       if(btInfo & BT_INFO_8821A_2ANT_B_SCO_ESCO)\r
-                               pCoexSta->bScoExist = TRUE;\r
-                       else\r
-                               pCoexSta->bScoExist = FALSE;\r
-                       pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_NON_IDLE;\r
-               }\r
+\r
+       // set link exist status\r
+       if(!(btInfo&BT_INFO_8821A_2ANT_B_CONNECTION))\r
+       {\r
+               pCoexSta->bBtLinkExist = FALSE;\r
+               pCoexSta->bPanExist = FALSE;\r
+               pCoexSta->bA2dpExist = FALSE;\r
+               pCoexSta->bHidExist = FALSE;\r
+               pCoexSta->bScoExist = FALSE;\r
+       }\r
+       else    // connection exists\r
+       {\r
+               pCoexSta->bBtLinkExist = TRUE;\r
+               if(btInfo & BT_INFO_8821A_2ANT_B_FTP)\r
+                       pCoexSta->bPanExist = TRUE;\r
                else\r
                else\r
-               {\r
-                       pCoexSta->bBtLinkExist = FALSE;\r
                        pCoexSta->bPanExist = FALSE;\r
                        pCoexSta->bPanExist = FALSE;\r
+               if(btInfo & BT_INFO_8821A_2ANT_B_A2DP)\r
+                       pCoexSta->bA2dpExist = TRUE;\r
+               else\r
                        pCoexSta->bA2dpExist = FALSE;\r
                        pCoexSta->bA2dpExist = FALSE;\r
+               if(btInfo & BT_INFO_8821A_2ANT_B_HID)\r
+                       pCoexSta->bHidExist = TRUE;\r
+               else\r
                        pCoexSta->bHidExist = FALSE;\r
                        pCoexSta->bHidExist = FALSE;\r
+               if(btInfo & BT_INFO_8821A_2ANT_B_SCO_ESCO)\r
+                       pCoexSta->bScoExist = TRUE;\r
+               else\r
                        pCoexSta->bScoExist = FALSE;\r
                        pCoexSta->bScoExist = FALSE;\r
-                       pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_IDLE;\r
-               }\r
-\r
-               if(bBtHsOn)\r
+       \r
+               if ( (pCoexSta->bHidExist == FALSE) && (pCoexSta->bC2hBtInquiryPage == FALSE) && (pCoexSta->bScoExist == FALSE))\r
                {\r
                {\r
-                       pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_NON_IDLE;\r
+                       if (pCoexSta->highPriorityTx  + pCoexSta->highPriorityRx >= 160) \r
+                               pCoexSta->bHidExist = TRUE;\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
-       if(BT_8821A_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus)\r
+       halbtc8821a2ant_UpdateBtLinkInfo(pBtCoexist);\r
+       \r
+       if(!(btInfo&BT_INFO_8821A_2ANT_B_CONNECTION))\r
        {\r
        {\r
-               bBtBusy = TRUE;\r
+               pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
+       }\r
+       else if(btInfo == BT_INFO_8821A_2ANT_B_CONNECTION)      // connection exists but no busy\r
+       {\r
+               pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
+       }\r
+       else if((btInfo&BT_INFO_8821A_2ANT_B_SCO_ESCO) ||\r
+               (btInfo&BT_INFO_8821A_2ANT_B_SCO_BUSY))\r
+       {\r
+               pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_SCO_BUSY;\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
+       }\r
+       else if(btInfo&BT_INFO_8821A_2ANT_B_ACL_BUSY)\r
+       {\r
+               pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_ACL_BUSY;\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               bBtBusy = FALSE;\r
+               pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_MAX;\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
        }\r
        }\r
-       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);\r
-\r
-       if(BT_8821A_2ANT_BT_STATUS_IDLE != pCoexDm->btStatus)\r
+       \r
+       if( (BT_8821A_2ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
+               (BT_8821A_2ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
+               (BT_8821A_2ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
        {\r
        {\r
+               bBtBusy = TRUE;\r
                bLimitedDig = TRUE;\r
        }\r
        else\r
        {\r
                bLimitedDig = TRUE;\r
        }\r
        else\r
        {\r
+               bBtBusy = FALSE;\r
                bLimitedDig = FALSE;\r
        }\r
                bLimitedDig = FALSE;\r
        }\r
+\r
+       pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);\r
+\r
        pCoexDm->bLimitedDig = bLimitedDig;\r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_LIMITED_DIG, &bLimitedDig);\r
 \r
        pCoexDm->bLimitedDig = bLimitedDig;\r
        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_LIMITED_DIG, &bLimitedDig);\r
 \r
@@ -4039,9 +4655,13 @@ EXhalbtc8821a2ant_HaltNotify(
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
 \r
+       halbtc8821a2ant_WifiOffHwCfg(pBtCoexist);\r
+       //remove due to interrupt is disabled that polling c2h will fail and delay 100ms.\r
+       //pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15); //BT goto standby while GNT_BT 1-->0\r
        halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
        halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+       \r
        EXhalbtc8821a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
 }\r
 \r
        EXhalbtc8821a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
 }\r
 \r
@@ -4051,16 +4671,18 @@ EXhalbtc8821a2ant_PnpNotify(
        IN      u1Byte                          pnpState\r
        )\r
 {\r
        IN      u1Byte                          pnpState\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify\n"));\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to SLEEP\n"));\r
-               halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to SLEEP\n"));\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
+               halbtc8821a2ant_InitHwConfig(pBtCoexist, FALSE);\r
+               halbtc8821a2ant_InitCoexDm(pBtCoexist);\r
+               halbtc8821a2ant_QueryBtInfo(pBtCoexist);\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4069,31 +4691,48 @@ EXhalbtc8821a2ant_Periodical(
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       static u1Byte           disVerInfoCnt=0;\r
+       //static u1Byte         disVerInfoCnt=0;\r
        u4Byte                          fwVer=0, btPatchVer=0;\r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
        u4Byte                          fwVer=0, btPatchVer=0;\r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ==========================Periodical===========================\n"));\r
 \r
 \r
-       if(disVerInfoCnt <= 5)\r
+       if(pCoexSta->disVerInfoCnt <= 5)\r
        {\r
        {\r
-               disVerInfoCnt += 1;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \\r
+               pCoexSta->disVerInfoCnt += 1;\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n",\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n",\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n",\r
                        GLCoexVerDate8821a2Ant, GLCoexVer8821a2Ant, fwVer, btPatchVer, btPatchVer));\r
                        GLCoexVerDate8821a2Ant, GLCoexVer8821a2Ant, fwVer, btPatchVer, btPatchVer));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
+\r
+               if (pCoexSta->disVerInfoCnt == 3)\r
+               {\r
+                       //Antenna config to set 0x765 = 0x0 (GNT_BT control by PTA) after initial \r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Set GNT_BT control by PTA\n"));\r
+                       halbtc8821a2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, FALSE, FALSE);\r
+               }\r
        }\r
 \r
        }\r
 \r
-       halbtc8821a2ant_QueryBtInfo(pBtCoexist);\r
-       halbtc8821a2ant_MonitorBtCtr(pBtCoexist);\r
+#if(BT_AUTO_REPORT_ONLY_8821A_2ANT == 0)\r
+       halbtc8821a2ant_QueryBtInfo(pBtCoexist);        \r
        halbtc8821a2ant_MonitorBtEnableDisable(pBtCoexist);\r
        halbtc8821a2ant_MonitorBtEnableDisable(pBtCoexist);\r
+#else\r
+       halbtc8821a2ant_MonitorBtCtr(pBtCoexist);\r
+       halbtc8821a2ant_MonitorWiFiCtr(pBtCoexist);\r
+       \r
+       if( halbtc8821a2ant_IsWifiStatusChanged(pBtCoexist) ||\r
+               pCoexDm->bAutoTdmaAdjust)\r
+       {\r
+               halbtc8821a2ant_RunCoexistMechanism(pBtCoexist);\r
+       }\r
+#endif\r
 }\r
 \r
 \r
 }\r
 \r
 \r
index 3da55176f5bac976d9226766a51e2581467094f3..6b465e33ecd1d5b0e46628c17519f059f940fdd2 100755 (executable)
@@ -1,6 +1,9 @@
 //===========================================\r
 // The following is for 8821A 2Ant BT Co-exist definition\r
 //===========================================\r
 //===========================================\r
 // The following is for 8821A 2Ant BT Co-exist definition\r
 //===========================================\r
+#define        BT_AUTO_REPORT_ONLY_8821A_2ANT                          1\r
+\r
+\r
 #define        BT_INFO_8821A_2ANT_B_FTP                                                BIT7\r
 #define        BT_INFO_8821A_2ANT_B_A2DP                                       BIT6\r
 #define        BT_INFO_8821A_2ANT_B_HID                                                BIT5\r
 #define        BT_INFO_8821A_2ANT_B_FTP                                                BIT7\r
 #define        BT_INFO_8821A_2ANT_B_A2DP                                       BIT6\r
 #define        BT_INFO_8821A_2ANT_B_HID                                                BIT5\r
 \r
 #define                BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT             2\r
 \r
 \r
 #define                BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT             2\r
 \r
+\r
+#define        BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES                                42  //WiFi RSSI Threshold for 2-Ant TDMA/1-Ant PS-TDMA translation\r
+#define        BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES                          46 //BT RSSI Threshold for 2-Ant TDMA/1-Ant PS-TDMA translation\r
+\r
 typedef enum _BT_INFO_SRC_8821A_2ANT{\r
        BT_INFO_SRC_8821A_2ANT_WIFI_FW                  = 0x0,\r
        BT_INFO_SRC_8821A_2ANT_BT_RSP                           = 0x1,\r
 typedef enum _BT_INFO_SRC_8821A_2ANT{\r
        BT_INFO_SRC_8821A_2ANT_WIFI_FW                  = 0x0,\r
        BT_INFO_SRC_8821A_2ANT_BT_RSP                           = 0x1,\r
@@ -20,9 +27,12 @@ typedef enum _BT_INFO_SRC_8821A_2ANT{
 }BT_INFO_SRC_8821A_2ANT,*PBT_INFO_SRC_8821A_2ANT;\r
 \r
 typedef enum _BT_8821A_2ANT_BT_STATUS{\r
 }BT_INFO_SRC_8821A_2ANT,*PBT_INFO_SRC_8821A_2ANT;\r
 \r
 typedef enum _BT_8821A_2ANT_BT_STATUS{\r
-       BT_8821A_2ANT_BT_STATUS_IDLE                            = 0x0,\r
-       BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE  = 0x1,\r
-       BT_8821A_2ANT_BT_STATUS_NON_IDLE                        = 0x2,\r
+       BT_8821A_2ANT_BT_STATUS_NON_CONNECTED_IDLE      = 0x0,\r
+       BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE          = 0x1,\r
+       BT_8821A_2ANT_BT_STATUS_INQ_PAGE                                = 0x2,\r
+       BT_8821A_2ANT_BT_STATUS_ACL_BUSY                                = 0x3,\r
+       BT_8821A_2ANT_BT_STATUS_SCO_BUSY                                = 0x4,\r
+       BT_8821A_2ANT_BT_STATUS_ACL_SCO_BUSY                    = 0x5,\r
        BT_8821A_2ANT_BT_STATUS_MAX\r
 }BT_8821A_2ANT_BT_STATUS,*PBT_8821A_2ANT_BT_STATUS;\r
 \r
        BT_8821A_2ANT_BT_STATUS_MAX\r
 }BT_8821A_2ANT_BT_STATUS,*PBT_8821A_2ANT_BT_STATUS;\r
 \r
@@ -43,8 +53,8 @@ typedef enum _BT_8821A_2ANT_COEX_ALGO{
 \r
 typedef struct _COEX_DM_8821A_2ANT{\r
        // fw mechanism\r
 \r
 typedef struct _COEX_DM_8821A_2ANT{\r
        // fw mechanism\r
-       BOOLEAN         bPreDecBtPwr;\r
-       BOOLEAN         bCurDecBtPwr;\r
+       u1Byte          preBtDecPwrLvl;\r
+       u1Byte          curBtDecPwrLvl;\r
        u1Byte          preFwDacSwingLvl;\r
        u1Byte          curFwDacSwingLvl;\r
        BOOLEAN         bCurIgnoreWlanAct;\r
        u1Byte          preFwDacSwingLvl;\r
        u1Byte          curFwDacSwingLvl;\r
        BOOLEAN         bCurIgnoreWlanAct;\r
@@ -54,6 +64,7 @@ typedef struct _COEX_DM_8821A_2ANT{
        u1Byte          psTdmaPara[5];\r
        u1Byte          psTdmaDuAdjType;\r
        BOOLEAN         bResetTdmaAdjust;\r
        u1Byte          psTdmaPara[5];\r
        u1Byte          psTdmaDuAdjType;\r
        BOOLEAN         bResetTdmaAdjust;\r
+       BOOLEAN         bAutoTdmaAdjust;\r
        BOOLEAN         bPrePsTdmaOn;\r
        BOOLEAN         bCurPsTdmaOn;\r
        BOOLEAN         bPreBtAutoReport;\r
        BOOLEAN         bPrePsTdmaOn;\r
        BOOLEAN         bCurPsTdmaOn;\r
        BOOLEAN         bPreBtAutoReport;\r
@@ -88,9 +99,17 @@ typedef struct _COEX_DM_8821A_2ANT{
        u1Byte          curAlgorithm;\r
        u1Byte          btStatus;\r
        u1Byte          wifiChnlInfo[3];\r
        u1Byte          curAlgorithm;\r
        u1Byte          btStatus;\r
        u1Byte          wifiChnlInfo[3];\r
+\r
+       BOOLEAN         bNeedRecover0x948;\r
+       u4Byte          backup0x948;\r
+\r
+       u1Byte          preLps;\r
+       u1Byte          curLps;\r
+       u1Byte          preRpwm;\r
+       u1Byte          curRpwm;\r
 } COEX_DM_8821A_2ANT, *PCOEX_DM_8821A_2ANT;\r
 \r
 } COEX_DM_8821A_2ANT, *PCOEX_DM_8821A_2ANT;\r
 \r
-typedef struct _COEX_STA_8821A_2ANT{\r
+typedef struct _COEX_STA_8821A_2ANT{   \r
        BOOLEAN                                 bBtLinkExist;\r
        BOOLEAN                                 bScoExist;\r
        BOOLEAN                                 bA2dpExist;\r
        BOOLEAN                                 bBtLinkExist;\r
        BOOLEAN                                 bScoExist;\r
        BOOLEAN                                 bA2dpExist;\r
@@ -104,14 +123,31 @@ typedef struct _COEX_STA_8821A_2ANT{
        u4Byte                                  lowPriorityTx;\r
        u4Byte                                  lowPriorityRx;\r
        u1Byte                                  btRssi;\r
        u4Byte                                  lowPriorityTx;\r
        u4Byte                                  lowPriorityRx;\r
        u1Byte                                  btRssi;\r
+       BOOLEAN                                 bBtTxRxMask;\r
        u1Byte                                  preBtRssiState;\r
        u1Byte                                  preWifiRssiState[4];\r
        BOOLEAN                                 bC2hBtInfoReqSent;\r
        u1Byte                                  btInfoC2h[BT_INFO_SRC_8821A_2ANT_MAX][10];\r
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8821A_2ANT_MAX];\r
        u1Byte                                  preBtRssiState;\r
        u1Byte                                  preWifiRssiState[4];\r
        BOOLEAN                                 bC2hBtInfoReqSent;\r
        u1Byte                                  btInfoC2h[BT_INFO_SRC_8821A_2ANT_MAX][10];\r
        u4Byte                                  btInfoC2hCnt[BT_INFO_SRC_8821A_2ANT_MAX];\r
+       BOOLEAN                                 bBtWhckTest;\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
        BOOLEAN                                 bC2hBtInquiryPage;\r
        u1Byte                                  btRetryCnt;\r
        u1Byte                                  btInfoExt;\r
+\r
+       u4Byte                                  nCRCOK_CCK;\r
+       u4Byte                                  nCRCOK_11g;\r
+       u4Byte                                  nCRCOK_11n;\r
+       u4Byte                                  nCRCOK_11nAgg;\r
+       \r
+       u4Byte                                  nCRCErr_CCK;\r
+       u4Byte                                  nCRCErr_11g;\r
+       u4Byte                                  nCRCErr_11n;\r
+       u4Byte                                  nCRCErr_11nAgg;\r
+\r
+       u1Byte                                  nCoexTableType;\r
+       BOOLEAN                                 bForceLpsOn;\r
+\r
+       u1Byte                                  disVerInfoCnt;\r
 }COEX_STA_8821A_2ANT, *PCOEX_STA_8821A_2ANT;\r
 \r
 //===========================================\r
 }COEX_STA_8821A_2ANT, *PCOEX_STA_8821A_2ANT;\r
 \r
 //===========================================\r
@@ -122,6 +158,10 @@ EXhalbtc8821a2ant_PowerOnSetting(
        IN      PBTC_COEXIST            pBtCoexist\r
        );\r
 VOID\r
        IN      PBTC_COEXIST            pBtCoexist\r
        );\r
 VOID\r
+EXhalbtc8821a2ant_PreLoadFirmware(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+VOID\r
 EXhalbtc8821a2ant_InitHwConfig(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bWifiOnly\r
 EXhalbtc8821a2ant_InitHwConfig(\r
        IN      PBTC_COEXIST            pBtCoexist,\r
        IN      BOOLEAN                         bWifiOnly\r
index 824b8fbb0f694a6135a36b10505ea53ff60c9862..bd60df4ebb24da349350abbdfd07cf1e5f75f441 100755 (executable)
@@ -1,7 +1,7 @@
 //============================================================\r
 // Description:\r
 //\r
 //============================================================\r
 // Description:\r
 //\r
-// This file is for RTL8821A_CSR Co-exist mechanism\r
+// This file is for RTL8821A_CSR_CSR Co-exist mechanism\r
 //\r
 // History\r
 // 2012/08/22 Cosa first check in.\r
 //\r
 // History\r
 // 2012/08/22 Cosa first check in.\r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 \r
 //============================================================\r
 #include "Mp_Precomp.h"\r
 \r
+#if WPP_SOFTWARE_TRACE\r
+#include "HalBtcCsr8821a2Ant.tmh"\r
+#endif\r
+\r
 #define _BTCOEX_CSR 1\r
 \r
 #ifndef rtw_warn_on\r
 #define _BTCOEX_CSR 1\r
 \r
 #ifndef rtw_warn_on\r
@@ -35,8 +39,8 @@ const char *const GLBtInfoSrc8821aCsr2Ant[]={
        "BT Info[bt auto report]",\r
 };\r
 \r
        "BT Info[bt auto report]",\r
 };\r
 \r
-u4Byte GLCoexVerDate8821aCsr2Ant=20130618;\r
-u4Byte GLCoexVer8821aCsr2Ant=0x5050;\r
+u4Byte GLCoexVerDate8821aCsr2Ant=20140901;\r
+u4Byte GLCoexVer8821aCsr2Ant=0x51;\r
 \r
 //============================================================\r
 // local function proto type if needed\r
 \r
 //============================================================\r
 // local function proto type if needed\r
@@ -64,12 +68,10 @@ halbtc8821aCsr2ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -77,12 +79,10 @@ halbtc8821aCsr2ant_BtRssiState(
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -90,7 +90,7 @@ halbtc8821aCsr2ant_BtRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT Rssi thresh error!!\n"));\r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
                        return pCoexSta->preBtRssiState;\r
                }\r
                \r
@@ -100,12 +100,10 @@ halbtc8821aCsr2ant_BtRssiState(
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -114,17 +112,14 @@ halbtc8821aCsr2ant_BtRssiState(
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(btRssi < rssiThresh)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -132,12 +127,10 @@ halbtc8821aCsr2ant_BtRssiState(
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(btRssi < rssiThresh1)\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -169,12 +162,10 @@ halbtc8821aCsr2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -182,12 +173,10 @@ halbtc8821aCsr2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -195,7 +184,7 @@ halbtc8821aCsr2ant_WifiRssiState(
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
        {\r
                if(rssiThresh > rssiThresh1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
                        return pCoexSta->preWifiRssiState[index];\r
                }\r
                \r
@@ -205,12 +194,10 @@ halbtc8821aCsr2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
                        }\r
                }\r
                else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
@@ -219,17 +206,14 @@ halbtc8821aCsr2ant_WifiRssiState(
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
                        if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
                        }\r
                        else if(wifiRssi < rssiThresh)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_LOW;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
                        }\r
                }\r
                else\r
                        }\r
                }\r
                else\r
@@ -237,12 +221,10 @@ halbtc8821aCsr2ant_WifiRssiState(
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
                        if(wifiRssi < rssiThresh1)\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
                        }\r
                        else\r
                        {\r
                                wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -282,23 +264,23 @@ halbtc8821aCsr2ant_MonitorBtEnableDisable(
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                btDisableCnt = 0;\r
                bBtDisabled = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is enabled !!\n"));\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
        }\r
        else\r
        {\r
                btDisableCnt++;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], bt all counters=0, %d times!!\n", \r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
                                btDisableCnt));\r
                if(btDisableCnt >= 2)\r
                {\r
                        bBtDisabled = TRUE;\r
                        pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is disabled !!\n"));\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
                }\r
        }\r
        if(bPreBtDisabled != bBtDisabled)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is from %s to %s!!\n", \r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
                        (bPreBtDisabled ? "disabled":"enabled"), \r
                        (bBtDisabled ? "disabled":"enabled")));\r
                bPreBtDisabled = bBtDisabled;\r
@@ -336,9 +318,9 @@ halbtc8821aCsr2ant_MonitorBtCtr(
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
        pCoexSta->lowPriorityTx = regLPTx;\r
        pCoexSta->lowPriorityRx = regLPRx;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
                regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
                regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
 \r
        // reset counter\r
@@ -559,7 +541,7 @@ halbtc8821aCsr2ant_QueryBtInfo(
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
 \r
        H2C_Parameter[0] |= BIT0;       // trigger\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        rtw_warn_on(_BTCOEX_CSR);\r
                H2C_Parameter[0]));\r
 \r
        rtw_warn_on(_BTCOEX_CSR);\r
@@ -587,7 +569,7 @@ halbtc8821aCsr2ant_ActionAlgorithm(
 \r
        if(!pStackInfo->bBtLinkExist)\r
        {\r
 \r
        if(!pStackInfo->bBtLinkExist)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No profile exists!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], No profile exists!!!\n"));\r
                return algorithm;\r
        }\r
 \r
                return algorithm;\r
        }\r
 \r
@@ -604,31 +586,31 @@ halbtc8821aCsr2ant_ActionAlgorithm(
        {\r
                if(pStackInfo->bScoExist)\r
                {\r
        {\r
                if(pStackInfo->bScoExist)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO only\n"));\r
                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_SCO;\r
                }\r
                else\r
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID only\n"));\r
                                algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP only\n"));\r
                                algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_A2DP;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(HS) only\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PAN(EDR) only\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR;\r
                                }\r
                        }\r
@@ -640,24 +622,24 @@ halbtc8821aCsr2ant_ActionAlgorithm(
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
                {\r
                        if(pStackInfo->bHidExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID\n"));\r
                                algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
                                algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pStackInfo->bA2dpExist)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
                                algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
                                algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if(pStackInfo->bPanExist)\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_SCO;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -669,12 +651,12 @@ halbtc8821aCsr2ant_ActionAlgorithm(
                        {\r
                                if(pStackInfo->numOfHid >= 2)\r
                                {\r
                        {\r
                                if(pStackInfo->numOfHid >= 2)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID*2 + A2DP\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID*2 + A2DP\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                                else\r
                                {                       \r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                                else\r
                                {                       \r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                        }\r
@@ -683,12 +665,12 @@ halbtc8821aCsr2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(HS)\n"));\r
                                        algorithm =  BT_8821A_CSR_2ANT_COEX_ALGO_HID;\r
                                }\r
                                else\r
                                {\r
                                        algorithm =  BT_8821A_CSR_2ANT_COEX_ALGO_HID;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -697,12 +679,12 @@ halbtc8821aCsr2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_A2DP_PANHS;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_A2DP;\r
                                }\r
                        }\r
@@ -715,7 +697,7 @@ halbtc8821aCsr2ant_ActionAlgorithm(
                        if( pStackInfo->bHidExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {\r
                        if( pStackInfo->bHidExist &&\r
                                pStackInfo->bA2dpExist )\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
                                algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if( pStackInfo->bHidExist &&\r
                                algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                        }\r
                        else if( pStackInfo->bHidExist &&\r
@@ -723,12 +705,12 @@ halbtc8821aCsr2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -737,12 +719,12 @@ halbtc8821aCsr2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -755,12 +737,12 @@ halbtc8821aCsr2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP;\r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
                                }\r
                        }\r
@@ -776,12 +758,12 @@ halbtc8821aCsr2ant_ActionAlgorithm(
                        {\r
                                if(bBtHsOn)\r
                                {\r
                        {\r
                                if(bBtHsOn)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
 \r
                                }\r
                                else\r
                                {\r
 \r
                                }\r
                                else\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
                                        algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;\r
                                }\r
                        }\r
@@ -816,7 +798,7 @@ halbtc8821aCsr2ant_NeedToDecBtPwr(
                {\r
                        if(btHsRssi > 37)\r
                        {\r
                {\r
                        if(btHsRssi > 37)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for HS mode!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Need to decrease bt power for HS mode!!\n"));\r
                                bRet = TRUE;\r
                        }\r
                }\r
                                bRet = TRUE;\r
                        }\r
                }\r
@@ -826,7 +808,7 @@ halbtc8821aCsr2ant_NeedToDecBtPwr(
                        (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                        {\r
                \r
                        (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
                        {\r
                \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for Wifi is connected!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Need to decrease bt power for Wifi is connected!!\n"));\r
                                bRet = TRUE;\r
                        }\r
                }\r
                                bRet = TRUE;\r
                        }\r
                }\r
@@ -847,8 +829,8 @@ halbtc8821aCsr2ant_SetFwDacSwingLevel(
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
        // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
        H2C_Parameter[0] = dacSwingLvl;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
 }\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
 }\r
@@ -868,7 +850,7 @@ halbtc8821aCsr2ant_SetFwDecBtPwr(
                H2C_Parameter[0] |= BIT1;\r
        }\r
 \r
                H2C_Parameter[0] |= BIT1;\r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power : %s, FW write 0x62=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], decrease Bt Power : %s, FW write 0x62=0x%x\n", \r
                (bDecBtPwr? "Yes!!":"No!!"), H2C_Parameter[0]));\r
 \r
        rtw_warn_on(_BTCOEX_CSR);\r
                (bDecBtPwr? "Yes!!":"No!!"), H2C_Parameter[0]));\r
 \r
        rtw_warn_on(_BTCOEX_CSR);\r
@@ -882,15 +864,12 @@ halbtc8821aCsr2ant_DecBtPwr(
        IN      BOOLEAN                 bDecBtPwr\r
        )\r
 {\r
        IN      BOOLEAN                 bDecBtPwr\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s Dec BT power = %s\n",  \r
                (bForceExec? "force to":""), ((bDecBtPwr)? "ON":"OFF")));\r
        pCoexDm->bCurDecBtPwr = bDecBtPwr;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bDecBtPwr)? "ON":"OFF")));\r
        pCoexDm->bCurDecBtPwr = bDecBtPwr;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreDecBtPwr=%d, bCurDecBtPwr=%d\n", \r
-                       pCoexDm->bPreDecBtPwr, pCoexDm->bCurDecBtPwr));\r
-\r
                if(pCoexDm->bPreDecBtPwr == pCoexDm->bCurDecBtPwr) \r
                        return;\r
        }\r
                if(pCoexDm->bPreDecBtPwr == pCoexDm->bCurDecBtPwr) \r
                        return;\r
        }\r
@@ -916,7 +895,7 @@ halbtc8821aCsr2ant_SetBtAutoReport(
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
                H2C_Parameter[0] |= BIT0;\r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        rtw_warn_on(_BTCOEX_CSR);\r
                (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
 \r
        rtw_warn_on(_BTCOEX_CSR);\r
@@ -930,15 +909,12 @@ halbtc8821aCsr2ant_BtAutoReport(
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
        IN      BOOLEAN                 bEnableAutoReport\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s BT Auto report = %s\n",  \r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
        pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
-                       pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
-\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
                if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
                        return;\r
        }\r
@@ -954,15 +930,12 @@ halbtc8821aCsr2ant_FwDacSwingLvl(
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
        IN      u1Byte                  fwDacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), fwDacSwingLvl));\r
        pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n", \r
-                       pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
-\r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
                        return;\r
        }\r
                if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
                        return;\r
        }\r
@@ -981,7 +954,7 @@ halbtc8821aCsr2ant_SetSwRfRxLpfCorner(
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
        if(bRxRfShrinkOn)\r
        {\r
                //Shrink RF Rx LPF corner\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
        }\r
        else\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
        }\r
        else\r
@@ -990,7 +963,7 @@ halbtc8821aCsr2ant_SetSwRfRxLpfCorner(
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
                // After initialized, we can use pCoexDm->btRf0x1eBackup\r
                if(pBtCoexist->bInitilized)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
                        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
                }\r
        }\r
@@ -1003,15 +976,12 @@ halbtc8821aCsr2ant_RfShrink(
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
        IN      BOOLEAN                 bRxRfShrinkOn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
        pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
-                       pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
-\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
                if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
                        return;\r
        }\r
@@ -1039,7 +1009,7 @@ halbtc8821aCsr2ant_SetSwPenaltyTxRateAdaptive(
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
                H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
        }\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
                (bLowPenaltyRa? "ON!!":"OFF!!") ));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
                (bLowPenaltyRa? "ON!!":"OFF!!") ));\r
 \r
        pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
@@ -1052,15 +1022,12 @@ halbtc8821aCsr2ant_LowPenaltyRa(
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
        IN      BOOLEAN                 bLowPenaltyRa\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
        pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
-                       pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
-\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
                if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
                        return;\r
        }\r
@@ -1077,7 +1044,7 @@ halbtc8821aCsr2ant_SetDacSwingReg(
 {\r
        u1Byte  val=(u1Byte)level;\r
 \r
 {\r
        u1Byte  val=(u1Byte)level;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc5b, 0x3e, val);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc5b, 0x3e, val);\r
 }\r
 \r
@@ -1107,17 +1074,13 @@ halbtc8821aCsr2ant_DacSwing(
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
        IN      u4Byte                  dacSwingLvl\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
        pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
        pCoexDm->curDacSwingLvl = dacSwingLvl;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
-                       pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
-                       pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
-\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
                if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
                        (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
                        return;\r
@@ -1137,12 +1100,12 @@ halbtc8821aCsr2ant_SetAdcBackOff(
 {\r
        if(bAdcBackOff)\r
        {\r
 {\r
        if(bAdcBackOff)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level On!\n"));\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x3);\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x3);\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BB BackOff Level Off!\n"));\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x1);\r
        }\r
 }\r
                pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x1);\r
        }\r
 }\r
@@ -1154,15 +1117,12 @@ halbtc8821aCsr2ant_AdcBackOff(
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
        IN      BOOLEAN                 bAdcBackOff\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
        pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
-                       pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
-\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
                        return;\r
        }\r
@@ -1182,14 +1142,14 @@ halbtc8821aCsr2ant_SetAgcTable(
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
        if(bAgcTableEn)\r
        {\r
        pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
        if(bAgcTableEn)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table On!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x28F4B);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x10AB2);\r
                rssiAdjustVal = 8;\r
        }\r
        else\r
        {\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x28F4B);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x10AB2);\r
                rssiAdjustVal = 8;\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Agc Table Off!\n"));\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x2884B);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x104B2);\r
        }\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x2884B);\r
                pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x104B2);\r
        }\r
@@ -1206,15 +1166,12 @@ halbtc8821aCsr2ant_AgcTable(
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
        IN      BOOLEAN                 bAgcTableEn\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",  \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s %s Agc Table\n",  \r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
        pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
-                       pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
-\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
                if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
                        return;\r
        }\r
@@ -1232,16 +1189,16 @@ halbtc8821aCsr2ant_SetCoexTable(
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
        IN      u1Byte          val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
        pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
        pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
 }\r
 \r
@@ -1255,7 +1212,7 @@ halbtc8821aCsr2ant_CoexTable(
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
        IN      u1Byte                  val0x6cc\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
                (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
        pCoexDm->curVal0x6c0 = val0x6c0;\r
        pCoexDm->curVal0x6c4 = val0x6c4;\r
@@ -1264,11 +1221,6 @@ halbtc8821aCsr2ant_CoexTable(
 \r
        if(!bForceExec)\r
        {\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
-                       pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
-       \r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
                if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
                        (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
                        (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
@@ -1296,7 +1248,7 @@ halbtc8821aCsr2ant_SetFwIgnoreWlanAct(
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
                H2C_Parameter[0] |= BIT0;               // function enable\r
        }\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
                H2C_Parameter[0]));\r
 \r
        rtw_warn_on(_BTCOEX_CSR);\r
                H2C_Parameter[0]));\r
 \r
        rtw_warn_on(_BTCOEX_CSR);\r
@@ -1310,15 +1262,12 @@ halbtc8821aCsr2ant_IgnoreWlanAct(
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
        IN      BOOLEAN                 bEnable\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
        pCoexDm->bCurIgnoreWlanAct = bEnable;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
-                       pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
-\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
                if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
                        return;\r
        }\r
@@ -1353,7 +1302,7 @@ halbtc8821aCsr2ant_SetFwPstdma(
        pCoexDm->psTdmaPara[4] = byte5;\r
        pCoexDm->psTdmaPara[5] = 0x01;\r
        \r
        pCoexDm->psTdmaPara[4] = byte5;\r
        pCoexDm->psTdmaPara[5] = 0x01;\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(6bytes)=0x%x%08x%02x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x60(6bytes)=0x%x%08x%02x\n", \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4], H2C_Parameter[5]));\r
 \r
                H2C_Parameter[0], \r
                H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4], H2C_Parameter[5]));\r
 \r
@@ -1462,18 +1411,13 @@ halbtc8821aCsr2ant_PsTdma(
        BOOLEAN                 bTurnOnByCnt=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0;\r
 \r
        BOOLEAN                 bTurnOnByCnt=FALSE;\r
        u1Byte                  psTdmaTypeByCnt=0;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
                (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        if(!bForceExec)\r
        {\r
                (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
        pCoexDm->bCurPsTdmaOn = bTurnOn;\r
        pCoexDm->curPsTdma = type;\r
 \r
        if(!bForceExec)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
-                       pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
-                       pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
-\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
                if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
                        (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
                        return;\r
@@ -1652,7 +1596,7 @@ halbtc8821aCsr2ant_IsCommonAction(
                bLowPwrDisable = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
                bLowPwrDisable = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT IPS!!\n"));  \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi IPS + BT IPS!!\n"));     \r
 \r
                \r
                halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
 \r
                \r
                halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
@@ -1674,12 +1618,12 @@ halbtc8821aCsr2ant_IsCommonAction(
 \r
                if(bWifiBusy)\r
                {       \r
 \r
                if(bWifiBusy)\r
                {       \r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT IPS!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Busy + BT IPS!!\n"));\r
                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                }\r
                else\r
                {\r
                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT IPS!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi LPS + BT IPS!!\n"));\r
                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                }\r
                \r
                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                }\r
                \r
@@ -1699,7 +1643,7 @@ halbtc8821aCsr2ant_IsCommonAction(
                bLowPwrDisable = TRUE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
                bLowPwrDisable = TRUE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT LPS!!\n"));          \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi IPS + BT LPS!!\n"));             \r
 \r
                halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
 \r
                halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
@@ -1720,12 +1664,12 @@ halbtc8821aCsr2ant_IsCommonAction(
                \r
                if(bWifiBusy)\r
                {\r
                \r
                if(bWifiBusy)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT LPS!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Busy + BT LPS!!\n"));\r
                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                }\r
                else\r
                {\r
                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT LPS!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi LPS + BT LPS!!\n"));\r
                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                }\r
                \r
                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
                }\r
                \r
@@ -1745,9 +1689,10 @@ halbtc8821aCsr2ant_IsCommonAction(
                bLowPwrDisable = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
                bLowPwrDisable = FALSE;\r
                pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT Busy!!\n")); \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi IPS + BT Busy!!\n"));    \r
 \r
 \r
-               halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+               //halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
+               halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
                halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
 \r
                halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
                halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
 \r
@@ -1765,12 +1710,12 @@ halbtc8821aCsr2ant_IsCommonAction(
 \r
                if(bWifiBusy)\r
                {\r
 \r
                if(bWifiBusy)\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT Busy!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi Busy + BT Busy!!\n"));\r
                        bCommon = FALSE;\r
                }\r
                else\r
                {\r
                        bCommon = FALSE;\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT Busy!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Wifi LPS + BT Busy!!\n"));\r
                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 21);\r
 \r
                        if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 21);\r
 \r
                        if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
@@ -1801,12 +1746,12 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
        s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
        u1Byte                  retryCount=0;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));\r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TdmaDurationAdjust()\n"));\r
 \r
        if(pCoexDm->bResetTdmaAdjust)\r
        {\r
                pCoexDm->bResetTdmaAdjust = FALSE;\r
 \r
        if(pCoexDm->bResetTdmaAdjust)\r
        {\r
                pCoexDm->bResetTdmaAdjust = FALSE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
                {\r
                        if(bScoHid)\r
                        {\r
                {\r
                        if(bScoHid)\r
                        {\r
@@ -1919,8 +1864,8 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
        {\r
                //accquire the BT TRx retry count from BT_Info byte2\r
                retryCount = pCoexSta->btRetryCnt;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], retryCount = %d\n", retryCount));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
                        up, dn, m, n, WaitCount));\r
                result = 0;\r
                WaitCount++; \r
@@ -1940,7 +1885,7 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
                                up = 0;\r
                                dn = 0;\r
                                result = 1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Increase wifi duration!!\n"));\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
                        }\r
                }\r
                else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
@@ -1966,7 +1911,7 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
                                dn = 0;\r
                                WaitCount = 0;\r
                                result = -1; \r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
                        }\r
                }\r
                else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
@@ -1984,15 +1929,15 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
                        dn = 0;\r
                        WaitCount = 0; \r
                        result = -1;\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
                }\r
 \r
                }\r
 \r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));\r
+               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], max Interval = %d\n", maxInterval));\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
                if(maxInterval == 1)\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
 \r
                                if(pCoexDm->curPsTdma == 71)\r
                                {\r
 \r
                                if(pCoexDm->curPsTdma == 71)\r
                                {\r
@@ -2109,7 +2054,7 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
@@ -2233,7 +2178,7 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
@@ -2343,7 +2288,7 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
@@ -2456,7 +2401,7 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
                {\r
                        if(bTxPause)\r
                        {\r
                {\r
                        if(bTxPause)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 1\n"));\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
                                if(pCoexDm->curPsTdma == 1)\r
                                {\r
                                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
@@ -2566,7 +2511,7 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
+                               RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], TxPause = 0\n"));\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
                                if(pCoexDm->curPsTdma == 5)\r
                                {\r
                                        halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
@@ -2682,7 +2627,7 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
        if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
        {\r
                BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
                        pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
 \r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
@@ -2695,7 +2640,7 @@ halbtc8821aCsr2ant_TdmaDurationAdjust(
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
@@ -3668,7 +3613,7 @@ halbtc8821aCsr2ant_RunCoexistMechanism(
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
 \r
        if(pBtCoexist->bManualControl)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Manual control!!!\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Manual control!!!\n"));\r
                return;\r
        }\r
 \r
                return;\r
        }\r
 \r
@@ -3676,7 +3621,7 @@ halbtc8821aCsr2ant_RunCoexistMechanism(
 \r
        if(bWifiUnder5G)\r
        {\r
 \r
        if(bWifiUnder5G)\r
        {\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n"));\r
                halbtc8821aCsr2ant_CoexUnder5G(pBtCoexist);\r
                return;\r
        }\r
                halbtc8821aCsr2ant_CoexUnder5G(pBtCoexist);\r
                return;\r
        }\r
@@ -3686,71 +3631,71 @@ halbtc8821aCsr2ant_RunCoexistMechanism(
                algorithm = halbtc8821aCsr2ant_ActionAlgorithm(pBtCoexist);\r
                if(pCoexSta->bC2hBtInquiryPage && (BT_8821A_CSR_2ANT_COEX_ALGO_PANHS!=algorithm))\r
                {\r
                algorithm = halbtc8821aCsr2ant_ActionAlgorithm(pBtCoexist);\r
                if(pCoexSta->bC2hBtInquiryPage && (BT_8821A_CSR_2ANT_COEX_ALGO_PANHS!=algorithm))\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
                        halbtc8821aCsr2ant_BtInquiryPage(pBtCoexist);\r
                        return;\r
                }\r
 \r
                pCoexDm->curAlgorithm = algorithm;\r
                        halbtc8821aCsr2ant_BtInquiryPage(pBtCoexist);\r
                        return;\r
                }\r
 \r
                pCoexDm->curAlgorithm = algorithm;\r
-               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
 \r
                if(halbtc8821aCsr2ant_IsCommonAction(pBtCoexist))\r
                {\r
 \r
                if(halbtc8821aCsr2ant_IsCommonAction(pBtCoexist))\r
                {\r
-                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant common.\n"));\r
                        pCoexDm->bResetTdmaAdjust = TRUE;\r
                }\r
                else\r
                {\r
                        if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
                        {\r
                        pCoexDm->bResetTdmaAdjust = TRUE;\r
                }\r
                else\r
                {\r
                        if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
                        {\r
-                               BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
+                               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
                                        pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
                                pCoexDm->bResetTdmaAdjust = TRUE;\r
                        }\r
                        switch(pCoexDm->curAlgorithm)\r
                        {\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_SCO:\r
                                        pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
                                pCoexDm->bResetTdmaAdjust = TRUE;\r
                        }\r
                        switch(pCoexDm->curAlgorithm)\r
                        {\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_SCO:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
                                        halbtc8821aCsr2ant_ActionSco(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_HID:\r
                                        halbtc8821aCsr2ant_ActionSco(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_HID:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
                                        halbtc8821aCsr2ant_ActionHid(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_A2DP:\r
                                        halbtc8821aCsr2ant_ActionHid(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_A2DP:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
                                        halbtc8821aCsr2ant_ActionA2dp(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_A2DP_PANHS:\r
                                        halbtc8821aCsr2ant_ActionA2dp(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_A2DP_PANHS:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
                                        halbtc8821aCsr2ant_ActionA2dpPanHs(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR:\r
                                        halbtc8821aCsr2ant_ActionA2dpPanHs(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
                                        halbtc8821aCsr2ant_ActionPanEdr(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_PANHS:\r
                                        halbtc8821aCsr2ant_ActionPanEdr(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_PANHS:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
                                        halbtc8821aCsr2ant_ActionPanHs(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_A2DP:\r
                                        halbtc8821aCsr2ant_ActionPanHs(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_A2DP:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
                                        halbtc8821aCsr2ant_ActionPanEdrA2dp(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID:\r
                                        halbtc8821aCsr2ant_ActionPanEdrA2dp(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
                                        halbtc8821aCsr2ant_ActionPanEdrHid(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
                                        halbtc8821aCsr2ant_ActionPanEdrHid(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
                                        halbtc8821aCsr2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP:\r
                                        halbtc8821aCsr2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
                                        break;\r
                                case BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
                                        halbtc8821aCsr2ant_ActionHidA2dp(pBtCoexist);\r
                                        break;\r
                                default:\r
                                        halbtc8821aCsr2ant_ActionHidA2dp(pBtCoexist);\r
                                        break;\r
                                default:\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
                                        halbtc8821aCsr2ant_CoexAllOff(pBtCoexist);\r
                                        break;\r
                        }\r
                                        halbtc8821aCsr2ant_CoexAllOff(pBtCoexist);\r
                                        break;\r
                        }\r
@@ -3787,7 +3732,7 @@ EXhalbtc8821aCsr2ant_InitHwConfig(
        u1Byte                          H2C_Parameter[2] ={0};\r
                \r
 \r
        u1Byte                          H2C_Parameter[2] ={0};\r
                \r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
 \r
        if(bWifiOnly)\r
                return;\r
 \r
        if(bWifiOnly)\r
                return;\r
@@ -3831,7 +3776,7 @@ EXhalbtc8821aCsr2ant_InitCoexDm(
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST            pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Coex Mechanism Init!!\n"));\r
        \r
        halbtc8821aCsr2ant_InitCoexDm(pBtCoexist);\r
 }\r
        \r
        halbtc8821aCsr2ant_InitCoexDm(pBtCoexist);\r
 }\r
@@ -4021,13 +3966,13 @@ EXhalbtc8821aCsr2ant_IpsNotify(
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
 {\r
        if(BTC_IPS_ENTER == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS ENTER notify\n"));\r
                pCoexSta->bUnderIps = TRUE;\r
                halbtc8821aCsr2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
                pCoexSta->bUnderIps = TRUE;\r
                halbtc8821aCsr2ant_CoexAllOff(pBtCoexist);\r
        }\r
        else if(BTC_IPS_LEAVE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], IPS LEAVE notify\n"));\r
                pCoexSta->bUnderIps = FALSE;\r
                //halbtc8821aCsr2ant_InitCoexDm(pBtCoexist);\r
        }\r
                pCoexSta->bUnderIps = FALSE;\r
                //halbtc8821aCsr2ant_InitCoexDm(pBtCoexist);\r
        }\r
@@ -4041,12 +3986,12 @@ EXhalbtc8821aCsr2ant_LpsNotify(
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
 {\r
        if(BTC_LPS_ENABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS ENABLE notify\n"));\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
                pCoexSta->bUnderLps = TRUE;\r
        }\r
        else if(BTC_LPS_DISABLE == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], LPS DISABLE notify\n"));\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
                pCoexSta->bUnderLps = FALSE;\r
        }\r
 }\r
@@ -4059,11 +4004,11 @@ EXhalbtc8821aCsr2ant_ScanNotify(
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
 {\r
        if(BTC_SCAN_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN START notify\n"));\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
        }\r
        else if(BTC_SCAN_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], SCAN FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4075,11 +4020,11 @@ EXhalbtc8821aCsr2ant_ConnectNotify(
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
 {\r
        if(BTC_ASSOCIATE_START == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT START notify\n"));\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
        }\r
        else if(BTC_ASSOCIATE_FINISH == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CONNECT FINISH notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4095,11 +4040,11 @@ EXhalbtc8821aCsr2ant_MediaStatusNotify(
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
 \r
        if(BTC_MEDIA_CONNECT == type)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA connect notify\n"));\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], MEDIA disconnect notify\n"));\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
        }\r
 \r
        // only 2.4G we need to inform bt the chnl mask\r
@@ -4121,7 +4066,7 @@ EXhalbtc8821aCsr2ant_MediaStatusNotify(
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
        pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
        pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
        \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n", \r
+       RT_TRACE(COMP_COEX, DBG_TRACE, ("[BTCoex], FW write 0x66=0x%x\n", \r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        rtw_warn_on(_BTCOEX_CSR);\r
                H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
 \r
        rtw_warn_on(_BTCOEX_CSR);\r
@@ -4137,7 +4082,7 @@ EXhalbtc8821aCsr2ant_SpecialPacketNotify(
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
 {\r
        if(type == BTC_PACKET_DHCP)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], DHCP Packet notify\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4161,7 +4106,7 @@ EXhalbtc8821aCsr2ant_BtInfoNotify(
                rspSource = BT_INFO_SRC_8821A_CSR_2ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
                rspSource = BT_INFO_SRC_8821A_CSR_2ANT_WIFI_FW;\r
        pCoexSta->btInfoC2hCnt[rspSource]++;\r
 \r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
        for(i=0; i<length; i++)\r
        {\r
                pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
@@ -4169,11 +4114,11 @@ EXhalbtc8821aCsr2ant_BtInfoNotify(
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
                        btInfo = tmpBuf[i];\r
                if(i == length-1)\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x]\n", tmpBuf[i]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
+                       RT_TRACE(COMP_COEX, DBG_LOUD, ("0x%02x, ", tmpBuf[i]));\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
@@ -4213,7 +4158,7 @@ EXhalbtc8821aCsr2ant_BtInfoNotify(
                        {\r
                                if(bWifiConnected)\r
                                {\r
                        {\r
                                if(bWifiConnected)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
                                        halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                                }\r
                        }\r
                                        halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
                                }\r
                        }\r
@@ -4222,7 +4167,7 @@ EXhalbtc8821aCsr2ant_BtInfoNotify(
                                // BT already NOT ignore Wlan active, do nothing here.\r
                                if(!bWifiConnected)\r
                                {\r
                                // BT already NOT ignore Wlan active, do nothing here.\r
                                if(!bWifiConnected)\r
                                {\r
-                                       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT to ignore Wlan active!!\n"));\r
+                                       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT ext info bit3 check, set BT to ignore Wlan active!!\n"));\r
                                        halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
                                }\r
                        }\r
                                        halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
                                }\r
                        }\r
@@ -4335,7 +4280,7 @@ EXhalbtc8821aCsr2ant_HaltNotify(
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
        IN      PBTC_COEXIST                    pBtCoexist\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Halt notify\n"));\r
 \r
        halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
        EXhalbtc8821aCsr2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
 \r
        halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
        EXhalbtc8821aCsr2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
@@ -4347,16 +4292,16 @@ EXhalbtc8821aCsr2ant_PnpNotify(
        IN      u1Byte                          pnpState\r
        )\r
 {\r
        IN      u1Byte                          pnpState\r
        )\r
 {\r
-       BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify\n"));\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
 \r
        if(BTC_WIFI_PNP_SLEEP == pnpState)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to SLEEP\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to SLEEP\n"));\r
                halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
                halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
        }\r
        else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
        {\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -4370,21 +4315,21 @@ EXhalbtc8821aCsr2ant_Periodical(
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
        PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
        PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
 \r
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ==========================Periodical===========================\n"));\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
 \r
        if(disVerInfoCnt <= 5)\r
        {\r
                disVerInfoCnt += 1;\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n",\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
                        pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n",\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
                        ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
                pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n",\r
                        GLCoexVerDate8821aCsr2Ant, GLCoexVer8821aCsr2Ant, fwVer, btPatchVer, btPatchVer));\r
                        GLCoexVerDate8821aCsr2Ant, GLCoexVer8821aCsr2Ant, fwVer, btPatchVer, btPatchVer));\r
-               BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], ****************************************************************\n"));\r
        }\r
 \r
        //halbtc8821aCsr2ant_QueryBtInfo(pBtCoexist);\r
        }\r
 \r
        //halbtc8821aCsr2ant_QueryBtInfo(pBtCoexist);\r
index d74397076ee58fdf046068c1d0f56ec503e29476..040a790f3b7f5b63edd0601d20e85af6ffb4a413 100755 (executable)
 #define                BTC_RF_B                                        0x1\r
 #define                BTC_RF_C                                        0x2\r
 #define                BTC_RF_D                                        0x3\r
 #define                BTC_RF_B                                        0x1\r
 #define                BTC_RF_C                                        0x2\r
 #define                BTC_RF_D                                        0x3\r
-\r
+#if 0\r
 #define                BTC_SMSP                                SINGLEMAC_SINGLEPHY\r
 #define                BTC_DMDP                                DUALMAC_DUALPHY\r
 #define                BTC_DMSP                                DUALMAC_SINGLEPHY\r
 #define                BTC_SMSP                                SINGLEMAC_SINGLEPHY\r
 #define                BTC_DMDP                                DUALMAC_DUALPHY\r
 #define                BTC_DMSP                                DUALMAC_SINGLEPHY\r
+#endif\r
 #define                BTC_MP_UNKNOWN          0xff\r
 \r
 #define                BT_COEX_ANT_TYPE_PG                     0\r
 #define                BTC_MP_UNKNOWN          0xff\r
 \r
 #define                BT_COEX_ANT_TYPE_PG                     0\r
@@ -72,29 +73,6 @@ typedef enum _BTC_CHIP_TYPE{
        BTC_CHIP_MAX\r
 } BTC_CHIP_TYPE, *PBTC_CHIP_TYPE;\r
 \r
        BTC_CHIP_MAX\r
 } BTC_CHIP_TYPE, *PBTC_CHIP_TYPE;\r
 \r
-typedef enum _BTC_MSG_TYPE{\r
-       BTC_MSG_INTERFACE                       = 0x0,\r
-       BTC_MSG_ALGORITHM                       = 0x1,\r
-       BTC_MSG_MAX\r
-}BTC_MSG_TYPE;\r
-extern u4Byte                                  GLBtcDbgType[];\r
-\r
-// following is for BTC_MSG_INTERFACE\r
-#define                INTF_INIT                                               BIT0\r
-#define                INTF_NOTIFY                                             BIT2\r
-\r
-// following is for BTC_ALGORITHM\r
-#define                ALGO_BT_RSSI_STATE                              BIT0\r
-#define                ALGO_WIFI_RSSI_STATE                            BIT1\r
-#define                ALGO_BT_MONITOR                         BIT2\r
-#define                ALGO_TRACE                                              BIT3\r
-#define                ALGO_TRACE_FW                                   BIT4\r
-#define                ALGO_TRACE_FW_DETAIL                    BIT5\r
-#define                ALGO_TRACE_FW_EXEC                              BIT6\r
-#define                ALGO_TRACE_SW                                   BIT7\r
-#define                ALGO_TRACE_SW_DETAIL                    BIT8\r
-#define                ALGO_TRACE_SW_EXEC                              BIT9\r
-\r
 // following is for wifi link status\r
 #define                WIFI_STA_CONNECTED                              BIT0\r
 #define                WIFI_AP_CONNECTED                               BIT1\r
 // following is for wifi link status\r
 #define                WIFI_STA_CONNECTED                              BIT0\r
 #define                WIFI_AP_CONNECTED                               BIT1\r
@@ -106,70 +84,18 @@ extern u4Byte                                      GLBtcDbgType[];
 #define        CL_SPRINTF      rsprintf\r
 #define        CL_PRINTF       DCMD_Printf\r
 \r
 #define        CL_SPRINTF      rsprintf\r
 #define        CL_PRINTF       DCMD_Printf\r
 \r
-// The following is for dbgview print\r
-#if DBG\r
-#define        BTC_PRINT(dbgtype, dbgflag, printstr)\\r
-{\\r
-       if (GLBtcDbgType[dbgtype] & dbgflag)\\r
-       {\\r
-               DbgPrint printstr;\\r
-       }\\r
-}\r
-\r
-#define        BTC_PRINT_F(dbgtype, dbgflag, printstr)\\r
-{\\r
-       if (GLBtcDbgType[dbgtype] & dbgflag)\\r
-       {\\r
-               DbgPrint("%s(): ", __FUNCTION__);\\r
-               DbgPrint printstr;\\r
-       }\\r
-}\r
-\r
-#define        BTC_PRINT_ADDR(dbgtype, dbgflag, printstr, _Ptr)\\r
-{\\r
-       if (GLBtcDbgType[dbgtype] & dbgflag)\\r
-       {\\r
-                               int __i;                                                \\r
-                               pu1Byte ptr = (pu1Byte)_Ptr;    \\r
-                               DbgPrint printstr;                              \\r
-                               DbgPrint(" ");                                  \\r
-                               for( __i=0; __i<6; __i++ )              \\r
-                                       DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-");          \\r
-                               DbgPrint("\n");                                                 \\r
-       }\\r
-}\r
-\r
-#define        BTC_PRINT_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen)\\r
-{\\r
-       if (GLBtcDbgType[dbgtype] & dbgflag)\\r
-       {\\r
-               int __i;                                                                        \\r
-               pu1Byte ptr = (pu1Byte)_HexData;                        \\r
-               DbgPrint(_TitleString);                                 \\r
-               for( __i=0; __i<(int)_HexDataLen; __i++ )       \\r
-               {                                                                               \\r
-                       DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?"  ":" ");\\r
-                       if (((__i + 1) % 16) == 0)      DbgPrint("\n");\\r
-               }                                                                               \\r
-               DbgPrint("\n");                                                 \\r
-       }\\r
-}\r
-\r
-#else\r
-#define        BTC_PRINT(dbgtype, dbgflag, printstr)\r
-#define        BTC_PRINT_F(dbgtype, dbgflag, printstr)\r
-#define        BTC_PRINT_ADDR(dbgtype, dbgflag, printstr, _Ptr)\r
-#define        BTC_PRINT_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen)\r
-#endif\r
 \r
 typedef struct _BTC_BOARD_INFO{\r
        // The following is some board information\r
        u1Byte                          btChipType;\r
        u1Byte                          pgAntNum;       // pg ant number\r
        u1Byte                          btdmAntNum;     // ant number for btdm\r
 \r
 typedef struct _BTC_BOARD_INFO{\r
        // The following is some board information\r
        u1Byte                          btChipType;\r
        u1Byte                          pgAntNum;       // pg ant number\r
        u1Byte                          btdmAntNum;     // ant number for btdm\r
+       u1Byte                          btdmAntNumByAntDet;     // ant number for btdm after antenna detection\r
        u1Byte                          btdmAntPos;             //Bryant Add to indicate Antenna Position for (pgAntNum = 2) && (btdmAntNum =1)  (DPDT+1Ant case)\r
        u1Byte                          singleAntPath;  // current used for 8723b only, 1=>s0,  0=>s1\r
        u1Byte                          btdmAntPos;             //Bryant Add to indicate Antenna Position for (pgAntNum = 2) && (btdmAntNum =1)  (DPDT+1Ant case)\r
        u1Byte                          singleAntPath;  // current used for 8723b only, 1=>s0,  0=>s1\r
-       //BOOLEAN                               bBtExist;\r
+       u1Byte                          bTfbgaPackage;    //for Antenna detect threshold \r
+       u1Byte                          btdmAntDetFinish;\r
+       u1Byte                          antType;\r
 } BTC_BOARD_INFO, *PBTC_BOARD_INFO;\r
 \r
 typedef enum _BTC_DBG_OPCODE{\r
 } BTC_BOARD_INFO, *PBTC_BOARD_INFO;\r
 \r
 typedef enum _BTC_DBG_OPCODE{\r
@@ -230,6 +156,29 @@ typedef enum _BTC_WIFI_PNP{
        BTC_WIFI_PNP_MAX\r
 }BTC_WIFI_PNP,*PBTC_WIFI_PNP;\r
 \r
        BTC_WIFI_PNP_MAX\r
 }BTC_WIFI_PNP,*PBTC_WIFI_PNP;\r
 \r
+typedef enum _BTC_IOT_PEER\r
+{\r
+       BTC_IOT_PEER_UNKNOWN = 0,\r
+       BTC_IOT_PEER_REALTEK = 1,\r
+       BTC_IOT_PEER_REALTEK_92SE = 2,\r
+       BTC_IOT_PEER_BROADCOM = 3,\r
+       BTC_IOT_PEER_RALINK = 4,\r
+       BTC_IOT_PEER_ATHEROS = 5,\r
+       BTC_IOT_PEER_CISCO = 6,\r
+       BTC_IOT_PEER_MERU = 7,  \r
+       BTC_IOT_PEER_MARVELL = 8,\r
+       BTC_IOT_PEER_REALTEK_SOFTAP = 9,// peer is RealTek SOFT_AP, by Bohn, 2009.12.17\r
+       BTC_IOT_PEER_SELF_SOFTAP = 10, // Self is SoftAP\r
+       BTC_IOT_PEER_AIRGO = 11,\r
+       BTC_IOT_PEER_INTEL                              = 12, \r
+       BTC_IOT_PEER_RTK_APCLIENT               = 13, \r
+       BTC_IOT_PEER_REALTEK_81XX               = 14,   \r
+       BTC_IOT_PEER_REALTEK_WOW                = 15,\r
+       BTC_IOT_PEER_REALTEK_JAGUAR_BCUTAP = 16,\r
+       BTC_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 17,\r
+       BTC_IOT_PEER_MAX,\r
+}BTC_IOT_PEER, *PBTC_IOT_PEER;\r
+\r
 //for 8723b-d cut large current issue\r
 typedef enum _BT_WIFI_COEX_STATE{\r
        BTC_WIFI_STAT_INIT,\r
 //for 8723b-d cut large current issue\r
 typedef enum _BT_WIFI_COEX_STATE{\r
        BTC_WIFI_STAT_INIT,\r
@@ -287,6 +236,7 @@ typedef enum _BTC_GET_TYPE{
        BTC_GET_U1_MAC_PHY_MODE,\r
        BTC_GET_U1_AP_NUM,\r
        BTC_GET_U1_ANT_TYPE,\r
        BTC_GET_U1_MAC_PHY_MODE,\r
        BTC_GET_U1_AP_NUM,\r
        BTC_GET_U1_ANT_TYPE,\r
+       BTC_GET_U1_IOT_PEER,\r
 \r
        //===== for 1Ant ======\r
        BTC_GET_U1_LPS_MODE,\r
 \r
        //===== for 1Ant ======\r
        BTC_GET_U1_LPS_MODE,\r
@@ -490,6 +440,12 @@ typedef VOID
        IN      u4Byte                  offset,\r
        IN      u4Byte                  value\r
        );\r
        IN      u4Byte                  offset,\r
        IN      u4Byte                  value\r
        );\r
+typedef BOOLEAN\r
+(*BFP_BTC_SET_BT_ANT_DETECTION)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u1Byte                  txTime,\r
+       IN      u1Byte                  btChnl\r
+       );\r
 typedef u4Byte \r
 (*BFP_BTC_GET_BT_REG)(\r
        IN      PVOID                   pBtcContext,\r
 typedef u4Byte \r
 (*BFP_BTC_GET_BT_REG)(\r
        IN      PVOID                   pBtcContext,\r
@@ -626,6 +582,8 @@ typedef struct _BTC_COEXIST{
 \r
        BFP_BTC_GET_BT_REG      fBtcGetBtReg;\r
        BFP_BTC_SET_BT_REG      fBtcSetBtReg;\r
 \r
        BFP_BTC_GET_BT_REG      fBtcGetBtReg;\r
        BFP_BTC_SET_BT_REG      fBtcSetBtReg;\r
+\r
+       BFP_BTC_SET_BT_ANT_DETECTION    fBtcSetBtAntDetection;\r
 } BTC_COEXIST, *PBTC_COEXIST;\r
 \r
 extern BTC_COEXIST                             GLBtCoexist;\r
 } BTC_COEXIST, *PBTC_COEXIST;\r
 \r
 extern BTC_COEXIST                             GLBtCoexist;\r
@@ -770,7 +728,7 @@ EXhalbtcoutsrc_DisplayBtCoexInfo(
        IN      PBTC_COEXIST            pBtCoexist\r
        );\r
 VOID\r
        IN      PBTC_COEXIST            pBtCoexist\r
        );\r
 VOID\r
-EXhalbtcoutsrc_DisplayAntIsolation(\r
+EXhalbtcoutsrc_DisplayAntDetection(\r
        IN      PBTC_COEXIST            pBtCoexist\r
        );\r
 \r
        IN      PBTC_COEXIST            pBtCoexist\r
        );\r
 \r
index b1fc17ba14844abbd68cf8a5ccf213292cd7775f..d70ae3d10335f815a88db28bcb587e00249e98c8 100755 (executable)
 #undef bEnable
 #endif
 
 #undef bEnable
 #endif
 
+#define WPP_SOFTWARE_TRACE 0
+
+typedef enum _BTC_MSG_COMP_TYPE{
+       COMP_COEX               = 0,
+       COMP_MAX
+}BTC_MSG_COMP_TYPE;
+extern u4Byte GLBtcDbgType[];
+
+#define DBG_OFF                        0
+#define DBG_SEC                        1
+#define DBG_SERIOUS            2
+#define DBG_WARNING            3
+#define DBG_LOUD               4
+#define DBG_TRACE              5
+
+#if DBG
+#ifdef RT_TRACE
+#undef RT_TRACE
+#define RT_TRACE(dbgtype, dbgflag, printstr)\
+do {\
+       if (GLBtcDbgType[dbgtype] & BIT(dbgflag))\
+       {\
+               DbgPrint printstr;\
+       }\
+} while (0)
+#endif
+#else
+//#define RT_TRACE(dbgtype, dbgflag, printstr)
+#endif
+
 #include "HalBtcOutSrc.h"
 #include "HalBtc8188c2Ant.h"
 #include "HalBtc8192d2Ant.h"
 #include "HalBtcOutSrc.h"
 #include "HalBtc8188c2Ant.h"
 #include "HalBtc8192d2Ant.h"
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/HalHWImg.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/HalHWImg.h
new file mode 100755 (executable)
index 0000000..108f715
--- /dev/null
@@ -0,0 +1,123 @@
+#pragma once\r
+#ifndef __INC_HW_IMG_H\r
+#define __INC_HW_IMG_H\r
+\r
+//\r
+// 2011/03/15 MH Add for different IC HW image file selection. code size consideration.\r
+//\r
+#if RT_PLATFORM == PLATFORM_LINUX\r
+\r
+       #if (DEV_BUS_TYPE == RT_PCI_INTERFACE)\r
+       // For 92C\r
+       #define         RTL8192CE_HWIMG_SUPPORT                                 1\r
+       #define         RTL8192CE_TEST_HWIMG_SUPPORT                    0\r
+       #define         RTL8192CU_HWIMG_SUPPORT                                 0\r
+       #define         RTL8192CU_TEST_HWIMG_SUPPORT                    0\r
+\r
+       // For 92D\r
+       #define         RTL8192DE_HWIMG_SUPPORT                                 1\r
+       #define         RTL8192DE_TEST_HWIMG_SUPPORT                    0\r
+       #define         RTL8192DU_HWIMG_SUPPORT                                 0\r
+       #define         RTL8192DU_TEST_HWIMG_SUPPORT                    0\r
+\r
+       // For 8723\r
+       #define         RTL8723E_HWIMG_SUPPORT                                  1\r
+       #define         RTL8723U_HWIMG_SUPPORT                                  0\r
+       #define         RTL8723S_HWIMG_SUPPORT                                  0\r
+\r
+       //For 88E\r
+       #define         RTL8188EE_HWIMG_SUPPORT                                 0\r
+       #define         RTL8188EU_HWIMG_SUPPORT                                 0\r
+       #define         RTL8188ES_HWIMG_SUPPORT                                 0\r
+       \r
+       #elif (DEV_BUS_TYPE == RT_USB_INTERFACE)\r
+       // For 92C\r
+       #define         RTL8192CE_HWIMG_SUPPORT                                 0\r
+       #define         RTL8192CE_TEST_HWIMG_SUPPORT                    0\r
+       #define         RTL8192CU_HWIMG_SUPPORT                                 1\r
+       #define         RTL8192CU_TEST_HWIMG_SUPPORT                    0\r
+\r
+       //For 92D\r
+       #define         RTL8192DE_HWIMG_SUPPORT                                 0\r
+       #define         RTL8192DE_TEST_HWIMG_SUPPORT                    0\r
+       #define         RTL8192DU_HWIMG_SUPPORT                                 1\r
+       #define         RTL8192DU_TEST_HWIMG_SUPPORT                    0\r
+\r
+       // For 8723\r
+       #define         RTL8723E_HWIMG_SUPPORT                                  0\r
+       #define         RTL8723U_HWIMG_SUPPORT                                  1\r
+       #define         RTL8723S_HWIMG_SUPPORT                                  0\r
+\r
+       //For 88E\r
+       #define         RTL8188EE_HWIMG_SUPPORT                                 0\r
+       #define         RTL8188EU_HWIMG_SUPPORT                                 0\r
+       #define         RTL8188ES_HWIMG_SUPPORT                                 0\r
+       \r
+       #elif (DEV_BUS_TYPE == RT_SDIO_INTERFACE)\r
+       // For 92C\r
+       #define         RTL8192CE_HWIMG_SUPPORT                                 0\r
+       #define         RTL8192CE_TEST_HWIMG_SUPPORT                    0\r
+       #define         RTL8192CU_HWIMG_SUPPORT                                 1\r
+       #define         RTL8192CU_TEST_HWIMG_SUPPORT                    0\r
+\r
+       //For 92D\r
+       #define         RTL8192DE_HWIMG_SUPPORT                                 0\r
+       #define         RTL8192DE_TEST_HWIMG_SUPPORT                    0\r
+       #define         RTL8192DU_HWIMG_SUPPORT                                 1\r
+       #define         RTL8192DU_TEST_HWIMG_SUPPORT                    0\r
+\r
+       // For 8723\r
+       #define         RTL8723E_HWIMG_SUPPORT                                  0\r
+       #define         RTL8723U_HWIMG_SUPPORT                                  0\r
+       #define         RTL8723S_HWIMG_SUPPORT                                  1\r
+\r
+       //For 88E\r
+       #define         RTL8188EE_HWIMG_SUPPORT                                 0\r
+       #define         RTL8188EU_HWIMG_SUPPORT                                 0\r
+       #define         RTL8188ES_HWIMG_SUPPORT                                 0\r
+       #endif\r
+\r
+#else  // PLATFORM_WINDOWS & MacOSX\r
+\r
+//For 92C\r
+#define                RTL8192CE_HWIMG_SUPPORT                                         1\r
+#define                RTL8192CE_TEST_HWIMG_SUPPORT                            1\r
+#define                RTL8192CU_HWIMG_SUPPORT                                         1\r
+#define                RTL8192CU_TEST_HWIMG_SUPPORT                            1\r
+\r
+// For 92D\r
+#define                RTL8192DE_HWIMG_SUPPORT                                 1\r
+#define                RTL8192DE_TEST_HWIMG_SUPPORT                            1\r
+#define                RTL8192DU_HWIMG_SUPPORT                                 1\r
+#define                RTL8192DU_TEST_HWIMG_SUPPORT                            1\r
+\r
+       #if defined(UNDER_CE)\r
+       // For 8723\r
+       #define         RTL8723E_HWIMG_SUPPORT                                  0\r
+       #define         RTL8723U_HWIMG_SUPPORT                                  0\r
+       #define         RTL8723S_HWIMG_SUPPORT                                  1\r
+\r
+       // For 88E\r
+       #define         RTL8188EE_HWIMG_SUPPORT                                 0\r
+       #define         RTL8188EU_HWIMG_SUPPORT                                 0\r
+       #define         RTL8188ES_HWIMG_SUPPORT                                 0\r
+\r
+       #else \r
+\r
+       // For 8723\r
+       #define         RTL8723E_HWIMG_SUPPORT                                  1\r
+       //#define               RTL_8723E_TEST_HWIMG_SUPPORT                    1\r
+       #define         RTL8723U_HWIMG_SUPPORT                                  1\r
+       //#define               RTL_8723U_TEST_HWIMG_SUPPORT                    1\r
+       #define         RTL8723S_HWIMG_SUPPORT                                  1\r
+       //#define               RTL_8723S_TEST_HWIMG_SUPPORT                    1\r
+\r
+       //For 88E\r
+       #define         RTL8188EE_HWIMG_SUPPORT                                 1\r
+       #define         RTL8188EU_HWIMG_SUPPORT                                 1\r
+       #define         RTL8188ES_HWIMG_SUPPORT                                 1\r
+       #endif\r
+\r
+#endif\r
+\r
+#endif //__INC_HW_IMG_H\r
index 3070e792b9f1008f5992025ea71914fa0ccaf881..caacff139be996ab71ff2f5df4d8140e61f48f9a 100755 (executable)
                                                        _offset = _size-1;\
                                        } while(0)
 
                                                        _offset = _size-1;\
                                        } while(0)
 
+#if (RTL8192C_SUPPORT||RTL8192D_SUPPORT||RTL8723A_SUPPORT)
+void phydm_txpwrtrack_setpwr_dummy(
+       PDM_ODM_T                       pDM_Odm,
+       PWRTRACK_METHOD         Method,
+       u1Byte                          RFPath,
+       u1Byte                          ChannelMappedIndex
+       )
+{};
+
+void doiqk_dummy(
+       PDM_ODM_T       pDM_Odm,
+       u1Byte          DeltaThermalIndex,
+       u1Byte          ThermalValue,   
+       u1Byte          Threshold
+       )
+{};
+
+VOID phy_lccalibrate_dummy(
+       IN PDM_ODM_T            pDM_Odm
+       )
+{};
+
+VOID get_delta_swing_table_dummy(
+       IN      PDM_ODM_T                       pDM_Odm,
+       OUT pu1Byte                     *TemperatureUP_A,
+       OUT pu1Byte                     *TemperatureDOWN_A,
+       OUT pu1Byte                     *TemperatureUP_B,
+       OUT pu1Byte                     *TemperatureDOWN_B      
+       )
+{};
+
+void configure_txpower_track_dummy(
+       PTXPWRTRACK_CFG pConfig
+       )
+{
+
+       pConfig->ODM_TxPwrTrackSetPwr = phydm_txpwrtrack_setpwr_dummy;
+       pConfig->DoIQK = doiqk_dummy;
+       pConfig->PHY_LCCalibrate = phy_lccalibrate_dummy;
+       pConfig->GetDeltaSwingTable = get_delta_swing_table_dummy;
+}
+#endif
 
 void ConfigureTxpowerTrack(
        IN      PDM_ODM_T               pDM_Odm,
        OUT     PTXPWRTRACK_CFG pConfig
        )
 {
 
 void ConfigureTxpowerTrack(
        IN      PDM_ODM_T               pDM_Odm,
        OUT     PTXPWRTRACK_CFG pConfig
        )
 {
+
+#if RTL8192C_SUPPORT
+       if(pDM_Odm->SupportICType==ODM_RTL8192C)
+               configure_txpower_track_dummy(pConfig);
+#endif
+
+#if RTL8192D_SUPPORT
+       if(pDM_Odm->SupportICType==ODM_RTL8192D)
+               configure_txpower_track_dummy(pConfig);
+#endif
+
+#if RTL8723A_SUPPORT
+       if(pDM_Odm->SupportICType==ODM_RTL8723A)
+               configure_txpower_track_dummy(pConfig);
+#endif
+
 #if RTL8192E_SUPPORT
        if(pDM_Odm->SupportICType==ODM_RTL8192E)
                ConfigureTxpowerTrack_8192E(pConfig);
 #if RTL8192E_SUPPORT
        if(pDM_Odm->SupportICType==ODM_RTL8192E)
                ConfigureTxpowerTrack_8192E(pConfig);
@@ -65,6 +123,11 @@ void ConfigureTxpowerTrack(
                ConfigureTxpowerTrack_8723B(pConfig);
 #endif
 
                ConfigureTxpowerTrack_8723B(pConfig);
 #endif
 
+#if RTL8814A_SUPPORT
+       if (pDM_Odm->SupportICType == ODM_RTL8814A)
+               ConfigureTxpowerTrack_8814A(pConfig);
+#endif
+
 }
 
 //======================================================================
 }
 
 //======================================================================
@@ -82,32 +145,36 @@ ODM_ClearTxPowerTrackingState(
 {
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(pDM_Odm->Adapter);
        u1Byte                  p = 0;
 {
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(pDM_Odm->Adapter);
        u1Byte                  p = 0;
+       PODM_RF_CAL_T   pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
        
        
-       pDM_Odm->BbSwingIdxCckBase = pDM_Odm->DefaultCckIndex;
-       pDM_Odm->BbSwingIdxCck = pDM_Odm->DefaultCckIndex;
+       pRFCalibrateInfo->BbSwingIdxCckBase = pRFCalibrateInfo->DefaultCckIndex;
+       pRFCalibrateInfo->BbSwingIdxCck = pRFCalibrateInfo->DefaultCckIndex;
        pDM_Odm->RFCalibrateInfo.CCK_index = 0;
        
        for (p = ODM_RF_PATH_A; p < MAX_RF_PATH; ++p)
        {
        pDM_Odm->RFCalibrateInfo.CCK_index = 0;
        
        for (p = ODM_RF_PATH_A; p < MAX_RF_PATH; ++p)
        {
-               pDM_Odm->BbSwingIdxOfdmBase[p] = pDM_Odm->DefaultOfdmIndex;
-               pDM_Odm->BbSwingIdxOfdm[p] = pDM_Odm->DefaultOfdmIndex;
-               pDM_Odm->RFCalibrateInfo.OFDM_index[p] = pDM_Odm->DefaultOfdmIndex;
-
-               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
-               pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = 0;
-               pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p] = 0;
-               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
-
-               pDM_Odm->Absolute_OFDMSwingIdx[p] = 0;    // Initial Mix mode power tracking
-               pDM_Odm->Remnant_OFDMSwingIdx[p] = 0;                     
+               pRFCalibrateInfo->BbSwingIdxOfdmBase[p] = pRFCalibrateInfo->DefaultOfdmIndex;
+               pRFCalibrateInfo->BbSwingIdxOfdm[p] = pRFCalibrateInfo->DefaultOfdmIndex;
+               pRFCalibrateInfo->OFDM_index[p] = pRFCalibrateInfo->DefaultOfdmIndex;
+
+               pRFCalibrateInfo->PowerIndexOffset[p] = 0;
+               pRFCalibrateInfo->DeltaPowerIndex[p] = 0;
+               pRFCalibrateInfo->DeltaPowerIndexLast[p] = 0;
+               pRFCalibrateInfo->PowerIndexOffset[p] = 0;
+
+               pRFCalibrateInfo->Absolute_OFDMSwingIdx[p] = 0;    /* Initial Mix mode power tracking*/
+               pRFCalibrateInfo->Remnant_OFDMSwingIdx[p] = 0;                    
+               pRFCalibrateInfo->KfreeOffset[p] = 0;
        }
        
        }
        
-       pDM_Odm->Modify_TxAGC_Flag_PathA= FALSE;       //Initial at Modify Tx Scaling Mode
-       pDM_Odm->Modify_TxAGC_Flag_PathB= FALSE;       //Initial at Modify Tx Scaling Mode
-       pDM_Odm->Remnant_CCKSwingIdx= 0;
-       pDM_Odm->RFCalibrateInfo.ThermalValue = pHalData->EEPROMThermalMeter;
-       pDM_Odm->RFCalibrateInfo.ThermalValue_IQK = pHalData->EEPROMThermalMeter;
-       pDM_Odm->RFCalibrateInfo.ThermalValue_LCK = pHalData->EEPROMThermalMeter;       
+       pRFCalibrateInfo->Modify_TxAGC_Flag_PathA = FALSE;       /*Initial at Modify Tx Scaling Mode*/
+       pRFCalibrateInfo->Modify_TxAGC_Flag_PathB = FALSE;       /*Initial at Modify Tx Scaling Mode*/
+       pRFCalibrateInfo->Modify_TxAGC_Flag_PathC = FALSE;       /*Initial at Modify Tx Scaling Mode*/
+       pRFCalibrateInfo->Modify_TxAGC_Flag_PathD = FALSE;       /*Initial at Modify Tx Scaling Mode*/
+       pRFCalibrateInfo->Remnant_CCKSwingIdx = 0;
+       pRFCalibrateInfo->ThermalValue = pHalData->EEPROMThermalMeter;
+       pRFCalibrateInfo->ThermalValue_IQK = pHalData->EEPROMThermalMeter;
+       pRFCalibrateInfo->ThermalValue_LCK = pHalData->EEPROMThermalMeter;      
 }
 
 VOID
 }
 
 VOID
@@ -128,22 +195,29 @@ ODM_TXPowerTrackingCallback_ThermalMeter(
        PDM_ODM_T               pDM_Odm = &pHalData->odmpriv;
        #endif
 #endif
        PDM_ODM_T               pDM_Odm = &pHalData->odmpriv;
        #endif
 #endif
-       
+       PODM_RF_CAL_T   pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
+
        u1Byte                  ThermalValue = 0, delta, delta_LCK, delta_IQK, p = 0, i = 0;
        u1Byte                  ThermalValue = 0, delta, delta_LCK, delta_IQK, p = 0, i = 0;
+       s1Byte                  diff_DPK[4] = {0};
        u1Byte                  ThermalValue_AVG_count = 0;
        u4Byte                  ThermalValue_AVG = 0;   
 
        u1Byte                  OFDM_min_index = 0;  // OFDM BB Swing should be less than +3.0dB, which is required by Arthur
        u1Byte                  Indexforchannel = 0; // GetRightChnlPlaceforIQK(pHalData->CurrentChannel)
        u1Byte                  ThermalValue_AVG_count = 0;
        u4Byte                  ThermalValue_AVG = 0;   
 
        u1Byte                  OFDM_min_index = 0;  // OFDM BB Swing should be less than +3.0dB, which is required by Arthur
        u1Byte                  Indexforchannel = 0; // GetRightChnlPlaceforIQK(pHalData->CurrentChannel)
+       BOOLEAN                 bTSSIenable = FALSE;
 
        TXPWRTRACK_CFG  c;
 
 
        TXPWRTRACK_CFG  c;
 
-
        //4 1. The following TWO tables decide the final index of OFDM/CCK swing table.
        pu1Byte                 deltaSwingTableIdx_TUP_A;
        pu1Byte                 deltaSwingTableIdx_TDOWN_A;
        pu1Byte                 deltaSwingTableIdx_TUP_B;
        pu1Byte                 deltaSwingTableIdx_TDOWN_B;
        //4 1. The following TWO tables decide the final index of OFDM/CCK swing table.
        pu1Byte                 deltaSwingTableIdx_TUP_A;
        pu1Byte                 deltaSwingTableIdx_TDOWN_A;
        pu1Byte                 deltaSwingTableIdx_TUP_B;
        pu1Byte                 deltaSwingTableIdx_TDOWN_B;
+       /*for 8814 add by Yu Chen*/
+       pu1Byte                 deltaSwingTableIdx_TUP_C;
+       pu1Byte                 deltaSwingTableIdx_TDOWN_C;
+       pu1Byte                 deltaSwingTableIdx_TUP_D;
+       pu1Byte                 deltaSwingTableIdx_TDOWN_D;
        
        //4 2. Initilization ( 7 steps in total )
 
        
        //4 2. Initilization ( 7 steps in total )
 
@@ -152,6 +226,11 @@ ODM_TXPowerTrackingCallback_ThermalMeter(
        (*c.GetDeltaSwingTable)(pDM_Odm, (pu1Byte*)&deltaSwingTableIdx_TUP_A, (pu1Byte*)&deltaSwingTableIdx_TDOWN_A,
                                                                          (pu1Byte*)&deltaSwingTableIdx_TUP_B, (pu1Byte*)&deltaSwingTableIdx_TDOWN_B);  
        
        (*c.GetDeltaSwingTable)(pDM_Odm, (pu1Byte*)&deltaSwingTableIdx_TUP_A, (pu1Byte*)&deltaSwingTableIdx_TDOWN_A,
                                                                          (pu1Byte*)&deltaSwingTableIdx_TUP_B, (pu1Byte*)&deltaSwingTableIdx_TDOWN_B);  
        
+       if (pDM_Odm->SupportICType & ODM_RTL8814A)      /*for 8814 path C & D*/
+               (*c.GetDeltaSwingTable8814only)(pDM_Odm, (pu1Byte *)&deltaSwingTableIdx_TUP_C, (pu1Byte *)&deltaSwingTableIdx_TDOWN_C,
+                       (pu1Byte *)&deltaSwingTableIdx_TUP_D, (pu1Byte *)&deltaSwingTableIdx_TDOWN_D);
+       
+       
        pDM_Odm->RFCalibrateInfo.TXPowerTrackingCallbackCnt++; //cosa add for debug
        pDM_Odm->RFCalibrateInfo.bTXPowerTrackingInit = TRUE;
     
        pDM_Odm->RFCalibrateInfo.TXPowerTrackingCallbackCnt++; //cosa add for debug
        pDM_Odm->RFCalibrateInfo.bTXPowerTrackingInit = TRUE;
     
@@ -167,15 +246,16 @@ ODM_TXPowerTrackingCallback_ThermalMeter(
                pDM_Odm->RFCalibrateInfo.RegA24 = 0x090e1317;
 #endif
 
                pDM_Odm->RFCalibrateInfo.RegA24 = 0x090e1317;
 #endif
 
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-               ("===>ODM_TXPowerTrackingCallback_ThermalMeter, \
-                \n pDM_Odm->BbSwingIdxCckBase: %d, pDM_Odm->BbSwingIdxOfdmBase[A]: %d, pDM_Odm->DefaultOfdmIndex: %d\n", 
-               pDM_Odm->BbSwingIdxCckBase, pDM_Odm->BbSwingIdxOfdmBase[ODM_RF_PATH_A], pDM_Odm->DefaultOfdmIndex));
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, 
+               ("===>ODM_TXPowerTrackingCallback_ThermalMeter Start\n pRFCalibrateInfo->BbSwingIdxCckBase: %d, pRFCalibrateInfo->BbSwingIdxOfdmBase[A]: %d, pRFCalibrateInfo->DefaultOfdmIndex: %d\n", 
+               pRFCalibrateInfo->BbSwingIdxCckBase, pRFCalibrateInfo->BbSwingIdxOfdmBase[ODM_RF_PATH_A], pRFCalibrateInfo->DefaultOfdmIndex));
 
 
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, 
+               ("pDM_Odm->RFCalibrateInfo.TxPowerTrackControl %d,  pHalData->EEPROMThermalMeter %d\n", pDM_Odm->RFCalibrateInfo.TxPowerTrackControl,  pHalData->EEPROMThermalMeter));
        ThermalValue = (u1Byte)ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, c.ThermalRegAddr, 0xfc00);  //0x42: RF Reg[15:10] 88E
        if( ! pDM_Odm->RFCalibrateInfo.TxPowerTrackControl || pHalData->EEPROMThermalMeter == 0 || 
                pHalData->EEPROMThermalMeter == 0xFF)
        ThermalValue = (u1Byte)ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, c.ThermalRegAddr, 0xfc00);  //0x42: RF Reg[15:10] 88E
        if( ! pDM_Odm->RFCalibrateInfo.TxPowerTrackControl || pHalData->EEPROMThermalMeter == 0 || 
                pHalData->EEPROMThermalMeter == 0xFF)
-        return;
+               return;
 
 
        //4 3. Initialize ThermalValues of RFCalibrateInfo
 
 
        //4 3. Initialize ThermalValues of RFCalibrateInfo
@@ -215,7 +295,27 @@ ODM_TXPowerTrackingCallback_ThermalMeter(
        delta_LCK = (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue_LCK)?(ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue_LCK):(pDM_Odm->RFCalibrateInfo.ThermalValue_LCK - ThermalValue);
        delta_IQK = (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue_IQK)?(ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue_IQK):(pDM_Odm->RFCalibrateInfo.ThermalValue_IQK - ThermalValue);
 
        delta_LCK = (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue_LCK)?(ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue_LCK):(pDM_Odm->RFCalibrateInfo.ThermalValue_LCK - ThermalValue);
        delta_IQK = (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue_IQK)?(ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue_IQK):(pDM_Odm->RFCalibrateInfo.ThermalValue_IQK - ThermalValue);
 
+       if (pDM_Odm->RFCalibrateInfo.ThermalValue_IQK == 0xff) {        /*no PG, use thermal value for IQK*/
+               pDM_Odm->RFCalibrateInfo.ThermalValue_IQK = ThermalValue;
+               delta_IQK = (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue_IQK)?(ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue_IQK):(pDM_Odm->RFCalibrateInfo.ThermalValue_IQK - ThermalValue);
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("no PG, use ThermalValue for IQK\n"));
+       }
+       
+       for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
+               diff_DPK[p] = (s1Byte)ThermalValue - (s1Byte)pDM_Odm->RFCalibrateInfo.DpkThermal[p];
+
+       /*4 6. If necessary, do LCK.*/  
+
+       if (pDM_Odm->RFCalibrateInfo.ThermalValue_LCK == 0xff) {                /*no PG , do LCK at initial status*/
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("no PG, do LCK\n"));
+               pDM_Odm->RFCalibrateInfo.ThermalValue_LCK = ThermalValue;
+               if (c.PHY_LCCalibrate)
+                       (*c.PHY_LCCalibrate)(pDM_Odm);
+               delta_LCK = (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue_LCK)?(ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue_LCK):(pDM_Odm->RFCalibrateInfo.ThermalValue_LCK - ThermalValue);
+       }
+
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("(delta, delta_LCK, delta_IQK) = (%d, %d, %d)\n", delta, delta_LCK, delta_IQK));
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("(delta, delta_LCK, delta_IQK) = (%d, %d, %d)\n", delta, delta_LCK, delta_IQK));
+       /*DBG_871X("(delta, delta_LCK, delta_IQK) = (%d, %d, %d), %d\n", delta, delta_LCK, delta_IQK, c.Threshold_IQK);*/
        
        //4 6. If necessary, do LCK.    
        
        
        //4 6. If necessary, do LCK.    
        
@@ -247,83 +347,125 @@ ODM_TXPowerTrackingCallback_ThermalMeter(
 #else
                if(ThermalValue > pDM_Odm->priv->pmib->dot11RFEntry.ther) {
 #endif
 #else
                if(ThermalValue > pDM_Odm->priv->pmib->dot11RFEntry.ther) {
 #endif
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-                ("deltaSwingTableIdx_TUP_A[%d] = %d\n", delta, deltaSwingTableIdx_TUP_A[delta]));
-                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[ODM_RF_PATH_A] = pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_A];
-                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_A] = deltaSwingTableIdx_TUP_A[delta];
+                       for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)  {
+                               pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p] = pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p];  /* recording power index offset */
+                               switch (p) {
+                               case ODM_RF_PATH_B:
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("deltaSwingTableIdx_TUP_B[%d] = %d\n", delta, deltaSwingTableIdx_TUP_B[delta])); 
 
 
-                       pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] =  deltaSwingTableIdx_TUP_A[delta];        // Record delta swing for mix mode power tracking
+                                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = deltaSwingTableIdx_TUP_B[delta];
+                                       pRFCalibrateInfo->Absolute_OFDMSwingIdx[p] = deltaSwingTableIdx_TUP_B[delta];       /* Record delta swing for mix mode power tracking */
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("******Temp is higher and pRFCalibrateInfo->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] = %d\n", pRFCalibrateInfo->Absolute_OFDMSwingIdx[p]));  
 
 
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("******Temp is higher and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] = %d\n", pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A]));  
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("******Temp is higher and pRFCalibrateInfo->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] = %d\n", pRFCalibrateInfo->Absolute_OFDMSwingIdx[ODM_RF_PATH_A]));  
 
 
-                       if(c.RfPathCount > 1)
-                       {
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-                                            ("deltaSwingTableIdx_TUP_B[%d] = %d\n", delta, deltaSwingTableIdx_TUP_B[delta]));  
-                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[ODM_RF_PATH_B] = pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_B];
-                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_B] = deltaSwingTableIdx_TUP_B[delta];
 
 
-                       pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] =  deltaSwingTableIdx_TUP_B[delta];       // Record delta swing for mix mode power tracking
+                               break;
 
 
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("******Temp is higher and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] = %d\n", pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B]));  
-                       }
+                               case ODM_RF_PATH_C:
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("deltaSwingTableIdx_TUP_C[%d] = %d\n", delta, deltaSwingTableIdx_TUP_C[delta]));
                        
                        
-        } 
-               else {
+                                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = deltaSwingTableIdx_TUP_C[delta];
+                                       pRFCalibrateInfo->Absolute_OFDMSwingIdx[p] =  deltaSwingTableIdx_TUP_C[delta];       /* Record delta swing for mix mode power tracking */
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("******Temp is higher and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_C] = %d\n", pRFCalibrateInfo->Absolute_OFDMSwingIdx[p]));  
+                               break;
+
+                               case ODM_RF_PATH_D:
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("deltaSwingTableIdx_TUP_D[%d] = %d\n", delta, deltaSwingTableIdx_TUP_D[delta]));
+
+                                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = deltaSwingTableIdx_TUP_D[delta];
+                                       pRFCalibrateInfo->Absolute_OFDMSwingIdx[p] =  deltaSwingTableIdx_TUP_D[delta];       /* Record delta swing for mix mode power tracking */
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("******Temp is higher and pRFCalibrateInfo->Absolute_OFDMSwingIdx[ODM_RF_PATH_D] = %d\n", pRFCalibrateInfo->Absolute_OFDMSwingIdx[p]));  
+                               break;
+
+                               default:
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, 
+                                               ("deltaSwingTableIdx_TUP_A[%d] = %d\n", delta, deltaSwingTableIdx_TUP_A[delta]));
+
+                                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = deltaSwingTableIdx_TUP_A[delta];
+                                       pRFCalibrateInfo->Absolute_OFDMSwingIdx[p] = deltaSwingTableIdx_TUP_A[delta];        /* Record delta swing for mix mode power tracking */
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("******Temp is higher and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] = %d\n", pRFCalibrateInfo->Absolute_OFDMSwingIdx[p]));
+                               break;
+                               }               
+                       }
+               } else {
+                       for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++) {
+                               pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p] = pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p];  /* recording poer index offset */
+                               switch (p) {
+                               case ODM_RF_PATH_B:
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("deltaSwingTableIdx_TDOWN_B[%d] = %d\n", delta, deltaSwingTableIdx_TDOWN_B[delta]));  
+                                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = -1 * deltaSwingTableIdx_TDOWN_B[delta];
+                                       pRFCalibrateInfo->Absolute_OFDMSwingIdx[p] = -1 * deltaSwingTableIdx_TDOWN_B[delta];        /* Record delta swing for mix mode power tracking */
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("******Temp is lower and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] = %d\n", pRFCalibrateInfo->Absolute_OFDMSwingIdx[p])); 
+                               break;
+                                       
+                               case ODM_RF_PATH_C:
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("deltaSwingTableIdx_TDOWN_C[%d] = %d\n", delta, deltaSwingTableIdx_TDOWN_C[delta]));  
+                                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = -1 * deltaSwingTableIdx_TDOWN_C[delta];
+                                       pRFCalibrateInfo->Absolute_OFDMSwingIdx[p] = -1 * deltaSwingTableIdx_TDOWN_C[delta];        /* Record delta swing for mix mode power tracking */
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("******Temp is lower and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_C] = %d\n", pRFCalibrateInfo->Absolute_OFDMSwingIdx[p]));   
+                               break;
+
+                               case ODM_RF_PATH_D:
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("deltaSwingTableIdx_TDOWN_D[%d] = %d\n", delta, deltaSwingTableIdx_TDOWN_D[delta]));  
+                                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = -1 * deltaSwingTableIdx_TDOWN_D[delta];
+                                       pRFCalibrateInfo->Absolute_OFDMSwingIdx[p] =  -1 * deltaSwingTableIdx_TDOWN_D[delta];        /* Record delta swing for mix mode power tracking */
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("******Temp is lower and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_D] = %d\n", pRFCalibrateInfo->Absolute_OFDMSwingIdx[p]));  
+                               break;
+
+                               default:
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("deltaSwingTableIdx_TDOWN_A[%d] = %d\n", delta, deltaSwingTableIdx_TDOWN_A[delta]));  
+                                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = -1 * deltaSwingTableIdx_TDOWN_A[delta];
+                                       pRFCalibrateInfo->Absolute_OFDMSwingIdx[p] =  -1 * deltaSwingTableIdx_TDOWN_A[delta];        /* Record delta swing for mix mode power tracking */
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                               ("******Temp is lower and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] = %d\n", pRFCalibrateInfo->Absolute_OFDMSwingIdx[p]));  
+                               break;
+                               }       
+                       }
+               }
+               
+               for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++) {
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-                               ("deltaSwingTableIdx_TDOWN_A[%d] = %d\n", delta, deltaSwingTableIdx_TDOWN_A[delta]));  
-
-                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[ODM_RF_PATH_A] = pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_A];
-                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_A] = -1 * deltaSwingTableIdx_TDOWN_A[delta];
-
-                       pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] =  -1 * deltaSwingTableIdx_TDOWN_A[delta];        // Record delta swing for mix mode power tracking
-
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("******Temp is lower and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] = %d\n", pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A]));  
+                       ("\n\n=========================== [Path-%d] Calculating PowerIndexOffset===========================\n", p));  
+                       if (pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] == pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p])         /* If Thermal value changes but lookup table value still the same */
+                               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
+                       else
+                               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] - pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p];      /* Power Index Diff between 2 times Power Tracking */
 
 
-                               if(c.RfPathCount > 1)
-                               {
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-                               ("deltaSwingTableIdx_TDOWN_B[%d] = %d\n", delta, deltaSwingTableIdx_TDOWN_B[delta]));  
-                                       
-                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[ODM_RF_PATH_B] = pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_B];
-                       pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_B] = -1 * deltaSwingTableIdx_TDOWN_B[delta];
+                               ("[Path-%d] PowerIndexOffset(%d) = DeltaPowerIndex(%d) - DeltaPowerIndexLast(%d)\n", p, pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p], pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p], pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p]));           
+               
+                       pDM_Odm->RFCalibrateInfo.OFDM_index[p] = pRFCalibrateInfo->BbSwingIdxOfdmBase[p] + pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p];
+                       pDM_Odm->RFCalibrateInfo.CCK_index = pRFCalibrateInfo->BbSwingIdxCckBase + pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p];
 
 
-                       pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] =  -1 * deltaSwingTableIdx_TDOWN_B[delta];       // Record delta swing for mix mode power tracking
+                       pRFCalibrateInfo->BbSwingIdxCck = pDM_Odm->RFCalibrateInfo.CCK_index;   
+                       pRFCalibrateInfo->BbSwingIdxOfdm[p] = pDM_Odm->RFCalibrateInfo.OFDM_index[p];
 
 
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("******Temp is lower and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] = %d\n", pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B]));  
-        }
-        }
-               
-           for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)             
-        {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-                ("\n\n================================ [Path-%c] Calculating PowerIndexOffset ================================\n", (p == ODM_RF_PATH_A ? 'A' : 'B')));  
-                       
-                   if (pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] == pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p])         // If Thermal value changes but lookup table value still the same
-                       pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
-                   else
-                       pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] - pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p];      // Power Index Diff between 2 times Power Tracking
-
-                   ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("[Path-%c] PowerIndexOffset(%d) = DeltaPowerIndex(%d) - DeltaPowerIndexLast(%d)\n", 
-                (p == ODM_RF_PATH_A ? 'A' : 'B'), pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p], pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p], 
-                pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p]));             
-               
-               pDM_Odm->RFCalibrateInfo.OFDM_index[p] = pDM_Odm->BbSwingIdxOfdmBase[p] + pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p];
-                   pDM_Odm->RFCalibrateInfo.CCK_index = pDM_Odm->BbSwingIdxCckBase + pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p];
 
 
-                   pDM_Odm->BbSwingIdxCck = pDM_Odm->RFCalibrateInfo.CCK_index;        
-                       pDM_Odm->BbSwingIdxOfdm[p] = pDM_Odm->RFCalibrateInfo.OFDM_index[p];
 
 
-                       // *************Print BB Swing Base and Index Offset*************
+                       /* *************Print BB Swing Base and Index Offset************* */
 
 
-                   ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("The 'CCK' final index(%d) = BaseIndex(%d) + PowerIndexOffset(%d)\n", 
-                       pDM_Odm->BbSwingIdxCck, pDM_Odm->BbSwingIdxCckBase, pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p]));
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("The 'OFDM' final index(%d) = BaseIndex[%c](%d) + PowerIndexOffset(%d)\n", 
-                               pDM_Odm->BbSwingIdxOfdm[p], (p == ODM_RF_PATH_A ? 'A' : 'B'), pDM_Odm->BbSwingIdxOfdmBase[p], pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p]));
+                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                               ("The 'CCK' final index(%d) = BaseIndex(%d) + PowerIndexOffset(%d)\n", pRFCalibrateInfo->BbSwingIdxCck, pRFCalibrateInfo->BbSwingIdxCckBase, pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p]));
+                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                               ("The 'OFDM' final index(%d) = BaseIndex[%d](%d) + PowerIndexOffset(%d)\n", pRFCalibrateInfo->BbSwingIdxOfdm[p], p, pRFCalibrateInfo->BbSwingIdxOfdmBase[p], pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p]));
 
                    //4 7.1 Handle boundary conditions of index.
                
 
                    //4 7.1 Handle boundary conditions of index.
                
-               
                        if(pDM_Odm->RFCalibrateInfo.OFDM_index[p] > c.SwingTableSize_OFDM-1)
                        {
                                pDM_Odm->RFCalibrateInfo.OFDM_index[p] = c.SwingTableSize_OFDM-1;
                        if(pDM_Odm->RFCalibrateInfo.OFDM_index[p] > c.SwingTableSize_OFDM-1)
                        {
                                pDM_Odm->RFCalibrateInfo.OFDM_index[p] = c.SwingTableSize_OFDM-1;
@@ -333,35 +475,38 @@ ODM_TXPowerTrackingCallback_ThermalMeter(
                                pDM_Odm->RFCalibrateInfo.OFDM_index[p] = OFDM_min_index;
                        }
                }
                                pDM_Odm->RFCalibrateInfo.OFDM_index[p] = OFDM_min_index;
                        }
                }
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-            ("\n\n========================================================================================================\n"));  
+               
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                       ("\n\n========================================================================================================\n"));  
                if(pDM_Odm->RFCalibrateInfo.CCK_index > c.SwingTableSize_CCK-1)
                        pDM_Odm->RFCalibrateInfo.CCK_index = c.SwingTableSize_CCK-1;
                if(pDM_Odm->RFCalibrateInfo.CCK_index > c.SwingTableSize_CCK-1)
                        pDM_Odm->RFCalibrateInfo.CCK_index = c.SwingTableSize_CCK-1;
-               //else if (pDM_Odm->RFCalibrateInfo.CCK_index < 0)
-                       //pDM_Odm->RFCalibrateInfo.CCK_index = 0;
-       }
-       else
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+               else if (pDM_Odm->RFCalibrateInfo.CCK_index <= 0)
+                       pDM_Odm->RFCalibrateInfo.CCK_index = 0;
+       } else {
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
                        ("The thermal meter is unchanged or TxPowerTracking OFF(%d): ThermalValue: %d , pDM_Odm->RFCalibrateInfo.ThermalValue: %d\n", 
                        pDM_Odm->RFCalibrateInfo.TxPowerTrackControl, ThermalValue, pDM_Odm->RFCalibrateInfo.ThermalValue));
                
            for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)             
                    pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
        }
                        ("The thermal meter is unchanged or TxPowerTracking OFF(%d): ThermalValue: %d , pDM_Odm->RFCalibrateInfo.ThermalValue: %d\n", 
                        pDM_Odm->RFCalibrateInfo.TxPowerTrackControl, ThermalValue, pDM_Odm->RFCalibrateInfo.ThermalValue));
                
            for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)             
                    pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
        }
+
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
                ("TxPowerTracking: [CCK] Swing Current Index: %d, Swing Base Index: %d\n", 
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
                ("TxPowerTracking: [CCK] Swing Current Index: %d, Swing Base Index: %d\n", 
-               pDM_Odm->RFCalibrateInfo.CCK_index, pDM_Odm->BbSwingIdxCckBase));       //Print Swing base & current
+               pDM_Odm->RFCalibrateInfo.CCK_index, pRFCalibrateInfo->BbSwingIdxCckBase));       /*Print Swing base & current*/
+                       
        for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
        {
        for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
        {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-                       ("TxPowerTracking: [OFDM] Swing Current Index: %d, Swing Base Index[%c]: %d\n",
-                       pDM_Odm->RFCalibrateInfo.OFDM_index[p], (p == ODM_RF_PATH_A ? 'A' : 'B'), pDM_Odm->BbSwingIdxOfdmBase[p]));
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                       ("TxPowerTracking: [OFDM] Swing Current Index: %d, Swing Base Index[%d]: %d\n",
+                       pDM_Odm->RFCalibrateInfo.OFDM_index[p], p, pRFCalibrateInfo->BbSwingIdxOfdmBase[p]));
        }
        
        if ((pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_A] != 0 ||
        }
        
        if ((pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_A] != 0 ||
-                pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_B] != 0 ) && 
-        pDM_Odm->RFCalibrateInfo.TxPowerTrackControl)
+               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_B] != 0 ||
+               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_C] != 0 ||
+               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_D] != 0) && 
+               pDM_Odm->RFCalibrateInfo.TxPowerTrackControl && (pHalData->EEPROMThermalMeter != 0xff))
        {
                //4 7.2 Configure the Swing Table to adjust Tx Power.
                
        {
                //4 7.2 Configure the Swing Table to adjust Tx Power.
                
@@ -373,100 +518,131 @@ ODM_TXPowerTrackingCallback_ThermalMeter(
                // 2012/04/25 MH Add for tx power tracking to set tx power in tx agc for 88E.
                if (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue)
                {
                // 2012/04/25 MH Add for tx power tracking to set tx power in tx agc for 88E.
                if (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue)
                {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-                               ("Temperature Increasing(A): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n", 
-                               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_A], delta, ThermalValue, pHalData->EEPROMThermalMeter, pDM_Odm->RFCalibrateInfo.ThermalValue));   
-
-                       if(c.RfPathCount > 1)
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-                               ("Temperature Increasing(B): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n", 
-                               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_B], delta, ThermalValue, pHalData->EEPROMThermalMeter, pDM_Odm->RFCalibrateInfo.ThermalValue));   
-
+                       for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++) {
+                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                       ("Temperature Increasing(%d): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n", 
+                                       p, pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p], delta, ThermalValue, pHalData->EEPROMThermalMeter, pDM_Odm->RFCalibrateInfo.ThermalValue));    
+                       }
                }
                else if (ThermalValue < pDM_Odm->RFCalibrateInfo.ThermalValue)// Low temperature
                {
                }
                else if (ThermalValue < pDM_Odm->RFCalibrateInfo.ThermalValue)// Low temperature
                {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-                               ("Temperature Decreasing(A): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n",
-                               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_A], delta, ThermalValue, pHalData->EEPROMThermalMeter, pDM_Odm->RFCalibrateInfo.ThermalValue));                           
-
-                       if(c.RfPathCount > 1)
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
-                               ("Temperature Decreasing(B): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n",
-                               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_B], delta, ThermalValue, pHalData->EEPROMThermalMeter, pDM_Odm->RFCalibrateInfo.ThermalValue));                           
-
+                       for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++) {
+                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                                       ("Temperature Decreasing(%d): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n",
+                                       p, pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p], delta, ThermalValue, pHalData->EEPROMThermalMeter, pDM_Odm->RFCalibrateInfo.ThermalValue));                            
+                       }
                }
                }
+
 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
                if (ThermalValue > pHalData->EEPROMThermalMeter)
 #else
                if (ThermalValue > pDM_Odm->priv->pmib->dot11RFEntry.ther)
 #endif
                {
 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
                if (ThermalValue > pHalData->EEPROMThermalMeter)
 #else
                if (ThermalValue > pDM_Odm->priv->pmib->dot11RFEntry.ther)
 #endif
                {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
                                ("Temperature(%d) higher than PG value(%d)\n", ThermalValue, pHalData->EEPROMThermalMeter));                    
 
                                ("Temperature(%d) higher than PG value(%d)\n", ThermalValue, pHalData->EEPROMThermalMeter));                    
 
-                       if (pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8192E || 
-                               pDM_Odm->SupportICType == ODM_RTL8821  || pDM_Odm->SupportICType == ODM_RTL8812  || pDM_Odm->SupportICType == ODM_RTL8723B)
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("**********Enter POWER Tracking MIX_MODE**********\n"));
+                       if (pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8821 ||
+                               pDM_Odm->SupportICType == ODM_RTL8812 || pDM_Odm->SupportICType == ODM_RTL8723B || pDM_Odm->SupportICType == ODM_RTL8814A || 
+                               pDM_Odm->SupportICType == ODM_RTL8822B) {
+                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("**********Enter POWER Tracking MIX_MODE**********\n"));
                                for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
                                                (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, MIX_MODE, p, 0);
                        }
                        else 
                        {
                                for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
                                                (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, MIX_MODE, p, 0);
                        }
                        else 
                        {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("**********Enter POWER Tracking BBSWING_MODE**********\n"));
+                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("**********Enter POWER Tracking BBSWING_MODE**********\n"));
                                for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
                                                (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, p, Indexforchannel);
                        }
                }
                else
                {
                                for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
                                                (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, p, Indexforchannel);
                        }
                }
                else
                {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
+                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
                                ("Temperature(%d) lower than PG value(%d)\n", ThermalValue, pHalData->EEPROMThermalMeter));
 
                                ("Temperature(%d) lower than PG value(%d)\n", ThermalValue, pHalData->EEPROMThermalMeter));
 
-                       if (pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8192E || 
-                               pDM_Odm->SupportICType == ODM_RTL8821  || pDM_Odm->SupportICType == ODM_RTL8812  || pDM_Odm->SupportICType == ODM_RTL8723B)
-                       {
-                   ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("**********Enter POWER Tracking MIX_MODE**********\n"));
+                       if (pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8821 ||
+                               pDM_Odm->SupportICType == ODM_RTL8812 || pDM_Odm->SupportICType == ODM_RTL8723B || pDM_Odm->SupportICType == ODM_RTL8814A ||
+                               pDM_Odm->SupportICType == ODM_RTL8822B) {
+
+                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("**********Enter POWER Tracking MIX_MODE**********\n"));
                                for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
                                        (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, MIX_MODE, p, Indexforchannel);
                        }
                        else
                        {
                                for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
                                        (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, MIX_MODE, p, Indexforchannel);
                        }
                        else
                        {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("**********Enter POWER Tracking BBSWING_MODE**********\n"));
+                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("**********Enter POWER Tracking BBSWING_MODE**********\n"));
                                for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
                                        (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, p, Indexforchannel);
                        }
                        
                }
 
                                for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
                                        (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, p, Indexforchannel);
                        }
                        
                }
 
-               pDM_Odm->BbSwingIdxCckBase = pDM_Odm->BbSwingIdxCck;   // Record last time Power Tracking result as base.
+               pRFCalibrateInfo->BbSwingIdxCckBase = pRFCalibrateInfo->BbSwingIdxCck;    /*Record last time Power Tracking result as base.*/
                for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
                for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
-                               pDM_Odm->BbSwingIdxOfdmBase[p] = pDM_Odm->BbSwingIdxOfdm[p];
+                               pRFCalibrateInfo->BbSwingIdxOfdmBase[p] = pRFCalibrateInfo->BbSwingIdxOfdm[p];
 
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
                                        ("pDM_Odm->RFCalibrateInfo.ThermalValue = %d ThermalValue= %d\n", pDM_Odm->RFCalibrateInfo.ThermalValue, ThermalValue));
                
 
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
                                        ("pDM_Odm->RFCalibrateInfo.ThermalValue = %d ThermalValue= %d\n", pDM_Odm->RFCalibrateInfo.ThermalValue, ThermalValue));
                
-               pDM_Odm->RFCalibrateInfo.ThermalValue = ThermalValue;         //Record last Power Tracking Thermal Value
+               pDM_Odm->RFCalibrateInfo.ThermalValue = ThermalValue;         /*Record last Power Tracking Thermal Value*/
 
        }
 
        }
+
 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
-#if (RTL8723B_SUPPORT == 0)
-       // Delta temperature is equal to or larger than 20 centigrade (When threshold is 8).
-       if ((delta_IQK >= c.Threshold_IQK)) {           
-               if ( ! pDM_Odm->RFCalibrateInfo.bIQKInProgress) 
-                       (*c.DoIQK)(pDM_Odm, delta_IQK, ThermalValue, 8);
+               
+       if (!IS_HARDWARE_TYPE_8723B(Adapter) && !IS_HARDWARE_TYPE_8192E(Adapter) && !IS_HARDWARE_TYPE_8703B(Adapter)) {
+               /* Delta temperature is equal to or larger than 20 centigrade (When threshold is 8).*/
+               if (delta_IQK >= c.Threshold_IQK) {
+                       if (!pDM_Odm->RFCalibrateInfo.bIQKInProgress) 
+                               (*c.DoIQK)(pDM_Odm, delta_IQK, ThermalValue, 8);
+               }
+       }       
+       if (!(pDM_Odm->SupportICType & ODM_RTL8814A)) {
+               if (pDM_Odm->RFCalibrateInfo.DpkThermal[ODM_RF_PATH_A] != 0) {
+                       if (diff_DPK[ODM_RF_PATH_A] >= c.Threshold_DPK) { 
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x1);
+                               ODM_SetBBReg(pDM_Odm, 0xcc4, BIT14|BIT13|BIT12|BIT11|BIT10, (diff_DPK[ODM_RF_PATH_A] / c.Threshold_DPK));
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x0);
+                       } else if ((diff_DPK[ODM_RF_PATH_A] <= -1 * c.Threshold_DPK)) {
+                               s4Byte value = 0x20 + (diff_DPK[ODM_RF_PATH_A] / c.Threshold_DPK);
+
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x1);
+                               ODM_SetBBReg(pDM_Odm, 0xcc4, BIT14|BIT13|BIT12|BIT11|BIT10, value);
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x0);
+                       } else {
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x1);
+                               ODM_SetBBReg(pDM_Odm, 0xcc4, BIT14|BIT13|BIT12|BIT11|BIT10, 0);
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x0);     
+                       }
+               }
+               if (pDM_Odm->RFCalibrateInfo.DpkThermal[ODM_RF_PATH_B] != 0) {
+                       if (diff_DPK[ODM_RF_PATH_B] >= c.Threshold_DPK) { 
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x1);
+                               ODM_SetBBReg(pDM_Odm, 0xec4, BIT14|BIT13|BIT12|BIT11|BIT10, (diff_DPK[ODM_RF_PATH_B] / c.Threshold_DPK));
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x0);
+                       } else if ((diff_DPK[ODM_RF_PATH_B] <= -1 * c.Threshold_DPK)) {
+                               s4Byte value = 0x20 + (diff_DPK[ODM_RF_PATH_B] / c.Threshold_DPK);      
+                               
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x1);
+                               ODM_SetBBReg(pDM_Odm, 0xec4, BIT14|BIT13|BIT12|BIT11|BIT10, value);
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x0);
+                       } else {
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x1);
+                               ODM_SetBBReg(pDM_Odm, 0xec4, BIT14|BIT13|BIT12|BIT11|BIT10, 0);
+                               ODM_SetBBReg(pDM_Odm, 0x82c, BIT(31), 0x0);     
+                       }
+               }
        }
        }
-#endif         
+
 #endif         
                        
 #endif         
                        
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("<===ODM_TXPowerTrackingCallback_ThermalMeter\n"));
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("<===ODM_TXPowerTrackingCallback_ThermalMeter End\n"));
        
        pDM_Odm->RFCalibrateInfo.TXPowercount = 0;
 }
 
 
        
        pDM_Odm->RFCalibrateInfo.TXPowercount = 0;
 }
 
 
-
-
 //3============================================================
 //3 IQ Calibration
 //3============================================================
 //3============================================================
 //3 IQ Calibration
 //3============================================================
@@ -528,3 +704,77 @@ u1Byte ODM_GetRightChnlPlaceforIQK(u1Byte chnl)
 }
 #endif
 
 }
 #endif
 
+VOID
+odm_IQCalibrate(
+               IN      PDM_ODM_T       pDM_Odm 
+               )
+{
+       PADAPTER        Adapter = pDM_Odm->Adapter;
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)   
+       if (*pDM_Odm->pIsFcsModeEnable)
+               return;
+#endif
+       
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))           
+       if (!IS_HARDWARE_TYPE_JAGUAR(Adapter))
+               return;
+#if (DM_ODM_SUPPORT_TYPE & (ODM_CE))
+       else if (IS_HARDWARE_TYPE_8812AU(Adapter))
+               return;
+#endif
+#endif
+       
+#if (RTL8821A_SUPPORT == 1)
+       if (pDM_Odm->bLinked) {
+               if ((*pDM_Odm->pChannel != pDM_Odm->preChannel) && (!*pDM_Odm->pbScanInProcess)) {
+                       pDM_Odm->preChannel = *pDM_Odm->pChannel;
+                       pDM_Odm->LinkedInterval = 0;
+               }
+
+               if (pDM_Odm->LinkedInterval < 3)
+                       pDM_Odm->LinkedInterval++;
+               
+               if (pDM_Odm->LinkedInterval == 2) {
+                       /*Mark out IQK flow to prevent tx stuck. by Maddest 20130306*/
+                       /*Open it verified by James 20130715*/
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
+                       PHY_IQCalibrate_8821A(pDM_Odm, FALSE);
+#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+                       PHY_IQCalibrate(Adapter, FALSE);
+#else
+                       PHY_IQCalibrate_8821A(Adapter, FALSE);
+#endif
+               }
+       } else
+               pDM_Odm->LinkedInterval = 0;
+#endif
+}
+
+void phydm_rf_init(IN          PDM_ODM_T               pDM_Odm)
+{
+
+       odm_TXPowerTrackingInit(pDM_Odm);
+
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
+       ODM_ClearTxPowerTrackingState(pDM_Odm); 
+#endif
+
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
+#if (RTL8814A_SUPPORT == 1)            
+       if (pDM_Odm->SupportICType & ODM_RTL8814A)
+               PHY_IQCalibrate_8814A_Init(pDM_Odm);
+#endif 
+#endif
+
+}
+
+void phydm_rf_watchdog(IN              PDM_ODM_T               pDM_Odm)
+{
+
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
+       ODM_TXPowerTrackingCheck(pDM_Odm);
+       if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
+               odm_IQCalibrate(pDM_Odm);
+#endif
+}
index d084e768da3fcfe257b222fa1e7ff083ad46fec1..f7b3ed0e52a370d05f2592571d7d7f5f6582fa61 100755 (executable)
@@ -29,25 +29,29 @@ typedef enum _SPUR_CAL_METHOD {
 typedef enum _PWRTRACK_CONTROL_METHOD {
        BBSWING,
        TXAGC,
 typedef enum _PWRTRACK_CONTROL_METHOD {
        BBSWING,
        TXAGC,
-       MIX_MODE
+       MIX_MODE,
+       TSSI_MODE
 } PWRTRACK_METHOD;
 
 typedef VOID   (*FuncSetPwr)(PDM_ODM_T, PWRTRACK_METHOD, u1Byte, u1Byte);
 } PWRTRACK_METHOD;
 
 typedef VOID   (*FuncSetPwr)(PDM_ODM_T, PWRTRACK_METHOD, u1Byte, u1Byte);
-typedef VOID   (*FuncIQK)(PDM_ODM_T, u1Byte, u1Byte, u1Byte);
+typedef VOID(*FuncIQK)(PVOID, u1Byte, u1Byte, u1Byte);
 typedef VOID   (*FuncLCK)(PDM_ODM_T);
 typedef VOID   (*FuncSwing)(PDM_ODM_T, pu1Byte*, pu1Byte*, pu1Byte*, pu1Byte*);
 typedef VOID   (*FuncLCK)(PDM_ODM_T);
 typedef VOID   (*FuncSwing)(PDM_ODM_T, pu1Byte*, pu1Byte*, pu1Byte*, pu1Byte*);
+typedef VOID   (*FuncSwing8814only)(PDM_ODM_T, pu1Byte*, pu1Byte*, pu1Byte*, pu1Byte*);
 
 typedef struct _TXPWRTRACK_CFG {
        u1Byte          SwingTableSize_CCK;     
        u1Byte          SwingTableSize_OFDM;
        u1Byte          Threshold_IQK;  
 
 typedef struct _TXPWRTRACK_CFG {
        u1Byte          SwingTableSize_CCK;     
        u1Byte          SwingTableSize_OFDM;
        u1Byte          Threshold_IQK;  
+       u1Byte          Threshold_DPK;
        u1Byte          AverageThermalNum;
        u1Byte          RfPathCount;
        u4Byte          ThermalRegAddr; 
        FuncSetPwr      ODM_TxPwrTrackSetPwr;
        FuncIQK         DoIQK;
        FuncLCK         PHY_LCCalibrate;
        u1Byte          AverageThermalNum;
        u1Byte          RfPathCount;
        u4Byte          ThermalRegAddr; 
        FuncSetPwr      ODM_TxPwrTrackSetPwr;
        FuncIQK         DoIQK;
        FuncLCK         PHY_LCCalibrate;
-       FuncSwing       GetDeltaSwingTable;     
+       FuncSwing       GetDeltaSwingTable;
+       FuncSwing8814only       GetDeltaSwingTable8814only;
 } TXPWRTRACK_CFG, *PTXPWRTRACK_CFG;
 
 void ConfigureTxpowerTrack(
 } TXPWRTRACK_CFG, *PTXPWRTRACK_CFG;
 
 void ConfigureTxpowerTrack(
@@ -84,6 +88,8 @@ ODM_GetRightChnlPlaceforIQK(
     IN u1Byte chnl
 );
 
     IN u1Byte chnl
 );
 
+void phydm_rf_init(IN          PDM_ODM_T               pDM_Odm);
+void phydm_rf_watchdog(IN              PDM_ODM_T               pDM_Odm);
                                                                
 #endif // #ifndef __HAL_PHY_RF_H__
 
                                                                
 #endif // #ifndef __HAL_PHY_RF_H__
 
index 64ed3bc57493815dda07ee7b5ccc319e3d77909e..bd3073a6a4c041492e3098b3323495ddbbba8fea 100755 (executable)
@@ -1,7 +1,7 @@
 /******************************************************************************\r
  *\r
  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
 /******************************************************************************\r
  *\r
  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
+ *\r
  * This program is free software; you can redistribute it and/or modify it\r
  * under the terms of version 2 of the GNU General Public License as\r
  * published by the Free Software Foundation.\r
  * This program is free software; you can redistribute it and/or modify it\r
  * under the terms of version 2 of the GNU General Public License as\r
  * published by the Free Software Foundation.\r
 #include "Mp_Precomp.h"\r
 #include "phydm_precomp.h"\r
 \r
 #include "Mp_Precomp.h"\r
 #include "phydm_precomp.h"\r
 \r
+#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+#if WPP_SOFTWARE_TRACE\r
+#include "PhyDM_Adaptivity.tmh"\r
+#endif\r
+#endif\r
+\r
 \r
 VOID\r
 Phydm_CheckAdaptivity(\r
        IN              PVOID                   pDM_VOID\r
 \r
 VOID\r
 Phydm_CheckAdaptivity(\r
        IN              PVOID                   pDM_VOID\r
-       )\r
+)\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       if(pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY)\r
-       {\r
-               if(pDM_Odm->bAdaOn == TRUE)\r
+       PADAPTIVITY_STATISTICS  Adaptivity = (PADAPTIVITY_STATISTICS)PhyDM_Get_Structure(pDM_Odm, PHYDM_ADAPTIVITY);\r
+       \r
+       if (pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY) {\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+               if (pDM_Odm->APTotalNum > Adaptivity->APNumTH) {\r
+                       pDM_Odm->Adaptivity_enable = FALSE;\r
+                       pDM_Odm->adaptivity_flag = FALSE;\r
+                       Phydm_SetEDCCAThreshold(pDM_Odm, 0x7f, 0x7f);\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("AP total num > %d!!, disable adaptivity\n", Adaptivity->APNumTH));\r
+               } else\r
+#endif\r
                {\r
                {\r
-                       if(pDM_Odm->DynamicLinkAdaptivity == TRUE)\r
-                       {\r
-                               if(pDM_Odm->bLinked && pDM_Odm->bCheck == FALSE)\r
-                               {\r
+                       if (Adaptivity->DynamicLinkAdaptivity == TRUE) {\r
+                               if (pDM_Odm->bLinked && Adaptivity->bCheck == FALSE) {\r
                                        Phydm_NHMCounterStatistics(pDM_Odm);\r
                                        Phydm_CheckEnvironment(pDM_Odm);\r
                                        Phydm_NHMCounterStatistics(pDM_Odm);\r
                                        Phydm_CheckEnvironment(pDM_Odm);\r
-                               }\r
-                               else if(!pDM_Odm->bLinked)\r
-                               {\r
-                               pDM_Odm->bCheck = FALSE;\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               Phydm_MACEDCCAState(pDM_Odm, PhyDM_DONT_IGNORE_EDCCA);\r
-                               pDM_Odm->adaptivity_flag = TRUE;\r
+                               } else if (!pDM_Odm->bLinked)\r
+                                       Adaptivity->bCheck = FALSE;\r
+                       } else {\r
+                               pDM_Odm->Adaptivity_enable = TRUE;\r
+\r
+                               if (pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_RTL8195A))\r
+                                       pDM_Odm->adaptivity_flag = FALSE;\r
+                               else\r
+                                       pDM_Odm->adaptivity_flag = TRUE;\r
                        }\r
                }\r
                        }\r
                }\r
-               else\r
-               {\r
-                       Phydm_MACEDCCAState(pDM_Odm, PhyDM_IGNORE_EDCCA);\r
-                       pDM_Odm->adaptivity_flag = FALSE;\r
+       } else {\r
+               pDM_Odm->Adaptivity_enable = FALSE;\r
+               pDM_Odm->adaptivity_flag = FALSE;\r
+       }\r
+\r
+       \r
+\r
+}\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+BOOLEAN\r
+Phydm_CheckChannelPlan(\r
+       IN              PVOID                   pDM_VOID\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
+       PMGNT_INFO              pMgntInfo = &(pAdapter->MgntInfo);\r
+       \r
+       if (pMgntInfo->RegEnableAdaptivity == 2) {\r
+               if (pDM_Odm->Carrier_Sense_enable == FALSE) {           /*check domain Code for Adaptivity or CarrierSense*/\r
+                       if ((*pDM_Odm->pBandType == ODM_BAND_5G) &&\r
+                           !(pDM_Odm->odm_Regulation5G == REGULATION_ETSI || pDM_Odm->odm_Regulation5G == REGULATION_WW)) {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("Adaptivity skip 5G domain code : %d\n", pDM_Odm->odm_Regulation5G));\r
+                               return TRUE;\r
+                       } else if ((*pDM_Odm->pBandType == ODM_BAND_2_4G) &&\r
+                                  !(pDM_Odm->odm_Regulation2_4G == REGULATION_ETSI || pDM_Odm->odm_Regulation2_4G == REGULATION_WW)) {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("Adaptivity skip 2.4G domain code : %d\n", pDM_Odm->odm_Regulation2_4G));\r
+                               return TRUE;\r
+\r
+                       } else if ((*pDM_Odm->pBandType != ODM_BAND_2_4G) && (*pDM_Odm->pBandType != ODM_BAND_5G)) {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("Adaptivity neither 2G nor 5G band, return\n"));\r
+                               return TRUE;\r
+                       }\r
+               } else {\r
+                       if ((*pDM_Odm->pBandType == ODM_BAND_5G) &&\r
+                           !(pDM_Odm->odm_Regulation5G == REGULATION_MKK || pDM_Odm->odm_Regulation5G == REGULATION_WW)) {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("CarrierSense skip 5G domain code : %d\n", pDM_Odm->odm_Regulation5G));\r
+                               return TRUE;\r
+                       }\r
+\r
+                       else if ((*pDM_Odm->pBandType == ODM_BAND_2_4G) &&\r
+                                  !(pDM_Odm->odm_Regulation2_4G == REGULATION_MKK  || pDM_Odm->odm_Regulation2_4G == REGULATION_WW)) {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("CarrierSense skip 2.4G domain code : %d\n", pDM_Odm->odm_Regulation2_4G));\r
+                               return TRUE;\r
+\r
+                       } else if ((*pDM_Odm->pBandType != ODM_BAND_2_4G) && (*pDM_Odm->pBandType != ODM_BAND_5G)) {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("CarrierSense neither 2G nor 5G band, return\n"));\r
+                               return TRUE;\r
+                       }\r
                }\r
                }\r
-       }       \r
+       }\r
+\r
+       return FALSE;\r
+\r
 }\r
 }\r
+#endif\r
 \r
 VOID\r
 Phydm_NHMCounterStatisticsInit(\r
        IN              PVOID                   pDM_VOID\r
 \r
 VOID\r
 Phydm_NHMCounterStatisticsInit(\r
        IN              PVOID                   pDM_VOID\r
-       )\r
+)\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 \r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 \r
-       if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
-       {\r
-               //PHY parameters initialize for ac series\r
-               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TIMER_11AC+2, 0xC350);      //0x990[31:16]=0xC350   Time duration for NHM unit: us, 0xc350=200ms\r
-               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC+2, 0xffff);   //0x994[31:16]=0xffff   th_9, th_10\r
-               //ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH3_TO_TH0_11AC, 0xffffff5c);     //0x998=0xffffff5c              th_3, th_2, th_1, th_0\r
-               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH3_TO_TH0_11AC, 0xffffff50);       //0x998=0xffffff52              th_3, th_2, th_1, th_0\r
-               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH7_TO_TH4_11AC, 0xffffffff);       //0x99c=0xffffffff              th_7, th_6, th_5, th_4\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH8_11AC, bMaskByte0, 0xff);          //0x9a0[7:0]=0xff               th_8\r
-               //ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC, BIT8|BIT9|BIT10, 0x7);       //0x994[9:8]=3                  enable CCX\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC, BIT8|BIT9|BIT10, 0x1); //0x994[10:8]=1 ignoreCCA ignore PHYTXON        enable CCX\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_9E8_11AC, BIT0, 0x1);         //0x9e8[7]=1                    max power among all RX ants     \r
-                               \r
+       if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES) {\r
+               /*PHY parameters initialize for n series*/\r
+               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TIMER_11N + 2, 0xC350);                     /*0x894[31:16]=0x0xC350 Time duration for NHM unit: us, 0xc350=200ms*/\r
+               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N + 2, 0xffff);          /*0x890[31:16]=0xffff           th_9, th_10*/\r
+               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH3_TO_TH0_11N, 0xffffff50);                /*0x898=0xffffff52                      th_3, th_2, th_1, th_0*/\r
+               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH7_TO_TH4_11N, 0xffffffff);                /*0x89c=0xffffffff                      th_7, th_6, th_5, th_4*/\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_FPGA0_IQK_11N, bMaskByte0, 0xff);         /*0xe28[7:0]=0xff                       th_8*/\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N, BIT10 | BIT9 | BIT8, 0x1);      /*0x890[10:8]=1                 ignoreCCA ignore PHYTXON enable CCX*/\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTC_11N, BIT7, 0x1);                     /*0xc0c[7]=1                            max power among all RX ants*/\r
        }\r
        }\r
-       else if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
-       {\r
-               //PHY parameters initialize for n series\r
-               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TIMER_11N+2, 0xC350);       //0x894[31:16]=0x0xC350 Time duration for NHM unit: us, 0xc350=200ms\r
-               //ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TIMER_11N+2, 0x4e20);     //0x894[31:16]=0x4e20   Time duration for NHM unit: 4us, 0x4e20=80ms\r
-               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N+2, 0xffff);    //0x890[31:16]=0xffff   th_9, th_10\r
-               //ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH3_TO_TH0_11N, 0xffffff5c);      //0x898=0xffffff5c              th_3, th_2, th_1, th_0\r
-               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH3_TO_TH0_11N, 0xffffff50);        //0x898=0xffffff52              th_3, th_2, th_1, th_0\r
-               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH7_TO_TH4_11N, 0xffffffff);        //0x89c=0xffffffff              th_7, th_6, th_5, th_4\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_FPGA0_IQK_11N, bMaskByte0, 0xff);         //0xe28[7:0]=0xff               th_8\r
-               //ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N, BIT10|BIT9|BIT8, 0x7);        //0x890[9:8]=3                  enable CCX\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N, BIT10|BIT9|BIT8, 0x1);  //0x890[10:8]=1         ignoreCCA ignore PHYTXON        enable CCX\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTC_11N, BIT7, 0x1);             //0xc0c[7]=1                    max power among all RX ants                             \r
+#if (RTL8195A_SUPPORT == 0)\r
+       else if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES) {\r
+               /*PHY parameters initialize for ac series*/\r
+               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TIMER_11AC + 2, 0xC350);                    /*0x990[31:16]=0xC350   Time duration for NHM unit: us, 0xc350=200ms*/\r
+               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC + 2, 0xffff);         /*0x994[31:16]=0xffff           th_9, th_10*/\r
+               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH3_TO_TH0_11AC, 0xffffff50);       /*0x998=0xffffff52                      th_3, th_2, th_1, th_0*/\r
+               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH7_TO_TH4_11AC, 0xffffffff);       /*0x99c=0xffffffff                      th_7, th_6, th_5, th_4*/\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH8_11AC, bMaskByte0, 0xff);          /*0x9a0[7:0]=0xff                       th_8*/\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC, BIT8 | BIT9 | BIT10, 0x1); /*0x994[10:8]=1                     ignoreCCA ignore PHYTXON        enable CCX*/\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_9E8_11AC, BIT0, 0x1);                         /*0x9e8[7]=1                            max power among all RX ants*/\r
+\r
        }\r
        }\r
+#endif\r
 }\r
 \r
 VOID\r
 Phydm_NHMCounterStatistics(\r
        IN              PVOID                   pDM_VOID\r
 }\r
 \r
 VOID\r
 Phydm_NHMCounterStatistics(\r
        IN              PVOID                   pDM_VOID\r
-       )\r
+)\r
 {\r
        PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 \r
 {\r
        PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 \r
-       if(!(pDM_Odm->SupportAbility & ODM_BB_NHM_CNT))\r
+       if (!(pDM_Odm->SupportAbility & ODM_BB_NHM_CNT))\r
                return;\r
 \r
                return;\r
 \r
-       // Get NHM report\r
+       /*Get NHM report*/\r
        Phydm_GetNHMCounterStatistics(pDM_Odm);\r
 \r
        Phydm_GetNHMCounterStatistics(pDM_Odm);\r
 \r
-       // Reset NHM counter\r
+       /*Reset NHM counter*/\r
        Phydm_NHMCounterStatisticsReset(pDM_Odm);\r
 }\r
 \r
 VOID\r
 Phydm_GetNHMCounterStatistics(\r
        IN              PVOID                   pDM_VOID\r
        Phydm_NHMCounterStatisticsReset(pDM_Odm);\r
 }\r
 \r
 VOID\r
 Phydm_GetNHMCounterStatistics(\r
        IN              PVOID                   pDM_VOID\r
-       )\r
+)\r
 {\r
        PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        u4Byte          value32 = 0;\r
 {\r
        PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        u4Byte          value32 = 0;\r
-\r
+#if (RTL8195A_SUPPORT == 0)\r
        if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
                value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_NHM_CNT_11AC, bMaskDWord);\r
        else if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
        if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
                value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_NHM_CNT_11AC, bMaskDWord);\r
        else if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
+#endif\r
                value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_NHM_CNT_11N, bMaskDWord);\r
 \r
        pDM_Odm->NHM_cnt_0 = (u1Byte)(value32 & bMaskByte0);\r
                value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_NHM_CNT_11N, bMaskDWord);\r
 \r
        pDM_Odm->NHM_cnt_0 = (u1Byte)(value32 & bMaskByte0);\r
-       pDM_Odm->NHM_cnt_1 = (u1Byte)((value32 & bMaskByte1)>>8);\r
+       pDM_Odm->NHM_cnt_1 = (u1Byte)((value32 & bMaskByte1) >> 8);\r
 \r
 }\r
 \r
 VOID\r
 Phydm_NHMCounterStatisticsReset(\r
        IN              PVOID                   pDM_VOID\r
 \r
 }\r
 \r
 VOID\r
 Phydm_NHMCounterStatisticsReset(\r
        IN              PVOID                   pDM_VOID\r
-       )\r
+)\r
 {\r
        PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 {\r
        PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       \r
-       if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
-       {                       \r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC, BIT1, 0);\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC, BIT1, 1);\r
+\r
+       if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES) {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N, BIT1, 0);\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N, BIT1, 1);\r
        }\r
        }\r
-       else if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
-       {\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N, BIT1, 0);\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N, BIT1, 1);\r
+#if (RTL8195A_SUPPORT == 0)\r
+       else if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES) {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC, BIT1, 0);\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC, BIT1, 1);\r
        }\r
        }\r
-}\r
 \r
 \r
-VOID\r
-Phydm_NHMBBInit(\r
-       IN              PVOID                   pDM_VOID\r
-)\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#endif\r
 \r
 \r
-       pDM_Odm->adaptivity_flag = FALSE;\r
-       pDM_Odm->tolerance_cnt = 3;\r
-       pDM_Odm->NHMLastTxOkcnt = 0;\r
-       pDM_Odm->NHMLastRxOkcnt = 0;\r
-       pDM_Odm->NHMCurTxOkcnt = 0;\r
-       pDM_Odm->NHMCurRxOkcnt = 0;\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -175,17 +220,18 @@ Phydm_SetEDCCAThreshold(
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       \r
-       if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
-               {\r
-               ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte0, (u1Byte)L2H);\r
-               ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte2, (u1Byte)H2L);\r
-               }\r
-       else if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
-               {\r
+\r
+       if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES) {\r
+               ODM_SetBBReg(pDM_Odm, rOFDM0_ECCAThreshold, bMaskByte0, (u1Byte)L2H);\r
+               ODM_SetBBReg(pDM_Odm, rOFDM0_ECCAThreshold, bMaskByte2, (u1Byte)H2L);\r
+       }\r
+#if (RTL8195A_SUPPORT == 0)\r
+       else if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES) {\r
                ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, bMaskByte0, (u1Byte)L2H);\r
                ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, bMaskByte1, (u1Byte)H2L);\r
                ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, bMaskByte0, (u1Byte)L2H);\r
                ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, bMaskByte1, (u1Byte)H2L);\r
-               }\r
+       }\r
+#endif\r
+\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -197,26 +243,24 @@ Phydm_SetTRxMux(
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 \r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 \r
-       if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
-       {\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_RPT_FORMAT_11N, BIT3|BIT2|BIT1, txMode);      // set TXmod to standby mode to remove outside noise affect\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_RPT_FORMAT_11N, BIT22|BIT21|BIT20, rxMode);   // set RXmod to standby mode to remove outside noise affect\r
-               if(pDM_Odm->RFType > ODM_1T1R)\r
-               {\r
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_RPT_FORMAT_11N_B, BIT3|BIT2|BIT1, txMode);    // set TXmod to standby mode to remove outside noise affect\r
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_RPT_FORMAT_11N_B, BIT22|BIT21|BIT20, rxMode); // set RXmod to standby mode to remove outside noise affect\r
+       if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES) {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_RPT_FORMAT_11N, BIT3 | BIT2 | BIT1, txMode);                  /*set TXmod to standby mode to remove outside noise affect*/\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_RPT_FORMAT_11N, BIT22 | BIT21 | BIT20, rxMode);               /*set RXmod to standby mode to remove outside noise affect*/\r
+               if (pDM_Odm->RFType > ODM_1T1R) {\r
+                       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_RPT_FORMAT_11N_B, BIT3 | BIT2 | BIT1, txMode);                /*set TXmod to standby mode to remove outside noise affect*/\r
+                       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_RPT_FORMAT_11N_B, BIT22 | BIT21 | BIT20, rxMode);     /*set RXmod to standby mode to remove outside noise affect*/\r
                }\r
        }\r
                }\r
        }\r
-       else if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
-       {\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_TRMUX_11AC, BIT11|BIT10|BIT9|BIT8, txMode);       // set TXmod to standby mode to remove outside noise affect\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_TRMUX_11AC, BIT7|BIT6|BIT5|BIT4, rxMode); // set RXmod to standby mode to remove outside noise affect\r
-               if(pDM_Odm->RFType > ODM_1T1R)\r
-               {\r
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_TRMUX_11AC_B, BIT11|BIT10|BIT9|BIT8, txMode);     // set TXmod to standby mode to remove outside noise affect\r
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_TRMUX_11AC_B, BIT7|BIT6|BIT5|BIT4, rxMode);       // set RXmod to standby mode to remove outside noise affect\r
+#if (RTL8195A_SUPPORT == 0)\r
+       else if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES) {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_TRMUX_11AC, BIT11 | BIT10 | BIT9 | BIT8, txMode);                         /*set TXmod to standby mode to remove outside noise affect*/\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_TRMUX_11AC, BIT7 | BIT6 | BIT5 | BIT4, rxMode);                           /*set RXmod to standby mode to remove outside noise affect*/\r
+               if (pDM_Odm->RFType > ODM_1T1R) {\r
+                       ODM_SetBBReg(pDM_Odm, ODM_REG_TRMUX_11AC_B, BIT11 | BIT10 | BIT9 | BIT8, txMode);               /*set TXmod to standby mode to remove outside noise affect*/\r
+                       ODM_SetBBReg(pDM_Odm, ODM_REG_TRMUX_11AC_B, BIT7 | BIT6 | BIT5 | BIT4, rxMode);                 /*set RXmod to standby mode to remove outside noise affect*/\r
                }\r
        }\r
                }\r
        }\r
+#endif\r
 \r
 }\r
 \r
 \r
 }\r
 \r
@@ -227,20 +271,14 @@ Phydm_MACEDCCAState(
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       if(State == PhyDM_IGNORE_EDCCA)\r
-       {\r
-               ODM_SetMACReg(pDM_Odm, REG_TX_PTCL_CTRL, BIT15, 1);     //ignore EDCCA  reg520[15]=1\r
-               ODM_SetMACReg(pDM_Odm, REG_RD_CTRL, BIT11, 0);          //reg524[11]=0\r
-       }\r
-       else            // don't set MAC ignore EDCCA signal\r
-       {\r
-               ODM_SetMACReg(pDM_Odm, REG_TX_PTCL_CTRL, BIT15, 0);     //don't ignore EDCCA     reg520[15]=0\14\r
-               ODM_SetMACReg(pDM_Odm, REG_RD_CTRL, BIT11, 1);  //reg524[11]=1  \r
+       if (State == PhyDM_IGNORE_EDCCA) {\r
+               ODM_SetMACReg(pDM_Odm, REG_TX_PTCL_CTRL, BIT15, 1);     /*ignore EDCCA  reg520[15]=1*/\r
+               ODM_SetMACReg(pDM_Odm, REG_RD_CTRL, BIT11, 0);                  /*reg524[11]=0*/\r
+       } else {        /*don't set MAC ignore EDCCA signal*/\r
+               ODM_SetMACReg(pDM_Odm, REG_TX_PTCL_CTRL, BIT15, 0);     /*don't ignore EDCCA     reg520[15]=0\14*/\r
+               ODM_SetMACReg(pDM_Odm, REG_RD_CTRL, BIT11, 1);                  /*reg524[11]=1  */\r
        }\r
        }\r
-\r
-       pDM_Odm->EDCCA_enable_state = State;\r
-       \r
-       ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("EDCCA enable State = %d \n", State));\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("EDCCA enable State = %d\n", State));\r
 \r
 }\r
 \r
 \r
 }\r
 \r
@@ -254,15 +292,14 @@ Phydm_CalNHMcnt(
 \r
        Base = pDM_Odm->NHM_cnt_0 + pDM_Odm->NHM_cnt_1;\r
 \r
 \r
        Base = pDM_Odm->NHM_cnt_0 + pDM_Odm->NHM_cnt_1;\r
 \r
-       if(Base != 0)\r
-       {\r
+       if (Base != 0) {\r
                pDM_Odm->NHM_cnt_0 = ((pDM_Odm->NHM_cnt_0) << 8) / Base;\r
                pDM_Odm->NHM_cnt_1 = ((pDM_Odm->NHM_cnt_1) << 8) / Base;\r
        }\r
                pDM_Odm->NHM_cnt_0 = ((pDM_Odm->NHM_cnt_0) << 8) / Base;\r
                pDM_Odm->NHM_cnt_1 = ((pDM_Odm->NHM_cnt_1) << 8) / Base;\r
        }\r
-       if((pDM_Odm->NHM_cnt_0 - pDM_Odm->NHM_cnt_1) >= 100)\r
-               return TRUE;                    // clean environment\r
+       if ((pDM_Odm->NHM_cnt_0 - pDM_Odm->NHM_cnt_1) >= 100)\r
+               return TRUE;                    /*clean environment*/\r
        else\r
        else\r
-               return FALSE;           //noisy environment\r
+               return FALSE;           /*noisy environment*/\r
 \r
 }\r
 \r
 \r
 }\r
 \r
@@ -273,150 +310,54 @@ Phydm_CheckEnvironment(
 )\r
 {\r
        PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 )\r
 {\r
        PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PADAPTIVITY_STATISTICS  Adaptivity = (PADAPTIVITY_STATISTICS)PhyDM_Get_Structure(pDM_Odm, PHYDM_ADAPTIVITY);\r
        BOOLEAN         isCleanEnvironment = FALSE;\r
        BOOLEAN         isCleanEnvironment = FALSE;\r
-       u1Byte          i, clean = 0;\r
 \r
 \r
-       if(pDM_Odm->bFirstLink == TRUE)\r
-       {\r
-               pDM_Odm->adaptivity_flag = TRUE;\r
-               pDM_Odm->bFirstLink = FALSE;\r
+       if (Adaptivity->bFirstLink == TRUE) {\r
+               if (pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_RTL8195A))\r
+                       pDM_Odm->adaptivity_flag = FALSE;\r
+               else\r
+                       pDM_Odm->adaptivity_flag = TRUE;\r
+\r
+               Adaptivity->bFirstLink = FALSE;\r
                return;\r
                return;\r
-       }\r
-       else\r
-       {\r
-               if(pDM_Odm->NHMWait < 3)                        // Start enter NHM after 4 NHMWait\r
-               {\r
-                       pDM_Odm->NHMWait ++;\r
+       } else {\r
+               if (Adaptivity->NHMWait < 3) {          /*Start enter NHM after 4 NHMWait*/\r
+                       Adaptivity->NHMWait++;\r
                        Phydm_NHMCounterStatistics(pDM_Odm);\r
                        return;\r
                        Phydm_NHMCounterStatistics(pDM_Odm);\r
                        return;\r
-               }\r
-               else\r
-               {\r
+               } else {\r
                        Phydm_NHMCounterStatistics(pDM_Odm);\r
                        isCleanEnvironment = Phydm_CalNHMcnt(pDM_Odm);\r
                        Phydm_NHMCounterStatistics(pDM_Odm);\r
                        isCleanEnvironment = Phydm_CalNHMcnt(pDM_Odm);\r
-                       if(isCleanEnvironment == TRUE)\r
-                       {\r
-                               Phydm_MACEDCCAState(pDM_Odm, PhyDM_DONT_IGNORE_EDCCA);\r
+                       if (isCleanEnvironment == TRUE) {\r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-                               pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_backup;                       //mode 1\r
-                               pDM_Odm->TH_EDCCA_HL_diff= pDM_Odm->TH_EDCCA_HL_diff_backup;\r
+                               pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_backup;                       /*mode 1*/\r
+                               pDM_Odm->TH_EDCCA_HL_diff = Adaptivity->TH_EDCCA_HL_diff_backup;\r
 #endif\r
 #endif\r
-                               pDM_Odm->adaptivity_flag = TRUE;\r
-                       }\r
-                       else\r
-                       {\r
+                               pDM_Odm->Adaptivity_enable = TRUE;\r
+\r
+                               if (pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_RTL8195A))\r
+                                       pDM_Odm->adaptivity_flag = FALSE;\r
+                               else\r
+                                       pDM_Odm->adaptivity_flag = TRUE;\r
+                       } else {\r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-                               Phydm_MACEDCCAState(pDM_Odm, PhyDM_IGNORE_EDCCA);\r
+                               Phydm_SetEDCCAThreshold(pDM_Odm, 0x7f, 0x7f);\r
 #else\r
 #else\r
-                               Phydm_MACEDCCAState(pDM_Odm, PhyDM_DONT_IGNORE_EDCCA);\r
-                               pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_mode2;                        // for AP mode 2\r
-                               pDM_Odm->TH_EDCCA_HL_diff= pDM_Odm->TH_EDCCA_HL_diff_mode2;\r
+                               pDM_Odm->TH_L2H_ini = Adaptivity->TH_L2H_ini_mode2;                     /*for AP mode 2*/\r
+                               pDM_Odm->TH_EDCCA_HL_diff = Adaptivity->TH_EDCCA_HL_diff_mode2;\r
 #endif\r
                                pDM_Odm->adaptivity_flag = FALSE;\r
 #endif\r
                                pDM_Odm->adaptivity_flag = FALSE;\r
+                               pDM_Odm->Adaptivity_enable = FALSE;\r
                        }\r
                        }\r
-\r
-                       pDM_Odm->bFirstLink = TRUE;\r
-                       pDM_Odm->bCheck = TRUE;\r
+                       Adaptivity->NHMWait = 0;\r
+                       Adaptivity->bFirstLink = TRUE;\r
+                       Adaptivity->bCheck = TRUE;\r
                }\r
                }\r
-               \r
-       }\r
-\r
-\r
-}\r
-\r
 \r
 \r
-VOID\r
-Phydm_NHMBB(\r
-       IN              PVOID                   pDM_VOID\r
-)\r
-{\r
-       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       BOOLEAN         bCleanEnvironment;\r
-\r
-       bCleanEnvironment = Phydm_CalNHMcnt(pDM_Odm);\r
+       }\r
 \r
 \r
-       pDM_Odm->NHMCurTxOkcnt = *(pDM_Odm->pNumTxBytesUnicast) - pDM_Odm->NHMLastTxOkcnt;\r
-       pDM_Odm->NHMCurRxOkcnt = *(pDM_Odm->pNumRxBytesUnicast) - pDM_Odm->NHMLastRxOkcnt;\r
-       pDM_Odm->NHMLastTxOkcnt = *(pDM_Odm->pNumTxBytesUnicast);\r
-       pDM_Odm->NHMLastRxOkcnt = *(pDM_Odm->pNumRxBytesUnicast);       \r
-       ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("cnt_0=%d, cnt_1=%d, bCleanEnvironment = %d, NHMCurTxOkcnt = %llu, NHMCurRxOkcnt = %llu\n", \r
-               pDM_Odm->NHM_cnt_0, pDM_Odm->NHM_cnt_1, bCleanEnvironment, pDM_Odm->NHMCurTxOkcnt, pDM_Odm->NHMCurRxOkcnt));\r
 \r
 \r
-       if(pDM_Odm->NHMWait < 4)                        // Start enter NHM after 4 NHMWait\r
-       {\r
-               pDM_Odm->NHMWait ++;\r
-               Phydm_MACEDCCAState(pDM_Odm, PhyDM_IGNORE_EDCCA);\r
-       }\r
-       else if ( ((pDM_Odm->NHMCurTxOkcnt>>10) > 2) && ((pDM_Odm->NHMCurTxOkcnt) + 1 > (u8Byte)(pDM_Odm->NHMCurRxOkcnt<<2) + 1))               //Tx > 4*Rx and Tx > 2Mb possible for adaptivity test\r
-       {\r
-               if(bCleanEnvironment == TRUE || pDM_Odm->adaptivity_flag == TRUE)\r
-               {\r
-                       //Enable EDCCA since it is possible running Adaptivity testing\r
-                       pDM_Odm->adaptivity_flag = TRUE;\r
-                       Phydm_MACEDCCAState(pDM_Odm, PhyDM_DONT_IGNORE_EDCCA);\r
-                       pDM_Odm->tolerance_cnt = 0;\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-                       pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_backup;\r
-                       pDM_Odm->TH_EDCCA_HL_diff = pDM_Odm->TH_EDCCA_HL_diff_backup ;\r
-#endif\r
-               }\r
-               else\r
-               {\r
-                       if(pDM_Odm->tolerance_cnt < 3)\r
-                               pDM_Odm->tolerance_cnt ++;\r
-                       else\r
-                       {\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-                       pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_mode2;\r
-                       pDM_Odm->TH_EDCCA_HL_diff = pDM_Odm->TH_EDCCA_HL_diff_mode2 ;\r
-#else                          \r
-                       Phydm_MACEDCCAState(pDM_Odm, PhyDM_IGNORE_EDCCA);\r
-#endif\r
-                       pDM_Odm->adaptivity_flag = FALSE;\r
-                       }\r
-               }\r
-       }\r
-       else    // TX<RX \r
-       {\r
-               if(pDM_Odm->adaptivity_flag == TRUE && bCleanEnvironment == FALSE)\r
-               {\r
-                       Phydm_MACEDCCAState(pDM_Odm, PhyDM_DONT_IGNORE_EDCCA);\r
-                       pDM_Odm->tolerance_cnt = 0;\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-                       pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_backup;\r
-                       pDM_Odm->TH_EDCCA_HL_diff = pDM_Odm->TH_EDCCA_HL_diff_backup ;\r
-#endif\r
-               }\r
-#if(DM_ODM_SUPPORT_TYPE & ODM_AP)              // for repeater mode add by YuChen 2014.06.23\r
-#ifdef UNIVERSAL_REPEATER\r
-               else if((bCleanEnvironment == TRUE) && (pDM_Odm->VXD_bLinked) && ((pDM_Odm->NHMCurTxOkcnt>>10) > 1))            // clean environment and VXD linked and Tx TP>1Mb\r
-               {\r
-                       pDM_Odm->adaptivity_flag = TRUE;\r
-                       Phydm_MACEDCCAState(pDM_Odm, PhyDM_DONT_IGNORE_EDCCA);\r
-                       pDM_Odm->tolerance_cnt = 0;\r
-                       pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_backup;\r
-                       pDM_Odm->TH_EDCCA_HL_diff = pDM_Odm->TH_EDCCA_HL_diff_backup ;\r
-               }\r
-#endif \r
-#endif                                                                 // for repeater mode add by YuChen 2014.06.23\r
-               else\r
-               {\r
-                       if(pDM_Odm->tolerance_cnt < 3)\r
-                               pDM_Odm->tolerance_cnt ++;\r
-                       else\r
-                       {\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-                       pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_mode2;\r
-                       pDM_Odm->TH_EDCCA_HL_diff = pDM_Odm->TH_EDCCA_HL_diff_mode2 ;\r
-#else\r
-                       Phydm_MACEDCCAState(pDM_Odm, PhyDM_IGNORE_EDCCA);\r
-#endif\r
-                       pDM_Odm->adaptivity_flag = FALSE;\r
-                       }\r
-               }\r
-       }\r
-        \r
-       ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("adaptivity_flag = %d\n ", pDM_Odm->adaptivity_flag));\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -425,75 +366,77 @@ Phydm_SearchPwdBLowerBound(
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       u4Byte                  value32 =0;\r
-       u1Byte                  cnt, IGI_Pause = 0x7f, IGI_Resume = 0x20, IGI = 0x50;   //IGI = 0x50 for cal EDCCA lower bound\r
+       PADAPTIVITY_STATISTICS  Adaptivity = (PADAPTIVITY_STATISTICS)PhyDM_Get_Structure(pDM_Odm, PHYDM_ADAPTIVITY);\r
+       u4Byte                  value32 = 0;\r
+       u1Byte                  cnt, IGI_Pause = 0x7f, IGI_Resume = 0x20, IGI = 0x45;           /*IGI = 0x50 for cal EDCCA lower bound*/\r
        u1Byte                  txEdcca1 = 0, txEdcca0 = 0;\r
        u1Byte                  txEdcca1 = 0, txEdcca0 = 0;\r
-       BOOLEAN                 bAdjust=TRUE;\r
+       BOOLEAN                 bAdjust = TRUE;\r
        s1Byte                  TH_L2H_dmc, TH_H2L_dmc, IGI_target = 0x32;\r
        s1Byte                  Diff;\r
 \r
        Phydm_SetTRxMux(pDM_Odm, PhyDM_STANDBY_MODE, PhyDM_STANDBY_MODE);\r
        ODM_Write_DIG(pDM_Odm, IGI_Pause);\r
        s1Byte                  TH_L2H_dmc, TH_H2L_dmc, IGI_target = 0x32;\r
        s1Byte                  Diff;\r
 \r
        Phydm_SetTRxMux(pDM_Odm, PhyDM_STANDBY_MODE, PhyDM_STANDBY_MODE);\r
        ODM_Write_DIG(pDM_Odm, IGI_Pause);\r
-       \r
-       Diff = IGI_target -(s1Byte)IGI;\r
+\r
+       Diff = IGI_target - (s1Byte)IGI;\r
        TH_L2H_dmc = pDM_Odm->TH_L2H_ini + Diff;\r
        TH_L2H_dmc = pDM_Odm->TH_L2H_ini + Diff;\r
-               if(TH_L2H_dmc > 10)     \r
-                       TH_L2H_dmc = 10;\r
+       if (TH_L2H_dmc > 10)\r
+               TH_L2H_dmc = 10;\r
        TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;\r
 \r
        TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;\r
 \r
-       Phydm_SetEDCCAThreshold(pDM_Odm, TH_H2L_dmc, TH_L2H_dmc);                       \r
+       Phydm_SetEDCCAThreshold(pDM_Odm, TH_H2L_dmc, TH_L2H_dmc);\r
        ODM_delay_ms(5);\r
        ODM_delay_ms(5);\r
-               \r
-               while(bAdjust)\r
-                       {\r
-                       for(cnt=0; cnt<20; cnt ++)\r
-                               {\r
-                               if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
-                                       value32 = ODM_GetBBReg(pDM_Odm,ODM_REG_RPT_11N, bMaskDWord);\r
-                               else if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
-                                       value32 = ODM_GetBBReg(pDM_Odm,ODM_REG_RPT_11AC, bMaskDWord);\r
-                       \r
-                               if (value32 & BIT30 && (pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8723B|ODM_RTL8188E)))\r
-                                       txEdcca1 = txEdcca1 + 1;\r
-                               else if(value32 & BIT29)\r
-                                       txEdcca1 = txEdcca1 + 1;\r
-                               else\r
-                                       txEdcca0 = txEdcca0 + 1;\r
-                               }\r
-                       \r
-                               if(txEdcca1 > 9 )\r
-                               {\r
-                                       IGI = IGI -1;\r
-                                       TH_L2H_dmc = TH_L2H_dmc + 1;\r
-                                               if(TH_L2H_dmc > 10)\r
-                                                       TH_L2H_dmc = 10;\r
-                                       TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;\r
-\r
-                                       Phydm_SetEDCCAThreshold(pDM_Odm, TH_H2L_dmc, TH_L2H_dmc);\r
-\r
-                                       txEdcca1 = 0;\r
-                                       txEdcca0 = 0;\r
-\r
-                                       if(TH_L2H_dmc == 10)\r
-                                               {\r
-                                               bAdjust = FALSE;\r
-                                               pDM_Odm->H2L_lb = TH_H2L_dmc;\r
-                                               pDM_Odm->L2H_lb = TH_L2H_dmc;\r
-                                               pDM_Odm->Adaptivity_IGI_upper = IGI;\r
-                                               }\r
-                               }\r
-                               else\r
-                               {\r
-                                       bAdjust = FALSE;\r
-                                       pDM_Odm->H2L_lb = TH_H2L_dmc;\r
-                                       pDM_Odm->L2H_lb = TH_L2H_dmc;   \r
-                                       pDM_Odm->Adaptivity_IGI_upper = IGI;\r
-                               }\r
+\r
+       while (bAdjust) {\r
+               for (cnt = 0; cnt < 20; cnt++) {\r
+                       if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
+                               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11N, bMaskDWord);\r
+#if (RTL8195A_SUPPORT == 0)\r
+                       else if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
+                               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC, bMaskDWord);\r
+#endif\r
+                       if (value32 & BIT30 && (pDM_Odm->SupportICType & (ODM_RTL8723A | ODM_RTL8723B | ODM_RTL8188E)))\r
+                               txEdcca1 = txEdcca1 + 1;\r
+                       else if (value32 & BIT29)\r
+                               txEdcca1 = txEdcca1 + 1;\r
+                       else\r
+                               txEdcca0 = txEdcca0 + 1;\r
+               }\r
+\r
+               if (txEdcca1 > 1) {\r
+                       IGI = IGI - 1;\r
+                       TH_L2H_dmc = TH_L2H_dmc + 1;\r
+                       if (TH_L2H_dmc > 10)\r
+                               TH_L2H_dmc = 10;\r
+                       TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;\r
+\r
+                       Phydm_SetEDCCAThreshold(pDM_Odm, TH_H2L_dmc, TH_L2H_dmc);\r
+                       if (TH_L2H_dmc == 10) {\r
+                               bAdjust = FALSE;\r
+                               Adaptivity->H2L_lb = TH_H2L_dmc;\r
+                               Adaptivity->L2H_lb = TH_L2H_dmc;\r
+                               pDM_Odm->Adaptivity_IGI_upper = IGI;\r
                        }\r
                        }\r
-                                                       \r
+\r
+                       txEdcca1 = 0;\r
+                       txEdcca0 = 0;\r
+\r
+               } else {\r
+                       bAdjust = FALSE;\r
+                       Adaptivity->H2L_lb = TH_H2L_dmc;\r
+                       Adaptivity->L2H_lb = TH_L2H_dmc;\r
+                       pDM_Odm->Adaptivity_IGI_upper = IGI;\r
+                       txEdcca1 = 0;\r
+                       txEdcca0 = 0;\r
+               }\r
+       }\r
+\r
+       pDM_Odm->Adaptivity_IGI_upper = pDM_Odm->Adaptivity_IGI_upper - pDM_Odm->DCbackoff;\r
+       Adaptivity->H2L_lb = Adaptivity->H2L_lb + pDM_Odm->DCbackoff;\r
+       Adaptivity->L2H_lb = Adaptivity->L2H_lb + pDM_Odm->DCbackoff;\r
+\r
        Phydm_SetTRxMux(pDM_Odm, PhyDM_TX_MODE, PhyDM_RX_MODE);\r
        ODM_Write_DIG(pDM_Odm, IGI_Resume);\r
        Phydm_SetTRxMux(pDM_Odm, PhyDM_TX_MODE, PhyDM_RX_MODE);\r
        ODM_Write_DIG(pDM_Odm, IGI_Resume);\r
-       Phydm_SetEDCCAThreshold(pDM_Odm, 0x7f, 0x7f); // resume to no link state\r
+       Phydm_SetEDCCAThreshold(pDM_Odm, 0x7f, 0x7f);                           /*resume to no link state*/\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
@@ -502,320 +445,379 @@ Phydm_AdaptivityInit(
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PADAPTIVITY_STATISTICS  Adaptivity = (PADAPTIVITY_STATISTICS)PhyDM_Get_Structure(pDM_Odm, PHYDM_ADAPTIVITY);\r
 #if(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
        PMGNT_INFO              pMgntInfo = &(pAdapter->MgntInfo);\r
        pDM_Odm->Carrier_Sense_enable = (BOOLEAN)pMgntInfo->RegEnableCarrierSense;\r
 #if(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
        PMGNT_INFO              pMgntInfo = &(pAdapter->MgntInfo);\r
        pDM_Odm->Carrier_Sense_enable = (BOOLEAN)pMgntInfo->RegEnableCarrierSense;\r
-       pDM_Odm->NHM_enable = (BOOLEAN)pMgntInfo->RegNHMEnable;\r
-       pDM_Odm->DynamicLinkAdaptivity = (BOOLEAN)pMgntInfo->RegDmLinkAdaptivity;\r
+       pDM_Odm->DCbackoff = (u1Byte)pMgntInfo->RegDCbackoff;\r
+       Adaptivity->DynamicLinkAdaptivity = (BOOLEAN)pMgntInfo->RegDmLinkAdaptivity;\r
+       Adaptivity->APNumTH = (u1Byte)pMgntInfo->RegAPNumTH;\r
 #elif(DM_ODM_SUPPORT_TYPE == ODM_CE)\r
 #elif(DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-       pDM_Odm->Carrier_Sense_enable = (pDM_Odm->Adapter->registrypriv.adaptivity_mode!=0)?TRUE:FALSE;\r
-       pDM_Odm->NHM_enable = (BOOLEAN)pDM_Odm->Adapter->registrypriv.nhm_en;\r
-       pDM_Odm->DynamicLinkAdaptivity = FALSE; // Jeff please add this\r
+       pDM_Odm->Carrier_Sense_enable = (pDM_Odm->Adapter->registrypriv.adaptivity_mode != 0) ? TRUE : FALSE;\r
+       pDM_Odm->DCbackoff = pDM_Odm->Adapter->registrypriv.adaptivity_dc_backoff;\r
+       Adaptivity->DynamicLinkAdaptivity = (pDM_Odm->Adapter->registrypriv.adaptivity_dml != 0) ? TRUE : FALSE;\r
 #endif\r
 \r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
 \r
 #endif\r
 \r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
 \r
-       if(pDM_Odm->Carrier_Sense_enable == FALSE)\r
-       {\r
+       if (pDM_Odm->Carrier_Sense_enable == FALSE) {\r
 #if(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 #if(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-               if( pMgntInfo->RegL2HForAdaptivity != 0 )\r
+               if (pMgntInfo->RegL2HForAdaptivity != 0)\r
                        pDM_Odm->TH_L2H_ini = pMgntInfo->RegL2HForAdaptivity;\r
                else\r
 #endif\r
                        pDM_Odm->TH_L2H_ini = pMgntInfo->RegL2HForAdaptivity;\r
                else\r
 #endif\r
-                       pDM_Odm->TH_L2H_ini = 0xf5; // -7\r
-       }\r
-       else\r
-       {\r
+               {\r
+                       pDM_Odm->TH_L2H_ini = 0xf5;\r
+               }\r
+       } else {\r
 #if(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 #if(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-               if( pMgntInfo->RegL2HForAdaptivity != 0 )\r
+               if (pMgntInfo->RegL2HForAdaptivity != 0)\r
                        pDM_Odm->TH_L2H_ini = pMgntInfo->RegL2HForAdaptivity;\r
                else\r
 #endif\r
                        pDM_Odm->TH_L2H_ini = pMgntInfo->RegL2HForAdaptivity;\r
                else\r
 #endif\r
-               pDM_Odm->TH_L2H_ini = 0xa; \r
+                       pDM_Odm->TH_L2H_ini = 0xa;\r
        }\r
 \r
        }\r
 \r
-       pDM_Odm->AdapEn_RSSI = 20;\r
-\r
 #if(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 #if(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       if( pMgntInfo->RegHLDiffForAdaptivity != 0 )\r
+       if (pMgntInfo->RegHLDiffForAdaptivity != 0)\r
                pDM_Odm->TH_EDCCA_HL_diff = pMgntInfo->RegHLDiffForAdaptivity;\r
        else\r
 #endif\r
                pDM_Odm->TH_EDCCA_HL_diff = pMgntInfo->RegHLDiffForAdaptivity;\r
        else\r
 #endif\r
-       pDM_Odm->TH_EDCCA_HL_diff = 7;\r
+               pDM_Odm->TH_EDCCA_HL_diff = 7;\r
 \r
 \r
-       ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("TH_L2H_ini = 0x%x, TH_EDCCA_HL_diff = 0x%x\n", pDM_Odm->TH_L2H_ini, pDM_Odm->TH_EDCCA_HL_diff));\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("TH_L2H_ini = 0x%x, TH_EDCCA_HL_diff = 0x%x\n", pDM_Odm->TH_L2H_ini, pDM_Odm->TH_EDCCA_HL_diff));\r
 \r
 #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
 \r
 #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       prtl8192cd_priv                         priv = pDM_Odm->priv;\r
+       prtl8192cd_priv priv = pDM_Odm->priv;\r
 \r
 \r
-       if(pDM_Odm->Carrier_Sense_enable){\r
-               pDM_Odm->TH_L2H_ini = 10;\r
-               pDM_Odm->TH_EDCCA_HL_diff = 7;          \r
-               pDM_Odm->AdapEn_RSSI = 30;\r
-       }\r
-       else\r
-       {\r
-               pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_backup;       //set by mib\r
+       if (pDM_Odm->Carrier_Sense_enable) {\r
+               pDM_Odm->TH_L2H_ini = 0xa;\r
+               pDM_Odm->TH_EDCCA_HL_diff = 7;\r
+       } else {\r
+               pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_backup;       /*set by mib*/\r
                pDM_Odm->TH_EDCCA_HL_diff = 7;\r
                pDM_Odm->TH_EDCCA_HL_diff = 7;\r
-               pDM_Odm->AdapEn_RSSI = 20;\r
        }\r
 \r
        }\r
 \r
-       pDM_Odm->TH_L2H_ini_mode2 = 20;\r
-       pDM_Odm->TH_EDCCA_HL_diff_mode2 = 8;\r
-       //pDM_Odm->TH_L2H_ini_backup = pDM_Odm->TH_L2H_ini;\r
-       pDM_Odm->TH_EDCCA_HL_diff_backup = pDM_Odm->TH_EDCCA_HL_diff ;\r
-       if(priv->pshare->rf_ft_var.adaptivity_enable == 2)\r
-               pDM_Odm->DynamicLinkAdaptivity = TRUE;\r
+       Adaptivity->TH_L2H_ini_mode2 = 20;\r
+       Adaptivity->TH_EDCCA_HL_diff_mode2 = 8;\r
+       Adaptivity->TH_EDCCA_HL_diff_backup = pDM_Odm->TH_EDCCA_HL_diff;\r
+       if (priv->pshare->rf_ft_var.adaptivity_enable == 2)\r
+               Adaptivity->DynamicLinkAdaptivity = TRUE;\r
        else\r
        else\r
-               pDM_Odm->DynamicLinkAdaptivity = FALSE;\r
-//     pDM_Odm->NHM_enable = FALSE;\r
+               Adaptivity->DynamicLinkAdaptivity = FALSE;\r
+\r
 #endif\r
 \r
 #endif\r
 \r
-       pDM_Odm->IGI_Base = 0x32;       \r
-       pDM_Odm->IGI_target = 0x1c;\r
-       pDM_Odm->ForceEDCCA = 0;\r
-       pDM_Odm->H2L_lb= 0;\r
-       pDM_Odm->L2H_lb= 0;\r
        pDM_Odm->Adaptivity_IGI_upper = 0;\r
        pDM_Odm->Adaptivity_IGI_upper = 0;\r
-       pDM_Odm->NHMWait = 0;\r
-       Phydm_NHMBBInit(pDM_Odm);\r
-       pDM_Odm->bCheck = FALSE;\r
-       pDM_Odm->bFirstLink = TRUE;\r
-       pDM_Odm->bAdaOn = TRUE;\r
+       pDM_Odm->Adaptivity_enable = FALSE;     /*use this flag to decide enable or disable*/\r
+       \r
+       Adaptivity->IGI_Base = 0x32;\r
+       Adaptivity->IGI_target = 0x1c;\r
+       Adaptivity->H2L_lb = 0;\r
+       Adaptivity->L2H_lb = 0;\r
+       Adaptivity->NHMWait = 0;\r
+       Adaptivity->bCheck = FALSE;\r
+       Adaptivity->bFirstLink = TRUE;\r
 \r
 \r
-       ODM_SetBBReg(pDM_Odm, REG_RD_CTRL, BIT11, 1); // stop counting if EDCCA is asserted\r
+       Phydm_MACEDCCAState(pDM_Odm, PhyDM_DONT_IGNORE_EDCCA);\r
 \r
 \r
-       //Search pwdB lower bound\r
-       {\r
+       /*Search pwdB lower bound*/\r
        if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
        if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
-               ODM_SetBBReg(pDM_Odm,ODM_REG_DBG_RPT_11N, bMaskDWord, 0x208);\r
-       else if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
-               ODM_SetBBReg(pDM_Odm,ODM_REG_DBG_RPT_11AC, bMaskDWord, 0x209);\r
-       Phydm_SearchPwdBLowerBound(pDM_Odm);\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11N, bMaskDWord, 0x208);\r
+#if (RTL8195A_SUPPORT == 0)\r
+       else if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC, bMaskDWord, 0x209);\r
+#endif\r
+\r
+#if (RTL8195A_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType & ODM_RTL8195A) {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_EDCCA_DOWN_OPT_11N, BIT12 | BIT11 | BIT10, 0x7);          /*interfernce need > 2^x us, and then EDCCA will be 1*/\r
+               ODM_SetBBReg(pDM_Odm, DOM_REG_EDCCA_DCNF_11N, BIT21 | BIT20, 0x1);              /*0:rx_dfir, 1: dcnf_out, 2 :rx_iq, 3: rx_nbi_nf_out*/\r
        }\r
        }\r
-       Phydm_MACEDCCAState(pDM_Odm, PhyDM_IGNORE_EDCCA);\r
+#else\r
+       if (pDM_Odm->SupportICType & ODM_RTL8814A) {            /*8814a no need to find pwdB lower bound, maybe*/\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_EDCCA_DOWN_OPT, BIT30 | BIT29 | BIT28, 0x7);              /*interfernce need > 2^x us, and then EDCCA will be 1*/\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_EDCCA_POWER_CAL, BIT5, 1);                                                /*0:mean, 1:max pwdB*/\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_ACBB_EDCCA_ENHANCE, BIT29 | BIT28, 0x1);          /*0:rx_dfir, 1: dcnf_out, 2 :rx_iq, 3: rx_nbi_nf_out*/\r
+       } else\r
+               Phydm_SearchPwdBLowerBound(pDM_Odm);\r
+#endif\r
+\r
 }\r
 \r
 \r
 }\r
 \r
 \r
-BOOLEAN\r
+VOID\r
 Phydm_Adaptivity(\r
        IN              PVOID                   pDM_VOID,\r
        IN              u1Byte                  IGI\r
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 Phydm_Adaptivity(\r
        IN              PVOID                   pDM_VOID,\r
        IN              u1Byte                  IGI\r
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       s1Byte TH_L2H_dmc, TH_H2L_dmc, L2H_nolink_Band4 = 0x7f, H2L_nolink_Band4 = 0x7f;\r
-       s1Byte Diff, IGI_target;\r
-       BOOLEAN EDCCA_State = FALSE;\r
-\r
+       s1Byte                  TH_L2H_dmc, TH_H2L_dmc;\r
+       s1Byte                  Diff, IGI_target;\r
+       PADAPTIVITY_STATISTICS  Adaptivity = (PADAPTIVITY_STATISTICS)PhyDM_Get_Structure(pDM_Odm, PHYDM_ADAPTIVITY);\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
-       BOOLEAN         bFwCurrentInPSMode=FALSE;       \r
-       PMGNT_INFO                              pMgntInfo = &(pAdapter->MgntInfo);\r
-       \r
-       pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_FW_PSMODE_STATUS, (pu1Byte)(&bFwCurrentInPSMode));   \r
+       BOOLEAN                 bFwCurrentInPSMode = FALSE;\r
+       PMGNT_INFO              pMgntInfo = &(pAdapter->MgntInfo);\r
+\r
+       pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_FW_PSMODE_STATUS, (pu1Byte)(&bFwCurrentInPSMode));\r
 \r
 \r
-       // Disable EDCCA mode while under LPS mode, added by Roger, 2012.09.14.\r
-       if(bFwCurrentInPSMode)\r
-               return FALSE;\r
+       /*Disable EDCCA mode while under LPS mode, added by Roger, 2012.09.14.*/\r
+       if (bFwCurrentInPSMode)\r
+               return;\r
 #endif\r
 \r
 #endif\r
 \r
-       if(!(pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY))\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("Go to odm_DynamicEDCCA() \n"));\r
-               // Add by Neil Chen to enable edcca to MP Platform \r
+       if (!(pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY)) {\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("Go to odm_DynamicEDCCA()\n"));\r
+               /*Add by Neil Chen to enable edcca to MP Platform */\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-               // Adjust EDCCA.\r
-               if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
+               /*Adjust EDCCA.*/\r
+               if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
                        Phydm_DynamicEDCCA(pDM_Odm);\r
 #endif\r
                        Phydm_DynamicEDCCA(pDM_Odm);\r
 #endif\r
-               return FALSE;\r
+               return;\r
        }\r
        }\r
-\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+       \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       if(pMgntInfo->RegEnableAdaptivity== 2)\r
-#else\r
-       if (pDM_Odm->Adapter->registrypriv.adaptivity_en == 2)\r
+       if (Phydm_CheckChannelPlan(pDM_Odm))\r
+               return;\r
+       if (pDM_Odm->APTotalNum > Adaptivity->APNumTH)\r
+               return;\r
 #endif\r
 #endif\r
-       {\r
-               if(pDM_Odm->Carrier_Sense_enable == FALSE)              // check domain Code for Adaptivity or CarrierSense\r
-               {\r
-                       if ((*pDM_Odm->pBandType == ODM_BAND_5G) && \r
-                               !(pDM_Odm->odm_Regulation5G == REGULATION_ETSI || pDM_Odm->odm_Regulation5G == REGULATION_WW))\r
-                       {\r
-                               ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("Adaptivity skip 5G domain code : %d \n", pDM_Odm->odm_Regulation5G));\r
-                               return FALSE;\r
-                       }\r
 \r
 \r
-                       else if((*pDM_Odm->pBandType == ODM_BAND_2_4G) &&\r
-                               !(pDM_Odm->odm_Regulation2_4G == REGULATION_ETSI || pDM_Odm->odm_Regulation2_4G == REGULATION_WW))\r
-                       {\r
-                               ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("Adaptivity skip 2.4G domain code : %d \n", pDM_Odm->odm_Regulation2_4G));\r
-                               return FALSE;\r
-                       \r
-                       }\r
-                       else if ((*pDM_Odm->pBandType != ODM_BAND_2_4G) && (*pDM_Odm->pBandType != ODM_BAND_5G))\r
-                       {\r
-                               ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("Adaptivity neither 2G nor 5G band, return\n"));\r
-                               return FALSE;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if ((*pDM_Odm->pBandType == ODM_BAND_5G) && \r
-                               !(pDM_Odm->odm_Regulation5G == REGULATION_ETSI || pDM_Odm->odm_Regulation5G == REGULATION_WW))\r
-                       {\r
-                               ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("CarrierSense skip 5G domain code : %d\n", pDM_Odm->odm_Regulation5G));\r
-                               return FALSE;\r
-                       }\r
-\r
-                       else if((*pDM_Odm->pBandType == ODM_BAND_2_4G) &&\r
-                               !(pDM_Odm->odm_Regulation2_4G == REGULATION_ETSI || pDM_Odm->odm_Regulation2_4G == REGULATION_WW))\r
-                       {\r
-                               ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("CarrierSense skip 2.4G domain code : %d\n", pDM_Odm->odm_Regulation2_4G));\r
-                               return FALSE;\r
-                       \r
-                       }\r
-                       else if ((*pDM_Odm->pBandType != ODM_BAND_2_4G) && (*pDM_Odm->pBandType != ODM_BAND_5G))\r
-                       {\r
-                               ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("CarrierSense neither 2G nor 5G band, return\n"));\r
-                               return FALSE;\r
-                       }\r
-               }\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("odm_Adaptivity() =====>\n"));\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("IGI_Base=0x%x, TH_L2H_ini = %d, TH_EDCCA_HL_diff = %d\n",\r
+                        Adaptivity->IGI_Base, pDM_Odm->TH_L2H_ini, pDM_Odm->TH_EDCCA_HL_diff));\r
+#if (RTL8195A_SUPPORT == 0)\r
+       if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES) {\r
+               /*fix AC series when enable EDCCA hang issue*/\r
+               ODM_SetBBReg(pDM_Odm, 0x800, BIT10, 1); /*ADC_mask disable*/\r
+               ODM_SetBBReg(pDM_Odm, 0x800, BIT10, 0); /*ADC_mask enable*/\r
        }\r
 #endif\r
        }\r
 #endif\r
-\r
-       \r
-       ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("odm_Adaptivity() =====> \n"));\r
-       ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("ForceEDCCA=%d, IGI_Base=0x%x, TH_L2H_ini = %d, TH_EDCCA_HL_diff = %d, AdapEn_RSSI = %d\n", \r
-               pDM_Odm->ForceEDCCA, pDM_Odm->IGI_Base, pDM_Odm->TH_L2H_ini, pDM_Odm->TH_EDCCA_HL_diff, pDM_Odm->AdapEn_RSSI));\r
-\r
-       if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
-               ODM_SetBBReg(pDM_Odm, 0x800, BIT10, 0); //ADC_mask enable\r
-\r
-       if(*pDM_Odm->pBandWidth == ODM_BW20M) //CHANNEL_WIDTH_20\r
-               IGI_target = pDM_Odm->IGI_Base;\r
-       else if(*pDM_Odm->pBandWidth == ODM_BW40M)\r
-               IGI_target = pDM_Odm->IGI_Base + 2;\r
-       else if(*pDM_Odm->pBandWidth == ODM_BW80M)\r
-               IGI_target = pDM_Odm->IGI_Base + 2;\r
+       if (*pDM_Odm->pBandWidth == ODM_BW20M)          /*CHANNEL_WIDTH_20*/\r
+               IGI_target = Adaptivity->IGI_Base;\r
+       else if (*pDM_Odm->pBandWidth == ODM_BW40M)\r
+               IGI_target = Adaptivity->IGI_Base + 2;\r
+#if (RTL8195A_SUPPORT == 0)\r
+       else if (*pDM_Odm->pBandWidth == ODM_BW80M)\r
+               IGI_target = Adaptivity->IGI_Base + 2;\r
+#endif\r
        else\r
        else\r
-               IGI_target = pDM_Odm->IGI_Base;\r
-       pDM_Odm->IGI_target = (u1Byte) IGI_target;\r
-       \r
-       if(*pDM_Odm->pChannel >= 149)           // Band4 -> for AP : mode2, for sd4 and sd7 : turnoff adaptivity\r
-       {\r
+               IGI_target = Adaptivity->IGI_Base;\r
+       Adaptivity->IGI_target = (u1Byte) IGI_target;\r
+\r
+       if (*pDM_Odm->pChannel >= 149) {                        /*Band4 -> for AP : mode2*/\r
 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
-               if(pDM_Odm->bLinked)\r
-               {\r
-               Diff = IGI_target -(s1Byte)IGI;\r
-               L2H_nolink_Band4 = pDM_Odm->TH_L2H_ini_mode2 + Diff;\r
-               if(L2H_nolink_Band4 > 10)       \r
-                       L2H_nolink_Band4 = 10;          \r
-               H2L_nolink_Band4 = L2H_nolink_Band4 - pDM_Odm->TH_EDCCA_HL_diff_mode2;\r
+       s1Byte  L2H_nolink_Band4 = 0x7f, H2L_nolink_Band4 = 0x7f;\r
+               if (pDM_Odm->bLinked) {\r
+                       if (pDM_Odm->SupportICType & ODM_RTL8814A) {\r
+                               L2H_nolink_Band4 = (s1Byte)Adaptivity->TH_L2H_ini_mode2 + IGI_target;\r
+                               H2L_nolink_Band4 = L2H_nolink_Band4 - Adaptivity->TH_EDCCA_HL_diff_mode2;\r
+                       } else {\r
+                               Diff = IGI_target - (s1Byte)IGI;\r
+                               L2H_nolink_Band4 = Adaptivity->TH_L2H_ini_mode2 + Diff;\r
+                               if (L2H_nolink_Band4 > 10)\r
+                                       L2H_nolink_Band4 = 10;\r
+                               H2L_nolink_Band4 = L2H_nolink_Band4 - Adaptivity->TH_EDCCA_HL_diff_mode2;\r
+                       }\r
+               } else {\r
+                       L2H_nolink_Band4 = 0x7f;\r
+                       H2L_nolink_Band4 = 0x7f;\r
                }\r
                }\r
-#endif\r
                Phydm_SetEDCCAThreshold(pDM_Odm, H2L_nolink_Band4, L2H_nolink_Band4);\r
                Phydm_SetEDCCAThreshold(pDM_Odm, H2L_nolink_Band4, L2H_nolink_Band4);\r
-               return FALSE;\r
-       }\r
-\r
-       if(!pDM_Odm->ForceEDCCA)\r
-       {\r
-               if(pDM_Odm->RSSI_Min > pDM_Odm->AdapEn_RSSI)\r
-                       EDCCA_State = 1;\r
-               else if(pDM_Odm->RSSI_Min < (pDM_Odm->AdapEn_RSSI - 5))\r
-                       EDCCA_State = 0;\r
+               return;\r
+#endif\r
        }\r
        }\r
-       else\r
-               EDCCA_State = 1;\r
 \r
 \r
-       if(pDM_Odm->Carrier_Sense_enable == FALSE && pDM_Odm->NHM_enable == TRUE)\r
-               Phydm_NHMBB(pDM_Odm);\r
-       \r
-       ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("BandWidth=%s, IGI_target=0x%x, EDCCA_State=%d, EDCCA_enable_state = %d\n",\r
-               (*pDM_Odm->pBandWidth==ODM_BW80M)?"80M":((*pDM_Odm->pBandWidth==ODM_BW40M)?"40M":"20M"), IGI_target, EDCCA_State, pDM_Odm->EDCCA_enable_state));\r
-       ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("RSSI_min = %d, AdapIGIUpper= 0x %x\n", pDM_Odm->RSSI_Min, pDM_Odm->Adaptivity_IGI_upper));\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("BandWidth=%s, IGI_target=0x%x, DynamicLinkAdaptivity = %d\n",\r
+                        (*pDM_Odm->pBandWidth == ODM_BW80M) ? "80M" : ((*pDM_Odm->pBandWidth == ODM_BW40M) ? "40M" : "20M"), IGI_target, Adaptivity->DynamicLinkAdaptivity));\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("RSSI_min = %d, AdapIGIUpper= 0x%x, adaptivity_flag = %d, Adaptivity_enable = %d\n",\r
+                        pDM_Odm->RSSI_Min, pDM_Odm->Adaptivity_IGI_upper, pDM_Odm->adaptivity_flag, pDM_Odm->Adaptivity_enable));\r
 \r
 \r
+       if ((Adaptivity->DynamicLinkAdaptivity == TRUE) && (!pDM_Odm->bLinked) && (pDM_Odm->Adaptivity_enable == FALSE)) {\r
+               Phydm_SetEDCCAThreshold(pDM_Odm, 0x7f, 0x7f);\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("In DynamicLink mode(noisy) and No link, Turn off EDCCA!!\n"));\r
+               return;\r
+       }\r
+#if (!(DM_ODM_SUPPORT_TYPE & ODM_AP))\r
+       else if ((Adaptivity->DynamicLinkAdaptivity == TRUE) && (pDM_Odm->Adaptivity_enable == FALSE)) {\r
+               Phydm_SetEDCCAThreshold(pDM_Odm, 0x7f, 0x7f);\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("In DynamicLink mode(noisy) disable EDCCA, return!!\n"));\r
+               return;\r
+       }\r
+#endif\r
 \r
 \r
-       if(EDCCA_State == 1)\r
-       {\r
-               Diff = IGI_target -(s1Byte)IGI;\r
+       if (pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_RTL8195A)) {\r
+               TH_L2H_dmc = (s1Byte)pDM_Odm->TH_L2H_ini + IGI_target;\r
+               TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;\r
+       }\r
+#if (RTL8195A_SUPPORT == 0)\r
+       else    {\r
+               Diff = IGI_target - (s1Byte)IGI;\r
                TH_L2H_dmc = pDM_Odm->TH_L2H_ini + Diff;\r
                TH_L2H_dmc = pDM_Odm->TH_L2H_ini + Diff;\r
-               if(TH_L2H_dmc > 10)     \r
+               if (TH_L2H_dmc > 10)\r
                        TH_L2H_dmc = 10;\r
                        TH_L2H_dmc = 10;\r
-                               \r
+\r
                TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;\r
 \r
                TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;\r
 \r
-               //replace lower bound to prevent EDCCA always equal 1\r
-                       if(TH_H2L_dmc < pDM_Odm->H2L_lb)                                \r
-                               TH_H2L_dmc = pDM_Odm->H2L_lb;\r
-                       if(TH_L2H_dmc < pDM_Odm->L2H_lb)\r
-                               TH_L2H_dmc = pDM_Odm->L2H_lb;\r
-       }\r
-       else\r
-       {\r
-               TH_L2H_dmc = 0x7f;\r
-               TH_H2L_dmc = 0x7f;\r
+               /*replace lower bound to prevent EDCCA always equal 1*/\r
+               if (TH_H2L_dmc < Adaptivity->H2L_lb)\r
+                       TH_H2L_dmc = Adaptivity->H2L_lb;\r
+               if (TH_L2H_dmc < Adaptivity->L2H_lb)\r
+                       TH_L2H_dmc = Adaptivity->L2H_lb;\r
        }\r
        }\r
-       ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("IGI=0x%x, TH_L2H_dmc = %d, TH_H2L_dmc = %d, adaptivity_flg = %d, bAdaOn = %d, DynamicLinkAdaptivity = %d, NHM_enable = %d\n", \r
-               IGI, TH_L2H_dmc, TH_H2L_dmc, pDM_Odm->adaptivity_flag, pDM_Odm->bAdaOn, pDM_Odm->DynamicLinkAdaptivity, pDM_Odm->NHM_enable));\r
-       \r
+#endif\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("IGI=0x%x, TH_L2H_dmc = %d, TH_H2L_dmc = %d\n", IGI, TH_L2H_dmc, TH_H2L_dmc));\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("Adaptivity_IGI_upper=0x%x, H2L_lb = 0x%x, L2H_lb = 0x%x\n", pDM_Odm->Adaptivity_IGI_upper, Adaptivity->H2L_lb, Adaptivity->L2H_lb));\r
+\r
        Phydm_SetEDCCAThreshold(pDM_Odm, TH_H2L_dmc, TH_L2H_dmc);\r
        Phydm_SetEDCCAThreshold(pDM_Odm, TH_H2L_dmc, TH_L2H_dmc);\r
-       return TRUE;\r
+       return;\r
 }\r
 \r
 \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 }\r
 \r
 \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+\r
+VOID\r
+Phydm_AdaptivityBSOD(\r
+       IN              PVOID           pDM_VOID\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PADAPTER                pAdapter = pDM_Odm->Adapter;\r
+       PMGNT_INFO              pMgntInfo = &(pAdapter->MgntInfo);\r
+       u1Byte                  count = 0;\r
+       u4Byte                  u4Value;\r
+\r
+       /*\r
+       1. turn off RF (TRX Mux in standby mode)\r
+       2. H2C mac id drop\r
+       3. ignore EDCCA\r
+       4. wait for clear FIFO\r
+       5. don't ignore EDCCA\r
+       6. turn on RF (TRX Mux in TRx mdoe)\r
+       7. H2C mac id resume\r
+       */\r
+\r
+       RT_TRACE(COMP_MLME, DBG_WARNING, ("MAC id drop packet!!!!!\n"));\r
+\r
+       pAdapter->dropPktByMacIdCnt++;\r
+       pMgntInfo->bDropPktInProgress = TRUE;\r
+\r
+       pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_MAX_Q_PAGE_NUM, (pu1Byte)(&u4Value));\r
+       RT_TRACE(COMP_INIT, DBG_LOUD, ("Queue Reserved Page Number = 0x%08x\n", u4Value));\r
+       pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_AVBL_Q_PAGE_NUM, (pu1Byte)(&u4Value));\r
+       RT_TRACE(COMP_INIT, DBG_LOUD, ("Available Queue Page Number = 0x%08x\n", u4Value));\r
+\r
+#if 1\r
+\r
+       /*Standby mode*/\r
+       Phydm_SetTRxMux(pDM_Odm, PhyDM_STANDBY_MODE, PhyDM_STANDBY_MODE);\r
+       ODM_Write_DIG(pDM_Odm, 0x20);\r
+\r
+       /*H2C mac id drop*/\r
+       MacIdIndicateDisconnect(pAdapter);\r
+\r
+       /*Ignore EDCCA*/\r
+       Phydm_MACEDCCAState(pDM_Odm, PhyDM_IGNORE_EDCCA);\r
+\r
+       delay_ms(50);\r
+       count = 5;\r
+\r
+#else\r
+\r
+       do {\r
+\r
+               u8Byte          diffTime, curTime, oldestTime;\r
+               u1Byte          queueIdx\r
+\r
+               //3 Standby mode\r
+               Phydm_SetTRxMux(pDM_Odm, PhyDM_STANDBY_MODE, PhyDM_STANDBY_MODE);\r
+               ODM_Write_DIG(pDM_Odm, 0x20);\r
+\r
+               //3 H2C mac id drop\r
+               MacIdIndicateDisconnect(pAdapter);\r
+\r
+               //3 Ignore EDCCA\r
+               Phydm_MACEDCCAState(pDM_Odm, PhyDM_IGNORE_EDCCA);\r
+\r
+               count++;\r
+               delay_ms(10);\r
+\r
+               // Check latest packet\r
+               curTime = PlatformGetCurrentTime();\r
+               oldestTime = 0xFFFFFFFFFFFFFFFF;\r
+\r
+               for (queueIdx = 0; queueIdx < MAX_TX_QUEUE; queueIdx++) {\r
+                       if (!IS_DATA_QUEUE(queueIdx))\r
+                               continue;\r
+\r
+                       if (!pAdapter->bTcbBusyQEmpty[queueIdx]) {\r
+                               RT_TRACE(COMP_MLME, DBG_WARNING, ("oldestTime = %llu\n", oldestTime));\r
+                               RT_TRACE(COMP_MLME, DBG_WARNING, ("Q[%d] = %llu\n", queueIdx, pAdapter->firstTcbSysTime[queueIdx]));\r
+                               if (pAdapter->firstTcbSysTime[queueIdx] < oldestTime)\r
+                                       oldestTime = pAdapter->firstTcbSysTime[queueIdx];\r
+                       }\r
+               }\r
+\r
+               diffTime = curTime - oldestTime;\r
+\r
+               RT_TRACE(COMP_MLME, DBG_WARNING, ("diff s = %llu\n", (diffTime / 1000000)));\r
+\r
+       } while (((diffTime / 1000000) >= 4) && (oldestTime != 0xFFFFFFFFFFFFFFFF));\r
+#endif\r
+\r
+       /*Resume EDCCA*/\r
+       Phydm_MACEDCCAState(pDM_Odm, PhyDM_DONT_IGNORE_EDCCA);\r
+\r
+       /*Turn on TRx mode*/\r
+       Phydm_SetTRxMux(pDM_Odm, PhyDM_TX_MODE, PhyDM_RX_MODE);\r
+       ODM_Write_DIG(pDM_Odm, 0x20);\r
+\r
+       /*Resume H2C macid*/\r
+       MacIdRecoverMediaStatus(pAdapter);\r
+\r
+       pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_AVBL_Q_PAGE_NUM, (pu1Byte)(&u4Value));\r
+       RT_TRACE(COMP_INIT, DBG_LOUD, ("Available Queue Page Number = 0x%08x\n", u4Value));\r
+\r
+       pMgntInfo->bDropPktInProgress = FALSE;\r
+       RT_TRACE(COMP_MLME, DBG_WARNING, ("End of MAC id drop packet, spent %dms\n", count * 10));\r
+\r
+}\r
+\r
 VOID\r
 Phydm_EnableEDCCA(\r
        IN              PVOID                                   pDM_VOID\r
 )\r
 {\r
 \r
 VOID\r
 Phydm_EnableEDCCA(\r
        IN              PVOID                                   pDM_VOID\r
 )\r
 {\r
 \r
-       // This should be moved out of OUTSRC\r
+       /*This should be moved out of OUTSRC*/\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
-       // Enable EDCCA. The value is suggested by SD3 Wilson.\r
-\r
-       //\r
-       // Revised for ASUS 11b/g performance issues, suggested by BB Neil, 2012.04.13.\r
-       //\r
-       if((pDM_Odm->SupportICType == ODM_RTL8723A)&&(IS_WIRELESS_MODE_G(pAdapter)))\r
-       {\r
-               //PlatformEFIOWrite1Byte(Adapter, rOFDM0_ECCAThreshold, 0x00);\r
-               ODM_Write1Byte(pDM_Odm,rOFDM0_ECCAThreshold,0x00);\r
-               ODM_Write1Byte(pDM_Odm,rOFDM0_ECCAThreshold+2,0xFD);\r
-               \r
-       }       \r
-       else\r
-       {\r
-               //PlatformEFIOWrite1Byte(Adapter, rOFDM0_ECCAThreshold, 0x03);\r
-               ODM_Write1Byte(pDM_Odm,rOFDM0_ECCAThreshold,0x03);\r
-               ODM_Write1Byte(pDM_Odm,rOFDM0_ECCAThreshold+2,0x00);\r
-       }       \r
-       \r
-       //PlatformEFIOWrite1Byte(Adapter, rOFDM0_ECCAThreshold+2, 0x00);\r
+       /*Enable EDCCA. The value is suggested by SD3 Wilson.*/\r
+\r
+       /*Revised for ASUS 11b/g performance issues, suggested by BB Neil, 2012.04.13.*/\r
+       if ((pDM_Odm->SupportICType == ODM_RTL8723A) && (IS_WIRELESS_MODE_G(pAdapter))) {\r
+               ODM_Write1Byte(pDM_Odm, rOFDM0_ECCAThreshold, 0x00);\r
+               ODM_Write1Byte(pDM_Odm, rOFDM0_ECCAThreshold + 2, 0xFD);\r
+       } else {\r
+               ODM_Write1Byte(pDM_Odm, rOFDM0_ECCAThreshold, 0x03);\r
+               ODM_Write1Byte(pDM_Odm, rOFDM0_ECCAThreshold + 2, 0x00);\r
+       }\r
 }\r
 \r
 VOID\r
 Phydm_DisableEDCCA(\r
        IN              PVOID                                   pDM_VOID\r
 )\r
 }\r
 \r
 VOID\r
 Phydm_DisableEDCCA(\r
        IN              PVOID                                   pDM_VOID\r
 )\r
-{      \r
-       // Disable EDCCA..\r
+{\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        ODM_Write1Byte(pDM_Odm, rOFDM0_ECCAThreshold, 0x7f);\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        ODM_Write1Byte(pDM_Odm, rOFDM0_ECCAThreshold, 0x7f);\r
-       ODM_Write1Byte(pDM_Odm, rOFDM0_ECCAThreshold+2, 0x7f);\r
+       ODM_Write1Byte(pDM_Odm, rOFDM0_ECCAThreshold + 2, 0x7f);\r
 }\r
 \r
 }\r
 \r
-//\r
-// Description: According to initial gain value to determine to enable or disable EDCCA.\r
-//\r
-// Suggested by SD3 Wilson. Added by tynli. 2011.11.25.\r
-//\r
 VOID\r
 Phydm_DynamicEDCCA(\r
        IN              PVOID                                   pDM_VOID\r
 VOID\r
 Phydm_DynamicEDCCA(\r
        IN              PVOID                                   pDM_VOID\r
@@ -825,52 +827,44 @@ Phydm_DynamicEDCCA(
        PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
        u1Byte                  RegC50, RegC58;\r
        PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
        u1Byte                  RegC50, RegC58;\r
-       BOOLEAN                 bEDCCAenable = FALSE;\r
-       \r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))  \r
-       BOOLEAN                 bFwCurrentInPSMode=FALSE;       \r
 \r
 \r
-       pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_FW_PSMODE_STATUS, (pu1Byte)(&bFwCurrentInPSMode));   \r
+#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+       BOOLEAN                 bFwCurrentInPSMode = FALSE;\r
+\r
+       pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_FW_PSMODE_STATUS, (pu1Byte)(&bFwCurrentInPSMode));\r
 \r
 \r
-       // Disable EDCCA mode while under LPS mode, added by Roger, 2012.09.14.\r
-       if(bFwCurrentInPSMode)\r
+       /*Disable EDCCA mode while under LPS mode, added by Roger, 2012.09.14.*/\r
+       if (bFwCurrentInPSMode)\r
                return;\r
 #endif\r
                return;\r
 #endif\r
-       //\r
-       // 2013/11/14 Ken According to BB team Jame's suggestion, we need to disable soft AP mode EDCCA.\r
-       // 2014/01/08 MH For Miracst AP mode test. We need to disable EDCCA. Otherwise, we may stop\r
-       // to send beacon in noisy environment or platform.\r
-       //\r
-       if(ACTING_AS_AP(pAdapter) || ACTING_AS_AP(GetFirstAPAdapter(pAdapter)))\r
-       //if(ACTING_AS_AP(pAdapter))\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("At least One Port as AP disable EDCCA\n"));\r
+\r
+       /*2013/11/14 Ken According to BB team Jame's suggestion, we need to disable soft AP mode EDCCA.*/\r
+       /*2014/01/08 MH For Miracst AP mode test. We need to disable EDCCA. Otherwise, we may stop*/\r
+       /*to send beacon in noisy environment or platform.*/\r
+\r
+       if (ACTING_AS_AP(pAdapter) || ACTING_AS_AP(GetFirstAPAdapter(pAdapter))) {\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("At least One Port as AP disable EDCCA\n"));\r
                Phydm_DisableEDCCA(pDM_Odm);\r
                Phydm_DisableEDCCA(pDM_Odm);\r
-               if(pHalData->bPreEdccaEnable)\r
+               if (pHalData->bPreEdccaEnable)\r
                        Phydm_DisableEDCCA(pDM_Odm);\r
                pHalData->bPreEdccaEnable = FALSE;\r
                return;\r
        }\r
                        Phydm_DisableEDCCA(pDM_Odm);\r
                pHalData->bPreEdccaEnable = FALSE;\r
                return;\r
        }\r
-       \r
+\r
        RegC50 = (u1Byte)ODM_GetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskByte0);\r
        RegC58 = (u1Byte)ODM_GetBBReg(pDM_Odm, rOFDM0_XBAGCCore1, bMaskByte0);\r
 \r
 \r
        RegC50 = (u1Byte)ODM_GetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskByte0);\r
        RegC58 = (u1Byte)ODM_GetBBReg(pDM_Odm, rOFDM0_XBAGCCore1, bMaskByte0);\r
 \r
 \r
-       if((RegC50 > 0x28 && RegC58 > 0x28) ||\r
-               ((pDM_Odm->SupportICType == ODM_RTL8723A && IS_WIRELESS_MODE_G(pAdapter) && RegC50>0x26)) ||\r
-               (pDM_Odm->SupportICType == ODM_RTL8188E && RegC50 > 0x28))\r
-       {\r
-               if(!pHalData->bPreEdccaEnable)\r
-               {\r
+       if ((RegC50 > 0x28 && RegC58 > 0x28) ||\r
+           ((pDM_Odm->SupportICType == ODM_RTL8723A && IS_WIRELESS_MODE_G(pAdapter) && RegC50 > 0x26)) ||\r
+           (pDM_Odm->SupportICType == ODM_RTL8188E && RegC50 > 0x28)) {\r
+               if (!pHalData->bPreEdccaEnable) {\r
                        Phydm_EnableEDCCA(pDM_Odm);\r
                        pHalData->bPreEdccaEnable = TRUE;\r
                }\r
                        Phydm_EnableEDCCA(pDM_Odm);\r
                        pHalData->bPreEdccaEnable = TRUE;\r
                }\r
-               \r
-       }\r
-       else if((RegC50 < 0x25 && RegC58 < 0x25) || (pDM_Odm->SupportICType == ODM_RTL8188E && RegC50 < 0x25))\r
-       {\r
-               if(pHalData->bPreEdccaEnable)\r
-               {\r
+\r
+       } else if ((RegC50 < 0x25 && RegC58 < 0x25) || (pDM_Odm->SupportICType == ODM_RTL8188E && RegC50 < 0x25)) {\r
+               if (pHalData->bPreEdccaEnable) {\r
                        Phydm_DisableEDCCA(pDM_Odm);\r
                        pHalData->bPreEdccaEnable = FALSE;\r
                }\r
                        Phydm_DisableEDCCA(pDM_Odm);\r
                        pHalData->bPreEdccaEnable = FALSE;\r
                }\r
index e586ac8cf3a747c1d59d46ea306f9488fc49b08a..62dd8a2dd9d46d0c7a42fb04ff0085014ae5e7e8 100755 (executable)
@@ -1,3 +1,4 @@
+\r
 /******************************************************************************\r
  *\r
  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
 /******************************************************************************\r
  *\r
  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
@@ -21,9 +22,9 @@
 #ifndef        __PHYDMADAPTIVITY_H__\r
 #define    __PHYDMADAPTIVITY_H__\r
 \r
 #ifndef        __PHYDMADAPTIVITY_H__\r
 #define    __PHYDMADAPTIVITY_H__\r
 \r
-#define ADAPTIVITY_VERSION     "7.1"\r
+#define ADAPTIVITY_VERSION     "8.5.1"\r
 \r
 \r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
 typedef enum _tag_PhyDM_REGULATION_Type {\r
        REGULATION_FCC = 0,\r
        REGULATION_MKK = 1,\r
 typedef enum _tag_PhyDM_REGULATION_Type {\r
        REGULATION_FCC = 0,\r
        REGULATION_MKK = 1,\r
@@ -34,6 +35,7 @@ typedef enum _tag_PhyDM_REGULATION_Type {
 } PhyDM_REGULATION_TYPE;\r
 #endif\r
 \r
 } PhyDM_REGULATION_TYPE;\r
 #endif\r
 \r
+\r
 typedef enum tag_PhyDM_TRx_MUX_Type\r
 {\r
        PhyDM_SHUTDOWN                  = 0,\r
 typedef enum tag_PhyDM_TRx_MUX_Type\r
 {\r
        PhyDM_SHUTDOWN                  = 0,\r
@@ -48,6 +50,20 @@ typedef enum tag_PhyDM_MACEDCCA_Type
        PhyDM_DONT_IGNORE_EDCCA = 1\r
 }PhyDM_MACEDCCA_Type;\r
 \r
        PhyDM_DONT_IGNORE_EDCCA = 1\r
 }PhyDM_MACEDCCA_Type;\r
 \r
+typedef struct _ADAPTIVITY_STATISTICS {\r
+       s1Byte                  TH_L2H_ini_mode2;\r
+       s1Byte                  TH_EDCCA_HL_diff_mode2;\r
+       s1Byte                  TH_EDCCA_HL_diff_backup;\r
+       s1Byte                  IGI_Base;\r
+       u1Byte                  IGI_target;\r
+       u1Byte                  NHMWait;\r
+       s1Byte                  H2L_lb;\r
+       s1Byte                  L2H_lb;\r
+       BOOLEAN                 bFirstLink;\r
+       BOOLEAN                 bCheck;\r
+       BOOLEAN                 DynamicLinkAdaptivity;\r
+       u1Byte                  APNumTH;\r
+} ADAPTIVITY_STATISTICS, *PADAPTIVITY_STATISTICS;\r
 \r
 VOID\r
 Phydm_CheckAdaptivity(\r
 \r
 VOID\r
 Phydm_CheckAdaptivity(\r
@@ -69,16 +85,6 @@ Phydm_NHMCounterStatistics(
        IN              PVOID                                   pDM_VOID\r
        );\r
 \r
        IN              PVOID                                   pDM_VOID\r
        );\r
 \r
-VOID\r
-Phydm_NHMBBInit(\r
-       IN              PVOID                                   pDM_VOID\r
-);\r
-\r
-VOID\r
-Phydm_NHMBB(\r
-       IN              PVOID                                   pDM_VOID\r
-);\r
-\r
 VOID\r
 Phydm_NHMCounterStatisticsReset(\r
        IN              PVOID                   pDM_VOID\r
 VOID\r
 Phydm_NHMCounterStatisticsReset(\r
        IN              PVOID                   pDM_VOID\r
@@ -124,7 +130,7 @@ Phydm_AdaptivityInit(
        IN              PVOID                                   pDM_VOID\r
        );\r
 \r
        IN              PVOID                                   pDM_VOID\r
        );\r
 \r
-BOOLEAN\r
+VOID\r
 Phydm_Adaptivity(\r
        IN              PVOID                                   pDM_VOID,\r
        IN              u1Byte                                  IGI\r
 Phydm_Adaptivity(\r
        IN              PVOID                                   pDM_VOID,\r
        IN              u1Byte                                  IGI\r
@@ -140,6 +146,12 @@ VOID
 Phydm_DynamicEDCCA(\r
        IN              PVOID                                   pDM_VOID\r
 );\r
 Phydm_DynamicEDCCA(\r
        IN              PVOID                                   pDM_VOID\r
 );\r
+\r
+VOID\r
+Phydm_AdaptivityBSOD(\r
+       IN              PVOID                                   pDM_VOID\r
+);\r
+\r
 #endif\r
 \r
 \r
 #endif\r
 \r
 \r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/RtChnlPlan.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/RtChnlPlan.c
new file mode 100755 (executable)
index 0000000..1f2351f
--- /dev/null
@@ -0,0 +1,480 @@
+/******************************************************************************\r
+ *\r
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.\r
+ *                                        \r
+ * This program is free software; you can redistribute it and/or modify it\r
+ * under the terms of version 2 of the GNU General Public License as\r
+ * published by the Free Software Foundation.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ *\r
+ ******************************************************************************/\r
+\r
+/******************************************************************************\r
+     \r
+ History:\r
+       Data            Who             Remark (Internal History)\r
+       \r
+       05/14/2012      MH              Collect RTK inernal infromation and generate channel plan draft.\r
+       \r
+******************************************************************************/\r
+\r
+//============================================================\r
+// include files\r
+//============================================================\r
+#include "Mp_Precomp.h"\r
+#include "RtChnlPlan.h"\r
+\r
+\r
+\r
+//\r
+//     Channel Plan Domain Code\r
+//\r
+\r
+/*\r
+       Channel Plan Contents                                   \r
+       Domain Code             EEPROM  Countries in Specific Domain            \r
+                       2G RD           5G RD           Bit[6:0]        2G      5G      \r
+       Case    Old Define                              00h~1Fh Old Define      Old Define      \r
+       1               2G_WORLD        5G_NULL         20h             Worldwird 13    NA      \r
+       2               2G_ETSI1        5G_NULL         21h             Europe 2G               NA      \r
+       3               2G_FCC1         5G_NULL         22h             US 2G                   NA      \r
+       4               2G_MKK1         5G_NULL         23h             Japan 2G                NA      \r
+       5               2G_ETSI2        5G_NULL         24h             France 2G               NA      \r
+       6               2G_FCC1         5G_FCC1         25h             US 2G                   US 5G                                   ¤K¤j°ê»{ÃÒ\r
+       7               2G_WORLD        5G_ETSI1        26h             Worldwird 13    Europe                                  ¤K¤j°ê»{ÃÒ\r
+       8               2G_MKK1         5G_MKK1         27h             Japan 2G                Japan 5G                                ¤K¤j°ê»{ÃÒ\r
+       9               2G_WORLD        5G_KCC1         28h             Worldwird 13    Korea                                   ¤K¤j°ê»{ÃÒ\r
+       10              2G_WORLD        5G_FCC2         29h             Worldwird 13    US o/w DFS Channels             \r
+       11              2G_WORLD        5G_FCC3         30h             Worldwird 13    India, Mexico           \r
+       12              2G_WORLD        5G_FCC4         31h             Worldwird 13    Venezuela                       \r
+       13              2G_WORLD        5G_FCC5         32h             Worldwird 13    China                   \r
+       14              2G_WORLD        5G_FCC6         33h             Worldwird 13    Israel                  \r
+       15              2G_FCC1         5G_FCC7         34h             US 2G                   US/Canada                               ¤K¤j°ê»{ÃÒ\r
+       16              2G_WORLD        5G_ETSI2        35h             Worldwird 13    Australia, New Zealand  ¤K¤j°ê»{ÃÒ\r
+       17              2G_WORLD        5G_ETSI3        36h             Worldwird 13    Russia  \r
+       18              2G_MKK1         5G_MKK2         37h             Japan 2G                Japan (W52, W53)        \r
+       19              2G_MKK1         5G_MKK3         38h             Japan 2G                Japan (W56)     \r
+       20              2G_FCC1         5G_NCC1         39h             US 2G                   Taiwan                                  ¤K¤j°ê»{ÃÒ\r
+                                               \r
+       NA              2G_WORLD        5G_FCC1         7F              FCC     FCC DFS Channels        Realtek Define\r
+                                               \r
+                                               \r
+                                               \r
+                                               \r
+                                               \r
+       2.4G    Regulatory      Domains                                 \r
+       Case    2G RD           Regulation      Channels        Frequencyes             Note                                    Countries in Specific Domain\r
+       1               2G_WORLD        ETSI            1~13            2412~2472               Passive scan CH 12, 13  Worldwird 13\r
+       2               2G_ETSI1        ETSI            1~13            2412~2472                                                               Europe\r
+       3               2G_FCC1         FCC                     1~11            2412~2462                                                               US\r
+       4               2G_MKK1         MKK                     1~13, 14        2412~2472, 2484                                                 Japan\r
+       5               2G_ETSI2        ETSI            10~13           2457~2472                                                               France\r
+                                               \r
+                                               \r
+                                               \r
+                                               \r
+       5G Regulatory Domains                                   \r
+       Case    5G RD           Regulation      Channels                        Frequencyes                                     Note                                                                                    Countries in Specific Domain\r
+       1               5G_NULL         NA                      NA                                      NA                                                      Do not support 5GHz     \r
+       2               5G_ETSI1        ETSI            "36~48, 52~64,          \r
+                                                                       100~140"                        "5180~5240, 5260~5230\r
+                                                                                                               5500~5700"                                      Band1, Ban2, Band3                                                              Europe\r
+       3               5G_ETSI2        ETSI            "36~48, 52~64, \r
+                                                                       100~140, 149~165"       "5180~5240, 5260~5230\r
+                                                                                                               5500~5700, 5745~5825"           Band1, Ban2, Band3, Band4                                               Australia, New Zealand\r
+       4               5G_ETSI3        ETSI            "36~48, 52~64, \r
+                                                                                                               100~132, 149~165"       \r
+                                                                                                               "5180~5240, 5260~5230\r
+                                                                                                               5500~5660, 5745~5825"           Band1, Ban2, Band3(except CH 136, 140), Band4"  Russia\r
+       5               5G_FCC1         FCC                     "36~48, 52~64, \r
+                                                                       100~140, 149~165"       \r
+                                                                                                               "5180~5240, 5260~5230\r
+                                                                                                               5500~5700, 5745~5825"           Band1(5150~5250MHz), \r
+                                                                                                                                                                       Band2(5250~5350MHz),\r
+                                                                                                                                                                       Band3(5470~5725MHz),\r
+                                                                                                                                                                       Band4(5725~5850MHz)"                                                    US\r
+       6               5G_FCC2         FCC                     36~48, 149~165          5180~5240, 5745~5825            Band1, Band4    FCC o/w DFS Channels\r
+       7               5G_FCC3         FCC                     "36~48, 52~64, \r
+                                                                       149~165"                        "5180~5240, 5260~5230\r
+                                                                                                               5745~5825"                                      Band1, Ban2, Band4                                                              India, Mexico\r
+       8               5G_FCC4         FCC                     "36~48, 52~64, \r
+                                                                       149~161"                        "5180~5240, 5260~5230\r
+                                                                                                               5745~5805"                                      Band1, Ban2,\r
+                                                                                                                                                                       Band4(except CH 165)"                                                   Venezuela\r
+       9               5G_FCC5         FCC                     149~165                         5745~5825                                       Band4                                                                                   China\r
+       10              5G_FCC6         FCC                     36~48, 52~64            5180~5240, 5260~5230            Band1, Band2                                                                    Israel\r
+       11              5G_FCC7\r
+                       5G_IC1          FCC\r
+                                               IC"                     "36~48, 52~64, \r
+                                                                       100~116, 136, 140, \r
+                                                                       149~165"                        "5180~5240, 5260~5230\r
+                                                                                                               5500~5580, 5680, 5700, \r
+                                                                                                               5745~5825"                                      "Band1, Band2, \r
+                                                                                                                                                                       Band3(except 5600~5650MHz),\r
+                                                                                                                                                                       Band4"                                                                                  "US\r
+                                                                                                                                                                                                                                                                       Canada"\r
+       12              5G_KCC1         KCC                     "36~48, 52~64, \r
+                                                                       100~124, 149~165"       "5180~5240, 5260~5230\r
+                                                                                                               5500~5620, 5745~5825"           "Band1, Ban2, \r
+                                                                                                                                                                       Band3(5470~5650MHz),\r
+                                                                                                                                                                       Band4"                                                                                  Korea\r
+       13              5G_MKK1         MKK                     "36~48, 52~64, \r
+                                                                       100~140"                        "5180~5240, 5260~5230\r
+                                                                                                               5500~5700"                                      W52, W53, W56                                                                   Japan\r
+       14              5G_MKK2         MKK                     36~48, 52~64            5180~5240, 5260~5230            W52, W53                                                                                Japan (W52, W53)\r
+       15              5G_MKK3         MKK                     100~140                         5500~5700                                       W56     Japan (W56)\r
+       16              5G_NCC1         NCC                     "56~64,\r
+                                                                       100~116, 136, 140,\r
+                                                                       149~165"                        "5260~5320\r
+                                                                                                               5500~5580, 5680, 5700, \r
+                                                                                                               5745~5825"                                      "Band2(except CH 52), \r
+                                                                                                                                                                       Band3(except 5600~5650MHz),\r
+                                                                                                                                                                       Band4"                                                                                  Taiwan\r
+                                               \r
+                                               \r
+*/                                             \r
+                                               \r
+//\r
+// 2.4G CHannel \r
+//                                             \r
+/*\r
+\r
+       2.4G Band               Regulatory Domains                                                                                                                              RTL8192D        \r
+       Channel Number  Channel Frequency       US              Canada  Europe  Spain   France  Japan   Japan           20M             40M\r
+                                       (MHz)                           (FCC)   (IC)    (ETSI)                                                  (MPHPT)                         \r
+       1                               2412                            v               v               v                                                               v                       v               \r
+       2                               2417                            v               v               v                                                               v                       v               \r
+       3                               2422                            v               v               v                                                               v                       v               v\r
+       4                               2427                            v               v               v                                                               v                       v               v\r
+       5                               2432                            v               v               v                                                               v                       v               v\r
+       6                               2437                            v               v               v                                                               v                       v               v\r
+       7                               2442                            v               v               v                                                               v                       v               v\r
+       8                               2447                            v               v               v                                                               v                       v               v\r
+       9                               2452                            v               v               v                                                               v                       v               v\r
+       10                              2457                            v               v               v               v               v                               v                       v               v\r
+       11                              2462                            v               v               v               v               v                               v                       v               v\r
+       12                              2467                                                            v                               v                               v                       v               v\r
+       13                              2472                                                            v                               v                               v                       v       \r
+       14                              2484                                                                                                            v                                       v       \r
+\r
+\r
+*/\r
+\r
+\r
+//\r
+// 5G Operating Channel\r
+//\r
+/*\r
+\r
+       5G Band         RTL8192D        RTL8195 (Jaguar)                                Jaguar 2        Regulatory Domains                                                                                      \r
+       Channel Number  Channel Frequency       Global  Global                          Global  "US\r
+(FCC 15.407)"  "Canada\r
+(FCC, except 5.6~5.65GHz)"     Argentina, Australia, New Zealand, Brazil, S. Africa (FCC/ETSI) "Europe\r
+(CE 301 893)"  China   India, Mexico, Singapore        Israel, Turkey  "Japan\r
+(MIC Item 19-3, 19-3-2)"       Korea   Russia, Ukraine "Taiwan\r
+(NCC)" Venezuela\r
+               (MHz)   (20MHz) (20MHz) (40MHz) (80MHz) (160MHz)        (20MHz) (20MHz) (20MHz) (20MHz) (20MHz) (20MHz) (20MHz) (20MHz) (20MHz) (20MHz) (20MHz) (20MHz) (20MHz)\r
+"Band 1\r
+5.15GHz\r
+~\r
+5.25GHz"       36      5180    v       v       v       v               v       Indoor  Indoor  v       Indoor          v       Indoor  Indoor  v       v               v\r
+       40      5200    v       v                               v       Indoor  Indoor  v       Indoor          v       Indoor  Indoor  v       v               v\r
+       44      5220    v       v       v                       v       Indoor  Indoor  v       Indoor          v       Indoor  Indoor  v       v               v\r
+       48      5240    v       v                               v       Indoor  Indoor  v       Indoor          v       Indoor  Indoor  v       v               v\r
+"Band 2\r
+5.25GHz\r
+~\r
+5.35GHz\r
+(DFS)" 52      5260    v       v       v       v               v       v       v       v       Indoor          v       Indoor  Indoor  v       v               v\r
+       56      5280    v       v                               v       v       v       v       Indoor          v       Indoor  Indoor  v       v       Indoor  v\r
+       60      5300    v       v       v                       v       v       v       v       Indoor          v       Indoor  Indoor  v       v       Indoor  v\r
+       64      5320    v       v                               v       v       v       v       Indoor          v       Indoor  Indoor  v       v       Indoor  v\r
+                                                                                                                                                               \r
+"Band 3\r
+5.47GHz\r
+~\r
+5.725GHz\r
+(DFS)" 100     5500    v       v       v       v               v       v       v       v       v                               v       v       v       v       \r
+       104     5520    v       v                               v       v       v       v       v                               v       v       v       v       \r
+       108     5540    v       v       v                       v       v       v       v       v                               v       v       v       v       \r
+       112     5560    v       v                               v       v       v       v       v                               v       v       v       v       \r
+       116     5580    v       v       v       v               v       v       v       v       v                               v       v       v       v       \r
+       120     5600    v       v                               v       Indoor          v       Indoor                          v       v       v               \r
+       124     5620    v       v       v                       v       Indoor          v       Indoor                          v       v       v               \r
+       128     5640    v       v                               v       Indoor          v       Indoor                          v               v               \r
+       132     5660    v       v       v       E               v       Indoor          v       Indoor                          v               v               \r
+       136     5680    v       v                               v       v       v       v       v                               v                       v       \r
+       140     5700    v       v       E                       v       v       v       v       v                               v                       v       \r
+       144     5720    E       E                               E                                                                                               \r
+"Band 4\r
+5.725GHz\r
+~\r
+5.85GHz\r
+(~5.9GHz)"     149     5745    v       v       v       v               v       v       v       v               v       v                       v       v       v       v\r
+       153     5765    v       v                               v       v       v       v               v       v                       v       v       v       v\r
+       157     5785    v       v       v                       v       v       v       v               v       v                       v       v       v       v\r
+       161     5805    v       v                               v       v       v       v               v       v                       v       v       v       v\r
+       165     5825    v       v       P       P               v       v       v       v               v       v                       v       v       v       \r
+       169     5845    P       P                               P                                                                                               \r
+       173     5865    P       P       P                       P                                                                                               \r
+       177     5885    P       P                               P                                                                                               \r
+Channel Count                  28      28      14      7       0       28      24      20      24      19      5       13      8       19      20      22      15      12\r
+                       E: FCC accepted the ask for CH144 from Accord.                                  PS: 160MHz ¥Î 80MHz+80MHz¹ê²{¡H                 Argentina       Belgium (¤ñ§Q®É)                India   Israel                  Russia          \r
+                       P: Customer's requirement from James.                                                           Australia       The Netherlands (²üÄõ)          Mexico  Turkey                  Ukraine         \r
+                                                                                       New Zealand     UK (­^°ê)               Singapore                                               \r
+                                                                                       Brazil  Switzerland (·ç¤h)                                                              \r
+\r
+\r
+*/\r
+\r
+/*---------------------------Define Local Constant---------------------------*/\r
+\r
+\r
+// define Maximum Power v.s each band for each region \r
+// ISRAEL\r
+// Format:\r
+// RT_CHANNEL_DOMAIN_Region ={{{Chnl_Start, Chnl_end, Pwr_dB_Max}, {Chn2_Start, Chn2_end, Pwr_dB_Max}, {Chn3_Start, Chn3_end, Pwr_dB_Max}, {Chn4_Start, Chn4_end, Pwr_dB_Max}, {Chn5_Start, Chn5_end, Pwr_dB_Max}}, Limit_Num} */\r
+// RT_CHANNEL_DOMAIN_FCC ={{{01,11,30}, {36,48,17}, {52,64,24}, {100,140,24}, {149,165,30}}, 5} \r
+// "NR" is non-release channle.\r
+// Issue--- Israel--Russia--New Zealand\r
+// DOMAIN_01= (2G_WORLD, 5G_NULL)\r
+// DOMAIN_02= (2G_ETSI1, 5G_NULL)\r
+// DOMAIN_03= (2G_FCC1, 5G_NULL)\r
+// DOMAIN_04= (2G_MKK1, 5G_NULL)\r
+// DOMAIN_05= (2G_ETSI2, 5G_NULL)\r
+// DOMAIN_06= (2G_FCC1, 5G_FCC1)\r
+// DOMAIN_07= (2G_WORLD, 5G_ETSI1)\r
+// DOMAIN_08= (2G_MKK1, 5G_MKK1)\r
+// DOMAIN_09= (2G_WORLD, 5G_KCC1)\r
+// DOMAIN_10= (2G_WORLD, 5G_FCC2)\r
+// DOMAIN_11= (2G_WORLD, 5G_FCC3)----india\r
+// DOMAIN_12= (2G_WORLD, 5G_FCC4)----Venezuela\r
+// DOMAIN_13= (2G_WORLD, 5G_FCC5)----China\r
+// DOMAIN_14= (2G_WORLD, 5G_FCC6)----Israel\r
+// DOMAIN_15= (2G_FCC1, 5G_FCC7)-----Canada\r
+// DOMAIN_16= (2G_WORLD, 5G_ETSI2)---Australia\r
+// DOMAIN_17= (2G_WORLD, 5G_ETSI3)---Russia\r
+// DOMAIN_18= (2G_MKK1, 5G_MKK2)-----Japan\r
+// DOMAIN_19= (2G_MKK1, 5G_MKK3)-----Japan\r
+// DOMAIN_20= (2G_FCC1, 5G_NCC1)-----Taiwan\r
+// DOMAIN_21= (2G_FCC1, 5G_NCC1)-----Taiwan\r
+
+
+static RT_CHANNEL_PLAN_MAXPWR  ChnlPlanPwrMax_2G[] = {\r
+\r
+       // 2G_WORLD, \r
+       {{1, 13, 20}, 1},       \r
+\r
+       // 2G_ETSI1\r
+       {{1, 13, 20}, 1},\r
+\r
+       /* RT_CHANNEL_DOMAIN_ETSI */\r
+       {{{1, 11, 17}, {40, 56, 17}, {60, 128, 17}, {0, 0, 0}, {149, 165, 17}}, 4},\r
+\r
+       // RT_CHANNEL_DOMAIN_MKK\r
+       {{{1, 11, 17}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, 1},\r
+\r
+       // Add new channel plan mex power table.\r
+       // ......\r
+       };\r
+\r
+\r
+/*\r
+//===========================================1:(2G_WORLD, 5G_NULL)\r
+\r
+RT_CHANNEL_PLAN_MAXPWR RT_DOMAIN_01 ={{{01,13,20}, {NR,NR,0}, {NR,NR,0}, {NR,NR,0}, {NR,NR,0}}, 1} \r
+\r
+//===========================================2:(2G_ETSI1, 5G_NULL)\r
+\r
+RT_DOMAIN_02 ={{{01,13,20}, {NR,NR,0}, {NR,NR,0}, {NR,NR,0}, {NR,NR,0}}, 1}\r
+\r
+//===========================================3:(2G_FCC1, 5G_NULL)\r
+\r
+RT_DOMAIN_03 ={{{01,11,30}, {NR,NR,0}, {NR,NR,0}, {NR,NR,0}, {NR,NR,0}}, 1}\r
+\r
+//===========================================4:(2G_MKK1, 5G_NULL)\r
+\r
+RT_DOMAIN_04 ={{{01,14,23}, {NR,NR,0}, {NR,NR,0}, {NR,NR,0}, {NR,NR,0}}, 1}\r
+\r
+//===========================================5:(2G_ETSI2, 5G_NULL)\r
+\r
+RT_DOMAIN_05 ={{{10,13,20}, {NR,NR,0}, {NR,NR,0}, {NR,NR,0}, {NR,NR,0}}, 1}\r
+\r
+//===========================================6:(2G_FCC1, 5G_FCC1)\r
+\r
+RT_DOMAIN_06 ={{{01,13,30}, {36,48,17}, {52,64,24}, {100,140,24}, {149,165,30}}, 5}\r
+\r
+//===========================================7:(2G_WORLD, 5G_ETSI1)\r
+\r
+RT_DOMAIN_07 ={{{01,13,20}, {36,48,23}, {52,64,23}, {100,140,30}, {NR,NR,0}}, 4}\r
+\r
+//===========================================8:(2G_MKK1, 5G_MKK1)\r
+\r
+RT_DOMAIN_08 ={{{01,14,23}, {36,48,23}, {52,64,23}, {100,140,23}, {NR,NR,0}}, 4}\r
+\r
+//===========================================9:(2G_WORLD, 5G_KCC1)\r
+\r
+RT_DOMAIN_09 ={{{01,13,20}, {36,48,17}, {52,64,23}, {100,124,23}, {149,165,23}}, 5}\r
+\r
+//===========================================10:(2G_WORLD, 5G_FCC2)\r
+\r
+RT_DOMAIN_10 ={{{01,13,20}, {36,48,17}, {NR,NR,0}, {NR,NR,0}, {149,165,30}}, 3}\r
+\r
+//===========================================11:(2G_WORLD, 5G_FCC3)\r
+RT_DOMAIN_11 ={{{01,13,20}, {36,48,23}, {52,64,23}, {NR,NR,0}, {149,165,23}}, 4}\r
+\r
+//===========================================12:(2G_WORLD, 5G_FCC4)\r
+RT_DOMAIN_12 ={{{01,13,20}, {36,48,24}, {52,64,24}, {NR,NR,0}, {149,161,27}}, 4}\r
+\r
+//===========================================13:(2G_WORLD, 5G_FCC5)\r
+RT_DOMAIN_13 ={{{01,13,20}, {NR,NR,0}, {NR,NR,0}, {NR,NR,0}, {149,165,27}}, 2}\r
+\r
+//===========================================14:(2G_WORLD, 5G_FCC6)\r
+RT_DOMAIN_14 ={{{01,13,20}, {36,48,17}, {52,64,17}, {NR,NR,0}, {NR,NR,0}}, 3}\r
+\r
+//===========================================15:(2G_FCC1, 5G_FCC7)\r
+RT_DOMAIN_15 ={{{01,11,30}, {36,48,23}, {52,64,24}, {100,140,24}, {149,165,30}}, 5}\r
+\r
+//===========================================16:(2G_WORLD, 5G_ETSI2)\r
+RT_DOMAIN_16 ={{{01,13,20}, {36,48,23}, {52,64,23}, {100,140,30}, {149,165,30}}, 5}\r
+\r
+//===========================================17:(2G_WORLD, 5G_ETSI3)\r
+RT_DOMAIN_17 ={{{01,13,20}, {36,48,23}, {52,64,23}, {100,132,30}, {149,165,20}}, 5}\r
+\r
+//===========================================18:(2G_MKK1, 5G_MKK2)\r
+RT_DOMAIN_18 ={{{01,14,23}, {36,48,23}, {52,64,23}, {NR,NR,0}, {NR,NR,0}}, 3}\r
+\r
+//===========================================19:(2G_MKK1, 5G_MKK3)\r
+RT_DOMAIN_19 ={{{01,14,23}, {NR,NR,0}, {NR,NR,0}, {100,140,23}, {NR,NR,0}}, 2}\r
+\r
+//===========================================20:(2G_FCC1, 5G_NCC1)\r
+RT_DOMAIN_20 ={{{01,11,30}, {NR,NR,0}, {56,64,23}, {100,140,24}, {149,165,30}}, 4}\r
+\r
+//===========================================21:(2G_FCC1, 5G_NCC2)\r
+RT_DOMAIN_21 ={{{01,11,30}, {NR,NR,0}, {56,64,23}, {NR,NR,0}, {149,165,30}}, 3}\r
+\r
+//===========================================22:(2G_WORLD, 5G_FCC3)\r
+RT_DOMAIN_22 ={{{01,13,24}, {36,48,20}, {52,64,24}, {NR,NR,0}, {149,165,30}}, 4}\r
+\r
+//===========================================23:(2G_WORLD, 5G_ETSI2)\r
+RT_DOMAIN_23 ={{{01,13,20}, {36,48,23}, {52,64,23}, {100,140,30}, {149,165,30}}, 5}\r
+\r
+*/\r
+\r
+//\r
+// Counter & Realtek Channel plan transfer table.\r
+//\r
+RT_CHNL_CTRY_TBL       RtCtryChnlTbl[] = \r
+{\r
+\r
+       {\r
+               RT_CTRY_AL,                                                     //      "Albaniaªüº¸¤Ú¥§¨È"                                     \r
+               "AL",\r
+               RT_2G_WORLD,\r
+               RT_5G_WORLD,            \r
+               RT_CHANNEL_DOMAIN_UNDEFINED                     // 2G/5G world.\r
+       },\r
+#if 0  \r
+       {\r
+               RT_CTRY_BB,                                                     //  "Barbados¤Ú¤Ú¦h´µ"                          \r
+               "BB",\r
+               RT_2G_WORLD,\r
+               RT_5G_NULL,             \r
+               RT_CHANNEL_DOMAIN_EFUSE_0x20            // 2G world. 5G_NULL\r
+       },\r
+       \r
+       {\r
+               RT_CTRY_DE,                                                     //  "Germany¼w°ê"                                       \r
+               "DE",\r
+               RT_2G_WORLD,\r
+               RT_5G_ETSI1,            \r
+               RT_CHANNEL_DOMAIN_EFUSE_0x26\r
+       },\r
+       \r
+       {\r
+               RT_CTRY_US,                                                     //  "Germany¼w°ê"                                       \r
+               "US",\r
+               RT_2G_FCC1,\r
+               RT_5G_FCC7,             \r
+               RT_CHANNEL_DOMAIN_EFUSE_0x34\r
+       },\r
+\r
+       {\r
+               RT_CTRY_JP,                                                     //  "Germany¼w°ê"                                       \r
+               "JP",\r
+               RT_2G_MKK1,\r
+               RT_5G_MKK1,             \r
+               RT_CHANNEL_DOMAIN_EFUSE_0x34\r
+       },\r
+               \r
+       {\r
+               RT_CTRY_TW,                                                     //  "Germany¼w°ê"                                       \r
+               "TW",\r
+               RT_2G_FCC1,\r
+               RT_5G_NCC1,             \r
+               RT_CHANNEL_DOMAIN_EFUSE_0x39\r
+       },      \r
+#endif\r
+\r
+};     // RtCtryChnlTbl\r
+\r
+//\r
+// Realtek Defined Channel plan.\r
+//\r
+#if 0\r
+\r
+static RT_CHANNEL_PLAN_NEW             RtChnlPlan[] =\r
+{\r
+       // Channel Plan   0x20.\r
+       {\r
+               &RtCtryChnlTbl[1],                                      // RT_CHNL_CTRY_TBL Country & channel plan transfer table.              \r
+               RT_CHANNEL_DOMAIN_EFUSE_0x20,           // RT_CHANNEL_DOMAIN RT Channel Plan Define \r
+               RT_2G_WORLD,                                            // RT_REGULATION_2G\r
+               RT_5G_NULL,                                                     // RT_REGULATION_5G\r
+               RT_WORLD,                                                       // RT_REGULATION_CMN RT Regulatory domain definition.\r
+               RT_SREQ_NA,                                                     // RT Channel plan special & customerize requirement.\r
+               \r
+               CHNL_RT_2G_WORLD,\r
+               CHNL_RT_2G_WORLD_SCAN_TYPE,\r
+               &ChnlPlanPwrMax_2G[0],\r
+\r
+               CHNL_RT_5G_NULL,\r
+               CHNL_RT_5G_NULL_SCAN_TYPE,\r
+\r
+               \r
+       },\r
+       \r
+       // Channel Plan   0x26.\r
+       {\r
+               &RtCtryChnlTbl[1],                                      // RT_CHNL_CTRY_TBL Country & channel plan transfer table.              \r
+               RT_CHANNEL_DOMAIN_EFUSE_0x26,           // RT_CHANNEL_DOMAIN RT Channel Plan Define \r
+               RT_2G_WORLD,                                            // RT_REGULATION_2G\r
+               RT_5G_ETSI1,                                            // RT_REGULATION_5G\r
+               RT_WORLD,                                                       // RT_REGULATION_CMN RT Regulatory domain definition.\r
+               RT_SREQ_NA,                                                     // RT Channel plan special & customerize requirement.\r
+               \r
+               CHNL_RT_2G_WORLD,                                       // 2G workd cannel\r
+               CHNL_RT_2G_WORLD_SCAN_TYPE,\r
+               &ChnlPlanPwrMax_2G[1],\r
+               \r
+               CHNL_RT_5G_ETSI1,\r
+               CHNL_RT_5G_ETSI1_SCAN_TYPE,\r
+               \r
+       }\r
+       \r
+       \r
+};\r
+#endif
+
+\r
+\r
+\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/RtChnlPlan.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/RtChnlPlan.h
new file mode 100755 (executable)
index 0000000..37786cf
--- /dev/null
@@ -0,0 +1,699 @@
+/******************************************************************************\r
+ *\r
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.\r
+ *                                        \r
+ * This program is free software; you can redistribute it and/or modify it\r
+ * under the terms of version 2 of the GNU General Public License as\r
+ * published by the Free Software Foundation.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ *\r
+ ******************************************************************************/\r
+\r
+\r
+#ifndef        __RT_CHANNELPLAN_H__\r
+#define __RT_CHANNELPLAN_H__\r
+\r
+typedef enum _RT_CHANNEL_DOMAIN_NEW\r
+{\r
+\r
+       //===== Add new channel plan above this line ===============//\r
+\r
+       // For new architecture we define different 2G/5G CH area for all country.\r
+       // 2.4 G only\r
+       RT_CHANNEL_DOMAIN_2G_WORLD_5G_NULL                              = 0x20,\r
+       RT_CHANNEL_DOMAIN_2G_ETSI1_5G_NULL                              = 0x21,\r
+       RT_CHANNEL_DOMAIN_2G_FCC1_5G_NULL                               = 0x22,\r
+       RT_CHANNEL_DOMAIN_2G_MKK1_5G_NULL                               = 0x23,\r
+       RT_CHANNEL_DOMAIN_2G_ETSI2_5G_NULL                              = 0x24,\r
+       // 2.4 G + 5G type 1\r
+       RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC1                               = 0x25,\r
+       RT_CHANNEL_DOMAIN_2G_WORLD_5G_ETSI1                             = 0x26,\r
+       //RT_CHANNEL_DOMAIN_2G_WORLD_5G_ETSI1                           = 0x27,\r
+       // .....\r
+\r
+       RT_CHANNEL_DOMAIN_MAX_NEW,\r
+       \r
+}RT_CHANNEL_DOMAIN_NEW, *PRT_CHANNEL_DOMAIN_NEW;\r
+\r
+\r
+#if 0\r
+#define DOMAIN_CODE_2G_WORLD \\r
+        {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13\r
+#define DOMAIN_CODE_2G_ETSI1 \\r
+        {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13\r
+#define DOMAIN_CODE_2G_ETSI2 \\r
+        {1,2,3,4,5,6,7,8,9,10,11}, 11\r
+#define DOMAIN_CODE_2G_FCC1 \\r
+        {1,2,3,4,5,6,7,8,9,10,11,12,13,14}, 14\r
+#define DOMAIN_CODE_2G_MKK1 \\r
+        {10,11,12,13}, 4\r
+\r
+#define DOMAIN_CODE_5G_ETSI1 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19\r
+#define DOMAIN_CODE_5G_ETSI2 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24\r
+#define DOMAIN_CODE_5G_ETSI3 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,149,153,157,161,165}, 22\r
+#define DOMAIN_CODE_5G_FCC1 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24\r
+#define DOMAIN_CODE_5G_FCC2 \\r
+        {36,40,44,48,149,153,157,161,165}, 9\r
+#define DOMAIN_CODE_5G_FCC3 \\r
+        {36,40,44,48,52,56,60,64,149,153,157,161,165}, 13\r
+#define DOMAIN_CODE_5G_FCC4 \\r
+        {36,40,44,48,52,56,60,64,149,153,157,161}, 12\r
+#define DOMAIN_CODE_5G_FCC5 \\r
+        {149,153,157,161,165}, 5\r
+#define DOMAIN_CODE_5G_FCC6 \\r
+        {36,40,44,48,52,56,60,64}, 8\r
+#define DOMAIN_CODE_5G_FCC7 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20\r
+#define DOMAIN_CODE_5G_IC1 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20\r
+#define DOMAIN_CODE_5G_KCC1 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,149,153,157,161,165}, 20\r
+#define DOMAIN_CODE_5G_MKK1 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19\r
+#define DOMAIN_CODE_5G_MKK2 \\r
+        {36,40,44,48,52,56,60,64}, 8\r
+#define DOMAIN_CODE_5G_MKK3 \\r
+        {100,104,108,112,116,120,124,128,132,136,140}, 11\r
+#define DOMAIN_CODE_5G_NCC1 \\r
+        {56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 24\r
+#define DOMAIN_CODE_5G_NCC2 \\r
+        {56,60,64,149,153,157,161,165}, 8                      \r
+#define UNDEFINED \\r
+        {0}, 0\r
+#endif\r
+\r
+//\r
+//\r
+//\r
+/*\r
+\r
+Countries                                                      "Country Abbreviation"  Domain Code                                     SKU's   Ch# of 20MHz\r
+                                                                                                                       2G                      5G                                              Ch# of 40MHz\r
+"Albaniaªüº¸¤Ú¥§¨È"                                    AL                                                                                                      Local Test      \r
+                                                                                                                                               \r
+"Algeriaªüº¸¤Î§Q¨È"                                    DZ                                                                      CE TCF          \r
+                                                                                                                               \r
+"Antigua & Barbuda¦w´£¥Ê®q&¤Ú¥¬¹F"     AG                                              2G_WORLD                                        FCC TCF \r
+                                                                                                                                       \r
+"Argentinaªü®Ú§Ê"                                      AR                                              2G_WORLD                                        Local Test      \r
+                                                                                                                                                       \r
+"Armenia¨È¬ü¥§¨È"                                      AM                                              2G_WORLD                                        ETSI    \r
+                                                                                                                                                       \r
+"Arubaªü¾|¤Ú®q"                                                AW                                              2G_WORLD                                        FCC TCF \r
+                                                                                                                                       \r
+"Australia¿D¬w"                                                AU                                              2G_WORLD                5G_ETSI2                \r
+                                                                                                                                       \r
+"Austria¶ø¦a§Q"                                                AT                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                       \r
+"Azerbaijanªü¶ë«ô¾Ê"                           AZ                                              2G_WORLD                                        CE TCF  \r
+                                                                                                               \r
+"Bahamas¤Ú«¢°¨"                                                BS                                              2G_WORLD                                \r
+                                                                                                                               \r
+"Barbados¤Ú¤Ú¦h´µ"                                     BB                                              2G_WORLD                                        FCC TCF \r
+                                                                                                                               \r
+"Belgium¤ñ§Q®É"                                                BE                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                                       \r
+"Bermuda¦Ê¼}¹F"                                                BM                                              2G_WORLD                                        FCC TCF \r
+                                                                                                                                                               \r
+"Brazil¤Ú¦è"                                           BR                                              2G_WORLD                                        Local Test      \r
+                                                                                                                               \r
+"Bulgaria«O¥[§Q¨È"                                     BG                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"Canada¥[®³¤j"                                         CA                                              2G_FCC1                 5G_FCC7         IC / FCC        IC / FCC\r
+                                                                                                               \r
+"Cayman Islands¶}°Ò¸s®q"                       KY                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                               \r
+"Chile´¼§Q"                                                    CL                                              2G_WORLD                                        FCC TCF \r
+                                                                                                                                       \r
+"China¤¤°ê"                                                    CN                                              2G_WORLD                5G_FCC5         «H³¡?¡i2002¡j353?       \r
+                                                                                                               \r
+"Columbia­ô­Û¤ñ¨È"                                     CO                                              2G_WORLD                                        Voluntary       \r
+                                                                                                                       \r
+"Costa Rica­ô´µ¹F¾¤¥["                         CR                                              2G_WORLD                                        FCC TCF \r
+                                                                                                                       \r
+"Cyprus¶ë®ú¸ô´µ"                                       CY                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"Czech ±¶§J"                                           CZ                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                                       \r
+"Denmark¤¦³Á"                                          DK                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                               \r
+"Dominican Republic¦h©ú¥§¥[¦@©M°ê"     DO                                              2G_WORLD                                        FCC TCF \r
+                                                                                                               \r
+"Egypt®J¤Î"    EG      2G_WORLD                        CE T                                                                                            CF              \r
+                                                                                                               \r
+"El SalvadorÂĺ¸¥Ë¦h"                          SV                                              2G_WORLD                                        Voluntary       \r
+                                                                                                                       \r
+"Estonia·R¨F¥§¨È"                                      EE                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"FinlandªâÄõ"                                          FI                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                                       \r
+"Franceªk°ê"                                           FR                                                                              5G_E            TSI1    CE      \r
+                                                                                                                                       \r
+"Germany¼w°ê"                                          DE                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                                       \r
+"Greece §Æþ"                                          GR                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"GuamÃö®q"                                                     GU                                              2G_WORLD                                \r
+                                                                                                                               \r
+"Guatemala¥Ê¦a°¨©Ô"                                    GT                                              2G_WORLD                                \r
+                                                                                                                               \r
+"Haiti®ü¦a"                                                    HT                                              2G_WORLD                                        FCC TCF \r
+                                                                                                                               \r
+"Honduras§»³£©Ô´µ"                                     HN                                              2G_WORLD                                        FCC TCF \r
+                                                                                                                               \r
+"Hungary¦I¤ú§Q"                                                HU                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                                       \r
+"Iceland¦B®q"                                          IS                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"India¦L«×"                                                    IN                                              2G_WORLD                5G_FCC3         FCC/CE TCF      \r
+                                                                                                                                       \r
+"Ireland·Rº¸Äõ"                                                IE                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                                       \r
+"Israel¥H¦â¦C"                                         IL                                                                              5G_F            CC6     CE TCF  \r
+                                                                                                                                       \r
+"Italy¸q¤j§Q"                                          IT                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"Japan¤é¥»"                                                    JP                                              2G_MKK1                 5G_MKK1         MKK     MKK\r
+                                                                                                                                       \r
+"KoreaÁú°ê"                                                    KR                                              2G_WORLD                5G_KCC1         KCC     KCC\r
+                                                                                                                               \r
+"Latvia©Ô²æºû¨È"                                       LV                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"Lithuania¥ß³³©{"                                      LT                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"Luxembourg¿c´Ë³ù"                                     LU                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"Malaysia°¨¨Ó¦è¨È"                                     MY                                              2G_WORLD                                        Local Test      \r
+                                                                                                                               \r
+"Malta°¨º¸¥L"                                          MT                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                                       \r
+"Mexico¾¥¦è­ô"                                         MX                                              2G_WORLD                5G_FCC3         Local Test      \r
+                                                                                                                                       \r
+"Morocco¼¯¬¥­ô"                                                MA                                                                                                      CE TCF  \r
+                                                                                                                               \r
+"Netherlands²üÄõ"                                      NL                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"New Zealand¯Ã¦èÄõ"                                    NZ                                              2G_WORLD                5G_ETSI2                \r
+                                                                                                                               \r
+"Norway®¿«Â"                                           NO                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                                       \r
+"Panama¤Ú®³°¨ "                                                PA                                              2G_FCC1                                         Voluntary       \r
+                                                                                                                               \r
+"Philippinesµá«ß»«"                                    PH                                              2G_WORLD                                        FCC TCF \r
+                                                                                                                               \r
+"PolandªiÄõ"                                           PL                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"Portugal¸²µå¤ú"                                       PT                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                               \r
+"Romaniaù°¨¥§¨È"                                      RO                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                       \r
+"Russia«Xù´µ"                                         RU                                              2G_WORLD                5G_ETSI3        CE TCF  \r
+                                                                                                                       \r
+"Saudi Arabia¨F¦aªü©Ô§B"                       SA                                              2G_WORLD                                        CE TCF  \r
+                                                                                                                       \r
+"Singapore·s¥[©Y"                                      SG                                              2G_WORLD                                \r
+                                                                                                                               \r
+"Slovakia´µ¬¥¥ï§J"                                     SK                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                       \r
+"Slovenia´µ¬¥ºû¥§¨È"                           SI                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                       \r
+"South Africa«n«D"                                     ZA                                              2G_WORLD                                        CE TCF  \r
+                                                                                                                       \r
+"Spain¦è¯Z¤ú"                                          ES                                                                              5G_ETSI1        CE      \r
+                                                                                                                                       \r
+"Sweden·ç¨å"                                           SE                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                       \r
+"Switzerland·ç¤h"                                      CH                                              2G_WORLD                5G_ETSI1        CE      \r
+                                                                                                                       \r
+"Taiwan»OÆW"                                           TW                                              2G_FCC1                 5G_NCC1 NCC     \r
+                                                                                                                                       \r
+"Thailand®õ°ê"                                         TH                                              2G_WORLD                                        FCC/CE TCF      \r
+                                                                                                                                       \r
+"Turkey¤g¦Õ¨ä"                                         TR                                              2G_WORLD                                \r
+                                                                                                                                       \r
+"Ukraine¯Q§JÄõ"                                                UA                                              2G_WORLD                                        Local Test      \r
+                                                                                                                       \r
+"United Kingdom­^°ê"                           GB                                              2G_WORLD                5G_ETSI1        CE      ETSI\r
+                                                                                                                       \r
+"United States¬ü°ê"                                    US                                              2G_FCC1                 5G_FCC7         FCC     FCC\r
+                                                                                                                       \r
+"Venezuela©e¤º·ç©Ô"                                    VE                                              2G_WORLD                5G_FCC4         FCC TCF \r
+                                                                                                                       \r
+"Vietnam¶V«n"                                          VN                                              2G_WORLD                                        FCC/CE TCF      \r
+                                       \r
+\r
+\r
+*/\r
+\r
+// Counter abbervation.\r
+typedef enum _RT_COUNTRY_DEFINE_NUM\r
+{\r
+       RT_CTRY_AL,                             //      "Albaniaªüº¸¤Ú¥§¨È"                                     \r
+       RT_CTRY_DZ,             //  "Algeriaªüº¸¤Î§Q¨È"                                 \r
+       RT_CTRY_AG,             //  "Antigua & Barbuda¦w´£¥Ê®q&¤Ú¥¬¹F"  \r
+       RT_CTRY_AR,             //  "Argentinaªü®Ú§Ê"                                   \r
+       RT_CTRY_AM,             //  "Armenia¨È¬ü¥§¨È"                                   \r
+       RT_CTRY_AW,             //  "Arubaªü¾|¤Ú®q"                                             \r
+       RT_CTRY_AU,             //  "Australia¿D¬w"                                             \r
+       RT_CTRY_AT,             //  "Austria¶ø¦a§Q"                                             \r
+       RT_CTRY_AZ,             //  "Azerbaijanªü¶ë«ô¾Ê"                                \r
+       RT_CTRY_BS,             //  "Bahamas¤Ú«¢°¨"                                     \r
+       RT_CTRY_BB,             //  "Barbados¤Ú¤Ú¦h´µ"                          \r
+       RT_CTRY_BE,             //  "Belgium¤ñ§Q®É"                                     \r
+       RT_CTRY_BM,             //  "Bermuda¦Ê¼}¹F"                                     \r
+       RT_CTRY_BR,             //  "Brazil¤Ú¦è"                                                \r
+       RT_CTRY_BG,             //  "Bulgaria«O¥[§Q¨È"                          \r
+       RT_CTRY_CA,             //  "Canada¥[®³¤j"                                      \r
+       RT_CTRY_KY,             //  "Cayman Islands¶}°Ò¸s®q"                    \r
+       RT_CTRY_CL,             //  "Chile´¼§Q"                                         \r
+       RT_CTRY_CN,             //  "China¤¤°ê"                                         \r
+       RT_CTRY_CO,             //  "Columbia­ô­Û¤ñ¨È"                          \r
+       RT_CTRY_CR,             //  "Costa Rica­ô´µ¹F¾¤¥["                      \r
+       RT_CTRY_CY,             //  "Cyprus¶ë®ú¸ô´µ"                                    \r
+       RT_CTRY_CZ,             //  "Czech ±¶§J"                                                \r
+       RT_CTRY_DK,             //  "Denmark¤¦³Á"                                       \r
+       RT_CTRY_DO,             //  "Dominican Republic¦h©ú¥§¥[¦@©M°ê"  \r
+       RT_CTRY_CE,             //  "Egypt®J¤Î" EG      2G_WORLD                        \r
+       RT_CTRY_SV,             //  "El SalvadorÂĺ¸¥Ë¦h"                               \r
+       RT_CTRY_EE,             //  "Estonia·R¨F¥§¨È"                                   \r
+       RT_CTRY_FI,             //  "FinlandªâÄõ"                                               \r
+       RT_CTRY_FR,             //  "Franceªk°ê"                                                \r
+       RT_CTRY_DE,             //  "Germany¼w°ê"                                       \r
+       RT_CTRY_GR,             //  "Greece §Æþ"                                       \r
+       RT_CTRY_GU,             //  "GuamÃö®q"                                          \r
+       RT_CTRY_GT,             //  "Guatemala¥Ê¦a°¨©Ô"                         \r
+       RT_CTRY_HT,             //  "Haiti®ü¦a"                                         \r
+       RT_CTRY_HN,             //  "Honduras§»³£©Ô´µ"                          \r
+       RT_CTRY_HU,             //  "Hungary¦I¤ú§Q"                                     \r
+       RT_CTRY_IS,             //  "Iceland¦B®q"                                       \r
+       RT_CTRY_IN,             //  "India¦L«×"                                         \r
+       RT_CTRY_IE,             //  "Ireland·Rº¸Äõ"                                     \r
+       RT_CTRY_IL,             //  "Israel¥H¦â¦C"                                      \r
+       RT_CTRY_IT,             //  "Italy¸q¤j§Q"                                       \r
+       RT_CTRY_JP,             //  "Japan¤é¥»"                                         \r
+       RT_CTRY_KR,             //  "KoreaÁú°ê"                                         \r
+       RT_CTRY_LV,             //  "Latvia©Ô²æºû¨È"                                    \r
+       RT_CTRY_LT,             //  "Lithuania¥ß³³©{"                           \r
+       RT_CTRY_LU,             //  "Luxembourg¿c´Ë³ù"                          \r
+       RT_CTRY_MY,             //  "Malaysia°¨¨Ó¦è¨È"                          \r
+       RT_CTRY_MT,             //  "Malta°¨º¸¥L"                                       \r
+       RT_CTRY_MX,             //  "Mexico¾¥¦è­ô"                                      \r
+       RT_CTRY_MA,             //  "Morocco¼¯¬¥­ô"                                     \r
+       RT_CTRY_NL,             //  "Netherlands²üÄõ"                           \r
+       RT_CTRY_NZ,             //  "New Zealand¯Ã¦èÄõ"                         \r
+       RT_CTRY_NO,             //  "Norway®¿«Â"                                                \r
+       RT_CTRY_PA,             //  "Panama¤Ú®³°¨ "                                     \r
+       RT_CTRY_PH,             //  "Philippinesµá«ß»«"                         \r
+       RT_CTRY_PL,             //  "PolandªiÄõ"                                                \r
+       RT_CTRY_PT,             //  "Portugal¸²µå¤ú"                                    \r
+       RT_CTRY_RO,             //  "Romaniaù°¨¥§¨È"                           \r
+       RT_CTRY_RU,             //  "Russia«Xù´µ"                                      \r
+       RT_CTRY_SA,             //  "Saudi Arabia¨F¦aªü©Ô§B"                    \r
+       RT_CTRY_SG,             //  "Singapore·s¥[©Y"                           \r
+       RT_CTRY_SK,             //  "Slovakia´µ¬¥¥ï§J"                          \r
+       RT_CTRY_SI,             //  "Slovenia´µ¬¥ºû¥§¨È"                                \r
+       RT_CTRY_ZA,             //  "South Africa«n«D"                          \r
+       RT_CTRY_ES,             //  "Spain¦è¯Z¤ú"                                       \r
+       RT_CTRY_SE,             //  "Sweden·ç¨å"                                                \r
+       RT_CTRY_CH,             //  "Switzerland·ç¤h"                           \r
+       RT_CTRY_TW,             //  "Taiwan»OÆW"                                                \r
+       RT_CTRY_TH,             //  "Thailand®õ°ê"                                      \r
+       RT_CTRY_TR,             //  "Turkey¤g¦Õ¨ä"                                      \r
+       RT_CTRY_UA,             //  "Ukraine¯Q§JÄõ"                                     \r
+       RT_CTRY_GB,             //  "United Kingdom­^°ê"                                \r
+       RT_CTRY_US,             //  "United States¬ü°ê"                         \r
+       RT_CTRY_VE,             //  "Venezuela©e¤º·ç©Ô"                         \r
+       RT_CTRY_VN,             //  "Vietnam¶V«n"                                       \r
+       RT_CTRY_MAX,            //  \r
+       \r
+}RT_COUNTRY_NAME, *PRT_COUNTRY_NAME;\r
+    \r
+// Scan type including active and passive scan.\r
+typedef enum _RT_SCAN_TYPE_NEW\r
+{\r
+       SCAN_NULL,\r
+       SCAN_ACT,\r
+       SCAN_PAS,\r
+       SCAN_BOTH,\r
+}RT_SCAN_TYPE_NEW, *PRT_SCAN_TYPE_NEW;\r
+    \r
+\r
+// Power table sample.\r
+\r
+typedef struct _RT_CHNL_PLAN_LIMIT\r
+{\r
+       u2Byte  Chnl_Start;\r
+       u2Byte  Chnl_end;       \r
+       \r
+       u2Byte  Freq_Start;\r
+       u2Byte  Freq_end;       \r
+}RT_CHNL_PLAN_LIMIT, *PRT_CHNL_PLAN_LIMIT;\r
+\r
+    \r
+//    \r
+// 2.4G Regulatory Domains\r
+//\r
+typedef enum _RT_REGULATION_DOMAIN_2G\r
+{\r
+       RT_2G_NULL,   \r
+       RT_2G_WORLD,\r
+       RT_2G_ETSI1,\r
+       RT_2G_FCC1,\r
+       RT_2G_MKK1,\r
+       RT_2G_ETSI2     \r
+       \r
+}RT_REGULATION_2G, *PRT_REGULATION_2G;\r
+\r
+\r
+//typedef struct _RT_CHANNEL_BEHAVIOR\r
+//{\r
+//     u1Byte  Chnl;\r
+//     RT_SCAN_TYPE_NEW\r
+//     \r
+//}RT_CHANNEL_BEHAVIOR, *PRT_CHANNEL_BEHAVIOR;\r
+\r
+//typedef struct _RT_CHANNEL_PLAN_TYPE\r
+//{\r
+//     RT_CHANNEL_BEHAVIOR             \r
+//     u1Byte                                  Chnl_num;\r
+//}RT_CHNL_PLAN_TYPE, *PRT_CHNL_PLAN_TYPE;\r
+\r
+//\r
+// 2.4G Channel Number\r
+// Channel definition & number\r
+//\r
+#define CHNL_RT_2G_NULL \\r
+        {0}, 0\r
+#define CHNL_RT_2G_WORLD \\r
+        {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13\r
+#define CHNL_RT_2G_WORLD_TEST \\r
+        {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13\r
+\r
+#define CHNL_RT_2G_EFSI1 \\r
+        {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13\r
+#define CHNL_RT_2G_FCC1 \\r
+        {1,2,3,4,5,6,7,8,9,10,11}, 11\r
+#define CHNL_RT_2G_MKK1 \\r
+        {1,2,3,4,5,6,7,8,9,10,11,12,13,14}, 14\r
+#define CHNL_RT_2G_ETSI2 \\r
+        {10,11,12,13}, 4\r
+\r
+//\r
+// 2.4G Channel Active or passive scan.\r
+//\r
+#define CHNL_RT_2G_NULL_SCAN_TYPE \\r
+        {SCAN_NULL}\r
+#define CHNL_RT_2G_WORLD_SCAN_TYPE \\r
+        {1,1,1,1,1,1,1,1,1,1,1,0,0}\r
+#define CHNL_RT_2G_EFSI1_SCAN_TYPE \\r
+        {1,1,1,1,1,1,1,1,1,1,1,1,1}\r
+#define CHNL_RT_2G_FCC1_SCAN_TYPE \\r
+        {1,1,1,1,1,1,1,1,1,1,1}\r
+#define CHNL_RT_2G_MKK1_SCAN_TYPE \\r
+        {1,1,1,1,1,1,1,1,1,1,1,1,1,1}\r
+#define CHNL_RT_2G_ETSI2_SCAN_TYPE \\r
+        {1,1,1,1}\r
+\r
+\r
+//\r
+// 2.4G Band & Frequency Section\r
+// Freqency start & end / band number\r
+//\r
+#define FREQ_RT_2G_NULL \\r
+        {0}, 0\r
+        // Passive scan CH 12, 13\r
+#define FREQ_RT_2G_WORLD \\r
+        {2412, 2472}, 1\r
+#define FREQ_RT_2G_EFSI1 \\r
+        {2412, 2472}, 1\r
+#define FREQ_RT_2G_FCC1 \\r
+        {2412, 2462}, 1\r
+#define FREQ_RT_2G_MKK1 \\r
+        {2412, 2484}, 1\r
+#define FREQ_RT_2G_ETSI2 \\r
+        {2457, 2472}, 1\r
+\r
+\r
+//    \r
+// 5G Regulatory Domains\r
+//\r
+typedef enum _RT_REGULATION_DOMAIN_5G\r
+{   \r
+       RT_5G_NULL,\r
+       RT_5G_WORLD,\r
+       RT_5G_ETSI1,\r
+       RT_5G_ETSI2,\r
+       RT_5G_ETSI3,\r
+       RT_5G_FCC1,     \r
+       RT_5G_FCC2,\r
+       RT_5G_FCC3,\r
+       RT_5G_FCC4,\r
+       RT_5G_FCC5,\r
+       RT_5G_FCC6,\r
+       RT_5G_FCC7,\r
+       RT_5G_IC1,\r
+       RT_5G_KCC1,\r
+       RT_5G_MKK1,\r
+       RT_5G_MKK2,\r
+       RT_5G_MKK3,\r
+       RT_5G_NCC1,\r
+       \r
+}RT_REGULATION_5G, *PRT_REGULATION_5G;\r
+\r
+//\r
+// 5G Channel Number\r
+//\r
+#define CHNL_RT_5G_NULL \\r
+        {0}, 0\r
+#define CHNL_RT_5G_WORLD \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19\r
+#define CHNL_RT_5G_ETSI1 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24\r
+#define CHNL_RT_5G_ETSI2 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,149,153,157,161,165}, 22\r
+#define CHNL_RT_5G_ETSI3 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24\r
+#define CHNL_RT_5G_FCC1 \\r
+        {36,40,44,48,149,153,157,161,165}, 9\r
+#define CHNL_RT_5G_FCC2 \\r
+        {36,40,44,48,52,56,60,64,149,153,157,161,165}, 13\r
+#define CHNL_RT_5G_FCC3 \\r
+        {36,40,44,48,52,56,60,64,149,153,157,161}, 12\r
+#define CHNL_RT_5G_FCC4 \\r
+        {149,153,157,161,165}, 5\r
+#define CHNL_RT_5G_FCC5 \\r
+        {36,40,44,48,52,56,60,64}, 8\r
+#define CHNL_RT_5G_FCC6 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20\r
+#define CHNL_RT_5G_FCC7 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20\r
+#define CHNL_RT_5G_IC1 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,149,153,157,161,165}, 20\r
+#define CHNL_RT_5G_KCC1 \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19\r
+#define CHNL_RT_5G_MKK1 \\r
+        {36,40,44,48,52,56,60,64}, 8\r
+#define CHNL_RT_5G_MKK2 \\r
+        {100,104,108,112,116,120,124,128,132,136,140}, 11\r
+#define CHNL_RT_5G_MKK3 \\r
+        {56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 24\r
+#define CHNL_RT_5G_NCC1 \\r
+        {56,60,64,149,153,157,161,165}, 8      \r
+\r
+//\r
+// 5G Channel Active or passive scan.\r
+//\r
+#define CHNL_RT_5G_NULL_SCAN_TYPE \\r
+        {SCAN_NULL}\r
+#define CHNL_RT_5G_WORLD_SCAN_TYPE \\r
+        {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}\r
+#define CHNL_RT_5G_ETSI1_SCAN_TYPE \\r
+        {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}\r
+#define CHNL_RT_5G_ETSI2_SCAN_TYPE \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,149,153,157,161,165}, 22\r
+#define CHNL_RT_5G_ETSI3_SCAN_TYPE \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24\r
+#define CHNL_RT_5G_FCC1_SCAN_TYPE \\r
+        {36,40,44,48,149,153,157,161,165}, 9\r
+#define CHNL_RT_5G_FCC2_SCAN_TYPE \\r
+        {36,40,44,48,52,56,60,64,149,153,157,161,165}, 13\r
+#define CHNL_RT_5G_FCC3_SCAN_TYPE \\r
+        {36,40,44,48,52,56,60,64,149,153,157,161}, 12\r
+#define CHNL_RT_5G_FCC4_SCAN_TYPE \\r
+        {149,153,157,161,165}, 5\r
+#define CHNL_RT_5G_FCC5_SCAN_TYPE \\r
+        {36,40,44,48,52,56,60,64}, 8\r
+#define CHNL_RT_5G_FCC6_SCAN_TYPE \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20\r
+#define CHNL_RT_5G_FCC7_SCAN_TYPE \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20\r
+#define CHNL_RT_5G_IC1_SCAN_TYPE \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,149,153,157,161,165}, 20\r
+#define CHNL_RT_5G_KCC1_SCAN_TYPE \\r
+        {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19\r
+#define CHNL_RT_5G_MKK1_SCAN_TYPE \\r
+        {36,40,44,48,52,56,60,64}, 8\r
+#define CHNL_RT_5G_MKK2_SCAN_TYPE \\r
+        {100,104,108,112,116,120,124,128,132,136,140}, 11\r
+#define CHNL_RT_5G_MKK3_SCAN_TYPE \\r
+        {56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 24\r
+#define CHNL_RT_5G_NCC1_SCAN_TYPE \\r
+        {56,60,64,149,153,157,161,165}, 8      \r
+\r
+//    \r
+// Global Regulation\r
+//\r
+typedef enum _RT_REGULATION_COMMON\r
+{\r
+       RT_WORLD,   \r
+       RT_FCC,   \r
+       RT_MKK,\r
+       RT_ETSI,\r
+       RT_IC,\r
+       RT_CE,\r
+       RT_NCC,\r
+       \r
+}RT_REGULATION_CMN, *PRT_REGULATION_CMN;\r
+\r
+\r
+\r
+//    \r
+// Special requirement for different regulation domain.\r
+// For internal test or customerize special request.\r
+//\r
+typedef enum _RT_CHNLPLAN_SREQ\r
+{\r
+       RT_SREQ_NA                                              = 0x0,\r
+       RT_SREQ_2G_ADHOC_11N                    = 0x00000001,\r
+       RT_SREQ_2G_ADHOC_11B                    = 0x00000002,\r
+       RT_SREQ_2G_ALL_PASS                             = 0x00000004,\r
+       RT_SREQ_2G_ALL_ACT                              = 0x00000008,   \r
+       RT_SREQ_5G_ADHOC_11N                    = 0x00000010,\r
+       RT_SREQ_5G_ADHOC_11AC                   = 0x00000020,\r
+       RT_SREQ_5G_ALL_PASS                             = 0x00000040,\r
+       RT_SREQ_5G_ALL_ACT                              = 0x00000080,\r
+       RT_SREQ_C1_PLAN                                 = 0x00000100,   \r
+       RT_SREQ_C2_PLAN                                 = 0x00000200,   \r
+       RT_SREQ_C3_PLAN                                 = 0x00000400,   \r
+       RT_SREQ_C4_PLAN                                 = 0x00000800,   \r
+       RT_SREQ_NFC_ON                                  = 0x00001000,   \r
+       RT_SREQ_MASK                                    = 0x0000FFFF,   /* Requirements bit mask */\r
+       \r
+}RT_CHNLPLAN_SREQ, *PRT_CHNLPLAN_SREQ;\r
+\r
+\r
+//\r
+// RT_COUNTRY_NAME & RT_REGULATION_2G & RT_REGULATION_5G transfer table\r
+// \r
+//\r
+typedef struct _RT_CHANNEL_PLAN_COUNTRY_TRANSFER_TABLE\r
+{   \r
+       //\r
+       // Define countery domain and corresponding \r
+       //      \r
+       RT_COUNTRY_NAME         Country_Enum;\r
+       char                            Country_Name[3];\r
+       \r
+       //char          Domain_Name[12];\r
+       RT_REGULATION_2G        Domain_2G;      \r
+\r
+       RT_REGULATION_5G        Domain_5G;      \r
+\r
+       RT_CHANNEL_DOMAIN       RtChDomain;\r
+       //u1Byte                Country_Area;\r
+    \r
+}RT_CHNL_CTRY_TBL, *PRT_CHNL_CTRY_TBL;\r
+    \r
+\r
+#define                RT_MAX_CHNL_NUM_2G              13\r
+#define                RT_MAX_CHNL_NUM_5G              44      \r
+\r
+// Power table sample.\r
+\r
+typedef struct _RT_CHNL_PLAN_PWR_LIMIT\r
+{\r
+       u2Byte  Chnl_Start;\r
+       u2Byte  Chnl_end;\r
+       u1Byte  dB_Max;\r
+       u2Byte  mW_Max;\r
+}RT_CHNL_PWR_LIMIT, *PRT_CHNL_PWR_LIMIT;\r
+\r
+\r
+#define                RT_MAX_BAND_NUM                 5\r
+\r
+typedef struct _RT_CHANNEL_PLAN_MAXPWR\r
+{\r
+//     STRING_T\r
+       RT_CHNL_PWR_LIMIT       Chnl[RT_MAX_BAND_NUM];\r
+       u1Byte                          Band_Useful_Num;\r
+\r
+       \r
+}RT_CHANNEL_PLAN_MAXPWR, *PRT_CHANNEL_PLAN_MAXPWR;\r
+\r
+\r
+//\r
+// Power By Rate Table.\r
+//\r
+\r
+\r
+\r
+typedef struct _RT_CHANNEL_PLAN_NEW\r
+{   \r
+       //\r
+       // Define countery domain and corresponding \r
+       //\r
+       //char          Country_Name[36];\r
+       //u1Byte                Country_Enum;\r
+       \r
+       //char          Domain_Name[12];\r
+\r
+       \r
+       PRT_CHNL_CTRY_TBL               pCtryTransfer;\r
+       \r
+       RT_CHANNEL_DOMAIN               RtChDomain;     \r
+\r
+       RT_REGULATION_2G                Domain_2G;\r
+\r
+       RT_REGULATION_5G                Domain_5G;      \r
+\r
+       RT_REGULATION_CMN               Regulator;\r
+\r
+       RT_CHNLPLAN_SREQ                ChnlSreq;\r
+       \r
+       //RT_CHNL_PLAN_LIMIT            RtChnl;\r
+               \r
+       u1Byte  Chnl2G[MAX_CHANNEL_NUM];                                // CHNL_RT_2G_WORLD\r
+       u1Byte  Len2G;\r
+       u1Byte  Chnl2GScanTp[MAX_CHANNEL_NUM];                  // CHNL_RT_2G_WORLD_SCAN_TYPE\r
+       //u1Byte        Freq2G[2];                                                              // FREQ_RT_2G_WORLD\r
+\r
+       u1Byte  Chnl5G[MAX_CHANNEL_NUM];                                \r
+       u1Byte  Len5G;\r
+       u1Byte  Chnl5GScanTp[MAX_CHANNEL_NUM];\r
+       //u1Byte        Freq2G[2];                                                              // FREQ_RT_2G_WORLD\r
+\r
+       RT_CHANNEL_PLAN_MAXPWR  ChnlMaxPwr;\r
+       \r
+    \r
+}RT_CHANNEL_PLAN_NEW, *PRT_CHANNEL_PLAN_NEW;\r
+    \r
+    \r
+#endif // __RT_CHANNELPLAN_H__\r
+    \r
+    \r
+    \r
+    \r
\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm.c
deleted file mode 100755 (executable)
index 25d53cb..0000000
+++ /dev/null
@@ -1,6540 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-//============================================================
-// include files
-//============================================================
-
-#include "odm_precomp.h"
-
-
-const u2Byte dB_Invert_Table[8][12] = {
-       {       1,              1,              1,              2,              2,              2,              2,              3,              3,              3,              4,              4},
-       {       4,              5,              6,              6,              7,              8,              9,              10,             11,             13,             14,             16},
-       {       18,             20,             22,             25,             28,             32,             35,             40,             45,             50,             56,             63},
-       {       71,             79,             89,             100,    112,    126,    141,    158,    178,    200,    224,    251},
-       {       282,    316,    355,    398,    447,    501,    562,    631,    708,    794,    891,    1000},
-       {       1122,   1259,   1413,   1585,   1778,   1995,   2239,   2512,   2818,   3162,   3548,   3981},
-       {       4467,   5012,   5623,   6310,   7079,   7943,   8913,   10000,  11220,  12589,  14125,  15849},
-       {       17783,  19953,  22387,  25119,  28184,  31623,  35481,  39811,  44668,  50119,  56234,  65535}};
-
-
-//============================================================
-// Global var
-//============================================================
-
-u4Byte OFDMSwingTable[OFDM_TABLE_SIZE] = {
-       0x7f8001fe,     // 0, +6.0dB
-       0x788001e2,     // 1, +5.5dB
-       0x71c001c7,     // 2, +5.0dB
-       0x6b8001ae,     // 3, +4.5dB
-       0x65400195,     // 4, +4.0dB
-       0x5fc0017f,     // 5, +3.5dB
-       0x5a400169,     // 6, +3.0dB
-       0x55400155,     // 7, +2.5dB
-       0x50800142,     // 8, +2.0dB
-       0x4c000130,     // 9, +1.5dB
-       0x47c0011f,     // 10, +1.0dB
-       0x43c0010f,     // 11, +0.5dB
-       0x40000100,     // 12, +0dB
-       0x3c8000f2,     // 13, -0.5dB
-       0x390000e4,     // 14, -1.0dB
-       0x35c000d7,     // 15, -1.5dB
-       0x32c000cb,     // 16, -2.0dB
-       0x300000c0,     // 17, -2.5dB
-       0x2d4000b5,     // 18, -3.0dB
-       0x2ac000ab,     // 19, -3.5dB
-       0x288000a2,     // 20, -4.0dB
-       0x26000098,     // 21, -4.5dB
-       0x24000090,     // 22, -5.0dB
-       0x22000088,     // 23, -5.5dB
-       0x20000080,     // 24, -6.0dB
-       0x1e400079,     // 25, -6.5dB
-       0x1c800072,     // 26, -7.0dB
-       0x1b00006c,     // 27. -7.5dB
-       0x19800066,     // 28, -8.0dB
-       0x18000060,     // 29, -8.5dB
-       0x16c0005b,     // 30, -9.0dB
-       0x15800056,     // 31, -9.5dB
-       0x14400051,     // 32, -10.0dB
-       0x1300004c,     // 33, -10.5dB
-       0x12000048,     // 34, -11.0dB
-       0x11000044,     // 35, -11.5dB
-       0x10000040,     // 36, -12.0dB
-};
-
-u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8] = {
-       {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04},       // 0, +0dB
-       {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},       // 1, -0.5dB
-       {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},       // 2, -1.0dB
-       {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},       // 3, -1.5dB
-       {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},       // 4, -2.0dB 
-       {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},       // 5, -2.5dB
-       {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},       // 6, -3.0dB
-       {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},       // 7, -3.5dB
-       {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},       // 8, -4.0dB 
-       {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},       // 9, -4.5dB
-       {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},       // 10, -5.0dB 
-       {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},       // 11, -5.5dB
-       {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},       // 12, -6.0dB <== default
-       {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},       // 13, -6.5dB
-       {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},       // 14, -7.0dB 
-       {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},       // 15, -7.5dB
-       {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},       // 16, -8.0dB 
-       {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},       // 17, -8.5dB
-       {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},       // 18, -9.0dB 
-       {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       // 19, -9.5dB
-       {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       // 20, -10.0dB
-       {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},       // 21, -10.5dB
-       {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},       // 22, -11.0dB
-       {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},       // 23, -11.5dB
-       {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},       // 24, -12.0dB
-       {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},       // 25, -12.5dB
-       {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},       // 26, -13.0dB
-       {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},       // 27, -13.5dB
-       {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},       // 28, -14.0dB
-       {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},       // 29, -14.5dB
-       {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},       // 30, -15.0dB
-       {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},       // 31, -15.5dB
-       {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}        // 32, -16.0dB
-};
-
-
-u1Byte CCKSwingTable_Ch14[CCK_TABLE_SIZE][8] = {
-       {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00},       // 0, +0dB  
-       {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},       // 1, -0.5dB 
-       {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},       // 2, -1.0dB  
-       {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},       // 3, -1.5dB
-       {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},       // 4, -2.0dB  
-       {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},       // 5, -2.5dB
-       {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},       // 6, -3.0dB  
-       {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},       // 7, -3.5dB  
-       {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},       // 8, -4.0dB  
-       {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},       // 9, -4.5dB
-       {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},       // 10, -5.0dB  
-       {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       // 11, -5.5dB
-       {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},       // 12, -6.0dB  <== default
-       {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},       // 13, -6.5dB 
-       {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},       // 14, -7.0dB  
-       {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},       // 15, -7.5dB
-       {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},       // 16, -8.0dB  
-       {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},       // 17, -8.5dB
-       {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},       // 18, -9.0dB  
-       {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       // 19, -9.5dB
-       {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       // 20, -10.0dB
-       {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},       // 21, -10.5dB
-       {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},       // 22, -11.0dB
-       {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       // 23, -11.5dB
-       {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       // 24, -12.0dB
-       {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},       // 25, -12.5dB
-       {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       // 26, -13.0dB
-       {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       // 27, -13.5dB
-       {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       // 28, -14.0dB
-       {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       // 29, -14.5dB
-       {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       // 30, -15.0dB
-       {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       // 31, -15.5dB
-       {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}        // 32, -16.0dB
-};
-
-
-u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE] = {
-       0x0b40002d, // 0,  -15.0dB      
-       0x0c000030, // 1,  -14.5dB
-       0x0cc00033, // 2,  -14.0dB
-       0x0d800036, // 3,  -13.5dB
-       0x0e400039, // 4,  -13.0dB    
-       0x0f00003c, // 5,  -12.5dB
-       0x10000040, // 6,  -12.0dB
-       0x11000044, // 7,  -11.5dB
-       0x12000048, // 8,  -11.0dB
-       0x1300004c, // 9,  -10.5dB
-       0x14400051, // 10, -10.0dB
-       0x15800056, // 11, -9.5dB
-       0x16c0005b, // 12, -9.0dB
-       0x18000060, // 13, -8.5dB
-       0x19800066, // 14, -8.0dB
-       0x1b00006c, // 15, -7.5dB
-       0x1c800072, // 16, -7.0dB
-       0x1e400079, // 17, -6.5dB
-       0x20000080, // 18, -6.0dB
-       0x22000088, // 19, -5.5dB
-       0x24000090, // 20, -5.0dB
-       0x26000098, // 21, -4.5dB
-       0x288000a2, // 22, -4.0dB
-       0x2ac000ab, // 23, -3.5dB
-       0x2d4000b5, // 24, -3.0dB
-       0x300000c0, // 25, -2.5dB
-       0x32c000cb, // 26, -2.0dB
-       0x35c000d7, // 27, -1.5dB
-       0x390000e4, // 28, -1.0dB
-       0x3c8000f2, // 29, -0.5dB
-       0x40000100, // 30, +0dB
-       0x43c0010f, // 31, +0.5dB
-       0x47c0011f, // 32, +1.0dB
-       0x4c000130, // 33, +1.5dB
-       0x50800142, // 34, +2.0dB
-       0x55400155, // 35, +2.5dB
-       0x5a400169, // 36, +3.0dB
-       0x5fc0017f, // 37, +3.5dB
-       0x65400195, // 38, +4.0dB
-       0x6b8001ae, // 39, +4.5dB
-       0x71c001c7, // 40, +5.0dB
-       0x788001e2, // 41, +5.5dB
-       0x7f8001fe  // 42, +6.0dB
-};               
-
-
-u1Byte CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8] = {
-       {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01},       //  0, -16.0dB
-       {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},       //  1, -15.5dB
-       {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},       //  2, -15.0dB
-       {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},       //  3, -14.5dB
-       {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},       //  4, -14.0dB
-       {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},       //  5, -13.5dB
-       {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},       //  6, -13.0dB
-       {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},       //  7, -12.5dB
-       {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},       //  8, -12.0dB
-       {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},       //  9, -11.5dB
-       {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},       // 10, -11.0dB
-       {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},       // 11, -10.5dB
-       {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       // 12, -10.0dB
-       {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       // 13, -9.5dB
-       {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},       // 14, -9.0dB 
-       {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},       // 15, -8.5dB
-       {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},       // 16, -8.0dB 
-       {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},       // 17, -7.5dB
-       {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},       // 18, -7.0dB 
-       {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},       // 19, -6.5dB
-    {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},  // 20, -6.0dB 
-       {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},       // 21, -5.5dB
-       {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},       // 22, -5.0dB 
-       {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},       // 23, -4.5dB
-       {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},       // 24, -4.0dB 
-       {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},       // 25, -3.5dB
-       {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},       // 26, -3.0dB
-       {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},       // 27, -2.5dB
-       {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},       // 28, -2.0dB 
-       {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},       // 29, -1.5dB
-       {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},       // 30, -1.0dB
-       {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},       // 31, -0.5dB
-       {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}        // 32, +0dB
-};                                                                  
-
-
-u1Byte CCKSwingTable_Ch14_New[CCK_TABLE_SIZE][8]= {
-       {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00},       //  0, -16.0dB
-       {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       //  1, -15.5dB
-       {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       //  2, -15.0dB
-       {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       //  3, -14.5dB
-       {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       //  4, -14.0dB
-       {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       //  5, -13.5dB
-       {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       //  6, -13.0dB
-       {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},       //  7, -12.5dB
-       {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       //  8, -12.0dB
-       {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       //  9, -11.5dB
-       {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},       // 10, -11.0dB
-       {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},       // 11, -10.5dB
-       {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       // 12, -10.0dB
-       {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       // 13, -9.5dB
-       {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},       // 14, -9.0dB  
-       {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},       // 15, -8.5dB
-       {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},       // 16, -8.0dB  
-       {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},       // 17, -7.5dB
-       {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},       // 18, -7.0dB  
-       {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},       // 19, -6.5dB 
-       {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},       // 20, -6.0dB  
-       {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       // 21, -5.5dB
-       {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},       // 22, -5.0dB  
-       {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},       // 23, -4.5dB
-       {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},       // 24, -4.0dB  
-       {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},       // 25, -3.5dB  
-       {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},       // 26, -3.0dB  
-       {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},       // 27, -2.5dB
-       {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},       // 28, -2.0dB  
-       {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},       // 29, -1.5dB
-       {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},       // 30, -1.0dB  
-       {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},       // 31, -0.5dB 
-       {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}        // 32, +0dB     
-};
-
-u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE] =
-{
-       0x081, // 0,  -12.0dB
-       0x088, // 1,  -11.5dB
-       0x090, // 2,  -11.0dB
-       0x099, // 3,  -10.5dB
-       0x0A2, // 4,  -10.0dB
-       0x0AC, // 5,  -9.5dB
-       0x0B6, // 6,  -9.0dB
-       0x0C0, // 7,  -8.5dB
-       0x0CC, // 8,  -8.0dB
-       0x0D8, // 9,  -7.5dB
-       0x0E5, // 10, -7.0dB
-       0x0F2, // 11, -6.5dB
-       0x101, // 12, -6.0dB
-       0x110, // 13, -5.5dB
-       0x120, // 14, -5.0dB
-       0x131, // 15, -4.5dB
-       0x143, // 16, -4.0dB
-       0x156, // 17, -3.5dB
-       0x16A, // 18, -3.0dB
-       0x180, // 19, -2.5dB
-       0x197, // 20, -2.0dB
-       0x1AF, // 21, -1.5dB
-       0x1C8, // 22, -1.0dB
-       0x1E3, // 23, -0.5dB
-       0x200, // 24, +0  dB
-       0x21E, // 25, +0.5dB
-       0x23E, // 26, +1.0dB
-       0x261, // 27, +1.5dB
-       0x285, // 28, +2.0dB
-       0x2AB, // 29, +2.5dB
-       0x2D3, // 30, +3.0dB
-       0x2FE, // 31, +3.5dB
-       0x32B, // 32, +4.0dB
-       0x35C, // 33, +4.5dB
-       0x38E, // 34, +5.0dB
-       0x3C4, // 35, +5.5dB
-       0x3FE  // 36, +6.0dB    
-};
-
-#ifdef AP_BUILD_WORKAROUND
-
-unsigned int TxPwrTrk_OFDM_SwingTbl[TxPwrTrk_OFDM_SwingTbl_Len] = {
-       /*  +6.0dB */ 0x7f8001fe,
-       /*  +5.5dB */ 0x788001e2,
-       /*  +5.0dB */ 0x71c001c7,
-       /*  +4.5dB */ 0x6b8001ae,
-       /*  +4.0dB */ 0x65400195,
-       /*  +3.5dB */ 0x5fc0017f,
-       /*  +3.0dB */ 0x5a400169,
-       /*  +2.5dB */ 0x55400155,
-       /*  +2.0dB */ 0x50800142,
-       /*  +1.5dB */ 0x4c000130,
-       /*  +1.0dB */ 0x47c0011f,
-       /*  +0.5dB */ 0x43c0010f,
-       /*   0.0dB */ 0x40000100,
-       /*  -0.5dB */ 0x3c8000f2,
-       /*  -1.0dB */ 0x390000e4,
-       /*  -1.5dB */ 0x35c000d7,
-       /*  -2.0dB */ 0x32c000cb,
-       /*  -2.5dB */ 0x300000c0,
-       /*  -3.0dB */ 0x2d4000b5,
-       /*  -3.5dB */ 0x2ac000ab,
-       /*  -4.0dB */ 0x288000a2,
-       /*  -4.5dB */ 0x26000098,
-       /*  -5.0dB */ 0x24000090,
-       /*  -5.5dB */ 0x22000088,
-       /*  -6.0dB */ 0x20000080,
-       /*  -6.5dB */ 0x1a00006c,
-       /*  -7.0dB */ 0x1c800072,
-       /*  -7.5dB */ 0x18000060,
-       /*  -8.0dB */ 0x19800066,
-       /*  -8.5dB */ 0x15800056,
-       /*  -9.0dB */ 0x26c0005b,
-       /*  -9.5dB */ 0x14400051,
-       /* -10.0dB */ 0x24400051,
-       /* -10.5dB */ 0x1300004c,
-       /* -11.0dB */ 0x12000048,
-       /* -11.5dB */ 0x11000044,
-       /* -12.0dB */ 0x10000040
-};
-#endif
-
-//============================================================
-// Local Function predefine.
-//============================================================
-
-//START------------COMMON INFO RELATED---------------//
-VOID
-odm_CommonInfoSelfInit(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-VOID
-odm_CommonInfoSelfUpdate(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-VOID
-odm_CmnInfoInit_Debug(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-VOID
-odm_CmnInfoHook_Debug(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-VOID
-odm_CmnInfoUpdate_Debug(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-VOID
-odm_BasicDbgMessage
-(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-//END------------COMMON INFO RELATED---------------//
-
-//START---------------DIG---------------------------//
-
-//Remove by Yuchen
-
-//END---------------DIG---------------------------//
-
-//START-------BB POWER SAVE-----------------------//
-//Remove BB power Saving by YuChen
-//END---------BB POWER SAVE-----------------------//
-
-//START-----------------PSD-----------------------//
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) 
-//============================================================
-// Function predefine.
-//============================================================
-
-//Remove PathDiversity related funtion predefine to odm_PathDiv.h
-
-//Start-------------------- RX High Power------------------------//
-VOID   odm_RXHPInit(   IN              PDM_ODM_T               pDM_Odm);
-VOID   odm_RXHP(       IN              PDM_ODM_T               pDM_Odm);
-VOID   odm_Write_RXHP( IN      PDM_ODM_T       pDM_Odm);
-
-VOID   odm_PSD_RXHP(           IN      PDM_ODM_T       pDM_Odm);
-VOID   odm_PSD_RXHPCallback(   PRT_TIMER               pTimer);
-VOID   odm_PSD_RXHPWorkitemCallback(   IN PVOID            pContext);
-//End--------------------- RX High Power -----------------------//
-
-#endif
-
-//END-------------------PSD-----------------------//
-
-//Remove  RAMASK  by RS_James 
-
-//Remove by YuChen
-
-//Remove Rssimonitorcheck by RS_James
-
-VOID
-odm_SwAntDivInit(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-VOID
-odm_SwAntDivInit_NIC(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-VOID
-odm_SwAntDetectInit(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-VOID
-odm_SwAntDivChkAntSwitch(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              u1Byte                  Step
-       );
-
-VOID
-odm_SwAntDivChkAntSwitchNIC(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              u1Byte          Step
-       );
-
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-VOID
-odm_SwAntDivChkAntSwitchCallback(
-       PRT_TIMER               pTimer
-);
-VOID
-odm_SwAntDivChkAntSwitchWorkitemCallback(
-    IN PVOID            pContext
-    );
-VOID
-ODM_UpdateInitRateWorkItemCallback(
-    IN PVOID            pContext
-    );
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-VOID odm_SwAntDivChkAntSwitchCallback(void *FunctionContext);
-#elif (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-VOID odm_SwAntDivChkAntSwitchCallback(void *FunctionContext);
-#endif
-
-
-
-VOID
-odm_GlobalAdapterCheck(
-       IN              VOID
-       );
-
-//Remove RAMask by RS_James
-
-VOID
-ODM_TXPowerTrackingCheck(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-VOID
-odm_TXPowerTrackingCheckAP(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-
-VOID
-odm_TXPowerTrackingThermalMeterInit(
-       IN      PDM_ODM_T       pDM_Odm
-       );
-
-
-VOID
-odm_IQCalibrate(
-               IN      PDM_ODM_T       pDM_Odm 
-               );
-
-VOID
-odm_TXPowerTrackingInit(
-       IN      PDM_ODM_T       pDM_Odm
-       );
-
-VOID
-odm_TXPowerTrackingCheckMP(
-       IN      PDM_ODM_T       pDM_Odm
-       );
-
-
-VOID
-odm_TXPowerTrackingCheckCE(
-       IN      PDM_ODM_T       pDM_Odm
-       );
-
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) 
-
-VOID 
-odm_TXPowerTrackingCallbackThermalMeter92C(
-            IN PADAPTER        Adapter
-            );
-
-VOID
-odm_TXPowerTrackingCallbackRXGainThermalMeter92D(
-       IN PADAPTER     Adapter
-       );
-
-VOID
-odm_TXPowerTrackingCallbackThermalMeter92D(
-            IN PADAPTER        Adapter
-            );
-
-VOID
-odm_TXPowerTrackingDirectCall92C(
-            IN PADAPTER                Adapter
-            );
-
-VOID
-odm_TXPowerTrackingThermalMeterCheck(
-       IN      PADAPTER                Adapter
-       );
-
-#endif
-
-//Remove Edca by Yu Chen
-
-
-#define        RxDefaultAnt1           0x65a9
-#define        RxDefaultAnt2           0x569a
-
-VOID
-odm_InitHybridAntDiv(
-       IN PDM_ODM_T    pDM_Odm 
-       );
-
-BOOLEAN
-odm_StaDefAntSel(
-       IN PDM_ODM_T    pDM_Odm,
-       IN u4Byte               OFDM_Ant1_Cnt,
-       IN u4Byte               OFDM_Ant2_Cnt,
-       IN u4Byte               CCK_Ant1_Cnt,
-       IN u4Byte               CCK_Ant2_Cnt,
-       OUT u1Byte              *pDefAnt 
-       );
-
-VOID
-odm_SetRxIdleAnt(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      u1Byte  Ant,
-       IN   BOOLEAN   bDualPath                     
-);
-
-
-
-VOID
-odm_HwAntDiv(
-       IN      PDM_ODM_T       pDM_Odm
-);
-
-
-//============================================================
-//3 Export Interface
-//============================================================
-
-//
-// 2011/09/21 MH Add to describe different team necessary resource allocate??
-//
-VOID
-ODM_DMInit(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-
-       odm_CommonInfoSelfInit(pDM_Odm);
-       odm_CmnInfoInit_Debug(pDM_Odm);
-       odm_DIGInit(pDM_Odm);
-       odm_NHMCounterStatisticsInit(pDM_Odm);
-       odm_AdaptivityInit(pDM_Odm);
-       odm_RateAdaptiveMaskInit(pDM_Odm);
-       ODM_CfoTrackingInit(pDM_Odm);
-       ODM_EdcaTurboInit(pDM_Odm);
-       odm_RSSIMonitorInit(pDM_Odm);
-       odm_TXPowerTrackingInit(pDM_Odm);
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       ODM_ClearTxPowerTrackingState(pDM_Odm);
-
-       if ( *(pDM_Odm->mp_mode) != 1)
-       odm_PathDiversityInit(pDM_Odm);
-
-#endif
-
-#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))     
-       if ( *(pDM_Odm->mp_mode) != 1){
-       if(pDM_Odm->SupportICType==ODM_RTL8723A)
-               odm_SwAntDivInit(pDM_Odm);      
-       else if(pDM_Odm->SupportICType & (ODM_RTL8192C|ODM_RTL8192D))
-       {
-               if(pDM_Odm->AntDivType == HW_ANTDIV)
-                       odm_InitHybridAntDiv(pDM_Odm);
-               else
-                       odm_SwAntDivInit(pDM_Odm);
-       }
-       else
-               ODM_AntDivInit(pDM_Odm);
-       }
-#endif
-
-       if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-       {
-               odm_DynamicBBPowerSavingInit(pDM_Odm);
-               odm_DynamicTxPowerInit(pDM_Odm);
-
-#if (RTL8188E_SUPPORT == 1)
-               if(pDM_Odm->SupportICType==ODM_RTL8188E)
-               {
-                       odm_PrimaryCCA_Init(pDM_Odm);
-                       ODM_RAInfo_Init_all(pDM_Odm);
-               }
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       
-       #if (RTL8723B_SUPPORT == 1)
-               if(pDM_Odm->SupportICType == ODM_RTL8723B)
-                       odm_SwAntDetectInit(pDM_Odm);
-       #endif
-
-       #if (RTL8192E_SUPPORT == 1)
-               if(pDM_Odm->SupportICType==ODM_RTL8192E)
-                       odm_PrimaryCCA_Check_Init(pDM_Odm);
-       #endif
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       #if (RTL8723A_SUPPORT == 1)
-               if(pDM_Odm->SupportICType == ODM_RTL8723A)
-                       odm_PSDMonitorInit(pDM_Odm);
-       #endif
-
-       #if (RTL8192D_SUPPORT == 1)
-               if(pDM_Odm->SupportICType==ODM_RTL8192D)
-                       odm_PathDivInit_92D(pDM_Odm);
-       #endif
-
-       #if ((RTL8192C_SUPPORT == 1) || (RTL8192D_SUPPORT == 1))
-               if(pDM_Odm->SupportICType & (ODM_RTL8192C|ODM_RTL8192D))
-                       odm_RXHPInit(pDM_Odm);
-       #endif
-#endif
-#endif
-
-       }
-
-}
-
-//
-// 2011/09/20 MH This is the entry pointer for all team to execute HW out source DM.
-// You can not add any dummy function here, be care, you can only use DM structure
-// to perform any new ODM_DM.
-//
-VOID
-ODM_DMWatchdog(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{      
-       if((pDM_Odm->SupportICType == ODM_RTL8821) && (pDM_Odm->SupportInterface == ODM_ITRF_USB))
-       {
-               if(pDM_Odm->RSSI_Min > 25)
-                       ODM_Write1Byte(pDM_Odm, 0x4CF, 0x02);
-               else if(pDM_Odm->RSSI_Min < 20)
-                       ODM_Write1Byte(pDM_Odm, 0x4CF, 0x00);
-       }
-
-
-       odm_CommonInfoSelfUpdate(pDM_Odm);
-       odm_BasicDbgMessage(pDM_Odm);
-       odm_FalseAlarmCounterStatistics(pDM_Odm);
-       odm_NHMCounterStatistics(pDM_Odm);
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): RSSI=0x%x\n",pDM_Odm->RSSI_Min));
-
-       odm_RSSIMonitorCheck(pDM_Odm);
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
-//#ifdef CONFIG_PLATFORM_SPRD
-       //For CE Platform(SPRD or Tablet)
-       //8723A or 8189ES platform
-       //NeilChen--2012--08--24--
-       //Fix Leave LPS issue
-       if(     (adapter_to_pwrctl(pDM_Odm->Adapter)->pwr_mode != PS_MODE_ACTIVE) // in LPS mode
-               //&&(                   
-               //      (pDM_Odm->SupportICType & (ODM_RTL8723A ) )||
-               //      (pDM_Odm->SupportICType & (ODM_RTL8188E) &&((pDM_Odm->SupportInterface  == ODM_ITRF_SDIO)) ) 
-               //)     
-       )
-       {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("----Step1: odm_DIG is in LPS mode\n"));                              
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("---Step2: 8723AS is in LPS mode\n"));
-                       odm_DIGbyRSSI_LPS(pDM_Odm);
-       }               
-       else                            
-//#endif
-#endif
-       {
-               odm_DIG(pDM_Odm);
-       }
-
-       {
-               pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;
-               odm_Adaptivity(pDM_Odm, pDM_DigTable->CurIGValue);
-       }
-       odm_CCKPacketDetectionThresh(pDM_Odm);
-
-       if(*(pDM_Odm->pbPowerSaving)==TRUE)
-               return;
-
-       
-       odm_RefreshRateAdaptiveMask(pDM_Odm);
-       odm_RefreshBasicRateMask(pDM_Odm);
-       odm_DynamicBBPowerSaving(pDM_Odm);      
-       odm_EdcaTurboCheck(pDM_Odm);
-       odm_PathDiversity(pDM_Odm);
-       ODM_CfoTracking(pDM_Odm);
-       odm_DynamicTxPower(pDM_Odm);    
-
-#if (RTL8192E_SUPPORT == 1)
-        if(pDM_Odm->SupportICType==ODM_RTL8192E)
-                odm_DynamicPrimaryCCA_Check(pDM_Odm); 
-#endif
-        //if(pDM_Odm->SupportICType == ODM_RTL8192E)
-        //        return;
-
-       
-//#if (MP_DRIVER != 1)         
-if ( *(pDM_Odm->mp_mode) != 1) {
-       if(pDM_Odm->SupportICType==ODM_RTL8723A)
-       {
-               odm_SwAntDivChkAntSwitch(pDM_Odm, SWAW_STEP_PEAK);
-       }
-       else if(pDM_Odm->SupportICType & (ODM_RTL8192C|ODM_RTL8192D))
-       {
-               if(pDM_Odm->AntDivType == HW_ANTDIV)
-                       odm_HwAntDiv(pDM_Odm);
-               else
-                       odm_SwAntDivChkAntSwitch(pDM_Odm, SWAW_STEP_PEAK);
-       }
-       else
-               ODM_AntDiv(pDM_Odm);
-}
-//#endif
-
-       if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-       {
-               ODM_TXPowerTrackingCheck(pDM_Odm);
-
-               odm_IQCalibrate(pDM_Odm);
-       }
-       else if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-       {
-               ODM_TXPowerTrackingCheck(pDM_Odm);
-
-               //odm_EdcaTurboCheck(pDM_Odm);
-
-               #if( DM_ODM_SUPPORT_TYPE & (ODM_WIN))   
-               if(!(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8188E)))
-                       odm_RXHP(pDM_Odm);      
-               #endif
-
-       //2010.05.30 LukeLee: For CE platform, files in IC subfolders may not be included to be compiled,
-       // so compile flags must be left here to prevent from compile errors
-#if (RTL8192D_SUPPORT == 1)
-               if(pDM_Odm->SupportICType==ODM_RTL8192D)
-                       ODM_DynamicEarlyMode(pDM_Odm);
-#endif
-               odm_DynamicBBPowerSaving(pDM_Odm);
-#if (RTL8188E_SUPPORT == 1)
-               if(pDM_Odm->SupportICType==ODM_RTL8188E)
-                       odm_DynamicPrimaryCCA(pDM_Odm); 
-#endif
-
-       }
-       pDM_Odm->PhyDbgInfo.NumQryBeaconPkt = 0;
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
-       odm_dtc(pDM_Odm);
-#endif
-}
-
-
-//
-// Init /.. Fixed HW value. Only init time.
-//
-VOID
-ODM_CmnInfoInit(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              ODM_CMNINFO_E   CmnInfo,
-       IN              u4Byte                  Value   
-       )
-{
-       //
-       // This section is used for init value
-       //
-       switch  (CmnInfo)
-       {
-               //
-               // Fixed ODM value.
-               //
-               case    ODM_CMNINFO_ABILITY:
-                       pDM_Odm->SupportAbility = (u4Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_RF_TYPE:
-                       pDM_Odm->RFType = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_PLATFORM:
-                       pDM_Odm->SupportPlatform = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_INTERFACE:
-                       pDM_Odm->SupportInterface = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_MP_TEST_CHIP:
-                       pDM_Odm->bIsMPChip= (u1Byte)Value;
-                       break;
-            
-               case    ODM_CMNINFO_IC_TYPE:
-                       pDM_Odm->SupportICType = Value;
-                       break;
-
-               case    ODM_CMNINFO_CUT_VER:
-                       pDM_Odm->CutVersion = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_FAB_VER:
-                       pDM_Odm->FabVersion = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_RFE_TYPE:
-                       pDM_Odm->RFEType = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_RF_ANTENNA_TYPE:
-                       pDM_Odm->AntDivType= (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_BOARD_TYPE:
-                       pDM_Odm->BoardType = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_PACKAGE_TYPE:
-                       pDM_Odm->PackageType = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_EXT_LNA:
-                       pDM_Odm->ExtLNA = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_5G_EXT_LNA:
-                       pDM_Odm->ExtLNA5G = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_EXT_PA:
-                       pDM_Odm->ExtPA = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_5G_EXT_PA:
-                       pDM_Odm->ExtPA5G = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_GPA:
-                       pDM_Odm->TypeGPA= (ODM_TYPE_GPA_E)Value;
-                       break;
-               case    ODM_CMNINFO_APA:
-                       pDM_Odm->TypeAPA= (ODM_TYPE_APA_E)Value;
-                       break;
-               case    ODM_CMNINFO_GLNA:
-                       pDM_Odm->TypeGLNA= (ODM_TYPE_GLNA_E)Value;
-                       break;
-               case    ODM_CMNINFO_ALNA:
-                       pDM_Odm->TypeALNA= (ODM_TYPE_ALNA_E)Value;
-                       break;
-
-               case    ODM_CMNINFO_EXT_TRSW:
-                       pDM_Odm->ExtTRSW = (u1Byte)Value;
-                       break;
-               case    ODM_CMNINFO_PATCH_ID:
-                       pDM_Odm->PatchID = (u1Byte)Value;
-                       break;
-               case    ODM_CMNINFO_BINHCT_TEST:
-                       pDM_Odm->bInHctTest = (BOOLEAN)Value;
-                       break;
-               case    ODM_CMNINFO_BWIFI_TEST:
-                       pDM_Odm->bWIFITest = (BOOLEAN)Value;
-                       break;  
-               case    ODM_CMNINFO_SMART_CONCURRENT:
-                       pDM_Odm->bDualMacSmartConcurrent = (BOOLEAN )Value;
-                       break;
-               case    ODM_CMNINFO_DOMAIN_CODE_2G:
-                       pDM_Odm->odm_Regulation2_4G = (u1Byte)Value;
-                       break;
-               case    ODM_CMNINFO_DOMAIN_CODE_5G:
-                       pDM_Odm->odm_Regulation5G = (u1Byte)Value;
-                       break;
-               
-               //To remove the compiler warning, must add an empty default statement to handle the other values.       
-               default:
-                       //do nothing
-                       break;  
-               
-       }
-
-}
-
-
-VOID
-ODM_CmnInfoHook(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              ODM_CMNINFO_E   CmnInfo,
-       IN              PVOID                   pValue  
-       )
-{
-       //
-       // Hook call by reference pointer.
-       //
-       switch  (CmnInfo)
-       {
-               //
-               // Dynamic call by reference pointer.
-               //
-               case    ODM_CMNINFO_MAC_PHY_MODE:
-                       pDM_Odm->pMacPhyMode = (u1Byte *)pValue;
-                       break;
-               
-               case    ODM_CMNINFO_TX_UNI:
-                       pDM_Odm->pNumTxBytesUnicast = (u8Byte *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_RX_UNI:
-                       pDM_Odm->pNumRxBytesUnicast = (u8Byte *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_WM_MODE:
-                       pDM_Odm->pWirelessMode = (u1Byte *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_BAND:
-                       pDM_Odm->pBandType = (u1Byte *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_SEC_CHNL_OFFSET:
-                       pDM_Odm->pSecChOffset = (u1Byte *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_SEC_MODE:
-                       pDM_Odm->pSecurity = (u1Byte *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_BW:
-                       pDM_Odm->pBandWidth = (u1Byte *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_CHNL:
-                       pDM_Odm->pChannel = (u1Byte *)pValue;
-                       break;
-               
-               case    ODM_CMNINFO_DMSP_GET_VALUE:
-                       pDM_Odm->pbGetValueFromOtherMac = (BOOLEAN *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_BUDDY_ADAPTOR:
-                       pDM_Odm->pBuddyAdapter = (PADAPTER *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_DMSP_IS_MASTER:
-                       pDM_Odm->pbMasterOfDMSP = (BOOLEAN *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_SCAN:
-                       pDM_Odm->pbScanInProcess = (BOOLEAN *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_POWER_SAVING:
-                       pDM_Odm->pbPowerSaving = (BOOLEAN *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_ONE_PATH_CCA:
-                       pDM_Odm->pOnePathCCA = (u1Byte *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_DRV_STOP:
-                       pDM_Odm->pbDriverStopped =  (BOOLEAN *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_PNP_IN:
-                       pDM_Odm->pbDriverIsGoingToPnpSetPowerSleep =  (BOOLEAN *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_INIT_ON:
-                       pDM_Odm->pinit_adpt_in_progress =  (BOOLEAN *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_ANT_TEST:
-                       pDM_Odm->pAntennaTest =  (u1Byte *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_NET_CLOSED:
-                       pDM_Odm->pbNet_closed = (BOOLEAN *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_FORCED_RATE:
-                       pDM_Odm->pForcedDataRate = (pu2Byte)pValue;
-                       break;
-
-               case  ODM_CMNINFO_FORCED_IGI_LB:
-                       pDM_Odm->pu1ForcedIgiLb = (u1Byte *)pValue;
-                       break;
-
-               case    ODM_CMNINFO_MP_MODE:
-                       pDM_Odm->mp_mode = (u1Byte *)pValue;
-                       break;
-
-               //case  ODM_CMNINFO_RTSTA_AID:
-               //      pDM_Odm->pAidMap =  (u1Byte *)pValue;
-               //      break;
-
-               //case  ODM_CMNINFO_BT_COEXIST:
-               //      pDM_Odm->BTCoexist = (BOOLEAN *)pValue;         
-
-               //case  ODM_CMNINFO_STA_STATUS:
-                       //pDM_Odm->pODM_StaInfo[] = (PSTA_INFO_T)pValue;
-                       //break;
-
-               //case  ODM_CMNINFO_PHY_STATUS:
-               //      pDM_Odm->pPhyInfo = (ODM_PHY_INFO *)pValue;
-               //      break;
-
-               //case  ODM_CMNINFO_MAC_STATUS:
-               //      pDM_Odm->pMacInfo = (ODM_MAC_INFO *)pValue;
-               //      break;
-               //To remove the compiler warning, must add an empty default statement to handle the other values.                               
-               default:
-                       //do nothing
-                       break;
-
-       }
-
-}
-
-
-VOID
-ODM_CmnInfoPtrArrayHook(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              ODM_CMNINFO_E   CmnInfo,
-       IN              u2Byte                  Index,
-       IN              PVOID                   pValue  
-       )
-{
-       //
-       // Hook call by reference pointer.
-       //
-       switch  (CmnInfo)
-       {
-               //
-               // Dynamic call by reference pointer.
-               //              
-               case    ODM_CMNINFO_STA_STATUS:
-                       pDM_Odm->pODM_StaInfo[Index] = (PSTA_INFO_T)pValue;
-                       break;          
-               //To remove the compiler warning, must add an empty default statement to handle the other values.                               
-               default:
-                       //do nothing
-                       break;
-       }
-       
-}
-
-
-//
-// Update Band/CHannel/.. The values are dynamic but non-per-packet.
-//
-VOID
-ODM_CmnInfoUpdate(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              u4Byte                  CmnInfo,
-       IN              u8Byte                  Value   
-       )
-{
-       //
-       // This init variable may be changed in run time.
-       //
-       switch  (CmnInfo)
-       {
-               case ODM_CMNINFO_LINK_IN_PROGRESS:
-                       pDM_Odm->bLinkInProcess = (BOOLEAN)Value;
-                       break;
-               
-               case    ODM_CMNINFO_ABILITY:
-                       pDM_Odm->SupportAbility = (u4Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_RF_TYPE:
-                       pDM_Odm->RFType = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_WIFI_DIRECT:
-                       pDM_Odm->bWIFI_Direct = (BOOLEAN)Value;
-                       break;
-
-               case    ODM_CMNINFO_WIFI_DISPLAY:
-                       pDM_Odm->bWIFI_Display = (BOOLEAN)Value;
-                       break;
-
-               case    ODM_CMNINFO_LINK:
-                       pDM_Odm->bLinked = (BOOLEAN)Value;
-                       break;
-                       
-               case    ODM_CMNINFO_STATION_STATE:
-                       pDM_Odm->bsta_state = (BOOLEAN)Value;
-                       break;
-                       
-               case    ODM_CMNINFO_RSSI_MIN:
-                       pDM_Odm->RSSI_Min= (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_DBG_COMP:
-                       pDM_Odm->DebugComponents = Value;
-                       break;
-
-               case    ODM_CMNINFO_DBG_LEVEL:
-                       pDM_Odm->DebugLevel = (u4Byte)Value;
-                       break;
-               case    ODM_CMNINFO_RA_THRESHOLD_HIGH:
-                       pDM_Odm->RateAdaptive.HighRSSIThresh = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_RA_THRESHOLD_LOW:
-                       pDM_Odm->RateAdaptive.LowRSSIThresh = (u1Byte)Value;
-                       break;
-               // The following is for BT HS mode and BT coexist mechanism.
-               case ODM_CMNINFO_BT_ENABLED:
-                       pDM_Odm->bBtEnabled = (BOOLEAN)Value;
-                       break;
-                       
-               case ODM_CMNINFO_BT_HS_CONNECT_PROCESS:
-                       pDM_Odm->bBtConnectProcess = (BOOLEAN)Value;
-                       break;
-               
-               case ODM_CMNINFO_BT_HS_RSSI:
-                       pDM_Odm->btHsRssi = (u1Byte)Value;
-                       break;
-                       
-               case    ODM_CMNINFO_BT_OPERATION:
-                       pDM_Odm->bBtHsOperation = (BOOLEAN)Value;
-                       break;
-
-               case    ODM_CMNINFO_BT_LIMITED_DIG:
-                       pDM_Odm->bBtLimitedDig = (BOOLEAN)Value;
-                       break;  
-
-               case    ODM_CMNINFO_BT_DISABLE_EDCA:
-                       pDM_Odm->bBtDisableEdcaTurbo = (BOOLEAN)Value;
-                       break;
-                       
-/*
-               case    ODM_CMNINFO_OP_MODE:
-                       pDM_Odm->OPMode = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_WM_MODE:
-                       pDM_Odm->WirelessMode = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_BAND:
-                       pDM_Odm->BandType = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_SEC_CHNL_OFFSET:
-                       pDM_Odm->SecChOffset = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_SEC_MODE:
-                       pDM_Odm->Security = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_BW:
-                       pDM_Odm->BandWidth = (u1Byte)Value;
-                       break;
-
-               case    ODM_CMNINFO_CHNL:
-                       pDM_Odm->Channel = (u1Byte)Value;
-                       break;                  
-*/     
-                default:
-                       //do nothing
-                       break;
-       }
-
-       
-}
-
-VOID
-odm_CommonInfoSelfInit(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;
-       pDM_Odm->bCckHighPower = (BOOLEAN) ODM_GetBBReg(pDM_Odm, ODM_REG(CCK_RPT_FORMAT,pDM_Odm), ODM_BIT(CCK_RPT_FORMAT,pDM_Odm));             
-       pDM_Odm->RFPathRxEnable = (u1Byte) ODM_GetBBReg(pDM_Odm, ODM_REG(BB_RX_PATH,pDM_Odm), ODM_BIT(BB_RX_PATH,pDM_Odm));
-#if (DM_ODM_SUPPORT_TYPE != ODM_CE)    
-       pDM_Odm->pbNet_closed = &pDM_Odm->BOOLEAN_temp;
-#endif
-
-       ODM_InitDebugSetting(pDM_Odm);
-
-       if(pDM_Odm->SupportICType==ODM_RTL8723A)
-       {
-               pDM_Odm->AntDivType = SW_ANTDIV;
-       }
-       else if(pDM_Odm->SupportICType & (ODM_RTL8192C|ODM_RTL8192D))
-       {
-           #if(defined(CONFIG_HW_ANTENNA_DIVERSITY))   
-               pDM_Odm->AntDivType = HW_ANTDIV;
-           #elif (defined(CONFIG_SW_ANTENNA_DIVERSITY))
-               pDM_Odm->AntDivType = SW_ANTDIV;
-           #endif
-       }
-       pDM_Odm->TxRate = 0xFF;
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-
-       if(pDM_Odm->SupportICType==ODM_RTL8723B)
-       {
-               if((!pDM_Odm->DM_SWAT_Table.ANTA_ON || !pDM_Odm->DM_SWAT_Table.ANTB_ON))
-                       pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);
-       }
-
-#elif (DM_ODM_SUPPORT_TYPE == ODM_AP)
-
-       #if(defined(CONFIG_NOT_SUPPORT_ANTDIV)) 
-               pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Disable AntDiv function] : Not Support 2.4G & 5G Antenna Diversity\n"));
-       #elif(defined(CONFIG_2G5G_SUPPORT_ANTDIV)) 
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Enable AntDiv function] : 2.4G & 5G Support Antenna Diversity Simultaneously \n"));
-               pDM_FatTable->AntDiv_2G_5G = (ODM_ANTDIV_2G|ODM_ANTDIV_5G);
-               if(pDM_Odm->SupportICType & ODM_ANTDIV_SUPPORT)
-                       pDM_Odm->SupportAbility |= ODM_BB_ANT_DIV;
-               if(*pDM_Odm->pBandType == ODM_BAND_5G )
-               {
-                       #if ( defined(CONFIG_5G_CGCS_RX_DIVERSITY) )
-                               pDM_Odm->AntDivType = CGCS_RX_HW_ANTDIV; 
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 5G] : AntDiv Type = CGCS_RX_HW_ANTDIV\n"));
-                       #elif( defined(CONFIG_5G_CG_TRX_DIVERSITY) )
-                               pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 5G] : AntDiv Type = CG_TRX_HW_ANTDIV\n"));
-                       #elif( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) )
-                               pDM_Odm->AntDivType = CG_TRX_SMART_ANTDIV;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 5G] : AntDiv Type = CG_SMART_ANTDIV\n"));
-                       #endif
-               }               
-               else    if(*pDM_Odm->pBandType == ODM_BAND_2_4G )
-               {
-                       #if ( defined(CONFIG_2G_CGCS_RX_DIVERSITY) )
-                               pDM_Odm->AntDivType = CGCS_RX_HW_ANTDIV;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 2.4G] : AntDiv Type = CGCS_RX_HW_ANTDIV\n"));
-                       #elif( defined(CONFIG_2G_CG_TRX_DIVERSITY) )
-                               pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 2.4G] : AntDiv Type = CG_TRX_HW_ANTDIV\n"));
-                       #elif( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )
-                               pDM_Odm->AntDivType = CG_TRX_SMART_ANTDIV;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 2.4G] : AntDiv Type = CG_SMART_ANTDIV\n"));
-                       #endif
-               }
-        #elif(defined(CONFIG_5G_SUPPORT_ANTDIV))
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Enable AntDiv function] : Only 5G Support Antenna Diversity\n"));
-               pDM_FatTable->AntDiv_2G_5G = (ODM_ANTDIV_5G);
-               if(*pDM_Odm->pBandType == ODM_BAND_5G )
-               {
-                       if(pDM_Odm->SupportICType & ODM_ANTDIV_5G_SUPPORT_IC)
-                               pDM_Odm->SupportAbility |= ODM_BB_ANT_DIV;      
-                       #if ( defined(CONFIG_5G_CGCS_RX_DIVERSITY) )
-                               pDM_Odm->AntDivType = CGCS_RX_HW_ANTDIV;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 5G] : AntDiv Type = CGCS_RX_HW_ANTDIV\n"));
-                       #elif( defined(CONFIG_5G_CG_TRX_DIVERSITY) )
-                               pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 5G] : AntDiv Type = CG_TRX_HW_ANTDIV\n"));
-                       #elif( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) )
-                               pDM_Odm->AntDivType = CG_TRX_SMART_ANTDIV;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 5G] : AntDiv Type = CG_SMART_ANTDIV\n"));
-                       #endif
-               }
-               else if(*pDM_Odm->pBandType == ODM_BAND_2_4G )
-               {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Not Support 2G AntDivType\n"));
-                       pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);
-               }
-       #elif(defined(CONFIG_2G_SUPPORT_ANTDIV)) 
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Enable AntDiv function] : Only 2.4G Support Antenna Diversity\n"));
-               pDM_FatTable->AntDiv_2G_5G = (ODM_ANTDIV_2G);
-               if(*pDM_Odm->pBandType == ODM_BAND_2_4G )
-               {
-                       if(pDM_Odm->SupportICType & ODM_ANTDIV_2G_SUPPORT_IC)
-                               pDM_Odm->SupportAbility |= ODM_BB_ANT_DIV;
-                       #if ( defined(CONFIG_2G_CGCS_RX_DIVERSITY) )
-                               pDM_Odm->AntDivType = CGCS_RX_HW_ANTDIV;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 2.4G] : AntDiv Type = CGCS_RX_HW_ANTDIV\n"));
-                       #elif( defined(CONFIG_2G_CG_TRX_DIVERSITY) )
-                               pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 2.4G] : AntDiv Type = CG_TRX_HW_ANTDIV\n"));
-                       #elif( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )
-                               pDM_Odm->AntDivType = CG_TRX_SMART_ANTDIV;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 2.4G] : AntDiv Type = CG_SMART_ANTDIV\n"));
-                        #endif
-               }
-               else if(*pDM_Odm->pBandType == ODM_BAND_5G )
-               {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Not Support 5G AntDivType\n"));
-                       pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);
-               }
-       #endif
-#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
-#endif //#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-
-}
-
-VOID
-odm_CommonInfoSelfUpdate(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       u1Byte  EntryCnt=0;
-       u1Byte  i;
-       PSTA_INFO_T     pEntry;
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-       PADAPTER        Adapter =  pDM_Odm->Adapter;
-       PMGNT_INFO      pMgntInfo = &Adapter->MgntInfo;
-
-       pEntry = pDM_Odm->pODM_StaInfo[0];
-       if(pMgntInfo->mAssoc)
-       {
-               pEntry->bUsed=TRUE;
-               for (i=0; i<6; i++)
-                       pEntry->MacAddr[i] = pMgntInfo->Bssid[i];
-       }
-       else
-       {
-               pEntry->bUsed=FALSE;
-               for (i=0; i<6; i++)
-                       pEntry->MacAddr[i] = 0;
-       }
-#endif
-
-
-       if(*(pDM_Odm->pBandWidth) == ODM_BW40M)
-       {
-               if(*(pDM_Odm->pSecChOffset) == 1)
-                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) -2;
-               else if(*(pDM_Odm->pSecChOffset) == 2)
-                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) +2;
-       }
-       else
-               pDM_Odm->ControlChannel = *(pDM_Odm->pChannel);
-
-       for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)
-       {
-               pEntry = pDM_Odm->pODM_StaInfo[i];
-               if(IS_STA_VALID(pEntry))
-                       EntryCnt++;
-       }
-       if(EntryCnt == 1)
-               pDM_Odm->bOneEntryOnly = TRUE;
-       else
-               pDM_Odm->bOneEntryOnly = FALSE;
-}
-
-VOID
-odm_CmnInfoInit_Debug(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoInit_Debug==>\n"));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("SupportPlatform=%d\n",pDM_Odm->SupportPlatform) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("SupportAbility=0x%x\n",pDM_Odm->SupportAbility) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("SupportInterface=%d\n",pDM_Odm->SupportInterface) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("SupportICType=0x%x\n",pDM_Odm->SupportICType) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("CutVersion=%d\n",pDM_Odm->CutVersion) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("FabVersion=%d\n",pDM_Odm->FabVersion) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("RFType=%d\n",pDM_Odm->RFType) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("BoardType=%d\n",pDM_Odm->BoardType) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("ExtLNA=%d\n",pDM_Odm->ExtLNA) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("ExtPA=%d\n",pDM_Odm->ExtPA) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("ExtTRSW=%d\n",pDM_Odm->ExtTRSW) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("PatchID=%d\n",pDM_Odm->PatchID) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("bInHctTest=%d\n",pDM_Odm->bInHctTest) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("bWIFITest=%d\n",pDM_Odm->bWIFITest) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("bDualMacSmartConcurrent=%d\n",pDM_Odm->bDualMacSmartConcurrent) );
-
-}
-
-VOID
-odm_CmnInfoHook_Debug(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoHook_Debug==>\n"));    
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pNumTxBytesUnicast=%llu\n",*(pDM_Odm->pNumTxBytesUnicast)) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pNumRxBytesUnicast=%llu\n",*(pDM_Odm->pNumRxBytesUnicast)) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pWirelessMode=0x%x\n",*(pDM_Odm->pWirelessMode)) );       
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pSecChOffset=%d\n",*(pDM_Odm->pSecChOffset)) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pSecurity=%d\n",*(pDM_Odm->pSecurity)) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pBandWidth=%d\n",*(pDM_Odm->pBandWidth)) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pChannel=%d\n",*(pDM_Odm->pChannel)) );
-
-       if(pDM_Odm->SupportICType==ODM_RTL8192D)
-       {
-               if(pDM_Odm->pBandType)
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pBandType=%d\n",*(pDM_Odm->pBandType)) );
-               if(pDM_Odm->pMacPhyMode)
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pMacPhyMode=%d\n",*(pDM_Odm->pMacPhyMode)) );
-               if(pDM_Odm->pBuddyAdapter)
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pbGetValueFromOtherMac=%d\n",*(pDM_Odm->pbGetValueFromOtherMac)) );
-               if(pDM_Odm->pBuddyAdapter)
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pBuddyAdapter=%p\n",*(pDM_Odm->pBuddyAdapter)) );
-               if(pDM_Odm->pbMasterOfDMSP)
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pbMasterOfDMSP=%d\n",*(pDM_Odm->pbMasterOfDMSP)) );
-       }
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pbScanInProcess=%d\n",*(pDM_Odm->pbScanInProcess)) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pbPowerSaving=%d\n",*(pDM_Odm->pbPowerSaving)) );
-
-       if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("pOnePathCCA=%d\n",*(pDM_Odm->pOnePathCCA)) );
-}
-
-VOID
-odm_CmnInfoUpdate_Debug(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoUpdate_Debug==>\n"));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("bWIFI_Direct=%d\n",pDM_Odm->bWIFI_Direct) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("bWIFI_Display=%d\n",pDM_Odm->bWIFI_Display) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("bLinked=%d\n",pDM_Odm->bLinked) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("RSSI_Min=%d\n",pDM_Odm->RSSI_Min) );
-}
-
-VOID
-odm_BasicDbgMessage
-(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       PFALSE_ALARM_STATISTICS FalseAlmCnt = &(pDM_Odm->FalseAlmCnt);
-       pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;
-       
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_BasicDbgMsg==>\n"));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("bLinked = %d, RSSI_Min = %d, CurrentIGI = 0x%x \n",
-               pDM_Odm->bLinked, pDM_Odm->RSSI_Min, pDM_DigTable->CurIGValue) );
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("Cnt_Cck_fail = %d, Cnt_Ofdm_fail = %d, Total False Alarm = %d\n", 
-               FalseAlmCnt->Cnt_Cck_fail, FalseAlmCnt->Cnt_Ofdm_fail, FalseAlmCnt->Cnt_all));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("RxRate = 0x%x, RSSI_A = %d, RSSI_B = %d\n", 
-               pDM_Odm->RxRate, pDM_Odm->RSSI_A, pDM_Odm->RSSI_B));
-       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("RSSI_C = %d, RSSI_D = %d\n", pDM_Odm->RSSI_C, pDM_Odm->RSSI_D));
-
-}
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-VOID
-ODM_InitAllWorkItems(IN PDM_ODM_T      pDM_Odm )
-{
-#if USE_WORKITEM
-       PADAPTER                pAdapter = pDM_Odm->Adapter;
-
-       ODM_InitializeWorkItem( pDM_Odm, 
-                                                       &pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem_8723B, 
-                                                       (RT_WORKITEM_CALL_BACK)ODM_SW_AntDiv_WorkitemCallback,
-                                                       (PVOID)pAdapter,
-                                                       "AntennaSwitchWorkitem");
-       
-       ODM_InitializeWorkItem( pDM_Odm, 
-                                                       &pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem, 
-                                                       (RT_WORKITEM_CALL_BACK)odm_SwAntDivChkAntSwitchWorkitemCallback,
-                                                       (PVOID)pAdapter,
-                                                       "AntennaSwitchWorkitem");
-       
-
-       ODM_InitializeWorkItem(
-               pDM_Odm,
-               &(pDM_Odm->PathDivSwitchWorkitem), 
-               (RT_WORKITEM_CALL_BACK)odm_PathDivChkAntSwitchWorkitemCallback, 
-               (PVOID)pAdapter,
-               "SWAS_WorkItem");
-
-       ODM_InitializeWorkItem(
-               pDM_Odm,
-               &(pDM_Odm->CCKPathDiversityWorkitem), 
-               (RT_WORKITEM_CALL_BACK)odm_CCKTXPathDiversityWorkItemCallback, 
-               (PVOID)pAdapter,
-               "CCKTXPathDiversityWorkItem");
-
-       ODM_InitializeWorkItem(
-               pDM_Odm,
-               &(pDM_Odm->MPT_DIGWorkitem), 
-               (RT_WORKITEM_CALL_BACK)odm_MPT_DIGWorkItemCallback, 
-               (PVOID)pAdapter,
-               "MPT_DIGWorkitem");
-
-       ODM_InitializeWorkItem(
-               pDM_Odm,
-               &(pDM_Odm->RaRptWorkitem), 
-               (RT_WORKITEM_CALL_BACK)ODM_UpdateInitRateWorkItemCallback, 
-               (PVOID)pAdapter,
-               "RaRptWorkitem");
-       
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-#if (RTL8188E_SUPPORT == 1)
-       ODM_InitializeWorkItem(
-               pDM_Odm,
-               &(pDM_Odm->FastAntTrainingWorkitem), 
-               (RT_WORKITEM_CALL_BACK)odm_FastAntTrainingWorkItemCallback, 
-               (PVOID)pAdapter,
-               "FastAntTrainingWorkitem");
-#endif
-#endif
-       ODM_InitializeWorkItem(
-               pDM_Odm,
-               &(pDM_Odm->DM_RXHP_Table.PSDTimeWorkitem), 
-               (RT_WORKITEM_CALL_BACK)odm_PSD_RXHPWorkitemCallback, 
-               (PVOID)pAdapter,
-               "PSDRXHP_WorkItem");  
-#endif
-}
-
-VOID
-ODM_FreeAllWorkItems(IN PDM_ODM_T      pDM_Odm )
-{
-#if USE_WORKITEM
-       ODM_FreeWorkItem(       &(pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem_8723B));
-       
-       ODM_FreeWorkItem(       &(pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem));
-
-       ODM_FreeWorkItem(&(pDM_Odm->PathDivSwitchWorkitem));      
-
-       ODM_FreeWorkItem(&(pDM_Odm->CCKPathDiversityWorkitem));
-       
-       ODM_FreeWorkItem(&(pDM_Odm->FastAntTrainingWorkitem));
-
-       ODM_FreeWorkItem(&(pDM_Odm->MPT_DIGWorkitem));
-
-       ODM_FreeWorkItem(&(pDM_Odm->RaRptWorkitem));
-
-       ODM_FreeWorkItem((&pDM_Odm->DM_RXHP_Table.PSDTimeWorkitem));
-#endif
-
-}
-#endif
-
-/*
-VOID
-odm_FindMinimumRSSI(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       u4Byte  i;
-       u1Byte  RSSI_Min = 0xFF;
-
-       for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)
-       {
-//             if(pDM_Odm->pODM_StaInfo[i] != NULL)
-               if(IS_STA_VALID(pDM_Odm->pODM_StaInfo[i]) )
-               {
-                       if(pDM_Odm->pODM_StaInfo[i]->RSSI_Ave < RSSI_Min)
-                       {
-                               RSSI_Min = pDM_Odm->pODM_StaInfo[i]->RSSI_Ave;
-                       }
-               }
-       }
-
-       pDM_Odm->RSSI_Min = RSSI_Min;
-
-}
-
-VOID
-odm_IsLinked(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       u4Byte i;
-       BOOLEAN Linked = FALSE;
-       
-       for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)
-       {
-                       if(IS_STA_VALID(pDM_Odm->pODM_StaInfo[i]) )
-                       {                       
-                               Linked = TRUE;
-                               break;
-                       }
-               
-       }
-
-       pDM_Odm->bLinked = Linked;
-}
-*/
-
-
-//3============================================================
-//3 DIG
-//3============================================================
-/*-----------------------------------------------------------------------------
- * Function:   odm_DIGInit()
- *
- * Overview:   Set DIG scheme init value.
- *
- * Input:              NONE
- *
- * Output:             NONE
- *
- * Return:             NONE
- *
- * Revised History:
- *     When            Who             Remark
- *
- *---------------------------------------------------------------------------*/
-
-//Remove DIG by yuchen
-
-//Remove DIG and FA check by Yu Chen
-
-
-//3============================================================
-//3 BB Power Save
-//3============================================================
-
-//Remove BB power saving by Yuchen
-
-//3============================================================
-//3 RATR MASK
-//3============================================================
-//3============================================================
-//3 Rate Adaptive
-//3============================================================
-
-//Remove RAMask by RS_James
-
-//3============================================================
-//3 Dynamic Tx Power
-//3============================================================
-
-//Remove BY YuChen
-
-//Remove  Rssimonitorcheck related function to odm_rssimonitorcheck.c 
-
-
-VOID
-ODM_InitAllTimers(
-       IN PDM_ODM_T    pDM_Odm 
-       )
-{
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)
-       ODM_InitializeTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer_8723B,
-       (RT_TIMER_CALL_BACK)ODM_SW_AntDiv_Callback, NULL, "SwAntennaSwitchTimer_8723B");
-#endif
-#endif
-
-#if(defined(CONFIG_SW_ANTENNA_DIVERSITY))
-       ODM_InitializeTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer,
-               (RT_TIMER_CALL_BACK)odm_SwAntDivChkAntSwitchCallback, NULL, "SwAntennaSwitchTimer");
-#endif
-       
-#if (!(DM_ODM_SUPPORT_TYPE == ODM_CE))
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-#if (RTL8188E_SUPPORT == 1)
-       ODM_InitializeTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer,
-               (RT_TIMER_CALL_BACK)odm_FastAntTrainingCallback, NULL, "FastAntTrainingTimer");
-#endif
-#endif
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->PSDTimer, 
-               (RT_TIMER_CALL_BACK)dm_PSDMonitorCallback, NULL, "PSDTimer");
-       //
-       //Path Diversity
-       //Neil Chen--2011--06--16--  / 2012/02/23 MH Revise Arch.
-       //
-       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 
-               (RT_TIMER_CALL_BACK)odm_PathDivChkAntSwitchCallback, NULL, "PathDivTimer");
-
-       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer, 
-               (RT_TIMER_CALL_BACK)odm_CCKTXPathDiversityCallback, NULL, "CCKPathDiversityTimer");
-
-       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer, 
-               (RT_TIMER_CALL_BACK)odm_MPT_DIGCallback, NULL, "MPT_DIGTimer");
-
-       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer,
-               (RT_TIMER_CALL_BACK)odm_PSD_RXHPCallback, NULL, "PSDRXHPTimer");  
-#endif 
-}
-
-VOID
-ODM_CancelAllTimers(
-       IN PDM_ODM_T    pDM_Odm 
-       )
-{
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       //
-       // 2012/01/12 MH Temp BSOD fix. We need to find NIC allocate mem fail reason in 
-       // win7 platform.
-       //
-       HAL_ADAPTER_STS_CHK(pDM_Odm)
-#endif 
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)
-       ODM_CancelTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer_8723B);
-#endif
-#endif
-
-#if(defined(CONFIG_SW_ANTENNA_DIVERSITY))
-       ODM_CancelTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer);
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-#if (RTL8188E_SUPPORT == 1)
-       ODM_CancelTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer);
-#endif
-       ODM_CancelTimer(pDM_Odm, &pDM_Odm->PSDTimer);   
-       //
-       //Path Diversity
-       //Neil Chen--2011--06--16--  / 2012/02/23 MH Revise Arch.
-       //
-       ODM_CancelTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer);
-
-       ODM_CancelTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer);
-
-       ODM_CancelTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
-
-       ODM_CancelTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer);
-#endif 
-}
-
-
-VOID
-ODM_ReleaseAllTimers(
-       IN PDM_ODM_T    pDM_Odm 
-       )
-{
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)
-       ODM_ReleaseTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer_8723B);
-#endif
-#endif
-
-#if(defined(CONFIG_SW_ANTENNA_DIVERSITY))
-       ODM_ReleaseTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer);
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-#if (RTL8188E_SUPPORT == 1)
-       ODM_ReleaseTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer);
-#endif
-
-       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->PSDTimer);
-       //
-       //Path Diversity
-       //Neil Chen--2011--06--16--  / 2012/02/23 MH Revise Arch.
-       //
-       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer);
-
-       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer);
-
-       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
-
-       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer); 
-#endif 
-}
-
-
-//3============================================================
-//3 Tx Power Tracking
-//3============================================================
-
-VOID
-odm_IQCalibrate(
-               IN      PDM_ODM_T       pDM_Odm 
-               )
-{
-       PADAPTER        Adapter = pDM_Odm->Adapter;
-       
-       if(!IS_HARDWARE_TYPE_JAGUAR(Adapter))
-               return;
-       else if(IS_HARDWARE_TYPE_8812AU(Adapter))
-               return;
-#if (RTL8821A_SUPPORT == 1)
-       if(pDM_Odm->bLinked)
-       {
-               if((*pDM_Odm->pChannel != pDM_Odm->preChannel) && (!*pDM_Odm->pbScanInProcess))
-               {
-                       pDM_Odm->preChannel = *pDM_Odm->pChannel;
-                       pDM_Odm->LinkedInterval = 0;
-               }
-
-               if(pDM_Odm->LinkedInterval < 3)
-                       pDM_Odm->LinkedInterval++;
-               
-               if(pDM_Odm->LinkedInterval == 2)
-               {
-                       // Mark out IQK flow to prevent tx stuck. by Maddest 20130306
-                       // Open it verified by James 20130715
-                       PHY_IQCalibrate_8821A(Adapter, FALSE);
-               }
-       }
-       else
-               pDM_Odm->LinkedInterval = 0;
-#endif
-}
-
-
-VOID
-odm_TXPowerTrackingInit(
-       IN      PDM_ODM_T       pDM_Odm 
-       )
-{
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-       if(!(pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_IC_11N_SERIES)))
-               return;
-#endif
-
-       odm_TXPowerTrackingThermalMeterInit(pDM_Odm);
-}      
-
-u1Byte 
-getSwingIndex(
-       IN      PDM_ODM_T       pDM_Odm 
-       )
-{
-       PADAPTER                Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       u1Byte                  i = 0;
-       u4Byte                  bbSwing;
-       u4Byte                  swingTableSize;
-       pu4Byte                         pSwingTable;
-
-       if (pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8723B ||
-               pDM_Odm->SupportICType == ODM_RTL8192E) 
-       {
-               bbSwing = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, 0xFFC00000);
-
-               pSwingTable = OFDMSwingTable_New;
-               swingTableSize = OFDM_TABLE_SIZE;
-       } else {
-#if ((RTL8812A_SUPPORT==1)||(RTL8821A_SUPPORT==1))
-               if (pDM_Odm->SupportICType == ODM_RTL8812 || pDM_Odm->SupportICType == ODM_RTL8821)
-               {
-                       bbSwing = PHY_GetTxBBSwing_8812A(Adapter, pHalData->CurrentBandType, ODM_RF_PATH_A);
-                       pSwingTable = TxScalingTable_Jaguar;
-                       swingTableSize = TXSCALE_TABLE_SIZE;
-               }
-               else
-#endif
-               {
-                       bbSwing = 0;
-                       pSwingTable = OFDMSwingTable;
-                       swingTableSize = OFDM_TABLE_SIZE;
-               }
-       }
-
-       for (i = 0; i < swingTableSize; ++i) {
-               u4Byte tableValue = pSwingTable[i];
-               
-               if (tableValue >= 0x100000 )
-                       tableValue >>= 22;
-               if (bbSwing == tableValue)
-                       break;
-       }
-       return i;
-}
-
-VOID
-odm_TXPowerTrackingThermalMeterInit(
-       IN      PDM_ODM_T       pDM_Odm 
-       )
-{
-       u1Byte defaultSwingIndex = getSwingIndex(pDM_Odm);
-       u1Byte                  p = 0;
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       PADAPTER                Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-
-       #if     MP_DRIVER != 1                                  //for mp driver, turn off txpwrtracking as default
-       pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = pHalData->TxPowerTrackControl = TRUE;            
-       #endif
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-       PADAPTER                        Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
-
-
-       if (pDM_Odm->SupportICType >= ODM_RTL8188E) 
-       {
-               pDM_Odm->RFCalibrateInfo.bTXPowerTracking = _TRUE;
-               pDM_Odm->RFCalibrateInfo.TXPowercount = 0;
-               pDM_Odm->RFCalibrateInfo.bTXPowerTrackingInit = _FALSE;
-               
-               if ( *(pDM_Odm->mp_mode) != 1)
-                       pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _TRUE;
-               else
-                       pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _FALSE;
-
-               MSG_8192C("pDM_Odm TxPowerTrackControl = %d\n", pDM_Odm->RFCalibrateInfo.TxPowerTrackControl);
-       }
-       else
-       {
-               struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-
-               pdmpriv->bTXPowerTracking = _TRUE;
-               pdmpriv->TXPowercount = 0;
-               pdmpriv->bTXPowerTrackingInit = _FALSE;
-               //#if   (MP_DRIVER != 1)                //for mp driver, turn off txpwrtracking as default
-
-               if (*(pDM_Odm->mp_mode) != 1)
-                       pdmpriv->TxPowerTrackControl = _TRUE;
-               else
-                       pdmpriv->TxPowerTrackControl = _FALSE;
-
-
-               //MSG_8192C("pdmpriv->TxPowerTrackControl = %d\n", pdmpriv->TxPowerTrackControl);
-       }
-       
-#elif (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-       #ifdef RTL8188E_SUPPORT
-       {
-               pDM_Odm->RFCalibrateInfo.bTXPowerTracking = _TRUE;
-               pDM_Odm->RFCalibrateInfo.TXPowercount = 0;
-               pDM_Odm->RFCalibrateInfo.bTXPowerTrackingInit = _FALSE;
-               pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _TRUE;
-       }
-       #endif
-#endif
-
-       //pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = TRUE;
-       pDM_Odm->RFCalibrateInfo.ThermalValue = pHalData->EEPROMThermalMeter;
-       pDM_Odm->RFCalibrateInfo.ThermalValue_IQK = pHalData->EEPROMThermalMeter;
-       pDM_Odm->RFCalibrateInfo.ThermalValue_LCK = pHalData->EEPROMThermalMeter;       
-
-       // The index of "0 dB" in SwingTable.
-       if (pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8723B ||
-               pDM_Odm->SupportICType == ODM_RTL8192E) 
-       {
-               pDM_Odm->DefaultOfdmIndex = (defaultSwingIndex >= OFDM_TABLE_SIZE) ? 30 : defaultSwingIndex;
-               pDM_Odm->DefaultCckIndex = 20;  
-       }
-       else
-       {
-               pDM_Odm->DefaultOfdmIndex = (defaultSwingIndex >= TXSCALE_TABLE_SIZE) ? 24 : defaultSwingIndex;
-               pDM_Odm->DefaultCckIndex = 24;  
-       }
-
-       pDM_Odm->BbSwingIdxCckBase = pDM_Odm->DefaultCckIndex;
-       pDM_Odm->RFCalibrateInfo.CCK_index = pDM_Odm->DefaultCckIndex;
-       
-       for (p = ODM_RF_PATH_A; p < MAX_RF_PATH; ++p)
-       {
-               pDM_Odm->BbSwingIdxOfdmBase[p] = pDM_Odm->DefaultOfdmIndex;             
-               pDM_Odm->RFCalibrateInfo.OFDM_index[p] = pDM_Odm->DefaultOfdmIndex;             
-               pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = 0;
-               pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p] = 0;
-               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
-       }
-
-}
-
-
-VOID
-ODM_TXPowerTrackingCheck(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       //
-       // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate
-       // at the same time. In the stage2/3, we need to prive universal interface and merge all
-       // HW dynamic mechanism.
-       //
-       switch  (pDM_Odm->SupportPlatform)
-       {
-               case    ODM_WIN:
-                       odm_TXPowerTrackingCheckMP(pDM_Odm);
-                       break;
-
-               case    ODM_CE:
-                       odm_TXPowerTrackingCheckCE(pDM_Odm);
-                       break;
-
-               case    ODM_AP:
-                       odm_TXPowerTrackingCheckAP(pDM_Odm);            
-                       break;          
-
-               case    ODM_ADSL:
-                       //odm_DIGAP(pDM_Odm);
-                       break;  
-       }
-
-}
-
-VOID
-odm_TXPowerTrackingCheckCE(
-       IN              PDM_ODM_T               pDM_Odm 
-       )
-{
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
-       PADAPTER        Adapter = pDM_Odm->Adapter;
-       #if( (RTL8192C_SUPPORT==1) ||  (RTL8723A_SUPPORT==1) )
-       if(IS_HARDWARE_TYPE_8192C(Adapter)){
-               rtl8192c_odm_CheckTXPowerTracking(Adapter);
-               return;
-       }
-       #endif
-
-       #if (RTL8192D_SUPPORT==1) 
-       if(IS_HARDWARE_TYPE_8192D(Adapter)){    
-               #if (RTL8192D_EASY_SMART_CONCURRENT == 1)
-               if(!Adapter->bSlaveOfDMSP)
-               #endif
-                       rtl8192d_odm_CheckTXPowerTracking(Adapter);
-               return; 
-       }
-       #endif
-
-       #if(((RTL8188E_SUPPORT==1) ||  (RTL8812A_SUPPORT==1) ||  (RTL8821A_SUPPORT==1) ||  (RTL8192E_SUPPORT==1)  ||  (RTL8723B_SUPPORT==1)  ))
-       if(!(pDM_Odm->SupportAbility & ODM_RF_TX_PWR_TRACK))
-       {
-               return;
-       }
-
-       if(!pDM_Odm->RFCalibrateInfo.TM_Trigger)                //at least delay 1 sec
-       {
-               //pHalData->TxPowerCheckCnt++;  //cosa add for debug
-               if(IS_HARDWARE_TYPE_8188E(Adapter) || IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_8192E(Adapter)||IS_HARDWARE_TYPE_8723B(Adapter))
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_T_METER_NEW, (BIT17 | BIT16), 0x03);
-               else
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_T_METER_OLD, bRFRegOffsetMask, 0x60);
-               
-               //DBG_871X("Trigger Thermal Meter!!\n");
-               
-               pDM_Odm->RFCalibrateInfo.TM_Trigger = 1;
-               return;
-       }
-       else
-       {
-               //DBG_871X("Schedule TxPowerTracking direct call!!\n");
-               ODM_TXPowerTrackingCallback_ThermalMeter(Adapter);
-               pDM_Odm->RFCalibrateInfo.TM_Trigger = 0;
-       }
-       #endif
-#endif 
-}
-
-VOID
-odm_TXPowerTrackingCheckMP(
-       IN              PDM_ODM_T               pDM_Odm 
-       )
-{
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       PADAPTER        Adapter = pDM_Odm->Adapter;
-
-       if (ODM_CheckPowerStatus(Adapter) == FALSE) 
-       {
-               RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("===>ODM_CheckPowerStatus() return FALSE\n"));
-               return;
-       }
-
-       if(IS_HARDWARE_TYPE_8723A(Adapter))
-               return;
-
-       if(!Adapter->bSlaveOfDMSP || Adapter->DualMacSmartConcurrent == FALSE)
-               odm_TXPowerTrackingThermalMeterCheck(Adapter);
-       else {
-               RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("!Adapter->bSlaveOfDMSP || Adapter->DualMacSmartConcurrent == FALSE\n"));
-       }
-#endif
-       
-}
-
-
-VOID
-odm_TXPowerTrackingCheckAP(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
-       prtl8192cd_priv priv            = pDM_Odm->priv;
-
-       if ( (priv->pmib->dot11RFEntry.ther) && ((priv->up_time % priv->pshare->rf_ft_var.tpt_period) == 0)){
-#ifdef CONFIG_RTL_92D_SUPPORT
-               if (GET_CHIP_VER(priv)==VERSION_8192D){
-                       tx_power_tracking_92D(priv);
-               } else 
-#endif
-               {
-#ifdef CONFIG_RTL_92C_SUPPORT                  
-                       tx_power_tracking(priv);
-#endif
-               }
-       }
-#endif 
-
-}
-
-
-
-//antenna mapping info
-// 1: right-side antenna
-// 2/0: left-side antenna
-//PDM_SWAT_Table->CCK_Ant1_Cnt /OFDM_Ant1_Cnt:  for right-side antenna:   Ant:1    RxDefaultAnt1
-//PDM_SWAT_Table->CCK_Ant2_Cnt /OFDM_Ant2_Cnt:  for left-side antenna:     Ant:0    RxDefaultAnt2
-// We select left antenna as default antenna in initial process, modify it as needed
-//
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-VOID
-odm_TXPowerTrackingThermalMeterCheck(
-       IN      PADAPTER                Adapter
-       )
-{
-#ifndef AP_BUILD_WORKAROUND
-       static u1Byte                   TM_Trigger = 0;
-
-       if(!(GET_HAL_DATA(Adapter)->DM_OutSrc.SupportAbility & ODM_RF_TX_PWR_TRACK))
-       {
-               RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,
-                       ("===>odm_TXPowerTrackingThermalMeterCheck(),pMgntInfo->bTXPowerTracking is FALSE, return!!\n"));
-               return;
-       }
-
-       if(!TM_Trigger)         //at least delay 1 sec
-       {
-               if(IS_HARDWARE_TYPE_8192D(Adapter))
-                       PHY_SetRFReg(Adapter, ODM_RF_PATH_A, RF_T_METER_92D, BIT17 | BIT16, 0x03);
-               else if(IS_HARDWARE_TYPE_8188E(Adapter) || IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_8192E(Adapter) ||
-                           IS_HARDWARE_TYPE_8723B(Adapter))
-                       PHY_SetRFReg(Adapter, ODM_RF_PATH_A, RF_T_METER_88E, BIT17 | BIT16, 0x03);
-               else
-                       PHY_SetRFReg(Adapter, ODM_RF_PATH_A, RF_T_METER, bRFRegOffsetMask, 0x60);
-               
-               RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Trigger Thermal Meter!!\n"));
-               
-               TM_Trigger = 1;
-               return;
-       }
-       else
-       {
-               RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Schedule TxPowerTracking direct call!!\n"));           
-               odm_TXPowerTrackingDirectCall(Adapter); //Using direct call is instead, added by Roger, 2009.06.18.
-               TM_Trigger = 0;
-       }
-#endif
-}
-
-// Only for 8723A SW ANT DIV INIT--2012--07--17
-VOID
-odm_SwAntDivInit_NIC_8723A(
-       IN      PDM_ODM_T               pDM_Odm)
-{
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       PADAPTER                Adapter = pDM_Odm->Adapter;
-       
-       u1Byte                  btAntNum=BT_GetPgAntNum(Adapter);
-
-       if(IS_HARDWARE_TYPE_8723A(Adapter))
-       {
-               pDM_SWAT_Table->ANTA_ON =TRUE;
-               
-               // Set default antenna B status by PG
-               if(btAntNum == 2)
-                       pDM_SWAT_Table->ANTB_ON = TRUE;
-               else if(btAntNum == 1)
-                       pDM_SWAT_Table->ANTB_ON = FALSE;
-               else
-                       pDM_SWAT_Table->ANTB_ON = TRUE;
-       }       
-       
-}
-
-#endif //end #ifMP
-
-
-
-//3============================================================
-//3 SW Antenna Diversity
-//3============================================================
-#if(defined(CONFIG_SW_ANTENNA_DIVERSITY))
-VOID
-odm_SwAntDivInit(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       odm_SwAntDivInit_NIC(pDM_Odm);
-#elif(DM_ODM_SUPPORT_TYPE == ODM_AP)
-       dm_SW_AntennaSwitchInit(pDM_Odm->priv);
-#endif
-}
-
-VOID
-odm_SwAntDivInit_NIC(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-
-
-// Init SW ANT DIV mechanism for 8723AE/AU/AS
-// Neil Chen--2012--07--17---
-// CE/AP/ADSL no using SW ANT DIV for 8723A Series IC
-//#if (DM_ODM_SUPPORT_TYPE==ODM_WIN)
-#if (RTL8723A_SUPPORT==1) 
-       if(pDM_Odm->SupportICType == ODM_RTL8723A)
-       {
-               odm_SwAntDivInit_NIC_8723A(pDM_Odm);    
-       }       
-#endif
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SWAS:Init SW Antenna Switch\n"));
-       pDM_SWAT_Table->RSSI_sum_A = 0;
-       pDM_SWAT_Table->RSSI_cnt_A = 0;
-       pDM_SWAT_Table->RSSI_sum_B = 0;
-       pDM_SWAT_Table->RSSI_cnt_B = 0;
-       pDM_SWAT_Table->CurAntenna = MAIN_ANT;
-       pDM_SWAT_Table->PreAntenna = MAIN_ANT;
-       pDM_SWAT_Table->try_flag = 0xff;
-       pDM_SWAT_Table->PreRSSI = 0;
-       pDM_SWAT_Table->SWAS_NoLink_State = 0;
-       pDM_SWAT_Table->bTriggerAntennaSwitch = 0;
-       pDM_SWAT_Table->SelectAntennaMap=0xAA;
-       pDM_SWAT_Table->lastTxOkCnt = 0;
-       pDM_SWAT_Table->lastRxOkCnt = 0;
-       pDM_SWAT_Table->TXByteCnt_A = 0;
-       pDM_SWAT_Table->TXByteCnt_B = 0;
-       pDM_SWAT_Table->RXByteCnt_A = 0;
-       pDM_SWAT_Table->RXByteCnt_B = 0;
-       pDM_SWAT_Table->TrafficLoad = TRAFFIC_LOW;
-       pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 = ODM_Read4Byte(pDM_Odm, 0x860);
-       
-}
-
-//
-// 20100514 Joseph: 
-// Add new function to reset the state of antenna diversity before link.
-//
-VOID
-ODM_SwAntDivResetBeforeLink(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-
-       pDM_SWAT_Table->SWAS_NoLink_State = 0;
-
-}
-
-//
-// 20100514 Luke/Joseph:
-// Add new function to reset antenna diversity state after link.
-//
-VOID
-ODM_SwAntDivRestAfterLink(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;
-       u4Byte             i;
-
-       if(pDM_Odm->SupportICType == ODM_RTL8723A)
-       {
-           pDM_SWAT_Table->RSSI_cnt_A = 0;
-           pDM_SWAT_Table->RSSI_cnt_B = 0;
-           pDM_Odm->RSSI_test = FALSE;
-           pDM_SWAT_Table->try_flag = 0xff;
-           pDM_SWAT_Table->RSSI_Trying = 0;
-           pDM_SWAT_Table->SelectAntennaMap=0xAA;
-       
-       }
-       else if(pDM_Odm->SupportICType & (ODM_RTL8723B|ODM_RTL8821))
-       {
-               pDM_Odm->RSSI_test = FALSE;
-               pDM_SWAT_Table->try_flag = 0xff;
-               pDM_SWAT_Table->RSSI_Trying = 0;
-               pDM_SWAT_Table->Double_chk_flag= 0;
-               
-               pDM_FatTable->RxIdleAnt=MAIN_ANT;
-               
-               for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)
-               {
-                       pDM_FatTable->MainAnt_Sum[i] = 0;
-                       pDM_FatTable->AuxAnt_Sum[i] = 0;
-                       pDM_FatTable->MainAnt_Cnt[i] = 0;
-                       pDM_FatTable->AuxAnt_Cnt[i] = 0;
-               }
-
-       }
-}
-
-void
-odm_SwAntDetectInit(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-#if (RTL8723B_SUPPORT == 1)
-       pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c = ODM_Read4Byte(pDM_Odm, rDPDT_control);
-#endif
-       pDM_SWAT_Table->PreAntenna = MAIN_ANT;
-       pDM_SWAT_Table->CurAntenna = MAIN_ANT;
-       pDM_SWAT_Table->SWAS_NoLink_State = 0;
-}
-
-VOID
-ODM_SwAntDivChkPerPktRssi(
-       IN PDM_ODM_T    pDM_Odm,
-       IN u1Byte               StationID,
-       IN PODM_PHY_INFO_T pPhyInfo
-       )
-{      
-       SWAT_T          *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       
-       if(!(pDM_Odm->SupportAbility & (ODM_BB_ANT_DIV)))
-               return;
-
-// temporary Fix 8723A MP SW ANT DIV Bug --NeilChen--2012--07--11
-#if (DM_ODM_SUPPORT_TYPE==ODM_WIN)
-       if(pDM_Odm->SupportICType == ODM_RTL8723A)
-       {
-               //if(StationID == pDM_SWAT_Table->RSSI_target)
-               //{
-               //1 RSSI for SW Antenna Switch
-               if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-               {
-                       pDM_SWAT_Table->RSSI_sum_A += pPhyInfo->RxPWDBAll;
-                       pDM_SWAT_Table->RSSI_cnt_A++;
-               }
-               else
-               {
-                       pDM_SWAT_Table->RSSI_sum_B += pPhyInfo->RxPWDBAll;
-                       pDM_SWAT_Table->RSSI_cnt_B++;
-
-               }
-               //}
-       }
-       else
-       {
-               if(StationID == pDM_SWAT_Table->RSSI_target)
-               {
-                       //1 RSSI for SW Antenna Switch
-                       if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-                       {
-                               pDM_SWAT_Table->RSSI_sum_A += pPhyInfo->RxPWDBAll;
-                               pDM_SWAT_Table->RSSI_cnt_A++;
-                       }
-                       else
-                       {
-                               pDM_SWAT_Table->RSSI_sum_B += pPhyInfo->RxPWDBAll;
-                               pDM_SWAT_Table->RSSI_cnt_B++;
-
-                       }
-               }
-       }
-#else  
-       if(StationID == pDM_SWAT_Table->RSSI_target)
-       {
-               //1 RSSI for SW Antenna Switch
-               if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-               {
-                       pDM_SWAT_Table->RSSI_sum_A += pPhyInfo->RxPWDBAll;
-                       pDM_SWAT_Table->RSSI_cnt_A++;
-               }
-               else
-               {
-                       pDM_SWAT_Table->RSSI_sum_B += pPhyInfo->RxPWDBAll;
-                       pDM_SWAT_Table->RSSI_cnt_B++;
-
-               }
-       }
-#endif
-}
-
-//
-VOID
-odm_SwAntDivChkAntSwitch(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              u1Byte                  Step
-       )
-{
-       // 
-       // For AP/ADSL use prtl8192cd_priv
-       // For CE/NIC use PADAPTER
-       //
-       prtl8192cd_priv priv            = pDM_Odm->priv;
-
-       //
-       // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate
-       // at the same time. In the stage2/3, we need to prive universal interface and merge all
-       // HW dynamic mechanism.
-       //
-       switch  (pDM_Odm->SupportPlatform)
-       {
-               case    ODM_WIN:        
-                       odm_SwAntDivChkAntSwitchNIC(pDM_Odm, Step);
-                       break;
-               case    ODM_CE:
-                       odm_SwAntDivChkAntSwitchNIC(pDM_Odm, Step);
-                       break;
-
-               case    ODM_AP:
-               case    ODM_ADSL:
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP |ODM_ADSL))
-                       if (priv->pshare->rf_ft_var.antSw_enable && (priv->up_time % 4==1))
-                               dm_SW_AntennaSwitch(priv, SWAW_STEP_PEAK);
-#endif         
-                       break;                  
-       }
-
-}
-
-//
-// 20100514 Luke/Joseph:
-// Add new function for antenna diversity after link.
-// This is the main function of antenna diversity after link.
-// This function is called in HalDmWatchDog() and ODM_SwAntDivChkAntSwitchCallback().
-// HalDmWatchDog() calls this function with SWAW_STEP_PEAK to initialize the antenna test.
-// In SWAW_STEP_PEAK, another antenna and a 500ms timer will be set for testing.
-// After 500ms, ODM_SwAntDivChkAntSwitchCallback() calls this function to compare the signal just
-// listened on the air with the RSSI of original antenna.
-// It chooses the antenna with better RSSI.
-// There is also a aged policy for error trying. Each error trying will cost more 5 seconds waiting 
-// penalty to get next try.
-
-
-VOID
-ODM_SetAntenna(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      u1Byte          Antenna)
-{
-       ODM_SetBBReg(pDM_Odm, 0x860, BIT8|BIT9, Antenna); 
-}
-
-VOID
-odm_SwAntDivChkAntSwitchNIC(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              u1Byte          Step
-       )
-{
-#if ((RTL8192C_SUPPORT==1)||(RTL8723A_SUPPORT==1))
-       //PMGNT_INFO            pMgntInfo = &(Adapter->MgntInfo);
-       //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
-#if (DM_ODM_SUPPORT_TYPE==ODM_WIN)
-       PADAPTER                Adapter=pDM_Odm->Adapter;
-#endif
-
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       s4Byte                  curRSSI=100, RSSI_A, RSSI_B;
-       u1Byte                  nextAntenna=AUX_ANT;
-       //static u8Byte         lastTxOkCnt=0, lastRxOkCnt=0;
-       u8Byte                  curTxOkCnt=0, curRxOkCnt=0;
-       //static u8Byte         TXByteCnt_A=0, TXByteCnt_B=0, RXByteCnt_A=0, RXByteCnt_B=0;
-       u8Byte                  CurByteCnt=0, PreByteCnt=0;
-       //static u1Byte         TrafficLoad = TRAFFIC_LOW;
-       u1Byte                  Score_A=0, Score_B=0;       //A: Main; B: AUX
-       u1Byte                  i;
-
-       if(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))
-               return;
-
-       if (pDM_Odm->SupportICType & (ODM_RTL8192D|ODM_RTL8188E))
-               return;
-
-       if((pDM_Odm->SupportICType == ODM_RTL8192C) &&(pDM_Odm->RFType == ODM_2T2R))
-               return;
-
-       if(pDM_Odm->SupportPlatform & ODM_WIN)
-       {
-               if(*(pDM_Odm->pAntennaTest))
-                       return;
-       }
-
-       if((pDM_SWAT_Table->ANTA_ON == FALSE) ||(pDM_SWAT_Table->ANTB_ON == FALSE))
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
-                               ("odm_SwAntDivChkAntSwitch(): No AntDiv Mechanism, Antenna A or B is off\n"));
-               return;
-       }
-
-       // Radio off: Status reset to default and return.
-       if(*(pDM_Odm->pbPowerSaving)==TRUE) //pHalData->eRFPowerState==eRfOff
-       {
-               ODM_SwAntDivRestAfterLink(pDM_Odm);
-               return;
-       }
-
-
-       // Handling step mismatch condition.
-       // Peak step is not finished at last time. Recover the variable and check again.
-       if(     Step != pDM_SWAT_Table->try_flag        )
-       {
-               ODM_SwAntDivRestAfterLink(pDM_Odm);
-       }
-
-#if  (DM_ODM_SUPPORT_TYPE &( ODM_WIN| ODM_CE ))
-
-       if(pDM_SWAT_Table->try_flag == 0xff)
-       {
-               pDM_SWAT_Table->RSSI_target = 0xff;
-               
-               #if(DM_ODM_SUPPORT_TYPE & ODM_CE)
-               {
-                       u1Byte                  index = 0;
-                       PSTA_INFO_T             pEntry = NULL;
-                       
-                       
-                       for(index=0; index<ODM_ASSOCIATE_ENTRY_NUM; index++)
-                       {                                       
-                               pEntry =  pDM_Odm->pODM_StaInfo[index];
-                               if(IS_STA_VALID(pEntry) ) {
-                                       break;
-                               }
-                       }
-                       if(pEntry == NULL)
-                       {
-                               ODM_SwAntDivRestAfterLink(pDM_Odm);
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("odm_SwAntDivChkAntSwitch(): No Link.\n"));
-                               return;
-                       }
-                       else
-                       {
-                               pDM_SWAT_Table->RSSI_target = index;
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("odm_SwAntDivChkAntSwitch(): RSSI_target is PEER STA\n"));
-                       }
-                }
-               #elif (DM_ODM_SUPPORT_TYPE & ODM_WIN) 
-               {
-                       PADAPTER        pAdapter         =  pDM_Odm->Adapter;
-                       PMGNT_INFO      pMgntInfo=&pAdapter->MgntInfo;
-                       
-                       // Select RSSI checking target
-                       if(pMgntInfo->mAssoc && !ACTING_AS_AP(pAdapter))
-                       {
-                               // Target: Infrastructure mode AP.
-                               //pDM_SWAT_Table->RSSI_target = NULL;
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("odm_SwAntDivChkAntSwitch(): RSSI_target is DEF AP!\n"));
-                       }
-                       else
-                       {
-                               u1Byte                  index = 0;
-                               PSTA_INFO_T             pEntry = NULL;
-                               PADAPTER                pTargetAdapter = NULL;
-                       
-                               if(pMgntInfo->mIbss )
-                               {
-                                       // Target: AP/IBSS peer.
-                                       pTargetAdapter = pAdapter;
-                               }
-                               else
-                               {
-                                       pTargetAdapter = GetFirstAPAdapter(pAdapter);
-                               }
-
-                               if(pTargetAdapter != NULL)
-                               {                       
-                                       for(index=0; index<ODM_ASSOCIATE_ENTRY_NUM; index++)
-                                       {                                       
-                                               
-                                               pEntry = AsocEntry_EnumStation(pTargetAdapter, index);
-                                               if(pEntry != NULL)
-                                               {
-                                                       if(pEntry->bAssociated)
-                                                               break;                  
-                                               }
-                                               
-                                       }
-                                       
-                               }
-
-                               if(pEntry == NULL)
-                               {
-                                       ODM_SwAntDivRestAfterLink(pDM_Odm);
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("odm_SwAntDivChkAntSwitch(): No Link.\n"));
-                                       return;
-                               }
-                               else
-                               {
-                                       //pDM_SWAT_Table->RSSI_target = pEntry;
-                                       pDM_SWAT_Table->RSSI_target = index;
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("odm_SwAntDivChkAntSwitch(): RSSI_target is PEER STA\n"));
-                               }
-                       }//end if(pMgntInfo->mAssoc && !ACTING_AS_AP(Adapter))
-
-               }
-               #endif
-
-               pDM_SWAT_Table->RSSI_cnt_A = 0;
-               pDM_SWAT_Table->RSSI_cnt_B = 0;
-               pDM_SWAT_Table->try_flag = 0;
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("odm_SwAntDivChkAntSwitch(): Set try_flag to 0 prepare for peak!\n"));
-               return;
-       }
-       else
-       {
-
-// To Fix 8723A SW ANT DIV Bug issue
-#if (DM_ODM_SUPPORT_TYPE==ODM_WIN)
-               if (pDM_Odm->SupportICType & ODM_RTL8723A)
-               {
-                       curTxOkCnt = Adapter->TxStats.NumTxBytesUnicast - pDM_SWAT_Table->lastTxOkCnt;
-                       curRxOkCnt =Adapter->RxStats.NumRxBytesUnicast - pDM_SWAT_Table->lastRxOkCnt;
-                       pDM_SWAT_Table->lastTxOkCnt = Adapter->TxStats.NumTxBytesUnicast;
-                       pDM_SWAT_Table->lastRxOkCnt = Adapter->RxStats.NumRxBytesUnicast;
-               }
-#else  
-               curTxOkCnt = *(pDM_Odm->pNumTxBytesUnicast) - pDM_SWAT_Table->lastTxOkCnt;
-               curRxOkCnt = *(pDM_Odm->pNumRxBytesUnicast) - pDM_SWAT_Table->lastRxOkCnt;
-               pDM_SWAT_Table->lastTxOkCnt = *(pDM_Odm->pNumTxBytesUnicast);
-               pDM_SWAT_Table->lastRxOkCnt = *(pDM_Odm->pNumRxBytesUnicast);
-#endif 
-               if(pDM_SWAT_Table->try_flag == 1)
-               {
-                       if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-                       {
-                               pDM_SWAT_Table->TXByteCnt_A += curTxOkCnt;
-                               pDM_SWAT_Table->RXByteCnt_A += curRxOkCnt;
-                       }
-                       else
-                       {
-                               pDM_SWAT_Table->TXByteCnt_B += curTxOkCnt;
-                               pDM_SWAT_Table->RXByteCnt_B += curRxOkCnt;
-                       }
-               
-                       nextAntenna = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? AUX_ANT : MAIN_ANT;
-                       pDM_SWAT_Table->RSSI_Trying--;
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("RSSI_Trying = %d\n",pDM_SWAT_Table->RSSI_Trying));
-                       if(pDM_SWAT_Table->RSSI_Trying == 0)
-                       {
-                               CurByteCnt = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? (pDM_SWAT_Table->TXByteCnt_A+pDM_SWAT_Table->RXByteCnt_A) : (pDM_SWAT_Table->TXByteCnt_B+pDM_SWAT_Table->RXByteCnt_B);
-                               PreByteCnt = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? (pDM_SWAT_Table->TXByteCnt_B+pDM_SWAT_Table->RXByteCnt_B) : (pDM_SWAT_Table->TXByteCnt_A+pDM_SWAT_Table->RXByteCnt_A);
-                               
-                               if(pDM_SWAT_Table->TrafficLoad == TRAFFIC_HIGH)
-                                       //CurByteCnt = PlatformDivision64(CurByteCnt, 9);
-                                       PreByteCnt = PreByteCnt*9;
-                               else if(pDM_SWAT_Table->TrafficLoad == TRAFFIC_LOW)
-                                       //CurByteCnt = PlatformDivision64(CurByteCnt, 2);
-                                       PreByteCnt = PreByteCnt*2;
-
-                               if(pDM_SWAT_Table->RSSI_cnt_A > 0)
-                                       RSSI_A = pDM_SWAT_Table->RSSI_sum_A/pDM_SWAT_Table->RSSI_cnt_A; 
-                               else
-                                       RSSI_A = 0;
-                               if(pDM_SWAT_Table->RSSI_cnt_B > 0)
-                                       RSSI_B = pDM_SWAT_Table->RSSI_sum_B/pDM_SWAT_Table->RSSI_cnt_B; 
-                               else
-                                       RSSI_B = 0;
-                               curRSSI = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? RSSI_A : RSSI_B;
-                               pDM_SWAT_Table->PreRSSI =  (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? RSSI_B : RSSI_A;
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Luke:PreRSSI = %d, CurRSSI = %d\n",pDM_SWAT_Table->PreRSSI, curRSSI));
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SWAS: preAntenna= %s, curAntenna= %s \n", 
-                               (pDM_SWAT_Table->PreAntenna == MAIN_ANT?"MAIN":"AUX"), (pDM_SWAT_Table->CurAntenna == MAIN_ANT?"MAIN":"AUX")));
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Luke:RSSI_A= %d, RSSI_cnt_A = %d, RSSI_B= %d, RSSI_cnt_B = %d\n",
-                                       RSSI_A, pDM_SWAT_Table->RSSI_cnt_A, RSSI_B, pDM_SWAT_Table->RSSI_cnt_B));
-                       }
-
-               }
-               else
-               {
-               
-                       if(pDM_SWAT_Table->RSSI_cnt_A > 0)
-                               RSSI_A = pDM_SWAT_Table->RSSI_sum_A/pDM_SWAT_Table->RSSI_cnt_A; 
-                       else
-                               RSSI_A = 0;
-                       if(pDM_SWAT_Table->RSSI_cnt_B > 0)
-                               RSSI_B = pDM_SWAT_Table->RSSI_sum_B/pDM_SWAT_Table->RSSI_cnt_B; 
-                       else
-                               RSSI_B = 0;
-                       curRSSI = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? RSSI_A : RSSI_B;
-                       pDM_SWAT_Table->PreRSSI =  (pDM_SWAT_Table->PreAntenna == MAIN_ANT)? RSSI_A : RSSI_B;
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Ekul:PreRSSI = %d, CurRSSI = %d\n", pDM_SWAT_Table->PreRSSI, curRSSI));
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SWAS: preAntenna= %s, curAntenna= %s \n", 
-                       (pDM_SWAT_Table->PreAntenna == MAIN_ANT?"MAIN":"AUX"), (pDM_SWAT_Table->CurAntenna == MAIN_ANT?"MAIN":"AUX")));
-
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Ekul:RSSI_A= %d, RSSI_cnt_A = %d, RSSI_B= %d, RSSI_cnt_B = %d\n",
-                               RSSI_A, pDM_SWAT_Table->RSSI_cnt_A, RSSI_B, pDM_SWAT_Table->RSSI_cnt_B));
-                       //RT_TRACE(COMP_SWAS, DBG_LOUD, ("Ekul:curTxOkCnt = %d\n", curTxOkCnt));
-                       //RT_TRACE(COMP_SWAS, DBG_LOUD, ("Ekul:curRxOkCnt = %d\n", curRxOkCnt));
-               }
-
-               //1 Trying State
-               if((pDM_SWAT_Table->try_flag == 1)&&(pDM_SWAT_Table->RSSI_Trying == 0))
-               {
-
-                       if(pDM_SWAT_Table->TestMode == TP_MODE)
-                       {
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SWAS: TestMode = TP_MODE"));
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("TRY:CurByteCnt = %lld,", CurByteCnt));
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("TRY:PreByteCnt = %lld\n",PreByteCnt));          
-                               if(CurByteCnt < PreByteCnt)
-                               {
-                                       if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-                                               pDM_SWAT_Table->SelectAntennaMap=pDM_SWAT_Table->SelectAntennaMap<<1;
-                                       else
-                                               pDM_SWAT_Table->SelectAntennaMap=(pDM_SWAT_Table->SelectAntennaMap<<1)+1;
-                               }
-                               else
-                               {
-                                       if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-                                               pDM_SWAT_Table->SelectAntennaMap=(pDM_SWAT_Table->SelectAntennaMap<<1)+1;
-                                       else
-                                               pDM_SWAT_Table->SelectAntennaMap=pDM_SWAT_Table->SelectAntennaMap<<1;
-                               }
-                               for (i= 0; i<8; i++)
-                               {
-                                       if(((pDM_SWAT_Table->SelectAntennaMap>>i)&BIT0) == 1)
-                                               Score_A++;
-                                       else
-                                               Score_B++;
-                               }
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SelectAntennaMap=%x\n ",pDM_SWAT_Table->SelectAntennaMap));
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Score_A=%d, Score_B=%d\n", Score_A, Score_B));
-                       
-                               if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-                               {
-                                       nextAntenna = (Score_A > Score_B)?MAIN_ANT:AUX_ANT;
-                               }
-                               else
-                               {
-                                       nextAntenna = (Score_B > Score_A)?AUX_ANT:MAIN_ANT;
-                               }
-                               //RT_TRACE(COMP_SWAS, DBG_LOUD, ("nextAntenna=%s\n",(nextAntenna==Antenna_A)?"A":"B"));
-                               //RT_TRACE(COMP_SWAS, DBG_LOUD, ("preAntenna= %s, curAntenna= %s \n", 
-                               //(DM_SWAT_Table.PreAntenna == Antenna_A?"A":"B"), (DM_SWAT_Table.CurAntenna == Antenna_A?"A":"B")));
-
-                               if(nextAntenna != pDM_SWAT_Table->CurAntenna)
-                               {
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SWAS: Switch back to another antenna"));
-                               }
-                               else
-                               {
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SWAS: current anntena is good\n"));
-                               }       
-                       }
-
-                       if(pDM_SWAT_Table->TestMode == RSSI_MODE)
-                       {       
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SWAS: TestMode = RSSI_MODE"));
-                               pDM_SWAT_Table->SelectAntennaMap=0xAA;
-                               if(curRSSI < pDM_SWAT_Table->PreRSSI) //Current antenna is worse than previous antenna
-                               {
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SWAS: Switch back to another antenna"));
-                                       nextAntenna = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? AUX_ANT : MAIN_ANT;
-                               }
-                               else // current anntena is good
-                               {
-                                       nextAntenna =pDM_SWAT_Table->CurAntenna;
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SWAS: current anntena is good\n"));
-                               }
-                       }
-                       pDM_SWAT_Table->try_flag = 0;
-                       pDM_Odm->RSSI_test = FALSE;
-                       pDM_SWAT_Table->RSSI_sum_A = 0;
-                       pDM_SWAT_Table->RSSI_cnt_A = 0;
-                       pDM_SWAT_Table->RSSI_sum_B = 0;
-                       pDM_SWAT_Table->RSSI_cnt_B = 0;
-                       pDM_SWAT_Table->TXByteCnt_A = 0;
-                       pDM_SWAT_Table->TXByteCnt_B = 0;
-                       pDM_SWAT_Table->RXByteCnt_A = 0;
-                       pDM_SWAT_Table->RXByteCnt_B = 0;
-                       
-               }
-
-               //1 Normal State
-               else if(pDM_SWAT_Table->try_flag == 0)
-               {
-                       if(pDM_SWAT_Table->TrafficLoad == TRAFFIC_HIGH)
-                       {
-                               if ((curTxOkCnt+curRxOkCnt) > 3750000)//if(PlatformDivision64(curTxOkCnt+curRxOkCnt, 2) > 1875000)
-                                       pDM_SWAT_Table->TrafficLoad = TRAFFIC_HIGH;
-                               else
-                                       pDM_SWAT_Table->TrafficLoad = TRAFFIC_LOW;
-                       }
-                       else if(pDM_SWAT_Table->TrafficLoad == TRAFFIC_LOW)
-                               {
-                               if ((curTxOkCnt+curRxOkCnt) > 3750000) //if(PlatformDivision64(curTxOkCnt+curRxOkCnt, 2) > 1875000)
-                                       pDM_SWAT_Table->TrafficLoad = TRAFFIC_HIGH;
-                               else
-                                       pDM_SWAT_Table->TrafficLoad = TRAFFIC_LOW;
-                       }
-                       if(pDM_SWAT_Table->TrafficLoad == TRAFFIC_HIGH)
-                               pDM_SWAT_Table->bTriggerAntennaSwitch = 0;
-                       //RT_TRACE(COMP_SWAS, DBG_LOUD, ("Normal:TrafficLoad = %llu\n", curTxOkCnt+curRxOkCnt));
-
-                       //Prepare To Try Antenna                
-                                       nextAntenna = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? AUX_ANT : MAIN_ANT;
-                                       pDM_SWAT_Table->try_flag = 1;
-                                       pDM_Odm->RSSI_test = TRUE;
-                       if((curRxOkCnt+curTxOkCnt) > 1000)
-                       {
-                               pDM_SWAT_Table->RSSI_Trying = 4;
-                               pDM_SWAT_Table->TestMode = TP_MODE;
-                               }
-                               else
-                               {
-                               pDM_SWAT_Table->RSSI_Trying = 2;
-                               pDM_SWAT_Table->TestMode = RSSI_MODE;
-
-                       }
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SWAS: Normal State -> Begin Trying!\n"));
-                       
-                       
-                       pDM_SWAT_Table->RSSI_sum_A = 0;
-                       pDM_SWAT_Table->RSSI_cnt_A = 0;
-                       pDM_SWAT_Table->RSSI_sum_B = 0;
-                       pDM_SWAT_Table->RSSI_cnt_B = 0;
-               }
-       }
-
-       //1 4.Change TRX antenna
-       if(nextAntenna != pDM_SWAT_Table->CurAntenna)
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SWAS: Change TX Antenna!\n "));
-               //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, nextAntenna);           
-               #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)                    
-               ODM_SetAntenna(pDM_Odm,nextAntenna);            
-               #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-               {
-                       BOOLEAN bEnqueue;                       
-                       bEnqueue = (pDM_Odm->SupportInterface ==  ODM_ITRF_PCIE)?FALSE :TRUE;                   
-                       rtw_antenna_select_cmd(pDM_Odm->Adapter, nextAntenna, bEnqueue);
-               }
-               #endif
-               
-       }
-
-       //1 5.Reset Statistics
-       pDM_SWAT_Table->PreAntenna = pDM_SWAT_Table->CurAntenna;
-       pDM_SWAT_Table->CurAntenna = nextAntenna;
-       pDM_SWAT_Table->PreRSSI = curRSSI;
-
-       //1 6.Set next timer
-       {
-               //PADAPTER              pAdapter = pDM_Odm->Adapter;
-               //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
-       
-
-       if(pDM_SWAT_Table->RSSI_Trying == 0)
-               return;
-
-       if(pDM_SWAT_Table->RSSI_Trying%2 == 0)
-       {
-               if(pDM_SWAT_Table->TestMode == TP_MODE)
-               {
-                       if(pDM_SWAT_Table->TrafficLoad == TRAFFIC_HIGH)
-                       {
-                               ODM_SetTimer(pDM_Odm,&pDM_SWAT_Table->SwAntennaSwitchTimer, 10 ); //ms
-                               
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("dm_SW_AntennaSwitch(): Test another antenna for 10 ms\n"));
-                       }
-                       else if(pDM_SWAT_Table->TrafficLoad == TRAFFIC_LOW)
-                       {
-                               ODM_SetTimer(pDM_Odm,&pDM_SWAT_Table->SwAntennaSwitchTimer, 50 ); //ms
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("dm_SW_AntennaSwitch(): Test another antenna for 50 ms\n"));
-                       }
-               }
-               else
-               {
-                       ODM_SetTimer(pDM_Odm,&pDM_SWAT_Table->SwAntennaSwitchTimer, 500 ); //ms
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("dm_SW_AntennaSwitch(): Test another antenna for 500 ms\n"));
-               }
-       }
-       else
-       {
-               if(pDM_SWAT_Table->TestMode == TP_MODE)
-               {
-                       if(pDM_SWAT_Table->TrafficLoad == TRAFFIC_HIGH)
-                               ODM_SetTimer(pDM_Odm,&pDM_SWAT_Table->SwAntennaSwitchTimer, 90 ); //ms
-                       else if(pDM_SWAT_Table->TrafficLoad == TRAFFIC_LOW)
-                               ODM_SetTimer(pDM_Odm,&pDM_SWAT_Table->SwAntennaSwitchTimer, 100 ); //ms
-               }
-               else
-                       ODM_SetTimer(pDM_Odm,&pDM_SWAT_Table->SwAntennaSwitchTimer, 500 ); //ms 
-       }
-       }
-#endif // #if (DM_ODM_SUPPORT_TYPE  & (ODM_WIN|ODM_CE))
-#endif // #if (RTL8192C_SUPPORT==1) 
-}
-
-
-// Remove odm_SwAntDivSelectScanChnl() and odm_SwAntDivConstructScanChnl() to odm_PathDiv.c
-
-
-//
-// 20100514 Luke/Joseph:
-// Callback function for 500ms antenna test trying.
-//
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-VOID
-odm_SwAntDivChkAntSwitchCallback(
-       PRT_TIMER               pTimer
-)
-{
-       PADAPTER                Adapter = (PADAPTER)pTimer->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       pSWAT_T         pDM_SWAT_Table = &pHalData->DM_OutSrc.DM_SWAT_Table;
-
-       #if DEV_BUS_TYPE==RT_PCI_INTERFACE
-       #if USE_WORKITEM
-       ODM_ScheduleWorkItem(&pDM_SWAT_Table->SwAntennaSwitchWorkitem);
-       #else
-       odm_SwAntDivChkAntSwitch(&pHalData->DM_OutSrc, SWAW_STEP_DETERMINE);
-       #endif
-       #else
-       ODM_ScheduleWorkItem(&pDM_SWAT_Table->SwAntennaSwitchWorkitem);
-       #endif
-       
-}
-VOID
-odm_SwAntDivChkAntSwitchWorkitemCallback(
-    IN PVOID            pContext
-    )
-{
-
-       PADAPTER                pAdapter = (PADAPTER)pContext;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
-
-       odm_SwAntDivChkAntSwitch(&pHalData->DM_OutSrc, SWAW_STEP_DETERMINE);
-
-}
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-VOID odm_SwAntDivChkAntSwitchCallback(void *FunctionContext)
-{
-       PDM_ODM_T       pDM_Odm= (PDM_ODM_T)FunctionContext;
-       PADAPTER        padapter = pDM_Odm->Adapter;
-       if(padapter->net_closed == _TRUE)
-           return;
-       odm_SwAntDivChkAntSwitch(pDM_Odm, SWAW_STEP_DETERMINE); 
-}
-#elif (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-VOID odm_SwAntDivChkAntSwitchCallback(void *FunctionContext)
-{
-       PDM_ODM_T       pDM_Odm= (PDM_ODM_T)FunctionContext;
-       odm_SwAntDivChkAntSwitch(pDM_Odm, SWAW_STEP_DETERMINE);
-}
-#endif
-
-#else //#if(defined(CONFIG_SW_ANTENNA_DIVERSITY))
-
-VOID odm_SwAntDivInit( IN              PDM_ODM_T               pDM_Odm ) {}
-VOID ODM_SwAntDivChkPerPktRssi(
-       IN PDM_ODM_T    pDM_Odm,
-       IN u1Byte               StationID,
-       IN PODM_PHY_INFO_T pPhyInfo
-       ) {}
-VOID odm_SwAntDivChkAntSwitch(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              u1Byte                  Step
-       ) {}
-VOID ODM_SwAntDivResetBeforeLink(      IN              PDM_ODM_T               pDM_Odm ){}
-VOID ODM_SwAntDivRestAfterLink(        IN              PDM_ODM_T               pDM_Odm ){}
-VOID odm_SwAntDetectInit(      IN              PDM_ODM_T               pDM_Odm){}
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-VOID odm_SwAntDivChkAntSwitchCallback( PRT_TIMER               pTimer){}
-VOID odm_SwAntDivChkAntSwitchWorkitemCallback(    IN PVOID            pContext    ){}
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-VOID odm_SwAntDivChkAntSwitchCallback(void *FunctionContext){}
-#elif (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-VOID odm_SwAntDivChkAntSwitchCallback(void *FunctionContext){}
-#endif
-
-#endif //#if(defined(CONFIG_SW_ANTENNA_DIVERSITY))
-
-
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-BOOLEAN
-ODM_SwAntDivCheckBeforeLink(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-
-#if (RT_MEM_SIZE_LEVEL != RT_MEM_SIZE_MINIMUM)
-
-       PADAPTER                Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE*  pHalData = GET_HAL_DATA(Adapter);
-       PMGNT_INFO              pMgntInfo = &Adapter->MgntInfo;
-       pSWAT_T                 pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;
-       s1Byte                  Score = 0;
-       PRT_WLAN_BSS    pTmpBssDesc, pTestBssDesc;
-       s4Byte                  power_diff = 0, power_target = 10;
-       u1Byte                  index, counter = 0;
-       static u1Byte           ScanChannel;
-       u8Byte                  tStamp_diff = 0;                
-
-
-       if (pDM_Odm->Adapter == NULL)  //For BSOD when plug/unplug fast.  //By YJ,120413
-       {       // The ODM structure is not initialized.
-               return FALSE;
-       }
-
-       // Retrieve antenna detection registry info, added by Roger, 2012.11.27.
-       if(!IS_ANT_DETECT_SUPPORT_RSSI(Adapter))
-                       return FALSE;
-
-       // Since driver is going to set BB register, it shall check if there is another thread controlling BB/RF.
-       PlatformAcquireSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
-       if(pHalData->eRFPowerState!=eRfOn || pMgntInfo->RFChangeInProgress || pMgntInfo->bMediaConnect)
-       {
-               PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
-       
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, 
-                               ("ODM_SwAntDivCheckBeforeLink(): RFChangeInProgress(%x), eRFPowerState(%x)\n", 
-                               pMgntInfo->RFChangeInProgress, pHalData->eRFPowerState));
-       
-               pDM_SWAT_Table->SWAS_NoLink_State = 0;
-               
-               return FALSE;
-       }
-       else
-       {
-               PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
-       }
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("pDM_SWAT_Table->SWAS_NoLink_State = %d\n", pDM_SWAT_Table->SWAS_NoLink_State));
-       //1 Run AntDiv mechanism "Before Link" part.
-       if(pDM_SWAT_Table->SWAS_NoLink_State == 0)
-       {
-               //1 Prepare to do Scan again to check current antenna state.
-
-               // Set check state to next step.
-               pDM_SWAT_Table->SWAS_NoLink_State = 1;
-       
-               // Copy Current Scan list.
-               pMgntInfo->tmpNumBssDesc = pMgntInfo->NumBssDesc;
-               PlatformMoveMemory((PVOID)Adapter->MgntInfo.tmpbssDesc, (PVOID)pMgntInfo->bssDesc, sizeof(RT_WLAN_BSS)*MAX_BSS_DESC);
-               
-               // Go back to scan function again.
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink: Scan one more time\n"));
-               pMgntInfo->ScanStep=0;
-               pMgntInfo->bScanAntDetect = TRUE;
-               ScanChannel = odm_SwAntDivSelectScanChnl(Adapter);
-
-               
-               if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8821))
-               {
-                       if(pDM_FatTable->RxIdleAnt == MAIN_ANT)
-                               ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);
-                       else
-                               ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);
-                       if(ScanChannel == 0)
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, 
-                                       ("ODM_SwAntDivCheckBeforeLink(): No AP List Avaiable, Using Ant(%s)\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"AUX_ANT":"MAIN_ANT"));
-
-                               if(IS_5G_WIRELESS_MODE(pMgntInfo->dot11CurrentWirelessMode))
-                               {
-                                       pDM_SWAT_Table->Ant5G = pDM_FatTable->RxIdleAnt;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_SWAT_Table->Ant5G=%s\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
-                               }
-                               else
-                               {
-                                       pDM_SWAT_Table->Ant2G = pDM_FatTable->RxIdleAnt;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_SWAT_Table->Ant2G=%s\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
-                               }
-                               return FALSE;
-                       }
-
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, 
-                               ("ODM_SwAntDivCheckBeforeLink: Change to %s for testing.\n", ((pDM_FatTable->RxIdleAnt == MAIN_ANT)?"MAIN_ANT":"AUX_ANT")));
-               }
-               else if(pDM_Odm->SupportICType & (ODM_RTL8192C|ODM_RTL8723B))
-               {
-                       // Switch Antenna to another one.
-                       pDM_SWAT_Table->PreAntenna = pDM_SWAT_Table->CurAntenna;
-                       pDM_SWAT_Table->CurAntenna = (pDM_SWAT_Table->CurAntenna==MAIN_ANT)?AUX_ANT:MAIN_ANT;
-                       
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, 
-                               ("ODM_SwAntDivCheckBeforeLink: Change to Ant(%s) for testing.\n", (pDM_SWAT_Table->CurAntenna==MAIN_ANT)?"MAIN":"AUX"));
-                       //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, DM_SWAT_Table.CurAntenna);
-                       if(pDM_Odm->SupportICType == ODM_RTL8192C)
-                       {
-                               pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 = ((pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 & 0xfffffcff) | (pDM_SWAT_Table->CurAntenna<<8));
-                               ODM_SetBBReg(pDM_Odm,  rFPGA0_XA_RFInterfaceOE, bMaskDWord, pDM_SWAT_Table->SWAS_NoLink_BK_Reg860);
-                       }
-                       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-                       {
-                               pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c = ((pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c & 0xfffffffc) | (pDM_SWAT_Table->CurAntenna));
-                               ODM_SetBBReg(pDM_Odm,  rfe_ctrl_anta_src, 0xff, 0x77);
-                               ODM_SetBBReg(pDM_Odm,  rDPDT_control, bMaskDWord, pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c);
-                       }
-               }
-               
-               odm_SwAntDivConstructScanChnl(Adapter, ScanChannel);
-               PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 5);
-
-               return TRUE;
-       }
-       else
-       {
-               //1 ScanComple() is called after antenna swiched.
-               //1 Check scan result and determine which antenna is going
-               //1 to be used.
-
-               for(index = 0; index < pMgntInfo->tmpNumBssDesc; index++)
-               {
-                       pTmpBssDesc = &(pMgntInfo->tmpbssDesc[index]); // Antenna 1
-                       pTestBssDesc = &(pMgntInfo->bssDesc[index]); // Antenna 2
-
-                       if(PlatformCompareMemory(pTestBssDesc->bdBssIdBuf, pTmpBssDesc->bdBssIdBuf, 6)!=0)
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink(): ERROR!! This shall not happen.\n"));
-                               continue;
-                       }
-
-                       if(pDM_Odm->SupportICType != ODM_RTL8723B)
-                       {
-                               if(pTmpBssDesc->ChannelNumber == ScanChannel)
-                               {
-                       if(pTmpBssDesc->RecvSignalPower > pTestBssDesc->RecvSignalPower)
-                       {
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink: Compare scan entry: Score++\n"));
-                                               RT_PRINT_STR(COMP_SCAN, DBG_WARNING, "GetScanInfo(): new Bss SSID:", pTmpBssDesc->bdSsIdBuf, pTmpBssDesc->bdSsIdLen);
-                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("at ch %d, Original: %d, Test: %d\n\n", pTmpBssDesc->ChannelNumber, pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
-                       
-                               Score++;
-                               PlatformMoveMemory(pTestBssDesc, pTmpBssDesc, sizeof(RT_WLAN_BSS));
-                       }
-                       else if(pTmpBssDesc->RecvSignalPower < pTestBssDesc->RecvSignalPower)
-                       {
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink: Compare scan entry: Score--\n"));
-                                               RT_PRINT_STR(COMP_SCAN, DBG_WARNING, "GetScanInfo(): new Bss SSID:", pTmpBssDesc->bdSsIdBuf, pTmpBssDesc->bdSsIdLen);
-                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("at ch %d, Original: %d, Test: %d\n\n", pTmpBssDesc->ChannelNumber, pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
-                               Score--;
-                       }
-                                       else
-                                       {
-                                               if(pTestBssDesc->bdTstamp - pTmpBssDesc->bdTstamp < 5000)
-                                               {
-                                                       RT_PRINT_STR(COMP_SCAN, DBG_WARNING, "GetScanInfo(): new Bss SSID:", pTmpBssDesc->bdSsIdBuf, pTmpBssDesc->bdSsIdLen);
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("at ch %d, Original: %d, Test: %d\n", pTmpBssDesc->ChannelNumber, pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("The 2nd Antenna didn't get this AP\n\n"));
-                                               }
-                                       }
-                               }
-                       }
-                       else
-                       { 
-                               if(pTmpBssDesc->ChannelNumber == ScanChannel)
-                               {
-                                       if(pTmpBssDesc->RecvSignalPower > pTestBssDesc->RecvSignalPower)
-                                       {
-                                               counter++;
-                                               power_diff = power_diff + (pTmpBssDesc->RecvSignalPower - pTestBssDesc->RecvSignalPower); 
-                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Original: %d, Test: %d\n", pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
-                                               ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("SSID:"), pTmpBssDesc->bdSsIdBuf);
-                                               ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("BSSID:"), pTmpBssDesc->bdBssIdBuf);
-                                               PlatformMoveMemory(pTestBssDesc, pTmpBssDesc, sizeof(RT_WLAN_BSS));
-                                       }
-                                       else if(pTestBssDesc->RecvSignalPower > pTmpBssDesc->RecvSignalPower)
-                                       {
-                                               counter++;
-                                               power_diff = power_diff + (pTestBssDesc->RecvSignalPower - pTmpBssDesc->RecvSignalPower);
-                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Original: %d, Test: %d\n", pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
-                                               ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("SSID:"), pTmpBssDesc->bdSsIdBuf);
-                                               ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("BSSID:"), pTmpBssDesc->bdBssIdBuf)
-                                       }
-                                       else if(pTestBssDesc->bdTstamp > pTmpBssDesc->bdTstamp)
-                                       {
-                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("time_diff: %lld\n", (pTestBssDesc->bdTstamp-pTmpBssDesc->bdTstamp)/1000));
-                                               if(pTestBssDesc->bdTstamp - pTmpBssDesc->bdTstamp > 5000)
-                                               {
-                                                       counter++;
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Original: %d, Test: %d\n", pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
-                                                       ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("SSID:"), pTmpBssDesc->bdSsIdBuf);
-                                                       ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("BSSID:"), pTmpBssDesc->bdBssIdBuf)
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               { 
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("counter: %d power_diff: %d\n", counter, power_diff));
-
-                       if(counter != 0)
-                               power_diff = power_diff / counter;
-
-                       if(power_diff <= power_target && counter != 0) 
-                               Score++;
-               }
-
-               if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8821))
-               {
-                       if(pMgntInfo->NumBssDesc!=0 && Score<0)
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
-                                                       ("ODM_SwAntDivCheckBeforeLink(): Using Ant(%s)\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
-                       }
-                       else
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, 
-                                               ("ODM_SwAntDivCheckBeforeLink(): Remain Ant(%s)\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"AUX_ANT":"MAIN_ANT"));
-
-                               if(pDM_FatTable->RxIdleAnt == MAIN_ANT)
-                                       ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);
-                               else
-                                       ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);
-                       }
-                       
-                       if(IS_5G_WIRELESS_MODE(pMgntInfo->dot11CurrentWirelessMode))
-                       {
-                               pDM_SWAT_Table->Ant5G = pDM_FatTable->RxIdleAnt;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_SWAT_Table->Ant5G=%s\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
-                       }
-                       else
-                       {
-                               pDM_SWAT_Table->Ant2G = pDM_FatTable->RxIdleAnt;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_SWAT_Table->Ant2G=%s\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
-                       }
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               {
-                       pDM_SWAT_Table->CurAntenna = pDM_SWAT_Table->PreAntenna;
-                       pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c = ((pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c & 0xfffffffc) | (pDM_SWAT_Table->CurAntenna));
-                       ODM_SetBBReg(pDM_Odm,  rfe_ctrl_anta_src, 0xff, 0x77);
-                       ODM_SetBBReg(pDM_Odm,  rDPDT_control,bMaskDWord, pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c);
-
-                       if(counter != 0)
-                       {
-                               if(pMgntInfo->NumBssDesc != 0 && Score > 0)
-                               {
-                                       if(pDM_Odm->DM_SWAT_Table.ANTB_ON == FALSE)
-                                       {
-                                               pDM_Odm->DM_SWAT_Table.ANTA_ON = TRUE;
-                                               pDM_Odm->DM_SWAT_Table.ANTB_ON = TRUE;
-                                       }
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SwAntDivCheckBeforeLink(): Dual antenna\n"));
-                               }
-                               else
-                               {
-                                       if(pDM_Odm->DM_SWAT_Table.ANTB_ON == TRUE)
-                                       {
-                                               pDM_Odm->DM_SWAT_Table.ANTA_ON = TRUE;
-                                               pDM_Odm->DM_SWAT_Table.ANTB_ON = FALSE;
-                                               BT_SetBtCoexAntNum(Adapter, BT_COEX_ANT_TYPE_DETECTED, 1);
-                                       }
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink(): Single antenna\n"));
-                               }
-                       }
-                       else
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SwAntDivCheckBeforeLink(): Igone result\n"));
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8192C)
-               {
-                       if(pMgntInfo->NumBssDesc!=0 && Score<=0)
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
-                                       ("ODM_SwAntDivCheckBeforeLink(): Using Ant(%s)\n", (pDM_SWAT_Table->CurAntenna==MAIN_ANT)?"MAIN":"AUX"));
-
-                               pDM_SWAT_Table->PreAntenna = pDM_SWAT_Table->CurAntenna;
-                       }
-                       else
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, 
-                                       ("ODM_SwAntDivCheckBeforeLink(): Remain Ant(%s)\n", (pDM_SWAT_Table->CurAntenna==MAIN_ANT)?"AUX":"MAIN"));
-
-                               pDM_SWAT_Table->CurAntenna = pDM_SWAT_Table->PreAntenna;
-
-                               //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, DM_SWAT_Table.CurAntenna);
-                               pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 = ((pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 & 0xfffffcff) | (pDM_SWAT_Table->CurAntenna<<8));
-                               PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, bMaskDWord, pDM_SWAT_Table->SWAS_NoLink_BK_Reg860);
-                       }
-               }
-               
-               // Check state reset to default and wait for next time.
-               pDM_SWAT_Table->SWAS_NoLink_State = 0;
-               pMgntInfo->bScanAntDetect = FALSE;
-
-               return FALSE;
-       }
-
-#else
-               return  FALSE;
-#endif
-
-return FALSE;
-}
-
-#endif //#if(DM_ODM_SUPPORT_TYPE==ODM_WIN)
-
-
-//3============================================================
-//3 SW Antenna Diversity
-//3============================================================
-
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-VOID
-odm_InitHybridAntDiv_88C_92D(
-       IN PDM_ODM_T    pDM_Odm 
-       )
-{
-
-#if((DM_ODM_SUPPORT_TYPE==ODM_AP)||(DM_ODM_SUPPORT_TYPE==ODM_ADSL))
-       struct rtl8192cd_priv *priv=pDM_Odm->priv;
-#endif
-       SWAT_T                  *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       u1Byte                  bTxPathSel=0;           //0:Path-A   1:Path-B
-       u1Byte                  i;
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("odm_InitHybridAntDiv==============>\n"));
-
-       //whether to do antenna diversity or not
-#if(DM_ODM_SUPPORT_TYPE==ODM_AP)
-       if(priv==NULL)  return;
-       if(!priv->pshare->rf_ft_var.antHw_enable)
-               return; 
-       
-       #ifdef SW_ANT_SWITCH
-       priv->pshare->rf_ft_var.antSw_enable =0;
-       #endif
-#endif
-
-       if((pDM_Odm->SupportICType != ODM_RTL8192C) && (pDM_Odm->SupportICType != ODM_RTL8192D))
-               return;
-
-
-       bTxPathSel=(pDM_Odm->RFType==ODM_1T1R)?FALSE:TRUE;
-
-       ODM_SetBBReg(pDM_Odm,ODM_REG_BB_PWR_SAV1_11N, BIT23, 0); //No update ANTSEL during GNT_BT=1
-       ODM_SetBBReg(pDM_Odm,ODM_REG_TX_ANT_CTRL_11N, BIT21, 1); //TX atenna selection from tx_info
-       ODM_SetBBReg(pDM_Odm,ODM_REG_ANTSEL_PIN_11N, BIT23, 1); //enable LED[1:0] pin as ANTSEL
-       ODM_SetBBReg(pDM_Odm,ODM_REG_ANTSEL_CTRL_11N, BIT8|BIT9, 0x01); // 0x01: left antenna, 0x02: right antenna
-       // check HW setting: ANTSEL pin connection
-       #if(DM_ODM_SUPPORT_TYPE==ODM_AP)
-       ODM_Write2Byte(pDM_Odm,ODM_REG_RF_PIN_11N, (ODM_Read2Byte(pDM_Odm,0x804)&0xf0ff )| BIT(8) );    // b11-b8=0001,update RFPin setting
-       #endif
-       
-       // only AP support different path selection temperarly
-       if(!bTxPathSel){                 //PATH-A
-               ODM_SetBBReg(pDM_Odm,ODM_REG_PIN_CTRL_11N, BIT8|BIT9, 0 ); // ANTSEL as HW control
-               ODM_SetBBReg(pDM_Odm,ODM_REG_ANTSEL_PATH_11N, BIT13, 1);         //select TX ANTESEL from path A
-       }
-       else    {
-               ODM_SetBBReg(pDM_Odm,ODM_REG_PIN_CTRL_11N, BIT24|BIT25, 0 ); // ANTSEL as HW control
-               ODM_SetBBReg(pDM_Odm,ODM_REG_ANTSEL_PATH_11N, BIT13, 0);                 //select ANTESEL from path B
-       }
-
-       //Set OFDM HW RX Antenna Diversity
-       ODM_SetBBReg(pDM_Odm,ODM_REG_ANTDIV_PARA1_11N, 0x7FF, 0x0c0); //Pwdb threshold=8dB
-       ODM_SetBBReg(pDM_Odm,ODM_REG_ANTDIV_PARA1_11N, BIT11, 0); //Switch to another antenna by checking pwdb threshold
-       ODM_SetBBReg(pDM_Odm,ODM_REG_ANTDIV_PARA3_11N, BIT23, 1);       // Decide final antenna by comparing 2 antennas' pwdb
-       
-       //Set CCK HW RX Antenna Diversity
-       ODM_SetBBReg(pDM_Odm,ODM_REG_CCK_ANTDIV_PARA2_11N, BIT4, 0); //Antenna diversity decision period = 32 sample
-       ODM_SetBBReg(pDM_Odm,ODM_REG_CCK_ANTDIV_PARA2_11N, 0xf, 0xf); //Threshold for antenna diversity. Check another antenna power if input power < ANT_lim*4
-       ODM_SetBBReg(pDM_Odm,ODM_REG_CCK_ANTDIV_PARA3_11N, BIT13, 1); //polarity ana_A=1 and ana_B=0
-       ODM_SetBBReg(pDM_Odm,ODM_REG_CCK_ANTDIV_PARA4_11N, 0x1f, 0x8); //default antenna power = inpwr*(0.5 + r_ant_step/16)
-
-
-       //Enable HW Antenna Diversity
-       if(!bTxPathSel)                 //PATH-A
-               ODM_SetBBReg(pDM_Odm,ODM_REG_IGI_A_11N, BIT7,1);        // Enable Hardware antenna switch
-       else
-               ODM_SetBBReg(pDM_Odm,ODM_REG_IGI_B_11N, BIT7,1);        // Enable Hardware antenna switch
-       ODM_SetBBReg(pDM_Odm,ODM_REG_CCK_ANTDIV_PARA1_11N, BIT15, 1);//Enable antenna diversity
-
-       pDM_SWAT_Table->CurAntenna=0;                   //choose left antenna as default antenna
-       pDM_SWAT_Table->PreAntenna=0;
-       for(i=0; i<ASSOCIATE_ENTRY_NUM ; i++)
-       {
-               pDM_SWAT_Table->CCK_Ant1_Cnt[i] = 0;
-               pDM_SWAT_Table->CCK_Ant2_Cnt[i] = 0;
-               pDM_SWAT_Table->OFDM_Ant1_Cnt[i] = 0;
-               pDM_SWAT_Table->OFDM_Ant2_Cnt[i] = 0;
-               pDM_SWAT_Table->RSSI_Ant1_Sum[i] = 0;
-               pDM_SWAT_Table->RSSI_Ant2_Sum[i] = 0;
-       }
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("<==============odm_InitHybridAntDiv\n"));
-}
-
-
-VOID
-odm_InitHybridAntDiv(
-       IN PDM_ODM_T    pDM_Odm 
-       )
-{
-       if(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("Return: Not Support HW AntDiv\n"));
-               return;
-       }
-       
-       if(pDM_Odm->SupportICType & (ODM_RTL8192C | ODM_RTL8192D))
-       {
-#if ((RTL8192C_SUPPORT == 1)||(RTL8192D_SUPPORT == 1))
-               odm_InitHybridAntDiv_88C_92D(pDM_Odm);
-#endif
-       }
-}
-
-
-BOOLEAN
-odm_StaDefAntSel(
-       IN PDM_ODM_T    pDM_Odm,
-       IN u4Byte               OFDM_Ant1_Cnt,
-       IN u4Byte               OFDM_Ant2_Cnt,
-       IN u4Byte               CCK_Ant1_Cnt,
-       IN u4Byte               CCK_Ant2_Cnt,
-       OUT u1Byte              *pDefAnt 
-
-       )
-{
-#if 1
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("odm_StaDefAntSelect==============>\n"));
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("OFDM_Ant1_Cnt:%d, OFDM_Ant2_Cnt:%d\n",OFDM_Ant1_Cnt,OFDM_Ant2_Cnt));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("CCK_Ant1_Cnt:%d, CCK_Ant2_Cnt:%d\n",CCK_Ant1_Cnt,CCK_Ant2_Cnt));
-
-       
-       if(((OFDM_Ant1_Cnt+OFDM_Ant2_Cnt)==0)&&((CCK_Ant1_Cnt + CCK_Ant2_Cnt) <10)){
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("odm_StaDefAntSelect Fail: No enough packet info!\n"));
-               return  FALSE;
-       }
-
-       if(OFDM_Ant1_Cnt || OFDM_Ant2_Cnt )     {
-               //if RX OFDM packet number larger than 0
-               if(OFDM_Ant1_Cnt > OFDM_Ant2_Cnt)
-                       (*pDefAnt)=1;
-               else
-                       (*pDefAnt)=0;
-       }
-       // else if RX CCK packet number larger than 10
-       else if((CCK_Ant1_Cnt + CCK_Ant2_Cnt) >=10 )
-       {
-               if(CCK_Ant1_Cnt > (5*CCK_Ant2_Cnt))
-                       (*pDefAnt)=1;
-               else if(CCK_Ant2_Cnt > (5*CCK_Ant1_Cnt))
-                       (*pDefAnt)=0;
-               else if(CCK_Ant1_Cnt > CCK_Ant2_Cnt)
-                       (*pDefAnt)=0;
-               else
-                       (*pDefAnt)=1;
-
-       }
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("TxAnt = %s\n",((*pDefAnt)==1)?"Ant1":"Ant2"));
-       
-#endif
-       //u4Byte antsel = ODM_GetBBReg(pDM_Odm, 0xc88, bMaskByte0);
-       //(*pDefAnt)= (u1Byte) antsel;
-       
-
-
-       
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("<==============odm_StaDefAntSelect\n"));
-
-       return TRUE;
-
-       
-}
-
-
-VOID
-odm_SetRxIdleAnt(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      u1Byte  Ant,
-       IN   BOOLEAN   bDualPath                     
-)
-{
-       SWAT_T                  *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-
-       //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("odm_SetRxIdleAnt==============>\n"));
-
-       if(Ant != pDM_SWAT_Table->RxIdleAnt)
-       {
-       //for path-A
-       if(Ant==1) 
-                       ODM_SetBBReg(pDM_Odm,ODM_REG_RX_DEFUALT_A_11N, 0xFFFF, 0x65a9);   //right-side antenna
-       else
-                       ODM_SetBBReg(pDM_Odm,ODM_REG_RX_DEFUALT_A_11N, 0xFFFF, 0x569a);   //left-side antenna
-
-       //for path-B
-       if(bDualPath){
-               if(Ant==0) 
-                               ODM_SetBBReg(pDM_Odm,ODM_REG_RX_DEFUALT_A_11N, 0xFFFF0000, 0x65a9);   //right-side antenna
-               else 
-                               ODM_SetBBReg(pDM_Odm,ODM_REG_RX_DEFUALT_A_11N, 0xFFFF0000, 0x569a);  //left-side antenna
-               }
-       }
-               pDM_SWAT_Table->RxIdleAnt = Ant;
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("RxIdleAnt: %s  Reg858=0x%x\n",(Ant==1)?"Ant1":"Ant2",(Ant==1)?0x65a9:0x569a));
-
-       //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("<==============odm_SetRxIdleAnt\n"));
-
-       }
-               
-VOID
-ODM_AntselStatistics_88C(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              u1Byte                  MacId,
-       IN              u4Byte                  PWDBAll,
-       IN              BOOLEAN                 isCCKrate
-)
-{
-       SWAT_T                  *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-
-       if(pDM_SWAT_Table->antsel == 1)
-       {
-               if(isCCKrate)
-                       pDM_SWAT_Table->CCK_Ant1_Cnt[MacId]++;
-               else
-               {
-                       pDM_SWAT_Table->OFDM_Ant1_Cnt[MacId]++;
-                       pDM_SWAT_Table->RSSI_Ant1_Sum[MacId] += PWDBAll;
-               }
-       }
-       else
-       {
-               if(isCCKrate)
-                       pDM_SWAT_Table->CCK_Ant2_Cnt[MacId]++;
-               else
-               {
-                       pDM_SWAT_Table->OFDM_Ant2_Cnt[MacId]++;
-                       pDM_SWAT_Table->RSSI_Ant2_Sum[MacId] += PWDBAll;
-               }
-       }
-
-}
-
-
-
-
-#if(DM_ODM_SUPPORT_TYPE==ODM_WIN)
-VOID
-ODM_SetTxAntByTxInfo_88C_92D(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              pu1Byte                 pDesc,
-       IN              u1Byte                  macId   
-)
-{
-       SWAT_T                  *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       u1Byte                  antsel;
-
-       if(!(pDM_Odm->SupportAbility&ODM_BB_ANT_DIV)) 
-               return;
-
-       if(pDM_SWAT_Table->RxIdleAnt == 1)
-               antsel=(pDM_SWAT_Table->TxAnt[macId] == 1)?0:1;
-       else
-               antsel=(pDM_SWAT_Table->TxAnt[macId] == 1)?1:0;
-       
-       SET_TX_DESC_ANTSEL_A_92C(pDesc, antsel);
-       //SET_TX_DESC_ANTSEL_B_92C(pDesc, antsel);
-       //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("SET_TX_DESC_ANTSEL_A_92C=%d\n", pDM_SWAT_Table->TxAnt[macId]));
-}
-#elif(DM_ODM_SUPPORT_TYPE==ODM_CE)
-VOID
-ODM_SetTxAntByTxInfo_88C_92D(
-       IN              PDM_ODM_T               pDM_Odm
-)
-{
-
-}
-#elif(DM_ODM_SUPPORT_TYPE==ODM_AP)
-VOID
-ODM_SetTxAntByTxInfo_88C_92D(
-       IN              PDM_ODM_T               pDM_Odm
-)
-{
-
-}
-#endif
-
-VOID
-odm_HwAntDiv_92C_92D(
-       IN      PDM_ODM_T       pDM_Odm
-)
-{
-       SWAT_T                  *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       u4Byte                  RSSI_Min=0xFF, RSSI, RSSI_Ant1, RSSI_Ant2;
-       u1Byte                  RxIdleAnt, i;
-       BOOLEAN         bRet=FALSE;
-       PSTA_INFO_T     pEntry;
-       
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP)
-       struct rtl8192cd_priv *priv=pDM_Odm->priv;
-       //if test, return
-       if(priv->pshare->rf_ft_var.CurAntenna & 0x80)
-               return; 
-#endif 
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("odm_HwAntDiv==============>\n"));
-       
-       if(!(pDM_Odm->SupportAbility&ODM_BB_ANT_DIV))                                    //if don't support antenna diveristy
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("odm_HwAntDiv: Not supported!\n"));
-               return;
-       }
-
-       if((pDM_Odm->SupportICType != ODM_RTL8192C) && (pDM_Odm->SupportICType != ODM_RTL8192D))
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("Return: IC Type is not 92C or 92D\n"));
-               return;
-       }
-       
-#if (DM_ODM_SUPPORT_TYPE&(ODM_WIN|ODM_CE))
-       if(!pDM_Odm->bLinked)
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("Return: bLinked is FALSE\n"));
-               return;
-       }
-#endif
-
-       for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)
-       {
-               pEntry = pDM_Odm->pODM_StaInfo[i];
-               if(IS_STA_VALID(pEntry))
-               {
-
-                       RSSI_Ant1 = (pDM_SWAT_Table->OFDM_Ant1_Cnt[i] == 0)?0:(pDM_SWAT_Table->RSSI_Ant1_Sum[i]/pDM_SWAT_Table->OFDM_Ant1_Cnt[i]);
-                       RSSI_Ant2 = (pDM_SWAT_Table->OFDM_Ant2_Cnt[i] == 0)?0:(pDM_SWAT_Table->RSSI_Ant2_Sum[i]/pDM_SWAT_Table->OFDM_Ant2_Cnt[i]);
-
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("RSSI_Ant1=%d,  RSSI_Ant2=%d\n", RSSI_Ant1, RSSI_Ant2));
-               
-                       if(RSSI_Ant1 ||RSSI_Ant2) 
-                       {
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP)              
-                               if(pDM_Odm->pODM_StaInfo[i]->expire_to)
-#endif
-                               {
-                                       RSSI = (RSSI_Ant1 < RSSI_Ant2) ? RSSI_Ant1 : RSSI_Ant2;
-                                       if((!RSSI) || ( RSSI < RSSI_Min) ) {
-                                               pDM_SWAT_Table->TargetSTA = i;
-                                               RSSI_Min = RSSI;
-                                       }
-                               }
-       }
-                       ///STA: found out default antenna
-                       bRet=odm_StaDefAntSel(pDM_Odm, 
-                                                pDM_SWAT_Table->OFDM_Ant1_Cnt[i], 
-                                                pDM_SWAT_Table->OFDM_Ant2_Cnt[i], 
-                                                pDM_SWAT_Table->CCK_Ant1_Cnt[i], 
-                                                pDM_SWAT_Table->CCK_Ant2_Cnt[i], 
-                                                &pDM_SWAT_Table->TxAnt[i]);
-
-                       //if Tx antenna selection: successful
-                       if(bRet){       
-                               pDM_SWAT_Table->RSSI_Ant1_Sum[i] = 0;
-                               pDM_SWAT_Table->RSSI_Ant2_Sum[i] = 0;
-                               pDM_SWAT_Table->OFDM_Ant1_Cnt[i] = 0;
-                               pDM_SWAT_Table->OFDM_Ant2_Cnt[i] = 0; 
-                               pDM_SWAT_Table->CCK_Ant1_Cnt[i] = 0; 
-                               pDM_SWAT_Table->CCK_Ant2_Cnt[i] = 0; 
-                       }
-               }
-       }
-       
-       //set RX Idle Ant
-       RxIdleAnt = pDM_SWAT_Table->TxAnt[pDM_SWAT_Table->TargetSTA];
-       odm_SetRxIdleAnt(pDM_Odm, RxIdleAnt, FALSE);
-
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP)
-#ifdef TX_SHORTCUT
-       if (!priv->pmib->dot11OperationEntry.disable_txsc) {
-               plist = phead->next;
-               while(plist != phead)   {
-                       pstat = list_entry(plist, struct stat_info, asoc_list);
-                       if(pstat->expire_to) {
-                               for (i=0; i<TX_SC_ENTRY_NUM; i++) {
-                                       struct tx_desc *pdesc= &(pstat->tx_sc_ent[i].hwdesc1);  
-                                       pdesc->Dword2 &= set_desc(~ (BIT(24)|BIT(25)));
-                                       if((pstat->CurAntenna^priv->pshare->rf_ft_var.CurAntenna)&1)
-                                               pdesc->Dword2 |= set_desc(BIT(24)|BIT(25));
-                                       pdesc= &(pstat->tx_sc_ent[i].hwdesc2);  
-                                       pdesc->Dword2 &= set_desc(~ (BIT(24)|BIT(25)));
-                                       if((pstat->CurAntenna^priv->pshare->rf_ft_var.CurAntenna)&1)
-                                               pdesc->Dword2 |= set_desc(BIT(24)|BIT(25));                                     
-                               }
-                       }               
-
-                       if (plist == plist->next)
-                               break;
-                       plist = plist->next;
-               };
-       }
-#endif 
-#endif
-       
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("<==============odm_HwAntDiv\n"));
-       
-}
-
-VOID
-odm_HwAntDiv(
-       IN      PDM_ODM_T       pDM_Odm
-)
-{      
-
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;
-
-#if(DM_ODM_SUPPORT_TYPE==ODM_WIN)
-       if(pAdapter->MgntInfo.AntennaTest)
-               return;
-#endif
-       if(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("Return: Not Support HW AntDiv\n"));
-               return;
-       }
-       
-       if(pDM_Odm->SupportICType & (ODM_RTL8192C | ODM_RTL8192D))
-       {
-#if ((RTL8192C_SUPPORT == 1)||(RTL8192D_SUPPORT == 1))
-               odm_HwAntDiv_92C_92D(pDM_Odm);
-#endif
-       }
-}
-
-
-#if(DM_ODM_SUPPORT_TYPE==ODM_AP)
-#if 0
-VOID
-odm_HwAntDiv(
-       IN      PDM_ODM_T       pDM_Odm
-)
-{
-       struct rtl8192cd_priv *priv=pDM_Odm->priv;
-       struct stat_info        *pstat, *pstat_min=NULL;
-       struct list_head        *phead, *plist;
-       int rssi_min= 0xff, i;
-       u1Byte  idleAnt=priv->pshare->rf_ft_var.CurAntenna;     
-       u1Byte  nextAnt;
-       BOOLEAN         bRet=FALSE;
-       
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("odm_HwAntDiv==============>\n"));
-
-       if((!priv->pshare->rf_ft_var.antHw_enable) ||(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)))
-               return;
-       
-       //if test, return
-       if(priv->pshare->rf_ft_var.CurAntenna & 0x80)
-               return;
-       
-       phead = &priv->asoc_list;
-       plist = phead->next;
-       ////=========================
-       //find mimum rssi sta
-       ////=========================
-       while(plist != phead)   {
-               pstat = list_entry(plist, struct stat_info, asoc_list);
-               if((pstat->expire_to) && (pstat->AntRSSI[0] || pstat->AntRSSI[1])) {
-                       int rssi = (pstat->AntRSSI[0] < pstat->AntRSSI[1]) ? pstat->AntRSSI[0] : pstat->AntRSSI[1];
-                       if((!pstat_min) || ( rssi < rssi_min) ) {
-                               pstat_min = pstat;
-                               rssi_min = rssi;
-                       }
-               }
-               ///STA: found out default antenna
-               bRet=odm_StaDefAntSel(pDM_Odm,
-                                               pstat->hwRxAntSel[1],
-                                               pstat->hwRxAntSel[0],
-                                               pstat->cckPktCount[1],
-                                               pstat->cckPktCount[0],
-                                               &nextAnt
-                                               );
-               
-               //if default antenna selection: successful
-               if(bRet){       
-                       pstat->CurAntenna = nextAnt;
-                       //update rssi
-                       for(i=0; i<2; i++) {
-                               if(pstat->cckPktCount[i]==0 && pstat->hwRxAntSel[i]==0)
-                                       pstat->AntRSSI[i] = 0;
-                       }
-                       if(pstat->AntRSSI[idleAnt]==0)
-                               pstat->AntRSSI[idleAnt] = pstat->AntRSSI[idleAnt^1];
-                       // reset variables
-                       pstat->hwRxAntSel[1] = pstat->hwRxAntSel[0] =0;
-                       pstat->cckPktCount[1]= pstat->cckPktCount[0] =0;
-               }
-
-               if (plist == plist->next)
-                       break;
-               plist = plist->next;
-               
-       };
-       ////=========================
-       //Choose  RX Idle antenna according to minmum rssi
-       ////=========================
-       if(pstat_min)   {
-               if(priv->pshare->rf_ft_var.CurAntenna!=pstat_min->CurAntenna)
-                       odm_SetRxIdleAnt(pDM_Odm,pstat_min->CurAntenna,TRUE);
-               priv->pshare->rf_ft_var.CurAntenna = pstat_min->CurAntenna;
-       }
-
-
-#ifdef TX_SHORTCUT
-       if (!priv->pmib->dot11OperationEntry.disable_txsc) {
-               plist = phead->next;
-               while(plist != phead)   {
-                       pstat = list_entry(plist, struct stat_info, asoc_list);
-                       if(pstat->expire_to) {
-                               for (i=0; i<TX_SC_ENTRY_NUM; i++) {
-                                       struct tx_desc *pdesc= &(pstat->tx_sc_ent[i].hwdesc1);  
-                                       pdesc->Dword2 &= set_desc(~ (BIT(24)|BIT(25)));
-                                       if((pstat->CurAntenna^priv->pshare->rf_ft_var.CurAntenna)&1)
-                                               pdesc->Dword2 |= set_desc(BIT(24)|BIT(25));
-                                       pdesc= &(pstat->tx_sc_ent[i].hwdesc2);  
-                                       pdesc->Dword2 &= set_desc(~ (BIT(24)|BIT(25)));
-                                       if((pstat->CurAntenna^priv->pshare->rf_ft_var.CurAntenna)&1)
-                                               pdesc->Dword2 |= set_desc(BIT(24)|BIT(25));                                     
-                               }
-                       }               
-
-                       if (plist == plist->next)
-                               break;
-                       plist = plist->next;
-               };
-       }
-#endif 
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,"<==============odm_HwAntDiv\n");
-}
-#endif
-
-u1Byte
-ODM_Diversity_AntennaSelect(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      u1Byte  *data
-)
-{
-       struct rtl8192cd_priv *priv=pDM_Odm->priv;
-
-       int ant = _atoi(data, 16);
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("ODM_Diversity_AntennaSelect==============>\n"));
-
-       #ifdef PCIE_POWER_SAVING
-       PCIeWakeUp(priv, POWER_DOWN_T0);
-       #endif
-
-       if (ant==AUX_ANT || ant==MAIN_ANT) 
-       {
-               if ( !priv->pshare->rf_ft_var.antSw_select) {
-                       ODM_Write4Byte(pDM_Odm,0x870, ODM_Read4Byte(pDM_Odm,0x870) | BIT(8)| BIT(9) );  //  ANTSEL A as SW control
-                       ODM_Write1Byte(pDM_Odm,0xc50, ODM_Read1Byte(pDM_Odm,0xc50) & (~ BIT(7)));       // rx OFDM SW control
-                       PHY_SetBBReg(priv, 0x860, 0x300, ant);
-               } else {
-                       ODM_Write4Byte(pDM_Odm,0x870, ODM_Read4Byte(pDM_Odm,0x870) | BIT(24)| BIT(25) ); // ANTSEL B as HW control
-                       PHY_SetBBReg(priv, 0x864, 0x300, ant);
-                       ODM_Write1Byte(pDM_Odm,0xc58, ODM_Read1Byte(pDM_Odm,0xc58) & (~ BIT(7)));               // rx OFDM SW control
-               }
-
-               ODM_Write1Byte(pDM_Odm,0xa01, ODM_Read1Byte(pDM_Odm,0xa01) & (~ BIT(7)));       // rx CCK SW control
-               ODM_Write4Byte(pDM_Odm,0x80c, ODM_Read4Byte(pDM_Odm,0x80c) & (~ BIT(21))); // select ant by tx desc
-               ODM_Write4Byte(pDM_Odm,0x858, 0x569a569a);
-
-               priv->pshare->rf_ft_var.antHw_enable = 0;
-               priv->pshare->rf_ft_var.CurAntenna  = (ant%2);
-
-               #ifdef SW_ANT_SWITCH
-               priv->pshare->rf_ft_var.antSw_enable = 0;
-               priv->pshare->DM_SWAT_Table.CurAntenna = ant;
-               priv->pshare->RSSI_test =0;
-               #endif
-       }
-       else if(ant==0){
-
-               if ( !priv->pshare->rf_ft_var.antSw_select)  {
-                       ODM_Write4Byte(pDM_Odm,0x870, ODM_Read4Byte(pDM_Odm,0x870) & ~(BIT(8)| BIT(9)) );
-                       ODM_Write1Byte(pDM_Odm,0xc50, ODM_Read1Byte(pDM_Odm,0xc50) | BIT(7));   // OFDM HW control
-               } else {
-                       ODM_Write4Byte(pDM_Odm,0x870, ODM_Read4Byte(pDM_Odm,0x870) & ~(BIT(24)| BIT(25)) );
-                       ODM_Write1Byte(pDM_Odm,0xc58, ODM_Read1Byte(pDM_Odm,0xc58) | BIT(7));   // OFDM HW control
-               }
-
-               ODM_Write1Byte(pDM_Odm,0xa01, ODM_Read1Byte(pDM_Odm,0xa01) | BIT(7));   // CCK HW control
-               ODM_Write4Byte(pDM_Odm,0x80c, ODM_Read4Byte(pDM_Odm,0x80c) | BIT(21) ); // by tx desc
-               priv->pshare->rf_ft_var.CurAntenna = 0;
-               ODM_Write4Byte(pDM_Odm,0x858, 0x569a569a);
-               priv->pshare->rf_ft_var.antHw_enable = 1;
-#ifdef SW_ANT_SWITCH
-               priv->pshare->rf_ft_var.antSw_enable = 0;
-               priv->pshare->RSSI_test =0;
-#endif
-       }
-#ifdef SW_ANT_SWITCH
-       else if(ant==3) {
-               if(!priv->pshare->rf_ft_var.antSw_enable) {
-                       
-                       dm_SW_AntennaSwitchInit(priv);
-                       ODM_Write4Byte(pDM_Odm,0x858, 0x569a569a);
-                       priv->pshare->lastTxOkCnt = priv->net_stats.tx_bytes;
-                       priv->pshare->lastRxOkCnt = priv->net_stats.rx_bytes;
-               }
-               if ( !priv->pshare->rf_ft_var.antSw_select)
-                       ODM_Write1Byte(pDM_Odm,0xc50, ODM_Read1Byte(pDM_Odm,0xc50) & (~ BIT(7)));       // rx OFDM SW control
-               else
-                       ODM_Write1Byte(pDM_Odm,0xc58, ODM_Read1Byte(pDM_Odm,0xc58) & (~ BIT(7)));       // rx OFDM SW control
-
-               ODM_Write1Byte(pDM_Odm,0xa01, ODM_Read1Byte(pDM_Odm,0xa01) & (~ BIT(7)));               // rx CCK SW control
-               ODM_Write4Byte(pDM_Odm,0x80c, ODM_Read4Byte(pDM_Odm,0x80c) & (~ BIT(21)));      // select ant by tx desc
-               priv->pshare->rf_ft_var.antHw_enable = 0;
-               priv->pshare->rf_ft_var.antSw_enable = 1;
-
-       }
-#endif
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("<==============ODM_Diversity_AntennaSelect\n"));
-
-       return 1;
-}
-#endif
-
-#else //#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-
-VOID odm_InitHybridAntDiv(     IN PDM_ODM_T    pDM_Odm         ){}
-VOID odm_HwAntDiv(     IN      PDM_ODM_T       pDM_Odm){}
-#if(DM_ODM_SUPPORT_TYPE==ODM_WIN)
-VOID ODM_SetTxAntByTxInfo_88C_92D(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              pu1Byte                 pDesc,
-       IN              u1Byte                  macId   
-){}
-#elif(DM_ODM_SUPPORT_TYPE==ODM_CE)
-VOID ODM_SetTxAntByTxInfo_88C_92D(     IN              PDM_ODM_T               pDM_Odm){ }
-#elif(DM_ODM_SUPPORT_TYPE==ODM_AP)
-VOID ODM_SetTxAntByTxInfo_88C_92D(     IN              PDM_ODM_T               pDM_Odm){ }
-#endif
-
-#endif //#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-
-
-
-//============================================================
-//EDCA Turbo
-//============================================================
-
-//Remove Edca by Yuchen
-
-
-#if( DM_ODM_SUPPORT_TYPE == ODM_WIN) 
-//
-// 2011/07/26 MH Add an API for testing IQK fail case.
-//
-BOOLEAN
-ODM_CheckPowerStatus(
-       IN      PADAPTER                Adapter)
-{
-
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
-       PDM_ODM_T                       pDM_Odm = &pHalData->DM_OutSrc;
-       RT_RF_POWER_STATE       rtState;
-       PMGNT_INFO                      pMgntInfo       = &(Adapter->MgntInfo);
-
-       // 2011/07/27 MH We are not testing ready~~!! We may fail to get correct value when init sequence.
-       if (pMgntInfo->init_adpt_in_progress == TRUE)
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ODM_CheckPowerStatus Return TRUE, due to initadapter"));
-               return  TRUE;
-       }
-       
-       //
-       //      2011/07/19 MH We can not execute tx pwoer tracking/ LLC calibrate or IQK.
-       //
-       Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState));        
-       if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep || rtState == eRfOff)
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ODM_CheckPowerStatus Return FALSE, due to %d/%d/%d\n", 
-               Adapter->bDriverStopped, Adapter->bDriverIsGoingToPnpSetPowerSleep, rtState));
-               return  FALSE;
-       }
-       return  TRUE;
-}
-#endif
-
-// need to ODM CE Platform
-//move to here for ANT detection mechanism using
-
-#if ((DM_ODM_SUPPORT_TYPE == ODM_WIN)||(DM_ODM_SUPPORT_TYPE == ODM_CE))
-u4Byte
-GetPSDData(
-       IN PDM_ODM_T    pDM_Odm,
-       unsigned int    point,
-       u1Byte initial_gain_psd)
-{
-       //unsigned int  val, rfval;
-       //int   psd_report;
-       u4Byte  psd_report;
-       
-       //HAL_DATA_TYPE         *pHalData = GET_HAL_DATA(Adapter);
-       //Debug Message
-       //val = PHY_QueryBBReg(Adapter,0x908, bMaskDWord);
-       //DbgPrint("Reg908 = 0x%x\n",val);
-       //val = PHY_QueryBBReg(Adapter,0xDF4, bMaskDWord);
-       //rfval = PHY_QueryRFReg(Adapter, ODM_RF_PATH_A, 0x00, bRFRegOffsetMask);
-       //DbgPrint("RegDF4 = 0x%x, RFReg00 = 0x%x\n",val, rfval);
-       //DbgPrint("PHYTXON = %x, OFDMCCA_PP = %x, CCKCCA_PP = %x, RFReg00 = %x\n",
-               //(val&BIT25)>>25, (val&BIT14)>>14, (val&BIT15)>>15, rfval);
-
-       //Set DCO frequency index, offset=(40MHz/SamplePts)*point
-       ODM_SetBBReg(pDM_Odm, 0x808, 0x3FF, point);
-
-       //Start PSD calculation, Reg808[22]=0->1
-       ODM_SetBBReg(pDM_Odm, 0x808, BIT22, 1);
-       //Need to wait for HW PSD report
-       ODM_StallExecution(1000);
-       ODM_SetBBReg(pDM_Odm, 0x808, BIT22, 0);
-       //Read PSD report, Reg8B4[15:0]
-       psd_report = ODM_GetBBReg(pDM_Odm,0x8B4, bMaskDWord) & 0x0000FFFF;
-       
-#if 1//(DEV_BUS_TYPE == RT_PCI_INTERFACE) && ( (RT_PLATFORM == PLATFORM_LINUX) || (RT_PLATFORM == PLATFORM_MACOSX))
-       psd_report = (u4Byte) (ConvertTo_dB(psd_report))+(u4Byte)(initial_gain_psd-0x1c);
-#else
-       psd_report = (int) (20*log10((double)psd_report))+(int)(initial_gain_psd-0x1c);
-#endif
-
-       return psd_report;
-       
-}
-
-u4Byte 
-ConvertTo_dB(
-       u4Byte  Value)
-{
-       u1Byte i;
-       u1Byte j;
-       u4Byte dB;
-
-       Value = Value & 0xFFFF;
-       
-       for (i=0;i<8;i++)
-       {
-               if (Value <= dB_Invert_Table[i][11])
-               {
-                       break;
-               }
-       }
-
-       if (i >= 8)
-       {
-               return (96);    // maximum 96 dB
-       }
-
-       for (j=0;j<12;j++)
-       {
-               if (Value <= dB_Invert_Table[i][j])
-               {
-                       break;
-               }
-       }
-
-       dB = i*12 + j + 1;
-
-       return (dB);
-}
-
-#endif
-
-//
-// LukeLee: 
-// PSD function will be moved to FW in future IC, but now is only implemented in MP platform
-// So PSD function will not be incorporated to common ODM
-//
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-#define        AFH_PSD         1       //0:normal PSD scan, 1: only do 20 pts PSD
-#define        MODE_40M                0       //0:20M, 1:40M
-#define        PSD_TH2         3  
-#define        PSD_CHMIN               20   // Minimum channel number for BT AFH
-#define        SIR_STEP_SIZE   3
-#define   Smooth_Size_1        5
-#define        Smooth_TH_1     3
-#define   Smooth_Size_2        10
-#define        Smooth_TH_2     4
-#define   Smooth_Size_3        20
-#define        Smooth_TH_3     4
-#define   Smooth_Step_Size 5
-#define        Adaptive_SIR    1
-//#if(RTL8723_FPGA_VERIFICATION == 1)
-//#define      PSD_RESCAN              1
-//#else
-//#define      PSD_RESCAN              4
-//#endif
-#define        SCAN_INTERVAL   1500 //ms
-#define        SYN_Length              5    // for 92D
-       
-#define        LNA_Low_Gain_1                      0x64
-#define        LNA_Low_Gain_2                      0x5A
-#define        LNA_Low_Gain_3                      0x58
-
-#define        pw_th_10dB                                      0x0
-#define        pw_th_16dB                                      0x3
-
-#define        FA_RXHP_TH1                           5000
-#define        FA_RXHP_TH2                           1500
-#define        FA_RXHP_TH3                             800
-#define        FA_RXHP_TH4                             600
-#define        FA_RXHP_TH5                             500
-
-#define        Idle_Mode                                       0
-#define        High_TP_Mode                            1
-#define        Low_TP_Mode                             2
-
-
-VOID
-odm_PSDMonitorInit(
-       IN PDM_ODM_T    pDM_Odm)
-{
-#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)|(DEV_BUS_TYPE == RT_USB_INTERFACE)
-       //HAL_DATA_TYPE         *pHalData = GET_HAL_DATA(Adapter);
-       //PSD Monitor Setting
-       //Which path in ADC/DAC is turnned on for PSD: both I/Q
-       ODM_SetBBReg(pDM_Odm, ODM_PSDREG, BIT10|BIT11, 0x3);
-       //Ageraged number: 8
-       ODM_SetBBReg(pDM_Odm, ODM_PSDREG, BIT12|BIT13, 0x1);
-       pDM_Odm->bPSDinProcess = FALSE;
-       pDM_Odm->bUserAssignLevel = FALSE;
-       pDM_Odm->bPSDactive = FALSE;
-       //pDM_Odm->bDMInitialGainEnable=TRUE;           //change the initialization to DIGinit
-       //Set Debug Port
-       //PHY_SetBBReg(Adapter, 0x908, bMaskDWord, 0x803);
-       //PHY_SetBBReg(Adapter, 0xB34, bMaskByte0, 0x00); // pause PSD
-       //PHY_SetBBReg(Adapter, 0xB38, bMaskByte0, 10); //rescan
-       //PHY_SetBBReg(Adapter, 0xB38, bMaskByte2|bMaskByte3, 100); //interval
-
-       //PlatformSetTimer( Adapter, &pHalData->PSDTriggerTimer, 0); //ms
-#endif
-}
-
-VOID
-PatchDCTone(
-       IN      PDM_ODM_T       pDM_Odm,
-       pu4Byte         PSD_report,
-       u1Byte          initial_gain_psd
-)
-{
-       //HAL_DATA_TYPE         *pHalData = GET_HAL_DATA(Adapter);
-       //PADAPTER      pAdapter;
-       
-       u4Byte  psd_report;
-
-       //2 Switch to CH11 to patch CH9 and CH13 DC tone
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, 0x3FF, 11);
-       
-       if(pDM_Odm->SupportICType== ODM_RTL8192D)
-       {
-               if((*(pDM_Odm->pMacPhyMode) == ODM_SMSP)||(*(pDM_Odm->pMacPhyMode) == ODM_DMSP))
-               {
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, RF_CHNLBW, 0x3FF, 11);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x25, 0xfffff, 0x643BC);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x26, 0xfffff, 0xFC038);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x27, 0xfffff, 0x77C1A);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x2B, 0xfffff, 0x41289);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x2C, 0xfffff, 0x01840);
-               }
-               else
-               {
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x25, 0xfffff, 0x643BC);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x26, 0xfffff, 0xFC038);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x27, 0xfffff, 0x77C1A);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x2B, 0xfffff, 0x41289);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x2C, 0xfffff, 0x01840);
-               }
-       }
-       
-       //Ch9 DC tone patch
-       psd_report = GetPSDData(pDM_Odm, 96, initial_gain_psd);
-       PSD_report[50] = psd_report;
-       //Ch13 DC tone patch
-       psd_report = GetPSDData(pDM_Odm, 32, initial_gain_psd);
-       PSD_report[70] = psd_report;
-       
-       //2 Switch to CH3 to patch CH1 and CH5 DC tone
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, 0x3FF, 3);
-
-       
-       if(pDM_Odm->SupportICType==ODM_RTL8192D)
-       {
-               if((*(pDM_Odm->pMacPhyMode) == ODM_SMSP)||(*(pDM_Odm->pMacPhyMode) == ODM_DMSP))
-               {
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, RF_CHNLBW, 0x3FF, 3);
-                       //PHY_SetRFReg(Adapter, ODM_RF_PATH_B, 0x25, 0xfffff, 0x643BC);
-                       //PHY_SetRFReg(Adapter, ODM_RF_PATH_B, 0x26, 0xfffff, 0xFC038);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x27, 0xfffff, 0x07C1A);
-                       //PHY_SetRFReg(Adapter, ODM_RF_PATH_B, 0x2B, 0xfffff, 0x61289);
-                       //PHY_SetRFReg(Adapter, ODM_RF_PATH_B, 0x2C, 0xfffff, 0x01C41);
-               }
-               else
-               {
-                       //PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x25, 0xfffff, 0x643BC);
-                       //PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x26, 0xfffff, 0xFC038);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x27, 0xfffff, 0x07C1A);
-                       //PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x2B, 0xfffff, 0x61289);
-                       //PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x2C, 0xfffff, 0x01C41);
-               }
-       }
-       
-       //Ch1 DC tone patch
-       psd_report = GetPSDData(pDM_Odm, 96, initial_gain_psd);
-       PSD_report[10] = psd_report;
-       //Ch5 DC tone patch
-       psd_report = GetPSDData(pDM_Odm, 32, initial_gain_psd);
-       PSD_report[30] = psd_report;
-
-}
-
-
-VOID
-GoodChannelDecision(
-       PDM_ODM_T       pDM_Odm,
-       pu4Byte         PSD_report,
-       pu1Byte         PSD_bitmap,
-       u1Byte          RSSI_BT,
-       pu1Byte         PSD_bitmap_memory)
-{
-       pRXHP_T                 pRX_HP_Table = &pDM_Odm->DM_RXHP_Table;
-       //s4Byte        TH1 =  SSBT-0x15;    // modify TH by Neil Chen
-       s4Byte  TH1= RSSI_BT+0x14;
-       s4Byte  TH2 = RSSI_BT+85;
-       //u2Byte    TH3;
-//     s4Byte  RegB34;
-       u1Byte  bitmap, Smooth_size[3], Smooth_TH[3];
-       //u1Byte        psd_bit;
-       u4Byte  i,n,j, byte_idx, bit_idx, good_cnt, good_cnt_smoothing, Smooth_Interval[3];
-       int             start_byte_idx,start_bit_idx,cur_byte_idx, cur_bit_idx,NOW_byte_idx ;
-       
-//     RegB34 = PHY_QueryBBReg(Adapter,0xB34, bMaskDWord)&0xFF;
-
-       if((pDM_Odm->SupportICType == ODM_RTL8192C)||(pDM_Odm->SupportICType == ODM_RTL8192D))
-       {
-            TH1 = RSSI_BT + 0x14;  
-       }
-
-       Smooth_size[0]=Smooth_Size_1;
-       Smooth_size[1]=Smooth_Size_2;
-       Smooth_size[2]=Smooth_Size_3;
-       Smooth_TH[0]=Smooth_TH_1;
-       Smooth_TH[1]=Smooth_TH_2;
-       Smooth_TH[2]=Smooth_TH_3;
-       Smooth_Interval[0]=16;
-       Smooth_Interval[1]=15;
-       Smooth_Interval[2]=13;
-       good_cnt = 0;
-       if(pDM_Odm->SupportICType==ODM_RTL8723A)
-       {
-               //2 Threshold  
-
-               if(RSSI_BT >=41)
-                       TH1 = 113;      
-               else if(RSSI_BT >=38)   // >= -15dBm
-                       TH1 = 105;                              //0x69
-               else if((RSSI_BT >=33)&(RSSI_BT <38))
-                       TH1 = 99+(RSSI_BT-33);         //0x63
-               else if((RSSI_BT >=26)&(RSSI_BT<33))
-                       TH1 = 99-(33-RSSI_BT)+2;     //0x5e
-               else if((RSSI_BT >=24)&(RSSI_BT<26))
-                       TH1 = 88-((RSSI_BT-24)*3);   //0x58
-               else if((RSSI_BT >=18)&(RSSI_BT<24))
-                       TH1 = 77+((RSSI_BT-18)*2);
-               else if((RSSI_BT >=14)&(RSSI_BT<18))
-                       TH1 = 63+((RSSI_BT-14)*2);
-               else if((RSSI_BT >=8)&(RSSI_BT<14))
-                       TH1 = 58+((RSSI_BT-8)*2);
-               else if((RSSI_BT >=3)&(RSSI_BT<8))
-                       TH1 = 52+(RSSI_BT-3);
-               else
-                       TH1 = 51;
-       }
-
-       for (i = 0; i< 10; i++)
-               PSD_bitmap[i] = 0;
-       
-
-        // Add By Gary
-       for (i=0; i<80; i++)
-               pRX_HP_Table->PSD_bitmap_RXHP[i] = 0;
-       // End
-
-
-
-       if(pDM_Odm->SupportICType==ODM_RTL8723A)
-       {
-               TH1 =TH1-SIR_STEP_SIZE;
-       }
-       while (good_cnt < PSD_CHMIN)
-       {
-               good_cnt = 0;
-               if(pDM_Odm->SupportICType==ODM_RTL8723A)
-               {
-               if(TH1 ==TH2)
-                       break;
-               if((TH1+SIR_STEP_SIZE) < TH2)
-                       TH1 += SIR_STEP_SIZE;
-               else
-                       TH1 = TH2;
-               }
-               else
-               {
-                       if(TH1==(RSSI_BT+0x1E))
-                            break;    
-                       if((TH1+2) < (RSSI_BT+0x1E))
-                               TH1+=3;
-                       else
-                               TH1 = RSSI_BT+0x1E;     
-             
-               }
-               ODM_RT_TRACE(pDM_Odm,COMP_PSD,DBG_LOUD,("PSD: decision threshold is: %d", TH1));
-                        
-               for (i = 0; i< 80; i++)
-               {
-                       if((s4Byte)(PSD_report[i]) < TH1)
-                       {
-                               byte_idx = i / 8;
-                               bit_idx = i -8*byte_idx;
-                               bitmap = PSD_bitmap[byte_idx];
-                               PSD_bitmap[byte_idx] = bitmap | (u1Byte) (1 << bit_idx);
-                       }
-               }
-
-#if DBG
-               ODM_RT_TRACE(pDM_Odm,COMP_PSD, DBG_LOUD,("PSD: before smoothing\n"));
-               for(n=0;n<10;n++)
-               {
-                       //DbgPrint("PSD_bitmap[%u]=%x\n", n, PSD_bitmap[n]);
-                       for (i = 0; i<8; i++)
-                               ODM_RT_TRACE(pDM_Odm,COMP_PSD, DBG_LOUD,("PSD_bitmap[%u] =   %d\n", 2402+n*8+i, (PSD_bitmap[n]&BIT(i))>>i));
-               }
-#endif
-       
-               //1 Start of smoothing function
-
-               for (j=0;j<3;j++)
-               {
-                       start_byte_idx=0;
-                       start_bit_idx=0;
-                       for(n=0; n<Smooth_Interval[j]; n++)
-                       {
-                               good_cnt_smoothing = 0;
-                               cur_bit_idx = start_bit_idx;
-                               cur_byte_idx = start_byte_idx;
-                               for ( i=0; i < Smooth_size[j]; i++)
-                               {
-                                       NOW_byte_idx = cur_byte_idx + (i+cur_bit_idx)/8;
-                                       if ( (PSD_bitmap[NOW_byte_idx]& BIT( (cur_bit_idx + i)%8)) != 0)
-                                               good_cnt_smoothing++;
-
-                               }
-
-                               if( good_cnt_smoothing < Smooth_TH[j] )
-                               {
-                                       cur_bit_idx = start_bit_idx;
-                                       cur_byte_idx = start_byte_idx;
-                                       for ( i=0; i< Smooth_size[j] ; i++)
-                                       {       
-                                               NOW_byte_idx = cur_byte_idx + (i+cur_bit_idx)/8;                                
-                                               PSD_bitmap[NOW_byte_idx] = PSD_bitmap[NOW_byte_idx] & (~BIT( (cur_bit_idx + i)%8));
-                                       }
-                               }
-                               start_bit_idx =  start_bit_idx + Smooth_Step_Size;
-                               while ( (start_bit_idx)  > 7 )
-                               {
-                                       start_byte_idx= start_byte_idx+start_bit_idx/8;
-                                       start_bit_idx = start_bit_idx%8;
-                               }
-                       }
-
-                       ODM_RT_TRACE(   pDM_Odm,COMP_PSD, DBG_LOUD,("PSD: after %u smoothing", j+1));
-                       for(n=0;n<10;n++)
-                       {
-                               for (i = 0; i<8; i++)
-                               {
-                                       ODM_RT_TRACE(pDM_Odm,COMP_PSD, DBG_LOUD,("PSD_bitmap[%u] =   %d\n", 2402+n*8+i, (PSD_bitmap[n]&BIT(i))>>i));
-                                       
-                                       if ( ((PSD_bitmap[n]&BIT(i))>>i) ==1)  //----- Add By Gary
-                                       {
-                                          pRX_HP_Table->PSD_bitmap_RXHP[8*n+i] = 1;
-                                       }                                                  // ------end by Gary
-                               }
-                       }
-
-               }
-
-       
-               good_cnt = 0;
-               for ( i = 0; i < 10; i++)
-               {
-                       for (n = 0; n < 8; n++)
-                               if((PSD_bitmap[i]& BIT(n)) != 0)
-                                       good_cnt++;
-               }
-               ODM_RT_TRACE(pDM_Odm,COMP_PSD, DBG_LOUD,("PSD: good channel cnt = %u",good_cnt));
-       }
-
-       //RT_TRACE(COMP_PSD, DBG_LOUD,("PSD: SSBT=%d, TH2=%d, TH1=%d",SSBT,TH2,TH1));
-       for (i = 0; i <10; i++)
-               ODM_RT_TRACE(pDM_Odm,COMP_PSD, DBG_LOUD,("PSD: PSD_bitmap[%u]=%x",i,PSD_bitmap[i]));
-/*     
-       //Update bitmap memory
-       for(i = 0; i < 80; i++)
-       {
-               byte_idx = i / 8;
-               bit_idx = i -8*byte_idx;
-               psd_bit = (PSD_bitmap[byte_idx] & BIT(bit_idx)) >> bit_idx;
-               bitmap = PSD_bitmap_memory[i]; 
-               PSD_bitmap_memory[i] = (bitmap << 1) |psd_bit;
-       }
-*/
-}
-
-
-
-VOID
-odm_PSD_Monitor(
-       PDM_ODM_T       pDM_Odm
-)
-{
-       //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-       //PDM_ODM_T             pDM_Odm = &pHalData->DM_OutSrc;
-
-       unsigned int            pts, start_point, stop_point;
-       u1Byte                  initial_gain ;
-       static u1Byte           PSD_bitmap_memory[80], init_memory = 0;
-       static u1Byte           psd_cnt=0;
-       static u4Byte           PSD_report[80], PSD_report_tmp;
-       static u8Byte           lastTxOkCnt=0, lastRxOkCnt=0;
-       u1Byte                  H2C_PSD_DATA[5]={0,0,0,0,0};
-       static u1Byte           H2C_PSD_DATA_last[5] ={0,0,0,0,0};
-       u1Byte                  idx[20]={96,99,102,106,109,112,115,118,122,125,
-                                       0,3,6,10,13,16,19,22,26,29};
-       u1Byte                  n, i, channel, BBReset,tone_idx;
-       u1Byte                  PSD_bitmap[10], SSBT=0,initial_gain_psd=0, RSSI_BT=0, initialGainUpper;
-       s4Byte                          PSD_skip_start, PSD_skip_stop;
-       u4Byte                  CurrentChannel, RXIQI, RxIdleLowPwr, wlan_channel;
-       u4Byte                  ReScan, Interval, Is40MHz;
-       u8Byte                  curTxOkCnt, curRxOkCnt;
-       int                             cur_byte_idx, cur_bit_idx;
-       PADAPTER                Adapter = pDM_Odm->Adapter;
-       PMGNT_INFO              pMgntInfo = &Adapter->MgntInfo;
-       
-       if( (*(pDM_Odm->pbScanInProcess)) ||
-               pDM_Odm->bLinkInProcess)
-       {
-               if((pDM_Odm->SupportICType==ODM_RTL8723A)&(pDM_Odm->SupportInterface==ODM_ITRF_PCIE))
-               {
-                       ODM_SetTimer( pDM_Odm, &pDM_Odm->PSDTimer, 1500); //ms  
-                       //psd_cnt=0;
-               }
-               return;
-       }
-
-       if(pDM_Odm->bBtHsOperation)
-       {
-               ReScan = 1;
-               Interval = SCAN_INTERVAL;
-       }
-       else
-       {
-       ReScan = PSD_RESCAN;
-       Interval = SCAN_INTERVAL;
-       }
-
-       //1 Initialization
-       if(init_memory == 0)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD, DBG_LOUD,("Init memory\n"));
-               for(i = 0; i < 80; i++)
-                       PSD_bitmap_memory[i] = 0xFF; // channel is always good
-               init_memory = 1;
-       }
-       if(psd_cnt == 0)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD, DBG_LOUD,("Enter dm_PSD_Monitor\n"));
-               for(i = 0; i < 80; i++)
-                       PSD_report[i] = 0;
-       }
-
-       //1 Backup Current Settings
-       CurrentChannel = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask);
-/*
-       if(pDM_Odm->SupportICType==ODM_RTL8192D)
-       {
-               //2 Record Current synthesizer parameters based on current channel
-               if((*pDM_Odm->MacPhyMode92D == SINGLEMAC_SINGLEPHY)||(*pDM_Odm->MacPhyMode92D == DUALMAC_SINGLEPHY))
-               {
-                       SYN_RF25 = ODM_GetRFReg(Adapter, ODM_RF_PATH_B, 0x25, bMaskDWord);
-                       SYN_RF26 = ODM_GetRFReg(Adapter, ODM_RF_PATH_B, 0x26, bMaskDWord);
-                       SYN_RF27 = ODM_GetRFReg(Adapter, ODM_RF_PATH_B, 0x27, bMaskDWord);
-                       SYN_RF2B = ODM_GetRFReg(Adapter, ODM_RF_PATH_B, 0x2B, bMaskDWord);
-                       SYN_RF2C = ODM_GetRFReg(Adapter, ODM_RF_PATH_B, 0x2C, bMaskDWord);
-               }
-               else     // DualMAC_DualPHY 2G
-               {
-                       SYN_RF25 = ODM_GetRFReg(Adapter, ODM_RF_PATH_A, 0x25, bMaskDWord);
-                       SYN_RF26 = ODM_GetRFReg(Adapter, ODM_RF_PATH_A, 0x26, bMaskDWord);
-                       SYN_RF27 = ODM_GetRFReg(Adapter, ODM_RF_PATH_A, 0x27, bMaskDWord);
-                       SYN_RF2B = ODM_GetRFReg(Adapter, ODM_RF_PATH_A, 0x2B, bMaskDWord);
-                       SYN_RF2C = ODM_GetRFReg(Adapter, ODM_RF_PATH_A, 0x2C, bMaskDWord);
-               }
-       }
-*/
-       //RXIQI = PHY_QueryBBReg(Adapter, 0xC14, bMaskDWord);
-       RXIQI = ODM_GetBBReg(pDM_Odm, 0xC14, bMaskDWord);
-
-       //RxIdleLowPwr = (PHY_QueryBBReg(Adapter, 0x818, bMaskDWord)&BIT28)>>28;
-       RxIdleLowPwr = (ODM_GetBBReg(pDM_Odm, 0x818, bMaskDWord)&BIT28)>>28;
-
-       //2???
-       if(CHNL_RUN_ABOVE_40MHZ(pMgntInfo))
-               Is40MHz = TRUE;
-       else
-               Is40MHz = FALSE;
-
-       ODM_RT_TRACE(pDM_Odm,   ODM_COMP_PSD, DBG_LOUD,("PSD Scan Start\n"));
-       //1 Turn off CCK
-       //PHY_SetBBReg(Adapter, rFPGA0_RFMOD, BIT24, 0);
-       ODM_SetBBReg(pDM_Odm, rFPGA0_RFMOD, BIT24, 0);
-       //1 Turn off TX
-       //Pause TX Queue
-       //PlatformEFIOWrite1Byte(Adapter, REG_TXPAUSE, 0xFF);
-       ODM_Write1Byte(pDM_Odm,REG_TXPAUSE, 0xFF);
-       
-       //Force RX to stop TX immediately
-       //PHY_SetRFReg(Adapter, ODM_RF_PATH_A, RF_AC, bRFRegOffsetMask, 0x32E13);
-
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_AC, bRFRegOffsetMask, 0x32E13);
-       //1 Turn off RX
-       //Rx AGC off  RegC70[0]=0, RegC7C[20]=0
-       //PHY_SetBBReg(Adapter, 0xC70, BIT0, 0);
-       //PHY_SetBBReg(Adapter, 0xC7C, BIT20, 0);
-
-       ODM_SetBBReg(pDM_Odm, 0xC70, BIT0, 0);
-       ODM_SetBBReg(pDM_Odm, 0xC7C, BIT20, 0);
-
-       
-       //Turn off CCA
-       //PHY_SetBBReg(Adapter, 0xC14, bMaskDWord, 0x0);
-       ODM_SetBBReg(pDM_Odm, 0xC14, bMaskDWord, 0x0);
-       
-       //BB Reset
-       //BBReset = PlatformEFIORead1Byte(Adapter, 0x02);
-       BBReset = ODM_Read1Byte(pDM_Odm, 0x02);
-       
-       //PlatformEFIOWrite1Byte(Adapter, 0x02, BBReset&(~BIT0));
-       //PlatformEFIOWrite1Byte(Adapter, 0x02, BBReset|BIT0);
-       ODM_SetBBReg(pDM_Odm, 0x87C, BIT31, 1); //clock gated to prevent from AGC table mess 
-       ODM_Write1Byte(pDM_Odm,  0x02, BBReset&(~BIT0));
-       ODM_Write1Byte(pDM_Odm,  0x02, BBReset|BIT0);
-       ODM_SetBBReg(pDM_Odm, 0x87C, BIT31, 0);
-       
-       //1 Leave RX idle low power
-       //PHY_SetBBReg(Adapter, 0x818, BIT28, 0x0);
-
-       ODM_SetBBReg(pDM_Odm, 0x818, BIT28, 0x0);
-       //1 Fix initial gain
-       //if (IS_HARDWARE_TYPE_8723AE(Adapter))
-       //RSSI_BT = pHalData->RSSI_BT;
-       //else if((IS_HARDWARE_TYPE_8192C(Adapter))||(IS_HARDWARE_TYPE_8192D(Adapter)))      // Add by Gary
-       //    RSSI_BT = RSSI_BT_new;
-
-       if((pDM_Odm->SupportICType==ODM_RTL8723A)&(pDM_Odm->SupportInterface==ODM_ITRF_PCIE))
-       RSSI_BT=pDM_Odm->RSSI_BT;               //need to check C2H to pDM_Odm RSSI BT
-
-       if(RSSI_BT>=47)
-               RSSI_BT=47;
-          
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD, DBG_LOUD,("PSD: RSSI_BT= %d\n", RSSI_BT));
-       
-       if(pDM_Odm->SupportICType==ODM_RTL8723A)
-       {
-              //Neil add--2011--10--12
-               //2 Initial Gain index 
-               if(RSSI_BT >=35)   // >= -15dBm
-                       initial_gain_psd = RSSI_BT*2;
-               else if((RSSI_BT >=33)&(RSSI_BT<35))
-                       initial_gain_psd = RSSI_BT*2+6;
-               else if((RSSI_BT >=24)&(RSSI_BT<33))
-                       initial_gain_psd = 70-(33-RSSI_BT);
-               else if((RSSI_BT >=19)&(RSSI_BT<24))
-                       initial_gain_psd = 64-((24-RSSI_BT)*4);
-               else if((RSSI_BT >=14)&(RSSI_BT<19))
-                       initial_gain_psd = 44-((18-RSSI_BT)*2);
-               else if((RSSI_BT >=8)&(RSSI_BT<14))
-                       initial_gain_psd = 35-(14-RSSI_BT);
-               else
-                       initial_gain_psd = 0x1B;
-       }
-       else
-       {
-       
-               //need to do    
-               initial_gain_psd = pDM_Odm->RSSI_Min;    // PSD report based on RSSI
-               //}     
-       }
-       //if(RSSI_BT<0x17)
-       //      RSSI_BT +=3;
-       //DbgPrint("PSD: RSSI_BT= %d\n", RSSI_BT);
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD, DBG_LOUD,("PSD: RSSI_BT= %d\n", RSSI_BT));
-
-       //initialGainUpper = 0x5E;  //Modify by neil chen
-       
-       if(pDM_Odm->bUserAssignLevel)
-       {
-               pDM_Odm->bUserAssignLevel = FALSE;
-               initialGainUpper = 0x7f;
-       }
-       else
-       {
-               initialGainUpper = 0x5E;
-       }
-       
-       /*
-       if (initial_gain_psd < 0x1a)
-               initial_gain_psd = 0x1a;
-       if (initial_gain_psd > initialGainUpper)
-               initial_gain_psd = initialGainUpper;
-       */
-
-       //if(pDM_Odm->SupportICType==ODM_RTL8723A)
-       SSBT = RSSI_BT  * 2 +0x3E;
-       
-       
-       //if(IS_HARDWARE_TYPE_8723AE(Adapter))
-       //      SSBT = RSSI_BT  * 2 +0x3E;
-       //else if((IS_HARDWARE_TYPE_8192C(Adapter))||(IS_HARDWARE_TYPE_8192D(Adapter)))   // Add by Gary
-       //{
-       //      RSSI_BT = initial_gain_psd;
-       //      SSBT = RSSI_BT;
-       //}
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD, DBG_LOUD,("PSD: SSBT= %d\n", SSBT));
-       ODM_RT_TRACE(   pDM_Odm,ODM_COMP_PSD, DBG_LOUD,("PSD: initial gain= 0x%x\n", initial_gain_psd));
-       //DbgPrint("PSD: SSBT= %d", SSBT);
-       //need to do
-       //pMgntInfo->bDMInitialGainEnable = FALSE;
-       pDM_Odm->bDMInitialGainEnable = FALSE;
-       initial_gain =(u1Byte) (ODM_GetBBReg(pDM_Odm, 0xc50, bMaskDWord) & 0x7F);
-       
-        // make sure the initial gain is under the correct range.
-       //initial_gain_psd &= 0x7f;
-       ODM_Write_DIG(pDM_Odm, initial_gain_psd);
-       //1 Turn off 3-wire
-       ODM_SetBBReg(pDM_Odm, 0x88c, BIT20|BIT21|BIT22|BIT23, 0xF);
-
-       //pts value = 128, 256, 512, 1024
-       pts = 128;
-
-       if(pts == 128)
-       {
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x0);
-               start_point = 64;
-               stop_point = 192;
-       }
-       else if(pts == 256)
-       {
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x1);
-               start_point = 128;
-               stop_point = 384;
-       }
-       else if(pts == 512)
-       {
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x2);
-               start_point = 256;
-               stop_point = 768;
-       }
-       else
-       {
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x3);
-               start_point = 512;
-               stop_point = 1536;
-       }
-       
-
-//3 Skip WLAN channels if WLAN busy
-
-       curTxOkCnt = *(pDM_Odm->pNumTxBytesUnicast) - lastTxOkCnt;
-       curRxOkCnt = *(pDM_Odm->pNumRxBytesUnicast) - lastRxOkCnt;
-       lastTxOkCnt = *(pDM_Odm->pNumTxBytesUnicast);
-       lastRxOkCnt = *(pDM_Odm->pNumRxBytesUnicast);   
-
-       PSD_skip_start=80;
-       PSD_skip_stop = 0;
-       wlan_channel = CurrentChannel & 0x0f;
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD,DBG_LOUD,("PSD: current channel: %x, BW:%d \n", wlan_channel, Is40MHz));
-       if(pDM_Odm->SupportICType==ODM_RTL8723A)
-       {
-               if(pDM_Odm->bBtHsOperation)
-               {
-                       if(pDM_Odm->bLinked)
-                       {
-                               if(Is40MHz)
-                               {
-                                       PSD_skip_start = ((wlan_channel-1)*5 -Is40MHz*10)-2;  // Modify by Neil to add 10 chs to mask
-                                       PSD_skip_stop = (PSD_skip_start + (1+Is40MHz)*20)+4;
-                               }
-                               else
-                               {
-                                       PSD_skip_start = ((wlan_channel-1)*5 -Is40MHz*10)-10;  // Modify by Neil to add 10 chs to mask
-                                       PSD_skip_stop = (PSD_skip_start + (1+Is40MHz)*20)+18; 
-                               }
-                       }
-                       else
-                       {
-                               // mask for 40MHz
-                               PSD_skip_start = ((wlan_channel-1)*5 -Is40MHz*10)-2;  // Modify by Neil to add 10 chs to mask
-                               PSD_skip_stop = (PSD_skip_start + (1+Is40MHz)*20)+4;
-                       }
-                       if(PSD_skip_start < 0)
-                               PSD_skip_start = 0;
-                       if(PSD_skip_stop >80)
-                               PSD_skip_stop = 80;
-               }
-               else
-               {
-                       if((curRxOkCnt+curTxOkCnt) > 5)
-                       {
-                               if(Is40MHz)
-                               {
-                                       PSD_skip_start = ((wlan_channel-1)*5 -Is40MHz*10)-2;  // Modify by Neil to add 10 chs to mask
-                                       PSD_skip_stop = (PSD_skip_start + (1+Is40MHz)*20)+4;
-                               }
-                               else
-                               {
-                                       PSD_skip_start = ((wlan_channel-1)*5 -Is40MHz*10)-10;  // Modify by Neil to add 10 chs to mask
-                                       PSD_skip_stop = (PSD_skip_start + (1+Is40MHz)*20)+18; 
-                               }
-                               
-                               if(PSD_skip_start < 0)
-                                       PSD_skip_start = 0;
-                               if(PSD_skip_stop >80)
-                                       PSD_skip_stop = 80;
-                       }
-               }
-       }
-#if 0  
-       else
-       {
-               if((curRxOkCnt+curTxOkCnt) > 1000)
-               {
-                       PSD_skip_start = (wlan_channel-1)*5 -Is40MHz*10;
-                       PSD_skip_stop = PSD_skip_start + (1+Is40MHz)*20;
-               }
-       }   
-#endif  //Reove RXHP Issue
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD,DBG_LOUD,("PSD: Skip tone from %d to %d \n", PSD_skip_start, PSD_skip_stop));
-
-       for (n=0;n<80;n++)
-       {
-               if((n%20)==0)
-               {
-                       channel = (n/20)*4 + 1;
-                                       
-                                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, 0x3FF, channel);
-                               }
-               tone_idx = n%20;
-               if ((n>=PSD_skip_start) && (n<PSD_skip_stop))
-               {       
-                       PSD_report[n] = SSBT;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD,DBG_LOUD,("PSD:Tone %d skipped \n", n));
-               }
-               else
-               {
-                       PSD_report_tmp =  GetPSDData(pDM_Odm, idx[tone_idx], initial_gain_psd);
-
-                       if ( PSD_report_tmp > PSD_report[n])
-                               PSD_report[n] = PSD_report_tmp;
-                               
-               }
-       }
-
-       PatchDCTone(pDM_Odm, PSD_report, initial_gain_psd);
-      
-       //----end
-       //1 Turn on RX
-       //Rx AGC on
-       ODM_SetBBReg(pDM_Odm, 0xC70, BIT0, 1);
-       ODM_SetBBReg(pDM_Odm, 0xC7C, BIT20, 1);
-       //CCK on
-       ODM_SetBBReg(pDM_Odm, rFPGA0_RFMOD, BIT24, 1);
-       //1 Turn on TX
-       //Resume TX Queue
-       
-       ODM_Write1Byte(pDM_Odm,REG_TXPAUSE, 0x00);
-       //Turn on 3-wire
-       ODM_SetBBReg(pDM_Odm, 0x88c, BIT20|BIT21|BIT22|BIT23, 0x0);
-       //1 Restore Current Settings
-       //Resume DIG
-       pDM_Odm->bDMInitialGainEnable = TRUE;
-       
-       ODM_Write_DIG(pDM_Odm, initial_gain);
-
-       // restore originl center frequency
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, CurrentChannel);
-
-       //Turn on CCA
-       ODM_SetBBReg(pDM_Odm, 0xC14, bMaskDWord, RXIQI);
-       //Restore RX idle low power
-       if(RxIdleLowPwr == TRUE)
-               ODM_SetBBReg(pDM_Odm, 0x818, BIT28, 1);
-       
-       psd_cnt++;
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD, DBG_LOUD,("PSD:psd_cnt = %d \n",psd_cnt));
-       if (psd_cnt < ReScan)
-               ODM_SetTimer(pDM_Odm, &pDM_Odm->PSDTimer, Interval);            
-       else
-       {
-               psd_cnt = 0;
-               for(i=0;i<80;i++)
-                       //DbgPrint("psd_report[%d]=     %d \n", 2402+i, PSD_report[i]);
-                       RT_TRACE(       COMP_PSD, DBG_LOUD,("psd_report[%d]=     %d \n", 2402+i, PSD_report[i]));
-
-
-               GoodChannelDecision(pDM_Odm, PSD_report, PSD_bitmap,RSSI_BT, PSD_bitmap_memory);
-
-               if(pDM_Odm->SupportICType==ODM_RTL8723A)
-               {
-                       cur_byte_idx=0;
-                       cur_bit_idx=0;
-
-                       //2 Restore H2C PSD Data to Last Data
-                       H2C_PSD_DATA_last[0] = H2C_PSD_DATA[0];
-                       H2C_PSD_DATA_last[1] = H2C_PSD_DATA[1];
-                       H2C_PSD_DATA_last[2] = H2C_PSD_DATA[2];
-                       H2C_PSD_DATA_last[3] = H2C_PSD_DATA[3];
-                       H2C_PSD_DATA_last[4] = H2C_PSD_DATA[4];
-
-       
-                       //2 Translate 80bit channel map to 40bit channel        
-                       for ( i=0;i<5;i++)
-                       {
-                               for(n=0;n<8;n++)
-                               {
-                                       cur_byte_idx = i*2 + n/4;
-                                       cur_bit_idx = (n%4)*2;
-                                       if ( ((PSD_bitmap[cur_byte_idx]& BIT(cur_bit_idx)) != 0) && ((PSD_bitmap[cur_byte_idx]& BIT(cur_bit_idx+1)) != 0))
-                                               H2C_PSD_DATA[i] = H2C_PSD_DATA[i] | (u1Byte) (1 << n);
-                               }
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD, DBG_LOUD,("H2C_PSD_DATA[%d]=0x%x\n" ,i, H2C_PSD_DATA[i]));
-                       }
-       
-                       //3 To Compare the difference
-                       for ( i=0;i<5;i++)
-                       {
-                               if(H2C_PSD_DATA[i] !=H2C_PSD_DATA_last[i])
-                               {
-                                       FillH2CCmd(Adapter, H2C_92C_PSD_RESULT, 5, H2C_PSD_DATA);
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_PSD, DBG_LOUD,("Need to Update the AFH Map \n"));
-                                       break;
-                               }
-                               else
-                               {
-                                       if(i==5)
-                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD, DBG_LOUD,("Not need to Update\n"));  
-                               }
-                       }
-                       if(pDM_Odm->bBtHsOperation)
-                       {
-                               ODM_SetTimer(pDM_Odm, &pDM_Odm->PSDTimer, 10000);
-                               ODM_RT_TRACE(   pDM_Odm,ODM_COMP_PSD, DBG_LOUD,("Leave dm_PSD_Monitor\n"));             
-                       }
-                       else
-                       {
-                               ODM_SetTimer(pDM_Odm, &pDM_Odm->PSDTimer, 1500);
-                               ODM_RT_TRACE(   pDM_Odm,ODM_COMP_PSD, DBG_LOUD,("Leave dm_PSD_Monitor\n"));             
-               }
-       }
-    }
-}
-/*
-//Neil for Get BT RSSI
-// Be Triggered by BT C2H CMD
-VOID
-ODM_PSDGetRSSI(
-       IN      u1Byte  RSSI_BT)
-{
-
-
-}
-
-*/
-
-VOID
-ODM_PSDMonitor(
-       IN      PDM_ODM_T       pDM_Odm
-       )
-{
-       //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-       
-       //if(IS_HARDWARE_TYPE_8723AE(Adapter))
-       
-       if(pDM_Odm->SupportICType == ODM_RTL8723A)   //may need to add other IC type
-       {
-               if(pDM_Odm->SupportInterface==ODM_ITRF_PCIE)
-               {
-                       if(!pDM_Odm->bBtEnabled) //need to check upper layer connection
-                       {
-                               pDM_Odm->bPSDactive=FALSE;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD, DBG_LOUD, ("odm_PSDMonitor, return for BT is disabled!!!\n"));
-                               return; 
-                       }
-
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PSD, DBG_LOUD, ("odm_PSDMonitor\n"));
-               //{
-                       pDM_Odm->bPSDinProcess = TRUE;
-                       pDM_Odm->bPSDactive=TRUE;
-                       odm_PSD_Monitor(pDM_Odm);
-                       pDM_Odm->bPSDinProcess = FALSE;
-               }       
-       }       
-
-}
-VOID
-odm_PSDMonitorCallback(
-       PRT_TIMER               pTimer
-)
-{
-       PADAPTER                Adapter = (PADAPTER)pTimer->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-
-       PlatformScheduleWorkItem(&pHalData->PSDMonitorWorkitem);
-}
-
-VOID
-odm_PSDMonitorWorkItemCallback(
-    IN PVOID            pContext
-    )
-{
-       PADAPTER        Adapter = (PADAPTER)pContext;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
-
-       ODM_PSDMonitor(pDM_Odm);
-}
-
-//Remove by Yuchen (seperate to odm_DIG.c)
-
- //cosa debug tool need to modify
-
-VOID
-ODM_PSDDbgControl(
-       IN      PADAPTER        Adapter,
-       IN      u4Byte          mode,
-       IN      u4Byte          btRssi
-       )
-{
-#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
-
-       ODM_RT_TRACE(pDM_Odm,COMP_PSD, DBG_LOUD, (" Monitor mode=%d, btRssi=%d\n", mode, btRssi));
-       if(mode)
-       {
-               pDM_Odm->RSSI_BT = (u1Byte)btRssi;
-               pDM_Odm->bUserAssignLevel = TRUE;
-               ODM_SetTimer( pDM_Odm, &pDM_Odm->PSDTimer, 0); //ms             
-       }
-       else
-       {
-               ODM_CancelTimer(pDM_Odm, &pDM_Odm->PSDTimer);
-       }
-#endif
-}
-
-
-//#if(DEV_BUS_TYPE == RT_PCI_INTERFACE)|(DEV_BUS_TYPE == RT_USB_INTERFACE)
-
-void   odm_RXHPInit(
-       IN              PDM_ODM_T               pDM_Odm)
-{
-#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)|(DEV_BUS_TYPE == RT_USB_INTERFACE)
-       pRXHP_T                 pRX_HP_Table  = &pDM_Odm->DM_RXHP_Table;
-       u1Byte                  index;
-
-       pRX_HP_Table->RXHP_enable = TRUE;
-       pRX_HP_Table->RXHP_flag = 0;
-       pRX_HP_Table->PSD_func_trigger = 0;
-       pRX_HP_Table->Pre_IGI = 0x20;
-       pRX_HP_Table->Cur_IGI = 0x20;
-       pRX_HP_Table->Cur_pw_th = pw_th_10dB;
-       pRX_HP_Table->Pre_pw_th = pw_th_10dB;
-       for(index=0; index<80; index++)
-               pRX_HP_Table->PSD_bitmap_RXHP[index] = 1;
-
-#if(DEV_BUS_TYPE == RT_USB_INTERFACE)
-       pRX_HP_Table->TP_Mode = Idle_Mode;
-#endif
-#endif
-}
-
-void odm_RXHP(
-       IN              PDM_ODM_T               pDM_Odm)
-{
-#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN))
-#if (DEV_BUS_TYPE == RT_PCI_INTERFACE) | (DEV_BUS_TYPE == RT_USB_INTERFACE)
-       PADAPTER        Adapter =  pDM_Odm->Adapter;
-       PMGNT_INFO      pMgntInfo = &(Adapter->MgntInfo);
-       pDIG_T          pDM_DigTable = &pDM_Odm->DM_DigTable;
-       pRXHP_T         pRX_HP_Table  = &pDM_Odm->DM_RXHP_Table;
-       PFALSE_ALARM_STATISTICS         FalseAlmCnt = &(pDM_Odm->FalseAlmCnt);
-       
-       u1Byte                  i, j, sum;
-       u1Byte                  Is40MHz;
-       s1Byte                  Intf_diff_idx, MIN_Intf_diff_idx = 16;   
-       s4Byte                  cur_channel;    
-       u1Byte                  ch_map_intf_5M[17] = {0};     
-       static u4Byte           FA_TH = 0;      
-       static u1Byte           psd_intf_flag = 0;
-       static s4Byte           curRssi = 0;                
-       static s4Byte           preRssi = 0;                                                                
-       static u1Byte           PSDTriggerCnt = 1;
-       
-       u1Byte                  RX_HP_enable = (u1Byte)(ODM_GetBBReg(pDM_Odm, rOFDM0_XAAGCCore2, bMaskDWord)>>31);   // for debug!!
-
-#if(DEV_BUS_TYPE == RT_USB_INTERFACE)  
-       static s8Byte           lastTxOkCnt = 0, lastRxOkCnt = 0;  
-       s8Byte                  curTxOkCnt, curRxOkCnt;
-       s8Byte                  curTPOkCnt;
-       s8Byte                  TP_Acc3, TP_Acc5;
-       static s8Byte           TP_Buff[5] = {0};
-       static u1Byte           pre_state = 0, pre_state_flag = 0;
-       static u1Byte           Intf_HighTP_flag = 0, De_counter = 16; 
-       static u1Byte           TP_Degrade_flag = 0;
-#endif    
-       static u1Byte           LatchCnt = 0;
-       
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8188E))
-               return;
-       //AGC RX High Power Mode is only applied on 2G band in 92D!!!
-       if(pDM_Odm->SupportICType == ODM_RTL8192D)
-       {
-               if(*(pDM_Odm->pBandType) != ODM_BAND_2_4G)
-                       return;
-       }
-
-       if(!(pDM_Odm->SupportAbility==ODM_BB_RXHP))
-               return;
-
-
-       //RX HP ON/OFF
-       if(RX_HP_enable == 1)
-               pRX_HP_Table->RXHP_enable = FALSE;
-       else
-               pRX_HP_Table->RXHP_enable = TRUE;
-
-       if(pRX_HP_Table->RXHP_enable == FALSE)
-       {
-               if(pRX_HP_Table->RXHP_flag == 1)
-               {
-                       pRX_HP_Table->RXHP_flag = 0;
-                       psd_intf_flag = 0;
-               }
-               return;
-       }
-
-#if(DEV_BUS_TYPE == RT_USB_INTERFACE)  
-       //2 Record current TP for USB interface
-       curTxOkCnt = *(pDM_Odm->pNumTxBytesUnicast)-lastTxOkCnt;
-       curRxOkCnt = *(pDM_Odm->pNumRxBytesUnicast)-lastRxOkCnt;
-       lastTxOkCnt = *(pDM_Odm->pNumTxBytesUnicast);
-       lastRxOkCnt = *(pDM_Odm->pNumRxBytesUnicast);
-
-       curTPOkCnt = curTxOkCnt+curRxOkCnt;
-       TP_Buff[0] = curTPOkCnt;    // current TP  
-       TP_Acc3 = PlatformDivision64((TP_Buff[1]+TP_Buff[2]+TP_Buff[3]), 3);
-       TP_Acc5 = PlatformDivision64((TP_Buff[0]+TP_Buff[1]+TP_Buff[2]+TP_Buff[3]+TP_Buff[4]), 5);
-       
-       if(TP_Acc5 < 1000)
-               pRX_HP_Table->TP_Mode = Idle_Mode;
-       else if((1000 < TP_Acc5)&&(TP_Acc5 < 3750000))
-               pRX_HP_Table->TP_Mode = Low_TP_Mode;
-       else
-               pRX_HP_Table->TP_Mode = High_TP_Mode;
-
-       ODM_RT_TRACE(pDM_Odm,   ODM_COMP_RXHP, ODM_DBG_LOUD, ("RX HP TP Mode = %d\n", pRX_HP_Table->TP_Mode));
-       // Since TP result would be sampled every 2 sec, it needs to delay 4sec to wait PSD processing.
-       // When LatchCnt = 0, we would Get PSD result.
-       if(TP_Degrade_flag == 1)
-       {
-               LatchCnt--;
-               if(LatchCnt == 0)
-               {
-                       TP_Degrade_flag = 0;
-               }
-       }
-       // When PSD function triggered by TP degrade 20%, and Interference Flag = 1
-       // Set a De_counter to wait IGI = upper bound. If time is UP, the Interference flag will be pull down.
-       if(Intf_HighTP_flag == 1)
-       {
-               De_counter--;
-               if(De_counter == 0)
-               {
-                       Intf_HighTP_flag = 0;
-                       psd_intf_flag = 0;
-               }
-       }
-#endif
-
-       //2 AGC RX High Power Mode by PSD only applied to STA Mode
-       //3 NOT applied 1. Ad Hoc Mode.
-       //3 NOT applied 2. AP Mode
-       if ((pMgntInfo->mAssoc) && (!pMgntInfo->mIbss) && (!ACTING_AS_AP(Adapter)))
-       {    
-               Is40MHz = *(pDM_Odm->pBandWidth);
-               curRssi = pDM_Odm->RSSI_Min;
-               cur_channel = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, 0x0fff) & 0x0f;
-               ODM_RT_TRACE(pDM_Odm,   ODM_COMP_RXHP, ODM_DBG_LOUD, ("RXHP RX HP flag = %d\n", pRX_HP_Table->RXHP_flag));
-               ODM_RT_TRACE(pDM_Odm,   ODM_COMP_RXHP, ODM_DBG_LOUD, ("RXHP FA = %d\n", FalseAlmCnt->Cnt_all));
-               ODM_RT_TRACE(pDM_Odm,   ODM_COMP_RXHP, ODM_DBG_LOUD, ("RXHP cur RSSI = %d, pre RSSI=%d\n", curRssi, preRssi));
-               ODM_RT_TRACE(pDM_Odm,   ODM_COMP_RXHP, ODM_DBG_LOUD, ("RXHP current CH = %d\n", cur_channel));
-               ODM_RT_TRACE(pDM_Odm,   ODM_COMP_RXHP, ODM_DBG_LOUD, ("RXHP Is 40MHz = %d\n", Is40MHz));
-               //2 PSD function would be triggered 
-               //3 1. Every 4 sec for PCIE
-               //3 2. Before TP Mode (Idle TP<4kbps) for USB
-               //3 3. After TP Mode (High TP) for USB 
-               if((curRssi > 68) && (pRX_HP_Table->RXHP_flag == 0))    // Only RSSI>TH and RX_HP_flag=0 will Do PSD process 
-               {
-#if (DEV_BUS_TYPE == RT_USB_INTERFACE)
-                       //2 Before TP Mode ==> PSD would be trigger every 4 sec
-                       if(pRX_HP_Table->TP_Mode == Idle_Mode)          //2.1 less wlan traffic <4kbps
-                       {
-#endif
-                               if(PSDTriggerCnt == 1)       
-                               {       
-                                       odm_PSD_RXHP(pDM_Odm);
-                                       pRX_HP_Table->PSD_func_trigger = 1;
-                                       PSDTriggerCnt = 0;
-                               }
-                               else
-                               {
-                                       PSDTriggerCnt++;
-                               }
-#if(DEV_BUS_TYPE == RT_USB_INTERFACE)
-                       }       
-                       //2 After TP Mode ==> Check if TP degrade larger than 20% would trigger PSD function
-                       if(pRX_HP_Table->TP_Mode == High_TP_Mode)
-                       {
-                               if((pre_state_flag == 0)&&(LatchCnt == 0)) 
-                               {
-                                       // TP var < 5%
-                                       if((((curTPOkCnt-TP_Acc3)*20)<(TP_Acc3))&&(((curTPOkCnt-TP_Acc3)*20)>(-TP_Acc3)))
-                                       {
-                                               pre_state++;
-                                               if(pre_state == 3)      // hit pre_state condition => consecutive 3 times
-                                               {
-                                                       pre_state_flag = 1;
-                                                       pre_state = 0;
-                                               }
-
-                                       }
-                                       else
-                                       {
-                                               pre_state = 0;
-                                       }
-                               }
-                               //3 If pre_state_flag=1 ==> start to monitor TP degrade 20%
-                               if(pre_state_flag == 1)         
-                               {
-                                       if(((TP_Acc3-curTPOkCnt)*5)>(TP_Acc3))      // degrade 20%
-                                       {
-                                               odm_PSD_RXHP(pDM_Odm);
-                                               pRX_HP_Table->PSD_func_trigger = 1;
-                                               TP_Degrade_flag = 1;
-                                               LatchCnt = 2;
-                                               pre_state_flag = 0;
-                                       }
-                                       else if(((TP_Buff[2]-curTPOkCnt)*5)>TP_Buff[2])
-                                       {
-                                               odm_PSD_RXHP(pDM_Odm);
-                                               pRX_HP_Table->PSD_func_trigger = 1;
-                                               TP_Degrade_flag = 1;
-                                               LatchCnt = 2;
-                                               pre_state_flag = 0;
-                                       }
-                                       else if(((TP_Buff[3]-curTPOkCnt)*5)>TP_Buff[3])
-                                       {
-                                               odm_PSD_RXHP(pDM_Odm);
-                                               pRX_HP_Table->PSD_func_trigger = 1;
-                                               TP_Degrade_flag = 1;
-                                               LatchCnt = 2;
-                                               pre_state_flag = 0;
-                                       }
-                               }
-                       }
-#endif
-}
-
-#if (DEV_BUS_TYPE == RT_USB_INTERFACE)
-               for (i=0;i<4;i++)
-               {
-                       TP_Buff[4-i] = TP_Buff[3-i];
-               }
-#endif
-               //2 Update PSD bitmap according to PSD report 
-               if((pRX_HP_Table->PSD_func_trigger == 1)&&(LatchCnt == 0))
-               {       
-                       //2 Separate 80M bandwidth into 16 group with smaller 5M BW.
-                       for (i = 0 ; i < 16 ; i++)
-                       {
-                               sum = 0;
-                               for(j = 0; j < 5 ; j++)
-                                       sum += pRX_HP_Table->PSD_bitmap_RXHP[5*i + j];
-            
-                               if(sum < 5)
-                               {
-                                       ch_map_intf_5M[i] = 1;  // interference flag
-                               }
-                       }
-                       //=============just for debug=========================
-                       //for(i=0;i<16;i++)
-                               //DbgPrint("RX HP: ch_map_intf_5M[%d] = %d\n", i, ch_map_intf_5M[i]);
-                       //===============================================
-                       //2 Mask target channel 5M index
-                       for(i = 0; i < (4+4*Is40MHz) ; i++)
-                       {
-                               ch_map_intf_5M[cur_channel - (1+2*Is40MHz) + i] = 0;  
-                       }
-                               
-                       psd_intf_flag = 0;
-                       for(i = 0; i < 16; i++)
-                       {
-                               if(ch_map_intf_5M[i] == 1)
-                       {
-                               psd_intf_flag = 1;            // interference is detected!!!    
-                               break;
-                               }
-                       }
-                               
-#if (DEV_BUS_TYPE == RT_USB_INTERFACE)
-                       if(pRX_HP_Table->TP_Mode!=Idle_Mode)
-                       {
-                               if(psd_intf_flag == 1)     // to avoid psd_intf_flag always 1
-                               {
-                                       Intf_HighTP_flag = 1;
-                                       De_counter = 32;     // 0x1E -> 0x3E needs 32 times by each IGI step =1
-                               }
-                       }
-#endif
-                       ODM_RT_TRACE(pDM_Odm,   ODM_COMP_RXHP, ODM_DBG_LOUD, ("RX HP psd_intf_flag = %d\n", psd_intf_flag));
-                       //2 Distance between target channel and interference
-                       for(i = 0; i < 16; i++)
-                       {
-                               if(ch_map_intf_5M[i] == 1)
-                               {
-                                       Intf_diff_idx = ((cur_channel+Is40MHz-(i+1))>0) ? (s1Byte)(cur_channel-2*Is40MHz-(i-2)) : (s1Byte)((i+1)-(cur_channel+2*Is40MHz));  
-                               if(Intf_diff_idx < MIN_Intf_diff_idx)
-                                               MIN_Intf_diff_idx = Intf_diff_idx;    // the min difference index between interference and target
-                               }
-                       }
-                       ODM_RT_TRACE(pDM_Odm,   ODM_COMP_RXHP, ODM_DBG_LOUD, ("RX HP MIN_Intf_diff_idx = %d\n", MIN_Intf_diff_idx)); 
-                       //2 Choose False Alarm Threshold
-                       switch (MIN_Intf_diff_idx){
-                               case 0: 
-                               case 1:
-                               case 2:
-                               case 3:          
-                                       FA_TH = FA_RXHP_TH1;  
-                               break;
-                               case 4:                         // CH5
-                               case 5:                         // CH6
-                                       FA_TH = FA_RXHP_TH2;    
-                                       break;
-                               case 6:                         // CH7
-                               case 7:                         // CH8
-                                       FA_TH = FA_RXHP_TH3;
-                                       break; 
-                               case 8:                         // CH9
-                               case 9:                         //CH10
-                                       FA_TH = FA_RXHP_TH4;
-                                       break;  
-                               case 10:
-                               case 11:
-                               case 12:
-                               case 13:         
-                               case 14:
-                               case 15:                
-                                       FA_TH = FA_RXHP_TH5;
-                                       break;                  
-                       }       
-                       ODM_RT_TRACE(pDM_Odm,   ODM_COMP_RXHP, ODM_DBG_LOUD, ("RX HP FA_TH = %d\n", FA_TH));
-                       pRX_HP_Table->PSD_func_trigger = 0;
-               }
-               //1 Monitor RSSI variation to choose the suitable IGI or Exit AGC RX High Power Mode
-               if(pRX_HP_Table->RXHP_flag == 1)
-               {
-               if ((curRssi > 80)&&(preRssi < 80))
-               { 
-                               pRX_HP_Table->Cur_IGI = LNA_Low_Gain_1;
-               }
-               else if ((curRssi < 80)&&(preRssi > 80))
-               {
-                               pRX_HP_Table->Cur_IGI = LNA_Low_Gain_2;
-                       }
-               else if ((curRssi > 72)&&(preRssi < 72))
-                       {
-                               pRX_HP_Table->Cur_IGI = LNA_Low_Gain_2;
-               }
-               else if ((curRssi < 72)&&( preRssi > 72))
-                       {
-                               pRX_HP_Table->Cur_IGI = LNA_Low_Gain_3;
-               }
-               else if (curRssi < 68)           //RSSI is NOT large enough!!==> Exit AGC RX High Power Mode
-               {
-                               pRX_HP_Table->Cur_pw_th = pw_th_10dB;
-                               pRX_HP_Table->RXHP_flag = 0;    // Back to Normal DIG Mode                
-                               psd_intf_flag = 0;
-                       }
-               }
-               else    // pRX_HP_Table->RXHP_flag == 0
-               {
-                       //1 Decide whether to enter AGC RX High Power Mode
-                       if ((curRssi > 70) && (psd_intf_flag == 1) && (FalseAlmCnt->Cnt_all > FA_TH) &&  
-                               (pDM_DigTable->CurIGValue == pDM_DigTable->rx_gain_range_max))
-                       {
-                               if (curRssi > 80)
-                               {
-                                       pRX_HP_Table->Cur_IGI = LNA_Low_Gain_1;
-                               }
-                               else if (curRssi > 72) 
-                       {
-                                       pRX_HP_Table->Cur_IGI = LNA_Low_Gain_2;
-                               }
-                               else
-                               {
-                                       pRX_HP_Table->Cur_IGI = LNA_Low_Gain_3;
-                               }
-                               pRX_HP_Table->Cur_pw_th = pw_th_16dB;           //RegC54[9:8]=2'b11: to enter AGC Flow 3
-                               pRX_HP_Table->First_time_enter = TRUE;
-                               pRX_HP_Table->RXHP_flag = 1;    //      RXHP_flag=1: AGC RX High Power Mode, RXHP_flag=0: Normal DIG Mode
-                       }
-               }
-               preRssi = curRssi; 
-               odm_Write_RXHP(pDM_Odm);        
-       }
-#endif //#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN))
-#endif //#if (DEV_BUS_TYPE == RT_PCI_INTERFACE) | (DEV_BUS_TYPE == RT_USB_INTERFACE)
-}
-
-void odm_Write_RXHP(
-       IN      PDM_ODM_T       pDM_Odm)
-{
-       pRXHP_T         pRX_HP_Table = &pDM_Odm->DM_RXHP_Table;
-       u4Byte          currentIGI;
-
-       if(pRX_HP_Table->Cur_IGI != pRX_HP_Table->Pre_IGI)
-       {
-               ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskByte0, pRX_HP_Table->Cur_IGI);
-               ODM_SetBBReg(pDM_Odm, rOFDM0_XBAGCCore1, bMaskByte0, pRX_HP_Table->Cur_IGI);    
-       }
-       
-       if(pRX_HP_Table->Cur_pw_th != pRX_HP_Table->Pre_pw_th)
-{
-               ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore2, BIT8|BIT9, pRX_HP_Table->Cur_pw_th);  // RegC54[9:8]=2'b11:  AGC Flow 3
-       }
-
-       if(pRX_HP_Table->RXHP_flag == 0)
-       {
-               pRX_HP_Table->Cur_IGI = 0x20;
-       }
-       else
-       {
-               currentIGI = ODM_GetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskByte0);
-               if(currentIGI<0x50)
-               {
-                       ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskByte0, pRX_HP_Table->Cur_IGI);
-                       ODM_SetBBReg(pDM_Odm, rOFDM0_XBAGCCore1, bMaskByte0, pRX_HP_Table->Cur_IGI);    
-               }
-       }
-       pRX_HP_Table->Pre_IGI = pRX_HP_Table->Cur_IGI;
-       pRX_HP_Table->Pre_pw_th = pRX_HP_Table->Cur_pw_th;
-
-}
-
-VOID
-odm_PSD_RXHP(
-       IN      PDM_ODM_T       pDM_Odm
-)
-{
-       pRXHP_T                 pRX_HP_Table  = &pDM_Odm->DM_RXHP_Table;
-       PADAPTER                Adapter =  pDM_Odm->Adapter;
-       PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);
-       unsigned int            pts, start_point, stop_point, initial_gain ;
-       static u1Byte           PSD_bitmap_memory[80], init_memory = 0;
-       static u1Byte           psd_cnt=0;
-       static u4Byte           PSD_report[80], PSD_report_tmp;
-       static u8Byte           lastTxOkCnt=0, lastRxOkCnt=0;
-       u1Byte                  idx[20]={96,99,102,106,109,112,115,118,122,125,
-                                       0,3,6,10,13,16,19,22,26,29};
-       u1Byte                  n, i, channel, BBReset,tone_idx;
-       u1Byte                  PSD_bitmap[10]/*, SSBT=0*/,initial_gain_psd=0, RSSI_BT=0, initialGainUpper;
-       s4Byte                          PSD_skip_start, PSD_skip_stop;
-       u4Byte                  CurrentChannel, RXIQI, RxIdleLowPwr, wlan_channel;
-       u4Byte                  ReScan, Interval, Is40MHz;
-       u8Byte                  curTxOkCnt, curRxOkCnt;
-       //--------------2G band synthesizer for 92D switch RF channel using----------------- 
-       u1Byte                  group_idx=0;
-       u4Byte                  SYN_RF25=0, SYN_RF26=0, SYN_RF27=0, SYN_RF2B=0, SYN_RF2C=0;
-       u4Byte                  SYN[5] = {0x25, 0x26, 0x27, 0x2B, 0x2C};    // synthesizer RF register for 2G channel
-       u4Byte                  SYN_group[3][5] = {{0x643BC, 0xFC038, 0x77C1A, 0x41289, 0x01840},     // For CH1,2,4,9,10.11.12   {0x643BC, 0xFC038, 0x77C1A, 0x41289, 0x01840}
-                                                                           {0x643BC, 0xFC038, 0x07C1A, 0x41289, 0x01840},     // For CH3,13,14
-                                                                           {0x243BC, 0xFC438, 0x07C1A, 0x4128B, 0x0FC41}};   // For Ch5,6,7,8
-       //--------------------- Add by Gary for Debug setting ----------------------
-       u1Byte                 RSSI_BT_new = (u1Byte) ODM_GetBBReg(pDM_Odm, 0xB9C, 0xFF);
-       u1Byte                 rssi_ctrl = (u1Byte) ODM_GetBBReg(pDM_Odm, 0xB38, 0xFF);
-       //---------------------------------------------------------------------
-       
-       if(pMgntInfo->bScanInProgress)
-       {
-               return;
-       }
-
-       ReScan = PSD_RESCAN;
-       Interval = SCAN_INTERVAL;
-
-
-       //1 Initialization
-       if(init_memory == 0)
-       {
-               RT_TRACE(       COMP_PSD, DBG_LOUD,("Init memory\n"));
-               for(i = 0; i < 80; i++)
-                       PSD_bitmap_memory[i] = 0xFF; // channel is always good
-               init_memory = 1;
-       }
-       if(psd_cnt == 0)
-       {
-               RT_TRACE(COMP_PSD, DBG_LOUD,("Enter dm_PSD_Monitor\n"));
-               for(i = 0; i < 80; i++)
-                       PSD_report[i] = 0;
-       }
-
-       //1 Backup Current Settings
-       CurrentChannel = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask);
-       if(pDM_Odm->SupportICType == ODM_RTL8192D)
-       {
-               //2 Record Current synthesizer parameters based on current channel
-               if((*(pDM_Odm->pMacPhyMode)==ODM_SMSP)||(*(pDM_Odm->pMacPhyMode)==ODM_DMSP))
-               {
-                       SYN_RF25 = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x25, bMaskDWord);
-                       SYN_RF26 = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x26, bMaskDWord);
-                       SYN_RF27 = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x27, bMaskDWord);
-                       SYN_RF2B = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x2B, bMaskDWord);
-                       SYN_RF2C = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x2C, bMaskDWord);
-               }
-               else     // DualMAC_DualPHY 2G
-               {
-                       SYN_RF25 = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x25, bMaskDWord);
-                       SYN_RF26 = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x26, bMaskDWord);
-                       SYN_RF27 = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x27, bMaskDWord);
-                       SYN_RF2B = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x2B, bMaskDWord);
-                       SYN_RF2C = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x2C, bMaskDWord);
-               }
-       }
-       RXIQI = ODM_GetBBReg(pDM_Odm, 0xC14, bMaskDWord);
-       RxIdleLowPwr = (ODM_GetBBReg(pDM_Odm, 0x818, bMaskDWord)&BIT28)>>28;
-       Is40MHz = *(pDM_Odm->pBandWidth);
-       ODM_RT_TRACE(pDM_Odm,   COMP_PSD, DBG_LOUD,("PSD Scan Start\n"));
-       //1 Turn off CCK
-       ODM_SetBBReg(pDM_Odm, rFPGA0_RFMOD, BIT24, 0);
-       //1 Turn off TX
-       //Pause TX Queue
-       ODM_Write1Byte(pDM_Odm, REG_TXPAUSE, 0xFF);
-       //Force RX to stop TX immediately
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_AC, bRFRegOffsetMask, 0x32E13);
-       //1 Turn off RX
-       //Rx AGC off  RegC70[0]=0, RegC7C[20]=0
-       ODM_SetBBReg(pDM_Odm, 0xC70, BIT0, 0);
-       ODM_SetBBReg(pDM_Odm, 0xC7C, BIT20, 0);
-       //Turn off CCA
-       ODM_SetBBReg(pDM_Odm, 0xC14, bMaskDWord, 0x0);
-       //BB Reset
-       ODM_SetBBReg(pDM_Odm, 0x87C, BIT31, 1); //clock gated to prevent from AGC table mess 
-       BBReset = ODM_Read1Byte(pDM_Odm, 0x02);
-       ODM_Write1Byte(pDM_Odm, 0x02, BBReset&(~BIT0));
-       ODM_Write1Byte(pDM_Odm, 0x02, BBReset|BIT0);
-       ODM_SetBBReg(pDM_Odm, 0x87C, BIT31, 0);
-       //1 Leave RX idle low power
-       ODM_SetBBReg(pDM_Odm, 0x818, BIT28, 0x0);
-       //1 Fix initial gain
-       RSSI_BT = RSSI_BT_new;
-       RT_TRACE(COMP_PSD, DBG_LOUD,("PSD: RSSI_BT= %d\n", RSSI_BT));
-       
-       if(rssi_ctrl == 1)        // just for debug!!
-               initial_gain_psd = RSSI_BT_new; 
-       else
-               initial_gain_psd = pDM_Odm->RSSI_Min;    // PSD report based on RSSI
-       
-       RT_TRACE(COMP_PSD, DBG_LOUD,("PSD: RSSI_BT= %d\n", RSSI_BT));
-       
-       initialGainUpper = 0x54;
-       
-       RSSI_BT = initial_gain_psd;
-       //SSBT = RSSI_BT;
-       
-       //RT_TRACE(     COMP_PSD, DBG_LOUD,("PSD: SSBT= %d\n", SSBT));
-       RT_TRACE(       COMP_PSD, DBG_LOUD,("PSD: initial gain= 0x%x\n", initial_gain_psd));
-       
-       pDM_Odm->bDMInitialGainEnable = FALSE;          
-       initial_gain = ODM_GetBBReg(pDM_Odm, 0xc50, bMaskDWord) & 0x7F;
-       //ODM_SetBBReg(pDM_Odm, 0xc50, 0x7F, initial_gain_psd); 
-       ODM_Write_DIG(pDM_Odm, initial_gain_psd);
-       //1 Turn off 3-wire
-       ODM_SetBBReg(pDM_Odm, 0x88c, BIT20|BIT21|BIT22|BIT23, 0xF);
-
-       //pts value = 128, 256, 512, 1024
-       pts = 128;
-
-       if(pts == 128)
-       {
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x0);
-               start_point = 64;
-               stop_point = 192;
-       }
-       else if(pts == 256)
-       {
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x1);
-               start_point = 128;
-               stop_point = 384;
-       }
-       else if(pts == 512)
-       {
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x2);
-               start_point = 256;
-               stop_point = 768;
-       }
-       else
-       {
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x3);
-               start_point = 512;
-               stop_point = 1536;
-       }
-       
-
-//3 Skip WLAN channels if WLAN busy
-       curTxOkCnt = *(pDM_Odm->pNumTxBytesUnicast) - lastTxOkCnt;
-       curRxOkCnt = *(pDM_Odm->pNumRxBytesUnicast) - lastRxOkCnt;
-       lastTxOkCnt = *(pDM_Odm->pNumTxBytesUnicast);
-       lastRxOkCnt = *(pDM_Odm->pNumRxBytesUnicast);
-       
-       PSD_skip_start=80;
-       PSD_skip_stop = 0;
-       wlan_channel = CurrentChannel & 0x0f;
-
-       RT_TRACE(COMP_PSD,DBG_LOUD,("PSD: current channel: %x, BW:%d \n", wlan_channel, Is40MHz));
-       
-       if((curRxOkCnt+curTxOkCnt) > 1000)
-       {
-               PSD_skip_start = (wlan_channel-1)*5 -Is40MHz*10;
-               PSD_skip_stop = PSD_skip_start + (1+Is40MHz)*20;
-       }
-
-       RT_TRACE(COMP_PSD,DBG_LOUD,("PSD: Skip tone from %d to %d \n", PSD_skip_start, PSD_skip_stop));
-
-       for (n=0;n<80;n++)
-       {
-               if((n%20)==0)
-               {
-                       channel = (n/20)*4 + 1;
-                       if(pDM_Odm->SupportICType == ODM_RTL8192D)
-                       {
-                               switch(channel)
-                               {
-                                       case 1: 
-                                       case 9:
-                                               group_idx = 0;
-                                               break;
-                                       case 5:
-                                               group_idx = 2;
-                                               break;
-                                       case 13:
-                                               group_idx = 1;
-                                               break;
-                               }
-                               if((*(pDM_Odm->pMacPhyMode)==ODM_SMSP)||(*(pDM_Odm->pMacPhyMode)==ODM_DMSP))   
-               {
-                                       for(i = 0; i < SYN_Length; i++)
-                                               ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, SYN[i], bMaskDWord, SYN_group[group_idx][i]);
-
-                                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, 0x3FF, channel);
-                                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, RF_CHNLBW, 0x3FF, channel);
-                               }
-                               else  // DualMAC_DualPHY 2G
-                       {
-                                       for(i = 0; i < SYN_Length; i++)
-                                               ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, SYN[i], bMaskDWord, SYN_group[group_idx][i]);   
-                                       
-                                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, 0x3FF, channel);
-                               }
-                       }
-                       else
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, 0x3FF, channel);
-                       }       
-               tone_idx = n%20;
-               if ((n>=PSD_skip_start) && (n<PSD_skip_stop))
-               {       
-                       PSD_report[n] = initial_gain_psd;//SSBT;
-                       ODM_RT_TRACE(pDM_Odm,COMP_PSD,DBG_LOUD,("PSD:Tone %d skipped \n", n));
-               }
-               else
-               {
-                       PSD_report_tmp =  GetPSDData(pDM_Odm, idx[tone_idx], initial_gain_psd);
-
-                       if ( PSD_report_tmp > PSD_report[n])
-                               PSD_report[n] = PSD_report_tmp;
-                               
-               }
-       }
-
-       PatchDCTone(pDM_Odm, PSD_report, initial_gain_psd);
-      
-       //----end
-       //1 Turn on RX
-       //Rx AGC on
-       ODM_SetBBReg(pDM_Odm, 0xC70, BIT0, 1);
-       ODM_SetBBReg(pDM_Odm, 0xC7C, BIT20, 1);
-       //CCK on
-       ODM_SetBBReg(pDM_Odm, rFPGA0_RFMOD, BIT24, 1);
-       //1 Turn on TX
-       //Resume TX Queue
-       ODM_Write1Byte(pDM_Odm, REG_TXPAUSE, 0x00);
-       //Turn on 3-wire
-       ODM_SetBBReg(pDM_Odm, 0x88c, BIT20|BIT21|BIT22|BIT23, 0x0);
-       //1 Restore Current Settings
-       //Resume DIG
-       pDM_Odm->bDMInitialGainEnable= TRUE;
-       //ODM_SetBBReg(pDM_Odm, 0xc50, 0x7F, initial_gain);
-       ODM_Write_DIG(pDM_Odm,(u1Byte) initial_gain);
-       // restore originl center frequency
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, CurrentChannel);
-       if(pDM_Odm->SupportICType == ODM_RTL8192D)
-       {
-               if((*(pDM_Odm->pMacPhyMode)==ODM_SMSP)||(*(pDM_Odm->pMacPhyMode)==ODM_DMSP))
-               {
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, RF_CHNLBW, bMaskDWord, CurrentChannel);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x25, bMaskDWord, SYN_RF25);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x26, bMaskDWord, SYN_RF26);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x27, bMaskDWord, SYN_RF27);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x2B, bMaskDWord, SYN_RF2B);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, 0x2C, bMaskDWord, SYN_RF2C);
-               }
-               else     // DualMAC_DualPHY
-               {
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x25, bMaskDWord, SYN_RF25);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x26, bMaskDWord, SYN_RF26);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x27, bMaskDWord, SYN_RF27);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x2B, bMaskDWord, SYN_RF2B);
-                       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x2C, bMaskDWord, SYN_RF2C);
-               }
-       }
-       //Turn on CCA
-       ODM_SetBBReg(pDM_Odm, 0xC14, bMaskDWord, RXIQI);
-       //Restore RX idle low power
-       if(RxIdleLowPwr == TRUE)
-               ODM_SetBBReg(pDM_Odm, 0x818, BIT28, 1);
-       
-       psd_cnt++;
-       //gPrint("psd cnt=%d\n", psd_cnt);
-       ODM_RT_TRACE(pDM_Odm,COMP_PSD, DBG_LOUD,("PSD:psd_cnt = %d \n",psd_cnt));
-       if (psd_cnt < ReScan)
-       {
-               ODM_SetTimer(pDM_Odm, &pRX_HP_Table->PSDTimer, Interval);  //ms
-       }
-       else
-                       {       
-               psd_cnt = 0;
-               for(i=0;i<80;i++)
-                       RT_TRACE(       COMP_PSD, DBG_LOUD,("psd_report[%d]=     %d \n", 2402+i, PSD_report[i]));
-                       //DbgPrint("psd_report[%d]=     %d \n", 2402+i, PSD_report[i]);
-
-               GoodChannelDecision(pDM_Odm, PSD_report, PSD_bitmap,RSSI_BT, PSD_bitmap_memory);
-
-                       }
-               }
-
-VOID
-odm_PSD_RXHPCallback(
-       PRT_TIMER               pTimer
-)
-{
-       PADAPTER                Adapter = (PADAPTER)pTimer->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
-       pRXHP_T                 pRX_HP_Table  = &pDM_Odm->DM_RXHP_Table;
-       
-#if DEV_BUS_TYPE==RT_PCI_INTERFACE
-       #if USE_WORKITEM
-       ODM_ScheduleWorkItem(&pRX_HP_Table->PSDTimeWorkitem);
-       #else
-       odm_PSD_RXHP(pDM_Odm);
-       #endif
-#else
-       ODM_ScheduleWorkItem(&pRX_HP_Table->PSDTimeWorkitem);
-#endif
-       
-       }
-
-VOID
-odm_PSD_RXHPWorkitemCallback(
-    IN PVOID            pContext
-    )
-{
-       PADAPTER        pAdapter = (PADAPTER)pContext;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
-       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
-       
-       odm_PSD_RXHP(pDM_Odm);
-}
-
-#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-//Remove PathDiversity related function to odm_PathDiv.c
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN| ODM_CE))
-
-VOID
-odm_PHY_SaveAFERegisters(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      pu4Byte         AFEReg,
-       IN      pu4Byte         AFEBackup,
-       IN      u4Byte          RegisterNum
-       )
-{
-       u4Byte  i;
-       
-       //RT_DISP(FINIT, INIT_IQK, ("Save ADDA parameters.\n"));
-       for( i = 0 ; i < RegisterNum ; i++){
-               AFEBackup[i] = ODM_GetBBReg(pDM_Odm, AFEReg[i], bMaskDWord);
-       }
-}
-
-VOID
-odm_PHY_ReloadAFERegisters(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      pu4Byte         AFEReg,
-       IN      pu4Byte         AFEBackup,
-       IN      u4Byte          RegiesterNum
-       )
-{
-       u4Byte  i;
-
-       //RT_DISP(FINIT, INIT_IQK, ("Reload ADDA power saving parameters !\n"));
-       for(i = 0 ; i < RegiesterNum; i++)
-       {
-       
-               ODM_SetBBReg(pDM_Odm, AFEReg[i], bMaskDWord, AFEBackup[i]);
-       }
-}
-
-//
-// Description:
-//     Set Single/Dual Antenna default setting for products that do not do detection in advance.
-//
-// Added by Joseph, 2012.03.22
-//
-VOID
-ODM_SingleDualAntennaDefaultSetting(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       PADAPTER        pAdapter         =  pDM_Odm->Adapter;
-       u1Byte btAntNum = 2;
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
-       btAntNum=BT_GetPgAntNum(pAdapter);
-#elif (DM_ODM_SUPPORT_TYPE & (ODM_CE))
-#ifdef CONFIG_BT_COEXIST
-       btAntNum = hal_btcoex_GetPgAntNum(pAdapter);
-#endif
-#endif
-
-       // Set default antenna A and B status
-       if(btAntNum == 2)
-       {
-               pDM_SWAT_Table->ANTA_ON=TRUE;
-               pDM_SWAT_Table->ANTB_ON=TRUE;
-               //RT_TRACE(COMP_ANTENNA, DBG_LOUD, ("Dual antenna\n"));
-       }
-#ifdef CONFIG_BT_COEXIST
-       else if(btAntNum == 1)
-       {// Set antenna A as default
-               pDM_SWAT_Table->ANTA_ON=TRUE;
-               pDM_SWAT_Table->ANTB_ON=FALSE;
-               //RT_TRACE(COMP_ANTENNA, DBG_LOUD, ("Single antenna\n"));
-       }
-       else
-       {
-               //RT_ASSERT(FALSE, ("Incorrect antenna number!!\n"));
-       }
-#endif
-}
-
-
-
-//2 8723A ANT DETECT
-//
-// Description:
-//     Implement IQK single tone for RF DPK loopback and BB PSD scanning. 
-//     This function is cooperated with BB team Neil. 
-//
-// Added by Roger, 2011.12.15
-//
-BOOLEAN
-ODM_SingleDualAntennaDetection(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              u1Byte                  mode
-       )
-{
-       PADAPTER        pAdapter         =  pDM_Odm->Adapter;
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       u4Byte          CurrentChannel,RfLoopReg;
-       u1Byte          n;
-       u4Byte          Reg88c, Regc08, Reg874, Regc50, Reg948=0, Regb2c=0, Reg92c=0, AFE_rRx_Wait_CCA=0;
-       u1Byte          initial_gain = 0x5a;
-       u4Byte          PSD_report_tmp;
-       u4Byte          AntA_report = 0x0, AntB_report = 0x0,AntO_report=0x0;
-       BOOLEAN         bResult = TRUE;
-       u4Byte          AFE_Backup[16];
-       u4Byte          AFE_REG_8723A[16] = {
-                                       rRx_Wait_CCA,   rTx_CCK_RFON, 
-                                       rTx_CCK_BBON,   rTx_OFDM_RFON,
-                                       rTx_OFDM_BBON,  rTx_To_Rx,
-                                       rTx_To_Tx,              rRx_CCK, 
-                                       rRx_OFDM,               rRx_Wait_RIFS, 
-                                       rRx_TO_Rx,              rStandby,
-                                       rSleep,                 rPMPD_ANAEN,    
-                                       rFPGA0_XCD_SwitchControl, rBlue_Tooth};
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection()============> \n"));     
-
-       
-       if(!(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C|ODM_RTL8723B)))
-               return bResult;
-
-       // Retrieve antenna detection registry info, added by Roger, 2012.11.27.
-       if(!IS_ANT_DETECT_SUPPORT_SINGLE_TONE(pAdapter))
-               return bResult;
-
-       if(pDM_Odm->SupportICType == ODM_RTL8192C)
-       {
-               //Which path in ADC/DAC is turnned on for PSD: both I/Q
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT10|BIT11, 0x3);
-               //Ageraged number: 8
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT12|BIT13, 0x1);
-               //pts = 128;
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x0);
-       }
-
-       //1 Backup Current RF/BB Settings       
-       
-       CurrentChannel = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, ODM_CHANNEL, bRFRegOffsetMask);
-       RfLoopReg = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x00, bRFRegOffsetMask);
-       if(!(pDM_Odm->SupportICType == ODM_RTL8723B))
-       ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_A);  // change to Antenna A
-#if (RTL8723B_SUPPORT == 1)
-       else
-       {
-               Reg92c = ODM_GetBBReg(pDM_Odm, 0x92c, bMaskDWord);
-               Reg948 = ODM_GetBBReg(pDM_Odm, rS0S1_PathSwitch, bMaskDWord);
-               Regb2c = ODM_GetBBReg(pDM_Odm, AGC_table_select, bMaskDWord);
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, 0x3, 0x1);
-               ODM_SetBBReg(pDM_Odm, rfe_ctrl_anta_src, 0xff, 0x77);
-               ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, 0x3ff, 0x000);
-               ODM_SetBBReg(pDM_Odm, AGC_table_select, BIT31, 0x0);
-       }
-#endif
-       ODM_StallExecution(10);
-       
-       //Store A Path Register 88c, c08, 874, c50
-       Reg88c = ODM_GetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord);
-       Regc08 = ODM_GetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord);
-       Reg874 = ODM_GetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord);
-       Regc50 = ODM_GetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskDWord);  
-       
-       // Store AFE Registers
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       odm_PHY_SaveAFERegisters(pDM_Odm, AFE_REG_8723A, AFE_Backup, 16);       
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               AFE_rRx_Wait_CCA = ODM_GetBBReg(pDM_Odm, rRx_Wait_CCA,bMaskDWord);
-       
-       //Set PSD 128 pts
-       ODM_SetBBReg(pDM_Odm, rFPGA0_PSDFunction, BIT14|BIT15, 0x0);  //128 pts
-       
-       // To SET CH1 to do
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, ODM_CHANNEL, bRFRegOffsetMask, 0x7401);     //Channel 1
-       
-       // AFE all on step
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       {
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_CCK_RFON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_CCK_BBON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_OFDM_RFON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_OFDM_BBON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_To_Rx, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_To_Tx, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_CCK, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_OFDM, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_RIFS, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_TO_Rx, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rStandby, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rSleep, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rPMPD_ANAEN, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_SwitchControl, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rBlue_Tooth, bMaskDWord, 0x6FDB25A4);
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-       {
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, 0x01c00016);
-       }
-
-       // 3 wire Disable
-       ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord, 0xCCF000C0);
-       
-       //BB IQK Setting
-       ODM_SetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord, 0x000800E4);
-       ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, 0x22208000);
-
-       //IQK setting tone@ 4.34Mhz
-       ODM_SetBBReg(pDM_Odm, rTx_IQK_Tone_A, bMaskDWord, 0x10008C1C);
-       ODM_SetBBReg(pDM_Odm, rTx_IQK, bMaskDWord, 0x01007c00); 
-
-       //Page B init
-       ODM_SetBBReg(pDM_Odm, rConfig_AntA, bMaskDWord, 0x00080000);
-       ODM_SetBBReg(pDM_Odm, rConfig_AntA, bMaskDWord, 0x0f600000);
-       ODM_SetBBReg(pDM_Odm, rRx_IQK, bMaskDWord, 0x01004800);
-       ODM_SetBBReg(pDM_Odm, rRx_IQK_Tone_A, bMaskDWord, 0x10008c1f);
-       ODM_SetBBReg(pDM_Odm, rTx_IQK_PI_A, bMaskDWord, 0x82150008);
-       ODM_SetBBReg(pDM_Odm, rRx_IQK_PI_A, bMaskDWord, 0x28150008);
-       ODM_SetBBReg(pDM_Odm, rIQK_AGC_Rsp, bMaskDWord, 0x001028d0);    
-
-       //RF loop Setting
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x0, 0xFFFFF, 0x50008);    
-       
-       //IQK Single tone start
-       ODM_SetBBReg(pDM_Odm, rFPGA0_IQK, bMaskH3Bytes, 0x808000);
-       ODM_SetBBReg(pDM_Odm, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
-       ODM_SetBBReg(pDM_Odm, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-       
-       ODM_StallExecution(10000);
-
-       // PSD report of antenna A
-       PSD_report_tmp=0x0;
-       for (n=0;n<2;n++)
-       {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);        
-               if(PSD_report_tmp >AntA_report)
-                       AntA_report=PSD_report_tmp;
-       }
-
-        // change to Antenna B
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_B); 
-#if (RTL8723B_SUPPORT == 1)
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, 0x3, 0x2);
-#endif
-
-       ODM_StallExecution(10); 
-
-       // PSD report of antenna B
-       PSD_report_tmp=0x0;
-       for (n=0;n<2;n++)
-       {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);        
-               if(PSD_report_tmp > AntB_report)
-                       AntB_report=PSD_report_tmp;
-       }
-
-       // change to open case
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, 0);  // change to Antenna A
-#if (RTL8723B_SUPPORT == 1)
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, 0x3, 0x0);
-#endif
-
-       ODM_StallExecution(10); 
-       
-       // PSD report of open case
-       PSD_report_tmp=0x0;
-       for (n=0;n<2;n++)
-       {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);        
-               if(PSD_report_tmp > AntO_report)
-                       AntO_report=PSD_report_tmp;
-       }
-
-       //Close IQK Single Tone function
-       ODM_SetBBReg(pDM_Odm, rFPGA0_IQK, bMaskH3Bytes, 0x000000);      
-
-       //1 Return to antanna A
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_A);  // change to Antenna A
-#if (RTL8723B_SUPPORT == 1)
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-       {
-               // external DPDT
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, bMaskDWord, Reg92c);
-
-               //internal S0/S1
-               ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, bMaskDWord, Reg948);
-               ODM_SetBBReg(pDM_Odm, AGC_table_select, bMaskDWord, Regb2c);
-       }
-#endif
-       ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord, Reg88c);
-       ODM_SetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord, Regc08);
-       ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, Reg874);
-       ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, 0x7F, 0x40);
-       ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskDWord, Regc50);
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask,CurrentChannel);
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x00, bRFRegOffsetMask,RfLoopReg);
-
-       //Reload AFE Registers
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       odm_PHY_ReloadAFERegisters(pDM_Odm, AFE_REG_8723A, AFE_Backup, 16);     
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, AFE_rRx_Wait_CCA);
-
-       if(pDM_Odm->SupportICType == ODM_RTL8723A)
-       {
-               //2 Test Ant B based on Ant A is ON
-               if(mode==ANTTESTB)
-               {
-                       if(AntA_report >=       100)
-                       {
-                               if(AntB_report > (AntA_report+1))
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));         
-                               }       
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Dual Antenna is A and B\n"));  
-                               }       
-                       }
-                       else
-                       {
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                               pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                               bResult = FALSE;
-                       }
-               }       
-               //2 Test Ant A and B based on DPDT Open
-               else if(mode==ANTTESTALL)
-               {
-                       if((AntO_report >=100) && (AntO_report <=118))
-                       {
-                               if(AntA_report > (AntO_report+1))
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant A is OFF\n"));
-                               }       
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant A is ON\n"));
-                               }
-
-                               if(AntB_report > (AntO_report+2))
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant B is OFF\n"));
-                               }       
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant B is ON\n"));
-                               }
-                               
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_A[%d]= %d \n", 2416, AntA_report));   
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_B[%d]= %d \n", 2416, AntB_report));   
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_O[%d]= %d \n", 2416, AntO_report));
-                               
-                               pDM_Odm->AntDetectedInfo.bAntDetected= TRUE;
-                               pDM_Odm->AntDetectedInfo.dBForAntA = AntA_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntB = AntB_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntO = AntO_report;
-                               
-                               }
-                       else
-                               {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("return FALSE!!\n"));
-                               bResult = FALSE;
-                       }
-               }
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8192C)
-       {
-               if(AntA_report >=       100)
-               {
-                       if(AntB_report > (AntA_report+2))
-                       {
-                               pDM_SWAT_Table->ANTA_ON=FALSE;
-                               pDM_SWAT_Table->ANTB_ON=TRUE;
-                               ODM_SetBBReg(pDM_Odm,  rFPGA0_XA_RFInterfaceOE, 0x300, Antenna_B);
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna B\n"));         
-                       }       
-                       else if(AntA_report > (AntB_report+2))
-                       {
-                               pDM_SWAT_Table->ANTA_ON=TRUE;
-                               pDM_SWAT_Table->ANTB_ON=FALSE;
-                               ODM_SetBBReg(pDM_Odm,  rFPGA0_XA_RFInterfaceOE, 0x300, Antenna_A);
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));
-                       }       
-                       else
-                       {
-                               pDM_SWAT_Table->ANTA_ON=TRUE;
-                               pDM_SWAT_Table->ANTB_ON=TRUE;
-                               RT_TRACE(COMP_ANTENNA, DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Dual Antenna \n"));
-                       }
-               }
-               else
-               {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                       pDM_SWAT_Table->ANTA_ON=TRUE; // Set Antenna A on as default 
-                       pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                       bResult = FALSE;
-               }
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_A[%d]= %d \n", 2416, AntA_report));   
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_B[%d]= %d \n", 2416, AntB_report));   
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_O[%d]= %d \n", 2416, AntO_report));
-               
-               //2 Test Ant B based on Ant A is ON
-               if(mode==ANTTESTB)
-               {
-                       if(AntA_report >=100 && AntA_report <= 116)
-                       {
-                               if(AntB_report >= (AntA_report+4) && AntB_report > 116)
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));         
-                               }       
-                               else if(AntB_report >=100 && AntB_report <= 116)
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Dual Antenna is A and B\n"));  
-                               }
-                               else
-                               {
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                                       pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                                       bResult = FALSE;
-                               }
-                       }
-                       else
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                               pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                               bResult = FALSE;
-                       }
-               }       
-               //2 Test Ant A and B based on DPDT Open
-               else if(mode==ANTTESTALL)
-               {
-                       if((AntA_report >= 100) && (AntB_report >= 100) && (AntA_report <= 120) && (AntB_report <= 120))
-                       {
-                               if((AntA_report - AntB_report < 2) || (AntB_report - AntA_report < 2))
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=TRUE;
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SingleDualAntennaDetection(): Dual Antenna\n"));
-                               }
-                               else if(((AntA_report - AntB_report >= 2) && (AntA_report - AntB_report <= 4)) || 
-                                       ((AntB_report - AntA_report >= 2) && (AntB_report - AntA_report <= 4)))
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=FALSE;
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       bResult = FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                               }
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTA_ON = TRUE;
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));
-                               }
-                               
-                               pDM_Odm->AntDetectedInfo.bAntDetected= TRUE;
-                               pDM_Odm->AntDetectedInfo.dBForAntA = AntA_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntB = AntB_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntO = AntO_report;
-                               
-                       }
-                       else
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("return FALSE!!\n"));
-                               bResult = FALSE;
-                       }
-               }
-       }
-               
-       return bResult;
-
-}
-
-
-#endif   // end odm_CE
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN| ODM_CE))
-
-VOID
-odm_Set_RA_DM_ARFB_by_Noisy(
-       IN      PDM_ODM_T       pDM_Odm
-)
-{
-       //DbgPrint("DM_ARFB ====> \n");
-       if (pDM_Odm->bNoisyState){
-               ODM_Write4Byte(pDM_Odm,0x430,0x00000000);
-               ODM_Write4Byte(pDM_Odm,0x434,0x05040200);
-               //DbgPrint("DM_ARFB ====> Noisy State\n");
-       }
-       else{
-               ODM_Write4Byte(pDM_Odm,0x430,0x02010000);
-               ODM_Write4Byte(pDM_Odm,0x434,0x07050403);
-               //DbgPrint("DM_ARFB ====> Clean State\n");
-       }
-       
-}
-
-VOID
-ODM_UpdateNoisyState(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      BOOLEAN         bNoisyStateFromC2H
-       )
-{
-       //DbgPrint("Get C2H Command! NoisyState=0x%x\n ", bNoisyStateFromC2H);
-       if(pDM_Odm->SupportICType == ODM_RTL8821  || pDM_Odm->SupportICType == ODM_RTL8812  || 
-          pDM_Odm->SupportICType == ODM_RTL8723B || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8188E)
-       {
-               pDM_Odm->bNoisyState = bNoisyStateFromC2H;
-       }
-       odm_Set_RA_DM_ARFB_by_Noisy(pDM_Odm);
-};
-
-u4Byte
-Set_RA_DM_Ratrbitmap_by_Noisy(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      WIRELESS_MODE   WirelessMode,
-       IN      u4Byte                  ratr_bitmap,
-       IN      u1Byte                  rssi_level
-)
-{
-       u4Byte ret_bitmap = ratr_bitmap;
-       switch (WirelessMode)
-       {
-               case WIRELESS_MODE_AC_24G :
-               case WIRELESS_MODE_AC_5G :
-               case WIRELESS_MODE_AC_ONLY:
-                       if (pDM_Odm->bNoisyState){ // in Noisy State
-                               if (rssi_level==1)
-                                       ret_bitmap&=0xfe3f0e08;
-                               else if (rssi_level==2)
-                                       ret_bitmap&=0xff3f8f8c;
-                               else if (rssi_level==3)
-                                       ret_bitmap&=0xffffffcc ;
-                               else
-                                       ret_bitmap&=0xffffffff ;
-                       }
-                       else{                                   // in SNR State
-                               if (rssi_level==1){
-                                       ret_bitmap&=0xfc3e0c08;
-                               }
-                               else if (rssi_level==2){
-                                       ret_bitmap&=0xfe3f0e08;
-                               }
-                               else if (rssi_level==3){
-                                       ret_bitmap&=0xffbfefcc;
-                               }
-                               else{
-                                       ret_bitmap&=0x0fffffff;
-                               }
-                       }
-                       break;
-               case WIRELESS_MODE_B:
-               case WIRELESS_MODE_A:
-               case WIRELESS_MODE_G:
-               case WIRELESS_MODE_N_24G:
-               case WIRELESS_MODE_N_5G:
-                       if (pDM_Odm->bNoisyState){
-                               if (rssi_level==1)
-                                       ret_bitmap&=0x0f0e0c08;
-                               else if (rssi_level==2)
-                                       ret_bitmap&=0x0f8f0e0c;
-                               else if (rssi_level==3)
-                                       ret_bitmap&=0x0fefefcc ;
-                               else
-                                       ret_bitmap&=0xffffffff ;
-                       }
-                       else{
-                               if (rssi_level==1){
-                                       ret_bitmap&=0x0f8f0e08;
-                               }
-                               else if (rssi_level==2){
-                                       ret_bitmap&=0x0fcf8f8c;
-                               }
-                               else if (rssi_level==3){
-                                       ret_bitmap&=0x0fffffcc;
-                               }
-                               else{
-                                       ret_bitmap&=0x0fffffff;
-                               }
-                       }
-                       break;
-               default:
-                       break;
-       }
-       //DbgPrint("DM_RAMask ====> rssi_LV = %d, BITMAP = %x \n", rssi_level, ret_bitmap);
-       return ret_bitmap;
-
-}
-
-
-
-VOID
-ODM_UpdateInitRate(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      u1Byte          Rate
-       )
-{
-       u1Byte                  p = 0;
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("Get C2H Command! Rate=0x%x\n", Rate));
-       
-       if(pDM_Odm->SupportICType == ODM_RTL8821  || pDM_Odm->SupportICType == ODM_RTL8812  || 
-          pDM_Odm->SupportICType == ODM_RTL8723B || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8188E)
-       {
-               pDM_Odm->TxRate = Rate;
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       #if DEV_BUS_TYPE==RT_PCI_INTERFACE
-               #if USE_WORKITEM
-               PlatformScheduleWorkItem(&pDM_Odm->RaRptWorkitem);
-               #else
-               if(pDM_Odm->SupportICType == ODM_RTL8821)
-               {
-                       ODM_TxPwrTrackSetPwr8821A(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8812)
-               {
-                       for (p = ODM_RF_PATH_A; p < MAX_PATH_NUM_8812A; p++)            
-                       {
-                               ODM_TxPwrTrackSetPwr8812A(pDM_Odm, MIX_MODE, p, 0);
-                       }
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               {
-                       ODM_TxPwrTrackSetPwr_8723B(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8192E)
-               {
-                       for (p = ODM_RF_PATH_A; p < MAX_PATH_NUM_8192E; p++)            
-                       {
-                               ODM_TxPwrTrackSetPwr92E(pDM_Odm, MIX_MODE, p, 0);
-                       }
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8188E)
-               {
-                       ODM_TxPwrTrackSetPwr88E(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-               }
-               #endif
-       #else
-               PlatformScheduleWorkItem(&pDM_Odm->RaRptWorkitem);
-       #endif  
-#endif
-       }
-       else
-               return;
-}
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-VOID
-ODM_UpdateInitRateWorkItemCallback(
-    IN PVOID            pContext
-    )
-{
-       PADAPTER        Adapter = (PADAPTER)pContext;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
-
-       u1Byte                  p = 0;  
-
-       if(pDM_Odm->SupportICType == ODM_RTL8821)
-       {
-               ODM_TxPwrTrackSetPwr8821A(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8812)
-       {
-               for (p = ODM_RF_PATH_A; p < MAX_PATH_NUM_8812A; p++)    //DOn't know how to include &c
-               {
-                       ODM_TxPwrTrackSetPwr8812A(pDM_Odm, MIX_MODE, p, 0);
-               }
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-       {
-                       ODM_TxPwrTrackSetPwr_8723B(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)
-       {
-               for (p = ODM_RF_PATH_A; p < MAX_PATH_NUM_8192E; p++)    //DOn't know how to include &c
-               {
-                       ODM_TxPwrTrackSetPwr92E(pDM_Odm, MIX_MODE, p, 0);
-               }
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8188E)
-       {
-                       ODM_TxPwrTrackSetPwr88E(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-       }
-}
-#endif
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
-/* Justin: According to the current RRSI to adjust Response Frame TX power, 2012/11/05 */
-void odm_dtc(PDM_ODM_T pDM_Odm)
-{
-#ifdef CONFIG_DM_RESP_TXAGC
-       #define DTC_BASE            35  /* RSSI higher than this value, start to decade TX power */
-       #define DTC_DWN_BASE       (DTC_BASE-5) /* RSSI lower than this value, start to increase TX power */
-
-       /* RSSI vs TX power step mapping: decade TX power */
-       static const u8 dtc_table_down[]={
-               DTC_BASE,
-               (DTC_BASE+5),
-               (DTC_BASE+10),
-               (DTC_BASE+15),
-               (DTC_BASE+20),
-               (DTC_BASE+25)
-       };
-
-       /* RSSI vs TX power step mapping: increase TX power */
-       static const u8 dtc_table_up[]={
-               DTC_DWN_BASE,
-               (DTC_DWN_BASE-5),
-               (DTC_DWN_BASE-10),
-               (DTC_DWN_BASE-15),
-               (DTC_DWN_BASE-15),
-               (DTC_DWN_BASE-20),
-               (DTC_DWN_BASE-20),
-               (DTC_DWN_BASE-25),
-               (DTC_DWN_BASE-25),
-               (DTC_DWN_BASE-30),
-               (DTC_DWN_BASE-35)
-       };
-
-       u8 i;
-       u8 dtc_steps=0;
-       u8 sign;
-       u8 resp_txagc=0;
-
-       #if 0
-       /* As DIG is disabled, DTC is also disable */
-       if(!(pDM_Odm->SupportAbility & ODM_XXXXXX))
-               return;
-       #endif
-
-       if (DTC_BASE < pDM_Odm->RSSI_Min) {
-               /* need to decade the CTS TX power */
-               sign = 1;
-               for (i=0;i<ARRAY_SIZE(dtc_table_down);i++)
-               {
-                       if ((dtc_table_down[i] >= pDM_Odm->RSSI_Min) || (dtc_steps >= 6))
-                               break;
-                       else
-                               dtc_steps++;
-               }
-       }
-#if 0
-       else if (DTC_DWN_BASE > pDM_Odm->RSSI_Min)
-       {
-               /* needs to increase the CTS TX power */
-               sign = 0;
-               dtc_steps = 1;
-               for (i=0;i<ARRAY_SIZE(dtc_table_up);i++)
-               {
-                       if ((dtc_table_up[i] <= pDM_Odm->RSSI_Min) || (dtc_steps>=10))
-                               break;
-                       else
-                               dtc_steps++;
-               }
-       }
-#endif
-       else
-       {
-               sign = 0;
-               dtc_steps = 0;
-       }
-
-       resp_txagc = dtc_steps | (sign << 4);
-       resp_txagc = resp_txagc | (resp_txagc << 5);
-       ODM_Write1Byte(pDM_Odm, 0x06d9, resp_txagc);
-
-       DBG_871X("%s RSSI_Min:%u, set RESP_TXAGC to %s %u\n", 
-               __func__, pDM_Odm->RSSI_Min, sign?"minus":"plus", dtc_steps);
-#endif /* CONFIG_RESP_TXAGC_ADJUST */
-}
-
-#endif /* #if (DM_ODM_SUPPORT_TYPE == ODM_CE) */
-
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm.h
deleted file mode 100755 (executable)
index 3144724..0000000
+++ /dev/null
@@ -1,2061 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-\r
-#ifndef        __HALDMOUTSRC_H__\r
-#define __HALDMOUTSRC_H__\r
-\r
-\r
-#include "odm_EdcaTurboCheck.h"\r
-#include "odm_DIG.h"\r
-#include "odm_PathDiv.h"\r
-#include "odm_RaInfo.h"\r
-#include "odm_DynamicBBPowerSaving.h"\r
-#include "odm_DynamicTxPower.h"\r
-#include "odm_CfoTracking.h"\r
-#include "odm_NoiseMonitor.h"\r
-\r
-//============================================================\r
-// Definition \r
-//============================================================\r
-//\r
-// 2011/09/22 MH Define all team supprt ability.\r
-//\r
-\r
-//\r
-// 2011/09/22 MH Define for all teams. Please Define the constan in your precomp header.\r
-//\r
-//#define              DM_ODM_SUPPORT_AP                       0\r
-//#define              DM_ODM_SUPPORT_ADSL                     0\r
-//#define              DM_ODM_SUPPORT_CE                       0\r
-//#define              DM_ODM_SUPPORT_MP                       1\r
-\r
-//\r
-// 2011/09/28 MH Define ODM SW team support flag.\r
-//\r
-\r
-\r
-\r
-//\r
-// Antenna Switch Relative Definition.\r
-//\r
-\r
-//\r
-// 20100503 Joseph:\r
-// Add new function SwAntDivCheck8192C().\r
-// This is the main function of Antenna diversity function before link.\r
-// Mainly, it just retains last scan result and scan again.\r
-// After that, it compares the scan result to see which one gets better RSSI.\r
-// It selects antenna with better receiving power and returns better scan result.\r
-//\r
-#define        TP_MODE         0\r
-#define        RSSI_MODE               1\r
-#define        TRAFFIC_LOW     0\r
-#define        TRAFFIC_HIGH    1\r
-\r
-\r
-//============================================================\r
-//3 Tx Power Tracking\r
-//3============================================================\r
-#define                DPK_DELTA_MAPPING_NUM   13\r
-#define                index_mapping_HP_NUM    15      \r
-#define        OFDM_TABLE_SIZE         43\r
-#define        CCK_TABLE_SIZE                  33\r
-#define TXSCALE_TABLE_SIZE             37\r
-#define TXPWR_TRACK_TABLE_SIZE         30\r
-#define DELTA_SWINGIDX_SIZE     30\r
-#define BAND_NUM                               4\r
-\r
-//============================================================\r
-//3 PSD Handler\r
-//3============================================================\r
-\r
-#define        AFH_PSD         1       //0:normal PSD scan, 1: only do 20 pts PSD\r
-#define        MODE_40M                0       //0:20M, 1:40M\r
-#define        PSD_TH2         3  \r
-#define        PSD_CHMIN               20   // Minimum channel number for BT AFH\r
-#define        SIR_STEP_SIZE   3\r
-#define   Smooth_Size_1        5\r
-#define        Smooth_TH_1     3\r
-#define   Smooth_Size_2        10\r
-#define        Smooth_TH_2     4\r
-#define   Smooth_Size_3        20\r
-#define        Smooth_TH_3     4\r
-#define   Smooth_Step_Size 5\r
-#define        Adaptive_SIR    1\r
-#if(RTL8723_FPGA_VERIFICATION == 1)\r
-#define        PSD_RESCAN              1\r
-#else\r
-#define        PSD_RESCAN              4\r
-#endif\r
-#define        PSD_SCAN_INTERVAL       700 //ms\r
-\r
-\r
-\r
-//8723A High Power IGI Setting\r
-#define                DM_DIG_HIGH_PWR_IGI_LOWER_BOUND 0x22\r
-#define                DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND 0x28\r
-#define                DM_DIG_HIGH_PWR_THRESHOLD       0x3a\r
-#define                DM_DIG_LOW_PWR_THRESHOLD        0x14\r
-\r
-//ANT Test\r
-#define                ANTTESTALL              0x00            //Ant A or B will be Testing   \r
-#define                ANTTESTA                0x01            //Ant A will be Testing \r
-#define                ANTTESTB                0x02            //Ant B will be testing\r
-\r
-//for 8723A Ant Definition--2012--06--07 due to different IC may be different ANT define\r
-#define                MAIN_ANT                1               //Ant A or Ant Main\r
-#define                AUX_ANT         2               //AntB or Ant Aux\r
-#define                MAX_ANT         3               // 3 for AP using\r
-\r
-\r
-//Antenna Diversity Type\r
-#define        SW_ANTDIV       0\r
-#define        HW_ANTDIV       1\r
-//============================================================\r
-// structure and define\r
-//============================================================\r
-\r
-//\r
-// 2011/09/20 MH Add for AP/ADSLpseudo DM structuer requirement.\r
-// We need to remove to other position???\r
-//\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
-typedef                struct rtl8192cd_priv {\r
-       u1Byte          temp;\r
-\r
-}rtl8192cd_priv, *prtl8192cd_priv;\r
-#endif\r
-\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-typedef                struct _ADAPTER{\r
-       u1Byte          temp;\r
-       #ifdef AP_BUILD_WORKAROUND\r
-       HAL_DATA_TYPE*          temp2;\r
-       prtl8192cd_priv         priv;\r
-       #endif\r
-}ADAPTER, *PADAPTER;\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-\r
-typedef                struct _WLAN_STA{\r
-       u1Byte          temp;\r
-} WLAN_STA, *PRT_WLAN_STA;\r
-\r
-#endif\r
-\r
-//Remove DIG by Yuchen\r
-\r
-//Remoce BB power saving by Yuchn\r
-\r
-//Remove DIG by yuchen\r
-\r
-typedef struct _Dynamic_Primary_CCA{\r
-       u1Byte          PriCCA_flag;\r
-       u1Byte          intf_flag;\r
-       u1Byte          intf_type;  \r
-       u1Byte          DupRTS_flag;\r
-       u1Byte          Monitor_flag;\r
-       u1Byte          CH_offset;\r
-       u1Byte                  MF_state;\r
-}Pri_CCA_T, *pPri_CCA_T;\r
-\r
-//Remove RA_T,*pRA_T by RS_James\r
-\r
-typedef struct _RX_High_Power_\r
-{\r
-       u1Byte          RXHP_flag;\r
-       u1Byte          PSD_func_trigger;\r
-       u1Byte          PSD_bitmap_RXHP[80];\r
-       u1Byte          Pre_IGI;\r
-       u1Byte          Cur_IGI;\r
-       u1Byte          Pre_pw_th;\r
-       u1Byte          Cur_pw_th;\r
-       BOOLEAN         First_time_enter;\r
-       BOOLEAN         RXHP_enable;\r
-       u1Byte          TP_Mode;\r
-       RT_TIMER        PSDTimer;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)   \r
-       #if USE_WORKITEM\r
-       RT_WORK_ITEM            PSDTimeWorkitem;\r
-       #endif\r
-#endif\r
-\r
-}RXHP_T, *pRXHP_T;\r
-       \r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_CE))\r
-#define ASSOCIATE_ENTRY_NUM                                    32 // Max size of AsocEntry[].\r
-#define        ODM_ASSOCIATE_ENTRY_NUM                         ASSOCIATE_ENTRY_NUM\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-#define ASSOCIATE_ENTRY_NUM                                    NUM_STAT\r
-#define        ODM_ASSOCIATE_ENTRY_NUM                         ASSOCIATE_ENTRY_NUM+1\r
-\r
-#else\r
-//\r
-// 2012/01/12 MH Revise for compatiable with other SW team. \r
-// 0 is for STA 1-n is for AP clients.\r
-//\r
-#define ODM_ASSOCIATE_ENTRY_NUM                                ASSOCIATE_ENTRY_NUM+1// Default port only one\r
-#endif\r
-\r
-//#ifdef CONFIG_ANTENNA_DIVERSITY\r
-// This indicates two different the steps. \r
-// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.\r
-// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK\r
-// with original RSSI to determine if it is necessary to switch antenna.\r
-#define SWAW_STEP_PEAK         0\r
-#define SWAW_STEP_DETERMINE    1\r
-\r
-#define        TP_MODE         0\r
-#define        RSSI_MODE               1\r
-#define        TRAFFIC_LOW     0\r
-#define        TRAFFIC_HIGH    1\r
-#define        TRAFFIC_UltraLOW        2\r
-\r
-typedef struct _SW_Antenna_Switch_\r
-{\r
-       u1Byte          Double_chk_flag;\r
-       u1Byte          try_flag;\r
-       s4Byte          PreRSSI;\r
-       u1Byte          CurAntenna;\r
-       u1Byte          PreAntenna;\r
-       u1Byte          RSSI_Trying;\r
-       u1Byte          TestMode;\r
-       u1Byte          bTriggerAntennaSwitch;\r
-       u1Byte          SelectAntennaMap;\r
-       u1Byte          RSSI_target;    \r
-       u1Byte          reset_idx;\r
-\r
-       // Before link Antenna Switch check\r
-       u1Byte          SWAS_NoLink_State;\r
-       u4Byte          SWAS_NoLink_BK_Reg860;\r
-       u4Byte          SWAS_NoLink_BK_Reg92c;\r
-       BOOLEAN         ANTA_ON;        //To indicate Ant A is or not\r
-       BOOLEAN         ANTB_ON;        //To indicate Ant B is on or not\r
-       u1Byte          Ant5G;\r
-       u1Byte          Ant2G;\r
-\r
-       s4Byte          RSSI_sum_A;\r
-       s4Byte          RSSI_sum_B;\r
-       s4Byte          RSSI_cnt_A;\r
-       s4Byte          RSSI_cnt_B;\r
-\r
-       u8Byte          lastTxOkCnt;\r
-       u8Byte          lastRxOkCnt;\r
-       u8Byte          TXByteCnt_A;\r
-       u8Byte          TXByteCnt_B;\r
-       u8Byte          RXByteCnt_A;\r
-       u8Byte          RXByteCnt_B;\r
-       u1Byte          TrafficLoad;\r
-       u1Byte          Train_time;\r
-       u1Byte          Train_time_flag;\r
-       RT_TIMER        SwAntennaSwitchTimer;\r
-       RT_TIMER        SwAntennaSwitchTimer_8723B;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)   \r
-       #if USE_WORKITEM\r
-       RT_WORK_ITEM                    SwAntennaSwitchWorkitem;\r
-       RT_WORK_ITEM                    SwAntennaSwitchWorkitem_8723B;\r
-       #endif\r
-#endif\r
-/* CE Platform use\r
-#ifdef CONFIG_SW_ANTENNA_DIVERSITY\r
-       _timer SwAntennaSwitchTimer; \r
-       u8Byte lastTxOkCnt;\r
-       u8Byte lastRxOkCnt;\r
-       u8Byte TXByteCnt_A;\r
-       u8Byte TXByteCnt_B;\r
-       u8Byte RXByteCnt_A;\r
-       u8Byte RXByteCnt_B;\r
-       u1Byte DoubleComfirm;\r
-       u1Byte TrafficLoad;\r
-       //SW Antenna Switch\r
-\r
-\r
-#endif\r
-*/\r
-#ifdef CONFIG_HW_ANTENNA_DIVERSITY\r
-       //Hybrid Antenna Diversity\r
-       u4Byte          CCK_Ant1_Cnt[ASSOCIATE_ENTRY_NUM+1];\r
-       u4Byte          CCK_Ant2_Cnt[ASSOCIATE_ENTRY_NUM+1];\r
-       u4Byte          OFDM_Ant1_Cnt[ASSOCIATE_ENTRY_NUM+1];\r
-       u4Byte          OFDM_Ant2_Cnt[ASSOCIATE_ENTRY_NUM+1];\r
-       u4Byte          RSSI_Ant1_Sum[ASSOCIATE_ENTRY_NUM+1];\r
-       u4Byte          RSSI_Ant2_Sum[ASSOCIATE_ENTRY_NUM+1];\r
-       u1Byte          TxAnt[ASSOCIATE_ENTRY_NUM+1];\r
-       u1Byte          TargetSTA;\r
-       u1Byte          antsel;\r
-       u1Byte          RxIdleAnt;\r
-\r
-#endif\r
-       \r
-}SWAT_T, *pSWAT_T;\r
-//#endif\r
-\r
-//Remove Edca by YuChen\r
-\r
-//Remove ODM_RATE_ADAPTIVE by RS_James\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-\r
-\r
-#ifdef ADSL_AP_BUILD_WORKAROUND\r
-#define MAX_TOLERANCE                  5\r
-#define IQK_DELAY_TIME                 1               //ms\r
-#endif\r
-\r
-//\r
-// Indicate different AP vendor for IOT issue.\r
-//\r
-typedef enum _HT_IOT_PEER\r
-{\r
-       HT_IOT_PEER_UNKNOWN                     = 0,\r
-       HT_IOT_PEER_REALTEK                     = 1,\r
-       HT_IOT_PEER_REALTEK_92SE                = 2,\r
-       HT_IOT_PEER_BROADCOM            = 3,\r
-       HT_IOT_PEER_RALINK                      = 4,\r
-       HT_IOT_PEER_ATHEROS                     = 5,\r
-       HT_IOT_PEER_CISCO                               = 6,\r
-       HT_IOT_PEER_MERU                                = 7,    \r
-       HT_IOT_PEER_MARVELL                     = 8,\r
-       HT_IOT_PEER_REALTEK_SOFTAP      = 9,// peer is RealTek SOFT_AP, by Bohn, 2009.12.17\r
-       HT_IOT_PEER_SELF_SOFTAP                 = 10, // Self is SoftAP\r
-       HT_IOT_PEER_AIRGO                               = 11,\r
-       HT_IOT_PEER_INTEL                               = 12, \r
-       HT_IOT_PEER_RTK_APCLIENT                = 13, \r
-       HT_IOT_PEER_REALTEK_81XX                = 14,   \r
-       HT_IOT_PEER_REALTEK_WOW                 = 15,   \r
-       HT_IOT_PEER_MAX                                 = 16\r
-}HT_IOT_PEER_E, *PHTIOT_PEER_E;\r
-#endif//#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-\r
-\r
-\r
-#define IQK_MAC_REG_NUM                4\r
-#define IQK_ADDA_REG_NUM               16\r
-#define IQK_BB_REG_NUM_MAX     10\r
-#if (RTL8192D_SUPPORT==1) \r
-#define IQK_BB_REG_NUM         10\r
-#else\r
-#define IQK_BB_REG_NUM         9\r
-#endif\r
-#define HP_THERMAL_NUM         8\r
-\r
-#define AVG_THERMAL_NUM                8\r
-#define IQK_Matrix_REG_NUM     8\r
-#define IQK_Matrix_Settings_NUM        14+24+21 // Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G\r
-\r
-#define                DM_Type_ByFW                    0\r
-#define                DM_Type_ByDriver                1\r
-\r
-//\r
-// Declare for common info\r
-//\r
-#define MAX_PATH_NUM_92CS              2\r
-#define MAX_PATH_NUM_8188E             1\r
-#define MAX_PATH_NUM_8192E             2\r
-#define MAX_PATH_NUM_8723B             1\r
-#define MAX_PATH_NUM_8812A             2\r
-#define MAX_PATH_NUM_8821A             1\r
-\r
-#define IQK_THRESHOLD                  8\r
-\r
-typedef struct _ODM_Phy_Status_Info_\r
-{\r
-       //\r
-       // Be care, if you want to add any element please insert between \r
-       // RxPWDBAll & SignalStrength.\r
-       //\r
-#if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN))\r
-       u4Byte          RxPWDBAll;      \r
-#else\r
-       u1Byte          RxPWDBAll;      \r
-#endif\r
-\r
-       u1Byte          SignalQuality;                  // in 0-100 index. \r
-       s1Byte          RxMIMOSignalQuality[4]; //per-path's EVM\r
-       u1Byte          RxMIMOEVMdbm[4];                //per-path's EVM dbm\r
-\r
-       u1Byte          RxMIMOSignalStrength[4];// in 0~100 index\r
-\r
-       u2Byte          Cfo_short[4];                   // per-path's Cfo_short\r
-       u2Byte          Cfo_tail[4];                    // per-path's Cfo_tail\r
-       \r
-#if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
-       s1Byte          RxPower;                                // in dBm Translate from PWdB\r
-       s1Byte          RecvSignalPower;                // Real power in dBm for this packet, no beautification and aggregation. Keep this raw info to be used for the other procedures.\r
-       u1Byte          BTRxRSSIPercentage;     \r
-       u1Byte          SignalStrength;                 // in 0-100 index.\r
\r
-       s1Byte          RxPwr[4];                               //per-path's pwdb\r
-#endif\r
-       u1Byte          RxSNR[4];                               //per-path's SNR        \r
-       u1Byte          BandWidth;\r
-       u1Byte          btCoexPwrAdjust;\r
-}ODM_PHY_INFO_T,*PODM_PHY_INFO_T;\r
-\r
-\r
-typedef struct _ODM_Per_Pkt_Info_\r
-{\r
-       //u1Byte                Rate;   \r
-       u1Byte          DataRate;\r
-       u1Byte          StationID;\r
-       BOOLEAN         bPacketMatchBSSID;\r
-       BOOLEAN         bPacketToSelf;\r
-       BOOLEAN         bPacketBeacon;\r
-}ODM_PACKET_INFO_T,*PODM_PACKET_INFO_T;\r
-\r
-\r
-typedef struct _ODM_Phy_Dbg_Info_\r
-{\r
-       //ODM Write,debug info\r
-       s1Byte          RxSNRdB[4];\r
-       u4Byte          NumQryPhyStatus;\r
-       u4Byte          NumQryPhyStatusCCK;\r
-       u4Byte          NumQryPhyStatusOFDM;\r
-       u1Byte          NumQryBeaconPkt;\r
-       //Others\r
-       s4Byte          RxEVM[4];       \r
-       \r
-}ODM_PHY_DBG_INFO_T;\r
-\r
-\r
-typedef struct _ODM_Mac_Status_Info_\r
-{\r
-       u1Byte  test;\r
-       \r
-}ODM_MAC_INFO;\r
-\r
-\r
-typedef enum tag_Dynamic_ODM_Support_Ability_Type\r
-{\r
-       // BB Team\r
-       ODM_DIG                         = 0x00000001,\r
-       ODM_HIGH_POWER          = 0x00000002,\r
-       ODM_CCK_CCA_TH          = 0x00000004,\r
-       ODM_FA_STATISTICS               = 0x00000008,\r
-       ODM_RAMASK                      = 0x00000010,\r
-       ODM_RSSI_MONITOR                = 0x00000020,\r
-       ODM_SW_ANTDIV           = 0x00000040,\r
-       ODM_HW_ANTDIV           = 0x00000080,\r
-       ODM_BB_PWRSV                    = 0x00000100,\r
-       ODM_2TPATHDIV                   = 0x00000200,\r
-       ODM_1TPATHDIV                   = 0x00000400,\r
-       ODM_PSD2AFH                     = 0x00000800\r
-}ODM_Ability_E;\r
-\r
-//\r
-// 2011/20/20 MH For MP driver RT_WLAN_STA =  STA_INFO_T\r
-// Please declare below ODM relative info in your STA info structure.\r
-//\r
-#if 1\r
-typedef                struct _ODM_STA_INFO{\r
-       // Driver Write\r
-       BOOLEAN         bUsed;                          // record the sta status link or not?\r
-       //u1Byte                WirelessMode;           // \r
-       u1Byte          IOTPeer;                        // Enum value.  HT_IOT_PEER_E\r
-\r
-       // ODM Write\r
-       //1 PHY_STATUS_INFO\r
-       u1Byte          RSSI_Path[4];           // \r
-       u1Byte          RSSI_Ave;\r
-       u1Byte          RXEVM[4];\r
-       u1Byte          RXSNR[4];\r
-\r
-       // ODM Write\r
-       //1 TX_INFO (may changed by IC)\r
-       //TX_INFO_T             pTxInfo;                                // Define in IC folder. Move lower layer.\r
-#if 0\r
-       u1Byte          ANTSEL_A;                       //in Jagar: 4bit; others: 2bit\r
-       u1Byte          ANTSEL_B;                       //in Jagar: 4bit; others: 2bit\r
-       u1Byte          ANTSEL_C;                       //only in Jagar: 4bit\r
-       u1Byte          ANTSEL_D;                       //only in Jagar: 4bit\r
-       u1Byte          TX_ANTL;                        //not in Jagar: 2bit\r
-       u1Byte          TX_ANT_HT;                      //not in Jagar: 2bit\r
-       u1Byte          TX_ANT_CCK;                     //not in Jagar: 2bit\r
-       u1Byte          TXAGC_A;                        //not in Jagar: 4bit\r
-       u1Byte          TXAGC_B;                        //not in Jagar: 4bit\r
-       u1Byte          TXPWR_OFFSET;           //only in Jagar: 3bit\r
-       u1Byte          TX_ANT;                         //only in Jagar: 4bit for TX_ANTL/TX_ANTHT/TX_ANT_CCK\r
-#endif\r
-\r
-       //\r
-       //      Please use compile flag to disabe the strcutrue for other IC except 88E.\r
-       //      Move To lower layer.\r
-       //\r
-       // ODM Write Wilson will handle this part(said by Luke.Lee)\r
-       //TX_RPT_T              pTxRpt;                         // Define in IC folder. Move lower layer.\r
-#if 0  \r
-       //1 For 88E RA (don't redefine the naming)\r
-       u1Byte          rate_id;\r
-       u1Byte          rate_SGI;\r
-       u1Byte          rssi_sta_ra;\v\r
-       u1Byte          SGI_enable;\r
-       u1Byte          Decision_rate;\r
-       u1Byte          Pre_rate;\r
-       u1Byte          Active;\r
-\r
-       // Driver write Wilson handle.\r
-       //1 TX_RPT (don't redefine the naming)\r
-       u2Byte          RTY[4];                         // ???\r
-       u2Byte          TOTAL;                          // ???\r
-       u2Byte          DROP;                           // ???\r
-       //\r
-       // Please use compile flag to disabe the strcutrue for other IC except 88E.\r
-       //\r
-#endif\r
-\r
-}ODM_STA_INFO_T, *PODM_STA_INFO_T;\r
-#endif\r
-\r
-//\r
-// 2011/10/20 MH Define Common info enum for all team.\r
-//\r
-typedef enum _ODM_Common_Info_Definition\r
-{\r
-//-------------REMOVED CASE-----------//\r
-       //ODM_CMNINFO_CCK_HP,\r
-       //ODM_CMNINFO_RFPATH_ENABLE,            // Define as ODM write???       \r
-       //ODM_CMNINFO_BT_COEXIST,                               // ODM_BT_COEXIST_E\r
-       //ODM_CMNINFO_OP_MODE,                          // ODM_OPERATION_MODE_E\r
-//-------------REMOVED CASE-----------//\r
-\r
-       //\r
-       // Fixed value:\r
-       //\r
-\r
-       //-----------HOOK BEFORE REG INIT-----------//\r
-       ODM_CMNINFO_PLATFORM = 0,\r
-       ODM_CMNINFO_ABILITY,                                    // ODM_ABILITY_E\r
-       ODM_CMNINFO_INTERFACE,                          // ODM_INTERFACE_E\r
-       ODM_CMNINFO_MP_TEST_CHIP,\r
-       ODM_CMNINFO_IC_TYPE,                                    // ODM_IC_TYPE_E\r
-       ODM_CMNINFO_CUT_VER,                                    // ODM_CUT_VERSION_E\r
-       ODM_CMNINFO_FAB_VER,                                    // ODM_FAB_E\r
-       ODM_CMNINFO_RF_TYPE,                                    // ODM_RF_PATH_E or ODM_RF_TYPE_E?\r
-       ODM_CMNINFO_RFE_TYPE, \r
-       ODM_CMNINFO_BOARD_TYPE,                         // ODM_BOARD_TYPE_E\r
-       ODM_CMNINFO_PACKAGE_TYPE,\r
-       ODM_CMNINFO_EXT_LNA,                                    // TRUE\r
-       ODM_CMNINFO_5G_EXT_LNA, \r
-       ODM_CMNINFO_EXT_PA,\r
-       ODM_CMNINFO_5G_EXT_PA,\r
-       ODM_CMNINFO_GPA,\r
-       ODM_CMNINFO_APA,\r
-       ODM_CMNINFO_GLNA,\r
-       ODM_CMNINFO_ALNA,\r
-       ODM_CMNINFO_EXT_TRSW,\r
-       ODM_CMNINFO_PATCH_ID,                           //CUSTOMER ID\r
-       ODM_CMNINFO_BINHCT_TEST,\r
-       ODM_CMNINFO_BWIFI_TEST,\r
-       ODM_CMNINFO_SMART_CONCURRENT,\r
-       ODM_CMNINFO_DOMAIN_CODE_2G,\r
-       ODM_CMNINFO_DOMAIN_CODE_5G,\r
-       //-----------HOOK BEFORE REG INIT-----------//  \r
-\r
-\r
-       //\r
-       // Dynamic value:\r
-       //\r
-//--------- POINTER REFERENCE-----------//\r
-       ODM_CMNINFO_MAC_PHY_MODE,                       // ODM_MAC_PHY_MODE_E\r
-       ODM_CMNINFO_TX_UNI,\r
-       ODM_CMNINFO_RX_UNI,\r
-       ODM_CMNINFO_WM_MODE,                            // ODM_WIRELESS_MODE_E\r
-       ODM_CMNINFO_BAND,                                       // ODM_BAND_TYPE_E\r
-       ODM_CMNINFO_SEC_CHNL_OFFSET,            // ODM_SEC_CHNL_OFFSET_E\r
-       ODM_CMNINFO_SEC_MODE,                           // ODM_SECURITY_E\r
-       ODM_CMNINFO_BW,                                         // ODM_BW_E\r
-       ODM_CMNINFO_CHNL,\r
-       ODM_CMNINFO_FORCED_RATE,\r
-       \r
-       ODM_CMNINFO_DMSP_GET_VALUE,\r
-       ODM_CMNINFO_BUDDY_ADAPTOR,\r
-       ODM_CMNINFO_DMSP_IS_MASTER,\r
-       ODM_CMNINFO_SCAN,\r
-       ODM_CMNINFO_POWER_SAVING,\r
-       ODM_CMNINFO_ONE_PATH_CCA,                       // ODM_CCA_PATH_E\r
-       ODM_CMNINFO_DRV_STOP,\r
-       ODM_CMNINFO_PNP_IN,\r
-       ODM_CMNINFO_INIT_ON,\r
-       ODM_CMNINFO_ANT_TEST,\r
-       ODM_CMNINFO_NET_CLOSED,\r
-       ODM_CMNINFO_MP_MODE,\r
-       //ODM_CMNINFO_RTSTA_AID,                                // For win driver only?\r
-       ODM_CMNINFO_FORCED_IGI_LB,\r
-//--------- POINTER REFERENCE-----------//\r
-\r
-//------------CALL BY VALUE-------------//\r
-       ODM_CMNINFO_WIFI_DIRECT,\r
-       ODM_CMNINFO_WIFI_DISPLAY,\r
-       ODM_CMNINFO_LINK_IN_PROGRESS,                   \r
-       ODM_CMNINFO_LINK,\r
-       ODM_CMNINFO_STATION_STATE,\r
-       ODM_CMNINFO_RSSI_MIN,\r
-       ODM_CMNINFO_DBG_COMP,                           // u8Byte\r
-       ODM_CMNINFO_DBG_LEVEL,                          // u4Byte\r
-       ODM_CMNINFO_RA_THRESHOLD_HIGH,          // u1Byte\r
-       ODM_CMNINFO_RA_THRESHOLD_LOW,           // u1Byte\r
-       ODM_CMNINFO_RF_ANTENNA_TYPE,            // u1Byte\r
-       ODM_CMNINFO_BT_ENABLED,\r
-       ODM_CMNINFO_BT_HS_CONNECT_PROCESS,\r
-       ODM_CMNINFO_BT_HS_RSSI,\r
-       ODM_CMNINFO_BT_OPERATION,\r
-       ODM_CMNINFO_BT_LIMITED_DIG,                                     //Need to Limited Dig or not\r
-       ODM_CMNINFO_BT_DISABLE_EDCA,\r
-//------------CALL BY VALUE-------------//\r
-\r
-       //\r
-       // Dynamic ptr array hook itms.\r
-       //\r
-       ODM_CMNINFO_STA_STATUS,\r
-       ODM_CMNINFO_PHY_STATUS,\r
-       ODM_CMNINFO_MAC_STATUS,\r
-       \r
-       ODM_CMNINFO_MAX,\r
-\r
-\r
-}ODM_CMNINFO_E;\r
-\r
-//\r
-// 2011/10/20 MH Define ODM support ability.  ODM_CMNINFO_ABILITY\r
-//\r
-typedef enum _ODM_Support_Ability_Definition\r
-{\r
-       //\r
-       // BB ODM section BIT 0-15\r
-       //\r
-       ODM_BB_DIG                                      = BIT0,\r
-       ODM_BB_RA_MASK                          = BIT1,\r
-       ODM_BB_DYNAMIC_TXPWR            = BIT2,\r
-       ODM_BB_FA_CNT                                   = BIT3,\r
-       ODM_BB_RSSI_MONITOR                     = BIT4,\r
-       ODM_BB_CCK_PD                                   = BIT5,\r
-       ODM_BB_ANT_DIV                          = BIT6,\r
-       ODM_BB_PWR_SAVE                         = BIT7,\r
-       ODM_BB_PWR_TRAIN                                = BIT8,\r
-       ODM_BB_RATE_ADAPTIVE                    = BIT9,\r
-       ODM_BB_PATH_DIV                         = BIT10,\r
-       ODM_BB_PSD                                      = BIT11,\r
-       ODM_BB_RXHP                                     = BIT12,\r
-       ODM_BB_ADAPTIVITY                               = BIT13,\r
-       ODM_BB_CFO_TRACKING                     = BIT14,\r
-       \r
-       //\r
-       // MAC DM section BIT 16-23\r
-       //\r
-       ODM_MAC_EDCA_TURBO                      = BIT16,\r
-       ODM_MAC_EARLY_MODE                      = BIT17,\r
-       \r
-       //\r
-       // RF ODM section BIT 24-31\r
-       //\r
-       ODM_RF_TX_PWR_TRACK                     = BIT24,\r
-       ODM_RF_RX_GAIN_TRACK                    = BIT25,\r
-       ODM_RF_CALIBRATION                              = BIT26,\r
-       \r
-}ODM_ABILITY_E;\r
-\r
-//     ODM_CMNINFO_INTERFACE\r
-typedef enum tag_ODM_Support_Interface_Definition\r
-{\r
-       ODM_ITRF_PCIE   =       0x1,\r
-       ODM_ITRF_USB    =       0x2,\r
-       ODM_ITRF_SDIO   =       0x4,\r
-       ODM_ITRF_ALL    =       0x7,\r
-}ODM_INTERFACE_E;\r
-\r
-// ODM_CMNINFO_IC_TYPE\r
-typedef enum tag_ODM_Support_IC_Type_Definition\r
-{\r
-       ODM_RTL8192S    =       BIT0,\r
-       ODM_RTL8192C    =       BIT1,\r
-       ODM_RTL8192D    =       BIT2,\r
-       ODM_RTL8723A    =       BIT3,\r
-       ODM_RTL8188E    =       BIT4,\r
-       ODM_RTL8812     =       BIT5,\r
-       ODM_RTL8821     =       BIT6,\r
-       ODM_RTL8192E    =       BIT7,   \r
-       ODM_RTL8723B    =       BIT8,\r
-       ODM_RTL8814A    =       BIT9,   \r
-       ODM_RTL8881A    =       BIT10,\r
-       ODM_RTL8821B    =       BIT11\r
-}ODM_IC_TYPE_E;\r
-\r
-#define ODM_IC_11N_SERIES              (ODM_RTL8192S|ODM_RTL8192C|ODM_RTL8192D|ODM_RTL8723A|ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B)\r
-#define ODM_IC_11AC_SERIES             (ODM_RTL8812|ODM_RTL8821|ODM_RTL8814A|ODM_RTL8881A)\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-#ifdef RTK_AC_SUPPORT\r
-#define ODM_IC_11AC_SERIES_SUPPORT             1\r
-#else\r
-#define ODM_IC_11AC_SERIES_SUPPORT             0\r
-#endif\r
-#else\r
-#define ODM_IC_11AC_SERIES_SUPPORT             1\r
-#endif\r
-\r
-//ODM_CMNINFO_CUT_VER\r
-typedef enum tag_ODM_Cut_Version_Definition\r
-{\r
-       ODM_CUT_A               =       0,\r
-       ODM_CUT_B               =       1,\r
-       ODM_CUT_C               =       2,\r
-       ODM_CUT_D               =       3,\r
-       ODM_CUT_E               =       4,\r
-       ODM_CUT_F               =       5,\r
-\r
-       ODM_CUT_I               =       8,\r
-       ODM_CUT_TEST    =       15,\r
-}ODM_CUT_VERSION_E;\r
-\r
-// ODM_CMNINFO_FAB_VER\r
-typedef enum tag_ODM_Fab_Version_Definition\r
-{\r
-       ODM_TSMC        =       0,\r
-       ODM_UMC         =       1,\r
-}ODM_FAB_E;\r
-\r
-// ODM_CMNINFO_RF_TYPE\r
-//\r
-// For example 1T2R (A+AB = BIT0|BIT4|BIT5)\r
-//\r
-typedef enum tag_ODM_RF_Path_Bit_Definition\r
-{\r
-       ODM_RF_TX_A     =       BIT0,\r
-       ODM_RF_TX_B     =       BIT1,\r
-       ODM_RF_TX_C     =       BIT2,\r
-       ODM_RF_TX_D     =       BIT3,\r
-       ODM_RF_RX_A     =       BIT4,\r
-       ODM_RF_RX_B     =       BIT5,\r
-       ODM_RF_RX_C     =       BIT6,\r
-       ODM_RF_RX_D     =       BIT7,\r
-}ODM_RF_PATH_E;\r
-\r
-\r
-typedef enum tag_ODM_RF_Type_Definition\r
-{\r
-       ODM_1T1R        =       0,\r
-       ODM_1T2R        =       1,\r
-       ODM_2T2R        =       2,\r
-       ODM_2T3R        =       3,\r
-       ODM_2T4R        =       4,\r
-       ODM_3T3R        =       5,\r
-       ODM_3T4R        =       6,\r
-       ODM_4T4R        =       7,\r
-}ODM_RF_TYPE_E;\r
-\r
-\r
-//\r
-// ODM Dynamic common info value definition\r
-//\r
-\r
-//typedef enum _MACPHY_MODE_8192D{\r
-//     SINGLEMAC_SINGLEPHY,\r
-//     DUALMAC_DUALPHY,\r
-//     DUALMAC_SINGLEPHY,\r
-//}MACPHY_MODE_8192D,*PMACPHY_MODE_8192D;\r
-// Above is the original define in MP driver. Please use the same define. THX.\r
-typedef enum tag_ODM_MAC_PHY_Mode_Definition\r
-{\r
-       ODM_SMSP        = 0,\r
-       ODM_DMSP        = 1,\r
-       ODM_DMDP        = 2,\r
-}ODM_MAC_PHY_MODE_E;\r
-\r
-\r
-typedef enum tag_BT_Coexist_Definition\r
-{      \r
-       ODM_BT_BUSY             = 1,\r
-       ODM_BT_ON                       = 2,\r
-       ODM_BT_OFF              = 3,\r
-       ODM_BT_NONE             = 4,\r
-}ODM_BT_COEXIST_E;\r
-\r
-// ODM_CMNINFO_OP_MODE\r
-typedef enum tag_Operation_Mode_Definition\r
-{\r
-       ODM_NO_LINK             = BIT0,\r
-       ODM_LINK                        = BIT1,\r
-       ODM_SCAN                        = BIT2,\r
-       ODM_POWERSAVE   = BIT3,\r
-       ODM_AP_MODE             = BIT4,\r
-       ODM_CLIENT_MODE = BIT5,\r
-       ODM_AD_HOC              = BIT6,\r
-       ODM_WIFI_DIRECT = BIT7,\r
-       ODM_WIFI_DISPLAY        = BIT8,\r
-}ODM_OPERATION_MODE_E;\r
-\r
-// ODM_CMNINFO_WM_MODE\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_CE))\r
-typedef enum tag_Wireless_Mode_Definition\r
-{\r
-        ODM_WM_UNKNOW     = 0x0,\r
-        ODM_WM_B                  = BIT0,\r
-        ODM_WM_G                  = BIT1,\r
-        ODM_WM_A                  = BIT2,\r
-        ODM_WM_N24G           = BIT3,\r
-        ODM_WM_N5G             = BIT4,\r
-        ODM_WM_AUTO           = BIT5,\r
-        ODM_WM_AC                = BIT6,\r
-}ODM_WIRELESS_MODE_E;\r
-#else\r
-typedef enum tag_Wireless_Mode_Definition\r
-{\r
-        ODM_WM_UNKNOWN         = 0x00,\r
-        ODM_WM_A                       = BIT0,\r
-        ODM_WM_B                       = BIT1,\r
-        ODM_WM_G                       = BIT2,\r
-        ODM_WM_AUTO            = BIT3,\r
-        ODM_WM_N24G            = BIT4,\r
-        ODM_WM_N5G             = BIT5,\r
-        ODM_WM_AC_5G   = BIT6,\r
-        ODM_WM_AC_24G          = BIT7,\r
-        ODM_WM_AC_ONLY         = BIT8,\r
-        ODM_WM_MAX             = BIT9\r
-}ODM_WIRELESS_MODE_E;\r
-#endif\r
-\r
-// ODM_CMNINFO_BAND\r
-typedef enum tag_Band_Type_Definition\r
-{\r
-    ODM_BAND_2_4G = 0,\r
-    ODM_BAND_5G,\r
-    ODM_BAND_ON_BOTH,\r
-    ODM_BANDMAX\r
-\r
-}ODM_BAND_TYPE_E;\r
-\r
-// ODM_CMNINFO_SEC_CHNL_OFFSET\r
-typedef enum tag_Secondary_Channel_Offset_Definition\r
-{\r
-       ODM_DONT_CARE   = 0,\r
-       ODM_BELOW               = 1,\r
-       ODM_ABOVE                       = 2\r
-}ODM_SEC_CHNL_OFFSET_E;\r
-\r
-// ODM_CMNINFO_SEC_MODE\r
-typedef enum tag_Security_Definition\r
-{\r
-       ODM_SEC_OPEN                    = 0,\r
-       ODM_SEC_WEP40           = 1,\r
-       ODM_SEC_TKIP                    = 2,\r
-       ODM_SEC_RESERVE                 = 3,\r
-       ODM_SEC_AESCCMP                 = 4,\r
-       ODM_SEC_WEP104          = 5,\r
-       ODM_WEP_WPA_MIXED    = 6, // WEP + WPA\r
-       ODM_SEC_SMS4                    = 7,\r
-}ODM_SECURITY_E;\r
-\r
-// ODM_CMNINFO_BW\r
-typedef enum tag_Bandwidth_Definition\r
-{      \r
-       ODM_BW20M               = 0,\r
-       ODM_BW40M               = 1,\r
-       ODM_BW80M               = 2,\r
-       ODM_BW160M              = 3,\r
-       ODM_BW10M               = 4,\r
-}ODM_BW_E;\r
-\r
-\r
-// ODM_CMNINFO_BOARD_TYPE\r
-// For non-AC-series IC , ODM_BOARD_5G_EXT_PA and ODM_BOARD_5G_EXT_LNA are ignored\r
-// For AC-series IC, external PA & LNA can be indivisuallly added on 2.4G and/or 5G \r
-typedef enum tag_Board_Definition\r
-{\r
-    ODM_BOARD_DEFAULT          = 0,      // The DEFAULT case.\r
-    ODM_BOARD_MINICARD  = BIT(0), // 0 = non-mini card, 1= mini card.\r
-    ODM_BOARD_SLIM      = BIT(1), // 0 = non-slim card, 1 = slim card\r
-    ODM_BOARD_BT        = BIT(2), // 0 = without BT card, 1 = with BT\r
-    ODM_BOARD_EXT_PA    = BIT(3), // 0 = no 2G ext-PA, 1 = existing 2G ext-PA\r
-    ODM_BOARD_EXT_LNA   = BIT(4), // 0 = no 2G ext-LNA, 1 = existing 2G ext-LNA\r
-    ODM_BOARD_EXT_TRSW  = BIT(5), // 0 = no ext-TRSW, 1 = existing ext-TRSW\r
-    ODM_BOARD_EXT_PA_5G        = BIT(6), // 0 = no 5G ext-PA, 1 = existing 5G ext-PA\r
-    ODM_BOARD_EXT_LNA_5G= BIT(7), // 0 = no 5G ext-LNA, 1 = existing 5G ext-LNA\r
-}ODM_BOARD_TYPE_E;\r
-\r
-typedef enum tag_ODM_Package_Definition\r
-{\r
-    ODM_PACKAGE_DEFAULT         = 0,     \r
-    ODM_PACKAGE_QFN68        = BIT(0), \r
-    ODM_PACKAGE_TFBGA90      = BIT(1), \r
-    ODM_PACKAGE_TFBGA79      = BIT(2), \r
-}ODM_Package_TYPE_E;\r
-\r
-typedef enum tag_ODM_TYPE_GPA_Definition\r
-{\r
-    TYPE_GPA0 = 0,       \r
-    TYPE_GPA1 = BIT(1)|BIT(0)\r
-}ODM_TYPE_GPA_E;\r
-\r
-typedef enum tag_ODM_TYPE_APA_Definition\r
-{\r
-    TYPE_APA0 = 0,       \r
-    TYPE_APA1 = BIT(1)|BIT(0)\r
-}ODM_TYPE_APA_E;\r
-\r
-typedef enum tag_ODM_TYPE_GLNA_Definition\r
-{\r
-    TYPE_GLNA0 = 0,      \r
-    TYPE_GLNA1 = BIT(2)|BIT(0),\r
-    TYPE_GLNA2 = BIT(3)|BIT(1),\r
-    TYPE_GLNA3 = BIT(3)|BIT(2)|BIT(1)|BIT(0)\r
-}ODM_TYPE_GLNA_E;\r
-\r
-typedef enum tag_ODM_TYPE_ALNA_Definition\r
-{\r
-    TYPE_ALNA0 = 0,      \r
-    TYPE_ALNA1 = BIT(2)|BIT(0),\r
-    TYPE_ALNA2 = BIT(3)|BIT(1),\r
-    TYPE_ALNA3 = BIT(3)|BIT(2)|BIT(1)|BIT(0)\r
-}ODM_TYPE_ALNA_E;\r
-\r
-// ODM_CMNINFO_ONE_PATH_CCA\r
-typedef enum tag_CCA_Path\r
-{\r
-       ODM_CCA_2R                      = 0,\r
-       ODM_CCA_1R_A            = 1,\r
-       ODM_CCA_1R_B            = 2,\r
-}ODM_CCA_PATH_E;\r
-\r
-\r
-typedef struct _ODM_RA_Info_\r
-{\r
-       u1Byte RateID;\r
-       u4Byte RateMask;\r
-       u4Byte RAUseRate;\r
-       u1Byte RateSGI;\r
-       u1Byte RssiStaRA;\r
-       u1Byte PreRssiStaRA;\r
-       u1Byte SGIEnable;\r
-       u1Byte DecisionRate;\r
-       u1Byte PreRate;\r
-       u1Byte HighestRate;\r
-       u1Byte LowestRate;\r
-       u4Byte NscUp;\r
-       u4Byte NscDown;\r
-       u2Byte RTY[5];\r
-       u4Byte TOTAL;\r
-       u2Byte DROP;\r
-       u1Byte Active;\r
-       u2Byte RptTime;\r
-       u1Byte RAWaitingCounter;\r
-       u1Byte RAPendingCounter;        \r
-#if 1 //POWER_TRAINING_ACTIVE == 1 // For compile  pass only~!\r
-       u1Byte PTActive;  // on or off\r
-       u1Byte PTTryState;  // 0 trying state, 1 for decision state\r
-       u1Byte PTStage;  // 0~6\r
-       u1Byte PTStopCount; //Stop PT counter\r
-       u1Byte PTPreRate;  // if rate change do PT\r
-       u1Byte PTPreRssi; // if RSSI change 5% do PT\r
-       u1Byte PTModeSS;  // decide whitch rate should do PT\r
-       u1Byte RAstage;  // StageRA, decide how many times RA will be done between PT\r
-       u1Byte PTSmoothFactor;\r
-#endif\r
-} ODM_RA_INFO_T,*PODM_RA_INFO_T;\r
-\r
-typedef struct _IQK_MATRIX_REGS_SETTING{\r
-       BOOLEAN         bIQKDone;\r
-       s4Byte          Value[3][IQK_Matrix_REG_NUM];\r
-       BOOLEAN         bBWIqkResultSaved[3];   \r
-}IQK_MATRIX_REGS_SETTING,*PIQK_MATRIX_REGS_SETTING;\r
-\r
-\r
-//Remove PATHDIV_PARA struct to odm_PathDiv.h\r
-\r
-typedef struct ODM_RF_Calibration_Structure\r
-{\r
-       //for tx power tracking\r
-       \r
-       u4Byte  RegA24; // for TempCCK\r
-       s4Byte  RegE94;\r
-       s4Byte  RegE9C;\r
-       s4Byte  RegEB4;\r
-       s4Byte  RegEBC; \r
-\r
-       u1Byte          TXPowercount;\r
-       BOOLEAN bTXPowerTrackingInit; \r
-       BOOLEAN bTXPowerTracking;\r
-       u1Byte          TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default\r
-       u1Byte          TM_Trigger;\r
-       u1Byte          InternalPA5G[2];        //pathA / pathB\r
-       \r
-       u1Byte          ThermalMeter[2];    // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1\r
-       u1Byte          ThermalValue;\r
-       u1Byte          ThermalValue_LCK;\r
-       u1Byte          ThermalValue_IQK;\r
-       u1Byte  ThermalValue_DPK;               \r
-       u1Byte  ThermalValue_AVG[AVG_THERMAL_NUM];\r
-       u1Byte  ThermalValue_AVG_index;         \r
-       u1Byte  ThermalValue_RxGain;\r
-       u1Byte  ThermalValue_Crystal;\r
-       u1Byte  ThermalValue_DPKstore;\r
-       u1Byte  ThermalValue_DPKtrack;\r
-       BOOLEAN TxPowerTrackingInProgress;\r
-       \r
-       BOOLEAN bReloadtxpowerindex;    \r
-       u1Byte  bRfPiEnable;\r
-       u4Byte  TXPowerTrackingCallbackCnt; //cosa add for debug\r
-\r
-\r
-       //------------------------- Tx power Tracking -------------------------//\r
-       u1Byte  bCCKinCH14;\r
-       u1Byte  CCK_index;\r
-       u1Byte  OFDM_index[MAX_RF_PATH];\r
-       s1Byte  PowerIndexOffset[MAX_RF_PATH];\r
-       s1Byte  DeltaPowerIndex[MAX_RF_PATH];\r
-       s1Byte  DeltaPowerIndexLast[MAX_RF_PATH];       \r
-       BOOLEAN bTxPowerChanged;\r
-               \r
-       u1Byte  ThermalValue_HP[HP_THERMAL_NUM];\r
-       u1Byte  ThermalValue_HP_index;\r
-       IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];\r
-       BOOLEAN bNeedIQK;\r
-       BOOLEAN bIQKInProgress; \r
-       u1Byte  Delta_IQK;\r
-       u1Byte  Delta_LCK;\r
-       s1Byte  BBSwingDiff2G, BBSwingDiff5G; // Unit: dB\r
-    u1Byte  DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE];\r
-    \r
-       //--------------------------------------------------------------------//        \r
-       \r
-       //for IQK       \r
-       u4Byte  RegC04;\r
-       u4Byte  Reg874;\r
-       u4Byte  RegC08;\r
-       u4Byte  RegB68;\r
-       u4Byte  RegB6C;\r
-       u4Byte  Reg870;\r
-       u4Byte  Reg860;\r
-       u4Byte  Reg864;\r
-       \r
-       BOOLEAN bIQKInitialized;\r
-       BOOLEAN bLCKInProgress;\r
-       BOOLEAN bAntennaDetected;\r
-       u4Byte  ADDA_backup[IQK_ADDA_REG_NUM];\r
-       u4Byte  IQK_MAC_backup[IQK_MAC_REG_NUM];\r
-       u4Byte  IQK_BB_backup_recover[9];\r
-       u4Byte  IQK_BB_backup[IQK_BB_REG_NUM];  \r
-\r
-       //for APK\r
-       u4Byte  APKoutput[2][2]; //path A/B; output1_1a/output1_2a\r
-       u1Byte  bAPKdone;\r
-       u1Byte  bAPKThermalMeterIgnore;\r
-       u1Byte  bDPdone;\r
-       u1Byte  bDPPathAOK;\r
-       u1Byte  bDPPathBOK;\r
-\r
-       u4Byte  TxIQC_8723B[2][3][2]; // { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}\r
-       u4Byte  RxIQC_8723B[2][2][2]; // { {S1: 0xc14, 0xca0} ,           {S0: 0xc14, 0xca0}}\r
-       u4Byte  TxLOK[2];\r
-\r
-}ODM_RF_CAL_T,*PODM_RF_CAL_T;\r
-//\r
-// ODM Dynamic common info value definition\r
-//\r
-\r
-typedef struct _FAST_ANTENNA_TRAINNING_\r
-{\r
-       u1Byte  Bssid[6];\r
-       u1Byte  antsel_rx_keep_0;\r
-       u1Byte  antsel_rx_keep_1;\r
-       u1Byte  antsel_rx_keep_2;\r
-       u4Byte  antSumRSSI[7];\r
-       u4Byte  antRSSIcnt[7];\r
-       u4Byte  antAveRSSI[7];\r
-       u1Byte  FAT_State;\r
-       u4Byte  TrainIdx;\r
-       u1Byte  antsel_a[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u1Byte  antsel_b[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u1Byte  antsel_c[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  MainAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  AuxAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  MainAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  AuxAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u1Byte  RxIdleAnt;\r
-       BOOLEAN bBecomeLinked;\r
-       u4Byte  MinMaxRSSI;\r
-       u1Byte  idx_AntDiv_counter_2G;\r
-       u1Byte  idx_AntDiv_counter_5G;\r
-       u4Byte  AntDiv_2G_5G;\r
-       u4Byte    CCK_counter_main;\r
-       u4Byte    CCK_counter_aux;      \r
-       u4Byte    OFDM_counter_main;\r
-       u4Byte    OFDM_counter_aux;     \r
-\r
-}FAT_T,*pFAT_T;\r
-\r
-typedef enum _FAT_STATE\r
-{\r
-       FAT_NORMAL_STATE                        = 0,\r
-       FAT_TRAINING_STATE              = 1,\r
-}FAT_STATE_E, *PFAT_STATE_E;\r
-\r
-typedef enum _ANT_DIV_TYPE\r
-{\r
-       NO_ANTDIV                       = 0xFF, \r
-       CG_TRX_HW_ANTDIV                = 0x01,\r
-       CGCS_RX_HW_ANTDIV       = 0x02,\r
-       FIXED_HW_ANTDIV         = 0x03,\r
-       CG_TRX_SMART_ANTDIV     = 0x04,\r
-       CGCS_RX_SW_ANTDIV       = 0x05,\r
-       S0S1_SW_ANTDIV          = 0x06 //8723B intrnal switch S0 S1\r
-}ANT_DIV_TYPE_E, *PANT_DIV_TYPE_E;\r
-\r
-typedef struct _ODM_PATH_DIVERSITY_\r
-{\r
-       u1Byte  RespTxPath;\r
-       u1Byte  PathSel[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  PathA_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  PathB_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  PathA_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  PathB_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
-}PATHDIV_T, *pPATHDIV_T;\r
-\r
-\r
-typedef enum _BASEBAND_CONFIG_PHY_REG_PG_VALUE_TYPE{\r
-       PHY_REG_PG_RELATIVE_VALUE = 0,\r
-       PHY_REG_PG_EXACT_VALUE = 1\r
-} PHY_REG_PG_TYPE;\r
-\r
-\r
-//\r
-// Antenna detection information from single tone mechanism, added by Roger, 2012.11.27.\r
-//\r
-typedef struct _ANT_DETECTED_INFO{\r
-       BOOLEAN                 bAntDetected;\r
-       u4Byte                  dBForAntA;\r
-       u4Byte                  dBForAntB;\r
-       u4Byte                  dBForAntO;\r
-}ANT_DETECTED_INFO, *PANT_DETECTED_INFO;\r
-\r
-//\r
-// 2011/09/22 MH Copy from SD4 defined structure. We use to support PHY DM integration.\r
-//\r
-#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-#if (RT_PLATFORM != PLATFORM_LINUX)\r
-typedef \r
-#endif\r
-struct DM_Out_Source_Dynamic_Mechanism_Structure\r
-#else// for AP,ADSL,CE Team\r
-typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure\r
-#endif\r
-{\r
-       //RT_TIMER      FastAntTrainingTimer;\r
-       //\r
-       //      Add for different team use temporarily\r
-       //\r
-       PADAPTER                Adapter;                // For CE/NIC team\r
-       prtl8192cd_priv priv;                   // For AP/ADSL team\r
-       // WHen you use Adapter or priv pointer, you must make sure the pointer is ready.\r
-       BOOLEAN                 odm_ready;\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
-       rtl8192cd_priv          fake_priv;\r
-#endif\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       // ADSL_AP_BUILD_WORKAROUND\r
-       ADAPTER                 fake_adapter;\r
-#endif\r
-       \r
-       PHY_REG_PG_TYPE         PhyRegPgValueType;\r
-       u1Byte                          PhyRegPgVersion;\r
-\r
-       u8Byte                  DebugComponents;\r
-       u4Byte                  DebugLevel;\r
-       \r
-       u4Byte                  NumQryPhyStatusAll;     //CCK + OFDM\r
-       u4Byte                  LastNumQryPhyStatusAll; \r
-       u4Byte                  RxPWDBAve;\r
-       BOOLEAN                 MPDIG_2G;               //off MPDIG\r
-       u1Byte                  Times_2G;\r
-       \r
-//------ ODM HANDLE, DRIVER NEEDS NOT TO HOOK------//\r
-       BOOLEAN                 bCckHighPower; \r
-       u1Byte                  RFPathRxEnable;         // ODM_CMNINFO_RFPATH_ENABLE\r
-       u1Byte                  ControlChannel;\r
-//------ ODM HANDLE, DRIVER NEEDS NOT TO HOOK------//\r
-\r
-//--------REMOVED COMMON INFO----------//\r
-       //u1Byte                                PseudoMacPhyMode;\r
-       //BOOLEAN                       *BTCoexist;\r
-       //BOOLEAN                       PseudoBtCoexist;\r
-       //u1Byte                                OPMode;\r
-       //BOOLEAN                       bAPMode;\r
-       //BOOLEAN                       bClientMode;\r
-       //BOOLEAN                       bAdHocMode;\r
-       //BOOLEAN                       bSlaveOfDMSP;\r
-//--------REMOVED COMMON INFO----------//\r
-\r
-\r
-//1  COMMON INFORMATION\r
-\r
-       //\r
-       // Init Value\r
-       //\r
-//-----------HOOK BEFORE REG INIT-----------// \r
-       // ODM Platform info AP/ADSL/CE/MP = 1/2/3/4\r
-       u1Byte                  SupportPlatform;                \r
-       // ODM Support Ability DIG/RATR/TX_PWR_TRACK/ ¡K¡K = 1/2/3/¡K\r
-       u4Byte                  SupportAbility;\r
-       // ODM PCIE/USB/SDIO = 1/2/3\r
-       u1Byte                  SupportInterface;                       \r
-       // ODM composite or independent. Bit oriented/ 92C+92D+ .... or any other type = 1/2/3/...\r
-       u4Byte                  SupportICType;  \r
-       // Cut Version TestChip/A-cut/B-cut... = 0/1/2/3/...\r
-       u1Byte                  CutVersion;\r
-       // Fab Version TSMC/UMC = 0/1\r
-       u1Byte                  FabVersion;\r
-       // RF Type 4T4R/3T3R/2T2R/1T2R/1T1R/...\r
-       u1Byte                  RFType;\r
-       u1Byte                  RFEType;        \r
-       // Board Type Normal/HighPower/MiniCard/SLIM/Combo/... = 0/1/2/3/4/...\r
-       u1Byte                  BoardType;\r
-       u1Byte                  PackageType;\r
-       u1Byte                  TypeGLNA;\r
-       u1Byte                  TypeGPA;\r
-       u1Byte                  TypeALNA;\r
-       u1Byte                  TypeAPA;\r
-       // with external LNA  NO/Yes = 0/1\r
-       u1Byte                  ExtLNA;\r
-       u1Byte                  ExtLNA5G;\r
-       // with external PA  NO/Yes = 0/1\r
-       u1Byte                  ExtPA;\r
-       u1Byte                  ExtPA5G;\r
-       // with external TRSW  NO/Yes = 0/1\r
-       u1Byte                  ExtTRSW;\r
-       u1Byte                  PatchID; //Customer ID\r
-       BOOLEAN                 bInHctTest;\r
-       BOOLEAN                 bWIFITest;\r
-\r
-       BOOLEAN                 bDualMacSmartConcurrent;\r
-       u4Byte                  BK_SupportAbility;\r
-       u1Byte                  AntDivType;\r
-\r
-       u1Byte                  odm_Regulation2_4G;\r
-       u1Byte                  odm_Regulation5G;\r
-//-----------HOOK BEFORE REG INIT-----------// \r
-\r
-       //\r
-       // Dynamic Value\r
-       //      \r
-//--------- POINTER REFERENCE-----------//\r
-\r
-       u1Byte                  u1Byte_temp;\r
-       BOOLEAN                 BOOLEAN_temp;\r
-       PADAPTER                PADAPTER_temp;\r
-       \r
-       // MAC PHY Mode SMSP/DMSP/DMDP = 0/1/2\r
-       u1Byte                  *pMacPhyMode;\r
-       //TX Unicast byte count\r
-       u8Byte                  *pNumTxBytesUnicast;\r
-       //RX Unicast byte count\r
-       u8Byte                  *pNumRxBytesUnicast;\r
-       // Wireless mode B/G/A/N = BIT0/BIT1/BIT2/BIT3\r
-       u1Byte                  *pWirelessMode; //ODM_WIRELESS_MODE_E\r
-       // Frequence band 2.4G/5G = 0/1\r
-       u1Byte                  *pBandType;\r
-       // Secondary channel offset don't_care/below/above = 0/1/2\r
-       u1Byte                  *pSecChOffset;\r
-       // Security mode Open/WEP/AES/TKIP = 0/1/2/3\r
-       u1Byte                  *pSecurity;\r
-       // BW info 20M/40M/80M = 0/1/2\r
-       u1Byte                  *pBandWidth;\r
-       // Central channel location Ch1/Ch2/....\r
-       u1Byte                  *pChannel;      //central channel number\r
-       BOOLEAN                 DPK_Done;\r
-       // Common info for 92D DMSP\r
-       \r
-       BOOLEAN                 *pbGetValueFromOtherMac;\r
-       PADAPTER                *pBuddyAdapter;\r
-       BOOLEAN                 *pbMasterOfDMSP; //MAC0: master, MAC1: slave\r
-       // Common info for Status\r
-       BOOLEAN                 *pbScanInProcess;\r
-       BOOLEAN                 *pbPowerSaving;\r
-       // CCA Path 2-path/path-A/path-B = 0/1/2; using ODM_CCA_PATH_E.\r
-       u1Byte                  *pOnePathCCA;\r
-       //pMgntInfo->AntennaTest\r
-       u1Byte                  *pAntennaTest;\r
-       BOOLEAN                 *pbNet_closed;\r
-       u1Byte                  *mp_mode;\r
-       //u1Byte                        *pAidMap;\r
-       u1Byte                  *pu1ForcedIgiLb;\r
-//--------- POINTER REFERENCE-----------//\r
-       pu2Byte                 pForcedDataRate;\r
-//------------CALL BY VALUE-------------//\r
-       BOOLEAN                 bLinkInProcess;\r
-       BOOLEAN                 bWIFI_Direct;\r
-       BOOLEAN                 bWIFI_Display;\r
-       BOOLEAN                 bLinked;\r
-\r
-       BOOLEAN                 bsta_state;\r
-       u1Byte                  RSSI_Min;       \r
-       u1Byte          InterfaceIndex; // Add for 92D  dual MAC: 0--Mac0 1--Mac1\r
-       BOOLEAN         bIsMPChip;\r
-       BOOLEAN                 bOneEntryOnly;\r
-       // Common info for BTDM\r
-       BOOLEAN                 bBtEnabled;                     // BT is disabled\r
-       BOOLEAN                 bBtConnectProcess;      // BT HS is under connection progress.\r
-       u1Byte                  btHsRssi;                               // BT HS mode wifi rssi value.\r
-       BOOLEAN                 bBtHsOperation;         // BT HS mode is under progress\r
-       BOOLEAN                 bBtDisableEdcaTurbo;    // Under some condition, don't enable the EDCA Turbo\r
-       BOOLEAN                 bBtLimitedDig;                  // BT is busy.\r
-//------------CALL BY VALUE-------------//\r
-       u1Byte                  RSSI_A;\r
-       u1Byte                  RSSI_B;\r
-       u8Byte                  RSSI_TRSW;      \r
-       u8Byte                  RSSI_TRSW_H;\r
-       u8Byte                  RSSI_TRSW_L;    \r
-       u8Byte                  RSSI_TRSW_iso;\r
-\r
-       u1Byte                  RxRate;\r
-       BOOLEAN                 bNoisyState;\r
-       u1Byte                  TxRate;\r
-       u1Byte                  LinkedInterval;\r
-       u1Byte                  preChannel;\r
-       u4Byte                  TxagcOffsetValueA;\r
-       BOOLEAN                 IsTxagcOffsetPositiveA;\r
-       u4Byte                  TxagcOffsetValueB;\r
-       BOOLEAN                 IsTxagcOffsetPositiveB;\r
-       u8Byte                  lastTxOkCnt;\r
-       u8Byte                  lastRxOkCnt;\r
-       u4Byte                  BbSwingOffsetA;\r
-       BOOLEAN                 IsBbSwingOffsetPositiveA;\r
-       u4Byte                  BbSwingOffsetB;\r
-       BOOLEAN                 IsBbSwingOffsetPositiveB;\r
-       s1Byte                  TH_L2H_ini;\r
-       s1Byte                  TH_EDCCA_HL_diff;\r
-       s1Byte                  IGI_Base;\r
-       u1Byte                  IGI_target;\r
-       BOOLEAN                 ForceEDCCA;\r
-       u1Byte                  AdapEn_RSSI;\r
-       s1Byte                  Force_TH_H;\r
-       s1Byte                  Force_TH_L;\r
-       u1Byte                  IGI_LowerBound;\r
-       u1Byte                  antdiv_rssi;\r
-       u1Byte                  AntType;\r
-       u1Byte                  pre_AntType;\r
-       u1Byte                  antdiv_period;\r
-        u1Byte                 antdiv_select;  \r
-       u1Byte                  NdpaPeriod;\r
-\r
-       // add by Yu Cehn for adaptivtiy\r
-       BOOLEAN                 adaptivity_flag;\r
-       BOOLEAN                 NHM_disable;\r
-       BOOLEAN                 TxHangFlg;\r
-       BOOLEAN                 Carrier_Sense_enable;\r
-       u1Byte                  tolerance_cnt;\r
-       u8Byte                  NHMCurTxOkcnt;\r
-       u8Byte                  NHMCurRxOkcnt;\r
-       u8Byte                  NHMLastTxOkcnt;\r
-       u8Byte                  NHMLastRxOkcnt;\r
-       u1Byte                  txEdcca1;\r
-       u1Byte                  txEdcca0;\r
-       s1Byte                  H2L_lb;\r
-       s1Byte                  L2H_lb;\r
-       u1Byte                  Adaptivity_IGI_upper;\r
-       u1Byte                  NHM_cnt_0;\r
-\r
-\r
-       ODM_NOISE_MONITOR noise_level;//[ODM_MAX_CHANNEL_NUM];\r
-       //\r
-       //2 Define STA info.\r
-       // _ODM_STA_INFO\r
-       // 2012/01/12 MH For MP, we need to reduce one array pointer for default port.??\r
-       PSTA_INFO_T             pODM_StaInfo[ODM_ASSOCIATE_ENTRY_NUM];\r
-\r
-#if (RATE_ADAPTIVE_SUPPORT == 1)\r
-       u2Byte                  CurrminRptTime;\r
-       ODM_RA_INFO_T   RAInfo[ODM_ASSOCIATE_ENTRY_NUM]; //See HalMacID support\r
-#endif\r
-       //\r
-       // 2012/02/14 MH Add to share 88E ra with other SW team.\r
-       // We need to colelct all support abilit to a proper area.\r
-       //\r
-       BOOLEAN                         RaSupport88E;\r
-\r
-       // Define ...........\r
-\r
-       // Latest packet phy info (ODM write)\r
-       ODM_PHY_DBG_INFO_T       PhyDbgInfo;\r
-       //PHY_INFO_88E          PhyInfo;\r
-\r
-       // Latest packet phy info (ODM write)\r
-       ODM_MAC_INFO            *pMacInfo;\r
-       //MAC_INFO_88E          MacInfo;\r
-\r
-       // Different Team independt structure??\r
-\r
-       //\r
-       //TX_RTP_CMN            TX_retrpo;\r
-       //TX_RTP_88E            TX_retrpo;\r
-       //TX_RTP_8195           TX_retrpo;\r
-\r
-       //\r
-       //ODM Structure\r
-       //\r
-       FAT_T                                           DM_FatTable;\r
-       DIG_T                                           DM_DigTable;\r
-       PS_T                                            DM_PSTable;\r
-       Pri_CCA_T                                       DM_PriCCA;\r
-       RXHP_T                                          DM_RXHP_Table;\r
-       RA_T                                            DM_RA_Table;  \r
-       FALSE_ALARM_STATISTICS          FalseAlmCnt;\r
-       FALSE_ALARM_STATISTICS          FlaseAlmCntBuddyAdapter;\r
-       //#ifdef CONFIG_ANTENNA_DIVERSITY\r
-       SWAT_T                                          DM_SWAT_Table;\r
-       BOOLEAN                                         RSSI_test;\r
-       CFO_TRACKING                                    DM_CfoTrack;\r
-       //#endif \r
-       \r
-#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       //Path Div Struct\r
-       PATHDIV_PARA    pathIQK;\r
-#endif \r
-\r
-       EDCA_T          DM_EDCA_Table;\r
-       u4Byte          WMMEDCA_BE;\r
-       PATHDIV_T       DM_PathDiv;\r
-       // Copy from SD4 structure\r
-       //\r
-       // ==================================================\r
-       //\r
-\r
-       //common\r
-       //u1Byte                DM_Type;        \r
-       //u1Byte    PSD_Report_RXHP[80];   // Add By Gary\r
-       //u1Byte    PSD_func_flag;               // Add By Gary\r
-       //for DIG\r
-       //u1Byte                bDMInitialGainEnable;\r
-       //u1Byte                binitialized; // for dm_initial_gain_Multi_STA use.\r
-       //for Antenna diversity\r
-       //u8    AntDivCfg;// 0:OFF , 1:ON, 2:by efuse\r
-       //PSTA_INFO_T RSSI_target;\r
-\r
-       BOOLEAN                 *pbDriverStopped;\r
-       BOOLEAN                 *pbDriverIsGoingToPnpSetPowerSleep;\r
-       BOOLEAN                 *pinit_adpt_in_progress;\r
-\r
-       //PSD\r
-       BOOLEAN                 bUserAssignLevel;\r
-       RT_TIMER                PSDTimer;\r
-       u1Byte                  RSSI_BT;                        //come from BT\r
-       BOOLEAN                 bPSDinProcess;\r
-       BOOLEAN                 bPSDactive;\r
-       BOOLEAN                 bDMInitialGainEnable;\r
-\r
-       //MPT DIG\r
-       RT_TIMER                MPT_DIGTimer;\r
-       \r
-       //for rate adaptive, in fact,  88c/92c fw will handle this\r
-       u1Byte                  bUseRAMask;\r
-\r
-       ODM_RATE_ADAPTIVE       RateAdaptive;\r
-\r
-       ANT_DETECTED_INFO       AntDetectedInfo; // Antenna detected information for RSSI tool\r
-\r
-       ODM_RF_CAL_T    RFCalibrateInfo;\r
-       \r
-       //\r
-       // TX power tracking\r
-       //\r
-       u1Byte                  BbSwingIdxOfdm[MAX_RF_PATH];\r
-       u1Byte                  BbSwingIdxOfdmCurrent;\r
-       u1Byte                  BbSwingIdxOfdmBase[MAX_RF_PATH];\r
-       BOOLEAN                 BbSwingFlagOfdm;\r
-       u1Byte                  BbSwingIdxCck;\r
-       u1Byte                  BbSwingIdxCckCurrent;\r
-       u1Byte                  BbSwingIdxCckBase;\r
-       u1Byte                  DefaultOfdmIndex;\r
-       u1Byte                  DefaultCckIndex;        \r
-       BOOLEAN                 BbSwingFlagCck;\r
-       \r
-       s1Byte                  Absolute_OFDMSwingIdx[MAX_RF_PATH];   \r
-       s1Byte                  Remnant_OFDMSwingIdx[MAX_RF_PATH];   \r
-       s1Byte                  Remnant_CCKSwingIdx;\r
-       s1Byte                  Modify_TxAGC_Value;       //Remnat compensate value at TxAGC \r
-       BOOLEAN                 Modify_TxAGC_Flag_PathA;\r
-       BOOLEAN                 Modify_TxAGC_Flag_PathB;\r
-       BOOLEAN                 Modify_TxAGC_Flag_PathA_CCK;\r
-       \r
-       //\r
-       // ODM system resource.\r
-       //\r
-\r
-       // ODM relative time.\r
-       RT_TIMER                                PathDivSwitchTimer;\r
-       //2011.09.27 add for Path Diversity\r
-       RT_TIMER                                CCKPathDiversityTimer;\r
-       RT_TIMER        FastAntTrainingTimer;\r
-       \r
-       // ODM relative workitem.\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       #if USE_WORKITEM\r
-       RT_WORK_ITEM                    PathDivSwitchWorkitem;\r
-       RT_WORK_ITEM                    CCKPathDiversityWorkitem;\r
-       RT_WORK_ITEM                    FastAntTrainingWorkitem;\r
-       RT_WORK_ITEM                    MPT_DIGWorkitem;\r
-       RT_WORK_ITEM                    RaRptWorkitem;\r
-       #endif\r
-#endif\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       \r
-#if (RT_PLATFORM != PLATFORM_LINUX)\r
-} DM_ODM_T, *PDM_ODM_T;                // DM_Dynamic_Mechanism_Structure\r
-#else\r
-};\r
-#endif \r
-\r
-#else// for AP,ADSL,CE Team\r
-} DM_ODM_T, *PDM_ODM_T;                // DM_Dynamic_Mechanism_Structure\r
-#endif\r
-\r
-\r
-\r
-#if 1 //92c-series\r
-#define ODM_RF_PATH_MAX 2\r
-#else //jaguar - series\r
-#define ODM_RF_PATH_MAX 4\r
-#endif\r
-\r
-typedef enum _ODM_RF_RADIO_PATH {\r
-    ODM_RF_PATH_A = 0,   //Radio Path A\r
-    ODM_RF_PATH_B = 1,   //Radio Path B\r
-    ODM_RF_PATH_C = 2,   //Radio Path C\r
-    ODM_RF_PATH_D = 3,   //Radio Path D\r
-    ODM_RF_PATH_AB,\r
-    ODM_RF_PATH_AC,\r
-    ODM_RF_PATH_AD,\r
-    ODM_RF_PATH_BC,\r
-    ODM_RF_PATH_BD,\r
-    ODM_RF_PATH_CD,\r
-    ODM_RF_PATH_ABC,\r
-    ODM_RF_PATH_ACD,\r
-    ODM_RF_PATH_BCD,\r
-    ODM_RF_PATH_ABCD,\r
-  //  ODM_RF_PATH_MAX,    //Max RF number 90 support\r
-} ODM_RF_RADIO_PATH_E, *PODM_RF_RADIO_PATH_E;\r
-\r
- typedef enum _ODM_RF_CONTENT{\r
-       odm_radioa_txt = 0x1000,\r
-       odm_radiob_txt = 0x1001,\r
-       odm_radioc_txt = 0x1002,\r
-       odm_radiod_txt = 0x1003\r
-} ODM_RF_CONTENT;\r
-\r
-typedef enum _ODM_BB_Config_Type{\r
-    CONFIG_BB_PHY_REG,   \r
-    CONFIG_BB_AGC_TAB,   \r
-    CONFIG_BB_AGC_TAB_2G,\r
-    CONFIG_BB_AGC_TAB_5G, \r
-    CONFIG_BB_PHY_REG_PG,  \r
-    CONFIG_BB_PHY_REG_MP,\r
-    CONFIG_BB_AGC_TAB_DIFF,\r
-} ODM_BB_Config_Type, *PODM_BB_Config_Type;\r
-\r
-typedef enum _ODM_RF_Config_Type{ \r
-       CONFIG_RF_RADIO,\r
-    CONFIG_RF_TXPWR_LMT,\r
-} ODM_RF_Config_Type, *PODM_RF_Config_Type;\r
-\r
-typedef enum _ODM_FW_Config_Type{\r
-    CONFIG_FW_NIC,\r
-    CONFIG_FW_NIC_2,\r
-    CONFIG_FW_AP,\r
-    CONFIG_FW_MP,\r
-    CONFIG_FW_WoWLAN,\r
-    CONFIG_FW_WoWLAN_2,\r
-    CONFIG_FW_AP_WoWLAN,\r
-    CONFIG_FW_BT,\r
-} ODM_FW_Config_Type;\r
-\r
-// Status code\r
-#if (DM_ODM_SUPPORT_TYPE != ODM_WIN)\r
-typedef enum _RT_STATUS{\r
-       RT_STATUS_SUCCESS,\r
-       RT_STATUS_FAILURE,\r
-       RT_STATUS_PENDING,\r
-       RT_STATUS_RESOURCE,\r
-       RT_STATUS_INVALID_CONTEXT,\r
-       RT_STATUS_INVALID_PARAMETER,\r
-       RT_STATUS_NOT_SUPPORT,\r
-       RT_STATUS_OS_API_FAILED,\r
-}RT_STATUS,*PRT_STATUS;\r
-#endif // end of RT_STATUS definition\r
-\r
-#ifdef REMOVE_PACK\r
-#pragma pack()\r
-#endif\r
-\r
-//#include "odm_function.h"\r
-\r
-//3===========================================================\r
-//3 DIG\r
-//3===========================================================\r
-\r
-//Remove DIG by Yuchen\r
-\r
-//3===========================================================\r
-//3 AGC RX High Power Mode\r
-//3===========================================================\r
-#define          LNA_Low_Gain_1                      0x64\r
-#define          LNA_Low_Gain_2                      0x5A\r
-#define          LNA_Low_Gain_3                      0x58\r
-\r
-#define          FA_RXHP_TH1                           5000\r
-#define          FA_RXHP_TH2                           1500\r
-#define          FA_RXHP_TH3                             800\r
-#define          FA_RXHP_TH4                             600\r
-#define          FA_RXHP_TH5                             500\r
-\r
-//3===========================================================\r
-//3 EDCA\r
-//3===========================================================\r
-\r
-//3===========================================================\r
-//3 Dynamic Tx Power\r
-//3===========================================================\r
-//Dynamic Tx Power Control Threshold\r
-\r
-//Remove By YuChen\r
-\r
-//3===========================================================\r
-//3 Tx Power Tracking\r
-//3===========================================================\r
-#if 0 //mask this, since these have been defined in typdef.h, vivi\r
-#define        OFDM_TABLE_SIZE         43\r
-#define        CCK_TABLE_SIZE          33\r
-#endif \r
-\r
-\r
-//3===========================================================\r
-//3 Rate Adaptive\r
-//3===========================================================\r
-//Remove to odm_RaInfo.h by RS_James\r
-\r
-//3===========================================================\r
-//3 BB Power Save\r
-//3===========================================================\r
-\r
-typedef enum tag_1R_CCA_Type_Definition\r
-{\r
-       CCA_1R =0,\r
-       CCA_2R = 1,\r
-       CCA_MAX = 2,\r
-}DM_1R_CCA_E;\r
-\r
-typedef enum tag_RF_Type_Definition\r
-{\r
-       RF_Save =0,\r
-       RF_Normal = 1,\r
-       RF_MAX = 2,\r
-}DM_RF_E;\r
-\r
-//3===========================================================\r
-//3 Antenna Diversity\r
-//3===========================================================\r
-typedef enum tag_SW_Antenna_Switch_Definition\r
-{\r
-       Antenna_A = 1,\r
-       Antenna_B = 2,  \r
-       Antenna_MAX = 3,\r
-}DM_SWAS_E;\r
-\r
-\r
-// Maximal number of antenna detection mechanism needs to perform, added by Roger, 2011.12.28.\r
-#define        MAX_ANTENNA_DETECTION_CNT       10 \r
-\r
-//\r
-// Extern Global Variables.\r
-//\r
-extern u4Byte OFDMSwingTable[OFDM_TABLE_SIZE];\r
-extern u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];\r
-extern u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];\r
-\r
-extern u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE];\r
-extern u1Byte CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8];\r
-extern u1Byte CCKSwingTable_Ch14_New [CCK_TABLE_SIZE][8];\r
-\r
-extern  u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE];\r
-\r
-// <20121018, Kordan> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table.\r
-static u1Byte DeltaSwingTableIdx_2GA_P_8188E[] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4,  4,  4,  4,  4,  4,  5,  5,  7,  7,  8,  8,  8,  9,  9,  9,  9,  9};\r
-static u1Byte DeltaSwingTableIdx_2GA_N_8188E[] = {0, 0, 0, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5,  6,  6,  7,  7,  7,  7,  8,  8,  9,  9, 10, 10, 10, 11, 11, 11, 11}; \r
-\r
-//\r
-// check Sta pointer valid or not\r
-//\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-#define IS_STA_VALID(pSta)             (pSta && pSta->expire_to)\r
-#elif (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-#define IS_STA_VALID(pSta)             (pSta && pSta->bUsed)\r
-#else\r
-#define IS_STA_VALID(pSta)             (pSta)\r
-#endif\r
-// 20100514 Joseph: Add definition for antenna switching test after link.\r
-// This indicates two different the steps. \r
-// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.\r
-// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK\r
-// with original RSSI to determine if it is necessary to switch antenna.\r
-#define SWAW_STEP_PEAK         0\r
-#define SWAW_STEP_DETERMINE    1\r
-\r
-//Remove DIG by yuchen\r
-\r
-VOID\r
-ODM_SetAntenna(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u1Byte          Antenna);\r
-\r
-\r
-//Remove BB power saving by Yuchen\r
-\r
-#define SwAntDivRestAfterLink  ODM_SwAntDivRestAfterLink\r
-VOID ODM_SwAntDivRestAfterLink(        IN      PDM_ODM_T       pDM_Odm);\r
-\r
-#define dm_CheckTXPowerTracking        ODM_TXPowerTrackingCheck\r
-VOID   \r
-ODM_TXPowerTrackingCheck(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-       );\r
-                                               \r
-//Remove ODM_RAStateCheck() by RS_James\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_AP|ODM_ADSL))\r
-//============================================================\r
-// function prototype\r
-//============================================================\r
-//#define DM_ChangeDynamicInitGainThresh               ODM_ChangeDynamicInitGainThresh\r
-//void ODM_ChangeDynamicInitGainThresh(IN      PADAPTER        pAdapter,\r
-//                                                                                     IN      INT32           DM_Type,\r
-//                                                                                     IN      INT32           DM_Value);\r
-\r
-//Remove DIG by yuchen\r
-\r
-\r
-BOOLEAN\r
-ODM_CheckPowerStatus(\r
-       IN      PADAPTER                Adapter\r
-       );\r
-\r
-\r
-//Remove ODM_RateAdaptiveStateApInit() by RS_James\r
-\r
-//Remove Edca by Yuchen\r
-\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-#ifdef HW_ANT_SWITCH\r
-u1Byte\r
-ODM_Diversity_AntennaSelect(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u1Byte  *data\r
-);\r
-#endif\r
-#endif\r
-\r
-#define SwAntDivResetBeforeLink                ODM_SwAntDivResetBeforeLink\r
-VOID ODM_SwAntDivResetBeforeLink(IN    PDM_ODM_T       pDM_Odm);\r
-\r
-#define SwAntDivCheckBeforeLink        ODM_SwAntDivCheckBeforeLink\r
-\r
-BOOLEAN \r
-ODM_SwAntDivCheckBeforeLink(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-       );\r
-\r
-\r
-#endif\r
-\r
-#define dm_SWAW_RSSI_Check     ODM_SwAntDivChkPerPktRssi\r
-VOID ODM_SwAntDivChkPerPktRssi(        \r
-       IN PDM_ODM_T            pDM_Odm,\r
-       IN u1Byte                       StationID,\r
-       IN PODM_PHY_INFO_T pPhyInfo\r
-       );\r
-\r
-#if((DM_ODM_SUPPORT_TYPE==ODM_WIN)||(DM_ODM_SUPPORT_TYPE==ODM_CE))\r
-\r
-u4Byte ConvertTo_dB(u4Byte Value);\r
-\r
-u4Byte\r
-GetPSDData(\r
-       PDM_ODM_T       pDM_Odm,\r
-       unsigned int    point,\r
-       u1Byte initial_gain_psd);\r
-\r
-#endif\r
-\r
-//Remove ODM_Get_Rate_Bitmap() by RS_James     \r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
-#define        dm_PSDMonitorCallback   odm_PSDMonitorCallback\r
-VOID   odm_PSDMonitorCallback(PRT_TIMER                pTimer);\r
-\r
-VOID\r
-odm_PSDMonitorWorkItemCallback(\r
-    IN PVOID            pContext\r
-    );\r
-\r
-VOID\r
-PatchDCTone(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       pu4Byte         PSD_report,\r
-       u1Byte          initial_gain_psd\r
-);\r
-VOID\r
-ODM_PSDMonitor(\r
-       IN      PDM_ODM_T       pDM_Odm\r
-       );\r
-VOID   odm_PSD_Monitor(PDM_ODM_T       pDM_Odm);\r
-VOID   odm_PSDMonitorInit(PDM_ODM_T    pDM_Odm);\r
-\r
-VOID\r
-ODM_PSDDbgControl(\r
-       IN      PADAPTER        Adapter,\r
-       IN      u4Byte          mode,\r
-       IN      u4Byte          btRssi\r
-       );\r
-\r
-#endif // DM_ODM_SUPPORT_TYPE\r
-\r
-\r
-#if (BEAMFORMING_SUPPORT == 1)\r
-BEAMFORMING_CAP\r
-Beamforming_GetEntryBeamCapByMacId(\r
- IN PMGNT_INFO pMgntInfo,\r
- IN u1Byte  MacId\r
- );\r
-#endif\r
-\r
-VOID\r
-odm_TXPowerTrackingInit(\r
-       IN      PDM_ODM_T       pDM_Odm \r
-       );\r
-\r
-VOID ODM_DMInit( IN    PDM_ODM_T       pDM_Odm);\r
-\r
-VOID\r
-ODM_DMWatchdog(\r
-       IN              PDM_ODM_T                       pDM_Odm                 // For common use in the future\r
-       );\r
-\r
-VOID\r
-ODM_CmnInfoInit(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              ODM_CMNINFO_E   CmnInfo,\r
-       IN              u4Byte                  Value   \r
-       );\r
-\r
-VOID\r
-ODM_CmnInfoHook(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              ODM_CMNINFO_E   CmnInfo,\r
-       IN              PVOID                   pValue  \r
-       );\r
-\r
-VOID\r
-ODM_CmnInfoPtrArrayHook(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              ODM_CMNINFO_E   CmnInfo,\r
-       IN              u2Byte                  Index,\r
-       IN              PVOID                   pValue  \r
-       );\r
-\r
-VOID\r
-ODM_CmnInfoUpdate(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              u4Byte                  CmnInfo,\r
-       IN              u8Byte                  Value   \r
-       );\r
-\r
-VOID \r
-ODM_InitAllTimers(\r
-    IN PDM_ODM_T       pDM_Odm \r
-    );\r
-\r
-VOID \r
-ODM_CancelAllTimers(\r
-    IN PDM_ODM_T    pDM_Odm \r
-    );\r
-\r
-VOID\r
-ODM_ReleaseAllTimers(\r
-    IN PDM_ODM_T       pDM_Odm \r
-    );\r
-\r
-VOID\r
-ODM_ResetIQKResult(\r
-    IN PDM_ODM_T pDM_Odm \r
-    );\r
-\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-VOID ODM_InitAllWorkItems(IN PDM_ODM_T pDM_Odm );\r
-VOID ODM_FreeAllWorkItems(IN PDM_ODM_T pDM_Odm );\r
-\r
-\r
-//===========================================//\r
-// Neil Chen----2011--06--15--\r
-\r
-//3 Path Diversity\r
-//===========================================================\r
-\r
-#define        TP_MODE                0\r
-#define        RSSI_MODE                      1\r
-#define        TRAFFIC_LOW            0\r
-#define        TRAFFIC_HIGH           1\r
-\r
-//#define   PATHDIV_ENABLE      1\r
-//#define dm_PathDiv_RSSI_Check        ODM_PathDivChkPerPktRssi\r
-\r
-u8Byte\r
-PlatformDivision64(\r
-       IN u8Byte       x,\r
-       IN u8Byte       y\r
-);\r
-\r
-\r
-// 20100514 Joseph: Add definition for antenna switching test after link.\r
-// This indicates two different the steps. \r
-// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.\r
-// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK\r
-// with original RSSI to determine if it is necessary to switch antenna.\r
-#define SWAW_STEP_PEAK         0\r
-#define SWAW_STEP_DETERMINE    1\r
-\r
-//====================================================\r
-//3 PathDiV End\r
-//====================================================\r
-\r
-//#define PathDivCheckBeforeLink8192C  ODM_PathDiversityBeforeLink92C\r
-\r
-#define DM_ChangeDynamicInitGainThresh         ODM_ChangeDynamicInitGainThresh\r
-//void ODM_ChangeDynamicInitGainThresh(IN      PADAPTER        pAdapter,\r
-//                                                                                     IN      INT32           DM_Type,\r
-//                                                                                     IN      INT32           DM_Value);\r
-//\r
-\r
-\r
-typedef enum tag_DIG_Connect_Definition\r
-{\r
-       DIG_STA_DISCONNECT = 0, \r
-       DIG_STA_CONNECT = 1,\r
-       DIG_STA_BEFORE_CONNECT = 2,\r
-       DIG_MultiSTA_DISCONNECT = 3,\r
-       DIG_MultiSTA_CONNECT = 4,\r
-       DIG_CONNECT_MAX\r
-}DM_DIG_CONNECT_E;\r
-\r
-\r
-#define dm_SWAW_RSSI_Check     ODM_SwAntDivChkPerPktRssi\r
-\r
-//\r
-// 2012/01/12 MH Check afapter status. Temp fix BSOD.\r
-//\r
-#define        HAL_ADAPTER_STS_CHK(pDM_Odm)\\r
-       if (pDM_Odm->Adapter == NULL)\\r
-       {\\r
-               return;\\r
-       }\\r
-\r
-\r
-//\r
-// For new definition in MP temporarily fro power tracking,\r
-//\r
-#define odm_TXPowerTrackingDirectCall(_Adapter)        \\r
-       IS_HARDWARE_TYPE_8192D(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92D(_Adapter) : \\r
-       IS_HARDWARE_TYPE_8192C(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92C(_Adapter) : \\r
-       IS_HARDWARE_TYPE_8723A(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_8723A(_Adapter) :\\r
-       ODM_TXPowerTrackingCallback_ThermalMeter(_Adapter)\r
-\r
-VOID\r
-ODM_SetTxAntByTxInfo_88C_92D(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              pu1Byte                 pDesc,\r
-       IN              u1Byte                  macId   \r
-       );\r
-\r
-#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-VOID\r
-ODM_AntselStatistics_88C(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              u1Byte                  MacId,\r
-       IN              u4Byte                  PWDBAll,\r
-       IN              BOOLEAN                 isCCKrate\r
-);\r
-\r
-#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN |ODM_CE))\r
-\r
-VOID\r
-ODM_SingleDualAntennaDefaultSetting(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-       );\r
-\r
-BOOLEAN\r
-ODM_SingleDualAntennaDetection(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              u1Byte                  mode\r
-       );\r
-\r
-#endif // #if((DM_ODM_SUPPORT_TYPE==ODM_WIN)||(DM_ODM_SUPPORT_TYPE==ODM_CE))\r
-VOID\r
-ODM_UpdateNoisyState(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      BOOLEAN         bNoisyStateFromC2H\r
-);\r
-\r
-u4Byte\r
-Set_RA_DM_Ratrbitmap_by_Noisy(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      WIRELESS_MODE   WirelessMode,\r
-       IN      u4Byte                  ratr_bitmap,\r
-       IN      u1Byte                  rssi_level\r
-);\r
-\r
-VOID\r
-ODM_UpdateInitRate(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u1Byte          Rate\r
-       );\r
-\r
-//Remove ODM_DynamicARFBSelect() by RS_James\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-void odm_dtc(PDM_ODM_T pDM_Odm);\r
-#endif /* #if (DM_ODM_SUPPORT_TYPE == ODM_CE) */\r
-\r
-#endif\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_AntDiv.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_AntDiv.c
deleted file mode 100755 (executable)
index 1f21d6c..0000000
+++ /dev/null
@@ -1,2273 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-\r
-#include "odm_precomp.h"\r
-\r
-#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
-VOID\r
-odm_AntDiv_on_off( IN PDM_ODM_T        pDM_Odm ,IN u1Byte swch)\r
-{\r
-       if(pDM_Odm->AntDivType==S0S1_SW_ANTDIV || pDM_Odm->AntDivType==CGCS_RX_SW_ANTDIV) \r
-               return;\r
-\r
-       if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("(( Turn %s )) N-Series AntDiv Function\n",(swch==ANTDIV_ON)?"ON" : "OFF"));\r
-               ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, swch); //OFDM AntDiv function block enable\r
-               ODM_SetBBReg(pDM_Odm, 0xa00 , BIT15, swch); //CCK AntDiv function block enable\r
-       }\r
-       else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("(( Turn %s )) AC-Series AntDiv Function\n",(swch==ANTDIV_ON)?"ON" : "OFF"));\r
-               if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-               {\r
-                       ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, swch); //OFDM AntDiv function block enable\r
-                       ODM_SetBBReg(pDM_Odm, 0xa00 , BIT15, swch); //CCK AntDiv function block enable\r
-               }\r
-               else\r
-               {\r
-               ODM_SetBBReg(pDM_Odm, 0x8D4 , BIT24, swch); //OFDM AntDiv function block enable\r
-               ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, swch); //CCK AntDiv function block enable\r
-               }\r
-         }\r
-}\r
-\r
-VOID\r
-ODM_UpdateRxIdleAnt(IN PDM_ODM_T pDM_Odm, IN u1Byte Ant)\r
-{\r
-       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-       u4Byte  DefaultAnt, OptionalAnt,value32;\r
-\r
-       #if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
-       PADAPTER                pAdapter = pDM_Odm->Adapter;\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
-       #endif\r
-\r
-       if(pDM_FatTable->RxIdleAnt != Ant)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Update Rx-Idle-Ant ] RxIdleAnt =%s\n",(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
-               pDM_FatTable->RxIdleAnt = Ant;\r
-\r
-               if(Ant == MAIN_ANT)\r
-               {\r
-                       DefaultAnt   =  ANT1_2G; \r
-                       OptionalAnt =  ANT2_2G; \r
-               }\r
-               else\r
-               {\r
-                       DefaultAnt  =   ANT2_2G;\r
-                       OptionalAnt =  ANT1_2G;\r
-               }\r
-       \r
-               if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
-               {\r
-                       if(pDM_Odm->SupportICType==ODM_RTL8192E)\r
-                       {\r
-                               ODM_SetBBReg(pDM_Odm, 0xB38 , BIT5|BIT4|BIT3, DefaultAnt); //Default RX\r
-                               ODM_SetBBReg(pDM_Odm, 0xB38 , BIT8|BIT7|BIT6, OptionalAnt);//Optional RX\r
-                       }\r
-                       else\r
-                       {\r
-                               ODM_SetBBReg(pDM_Odm, 0x864 , BIT5|BIT4|BIT3, DefaultAnt);      //Default RX\r
-                               ODM_SetBBReg(pDM_Odm, 0x864 , BIT8|BIT7|BIT6, OptionalAnt);     //Optional RX\r
-\r
-                               if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-                               {\r
-                                       value32 = ODM_GetBBReg(pDM_Odm, 0x948, 0xFFF);\r
-                               \r
-                                       if (value32 !=0x280)\r
-                                               ODM_SetBBReg(pDM_Odm, 0x948 , BIT9, DefaultAnt);\r
-\r
-                                       rtw_hal_set_tx_power_level(pAdapter, pHalData->CurrentChannel);\r
-                               }\r
-                               \r
-                       }\r
-                       ODM_SetBBReg(pDM_Odm, 0x860, BIT14|BIT13|BIT12, DefaultAnt);            //Default TX    \r
-               }\r
-               else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
-               {\r
-                       ODM_SetBBReg(pDM_Odm, 0xC08 , BIT21|BIT20|BIT19, DefaultAnt);    //Default RX\r
-                       ODM_SetBBReg(pDM_Odm, 0xC08 , BIT24|BIT23|BIT22, OptionalAnt);//Optional RX\r
-                       ODM_SetBBReg(pDM_Odm, 0xC08 , BIT27|BIT26|BIT25, DefaultAnt);    //Default TX\r
-               }\r
-               ODM_SetMACReg(pDM_Odm, 0x6D8 , BIT10|BIT9|BIT8, DefaultAnt);    //\14PathA Resp Tx\r
-       }\r
-       else// pDM_FatTable->RxIdleAnt == Ant\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Stay in Ori-Ant ]  RxIdleAnt =%s\n",(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
-               pDM_FatTable->RxIdleAnt = Ant;\r
-       }\r
-}\r
-\r
-\r
-VOID\r
-odm_UpdateTxAnt(IN PDM_ODM_T pDM_Odm, IN u1Byte Ant, IN u4Byte MacId)\r
-{\r
-       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-       u1Byte  TxAnt;\r
-\r
-       if(Ant == MAIN_ANT)\r
-               TxAnt = ANT1_2G;\r
-       else\r
-               TxAnt = ANT2_2G;\r
-       \r
-       pDM_FatTable->antsel_a[MacId] = TxAnt&BIT0;\r
-       pDM_FatTable->antsel_b[MacId] = (TxAnt&BIT1)>>1;\r
-       pDM_FatTable->antsel_c[MacId] = (TxAnt&BIT2)>>2;\r
-        #if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-       if (pDM_Odm->antdiv_rssi)\r
-        {\r
-               //panic_printk("[Tx from TxInfo]: MacID:(( %d )),  TxAnt = (( %s ))\n",MacId,(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT");\r
-               //panic_printk("antsel_tr_mux=(( 3'b%d%d%d ))\n",       pDM_FatTable->antsel_c[MacId] , pDM_FatTable->antsel_b[MacId] , pDM_FatTable->antsel_a[MacId] );\r
-       }\r
-        #endif\r
-       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Tx from TxInfo]: MacID:(( %d )),  TxAnt = (( %s ))\n", \r
-       //                                      MacId,(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
-       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("antsel_tr_mux=(( 3'b%d%d%d ))\n",\r
-                                                       //pDM_FatTable->antsel_c[MacId] , pDM_FatTable->antsel_b[MacId] , pDM_FatTable->antsel_a[MacId] ));\r
-       \r
-}\r
-\r
-\r
-\r
-#if (RTL8188E_SUPPORT == 1)\r
-\r
-\r
-VOID\r
-odm_RX_HWAntDiv_Init_88E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       u4Byte  value32;\r
-\r
-       pDM_Odm->AntType = ODM_AUTO_ANT;\r
-\r
-#if (MP_DRIVER == 1)\r
-               pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_IGI_A_11N , BIT7, 0); // disable HW AntDiv \r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_LNA_SWITCH_11N , BIT31, 1);  // 1:CG, 0:CS\r
-               return;\r
-#else\r
-       \r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8188E AntDiv_Init =>  AntDivType=[CGCS_RX_HW_ANTDIV]\n"));\r
-       \r
-       //MAC Setting\r
-       value32 = ODM_GetMACReg(pDM_Odm, ODM_REG_ANTSEL_PIN_11N, bMaskDWord);\r
-       ODM_SetMACReg(pDM_Odm, ODM_REG_ANTSEL_PIN_11N, bMaskDWord, value32|(BIT23|BIT25)); //Reg4C[25]=1, Reg4C[23]=1 for pin output\r
-       //Pin Settings\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_PIN_CTRL_11N , BIT9|BIT8, 0);//Reg870[8]=1'b0, Reg870[9]=1'b0             //antsel antselb by HW\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_RX_ANT_CTRL_11N , BIT10, 0);      //Reg864[10]=1'b0       //antsel2 by HW\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_LNA_SWITCH_11N , BIT22, 1);       //Regb2c[22]=1'b0       //disable CS/CG switch\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_LNA_SWITCH_11N , BIT31, 1);       //Regb2c[31]=1'b1       //output at CG only\r
-       //OFDM Settings\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_ANTDIV_PARA1_11N , bMaskDWord, 0x000000a0);\r
-       //CCK Settings\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_BB_PWR_SAV4_11N , BIT7, 1); //Fix CCK PHY status report issue\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_ANTDIV_PARA2_11N , BIT4, 1); //CCK complete HW AntDiv within 64 samples       \r
-       \r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_ANT_MAPPING1_11N , 0xFFFF, 0x0102);       //antenna mapping table\r
-\r
-#endif\r
-}\r
-\r
-VOID\r
-odm_TRX_HWAntDiv_Init_88E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       u4Byte  value32;\r
-       \r
-#if (MP_DRIVER == 1)\r
-               pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_IGI_A_11N , BIT7, 0); // disable HW AntDiv \r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_RX_ANT_CTRL_11N , BIT5|BIT4|BIT3, 0); //Default RX   (0/1)\r
-               return;\r
-#else\r
-\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8188E AntDiv_Init =>  AntDivType=[CG_TRX_HW_ANTDIV (SPDT)]\n"));\r
-       \r
-       //MAC Setting\r
-       value32 = ODM_GetMACReg(pDM_Odm, ODM_REG_ANTSEL_PIN_11N, bMaskDWord);\r
-       ODM_SetMACReg(pDM_Odm, ODM_REG_ANTSEL_PIN_11N, bMaskDWord, value32|(BIT23|BIT25)); //Reg4C[25]=1, Reg4C[23]=1 for pin output\r
-       //Pin Settings\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_PIN_CTRL_11N , BIT9|BIT8, 0);//Reg870[8]=1'b0, Reg870[9]=1'b0             //antsel antselb by HW\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_RX_ANT_CTRL_11N , BIT10, 0);      //Reg864[10]=1'b0       //antsel2 by HW\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_LNA_SWITCH_11N , BIT22, 0);       //Regb2c[22]=1'b0       //disable CS/CG switch\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_LNA_SWITCH_11N , BIT31, 1);       //Regb2c[31]=1'b1       //output at CG only\r
-       //OFDM Settings\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_ANTDIV_PARA1_11N , bMaskDWord, 0x000000a0);\r
-       //CCK Settings\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_BB_PWR_SAV4_11N , BIT7, 1); //Fix CCK PHY status report issue\r
-       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_ANTDIV_PARA2_11N , BIT4, 1); //CCK complete HW AntDiv within 64 samples\r
-\r
-       //antenna mapping table\r
-       if(!pDM_Odm->bIsMPChip) //testchip\r
-       {\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_RX_DEFUALT_A_11N , BIT10|BIT9|BIT8, 1);   //Reg858[10:8]=3'b001\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_RX_DEFUALT_A_11N , BIT13|BIT12|BIT11, 2); //Reg858[13:11]=3'b010\r
-       }\r
-       else //MPchip\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_ANT_MAPPING1_11N , bMaskDWord, 0x0201);   //Reg914=3'b010, Reg915=3'b001\r
-#endif\r
-}\r
-\r
-VOID\r
-odm_Smart_HWAntDiv_Init_88E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       u4Byte  value32, i;\r
-       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-       u4Byte  AntCombination = 2;\r
-\r
-    ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8188E AntDiv_Init =>  AntDivType=[CG_TRX_SMART_ANTDIV]\n"));\r
-    \r
-#if (MP_DRIVER == 1)\r
-    ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("pDM_Odm->AntDivType: %d\n", pDM_Odm->AntDivType));\r
-    return;\r
-#else\r
-\r
-       for(i=0; i<6; i++)\r
-       {\r
-               pDM_FatTable->Bssid[i] = 0;\r
-               pDM_FatTable->antSumRSSI[i] = 0;\r
-               pDM_FatTable->antRSSIcnt[i] = 0;\r
-               pDM_FatTable->antAveRSSI[i] = 0;\r
-       }\r
-       pDM_FatTable->TrainIdx = 0;\r
-       pDM_FatTable->FAT_State = FAT_NORMAL_STATE;\r
-\r
-       //MAC Setting\r
-       value32 = ODM_GetMACReg(pDM_Odm, 0x4c, bMaskDWord);\r
-       ODM_SetMACReg(pDM_Odm, 0x4c, bMaskDWord, value32|(BIT23|BIT25)); //Reg4C[25]=1, Reg4C[23]=1 for pin output\r
-       value32 = ODM_GetMACReg(pDM_Odm,  0x7B4, bMaskDWord);\r
-       ODM_SetMACReg(pDM_Odm, 0x7b4, bMaskDWord, value32|(BIT16|BIT17)); //Reg7B4[16]=1 enable antenna training, Reg7B4[17]=1 enable A2 match\r
-       //value32 = PlatformEFIORead4Byte(Adapter, 0x7B4);\r
-       //PlatformEFIOWrite4Byte(Adapter, 0x7b4, value32|BIT18);        //append MACID in reponse packet\r
-\r
-       //Match MAC ADDR\r
-       ODM_SetMACReg(pDM_Odm, 0x7b4, 0xFFFF, 0);\r
-       ODM_SetMACReg(pDM_Odm, 0x7b0, bMaskDWord, 0);\r
-       \r
-       ODM_SetBBReg(pDM_Odm, 0x870 , BIT9|BIT8, 0);//Reg870[8]=1'b0, Reg870[9]=1'b0            //antsel antselb by HW\r
-       ODM_SetBBReg(pDM_Odm, 0x864 , BIT10, 0);        //Reg864[10]=1'b0       //antsel2 by HW\r
-       ODM_SetBBReg(pDM_Odm, 0xb2c , BIT22, 0);        //Regb2c[22]=1'b0       //disable CS/CG switch\r
-       ODM_SetBBReg(pDM_Odm, 0xb2c , BIT31, 1);        //Regb2c[31]=1'b1       //output at CG only\r
-       ODM_SetBBReg(pDM_Odm, 0xca4 , bMaskDWord, 0x000000a0);\r
-       \r
-       //antenna mapping table\r
-       if(AntCombination == 2)\r
-       {\r
-               if(!pDM_Odm->bIsMPChip) //testchip\r
-               {\r
-                       ODM_SetBBReg(pDM_Odm, 0x858 , BIT10|BIT9|BIT8, 1);      //Reg858[10:8]=3'b001\r
-                       ODM_SetBBReg(pDM_Odm, 0x858 , BIT13|BIT12|BIT11, 2);    //Reg858[13:11]=3'b010\r
-               }\r
-               else //MPchip\r
-               {\r
-                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte0, 1);\r
-                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte1, 2);\r
-               }\r
-       }\r
-       else if(AntCombination == 7)\r
-       {\r
-               if(!pDM_Odm->bIsMPChip) //testchip\r
-               {\r
-                       ODM_SetBBReg(pDM_Odm, 0x858 , BIT10|BIT9|BIT8, 0);      //Reg858[10:8]=3'b000\r
-                       ODM_SetBBReg(pDM_Odm, 0x858 , BIT13|BIT12|BIT11, 1);    //Reg858[13:11]=3'b001\r
-                       ODM_SetBBReg(pDM_Odm, 0x878 , BIT16, 0);\r
-                       ODM_SetBBReg(pDM_Odm, 0x858 , BIT15|BIT14, 2);  //(Reg878[0],Reg858[14:15])=3'b010\r
-                       ODM_SetBBReg(pDM_Odm, 0x878 , BIT19|BIT18|BIT17, 3);//Reg878[3:1]=3b'011\r
-                       ODM_SetBBReg(pDM_Odm, 0x878 , BIT22|BIT21|BIT20, 4);//Reg878[6:4]=3b'100\r
-                       ODM_SetBBReg(pDM_Odm, 0x878 , BIT25|BIT24|BIT23, 5);//Reg878[9:7]=3b'101 \r
-                       ODM_SetBBReg(pDM_Odm, 0x878 , BIT28|BIT27|BIT26, 6);//Reg878[12:10]=3b'110 \r
-                       ODM_SetBBReg(pDM_Odm, 0x878 , BIT31|BIT30|BIT29, 7);//Reg878[15:13]=3b'111\r
-               }\r
-               else //MPchip\r
-               {\r
-                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte0, 0);\r
-                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte1, 1);   \r
-                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte2, 2);\r
-                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte3, 3);\r
-                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte0, 4);\r
-                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte1, 5);\r
-                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte2, 6);\r
-                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte3, 7);\r
-               }\r
-       }\r
-\r
-       //Default Ant Setting when no fast training\r
-       ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 1); //Reg80c[21]=1'b1              //from TX Info\r
-       ODM_SetBBReg(pDM_Odm, 0x864 , BIT5|BIT4|BIT3, 0);       //Default RX\r
-       ODM_SetBBReg(pDM_Odm, 0x864 , BIT8|BIT7|BIT6, 1);       //Optional RX\r
-       //ODM_SetBBReg(pDM_Odm, 0x860 , BIT14|BIT13|BIT12, 1);  //Default TX\r
-\r
-       //Enter Traing state\r
-       ODM_SetBBReg(pDM_Odm, 0x864 , BIT2|BIT1|BIT0, (AntCombination-1));      //Reg864[2:0]=3'd6      //ant combination=reg864[2:0]+1\r
-       //ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 0); //RegC50[7]=1'b0              //disable HW AntDiv\r
-       //ODM_SetBBReg(pDM_Odm,  0xe08 , BIT16, 0); //RegE08[16]=1'b0           //disable fast training\r
-       //ODM_SetBBReg(pDM_Odm, 0xe08 , BIT16, 1);      //RegE08[16]=1'b1               //enable fast training\r
-       ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 1); //RegC50[7]=1'b1                //enable HW AntDiv\r
-\r
-       //SW Control\r
-       //PHY_SetBBReg(Adapter, 0x864 , BIT10, 1);\r
-       //PHY_SetBBReg(Adapter, 0x870 , BIT9, 1);\r
-       //PHY_SetBBReg(Adapter, 0x870 , BIT8, 1);\r
-       //PHY_SetBBReg(Adapter, 0x864 , BIT11, 1);\r
-       //PHY_SetBBReg(Adapter, 0x860 , BIT9, 0);\r
-       //PHY_SetBBReg(Adapter, 0x860 , BIT8, 0);\r
-\r
-#endif\r
-}\r
-#endif //#if (RTL8188E_SUPPORT == 1)\r
-\r
-\r
-#if (RTL8192E_SUPPORT == 1)\r
-VOID\r
-odm_RX_HWAntDiv_Init_92E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       \r
-#if (MP_DRIVER == 1)\r
-        //pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
-       odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-        ODM_SetBBReg(pDM_Odm, 0xc50 , BIT8, 0); //r_rxdiv_enable_anta  Regc50[8]=1'b0  0: control by c50[9]\r
-        ODM_SetBBReg(pDM_Odm, 0xc50 , BIT9, 1);  // 1:CG, 0:CS\r
-        return;\r
-#endif\r
-\r
-        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8192E AntDiv_Init =>  AntDivType=[CGCS_RX_HW_ANTDIV]\n"));\r
-       \r
-        //Pin Settings\r
-        ODM_SetBBReg(pDM_Odm, 0x870 , BIT8, 0);//Reg870[8]=1'b0,    // "antsel" is controled by HWs\r
-        ODM_SetBBReg(pDM_Odm, 0xc50 , BIT8, 1); //Regc50[8]=1'b1  //" CS/CG switching" is controled by HWs\r
-\r
-        //Mapping table\r
-        ODM_SetBBReg(pDM_Odm, 0x914 , 0xFFFF, 0x0100); //antenna mapping table\r
-         \r
-        //OFDM Settings\r
-        ODM_SetBBReg(pDM_Odm, 0xca4 , 0x7FF, 0xA0); //thershold\r
-        ODM_SetBBReg(pDM_Odm, 0xca4 , 0x7FF000, 0x0); //bias\r
-        \r
-        //CCK Settings\r
-        ODM_SetBBReg(pDM_Odm, 0xa04 , 0xF000000, 0); //Select which path to receive for CCK_1 & CCK_2\r
-        ODM_SetBBReg(pDM_Odm, 0xb34 , BIT30, 1); //(92E) ANTSEL_CCK_opt = r_en_antsel_cck? ANTSEL_CCK: 1'b0\r
-        ODM_SetBBReg(pDM_Odm, 0xa74 , BIT7, 1); //Fix CCK PHY status report issue\r
-        ODM_SetBBReg(pDM_Odm, 0xa0c , BIT4, 1); //CCK complete HW AntDiv within 64 samples      \r
-}\r
-\r
-VOID\r
-odm_TRX_HWAntDiv_Init_92E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       \r
-#if (MP_DRIVER == 1)\r
-        //pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
-       odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-        ODM_SetBBReg(pDM_Odm, 0xc50 , BIT8, 0); //r_rxdiv_enable_anta  Regc50[8]=1'b0  0: control by c50[9]\r
-        ODM_SetBBReg(pDM_Odm, 0xc50 , BIT9, 1);  // 1:CG, 0:CS\r
-        return;\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
-        pDM_Odm->antdiv_rssi=0;\r
-#endif\r
-\r
-        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8192E AntDiv_Init =>  AntDivType=[CG_TRX_HW_ANTDIV]\n"));\r
-       \r
-       //3 --RFE pin setting---------\r
-       //[MAC]\r
-       ODM_SetMACReg(pDM_Odm, 0x38, BIT11, 1);            //DBG PAD Driving control (GPIO 8)\r
-       ODM_SetMACReg(pDM_Odm, 0x4c, BIT23, 0);            //path-A , RFE_CTRL_3 & RFE_CTRL_4\r
-       //[BB]\r
-       ODM_SetBBReg(pDM_Odm, 0x944 , BIT4|BIT3, 0x3);     //RFE_buffer\r
-       ODM_SetBBReg(pDM_Odm, 0x940 , BIT7|BIT6, 0x0); // r_rfe_path_sel_   (RFE_CTRL_3)\r
-       ODM_SetBBReg(pDM_Odm, 0x940 , BIT9|BIT8, 0x0); // r_rfe_path_sel_   (RFE_CTRL_4)\r
-       ODM_SetBBReg(pDM_Odm, 0x944 , BIT31, 0);     //RFE_buffer\r
-       ODM_SetBBReg(pDM_Odm, 0x92C , BIT3, 0);     //rfe_inv  (RFE_CTRL_3)\r
-       ODM_SetBBReg(pDM_Odm, 0x92C , BIT4, 1);     //rfe_inv  (RFE_CTRL_4)\r
-       ODM_SetBBReg(pDM_Odm, 0x930 , 0xFF000, 0x88);           //path-A , RFE_CTRL_3 & 4=> ANTSEL[0]\r
-       //3 -------------------------\r
-       \r
-        //Pin Settings\r
-       ODM_SetBBReg(pDM_Odm, 0xC50 , BIT8, 0);    //path-A     //disable CS/CG switch\r
-       ODM_SetBBReg(pDM_Odm, 0xC50 , BIT9, 1);    //path-A     //output at CG only\r
-       ODM_SetBBReg(pDM_Odm, 0x870 , BIT9|BIT8, 0);  //path-A          //antsel antselb by HW\r
-       ODM_SetBBReg(pDM_Odm, 0xB38 , BIT10, 0);           //path-A     //antsel2 by HW \r
\r
-       //Mapping table\r
-        ODM_SetBBReg(pDM_Odm, 0x914 , 0xFFFF, 0x0100); //antenna mapping table\r
-         \r
-        //OFDM Settings\r
-        ODM_SetBBReg(pDM_Odm, 0xca4 , 0x7FF, 0xA0); //thershold\r
-        ODM_SetBBReg(pDM_Odm, 0xca4 , 0x7FF000, 0x0); //bias\r
-        \r
-        //CCK Settings\r
-        ODM_SetBBReg(pDM_Odm, 0xa04 , 0xF000000, 0); //Select which path to receive for CCK_1 & CCK_2\r
-        ODM_SetBBReg(pDM_Odm, 0xb34 , BIT30, 1); //(92E) ANTSEL_CCK_opt = r_en_antsel_cck? ANTSEL_CCK: 1'b0\r
-        ODM_SetBBReg(pDM_Odm, 0xa74 , BIT7, 1); //Fix CCK PHY status report issue\r
-        ODM_SetBBReg(pDM_Odm, 0xa0c , BIT4, 1); //CCK complete HW AntDiv within 64 samples \r
-\r
-        //Timming issue\r
-        ODM_SetBBReg(pDM_Odm, 0xE20 , BIT23|BIT22|BIT21|BIT20, 8); //keep antidx after tx for ACK ( unit x 32 mu sec)\r
-}\r
-\r
-VOID\r
-odm_Smart_HWAntDiv_Init_92E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-    ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8188E AntDiv_Init =>  AntDivType=[CG_TRX_SMART_ANTDIV]\n"));\r
-}\r
-#endif //#if (RTL8192E_SUPPORT == 1)\r
-\r
-\r
-#if (RTL8723B_SUPPORT == 1)\r
-VOID\r
-odm_TRX_HWAntDiv_Init_8723B(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8723B AntDiv_Init =>  AntDivType=[CG_TRX_HW_ANTDIV(DPDT)]\n"));\r
-      \r
-       //Mapping Table\r
-       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte0, 0);\r
-       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte1, 1);\r
-       \r
-       //OFDM HW AntDiv Parameters\r
-       ODM_SetBBReg(pDM_Odm, 0xCA4 , 0x7FF, 0xa0); //thershold\r
-       ODM_SetBBReg(pDM_Odm, 0xCA4 , 0x7FF000, 0x00); //bias\r
-               \r
-       //CCK HW AntDiv Parameters\r
-       ODM_SetBBReg(pDM_Odm, 0xA74 , BIT7, 1); //patch for clk from 88M to 80M\r
-       ODM_SetBBReg(pDM_Odm, 0xA0C , BIT4, 1); //do 64 samples\r
-       \r
-       //BT Coexistence\r
-       ODM_SetBBReg(pDM_Odm, 0x864, BIT12, 0); //keep antsel_map when GNT_BT = 1\r
-       ODM_SetBBReg(pDM_Odm, 0x874 , BIT23, 0); //Disable hw antsw & fast_train.antsw when GNT_BT=1\r
-\r
-        //Output Pin Settings\r
-       ODM_SetBBReg(pDM_Odm, 0x870 , BIT8, 0); //\r
-               \r
-       ODM_SetBBReg(pDM_Odm, 0x948 , BIT6, 0); //WL_BB_SEL_BTG_TRXG_anta,  (1: HW CTRL  0: SW CTRL)\r
-       ODM_SetBBReg(pDM_Odm, 0x948 , BIT7, 0);\r
-               \r
-       ODM_SetMACReg(pDM_Odm, 0x40 , BIT3, 1);\r
-       ODM_SetMACReg(pDM_Odm, 0x38 , BIT11, 1);\r
-       ODM_SetMACReg(pDM_Odm, 0x4C ,  BIT24|BIT23, 2); //select DPDT_P and DPDT_N as output pin\r
-               \r
-       ODM_SetBBReg(pDM_Odm, 0x944 , BIT0|BIT1, 3); //in/out\r
-       ODM_SetBBReg(pDM_Odm, 0x944 , BIT31, 0); //\r
-\r
-       ODM_SetBBReg(pDM_Odm, 0x92C , BIT1, 0); //DPDT_P non-inverse\r
-       ODM_SetBBReg(pDM_Odm, 0x92C , BIT0, 1); //DPDT_N inverse\r
-\r
-       ODM_SetBBReg(pDM_Odm, 0x930 , 0xF0, 8); // DPDT_P = ANTSEL[0]\r
-       ODM_SetBBReg(pDM_Odm, 0x930 , 0xF, 8); // DPDT_N = ANTSEL[0]\r
-\r
-       //Timming issue\r
-       ODM_SetBBReg(pDM_Odm, 0xE20 , BIT23|BIT22|BIT21|BIT20, 8); //keep antidx after tx for ACK ( unit x 32 mu sec)\r
-\r
-       //2 [--For HW Bug Setting]\r
-       if(pDM_Odm->AntType == ODM_AUTO_ANT)\r
-               ODM_SetBBReg(pDM_Odm, 0xA00 , BIT15, 0); //CCK AntDiv function block enable\r
-\r
-       //ODM_SetBBReg(pDM_Odm, 0x80C , BIT21, 0); //TX Ant  by Reg\r
-\r
-\r
-}\r
-\r
-       \r
-\r
-VOID\r
-odm_S0S1_SWAntDiv_Init_8723B(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
-       pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8723B AntDiv_Init => AntDivType=[ S0S1_SW_AntDiv] \n"));\r
-\r
-       //Mapping Table\r
-       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte0, 0);\r
-       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte1, 1);\r
-       \r
-       //Output Pin Settings\r
-       //ODM_SetBBReg(pDM_Odm, 0x948 , BIT6, 0x1); \r
-       ODM_SetBBReg(pDM_Odm, 0x870 , BIT9|BIT8, 0); \r
-\r
-       pDM_FatTable->bBecomeLinked  =FALSE;\r
-       pDM_SWAT_Table->try_flag = 0xff;        \r
-       pDM_SWAT_Table->Double_chk_flag = 0;\r
-       pDM_SWAT_Table->TrafficLoad = TRAFFIC_LOW;\r
-\r
-       //Timming issue\r
-       ODM_SetBBReg(pDM_Odm, 0xE20 , BIT23|BIT22|BIT21|BIT20, 8); //keep antidx after tx for ACK ( unit x 32 mu sec)\r
-       \r
-       //2 [--For HW Bug Setting]\r
-       ODM_SetBBReg(pDM_Odm, 0x80C , BIT21, 0); //TX Ant  by Reg\r
-\r
-}\r
-#endif //#if (RTL8723B_SUPPORT == 1)\r
-\r
-\r
-#if (RTL8821A_SUPPORT == 1)\r
-VOID\r
-odm_TRX_HWAntDiv_Init_8821A(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)   \r
-\r
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
-       pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_5G_ANT_SELECT, (pu1Byte)(&pDM_Odm->AntType));   \r
-#else\r
-       pDM_Odm->AntType = ODM_AUTO_ANT;\r
-#endif\r
-       pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_5G_ANT_SELECT, (pu1Byte)(&pDM_Odm->AntType));   \r
-\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8821A AntDiv_Init => AntDivType=[ CG_TRX_HW_ANTDIV (DPDT)] \n"));\r
-\r
-       //Output Pin Settings\r
-       ODM_SetMACReg(pDM_Odm, 0x4C , BIT25, 0);\r
-\r
-       ODM_SetMACReg(pDM_Odm, 0x64 , BIT29, 1); //PAPE by WLAN control\r
-       ODM_SetMACReg(pDM_Odm, 0x64 , BIT28, 1); //LNAON by WLAN control\r
-\r
-       ODM_SetBBReg(pDM_Odm, 0xCB0 , bMaskDWord, 0x77775745);\r
-       ODM_SetBBReg(pDM_Odm, 0xCB8 , BIT16, 0);\r
-       \r
-       ODM_SetMACReg(pDM_Odm, 0x4C , BIT23, 0); //select DPDT_P and DPDT_N as output pin\r
-       ODM_SetMACReg(pDM_Odm, 0x4C , BIT24, 1); //by WLAN control\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , 0xF, 8); // DPDT_P = ANTSEL[0]\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , 0xF0, 8); // DPDT_N = ANTSEL[0]\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , BIT29, 0); //DPDT_P non-inverse\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , BIT28, 1); //DPDT_N inverse\r
-\r
-       //Mapping Table\r
-       ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte0, 0);\r
-       ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte1, 1);\r
-\r
-       //Set ANT1_8821A as MAIN_ANT\r
-       if((pDM_Odm->AntType == ODM_FIX_MAIN_ANT) || (pDM_Odm->AntType == ODM_AUTO_ANT))\r
-               ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
-       else\r
-               ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);\r
-\r
-       //OFDM HW AntDiv Parameters\r
-       ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF, 0xA0); //thershold\r
-       ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF000, 0x10); //bias\r
-               \r
-       //CCK HW AntDiv Parameters\r
-       ODM_SetBBReg(pDM_Odm, 0xA74 , BIT7, 1); //patch for clk from 88M to 80M\r
-       ODM_SetBBReg(pDM_Odm, 0xA0C , BIT4, 1); //do 64 samples\r
-\r
-       ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, 0); //CCK AntDiv function block enable\r
-\r
-       //BT Coexistence\r
-       ODM_SetBBReg(pDM_Odm, 0xCAC , BIT9, 1); //keep antsel_map when GNT_BT = 1\r
-       ODM_SetBBReg(pDM_Odm, 0x804 , BIT4, 1); //Disable hw antsw & fast_train.antsw when GNT_BT=1\r
-\r
-       //Timming issue\r
-       ODM_SetBBReg(pDM_Odm, 0x818 , BIT23|BIT22|BIT21|BIT20, 8); //keep antidx after tx for ACK ( unit x 32 mu sec)\r
-       ODM_SetBBReg(pDM_Odm, 0x8CC , BIT20|BIT19|BIT18, 3); //settling time of antdiv by RF LNA = 100ns\r
-\r
-       //response TX ant by RX ant\r
-       ODM_SetMACReg(pDM_Odm, 0x668 , BIT3, 1);\r
-       \r
-       //2 [--For HW Bug Setting]\r
-       if(pDM_Odm->AntType == ODM_AUTO_ANT)\r
-               ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, 0); //CCK AntDiv function block enable\r
-                       \r
-}\r
-\r
-VOID\r
-odm_S0S1_SWAntDiv_Init_8821A(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
-       pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-\r
-\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)   \r
-\r
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
-       pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_5G_ANT_SELECT, (pu1Byte)(&pDM_Odm->AntType));   \r
-#else\r
-       pDM_Odm->AntType = ODM_AUTO_ANT;\r
-#endif\r
-\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8821A AntDiv_Init => AntDivType=[ S0S1_SW_AntDiv] \n"));\r
-\r
-       //Output Pin Settings\r
-       ODM_SetMACReg(pDM_Odm, 0x4C , BIT25, 0);\r
-\r
-       ODM_SetMACReg(pDM_Odm, 0x64 , BIT29, 1); //PAPE by WLAN control\r
-       ODM_SetMACReg(pDM_Odm, 0x64 , BIT28, 1); //LNAON by WLAN control\r
-\r
-       ODM_SetBBReg(pDM_Odm, 0xCB0 , bMaskDWord, 0x77775745);\r
-       ODM_SetBBReg(pDM_Odm, 0xCB8 , BIT16, 0);\r
-       \r
-       ODM_SetMACReg(pDM_Odm, 0x4C , BIT23, 0); //select DPDT_P and DPDT_N as output pin\r
-       ODM_SetMACReg(pDM_Odm, 0x4C , BIT24, 1); //by WLAN control\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , 0xF, 8); // DPDT_P = ANTSEL[0]\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , 0xF0, 8); // DPDT_N = ANTSEL[0]\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , BIT29, 0); //DPDT_P non-inverse\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , BIT28, 1); //DPDT_N inverse\r
-\r
-       //Mapping Table\r
-       ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte0, 0);\r
-       ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte1, 1);\r
-\r
-       //Set ANT1_8821A as MAIN_ANT\r
-       if((pDM_Odm->AntType == ODM_FIX_MAIN_ANT) || (pDM_Odm->AntType == ODM_AUTO_ANT))\r
-               ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
-       else\r
-               ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);\r
-\r
-       //OFDM HW AntDiv Parameters\r
-       ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF, 0xA0); //thershold\r
-       ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF000, 0x10); //bias\r
-               \r
-       //CCK HW AntDiv Parameters\r
-       ODM_SetBBReg(pDM_Odm, 0xA74 , BIT7, 1); //patch for clk from 88M to 80M\r
-       ODM_SetBBReg(pDM_Odm, 0xA0C , BIT4, 1); //do 64 samples\r
-\r
-       ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, 0); //CCK AntDiv function block enable\r
-\r
-       //BT Coexistence\r
-       ODM_SetBBReg(pDM_Odm, 0xCAC , BIT9, 1); //keep antsel_map when GNT_BT = 1\r
-       ODM_SetBBReg(pDM_Odm, 0x804 , BIT4, 1); //Disable hw antsw & fast_train.antsw when GNT_BT=1\r
-\r
-       //Timming issue\r
-       ODM_SetBBReg(pDM_Odm, 0x818 , BIT23|BIT22|BIT21|BIT20, 8); //keep antidx after tx for ACK ( unit x 32 mu sec)\r
-       ODM_SetBBReg(pDM_Odm, 0x8CC , BIT20|BIT19|BIT18, 3); //settling time of antdiv by RF LNA = 100ns\r
-\r
-       //response TX ant by RX ant\r
-       ODM_SetMACReg(pDM_Odm, 0x668 , BIT3, 1);\r
-       \r
-       //2 [--For HW Bug Setting]\r
-       if(pDM_Odm->AntType == ODM_AUTO_ANT)\r
-               ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, 0); //CCK AntDiv function block enable\r
-\r
-               \r
-       ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 0); \r
-       \r
-       pDM_SWAT_Table->try_flag = 0xff;        \r
-       pDM_SWAT_Table->Double_chk_flag = 0;\r
-       pDM_SWAT_Table->TrafficLoad = TRAFFIC_LOW;\r
-       pDM_SWAT_Table->CurAntenna = MAIN_ANT;\r
-       pDM_SWAT_Table->PreAntenna = MAIN_ANT;\r
-       pDM_SWAT_Table->SWAS_NoLink_State = 0;\r
-\r
-}\r
-#endif //#if (RTL8821A_SUPPORT == 1)\r
-\r
-#if (RTL8881A_SUPPORT == 1)\r
-VOID\r
-odm_RX_HWAntDiv_Init_8881A(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8881A AntDiv_Init => AntDivType=[ CGCS_RX_HW_ANTDIV] \n"));\r
-\r
-}\r
-\r
-VOID\r
-odm_TRX_HWAntDiv_Init_8881A(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8881A AntDiv_Init => AntDivType=[ CG_TRX_HW_ANTDIV (SPDT)] \n"));\r
-\r
-       //Output Pin Settings\r
-       // [SPDT related]\r
-       ODM_SetMACReg(pDM_Odm, 0x4C , BIT25, 0);\r
-       ODM_SetMACReg(pDM_Odm, 0x4C , BIT26, 0);\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , BIT31, 0); //delay buffer\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , BIT22, 0); \r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , BIT24, 1);\r
-       ODM_SetBBReg(pDM_Odm, 0xCB0 , 0xF00, 8); // DPDT_P = ANTSEL[0]\r
-       ODM_SetBBReg(pDM_Odm, 0xCB0 , 0xF0000, 8); // DPDT_N = ANTSEL[0]        \r
-       \r
-       //Mapping Table\r
-       ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte0, 0);\r
-       ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte1, 1);\r
-\r
-       //OFDM HW AntDiv Parameters\r
-       ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF, 0xA0); //thershold\r
-       ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF000, 0x0); //bias\r
-       ODM_SetBBReg(pDM_Odm, 0x8CC , BIT20|BIT19|BIT18, 3); //settling time of antdiv by RF LNA = 100ns\r
-       \r
-       //CCK HW AntDiv Parameters\r
-       ODM_SetBBReg(pDM_Odm, 0xA74 , BIT7, 1); //patch for clk from 88M to 80M\r
-       ODM_SetBBReg(pDM_Odm, 0xA0C , BIT4, 1); //do 64 samples\r
-\r
-       //Timming issue\r
-       ODM_SetBBReg(pDM_Odm, 0x818 , BIT23|BIT22|BIT21|BIT20, 8); //keep antidx after tx for ACK ( unit x 32 mu sec)\r
-\r
-       //2 [--For HW Bug Setting]\r
-\r
-       ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 0); //TX Ant  by Reg //  A-cut bug\r
-}\r
-\r
-#endif //#if (RTL8881A_SUPPORT == 1)\r
-\r
-\r
-#if (RTL8812A_SUPPORT == 1)\r
-VOID\r
-odm_TRX_HWAntDiv_Init_8812A(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8812A AntDiv_Init => AntDivType=[ CG_TRX_HW_ANTDIV (SPDT)] \n"));\r
-\r
-       //3 //3 --RFE pin setting---------\r
-       //[BB]\r
-       ODM_SetBBReg(pDM_Odm, 0x900 , BIT10|BIT9|BIT8, 0x0);      //disable SW switch\r
-       ODM_SetBBReg(pDM_Odm, 0x900 , BIT17|BIT16, 0x0);         \r
-       ODM_SetBBReg(pDM_Odm, 0x974 , BIT7|BIT6, 0x3);     // in/out\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , BIT31, 0); //delay buffer\r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , BIT26, 0); \r
-       ODM_SetBBReg(pDM_Odm, 0xCB4 , BIT27, 1);\r
-       ODM_SetBBReg(pDM_Odm, 0xCB0 , 0xF000000, 8); // DPDT_P = ANTSEL[0]\r
-       ODM_SetBBReg(pDM_Odm, 0xCB0 , 0xF0000000, 8); // DPDT_N = ANTSEL[0]\r
-       //3 -------------------------\r
-\r
-       //Mapping Table\r
-       ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte0, 0);\r
-       ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte1, 1);\r
-\r
-       //OFDM HW AntDiv Parameters\r
-       ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF, 0xA0); //thershold\r
-       ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF000, 0x0); //bias\r
-       ODM_SetBBReg(pDM_Odm, 0x8CC , BIT20|BIT19|BIT18, 3); //settling time of antdiv by RF LNA = 100ns\r
-       \r
-       //CCK HW AntDiv Parameters\r
-       ODM_SetBBReg(pDM_Odm, 0xA74 , BIT7, 1); //patch for clk from 88M to 80M\r
-       ODM_SetBBReg(pDM_Odm, 0xA0C , BIT4, 1); //do 64 samples\r
-\r
-       //Timming issue\r
-       ODM_SetBBReg(pDM_Odm, 0x818 , BIT23|BIT22|BIT21|BIT20, 8); //keep antidx after tx for ACK ( unit x 32 mu sec)\r
-\r
-       //2 [--For HW Bug Setting]\r
-\r
-       ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 0); //TX Ant  by Reg //  A-cut bug\r
-       \r
-}\r
-\r
-#endif //#if (RTL8812A_SUPPORT == 1)\r
-\r
-VOID\r
-odm_HW_AntDiv(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       u4Byte  i,MinMaxRSSI=0xFF, AntDivMaxRSSI=0, MaxRSSI=0, LocalMaxRSSI;\r
-       u4Byte  Main_RSSI, Aux_RSSI, pkt_ratio_m=0, pkt_ratio_a=0,pkt_threshold=10;\r
-       u1Byte  RxIdleAnt=0, TargetAnt=7;\r
-       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-       pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
-       PSTA_INFO_T     pEntry;\r
-\r
-       if(!pDM_Odm->bLinked) //bLinked==False\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[No Link!!!]\n"));\r
-       \r
-               #if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
-                       if (pDM_Odm->antdiv_rssi)\r
-                               panic_printk("[No Link!!!]\n");\r
-               #endif\r
-       \r
-               if(pDM_FatTable->bBecomeLinked == TRUE)\r
-               {\r
-                       odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-                       ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
-\r
-                       pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;\r
-               }\r
-               return;\r
-       }       \r
-       else\r
-       {\r
-               if(pDM_FatTable->bBecomeLinked ==FALSE)\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Linked !!!]\n"));\r
-                       odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);\r
-                       if(pDM_Odm->SupportICType == ODM_RTL8821 )\r
-                               ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, 0); //CCK AntDiv function disable\r
-                               \r
-                       #if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
-                       else if(pDM_Odm->SupportICType == ODM_RTL8881 )\r
-                               ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, 0); //CCK AntDiv function disable\r
-                       #endif\r
-                       \r
-                       else if(pDM_Odm->SupportICType == ODM_RTL8723B ||pDM_Odm->SupportICType == ODM_RTL8812)\r
-                               ODM_SetBBReg(pDM_Odm, 0xA00 , BIT15, 0); //CCK AntDiv function disable\r
-                       \r
-                       pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;\r
-\r
-                       if(pDM_Odm->SupportICType==ODM_RTL8723B && pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
-                       {\r
-                               ODM_SetBBReg(pDM_Odm, 0x930 , 0xF0, 8); // DPDT_P = ANTSEL[0]   // for 8723B AntDiv function patch.  BB  Dino  130412   \r
-                               ODM_SetBBReg(pDM_Odm, 0x930 , 0xF, 8); // DPDT_N = ANTSEL[0]\r
-                       }\r
-               }       \r
-       }       \r
-\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("\n[HW AntDiv] Start =>\n"));\r
-          \r
-       for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)\r
-       {\r
-               pEntry = pDM_Odm->pODM_StaInfo[i];\r
-               if(IS_STA_VALID(pEntry))\r
-               {\r
-                       //2 Caculate RSSI per Antenna\r
-                       Main_RSSI = (pDM_FatTable->MainAnt_Cnt[i]!=0)?(pDM_FatTable->MainAnt_Sum[i]/pDM_FatTable->MainAnt_Cnt[i]):0;\r
-                       Aux_RSSI = (pDM_FatTable->AuxAnt_Cnt[i]!=0)?(pDM_FatTable->AuxAnt_Sum[i]/pDM_FatTable->AuxAnt_Cnt[i]):0;\r
-                       TargetAnt = (Main_RSSI==Aux_RSSI)?pDM_FatTable->RxIdleAnt:((Main_RSSI>=Aux_RSSI)?MAIN_ANT:AUX_ANT);\r
-                       /*\r
-                       if( pDM_FatTable->MainAnt_Cnt[i]!=0 && pDM_FatTable->AuxAnt_Cnt[i]!=0 )\r
-                       {\r
-                       pkt_ratio_m=( pDM_FatTable->MainAnt_Cnt[i] / pDM_FatTable->AuxAnt_Cnt[i] );\r
-                       pkt_ratio_a=( pDM_FatTable->AuxAnt_Cnt[i] / pDM_FatTable->MainAnt_Cnt[i] );\r
-                               \r
-                               if (pkt_ratio_m >= pkt_threshold)\r
-                                       TargetAnt=MAIN_ANT;\r
-                               \r
-                               else if(pkt_ratio_a >= pkt_threshold)\r
-                                       TargetAnt=AUX_ANT;\r
-                       }\r
-                       */                      \r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("*** SupportICType=[%u] \n",pDM_Odm->SupportICType));\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***  Main_Cnt = (( %u ))  , Main_RSSI= ((  %u )) \n", pDM_FatTable->MainAnt_Cnt[i], Main_RSSI));\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***  Aux_Cnt   = (( %u ))  , Aux_RSSI = ((  %u )) \n", pDM_FatTable->AuxAnt_Cnt[i]  , Aux_RSSI ));\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** MAC ID:[ %u ] , TargetAnt = (( %s )) \n", i ,( TargetAnt ==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
-\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("*** Phy_AntSel_A=[ %d, %d, %d] \n",((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT2)>>2,\r
-                                                                                                             ((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT1) >>1, ((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT0)));\r
-                       #if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
-                       if (pDM_Odm->antdiv_rssi)\r
-                       {\r
-                               panic_printk("*** SupportICType=[%lu] \n",pDM_Odm->SupportICType);\r
-                               //panic_printk("*** Phy_AntSel_A=[ %d, %d, %d] \n",((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT2)>>2,\r
-                               //      ((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT1) >>1, ((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT0));\r
-                               //panic_printk("*** Phy_AntSel_B=[ %d, %d, %d] \n",((pDM_Odm->DM_FatTable.antsel_rx_keep_1)&BIT2)>>2,\r
-                               //      ((pDM_Odm->DM_FatTable.antsel_rx_keep_1)&BIT1) >>1, ((pDM_Odm->DM_FatTable.antsel_rx_keep_1)&BIT0))\r
-                               panic_printk("*** Client[ %lu ] , Main_Cnt = (( %lu ))  , Main_RSSI= ((  %lu )) \n",i, pDM_FatTable->MainAnt_Cnt[i], Main_RSSI);\r
-                               panic_printk("*** Client[ %lu ] , Aux_Cnt   = (( %lu ))  , Aux_RSSI = ((  %lu )) \n" ,i, pDM_FatTable->AuxAnt_Cnt[i] , Aux_RSSI);\r
-                       }\r
-                       #endif\r
-\r
-\r
-                       LocalMaxRSSI = (Main_RSSI>Aux_RSSI)?Main_RSSI:Aux_RSSI;\r
-                       //2 Select MaxRSSI for DIG\r
-                       if((LocalMaxRSSI > AntDivMaxRSSI) && (LocalMaxRSSI < 40))\r
-                               AntDivMaxRSSI = LocalMaxRSSI;\r
-                       if(LocalMaxRSSI > MaxRSSI)\r
-                               MaxRSSI = LocalMaxRSSI;\r
-\r
-                       //2 Select RX Idle Antenna\r
-                       if ( (LocalMaxRSSI != 0) &&  (LocalMaxRSSI < MinMaxRSSI) )\r
-                       {\r
-                               RxIdleAnt = TargetAnt;\r
-                               MinMaxRSSI = LocalMaxRSSI;\r
-                       }\r
-                       /*\r
-                       if((pDM_FatTable->RxIdleAnt == MAIN_ANT) && (Main_RSSI == 0))\r
-                               Main_RSSI = Aux_RSSI;\r
-                       else if((pDM_FatTable->RxIdleAnt == AUX_ANT) && (Aux_RSSI == 0))\r
-                               Aux_RSSI = Main_RSSI;\r
-               \r
-                       LocalMinRSSI = (Main_RSSI>Aux_RSSI)?Aux_RSSI:Main_RSSI;\r
-                       if(LocalMinRSSI < MinRSSI)\r
-                       {\r
-                               MinRSSI = LocalMinRSSI;\r
-                               RxIdleAnt = TargetAnt;\r
-                       }       \r
-                       */\r
-                       //2 Select TX Antenna\r
-\r
-                       #if TX_BY_REG\r
-                       \r
-                       #else\r
-                               if(pDM_Odm->AntDivType != CGCS_RX_HW_ANTDIV)\r
-                                       odm_UpdateTxAnt(pDM_Odm, TargetAnt, i);\r
-                       #endif\r
-\r
-               }\r
-               pDM_FatTable->MainAnt_Sum[i] = 0;\r
-               pDM_FatTable->AuxAnt_Sum[i] = 0;\r
-               pDM_FatTable->MainAnt_Cnt[i] = 0;\r
-               pDM_FatTable->AuxAnt_Cnt[i] = 0;\r
-       }\r
-       \r
-       //2 Set RX Idle Antenna\r
-       ODM_UpdateRxIdleAnt(pDM_Odm, RxIdleAnt);\r
-\r
-       #if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
-               if (pDM_Odm->antdiv_rssi)\r
-                       panic_printk("*** RxIdleAnt = (( %s )) \n \n", ( RxIdleAnt ==MAIN_ANT)?"MAIN_ANT":"AUX_ANT");\r
-       #endif\r
-       \r
-       pDM_DigTable->AntDiv_RSSI_max = AntDivMaxRSSI;\r
-       pDM_DigTable->RSSI_max = MaxRSSI;\r
-}\r
-\r
-\r
-\r
-#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
-VOID\r
-odm_S0S1_SwAntDiv(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              u1Byte                  Step\r
-       )\r
-{\r
-       u4Byte                  i,MinMaxRSSI=0xFF, LocalMaxRSSI,LocalMinRSSI;\r
-       u4Byte                  Main_RSSI, Aux_RSSI;\r
-       u1Byte                  reset_period=10, SWAntDiv_threshold=35;\r
-       u1Byte                  HighTraffic_TrainTime_U=0x32,HighTraffic_TrainTime_L,Train_time_temp;\r
-       u1Byte                  LowTraffic_TrainTime_U=200,LowTraffic_TrainTime_L;\r
-       u1Byte                  RxIdleAnt, TargetAnt, nextAnt;\r
-       pSWAT_T                 pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
-       pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;   \r
-       PSTA_INFO_T             pEntry=NULL;\r
-       //static u1Byte         reset_idx;\r
-       u4Byte                  value32;\r
-       PADAPTER                Adapter  =  pDM_Odm->Adapter;\r
-       u8Byte                  curTxOkCnt=0, curRxOkCnt=0,TxCntOffset, RxCntOffset;\r
-       \r
-       if(!pDM_Odm->bLinked) //bLinked==False\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[No Link!!!]\n"));\r
-               if(pDM_FatTable->bBecomeLinked == TRUE)\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Set REG 948[9:6]=0x0 \n"));\r
-                       if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-                               ODM_SetBBReg(pDM_Odm, 0x948 , BIT9|BIT8|BIT7|BIT6, 0x0); \r
-                       \r
-                       pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;\r
-               }\r
-               return;\r
-       }\r
-       else\r
-       {\r
-               if(pDM_FatTable->bBecomeLinked ==FALSE)\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Linked !!!]\n"));\r
-                       \r
-                       if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-                       {\r
-                               value32 = ODM_GetBBReg(pDM_Odm, 0x864, BIT5|BIT4|BIT3);\r
-                               \r
-                               if (value32==0x0)\r
-                                       ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
-                               else if (value32==0x1)\r
-                                       ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);\r
-                               \r
-                               ODM_SetBBReg(pDM_Odm, 0x948 , BIT6, 0x1);\r
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Set REG 948[6]=0x1 , Set REG 864[5:3]=0x%x \n",value32 ));\r
-                       }\r
-\r
-                       pDM_SWAT_Table->lastTxOkCnt = 0; \r
-                       pDM_SWAT_Table->lastRxOkCnt =0; \r
-                       TxCntOffset = Adapter->TxStats.NumTxBytesUnicast;\r
-                       RxCntOffset = Adapter->RxStats.NumRxBytesUnicast;\r
-                       \r
-                       pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;\r
-               }\r
-               else\r
-               {\r
-                       TxCntOffset = 0;\r
-                       RxCntOffset = 0;\r
-               }\r
-       }\r
-       \r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[%d] { try_flag=(( %d )), Step=(( %d )), Double_chk_flag = (( %d )) }\n",\r
-               __LINE__,pDM_SWAT_Table->try_flag,Step,pDM_SWAT_Table->Double_chk_flag));\r
-\r
-       // Handling step mismatch condition.\r
-       // Peak step is not finished at last time. Recover the variable and check again.\r
-       if(     Step != pDM_SWAT_Table->try_flag        )\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Step != try_flag]    Need to Reset After Link\n"));\r
-               ODM_SwAntDivRestAfterLink(pDM_Odm);\r
-       }\r
-\r
-       if(pDM_SWAT_Table->try_flag == 0xff) \r
-       {       \r
-               pDM_SWAT_Table->try_flag = 0;\r
-               pDM_SWAT_Table->Train_time_flag=0;\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("[set try_flag = 0]  Prepare for peak!\n\n"));\r
-               return;\r
-       }       \r
-       else//if( try_flag != 0xff ) \r
-       {\r
-               //1 Normal State (Begin Trying)\r
-               if(pDM_SWAT_Table->try_flag == 0) \r
-               {\r
-               \r
-                       //---trafic decision---\r
-                       curTxOkCnt = Adapter->TxStats.NumTxBytesUnicast - pDM_SWAT_Table->lastTxOkCnt - TxCntOffset;\r
-                       curRxOkCnt =Adapter->RxStats.NumRxBytesUnicast - pDM_SWAT_Table->lastRxOkCnt - RxCntOffset;\r
-                       pDM_SWAT_Table->lastTxOkCnt = Adapter->TxStats.NumTxBytesUnicast;\r
-                       pDM_SWAT_Table->lastRxOkCnt = Adapter->RxStats.NumRxBytesUnicast;\r
-                       \r
-                       if (curTxOkCnt > 1875000 || curRxOkCnt > 1875000)//if(PlatformDivision64(curTxOkCnt+curRxOkCnt, 2) > 1875000)  ( 1.875M * 8bit ) / 2= 7.5M bits /sec )\r
-                       {\r
-                               pDM_SWAT_Table->TrafficLoad = TRAFFIC_HIGH;\r
-                               Train_time_temp=pDM_SWAT_Table->Train_time ;\r
-                               \r
-                               if(pDM_SWAT_Table->Train_time_flag==3)\r
-                               {\r
-                                       HighTraffic_TrainTime_L=0xa;\r
-                                       \r
-                                       if(Train_time_temp<=16)\r
-                                               Train_time_temp=HighTraffic_TrainTime_L;\r
-                                       else\r
-                                               Train_time_temp-=16;\r
-                                       \r
-                               }                               \r
-                               else if(pDM_SWAT_Table->Train_time_flag==2)\r
-                               {\r
-                                       Train_time_temp-=8;\r
-                                       HighTraffic_TrainTime_L=0xf;\r
-                               }       \r
-                               else if(pDM_SWAT_Table->Train_time_flag==1)\r
-                               {\r
-                                       Train_time_temp-=4;\r
-                                       HighTraffic_TrainTime_L=0x1e;\r
-                               }\r
-                               else if(pDM_SWAT_Table->Train_time_flag==0)\r
-                               {\r
-                                       Train_time_temp+=8;\r
-                                       HighTraffic_TrainTime_L=0x28;\r
-                               }\r
-\r
-                               \r
-                               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** Train_time_temp = ((%d))\n",Train_time_temp));\r
-\r
-                               //--\r
-                               if(Train_time_temp > HighTraffic_TrainTime_U)\r
-                                       Train_time_temp=HighTraffic_TrainTime_U;\r
-                               \r
-                               else if(Train_time_temp < HighTraffic_TrainTime_L)\r
-                                       Train_time_temp=HighTraffic_TrainTime_L;\r
-\r
-                               pDM_SWAT_Table->Train_time = Train_time_temp; //50ms~10ms\r
-                               \r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("  Train_time_flag=((%d)) , Train_time=((%d)) \n",pDM_SWAT_Table->Train_time_flag, pDM_SWAT_Table->Train_time));\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("  [HIGH Traffic]  \n" ));\r
-                       }\r
-                       else if (curTxOkCnt > 125000 || curRxOkCnt > 125000) // ( 0.125M * 8bit ) / 2 =  0.5M bits /sec )\r
-                       {\r
-                               pDM_SWAT_Table->TrafficLoad = TRAFFIC_LOW;\r
-                               Train_time_temp=pDM_SWAT_Table->Train_time ;\r
-\r
-                               if(pDM_SWAT_Table->Train_time_flag==3)\r
-                               {\r
-                                       LowTraffic_TrainTime_L=10;\r
-                                       if(Train_time_temp<50)\r
-                                               Train_time_temp=LowTraffic_TrainTime_L;\r
-                                       else\r
-                                               Train_time_temp-=50;\r
-                               }                               \r
-                               else if(pDM_SWAT_Table->Train_time_flag==2)\r
-                               {\r
-                                       Train_time_temp-=30;\r
-                                       LowTraffic_TrainTime_L=36;\r
-                               }       \r
-                               else if(pDM_SWAT_Table->Train_time_flag==1)\r
-                               {\r
-                                       Train_time_temp-=10;\r
-                                       LowTraffic_TrainTime_L=40;\r
-                               }\r
-                               else\r
-                                       Train_time_temp+=10;    \r
-\r
-                               //--\r
-                               if(Train_time_temp >= LowTraffic_TrainTime_U)\r
-                                       Train_time_temp=LowTraffic_TrainTime_U;\r
-                               \r
-                               else if(Train_time_temp <= LowTraffic_TrainTime_L)\r
-                                       Train_time_temp=LowTraffic_TrainTime_L;\r
-\r
-                               pDM_SWAT_Table->Train_time = Train_time_temp; //50ms~20ms\r
-\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("  Train_time_flag=((%d)) , Train_time=((%d)) \n",pDM_SWAT_Table->Train_time_flag, pDM_SWAT_Table->Train_time));\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("  [Low Traffic]  \n" ));\r
-                       }\r
-                       else\r
-                       {\r
-                               pDM_SWAT_Table->TrafficLoad = TRAFFIC_UltraLOW;\r
-                               pDM_SWAT_Table->Train_time = 0xc8; //200ms\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("  [Ultra-Low Traffic]  \n" ));\r
-                       }\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("TxOkCnt=(( %llu )), RxOkCnt=(( %llu )) \n", \r
-                               curTxOkCnt ,curRxOkCnt ));\r
-                               \r
-                       //-----------------\r
-               \r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,(" Current MinMaxRSSI is ((%d)) \n",pDM_FatTable->MinMaxRSSI));\r
-\r
-                        //---reset index---\r
-                       if(pDM_SWAT_Table->reset_idx>=reset_period)\r
-                       {\r
-                               pDM_FatTable->MinMaxRSSI=0; //\r
-                               pDM_SWAT_Table->reset_idx=0;\r
-                       }\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("reset_idx = (( %d )) \n",pDM_SWAT_Table->reset_idx ));\r
-                       //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("reset_idx=%d\n",pDM_SWAT_Table->reset_idx));\r
-                       pDM_SWAT_Table->reset_idx++;\r
-\r
-                       //---double check flag---\r
-                       if(pDM_FatTable->MinMaxRSSI > SWAntDiv_threshold && pDM_SWAT_Table->Double_chk_flag== 0)\r
-                       {                       \r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,(" MinMaxRSSI is ((%d)), and > %d \n",\r
-                                       pDM_FatTable->MinMaxRSSI,SWAntDiv_threshold));\r
-\r
-                               pDM_SWAT_Table->Double_chk_flag =1;\r
-                               pDM_SWAT_Table->try_flag = 1; \r
-                               pDM_SWAT_Table->RSSI_Trying = 0;\r
-\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, (" Test the current Ant for (( %d )) ms again \n", pDM_SWAT_Table->Train_time));\r
-                               ODM_UpdateRxIdleAnt(pDM_Odm, pDM_FatTable->RxIdleAnt);  \r
-                               ODM_SetTimer(pDM_Odm,&pDM_SWAT_Table->SwAntennaSwitchTimer_8723B, pDM_SWAT_Table->Train_time ); //ms    \r
-                               return;\r
-                       }\r
-                       \r
-                       nextAnt = (pDM_FatTable->RxIdleAnt == MAIN_ANT)? AUX_ANT : MAIN_ANT;\r
-\r
-                       pDM_SWAT_Table->try_flag = 1;\r
-                       \r
-                       if(pDM_SWAT_Table->reset_idx<=1)\r
-                               pDM_SWAT_Table->RSSI_Trying = 2;\r
-                       else\r
-                               pDM_SWAT_Table->RSSI_Trying = 1;\r
-                       \r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("[set try_flag=1]  Normal State:  Begin Trying!! \n"));\r
-                                                                       \r
-               }\r
-       \r
-               else if(pDM_SWAT_Table->try_flag == 1 && pDM_SWAT_Table->Double_chk_flag== 0)\r
-               {       \r
-                       nextAnt = (pDM_FatTable->RxIdleAnt  == MAIN_ANT)? AUX_ANT : MAIN_ANT;           \r
-                       pDM_SWAT_Table->RSSI_Trying--;\r
-               }\r
-               \r
-               //1 Decision State\r
-               if((pDM_SWAT_Table->try_flag == 1)&&(pDM_SWAT_Table->RSSI_Trying == 0) )\r
-               {\r
-                       \r
-                       for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)\r
-                       {\r
-                               pEntry = pDM_Odm->pODM_StaInfo[i];\r
-                               if(IS_STA_VALID(pEntry))\r
-                               {\r
-                                       //2 Caculate RSSI per Antenna\r
-                                       Main_RSSI = (pDM_FatTable->MainAnt_Cnt[i]!=0)?(pDM_FatTable->MainAnt_Sum[i]/pDM_FatTable->MainAnt_Cnt[i]):0;\r
-                                       Aux_RSSI = (pDM_FatTable->AuxAnt_Cnt[i]!=0)?(pDM_FatTable->AuxAnt_Sum[i]/pDM_FatTable->AuxAnt_Cnt[i]):0;\r
-                                       \r
-                                       if(pDM_FatTable->MainAnt_Cnt[i]<=1 && pDM_FatTable->CCK_counter_main>=1)\r
-                                               Main_RSSI=0;    \r
-                                       \r
-                                       if(pDM_FatTable->AuxAnt_Cnt[i]<=1 && pDM_FatTable->CCK_counter_aux>=1)\r
-                                               Aux_RSSI=0;\r
-\r
-                                       TargetAnt = (Main_RSSI==Aux_RSSI)?pDM_SWAT_Table->PreAntenna:((Main_RSSI>=Aux_RSSI)?MAIN_ANT:AUX_ANT);\r
-                                       LocalMaxRSSI = (Main_RSSI>=Aux_RSSI) ? Main_RSSI : Aux_RSSI;\r
-                                       LocalMinRSSI = (Main_RSSI>=Aux_RSSI) ? Aux_RSSI : Main_RSSI;\r
-                                       \r
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***  CCK_counter_main = (( %d ))  , CCK_counter_aux= ((  %d )) \n", pDM_FatTable->CCK_counter_main, pDM_FatTable->CCK_counter_aux));\r
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***  OFDM_counter_main = (( %d ))  , OFDM_counter_aux= ((  %d )) \n", pDM_FatTable->OFDM_counter_main, pDM_FatTable->OFDM_counter_aux));\r
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***  Main_Cnt = (( %d ))  , Main_RSSI= ((  %d )) \n", pDM_FatTable->MainAnt_Cnt[i], Main_RSSI));\r
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***  Aux_Cnt   = (( %d ))  , Aux_RSSI = ((  %d )) \n", pDM_FatTable->AuxAnt_Cnt[i]  , Aux_RSSI ));\r
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** MAC ID:[ %d ] , TargetAnt = (( %s )) \n", i ,( TargetAnt ==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
-                                       \r
-                                       //2 Select RX Idle Antenna\r
-                                       \r
-                                       if (LocalMaxRSSI != 0 && LocalMaxRSSI < MinMaxRSSI)\r
-                                       {\r
-                                                       RxIdleAnt = TargetAnt;\r
-                                                       MinMaxRSSI = LocalMaxRSSI;\r
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** LocalMaxRSSI-LocalMinRSSI = ((%d))\n",(LocalMaxRSSI-LocalMinRSSI)));\r
-                                       \r
-                                                       if((LocalMaxRSSI-LocalMinRSSI)>8)\r
-                                                       {\r
-                                                               if(LocalMinRSSI != 0)\r
-                                                                       pDM_SWAT_Table->Train_time_flag=3;\r
-                                                               else\r
-                                                               {\r
-                                                                       if(MinMaxRSSI > SWAntDiv_threshold)\r
-                                                                               pDM_SWAT_Table->Train_time_flag=0;\r
-                                                                       else\r
-                                                                               pDM_SWAT_Table->Train_time_flag=3;\r
-                                                               }\r
-                                                       }\r
-                                                       else if((LocalMaxRSSI-LocalMinRSSI)>5)\r
-                                                               pDM_SWAT_Table->Train_time_flag=2;\r
-                                                       else if((LocalMaxRSSI-LocalMinRSSI)>2)\r
-                                                               pDM_SWAT_Table->Train_time_flag=1;\r
-                                                       else\r
-                                                               pDM_SWAT_Table->Train_time_flag=0;\r
-                                                       \r
-                                       }\r
-                                       \r
-                                       //2 Select TX Antenna\r
-                                       if(TargetAnt == MAIN_ANT)\r
-                                               pDM_FatTable->antsel_a[i] = ANT1_2G;\r
-                                       else\r
-                                               pDM_FatTable->antsel_a[i] = ANT2_2G;\r
-                       \r
-                               }\r
-                                       pDM_FatTable->MainAnt_Sum[i] = 0;\r
-                                       pDM_FatTable->AuxAnt_Sum[i] = 0;\r
-                                       pDM_FatTable->MainAnt_Cnt[i] = 0;\r
-                                       pDM_FatTable->AuxAnt_Cnt[i] = 0;\r
-                                       pDM_FatTable->CCK_counter_main=0;\r
-                                       pDM_FatTable->CCK_counter_aux=0;\r
-                                       pDM_FatTable->OFDM_counter_main=0;\r
-                                       pDM_FatTable->OFDM_counter_aux=0;\r
-\r
-                       }\r
-               \r
-                       \r
-                       pDM_FatTable->MinMaxRSSI=MinMaxRSSI;\r
-                       pDM_SWAT_Table->try_flag = 0;\r
-                                               \r
-                       if( pDM_SWAT_Table->Double_chk_flag==1)\r
-                       {\r
-                               pDM_SWAT_Table->Double_chk_flag=0;\r
-                               if(pDM_FatTable->MinMaxRSSI > SWAntDiv_threshold)\r
-                               {\r
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,(" [Double check] MinMaxRSSI ((%d)) > %d again!! \n",\r
-                                               pDM_FatTable->MinMaxRSSI,SWAntDiv_threshold));\r
-                                       \r
-                                       ODM_UpdateRxIdleAnt(pDM_Odm, RxIdleAnt);        \r
-                                       \r
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("[reset try_flag = 0] Training accomplished !!!] \n\n\n"));\r
-                                       return;\r
-                               }\r
-                               else\r
-                               {\r
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,(" [Double check] MinMaxRSSI ((%d)) <= %d !! \n",\r
-                                               pDM_FatTable->MinMaxRSSI,SWAntDiv_threshold));\r
-\r
-                                       nextAnt = (pDM_FatTable->RxIdleAnt  == MAIN_ANT)? AUX_ANT : MAIN_ANT;\r
-                                       pDM_SWAT_Table->try_flag = 0; \r
-                                       pDM_SWAT_Table->reset_idx=reset_period;\r
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("[set try_flag=0]  Normal State:  Need to tryg again!! \n\n\n"));\r
-                                       return;\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               pDM_SWAT_Table->PreAntenna =RxIdleAnt;\r
-                               ODM_UpdateRxIdleAnt(pDM_Odm, RxIdleAnt );\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("[reset try_flag = 0] Training accomplished !!!] \n\n\n"));\r
-                               return;\r
-                       }\r
-                       \r
-               }\r
-\r
-       }\r
-\r
-       //1 4.Change TRX antenna\r
-\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("RSSI_Trying = (( %d )),    Ant: (( %s )) >>> (( %s )) \n",\r
-               pDM_SWAT_Table->RSSI_Trying, (pDM_FatTable->RxIdleAnt  == MAIN_ANT?"MAIN":"AUX"),(nextAnt == MAIN_ANT?"MAIN":"AUX")));\r
-               \r
-       ODM_UpdateRxIdleAnt(pDM_Odm, nextAnt);\r
-\r
-       //1 5.Reset Statistics\r
-\r
-       pDM_FatTable->RxIdleAnt  = nextAnt;\r
-\r
-       //1 6.Set next timer   (Trying State)\r
-       \r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, (" Test ((%s)) Ant for (( %d )) ms \n", (nextAnt == MAIN_ANT?"MAIN":"AUX"), pDM_SWAT_Table->Train_time));\r
-       ODM_SetTimer(pDM_Odm,&pDM_SWAT_Table->SwAntennaSwitchTimer_8723B, pDM_SWAT_Table->Train_time ); //ms\r
-}\r
-\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-VOID\r
-ODM_SW_AntDiv_Callback(\r
-       PRT_TIMER               pTimer\r
-)\r
-{\r
-       PADAPTER                Adapter = (PADAPTER)pTimer->Adapter;\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
-       pSWAT_T                 pDM_SWAT_Table = &pHalData->DM_OutSrc.DM_SWAT_Table;\r
-\r
-       #if DEV_BUS_TYPE==RT_PCI_INTERFACE\r
-               #if USE_WORKITEM\r
-                       ODM_ScheduleWorkItem(&pDM_SWAT_Table->SwAntennaSwitchWorkitem_8723B);\r
-               #else\r
-                       {\r
-                       //DbgPrint("SW_antdiv_Callback");\r
-                       odm_S0S1_SwAntDiv(&pHalData->DM_OutSrc, SWAW_STEP_DETERMINE);\r
-                       }\r
-               #endif\r
-       #else\r
-       ODM_ScheduleWorkItem(&pDM_SWAT_Table->SwAntennaSwitchWorkitem_8723B);\r
-       #endif\r
-}\r
-VOID\r
-ODM_SW_AntDiv_WorkitemCallback(\r
-    IN PVOID            pContext\r
-    )\r
-{\r
-       PADAPTER                pAdapter = (PADAPTER)pContext;\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
-       \r
-       //DbgPrint("SW_antdiv_Workitem_Callback");\r
-       odm_S0S1_SwAntDiv(&pHalData->DM_OutSrc, SWAW_STEP_DETERMINE);\r
-}\r
-#endif  //#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-VOID\r
-ODM_SW_AntDiv_Callback(void *FunctionContext)\r
-{\r
-       PDM_ODM_T       pDM_Odm= (PDM_ODM_T)FunctionContext;\r
-       PADAPTER        padapter = pDM_Odm->Adapter;\r
-       if(padapter->net_closed == _TRUE)\r
-           return;\r
-       //odm_S0S1_SwAntDiv(pDM_Odm, SWAW_STEP_DETERMINE);      \r
-}\r
-#endif  //#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-\r
-#endif //#if (RTL8723B_SUPPORT == 1)\r
-\r
-\r
-#if(RTL8188E_SUPPORT == 1  || RTL8192E_SUPPORT == 1)\r
-#if (!(DM_ODM_SUPPORT_TYPE == ODM_CE))\r
-VOID\r
-odm_SetNextMACAddrTarget(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-       PSTA_INFO_T     pEntry;\r
-       //u1Byte        Bssid[6];\r
-       u4Byte  value32, i;\r
-\r
-       //\r
-       //2012.03.26 LukeLee: The MAC address is changed according to MACID in turn\r
-       //\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("odm_SetNextMACAddrTarget() ==>\n"));\r
-       if(pDM_Odm->bLinked)\r
-       {\r
-               for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)\r
-               {\r
-                       if((pDM_FatTable->TrainIdx+1) == ODM_ASSOCIATE_ENTRY_NUM)\r
-                               pDM_FatTable->TrainIdx = 0;\r
-                       else\r
-                               pDM_FatTable->TrainIdx++;\r
-                       \r
-                       pEntry = pDM_Odm->pODM_StaInfo[pDM_FatTable->TrainIdx];\r
-                       if(IS_STA_VALID(pEntry))\r
-                       {\r
-                               //Match MAC ADDR\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-                               value32 = (pEntry->hwaddr[5]<<8)|pEntry->hwaddr[4];\r
-#else\r
-                               value32 = (pEntry->MacAddr[5]<<8)|pEntry->MacAddr[4];\r
-#endif\r
-                               ODM_SetMACReg(pDM_Odm, 0x7b4, 0xFFFF, value32);\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-                               value32 = (pEntry->hwaddr[3]<<24)|(pEntry->hwaddr[2]<<16) |(pEntry->hwaddr[1]<<8) |pEntry->hwaddr[0];\r
-#else\r
-                               value32 = (pEntry->MacAddr[3]<<24)|(pEntry->MacAddr[2]<<16) |(pEntry->MacAddr[1]<<8) |pEntry->MacAddr[0];\r
-#endif\r
-                               ODM_SetMACReg(pDM_Odm, 0x7b0, bMaskDWord, value32);\r
-\r
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_FatTable->TrainIdx=%lu\n",pDM_FatTable->TrainIdx));\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Training MAC Addr = %x:%x:%x:%x:%x:%x\n",\r
-                                       pEntry->hwaddr[5],pEntry->hwaddr[4],pEntry->hwaddr[3],pEntry->hwaddr[2],pEntry->hwaddr[1],pEntry->hwaddr[0]));\r
-#else\r
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Training MAC Addr = %x:%x:%x:%x:%x:%x\n",\r
-                                       pEntry->MacAddr[5],pEntry->MacAddr[4],pEntry->MacAddr[3],pEntry->MacAddr[2],pEntry->MacAddr[1],pEntry->MacAddr[0]));\r
-#endif\r
-\r
-                               break;\r
-                       }\r
-               }\r
-               \r
-       }\r
-\r
-#if 0\r
-       //\r
-       //2012.03.26 LukeLee: This should be removed later, the MAC address is changed according to MACID in turn\r
-       //\r
-       #if( DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       {               \r
-               PADAPTER        Adapter =  pDM_Odm->Adapter;\r
-               PMGNT_INFO      pMgntInfo = &Adapter->MgntInfo;\r
-\r
-               for (i=0; i<6; i++)\r
-               {\r
-                       Bssid[i] = pMgntInfo->Bssid[i];\r
-                       //DbgPrint("Bssid[%d]=%x\n", i, Bssid[i]);\r
-               }\r
-       }\r
-       #endif\r
-\r
-       //odm_SetNextMACAddrTarget(pDM_Odm);\r
-       \r
-       //1 Select MAC Address Filter\r
-       for (i=0; i<6; i++)\r
-       {\r
-               if(Bssid[i] != pDM_FatTable->Bssid[i])\r
-               {\r
-                       bMatchBSSID = FALSE;\r
-                       break;\r
-               }\r
-       }\r
-       if(bMatchBSSID == FALSE)\r
-       {\r
-               //Match MAC ADDR\r
-               value32 = (Bssid[5]<<8)|Bssid[4];\r
-               ODM_SetMACReg(pDM_Odm, 0x7b4, 0xFFFF, value32);\r
-               value32 = (Bssid[3]<<24)|(Bssid[2]<<16) |(Bssid[1]<<8) |Bssid[0];\r
-               ODM_SetMACReg(pDM_Odm, 0x7b0, bMaskDWord, value32);\r
-       }\r
-\r
-       return bMatchBSSID;\r
-#endif\r
-                               \r
-}\r
-\r
-VOID\r
-odm_FastAntTraining(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       u4Byte  i, MaxRSSI=0;\r
-       u1Byte  TargetAnt=2;\r
-       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-       BOOLEAN bPktFilterMacth = FALSE;\r
-\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("==>odm_FastAntTraining()\n"));\r
-\r
-       //1 TRAINING STATE\r
-       if(pDM_FatTable->FAT_State == FAT_TRAINING_STATE)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Enter FAT_TRAINING_STATE\n"));\r
-               //2 Caculate RSSI per Antenna\r
-               for (i=0; i<7; i++)\r
-               {\r
-                       if(pDM_FatTable->antRSSIcnt[i] == 0)\r
-                               pDM_FatTable->antAveRSSI[i] = 0;\r
-                       else\r
-                       {\r
-                       pDM_FatTable->antAveRSSI[i] = pDM_FatTable->antSumRSSI[i] /pDM_FatTable->antRSSIcnt[i];\r
-                               bPktFilterMacth = TRUE;\r
-                       }\r
-                       if(pDM_FatTable->antAveRSSI[i] > MaxRSSI)\r
-                       {\r
-                               MaxRSSI = pDM_FatTable->antAveRSSI[i];\r
-                               TargetAnt = (u1Byte) i;\r
-                       }\r
-\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_FatTable->antAveRSSI[%lu] = %lu, pDM_FatTable->antRSSIcnt[%lu] = %lu\n",\r
-                               i, pDM_FatTable->antAveRSSI[i], i, pDM_FatTable->antRSSIcnt[i]));\r
-               }\r
-\r
-               //2 Select TRX Antenna\r
-               if(bPktFilterMacth == FALSE)\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("None Packet is matched\n"));\r
-\r
-                       ODM_SetBBReg(pDM_Odm, 0xe08 , BIT16, 0);        //RegE08[16]=1'b0               //disable fast training\r
-                       ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 0);         //RegC50[7]=1'b0                //disable HW AntDiv\r
-               }\r
-               else\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("TargetAnt=%d, MaxRSSI=%lu\n",TargetAnt,MaxRSSI));\r
-\r
-                       ODM_SetBBReg(pDM_Odm, 0xe08 , BIT16, 0);        //RegE08[16]=1'b0               //disable fast training\r
-                       //ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 0);               //RegC50[7]=1'b0                //disable HW AntDiv\r
-                       ODM_SetBBReg(pDM_Odm, 0x864 , BIT8|BIT7|BIT6, TargetAnt);       //Default RX is Omni, Optional RX is the best decision by FAT\r
-                       //ODM_SetBBReg(pDM_Odm, 0x860 , BIT14|BIT13|BIT12, TargetAnt);  //Default TX\r
-                       ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 1); //Reg80c[21]=1'b1              //from TX Info\r
-\r
-#if 0\r
-                       pEntry = pDM_Odm->pODM_StaInfo[pDM_FatTable->TrainIdx];\r
-\r
-                       if(IS_STA_VALID(pEntry))\r
-                       {\r
-                               pEntry->antsel_a = TargetAnt&BIT0;\r
-                               pEntry->antsel_b = (TargetAnt&BIT1)>>1;\r
-                               pEntry->antsel_c = (TargetAnt&BIT2)>>2;\r
-                       }\r
-#else\r
-                       pDM_FatTable->antsel_a[pDM_FatTable->TrainIdx] = TargetAnt&BIT0;\r
-                       pDM_FatTable->antsel_b[pDM_FatTable->TrainIdx] = (TargetAnt&BIT1)>>1;\r
-                       pDM_FatTable->antsel_c[pDM_FatTable->TrainIdx] = (TargetAnt&BIT2)>>2;\r
-#endif\r
-\r
-\r
-                       if(TargetAnt == 0)\r
-                               ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 0);         //RegC50[7]=1'b0                //disable HW AntDiv\r
-\r
-               }\r
-\r
-               //2 Reset Counter\r
-               for(i=0; i<7; i++)\r
-               {\r
-                       pDM_FatTable->antSumRSSI[i] = 0;\r
-                       pDM_FatTable->antRSSIcnt[i] = 0;\r
-               }\r
-               \r
-               pDM_FatTable->FAT_State = FAT_NORMAL_STATE;\r
-               return;\r
-       }\r
-\r
-       //1 NORMAL STATE\r
-       if(pDM_FatTable->FAT_State == FAT_NORMAL_STATE)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Enter FAT_NORMAL_STATE\n"));\r
-\r
-               odm_SetNextMACAddrTarget(pDM_Odm);\r
-\r
-#if 0\r
-                               pEntry = pDM_Odm->pODM_StaInfo[pDM_FatTable->TrainIdx];\r
-                               if(IS_STA_VALID(pEntry))\r
-                               {\r
-                                       pEntry->antsel_a = TargetAnt&BIT0;\r
-                                       pEntry->antsel_b = (TargetAnt&BIT1)>>1;\r
-                                       pEntry->antsel_c = (TargetAnt&BIT2)>>2;\r
-                               }\r
-#endif\r
-\r
-               //2 Prepare Training\r
-               pDM_FatTable->FAT_State = FAT_TRAINING_STATE;\r
-               ODM_SetBBReg(pDM_Odm, 0xe08 , BIT16, 1);        //RegE08[16]=1'b1               //enable fast training\r
-               ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 1); //RegC50[7]=1'b1                //enable HW AntDiv\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Start FAT_TRAINING_STATE\n"));\r
-               ODM_SetTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer, 500 ); //ms\r
-               \r
-       }\r
-               \r
-}\r
-\r
-VOID\r
-odm_FastAntTrainingCallback(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-       PADAPTER        padapter = pDM_Odm->Adapter;\r
-       if(padapter->net_closed == _TRUE)\r
-           return;\r
-       //if(*pDM_Odm->pbNet_closed == TRUE)\r
-          // return;\r
-#endif\r
-\r
-#if USE_WORKITEM\r
-       ODM_ScheduleWorkItem(&pDM_Odm->FastAntTrainingWorkitem);\r
-#else\r
-       odm_FastAntTraining(pDM_Odm);\r
-#endif\r
-}\r
-\r
-VOID\r
-odm_FastAntTrainingWorkItemCallback(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{\r
-       odm_FastAntTraining(pDM_Odm);\r
-}\r
-#endif\r
-\r
-#endif\r
-\r
-\r
-VOID\r
-ODM_AntDivInit(\r
-       IN PDM_ODM_T    pDM_Odm \r
-       )\r
-{\r
-       pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-       pSWAT_T                 pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
-\r
-\r
-       if(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[Return!!!]   Not Support Antenna Diversity Function\n"));\r
-               return;\r
-       }\r
-        //---\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-       if(pDM_FatTable->AntDiv_2G_5G == ODM_ANTDIV_2G)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[2G AntDiv Init]: Only Support 2G Antenna Diversity Function\n"));\r
-               if(!(pDM_Odm->SupportICType & ODM_ANTDIV_2G_SUPPORT_IC))\r
-                       return;\r
-       }\r
-       else    if(pDM_FatTable->AntDiv_2G_5G == ODM_ANTDIV_5G)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[5G AntDiv Init]: Only Support 5G Antenna Diversity Function\n"));\r
-               if(!(pDM_Odm->SupportICType & ODM_ANTDIV_5G_SUPPORT_IC))\r
-                       return;\r
-       }\r
-       else    if(pDM_FatTable->AntDiv_2G_5G == (ODM_ANTDIV_2G|ODM_ANTDIV_5G))\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[2G & 5G AntDiv Init]:Support Both 2G & 5G Antenna Diversity Function\n"));\r
-       }\r
-\r
-        pDM_Odm->antdiv_rssi=0;\r
-\r
-#endif \r
-       //---\r
-       \r
-       //2 [--General---]\r
-       pDM_Odm->antdiv_period=0;\r
-       pDM_Odm->antdiv_select=0;\r
-       pDM_SWAT_Table->Ant5G = MAIN_ANT;\r
-       pDM_SWAT_Table->Ant2G = MAIN_ANT;\r
-       pDM_FatTable->CCK_counter_main=0;\r
-       pDM_FatTable->CCK_counter_aux=0;\r
-       pDM_FatTable->OFDM_counter_main=0;\r
-       pDM_FatTable->OFDM_counter_aux=0;\r
-       \r
-       //3 [Set MAIN_ANT as default antenna if Auto-Ant enable]\r
-       if (pDM_Odm->antdiv_select==1)\r
-               pDM_Odm->AntType = ODM_FIX_MAIN_ANT;\r
-       else if (pDM_Odm->antdiv_select==2)\r
-               pDM_Odm->AntType = ODM_FIX_AUX_ANT;\r
-       else if(pDM_Odm->antdiv_select==0)\r
-               pDM_Odm->AntType = ODM_AUTO_ANT;\r
-       \r
-       if(pDM_Odm->AntType == ODM_AUTO_ANT)\r
-       {\r
-               odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-               ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
-       }\r
-       else\r
-       {\r
-               odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-               \r
-               if(pDM_Odm->AntType == ODM_FIX_MAIN_ANT)\r
-               {\r
-                       ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
-                       return;\r
-               }\r
-               else if(pDM_Odm->AntType == ODM_FIX_AUX_ANT)\r
-               {\r
-                       ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);\r
-                       return;\r
-               }\r
-       }\r
-       //---\r
-       if(pDM_Odm->AntDivType != CGCS_RX_HW_ANTDIV)\r
-       {\r
-               if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
-               {\r
-                       #if TX_BY_REG\r
-                       ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 0); //Reg80c[21]=1'b0              //from Reg\r
-                       #else\r
-                       ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 1);\r
-                       #endif\r
-               }       \r
-               else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
-               {\r
-                       #if TX_BY_REG\r
-                       ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 0); \r
-                       #else\r
-                       ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 1); \r
-                       #endif\r
-               }\r
-       }\r
-               \r
-       //2 [--88E---]\r
-       if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-       #if (RTL8188E_SUPPORT == 1)\r
-               //pDM_Odm->AntDivType = CGCS_RX_HW_ANTDIV;\r
-               //pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;\r
-               //pDM_Odm->AntDivType = CG_TRX_SMART_ANTDIV;\r
-\r
-               if( (pDM_Odm->AntDivType != CGCS_RX_HW_ANTDIV)  && (pDM_Odm->AntDivType != CG_TRX_HW_ANTDIV) && (pDM_Odm->AntDivType != CG_TRX_SMART_ANTDIV))\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[Return!!!]  88E Not Supprrt This AntDiv Type\n"));\r
-                       pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);\r
-                       return;\r
-               }\r
-               \r
-               if(pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV)\r
-                       odm_RX_HWAntDiv_Init_88E(pDM_Odm);\r
-               else if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
-                       odm_TRX_HWAntDiv_Init_88E(pDM_Odm);\r
-               else if(pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)\r
-                       odm_Smart_HWAntDiv_Init_88E(pDM_Odm);\r
-       #endif  \r
-       }\r
-       \r
-       //2 [--92E---]\r
-       #if (RTL8192E_SUPPORT == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {       \r
-               //pDM_Odm->AntDivType = CGCS_RX_HW_ANTDIV;\r
-               //pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;\r
-               //pDM_Odm->AntDivType = CG_TRX_SMART_ANTDIV;\r
-\r
-               if( (pDM_Odm->AntDivType != CGCS_RX_HW_ANTDIV) && (pDM_Odm->AntDivType != CG_TRX_HW_ANTDIV)   && (pDM_Odm->AntDivType != CG_TRX_SMART_ANTDIV))\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[Return!!!]  8192E Not Supprrt This AntDiv Type\n"));\r
-                       pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);\r
-                       return;\r
-               }\r
-               \r
-               if(pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV)\r
-                       odm_RX_HWAntDiv_Init_92E(pDM_Odm);\r
-               else if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
-                       odm_TRX_HWAntDiv_Init_92E(pDM_Odm);\r
-               else if(pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)\r
-                       odm_Smart_HWAntDiv_Init_92E(pDM_Odm);\r
-       \r
-       }\r
-       #endif  \r
-       \r
-       //2 [--8723B---]\r
-       #if (RTL8723B_SUPPORT == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {               \r
-               //pDM_Odm->AntDivType = S0S1_SW_ANTDIV;\r
-               //pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;\r
-\r
-               if(pDM_Odm->AntDivType != S0S1_SW_ANTDIV && pDM_Odm->AntDivType != CG_TRX_HW_ANTDIV)\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[Return!!!] 8723B  Not Supprrt This AntDiv Type\n"));\r
-                       pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);\r
-                       return;\r
-               }\r
-                       \r
-               if( pDM_Odm->AntDivType==S0S1_SW_ANTDIV)\r
-                       odm_S0S1_SWAntDiv_Init_8723B(pDM_Odm);\r
-               else if(pDM_Odm->AntDivType==CG_TRX_HW_ANTDIV)\r
-                       odm_TRX_HWAntDiv_Init_8723B(pDM_Odm);           \r
-       }\r
-       #endif\r
-       \r
-       //2 [--8811A 8821A---]\r
-       #if (RTL8821A_SUPPORT == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               //pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;\r
-               pDM_Odm->AntDivType = S0S1_SW_ANTDIV;\r
-                       \r
-               if( pDM_Odm->AntDivType != CG_TRX_HW_ANTDIV && pDM_Odm->AntDivType != S0S1_SW_ANTDIV)\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[Return!!!] 8821A & 8811A  Not Supprrt This AntDiv Type\n"));\r
-                       pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);\r
-                       return;\r
-               }\r
-               if(pDM_Odm->AntDivType==CG_TRX_HW_ANTDIV)       \r
-                       odm_TRX_HWAntDiv_Init_8821A(pDM_Odm);\r
-               else if( pDM_Odm->AntDivType==S0S1_SW_ANTDIV)\r
-                       odm_S0S1_SWAntDiv_Init_8821A(pDM_Odm);\r
-       }\r
-       #endif\r
-       \r
-       //2 [--8881A---]\r
-       #if (RTL8881A_SUPPORT == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8881A)\r
-       {\r
-                       //pDM_Odm->AntDivType = CGCS_RX_HW_ANTDIV;\r
-                       //pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;\r
-                       \r
-                       if(pDM_Odm->AntDivType != CGCS_RX_HW_ANTDIV && pDM_Odm->AntDivType != CG_TRX_HW_ANTDIV)\r
-                       {\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[Return!!!] 8881A  Not Supprrt This AntDiv Type\n"));\r
-                               pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);\r
-                               return;\r
-                       }\r
-                       if(pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV)\r
-                               odm_RX_HWAntDiv_Init_8881A(pDM_Odm);\r
-                       else if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
-                               odm_TRX_HWAntDiv_Init_8881A(pDM_Odm);   \r
-       }\r
-       #endif\r
-       \r
-       //2 [--8812---]\r
-       #if (RTL8812A_SUPPORT == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-       {       \r
-                       //pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;\r
-                       \r
-                       if( pDM_Odm->AntDivType != CG_TRX_HW_ANTDIV)\r
-                       {\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[Return!!!] 8812A  Not Supprrt This AntDiv Type\n"));\r
-                               pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);\r
-                               return;\r
-                       }\r
-                       odm_TRX_HWAntDiv_Init_8812A(pDM_Odm);\r
-       }\r
-       #endif\r
-       //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("*** SupportICType=[%lu] \n",pDM_Odm->SupportICType));\r
-       //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("*** AntDiv SupportAbility=[%lu] \n",(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)>>6));\r
-       //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("*** AntDiv Type=[%d] \n",pDM_Odm->AntDivType));\r
-\r
-}\r
-\r
-VOID\r
-ODM_AntDiv(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{      \r
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
-       pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-\r
-//#if (DM_ODM_SUPPORT_TYPE == ODM_AP)  \r
-       if(*pDM_Odm->pBandType == ODM_BAND_5G )\r
-       {\r
-               if(pDM_FatTable->idx_AntDiv_counter_5G <  pDM_Odm->antdiv_period )\r
-               {\r
-                       pDM_FatTable->idx_AntDiv_counter_5G++;\r
-                       return;\r
-               }\r
-               else\r
-                       pDM_FatTable->idx_AntDiv_counter_5G=0;\r
-       }\r
-       else    if(*pDM_Odm->pBandType == ODM_BAND_2_4G )\r
-       {\r
-               if(pDM_FatTable->idx_AntDiv_counter_2G <  pDM_Odm->antdiv_period )\r
-               {\r
-                       pDM_FatTable->idx_AntDiv_counter_2G++;\r
-                       return;\r
-               }\r
-               else\r
-                       pDM_FatTable->idx_AntDiv_counter_2G=0;\r
-       }\r
-//#endif       \r
-       //----------\r
-       if(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[Return!!!]   Not Support Antenna Diversity Function\n"));\r
-               return;\r
-       }\r
-\r
-       //----------\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       if(pAdapter->MgntInfo.AntennaTest)\r
-               return;\r
-       \r
-        {\r
-       #if (BEAMFORMING_SUPPORT == 1)                  \r
-               BEAMFORMING_CAP         BeamformCap = (pAdapter->MgntInfo.BeamformingInfo.BeamformCap);\r
-\r
-               if( BeamformCap & BEAMFORMEE_CAP ) //  BFmee On  &&   Div On ->  Div Off\r
-               {       \r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ AntDiv : OFF ]   BFmee ==1 \n"));\r
-                       if(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)\r
-                       {\r
-                               odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-                               pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);\r
-                               return;\r
-                       }\r
-               }\r
-               else // BFmee Off   &&   Div Off ->  Div On\r
-       #endif\r
-               {\r
-                       if(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)  &&  pDM_Odm->bLinked) \r
-                       {\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ AntDiv : ON ]   BFmee ==0 \n"));\r
-                               if((pDM_Odm->AntDivType!=S0S1_SW_ANTDIV) )\r
-                                       odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);\r
-                               \r
-                               pDM_Odm->SupportAbility |= (ODM_BB_ANT_DIV);\r
-                       }\r
-               }\r
-        }\r
-#endif\r
-\r
-       //----------\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-       if(pDM_FatTable->AntDiv_2G_5G == ODM_ANTDIV_2G)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ 2G AntDiv Running ]\n"));\r
-               if(!(pDM_Odm->SupportICType & ODM_ANTDIV_2G_SUPPORT_IC))\r
-                       return;\r
-       }\r
-       else if(pDM_FatTable->AntDiv_2G_5G == ODM_ANTDIV_5G)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ 5G AntDiv Running ]\n"));\r
-               if(!(pDM_Odm->SupportICType & ODM_ANTDIV_5G_SUPPORT_IC))\r
-               return;\r
-       }\r
-       else if(pDM_FatTable->AntDiv_2G_5G == (ODM_ANTDIV_2G|ODM_ANTDIV_5G))\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ 2G & 5G AntDiv Running ]\n"));\r
-       }\r
-#endif\r
-\r
-       //----------\r
-\r
-       if (pDM_Odm->antdiv_select==1)\r
-               pDM_Odm->AntType = ODM_FIX_MAIN_ANT;\r
-       else if (pDM_Odm->antdiv_select==2)\r
-               pDM_Odm->AntType = ODM_FIX_AUX_ANT;\r
-       else  if (pDM_Odm->antdiv_select==0)\r
-               pDM_Odm->AntType = ODM_AUTO_ANT;\r
-\r
-       //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("AntType= (( %d )) , pre_AntType= (( %d ))  \n",pDM_Odm->AntType,pDM_Odm->pre_AntType));\r
-       \r
-       if(pDM_Odm->AntType != ODM_AUTO_ANT)\r
-       {\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Fix Antenna at (( %s ))\n",(pDM_Odm->AntType == ODM_FIX_MAIN_ANT)?"MAIN":"AUX"));\r
-                       \r
-               if(pDM_Odm->AntType != pDM_Odm->pre_AntType)\r
-               {\r
-                       odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-\r
-                       if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
-                               ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 0);\r
-                       else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
-                               ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 0); \r
-                                               \r
-                       if(pDM_Odm->AntType == ODM_FIX_MAIN_ANT)\r
-                               ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
-                       else if(pDM_Odm->AntType == ODM_FIX_AUX_ANT)\r
-                               ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);\r
-               }\r
-               pDM_Odm->pre_AntType=pDM_Odm->AntType; \r
-               return;\r
-       }\r
-       else\r
-       {\r
-               if(pDM_Odm->AntType != pDM_Odm->pre_AntType)\r
-               {\r
-                       odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);\r
-                        if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
-                               ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 1);\r
-                       else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
-                               ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 1); \r
-               }\r
-               pDM_Odm->pre_AntType=pDM_Odm->AntType;\r
-       }\r
-        \r
-       \r
-       //3 -----------------------------------------------------------------------------------------------------------\r
-       //2 [--88E---]\r
-       if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               #if (RTL8188E_SUPPORT == 1)\r
-               if(pDM_Odm->AntDivType==CG_TRX_HW_ANTDIV ||pDM_Odm->AntDivType==CGCS_RX_HW_ANTDIV)\r
-                       odm_HW_AntDiv(pDM_Odm);\r
-               #if (!(DM_ODM_SUPPORT_TYPE == ODM_CE))\r
-               else if (pDM_Odm->AntDivType==CG_TRX_SMART_ANTDIV)\r
-                       odm_FastAntTraining(pDM_Odm);   \r
-               #endif\r
-               #endif\r
-       }\r
-       //2 [--92E---]  \r
-       #if (RTL8192E_SUPPORT == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
-               if(pDM_Odm->AntDivType==CGCS_RX_HW_ANTDIV)\r
-                       odm_HW_AntDiv(pDM_Odm);\r
-               #if (!(DM_ODM_SUPPORT_TYPE == ODM_CE))\r
-               else if (pDM_Odm->AntDivType==CG_TRX_SMART_ANTDIV)\r
-                       odm_FastAntTraining(pDM_Odm);   \r
-               #endif\r
-       }\r
-       #endif\r
-\r
-       #if (RTL8723B_SUPPORT == 1)     \r
-       //2 [--8723B---]\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {\r
-               if (pDM_Odm->AntDivType==S0S1_SW_ANTDIV)\r
-                       odm_S0S1_SwAntDiv(pDM_Odm, SWAW_STEP_PEAK);\r
-               else if (pDM_Odm->AntDivType==CG_TRX_HW_ANTDIV)\r
-                       odm_HW_AntDiv(pDM_Odm);\r
-       }\r
-       #endif\r
-       \r
-       //2 [--8821A---]\r
-       #if (RTL8821A_SUPPORT == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               if(!pDM_Odm->bBtEnabled)  //BT disabled\r
-               {\r
-                       if(pDM_Odm->AntDivType == S0S1_SW_ANTDIV)\r
-                       {\r
-                       pDM_Odm->AntDivType=CG_TRX_HW_ANTDIV;\r
-                       ODM_SetBBReg(pDM_Odm, 0x8D4 , BIT24, 1); \r
-                       }\r
-               }       \r
-               else //BT enabled\r
-               {\r
-                       if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
-                       {\r
-                       pDM_Odm->AntDivType=S0S1_SW_ANTDIV;\r
-                       ODM_SetBBReg(pDM_Odm, 0x8D4 , BIT24, 0); \r
-                       }       \r
-               }       \r
-       \r
-               if (pDM_Odm->AntDivType==S0S1_SW_ANTDIV)\r
-                       odm_S0S1_SwAntDiv(pDM_Odm, SWAW_STEP_PEAK);\r
-               else if (pDM_Odm->AntDivType==CG_TRX_HW_ANTDIV)\r
-               odm_HW_AntDiv(pDM_Odm);\r
-       }\r
-       #endif\r
-       //2 [--8881A---]\r
-       #if (RTL8881A_SUPPORT == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8881A)         \r
-               odm_HW_AntDiv(pDM_Odm);\r
-       #endif\r
-       //2 [--8812A---]\r
-       #if (RTL8812A_SUPPORT == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-               odm_HW_AntDiv(pDM_Odm);\r
-       #endif\r
-}\r
-\r
-\r
-VOID\r
-odm_AntselStatistics(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              u1Byte                  antsel_tr_mux,\r
-       IN              u4Byte                  MacId,\r
-       IN              u4Byte                  RxPWDBAll\r
-)\r
-{\r
-       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-\r
-       if(antsel_tr_mux == ANT1_2G)\r
-       {\r
-               pDM_FatTable->MainAnt_Sum[MacId]+=RxPWDBAll;\r
-               pDM_FatTable->MainAnt_Cnt[MacId]++;\r
-       }\r
-       else\r
-       {\r
-               pDM_FatTable->AuxAnt_Sum[MacId]+=RxPWDBAll;\r
-               pDM_FatTable->AuxAnt_Cnt[MacId]++;\r
-       }\r
-}\r
-\r
-\r
-VOID\r
-ODM_Process_RSSIForAntDiv(     \r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       IN              PODM_PHY_INFO_T                         pPhyInfo,\r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
-       )\r
-{\r
-u1Byte                 isCCKrate=0,CCKMaxRate=DESC_RATE11M;\r
-pFAT_T                 pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-\r
-#if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN))\r
-       u4Byte                  RxPower_Ant0, RxPower_Ant1;     \r
-#else\r
-       u1Byte                  RxPower_Ant0, RxPower_Ant1;     \r
-#endif\r
-\r
-       if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
-               CCKMaxRate=DESC_RATE11M;\r
-       else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
-               CCKMaxRate=DESC_RATE11M;\r
-       isCCKrate = (pPktinfo->DataRate <= CCKMaxRate)?TRUE:FALSE;\r
-\r
-#if ((RTL8192C_SUPPORT == 1) ||(RTL8192D_SUPPORT == 1))\r
-               if(pDM_Odm->SupportICType & ODM_RTL8192C|ODM_RTL8192D)\r
-               {\r
-                               if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)\r
-                               {\r
-                                       //if(pPktinfo->bPacketBeacon)\r
-                                       //{\r
-                                       //      DbgPrint("This is beacon, isCCKrate=%d\n", isCCKrate);\r
-                                       //}\r
-                                       ODM_AntselStatistics_88C(pDM_Odm, pPktinfo->StationID,  pPhyInfo->RxPWDBAll, isCCKrate);\r
-                               }\r
-               }\r
-#endif\r
-               \r
-       if(  (pDM_Odm->SupportICType == ODM_RTL8192E||pDM_Odm->SupportICType == ODM_RTL8812)   && (pPktinfo->DataRate > CCKMaxRate) )\r
-       {\r
-               RxPower_Ant0 = pPhyInfo->RxMIMOSignalStrength[0];\r
-               RxPower_Ant1= pPhyInfo->RxMIMOSignalStrength[1];\r
-       }\r
-       else\r
-               RxPower_Ant0=pPhyInfo->RxPWDBAll;\r
-       \r
-       if(pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)\r
-       {\r
-               if( (pDM_Odm->SupportICType & ODM_SMART_ANT_SUPPORT) &&  pPktinfo->bPacketToSelf   && pDM_FatTable->FAT_State == FAT_TRAINING_STATE )//(pPktinfo->bPacketMatchBSSID && (!pPktinfo->bPacketBeacon))\r
-               {\r
-                       u1Byte  antsel_tr_mux;\r
-                       antsel_tr_mux = (pDM_FatTable->antsel_rx_keep_2<<2) |(pDM_FatTable->antsel_rx_keep_1 <<1) |pDM_FatTable->antsel_rx_keep_0;\r
-                       pDM_FatTable->antSumRSSI[antsel_tr_mux] += RxPower_Ant0;\r
-                       pDM_FatTable->antRSSIcnt[antsel_tr_mux]++;\r
-               }\r
-       }\r
-       else //AntDivType != CG_TRX_SMART_ANTDIV \r
-       {\r
-               if(  ( pDM_Odm->SupportICType & ODM_ANTDIV_SUPPORT ) &&  (pPktinfo->bPacketToSelf || pPktinfo->bPacketMatchBSSID)  )\r
-               {\r
-                        if(pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8192E)\r
-                               odm_AntselStatistics(pDM_Odm, pDM_FatTable->antsel_rx_keep_0, pPktinfo->StationID,RxPower_Ant0);\r
-                       else// SupportICType == ODM_RTL8821 and ODM_RTL8723B and ODM_RTL8812)\r
-                       {\r
-                               if(isCCKrate && (pDM_Odm->AntDivType == S0S1_SW_ANTDIV))\r
-                               {\r
-                                       pDM_FatTable->antsel_rx_keep_0 = (pDM_FatTable->RxIdleAnt == MAIN_ANT) ? ANT1_2G : ANT2_2G;\r
-\r
-\r
-                                               if(pDM_FatTable->antsel_rx_keep_0==ANT1_2G)\r
-                                                       pDM_FatTable->CCK_counter_main++;\r
-                                               else// if(pDM_FatTable->antsel_rx_keep_0==ANT2_2G)\r
-                                                       pDM_FatTable->CCK_counter_aux++;\r
-\r
-                                       odm_AntselStatistics(pDM_Odm, pDM_FatTable->antsel_rx_keep_0, pPktinfo->StationID, RxPower_Ant0);\r
-                               }\r
-                               else\r
-                               {\r
-\r
-                                       if(pDM_FatTable->antsel_rx_keep_0==ANT1_2G)\r
-                                               pDM_FatTable->OFDM_counter_main++;\r
-                                       else// if(pDM_FatTable->antsel_rx_keep_0==ANT2_2G)\r
-                                               pDM_FatTable->OFDM_counter_aux++;\r
-                                       odm_AntselStatistics(pDM_Odm, pDM_FatTable->antsel_rx_keep_0, pPktinfo->StationID, RxPower_Ant0);\r
-                       }\r
-               }\r
-       }\r
-       }\r
-       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("isCCKrate=%d, PWDB_ALL=%d\n",isCCKrate, pPhyInfo->RxPWDBAll));\r
-       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("antsel_tr_mux=3'b%d%d%d\n",pDM_FatTable->antsel_rx_keep_2, pDM_FatTable->antsel_rx_keep_1, pDM_FatTable->antsel_rx_keep_0));\r
-}\r
-\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-VOID\r
-ODM_SetTxAntByTxInfo(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              pu1Byte                 pDesc,\r
-       IN              u1Byte                  macId   \r
-)\r
-{\r
-       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-\r
-       if(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))\r
-               return;\r
-\r
-       if(pDM_Odm->AntDivType==CGCS_RX_HW_ANTDIV)\r
-               return;\r
-\r
-\r
-       if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {\r
-#if (RTL8723B_SUPPORT == 1)\r
-               SET_TX_DESC_ANTSEL_A_8723B(pDesc, pDM_FatTable->antsel_a[macId]);\r
-               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[8723B] SetTxAntByTxInfo_WIN: MacID=%d, antsel_tr_mux=3'b%d%d%d\n", \r
-                       //macId, pDM_FatTable->antsel_c[macId], pDM_FatTable->antsel_b[macId], pDM_FatTable->antsel_a[macId]));\r
-#endif\r
-       }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-#if (RTL8821A_SUPPORT == 1)\r
-               SET_TX_DESC_ANTSEL_A_8812(pDesc, pDM_FatTable->antsel_a[macId]);\r
-               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[8821A] SetTxAntByTxInfo_WIN: MacID=%d, antsel_tr_mux=3'b%d%d%d\n", \r
-                       //macId, pDM_FatTable->antsel_c[macId], pDM_FatTable->antsel_b[macId], pDM_FatTable->antsel_a[macId]));\r
-#endif\r
-       }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-#if (RTL8188E_SUPPORT == 1)\r
-               SET_TX_DESC_ANTSEL_A_88E(pDesc, pDM_FatTable->antsel_a[macId]);\r
-               SET_TX_DESC_ANTSEL_B_88E(pDesc, pDM_FatTable->antsel_b[macId]);\r
-               SET_TX_DESC_ANTSEL_C_88E(pDesc, pDM_FatTable->antsel_c[macId]);\r
-               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[8188E] SetTxAntByTxInfo_WIN: MacID=%d, antsel_tr_mux=3'b%d%d%d\n", \r
-                       //macId, pDM_FatTable->antsel_c[macId], pDM_FatTable->antsel_b[macId], pDM_FatTable->antsel_a[macId]));\r
-#endif\r
-       }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
-\r
-       \r
-       }\r
-}\r
-#else// (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-\r
-VOID\r
-ODM_SetTxAntByTxInfo(\r
-       //IN            PDM_ODM_T               pDM_Odm,\r
-       struct  rtl8192cd_priv          *priv,\r
-       struct  tx_desc                 *pdesc,\r
-       struct  tx_insn                 *txcfg,\r
-       unsigned short                  aid     \r
-)\r
-{\r
-       pFAT_T          pDM_FatTable = &priv->pshare->_dmODM.DM_FatTable;\r
-       u4Byte          SupportICType=priv->pshare->_dmODM.SupportICType;\r
-\r
-       if(SupportICType == ODM_RTL8881A)\r
-       {\r
-               //panic_printk("[%s] [%d]   ******ODM_SetTxAntByTxInfo_8881E******   \n",__FUNCTION__,__LINE__);        \r
-               pdesc->Dword6 &= set_desc(~ (BIT(18)|BIT(17)|BIT(16))); \r
-               pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_a[aid]<<16);\r
-       }\r
-       else if(SupportICType == ODM_RTL8192E)\r
-       {\r
-               //panic_printk("[%s] [%d]   ******ODM_SetTxAntByTxInfo_8192E******   \n",__FUNCTION__,__LINE__);        \r
-               pdesc->Dword6 &= set_desc(~ (BIT(18)|BIT(17)|BIT(16))); \r
-               pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_a[aid]<<16);\r
-       }\r
-       else if(SupportICType == ODM_RTL8812)\r
-       {\r
-               //3 [path-A]\r
-               //panic_printk("[%s] [%d]   ******ODM_SetTxAntByTxInfo_8881E******   \n",__FUNCTION__,__LINE__);\r
-                       \r
-               pdesc->Dword6 &= set_desc(~ BIT(16));\r
-               pdesc->Dword6 &= set_desc(~ BIT(17));\r
-               pdesc->Dword6 &= set_desc(~ BIT(18));\r
-               if(txcfg->pstat)\r
-               {\r
-                       pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_a[aid]<<16);\r
-                       pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_b[aid]<<17);\r
-                       pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_c[aid]<<18);\r
-               }\r
-       }\r
-}\r
-#endif\r
-\r
-#else\r
-\r
-VOID ODM_AntDivInit(   IN PDM_ODM_T    pDM_Odm ){}\r
-VOID ODM_AntDiv(       IN PDM_ODM_T            pDM_Odm){}\r
-\r
-#endif //#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
-\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_AntDiv.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_AntDiv.h
deleted file mode 100755 (executable)
index 832ee6b..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
\r
-#ifndef        __ODMANTDIV_H__\r
-#define    __ODMANTDIV_H__\r
-\r
-\r
-\r
-#define ANT1_2G 0 // = ANT2_5G\r
-#define ANT2_2G 1 // = ANT1_5G\r
-\r
-//Antenna Diversty Control Type\r
-#define        ODM_AUTO_ANT    0\r
-#define        ODM_FIX_MAIN_ANT        1\r
-#define        ODM_FIX_AUX_ANT 2\r
-\r
-#define        TX_BY_REG       0\r
-\r
-#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
-#define ODM_RTL8881A 0   //Just for windows driver to jointly use ODM-driver\r
-#endif\r
-\r
-#define ODM_ANTDIV_SUPPORT             (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
-#define ODM_N_ANTDIV_SUPPORT           (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B)\r
-#define ODM_AC_ANTDIV_SUPPORT          (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
-#define ODM_SMART_ANT_SUPPORT          (ODM_RTL8188E|ODM_RTL8192E)\r
-\r
-#define ODM_ANTDIV_2G_SUPPORT_IC                       (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8881A)\r
-#define ODM_ANTDIV_5G_SUPPORT_IC                       (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
-#define ODM_ANTDIV_2G  BIT0\r
-#define ODM_ANTDIV_5G  BIT1\r
-\r
-#define ANTDIV_ON 1\r
-#define ANTDIV_OFF 0\r
-\r
-VOID\r
-ODM_AntDivInit(\r
-       IN               PDM_ODM_T              pDM_Odm \r
-);\r
-\r
-VOID\r
-ODM_AntDiv(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-);\r
-\r
-#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
-\r
-VOID\r
-ODM_UpdateRxIdleAnt(\r
-       IN              PDM_ODM_T               pDM_Odm, \r
-       IN               u1Byte                 Ant\r
-);\r
-\r
-#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-VOID\r
-ODM_SW_AntDiv_Callback(\r
-       IN      PRT_TIMER                       pTimer\r
-);\r
-\r
-VOID\r
-ODM_SW_AntDiv_WorkitemCallback(\r
-       IN      PVOID            pContext\r
-);\r
-#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-VOID\r
-ODM_SW_AntDiv_Callback(void *FunctionContext);\r
-#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-#endif\r
-\r
-#if(RTL8188E_SUPPORT == 1  || RTL8192E_SUPPORT == 1)\r
-#if ( !(DM_ODM_SUPPORT_TYPE == ODM_CE))\r
-VOID\r
-odm_FastAntTraining(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-);\r
-\r
-VOID\r
-odm_FastAntTrainingCallback(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-);\r
-\r
-VOID\r
-odm_FastAntTrainingWorkItemCallback(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-);\r
-#endif\r
-#endif\r
-\r
-VOID\r
-ODM_Process_RSSIForAntDiv(     \r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       IN              PODM_PHY_INFO_T                         pPhyInfo,\r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
-);\r
-\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-VOID\r
-ODM_SetTxAntByTxInfo(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              pu1Byte                 pDesc,\r
-       IN              u1Byte                  macId   \r
-);\r
-\r
-#else// (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-VOID\r
-ODM_SetTxAntByTxInfo(\r
-       //IN            PDM_ODM_T               pDM_Odm,\r
-       struct  rtl8192cd_priv          *priv,\r
-       struct  tx_desc                 *pdesc,\r
-       struct  tx_insn                 *txcfg,\r
-       unsigned short                  aid     \r
-);\r
-\r
-#endif\r
-\r
-#endif //#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
-#endif //#ifndef       __ODMANTDIV_H__\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_CfoTracking.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_CfoTracking.c
deleted file mode 100755 (executable)
index e0c2a58..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-
-VOID
-odm_SetCrystalCap(
-       IN              PVOID                                   pDM_VOID,
-       IN              u1Byte                                  CrystalCap
-)
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       PCFO_TRACKING                           pCfoTrack = &pDM_Odm->DM_CfoTrack;
-       BOOLEAN                                         bEEPROMCheck;
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       PADAPTER                                        Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE                           *pHalData = GET_HAL_DATA(Adapter);
-
-       bEEPROMCheck = (pHalData->EEPROMVersion >= 0x01)?TRUE:FALSE;
-#else
-       bEEPROMCheck = TRUE;
-#endif
-
-       if(pCfoTrack->CrystalCap == CrystalCap)
-               return;
-
-       pCfoTrack->CrystalCap = CrystalCap;
-
-       if(pDM_Odm->SupportICType & ODM_RTL8192D)
-       {
-               ODM_SetBBReg(pDM_Odm, REG_AFE_XTAL_CTRL, 0x000000F0, CrystalCap & 0x0F);
-               ODM_SetBBReg(pDM_Odm, REG_AFE_PLL_CTRL, 0xF0000000, ((CrystalCap & 0xF0) >> 4));
-       }
-       else if(pDM_Odm->SupportICType & ODM_RTL8188E)
-       {
-               // write 0x24[22:17] = 0x24[16:11] = CrystalCap
-               CrystalCap = CrystalCap & 0x3F;
-               ODM_SetBBReg(pDM_Odm, REG_AFE_XTAL_CTRL, 0x007ff800, (CrystalCap | (CrystalCap << 6)));
-       }
-       else if(pDM_Odm->SupportICType & ODM_RTL8812)
-       {
-               // write 0x2C[30:25] = 0x2C[24:19] = CrystalCap
-               CrystalCap = CrystalCap & 0x3F;
-               ODM_SetBBReg(pDM_Odm, REG_MAC_PHY_CTRL, 0x7FF80000, (CrystalCap | (CrystalCap << 6)));
-       }       
-       else if (((pDM_Odm->SupportICType & ODM_RTL8723A) && bEEPROMCheck) ||
-               (pDM_Odm->SupportICType & ODM_RTL8723B) ||(pDM_Odm->SupportICType & ODM_RTL8192E) ||
-               (pDM_Odm->SupportICType & ODM_RTL8821))
-       {
-               // 0x2C[23:18] = 0x2C[17:12] = CrystalCap
-               CrystalCap = CrystalCap & 0x3F;
-               ODM_SetBBReg(pDM_Odm, REG_MAC_PHY_CTRL, 0x00FFF000, (CrystalCap | (CrystalCap << 6)));  
-       }
-       else if(pDM_Odm->SupportICType & ODM_RTL8821B)
-       {
-               // write 0x28[6:1] = 0x24[30:25] = CrystalCap
-               CrystalCap = CrystalCap & 0x3F;
-               ODM_SetBBReg(pDM_Odm, REG_AFE_XTAL_CTRL, 0x7E000000, CrystalCap);
-               ODM_SetBBReg(pDM_Odm, REG_AFE_PLL_CTRL, 0x7E, CrystalCap);      
-       }
-       else if(pDM_Odm->SupportICType & ODM_RTL8814A)
-       {
-               // write 0x2C[26:21] = 0x2C[20:15] = CrystalCap
-               CrystalCap = CrystalCap & 0x3F;
-               ODM_SetBBReg(pDM_Odm, REG_MAC_PHY_CTRL, 0x07FF8000, (CrystalCap | (CrystalCap << 6)));
-       }
-       else 
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("odm_SetCrystalCap(): Use default setting.\n"));
-               ODM_SetBBReg(pDM_Odm, REG_MAC_PHY_CTRL, 0xFFF000, (CrystalCap | (CrystalCap << 6)));
-       }
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("odm_SetCrystalCap(): CrystalCap = 0x%x\n", CrystalCap));
-}
-
-u1Byte
-odm_GetDefaultCrytaltalCap(
-       IN              PVOID                                   pDM_VOID
-)
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       u1Byte                                          CrystalCap = 0x20;
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       PADAPTER                                        Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE                           *pHalData = GET_HAL_DATA(Adapter);
-
-       CrystalCap = pHalData->CrystalCap;
-#else
-       prtl8192cd_priv priv            = pDM_Odm->priv;
-
-       if(priv->pmib->dot11RFEntry.xcap > 0)
-               CrystalCap = priv->pmib->dot11RFEntry.xcap;
-#endif
-
-       CrystalCap = CrystalCap & 0x3f;
-
-       return CrystalCap;
-}
-
-VOID
-odm_SetATCStatus(
-       IN              PVOID                                   pDM_VOID,
-       IN              BOOLEAN                                 ATCStatus
-)
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       PCFO_TRACKING                           pCfoTrack = &pDM_Odm->DM_CfoTrack;
-
-       if(pCfoTrack->bATCStatus == ATCStatus)
-               return;
-       
-       ODM_SetBBReg(pDM_Odm, ODM_REG(BB_ATC,pDM_Odm), ODM_BIT(BB_ATC,pDM_Odm), ATCStatus);
-       pCfoTrack->bATCStatus = ATCStatus;
-}
-
-BOOLEAN
-odm_GetATCStatus(
-       IN              PVOID                                   pDM_VOID
-)
-{
-       BOOLEAN                                         ATCStatus;
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-
-       ATCStatus = (BOOLEAN)ODM_GetBBReg(pDM_Odm, ODM_REG(BB_ATC,pDM_Odm), ODM_BIT(BB_ATC,pDM_Odm));
-       return ATCStatus;
-}
-
-VOID
-ODM_CfoTrackingReset(
-       IN              PVOID                                   pDM_VOID
-)
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       PCFO_TRACKING                           pCfoTrack = &pDM_Odm->DM_CfoTrack;
-       u1Byte                                          CrystalCap;
-
-       pCfoTrack->DefXCap = odm_GetDefaultCrytaltalCap(pDM_Odm);
-       pCfoTrack->bAdjust = TRUE;
-       
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       odm_SetCrystalCap(pDM_Odm, pCfoTrack->DefXCap);
-       odm_SetATCStatus(pDM_Odm, TRUE);
-#else
-       if(pCfoTrack->CrystalCap > pCfoTrack->DefXCap)
-       {
-               for(CrystalCap = pCfoTrack->CrystalCap; CrystalCap >= pCfoTrack->DefXCap; CrystalCap--)
-                       odm_SetCrystalCap(pDM_Odm, CrystalCap);
-       }
-       else
-       {
-               for(CrystalCap = pCfoTrack->CrystalCap; CrystalCap <= pCfoTrack->DefXCap; CrystalCap++)
-                       odm_SetCrystalCap(pDM_Odm, CrystalCap);
-       }
-#endif
-}
-
-VOID
-ODM_CfoTrackingInit(
-       IN              PVOID                                   pDM_VOID
-)
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       PCFO_TRACKING                           pCfoTrack = &pDM_Odm->DM_CfoTrack;
-      
-       pCfoTrack->DefXCap = pCfoTrack->CrystalCap = odm_GetDefaultCrytaltalCap(pDM_Odm);
-       pCfoTrack->bATCStatus = odm_GetATCStatus(pDM_Odm);
-       pCfoTrack->bAdjust = TRUE;
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking_init()=========> \n"));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking_init(): bATCStatus = %d, CrystalCap = 0x%x \n",pCfoTrack->bATCStatus, pCfoTrack->DefXCap));
-}
-
-VOID
-ODM_CfoTracking(
-       IN              PVOID                                   pDM_VOID
-)
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       PCFO_TRACKING                           pCfoTrack = &pDM_Odm->DM_CfoTrack;
-       int                                                     CFO_kHz_A, CFO_kHz_B, CFO_ave = 0;
-       int                                                     CFO_ave_diff;
-       int                                                     CrystalCap = (int)pCfoTrack->CrystalCap;
-       u1Byte                                          Adjust_Xtal = 1;
-
-       //4 Support ability
-       if(!(pDM_Odm->SupportAbility & ODM_BB_CFO_TRACKING))
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): Return: SupportAbility ODM_BB_CFO_TRACKING is disabled\n"));
-               return;
-       }
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking()=========> \n"));
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN && MP_DRIVER == 1)
-       if(0)
-#else
-       if(!pDM_Odm->bLinked || !pDM_Odm->bOneEntryOnly)
-#endif
-       {       
-               //4 No link or more than one entry
-               ODM_CfoTrackingReset(pDM_Odm);
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): Reset: bLinked = %d, bOneEntryOnly = %d\n", 
-                       pDM_Odm->bLinked, pDM_Odm->bOneEntryOnly));
-       }
-       else
-       {
-               //3 1. CFO Tracking
-               //4 1.1 No new packet
-               if(pCfoTrack->packetCount == pCfoTrack->packetCount_pre)
-               {
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): packet counter doesn't change\n"));
-                       return;
-               }
-               pCfoTrack->packetCount_pre = pCfoTrack->packetCount;
-       
-               //4 1.2 Calculate CFO
-               CFO_kHz_A =  (int)(pCfoTrack->CFO_tail[0] * 3125)  / 1280;
-               CFO_kHz_B =  (int)(pCfoTrack->CFO_tail[1] * 3125)  / 1280;
-               
-               if(pDM_Odm->RFType < ODM_2T2R)
-                       CFO_ave = CFO_kHz_A;
-               else
-                       CFO_ave = (int)(CFO_kHz_A + CFO_kHz_B) >> 1;
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): CFO_kHz_A = %dkHz, CFO_kHz_B = %dkHz, CFO_ave = %dkHz\n", 
-                                               CFO_kHz_A, CFO_kHz_B, CFO_ave));
-
-               //4 1.3 Avoid abnormal large CFO
-               CFO_ave_diff = (pCfoTrack->CFO_ave_pre >= CFO_ave)?(pCfoTrack->CFO_ave_pre - CFO_ave):(CFO_ave - pCfoTrack->CFO_ave_pre);
-               if(CFO_ave_diff > 20 && pCfoTrack->largeCFOHit == 0 && !pCfoTrack->bAdjust)
-               {
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): first large CFO hit\n"));
-                       pCfoTrack->largeCFOHit = 1;
-                       return;
-               }
-               else
-                       pCfoTrack->largeCFOHit = 0;
-               pCfoTrack->CFO_ave_pre = CFO_ave;
-
-               //4 1.4 Dynamic Xtal threshold
-               if(pCfoTrack->bAdjust == FALSE)
-               {
-                       if(CFO_ave > CFO_TH_XTAL_HIGH || CFO_ave < (-CFO_TH_XTAL_HIGH))
-                               pCfoTrack->bAdjust = TRUE;
-               }
-               else
-               {
-                       if(CFO_ave < CFO_TH_XTAL_LOW && CFO_ave > (-CFO_TH_XTAL_LOW))
-                               pCfoTrack->bAdjust = FALSE;
-               }
-               
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-               //4 1.5 BT case: Disable CFO tracking
-               if(pDM_Odm->bBtEnabled)
-               {
-                       pCfoTrack->bAdjust = FALSE;
-                       odm_SetCrystalCap(pDM_Odm, pCfoTrack->DefXCap);
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): Disable CFO tracking for BT!!\n"));
-               }
-               
-               //4 1.6 Big jump 
-               if(pCfoTrack->bAdjust)
-               {
-                       if(CFO_ave > CFO_TH_XTAL_LOW)
-                               Adjust_Xtal =  Adjust_Xtal + ((CFO_ave - CFO_TH_XTAL_LOW) >> 2);
-                       else if(CFO_ave < (-CFO_TH_XTAL_LOW))
-                               Adjust_Xtal =  Adjust_Xtal + ((CFO_TH_XTAL_LOW - CFO_ave) >> 2);
-
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): Crystal cap offset = %d\n", Adjust_Xtal));
-               }
-#endif
-
-               //4 1.7 Adjust Crystal Cap.
-               if(pCfoTrack->bAdjust)
-               {
-                       if(CFO_ave > CFO_TH_XTAL_LOW)
-                       CrystalCap = CrystalCap + Adjust_Xtal;
-                       else if(CFO_ave < (-CFO_TH_XTAL_LOW))
-                               CrystalCap = CrystalCap - Adjust_Xtal;
-
-                       if(CrystalCap > 0x3f)
-                               CrystalCap = 0x3f;
-                       else if (CrystalCap < 0)
-                               CrystalCap = 0;
-
-                       odm_SetCrystalCap(pDM_Odm, (u1Byte)CrystalCap);
-               }
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): Crystal cap = 0x%x, Default Crystal cap = 0x%x\n", 
-                       pCfoTrack->CrystalCap, pCfoTrack->DefXCap));
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-               if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-                       return;
-               
-               //3 2. Dynamic ATC switch
-               if(CFO_ave < CFO_TH_ATC && CFO_ave > -CFO_TH_ATC)
-               {
-                       odm_SetATCStatus(pDM_Odm, FALSE);
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): Disable ATC!!\n"));
-               }
-               else
-               {
-                       odm_SetATCStatus(pDM_Odm, TRUE);
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): Enable ATC!!\n"));
-               }
-#endif
-       }
-}
-
-VOID
-ODM_ParsingCFO(
-       IN              PVOID                   pDM_VOID,
-       IN              PVOID                   pPktinfo_VOID,
-       IN              s1Byte*                         pcfotail
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       PODM_PACKET_INFO_T              pPktinfo = (PODM_PACKET_INFO_T)pPktinfo_VOID;
-       PCFO_TRACKING   pCfoTrack = &pDM_Odm->DM_CfoTrack;
-       u1Byte                  i;
-
-       if(!(pDM_Odm->SupportAbility & ODM_BB_CFO_TRACKING))
-               return;
-
-#if ((DM_ODM_SUPPORT_TYPE == ODM_WIN) && (MP_DRIVER == 1))
-       if(1)
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       if(pPktinfo->bPacketMatchBSSID)
-#else
-       if(pPktinfo->StationID != 0)
-#endif
-       {                               
-               //3 Update CFO report for path-A & path-B
-               // Only paht-A and path-B have CFO tail and short CFO
-               for(i = ODM_RF_PATH_A; i <= ODM_RF_PATH_B; i++)   
-               {
-                       pCfoTrack->CFO_tail[i] = (int)pcfotail[i];
-               }
-
-               //3 Update packet counter
-               if(pCfoTrack->packetCount == 0xffffffff)
-                       pCfoTrack->packetCount = 0;
-               else
-                       pCfoTrack->packetCount++;
-       }
-}
-
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_CfoTracking.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_CfoTracking.h
deleted file mode 100755 (executable)
index 48ead72..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#ifndef        __ODMCFOTRACK_H__
-#define    __ODMCFOTRACK_H__
-
-#define                CFO_TH_XTAL_HIGH                        20                      // kHz
-#define                CFO_TH_XTAL_LOW                 10                      // kHz
-#define                CFO_TH_ATC                                      80                      // kHz
-
-typedef struct _CFO_TRACKING_
-{
-       BOOLEAN                 bATCStatus;
-       BOOLEAN                 largeCFOHit;
-       BOOLEAN                 bAdjust;
-       u1Byte                  CrystalCap;
-       u1Byte                  DefXCap;
-       int                             CFO_tail[2];
-       int                             CFO_ave_pre;
-       u4Byte                  packetCount;
-       u4Byte                  packetCount_pre;
-
-       BOOLEAN                 bForceXtalCap;
-       BOOLEAN                 bReset;
-}CFO_TRACKING, *PCFO_TRACKING;
-
-VOID
-ODM_CfoTrackingReset(
-       IN              PVOID                                   pDM_VOID
-);
-
-VOID
-ODM_CfoTrackingInit(
-       IN              PVOID                                   pDM_VOID
-);
-
-VOID
-ODM_CfoTracking(
-       IN              PVOID                                   pDM_VOID
-);
-
-VOID
-ODM_ParsingCFO(
-       IN              PVOID                                   pDM_VOID,
-       IN              PVOID                                   pPktinfo_VOID,
-       IN      s1Byte*                                         pcfotail
-);
-
-#endif
\ No newline at end of file
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DIG.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DIG.c
deleted file mode 100755 (executable)
index 09a3c8f..0000000
+++ /dev/null
@@ -1,2647 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-//============================================================
-// include files
-//============================================================
-
-#include "odm_precomp.h"
-#define ADAPTIVITY_VERSION     "5.0"
-
-
-VOID
-ODM_ChangeDynamicInitGainThresh(
-       IN      PVOID           pDM_VOID,
-       IN      u4Byte          DM_Type,
-       IN      u4Byte          DM_Value
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       pDIG_T                  pDM_DigTable = &pDM_Odm->DM_DigTable;
-
-       if (DM_Type == DIG_TYPE_THRESH_HIGH)
-       {
-               pDM_DigTable->RssiHighThresh = DM_Value;                
-       }
-       else if (DM_Type == DIG_TYPE_THRESH_LOW)
-       {
-               pDM_DigTable->RssiLowThresh = DM_Value;
-       }
-       else if (DM_Type == DIG_TYPE_ENABLE)
-       {
-               pDM_DigTable->Dig_Enable_Flag   = TRUE;
-       }       
-       else if (DM_Type == DIG_TYPE_DISABLE)
-       {
-               pDM_DigTable->Dig_Enable_Flag = FALSE;
-       }       
-       else if (DM_Type == DIG_TYPE_BACKOFF)
-       {
-               if(DM_Value > 30)
-                       DM_Value = 30;
-               pDM_DigTable->BackoffVal = (u1Byte)DM_Value;
-       }
-       else if(DM_Type == DIG_TYPE_RX_GAIN_MIN)
-       {
-               if(DM_Value == 0)
-                       DM_Value = 0x1;
-               pDM_DigTable->rx_gain_range_min = (u1Byte)DM_Value;
-       }
-       else if(DM_Type == DIG_TYPE_RX_GAIN_MAX)
-       {
-               if(DM_Value > 0x50)
-                       DM_Value = 0x50;
-               pDM_DigTable->rx_gain_range_max = (u1Byte)DM_Value;
-       }
-}      // DM_ChangeDynamicInitGainThresh //
-
-VOID
-odm_NHMCounterStatisticsInit(
-       IN              PVOID                   pDM_VOID
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-
-       if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-       {
-               //PHY parameters initialize for ac series
-               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TIMER_11AC+2, 0x2710);      //0x990[31:16]=0x2710   Time duration for NHM unit: 4us, 0x2710=40ms
-               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC+2, 0xffff);   //0x994[31:16]=0xffff   th_9, th_10
-               //ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH3_TO_TH0_11AC, 0xffffff5c);     //0x998=0xffffff5c              th_3, th_2, th_1, th_0
-               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH3_TO_TH0_11AC, 0xffffff52);       //0x998=0xffffff52              th_3, th_2, th_1, th_0
-               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH7_TO_TH4_11AC, 0xffffffff);       //0x99c=0xffffffff              th_7, th_6, th_5, th_4
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH8_11AC, bMaskByte0, 0xff);          //0x9a0[7:0]=0xff               th_8
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC, BIT8|BIT9|BIT10, 0x7); //0x994[9:8]=3                  enable CCX
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_9E8_11AC, BIT0, 0x1);         //0x9e8[7]=1                    max power among all RX ants     
-                               
-               //panic_printk("RTL8812AU phy parameters init %s,%d\n", __FUNCTION__, __LINE__);
-       }
-       else if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-       {
-               //PHY parameters initialize for n series
-               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TIMER_11N+2, 0x2710);       //0x894[31:16]=0x2710   Time duration for NHM unit: 4us, 0x2710=40ms
-               //ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TIMER_11N+2, 0x4e20);     //0x894[31:16]=0x4e20   Time duration for NHM unit: 4us, 0x4e20=80ms
-               ODM_Write2Byte(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N+2, 0xffff);    //0x890[31:16]=0xffff   th_9, th_10
-               //ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH3_TO_TH0_11N, 0xffffff5c);      //0x898=0xffffff5c              th_3, th_2, th_1, th_0
-               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH3_TO_TH0_11N, 0xffffff52);        //0x898=0xffffff52              th_3, th_2, th_1, th_0
-               ODM_Write4Byte(pDM_Odm, ODM_REG_NHM_TH7_TO_TH4_11N, 0xffffffff);        //0x89c=0xffffffff              th_7, th_6, th_5, th_4
-               ODM_SetBBReg(pDM_Odm, ODM_REG_FPGA0_IQK_11N, bMaskByte0, 0xff);         //0xe28[7:0]=0xff               th_8
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N, BIT10|BIT9|BIT8, 0x7);  //0x890[9:8]=3                  enable CCX
-               ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTC_11N, BIT7, 0x1);             //0xc0c[7]=1                    max power among all RX ants                             
-       }
-}
-
-VOID
-odm_NHMCounterStatistics(
-       IN              PVOID                   pDM_VOID
-       )
-{
-       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-
-       // Get NHM report
-       odm_GetNHMCounterStatistics(pDM_Odm);
-       
-       // Reset NHM counter
-       odm_NHMCounterStatisticsReset(pDM_Odm);
-}
-
-VOID
-odm_GetNHMCounterStatistics(
-       IN              PVOID                   pDM_VOID
-       )
-{
-       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       u4Byte          value32 = 0;
-
-       if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_NHM_CNT_11AC, bMaskDWord);
-       else if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_NHM_CNT_11N, bMaskDWord);
-
-       pDM_Odm->NHM_cnt_0 = (u1Byte)(value32 & bMaskByte0);
-}
-
-VOID
-odm_NHMCounterStatisticsReset(
-       IN              PVOID                   pDM_VOID
-       )
-{
-       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       
-       if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-       {                       
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC, BIT1, 0);
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11AC, BIT1, 1);
-       }
-       else if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-       {
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N, BIT1, 0);
-               ODM_SetBBReg(pDM_Odm, ODM_REG_NHM_TH9_TH10_11N, BIT1, 1);
-       }
-}
-
-VOID
-odm_NHMBBInit(
-       IN              PVOID                   pDM_VOID
-)
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-
-       pDM_Odm->adaptivity_flag = 0;
-       pDM_Odm->tolerance_cnt = 3;
-       pDM_Odm->NHMLastTxOkcnt = 0;
-       pDM_Odm->NHMLastRxOkcnt = 0;
-       pDM_Odm->NHMCurTxOkcnt = 0;
-       pDM_Odm->NHMCurRxOkcnt = 0;
-}
-
-//
-VOID
-odm_NHMBB(
-       IN              PVOID                   pDM_VOID
-)
-{
-       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       u4Byte          value32;
-       //u1Byte        test_status;
-       //PFALSE_ALARM_STATISTICS pFalseAlmCnt = &(pDM_Odm->FalseAlmCnt);
-
-       pDM_Odm->NHMCurTxOkcnt = *(pDM_Odm->pNumTxBytesUnicast) - pDM_Odm->NHMLastTxOkcnt;
-       pDM_Odm->NHMCurRxOkcnt = *(pDM_Odm->pNumRxBytesUnicast) - pDM_Odm->NHMLastRxOkcnt;
-       pDM_Odm->NHMLastTxOkcnt = *(pDM_Odm->pNumTxBytesUnicast);
-       pDM_Odm->NHMLastRxOkcnt = *(pDM_Odm->pNumRxBytesUnicast);       
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("NHM_cnt_0=%d, NHMCurTxOkcnt = %llu, NHMCurRxOkcnt = %llu\n", 
-               pDM_Odm->NHM_cnt_0, pDM_Odm->NHMCurTxOkcnt, pDM_Odm->NHMCurRxOkcnt));
-
-       
-       if ( (pDM_Odm->NHMCurTxOkcnt) + 1 > (u8Byte)(pDM_Odm->NHMCurRxOkcnt<<2) + 1)            //Tx > 4*Rx possible for adaptivity test
-       {
-               if(pDM_Odm->NHM_cnt_0 >= 190 || pDM_Odm->adaptivity_flag == TRUE)
-               {
-                       //Enable EDCCA since it is possible running Adaptivity testing
-                       //test_status = 1;
-                       pDM_Odm->adaptivity_flag = TRUE;
-                       ODM_SetMACReg(pDM_Odm, REG_TX_PTCL_CTRL, BIT15, 0);     //don't ignore EDCCA     reg520[15]=0\14
-                       ODM_SetMACReg(pDM_Odm, REG_RD_CTRL, BIT11, 1);  //reg524[11]=1  
-                       pDM_Odm->tolerance_cnt = 0;
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-                       pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_backup;
-                       pDM_Odm->TH_EDCCA_HL_diff = pDM_Odm->TH_EDCCA_HL_diff_backup ;
-#endif
-               }
-               else
-               {
-                       if(pDM_Odm->tolerance_cnt<3)
-                               pDM_Odm->tolerance_cnt = pDM_Odm->tolerance_cnt + 1;
-                       else
-                               pDM_Odm->tolerance_cnt = 4;     
-                       //test_status = 5;
-                       if(pDM_Odm->tolerance_cnt > 3)
-                       {
-                               //test_status = 3;
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-                       pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_mode2;
-                       pDM_Odm->TH_EDCCA_HL_diff = pDM_Odm->TH_EDCCA_HL_diff_mode2 ;
-#else                          
-                               ODM_SetMACReg(pDM_Odm, REG_TX_PTCL_CTRL, BIT15, 1);     //ignore EDCCA  reg520[15]=1
-                               ODM_SetMACReg(pDM_Odm, REG_RD_CTRL, BIT11, 0);          //reg524[11]=0
-#endif
-                               pDM_Odm->adaptivity_flag = FALSE;
-                       }
-               }
-       }
-       else    // TX<RX 
-       {
-               if(pDM_Odm->adaptivity_flag == TRUE && pDM_Odm->NHM_cnt_0 <= 200)
-               {
-                       //test_status = 2;
-                       ODM_SetMACReg(pDM_Odm, REG_TX_PTCL_CTRL, BIT15, 0);     //don't ignore EDCCA     reg520[15]=0\14
-                       ODM_SetMACReg(pDM_Odm, REG_RD_CTRL, BIT11, 1);  //reg524[11]=1  
-                       pDM_Odm->tolerance_cnt = 0;
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-                       pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_backup;
-                       pDM_Odm->TH_EDCCA_HL_diff = pDM_Odm->TH_EDCCA_HL_diff_backup ;
-#endif
-               }
-               else
-               {
-                       if(pDM_Odm->tolerance_cnt<3)
-                               pDM_Odm->tolerance_cnt = pDM_Odm->tolerance_cnt + 1;
-                       else
-                               pDM_Odm->tolerance_cnt = 4;     
-                       //test_status = 5;
-                       if(pDM_Odm->tolerance_cnt >3)
-                       {
-                               //test_status = 4;
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-                       pDM_Odm->TH_L2H_ini = pDM_Odm->TH_L2H_ini_mode2;
-                       pDM_Odm->TH_EDCCA_HL_diff = pDM_Odm->TH_EDCCA_HL_diff_mode2 ;
-#else
-                               ODM_SetMACReg(pDM_Odm, REG_TX_PTCL_CTRL, BIT15, 1);     //ignore EDCCA  reg520[15]=1
-                               ODM_SetMACReg(pDM_Odm, REG_RD_CTRL, BIT11, 0);          //reg524[11]=0
-#endif
-                               pDM_Odm->adaptivity_flag = FALSE;
-                       }
-               }
-       }
-        
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("adaptivity_flag = %d\n ", pDM_Odm->adaptivity_flag));
-}
-
-VOID
-odm_SearchPwdBLowerBound(
-       IN              PVOID           pDM_VOID,
-       IN              u1Byte          IGI_target
-)
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       u4Byte                  value32 =0;
-       u1Byte                  cnt, IGI;
-       BOOLEAN                 bAdjust=TRUE;
-       s1Byte                  TH_L2H_dmc, TH_H2L_dmc;
-       s1Byte                  TH_L2H, TH_H2L, Diff;
-
-       IGI = 0x50; // find H2L, L2H lower bound
-       ODM_Write_DIG(pDM_Odm, IGI);
-       
-
-       Diff = IGI_target -(s1Byte)IGI;
-       TH_L2H_dmc = pDM_Odm->TH_L2H_ini + Diff;
-               if(TH_L2H_dmc > 10)     
-                       TH_L2H_dmc = 10;
-       TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;
-       if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-               {
-               ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte0, (u1Byte)TH_L2H_dmc);
-               ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte2, (u1Byte)TH_H2L_dmc);
-               }
-       else
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, 0xFFFF, ((u1Byte)TH_H2L_dmc<<8) | (u1Byte)TH_L2H_dmc);
-                                       
-       ODM_delay_ms(5);
-               
-               while(bAdjust)
-                       {
-                       for(cnt=0; cnt<20; cnt ++)
-                               {
-                               if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-                                       value32 = ODM_GetBBReg(pDM_Odm,ODM_REG_RPT_11N, bMaskDWord);
-                               else if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-                                       value32 = ODM_GetBBReg(pDM_Odm,ODM_REG_RPT_11AC, bMaskDWord);
-                       
-                               if (value32 & BIT30 && (pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8723B|ODM_RTL8188E)))
-                                       pDM_Odm->txEdcca1 = pDM_Odm->txEdcca1 + 1;
-                               else if(value32 & BIT29)
-                                       pDM_Odm->txEdcca1 = pDM_Odm->txEdcca1 + 1;
-                               else
-                                       pDM_Odm->txEdcca0 = pDM_Odm->txEdcca0 + 1;
-                               }
-                       //DbgPrint("txEdcca1 = %d, txEdcca0 = %d\n", pDM_Odm->txEdcca1, pDM_Odm->txEdcca0);
-                       
-                               if(pDM_Odm->txEdcca1 > 5 )
-                               {
-                                       IGI = IGI -1;
-                                       TH_L2H_dmc = TH_L2H_dmc + 1;
-                                               if(TH_L2H_dmc > 10)
-                                                       TH_L2H_dmc = 10;
-                                       TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;
-                                       if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-                                       {
-                                               ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte0, (u1Byte)TH_L2H_dmc);
-                                               ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte2, (u1Byte)TH_H2L_dmc);
-                                       }
-                                       else
-                                               ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, 0xFFFF, ((u1Byte)TH_H2L_dmc<<8) | (u1Byte)TH_L2H_dmc);
-
-                                       pDM_Odm->TxHangFlg = TRUE;
-                                       pDM_Odm->txEdcca1 = 0;
-                                       pDM_Odm->txEdcca0 = 0;
-
-                                       if(TH_L2H_dmc == 10)
-                                               {
-                                               bAdjust = FALSE;
-                                               pDM_Odm->TxHangFlg = FALSE;
-                                               pDM_Odm->txEdcca1 = 0;
-                                               pDM_Odm->txEdcca0 = 0;
-                                               pDM_Odm->H2L_lb = TH_H2L_dmc;
-                                               pDM_Odm->L2H_lb = TH_L2H_dmc;
-                                               pDM_Odm->Adaptivity_IGI_upper = IGI;
-                                               }
-                                       }
-                               else
-                               {
-                                       bAdjust = FALSE;
-                                       pDM_Odm->TxHangFlg = FALSE;
-                                       pDM_Odm->txEdcca1 = 0;
-                                       pDM_Odm->txEdcca0 = 0;
-                                       pDM_Odm->H2L_lb = TH_H2L_dmc;
-                                       pDM_Odm->L2H_lb = TH_L2H_dmc;   
-                                       pDM_Odm->Adaptivity_IGI_upper = IGI;
-                               }
-                       }
-
-                                                       
-ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("IGI = 0x%x, H2L_lb = 0x%x, L2H_lb = 0x%x\n", IGI, pDM_Odm->H2L_lb , pDM_Odm->L2H_lb));
-               
-}
-
-VOID
-odm_AdaptivityInit(
-       IN      PVOID           pDM_VOID
-)
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-#if(DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;
-       PMGNT_INFO              pMgntInfo = &(pAdapter->MgntInfo);
-       pDM_Odm->Carrier_Sense_enable = (BOOLEAN)pMgntInfo->RegEnableCarrierSense;
-#endif
-
-#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))
-
-       if(pDM_Odm->Carrier_Sense_enable == FALSE)
-       {
-               pDM_Odm->TH_L2H_ini = 0xf7; // -7
-       }
-       else
-               pDM_Odm->TH_L2H_ini = 0xa; 
-
-       pDM_Odm->AdapEn_RSSI = 20;
-       pDM_Odm->TH_EDCCA_HL_diff = 7;
-
-#elif (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-       if(pDM_Odm->Carrier_Sense_enable){
-               pDM_Odm->TH_L2H_ini = 10;
-               pDM_Odm->TH_EDCCA_HL_diff = 3;          
-               pDM_Odm->AdapEn_RSSI = 30;
-       }
-       else
-       {
-               pDM_Odm->TH_L2H_ini = 0xf7;
-               pDM_Odm->TH_EDCCA_HL_diff = 7;
-               pDM_Odm->AdapEn_RSSI = 20;
-       }
-
-       pDM_Odm->TH_L2H_ini_mode2 = 20;
-       pDM_Odm->TH_EDCCA_HL_diff_mode2 = 8;
-       pDM_Odm->TH_L2H_ini_backup = pDM_Odm->TH_L2H_ini;
-       pDM_Odm->TH_EDCCA_HL_diff_backup = pDM_Odm->TH_EDCCA_HL_diff ;
-       
-#endif
-
-       pDM_Odm->IGI_Base = 0x32;       
-       pDM_Odm->IGI_target = 0x1c;
-       pDM_Odm->ForceEDCCA = 0;
-       pDM_Odm->NHM_disable = FALSE;
-       pDM_Odm->TxHangFlg = TRUE;
-       pDM_Odm->txEdcca0 = 0;
-       pDM_Odm->txEdcca1 = 0;
-       pDM_Odm->H2L_lb= 0;
-       pDM_Odm->L2H_lb= 0;
-       pDM_Odm->Adaptivity_IGI_upper = 0;
-       odm_NHMBBInit(pDM_Odm);
-
-       ODM_SetBBReg(pDM_Odm, REG_RD_CTRL, BIT11, 1); // stop counting if EDCCA is asserted
-}
-
-
-VOID
-odm_Adaptivity(
-       IN              PVOID                   pDM_VOID,
-       IN              u1Byte                  IGI
-)
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       s1Byte TH_L2H_dmc, TH_H2L_dmc;
-       s1Byte Diff, IGI_target;
-       BOOLEAN EDCCA_State = FALSE;
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
-       BOOLEAN         bFwCurrentInPSMode=FALSE;       
-       PMGNT_INFO                              pMgntInfo = &(pAdapter->MgntInfo);
-       
-       pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_FW_PSMODE_STATUS, (pu1Byte)(&bFwCurrentInPSMode));   
-
-       // Disable EDCCA mode while under LPS mode, added by Roger, 2012.09.14.
-       if(bFwCurrentInPSMode)
-               return;
-#endif
-
-       if(!(pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY))
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("Go to odm_DynamicEDCCA() \n"));
-               // Add by Neil Chen to enable edcca to MP Platform 
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-               // Adjust EDCCA.
-               if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-                       odm_DynamicEDCCA(pDM_Odm);
-#endif
-               return;
-       }
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       if(pMgntInfo->RegEnableAdaptivity== 2)
-#else
-       if (pDM_Odm->Adapter->registrypriv.adaptivity_en == 2)
-#endif
-       {
-               if(pDM_Odm->Carrier_Sense_enable == FALSE)              // check domain Code for Adaptivity or CarrierSense
-               {
-                       if ((*pDM_Odm->pBandType == ODM_BAND_5G) && 
-                               !(pDM_Odm->odm_Regulation5G == REGULATION_ETSI || pDM_Odm->odm_Regulation5G == REGULATION_WW))
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("Adaptivity skip 5G domain code : %d \n", pDM_Odm->odm_Regulation5G));
-                               return;
-                       }
-
-                       else if((*pDM_Odm->pBandType == ODM_BAND_2_4G) &&
-                               !(pDM_Odm->odm_Regulation2_4G == REGULATION_ETSI || pDM_Odm->odm_Regulation2_4G == REGULATION_WW))
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("Adaptivity skip 2.4G domain code : %d \n", pDM_Odm->odm_Regulation2_4G));
-                               return;
-                       
-                       }
-                       else if ((*pDM_Odm->pBandType != ODM_BAND_2_4G) && (*pDM_Odm->pBandType != ODM_BAND_5G))
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("Adaptivity neither 2G nor 5G band, return\n"));
-                               return;
-                       }
-               }
-               else
-               {
-                       if ((*pDM_Odm->pBandType == ODM_BAND_5G) && 
-                               !(pDM_Odm->odm_Regulation5G == REGULATION_ETSI || pDM_Odm->odm_Regulation5G == REGULATION_WW))
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("CarrierSense skip 5G domain code : %d\n", pDM_Odm->odm_Regulation5G));
-                               return;
-                       }
-
-                       else if((*pDM_Odm->pBandType == ODM_BAND_2_4G) &&
-                               !(pDM_Odm->odm_Regulation2_4G == REGULATION_ETSI || pDM_Odm->odm_Regulation2_4G == REGULATION_WW))
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("CarrierSense skip 2.4G domain code : %d\n", pDM_Odm->odm_Regulation2_4G));
-                               return;
-                       
-                       }
-                       else if ((*pDM_Odm->pBandType != ODM_BAND_2_4G) && (*pDM_Odm->pBandType != ODM_BAND_5G))
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("CarrierSense neither 2G nor 5G band, return\n"));
-                               return;
-                       }
-               }
-       }
-#endif
-
-       
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_Adaptivity() =====> \n"));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("ForceEDCCA=%d, IGI_Base=0x%x, TH_L2H_ini = %d, TH_EDCCA_HL_diff = %d, AdapEn_RSSI = %d\n", 
-               pDM_Odm->ForceEDCCA, pDM_Odm->IGI_Base, pDM_Odm->TH_L2H_ini, pDM_Odm->TH_EDCCA_HL_diff, pDM_Odm->AdapEn_RSSI));
-
-       if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-               ODM_SetBBReg(pDM_Odm, 0x800, BIT10, 0); //ADC_mask enable
-
-       if(*pDM_Odm->pBandWidth == ODM_BW20M) //CHANNEL_WIDTH_20
-               IGI_target = pDM_Odm->IGI_Base;
-       else if(*pDM_Odm->pBandWidth == ODM_BW40M)
-               IGI_target = pDM_Odm->IGI_Base + 2;
-       else if(*pDM_Odm->pBandWidth == ODM_BW80M)
-               IGI_target = pDM_Odm->IGI_Base + 2;
-       else
-               IGI_target = pDM_Odm->IGI_Base;
-       pDM_Odm->IGI_target = (u1Byte) IGI_target;
-       
-       //Search pwdB lower bound
-       if(pDM_Odm->TxHangFlg == TRUE)
-       {
-               if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-                       ODM_SetBBReg(pDM_Odm,ODM_REG_DBG_RPT_11N, bMaskDWord, 0x208);
-               else if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-                       ODM_SetBBReg(pDM_Odm,ODM_REG_DBG_RPT_11AC, bMaskDWord, 0x209);
-               odm_SearchPwdBLowerBound(pDM_Odm, pDM_Odm->IGI_target );
-       }
-               
-       if((!pDM_Odm->bLinked)||(*pDM_Odm->pChannel > 149)) // Band4 doesn't need adaptivity
-       {
-               if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-               {
-                  ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte0, 0x7f);
-                  ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte2, 0x7f);
-               }
-               else
-                  ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, 0xFFFF, (0x7f<<8) | 0x7f);
-               return;
-       }
-
-       if(!pDM_Odm->ForceEDCCA)
-       {
-               if(pDM_Odm->RSSI_Min > pDM_Odm->AdapEn_RSSI)
-                       EDCCA_State = 1;
-               else if(pDM_Odm->RSSI_Min < (pDM_Odm->AdapEn_RSSI - 5))
-                       EDCCA_State = 0;
-       }
-       else
-               EDCCA_State = 1;
-
-       if(pDM_Odm->bLinked && pDM_Odm->Carrier_Sense_enable == FALSE && pDM_Odm->NHM_disable == FALSE &&pDM_Odm->TxHangFlg == FALSE)
-               odm_NHMBB(pDM_Odm);
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("BandWidth=%s, IGI_target=0x%x, EDCCA_State=%d\n",
-               (*pDM_Odm->pBandWidth==ODM_BW80M)?"80M":((*pDM_Odm->pBandWidth==ODM_BW40M)?"40M":"20M"), IGI_target, EDCCA_State));
-
-       if(EDCCA_State == 1)
-       {
-               Diff = IGI_target -(s1Byte)IGI;
-               TH_L2H_dmc = pDM_Odm->TH_L2H_ini + Diff;
-               if(TH_L2H_dmc > 10)     
-                       TH_L2H_dmc = 10;
-                               
-               TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;
-
-               //replace lower bound to prevent EDCCA always equal 1
-                       if(TH_H2L_dmc < pDM_Odm->H2L_lb)                                
-                               TH_H2L_dmc = pDM_Odm->H2L_lb;
-                       if(TH_L2H_dmc < pDM_Odm->L2H_lb)
-                               TH_L2H_dmc = pDM_Odm->L2H_lb;
-       }
-       else
-       {
-               TH_L2H_dmc = 0x7f;
-               TH_H2L_dmc = 0x7f;
-       }
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("IGI=0x%x, TH_L2H_dmc = %d, TH_H2L_dmc = %d\n", 
-               IGI, TH_L2H_dmc, TH_H2L_dmc));
-       if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-       {
-               ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte0, (u1Byte)TH_L2H_dmc);
-               ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte2, (u1Byte)TH_H2L_dmc);
-       }
-       else
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, 0xFFFF, ((u1Byte)TH_H2L_dmc<<8) | (u1Byte)TH_L2H_dmc);
-}
-
-int 
-getIGIForDiff(int value_IGI)
-{
-       #define ONERCCA_LOW_TH          0x30
-       #define ONERCCA_LOW_DIFF        8
-
-       if (value_IGI < ONERCCA_LOW_TH) {
-               if ((ONERCCA_LOW_TH - value_IGI) < ONERCCA_LOW_DIFF)
-                       return ONERCCA_LOW_TH;
-               else
-                       return value_IGI + ONERCCA_LOW_DIFF;
-       } else {
-               return value_IGI;
-       }
-}
-
-VOID
-ODM_Write_DIG(
-       IN      PVOID                   pDM_VOID,
-       IN      u1Byte                  CurrentIGI
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       pDIG_T                  pDM_DigTable = &pDM_Odm->DM_DigTable;
-
-       if(pDM_DigTable->bStopDIG)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("Stop Writing IGI\n"));
-               return;
-       }
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_TRACE, ("ODM_REG(IGI_A,pDM_Odm)=0x%x, ODM_BIT(IGI,pDM_Odm)=0x%x \n",
-               ODM_REG(IGI_A,pDM_Odm),ODM_BIT(IGI,pDM_Odm)));
-
-       if(pDM_DigTable->CurIGValue != CurrentIGI)
-       {
-               //1 Check initial gain by upper bound           
-               if(!pDM_DigTable->bPSDInProgress)
-               {
-                       if(CurrentIGI > pDM_DigTable->rx_gain_range_max)
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_TRACE, ("CurrentIGI(0x%02x) is larger than upper bound !!\n",pDM_DigTable->rx_gain_range_max));
-                               CurrentIGI = pDM_DigTable->rx_gain_range_max;
-                       }
-
-               }
-
-               //1 Set IGI value
-               if(pDM_Odm->SupportPlatform & (ODM_WIN|ODM_CE))
-               { 
-                       ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_A,pDM_Odm), ODM_BIT(IGI,pDM_Odm), CurrentIGI);
-
-                       if(pDM_Odm->RFType > ODM_1T1R)
-                               ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_B,pDM_Odm), ODM_BIT(IGI,pDM_Odm), CurrentIGI);
-
-                       if((pDM_Odm->SupportICType & ODM_IC_11AC_SERIES) && (pDM_Odm->RFType > ODM_2T2R))
-                       {
-                               ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_C,pDM_Odm), ODM_BIT(IGI,pDM_Odm), CurrentIGI);
-                               ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_D,pDM_Odm), ODM_BIT(IGI,pDM_Odm), CurrentIGI);
-                       }
-               }
-               else if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))
-               {
-                       switch(*(pDM_Odm->pOnePathCCA))
-                       {
-                               case ODM_CCA_2R:
-                                       ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_A,pDM_Odm), ODM_BIT(IGI,pDM_Odm), CurrentIGI);
-
-                                       if(pDM_Odm->RFType > ODM_1T1R)
-                                               ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_B,pDM_Odm), ODM_BIT(IGI,pDM_Odm), CurrentIGI);
-                                       
-                                       if((pDM_Odm->SupportICType & ODM_IC_11AC_SERIES) && (pDM_Odm->RFType > ODM_2T2R))
-                                       {
-                                               ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_C,pDM_Odm), ODM_BIT(IGI,pDM_Odm), CurrentIGI);
-                                               ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_D,pDM_Odm), ODM_BIT(IGI,pDM_Odm), CurrentIGI);
-                                       }
-                                       break;
-                               case ODM_CCA_1R_A:
-                                       ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_A,pDM_Odm), ODM_BIT(IGI,pDM_Odm), CurrentIGI);
-                                       if(pDM_Odm->RFType != ODM_1T1R)
-                                               ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_B,pDM_Odm), ODM_BIT(IGI,pDM_Odm), getIGIForDiff(CurrentIGI));
-                                       break;
-                               case ODM_CCA_1R_B:
-                                       ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_A,pDM_Odm), ODM_BIT(IGI,pDM_Odm), getIGIForDiff(CurrentIGI));
-                                       if(pDM_Odm->RFType != ODM_1T1R)
-                                               ODM_SetBBReg(pDM_Odm, ODM_REG(IGI_B,pDM_Odm), ODM_BIT(IGI,pDM_Odm), CurrentIGI);
-                                       break;
-                       }
-               }
-               pDM_DigTable->CurIGValue = CurrentIGI;
-       }
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_TRACE, ("CurrentIGI(0x%02x). \n",CurrentIGI));
-       
-}
-
-VOID
-odm_PauseDIG(
-       IN              PVOID                                   pDM_VOID,
-       IN              ODM_Pause_DIG_TYPE              PauseType,
-       IN              u1Byte                                  IGIValue
-)
-{
-       PDM_ODM_T                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       pDIG_T                          pDM_DigTable = &pDM_Odm->DM_DigTable;
-       static  BOOLEAN         bPaused = FALSE;
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_PauseDIG()=========>\n"));
-
-#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)    
-       if(*pDM_DigTable->pbP2pLinkInProgress)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_PauseDIG(): P2P in progress !!\n"));
-               return;
-       }
-#endif
-
-       if((pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY) && pDM_Odm->TxHangFlg == TRUE)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_PauseDIG(): Dynamic adjust threshold in progress !!\n"));
-               return;
-       }
-
-       if(!bPaused && (!(pDM_Odm->SupportAbility & ODM_BB_DIG) || !(pDM_Odm->SupportAbility & ODM_BB_FA_CNT)))
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_PauseDIG(): Return: SupportAbility ODM_BB_DIG or ODM_BB_FA_CNT is disabled\n"));
-               return;
-       }
-       
-       switch(PauseType)
-       {
-               //1 Pause DIG
-               case ODM_PAUSE_DIG:
-                       //2 Disable DIG
-                       ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_ABILITY, pDM_Odm->SupportAbility & (~ODM_BB_DIG));
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_PauseDIG(): Pause DIG !!\n"));
-
-                       //2 Backup IGI value
-                       if(!bPaused)
-                       {
-                               pDM_DigTable->IGIBackup = pDM_DigTable->CurIGValue;
-                               bPaused = TRUE;
-                       }
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_PauseDIG(): Backup IGI  = 0x%x\n", pDM_DigTable->IGIBackup));
-
-                       //2 Write new IGI value
-                       ODM_Write_DIG(pDM_Odm, IGIValue);
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_PauseDIG(): Write new IGI = 0x%x\n", IGIValue));
-                       break;
-
-               //1 Resume DIG
-               case ODM_RESUME_DIG:
-                       if(bPaused)
-                       {
-                               //2 Write backup IGI value
-                               ODM_Write_DIG(pDM_Odm, pDM_DigTable->IGIBackup);
-                               bPaused = FALSE;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_PauseDIG(): Write original IGI = 0x%x\n", pDM_DigTable->IGIBackup));
-
-                               //2 Enable DIG
-                               ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_ABILITY, pDM_Odm->SupportAbility | ODM_BB_DIG);  
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_PauseDIG(): Resume DIG !!\n"));
-                       }
-                       break;
-
-               default:
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_PauseDIG(): Wrong  type !!\n"));
-                       break;
-       }
-}
-
-BOOLEAN 
-odm_DigAbort(
-       IN              PVOID                   pDM_VOID
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-       prtl8192cd_priv                         priv = pDM_Odm->priv;
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;
-       pRXHP_T                 pRX_HP_Table  = &pDM_Odm->DM_RXHP_Table;
-#endif
-
-       //SupportAbility
-       if(!(pDM_Odm->SupportAbility & ODM_BB_FA_CNT))
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Return: SupportAbility ODM_BB_FA_CNT is disabled\n"));
-               return  TRUE;
-       }
-
-       //SupportAbility
-       if(!(pDM_Odm->SupportAbility & ODM_BB_DIG))
-       {       
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Return: SupportAbility ODM_BB_DIG is disabled\n"));
-               return  TRUE;
-       }
-
-       //ScanInProcess
-       if(*(pDM_Odm->pbScanInProcess))
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Return: In Scan Progress \n"));
-               return  TRUE;
-       }
-
-       //add by Neil Chen to avoid PSD is processing
-       if(pDM_Odm->bDMInitialGainEnable == FALSE)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Return: PSD is Processing \n"));
-               return  TRUE;
-       }
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       #if OS_WIN_FROM_WIN7(OS_VERSION)
-       if(IsAPModeExist( pAdapter) && pAdapter->bInHctTest)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Return: Is AP mode or In HCT Test \n"));
-               return  TRUE;
-       }
-       #endif
-
-       if(pDM_Odm->bBtHsOperation)
-       {
-               odm_DigForBtHsMode(pDM_Odm);
-       }       
-
-       if(!(pDM_Odm->SupportICType &(ODM_RTL8723A|ODM_RTL8188E)))
-       {
-               if(pRX_HP_Table->RXHP_flag == 1)
-               {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Return: In RXHP Operation \n"));
-                       return  TRUE;   
-               }
-       }
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-       #ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV      
-       if((pDM_Odm->bLinked) && (pDM_Odm->Adapter->registrypriv.force_igi !=0))
-       {       
-               printk("pDM_Odm->RSSI_Min=%d \n",pDM_Odm->RSSI_Min);
-               ODM_Write_DIG(pDM_Odm,pDM_Odm->Adapter->registrypriv.force_igi);
-               return  TRUE;
-       }
-       #endif
-#else
-       if (!(priv->up_time > 5))
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Return: Not In DIG Operation Period \n"));
-               return  TRUE;
-       }
-#endif
-
-       return  FALSE;
-}
-
-VOID
-odm_DIGInit(
-       IN              PVOID           pDM_VOID
-       )
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       pDIG_T                                          pDM_DigTable = &pDM_Odm->DM_DigTable;
-       PFALSE_ALARM_STATISTICS         FalseAlmCnt = &(pDM_Odm->FalseAlmCnt);
-
-       pDM_DigTable->bStopDIG = FALSE;
-       pDM_DigTable->bPSDInProgress = FALSE;
-       pDM_DigTable->CurIGValue = (u1Byte) ODM_GetBBReg(pDM_Odm, ODM_REG(IGI_A,pDM_Odm), ODM_BIT(IGI,pDM_Odm));
-       pDM_DigTable->RssiLowThresh     = DM_DIG_THRESH_LOW;
-       pDM_DigTable->RssiHighThresh    = DM_DIG_THRESH_HIGH;
-       pDM_DigTable->FALowThresh       = DM_FALSEALARM_THRESH_LOW;
-       pDM_DigTable->FAHighThresh      = DM_FALSEALARM_THRESH_HIGH;
-       pDM_DigTable->BackoffVal = DM_DIG_BACKOFF_DEFAULT;
-       pDM_DigTable->BackoffVal_range_max = DM_DIG_BACKOFF_MAX;
-       pDM_DigTable->BackoffVal_range_min = DM_DIG_BACKOFF_MIN;
-       pDM_DigTable->PreCCK_CCAThres = 0xFF;
-       pDM_DigTable->CurCCK_CCAThres = 0x83;
-       pDM_DigTable->ForbiddenIGI = DM_DIG_MIN_NIC;
-       pDM_DigTable->LargeFAHit = 0;
-       pDM_DigTable->Recover_cnt = 0;
-       pDM_DigTable->bMediaConnect_0 = FALSE;
-       pDM_DigTable->bMediaConnect_1 = FALSE;
-
-       //To Initialize pDM_Odm->bDMInitialGainEnable == FALSE to avoid DIG error
-       pDM_Odm->bDMInitialGainEnable = TRUE;
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-       pDM_DigTable->DIG_Dynamic_MIN_0 = 0x25;
-       pDM_DigTable->DIG_Dynamic_MIN_1 = 0x25;
-
-       // For AP\ ADSL modified DIG
-       pDM_DigTable->bTpTarget = FALSE;
-       pDM_DigTable->bNoiseEst = TRUE;
-       pDM_DigTable->IGIOffset_A = 0;
-       pDM_DigTable->IGIOffset_B = 0;
-       pDM_DigTable->TpTrainTH_min = 0;
-
-       // For RTL8881A
-       FalseAlmCnt->Cnt_Ofdm_fail_pre = 0;
-
-       //Dyanmic EDCCA
-       if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-       {
-               ODM_SetBBReg(pDM_Odm, 0xC50, 0xFFFF0000, 0xfafd);
-       }
-#else
-       pDM_DigTable->DIG_Dynamic_MIN_0 = DM_DIG_MIN_NIC;
-       pDM_DigTable->DIG_Dynamic_MIN_1 = DM_DIG_MIN_NIC;
-
-       //To Initi BT30 IGI
-       pDM_DigTable->BT30_CurIGI=0x32;
-
-       #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
-       *pDM_DigTable->pbP2pLinkInProgress= FALSE;
-       #endif
-#endif
-
-       if(pDM_Odm->BoardType & (ODM_BOARD_EXT_PA|ODM_BOARD_EXT_LNA))
-       {
-               pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;
-               pDM_DigTable->rx_gain_range_min = DM_DIG_MIN_NIC;
-       }
-       else
-       {
-               pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;
-               pDM_DigTable->rx_gain_range_min = DM_DIG_MIN_NIC;
-       }
-       
-}
-
-
-VOID 
-odm_DIG(
-       IN              PVOID           pDM_VOID
-       )
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
-       PADAPTER                                        pAdapter        = pDM_Odm->Adapter;
-       HAL_DATA_TYPE                           *pHalData = GET_HAL_DATA(pDM_Odm->Adapter);
-#elif (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-       prtl8192cd_priv                         priv = pDM_Odm->priv;
-       PSTA_INFO_T                             pEntry;
-#endif
-
-       // Common parameters
-       pDIG_T                                          pDM_DigTable = &pDM_Odm->DM_DigTable;
-       PFALSE_ALARM_STATISTICS         pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;
-       BOOLEAN                                         FirstConnect,FirstDisConnect;
-       u1Byte                                          DIG_MaxOfMin, DIG_Dynamic_MIN, i;
-       u1Byte                                          dm_dig_max, dm_dig_min;
-       u1Byte                                          CurrentIGI = pDM_DigTable->CurIGValue;
-       u1Byte                                          offset;
-       u4Byte                                          dm_FA_thres[3];
-       u1Byte                                          Adap_IGI_Upper = 0;
-       u4Byte                                          TxTp = 0, RxTp = 0;
-       BOOLEAN                                         bDFSBand = FALSE;
-       BOOLEAN                                         bPerformance = TRUE, bFirstTpTarget = FALSE, bFirstCoverage = FALSE;
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-       u4Byte                                          TpTrainTH_MIN = DM_DIG_TP_Target_TH0;
-       static          u1Byte                  TimeCnt = 0;
-#endif
-
-       if(odm_DigAbort(pDM_Odm) == TRUE)
-               return;
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG()===========================>\n\n"));
-
-       if(pDM_Odm->adaptivity_flag == TRUE)
-               Adap_IGI_Upper = pDM_Odm->Adaptivity_IGI_upper;
-       
-
-       //1 Update status
-       if(pDM_Odm->SupportICType == ODM_RTL8192D)
-       {
-               if(*(pDM_Odm->pMacPhyMode) == ODM_DMSP)
-               {
-                       if(*(pDM_Odm->pbMasterOfDMSP))
-                       {
-                               DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_0;
-                               FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == FALSE);
-                               FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == TRUE);
-                       }
-                       else
-                       {
-                               DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_1;
-                               FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_1 == FALSE);
-                               FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_1 == TRUE);
-                       }
-               }
-               else
-               {
-                       if(*(pDM_Odm->pBandType) == ODM_BAND_5G)
-                       {
-                               DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_0;
-                               FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == FALSE);
-                               FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == TRUE);
-                       }
-                       else
-                       {
-                               DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_1;
-                               FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_1 == FALSE);
-                               FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_1 == TRUE);
-                       }
-               }
-       }
-       else
-       {       
-               DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_0;
-               FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == FALSE);
-               FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == TRUE);
-       }
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-       //1 Noise Floor Estimate
-       //pDM_DigTable->bNoiseEst = (FirstConnect)?TRUE:pDM_DigTable->bNoiseEst;
-       //odm_InbandNoiseCalculate (pDM_Odm);
-       
-       //1 Mode decision
-       if(pDM_Odm->bLinked)
-       {
-               //2 Calculate total TP
-               for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)
-               {
-                       pEntry = pDM_Odm->pODM_StaInfo[i];
-                       if(IS_STA_VALID(pEntry))
-                       {
-                               RxTp += (u4Byte)(pEntry->rx_byte_cnt_LowMAW>>7);
-                               TxTp += (u4Byte)(pEntry->tx_byte_cnt_LowMAW>>7);                        //Kbps
-                       }
-               }
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): TX TP = %dkbps, RX TP = %dkbps\n", TxTp, RxTp));
-       }
-
-       switch(pDM_Odm->priv->pshare->rf_ft_var.dig_cov_enable)
-       {
-               case 0:
-               {
-                       bPerformance = TRUE;
-                       break;
-               }
-               case 1:
-               {
-                       bPerformance = FALSE;
-                       break;
-               }
-               case 2:
-               {
-                       if(pDM_Odm->bLinked)
-                       {
-                               if(pDM_DigTable->TpTrainTH_min > DM_DIG_TP_Target_TH0)
-                                       TpTrainTH_MIN = pDM_DigTable->TpTrainTH_min;
-
-                               if(pDM_DigTable->TpTrainTH_min > DM_DIG_TP_Target_TH1)
-                                       TpTrainTH_MIN = DM_DIG_TP_Target_TH1;
-
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): TP training mode lower bound = %dkbps\n", TpTrainTH_MIN));
-
-                               //2 Decide DIG mode by total TP
-                               if((TxTp + RxTp) > DM_DIG_TP_Target_TH1)                        // change to performance mode
-                               {
-                                       bFirstTpTarget = (!pDM_DigTable->bTpTarget)?TRUE:FALSE;
-                                       pDM_DigTable->bTpTarget = TRUE;
-                                       bPerformance = TRUE;
-                               }
-                               else if((TxTp + RxTp) < TpTrainTH_MIN)  // change to coverage mode
-                               {
-                                       bFirstCoverage = (pDM_DigTable->bTpTarget)?TRUE:FALSE;
-                                       
-                                       if(TimeCnt < DM_DIG_TP_Training_Period)
-                                       {
-                                               pDM_DigTable->bTpTarget = FALSE;
-                                               bPerformance = FALSE;
-                                               TimeCnt++;
-                                       }
-                                       else
-                                       {
-                                               pDM_DigTable->bTpTarget = TRUE;
-                                               bPerformance = TRUE;
-                                               bFirstTpTarget = TRUE;
-                                               TimeCnt = 0;
-                                       }
-                               }
-                               else                                                                            // remain previous mode
-                               {
-                                       bPerformance = pDM_DigTable->bTpTarget;
-
-                                       if(!bPerformance)
-                                       {
-                                               if(TimeCnt < DM_DIG_TP_Training_Period)
-                                                       TimeCnt++;
-                                               else
-                                               {
-                                                       pDM_DigTable->bTpTarget = TRUE;
-                                                       bPerformance = TRUE;
-                                                       bFirstTpTarget = TRUE;
-                                                       TimeCnt = 0;
-                                               }
-                                       }
-                               }
-
-                               if(!bPerformance)
-                                       pDM_DigTable->TpTrainTH_min = RxTp + TxTp;
-
-                       }
-                       else
-                       {
-                               bPerformance = FALSE;
-                               pDM_DigTable->TpTrainTH_min = 0;
-                       }
-                       break;
-               }
-               default:
-                       bPerformance = TRUE;
-       }
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("====== DIG mode = %d  ======\n", pDM_Odm->priv->pshare->rf_ft_var.dig_cov_enable));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("====== bPerformance = %d ======\n", bPerformance));
-#endif
-
-       //1 Boundary Decision
-       if((pDM_Odm->SupportICType & ODM_RTL8192C) && (pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA)))
-       {
-               //2 High power case
-               if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))
-               {
-                       dm_dig_max = DM_DIG_MAX_AP_HP;
-                       dm_dig_min = DM_DIG_MIN_AP_HP;
-               }
-               else
-               {
-                       dm_dig_max = DM_DIG_MAX_NIC_HP;
-                       dm_dig_min = DM_DIG_MIN_NIC_HP;
-               }
-               DIG_MaxOfMin = DM_DIG_MAX_AP_HP;
-       }
-       else
-       {
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-               //2 For AP\ADSL
-               if(!bPerformance)
-               {
-                       dm_dig_max = DM_DIG_MAX_AP_COVERAGR;
-                       dm_dig_min = DM_DIG_MIN_AP_COVERAGE;
-                       DIG_MaxOfMin = DM_DIG_MAX_OF_MIN_COVERAGE;
-               }
-               else
-               {
-                       dm_dig_max = DM_DIG_MAX_AP;
-                       dm_dig_min = DM_DIG_MIN_AP;
-                       DIG_MaxOfMin = DM_DIG_MAX_OF_MIN;
-               }
-
-               //4 DFS band
-               if (((*pDM_Odm->pChannel>= 52) &&(*pDM_Odm->pChannel <= 64)) ||
-                       ((*pDM_Odm->pChannel >= 100) && (*pDM_Odm->pChannel <= 140)))
-               {
-                       bDFSBand = TRUE;
-                       dm_dig_min = DM_DIG_MIN_AP_DFS;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): ====== In DFS band ======\n"));
-               }
-               
-               //4 TX2path
-               if (priv->pmib->dot11RFEntry.tx2path && !bDFSBand && (*(pDM_Odm->pWirelessMode) == ODM_WM_B))
-                               dm_dig_max = 0x2A;
-
-#if RTL8192E_SUPPORT
-#ifdef HIGH_POWER_EXT_LNA
-               if ((pDM_Odm->SupportICType & (ODM_RTL8192E)) && (pDM_Odm->ExtLNA))
-                       dm_dig_max = 0x42;                                              
-#endif
-#endif
-
-#else
-               //2 For WIN\CE
-               if(pDM_Odm->SupportICType >= ODM_RTL8188E)
-                       dm_dig_max = 0x5A;
-               else
-                       dm_dig_max = DM_DIG_MAX_NIC;
-               
-               if(pDM_Odm->SupportICType != ODM_RTL8821)
-                       dm_dig_min = DM_DIG_MIN_NIC;
-               else
-                       dm_dig_min = 0x1C;
-
-               DIG_MaxOfMin = DM_DIG_MAX_AP;
-#endif 
-       }
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Absolutly upper bound = 0x%x, lower bound = 0x%x\n",dm_dig_max, dm_dig_min));
-
-#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
-       // for P2P case
-       if(0 < *pDM_Odm->pu1ForcedIgiLb)
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): P2P case: Force IGI lb to: %u !!!!!!\n", *pDM_Odm->pu1ForcedIgiLb));
-               dm_dig_min = *pDM_Odm->pu1ForcedIgiLb;
-               dm_dig_max = (dm_dig_min <= dm_dig_max) ? (dm_dig_max) : (dm_dig_min + 1);
-       }
-#endif
-
-       //1 Adjust boundary by RSSI
-       if(pDM_Odm->bLinked && bPerformance)
-       {
-               //2 Modify DIG upper bound
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-               offset = 15;
-#else
-               //4 Modify DIG upper bound for 92E, 8723A\B, 8821 & 8812 BT
-               if((pDM_Odm->SupportICType & (ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8812|ODM_RTL8821|ODM_RTL8723A)) && (pDM_Odm->bBtLimitedDig==1))
-               {
-                       offset = 10;
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Coex. case: Force upper bound to RSSI + %d !!!!!!\n", offset));          
-               }
-               else
-                       offset = 15;
-#endif
-
-               if((pDM_Odm->RSSI_Min + offset) > dm_dig_max )
-                       pDM_DigTable->rx_gain_range_max = dm_dig_max;
-               else if((pDM_Odm->RSSI_Min + offset) < dm_dig_min )
-                       pDM_DigTable->rx_gain_range_max = dm_dig_min;
-               else
-                       pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + offset;
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-               //2 Modify DIG lower bound
-               //if(pDM_Odm->bOneEntryOnly)
-               {
-                       if(pDM_Odm->RSSI_Min < dm_dig_min)
-                               DIG_Dynamic_MIN = dm_dig_min;
-                       else if (pDM_Odm->RSSI_Min > DIG_MaxOfMin)
-                               DIG_Dynamic_MIN = DIG_MaxOfMin;
-                       else
-                               DIG_Dynamic_MIN = pDM_Odm->RSSI_Min;
-               }
-#else
-               {
-                       //4 For AP
-#ifdef __ECOS
-                       HAL_REORDER_BARRIER();
-#else
-                       rmb();
-#endif
-                       if (bDFSBand)
-                       {
-                               DIG_Dynamic_MIN = dm_dig_min;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DFS band: Force lower bound to 0x%x after link !!!!!!\n", dm_dig_min));
-                       }
-                       else 
-                       {
-                               if(pDM_Odm->RSSI_Min < dm_dig_min)
-                                       DIG_Dynamic_MIN = dm_dig_min;
-                               else if (pDM_Odm->RSSI_Min > DIG_MaxOfMin)
-                                       DIG_Dynamic_MIN = DIG_MaxOfMin;
-                               else
-                                       DIG_Dynamic_MIN = pDM_Odm->RSSI_Min;
-                       }
-               }
-#endif
-       }
-       else
-       {
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-               if(bPerformance && bDFSBand)
-               {
-                       pDM_DigTable->rx_gain_range_max = 0x28;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DFS band: Force upper bound to 0x%x before link !!!!!!\n", pDM_DigTable->rx_gain_range_max));
-               }
-               else
-#endif
-               {
-                       pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_AP;
-               }
-               DIG_Dynamic_MIN = dm_dig_min;
-       }
-       
-       //1 Force Lower Bound for AntDiv
-       if(pDM_Odm->bLinked && !pDM_Odm->bOneEntryOnly)
-       {
-               if((pDM_Odm->SupportICType & ODM_ANTDIV_SUPPORT) && (pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))
-               {
-                       if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV || pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV ||pDM_Odm->AntDivType == S0S1_SW_ANTDIV)
-                       {
-                               if(pDM_DigTable->AntDiv_RSSI_max > DIG_MaxOfMin)
-                                       DIG_Dynamic_MIN = DIG_MaxOfMin;
-                               else
-                                       DIG_Dynamic_MIN = (u1Byte) pDM_DigTable->AntDiv_RSSI_max;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("odm_DIG(): Antenna diversity case: Force lower bound to 0x%x !!!!!!\n", DIG_Dynamic_MIN));
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("odm_DIG(): Antenna diversity case: RSSI_max = 0x%x !!!!!!\n", pDM_DigTable->AntDiv_RSSI_max));
-                       }
-               }
-       }
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Adjust boundary by RSSI Upper bound = 0x%x, Lower bound = 0x%x\n",
-               pDM_DigTable->rx_gain_range_max, DIG_Dynamic_MIN));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Link status: bLinked = %d, RSSI = %d, bFirstConnect = %d, bFirsrDisConnect = %d\n\n",
-               pDM_Odm->bLinked, pDM_Odm->RSSI_Min, FirstConnect, FirstDisConnect));
-
-       //1 Modify DIG lower bound, deal with abnormal case
-       //2 Abnormal false alarm case
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-       if(bDFSBand)
-       {
-               pDM_DigTable->rx_gain_range_min = DIG_Dynamic_MIN;
-       }
-       else
-#endif
-       {
-               if(FirstDisConnect)
-               {
-                       pDM_DigTable->rx_gain_range_min = DIG_Dynamic_MIN;
-                       pDM_DigTable->ForbiddenIGI = DIG_Dynamic_MIN;
-               }
-               else
-                       pDM_DigTable->rx_gain_range_min = odm_ForbiddenIGICheck(pDM_Odm, DIG_Dynamic_MIN, CurrentIGI);
-       }
-
-       //2 Abnormal # beacon case
-#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
-               if(IS_STA_VALID(pDM_Odm->pODM_StaInfo[0]) && !ACTING_AS_AP(pAdapter))
-                       pDM_Odm->bsta_state = TRUE;
-#endif
-
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       if(pDM_Odm->bLinked && !FirstConnect)
-       {
-               if((pDM_Odm->PhyDbgInfo.NumQryBeaconPkt < 5) && (pDM_Odm->bsta_state))
-               {
-                       pDM_DigTable->rx_gain_range_min = dm_dig_min;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Abnrormal #beacon (%d) case in STA mode: Force lower bound to 0x%x !!!!!!\n\n",
-                               pDM_Odm->PhyDbgInfo.NumQryBeaconPkt, pDM_DigTable->rx_gain_range_min));
-               }
-       }
-#endif
-
-       //2 Abnormal lower bound case
-       if(pDM_DigTable->rx_gain_range_min > pDM_DigTable->rx_gain_range_max)
-       {
-               pDM_DigTable->rx_gain_range_min = pDM_DigTable->rx_gain_range_max;
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Abnrormal lower bound case: Force lower bound to 0x%x !!!!!!\n\n",pDM_DigTable->rx_gain_range_min));
-       }
-
-       
-       //1 False alarm threshold decision
-       odm_FAThresholdCheck(pDM_Odm, bDFSBand, bPerformance, RxTp, TxTp, dm_FA_thres);
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): False alarm threshold = %d, %d, %d \n\n", dm_FA_thres[0], dm_FA_thres[1], dm_FA_thres[2]));
-
-       //1 Adjust initial gain by false alarm
-       if(pDM_Odm->bLinked && bPerformance)
-       {
-               //2 After link
-               ODM_RT_TRACE(pDM_Odm,   ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Adjust IGI after link\n"));
-
-               if(bFirstTpTarget || (FirstConnect && bPerformance))
-               {       
-                       pDM_DigTable->LargeFAHit = 0;
-                       
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-                       if(bDFSBand)
-                       {
-                               if(pDM_Odm->RSSI_Min > 0x28)
-                                       CurrentIGI = 0x28;
-                               else
-                                       CurrentIGI = pDM_Odm->RSSI_Min;
-                               ODM_RT_TRACE(pDM_Odm,   ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DFS band: One-shot to 0x28 upmost!!!!!!\n"));
-                       }
-                       else
-#endif
-                       {
-                               if(pDM_Odm->RSSI_Min < DIG_MaxOfMin)
-                               {
-                                       if(CurrentIGI < pDM_Odm->RSSI_Min)
-                                               CurrentIGI = pDM_Odm->RSSI_Min;
-                               }
-                               else
-                               {
-                                       if(CurrentIGI < DIG_MaxOfMin)
-                                               CurrentIGI = DIG_MaxOfMin;
-                               }
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-                               if(pDM_Odm->SupportICType == ODM_RTL8812)
-                                       ODM_ConfigBBWithHeaderFile(pDM_Odm, CONFIG_BB_AGC_TAB_DIFF);
-#endif
-                       }
-
-                       ODM_RT_TRACE(pDM_Odm,   ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): First connect case: IGI does on-shot to 0x%x\n", CurrentIGI));
-
-               }
-               else
-               {
-                       if(pFalseAlmCnt->Cnt_all > dm_FA_thres[2])
-                               CurrentIGI = CurrentIGI + 4;
-                       else if (pFalseAlmCnt->Cnt_all > dm_FA_thres[1])
-                               CurrentIGI = CurrentIGI + 2;
-                       else if(pFalseAlmCnt->Cnt_all < dm_FA_thres[0])
-                               CurrentIGI = CurrentIGI - 2;
-
-                       //4 Abnormal # beacon case
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-                       if(IS_STA_VALID(pDM_Odm->pODM_StaInfo[0]) && !ACTING_AS_AP(pAdapter)) //STA mode is linked to AP
-                               pDM_Odm->bsta_state = _TRUE;
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-                       if((pDM_Odm->PhyDbgInfo.NumQryBeaconPkt < 5) && (pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH1) && (pDM_Odm->bsta_state))
-                       {                                               
-                               CurrentIGI = pDM_DigTable->rx_gain_range_min;
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Abnormal #beacon (%d) case: IGI does one-shot to 0x%x\n", 
-                                       pDM_Odm->PhyDbgInfo.NumQryBeaconPkt, CurrentIGI));
-                       }
-#endif
-               }
-       }       
-       else
-       {
-               //2 Before link
-               ODM_RT_TRACE(pDM_Odm,   ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Adjust IGI before link\n"));
-               
-               if(FirstDisConnect || bFirstCoverage)
-               {
-                       CurrentIGI = dm_dig_min;
-                       ODM_RT_TRACE(pDM_Odm,   ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): First disconnect case: IGI does on-shot to lower bound\n"));
-               }
-               else
-               {
-                       if(pFalseAlmCnt->Cnt_all > dm_FA_thres[2])
-                               CurrentIGI = CurrentIGI + 4;
-                       else if (pFalseAlmCnt->Cnt_all > dm_FA_thres[1])
-                               CurrentIGI = CurrentIGI + 2;
-                       else if(pFalseAlmCnt->Cnt_all < dm_FA_thres[0])
-                               CurrentIGI = CurrentIGI - 2;
-               }
-       }
-
-       //1 Check initial gain by upper/lower bound
-       if(CurrentIGI < pDM_DigTable->rx_gain_range_min)
-               CurrentIGI = pDM_DigTable->rx_gain_range_min;
-       
-       if(CurrentIGI > pDM_DigTable->rx_gain_range_max)
-               CurrentIGI = pDM_DigTable->rx_gain_range_max;
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): CurIGValue=0x%x, TotalFA = %d\n\n", CurrentIGI, pFalseAlmCnt->Cnt_all));
-
-       //1 Force upper bound and lower bound for adaptivity
-       if(pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY && pDM_Odm->adaptivity_flag == TRUE)
-       {
-               if(CurrentIGI > Adap_IGI_Upper)
-                       CurrentIGI = Adap_IGI_Upper;
-               
-               if(pDM_Odm->IGI_LowerBound != 0)
-               {
-                       if(CurrentIGI < pDM_Odm->IGI_LowerBound)
-                               CurrentIGI = pDM_Odm->IGI_LowerBound;
-               }
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Adaptivity case: Force upper bound to 0x%x !!!!!!\n", Adap_IGI_Upper));
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Adaptivity case: Force lower bound to 0x%x !!!!!!\n\n", pDM_Odm->IGI_LowerBound));
-       }
-       
-
-       //1 High power RSSI threshold
-#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)    
-       if((pDM_Odm->SupportICType == ODM_RTL8723A)&& (pHalData->UndecoratedSmoothedPWDB > DM_DIG_HIGH_PWR_THRESHOLD))
-       {
-               // High power IGI lower bound
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): UndecoratedSmoothedPWDB(%#x)\n", pHalData->UndecoratedSmoothedPWDB));
-               if(CurrentIGI < DM_DIG_HIGH_PWR_IGI_LOWER_BOUND)
-               {
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): CurIGValue(%#x)\n", pDM_DigTable->CurIGValue));
-                       //pDM_DigTable->CurIGValue = DM_DIG_HIGH_PWR_IGI_LOWER_BOUND;
-                       CurrentIGI=DM_DIG_HIGH_PWR_IGI_LOWER_BOUND;
-               }
-       }
-       if((pDM_Odm->SupportICType & ODM_RTL8723A) && IS_WIRELESS_MODE_G(pAdapter))
-       {
-               if(pHalData->UndecoratedSmoothedPWDB > 0x28)
-               {
-                       if(CurrentIGI < DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND)
-                       {
-                               //pDM_DigTable->CurIGValue = DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND;
-                               CurrentIGI = DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND;
-                       }       
-               } 
-       }
-#endif
-
-       //1 Update status
-#if (RTL8192D_SUPPORT==1) 
-       if(pDM_Odm->SupportICType == ODM_RTL8192D)
-       {
-               //sherry  delete DualMacSmartConncurrent 20110517
-               if(*(pDM_Odm->pMacPhyMode) == ODM_DMSP)
-               {
-                       ODM_Write_DIG_DMSP(pDM_Odm, CurrentIGI);//ODM_Write_DIG_DMSP(pDM_Odm, pDM_DigTable->CurIGValue);
-                       if(*(pDM_Odm->pbMasterOfDMSP))
-                       {
-                               pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;
-                               pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;
-                       }
-                       else
-                       {
-                               pDM_DigTable->bMediaConnect_1 = pDM_Odm->bLinked;
-                               pDM_DigTable->DIG_Dynamic_MIN_1 = DIG_Dynamic_MIN;
-                       }
-               }
-               else
-               {
-                       ODM_Write_DIG(pDM_Odm, CurrentIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);
-                       if(*(pDM_Odm->pBandType) == ODM_BAND_5G)
-                       {
-                               pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;
-                               pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;
-                       }
-                       else
-                       {
-                               pDM_DigTable->bMediaConnect_1 = pDM_Odm->bLinked;
-                               pDM_DigTable->DIG_Dynamic_MIN_1 = DIG_Dynamic_MIN;
-                       }
-               }
-       }
-       else
-#endif
-       {
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-               if(pDM_Odm->bBtHsOperation)
-               {
-                       if(pDM_Odm->bLinked)
-                       {
-                               if(pDM_DigTable->BT30_CurIGI > (CurrentIGI))
-                                       ODM_Write_DIG(pDM_Odm, CurrentIGI);
-                               else
-                                       ODM_Write_DIG(pDM_Odm, pDM_DigTable->BT30_CurIGI);
-                                       
-                               pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;
-                               pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;
-                       }
-                       else
-                       {
-                               if(pDM_Odm->bLinkInProcess)
-                                       ODM_Write_DIG(pDM_Odm, 0x1c);
-                               else if(pDM_Odm->bBtConnectProcess)
-                                       ODM_Write_DIG(pDM_Odm, 0x28);
-                               else
-                                       ODM_Write_DIG(pDM_Odm, pDM_DigTable->BT30_CurIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);   
-                       }
-               }       
-               else            // BT is not using
-#endif
-               {
-                       ODM_Write_DIG(pDM_Odm, CurrentIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);
-                       pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;
-                       pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;
-               }
-       }
-}
-
-VOID
-odm_DIGbyRSSI_LPS(
-       IN              PVOID           pDM_VOID
-       )
-{
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       PFALSE_ALARM_STATISTICS         pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;
-
-#if (DM_ODM_SUPPORT_TYPE & ODM_CE)
-#if 0          //and 2.3.5 coding rule
-       struct mlme_priv        *pmlmepriv = &(pAdapter->mlmepriv);
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);     
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-#endif
-#endif
-
-       u1Byte  RSSI_Lower=DM_DIG_MIN_NIC;   //0x1E or 0x1C
-       u1Byte  CurrentIGI=pDM_Odm->RSSI_Min;
-
-       CurrentIGI=CurrentIGI+RSSI_OFFSET_DIG;
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIGbyRSSI_LPS()==>\n"));
-
-       // Using FW PS mode to make IGI
-       //Adjust by  FA in LPS MODE
-       if(pFalseAlmCnt->Cnt_all> DM_DIG_FA_TH2_LPS)
-               CurrentIGI = CurrentIGI+4;
-       else if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH1_LPS)
-               CurrentIGI = CurrentIGI+2;
-       else if(pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH0_LPS)
-               CurrentIGI = CurrentIGI-2;      
-
-
-       //Lower bound checking
-
-       //RSSI Lower bound check
-       if((pDM_Odm->RSSI_Min-10) > DM_DIG_MIN_NIC)
-               RSSI_Lower =(pDM_Odm->RSSI_Min-10);
-       else
-               RSSI_Lower =DM_DIG_MIN_NIC;
-
-       //Upper and Lower Bound checking
-        if(CurrentIGI > DM_DIG_MAX_NIC)
-               CurrentIGI=DM_DIG_MAX_NIC;
-        else if(CurrentIGI < RSSI_Lower)
-               CurrentIGI =RSSI_Lower;
-
-       
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIGbyRSSI_LPS(): pFalseAlmCnt->Cnt_all = %d\n",pFalseAlmCnt->Cnt_all));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIGbyRSSI_LPS(): pDM_Odm->RSSI_Min = %d\n",pDM_Odm->RSSI_Min));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIGbyRSSI_LPS(): CurrentIGI = 0x%x\n",CurrentIGI));
-
-       ODM_Write_DIG(pDM_Odm, CurrentIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);
-#endif
-}
-
-VOID
-odm_DigForBtHsMode(
-       IN              PVOID           pDM_VOID
-       )
-{
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       PDM_ODM_T                               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       pDIG_T                                  pDM_DigTable=&pDM_Odm->DM_DigTable;
-       u1Byte                                  digForBtHs=0;
-       u1Byte                                  digUpBound=0x5a;
-       
-       if(pDM_Odm->bBtConnectProcess)
-       {
-               if(pDM_Odm->SupportICType&(ODM_RTL8723A))
-                       digForBtHs = 0x28;
-               else
-                       digForBtHs = 0x22;
-       }
-       else
-       {
-               //
-               // Decide DIG value by BT HS RSSI.
-               //
-               digForBtHs = pDM_Odm->btHsRssi+4;
-               
-               //DIG Bound
-               if(pDM_Odm->SupportICType&(ODM_RTL8723A))
-                       digUpBound = 0x3e;
-               
-               if(digForBtHs > digUpBound)
-                       digForBtHs = digUpBound;
-               if(digForBtHs < 0x1c)
-                       digForBtHs = 0x1c;
-
-               // update Current IGI
-               pDM_DigTable->BT30_CurIGI = digForBtHs;
-       }
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DigForBtHsMode() : set DigValue=0x%x\n", digForBtHs));
-#endif
-}
-
-
-//3============================================================
-//3 FASLE ALARM CHECK
-//3============================================================
-
-VOID 
-odm_FalseAlarmCounterStatistics(
-       IN              PVOID           pDM_VOID
-       )
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       PFALSE_ALARM_STATISTICS         FalseAlmCnt = &(pDM_Odm->FalseAlmCnt);
-       u4Byte                                          ret_value;
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
-//Mark there, and check this in odm_DMWatchDog
-#if 0 //(DM_ODM_SUPPORT_TYPE == ODM_AP)
-       prtl8192cd_priv priv            = pDM_Odm->priv;
-       if( (priv->auto_channel != 0) && (priv->auto_channel != 2) )
-               return;
-#endif
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       if((pDM_Odm->SupportICType == ODM_RTL8192D) &&
-               (*(pDM_Odm->pMacPhyMode)==ODM_DMSP)&&    ////modify by Guo.Mingzhi 2011-12-29
-               (!(*(pDM_Odm->pbMasterOfDMSP))))
-       {
-               odm_FalseAlarmCounterStatistics_ForSlaveOfDMSP(pDM_Odm);
-               return;
-       }
-#endif         
-
-       if(!(pDM_Odm->SupportAbility & ODM_BB_FA_CNT))
-               return;
-
-       if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-       {
-
-               //hold ofdm counter
-               ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_HOLDC_11N, BIT31, 1); //hold page C counter
-               ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTD_11N, BIT31, 1); //hold page D counter
-       
-               ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE1_11N, bMaskDWord);
-               FalseAlmCnt->Cnt_Fast_Fsync = (ret_value&0xffff);
-               FalseAlmCnt->Cnt_SB_Search_fail = ((ret_value&0xffff0000)>>16);         
-
-               ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE2_11N, bMaskDWord);
-               FalseAlmCnt->Cnt_OFDM_CCA = (ret_value&0xffff); 
-               FalseAlmCnt->Cnt_Parity_Fail = ((ret_value&0xffff0000)>>16);    
-
-               ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE3_11N, bMaskDWord);
-               FalseAlmCnt->Cnt_Rate_Illegal = (ret_value&0xffff);
-               FalseAlmCnt->Cnt_Crc8_fail = ((ret_value&0xffff0000)>>16);
-
-               ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE4_11N, bMaskDWord);
-               FalseAlmCnt->Cnt_Mcs_fail = (ret_value&0xffff);
-
-               FalseAlmCnt->Cnt_Ofdm_fail =    FalseAlmCnt->Cnt_Parity_Fail + FalseAlmCnt->Cnt_Rate_Illegal +
-                                                               FalseAlmCnt->Cnt_Crc8_fail + FalseAlmCnt->Cnt_Mcs_fail +
-                                                               FalseAlmCnt->Cnt_Fast_Fsync + FalseAlmCnt->Cnt_SB_Search_fail;
-
-#if (RTL8188E_SUPPORT==1)
-               if(pDM_Odm->SupportICType == ODM_RTL8188E)
-               {
-                       ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_SC_CNT_11N, bMaskDWord);
-                       FalseAlmCnt->Cnt_BW_LSC = (ret_value&0xffff);
-                       FalseAlmCnt->Cnt_BW_USC = ((ret_value&0xffff0000)>>16);
-               }
-#endif
-
-#if (RTL8192D_SUPPORT==1) 
-               if(pDM_Odm->SupportICType == ODM_RTL8192D)
-               {
-                       odm_GetCCKFalseAlarm_92D(pDM_Odm);
-               }
-               else
-#endif
-               {
-                       //hold cck counter
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11N, BIT12, 1); 
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11N, BIT14, 1); 
-               
-                       ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_CCK_FA_LSB_11N, bMaskByte0);
-                       FalseAlmCnt->Cnt_Cck_fail = ret_value;
-
-                       ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_CCK_FA_MSB_11N, bMaskByte3);
-                       FalseAlmCnt->Cnt_Cck_fail +=  (ret_value& 0xff)<<8;
-
-                       ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_CCK_CCA_CNT_11N, bMaskDWord);
-                       FalseAlmCnt->Cnt_CCK_CCA = ((ret_value&0xFF)<<8) |((ret_value&0xFF00)>>8);
-               }
-       
-               FalseAlmCnt->Cnt_all = (        FalseAlmCnt->Cnt_Fast_Fsync + 
-                                                       FalseAlmCnt->Cnt_SB_Search_fail +
-                                                       FalseAlmCnt->Cnt_Parity_Fail +
-                                                       FalseAlmCnt->Cnt_Rate_Illegal +
-                                                       FalseAlmCnt->Cnt_Crc8_fail +
-                                                       FalseAlmCnt->Cnt_Mcs_fail +
-                                                       FalseAlmCnt->Cnt_Cck_fail);     
-
-               FalseAlmCnt->Cnt_CCA_all = FalseAlmCnt->Cnt_OFDM_CCA + FalseAlmCnt->Cnt_CCK_CCA;
-
-#if (RTL8192C_SUPPORT==1)
-               if(pDM_Odm->SupportICType == ODM_RTL8192C)
-                       odm_ResetFACounter_92C(pDM_Odm);
-#endif
-
-#if (RTL8192D_SUPPORT==1)
-               if(pDM_Odm->SupportICType == ODM_RTL8192D)
-                       odm_ResetFACounter_92D(pDM_Odm);
-#endif
-
-               if(pDM_Odm->SupportICType >=ODM_RTL8723A)
-               {
-                       //reset false alarm counter registers
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTC_11N, BIT31, 1);
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTC_11N, BIT31, 0);
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTD_11N, BIT27, 1);
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTD_11N, BIT27, 0);
-
-                       //update ofdm counter
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_HOLDC_11N, BIT31, 0); //update page C counter
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTD_11N, BIT31, 0); //update page D counter
-
-                       //reset CCK CCA counter
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11N, BIT13|BIT12, 0); 
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11N, BIT13|BIT12, 2); 
-                       //reset CCK FA counter
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11N, BIT15|BIT14, 0); 
-                       ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11N, BIT15|BIT14, 2); 
-               }
-               
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Enter odm_FalseAlarmCounterStatistics\n"));
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Fast_Fsync=%d, Cnt_SB_Search_fail=%d\n",
-                       FalseAlmCnt->Cnt_Fast_Fsync, FalseAlmCnt->Cnt_SB_Search_fail));
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Parity_Fail=%d, Cnt_Rate_Illegal=%d\n",
-                       FalseAlmCnt->Cnt_Parity_Fail, FalseAlmCnt->Cnt_Rate_Illegal));
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Crc8_fail=%d, Cnt_Mcs_fail=%d\n",
-               FalseAlmCnt->Cnt_Crc8_fail, FalseAlmCnt->Cnt_Mcs_fail));
-       }
-       else if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-       {
-               u4Byte CCKenable;
-               u4Byte Cnt_Ofdm_fail_temp = 0;
-               
-               //read OFDM FA counter
-               FalseAlmCnt->Cnt_Ofdm_fail = ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_11AC, bMaskLWord);
-               FalseAlmCnt->Cnt_Cck_fail = ODM_GetBBReg(pDM_Odm, ODM_REG_CCK_FA_11AC, bMaskLWord);
-
-               //read CCK/OFDM CCA counter
-               ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_CCK_CCA_CNT_11AC, bMaskDWord);
-               FalseAlmCnt->Cnt_OFDM_CCA = (ret_value & 0xffff0000) >> 16;
-               FalseAlmCnt->Cnt_CCK_CCA = ret_value & 0xffff;
-
-               // For 8881A
-               if(pDM_Odm->SupportICType == ODM_RTL8881A)
-               {
-                       if(FalseAlmCnt->Cnt_Ofdm_fail >= FalseAlmCnt->Cnt_Ofdm_fail_pre)
-                       {
-                               Cnt_Ofdm_fail_temp = FalseAlmCnt->Cnt_Ofdm_fail_pre;
-                               FalseAlmCnt->Cnt_Ofdm_fail_pre = FalseAlmCnt->Cnt_Ofdm_fail;
-                               FalseAlmCnt->Cnt_Ofdm_fail = FalseAlmCnt->Cnt_Ofdm_fail - Cnt_Ofdm_fail_temp;
-                       }
-                       else
-                               FalseAlmCnt->Cnt_Ofdm_fail_pre = FalseAlmCnt->Cnt_Ofdm_fail;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Ofdm_fail=%d\n",      FalseAlmCnt->Cnt_Ofdm_fail_pre));
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Ofdm_fail_pre=%d\n",  Cnt_Ofdm_fail_temp));
-                       
-                       // Reset FA counter by enable/disable OFDM
-                       if(FalseAlmCnt->Cnt_Ofdm_fail_pre >= 0x7fff)
-                       {
-                               // reset OFDM
-                               ODM_SetBBReg(pDM_Odm, ODM_REG_BB_RX_PATH_11AC, BIT29,0);
-                               ODM_SetBBReg(pDM_Odm, ODM_REG_BB_RX_PATH_11AC, BIT29,1);
-                               FalseAlmCnt->Cnt_Ofdm_fail_pre = 0;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Reset false alarm counter\n"));
-                       }
-               }
-
-               // reset OFDM FA coutner
-               ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RST_11AC, BIT17, 1);
-               ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RST_11AC, BIT17, 0);
-
-               // reset CCK FA counter
-               ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11AC, BIT15, 0);
-               ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11AC, BIT15, 1);
-
-               // reset CCA counter
-               ODM_SetBBReg(pDM_Odm, ODM_REG_RST_RPT_11AC, BIT0, 1);
-               ODM_SetBBReg(pDM_Odm, ODM_REG_RST_RPT_11AC, BIT0, 0);
-
-               CCKenable =  ODM_GetBBReg(pDM_Odm, ODM_REG_BB_RX_PATH_11AC, BIT28);
-               if(CCKenable)//if(*pDM_Odm->pBandType == ODM_BAND_2_4G)
-               {
-                       FalseAlmCnt->Cnt_all = FalseAlmCnt->Cnt_Ofdm_fail + FalseAlmCnt->Cnt_Cck_fail;
-                       FalseAlmCnt->Cnt_CCA_all = FalseAlmCnt->Cnt_CCK_CCA + FalseAlmCnt->Cnt_OFDM_CCA;
-               }
-               else
-               {
-                       FalseAlmCnt->Cnt_all = FalseAlmCnt->Cnt_Ofdm_fail;
-                       FalseAlmCnt->Cnt_CCA_all = FalseAlmCnt->Cnt_OFDM_CCA;
-               }
-
-       }
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_OFDM_CCA=%d\n",       FalseAlmCnt->Cnt_OFDM_CCA));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_CCK_CCA=%d\n",        FalseAlmCnt->Cnt_CCK_CCA));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_CCA_all=%d\n",        FalseAlmCnt->Cnt_CCA_all));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Ofdm_fail=%d\n",      FalseAlmCnt->Cnt_Ofdm_fail));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Cck_fail=%d\n",       FalseAlmCnt->Cnt_Cck_fail));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Ofdm_fail=%d\n",      FalseAlmCnt->Cnt_Ofdm_fail));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Total False Alarm=%d\n",  FalseAlmCnt->Cnt_all));
-}
-
-
-VOID
-odm_FAThresholdCheck(
-       IN              PVOID                   pDM_VOID,
-       IN              BOOLEAN                 bDFSBand,
-       IN              BOOLEAN                 bPerformance,
-       IN              u4Byte                  RxTp,
-       IN              u4Byte                  TxTp,
-       OUT             u4Byte*                 dm_FA_thres
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       
-       if(pDM_Odm->bLinked && (bPerformance||bDFSBand))
-       {
-               if(pDM_Odm->SupportICType == ODM_RTL8192D)
-               {
-                       // 8192D special case
-                       dm_FA_thres[0] = DM_DIG_FA_TH0_92D;
-                       dm_FA_thres[1] = DM_DIG_FA_TH1_92D;
-                       dm_FA_thres[2] = DM_DIG_FA_TH2_92D;
-               }
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-               else if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))
-               {
-                       // For AP
-                       if((RxTp>>2) > TxTp && RxTp < 10000 && RxTp > 500)                      // 10Mbps & 0.5Mbps
-                       {
-                               dm_FA_thres[0] = 0x080;
-                               dm_FA_thres[1] = 0x100;
-                               dm_FA_thres[2] = 0x200;                 
-                       }
-                       else
-                       {
-                               dm_FA_thres[0] = 0x100;
-                               dm_FA_thres[1] = 0x200;
-                               dm_FA_thres[2] = 0x300; 
-                       }
-               }
-#else
-               else if(pDM_Odm->SupportICType == ODM_RTL8723A && pDM_Odm->bBtLimitedDig)
-               {
-                       // 8723A BT special case
-                       dm_FA_thres[0] = DM_DIG_FA_TH0;
-                       dm_FA_thres[1] = 0x250;
-                       dm_FA_thres[2] = 0x300;
-               }
-#endif
-               else
-               {
-                       // For NIC
-                       dm_FA_thres[0] = DM_DIG_FA_TH0;
-                       dm_FA_thres[1] = DM_DIG_FA_TH1;
-                       dm_FA_thres[2] = DM_DIG_FA_TH2;
-               }
-       }
-       else
-       {
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-               if(bDFSBand)
-               {
-                       // For DFS band and no link
-                       dm_FA_thres[0] = 250;
-                       dm_FA_thres[1] = 1000;
-                       dm_FA_thres[2] = 2000;
-               }
-               else
-#endif
-               {
-                       dm_FA_thres[0] = 2000;
-                       dm_FA_thres[1] = 4000;
-                       dm_FA_thres[2] = 5000;
-               }
-       }
-       return;
-}
-
-u1Byte
-odm_ForbiddenIGICheck(
-       IN              PVOID                   pDM_VOID,
-       IN              u1Byte                  DIG_Dynamic_MIN,
-       IN              u1Byte                  CurrentIGI
-       )
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       pDIG_T                                          pDM_DigTable = &pDM_Odm->DM_DigTable;
-       PFALSE_ALARM_STATISTICS         pFalseAlmCnt = &(pDM_Odm->FalseAlmCnt);
-       u1Byte                                          rx_gain_range_min = pDM_DigTable->rx_gain_range_min;
-
-       if(pFalseAlmCnt->Cnt_all > 10000)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Abnormally false alarm case. \n"));
-
-               if(pDM_DigTable->LargeFAHit != 3)
-                       pDM_DigTable->LargeFAHit++;
-               
-               if(pDM_DigTable->ForbiddenIGI < CurrentIGI)//if(pDM_DigTable->ForbiddenIGI < pDM_DigTable->CurIGValue)
-               {
-                       pDM_DigTable->ForbiddenIGI = CurrentIGI;//pDM_DigTable->ForbiddenIGI = pDM_DigTable->CurIGValue;
-                       pDM_DigTable->LargeFAHit = 1;
-               }
-
-               if(pDM_DigTable->LargeFAHit >= 3)
-               {
-                       if((pDM_DigTable->ForbiddenIGI + 2) > pDM_DigTable->rx_gain_range_max)
-                               rx_gain_range_min = pDM_DigTable->rx_gain_range_max;
-                       else
-                               rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 2);
-                       pDM_DigTable->Recover_cnt = 1800;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Abnormally false alarm case: Recover_cnt = %d \n", pDM_DigTable->Recover_cnt));
-               }
-       }
-       else
-       {
-               if(pDM_DigTable->Recover_cnt != 0)
-               {
-                       pDM_DigTable->Recover_cnt --;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Normal Case: Recover_cnt = %d \n", pDM_DigTable->Recover_cnt));
-               }
-               else
-               {
-                       if(pDM_DigTable->LargeFAHit < 3)
-                       {
-                               if((pDM_DigTable->ForbiddenIGI - 2) < DIG_Dynamic_MIN) //DM_DIG_MIN)
-                               {
-                                       pDM_DigTable->ForbiddenIGI = DIG_Dynamic_MIN; //DM_DIG_MIN;
-                                       rx_gain_range_min = DIG_Dynamic_MIN; //DM_DIG_MIN;
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Normal Case: At Lower Bound\n"));
-                               }
-                               else
-                               {
-                                       pDM_DigTable->ForbiddenIGI -= 2;
-                                       rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 2);
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Normal Case: Approach Lower Bound\n"));
-                               }
-                       }
-                       else
-                       {
-                               pDM_DigTable->LargeFAHit = 0;
-                       }
-               }
-       }
-       
-       return rx_gain_range_min;
-
-}
-
-VOID
-odm_InbandNoiseCalculate (     
-       IN              PVOID           pDM_VOID
-       )
-{
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-       PDM_ODM_T                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       pDIG_T                          pDM_DigTable = &pDM_Odm->DM_DigTable;
-       u1Byte                          IGIBackup, TimeCnt = 0, ValidCnt = 0;
-       BOOLEAN                         bTimeout = TRUE;
-       s1Byte                          sNoise_A, sNoise_B;
-       s4Byte                          NoiseRpt_A = 0,NoiseRpt_B = 0;
-       u4Byte                          tmp = 0;
-       static  u1Byte          failCnt = 0;
-
-       if(!(pDM_Odm->SupportICType & (ODM_RTL8192E)))
-               return;
-
-       if(pDM_Odm->RFType == ODM_1T1R || *(pDM_Odm->pOnePathCCA) != ODM_CCA_2R)
-               return;
-
-       if(!pDM_DigTable->bNoiseEst)
-               return;
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_InbandNoiseEstimate()========>\n"));
-       
-       //1 Set initial gain.
-       IGIBackup = pDM_DigTable->CurIGValue;
-       pDM_DigTable->IGIOffset_A = 0;
-       pDM_DigTable->IGIOffset_B = 0;
-       ODM_Write_DIG(pDM_Odm, 0x24);
-
-       //1 Update idle time power report       
-       if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-               ODM_SetBBReg(pDM_Odm, ODM_REG_TX_ANT_CTRL_11N, BIT25, 0x0);
-
-       delay_ms(2);
-
-       //1 Get noise power level
-       while(1)
-       {
-               //2 Read Noise Floor Report
-               if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-                       tmp = ODM_GetBBReg(pDM_Odm, 0x8f8, bMaskLWord);
-
-               sNoise_A = (s1Byte)(tmp & 0xff);
-               sNoise_B = (s1Byte)((tmp & 0xff00)>>8);
-
-               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("sNoise_A = %d, sNoise_B = %d\n",sNoise_A, sNoise_B));
-
-               if((sNoise_A < 20 && sNoise_A >= -70) && (sNoise_B < 20 && sNoise_B >= -70))
-               {
-                       ValidCnt++;
-                       NoiseRpt_A += sNoise_A;
-                       NoiseRpt_B += sNoise_B;
-                       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("sNoise_A = %d, sNoise_B = %d\n",sNoise_A, sNoise_B));
-               }
-
-               TimeCnt++;
-               bTimeout = (TimeCnt >= 150)?TRUE:FALSE;
-               
-               if(ValidCnt == 20 || bTimeout)
-                       break;
-
-               delay_ms(2);
-               
-       }
-
-       //1 Keep idle time power report 
-       if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
-               ODM_SetBBReg(pDM_Odm, ODM_REG_TX_ANT_CTRL_11N, BIT25, 0x1);
-
-       //1 Recover IGI
-       ODM_Write_DIG(pDM_Odm, IGIBackup);
-       
-       //1 Calculate Noise Floor
-       if(ValidCnt != 0)
-       {
-               NoiseRpt_A  /= (ValidCnt<<1);
-               NoiseRpt_B  /= (ValidCnt<<1);
-       }
-       
-       if(bTimeout)
-       {
-               NoiseRpt_A = 0;
-               NoiseRpt_B = 0;
-
-               failCnt ++;
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("Noise estimate fail time = %d\n", failCnt));
-               
-               if(failCnt == 3)
-               {
-                       failCnt = 0;
-                       pDM_DigTable->bNoiseEst = FALSE;
-               }
-       }
-       else
-       {
-               NoiseRpt_A = -110 + 0x24 + NoiseRpt_A -6;
-               NoiseRpt_B = -110 + 0x24 + NoiseRpt_B -6;
-               pDM_DigTable->bNoiseEst = FALSE;
-               failCnt = 0;
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("NoiseRpt_A = %d, NoiseRpt_B = %d\n", NoiseRpt_A, NoiseRpt_B));
-       }
-
-       //1 Calculate IGI Offset
-       if(NoiseRpt_A > NoiseRpt_B)
-       {
-               pDM_DigTable->IGIOffset_A = NoiseRpt_A - NoiseRpt_B;
-               pDM_DigTable->IGIOffset_B = 0;
-       }
-       else
-       {
-               pDM_DigTable->IGIOffset_A = 0;
-               pDM_DigTable->IGIOffset_B = NoiseRpt_B - NoiseRpt_A;
-       }
-
-#endif
-       return;
-}
-
-//3============================================================
-//3 CCK Packet Detect Threshold
-//3============================================================
-
-VOID
-odm_PauseCCKPacketDetection(
-       IN              PVOID                                   pDM_VOID,
-       IN              ODM_Pause_CCKPD_TYPE    PauseType,
-       IN              u1Byte                                  CCKPDThreshold
-)
-{
-       PDM_ODM_T                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       pDIG_T                          pDM_DigTable = &pDM_Odm->DM_DigTable;
-       static  BOOLEAN         bPaused = FALSE;
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("odm_PauseCCKPacketDetection()=========>\n"));
-
-#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)    
-       if(*pDM_DigTable->pbP2pLinkInProgress)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("P2P in progress !!\n"));
-               return;
-       }
-#endif
-
-       if(!bPaused && (!(pDM_Odm->SupportAbility & ODM_BB_CCK_PD) || !(pDM_Odm->SupportAbility & ODM_BB_FA_CNT)))
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("Return: SupportAbility ODM_BB_CCK_PD or ODM_BB_FA_CNT is disabled\n"));
-               return;
-       }
-
-       switch(PauseType)
-       {
-               //1 Pause CCK Packet Detection Threshold
-               case ODM_PAUSE_CCKPD:
-                       //2 Disable DIG
-                       ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_ABILITY, pDM_Odm->SupportAbility & (~ODM_BB_CCK_PD));
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("Pause CCK packet detection threshold !!\n"));
-
-                       //2 Backup CCK Packet Detection Threshold value
-                       if(!bPaused)
-                       {
-                               pDM_DigTable->CCKPDBackup = pDM_DigTable->CurCCK_CCAThres;
-                               bPaused = TRUE;
-                       }
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("Backup CCK packet detection tgreshold  = %d\n", pDM_DigTable->CCKPDBackup));
-
-                       //2 Write new CCK Packet Detection Threshold value
-                       ODM_Write_CCK_CCA_Thres(pDM_Odm, CCKPDThreshold);
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("Write new CCK packet detection tgreshold = %d\n", CCKPDThreshold));
-                       break;
-                       
-               //1 Resume CCK Packet Detection Threshold
-               case ODM_RESUME_CCKPD:
-                       if(bPaused)
-                       {
-                               //2 Write backup CCK Packet Detection Threshold value
-                               ODM_Write_CCK_CCA_Thres(pDM_Odm, pDM_DigTable->CCKPDBackup);
-                               bPaused = FALSE;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("Write original CCK packet detection tgreshold = %d\n", pDM_DigTable->CCKPDBackup));
-
-                               //2 Enable CCK Packet Detection Threshold
-                               ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_ABILITY, pDM_Odm->SupportAbility | ODM_BB_CCK_PD);               
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("Resume CCK packet detection threshold  !!\n"));
-                       }
-                       break;
-                       
-               default:
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("Wrong  type !!\n"));
-                       break;
-       }       
-       return;
-}
-
-
-VOID 
-odm_CCKPacketDetectionThresh(
-       IN              PVOID           pDM_VOID
-       )
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       PFALSE_ALARM_STATISTICS         FalseAlmCnt = &(pDM_Odm->FalseAlmCnt);
-       u1Byte                                          CurCCK_CCAThres;
-
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-//modify by Guo.Mingzhi 2011-12-29
-       if (pDM_Odm->bDualMacSmartConcurrent == TRUE)
-//     if (pDM_Odm->bDualMacSmartConcurrent == FALSE)
-               return;
-       if(pDM_Odm->bBtHsOperation)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("odm_CCKPacketDetectionThresh() write 0xcd for BT HS mode!!\n"));
-               ODM_Write_CCK_CCA_Thres(pDM_Odm, 0xcd);
-               return;
-       }
-#endif
-
-       if((!(pDM_Odm->SupportAbility & ODM_BB_CCK_PD)) ||(!(pDM_Odm->SupportAbility & ODM_BB_FA_CNT)))
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("odm_CCKPacketDetectionThresh()  return==========\n"));
-               return;
-       }
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       if(pDM_Odm->ExtLNA)
-               return;
-#endif
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("odm_CCKPacketDetectionThresh()  ==========>\n"));
-
-       if(pDM_Odm->bLinked)
-       {
-               if(pDM_Odm->RSSI_Min > 25)
-                       CurCCK_CCAThres = 0xcd;
-               else if((pDM_Odm->RSSI_Min <= 25) && (pDM_Odm->RSSI_Min > 10))
-                       CurCCK_CCAThres = 0x83;
-               else
-               {
-                       if(FalseAlmCnt->Cnt_Cck_fail > 1000)
-                               CurCCK_CCAThres = 0x83;
-                       else
-                               CurCCK_CCAThres = 0x40;
-               }
-       }
-       else
-       {
-               if(FalseAlmCnt->Cnt_Cck_fail > 1000)
-                       CurCCK_CCAThres = 0x83;
-               else
-                       CurCCK_CCAThres = 0x40;
-       }
-       
-#if (RTL8192D_SUPPORT==1) 
-       if((pDM_Odm->SupportICType == ODM_RTL8192D) && (*pDM_Odm->pBandType == ODM_BAND_2_4G))
-               ODM_Write_CCK_CCA_Thres_92D(pDM_Odm, CurCCK_CCAThres);
-       else
-#endif
-               ODM_Write_CCK_CCA_Thres(pDM_Odm, CurCCK_CCAThres);
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_CCK_PD, ODM_DBG_LOUD, ("odm_CCKPacketDetectionThresh()  CurCCK_CCAThres = 0x%x\n",CurCCK_CCAThres));
-}
-
-VOID
-ODM_Write_CCK_CCA_Thres(
-       IN      PVOID                   pDM_VOID,
-       IN      u1Byte                  CurCCK_CCAThres
-       )
-{
-       PDM_ODM_T                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       pDIG_T                          pDM_DigTable = &pDM_Odm->DM_DigTable;
-
-       if(pDM_DigTable->CurCCK_CCAThres!=CurCCK_CCAThres)              //modify by Guo.Mingzhi 2012-01-03
-       {
-               ODM_Write1Byte(pDM_Odm, ODM_REG(CCK_CCA,pDM_Odm), CurCCK_CCAThres);
-       }
-       pDM_DigTable->PreCCK_CCAThres = pDM_DigTable->CurCCK_CCAThres;
-       pDM_DigTable->CurCCK_CCAThres = CurCCK_CCAThres;
-}
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-VOID
-odm_EnableEDCCA(
-       IN              PVOID                                   pDM_VOID
-)
-{
-
-       // This should be moved out of OUTSRC
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;
-       // Enable EDCCA. The value is suggested by SD3 Wilson.
-
-       //
-       // Revised for ASUS 11b/g performance issues, suggested by BB Neil, 2012.04.13.
-       //
-       if((pDM_Odm->SupportICType == ODM_RTL8723A)&&(IS_WIRELESS_MODE_G(pAdapter)))
-       {
-               //PlatformEFIOWrite1Byte(Adapter, rOFDM0_ECCAThreshold, 0x00);
-               ODM_Write1Byte(pDM_Odm,rOFDM0_ECCAThreshold,0x00);
-               ODM_Write1Byte(pDM_Odm,rOFDM0_ECCAThreshold+2,0xFD);
-               
-       }       
-       else
-       {
-               //PlatformEFIOWrite1Byte(Adapter, rOFDM0_ECCAThreshold, 0x03);
-               ODM_Write1Byte(pDM_Odm,rOFDM0_ECCAThreshold,0x03);
-               ODM_Write1Byte(pDM_Odm,rOFDM0_ECCAThreshold+2,0x00);
-       }       
-       
-       //PlatformEFIOWrite1Byte(Adapter, rOFDM0_ECCAThreshold+2, 0x00);
-}
-
-VOID
-odm_DisableEDCCA(
-       IN              PVOID                                   pDM_VOID
-)
-{      
-       // Disable EDCCA..
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       ODM_Write1Byte(pDM_Odm, rOFDM0_ECCAThreshold, 0x7f);
-       ODM_Write1Byte(pDM_Odm, rOFDM0_ECCAThreshold+2, 0x7f);
-}
-
-//
-// Description: According to initial gain value to determine to enable or disable EDCCA.
-//
-// Suggested by SD3 Wilson. Added by tynli. 2011.11.25.
-//
-VOID
-odm_DynamicEDCCA(
-       IN              PVOID                                   pDM_VOID
-)
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
-       u1Byte                  RegC50, RegC58;
-       BOOLEAN                 bEDCCAenable = FALSE;
-       
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))  
-       BOOLEAN                 bFwCurrentInPSMode=FALSE;       
-
-       pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_FW_PSMODE_STATUS, (pu1Byte)(&bFwCurrentInPSMode));   
-
-       // Disable EDCCA mode while under LPS mode, added by Roger, 2012.09.14.
-       if(bFwCurrentInPSMode)
-               return;
-#endif
-       //
-       // 2013/11/14 Ken According to BB team Jame's suggestion, we need to disable soft AP mode EDCCA.
-       // 2014/01/08 MH For Miracst AP mode test. We need to disable EDCCA. Otherwise, we may stop
-       // to send beacon in noisy environment or platform.
-       //
-       if(ACTING_AS_AP(pAdapter) || ACTING_AS_AP(GetFirstAPAdapter(pAdapter)))
-       //if(ACTING_AS_AP(pAdapter))
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("At least One Port as AP disable EDCCA\n"));
-               odm_DisableEDCCA(pDM_Odm);
-               if(pHalData->bPreEdccaEnable)
-                       odm_DisableEDCCA(pDM_Odm);
-               pHalData->bPreEdccaEnable = FALSE;
-               return;
-       }
-       
-       RegC50 = (u1Byte)ODM_GetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskByte0);
-       RegC58 = (u1Byte)ODM_GetBBReg(pDM_Odm, rOFDM0_XBAGCCore1, bMaskByte0);
-
-
-       if((RegC50 > 0x28 && RegC58 > 0x28) ||
-               ((pDM_Odm->SupportICType == ODM_RTL8723A && IS_WIRELESS_MODE_G(pAdapter) && RegC50>0x26)) ||
-               (pDM_Odm->SupportICType == ODM_RTL8188E && RegC50 > 0x28))
-       {
-               if(!pHalData->bPreEdccaEnable)
-               {
-                       odm_EnableEDCCA(pDM_Odm);
-                       pHalData->bPreEdccaEnable = TRUE;
-               }
-               
-       }
-       else if((RegC50 < 0x25 && RegC58 < 0x25) || (pDM_Odm->SupportICType == ODM_RTL8188E && RegC50 < 0x25))
-       {
-               if(pHalData->bPreEdccaEnable)
-               {
-                       odm_DisableEDCCA(pDM_Odm);
-                       pHalData->bPreEdccaEnable = FALSE;
-               }
-       }
-}
-
-// <20130108, Kordan> E.g., With LNA used, we make the Rx power smaller to have a better EVM. (Asked by Willis)
-VOID
-odm_RFEControl(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN  u8Byte              RSSIVal
-       )
-{
-       PADAPTER                Adapter = (PADAPTER)pDM_Odm->Adapter;
-    HAL_DATA_TYPE      *pHalData = GET_HAL_DATA(Adapter);
-       static u1Byte   TRSW_HighPwr = 0;
-        
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("===> odm_RFEControl, RSSI = %d, TRSW_HighPwr = 0x%X, pHalData->RFEType = %d\n",
-                        RSSIVal, TRSW_HighPwr, pHalData->RFEType ));
-
-    if (pHalData->RFEType == 3) {         
-               
-        pDM_Odm->RSSI_TRSW = RSSIVal;
-
-        if (pDM_Odm->RSSI_TRSW >= pDM_Odm->RSSI_TRSW_H) 
-               {                                
-            TRSW_HighPwr = 1; // Switch to
-            PHY_SetBBReg(Adapter, r_ANTSEL_SW_Jaguar, BIT1|BIT0, 0x1);  // Set ANTSW=1/ANTSWB=0  for SW control
-            PHY_SetBBReg(Adapter, r_ANTSEL_SW_Jaguar, BIT9|BIT8, 0x3);  // Set ANTSW=1/ANTSWB=0  for SW control
-            
-        } 
-               else if (pDM_Odm->RSSI_TRSW <= pDM_Odm->RSSI_TRSW_L) 
-        {        
-            TRSW_HighPwr = 0; // Switched back
-            PHY_SetBBReg(Adapter, r_ANTSEL_SW_Jaguar, BIT1|BIT0, 0x1);  // Set ANTSW=1/ANTSWB=0  for SW control
-            PHY_SetBBReg(Adapter, r_ANTSEL_SW_Jaguar, BIT9|BIT8, 0x0);  // Set ANTSW=1/ANTSWB=0  for SW control
-
-        }
-    }  
-
-       
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("(pDM_Odm->RSSI_TRSW_H, pDM_Odm->RSSI_TRSW_L) = (%d, %d)\n", pDM_Odm->RSSI_TRSW_H, pDM_Odm->RSSI_TRSW_L));           
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("(RSSIVal, RSSIVal, pDM_Odm->RSSI_TRSW_iso) = (%d, %d, %d)\n", 
-                                RSSIVal, pDM_Odm->RSSI_TRSW_iso, pDM_Odm->RSSI_TRSW));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("<=== odm_RFEControl, RSSI = %d, TRSW_HighPwr = 0x%X\n", RSSIVal, TRSW_HighPwr));    
-}
-
-VOID
-odm_MPT_DIGWorkItemCallback(
-    IN PVOID            pContext
-    )
-{
-       PADAPTER        Adapter = (PADAPTER)pContext;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
-
-       ODM_MPT_DIG(pDM_Odm);
-}
-
-VOID
-odm_MPT_DIGCallback(
-       PRT_TIMER               pTimer
-)
-{
-       PADAPTER                Adapter = (PADAPTER)pTimer->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-         PDM_ODM_T             pDM_Odm = &pHalData->DM_OutSrc;
-
-
-       #if DEV_BUS_TYPE==RT_PCI_INTERFACE
-               #if USE_WORKITEM
-                       PlatformScheduleWorkItem(&pDM_Odm->MPT_DIGWorkitem);
-               #else
-                       ODM_MPT_DIG(pDM_Odm);
-               #endif
-       #else
-               PlatformScheduleWorkItem(&pDM_Odm->MPT_DIGWorkitem);
-       #endif
-
-}
-
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-VOID
-odm_MPT_DIGCallback(
-       IN              PVOID                                   pDM_VOID
-)
-{
-       PDM_ODM_T                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-#if USE_WORKITEM
-       PlatformScheduleWorkItem(&pDM_Odm->MPT_DIGWorkitem);
-#else
-       ODM_MPT_DIG(pDM_Odm);
-#endif
-}
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE != ODM_CE)
-VOID
-odm_MPT_Write_DIG(
-       IN              PVOID                                   pDM_VOID,
-       IN              u1Byte                                  CurIGValue
-)
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       pDIG_T                                          pDM_DigTable = &pDM_Odm->DM_DigTable;
-
-       ODM_Write1Byte( pDM_Odm, ODM_REG(IGI_A,pDM_Odm), CurIGValue);
-
-       if(pDM_Odm->RFType > ODM_1T1R)
-               ODM_Write1Byte( pDM_Odm, ODM_REG(IGI_B,pDM_Odm), CurIGValue);
-
-       if((pDM_Odm->SupportICType & ODM_IC_11AC_SERIES) && (pDM_Odm->RFType > ODM_2T2R))
-       {
-               ODM_Write1Byte( pDM_Odm, ODM_REG(IGI_C,pDM_Odm), CurIGValue);
-               ODM_Write1Byte( pDM_Odm, ODM_REG(IGI_D,pDM_Odm), CurIGValue);   
-       }
-
-       pDM_DigTable->CurIGValue = CurIGValue;
-       
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("CurIGValue = 0x%x\n", CurIGValue));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("pDM_Odm->RFType = 0x%x\n", pDM_Odm->RFType));
-}
-
-VOID
-ODM_MPT_DIG(
-       IN              PVOID                                   pDM_VOID
-       )
-{
-       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
-       pDIG_T                                          pDM_DigTable = &pDM_Odm->DM_DigTable;
-       PFALSE_ALARM_STATISTICS         pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;
-       u1Byte                                          CurrentIGI = pDM_DigTable->CurIGValue;
-       u1Byte                                          DIG_Upper = 0x40, DIG_Lower = 0x20;
-       u4Byte                                          RXOK_cal;
-       u4Byte                                          RxPWDBAve_final;
-       u1Byte                                          IGI_A = 0x20, IGI_B = 0x20;
-       
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-       #if ODM_FIX_2G_DIG
-       IGI_A = 0x22;
-       IGI_B = 0x24;           
-       #endif
-       
-#else
-       if (!(pDM_Odm->priv->pshare->rf_ft_var.mp_specific && pDM_Odm->priv->pshare->mp_dig_on))
-               return;
-
-       if (*pDM_Odm->pBandType == ODM_BAND_5G)
-               DIG_Lower = 0x22;
-#endif
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("===> ODM_MPT_DIG, pBandType = %d\n", *pDM_Odm->pBandType));
-       
-#if (ODM_FIX_2G_DIG || (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)))
-       if (*pDM_Odm->pBandType == ODM_BAND_5G || (pDM_Odm->SupportICType & ODM_RTL8814A)) // for 5G or 8814
-#else
-       if (1) // for both 2G/5G
-#endif
-               {
-               odm_FalseAlarmCounterStatistics(pDM_Odm);
-
-               RXOK_cal = pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK + pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM;
-               RxPWDBAve_final = (RXOK_cal != 0)?pDM_Odm->RxPWDBAve/RXOK_cal:0;
-
-               pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK = 0;
-               pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM = 0;
-               pDM_Odm->RxPWDBAve = 0;
-               pDM_Odm->MPDIG_2G = FALSE;
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-               pDM_Odm->Times_2G = 0;
-#endif
-
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("RX OK = %d\n", RXOK_cal));
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("RSSI = %d\n", RxPWDBAve_final));
-       
-               if (RXOK_cal >= 70 && RxPWDBAve_final <= 40)
-               {
-                       if (CurrentIGI > 0x24)
-                               odm_MPT_Write_DIG(pDM_Odm, 0x24);
-               }
-               else
-               {
-                       if(pFalseAlmCnt->Cnt_all > 1000){
-                               CurrentIGI = CurrentIGI + 8;
-                       }
-                       else if(pFalseAlmCnt->Cnt_all > 200){
-                               CurrentIGI = CurrentIGI + 4;
-                       }
-                       else if (pFalseAlmCnt->Cnt_all > 50){
-                               CurrentIGI = CurrentIGI + 2;
-                       }
-                       else if (pFalseAlmCnt->Cnt_all < 2){
-                               CurrentIGI = CurrentIGI - 2;
-                       }
-                       
-                       if (CurrentIGI < DIG_Lower ){
-                               CurrentIGI = DIG_Lower;
-                       }
-
-                       if(CurrentIGI > DIG_Upper){
-                               CurrentIGI = DIG_Upper;
-                       }
-
-                       odm_MPT_Write_DIG(pDM_Odm, CurrentIGI);
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("DIG = 0x%x, Cnt_all = %d, Cnt_Ofdm_fail = %d, Cnt_Cck_fail = %d\n", 
-                               CurrentIGI, pFalseAlmCnt->Cnt_all, pFalseAlmCnt->Cnt_Ofdm_fail, pFalseAlmCnt->Cnt_Cck_fail));
-               }
-       }
-       else
-       {
-               if(pDM_Odm->MPDIG_2G == FALSE)
-               {
-                       if((pDM_Odm->SupportPlatform & ODM_WIN) && !(pDM_Odm->SupportICType & ODM_RTL8814A))
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("===> Fix IGI\n"));
-                               ODM_Write1Byte( pDM_Odm, ODM_REG(IGI_A,pDM_Odm), IGI_A);
-                               ODM_Write1Byte( pDM_Odm, ODM_REG(IGI_B,pDM_Odm), IGI_B);
-                               pDM_DigTable->CurIGValue = IGI_B;
-                       }
-                       else
-                               odm_MPT_Write_DIG(pDM_Odm, IGI_A);
-               }
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-               pDM_Odm->Times_2G++;
-
-               if (pDM_Odm->Times_2G == 3)
-#endif
-               {
-                       pDM_Odm->MPDIG_2G = TRUE;
-               }
-       }
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       if (pDM_Odm->SupportICType == ODM_RTL8812)
-               odm_RFEControl(pDM_Odm, RxPWDBAve_final);
-#endif
-
-       ODM_SetTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer, 700);
-}
-#endif
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DIG.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DIG.h
deleted file mode 100755 (executable)
index a112fdb..0000000
+++ /dev/null
@@ -1,406 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
\r
-#ifndef        __ODMDIG_H__\r
-#define    __ODMDIG_H__\r
-\r
-typedef struct _Dynamic_Initial_Gain_Threshold_\r
-{\r
-       BOOLEAN         bStopDIG;\r
-       BOOLEAN         bPSDInProgress;\r
-\r
-       u1Byte          Dig_Enable_Flag;\r
-       u1Byte          Dig_Ext_Port_Stage;\r
-       \r
-       int                     RssiLowThresh;\r
-       int                     RssiHighThresh;\r
-\r
-       u4Byte          FALowThresh;\r
-       u4Byte          FAHighThresh;\r
-\r
-       u1Byte          CurSTAConnectState;\r
-       u1Byte          PreSTAConnectState;\r
-       u1Byte          CurMultiSTAConnectState;\r
-\r
-       u1Byte          PreIGValue;\r
-       u1Byte          CurIGValue;\r
-       u1Byte          BackupIGValue;          //MP DIG\r
-       u1Byte          BT30_CurIGI;\r
-       u1Byte          IGIBackup;\r
-\r
-       s1Byte          BackoffVal;\r
-       s1Byte          BackoffVal_range_max;\r
-       s1Byte          BackoffVal_range_min;\r
-       u1Byte          rx_gain_range_max;\r
-       u1Byte          rx_gain_range_min;\r
-       u1Byte          Rssi_val_min;\r
-\r
-       u1Byte          PreCCK_CCAThres;\r
-       u1Byte          CurCCK_CCAThres;\r
-       u1Byte          PreCCKPDState;\r
-       u1Byte          CurCCKPDState;\r
-       u1Byte          CCKPDBackup;\r
-\r
-       u1Byte          LargeFAHit;\r
-       u1Byte          ForbiddenIGI;\r
-       u4Byte          Recover_cnt;\r
-\r
-       u1Byte          DIG_Dynamic_MIN_0;\r
-       u1Byte          DIG_Dynamic_MIN_1;\r
-       BOOLEAN         bMediaConnect_0;\r
-       BOOLEAN         bMediaConnect_1;\r
-\r
-       u4Byte          AntDiv_RSSI_max;\r
-       u4Byte          RSSI_max;\r
-\r
-       u1Byte          *pbP2pLinkInProgress;\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       BOOLEAN         bTpTarget;\r
-       BOOLEAN         bNoiseEst;\r
-       u4Byte          TpTrainTH_min;\r
-       u1Byte          IGIOffset_A;\r
-       u1Byte          IGIOffset_B;\r
-#endif\r
-}DIG_T,*pDIG_T;\r
-\r
-typedef struct _FALSE_ALARM_STATISTICS{\r
-       u4Byte  Cnt_Parity_Fail;\r
-       u4Byte  Cnt_Rate_Illegal;\r
-       u4Byte  Cnt_Crc8_fail;\r
-       u4Byte  Cnt_Mcs_fail;\r
-       u4Byte  Cnt_Ofdm_fail;\r
-       u4Byte  Cnt_Ofdm_fail_pre;      //For RTL8881A\r
-       u4Byte  Cnt_Cck_fail;\r
-       u4Byte  Cnt_all;\r
-       u4Byte  Cnt_Fast_Fsync;\r
-       u4Byte  Cnt_SB_Search_fail;\r
-       u4Byte  Cnt_OFDM_CCA;\r
-       u4Byte  Cnt_CCK_CCA;\r
-       u4Byte  Cnt_CCA_all;\r
-       u4Byte  Cnt_BW_USC;     //Gary\r
-       u4Byte  Cnt_BW_LSC;     //Gary\r
-}FALSE_ALARM_STATISTICS, *PFALSE_ALARM_STATISTICS;\r
-\r
-typedef enum tag_Dynamic_Init_Gain_Operation_Type_Definition\r
-{\r
-       DIG_TYPE_THRESH_HIGH    = 0,\r
-       DIG_TYPE_THRESH_LOW     = 1,\r
-       DIG_TYPE_BACKOFF                = 2,\r
-       DIG_TYPE_RX_GAIN_MIN    = 3,\r
-       DIG_TYPE_RX_GAIN_MAX    = 4,\r
-       DIG_TYPE_ENABLE                 = 5,\r
-       DIG_TYPE_DISABLE                = 6,    \r
-       DIG_OP_TYPE_MAX\r
-}DM_DIG_OP_E;\r
-\r
-typedef enum tag_ODM_PauseDIG_Type {\r
-       ODM_PAUSE_DIG                   =       BIT0,\r
-       ODM_RESUME_DIG                  =       BIT1\r
-} ODM_Pause_DIG_TYPE;\r
-\r
-typedef enum tag_ODM_PauseCCKPD_Type {\r
-       ODM_PAUSE_CCKPD         =       BIT0,\r
-       ODM_RESUME_CCKPD        =       BIT1\r
-} ODM_Pause_CCKPD_TYPE;\r
-\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-typedef enum _tag_ODM_REGULATION_Type {\r
-       REGULATION_FCC = 0,\r
-       REGULATION_MKK = 1,\r
-       REGULATION_ETSI = 2,\r
-       REGULATION_WW = 3,      \r
-       \r
-       MAX_REGULATION_NUM = 4\r
-} ODM_REGULATION_TYPE;\r
-#endif\r
-\r
-/*\r
-typedef enum tag_CCK_Packet_Detection_Threshold_Type_Definition\r
-{\r
-       CCK_PD_STAGE_LowRssi = 0,\r
-       CCK_PD_STAGE_HighRssi = 1,\r
-       CCK_PD_STAGE_MAX = 3,\r
-}DM_CCK_PDTH_E;\r
-\r
-typedef enum tag_DIG_EXT_PORT_ALGO_Definition\r
-{\r
-       DIG_EXT_PORT_STAGE_0 = 0,\r
-       DIG_EXT_PORT_STAGE_1 = 1,\r
-       DIG_EXT_PORT_STAGE_2 = 2,\r
-       DIG_EXT_PORT_STAGE_3 = 3,\r
-       DIG_EXT_PORT_STAGE_MAX = 4,\r
-}DM_DIG_EXT_PORT_ALG_E;\r
-\r
-typedef enum tag_DIG_Connect_Definition\r
-{\r
-       DIG_STA_DISCONNECT = 0, \r
-       DIG_STA_CONNECT = 1,\r
-       DIG_STA_BEFORE_CONNECT = 2,\r
-       DIG_MultiSTA_DISCONNECT = 3,\r
-       DIG_MultiSTA_CONNECT = 4,\r
-       DIG_CONNECT_MAX\r
-}DM_DIG_CONNECT_E;\r
-\r
-\r
-#define DM_MultiSTA_InitGainChangeNotify(Event) {DM_DigTable.CurMultiSTAConnectState = Event;}\r
-\r
-#define DM_MultiSTA_InitGainChangeNotify_CONNECT(_ADAPTER)     \\r
-       DM_MultiSTA_InitGainChangeNotify(DIG_MultiSTA_CONNECT)\r
-\r
-#define DM_MultiSTA_InitGainChangeNotify_DISCONNECT(_ADAPTER)  \\r
-       DM_MultiSTA_InitGainChangeNotify(DIG_MultiSTA_DISCONNECT)\r
-*/\r
-#define                DM_DIG_THRESH_HIGH                      40\r
-#define                DM_DIG_THRESH_LOW                       35\r
-\r
-#define                DM_FALSEALARM_THRESH_LOW        400\r
-#define                DM_FALSEALARM_THRESH_HIGH       1000\r
-\r
-#define                DM_DIG_MAX_NIC                          0x3e\r
-#define                DM_DIG_MIN_NIC                          0x1e //0x22//0x1c\r
-#define                DM_DIG_MAX_OF_MIN_NIC           0x3e\r
-\r
-#define                DM_DIG_MAX_AP                                   0x3e\r
-#define                DM_DIG_MIN_AP                                   0x1c\r
-#define                DM_DIG_MAX_OF_MIN                       0x2A    //0x32\r
-#define                DM_DIG_MIN_AP_DFS                               0x20\r
-\r
-#define                DM_DIG_MAX_NIC_HP                       0x46\r
-#define                DM_DIG_MIN_NIC_HP                               0x2e\r
-\r
-#define                DM_DIG_MAX_AP_HP                                0x42\r
-#define                DM_DIG_MIN_AP_HP                                0x30\r
-\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-#define                DM_DIG_MAX_AP_COVERAGR          0x26\r
-#define                DM_DIG_MIN_AP_COVERAGE          0x1c\r
-#define                DM_DIG_MAX_OF_MIN_COVERAGE      0x22\r
-\r
-#define                DM_DIG_TP_Target_TH0                    500\r
-#define                DM_DIG_TP_Target_TH1                    1000\r
-#define                DM_DIG_TP_Training_Period               10\r
-#endif\r
-\r
-//vivi 92c&92d has different definition, 20110504\r
-//this is for 92c\r
-#if (DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       #ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV\r
-       #define         DM_DIG_FA_TH0                           0x80//0x20\r
-       #else\r
-       #define         DM_DIG_FA_TH0                           0x200//0x20\r
-       #endif\r
-#else\r
-       #define         DM_DIG_FA_TH0                           0x200//0x20\r
-#endif\r
-\r
-#define                DM_DIG_FA_TH1                                   0x300\r
-#define                DM_DIG_FA_TH2                                   0x400\r
-//this is for 92d\r
-#define                DM_DIG_FA_TH0_92D                               0x100\r
-#define                DM_DIG_FA_TH1_92D                               0x400\r
-#define                DM_DIG_FA_TH2_92D                               0x600\r
-\r
-#define                DM_DIG_BACKOFF_MAX                      12\r
-#define                DM_DIG_BACKOFF_MIN                      -4\r
-#define                DM_DIG_BACKOFF_DEFAULT          10\r
-\r
-#define                DM_DIG_FA_TH0_LPS                               4 //-> 4 in lps\r
-#define                DM_DIG_FA_TH1_LPS                               15 //-> 15 lps\r
-#define                DM_DIG_FA_TH2_LPS                               30 //-> 30 lps\r
-#define                RSSI_OFFSET_DIG                         0x05\r
-\r
-VOID\r
-ODM_ChangeDynamicInitGainThresh(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN              u4Byte                                          DM_Type,\r
-       IN              u4Byte                                  DM_Value\r
-       );\r
-\r
-VOID\r
-odm_NHMCounterStatisticsInit(\r
-       IN              PVOID                                   pDM_VOID\r
-       );\r
-\r
-VOID\r
-odm_NHMCounterStatistics(\r
-       IN              PVOID                                   pDM_VOID\r
-       );\r
-\r
-VOID\r
-odm_NHMBBInit(\r
-       IN              PVOID                                   pDM_VOID\r
-);\r
-\r
-VOID\r
-odm_NHMBB(\r
-       IN              PVOID                                   pDM_VOID\r
-);\r
-\r
-VOID\r
-odm_NHMCounterStatisticsReset(\r
-       IN              PVOID                   pDM_VOID\r
-);\r
-\r
-VOID\r
-odm_GetNHMCounterStatistics(\r
-       IN              PVOID                   pDM_VOID\r
-);\r
-\r
-VOID\r
-odm_SearchPwdBLowerBound(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN              u1Byte                                  IGI_target\r
-);\r
-\r
-VOID \r
-odm_AdaptivityInit(\r
-       IN              PVOID                                   pDM_VOID\r
-       );\r
-\r
-VOID\r
-odm_Adaptivity(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN              u1Byte                                  IGI\r
-       );\r
-\r
-VOID\r
-ODM_Write_DIG(\r
-       IN              PVOID                                   pDM_VOID,       \r
-       IN              u1Byte                                  CurrentIGI\r
-       );\r
-\r
-VOID\r
-odm_PauseDIG(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN              ODM_Pause_DIG_TYPE              PauseType,\r
-       IN              u1Byte                                  IGIValue\r
-       );\r
-\r
-VOID\r
-odm_DIGInit(\r
-       IN              PVOID                                   pDM_VOID\r
-       );\r
-\r
-VOID   \r
-odm_DIG(\r
-       IN              PVOID                                   pDM_VOID\r
-       );\r
-\r
-VOID\r
-odm_DIGbyRSSI_LPS(\r
-       IN              PVOID                                   pDM_VOID\r
-       );\r
-\r
-VOID\r
-odm_DigForBtHsMode(\r
-       IN              PVOID                                   pDM_VOID\r
-       );\r
-\r
-VOID 
-odm_FalseAlarmCounterStatistics(
-       IN              PVOID                                   pDM_VOID\r
-       );
-\r
-VOID\r
-odm_FAThresholdCheck(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN              BOOLEAN                                 bDFSBand,\r
-       IN              BOOLEAN                                 bPerformance,\r
-       IN              u4Byte                                  RxTp,\r
-       IN              u4Byte                                  TxTp,\r
-       OUT             u4Byte*                                 dm_FA_thres\r
-       );\r
-
-u1Byte\r
-odm_ForbiddenIGICheck(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN              u1Byte                                  DIG_Dynamic_MIN,\r
-       IN              u1Byte                                  CurrentIGI\r
-       );\r
-\r
-VOID\r
-odm_InbandNoiseCalculate (     \r
-       IN              PVOID                                   pDM_VOID\r
-       );\r
-
-BOOLEAN 
-odm_DigAbort(
-       IN              PVOID                                   pDM_VOID\r
-       );
-
-VOID\r
-odm_PauseCCKPacketDetection(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN              ODM_Pause_CCKPD_TYPE    PauseType,\r
-       IN              u1Byte                                  CCKPDThreshold\r
-       );\r
-
-VOID 
-odm_CCKPacketDetectionThresh(
-       IN              PVOID                                   pDM_VOID\r
-       );
-
-VOID \r
-ODM_Write_CCK_CCA_Thres(\r
-       IN              PVOID                                   pDM_VOID, \r
-       IN              u1Byte                                  CurCCK_CCAThres\r
-       );\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-\r
-VOID\r
-odm_DisableEDCCA(\r
-       IN              PVOID                                   pDM_VOID\r
-);\r
-\r
-VOID\r
-odm_DynamicEDCCA(\r
-       IN              PVOID                                   pDM_VOID\r
-);\r
-\r
-VOID
-odm_MPT_DIGCallback(
-       PRT_TIMER                                               pTimer\r
-);
-
-VOID
-odm_MPT_DIGWorkItemCallback(
-    IN                 PVOID                                   pContext\r
-    );
-\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-VOID\r
-odm_MPT_DIGCallback(\r
-       IN              PVOID                                   pDM_VOID\r
-);\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE != ODM_CE)\r
-VOID\r
-ODM_MPT_DIG(\r
-       IN              PVOID                                   pDM_VOID\r
-);\r
-#endif\r
-\r
-\r
-#endif\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicBBPowerSaving.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicBBPowerSaving.c
deleted file mode 100755 (executable)
index 9ceb2fd..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-\r
-#include "odm_precomp.h"\r
-\r
-VOID \r
-odm_DynamicBBPowerSavingInit(
-       IN              PVOID                                   pDM_VOID\r
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       pPS_T   pDM_PSTable = &pDM_Odm->DM_PSTable;\r
-
-       pDM_PSTable->PreCCAState = CCA_MAX;
-       pDM_PSTable->CurCCAState = CCA_MAX;
-       pDM_PSTable->PreRFState = RF_MAX;
-       pDM_PSTable->CurRFState = RF_MAX;
-       pDM_PSTable->Rssi_val_min = 0;
-       pDM_PSTable->initialize = 0;
-}
-
-
-VOID
-odm_DynamicBBPowerSaving(
-       IN              PVOID                                   pDM_VOID\r
-       )
-{      
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-
-       if (pDM_Odm->SupportICType != ODM_RTL8723A)
-               return;
-       if(!(pDM_Odm->SupportAbility & ODM_BB_PWR_SAVE))
-               return;
-       if(!(pDM_Odm->SupportPlatform & (ODM_WIN|ODM_CE)))
-               return;
-       
-       //1 2.Power Saving for 92C
-       if((pDM_Odm->SupportICType == ODM_RTL8192C) &&(pDM_Odm->RFType == ODM_2T2R))
-       {
-               odm_1R_CCA(pDM_Odm);
-       }
-       
-       // 20100628 Joseph: Turn off BB power save for 88CE because it makesthroughput unstable.
-       // 20100831 Joseph: Turn ON BB power save again after modifying AGC delay from 900ns ot 600ns.
-       //1 3.Power Saving for 88C
-       else
-       {
-               ODM_RF_Saving(pDM_Odm, FALSE);
-       }
-#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       
-}
-
-VOID
-odm_1R_CCA(
-       IN              PVOID                                   pDM_VOID\r
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       pPS_T   pDM_PSTable = &pDM_Odm->DM_PSTable;\r
-
-       if(pDM_Odm->RSSI_Min!= 0xFF)
-       {
-                
-               if(pDM_PSTable->PreCCAState == CCA_2R)
-               {
-                       if(pDM_Odm->RSSI_Min >= 35)
-                               pDM_PSTable->CurCCAState = CCA_1R;
-                       else
-                               pDM_PSTable->CurCCAState = CCA_2R;
-                       
-               }
-               else{
-                       if(pDM_Odm->RSSI_Min <= 30)
-                               pDM_PSTable->CurCCAState = CCA_2R;
-                       else
-                               pDM_PSTable->CurCCAState = CCA_1R;
-               }
-       }
-       else{
-               pDM_PSTable->CurCCAState=CCA_MAX;
-       }
-       
-       if(pDM_PSTable->PreCCAState != pDM_PSTable->CurCCAState)
-       {
-               if(pDM_PSTable->CurCCAState == CCA_1R)
-               {
-                       if(  pDM_Odm->RFType ==ODM_2T2R )
-                       {
-                               ODM_SetBBReg(pDM_Odm, 0xc04  , bMaskByte0, 0x13);
-                               //PHY_SetBBReg(pAdapter, 0xe70, bMaskByte3, 0x20);
-                       }
-                       else
-                       {
-                               ODM_SetBBReg(pDM_Odm, 0xc04  , bMaskByte0, 0x23);
-                               //PHY_SetBBReg(pAdapter, 0xe70, 0x7fc00000, 0x10c); // Set RegE70[30:22] = 9b'100001100
-                       }
-               }
-               else
-               {
-                       ODM_SetBBReg(pDM_Odm, 0xc04  , bMaskByte0, 0x33);
-                       //PHY_SetBBReg(pAdapter,0xe70, bMaskByte3, 0x63);
-               }
-               pDM_PSTable->PreCCAState = pDM_PSTable->CurCCAState;
-       }
-}
-
-void
-ODM_RF_Saving(
-       IN              PVOID                                   pDM_VOID,\r
-       IN      u1Byte          bForceInNormal 
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
-       pPS_T   pDM_PSTable = &pDM_Odm->DM_PSTable;
-       u1Byte  Rssi_Up_bound = 30 ;
-       u1Byte  Rssi_Low_bound = 25;
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-       if(pDM_Odm->PatchID == 40 ) //RT_CID_819x_FUNAI_TV
-       {
-               Rssi_Up_bound = 50 ;
-               Rssi_Low_bound = 45;
-       }
-#endif\r
-       if(pDM_PSTable->initialize == 0){
-               
-               pDM_PSTable->Reg874 = (ODM_GetBBReg(pDM_Odm, 0x874, bMaskDWord)&0x1CC000)>>14;
-               pDM_PSTable->RegC70 = (ODM_GetBBReg(pDM_Odm, 0xc70, bMaskDWord)&BIT3)>>3;
-               pDM_PSTable->Reg85C = (ODM_GetBBReg(pDM_Odm, 0x85c, bMaskDWord)&0xFF000000)>>24;
-               pDM_PSTable->RegA74 = (ODM_GetBBReg(pDM_Odm, 0xa74, bMaskDWord)&0xF000)>>12;
-               //Reg818 = PHY_QueryBBReg(pAdapter, 0x818, bMaskDWord);
-               pDM_PSTable->initialize = 1;
-       }
-
-       if(!bForceInNormal)
-       {
-               if(pDM_Odm->RSSI_Min != 0xFF)
-               {                        
-                       if(pDM_PSTable->PreRFState == RF_Normal)
-                       {
-                               if(pDM_Odm->RSSI_Min >= Rssi_Up_bound)
-                                       pDM_PSTable->CurRFState = RF_Save;
-                               else
-                                       pDM_PSTable->CurRFState = RF_Normal;
-                       }
-                       else{
-                               if(pDM_Odm->RSSI_Min <= Rssi_Low_bound)
-                                       pDM_PSTable->CurRFState = RF_Normal;
-                               else
-                                       pDM_PSTable->CurRFState = RF_Save;
-                       }
-               }
-               else
-                       pDM_PSTable->CurRFState=RF_MAX;
-       }
-       else
-       {
-               pDM_PSTable->CurRFState = RF_Normal;
-       }
-       
-       if(pDM_PSTable->PreRFState != pDM_PSTable->CurRFState)
-       {
-               if(pDM_PSTable->CurRFState == RF_Save)
-               {
-                       // <tynli_note> 8723 RSSI report will be wrong. Set 0x874[5]=1 when enter BB power saving mode.
-                       // Suggested by SD3 Yu-Nan. 2011.01.20.
-                       if(pDM_Odm->SupportICType == ODM_RTL8723A)
-                       {
-                               ODM_SetBBReg(pDM_Odm, 0x874  , BIT5, 0x1); //Reg874[5]=1b'1
-                       }
-                       ODM_SetBBReg(pDM_Odm, 0x874  , 0x1C0000, 0x2); //Reg874[20:18]=3'b010
-                       ODM_SetBBReg(pDM_Odm, 0xc70, BIT3, 0); //RegC70[3]=1'b0
-                       ODM_SetBBReg(pDM_Odm, 0x85c, 0xFF000000, 0x63); //Reg85C[31:24]=0x63
-                       ODM_SetBBReg(pDM_Odm, 0x874, 0xC000, 0x2); //Reg874[15:14]=2'b10
-                       ODM_SetBBReg(pDM_Odm, 0xa74, 0xF000, 0x3); //RegA75[7:4]=0x3
-                       ODM_SetBBReg(pDM_Odm, 0x818, BIT28, 0x0); //Reg818[28]=1'b0
-                       ODM_SetBBReg(pDM_Odm, 0x818, BIT28, 0x1); //Reg818[28]=1'b1
-               }
-               else
-               {
-                       ODM_SetBBReg(pDM_Odm, 0x874  , 0x1CC000, pDM_PSTable->Reg874); 
-                       ODM_SetBBReg(pDM_Odm, 0xc70, BIT3, pDM_PSTable->RegC70); 
-                       ODM_SetBBReg(pDM_Odm, 0x85c, 0xFF000000, pDM_PSTable->Reg85C);
-                       ODM_SetBBReg(pDM_Odm, 0xa74, 0xF000, pDM_PSTable->RegA74); 
-                       ODM_SetBBReg(pDM_Odm,0x818, BIT28, 0x0);  
-
-                       if(pDM_Odm->SupportICType == ODM_RTL8723A)
-                       {
-                               ODM_SetBBReg(pDM_Odm,0x874  , BIT5, 0x0); //Reg874[5]=1b'0
-                       }
-               }
-               pDM_PSTable->PreRFState =pDM_PSTable->CurRFState;
-       }
-#endif 
-}
\ No newline at end of file
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicBBPowerSaving.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicBBPowerSaving.h
deleted file mode 100755 (executable)
index 2fdcd6e..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
\r
-#ifndef        __ODMDYNAMICBBPOWERSAVING_H__\r
-#define    __ODMDYNAMICBBPOWERSAVING_H__\r
-\r
-typedef struct _Dynamic_Power_Saving_\r
-{\r
-       u1Byte          PreCCAState;\r
-       u1Byte          CurCCAState;\r
-\r
-       u1Byte          PreRFState;\r
-       u1Byte          CurRFState;\r
-\r
-       int                 Rssi_val_min;\r
-       \r
-       u1Byte          initialize;\r
-       u4Byte          Reg874,RegC70,Reg85C,RegA74;\r
-       \r
-}PS_T,*pPS_T;\r
-\r
-#define dm_RF_Saving   ODM_RF_Saving\r
-\r
-void ODM_RF_Saving(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN      u1Byte          bForceInNormal \r
-       );\r
-\r
-VOID 
-odm_DynamicBBPowerSavingInit(
-       IN              PVOID                                   pDM_VOID\r
-       );
-
-VOID 
-odm_DynamicBBPowerSaving(
-       IN              PVOID                                   pDM_VOID\r
-       );
-
-VOID
-odm_1R_CCA(
-       IN              PVOID                                   pDM_VOID\r
-       );\r
-\r
-#endif
\ No newline at end of file
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicTxPower.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicTxPower.c
deleted file mode 100755 (executable)
index 7fbeb9f..0000000
+++ /dev/null
@@ -1,884 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-\r
-#include "odm_precomp.h"\r
-\r
-VOID \r
-odm_DynamicTxPowerInit(
-       IN              PVOID                                   pDM_VOID        \r
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       PADAPTER        Adapter = pDM_Odm->Adapter;
-       PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
-
-       #if DEV_BUS_TYPE==RT_USB_INTERFACE                                      
-       if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
-       {
-               odm_DynamicTxPowerSavePowerIndex(pDM_Odm);
-               pMgntInfo->bDynamicTxPowerEnable = TRUE;
-       }               
-       else    
-       #else
-       //so 92c pci do not need dynamic tx power? vivi check it later
-       if(IS_HARDWARE_TYPE_8192D(Adapter))
-               pMgntInfo->bDynamicTxPowerEnable = TRUE;
-       else
-               pMgntInfo->bDynamicTxPowerEnable = FALSE;
-       #endif
-       
-
-       pHalData->LastDTPLvl = TxHighPwrLevel_Normal;
-       pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-       PADAPTER        Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       pdmpriv->bDynamicTxPowerEnable = _FALSE;
-
-       #if (RTL8192C_SUPPORT==1) 
-       #ifdef CONFIG_USB_HCI
-
-       #ifdef CONFIG_INTEL_PROXIM
-       if((pHalData->BoardType == BOARD_USB_High_PA)||(Adapter->proximity.proxim_support==_TRUE))
-       #else
-       if(pHalData->BoardType == BOARD_USB_High_PA)
-       #endif
-
-       {
-               //odm_SavePowerIndex(Adapter);
-               odm_DynamicTxPowerSavePowerIndex(pDM_Odm);
-               pdmpriv->bDynamicTxPowerEnable = _TRUE;
-       }               
-       else    
-       #else
-               pdmpriv->bDynamicTxPowerEnable = _FALSE;
-       #endif
-       #endif
-       
-       pdmpriv->LastDTPLvl = TxHighPwrLevel_Normal;
-       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; 
-       
-#endif
-       
-}
-
-VOID
-odm_DynamicTxPowerSavePowerIndex(
-       IN              PVOID                                   pDM_VOID        \r
-       )
-{      
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
-#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))
-       u1Byte          index;
-       u4Byte          Power_Index_REG[6] = {0xc90, 0xc91, 0xc92, 0xc98, 0xc99, 0xc9a};\r
-       
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)   
-       PADAPTER        Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);      
-       for(index = 0; index< 6; index++)
-               pHalData->PowerIndex_backup[index] = PlatformEFIORead1Byte(Adapter, Power_Index_REG[index]);
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)  
-       PADAPTER        Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       for(index = 0; index< 6; index++)
-               pdmpriv->PowerIndex_backup[index] = rtw_read8(Adapter, Power_Index_REG[index]);
-#endif
-#endif
-}
-
-VOID
-odm_DynamicTxPowerRestorePowerIndex(
-       IN              PVOID                                   pDM_VOID\r
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))
-       u1Byte                  index;
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       u4Byte                  Power_Index_REG[6] = {0xc90, 0xc91, 0xc92, 0xc98, 0xc99, 0xc9a};
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       for(index = 0; index< 6; index++)
-               PlatformEFIOWrite1Byte(Adapter, Power_Index_REG[index], pHalData->PowerIndex_backup[index]);
-#elif(DM_ODM_SUPPORT_TYPE == ODM_CE)   
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       for(index = 0; index< 6; index++)
-               rtw_write8(Adapter, Power_Index_REG[index], pdmpriv->PowerIndex_backup[index]);
-#endif
-#endif
-}
-
-VOID
-odm_DynamicTxPowerWritePowerIndex(
-       IN              PVOID                                   pDM_VOID, \r
-       IN      u1Byte          Value)
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       u1Byte                  index;\r
-       u4Byte                  Power_Index_REG[6] = {0xc90, 0xc91, 0xc92, 0xc98, 0xc99, 0xc9a};
-       
-       for(index = 0; index< 6; index++)
-               //PlatformEFIOWrite1Byte(Adapter, Power_Index_REG[index], Value);
-               ODM_Write1Byte(pDM_Odm, Power_Index_REG[index], Value);
-
-}
-
-
-VOID 
-odm_DynamicTxPower(
-       IN              PVOID                                   pDM_VOID\r
-       )
-{
-       // 
-       // For AP/ADSL use prtl8192cd_priv
-       // For CE/NIC use PADAPTER
-       //
-       //PADAPTER              pAdapter = pDM_Odm->Adapter;
-//     prtl8192cd_priv priv            = pDM_Odm->priv;
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       if (!(pDM_Odm->SupportAbility & ODM_BB_DYNAMIC_TXPWR))
-               return;
-       //
-       // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate
-       // at the same time. In the stage2/3, we need to prive universal interface and merge all
-       // HW dynamic mechanism.
-       //
-       switch  (pDM_Odm->SupportPlatform)
-       {
-               case    ODM_WIN:
-               case    ODM_CE:
-                       odm_DynamicTxPowerNIC(pDM_Odm);
-                       break;  
-               case    ODM_AP:
-                       odm_DynamicTxPowerAP(pDM_Odm);
-                       break;          
-
-               case    ODM_ADSL:
-                       //odm_DIGAP(pDM_Odm);
-                       break;  
-       }
-
-       
-}
-
-
-VOID 
-odm_DynamicTxPowerNIC(
-       IN              PVOID                                   pDM_VOID\r
-       )
-{      
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       
-       if (!(pDM_Odm->SupportAbility & ODM_BB_DYNAMIC_TXPWR))\r
-               return;
-       
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-
-       if(pDM_Odm->SupportICType == ODM_RTL8192C)      
-       {
-               odm_DynamicTxPower_92C(pDM_Odm);
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8192D)
-       {
-               odm_DynamicTxPower_92D(pDM_Odm);
-       }
-       else if (pDM_Odm->SupportICType == ODM_RTL8821)
-       {
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
-               PADAPTER                Adapter  =  pDM_Odm->Adapter;
-               PMGNT_INFO              pMgntInfo = GetDefaultMgntInfo(Adapter);
-
-               if (pMgntInfo->RegRspPwr == 1)
-               {
-                       if(pDM_Odm->RSSI_Min > 60)
-                       {
-                               ODM_SetMACReg(pDM_Odm, ODM_REG_RESP_TX_11AC, BIT20|BIT19|BIT18, 1); // Resp TXAGC offset = -3dB
-
-                       }
-                       else if(pDM_Odm->RSSI_Min < 55)
-                       {
-                               ODM_SetMACReg(pDM_Odm, ODM_REG_RESP_TX_11AC, BIT20|BIT19|BIT18, 0); // Resp TXAGC offset = 0dB
-                       }
-               }
-#endif
-       }
-#endif 
-}
-
-VOID 
-odm_DynamicTxPowerAP(
-       IN              PVOID                                   pDM_VOID\r
-
-       )
-{      \r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
-
-//#if ((RTL8192C_SUPPORT==1) || (RTL8192D_SUPPORT==1) || (RTL8188E_SUPPORT==1) || (RTL8812E_SUPPORT==1))
-
-
-       prtl8192cd_priv priv            = pDM_Odm->priv;
-       s4Byte i;
-       s2Byte pwr_thd = TX_POWER_NEAR_FIELD_THRESH_AP;
-
-       if(!priv->pshare->rf_ft_var.tx_pwr_ctrl)
-               return;
-       
-#if ((RTL8812E_SUPPORT==1) || (RTL8881A_SUPPORT==1))
-       if (pDM_Odm->SupportICType & (ODM_RTL8812 | ODM_RTL8881A))
-               pwr_thd = TX_POWER_NEAR_FIELD_THRESH_8812;
-#endif
-
-#if defined(CONFIG_RTL_92D_SUPPORT) || defined(CONFIG_RTL_92C_SUPPORT)
-       if(CHIP_VER_92X_SERIES(priv))
-       {
-#ifdef HIGH_POWER_EXT_PA
-       if(pDM_Odm->ExtPA)
-               tx_power_control(priv);
-#endif         
-       }
-#endif 
-       /*
-        *      Check if station is near by to use lower tx power
-        */
-
-       if ((priv->up_time % 3) == 0 )  {
-               int disable_pwr_ctrl = ((pDM_Odm->FalseAlmCnt.Cnt_all > 1000 ) || ((pDM_Odm->FalseAlmCnt.Cnt_all > 300 ) && ((RTL_R8(0xc50) & 0x7f) >= 0x32))) ? 1 : 0;
-                       
-               for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++){
-                       PSTA_INFO_T pstat = pDM_Odm->pODM_StaInfo[i];
-                       if(IS_STA_VALID(pstat) ) {
-                                       if(disable_pwr_ctrl)
-                                               pstat->hp_level = 0;
-                                        else if ((pstat->hp_level == 0) && (pstat->rssi > pwr_thd))
-                                       pstat->hp_level = 1;
-                                               else if ((pstat->hp_level == 1) && (pstat->rssi < (pwr_thd-8)))
-                                       pstat->hp_level = 0;
-                       }
-               }
-
-#if defined(CONFIG_WLAN_HAL_8192EE)
-               if (GET_CHIP_VER(priv) == VERSION_8192E) {
-                       if( !disable_pwr_ctrl && (pDM_Odm->RSSI_Min != 0xff) ) {
-                               if(pDM_Odm->RSSI_Min > pwr_thd)
-                                       RRSR_power_control_11n(priv,  1 );
-                               else if(pDM_Odm->RSSI_Min < (pwr_thd-8))
-                                       RRSR_power_control_11n(priv,  0 );
-                       } else {
-                                       RRSR_power_control_11n(priv,  0 );
-                       }
-               }
-#endif                 
-       }
-//#endif       
-
-#endif 
-}
-
-
-VOID 
-odm_DynamicTxPower_92C(
-       IN              PVOID                                   pDM_VOID\r
-       )
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       PADAPTER Adapter = pDM_Odm->Adapter;
-       PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
-       s4Byte                          UndecoratedSmoothedPWDB;
-
-       // 2012/01/12 MH According to Luke's suggestion, only high power will support the feature.
-       if (pDM_Odm->ExtPA == FALSE)
-               return;
-
-       // STA not connected and AP not connected
-       if((!pMgntInfo->bMediaConnect) &&       
-               (pHalData->EntryMinUndecoratedSmoothedPWDB == 0))
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("Not connected to any \n"));
-               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-
-               //the LastDTPlvl should reset when disconnect, 
-               //otherwise the tx power level wouldn't change when disconnect and connect again.
-               // Maddest 20091220.
-                pHalData->LastDTPLvl=TxHighPwrLevel_Normal;
-               return;
-       }
-
-#if (INTEL_PROXIMITY_SUPPORT == 1)
-       // Intel set fixed tx power 
-       if(pMgntInfo->IntelProximityModeInfo.PowerOutput > 0)
-       {
-               switch(pMgntInfo->IntelProximityModeInfo.PowerOutput){
-                       case 1:
-                               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_100\n"));
-                               break;
-                       case 2:
-                               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_70;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_70\n"));
-                               break;
-                       case 3:
-                               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_50;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_50\n"));
-                               break;
-                       case 4:
-                               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_35;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_35\n"));
-                               break;
-                       case 5:
-                               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_15;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_15\n"));
-                               break;
-                       default:
-                               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_100\n"));
-                               break;
-               }               
-       }
-       else
-#endif         
-       { 
-               if(     (pMgntInfo->bDynamicTxPowerEnable != TRUE) ||
-                       (pHalData->DMFlag & HAL_DM_HIPWR_DISABLE) ||
-                       pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)
-               {
-                       pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-               }
-               else
-               {
-                       if(pMgntInfo->bMediaConnect)    // Default port
-                       {
-                               if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter))
-                               {
-                                       UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-                               }
-                               else
-                               {
-                                       UndecoratedSmoothedPWDB = pHalData->UndecoratedSmoothedPWDB;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-                               }
-                       }
-                       else // associated entry pwdb
-                       {       
-                               UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-                       }
-                               
-                       if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
-                       {
-                               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
-                       }
-                       else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
-                               (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
-                       {
-                               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
-                       }
-                       else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
-                       {
-                               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
-                       }
-               }
-       }
-       if( pHalData->DynamicTxHighPowerLvl != pHalData->LastDTPLvl )
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("PHY_SetTxPowerLevel8192C() Channel = %d \n" , pHalData->CurrentChannel));
-               PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
-               if(     (pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Normal) &&
-                       (pHalData->LastDTPLvl == TxHighPwrLevel_Level1 || pHalData->LastDTPLvl == TxHighPwrLevel_Level2)) //TxHighPwrLevel_Normal
-                       odm_DynamicTxPowerRestorePowerIndex(pDM_Odm);
-               else if(pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
-                       odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x14);
-               else if(pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
-                       odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x10);
-       }
-       pHalData->LastDTPLvl = pHalData->DynamicTxHighPowerLvl;
-
-       
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-
-       #if (RTL8192C_SUPPORT==1) 
-       PADAPTER Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       struct mlme_priv        *pmlmepriv = &(Adapter->mlmepriv);
-       struct mlme_ext_priv    *pmlmeext = &Adapter->mlmeextpriv;
-       int     UndecoratedSmoothedPWDB;
-
-       if(!pdmpriv->bDynamicTxPowerEnable)
-               return;
-
-#ifdef CONFIG_INTEL_PROXIM
-       if(Adapter->proximity.proxim_on== _TRUE){
-               struct proximity_priv *prox_priv=Adapter->proximity.proximity_priv;
-               // Intel set fixed tx power 
-               printk("\n %s  Adapter->proximity.proxim_on=%d prox_priv->proxim_modeinfo->power_output=%d \n",__FUNCTION__,Adapter->proximity.proxim_on,prox_priv->proxim_modeinfo->power_output);
-               if(prox_priv!=NULL){
-                       if(prox_priv->proxim_modeinfo->power_output> 0) 
-                       {
-                               switch(prox_priv->proxim_modeinfo->power_output)
-                               {
-                                       case 1:
-                                               pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_100;
-                                               printk("TxHighPwrLevel_100\n");
-                                               break;
-                                       case 2:
-                                               pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_70;
-                                               printk("TxHighPwrLevel_70\n");
-                                               break;
-                                       case 3:
-                                               pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_50;
-                                               printk("TxHighPwrLevel_50\n");
-                                               break;
-                                       case 4:
-                                               pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_35;
-                                               printk("TxHighPwrLevel_35\n");
-                                               break;
-                                       case 5:
-                                               pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_15;
-                                               printk("TxHighPwrLevel_15\n");
-                                               break;
-                                       default:
-                                               pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
-                                               printk("TxHighPwrLevel_100\n");
-                                               break;
-                               }               
-                       }
-               }
-       }
-       else
-#endif 
-       {
-               // STA not connected and AP not connected
-               if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE) &&   
-                       (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))
-               {
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("Not connected to any \n"));
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-
-                       //the LastDTPlvl should reset when disconnect, 
-                       //otherwise the tx power level wouldn't change when disconnect and connect again.
-                       // Maddest 20091220.
-                       pdmpriv->LastDTPLvl=TxHighPwrLevel_Normal;
-                       return;
-               }
-               
-               if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)       // Default port
-               {
-               #if 0
-                       //todo: AP Mode
-                       if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
-                              (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE))
-                       {
-                               UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-                               //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-                       }
-                       else
-                       {
-                               UndecoratedSmoothedPWDB = pdmpriv->UndecoratedSmoothedPWDB;
-                               //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-                       }
-               #else
-               UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;     
-               #endif
-               }
-               else // associated entry pwdb
-               {       
-                       UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-               }
-                       
-               if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
-               }
-               else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
-                       (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
-               }
-               else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
-               }
-       }
-       if( (pdmpriv->DynamicTxHighPowerLvl != pdmpriv->LastDTPLvl) )
-       {
-               PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
-               if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Normal) // HP1 -> Normal  or HP2 -> Normal
-                       odm_DynamicTxPowerRestorePowerIndex(pDM_Odm);
-               else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
-                       odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x14);
-               else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
-                       odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x10);
-       }
-       pdmpriv->LastDTPLvl = pdmpriv->DynamicTxHighPowerLvl;
-       #endif
-#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-}
-
-
-VOID 
-odm_DynamicTxPower_92D(
-       IN              PVOID                                   pDM_VOID\r
-       )
-{
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       PADAPTER Adapter = pDM_Odm->Adapter;
-       PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
-       s4Byte                          UndecoratedSmoothedPWDB;
-
-       PADAPTER        BuddyAdapter = Adapter->BuddyAdapter;
-       BOOLEAN         bGetValueFromBuddyAdapter = dm_DualMacGetParameterFromBuddyAdapter(Adapter);
-       u1Byte          HighPowerLvlBackForMac0 = TxHighPwrLevel_Level1;
-
-       // 2012/01/12 MH According to Luke's suggestion, only high power will support the feature.
-       if (pDM_Odm->ExtPA == FALSE)
-               return;
-
-       // If dynamic high power is disabled.
-       if( (pMgntInfo->bDynamicTxPowerEnable != TRUE) ||
-               (pHalData->DMFlag & HAL_DM_HIPWR_DISABLE) ||
-               pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)
-       {
-               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-               return;
-       }
-
-       // STA not connected and AP not connected
-       if((!pMgntInfo->bMediaConnect) &&       
-               (pHalData->EntryMinUndecoratedSmoothedPWDB == 0))
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("Not connected to any \n"));
-               pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-
-               //the LastDTPlvl should reset when disconnect, 
-               //otherwise the tx power level wouldn't change when disconnect and connect again.
-               // Maddest 20091220.
-                pHalData->LastDTPLvl=TxHighPwrLevel_Normal;
-               return;
-       }
-       
-       if(pMgntInfo->bMediaConnect)    // Default port
-       {
-               if(ACTING_AS_AP(Adapter) || pMgntInfo->mIbss)
-               {
-                       UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-               }
-               else
-               {
-                       UndecoratedSmoothedPWDB = pHalData->UndecoratedSmoothedPWDB;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-               }
-       }
-       else // associated entry pwdb
-       {       
-               UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-       }
-       
-       if(IS_HARDWARE_TYPE_8192D(Adapter) && GET_HAL_DATA(Adapter)->CurrentBandType == 1){
-               if(UndecoratedSmoothedPWDB >= 0x33)
-               {
-                       pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level2 (TxPwr=0x0)\n"));
-               }
-               else if((UndecoratedSmoothedPWDB <0x33) &&
-                       (UndecoratedSmoothedPWDB >= 0x2b) )
-               {
-                       pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
-               }
-               else if(UndecoratedSmoothedPWDB < 0x2b)
-               {
-                       pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Normal\n"));
-               }
-
-       }
-       else
-       
-       {
-               if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
-               {
-                       pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
-               }
-               else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
-                       (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
-               {
-                       pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
-               }
-               else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
-               {
-                       pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
-               }
-
-       }
-
-//sherry  delete flag 20110517
-       if(bGetValueFromBuddyAdapter)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 1 \n"));
-               if(Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP)
-               {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() change value \n"));
-                       HighPowerLvlBackForMac0 = pHalData->DynamicTxHighPowerLvl;
-                       pHalData->DynamicTxHighPowerLvl = Adapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP;
-                       PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
-                       pHalData->DynamicTxHighPowerLvl = HighPowerLvlBackForMac0;
-                       Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = FALSE;
-               }                                               
-       }
-
-       if( (pHalData->DynamicTxHighPowerLvl != pHalData->LastDTPLvl) )
-       {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("PHY_SetTxPowerLevel8192S() Channel = %d \n" , pHalData->CurrentChannel));
-                       if(Adapter->DualMacSmartConcurrent == TRUE)
-                       {
-                               if(BuddyAdapter == NULL)
-                               {
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter == NULL case \n"));
-                                       if(!Adapter->bSlaveOfDMSP)
-                                       {
-                                               PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
-                                       }
-                               }
-                               else
-                               {
-                                       if(pHalData->MacPhyMode92D == DUALMAC_SINGLEPHY)
-                                       {
-                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMSP \n"));
-                                               if(Adapter->bSlaveOfDMSP)
-                                               {
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() bslave case  \n"));
-                                                       BuddyAdapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = TRUE;
-                                                       BuddyAdapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP = pHalData->DynamicTxHighPowerLvl;
-                                               }
-                                               else
-                                               {
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() master case  \n"));                                  
-                                                       if(!bGetValueFromBuddyAdapter)
-                                                       {
-                                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 0 \n"));
-                                                               PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
-                                                       }
-                                               }
-                                       }
-                                       else
-                                       {
-                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMDP\n"));
-                                               PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
-                       }
-
-               }
-       pHalData->LastDTPLvl = pHalData->DynamicTxHighPowerLvl;
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-#if (RTL8192D_SUPPORT==1) 
-       PADAPTER Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       struct mlme_priv        *pmlmepriv = &(Adapter->mlmepriv);
-
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       DM_ODM_T                *podmpriv = &pHalData->odmpriv;
-       int     UndecoratedSmoothedPWDB;
-       #if (RTL8192D_EASY_SMART_CONCURRENT == 1)
-       PADAPTER        BuddyAdapter = Adapter->BuddyAdapter;
-       BOOLEAN         bGetValueFromBuddyAdapter = DualMacGetParameterFromBuddyAdapter(Adapter);
-       u8              HighPowerLvlBackForMac0 = TxHighPwrLevel_Level1;
-       #endif
-
-       // If dynamic high power is disabled.
-       if( (pdmpriv->bDynamicTxPowerEnable != _TRUE) ||
-               (!(podmpriv->SupportAbility& ODM_BB_DYNAMIC_TXPWR)) )
-       {
-               pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-               return;
-       }
-
-       // STA not connected and AP not connected
-       if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE) &&   
-               (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))
-       {
-               //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("Not connected to any \n"));
-               pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-               //the LastDTPlvl should reset when disconnect, 
-               //otherwise the tx power level wouldn't change when disconnect and connect again.
-               // Maddest 20091220.
-               pdmpriv->LastDTPLvl=TxHighPwrLevel_Normal;
-               return;
-       }
-               
-       if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)       // Default port
-       {
-       #if 0
-               //todo: AP Mode
-               if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
-              (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE))
-               {
-                       UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-               }
-               else
-               {
-                       UndecoratedSmoothedPWDB = pdmpriv->UndecoratedSmoothedPWDB;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-               }
-       #else
-       UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-       #endif
-       }
-       else // associated entry pwdb
-       {       
-               UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-               //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-       }
-#if TX_POWER_FOR_5G_BAND == 1
-       if(pHalData->CurrentBandType92D == BAND_ON_5G){
-               if(UndecoratedSmoothedPWDB >= 0x33)
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level2 (TxPwr=0x0)\n"));
-               }
-               else if((UndecoratedSmoothedPWDB <0x33) &&
-                       (UndecoratedSmoothedPWDB >= 0x2b) )
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
-               }
-               else if(UndecoratedSmoothedPWDB < 0x2b)
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Normal\n"));
-               }
-       }
-       else
-#endif
-       {
-               if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
-               }
-               else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
-                       (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
-               }
-               else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
-               }
-       }
-#if (RTL8192D_EASY_SMART_CONCURRENT == 1)
-       if(bGetValueFromBuddyAdapter)
-       {
-               //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 1 \n"));
-               if(Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP)
-               {
-                       //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() change value \n"));
-                       HighPowerLvlBackForMac0 = pHalData->DynamicTxHighPowerLvl;
-                       pHalData->DynamicTxHighPowerLvl = Adapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP;
-                       PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
-                       pHalData->DynamicTxHighPowerLvl = HighPowerLvlBackForMac0;
-                       Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = _FALSE;
-               }                                               
-       }
-#endif
-
-       if( (pdmpriv->DynamicTxHighPowerLvl != pdmpriv->LastDTPLvl) )
-       {
-               //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("PHY_SetTxPowerLevel8192S() Channel = %d \n" , pHalData->CurrentChannel));
-#if (RTL8192D_EASY_SMART_CONCURRENT == 1)
-               if(BuddyAdapter == NULL)
-               {
-                       //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter == NULL case \n"));
-                       if(!Adapter->bSlaveOfDMSP)
-                       {
-                               PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
-                       }
-               }
-               else
-               {
-                       if(pHalData->MacPhyMode92D == DUALMAC_SINGLEPHY)
-                       {
-                               //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMSP \n"));
-                               if(Adapter->bSlaveOfDMSP)
-                               {
-                                       //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() bslave case  \n"));
-                                       BuddyAdapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = _TRUE;
-                                       BuddyAdapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP = pHalData->DynamicTxHighPowerLvl;
-                               }
-                               else
-                               {
-                                       //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() master case  \n"));                                     
-                                       if(!bGetValueFromBuddyAdapter)
-                                       {
-                                               //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 0 \n"));
-                                               PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMDP\n"));
-                               PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
-                       }
-               }
-#else
-               PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
-#endif
-       }
-       pdmpriv->LastDTPLvl = pdmpriv->DynamicTxHighPowerLvl;
-#endif 
-#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-}
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicTxPower.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_DynamicTxPower.h
deleted file mode 100755 (executable)
index 67221e5..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
\r
-#ifndef        __ODMDYNAMICTXPOWER_H__\r
-#define    __ODMDYNAMICTXPOWER_H__\r
-\r
-#define                TX_POWER_NEAR_FIELD_THRESH_LVL2 74\r
-#define                TX_POWER_NEAR_FIELD_THRESH_LVL1 67\r
-#define                TX_POWER_NEAR_FIELD_THRESH_AP           0x3F\r
-#define                TX_POWER_NEAR_FIELD_THRESH_8812 60\r
-\r
-#define                TxHighPwrLevel_Normal           0       \r
-#define                TxHighPwrLevel_Level1           1\r
-#define                TxHighPwrLevel_Level2           2\r
-#define                TxHighPwrLevel_BT1                      3\r
-#define                TxHighPwrLevel_BT2                      4\r
-#define                TxHighPwrLevel_15                       5\r
-#define                TxHighPwrLevel_35                       6\r
-#define                TxHighPwrLevel_50                       7\r
-#define                TxHighPwrLevel_70                       8\r
-#define                TxHighPwrLevel_100                      9\r
-\r
-VOID 
-odm_DynamicTxPowerInit(
-       IN              PVOID                                   pDM_VOID\r
-       );
-
-VOID
-odm_DynamicTxPowerRestorePowerIndex(
-       IN              PVOID                                   pDM_VOID\r
-       );
-
-VOID 
-odm_DynamicTxPowerNIC(
-       IN              PVOID                                   pDM_VOID\r
-       );
-
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-VOID
-odm_DynamicTxPowerSavePowerIndex(
-       IN              PVOID                                   pDM_VOID\r
-       );
-
-VOID
-odm_DynamicTxPowerWritePowerIndex(
-       IN              PVOID                                   pDM_VOID, \r
-       IN      u1Byte          Value);
-
-VOID 
-odm_DynamicTxPower_92C(
-       IN              PVOID                                   pDM_VOID\r
-       );
-
-VOID 
-odm_DynamicTxPower_92D(
-       IN              PVOID                                   pDM_VOID\r
-       );
-#endif
-\r
-VOID 
-odm_DynamicTxPower(
-       IN              PVOID                                   pDM_VOID\r
-       );
-
-VOID 
-odm_DynamicTxPowerAP(
-       IN              PVOID                                   pDM_VOID\r
-       );\r
-\r
-#endif\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_EdcaTurboCheck.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_EdcaTurboCheck.c
deleted file mode 100755 (executable)
index 34bfd08..0000000
+++ /dev/null
@@ -1,1915 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-//#include "Mp_Precomp.h"\r
-#include "odm_precomp.h"\r
-\r
-VOID\r
-ODM_EdcaTurboInit(\r
-       IN      PVOID           pDM_VOID)\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if ((DM_ODM_SUPPORT_TYPE == ODM_AP)||(DM_ODM_SUPPORT_TYPE==ODM_ADSL))\r
-       odm_EdcaParaInit(pDM_Odm);\r
-#elif (DM_ODM_SUPPORT_TYPE==ODM_WIN)\r
-       PADAPTER        Adapter = NULL;\r
-       HAL_DATA_TYPE   *pHalData = NULL;\r
-\r
-       if(pDM_Odm->Adapter==NULL)      {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("EdcaTurboInit fail!!!\n"));\r
-               return;\r
-       }\r
-\r
-       Adapter=pDM_Odm->Adapter;\r
-       pHalData=GET_HAL_DATA(Adapter);\r
-\r
-       pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = FALSE;       \r
-       pDM_Odm->DM_EDCA_Table.bIsCurRDLState = FALSE;\r
-       pHalData->bIsAnyNonBEPkts = FALSE;\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE==ODM_CE)\r
-       PADAPTER        Adapter = pDM_Odm->Adapter;     \r
-       pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = FALSE;       \r
-       pDM_Odm->DM_EDCA_Table.bIsCurRDLState = FALSE;\r
-       Adapter->recvpriv.bIsAnyNonBEPkts =FALSE;\r
-\r
-#endif \r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Orginial VO PARAM: 0x%x\n",ODM_Read4Byte(pDM_Odm,ODM_EDCA_VO_PARAM)));\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Orginial VI PARAM: 0x%x\n",ODM_Read4Byte(pDM_Odm,ODM_EDCA_VI_PARAM)));\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Orginial BE PARAM: 0x%x\n",ODM_Read4Byte(pDM_Odm,ODM_EDCA_BE_PARAM)));\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Orginial BK PARAM: 0x%x\n",ODM_Read4Byte(pDM_Odm,ODM_EDCA_BK_PARAM)));\r
-\r
-       \r
-}      // ODM_InitEdcaTurbo\r
-\r
-VOID\r
-odm_EdcaTurboCheck(\r
-       IN      PVOID           pDM_VOID\r
-       )\r
-{\r
-       // \r
-       // For AP/ADSL use prtl8192cd_priv\r
-       // For CE/NIC use PADAPTER\r
-       //\r
-\r
-       //\r
-       // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate\r
-       // at the same time. In the stage2/3, we need to prive universal interface and merge all\r
-       // HW dynamic mechanism.\r
-       //\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("odm_EdcaTurboCheck========================>\n"));\r
-       \r
-       if(!(pDM_Odm->SupportAbility& ODM_MAC_EDCA_TURBO ))\r
-               return;\r
-\r
-       switch  (pDM_Odm->SupportPlatform)\r
-       {\r
-               case    ODM_WIN:\r
-\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_WIN)\r
-                       odm_EdcaTurboCheckMP(pDM_Odm);\r
-#endif\r
-                       break;\r
-\r
-               case    ODM_CE:\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_CE)\r
-                       odm_EdcaTurboCheckCE(pDM_Odm);\r
-#endif\r
-                       break;\r
-\r
-               case    ODM_AP:\r
-               case    ODM_ADSL:\r
-\r
-#if ((DM_ODM_SUPPORT_TYPE == ODM_AP)||(DM_ODM_SUPPORT_TYPE==ODM_ADSL))\r
-               odm_IotEngine(pDM_Odm);\r
-#endif\r
-                       break;  \r
-       }\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("<========================odm_EdcaTurboCheck\n"));\r
-\r
-}      // odm_CheckEdcaTurbo\r
-\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_CE)\r
-\r
-\r
-VOID\r
-odm_EdcaTurboCheckCE(\r
-       IN      PVOID           pDM_VOID\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER                       Adapter = pDM_Odm->Adapter;\r
-       u32     EDCA_BE_UL = 0x5ea42b;//Parameter suggested by Scott  //edca_setting_UL[pMgntInfo->IOTPeer];\r
-       u32     EDCA_BE_DL = 0x5ea42b;//Parameter suggested by Scott  //edca_setting_DL[pMgntInfo->IOTPeer];\r
-       u32     ICType=pDM_Odm->SupportICType;\r
-       u32     IOTPeer=0;\r
-       u8      WirelessMode=0xFF;                   //invalid value\r
-       u32     trafficIndex;\r
-       u32     edca_param;\r
-       u64     cur_tx_bytes = 0;\r
-       u64     cur_rx_bytes = 0;\r
-       u8      bbtchange = _FALSE;\r
-       u8      bBiasOnRx = _FALSE;\r
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);\r
-       struct dvobj_priv               *pdvobjpriv = adapter_to_dvobj(Adapter);\r
-       struct xmit_priv                *pxmitpriv = &(Adapter->xmitpriv);\r
-       struct recv_priv                *precvpriv = &(Adapter->recvpriv);\r
-       struct registry_priv    *pregpriv = &Adapter->registrypriv;\r
-       struct mlme_ext_priv    *pmlmeext = &(Adapter->mlmeextpriv);\r
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);\r
-\r
-       if(pDM_Odm->bLinked != _TRUE)\r
-       {\r
-               precvpriv->bIsAnyNonBEPkts = _FALSE;\r
-               return;\r
-       }\r
-\r
-       if ((pregpriv->wifi_spec == 1) )//|| (pmlmeinfo->HT_enable == 0))\r
-       {\r
-               precvpriv->bIsAnyNonBEPkts = _FALSE;\r
-               return;\r
-       }\r
-\r
-       if(pDM_Odm->pWirelessMode!=NULL)\r
-               WirelessMode=*(pDM_Odm->pWirelessMode);\r
-\r
-       IOTPeer = pmlmeinfo->assoc_AP_vendor;\r
-\r
-       if (IOTPeer >=  HT_IOT_PEER_MAX)\r
-       {\r
-               precvpriv->bIsAnyNonBEPkts = _FALSE;\r
-               return;\r
-       }\r
-\r
-       if(     (pDM_Odm->SupportICType == ODM_RTL8192C) ||\r
-               (pDM_Odm->SupportICType == ODM_RTL8723A) ||\r
-               (pDM_Odm->SupportICType == ODM_RTL8188E))\r
-       {\r
-               if((IOTPeer == HT_IOT_PEER_RALINK)||(IOTPeer == HT_IOT_PEER_ATHEROS))\r
-                       bBiasOnRx = _TRUE;\r
-       }\r
-\r
-       // Check if the status needs to be changed.\r
-       if((bbtchange) || (!precvpriv->bIsAnyNonBEPkts) )\r
-       {\r
-               cur_tx_bytes = pdvobjpriv->traffic_stat.cur_tx_bytes;\r
-               cur_rx_bytes = pdvobjpriv->traffic_stat.cur_rx_bytes;\r
-\r
-               //traffic, TX or RX\r
-               if(bBiasOnRx)\r
-               {\r
-                       if (cur_tx_bytes > (cur_rx_bytes << 2))\r
-                       { // Uplink TP is present.\r
-                               trafficIndex = UP_LINK; \r
-                       }\r
-                       else\r
-                       { // Balance TP is present.\r
-                               trafficIndex = DOWN_LINK;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if (cur_rx_bytes > (cur_tx_bytes << 2))\r
-                       { // Downlink TP is present.\r
-                               trafficIndex = DOWN_LINK;\r
-                       }\r
-                       else\r
-                       { // Balance TP is present.\r
-                               trafficIndex = UP_LINK;\r
-                       }\r
-               }\r
-\r
-               //if ((pDM_Odm->DM_EDCA_Table.prv_traffic_idx != trafficIndex) || (!pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA))\r
-               {\r
-                       if(ICType==ODM_RTL8192D)\r
-                       {      \r
-                               // Single PHY\r
-                               if(pDM_Odm->RFType==ODM_2T2R)\r
-                               {\r
-                                       EDCA_BE_UL = 0x60a42b;    //0x5ea42b;\r
-                                       EDCA_BE_DL = 0x60a42b;    //0x5ea42b;\r
-                               }\r
-                               else\r
-                               {\r
-                                       EDCA_BE_UL = 0x6ea42b;\r
-                                       EDCA_BE_DL = 0x6ea42b;\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               if(pDM_Odm->SupportInterface==ODM_ITRF_PCIE) {\r
-                                       if((ICType==ODM_RTL8192C)&&(pDM_Odm->RFType==ODM_2T2R)) {\r
-                                               EDCA_BE_UL = 0x60a42b;\r
-                                               EDCA_BE_DL = 0x60a42b;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               EDCA_BE_UL = 0x6ea42b;\r
-                                               EDCA_BE_DL = 0x6ea42b;\r
-                                       }\r
-                               }\r
-                       }\r
-               \r
-                       //92D txop can't be set to 0x3e for cisco1250\r
-                       if((ICType!=ODM_RTL8192D) && (IOTPeer== HT_IOT_PEER_CISCO) &&(WirelessMode==ODM_WM_N24G))\r
-                       {\r
-                               EDCA_BE_DL = edca_setting_DL[IOTPeer];\r
-                               EDCA_BE_UL = edca_setting_UL[IOTPeer];\r
-                       }\r
-                       //merge from 92s_92c_merge temp brunch v2445    20120215 \r
-                       else if((IOTPeer == HT_IOT_PEER_CISCO) &&((WirelessMode==ODM_WM_G)||(WirelessMode==(ODM_WM_B|ODM_WM_G))||(WirelessMode==ODM_WM_A)||(WirelessMode==ODM_WM_B)))\r
-                       {\r
-                               EDCA_BE_DL = edca_setting_DL_GMode[IOTPeer];\r
-                       }\r
-                       else if((IOTPeer== HT_IOT_PEER_AIRGO )&& ((WirelessMode==ODM_WM_G)||(WirelessMode==ODM_WM_A)))\r
-                       {\r
-                               EDCA_BE_DL = 0xa630;\r
-                       }\r
-                       else if(IOTPeer == HT_IOT_PEER_MARVELL)\r
-                       {\r
-                               EDCA_BE_DL = edca_setting_DL[IOTPeer];\r
-                               EDCA_BE_UL = edca_setting_UL[IOTPeer];\r
-                       }\r
-                       else if(IOTPeer == HT_IOT_PEER_ATHEROS)\r
-                       {\r
-                               // Set DL EDCA for Atheros peer to 0x3ea42b. Suggested by SD3 Wilson for ASUS TP issue. \r
-                               EDCA_BE_DL = edca_setting_DL[IOTPeer];\r
-                       }\r
-\r
-                       if((ICType==ODM_RTL8812)||(ICType==ODM_RTL8821)||(ICType==ODM_RTL8192E))           //add 8812AU/8812AE\r
-                       {\r
-                               EDCA_BE_UL = 0x5ea42b;\r
-                               EDCA_BE_DL = 0x5ea42b;\r
-\r
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("8812A: EDCA_BE_UL=0x%x EDCA_BE_DL =0x%x",EDCA_BE_UL,EDCA_BE_DL));\r
-                       }\r
-\r
-                       if (trafficIndex == DOWN_LINK)\r
-                               edca_param = EDCA_BE_DL;\r
-                       else\r
-                               edca_param = EDCA_BE_UL;\r
-\r
-                       rtw_write32(Adapter, REG_EDCA_BE_PARAM, edca_param);\r
-\r
-                       pDM_Odm->DM_EDCA_Table.prv_traffic_idx = trafficIndex;\r
-               }\r
-               \r
-               pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = _TRUE;\r
-       }\r
-       else\r
-       {\r
-               //\r
-               // Turn Off EDCA turbo here.\r
-               // Restore original EDCA according to the declaration of AP.\r
-               //\r
-                if(pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA)\r
-               {\r
-                       rtw_write32(Adapter, REG_EDCA_BE_PARAM, pHalData->AcParam_BE);\r
-                       pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = _FALSE;\r
-               }\r
-       }\r
-\r
-}\r
-\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE==ODM_WIN)\r
-VOID\r
-odm_EdcaTurboCheckMP(\r
-       IN      PVOID           pDM_VOID\r
-       )\r
-{\r
-\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER                       Adapter = pDM_Odm->Adapter;\r
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);\r
-\r
-       PADAPTER                        pDefaultAdapter = GetDefaultAdapter(Adapter);\r
-       PADAPTER                        pExtAdapter = GetFirstExtAdapter(Adapter);//NULL;\r
-       PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;\r
-       PSTA_QOS                        pStaQos = Adapter->MgntInfo.pStaQos;\r
-       //[Win7 Count Tx/Rx statistic for Extension Port] odm_CheckEdcaTurbo's Adapter is always Default. 2009.08.20, by Bohn\r
-       u8Byte                          Ext_curTxOkCnt = 0;\r
-       u8Byte                          Ext_curRxOkCnt = 0;     \r
-       //For future Win7  Enable Default Port to modify AMPDU size dynamically, 2009.08.20, Bohn.      \r
-       u1Byte TwoPortStatus = (u1Byte)TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE;\r
-\r
-       // Keep past Tx/Rx packet count for RT-to-RT EDCA turbo.\r
-       u8Byte                          curTxOkCnt = 0;\r
-       u8Byte                          curRxOkCnt = 0; \r
-       u4Byte                          EDCA_BE_UL = 0x5ea42b;//Parameter suggested by Scott  //edca_setting_UL[pMgntInfo->IOTPeer];\r
-       u4Byte                          EDCA_BE_DL = 0x5ea42b;//Parameter suggested by Scott  //edca_setting_DL[pMgntInfo->IOTPeer];\r
-       u4Byte                         EDCA_BE = 0x5ea42b;\r
-       u1Byte                         IOTPeer=0;\r
-       BOOLEAN                      *pbIsCurRDLState=NULL;\r
-       BOOLEAN                      bLastIsCurRDLState=FALSE;\r
-       BOOLEAN                          bBiasOnRx=FALSE;\r
-       BOOLEAN                         bEdcaTurboOn=FALSE;\r
-       u1Byte                          TxRate = 0xFF;\r
-       u8Byte                          value64;        \r
-\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("odm_EdcaTurboCheckMP========================>"));\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Orginial BE PARAM: 0x%x\n",ODM_Read4Byte(pDM_Odm,ODM_EDCA_BE_PARAM)));\r
-\r
-////===============================\r
-////list paramter for different platform\r
-////===============================\r
-       bLastIsCurRDLState=pDM_Odm->DM_EDCA_Table.bIsCurRDLState;\r
-       pbIsCurRDLState=&(pDM_Odm->DM_EDCA_Table.bIsCurRDLState);       \r
-\r
-       //2012/09/14 MH Add \r
-       if (pMgntInfo->NumNonBePkt > pMgntInfo->RegEdcaThresh && !Adapter->MgntInfo.bWiFiConfg)\r
-               pHalData->bIsAnyNonBEPkts = TRUE;\r
-\r
-       pMgntInfo->NumNonBePkt = 0;\r
-\r
-       // Caculate TX/RX TP:\r
-       //curTxOkCnt = Adapter->TxStats.NumTxBytesUnicast - pMgntInfo->lastTxOkCnt;\r
-       //curRxOkCnt = Adapter->RxStats.NumRxBytesUnicast - pMgntInfo->lastRxOkCnt;\r
-       curTxOkCnt = Adapter->TxStats.NumTxBytesUnicast - pDM_Odm->lastTxOkCnt;\r
-       curRxOkCnt = Adapter->RxStats.NumRxBytesUnicast - pDM_Odm->lastRxOkCnt;\r
-       pDM_Odm->lastTxOkCnt = Adapter->TxStats.NumTxBytesUnicast;\r
-       pDM_Odm->lastRxOkCnt = Adapter->RxStats.NumRxBytesUnicast;\r
-\r
-       if(pExtAdapter == NULL) \r
-               pExtAdapter = pDefaultAdapter;\r
-\r
-       Ext_curTxOkCnt = pExtAdapter->TxStats.NumTxBytesUnicast - pMgntInfo->Ext_lastTxOkCnt;\r
-       Ext_curRxOkCnt = pExtAdapter->RxStats.NumRxBytesUnicast - pMgntInfo->Ext_lastRxOkCnt;\r
-       GetTwoPortSharedResource(Adapter,TWO_PORT_SHARED_OBJECT__STATUS,NULL,&TwoPortStatus);\r
-       //For future Win7  Enable Default Port to modify AMPDU size dynamically, 2009.08.20, Bohn.\r
-       if(TwoPortStatus == TWO_PORT_STATUS__EXTENSION_ONLY)\r
-       {\r
-               curTxOkCnt = Ext_curTxOkCnt ;\r
-               curRxOkCnt = Ext_curRxOkCnt ;\r
-       }\r
-       //\r
-       IOTPeer=pMgntInfo->IOTPeer;\r
-       bBiasOnRx=(pMgntInfo->IOTAction & HT_IOT_ACT_EDCA_BIAS_ON_RX)?TRUE:FALSE;\r
-       bEdcaTurboOn=((!pHalData->bIsAnyNonBEPkts))?TRUE:FALSE;\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("bIsAnyNonBEPkts : 0x%lx  \n",pHalData->bIsAnyNonBEPkts));\r
-\r
-\r
-////===============================\r
-////check if edca turbo is disabled\r
-////===============================\r
-       if(odm_IsEdcaTurboDisable(pDM_Odm))\r
-       {\r
-               pHalData->bIsAnyNonBEPkts = FALSE;\r
-               pMgntInfo->lastTxOkCnt = Adapter->TxStats.NumTxBytesUnicast;\r
-               pMgntInfo->lastRxOkCnt = Adapter->RxStats.NumRxBytesUnicast;\r
-               pMgntInfo->Ext_lastTxOkCnt = pExtAdapter->TxStats.NumTxBytesUnicast;\r
-               pMgntInfo->Ext_lastRxOkCnt = pExtAdapter->RxStats.NumRxBytesUnicast;\r
-\r
-       }\r
-\r
-////===============================\r
-////remove iot case out\r
-////===============================\r
-       ODM_EdcaParaSelByIot(pDM_Odm, &EDCA_BE_UL, &EDCA_BE_DL);\r
-\r
-\r
-////===============================\r
-////Check if the status needs to be changed.\r
-////===============================\r
-       if(bEdcaTurboOn)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("bEdcaTurboOn : 0x%x bBiasOnRx : 0x%x\n",bEdcaTurboOn,bBiasOnRx));\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("curTxOkCnt : 0x%lx \n",curTxOkCnt));\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("curRxOkCnt : 0x%lx \n",curRxOkCnt));\r
-               if(bBiasOnRx)\r
-                       odm_EdcaChooseTrafficIdx(pDM_Odm,curTxOkCnt, curRxOkCnt,   TRUE,  pbIsCurRDLState);\r
-               else\r
-                       odm_EdcaChooseTrafficIdx(pDM_Odm,curTxOkCnt, curRxOkCnt,   FALSE,  pbIsCurRDLState);\r
-\r
-//modify by Guo.Mingzhi 2011-12-29\r
-                       EDCA_BE=((*pbIsCurRDLState)==TRUE)?EDCA_BE_DL:EDCA_BE_UL;\r
-                       if(IS_HARDWARE_TYPE_8821U(Adapter))\r
-                       {\r
-                               if(pMgntInfo->RegTxDutyEnable)\r
-                               {\r
-                                       //2013.01.23 LukeLee: debug for 8811AU thermal issue (reduce Tx duty cycle)\r
-                                       if(!pMgntInfo->ForcedDataRate) //auto rate\r
-                                       {\r
-                                               if(pDM_Odm->TxRate != 0xFF)\r
-                                                       TxRate = Adapter->HalFunc.GetHwRateFromMRateHandler(pDM_Odm->TxRate); \r
-                                       }\r
-                                       else //force rate\r
-                                       {\r
-                                               TxRate = (u1Byte) pMgntInfo->ForcedDataRate;\r
-                                       }\r
-\r
-                                       value64 = (curRxOkCnt<<2);\r
-                                       if(curTxOkCnt < value64) //Downlink\r
-                                               ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
-                                       else //Uplink\r
-                                       {\r
-                                               //DbgPrint("pDM_Odm->RFCalibrateInfo.ThermalValue = 0x%X\n", pDM_Odm->RFCalibrateInfo.ThermalValue);\r
-                                               //if(pDM_Odm->RFCalibrateInfo.ThermalValue < pHalData->EEPROMThermalMeter)\r
-                                               if((pDM_Odm->RFCalibrateInfo.ThermalValue < 0x2c) || (*pDM_Odm->pBandType == BAND_ON_2_4G))\r
-                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
-                                               else\r
-                                               {\r
-                                                       switch (TxRate)\r
-                                                       {\r
-                                                               case MGN_VHT1SS_MCS6:\r
-                                                               case MGN_VHT1SS_MCS5:\r
-                                                               case MGN_MCS6:\r
-                                                               case MGN_MCS5:\r
-                                                               case MGN_48M:\r
-                                                               case MGN_54M:\r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0x1ea42b);\r
-                                                               break;\r
-                                                               case MGN_VHT1SS_MCS4:\r
-                                                               case MGN_MCS4:\r
-                                                               case MGN_36M:\r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0xa42b);\r
-                                                               break;\r
-                                                               case MGN_VHT1SS_MCS3:\r
-                                                               case MGN_MCS3:\r
-                                                               case MGN_24M:\r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0xa47f);\r
-                                                               break;\r
-                                                               case MGN_VHT1SS_MCS2:\r
-                                                               case MGN_MCS2:\r
-                                                               case MGN_18M:\r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0xa57f);\r
-                                                               break;\r
-                                                               case MGN_VHT1SS_MCS1:\r
-                                                               case MGN_MCS1:\r
-                                                               case MGN_9M:\r
-                                                               case MGN_12M:\r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0xa77f);\r
-                                                               break;\r
-                                                               case MGN_VHT1SS_MCS0:\r
-                                                               case MGN_MCS0:\r
-                                                               case MGN_6M:\r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0xa87f);\r
-                                                               break;\r
-                                                               default:\r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
-                                                               break;\r
-                                                       }\r
-                                               }\r
-                                       }                               \r
-                               }\r
-                               else\r
-                               {\r
-                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
-                               }\r
-\r
-                       }\r
-                       else if (IS_HARDWARE_TYPE_8812AU(Adapter)){\r
-                               if(pMgntInfo->RegTxDutyEnable)\r
-                               {\r
-                                       //2013.07.26 Wilson: debug for 8812AU thermal issue (reduce Tx duty cycle)\r
-                                       // it;s the same issue as 8811AU\r
-                                       if(!pMgntInfo->ForcedDataRate) //auto rate\r
-                                       {\r
-                                               if(pDM_Odm->TxRate != 0xFF)\r
-                                                       TxRate = Adapter->HalFunc.GetHwRateFromMRateHandler(pDM_Odm->TxRate); \r
-                                       }\r
-                                       else //force rate\r
-                                       {\r
-                                               TxRate = (u1Byte) pMgntInfo->ForcedDataRate;\r
-                                       }\r
-\r
-                                       value64 = (curRxOkCnt<<2);\r
-                                       if(curTxOkCnt < value64) //Downlink\r
-                                               ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
-                                       else //Uplink\r
-                                       {\r
-                                               //DbgPrint("pDM_Odm->RFCalibrateInfo.ThermalValue = 0x%X\n", pDM_Odm->RFCalibrateInfo.ThermalValue);\r
-                                               //if(pDM_Odm->RFCalibrateInfo.ThermalValue < pHalData->EEPROMThermalMeter)\r
-                                               if((pDM_Odm->RFCalibrateInfo.ThermalValue < 0x2c) || (*pDM_Odm->pBandType == BAND_ON_2_4G))\r
-                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
-                                               else\r
-                                               {\r
-                                                       switch (TxRate)\r
-                                                       {\r
-                                                               case MGN_VHT2SS_MCS9:\r
-                                                               case MGN_VHT1SS_MCS9:                                                                   \r
-                                                               case MGN_VHT1SS_MCS8:\r
-                                                               case MGN_MCS15:\r
-                                                               case MGN_MCS7:                                                                  \r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0x1ea44f);                                                     \r
-                                                               case MGN_VHT2SS_MCS8:\r
-                                                               case MGN_VHT1SS_MCS7:\r
-                                                               case MGN_MCS14:\r
-                                                               case MGN_MCS6:\r
-                                                               case MGN_54M:                                                                   \r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0xa44f);\r
-                                                               case MGN_VHT2SS_MCS7:\r
-                                                               case MGN_VHT2SS_MCS6:\r
-                                                               case MGN_VHT1SS_MCS6:\r
-                                                               case MGN_VHT1SS_MCS5:\r
-                                                               case MGN_MCS13:\r
-                                                               case MGN_MCS5:\r
-                                                               case MGN_48M:\r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0xa630);\r
-                                                               break;\r
-                                                               case MGN_VHT2SS_MCS5:\r
-                                                               case MGN_VHT2SS_MCS4:\r
-                                                               case MGN_VHT1SS_MCS4:\r
-                                                               case MGN_VHT1SS_MCS3:   \r
-                                                               case MGN_MCS12:\r
-                                                               case MGN_MCS4:  \r
-                                                               case MGN_MCS3:  \r
-                                                               case MGN_36M:\r
-                                                               case MGN_24M:   \r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0xa730);\r
-                                                               break;\r
-                                                               case MGN_VHT2SS_MCS3:\r
-                                                               case MGN_VHT2SS_MCS2:\r
-                                                               case MGN_VHT2SS_MCS1:\r
-                                                               case MGN_VHT1SS_MCS2:\r
-                                                               case MGN_VHT1SS_MCS1:   \r
-                                                               case MGN_MCS11: \r
-                                                               case MGN_MCS10: \r
-                                                               case MGN_MCS9:          \r
-                                                               case MGN_MCS2:  \r
-                                                               case MGN_MCS1:\r
-                                                               case MGN_18M:   \r
-                                                               case MGN_12M:\r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0xa830);\r
-                                                               break;\r
-                                                               case MGN_VHT2SS_MCS0:\r
-                                                               case MGN_VHT1SS_MCS0:\r
-                                                               case MGN_MCS0:  \r
-                                                               case MGN_MCS8:\r
-                                                               case MGN_9M:    \r
-                                                               case MGN_6M:\r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,0xa87f);\r
-                                                               break;\r
-                                                               default:\r
-                                                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
-                                                               break;\r
-                                                       }\r
-                                               }\r
-                                       }                               \r
-                               }\r
-                               else\r
-                               {\r
-                                       ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
-                               }\r
-                       }\r
-                       else\r
-                               ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
-\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("EDCA Turbo on: EDCA_BE:0x%lx\n",EDCA_BE));\r
-\r
-               pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = TRUE;\r
-               \r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("EDCA_BE_DL : 0x%lx  EDCA_BE_UL : 0x%lx  EDCA_BE : 0x%lx  \n",EDCA_BE_DL,EDCA_BE_UL,EDCA_BE));\r
-\r
-       }\r
-       else\r
-       {\r
-               // Turn Off EDCA turbo here.\r
-               // Restore original EDCA according to the declaration of AP.\r
-                if(pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA)\r
-               {\r
-                       Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AC_PARAM, GET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pStaQos->WMMParamEle, AC0_BE) );\r
-\r
-                       pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = FALSE;\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Restore EDCA BE: 0x%lx  \n",pDM_Odm->WMMEDCA_BE));\r
-\r
-               }\r
-       }\r
-\r
-}\r
-\r
-\r
-//check if edca turbo is disabled\r
-BOOLEAN\r
-odm_IsEdcaTurboDisable(\r
-       IN      PVOID           pDM_VOID\r
-)\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER                       Adapter = pDM_Odm->Adapter;\r
-       PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;\r
-       u4Byte                          IOTPeer=pMgntInfo->IOTPeer;\r
-\r
-       if(pDM_Odm->bBtDisableEdcaTurbo)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD, ("EdcaTurboDisable for BT!!\n"));\r
-               return TRUE;\r
-       }\r
-\r
-       if((!(pDM_Odm->SupportAbility& ODM_MAC_EDCA_TURBO ))||\r
-               (pDM_Odm->bWIFITest)||\r
-               (IOTPeer>= HT_IOT_PEER_MAX))\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD, ("EdcaTurboDisable\n"));\r
-               return TRUE;\r
-       }\r
-\r
-\r
-       // 1. We do not turn on EDCA turbo mode for some AP that has IOT issue\r
-       // 2. User may disable EDCA Turbo mode with OID settings.\r
-       if(pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_EDCA_TURBO){\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD, ("IOTAction:EdcaTurboDisable\n"));\r
-               return  TRUE;\r
-               }\r
-               \r
-       return  FALSE;\r
-       \r
-\r
-}\r
-\r
-//add iot case here: for MP/CE\r
-VOID \r
-ODM_EdcaParaSelByIot(\r
-       IN      PVOID           pDM_VOID,\r
-       OUT     u4Byte          *EDCA_BE_UL,\r
-       OUT u4Byte              *EDCA_BE_DL\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER                       Adapter = pDM_Odm->Adapter;\r
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);\r
-       u4Byte                         IOTPeer=0;\r
-       u4Byte                         ICType=pDM_Odm->SupportICType;\r
-       u1Byte                         WirelessMode=0xFF;                   //invalid value\r
-       u4Byte                          RFType=pDM_Odm->RFType;\r
-         u4Byte                         IOTPeerSubType=0;\r
-\r
-       PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;\r
-       u1Byte                          TwoPortStatus = (u1Byte)TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE;\r
-\r
-       if(pDM_Odm->pWirelessMode!=NULL)\r
-               WirelessMode=*(pDM_Odm->pWirelessMode);\r
-               \r
-///////////////////////////////////////////////////////////\r
-////list paramter for different platform\r
-\r
-       IOTPeer=pMgntInfo->IOTPeer;\r
-       IOTPeerSubType=pMgntInfo->IOTPeerSubtype;\r
-       GetTwoPortSharedResource(Adapter,TWO_PORT_SHARED_OBJECT__STATUS,NULL,&TwoPortStatus);\r
-\r
-\r
-       if(ICType==ODM_RTL8192D)\r
-       {      \r
-               // Single PHY\r
-               if(pDM_Odm->RFType==ODM_2T2R)\r
-               {\r
-                       (*EDCA_BE_UL) = 0x60a42b;    //0x5ea42b;\r
-                       (*EDCA_BE_DL) = 0x60a42b;    //0x5ea42b;\r
-\r
-               }\r
-               else\r
-               {\r
-                       (*EDCA_BE_UL) = 0x6ea42b;\r
-                       (*EDCA_BE_DL) = 0x6ea42b;\r
-               }\r
-\r
-       }\r
-////============================\r
-/// IOT case for MP\r
-////============================       \r
-\r
-       else\r
-       {\r
-\r
-               if(pDM_Odm->SupportInterface==ODM_ITRF_PCIE){\r
-                       if((ICType==ODM_RTL8192C)&&(pDM_Odm->RFType==ODM_2T2R))                 {\r
-                               (*EDCA_BE_UL) = 0x60a42b;\r
-                               (*EDCA_BE_DL) = 0x60a42b;\r
-                       }\r
-                       else\r
-                       {\r
-                               (*EDCA_BE_UL) = 0x6ea42b;\r
-                               (*EDCA_BE_DL) = 0x6ea42b;\r
-                       }\r
-               }\r
-       }\r
\r
-       if(TwoPortStatus == TWO_PORT_STATUS__EXTENSION_ONLY)\r
-       {\r
-               (*EDCA_BE_UL) = 0x5ea42b;//Parameter suggested by Scott  //edca_setting_UL[ExtAdapter->MgntInfo.IOTPeer];\r
-               (*EDCA_BE_DL) = 0x5ea42b;//Parameter suggested by Scott  //edca_setting_DL[ExtAdapter->MgntInfo.IOTPeer];\r
-       }\r
-     \r
-       #if (INTEL_PROXIMITY_SUPPORT == 1)\r
-       if(pMgntInfo->IntelClassModeInfo.bEnableCA == TRUE)\r
-       {\r
-               (*EDCA_BE_UL) = (*EDCA_BE_DL) = 0xa44f;\r
-       }\r
-       else\r
-       #endif          \r
-       {\r
-               if((pMgntInfo->IOTAction & (HT_IOT_ACT_FORCED_ENABLE_BE_TXOP|HT_IOT_ACT_AMSDU_ENABLE)))\r
-               {// To check whether we shall force turn on TXOP configuration.\r
-                       if(!((*EDCA_BE_UL) & 0xffff0000))\r
-                               (*EDCA_BE_UL) |= 0x005e0000; // Force TxOP limit to 0x005e for UL.\r
-                       if(!((*EDCA_BE_DL) & 0xffff0000))\r
-                               (*EDCA_BE_DL) |= 0x005e0000; // Force TxOP limit to 0x005e for DL.\r
-               }\r
-               \r
-               //92D txop can't be set to 0x3e for cisco1250\r
-               if((ICType!=ODM_RTL8192D) && (IOTPeer== HT_IOT_PEER_CISCO) &&(WirelessMode==ODM_WM_N24G))\r
-               {\r
-                       (*EDCA_BE_DL) = edca_setting_DL[IOTPeer];\r
-                       (*EDCA_BE_UL) = edca_setting_UL[IOTPeer];\r
-               }\r
-               //merge from 92s_92c_merge temp brunch v2445    20120215 \r
-               else if((IOTPeer == HT_IOT_PEER_CISCO) &&((WirelessMode==ODM_WM_G)||(WirelessMode==(ODM_WM_B|ODM_WM_G))||(WirelessMode==ODM_WM_A)||(WirelessMode==ODM_WM_B)))\r
-               {\r
-                       (*EDCA_BE_DL) = edca_setting_DL_GMode[IOTPeer];\r
-               }\r
-               else if((IOTPeer== HT_IOT_PEER_AIRGO )&& ((WirelessMode==ODM_WM_G)||(WirelessMode==ODM_WM_A)))\r
-               {\r
-                       (*EDCA_BE_DL) = 0xa630;\r
-               }\r
-\r
-               else if(IOTPeer == HT_IOT_PEER_MARVELL)\r
-               {\r
-                       (*EDCA_BE_DL) = edca_setting_DL[IOTPeer];\r
-                       (*EDCA_BE_UL) = edca_setting_UL[IOTPeer];\r
-               }\r
-               else if(IOTPeer == HT_IOT_PEER_ATHEROS)\r
-               {\r
-                       // Set DL EDCA for Atheros peer to 0x3ea42b. Suggested by SD3 Wilson for ASUS TP issue. \r
-                       if(WirelessMode==ODM_WM_G)\r
-                               (*EDCA_BE_DL) = edca_setting_DL_GMode[IOTPeer];\r
-                       else\r
-                       (*EDCA_BE_DL) = edca_setting_DL[IOTPeer];\r
-                       \r
-                       if(ICType == ODM_RTL8821)\r
-                                (*EDCA_BE_DL) = 0x5ea630;\r
-                       \r
-               }\r
-       }\r
-\r
-       if((ICType == ODM_RTL8192D)&&(IOTPeerSubType == HT_IOT_PEER_LINKSYS_E4200_V1)&&((WirelessMode==ODM_WM_N5G)))\r
-       {\r
-               (*EDCA_BE_DL) = 0x432b;\r
-               (*EDCA_BE_UL) = 0x432b;\r
-       }               \r
-\r
-\r
-\r
-       if((ICType==ODM_RTL8812)||(ICType==ODM_RTL8192E))           //add 8812AU/8812AE\r
-       {\r
-               (*EDCA_BE_UL) = 0x5ea42b;\r
-               (*EDCA_BE_DL) = 0x5ea42b;\r
-\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("8812A: EDCA_BE_UL=0x%lx EDCA_BE_DL =0x%lx",(*EDCA_BE_UL),(*EDCA_BE_DL)));\r
-       }\r
-\r
-       // Revised for Atheros DIR-655 IOT issue to improve down link TP, added by Roger, 2013.03.22.\r
-       if((ICType == ODM_RTL8723A) && (IOTPeerSubType== HT_IOT_PEER_ATHEROS_DIR655) && \r
-               (pMgntInfo->dot11CurrentChannelNumber == 6))\r
-       {\r
-               (*EDCA_BE_DL) = 0xa92b;\r
-       }\r
-\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Special: EDCA_BE_UL=0x%lx EDCA_BE_DL =0x%lx",(*EDCA_BE_UL),(*EDCA_BE_DL)));\r
-\r
-}\r
-\r
-\r
-VOID\r
-odm_EdcaChooseTrafficIdx( \r
-       IN      PVOID           pDM_VOID,\r
-       IN      u8Byte                          cur_tx_bytes,  \r
-       IN      u8Byte                          cur_rx_bytes, \r
-       IN      BOOLEAN                 bBiasOnRx,\r
-       OUT BOOLEAN             *pbIsCurRDLState\r
-       )\r
-{      \r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       \r
-       if(bBiasOnRx)\r
-       {\r
-         \r
-               if(cur_tx_bytes>(cur_rx_bytes*4))\r
-               {\r
-                       *pbIsCurRDLState=FALSE;\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Uplink Traffic\n "));\r
-\r
-               }\r
-               else\r
-               {\r
-                       *pbIsCurRDLState=TRUE;\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Balance Traffic\n"));\r
-\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if(cur_rx_bytes>(cur_tx_bytes*4))\r
-               {\r
-                       *pbIsCurRDLState=TRUE;\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Downlink        Traffic\n"));\r
-\r
-               }\r
-               else\r
-               {\r
-                       *pbIsCurRDLState=FALSE;\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Balance Traffic\n"));\r
-               }\r
-       }\r
-\r
-       return ;\r
-}\r
-\r
-#endif\r
-\r
-#if((DM_ODM_SUPPORT_TYPE==ODM_AP)||(DM_ODM_SUPPORT_TYPE==ODM_ADSL))\r
-\r
-void odm_EdcaParaInit(\r
-       IN      PVOID           pDM_VOID\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       prtl8192cd_priv priv            = pDM_Odm->priv;\r
-       int   mode=priv->pmib->dot11BssType.net_work_type;\r
-       \r
-       static unsigned int slot_time, sifs_time;\r
-       struct ParaRecord EDCA[4];\r
-\r
-        memset(EDCA, 0, 4*sizeof(struct ParaRecord));\r
-\r
-       sifs_time = 10;\r
-       slot_time = 20;\r
-\r
-       if (mode & (ODM_WM_N24G|ODM_WM_N5G))\r
-               sifs_time = 16;\r
-\r
-       if (mode & (ODM_WM_N24G|ODM_WM_N5G| ODM_WM_G|ODM_WM_A))\r
-               slot_time = 9;\r
-\r
-\r
-#ifdef RTK_AC_SUPPORT //for 11ac logo,  edit aifs time for cca test cases\r
-       if(AC_SIGMA_MODE != AC_SIGMA_NONE)\r
-               sifs_time = 10; \r
-#endif\r
-\r
-\r
-#if((defined(RTL_MANUAL_EDCA))&&(DM_ODM_SUPPORT_TYPE==ODM_AP))\r
-        if( priv->pmib->dot11QosEntry.ManualEDCA ) {\r
-                if( OPMODE & WIFI_AP_STATE )\r
-                        memcpy(EDCA, priv->pmib->dot11QosEntry.AP_manualEDCA, 4*sizeof(struct ParaRecord));\r
-                else\r
-                        memcpy(EDCA, priv->pmib->dot11QosEntry.STA_manualEDCA, 4*sizeof(struct ParaRecord));\r
-\r
-               #ifdef WIFI_WMM\r
-               if (QOS_ENABLE)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM, (EDCA[VI].TXOPlimit<< 16) | (EDCA[VI].ECWmax<< 12) | (EDCA[VI].ECWmin<< 8) | (sifs_time + EDCA[VI].AIFSN* slot_time));\r
-               else\r
-               #endif\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM, (EDCA[BE].TXOPlimit<< 16) | (EDCA[BE].ECWmax<< 12) | (EDCA[BE].ECWmin<< 8) | (sifs_time + EDCA[VI].AIFSN* slot_time));\r
-\r
-       }else\r
-       #endif //RTL_MANUAL_EDCA\r
-       {\r
-\r
-                if(OPMODE & WIFI_AP_STATE)\r
-                {\r
-                       memcpy(EDCA, rtl_ap_EDCA, 2*sizeof(struct ParaRecord));\r
-\r
-                       if(mode & (ODM_WM_A|ODM_WM_G|ODM_WM_N24G|ODM_WM_N5G))\r
-                               memcpy(&EDCA[VI], &rtl_ap_EDCA[VI_AG], 2*sizeof(struct ParaRecord));\r
-                       else\r
-                               memcpy(&EDCA[VI], &rtl_ap_EDCA[VI], 2*sizeof(struct ParaRecord));\r
-                }\r
-                else\r
-                {\r
-                       memcpy(EDCA, rtl_sta_EDCA, 2*sizeof(struct ParaRecord));\r
-\r
-                       if(mode & (ODM_WM_A|ODM_WM_G|ODM_WM_N24G|ODM_WM_N5G))\r
-                               memcpy(&EDCA[VI], &rtl_sta_EDCA[VI_AG], 2*sizeof(struct ParaRecord));\r
-                       else\r
-                               memcpy(&EDCA[VI], &rtl_sta_EDCA[VI], 2*sizeof(struct ParaRecord));\r
-                }\r
-                \r
-       #ifdef WIFI_WMM\r
-               if (QOS_ENABLE)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM, (EDCA[VI].TXOPlimit<< 16) | (EDCA[VI].ECWmax<< 12) | (EDCA[VI].ECWmin<< 8) | (sifs_time + EDCA[VI].AIFSN* slot_time));\r
-               else\r
-       #endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM,  (EDCA[BK].ECWmax<< 12) | (EDCA[BK].ECWmin<< 8) | (sifs_time + EDCA[VI].AIFSN* slot_time));\r
-#elif(DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM,  (EDCA[BK].ECWmax<< 12) | (EDCA[BK].ECWmin<< 8) | (sifs_time + 2* slot_time));\r
-#endif\r
-                       \r
-\r
-       }\r
-\r
-       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VO_PARAM, (EDCA[VO].TXOPlimit<< 16) | (EDCA[VO].ECWmax<< 12) | (EDCA[VO].ECWmin<< 8) | (sifs_time + EDCA[VO].AIFSN* slot_time));\r
-       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM,  (EDCA[BE].TXOPlimit<< 16) | (EDCA[BE].ECWmax<< 12) | (EDCA[BE].ECWmin<< 8) | (sifs_time + EDCA[BE].AIFSN* slot_time));\r
-       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BK_PARAM, (EDCA[BK].TXOPlimit<< 16) | (EDCA[BK].ECWmax<< 12) | (EDCA[BK].ECWmin<< 8) | (sifs_time + EDCA[BK].AIFSN* slot_time));\r
-\r
-#if defined(RTK_AC_SUPPORT) && defined(RTL_MANUAL_EDCA) //for 11ac logo,  make BK worse to seperate with BE.\r
-       if((AC_SIGMA_MODE != AC_SIGMA_NONE) && (priv->pmib->dot11QosEntry.ManualEDCA))\r
-       {\r
-               ODM_Write4Byte(pDM_Odm, ODM_EDCA_BK_PARAM, (EDCA[BK].TXOPlimit<< 16) | (EDCA[BK].ECWmax<< 12) | (EDCA[BK].ECWmin<< 8) | 0xa4 );\r
-       }\r
-#endif\r
-\r
-//     ODM_Write1Byte(pDM_Odm,ACMHWCTRL, 0x00);\r
-\r
-       priv->pshare->iot_mode_enable = 0;\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-       if (priv->pshare->rf_ft_var.wifi_beq_iot)\r
-               priv->pshare->iot_mode_VI_exist = 0;\r
-       \r
-       #ifdef WMM_VIBE_PRI\r
-       priv->pshare->iot_mode_BE_exist = 0;\r
-       #endif\r
-       \r
-#ifdef WMM_BEBK_PRI\r
-       priv->pshare->iot_mode_BK_exist = 0;\r
-#endif\r
-       \r
-       #ifdef LOW_TP_TXOP\r
-       priv->pshare->BE_cwmax_enhance = 0;\r
-       #endif\r
-\r
-#elif (DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-      priv->pshare->iot_mode_BE_exist = 0;   \r
-#endif\r
-       priv->pshare->iot_mode_VO_exist = 0;\r
-}\r
-\r
-BOOLEAN\r
-ODM_ChooseIotMainSTA(\r
-       IN      PVOID           pDM_VOID,\r
-       IN      PSTA_INFO_T             pstat\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       prtl8192cd_priv priv = pDM_Odm->priv;\r
-       BOOLEAN         bhighTP_found_pstat=FALSE;\r
-       \r
-       if ((GET_ROOT(priv)->up_time % 2) == 0) {\r
-               unsigned int tx_2s_avg = 0;\r
-               unsigned int rx_2s_avg = 0;\r
-               int i=0, aggReady=0;\r
-               unsigned long total_sum = (priv->pshare->current_tx_bytes+priv->pshare->current_rx_bytes);\r
-               int assoc_num = GET_ROOT(priv)->assoc_num;\r
-#ifdef MBSSID\r
-               if (GET_ROOT(priv)->pmib->miscEntry.vap_enable){\r
-                       for (i=0; i<RTL8192CD_NUM_VWLAN; ++i)\r
-                               assoc_num += GET_ROOT(priv)->pvap_priv[i]-> assoc_num;\r
-               }\r
-#endif \r
-#ifdef UNIVERSAL_REPEATER\r
-               if (IS_DRV_OPEN(GET_VXD_PRIV(GET_ROOT(priv))))\r
-                       assoc_num += GET_VXD_PRIV(GET_ROOT(priv))-> assoc_num;\r
-#endif\r
-#ifdef WDS\r
-                if(GET_ROOT(priv)->pmib->dot11WdsInfo.wdsEnabled)\r
-                       assoc_num ++;\r
-#endif\r
-\r
-\r
-               pstat->current_tx_bytes += pstat->tx_byte_cnt;\r
-               pstat->current_rx_bytes += pstat->rx_byte_cnt;\r
-\r
-               if (total_sum != 0) {\r
-                       if (total_sum <= 1000000) {\r
-                       tx_2s_avg = (unsigned int)((pstat->current_tx_bytes*100) / total_sum);\r
-                       rx_2s_avg = (unsigned int)((pstat->current_rx_bytes*100) / total_sum);\r
-                       } else {\r
-                               tx_2s_avg = (unsigned int)(pstat->current_tx_bytes / (total_sum / 100));\r
-                               rx_2s_avg = (unsigned int)(pstat->current_rx_bytes / (total_sum / 100));\r
-                       }\r
-\r
-               }\r
-\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-               if (pstat->ht_cap_len) {\r
-                       if ((tx_2s_avg + rx_2s_avg) >=25 ) {//50//\r
-\r
-                                       priv->pshare->highTP_found_pstat = pstat;\r
-                                       bhighTP_found_pstat=TRUE;\r
-                               }\r
-                       }\r
-#elif(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-               for(i=0; i<8; i++)\r
-                       aggReady += (pstat->ADDBA_ready[i]);\r
-\r
-               if ((pstat->ht_cap_len && (\r
-#ifdef SUPPORT_TX_AMSDU                        \r
-                       AMSDU_ENABLE || \r
-#endif                 \r
-                       aggReady)) || (pstat->IOTPeer==HT_IOT_PEER_INTEL))\r
-               {\r
-                       if ((assoc_num==1) || (tx_2s_avg + rx_2s_avg >= 25)) {\r
-                               priv->pshare->highTP_found_pstat = pstat;\r
-                       }\r
-                       \r
-               #ifdef CLIENT_MODE\r
-                       if (OPMODE & WIFI_STATION_STATE) {\r
-                               if ((tx_2s_avg + rx_2s_avg) >= 20)\r
-                                       priv->pshare->highTP_found_pstat = pstat;\r
-               }\r
-               #endif                          \r
-       }\r
-#endif\r
-       } \r
-       else {\r
-               pstat->current_tx_bytes = pstat->tx_byte_cnt;\r
-               pstat->current_rx_bytes = pstat->rx_byte_cnt;\r
-       }\r
-\r
-       return bhighTP_found_pstat;\r
-}\r
-\r
-\r
-#ifdef WIFI_WMM\r
-VOID\r
-ODM_IotEdcaSwitch(\r
-       IN      PVOID           pDM_VOID,\r
-       IN      unsigned char           enable\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       prtl8192cd_priv priv    = pDM_Odm->priv;\r
-       int   mode=priv->pmib->dot11BssType.net_work_type;\r
-       unsigned int slot_time = 20, sifs_time = 10, BE_TXOP = 47, VI_TXOP = 94;\r
-       unsigned int vi_cw_max = 4, vi_cw_min = 3, vi_aifs;\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-       u32 be_edca, vi_edca;\r
-       u16 disable_cfe;\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-       if (!(!priv->pmib->dot11OperationEntry.wifi_specific ||\r
-               ((OPMODE & WIFI_AP_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific))\r
-       #ifdef CLIENT_MODE\r
-               || ((OPMODE & WIFI_STATION_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific))\r
-       #endif\r
-               ))\r
-               return;\r
-#endif\r
-\r
-#ifdef RTK_AC_SUPPORT //for 11ac logo, do not dynamic switch edca \r
-       if(AC_SIGMA_MODE != AC_SIGMA_NONE)\r
-               return;\r
-#endif\r
-\r
-       if ((mode & (ODM_WM_N24G|ODM_WM_N5G)) && (priv->pshare->ht_sta_num\r
-       #ifdef WDS\r
-               || ((OPMODE & WIFI_AP_STATE) && priv->pmib->dot11WdsInfo.wdsEnabled && priv->pmib->dot11WdsInfo.wdsNum)\r
-       #endif\r
-               ))\r
-               sifs_time = 16;\r
-\r
-       if (mode & (ODM_WM_N24G|ODM_WM_N5G|ODM_WM_G|ODM_WM_A)) {\r
-               slot_time = 9;\r
-       } \r
-       else\r
-       {\r
-               BE_TXOP = 94;\r
-               VI_TXOP = 188;\r
-       }\r
-\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-       vi_edca = -1;\r
-       disable_cfe = -1;\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-       if (priv->pshare->iot_mode_VO_exist) {\r
-               // to separate AC_VI and AC_BE to avoid using the same EDCA settings\r
-               if (priv->pshare->iot_mode_BE_exist) {\r
-                       vi_cw_max = 5;\r
-                       vi_cw_min = 3;\r
-               } else {\r
-                       vi_cw_max = 6;\r
-                       vi_cw_min = 4;\r
-               }\r
-       }\r
-       vi_aifs = (sifs_time + ((OPMODE & WIFI_AP_STATE)?1:2) * slot_time);\r
-\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-       vi_edca = ((VI_TXOP*(1-priv->pshare->iot_mode_VO_exist)) << 16)| (vi_cw_max << 12) | (vi_cw_min << 8) | vi_aifs;\r
-#else\r
-       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM, ((VI_TXOP*(1-priv->pshare->iot_mode_VO_exist)) << 16)| (vi_cw_max << 12) | (vi_cw_min << 8) | vi_aifs);\r
-#endif\r
-       \r
-#elif (DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-       if ((OPMODE & WIFI_AP_STATE) && priv->pmib->dot11OperationEntry.wifi_specific) {\r
-               if (priv->pshare->iot_mode_VO_exist) {\r
-       #ifdef WMM_VIBE_PRI\r
-                       if (priv->pshare->iot_mode_BE_exist) \r
-                       {\r
-                               vi_cw_max = 5;\r
-                               vi_cw_min = 3;\r
-                               vi_aifs = (sifs_time + ((OPMODE & WIFI_AP_STATE)?1:2) * slot_time);\r
-                       }\r
-                       else \r
-       #endif\r
-                       {\r
-                       vi_cw_max = 6;\r
-                       vi_cw_min = 4;\r
-                       vi_aifs = 0x2b;\r
-                       }\r
-               } \r
-               else {\r
-                       vi_aifs = (sifs_time + ((OPMODE & WIFI_AP_STATE)?1:2) * slot_time);\r
-               }\r
-\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-               vi_edca = ((VI_TXOP*(1-priv->pshare->iot_mode_VO_exist)) << 16)\r
-                       | (vi_cw_max << 12) | (vi_cw_min << 8) | vi_aifs;\r
-#else\r
-               ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM, ((VI_TXOP*(1-priv->pshare->iot_mode_VO_exist)) << 16)\r
-                       | (vi_cw_max << 12) | (vi_cw_min << 8) | vi_aifs);\r
-#endif\r
-\r
-       #ifdef WMM_BEBK_PRI\r
-       #ifdef CONFIG_RTL_88E_SUPPORT\r
-               if ((GET_CHIP_VER(priv) == VERSION_8188E) && priv->pshare->iot_mode_BK_exist) {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       be_edca = (10 << 12) | (6 << 8) | 0x4f;\r
-#else\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BK_PARAM, (10 << 12) | (6 << 8) | 0x4f);\r
-#endif\r
-               }\r
-       #endif          \r
-       #endif\r
-#if defined(CONFIG_WLAN_HAL_8881A) \r
-               if (GET_CHIP_VER(priv) == VERSION_8881A) \r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BK_PARAM,  0xa64f);\r
-#endif         \r
-       }\r
-#endif\r
-\r
-\r
-\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-       if (priv->pshare->rf_ft_var.wifi_beq_iot && priv->pshare->iot_mode_VI_exist) {\r
-#if defined(CONFIG_RTL_88E_SUPPORT) || defined(CONFIG_RTL_8812_SUPPORT)\r
-               if (GET_CHIP_VER(priv) == VERSION_8188E || GET_CHIP_VER(priv) == VERSION_8812E) {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       be_edca = (10 << 12) | (6 << 8) | 0x4f;\r
-#else\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (10 << 12) | (6 << 8) | 0x4f);\r
-#endif\r
-               }\r
-               else\r
-#endif\r
-               {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       be_edca = (10 << 12) | (4 << 8) | 0x4f;\r
-#else\r
-               ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (10 << 12) | (4 << 8) | 0x4f);\r
-#endif\r
-               }\r
-       } else if(!enable)\r
-#elif(DM_ODM_SUPPORT_TYPE==ODM_ADSL)      \r
-       if(!enable)                                 //if iot is disable ,maintain original BEQ PARAM\r
-#endif\r
-       {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-               be_edca = (((OPMODE & WIFI_AP_STATE)?6:10) << 12) | (4 << 8)\r
-                       | (sifs_time + 3 * slot_time);\r
-               disable_cfe = 1;\r
-#else\r
-               ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (((OPMODE & WIFI_AP_STATE)?6:10) << 12) | (4 << 8)\r
-                       | (sifs_time + 3 * slot_time));\r
-#endif\r
-#ifdef CONFIG_PCI_HCI\r
-//             ODM_Write2Byte(pDM_Odm, RD_CTRL, ODM_Read2Byte(pDM_Odm, RD_CTRL) | (DIS_TXOP_CFE));\r
-#endif\r
-       }\r
-       else\r
-       {\r
-               int txop;\r
-               unsigned int cw_max;\r
-#ifdef LOW_TP_TXOP\r
-               unsigned int txop_close;\r
-#endif\r
-               \r
-       #if((DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined LOW_TP_TXOP))\r
-                       cw_max = ((priv->pshare->BE_cwmax_enhance) ? 10 : 6);\r
-                       txop_close = ((priv->pshare->rf_ft_var.low_tp_txop && priv->pshare->rf_ft_var.low_tp_txop_close) ? 1 : 0);\r
-\r
-                       if(priv->pshare->txop_enlarge == 0xe)   //if intel case\r
-                               txop = (txop_close ? 0 : (BE_TXOP*2));\r
-                       else                                                        //if other case\r
-                               txop = (txop_close ? 0: (BE_TXOP*priv->pshare->txop_enlarge));\r
-       #else\r
-                       cw_max=6;\r
-                       if((priv->pshare->txop_enlarge==0xe)||(priv->pshare->txop_enlarge==0xd))\r
-                               txop=BE_TXOP*2;\r
-                       else\r
-                               txop=BE_TXOP*priv->pshare->txop_enlarge;\r
-\r
-       #endif\r
-                           \r
-               if (priv->pshare->ht_sta_num\r
-       #ifdef WDS\r
-                       || ((OPMODE & WIFI_AP_STATE) && (mode & (ODM_WM_N24G|ODM_WM_N5G)) &&\r
-                       priv->pmib->dot11WdsInfo.wdsEnabled && priv->pmib->dot11WdsInfo.wdsNum)\r
-       #endif\r
-                       ) \r
-                       {\r
-\r
-                       if (priv->pshare->txop_enlarge == 0xe) {\r
-                               // is intel client, use a different edca value\r
-                               //ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop<< 16) | (cw_max<< 12) | (4 << 8) | 0x1f);\r
-                               if (pDM_Odm->RFType==ODM_1T1R) {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                                       be_edca = (txop << 16) | (5 << 12) | (3 << 8) | 0x1f;\r
-#else\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) | (5 << 12) | (3 << 8) | 0x1f);\r
-#endif\r
-                               }\r
-                               else {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                                       be_edca = (txop << 16) | (8 << 12) | (5 << 8) | 0x1f;\r
-#else\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) | (8 << 12) | (5 << 8) | 0x1f);\r
-#endif\r
-                               }\r
-                               \r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                               disable_cfe = 0;\r
-#endif\r
-#ifdef CONFIG_PCI_HCI\r
-//                             ODM_Write2Byte(pDM_Odm, RD_CTRL, ODM_Read2Byte(pDM_Odm, RD_CTRL) & ~(DIS_TXOP_CFE));\r
-#endif\r
-                               priv->pshare->txop_enlarge = 2;\r
-                       } \r
-#if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-       #ifndef LOW_TP_TXOP\r
-                        else if (priv->pshare->txop_enlarge == 0xd) {\r
-                               // is intel ralink, use a different edca value\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                               be_edca = (txop << 16) | (6 << 12) | (5 << 8) | 0x2b;\r
-#else\r
-                               ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) | (6 << 12) | (5 << 8) | 0x2b);\r
-#endif\r
-                               priv->pshare->txop_enlarge = 2;\r
-                       } \r
-       #endif\r
-#endif\r
-                       else \r
-                       {\r
-//                             if (txop == 0) {\r
-//#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-//                                     disable_cfe = 1;\r
-//#endif\r
-//#ifdef CONFIG_PCI_HCI\r
-//                                     ODM_Write2Byte(pDM_Odm, RD_CTRL, ODM_Read2Byte(pDM_Odm, RD_CTRL) | (DIS_TXOP_CFE));\r
-//#endif\r
-//                             }\r
-                                       \r
-                               if (pDM_Odm->RFType==ODM_2T2R) {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                                       be_edca = (txop << 16) | (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time);\r
-#else\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) |\r
-                                               (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time));\r
-#endif\r
-                               }\r
-                               else\r
-                               #if(DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined LOW_TP_TXOP)\r
-                               {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                                       be_edca = (txop << 16) |\r
-                                               (((priv->pshare->BE_cwmax_enhance) ? 10 : 5) << 12) | (3 << 8) | (sifs_time + 2 * slot_time);\r
-#else\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) |\r
-                                               (((priv->pshare->BE_cwmax_enhance) ? 10 : 5) << 12) | (3 << 8) | (sifs_time + 2 * slot_time));\r
-#endif\r
-                               }\r
-                               #else\r
-                               {\r
-                                       PSTA_INFO_T             pstat = priv->pshare->highTP_found_pstat;\r
-                                       if ((GET_CHIP_VER(priv)==VERSION_8881A) && pstat && (pstat->IOTPeer == HT_IOT_PEER_HTC))\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, 0x642b);\r
-                                       else {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                                       be_edca = (txop << 16) | (5 << 12) | (3 << 8) | (sifs_time + 2 * slot_time);\r
-                               #else\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) |\r
-                                               (5 << 12) | (3 << 8) | (sifs_time + 2 * slot_time));\r
-#endif\r
-                                       }\r
-                               }\r
-                               #endif\r
-                       }\r
-               }\r
-              else \r
-              {\r
- #if((DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined LOW_TP_TXOP))\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                        be_edca = (BE_TXOP << 16) | (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time);\r
-#else\r
-                        ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (BE_TXOP << 16) | (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time));\r
-#endif\r
- #else\r
-               #if defined(CONFIG_RTL_8196D) || defined(CONFIG_RTL_8197DL) || defined(CONFIG_RTL_8196E) || (defined(CONFIG_RTL_8197D) && !defined(CONFIG_PORT0_EXT_GIGA))\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       be_edca = (BE_TXOP*2 << 16) | (cw_max << 12) | (5 << 8) | (sifs_time + 3 * slot_time);\r
- #else\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM,  (BE_TXOP*2 << 16) | (cw_max << 12) | (5 << 8) | (sifs_time + 3 * slot_time));\r
-#endif\r
-               #else\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       be_edca = (BE_TXOP*2 << 16) | (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time);\r
-               #else\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM,  (BE_TXOP*2 << 16) | (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time));\r
-               #endif\r
-               #endif\r
-/*             \r
-               if (priv->pshare->txop_enlarge == 0xe) {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       disable_cfe = 0;\r
-#endif\r
-       #ifdef CONFIG_PCI_HCI\r
-                       ODM_Write2Byte(pDM_Odm, RD_CTRL, ODM_Read2Byte(pDM_Odm, RD_CTRL) & ~(DIS_TXOP_CFE));\r
-       #endif\r
-               } else {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       disable_cfe = 1;\r
-#endif\r
-       #ifdef CONFIG_PCI_HCI\r
-                       ODM_Write2Byte(pDM_Odm, RD_CTRL, ODM_Read2Byte(pDM_Odm, RD_CTRL) | (DIS_TXOP_CFE));\r
-       #endif\r
-               }\r
-*/                     \r
- #endif\r
-              }\r
-\r
-       }\r
-       \r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-       notify_IOT_EDCA_switch(priv, be_edca, vi_edca, disable_cfe);\r
-#endif\r
-}\r
-#endif\r
-\r
-VOID \r
-odm_IotEngine(\r
-       IN      PVOID           pDM_VOID\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       struct rtl8192cd_priv *priv=pDM_Odm->priv;\r
-       PSTA_INFO_T pstat = NULL;\r
-       u4Byte i;\r
-       \r
-#ifdef WIFI_WMM\r
-       unsigned int switch_turbo = 0, avg_tp;\r
-#endif \r
-////////////////////////////////////////////////////////\r
-//  if EDCA Turbo function is not supported or Manual EDCA Setting\r
-//  then return\r
-////////////////////////////////////////////////////////\r
-       if(!(pDM_Odm->SupportAbility&ODM_MAC_EDCA_TURBO)){\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("ODM_MAC_EDCA_TURBO NOT SUPPORTED\n"));\r
-               return;\r
-       }\r
-       \r
-#if((DM_ODM_SUPPORT_TYPE==ODM_AP)&& defined(RTL_MANUAL_EDCA) && defined(WIFI_WMM))\r
-       if(priv->pmib->dot11QosEntry.ManualEDCA){\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("ODM_MAC_EDCA_TURBO OFF: MANUAL SETTING\n"));\r
-               return ;\r
-       }\r
-#endif \r
-\r
-#if !(DM_ODM_SUPPORT_TYPE &ODM_AP)\r
- //////////////////////////////////////////////////////\r
- //find high TP STA every 2s\r
-//////////////////////////////////////////////////////\r
-       if ((GET_ROOT(priv)->up_time % 2) == 0) \r
-               priv->pshare->highTP_found_pstat==NULL;\r
-\r
-#if 0\r
-       phead = &priv->asoc_list;\r
-       plist = phead->next;\r
-       while(plist != phead)   {\r
-               pstat = list_entry(plist, struct stat_info, asoc_list);\r
-\r
-               if(ODM_ChooseIotMainSTA(pDM_Odm, pstat));              //find the correct station\r
-                       break;\r
-               if (plist == plist->next)                                          //the last plist \r
-                       break;\r
-               plist = plist->next;\r
-       };\r
-#endif\r
-\r
-       //find highTP STA\r
-       for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++) {\r
-               pstat = pDM_Odm->pODM_StaInfo[i];\r
-               if(IS_STA_VALID(pstat) && (ODM_ChooseIotMainSTA(pDM_Odm, pstat)))        //find the correct station\r
-                               break;\r
-       }\r
-\r
- //////////////////////////////////////////////////////\r
- //if highTP STA is not found, then return\r
- //////////////////////////////////////////////////////\r
-       if(priv->pshare->highTP_found_pstat==NULL)      {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("ODM_MAC_EDCA_TURBO OFF: NO HT STA FOUND\n"));\r
-               return;\r
-       }\r
-#endif\r
-\r
-       pstat=priv->pshare->highTP_found_pstat;\r
-       if(pstat) {\r
-               if((pstat->tx_avarage + pstat->rx_avarage) < (1<<17))   // 1M bps\r
-                       pstat = NULL;\r
-       }\r
-\r
-#ifdef WIFI_WMM\r
-       if (QOS_ENABLE) {\r
-               if (!priv->pmib->dot11OperationEntry.wifi_specific \r
-               #if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-                       ||((OPMODE & WIFI_AP_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific))\r
-               #elif(DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-                       || (priv->pmib->dot11OperationEntry.wifi_specific == 2)\r
-               #endif\r
-                       ) {\r
-                       if (priv->pshare->iot_mode_enable &&\r
-                               ((priv->pshare->phw->VO_pkt_count > 50) ||\r
-                                (priv->pshare->phw->VI_pkt_count > 50) ||\r
-                                (priv->pshare->phw->BK_pkt_count > 50))) {\r
-                               priv->pshare->iot_mode_enable = 0;\r
-                               switch_turbo++;\r
-#ifdef CONFIG_WLAN_HAL_8881A\r
-                               if (GET_CHIP_VER(priv) == VERSION_8881A) {\r
-                                       RTL_W32(0x460, 0x03086666);\r
-                               }\r
-#endif //CONFIG_WLAN_HAL_8881A\r
-                       } else if ((!priv->pshare->iot_mode_enable) &&\r
-                               ((priv->pshare->phw->VO_pkt_count < 50) &&\r
-                                (priv->pshare->phw->VI_pkt_count < 50) &&\r
-                                (priv->pshare->phw->BK_pkt_count < 50))) {\r
-                               priv->pshare->iot_mode_enable++;\r
-                               switch_turbo++;\r
-//#ifdef CONFIG_WLAN_HAL_8881A\r
-#if 0\r
-                               if (GET_CHIP_VER(priv) == VERSION_8881A) {\r
-                                       if (get_bonding_type_8881A()==BOND_8881AB) {\r
-                                               RTL_W32(0x460, 0x03086666);\r
-                                       }\r
-                                       else {\r
-                                               RTL_W32(0x460, 0x0320ffff);\r
-                                       }\r
-                               }\r
-#endif //CONFIG_WLAN_HAL_8881A\r
-                       }\r
-               }\r
-\r
-\r
-               #if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-               if ((OPMODE & WIFI_AP_STATE) && priv->pmib->dot11OperationEntry.wifi_specific)\r
-               #elif (DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-               if (priv->pmib->dot11OperationEntry.wifi_specific) \r
-               #endif\r
-               {\r
-                       if (!priv->pshare->iot_mode_VO_exist && (priv->pshare->phw->VO_pkt_count > 50)) {\r
-                               priv->pshare->iot_mode_VO_exist++;\r
-                               switch_turbo++;\r
-                       } else if (priv->pshare->iot_mode_VO_exist && (priv->pshare->phw->VO_pkt_count < 50)) {\r
-                               priv->pshare->iot_mode_VO_exist = 0;\r
-                               switch_turbo++;\r
-                       }\r
-#if((DM_ODM_SUPPORT_TYPE==ODM_ADSL)||((DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined WMM_VIBE_PRI)))\r
-                       if (priv->pshare->iot_mode_VO_exist) {\r
-                               //printk("[%s %d] BE_pkt_count=%d\n", __FUNCTION__, __LINE__, priv->pshare->phw->BE_pkt_count);\r
-                               if (!priv->pshare->iot_mode_BE_exist && (priv->pshare->phw->BE_pkt_count > 250)) {\r
-                                       priv->pshare->iot_mode_BE_exist++;\r
-                                       switch_turbo++;\r
-                               } else if (priv->pshare->iot_mode_BE_exist && (priv->pshare->phw->BE_pkt_count < 250)) {\r
-                                       priv->pshare->iot_mode_BE_exist = 0;\r
-                                       switch_turbo++;\r
-                               }\r
-                       }\r
-#endif\r
-\r
-#if((DM_ODM_SUPPORT_TYPE==ODM_ADSL)||((DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined WMM_BEBK_PRI)))\r
-                       if (priv->pshare->phw->BE_pkt_count) {\r
-                               //printk("[%s %d] BK_pkt_count=%d\n", __FUNCTION__, __LINE__, priv->pshare->phw->BK_pkt_count);\r
-                               if (!priv->pshare->iot_mode_BK_exist && (priv->pshare->phw->BK_pkt_count > 250)) {\r
-                                       priv->pshare->iot_mode_BK_exist++;\r
-                                       switch_turbo++;\r
-                               } else if (priv->pshare->iot_mode_BK_exist && (priv->pshare->phw->BK_pkt_count < 250)) {\r
-                                       priv->pshare->iot_mode_BK_exist = 0;\r
-                                       switch_turbo++;\r
-                               }\r
-                       }\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-                       if (priv->pshare->rf_ft_var.wifi_beq_iot) \r
-                       {\r
-                               if (!priv->pshare->iot_mode_VI_exist && (priv->pshare->phw->VI_rx_pkt_count > 50)) {\r
-                                       priv->pshare->iot_mode_VI_exist++;\r
-                                       switch_turbo++;\r
-                               } else if (priv->pshare->iot_mode_VI_exist && (priv->pshare->phw->VI_rx_pkt_count < 50)) {\r
-                                       priv->pshare->iot_mode_VI_exist = 0;\r
-                                       switch_turbo++;\r
-                               }\r
-                       }\r
-#endif\r
-\r
-               }\r
-               else if (!pstat || pstat->rssi < priv->pshare->rf_ft_var.txop_enlarge_lower) {\r
-                  if (priv->pshare->txop_enlarge) {\r
-                          priv->pshare->txop_enlarge = 0;\r
-                          if (priv->pshare->iot_mode_enable)\r
-                                       switch_turbo++;\r
-                               }\r
-               }\r
-\r
-#if(defined(CLIENT_MODE) && (DM_ODM_SUPPORT_TYPE==ODM_AP))\r
-        if ((OPMODE & WIFI_STATION_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific))\r
-        {\r
-            if (priv->pshare->iot_mode_enable &&\r
-                (((priv->pshare->phw->VO_pkt_count > 50) ||\r
-                 (priv->pshare->phw->VI_pkt_count > 50) ||\r
-                 (priv->pshare->phw->BK_pkt_count > 50)) ||\r
-                 (pstat && (!pstat->ADDBA_ready[0]) & (!pstat->ADDBA_ready[3]))))\r
-            {\r
-                priv->pshare->iot_mode_enable = 0;\r
-                switch_turbo++;\r
-            }\r
-            else if ((!priv->pshare->iot_mode_enable) &&\r
-                (((priv->pshare->phw->VO_pkt_count < 50) &&\r
-                 (priv->pshare->phw->VI_pkt_count < 50) &&\r
-                 (priv->pshare->phw->BK_pkt_count < 50)) &&\r
-                 (pstat && (pstat->ADDBA_ready[0] | pstat->ADDBA_ready[3]))))\r
-            {\r
-                priv->pshare->iot_mode_enable++;\r
-                switch_turbo++;\r
-            }\r
-        }\r
-#endif\r
-\r
-               priv->pshare->phw->VO_pkt_count = 0;\r
-               priv->pshare->phw->VI_pkt_count = 0;\r
-               priv->pshare->phw->BK_pkt_count = 0;\r
-\r
-       #if((DM_ODM_SUPPORT_TYPE==ODM_ADSL)||((DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined WMM_VIBE_PRI)))\r
-               priv->pshare->phw->BE_pkt_count = 0;\r
-       #endif\r
-               \r
-       #if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-               if (priv->pshare->rf_ft_var.wifi_beq_iot)\r
-                       priv->pshare->phw->VI_rx_pkt_count = 0;\r
-               #endif\r
-\r
-       }\r
-#endif\r
-\r
-       if ((priv->up_time % 2) == 0) {\r
-               /*\r
-                * decide EDCA content for different chip vendor\r
-                */\r
-#ifdef WIFI_WMM\r
-       #if(DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-               if (QOS_ENABLE && (!priv->pmib->dot11OperationEntry.wifi_specific || (priv->pmib->dot11OperationEntry.wifi_specific == 2)\r
-       \r
-       #elif(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-               if (QOS_ENABLE && (!priv->pmib->dot11OperationEntry.wifi_specific || \r
-                       ((OPMODE & WIFI_AP_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific == 2))\r
-               #ifdef CLIENT_MODE\r
-            || ((OPMODE & WIFI_STATION_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific == 2))\r
-               #endif\r
-       #endif\r
-               ))\r
-       \r
-               {\r
-\r
-                       if (pstat && pstat->rssi >= priv->pshare->rf_ft_var.txop_enlarge_upper) {\r
-#ifdef LOW_TP_TXOP\r
-                               if (pstat->IOTPeer==HT_IOT_PEER_INTEL)\r
-                               {\r
-                                       if (priv->pshare->txop_enlarge != 0xe)\r
-                                       {\r
-                                               priv->pshare->txop_enlarge = 0xe;\r
-\r
-                                               if (priv->pshare->iot_mode_enable)\r
-                                                       switch_turbo++;\r
-                                       }\r
-                               } \r
-                               else if (priv->pshare->txop_enlarge != 2) \r
-                               {\r
-                                       priv->pshare->txop_enlarge = 2;\r
-                                       if (priv->pshare->iot_mode_enable)\r
-                                               switch_turbo++;\r
-                               }\r
-#else\r
-                               if (priv->pshare->txop_enlarge != 2)\r
-                               {\r
-                                       if (pstat->IOTPeer==HT_IOT_PEER_INTEL)\r
-                                               priv->pshare->txop_enlarge = 0xe;                                               \r
-                                       else if (pstat->IOTPeer==HT_IOT_PEER_RALINK)\r
-                                               priv->pshare->txop_enlarge = 0xd;                                               \r
-                                       else if (pstat->IOTPeer==HT_IOT_PEER_HTC)\r
-                                               priv->pshare->txop_enlarge = 0;         \r
-                                       else\r
-                                               priv->pshare->txop_enlarge = 2;\r
-\r
-                                       if (priv->pshare->iot_mode_enable)\r
-                                               switch_turbo++;\r
-                               }\r
-#endif\r
-                       }\r
-                       else if (!pstat || pstat->rssi < priv->pshare->rf_ft_var.txop_enlarge_lower) \r
-                       {\r
-                               if (priv->pshare->txop_enlarge) {\r
-                                       priv->pshare->txop_enlarge = 0;\r
-                                       if (priv->pshare->iot_mode_enable)\r
-                                               switch_turbo++;\r
-                               }\r
-                       }\r
-\r
-#if((DM_ODM_SUPPORT_TYPE==ODM_AP)&&( defined LOW_TP_TXOP))\r
-                       // for Intel IOT, need to enlarge CW MAX from 6 to 10\r
-                       if (pstat && pstat->IOTPeer==HT_IOT_PEER_INTEL && (((pstat->tx_avarage+pstat->rx_avarage)>>10) < \r
-                                       priv->pshare->rf_ft_var.cwmax_enhance_thd)) \r
-                       {\r
-                               if (!priv->pshare->BE_cwmax_enhance && priv->pshare->iot_mode_enable)\r
-                               {\r
-                                       priv->pshare->BE_cwmax_enhance = 1;\r
-                                       switch_turbo++;\r
-                               }\r
-                       } else {\r
-                               if (priv->pshare->BE_cwmax_enhance) {\r
-                                       priv->pshare->BE_cwmax_enhance = 0;\r
-                                       switch_turbo++;\r
-                               }\r
-                       }\r
-#endif\r
-               }\r
-#endif\r
-               priv->pshare->current_tx_bytes = 0;\r
-               priv->pshare->current_rx_bytes = 0;\r
-       }else {\r
-               if ((GET_CHIP_VER(priv) == VERSION_8881A)||(GET_CHIP_VER(priv) == VERSION_8192E)|| (GET_CHIP_VER(priv) == VERSION_8188E) ){\r
-                       unsigned int uldl_tp = (priv->pshare->current_tx_bytes+priv->pshare->current_rx_bytes)>>17;\r
-                       if((uldl_tp > 40) && (priv->pshare->agg_to!= 1)) {\r
-                               RTL_W8(0x462, 0x08);\r
-                               priv->pshare->agg_to = 1;\r
-                       } else if((uldl_tp < 35) && (priv->pshare->agg_to !=0)) {\r
-                               RTL_W8(0x462, 0x02);\r
-                               priv->pshare->agg_to = 0;\r
-                       } \r
-               }\r
-       }\r
-       \r
-#if((DM_ODM_SUPPORT_TYPE==ODM_AP)&& defined( SW_TX_QUEUE))\r
-       if(AMPDU_ENABLE) {\r
-#ifdef TX_EARLY_MODE\r
-               if (GET_TX_EARLY_MODE) {\r
-                       if (!GET_EM_SWQ_ENABLE &&\r
-                               ((priv->assoc_num > 1) ||\r
-                               (pstat && pstat->IOTPeer != HT_IOT_PEER_UNKNOWN))) {\r
-                               if ((priv->pshare->em_tx_byte_cnt >> 17) > EM_TP_UP_BOUND) \r
-                                       priv->pshare->reach_tx_limit_cnt++;                             \r
-                               else                                    \r
-                                       priv->pshare->reach_tx_limit_cnt = 0;   \r
-\r
-                               if (priv->pshare->txop_enlarge && priv->pshare->reach_tx_limit_cnt) { //>= WAIT_TP_TIME//\r
-                                       GET_EM_SWQ_ENABLE = 1;                  \r
-                                       priv->pshare->reach_tx_limit_cnt = 0;\r
-\r
-                                       if (pstat->IOTPeer == HT_IOT_PEER_INTEL)\r
-                                               MAX_EM_QUE_NUM = 12;\r
-                                       else if (pstat->IOTPeer == HT_IOT_PEER_RALINK)\r
-                                               MAX_EM_QUE_NUM = 10;\r
-                                       \r
-                                       enable_em(priv);                        \r
-                               }\r
-                       }\r
-                       else if (GET_EM_SWQ_ENABLE) {\r
-                               if ((priv->pshare->em_tx_byte_cnt >> 17) < EM_TP_LOW_BOUND)\r
-                                       priv->pshare->reach_tx_limit_cnt++;                             \r
-                               else                                    \r
-                                       priv->pshare->reach_tx_limit_cnt = 0;   \r
-\r
-                               if (!priv->pshare->txop_enlarge || priv->pshare->reach_tx_limit_cnt >= WAIT_TP_TIME) {\r
-                                       GET_EM_SWQ_ENABLE = 0;\r
-                                       priv->pshare->reach_tx_limit_cnt = 0;\r
-                                       disable_em(priv);\r
-                               }\r
-                       }\r
-               }\r
-#endif\r
-\r
-#if defined(CONFIG_WLAN_HAL_8881A) || defined(CONFIG_WLAN_HAL_8192EE) || defined(CONFIG_RTL_8812_SUPPORT)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8812) {        \r
-               if (priv->assoc_num > 9)\r
-       {\r
-               if (priv->swq_txmac_chg >= priv->pshare->rf_ft_var.swq_en_highthd){\r
-                               if ((priv->swq_decision == 0)){\r
-                               switch_turbo++;\r
-                               if (priv->pshare->txop_enlarge == 0)\r
-                                       priv->pshare->txop_enlarge = 2;\r
-                                       priv->swq_decision = 1;\r
-                               }\r
-                       else\r
-                       {\r
-                               if ((switch_turbo > 0) && (priv->pshare->txop_enlarge == 0) && (priv->pshare->iot_mode_enable != 0))\r
-                               {\r
-                                       priv->pshare->txop_enlarge = 2;\r
-                                       switch_turbo--;\r
-                               }\r
-                       }\r
-               }\r
-               else if(priv->swq_txmac_chg <= priv->pshare->rf_ft_var.swq_dis_lowthd){\r
-                               priv->swq_decision = 0;\r
-               }\r
-                       else if ((priv->swq_decision == 1) && (switch_turbo > 0) && (priv->pshare->txop_enlarge == 0) && (priv->pshare->iot_mode_enable != 0))        {\r
-                       priv->pshare->txop_enlarge = 2;\r
-                       switch_turbo--;\r
-               }\r
-               } else {\r
-                       priv->swq_decision = 0;\r
-    }\r
-       } else if(CONFIG_WLAN_NOT_HAL_EXIST)\r
-#endif\r
-               {       \r
-               if (priv->assoc_num > 1)\r
-       {\r
-               if (priv->swq_txmac_chg >= priv->pshare->rf_ft_var.swq_en_highthd){\r
-                               if ((priv->swq_decision == 0)){\r
-                               switch_turbo++;\r
-                               if (priv->pshare->txop_enlarge == 0)\r
-                                       priv->pshare->txop_enlarge = 2;\r
-                                       priv->swq_decision = 1;\r
-                               }\r
-                       else\r
-                       {\r
-                               if ((switch_turbo > 0) && (priv->pshare->txop_enlarge == 0) && (priv->pshare->iot_mode_enable != 0))\r
-                               {\r
-                                       priv->pshare->txop_enlarge = 2;\r
-                                       switch_turbo--;\r
-                               }\r
-                       }\r
-               }\r
-               else if(priv->swq_txmac_chg <= priv->pshare->rf_ft_var.swq_dis_lowthd){\r
-                               priv->swq_decision = 0;\r
-               }\r
-                       else if ((priv->swq_decision == 1) && (switch_turbo > 0) && (priv->pshare->txop_enlarge == 0) && (priv->pshare->iot_mode_enable != 0))        {\r
-                       priv->pshare->txop_enlarge = 2;\r
-                       switch_turbo--;\r
-               }\r
-    }\r
-       //#if (defined CONFIG_RTL_819XD))\r
-               else if (priv->assoc_num == 1 && (priv->up_time % 2 == 0)\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP) && defined(TX_EARLY_MODE)\r
-                       && (!GET_TX_EARLY_MODE || !GET_EM_SWQ_ENABLE) \r
-#endif\r
-               ) {\r
-                       if ((pstat) && (pstat->ADDBA_ready[0] | pstat->ADDBA_ready[3])) {\r
-                               //int en_thd = 14417920>>(priv->up_time % 2);\r
-                               avg_tp = (pstat->current_tx_bytes >> 17);\r
-\r
-                               //if ((priv->swq_decision == 0) && (pstat->current_tx_bytes > en_thd) && (pstat->current_rx_bytes > en_thd) )  { //50Mbps\r
-                               if ((priv->swq_decision == 0) && (avg_tp  > TP_HIGH_WATER_MARK)) { //55Mbps\r
-                                       //printk("[%s:%d] swq_decision=1 current_tp: %d Mbps\n", __FUNCTION__, __LINE__, avg_tp);\r
-                                       priv->swq_decision = 1;\r
-                               }\r
-                               //else if ((priv->swq_decision == 1) && ((pstat->tx_avarage < 4587520) || (pstat->rx_avarage < 4587520))) { //35Mbps\r
-                               else if ((priv->swq_decision == 1) && (avg_tp < TP_LOW_WATER_MARK)) { //35Mbps\r
-                                       //printk("[%s:%d] swq_decision=0 current_tp: %d Mbps\n", __FUNCTION__, __LINE__, avg_tp);\r
-                                       priv->swq_decision = 0;\r
-                               }\r
-                       } else {\r
-                               priv->swq_decision = 0;\r
-            }\r
-            }\r
-        }\r
-               if( (priv->swq_decision == 1) \r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP) && defined(TX_EARLY_MODE)            \r
-               || (GET_EM_SWQ_ENABLE == 1) \r
-#endif         \r
-               ) {\r
-                       priv->swq_en = 1;\r
-                       priv->swqen_keeptime = priv->up_time;\r
-               } else {\r
-            priv->swq_en = 0;\r
-                       priv->swqen_keeptime = 0;\r
-        }\r
-    }\r
-#endif\r
-\r
-#ifdef WIFI_WMM\r
-#ifdef LOW_TP_TXOP\r
-       if ((!priv->pmib->dot11OperationEntry.wifi_specific || (priv->pmib->dot11OperationEntry.wifi_specific == 2))\r
-               && QOS_ENABLE) {\r
-               if (switch_turbo || priv->pshare->rf_ft_var.low_tp_txop) {\r
-                       unsigned int thd_tp;\r
-                       unsigned char under_thd;\r
-                       unsigned int curr_tp;\r
-\r
-                       if (priv->pmib->dot11BssType.net_work_type & (ODM_WM_N24G|ODM_WM_N5G| ODM_WM_G))\r
-                       {\r
-                               // Determine the upper bound throughput threshold.\r
-                               if (priv->pmib->dot11BssType.net_work_type & (ODM_WM_N24G|ODM_WM_N5G)) {\r
-                                       if (priv->assoc_num && priv->assoc_num != priv->pshare->ht_sta_num)\r
-                                               thd_tp = priv->pshare->rf_ft_var.low_tp_txop_thd_g;\r
-                                       else\r
-                                               thd_tp = priv->pshare->rf_ft_var.low_tp_txop_thd_n;\r
-                               }\r
-                               else\r
-                                       thd_tp = priv->pshare->rf_ft_var.low_tp_txop_thd_g;\r
-\r
-                               // Determine to close txop.\r
-#if defined(UNIVERSAL_REPEATER) || defined(MBSSID)\r
-                               if(IS_STA_VALID(pstat)) \r
-                               {       \r
-                                       struct rtl8192cd_priv *tmppriv;\r
-                                       struct aid_obj *aidarray;       \r
-                                       aidarray = container_of(pstat, struct aid_obj, station);\r
-                                       tmppriv = aidarray->priv;\r
-\r
-                                       curr_tp = (unsigned int)(tmppriv->ext_stats.tx_avarage>>17) + (unsigned int)(tmppriv->ext_stats.rx_avarage>>17);\r
-                               } \r
-                               else \r
-#endif\r
-                               curr_tp = (unsigned int)(priv->ext_stats.tx_avarage>>17) + (unsigned int)(priv->ext_stats.rx_avarage>>17);\r
-                               if (curr_tp <= thd_tp && curr_tp >= priv->pshare->rf_ft_var.low_tp_txop_thd_low)\r
-                                       under_thd = 1;\r
-                               else\r
-                                       under_thd = 0;\r
-                       }\r
-                       else\r
-                       {\r
-                               under_thd = 0;\r
-                       }\r
-\r
-                       if (switch_turbo) \r
-                       {\r
-                               priv->pshare->rf_ft_var.low_tp_txop_close = under_thd;\r
-                               priv->pshare->rf_ft_var.low_tp_txop_count = 0;\r
-                       }\r
-                       else if (priv->pshare->iot_mode_enable && (priv->pshare->rf_ft_var.low_tp_txop_close != under_thd)) {\r
-                               priv->pshare->rf_ft_var.low_tp_txop_count++;\r
-                               if (priv->pshare->rf_ft_var.low_tp_txop_close) {\r
-                                       priv->pshare->rf_ft_var.low_tp_txop_count = priv->pshare->rf_ft_var.low_tp_txop_delay;\r
-                               }\r
-                               if (priv->pshare->rf_ft_var.low_tp_txop_count ==priv->pshare->rf_ft_var.low_tp_txop_delay) \r
-\r
-                               {                                       \r
-                                       priv->pshare->rf_ft_var.low_tp_txop_count = 0;\r
-                                       priv->pshare->rf_ft_var.low_tp_txop_close = under_thd;\r
-                                       switch_turbo++;\r
-                               }\r
-                       } \r
-                       else \r
-                       {\r
-                               priv->pshare->rf_ft_var.low_tp_txop_count = 0;\r
-                       }\r
-               }\r
-       }\r
-#endif         \r
-\r
-#ifdef WMM_DSCP_C42\r
-       if (switch_turbo) {\r
-               if (!priv->pshare->iot_mode_enable && !priv->pshare->aggrmax_change) {\r
-                       RTL_W16(0x4ca, 0x0404);\r
-                       priv->pshare->aggrmax_change = 1;\r
-               }\r
-               else if (priv->pshare->iot_mode_enable && priv->pshare->aggrmax_change) {\r
-                       RTL_W16(0x4ca, priv->pshare->aggrmax_bak);\r
-                       priv->pshare->aggrmax_change = 0;\r
-               }\r
-       } \r
-#endif\r
-#ifdef TX_EARLY_MODE\r
-               unsigned int em_tp = ((priv->ext_stats.tx_avarage>>17) + (priv->ext_stats.rx_avarage>>17));\r
-               if (em_tp > 80)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (0x5e << 16) | (4 << 12) | (3 << 8) | 0x19);\r
-               else //if (em_tp < 75)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (0x5e << 16) | (6 << 12) | (5 << 8) | 0x2b);\r
-#endif\r
-       if (switch_turbo)\r
-               ODM_IotEdcaSwitch( pDM_Odm, priv->pshare->iot_mode_enable );\r
-#endif\r
-}\r
-#endif\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_EdcaTurboCheck.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_EdcaTurboCheck.h
deleted file mode 100755 (executable)
index 8fba8a2..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
\r
-#ifndef        __ODMEDCATURBOCHECK_H__\r
-#define    __ODMEDCATURBOCHECK_H__\r
-\r
-typedef struct _EDCA_TURBO_\r
-{\r
-       BOOLEAN bCurrentTurboEDCA;\r
-       BOOLEAN bIsCurRDLState;\r
-\r
-       #if(DM_ODM_SUPPORT_TYPE == ODM_CE       )\r
-       u4Byte  prv_traffic_idx; // edca turbo\r
-       #endif\r
-\r
-}EDCA_T,*pEDCA_T;\r
-\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-static u4Byte edca_setting_UL[HT_IOT_PEER_MAX] = \r
-// UNKNOWN             REALTEK_90      REALTEK_92SE    BROADCOM                RALINK          ATHEROS         CISCO           MERU        MARVELL     92U_AP          SELF_AP(DownLink/Tx)\r
-{ 0x5e4322,            0xa44f,                 0x5e4322,               0x5ea32b,               0x5ea422,       0x5ea322,       0x3ea430,       0x5ea42b, 0x5ea44f,     0x5e4322,       0x5e4322};\r
-\r
-\r
-static u4Byte edca_setting_DL[HT_IOT_PEER_MAX] = \r
-// UNKNOWN             REALTEK_90      REALTEK_92SE    BROADCOM                RALINK          ATHEROS         CISCO           MERU,       MARVELL     92U_AP          SELF_AP(UpLink/Rx)\r
-{ 0xa44f,              0x5ea44f,       0x5e4322,               0x5ea42b,               0xa44f,                 0xa630,                 0x5ea630,       0x5ea42b, 0xa44f,               0xa42b,         0xa42b};\r
-\r
-static u4Byte edca_setting_DL_GMode[HT_IOT_PEER_MAX] = \r
-// UNKNOWN             REALTEK_90      REALTEK_92SE    BROADCOM                RALINK          ATHEROS         CISCO           MERU,       MARVELL     92U_AP          SELF_AP\r
-{ 0x4322,              0xa44f,                 0x5e4322,               0xa42b,                         0x5e4322,       0x4322,                 0xa42b,         0x5ea42b, 0xa44f,               0x5e4322,       0x5ea42b};\r
-\r
-\r
-//============================================================\r
-// EDCA Paramter for AP/ADSL   by Mingzhi 2011-11-22\r
-//============================================================\r
-#elif (DM_ODM_SUPPORT_TYPE &ODM_ADSL)\r
-enum qos_prio { BK, BE, VI, VO, VI_AG, VO_AG };\r
-\r
-static const struct ParaRecord rtl_ap_EDCA[] =\r
-{\r
-//ACM,AIFSN, ECWmin, ECWmax, TXOplimit\r
-     {0,     7,      4,      10,     0},            //BK\r
-     {0,     3,      4,      6,      0},             //BE\r
-     {0,     1,      3,      4,      188},         //VI\r
-     {0,     1,      2,      3,      102},         //VO\r
-     {0,     1,      3,      4,      94},          //VI_AG\r
-     {0,     1,      2,      3,      47},          //VO_AG\r
-};\r
-\r
-static const struct ParaRecord rtl_sta_EDCA[] =\r
-{\r
-//ACM,AIFSN, ECWmin, ECWmax, TXOplimit\r
-     {0,     7,      4,      10,     0},\r
-     {0,     3,      4,      10,     0},\r
-     {0,     2,      3,      4,      188},\r
-     {0,     2,      2,      3,      102},\r
-     {0,     2,      3,      4,      94},\r
-     {0,     2,      2,      3,      47},\r
-};\r
-#endif\r
-\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-#ifdef WIFI_WMM\r
-VOID\r
-ODM_IotEdcaSwitch(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN      unsigned char           enable\r
-       );\r
-#endif\r
-\r
-BOOLEAN\r
-ODM_ChooseIotMainSTA(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN      PSTA_INFO_T             pstat\r
-       );\r
-#endif\r
-\r
-VOID\r
-odm_EdcaTurboCheck(\r
-       IN      PVOID           pDM_VOID\r
-       );\r
-VOID\r
-ODM_EdcaTurboInit(\r
-       IN      PVOID           pDM_VOID\r
-);\r
-\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_WIN)\r
-VOID\r
-odm_EdcaTurboCheckMP(\r
-       IN      PVOID           pDM_VOID\r
-       );\r
-\r
-//check if edca turbo is disabled\r
-BOOLEAN\r
-odm_IsEdcaTurboDisable(\r
-       IN      PVOID           pDM_VOID\r
-);\r
-//choose edca paramter for special IOT case\r
-VOID \r
-ODM_EdcaParaSelByIot(\r
-       IN              PVOID                                   pDM_VOID,\r
-       OUT     u4Byte          *EDCA_BE_UL,\r
-       OUT u4Byte              *EDCA_BE_DL\r
-       );\r
-//check if it is UL or DL\r
-VOID\r
-odm_EdcaChooseTrafficIdx( \r
-       IN      PVOID           pDM_VOID,\r
-       IN      u8Byte                          cur_tx_bytes,  \r
-       IN      u8Byte                          cur_rx_bytes, \r
-       IN      BOOLEAN                 bBiasOnRx,\r
-       OUT BOOLEAN             *pbIsCurRDLState\r
-       );\r
-\r
-#elif (DM_ODM_SUPPORT_TYPE==ODM_CE)\r
-VOID\r
-odm_EdcaTurboCheckCE(\r
-       IN      PVOID           pDM_VOID\r
-       );\r
-#else\r
-VOID \r
-odm_IotEngine(\r
-       IN      PVOID           pDM_VOID\r
-       );\r
-\r
-VOID\r
-odm_EdcaParaInit(\r
-       IN      PVOID           pDM_VOID\r
-       );\r
-#endif\r
-\r
-#endif\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_HWConfig.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_HWConfig.c
deleted file mode 100755 (executable)
index b37efd1..0000000
+++ /dev/null
@@ -1,2327 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-\r
-\r
-#include "odm_precomp.h"\r
-\r
-#define READ_AND_CONFIG_MP(ic, txt) (ODM_ReadAndConfig_MP_##ic##txt(pDM_Odm))\r
-#define READ_AND_CONFIG_TC(ic, txt) (ODM_ReadAndConfig_TC_##ic##txt(pDM_Odm))\r
-\r
-\r
-#if (TESTCHIP_SUPPORT == 1)\r
-#define READ_AND_CONFIG(ic, txt) do {\\r
-                                            if (pDM_Odm->bIsMPChip)\\r
-                                                   READ_AND_CONFIG_MP(ic,txt);\\r
-                                            else\\r
-                                                READ_AND_CONFIG_TC(ic,txt);\\r
-                                    } while(0)\r
-#else\r
-  #define READ_AND_CONFIG     READ_AND_CONFIG_MP\r
-#endif\r
-\r
-\r
-#define READ_FIRMWARE_MP(ic, txt)              (ODM_ReadFirmware_MP_##ic##txt(pDM_Odm, pFirmware, pSize))\r
-#define READ_FIRMWARE_TC(ic, txt)              (ODM_ReadFirmware_TC_##ic##txt(pDM_Odm, pFirmware, pSize))              \r
-\r
-#if (TESTCHIP_SUPPORT == 1)\r
-#define READ_FIRMWARE(ic, txt) do {\\r
-                                               if (pDM_Odm->bIsMPChip)\\r
-                                                       READ_FIRMWARE_MP(ic,txt);\\r
-                                               else\\r
-                                                       READ_FIRMWARE_TC(ic,txt);\\r
-                                       } while(0) \r
-#else\r
-#define READ_FIRMWARE     READ_FIRMWARE_MP\r
-#endif\r
-                                               \r
-#define GET_VERSION_MP(ic, txt)                (ODM_GetVersion_MP_##ic##txt())\r
-#define GET_VERSION_TC(ic, txt)                (ODM_GetVersion_TC_##ic##txt())\r
-#define GET_VERSION(ic, txt) (pDM_Odm->bIsMPChip?GET_VERSION_MP(ic,txt):GET_VERSION_TC(ic,txt))\r
-\r
-\r
-u1Byte\r
-odm_QueryRxPwrPercentage(\r
-       IN              s1Byte          AntPower\r
-       )\r
-{\r
-       if ((AntPower <= -100) || (AntPower >= 20))\r
-       {\r
-               return  0;\r
-       }\r
-       else if (AntPower >= 0)\r
-       {\r
-               return  100;\r
-       }\r
-       else\r
-       {\r
-               return  (100+AntPower);\r
-       }\r
-       \r
-}\r
-\r
-#if (DM_ODM_SUPPORT_TYPE != ODM_WIN)\r
-//\r
-// 2012/01/12 MH MOve some signal strength smooth method to MP HAL layer.\r
-// IF other SW team do not support the feature, remove this section.??\r
-//\r
-s4Byte\r
-odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(     \r
-       IN OUT PDM_ODM_T pDM_Odm,\r
-       s4Byte CurrSig \r
-)\r
-{      \r
-       s4Byte RetSig = 0;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       //if(pDM_Odm->SupportInterface  == ODM_ITRF_PCIE) \r
-       {\r
-               // Step 1. Scale mapping.\r
-               // 20100611 Joseph: Re-tunning RSSI presentation for Lenovo.\r
-               // 20100426 Joseph: Modify Signal strength mapping.\r
-               // This modification makes the RSSI indication similar to Intel solution.\r
-               // 20100414 Joseph: Tunning RSSI for Lenovo according to RTL8191SE.\r
-               if(CurrSig >= 54 && CurrSig <= 100)\r
-               {\r
-                       RetSig = 100;\r
-               }\r
-               else if(CurrSig>=42 && CurrSig <= 53 )\r
-               {\r
-                       RetSig = 95;\r
-               }\r
-               else if(CurrSig>=36 && CurrSig <= 41 )\r
-               {\r
-                       RetSig = 74 + ((CurrSig - 36) *20)/6;\r
-               }\r
-               else if(CurrSig>=33 && CurrSig <= 35 )\r
-               {\r
-                       RetSig = 65 + ((CurrSig - 33) *8)/2;\r
-               }\r
-               else if(CurrSig>=18 && CurrSig <= 32 )\r
-               {\r
-                       RetSig = 62 + ((CurrSig - 18) *2)/15;\r
-               }\r
-               else if(CurrSig>=15 && CurrSig <= 17 )\r
-               {\r
-                       RetSig = 33 + ((CurrSig - 15) *28)/2;\r
-               }\r
-               else if(CurrSig>=10 && CurrSig <= 14 )\r
-               {\r
-                       RetSig = 39;\r
-               }\r
-               else if(CurrSig>=8 && CurrSig <= 9 )\r
-               {\r
-                       RetSig = 33;\r
-               }\r
-               else if(CurrSig <= 8 )\r
-               {\r
-                       RetSig = 19;\r
-               }\r
-       }\r
-#endif //ENDIF (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       return RetSig;\r
-}\r
-\r
-s4Byte\r
-odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Netcore(    \r
-       IN OUT PDM_ODM_T pDM_Odm,\r
-       s4Byte CurrSig \r
-)\r
-{\r
-       s4Byte RetSig = 0;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       //if(pDM_Odm->SupportInterface  == ODM_ITRF_USB)\r
-       {\r
-               // Netcore request this modification because 2009.04.13 SU driver use it. \r
-               if(CurrSig >= 31 && CurrSig <= 100)\r
-               {\r
-                       RetSig = 100;\r
-               }       \r
-               else if(CurrSig >= 21 && CurrSig <= 30)\r
-               {\r
-                       RetSig = 90 + ((CurrSig - 20) / 1);\r
-               }\r
-               else if(CurrSig >= 11 && CurrSig <= 20)\r
-               {\r
-                       RetSig = 80 + ((CurrSig - 10) / 1);\r
-               }\r
-               else if(CurrSig >= 7 && CurrSig <= 10)\r
-               {\r
-                       RetSig = 69 + (CurrSig - 7);\r
-               }\r
-               else if(CurrSig == 6)\r
-               {\r
-                       RetSig = 54;\r
-               }\r
-               else if(CurrSig == 5)\r
-               {\r
-                       RetSig = 45;\r
-               }\r
-               else if(CurrSig == 4)\r
-               {\r
-                       RetSig = 36;\r
-               }\r
-               else if(CurrSig == 3)\r
-               {\r
-                       RetSig = 27;\r
-               }\r
-               else if(CurrSig == 2)\r
-               {\r
-                       RetSig = 18;\r
-               }\r
-               else if(CurrSig == 1)\r
-               {\r
-                       RetSig = 9;\r
-               }\r
-               else\r
-               {\r
-                       RetSig = CurrSig;\r
-               }\r
-       }\r
-#endif //ENDIF (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       return RetSig;\r
-}\r
-\r
-\r
-s4Byte\r
-odm_SignalScaleMapping_92CSeries(      \r
-       IN OUT PDM_ODM_T pDM_Odm,\r
-       IN s4Byte CurrSig \r
-)\r
-{\r
-       s4Byte RetSig = 0; \r
-#if (DEV_BUS_TYPE == RT_PCI_INTERFACE) \r
-       if(pDM_Odm->SupportInterface  == ODM_ITRF_PCIE) \r
-       {\r
-               // Step 1. Scale mapping.\r
-               if(CurrSig >= 61 && CurrSig <= 100)\r
-               {\r
-                       RetSig = 90 + ((CurrSig - 60) / 4);\r
-               }\r
-               else if(CurrSig >= 41 && CurrSig <= 60)\r
-               {\r
-                       RetSig = 78 + ((CurrSig - 40) / 2);\r
-               }\r
-               else if(CurrSig >= 31 && CurrSig <= 40)\r
-               {\r
-                       RetSig = 66 + (CurrSig - 30);\r
-               }\r
-               else if(CurrSig >= 21 && CurrSig <= 30)\r
-               {\r
-                       RetSig = 54 + (CurrSig - 20);\r
-               }\r
-               else if(CurrSig >= 5 && CurrSig <= 20)\r
-               {\r
-                       RetSig = 42 + (((CurrSig - 5) * 2) / 3);\r
-               }\r
-               else if(CurrSig == 4)\r
-               {\r
-                       RetSig = 36;\r
-               }\r
-               else if(CurrSig == 3)\r
-               {\r
-                       RetSig = 27;\r
-               }\r
-               else if(CurrSig == 2)\r
-               {\r
-                       RetSig = 18;\r
-               }\r
-               else if(CurrSig == 1)\r
-               {\r
-                       RetSig = 9;\r
-               }\r
-               else\r
-               {\r
-                       RetSig = CurrSig;\r
-               }\r
-       }\r
-#endif\r
-\r
-#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) ||(DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
-       if((pDM_Odm->SupportInterface  == ODM_ITRF_USB) || (pDM_Odm->SupportInterface  == ODM_ITRF_SDIO))\r
-       {\r
-               if(CurrSig >= 51 && CurrSig <= 100)\r
-               {\r
-                       RetSig = 100;\r
-               }\r
-               else if(CurrSig >= 41 && CurrSig <= 50)\r
-               {\r
-                       RetSig = 80 + ((CurrSig - 40)*2);\r
-               }\r
-               else if(CurrSig >= 31 && CurrSig <= 40)\r
-               {\r
-                       RetSig = 66 + (CurrSig - 30);\r
-               }\r
-               else if(CurrSig >= 21 && CurrSig <= 30)\r
-               {\r
-                       RetSig = 54 + (CurrSig - 20);\r
-               }\r
-               else if(CurrSig >= 10 && CurrSig <= 20)\r
-               {\r
-                       RetSig = 42 + (((CurrSig - 10) * 2) / 3);\r
-               }\r
-               else if(CurrSig >= 5 && CurrSig <= 9)\r
-               {\r
-                       RetSig = 22 + (((CurrSig - 5) * 3) / 2);\r
-               }\r
-               else if(CurrSig >= 1 && CurrSig <= 4)\r
-               {\r
-                       RetSig = 6 + (((CurrSig - 1) * 3) / 2);\r
-               }\r
-               else\r
-               {\r
-                       RetSig = CurrSig;\r
-               }\r
-       }\r
-\r
-#endif\r
-       return RetSig;\r
-}\r
-s4Byte\r
-odm_SignalScaleMapping(        \r
-       IN OUT PDM_ODM_T pDM_Odm,\r
-       IN      s4Byte CurrSig \r
-)\r
-{      \r
-       if(     (pDM_Odm->SupportPlatform == ODM_WIN) && \r
-               (pDM_Odm->SupportInterface  != ODM_ITRF_PCIE) && //USB & SDIO\r
-               (pDM_Odm->PatchID==10))//pMgntInfo->CustomerID == RT_CID_819x_Netcore\r
-       {\r
-               return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Netcore(pDM_Odm,CurrSig);\r
-       }\r
-       else if(        (pDM_Odm->SupportPlatform == ODM_WIN) && \r
-                       (pDM_Odm->SupportInterface  == ODM_ITRF_PCIE) &&\r
-                       (pDM_Odm->PatchID==19))//pMgntInfo->CustomerID == RT_CID_819x_Lenovo)\r
-       {\r
-               return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(pDM_Odm, CurrSig);\r
-       }\r
-       else{           \r
-               return odm_SignalScaleMapping_92CSeries(pDM_Odm,CurrSig);\r
-       }\r
-       \r
-}\r
-#endif\r
-\r
-\r
-static u1Byte odm_SQ_process_patch_RT_CID_819x_Lenovo(\r
-       IN PDM_ODM_T    pDM_Odm,\r
-       IN u1Byte               isCCKrate,\r
-       IN u1Byte               PWDB_ALL,\r
-       IN u1Byte               path,\r
-       IN u1Byte               RSSI\r
-)\r
-{\r
-       u1Byte  SQ = 0;\r
-#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)                   \r
-\r
-       if(isCCKrate){\r
-               \r
-               if(IS_HARDWARE_TYPE_8723AE(pDM_Odm->Adapter))\r
-               {\r
-\r
-                       //\r
-                       // <Roger_Notes> Expected signal strength and bars indication at Lenovo lab. 2013.04.11\r
-                       // 802.11n, 802.11b, 802.11g only at channel 6\r
-                       //\r
-                       //              Attenuation (dB)        OS Signal Bars  RSSI by Xirrus (dBm)\r
-                       //                      50                              5                       -52\r
-                       //                      55                              5                       -54\r
-                       //                      60                              5                       -55\r
-                       //                      65                              5                       -59\r
-                       //                      70                              5                       -63\r
-                       //                      75                              5                       -66\r
-                       //                      80                              4                       -72\r
-                       //                      85                              3                       -75\r
-                       //                      90                              3                       -80\r
-                       //                      95                              2                       -85\r
-                       //                      100                             1                       -89\r
-                       //                      102                             1                       -90\r
-                       //                      104                             1                       -91\r
-                       //\r
-                       RT_TRACE(COMP_DBG, DBG_WARNING, ("odm_SQ_process_patch_RT_CID_819x_Lenovo\n"));\r
-                       \r
-#if OS_WIN_FROM_WIN8(OS_VERSION)       \r
-                       if(PWDB_ALL >= 50)\r
-                               SQ = 100;\r
-                       else if(PWDB_ALL >= 23 && PWDB_ALL < 50)                                \r
-                               SQ = 80;\r
-                       else if(PWDB_ALL >= 18 && PWDB_ALL < 23)\r
-                               SQ = 60;\r
-                       else if(PWDB_ALL >= 8 && PWDB_ALL < 18)\r
-                               SQ = 40;\r
-                       else\r
-                               SQ = 10;\r
-#else\r
-                       if(PWDB_ALL >= 34)\r
-                               SQ = 100;\r
-                       else if(PWDB_ALL >= 23 && PWDB_ALL < 34)                                \r
-                               SQ = 80;\r
-                       else if(PWDB_ALL >= 18 && PWDB_ALL < 23)\r
-                               SQ = 60;\r
-                       else if(PWDB_ALL >= 8 && PWDB_ALL < 18)\r
-                               SQ = 40;\r
-                       else\r
-                               SQ = 10;        \r
-\r
-                       if(PWDB_ALL == 0)// Abnormal case, do not indicate the value above 20 on Win7\r
-                               SQ = 20;\r
-#endif         \r
-\r
-               }\r
-               else if(IS_HARDWARE_TYPE_8192E(pDM_Odm->Adapter)){\r
-\r
-                       //\r
-                       // <Roger_Notes> Expected signal strength and bars indication at Lenovo lab. 2013.04.11\r
-                       // 802.11n, 802.11b, 802.11g only at channel 6\r
-                       //\r
-                       //              Attenuation (dB)        OS Signal Bars  RSSI by Xirrus (dBm)\r
-                       //                      50                              5                       -49\r
-                       //                      55                              5                       -49\r
-                       //                      60                              5                       -50\r
-                       //                      65                              5                       -51\r
-                       //                      70                              5                       -52\r
-                       //                      75                              5                       -54\r
-                       //                      80                              5                       -55\r
-                       //                      85                              4                       -60\r
-                       //                      90                              3                       -63\r
-                       //                      95                              3                       -65\r
-                       //                      100                             2                       -67\r
-                       //                      102                             2                       -67\r
-                       //                      104                             1                       -70\r
-                       //                      \r
-\r
-                       if(PWDB_ALL >= 50)\r
-                               SQ = 100;\r
-                       else if(PWDB_ALL >= 35 && PWDB_ALL < 50)                                \r
-                               SQ = 80;\r
-                       else if(PWDB_ALL >= 31 && PWDB_ALL < 35)\r
-                               SQ = 60;\r
-                       else if(PWDB_ALL >= 22 && PWDB_ALL < 31)\r
-                               SQ = 40;\r
-                       else if(PWDB_ALL >= 18 && PWDB_ALL < 22)\r
-                               SQ = 20;\r
-                       else\r
-                               SQ = 10;\r
-               }\r
-               else\r
-               {\r
-               if(PWDB_ALL >= 50)\r
-                       SQ = 100;\r
-               else if(PWDB_ALL >= 35 && PWDB_ALL < 50)                                \r
-                       SQ = 80;\r
-               else if(PWDB_ALL >= 22 && PWDB_ALL < 35)\r
-                       SQ = 60;\r
-               else if(PWDB_ALL >= 18 && PWDB_ALL < 22)\r
-                       SQ = 40;\r
-               else\r
-                               SQ = 10;\r
-               }\r
-               \r
-       }\r
-       else\r
-       {//OFDM rate            \r
-\r
-               if(IS_HARDWARE_TYPE_8723AE(pDM_Odm->Adapter) ||\r
-                       IS_HARDWARE_TYPE_8192E(pDM_Odm->Adapter))\r
-               {\r
-                       if(RSSI >= 45)\r
-                               SQ = 100;\r
-                       else if(RSSI >= 22 && RSSI < 45)\r
-                               SQ = 80;\r
-                       else if(RSSI >= 18 && RSSI < 22)\r
-                               SQ = 40;\r
-                       else\r
-                       SQ = 20;\r
-       }\r
-               else\r
-               {\r
-                       if(RSSI >= 45)\r
-                       SQ = 100;\r
-                       else if(RSSI >= 22 && RSSI < 45)\r
-                       SQ = 80;\r
-               else if(RSSI >= 18 && RSSI < 22)\r
-                       SQ = 40;\r
-               else\r
-                       SQ = 20;                        \r
-       }\r
-       }\r
-\r
-       RT_TRACE(COMP_DBG, DBG_TRACE, ("isCCKrate(%#d), PWDB_ALL(%#d), RSSI(%#d), SQ(%#d)\n", isCCKrate, PWDB_ALL, RSSI, SQ));\r
-       \r
-#endif\r
-       return SQ;\r
-}\r
-\r
-static u1Byte odm_SQ_process_patch_RT_CID_819x_Acer(\r
-       IN PDM_ODM_T    pDM_Odm,\r
-       IN u1Byte               isCCKrate,\r
-       IN u1Byte               PWDB_ALL,\r
-       IN u1Byte               path,\r
-       IN u1Byte               RSSI\r
-)\r
-{\r
-       u1Byte  SQ = 0;\r
-       \r
-#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)                   \r
-\r
-       if(isCCKrate){\r
-\r
-                       RT_TRACE(COMP_DBG, DBG_WARNING, ("odm_SQ_process_patch_RT_Acer\n"));\r
-                       \r
-#if OS_WIN_FROM_WIN8(OS_VERSION)       \r
-\r
-                       if(PWDB_ALL >= 50)\r
-                               SQ = 100;\r
-                       else if(PWDB_ALL >= 35 && PWDB_ALL < 50)                                \r
-                               SQ = 80;\r
-                       else if(PWDB_ALL >= 30 && PWDB_ALL < 35)\r
-                               SQ = 60;\r
-                       else if(PWDB_ALL >= 25 && PWDB_ALL < 30)\r
-                               SQ = 40;\r
-                       else if(PWDB_ALL >= 20 && PWDB_ALL < 25)\r
-                               SQ = 20;\r
-                       else\r
-                               SQ = 10;        \r
-#else\r
-                       if(PWDB_ALL >= 50)\r
-                               SQ = 100;\r
-                       else if(PWDB_ALL >= 35 && PWDB_ALL < 50)                                \r
-                               SQ = 80;\r
-                       else if(PWDB_ALL >= 30 && PWDB_ALL < 35)\r
-                               SQ = 60;\r
-                       else if(PWDB_ALL >= 25 && PWDB_ALL < 30)\r
-                               SQ = 40;\r
-                       else if(PWDB_ALL >= 20 && PWDB_ALL < 25)\r
-                               SQ = 20;\r
-                       else\r
-                               SQ = 10;        \r
-\r
-                       if(PWDB_ALL == 0)// Abnormal case, do not indicate the value above 20 on Win7\r
-                               SQ = 20;\r
-#endif         \r
-\r
-               \r
-               \r
-       }\r
-       else\r
-       {//OFDM rate            \r
-\r
-               if(IS_HARDWARE_TYPE_8723AE(pDM_Odm->Adapter) ||\r
-                       IS_HARDWARE_TYPE_8192E(pDM_Odm->Adapter))\r
-               {\r
-                       if(RSSI >= 45)\r
-                               SQ = 100;\r
-                       else if(RSSI >= 22 && RSSI < 45)\r
-                               SQ = 80;\r
-                       else if(RSSI >= 18 && RSSI < 22)\r
-                               SQ = 40;\r
-                       else\r
-                       SQ = 20;\r
-       }\r
-               else\r
-               {\r
-                       if(RSSI >= 35)\r
-                       SQ = 100;\r
-                       else if(RSSI >= 30 && RSSI < 35)\r
-                       SQ = 80;\r
-               else if(RSSI >= 25 && RSSI < 30)\r
-                       SQ = 40;\r
-               else\r
-                       SQ = 20;                        \r
-       }\r
-       }\r
-\r
-       RT_TRACE(COMP_DBG, DBG_LOUD, ("isCCKrate(%#d), PWDB_ALL(%#d), RSSI(%#d), SQ(%#d)\n", isCCKrate, PWDB_ALL, RSSI, SQ));\r
-       \r
-#endif\r
-       return SQ;\r
-}\r
-                       \r
-static u1Byte \r
-odm_EVMdbToPercentage(\r
-    IN         s1Byte Value\r
-    )\r
-{\r
-       //\r
-       // -33dB~0dB to 0%~99%\r
-       //\r
-       s1Byte ret_val;\r
-    \r
-       ret_val = Value;\r
-       ret_val /= 2;\r
-\r
-       //DbgPrint("Value=%d\n", Value);\r
-       //ODM_RT_DISP(FRX, RX_PHY_SQ, ("EVMdbToPercentage92C Value=%d / %x \n", ret_val, ret_val));\r
-               \r
-       if(ret_val >= 0)\r
-               ret_val = 0;\r
-       if(ret_val <= -33)\r
-               ret_val = -33;\r
-\r
-       ret_val = 0 - ret_val;\r
-       ret_val*=3;\r
-\r
-       if(ret_val == 99)\r
-               ret_val = 100;\r
-\r
-       return(ret_val);\r
-}\r
-                       \r
-static u1Byte \r
-odm_EVMdbm_JaguarSeries(\r
-       IN  s1Byte Value\r
-       )\r
-{\r
-       s1Byte ret_val = Value;\r
-       \r
-       // -33dB~0dB to 33dB ~ 0dB\r
-       if(ret_val == -128)\r
-               ret_val = 127;\r
-       else if (ret_val < 0)\r
-               ret_val = 0 - ret_val;\r
-       \r
-       ret_val  = ret_val >> 1;\r
-       return ret_val;\r
-}\r
-\r
-static u2Byte\r
-odm_Cfo(\r
-  IN s1Byte Value\r
-)\r
-{\r
-       s2Byte  ret_val;\r
-\r
-       if (Value < 0)\r
-       {\r
-               ret_val = 0 - Value;\r
-               ret_val = (ret_val << 1) + (ret_val >> 1) ;  //  *2.5~=312.5/2^7\r
-               ret_val = ret_val | BIT12;  // set bit12 as 1 for negative cfo\r
-       }\r
-       else\r
-       {\r
-               ret_val = Value;\r
-               ret_val = (ret_val << 1) + (ret_val>>1) ;  //  *2.5~=312.5/2^7\r
-       }\r
-       return ret_val;\r
-}\r
-\r
-\r
-VOID\r
-odm_RxPhyStatus92CSeries_Parsing(\r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       OUT             PODM_PHY_INFO_T                 pPhyInfo,               \r
-       IN              pu1Byte                                         pPhyStatus,\r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
-       )\r
-{                                                      \r
-       SWAT_T                          *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
-       u1Byte                          i, Max_spatial_stream;\r
-       s1Byte                          rx_pwr[4], rx_pwr_all=0;\r
-       u1Byte                          EVM, PWDB_ALL = 0, PWDB_ALL_BT;\r
-       u1Byte                          RSSI, total_rssi=0;\r
-       BOOLEAN                         isCCKrate=FALSE;        \r
-       u1Byte                          rf_rx_num = 0;\r
-       u1Byte                          cck_highpwr = 0;\r
-       u1Byte                          LNA_idx, VGA_idx;\r
-       PPHY_STATUS_RPT_8192CD_T pPhyStaRpt = (PPHY_STATUS_RPT_8192CD_T)pPhyStatus;\r
-\r
-       isCCKrate = (pPktinfo->DataRate <= DESC_RATE11M)?TRUE :FALSE;\r
-       pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;\r
-       pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
-\r
-\r
-       if(isCCKrate)\r
-       {\r
-               u1Byte report;\r
-               u1Byte cck_agc_rpt;\r
-               \r
-               pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;\r
-               // \r
-               // (1)Hardware does not provide RSSI for CCK\r
-               // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)\r
-               //\r
-\r
-               //if(pHalData->eRFPowerState == eRfOn)\r
-                       cck_highpwr = pDM_Odm->bCckHighPower;\r
-               //else\r
-               //      cck_highpwr = FALSE;\r
-\r
-               cck_agc_rpt =  pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a ;\r
-               \r
-               //2011.11.28 LukeLee: 88E use different LNA & VGA gain table\r
-               //The RSSI formula should be modified according to the gain table\r
-               //In 88E, cck_highpwr is always set to 1\r
-               if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B))\r
-               {\r
-                       LNA_idx = ((cck_agc_rpt & 0xE0) >>5);\r
-                       VGA_idx = (cck_agc_rpt & 0x1F); \r
-                       if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8192E))\r
-                       {\r
-                               switch(LNA_idx)\r
-                               {\r
-                                       case 7:\r
-                                               if(VGA_idx <= 27)\r
-                                                       rx_pwr_all = -100 + 2*(27-VGA_idx); //VGA_idx = 27~2\r
-                                               else\r
-                                                       rx_pwr_all = -100;\r
-                                               break;\r
-                                       case 6:\r
-                                                       rx_pwr_all = -48 + 2*(2-VGA_idx); //VGA_idx = 2~0\r
-                                               break;\r
-                                       case 5:\r
-                                                       rx_pwr_all = -42 + 2*(7-VGA_idx); //VGA_idx = 7~5\r
-                                               break;\r
-                                       case 4:\r
-                                                       rx_pwr_all = -36 + 2*(7-VGA_idx); //VGA_idx = 7~4\r
-                                               break;\r
-                                       case 3:\r
-                                                       //rx_pwr_all = -28 + 2*(7-VGA_idx); //VGA_idx = 7~0\r
-                                                       rx_pwr_all = -24 + 2*(7-VGA_idx); //VGA_idx = 7~0\r
-                                               break;\r
-                                       case 2:\r
-                                               if(cck_highpwr)\r
-                                                       rx_pwr_all = -12 + 2*(5-VGA_idx); //VGA_idx = 5~0\r
-                                               else\r
-                                                       rx_pwr_all = -6+ 2*(5-VGA_idx);\r
-                                               break;\r
-                                       case 1:\r
-                                                       rx_pwr_all = 8-2*VGA_idx;\r
-                                               break;\r
-                                       case 0:\r
-                                                       rx_pwr_all = 14-2*VGA_idx;\r
-                                               break;\r
-                                       default:\r
-                                               //DbgPrint("CCK Exception default\n");\r
-                                               break;\r
-                               }\r
-                               rx_pwr_all += 6;\r
-\r
-                               //2012.10.08 LukeLee: Modify for 92E CCK RSSI\r
-                               if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
-                                       rx_pwr_all += 10;\r
-                               \r
-                               PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
-                               if(cck_highpwr == FALSE)\r
-                               {\r
-                                       if(PWDB_ALL >= 80)\r
-                                               PWDB_ALL = ((PWDB_ALL-80)<<1)+((PWDB_ALL-80)>>1)+80;\r
-                                       else if((PWDB_ALL <= 78) && (PWDB_ALL >= 20))\r
-                                               PWDB_ALL += 3;\r
-                                       if(PWDB_ALL>100)\r
-                                               PWDB_ALL = 100;\r
-                               }\r
-                       }\r
-                       else if(pDM_Odm->SupportICType & (ODM_RTL8723B))\r
-                       {\r
-#if (RTL8723B_SUPPORT == 1)                    \r
-                               rx_pwr_all = odm_CCKRSSI_8723B(LNA_idx,VGA_idx);\r
-                               PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
-                               if(PWDB_ALL>100)\r
-                                       PWDB_ALL = 100; \r
-#endif                         \r
-                       }\r
-               }               \r
-               else\r
-               {\r
-                       if(!cck_highpwr)\r
-                       {                       \r
-                               report =( cck_agc_rpt & 0xc0 )>>6;\r
-                               switch(report)\r
-                               {\r
-                                       // 03312009 modified by cosa\r
-                                       // Modify the RF RNA gain value to -40, -20, -2, 14 by Jenyu's suggestion\r
-                                       // Note: different RF with the different RNA gain.\r
-                                       case 0x3:\r
-                                               rx_pwr_all = -46 - (cck_agc_rpt & 0x3e);\r
-                                               break;\r
-                                       case 0x2:\r
-                                               rx_pwr_all = -26 - (cck_agc_rpt & 0x3e);\r
-                                               break;\r
-                                       case 0x1:\r
-                                               rx_pwr_all = -12 - (cck_agc_rpt & 0x3e);\r
-                                               break;\r
-                                       case 0x0:\r
-                                               rx_pwr_all = 16 - (cck_agc_rpt & 0x3e);\r
-                                               break;\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               //report = pDrvInfo->cfosho[0] & 0x60;                  \r
-                               //report = pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a& 0x60;\r
-                               \r
-                               report = (cck_agc_rpt & 0x60)>>5;\r
-                               switch(report)\r
-                               {\r
-                                       case 0x3:\r
-                                               rx_pwr_all = -46 - ((cck_agc_rpt & 0x1f)<<1) ;\r
-                                               break;\r
-                                       case 0x2:\r
-                                               rx_pwr_all = -26 - ((cck_agc_rpt & 0x1f)<<1);\r
-                                               break;\r
-                                       case 0x1:\r
-                                               rx_pwr_all = -12 - ((cck_agc_rpt & 0x1f)<<1) ;\r
-                                               break;\r
-                                       case 0x0:\r
-                                               rx_pwr_all = 16 - ((cck_agc_rpt & 0x1f)<<1) ;\r
-                                               break;\r
-                               }\r
-                       }\r
-\r
-                       PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
-\r
-                       //Modification for ext-LNA board\r
-                       if(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA))\r
-                       {\r
-                               if((cck_agc_rpt>>7) == 0){\r
-                                       PWDB_ALL = (PWDB_ALL>94)?100:(PWDB_ALL +6);\r
-                               }\r
-                               else    \r
-                          {\r
-                                       if(PWDB_ALL > 38)\r
-                                               PWDB_ALL -= 16;\r
-                                       else\r
-                                               PWDB_ALL = (PWDB_ALL<=16)?(PWDB_ALL>>2):(PWDB_ALL -12);\r
-                               }             \r
-\r
-                               //CCK modification\r
-                               if(PWDB_ALL > 25 && PWDB_ALL <= 60)\r
-                                       PWDB_ALL += 6;\r
-                               //else if (PWDB_ALL <= 25)\r
-                               //      PWDB_ALL += 8;\r
-                       }\r
-                       else//Modification for int-LNA board\r
-                       {\r
-                               if(PWDB_ALL > 99)\r
-                                       PWDB_ALL -= 8;\r
-                               else if(PWDB_ALL > 50 && PWDB_ALL <= 68)\r
-                                       PWDB_ALL += 4;\r
-                       }\r
-               }\r
-       \r
-               pPhyInfo->RxPWDBAll = PWDB_ALL;\r
-#if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
-               pPhyInfo->BTRxRSSIPercentage = PWDB_ALL;\r
-               pPhyInfo->RecvSignalPower = rx_pwr_all;\r
-#endif         \r
-               //\r
-               // (3) Get Signal Quality (EVM)\r
-               //\r
-               //if(pPktinfo->bPacketMatchBSSID)\r
-               {\r
-                       u1Byte  SQ,SQ_rpt;                      \r
-                       \r
-                       if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
-                               (pDM_Odm->PatchID==RT_CID_819x_Lenovo)){\r
-                               SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,0,0);\r
-                       }\r
-                       else if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
-                               (pDM_Odm->PatchID==RT_CID_819x_Acer))\r
-                       {\r
-                               SQ = odm_SQ_process_patch_RT_CID_819x_Acer(pDM_Odm,isCCKrate,PWDB_ALL,0,0);\r
-                       }\r
-                       else if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest){\r
-                               SQ = 100;\r
-                       }\r
-                       else{                                           \r
-                               SQ_rpt = pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all;\r
-                                       \r
-                               if(SQ_rpt > 64)\r
-                                       SQ = 0;\r
-                               else if (SQ_rpt < 20)\r
-                                       SQ = 100;\r
-                               else\r
-                                       SQ = ((64-SQ_rpt) * 100) / 44;\r
-                       \r
-                       }\r
-                       \r
-                       //DbgPrint("cck SQ = %d\n", SQ);\r
-                       pPhyInfo->SignalQuality = SQ;\r
-                       pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = SQ;\r
-                       pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
-               }\r
-       }\r
-       else //is OFDM rate\r
-       {\r
-               pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
-\r
-               // \r
-               // (1)Get RSSI for HT rate\r
-               //\r
-               \r
-                for(i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX; i++)   \r
-               {\r
-                       // 2008/01/30 MH we will judge RF RX path now.\r
-                       if (pDM_Odm->RFPathRxEnable & BIT(i))\r
-                               rf_rx_num++;\r
-                       //else\r
-                               //continue;\r
-\r
-                       rx_pwr[i] = ((pPhyStaRpt->path_agc[i].gain& 0x3F)*2) - 110;\r
-\r
-\r
-               #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-                       pPhyInfo->RxPwr[i] = rx_pwr[i];\r
-               #endif  \r
-\r
-                       /* Translate DBM to percentage. */\r
-                       RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);\r
-                       total_rssi += RSSI;\r
-                       //RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));\r
-\r
-                       //Modification for ext-LNA board\r
-                       if(pDM_Odm->SupportICType&ODM_RTL8192C)\r
-                       {       \r
-                               if(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA))\r
-                               {\r
-                                       if((pPhyStaRpt->path_agc[i].trsw) == 1)\r
-                                               RSSI = (RSSI>94)?100:(RSSI +6);\r
-                                       else\r
-                                               RSSI = (RSSI<=16)?(RSSI>>3):(RSSI -16);\r
-\r
-                                       if((RSSI <= 34) && (RSSI >=4))\r
-                                               RSSI -= 4;\r
-                               }               \r
-                       }\r
-               \r
-                       pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;\r
-\r
-               #if (DM_ODM_SUPPORT_TYPE &  (/*ODM_WIN|*/ODM_CE|ODM_AP|ODM_ADSL))\r
-                       //Get Rx snr value in DB                \r
-                       pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = (s4Byte)(pPhyStaRpt->path_rxsnr[i]/2);\r
-               #endif\r
-               \r
-                       /* Record Signal Strength for next packet */\r
-                       //if(pPktinfo->bPacketMatchBSSID)\r
-                       {                               \r
-                               if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
-                                       (pDM_Odm->PatchID==RT_CID_819x_Lenovo))\r
-                               {\r
-                                       if(i==ODM_RF_PATH_A)\r
-                                               pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,i,RSSI);\r
-                               \r
-                               }               \r
-                               else if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
-                                       (pDM_Odm->PatchID==RT_CID_819x_Acer))\r
-                               {\r
-                                       pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Acer(pDM_Odm,isCCKrate,PWDB_ALL,0,RSSI);\r
-                               }       \r
-                               \r
-                       }\r
-               }\r
-               \r
-               \r
-               //\r
-               // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)\r
-               //\r
-               rx_pwr_all = (((pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all) >> 1 )& 0x7f) -110;             \r
-               \r
-               PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);  \r
-               //RT_DISP(FRX, RX_PHY_SS, ("PWDB_ALL=%d\n",PWDB_ALL));          \r
-       \r
-               pPhyInfo->RxPWDBAll = PWDB_ALL;\r
-               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));\r
-       #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
-               pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT;\r
-               pPhyInfo->RxPower = rx_pwr_all;\r
-               pPhyInfo->RecvSignalPower = rx_pwr_all;\r
-       #endif\r
-               \r
-               if((pDM_Odm->SupportPlatform == ODM_WIN) &&(pDM_Odm->PatchID==19)){\r
-                       //do nothing    \r
-               }else if((pDM_Odm->SupportPlatform == ODM_WIN) &&(pDM_Odm->PatchID==25)){\r
-                       //do nothing    \r
-               }\r
-               else{//pMgntInfo->CustomerID != RT_CID_819x_Lenovo\r
-                       //\r
-                       // (3)EVM of HT rate\r
-                       //\r
-                       if(pPktinfo->DataRate >=DESC_RATEMCS8 && pPktinfo->DataRate <=DESC_RATEMCS15)\r
-                               Max_spatial_stream = 2; //both spatial stream make sense\r
-                       else\r
-                               Max_spatial_stream = 1; //only spatial stream 1 makes sense\r
-\r
-                       for(i=0; i<Max_spatial_stream; i++)\r
-                       {\r
-                               // Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment\r
-                               // fill most significant bit to "zero" when doing shifting operation which may change a negative \r
-                               // value to positive one, then the dbm value (which is supposed to be negative)  is not correct anymore.                        \r
-                               EVM = odm_EVMdbToPercentage( (pPhyStaRpt->stream_rxevm[i] ));   //dbm\r
-\r
-                               //RT_DISP(FRX, RX_PHY_SQ, ("RXRATE=%x RXEVM=%x EVM=%s%d\n", \r
-                               //GET_RX_STATUS_DESC_RX_MCS(pDesc), pDrvInfo->rxevm[i], "%", EVM));\r
-                               \r
-                               //if(pPktinfo->bPacketMatchBSSID)\r
-                               {\r
-                                       if(i==ODM_RF_PATH_A) // Fill value in RFD, Get the first spatial stream only\r
-                                       {                                               \r
-                                               pPhyInfo->SignalQuality = (u1Byte)(EVM & 0xff);\r
-                                       }                                       \r
-                                       pPhyInfo->RxMIMOSignalQuality[i] = (u1Byte)(EVM & 0xff);\r
-                               }\r
-                       }\r
-               }\r
-\r
-               ODM_ParsingCFO(pDM_Odm, pPktinfo, pPhyStaRpt->path_cfotail);\r
-               \r
-       }\r
-#if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
-       //UI BSS List signal strength(in percentage), make it good looking, from 0~100.\r
-       //It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp().\r
-       if(isCCKrate)\r
-       {               \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-               // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
-               pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));//PWDB_ALL;\r
-#else\r
-#ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING\r
-               pPhyInfo->SignalStrength = (u1Byte)PWDB_ALL;\r
-#else\r
-               pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));//PWDB_ALL;\r
-#endif\r
-#endif\r
-       }\r
-       else\r
-       {       \r
-               if (rf_rx_num != 0)\r
-               {                       \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-                       // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
-                       pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));//PWDB_ALL;\r
-#else\r
-#ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING\r
-                       total_rssi/=rf_rx_num;\r
-                       pPhyInfo->SignalStrength = (u1Byte)total_rssi;\r
-#else\r
-                       pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi/=rf_rx_num));\r
-#endif\r
-#endif\r
-               }\r
-       }\r
-#endif\r
-\r
-       //DbgPrint("isCCKrate = %d, pPhyInfo->RxPWDBAll = %d, pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a = 0x%x\n", \r
-               //isCCKrate, pPhyInfo->RxPWDBAll, pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a);\r
-\r
-       //For 92C/92D HW (Hybrid) Antenna Diversity\r
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))      \r
-       pDM_SWAT_Table->antsel = pPhyStaRpt->ant_sel;\r
-       //For 88E HW Antenna Diversity\r
-       pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->ant_sel;\r
-       pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->ant_sel_b;\r
-       pDM_Odm->DM_FatTable.antsel_rx_keep_2 = pPhyStaRpt->antsel_rx_keep_2;\r
-#endif\r
-}\r
-\r
-#if    ODM_IC_11AC_SERIES_SUPPORT\r
-\r
-VOID\r
-odm_RxPhyStatusJaguarSeries_Parsing(\r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       OUT             PODM_PHY_INFO_T                 pPhyInfo,               \r
-       IN              pu1Byte                                         pPhyStatus,\r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
-       )\r
-{                                                      \r
-       u1Byte                          i, Max_spatial_stream;\r
-       s1Byte                          rx_pwr[4], rx_pwr_all=0;\r
-       u1Byte                          EVM = 0, EVMdbm, PWDB_ALL = 0, PWDB_ALL_BT;\r
-       u1Byte                          RSSI, total_rssi=0;\r
-       u1Byte                          isCCKrate=0;    \r
-       u1Byte                          rf_rx_num = 0;\r
-       u1Byte                          cck_highpwr = 0;\r
-       u1Byte                          LNA_idx, VGA_idx;\r
-\r
-       \r
-       PPHY_STATUS_RPT_8812_T pPhyStaRpt = (PPHY_STATUS_RPT_8812_T)pPhyStatus; \r
-\r
-       if(pPktinfo->DataRate <= DESC_RATE54M)\r
-       {\r
-               switch(pPhyStaRpt->r_RFMOD){\r
-                       case 1:\r
-                               if(pPhyStaRpt->sub_chnl == 0)\r
-                                       pPhyInfo->BandWidth = 1;\r
-                               else\r
-                                       pPhyInfo->BandWidth = 0;\r
-                               break;\r
-\r
-                       case 2:\r
-                               if(pPhyStaRpt->sub_chnl == 0)\r
-                                       pPhyInfo->BandWidth = 2;\r
-                               else if(pPhyStaRpt->sub_chnl == 9 || pPhyStaRpt->sub_chnl == 10)\r
-                                       pPhyInfo->BandWidth = 1;\r
-                               else \r
-                                       pPhyInfo->BandWidth = 0;\r
-                               break;\r
-\r
-                       default:        case 0:\r
-                               pPhyInfo->BandWidth = 0;\r
-                               break;                  \r
-               }       \r
-       }\r
-\r
-       if(pPktinfo->DataRate <= DESC_RATE11M)\r
-               isCCKrate = TRUE;\r
-       else\r
-               isCCKrate = FALSE;\r
-       \r
-       pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;\r
-       pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
-\r
-\r
-       if(isCCKrate)\r
-       {\r
-               u1Byte cck_agc_rpt;\r
-               pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;\r
-               // \r
-               // (1)Hardware does not provide RSSI for CCK\r
-               // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)\r
-               //\r
-\r
-               //if(pHalData->eRFPowerState == eRfOn)\r
-                       cck_highpwr = pDM_Odm->bCckHighPower;\r
-               //else\r
-               //      cck_highpwr = FALSE;\r
-\r
-               cck_agc_rpt =  pPhyStaRpt->cfosho[0] ;\r
-               \r
-               LNA_idx = ((cck_agc_rpt & 0xE0) >>5);\r
-               VGA_idx = (cck_agc_rpt & 0x1F); \r
-               if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-               {\r
-                       switch(LNA_idx)\r
-                       {\r
-                               case 7:\r
-                                       if(VGA_idx <= 27)\r
-                                               rx_pwr_all = -100 + 2*(27-VGA_idx); //VGA_idx = 27~2\r
-                                       else\r
-                                               rx_pwr_all = -100;\r
-                                       break;\r
-                               case 6:\r
-                                               rx_pwr_all = -48 + 2*(2-VGA_idx); //VGA_idx = 2~0\r
-                                       break;\r
-                               case 5:\r
-                                               rx_pwr_all = -42 + 2*(7-VGA_idx); //VGA_idx = 7~5\r
-                                       break;\r
-                               case 4:\r
-                                               rx_pwr_all = -36 + 2*(7-VGA_idx); //VGA_idx = 7~4\r
-                                       break;\r
-                               case 3:\r
-                                               //rx_pwr_all = -28 + 2*(7-VGA_idx); //VGA_idx = 7~0\r
-                                               rx_pwr_all = -24 + 2*(7-VGA_idx); //VGA_idx = 7~0\r
-                                       break;\r
-                               case 2:\r
-                                       if(cck_highpwr)\r
-                                               rx_pwr_all = -12 + 2*(5-VGA_idx); //VGA_idx = 5~0\r
-                                       else\r
-                                               rx_pwr_all = -6+ 2*(5-VGA_idx);\r
-                                       break;\r
-                               case 1:\r
-                                               rx_pwr_all = 8-2*VGA_idx;\r
-                                       break;\r
-                               case 0:\r
-                                               rx_pwr_all = 14-2*VGA_idx;\r
-                                       break;\r
-                               default:\r
-                                       //DbgPrint("CCK Exception default\n");\r
-                                       break;\r
-                       }\r
-                       rx_pwr_all += 6;\r
-                       PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
-                       if(cck_highpwr == FALSE)\r
-                       {\r
-                               if(PWDB_ALL >= 80)\r
-                                       PWDB_ALL = ((PWDB_ALL-80)<<1)+((PWDB_ALL-80)>>1)+80;\r
-                               else if((PWDB_ALL <= 78) && (PWDB_ALL >= 20))\r
-                                       PWDB_ALL += 3;\r
-                               if(PWDB_ALL>100)\r
-                                       PWDB_ALL = 100;\r
-                       }\r
-               }\r
-               else if(pDM_Odm->SupportICType == ODM_RTL8821)\r
-               {\r
-                       s1Byte Pout = -6;\r
-                               \r
-                       switch(LNA_idx)\r
-                               {\r
-                               case 5:\r
-                                       rx_pwr_all = Pout -32 -(2*VGA_idx);\r
-                                               break;\r
-                               case 4:\r
-                                       rx_pwr_all = Pout -24 -(2*VGA_idx);\r
-                                               break;\r
-                               case 2:\r
-                                       rx_pwr_all = Pout -11 -(2*VGA_idx);\r
-                                               break;\r
-                               case 1:\r
-                                       rx_pwr_all = Pout + 5 -(2*VGA_idx);\r
-                                               break;\r
-                               case 0:\r
-                                       rx_pwr_all = Pout + 21 -(2*VGA_idx);\r
-                                               break;\r
-                               }\r
-                       PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
-               }\r
-       \r
-               pPhyInfo->RxPWDBAll = PWDB_ALL;\r
-               //if(pPktinfo->StationID == 0)\r
-               //{\r
-               //      DbgPrint("CCK: LNA_idx = %d, VGA_idx = %d, pPhyInfo->RxPWDBAll = %d\n", \r
-               //              LNA_idx, VGA_idx, pPhyInfo->RxPWDBAll);\r
-               //}\r
-#if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
-               pPhyInfo->BTRxRSSIPercentage = PWDB_ALL;\r
-               pPhyInfo->RecvSignalPower = rx_pwr_all;\r
-#endif         \r
-               //\r
-               // (3) Get Signal Quality (EVM)\r
-               //\r
-               //if(pPktinfo->bPacketMatchBSSID)\r
-               {\r
-                       u1Byte  SQ,SQ_rpt;                      \r
-                       \r
-                       if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
-                               (pDM_Odm->PatchID==RT_CID_819x_Lenovo)){\r
-                               SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,0,0);\r
-                       }\r
-                       else if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest){\r
-                               SQ = 100;\r
-                       }\r
-                       else{                                           \r
-                               SQ_rpt = pPhyStaRpt->pwdb_all;\r
-                                       \r
-                               if(SQ_rpt > 64)\r
-                                       SQ = 0;\r
-                               else if (SQ_rpt < 20)\r
-                                       SQ = 100;\r
-                               else\r
-                                       SQ = ((64-SQ_rpt) * 100) / 44;\r
-                       \r
-                       }\r
-                       \r
-                       //DbgPrint("cck SQ = %d\n", SQ);\r
-                       pPhyInfo->SignalQuality = SQ;\r
-                       pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = SQ;\r
-                       pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
-               }\r
-       }\r
-       else //is OFDM rate\r
-       {\r
-               pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
-\r
-               // \r
-               // (1)Get RSSI for OFDM rate\r
-               //\r
-               \r
-               for(i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX; i++)   \r
-               {\r
-                       // 2008/01/30 MH we will judge RF RX path now.\r
-                       //DbgPrint("pDM_Odm->RFPathRxEnable = %x\n", pDM_Odm->RFPathRxEnable);\r
-                       if (pDM_Odm->RFPathRxEnable & BIT(i))\r
-                       {                               \r
-                               rf_rx_num++;\r
-                       }\r
-                       //else\r
-                               //continue;\r
-                       //2012.05.25 LukeLee: Testchip AGC report is wrong, it should be restored back to old formula in MP chip\r
-                       //if((pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821)) && (!pDM_Odm->bIsMPChip))\r
-                               rx_pwr[i] = (pPhyStaRpt->gain_trsw[i]&0x7F) - 110;\r
-                       //else\r
-                       //      rx_pwr[i] = ((pPhyStaRpt->gain_trsw[i]& 0x3F)*2) - 110;  //OLD FORMULA\r
-\r
-               #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-                       pPhyInfo->RxPwr[i] = rx_pwr[i];\r
-               #endif  \r
-\r
-                       /* Translate DBM to percentage. */\r
-                       RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);     \r
-               \r
-                       total_rssi += RSSI;\r
-                       //RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));\r
-\r
-\r
-               \r
-                       pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;\r
-\r
-               #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE|ODM_AP|ODM_ADSL))\r
-                       //Get Rx snr value in DB                \r
-                       pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = pPhyStaRpt->rxsnr[i]/2;\r
-               #endif\r
-\r
-                       //\r
-                       // (2) CFO_short  & CFO_tail\r
-                       //                      \r
-                       pPhyInfo->Cfo_short[i] = odm_Cfo( (pPhyStaRpt->cfosho[i]) );\r
-                       pPhyInfo->Cfo_tail[i] = odm_Cfo( (pPhyStaRpt->cfotail[i]) );\r
-\r
-                       /* Record Signal Strength for next packet */\r
-                       //if(pPktinfo->bPacketMatchBSSID)\r
-                       {                               \r
-                               if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
-                                       (pDM_Odm->PatchID==RT_CID_819x_Lenovo))\r
-                               {\r
-                                       if(i==ODM_RF_PATH_A)\r
-                                               pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,i,RSSI);\r
-                               \r
-                               }\r
-                       }\r
-               }\r
-               \r
-               \r
-               //\r
-               // (3)PWDB, Average PWDB cacluated by hardware (for rate adaptive)\r
-               //\r
-               //2012.05.25 LukeLee: Testchip AGC report is wrong, it should be restored back to old formula in MP chip\r
-               if((pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821)) && (!pDM_Odm->bIsMPChip))\r
-                       rx_pwr_all = (pPhyStaRpt->pwdb_all& 0x7f) -110;\r
-               else\r
-                       rx_pwr_all = (((pPhyStaRpt->pwdb_all) >> 1 )& 0x7f) -110;        //OLD FORMULA\r
-\r
-\r
-               PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);  \r
-                       \r
-       \r
-               pPhyInfo->RxPWDBAll = PWDB_ALL;\r
-               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));\r
-       #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
-               pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT;\r
-               pPhyInfo->RxPower = rx_pwr_all;\r
-               pPhyInfo->RecvSignalPower = rx_pwr_all;\r
-       #endif\r
-\r
-               //DbgPrint("OFDM: pPhyInfo->RxPWDBAll = %d, pPhyInfo->RxMIMOSignalStrength[0] = %d, pPhyInfo->RxMIMOSignalStrength[1] = %d\n",\r
-               //      pPhyInfo->RxPWDBAll, pPhyInfo->RxMIMOSignalStrength[0], pPhyInfo->RxMIMOSignalStrength[1]);\r
-       \r
-       \r
-               if((pDM_Odm->SupportPlatform == ODM_WIN) &&(pDM_Odm->PatchID==19)){\r
-                       //do nothing    \r
-               }\r
-               else{//pMgntInfo->CustomerID != RT_CID_819x_Lenovo\r
-                       //\r
-                       // (4)EVM of OFDM rate\r
-                       //\r
-                       if(     (pPktinfo->DataRate>=DESC_RATEMCS8) &&\r
-                               (pPktinfo->DataRate <=DESC_RATEMCS15))\r
-                               Max_spatial_stream = 2;\r
-                       else if(        (pPktinfo->DataRate>=DESC_RATEVHTSS2MCS0) &&\r
-                               (pPktinfo->DataRate <=DESC_RATEVHTSS2MCS9))\r
-                               Max_spatial_stream = 2;\r
-                       else\r
-                               Max_spatial_stream = 1; \r
-\r
-                       //if(pPktinfo->bPacketMatchBSSID)\r
-                       {\r
-                               //DbgPrint("pPktinfo->DataRate = %d\n", pPktinfo->DataRate);\r
-\r
-                               for(i=0; i<Max_spatial_stream; i++)\r
-                               {\r
-                                       // Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment\r
-                                       // fill most significant bit to "zero" when doing shifting operation which may change a negative \r
-                                       // value to positive one, then the dbm value (which is supposed to be negative)  is not correct anymore.                        \r
-                                       //\r
-                                       // 2013/09/02 MH According to 8812AU test, when use RX evm the value sometimes\r
-                                       // will be incorrect and 1SS-MCS-0-7 always incorrect. Only use LSIG the evm value\r
-                                       // seems ok. This seems BB bug, we need use another way to display better SQ.\r
-                                       //\r
-                                       //if (pPktinfo->DataRate>=DESC8812_RATE6M && pPktinfo->DataRate<=DESC8812_RATE54M)\r
-                                       {\r
-                                               \r
-                                               if(i==ODM_RF_PATH_A )\r
-                                               {\r
-                                                       EVM = odm_EVMdbToPercentage( (pPhyStaRpt->sigevm ));    //dbm\r
-                                                       EVM += 20;\r
-                                                       if (EVM > 100)\r
-                                                               EVM = 100;\r
-                                               }\r
-                                       }\r
-#if 0\r
-                                       else\r
-                                       {\r
-                                               if (pPhyStaRpt->rxevm[i] == -128)\r
-                                               {\r
-                                                       pPhyStaRpt->rxevm[i] = -25;\r
-                                               }\r
-                                               EVM = odm_EVMdbToPercentage( (pPhyStaRpt->rxevm[i] ));  //dbm\r
-                                       }\r
-#endif\r
-                                       EVMdbm = odm_EVMdbm_JaguarSeries(pPhyStaRpt->rxevm[i]);\r
-                                       //RT_DISP(FRX, RX_PHY_SQ, ("RXRATE=%x RXEVM=%x EVM=%s%d\n", \r
-                                       //pPktinfo->DataRate, pPhyStaRpt->rxevm[i], "%", EVM));\r
-                                       \r
-                                       \r
-                                       {\r
-                                               if(i==ODM_RF_PATH_A) // Fill value in RFD, Get the first spatial stream only\r
-                                               {\r
-                                                       pPhyInfo->SignalQuality = EVM;\r
-                                               }                                       \r
-                                               pPhyInfo->RxMIMOSignalQuality[i] = EVM;\r
-                                               pPhyInfo->RxMIMOEVMdbm[i] = EVMdbm;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-\r
-               ODM_ParsingCFO(pDM_Odm, pPktinfo, pPhyStaRpt->cfotail);\r
-               \r
-       }\r
-       //DbgPrint("isCCKrate= %d, pPhyInfo->SignalStrength=%d % PWDB_AL=%d rf_rx_num=%d\n", isCCKrate, pPhyInfo->SignalStrength, PWDB_ALL, rf_rx_num);\r
-       \r
-#if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
-       //UI BSS List signal strength(in percentage), make it good looking, from 0~100.\r
-       //It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp().\r
-       if(isCCKrate)\r
-       {               \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-               // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
-               pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));//PWDB_ALL;\r
-#else\r
-               pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));//PWDB_ALL;\r
-#endif\r
-       }\r
-       else\r
-       {       \r
-               if (rf_rx_num != 0)\r
-               {                       \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-                       // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
-                       pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));//PWDB_ALL;\r
-#else\r
-                       pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi/=rf_rx_num));\r
-#endif\r
-               }\r
-       }\r
-#endif\r
-       pDM_Odm->RxPWDBAve = pDM_Odm->RxPWDBAve + pPhyInfo->RxPWDBAll;\r
-       \r
-       pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->antidx_anta;\r
-       pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->antidx_antb;\r
-\r
-       //DbgPrint("pPhyStaRpt->antidx_anta = %d, pPhyStaRpt->antidx_antb = %d, pPhyStaRpt->resvd_1 = %d", \r
-       //      pPhyStaRpt->antidx_anta, pPhyStaRpt->antidx_antb, pPhyStaRpt->resvd_1);\r
-\r
-       //DbgPrint("----------------------------\n");\r
-       //DbgPrint("pPktinfo->StationID=%d, pPktinfo->DataRate=0x%x\n",pPktinfo->StationID, pPktinfo->DataRate);\r
-       //DbgPrint("pPhyStaRpt->gain_trsw[0]=0x%x, pPhyStaRpt->gain_trsw[1]=0x%x, pPhyStaRpt->pwdb_all=0x%x\n",\r
-       //                      pPhyStaRpt->gain_trsw[0],pPhyStaRpt->gain_trsw[1], pPhyStaRpt->pwdb_all);\r
-       //DbgPrint("pPhyInfo->RxMIMOSignalStrength[0]=%d, pPhyInfo->RxMIMOSignalStrength[1]=%d, RxPWDBAll=%d\n",\r
-       //                      pPhyInfo->RxMIMOSignalStrength[0], pPhyInfo->RxMIMOSignalStrength[1], pPhyInfo->RxPWDBAll);\r
-\r
-}\r
-\r
-#endif\r
-\r
-VOID\r
-odm_Init_RSSIForDM(\r
-       IN OUT  PDM_ODM_T       pDM_Odm\r
-       )\r
-{\r
-\r
-}\r
-\r
-VOID\r
-odm_Process_RSSIForDM( \r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       IN              PODM_PHY_INFO_T                         pPhyInfo,\r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
-       )\r
-{\r
-       \r
-       s4Byte                  UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK, UndecoratedSmoothedOFDM, RSSI_Ave;\r
-       u1Byte                  isCCKrate=0;    \r
-       u1Byte                  RSSI_max, RSSI_min, i;\r
-       u4Byte                  OFDM_pkt=0; \r
-       u4Byte                  Weighting=0;\r
-       PSTA_INFO_T             pEntry;\r
-\r
-\r
-       if(pPktinfo->StationID == 0xFF)\r
-               return;\r
-\r
-       //\r
-       // 2012/05/30 MH/Luke.Lee Add some description \r
-       // In windows driver: AP/IBSS mode STA\r
-       //\r
-       //if (pDM_Odm->SupportPlatform == ODM_WIN)\r
-       //{\r
-       //      pEntry = pDM_Odm->pODM_StaInfo[pDM_Odm->pAidMap[pPktinfo->StationID-1]];                        \r
-       //}\r
-       //else\r
-               pEntry = pDM_Odm->pODM_StaInfo[pPktinfo->StationID];                                                    \r
-\r
-       if(!IS_STA_VALID(pEntry) ){             \r
-               return;\r
-       }\r
-       if((!pPktinfo->bPacketMatchBSSID) )\r
-       {\r
-               return;\r
-       }\r
-\r
-       if(pPktinfo->bPacketBeacon)\r
-               pDM_Odm->PhyDbgInfo.NumQryBeaconPkt++;\r
-       \r
-       isCCKrate = (pPktinfo->DataRate <= DESC_RATE11M)?TRUE :FALSE;\r
-       pDM_Odm->RxRate = pPktinfo->DataRate;\r
-       /*\r
-       if(!isCCKrate)\r
-       {\r
-               DbgPrint("OFDM: pPktinfo->StationID=%d, isCCKrate=%d, pPhyInfo->RxPWDBAll=%d\n",\r
-                       pPktinfo->StationID, isCCKrate, pPhyInfo->RxPWDBAll);\r
-       }\r
-       */\r
-\r
-       //--------------Statistic for antenna/path diversity------------------\r
-       if(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)\r
-       {\r
-               #if(defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
-                       ODM_Process_RSSIForAntDiv(pDM_Odm,pPhyInfo,pPktinfo);\r
-               #endif\r
-       }\r
-       else if(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV)\r
-       {\r
-               #if (RTL8812A_SUPPORT == 1)\r
-               if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-               {\r
-                       pPATHDIV_T      pDM_PathDiv = &pDM_Odm->DM_PathDiv;\r
-                       if(pPktinfo->bPacketToSelf || pPktinfo->bPacketMatchBSSID)\r
-                       {\r
-                               if(pPktinfo->DataRate > DESC_RATE11M)\r
-                                       ODM_PathStatistics_8812A(pDM_Odm, pPktinfo->StationID, pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A], \r
-                                                                                                                                             pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B]);\r
-                       }\r
-               }\r
-               #endif\r
-       }\r
-\r
-       //-----------------Smart Antenna Debug Message------------------//\r
-       \r
-       UndecoratedSmoothedCCK =  pEntry->rssi_stat.UndecoratedSmoothedCCK;\r
-       UndecoratedSmoothedOFDM = pEntry->rssi_stat.UndecoratedSmoothedOFDM;\r
-       UndecoratedSmoothedPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;    \r
-       \r
-       if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)\r
-       {\r
-\r
-               if(!isCCKrate)//ofdm rate\r
-               {\r
-                       if(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B] == 0){\r
-                               RSSI_Ave = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
-                               pDM_Odm->RSSI_A = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
-                               pDM_Odm->RSSI_B = 0;\r
-                       }\r
-                       else\r
-                       {\r
-                               //DbgPrint("pRfd->Status.RxMIMOSignalStrength[0] = %d, pRfd->Status.RxMIMOSignalStrength[1] = %d \n", \r
-                                       //pRfd->Status.RxMIMOSignalStrength[0], pRfd->Status.RxMIMOSignalStrength[1]);\r
-                               pDM_Odm->RSSI_A =  pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
-                               pDM_Odm->RSSI_B = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];\r
-                       \r
-                               if(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A] > pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B])\r
-                               {\r
-                                       RSSI_max = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
-                                       RSSI_min = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];\r
-                               }\r
-                               else\r
-                               {\r
-                                       RSSI_max = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];\r
-                                       RSSI_min = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
-                               }\r
-                               if((RSSI_max -RSSI_min) < 3)\r
-                                       RSSI_Ave = RSSI_max;\r
-                               else if((RSSI_max -RSSI_min) < 6)\r
-                                       RSSI_Ave = RSSI_max - 1;\r
-                               else if((RSSI_max -RSSI_min) < 10)\r
-                                       RSSI_Ave = RSSI_max - 2;\r
-                               else\r
-                                       RSSI_Ave = RSSI_max - 3;\r
-                       }\r
-                                       \r
-                       //1 Process OFDM RSSI\r
-                       if(UndecoratedSmoothedOFDM <= 0)        // initialize\r
-                       {\r
-                               UndecoratedSmoothedOFDM = pPhyInfo->RxPWDBAll;\r
-                       }\r
-                       else\r
-                       {\r
-                               if(pPhyInfo->RxPWDBAll > (u4Byte)UndecoratedSmoothedOFDM)\r
-                               {\r
-                                       UndecoratedSmoothedOFDM =       \r
-                                                       ( ((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) + \r
-                                                       (RSSI_Ave)) /(Rx_Smooth_Factor);\r
-                                       UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM + 1;\r
-                               }\r
-                               else\r
-                               {\r
-                                       UndecoratedSmoothedOFDM =       \r
-                                                       ( ((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) + \r
-                                                       (RSSI_Ave)) /(Rx_Smooth_Factor);\r
-                               }\r
-                       }                               \r
-                       \r
-                       pEntry->rssi_stat.PacketMap = (pEntry->rssi_stat.PacketMap<<1) | BIT0;                  \r
-                                                                               \r
-               }\r
-               else\r
-               {\r
-                       RSSI_Ave = pPhyInfo->RxPWDBAll;\r
-                       pDM_Odm->RSSI_A = (u1Byte) pPhyInfo->RxPWDBAll;\r
-                       pDM_Odm->RSSI_B = 0;\r
-\r
-                       //1 Process CCK RSSI\r
-                       if(UndecoratedSmoothedCCK <= 0) // initialize\r
-                       {\r
-                               UndecoratedSmoothedCCK = pPhyInfo->RxPWDBAll;\r
-                       }\r
-                       else\r
-                       {\r
-                               if(pPhyInfo->RxPWDBAll > (u4Byte)UndecoratedSmoothedCCK)\r
-                               {\r
-                                       UndecoratedSmoothedCCK =        \r
-                                                       ( ((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) + \r
-                                                       (pPhyInfo->RxPWDBAll)) /(Rx_Smooth_Factor);\r
-                                       UndecoratedSmoothedCCK = UndecoratedSmoothedCCK + 1;\r
-                               }\r
-                               else\r
-                               {\r
-                                       UndecoratedSmoothedCCK =        \r
-                                                       ( ((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) + \r
-                                                       (pPhyInfo->RxPWDBAll)) /(Rx_Smooth_Factor);\r
-                               }\r
-                       }\r
-                       pEntry->rssi_stat.PacketMap = pEntry->rssi_stat.PacketMap<<1;                   \r
-               }\r
-\r
-               //if(pEntry)\r
-               {\r
-                       //2011.07.28 LukeLee: modified to prevent unstable CCK RSSI\r
-                       if(pEntry->rssi_stat.ValidBit >= 64)\r
-                               pEntry->rssi_stat.ValidBit = 64;\r
-                       else\r
-                               pEntry->rssi_stat.ValidBit++;\r
-                       \r
-                       for(i=0; i<pEntry->rssi_stat.ValidBit; i++)\r
-                               OFDM_pkt += (u1Byte)(pEntry->rssi_stat.PacketMap>>i)&BIT0;\r
-                       \r
-                       if(pEntry->rssi_stat.ValidBit == 64)\r
-                       {\r
-                               Weighting = ((OFDM_pkt<<4) > 64)?64:(OFDM_pkt<<4);\r
-                               UndecoratedSmoothedPWDB = (Weighting*UndecoratedSmoothedOFDM+(64-Weighting)*UndecoratedSmoothedCCK)>>6;\r
-                       }\r
-                       else\r
-                       {\r
-                               if(pEntry->rssi_stat.ValidBit != 0)\r
-                                       UndecoratedSmoothedPWDB = (OFDM_pkt*UndecoratedSmoothedOFDM+(pEntry->rssi_stat.ValidBit-OFDM_pkt)*UndecoratedSmoothedCCK)/pEntry->rssi_stat.ValidBit;\r
-                               else\r
-                                       UndecoratedSmoothedPWDB = 0;\r
-                       }\r
-\r
-                       pEntry->rssi_stat.UndecoratedSmoothedCCK = UndecoratedSmoothedCCK;\r
-                       pEntry->rssi_stat.UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM;\r
-                       pEntry->rssi_stat.UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB;\r
-\r
-                       //DbgPrint("OFDM_pkt=%d, Weighting=%d\n", OFDM_pkt, Weighting);\r
-                       //DbgPrint("UndecoratedSmoothedOFDM=%d, UndecoratedSmoothedPWDB=%d, UndecoratedSmoothedCCK=%d\n", \r
-                       //      UndecoratedSmoothedOFDM, UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK);\r
-                       \r
-               }\r
-       \r
-       }\r
-}\r
-\r
-\r
-//\r
-// Endianness before calling this API\r
-//\r
-VOID\r
-ODM_PhyStatusQuery_92CSeries(\r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       OUT             PODM_PHY_INFO_T                         pPhyInfo,\r
-       IN              pu1Byte                                         pPhyStatus,     \r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
-       )\r
-{\r
-       \r
-       odm_RxPhyStatus92CSeries_Parsing(\r
-                                                       pDM_Odm,\r
-                                                       pPhyInfo,\r
-                                                       pPhyStatus,\r
-                                                       pPktinfo);\r
-\r
-       if( pDM_Odm->RSSI_test == TRUE)\r
-       {\r
-               // Select the packets to do RSSI checking for antenna switching.\r
-               if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon )\r
-               {\r
-                               /*\r
-                       #if 0//(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-                       dm_SWAW_RSSI_Check(\r
-                               Adapter, \r
-                               (tmppAdapter!=NULL)?(tmppAdapter==Adapter):TRUE,\r
-                               bPacketMatchBSSID,\r
-                               pEntry,\r
-                               pRfd);\r
-                       #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-                       // Select the packets to do RSSI checking for antenna switching.\r
-                       //odm_SwAntDivRSSICheck8192C(padapter, precvframe->u.hdr.attrib.RxPWDBAll);\r
-                       #endif\r
-                               */\r
-                               ODM_SwAntDivChkPerPktRssi(pDM_Odm,pPktinfo->StationID,pPhyInfo);\r
-               }       \r
-       }\r
-       else\r
-       {\r
-               odm_Process_RSSIForDM(pDM_Odm,pPhyInfo,pPktinfo);\r
-       }\r
-       \r
-}\r
-\r
-\r
-\r
-//\r
-// Endianness before calling this API\r
-//\r
-VOID\r
-ODM_PhyStatusQuery_JaguarSeries(\r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       OUT             PODM_PHY_INFO_T                 pPhyInfo,\r
-       IN              pu1Byte                                         pPhyStatus,     \r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
-       )\r
-{\r
-       odm_RxPhyStatusJaguarSeries_Parsing(\r
-                                                       pDM_Odm,\r
-                                                       pPhyInfo,\r
-                                                       pPhyStatus,\r
-                                                       pPktinfo);\r
-       \r
-       odm_Process_RSSIForDM(pDM_Odm,pPhyInfo,pPktinfo);\r
-}\r
-\r
-VOID\r
-ODM_PhyStatusQuery(\r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       OUT             PODM_PHY_INFO_T                         pPhyInfo,\r
-       IN              pu1Byte                                         pPhyStatus,     \r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
-       )\r
-{\r
-\r
-       if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES )\r
-       {\r
-               ODM_PhyStatusQuery_JaguarSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);\r
-       }\r
-       else\r
-       {\r
-               ODM_PhyStatusQuery_92CSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);\r
-       }\r
-}\r
-       \r
-// For future use.\r
-VOID\r
-ODM_MacStatusQuery(\r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       IN              pu1Byte                                         pMacStatus,\r
-       IN              u1Byte                                          MacID,  \r
-       IN              BOOLEAN                                         bPacketMatchBSSID,\r
-       IN              BOOLEAN                                         bPacketToSelf,\r
-       IN              BOOLEAN                                         bPacketBeacon\r
-       )\r
-{\r
-       // 2011/10/19 Driver team will handle in the future.\r
-       \r
-}\r
-\r
-\r
-//\r
-// If you want to add a new IC, Please follow below template and generate a new one.\r
-// \r
-//\r
-\r
-HAL_STATUS\r
-ODM_ConfigRFWithHeaderFile(\r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      ODM_RF_Config_Type              ConfigType,\r
-       IN      ODM_RF_RADIO_PATH_E     eRFPath\r
-    )\r
-{\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-\r
-   ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
-                               ("===>ODM_ConfigRFWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
-    ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
-                               ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
-                               pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
-\r
-#if (RTL8723A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
-       {\r
-               if(ConfigType == CONFIG_RF_RADIO) {\r
-                       if(eRFPath == ODM_RF_PATH_A)\r
-                               READ_AND_CONFIG_MP(8723A,_RadioA);\r
-               }\r
-       }\r
-#endif\r
-\r
-#if (RTL8188E_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               if(ConfigType == CONFIG_RF_RADIO) {\r
-                       if(eRFPath == ODM_RF_PATH_A)\r
-                                       READ_AND_CONFIG_MP(8188E,_RadioA);\r
-               }\r
-               else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
-                       READ_AND_CONFIG_MP(8188E,_TXPWR_LMT);\r
-               }\r
-       }\r
-#endif\r
-\r
-#if (RTL8812A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8812)\r
-       {\r
-               if(ConfigType == CONFIG_RF_RADIO) {\r
-                       if(eRFPath == ODM_RF_PATH_A)\r
-                       {\r
-                               READ_AND_CONFIG(8812A,_RadioA);\r
-                       }\r
-                       else if(eRFPath == ODM_RF_PATH_B)\r
-                       {\r
-                               READ_AND_CONFIG(8812A,_RadioB);\r
-                       }\r
-               }\r
-               else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
-                       READ_AND_CONFIG(8812A,_TXPWR_LMT);\r
-               }\r
-       }\r
-#endif\r
-\r
-#if (RTL8821A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               if(ConfigType == CONFIG_RF_RADIO) {\r
-                       if(eRFPath == ODM_RF_PATH_A)\r
-                       {\r
-                               READ_AND_CONFIG_MP(8821A,_RadioA);\r
-                       }\r
-               }\r
-               else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
-                       \r
-                       if (pDM_Odm->SupportInterface == ODM_ITRF_USB) {\r
-                               if (pDM_Odm->ExtPA5G || pDM_Odm->ExtLNA5G)\r
-                                       READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8811AU_FEM);\r
-                               else\r
-                                       READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8811AU_IPA);                                \r
-                       } else {\r
-                               READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8821A);                     \r
-                       }\r
-               }\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("<===8821_ODM_ConfigRFWithHeaderFile\n"));\r
-       }\r
-#endif\r
-\r
-#if (RTL8723B_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {\r
-               if(ConfigType == CONFIG_RF_RADIO) {\r
-                       READ_AND_CONFIG(8723B,_RadioA);\r
-               }\r
-               else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
-                       READ_AND_CONFIG(8723B,_TXPWR_LMT);\r
-               }\r
-       }\r
-#endif\r
-\r
-#if (RTL8192E_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
-               if(ConfigType == CONFIG_RF_RADIO) {\r
-                       if(eRFPath == ODM_RF_PATH_A)\r
-                               READ_AND_CONFIG_MP(8192E,_RadioA);\r
-                       else if(eRFPath == ODM_RF_PATH_B)\r
-                               READ_AND_CONFIG_MP(8192E,_RadioB);\r
-               }\r
-               else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
-                       READ_AND_CONFIG_MP(8192E,_TXPWR_LMT);\r
-               }\r
-       }\r
-#endif\r
-\r
-#if (RTL8814A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
-       {\r
-               /*\r
-               if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
-                       READ_AND_CONFIG(8813A,_TXPWR_LMT);\r
-               }\r
-               */              \r
-       }\r
-#endif\r
-       \r
-       return HAL_STATUS_SUCCESS;\r
-}\r
-\r
-HAL_STATUS\r
-ODM_ConfigRFWithTxPwrTrackHeaderFile(\r
-       IN      PDM_ODM_T                       pDM_Odm\r
-    )\r
-{\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
-                                ("===>ODM_ConfigRFWithTxPwrTrackHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
-                                ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
-                                pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
-\r
-       if(0)\r
-       {\r
-       }\r
-#if (RTL8821A_SUPPORT == 1) \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
-                       READ_AND_CONFIG_MP(8821A,_TxPowerTrack_PCIE);\r
-               else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
-                       READ_AND_CONFIG_MP(8821A,_TxPowerTrack_USB);\r
-               else\r
-                       READ_AND_CONFIG_MP(8821A,_TxPowerTrack_PCIE);\r
-       }\r
-#endif\r
-#if (RTL8812A_SUPPORT == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-       {\r
-               if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
-                       READ_AND_CONFIG(8812A,_TxPowerTrack_PCIE);\r
-               else if (pDM_Odm->SupportInterface == ODM_ITRF_USB) {\r
-                       if (pDM_Odm->RFEType == 3 && pDM_Odm->bIsMPChip) \r
-                               READ_AND_CONFIG_MP(8812A,_TxPowerTrack_RFE3);   \r
-                       else\r
-                               READ_AND_CONFIG(8812A,_TxPowerTrack_USB);       \r
-               }\r
-               \r
-       }\r
-#endif\r
-#if (RTL8192E_SUPPORT == 1) \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
-               if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
-                       READ_AND_CONFIG_MP(8192E,_TxPowerTrack_PCIE);\r
-               else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
-                       READ_AND_CONFIG_MP(8192E,_TxPowerTrack_USB); \r
-       }\r
-#endif\r
-#if RTL8723B_SUPPORT   \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {\r
-               if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
-                       READ_AND_CONFIG(8723B,_TxPowerTrack_PCIE);\r
-               else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
-                       READ_AND_CONFIG(8723B,_TxPowerTrack_USB);\r
-               else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
-                       READ_AND_CONFIG(8723B,_TxPowerTrack_SDIO);                      \r
-       }\r
-#endif \r
-#if RTL8188E_SUPPORT   \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
-                       READ_AND_CONFIG_MP(8188E,_TxPowerTrack_PCIE);\r
-               else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
-                       READ_AND_CONFIG_MP(8188E,_TxPowerTrack_USB);\r
-               else\r
-                       READ_AND_CONFIG_MP(8188E,_TxPowerTrack_PCIE);\r
-       }\r
-#endif\r
-\r
-       return HAL_STATUS_SUCCESS;\r
-}\r
-\r
-HAL_STATUS\r
-ODM_ConfigBBWithHeaderFile(\r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      ODM_BB_Config_Type              ConfigType\r
-       )\r
-{\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
-       PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);       \r
-#endif\r
-#endif\r
-       \r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
-                               ("===>ODM_ConfigBBWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
-    ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
-                               ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
-                               pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
-\r
-#if (RTL8723A_SUPPORT == 1) \r
-    if(pDM_Odm->SupportICType == ODM_RTL8723A)\r
-       {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
-                       READ_AND_CONFIG_MP(8723A,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
-                       READ_AND_CONFIG_MP(8723A,_AGC_TAB);\r
-               }\r
-       }               \r
-#endif\r
-\r
-#if (RTL8188E_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
-                               READ_AND_CONFIG_MP(8188E,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
-                               READ_AND_CONFIG_MP(8188E,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
-                       READ_AND_CONFIG_MP(8188E,_PHY_REG_PG);\r
-               }\r
-       }\r
-#endif\r
-\r
-#if (RTL8812A_SUPPORT == 1) \r
-       if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-       {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
-                       READ_AND_CONFIG(8812A,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
-                       READ_AND_CONFIG(8812A,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
-                       if (pDM_Odm->RFEType == 3 && pDM_Odm->bIsMPChip) \r
-                               READ_AND_CONFIG_MP(8812A,_PHY_REG_PG_ASUS);\r
-#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
-                       else if (pMgntInfo->CustomerID == RT_CID_WNC_NEC && pDM_Odm->bIsMPChip) \r
-                               READ_AND_CONFIG_MP(8812A,_PHY_REG_PG_NEC);\r
-#endif                 \r
-                       else\r
-                               READ_AND_CONFIG(8812A,_PHY_REG_PG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_MP)\r
-               {\r
-                       READ_AND_CONFIG_MP(8812A,_PHY_REG_MP);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB_DIFF)\r
-               {\r
-                       if ((36 <= *pDM_Odm->pChannel)  && (*pDM_Odm->pChannel  <= 64)) \r
-                               AGC_DIFF_CONFIG_MP(8812A,LB);\r
-                       else if (100 <= *pDM_Odm->pChannel) \r
-                               AGC_DIFF_CONFIG_MP(8812A,HB);\r
-               }\r
-       }               \r
-#endif\r
-\r
-#if (RTL8821A_SUPPORT == 1) \r
-       if(pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
-                       READ_AND_CONFIG_MP(8821A,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
-                       READ_AND_CONFIG_MP(8821A,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
-                       READ_AND_CONFIG_MP(8821A,_PHY_REG_PG);\r
-               }\r
-       }\r
-#endif\r
-#if (RTL8723B_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {\r
-\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
-                       READ_AND_CONFIG(8723B,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
-                       READ_AND_CONFIG(8723B,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
-                       READ_AND_CONFIG(8723B,_PHY_REG_PG);\r
-               }\r
-       }\r
-#endif\r
-#if (RTL8192E_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
-\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
-                       READ_AND_CONFIG_MP(8192E,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
-                       READ_AND_CONFIG_MP(8192E,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
-                       READ_AND_CONFIG_MP(8192E,_PHY_REG_PG);\r
-               }\r
-       }\r
-#endif\r
-#if (RTL8814A_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
-       {\r
-\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
-                       READ_AND_CONFIG(8813A,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
-                       READ_AND_CONFIG(8813A,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
-                       //READ_AND_CONFIG(8813A,_PHY_REG_PG);\r
-               }\r
-       }\r
-#endif\r
-       return HAL_STATUS_SUCCESS; \r
-}                 \r
-\r
-HAL_STATUS\r
-ODM_ConfigMACWithHeaderFile(\r
-       IN      PDM_ODM_T       pDM_Odm\r
-       )\r
-{\r
-#if (DM_ODM_SUPPORT_TYPE &  (ODM_CE|ODM_WIN))  \r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-#endif\r
-       u1Byte result = HAL_STATUS_SUCCESS;\r
-\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
-                               ("===>ODM_ConfigMACWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
-    ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
-                               ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
-                               pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
-       \r
-#if (RTL8723A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
-       {\r
-               READ_AND_CONFIG_MP(8723A,_MAC_REG);\r
-       }\r
-#endif\r
-#if (RTL8188E_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               READ_AND_CONFIG_MP(8188E,_MAC_REG);\r
-       }\r
-#endif\r
-#if (RTL8812A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8812)\r
-       {\r
-               READ_AND_CONFIG(8812A,_MAC_REG);\r
-       }\r
-#endif\r
-#if (RTL8821A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               READ_AND_CONFIG_MP(8821A,_MAC_REG);\r
-\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("<===8821_ODM_ConfigMACwithHeaderFile\n"));\r
-       }\r
-#endif\r
-#if (RTL8723B_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {\r
-               READ_AND_CONFIG(8723B,_MAC_REG);\r
-       }\r
-#endif\r
-#if (RTL8192E_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
-               READ_AND_CONFIG_MP(8192E,_MAC_REG);\r
-       }\r
-#endif\r
-\r
-       return result;\r
-} \r
-\r
-HAL_STATUS\r
-ODM_ConfigFWWithHeaderFile(\r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      ODM_FW_Config_Type      ConfigType,\r
-       OUT u1Byte                              *pFirmware,\r
-       OUT u4Byte                              *pSize\r
-       )\r
-{\r
-\r
-#if (RTL8188E_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
-                       READ_FIRMWARE_MP(8188E,_FW_NIC_T);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
-                       READ_FIRMWARE_MP(8188E,_FW_WoWLAN_T);\r
-               }\r
-               else if(ConfigType == CONFIG_FW_NIC_2)\r
-               {\r
-                       READ_FIRMWARE_MP(8188E,_FW_NIC_S);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN_2)\r
-               {\r
-                       READ_FIRMWARE_MP(8188E,_FW_WoWLAN_S);\r
-               }\r
-       }\r
-#endif\r
-#if (RTL8723B_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
-                       READ_FIRMWARE(8723B,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
-                       READ_FIRMWARE(8723B,_FW_WoWLAN);\r
-               }\r
-#ifdef CONFIG_AP_WOWLAN\r
-               else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
-               {\r
-                       READ_FIRMWARE(8723B,_FW_AP_WoWLAN);\r
-               }\r
-#endif\r
-               else if (ConfigType == CONFIG_FW_BT)\r
-               {\r
-                       READ_FIRMWARE_MP(8723B,_FW_BT);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_MP)\r
-               {\r
-                       READ_FIRMWARE_MP(8723B,_FW_MP);\r
-               }\r
-       }\r
-#endif\r
-#if (RTL8812A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8812)\r
-       {\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
-                       READ_FIRMWARE(8812A,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
-                       READ_FIRMWARE(8812A,_FW_WoWLAN);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_BT)\r
-               {\r
-                       READ_FIRMWARE(8812A,_FW_NIC_BT);\r
-               }\r
-\r
-       }\r
-#endif\r
-#if (RTL8821A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
-                       READ_FIRMWARE_MP(8821A,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
-                       READ_FIRMWARE_MP(8821A,_FW_WoWLAN);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_BT)\r
-               {\r
-                       READ_FIRMWARE_MP(8821A,_FW_NIC_BT);\r
-               }\r
-       }\r
-#endif\r
-#if (RTL8192E_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
-                       READ_FIRMWARE_MP(8192E,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
-                       READ_FIRMWARE_MP(8192E,_FW_WoWLAN);\r
-               }\r
-#ifdef CONFIG_AP_WOWLAN\r
-               else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
-               {\r
-                       READ_FIRMWARE_MP(8192E,_FW_AP_WoWLAN);\r
-               }\r
-#endif\r
-\r
-       }\r
-#endif\r
-       return HAL_STATUS_SUCCESS;    \r
-} \r
-\r
-\r
-u4Byte \r
-ODM_GetHWImgVersion(\r
-       IN      PDM_ODM_T       pDM_Odm\r
-       )\r
-{\r
-    u4Byte  Version=0;\r
-\r
-#if (RTL8723A_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
-               Version = GET_VERSION_MP(8723A,_MAC_REG);\r
-#endif\r
-\r
-#if (RTL8188E_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
-               Version = GET_VERSION_MP(8188E,_MAC_REG);\r
-#endif\r
-\r
-#if (RTL8821A_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8821)\r
-               Version = GET_VERSION_MP(8821A,_MAC_REG);\r
-#endif\r
-\r
-#if (RTL8192E_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
-               Version = GET_VERSION_MP(8192E,_MAC_REG);\r
-#endif\r
-\r
-#if (RTL8812A_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8812)\r
-               Version = GET_VERSION_MP(8812A,_MAC_REG);\r
-#endif\r
-\r
-       return Version;\r
-}\r
-\r
-\r
-\r
-\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_HWConfig.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_HWConfig.h
deleted file mode 100755 (executable)
index da0e5fc..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-\r
-#ifndef        __HALHWOUTSRC_H__\r
-#define __HALHWOUTSRC_H__\r
-\r
-\r
-/*--------------------------Define -------------------------------------------*/ \r
-//#define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)\r
-#define AGC_DIFF_CONFIG_MP(ic, band) (ODM_ReadAndConfig_MP_##ic##_AGC_TAB_DIFF(pDM_Odm, Array_MP_##ic##_AGC_TAB_DIFF_##band, \\r
-                                                                              sizeof(Array_MP_##ic##_AGC_TAB_DIFF_##band)/sizeof(u4Byte)))\r
-#define AGC_DIFF_CONFIG_TC(ic, band) (ODM_ReadAndConfig_TC_##ic##_AGC_TAB_DIFF(pDM_Odm, Array_TC_##ic##_AGC_TAB_DIFF_##band, \\r
-                                                                              sizeof(Array_TC_##ic##_AGC_TAB_DIFF_##band)/sizeof(u4Byte)))\r
-\r
-#define AGC_DIFF_CONFIG(ic, band) do {\\r
-                                            if (pDM_Odm->bIsMPChip)\\r
-                                                   AGC_DIFF_CONFIG_MP(ic,band);\\r
-                                            else\\r
-                                                AGC_DIFF_CONFIG_TC(ic,band);\\r
-                                    } while(0)\r
-\r
-\r
-//============================================================\r
-// structure and define\r
-//============================================================\r
-\r
-typedef struct _Phy_Rx_AGC_Info\r
-{\r
-       #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)      \r
-               u1Byte  gain:7,trsw:1;                  \r
-       #else                   \r
-               u1Byte  trsw:1,gain:7;\r
-       #endif\r
-} PHY_RX_AGC_INFO_T,*pPHY_RX_AGC_INFO_T;\r
-\r
-typedef struct _Phy_Status_Rpt_8192cd\r
-{\r
-       PHY_RX_AGC_INFO_T path_agc[2];\r
-       u1Byte  ch_corr[2];                                                                     \r
-       u1Byte  cck_sig_qual_ofdm_pwdb_all;\r
-       u1Byte  cck_agc_rpt_ofdm_cfosho_a;\r
-       u1Byte  cck_rpt_b_ofdm_cfosho_b;\r
-       u1Byte  rsvd_1;//ch_corr_msb;\r
-       u1Byte  noise_power_db_msb;\r
-       s1Byte  path_cfotail[2];        \r
-       u1Byte  pcts_mask[2];   \r
-       s1Byte  stream_rxevm[2];        \r
-       u1Byte  path_rxsnr[2];\r
-       u1Byte  noise_power_db_lsb;\r
-       u1Byte  rsvd_2[3];\r
-       u1Byte  stream_csi[2];\r
-       u1Byte  stream_target_csi[2];\r
-       s1Byte  sig_evm;\r
-       u1Byte  rsvd_3; \r
-\r
-#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)     \r
-       u1Byte  antsel_rx_keep_2:1;     //ex_intf_flg:1;\r
-       u1Byte  sgi_en:1;\r
-       u1Byte  rxsc:2; \r
-       u1Byte  idle_long:1;\r
-       u1Byte  r_ant_train_en:1;\r
-       u1Byte  ant_sel_b:1;\r
-       u1Byte  ant_sel:1;      \r
-#else  // _BIG_ENDIAN_ \r
-       u1Byte  ant_sel:1;      \r
-       u1Byte  ant_sel_b:1;\r
-       u1Byte  r_ant_train_en:1;\r
-       u1Byte  idle_long:1;\r
-       u1Byte  rxsc:2;\r
-       u1Byte  sgi_en:1;\r
-       u1Byte  antsel_rx_keep_2:1;     //ex_intf_flg:1;\r
-#endif\r
-} PHY_STATUS_RPT_8192CD_T,*PPHY_STATUS_RPT_8192CD_T;\r
-\r
-\r
-typedef struct _Phy_Status_Rpt_8812\r
-{\r
-#if 0\r
-       PHY_RX_AGC_INFO_T path_agc[2];\r
-       u1Byte  ch_num[2];                                                                      \r
-       u1Byte  cck_sig_qual_ofdm_pwdb_all;\r
-       u1Byte  cck_agc_rpt_ofdm_cfosho_a;\r
-       u1Byte  cck_bb_pwr_ofdm_cfosho_b;\r
-       u1Byte    cck_rx_path;  //CCK_RX_PATH [3:0] (with regA07[3:0] definition)       \r
-       u1Byte  rsvd_1; \r
-       u1Byte  path_cfotail[2];        \r
-       u1Byte  pcts_mask[2];   \r
-       s1Byte  stream_rxevm[2];        \r
-       u1Byte  path_rxsnr[2];\r
-       u1Byte  rsvd_2[2];      \r
-       u1Byte  stream_snr[2];  \r
-       u1Byte  stream_csi[2];\r
-       u1Byte  rsvd_3[2];\r
-       s1Byte  sig_evm;\r
-       u1Byte  rsvd_4; \r
-#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)     \r
-       u1Byte  antidx_anta:3;\r
-       u1Byte  antidx_antb:3;\r
-       u1Byte  rsvd_5:2;\r
-#else  // _BIG_ENDIAN_ \r
-       u1Byte  rsvd_5:2;\r
-       u1Byte  antidx_antb:3;\r
-       u1Byte  antidx_anta:3;  \r
-#endif\r
-#endif\r
-\r
-       //2012.05.24 LukeLee: This structure should take big/little endian in consideration later.....\r
-       \r
-       //DWORD 0\r
-       u1Byte                  gain_trsw[2];\r
-#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)     \r
-       u2Byte                  chl_num:10;\r
-       u2Byte                  sub_chnl:4;\r
-       u2Byte                  r_RFMOD:2;\r
-#else  // _BIG_ENDIAN_ \r
-       u2Byte                  r_RFMOD:2;\r
-       u2Byte                  sub_chnl:4;\r
-       u2Byte                  chl_num:10;\r
-#endif\r
-\r
-       //DWORD 1\r
-       u1Byte                  pwdb_all;\r
-       u1Byte                  cfosho[4];      // DW 1 byte 1 DW 2 byte 0\r
-\r
-       //DWORD 2\r
-       s1Byte                  cfotail[4];     // DW 2 byte 1 DW 3 byte 0\r
-\r
-       //DWORD 3\r
-       s1Byte                  rxevm[2];       // DW 3 byte 1 DW 3 byte 2\r
-       s1Byte                  rxsnr[2];       // DW 3 byte 3 DW 4 byte 0\r
-\r
-       //DWORD 4\r
-       u1Byte                  PCTS_MSK_RPT[2];        \r
-       u1Byte                  pdsnr[2];       // DW 4 byte 3 DW 5 Byte 0\r
-\r
-       //DWORD 5\r
-       u1Byte                  csi_current[2];\r
-       u1Byte                  rx_gain_c;\r
-\r
-       //DWORD 6\r
-       u1Byte                  rx_gain_d;\r
-       s1Byte                  sigevm;\r
-       u1Byte                  resvd_0;\r
-       u1Byte                  antidx_anta:3;\r
-       u1Byte                  antidx_antb:3;\r
-       u1Byte                  resvd_1:2;\r
-} PHY_STATUS_RPT_8812_T,*PPHY_STATUS_RPT_8812_T;\r
-\r
-\r
-VOID\r
-odm_Init_RSSIForDM(\r
-       IN OUT  PDM_ODM_T       pDM_Odm\r
-       );\r
-\r
-VOID\r
-ODM_PhyStatusQuery(\r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       OUT             PODM_PHY_INFO_T                 pPhyInfo,\r
-       IN              pu1Byte                                         pPhyStatus,     \r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
-       );\r
-\r
-VOID\r
-ODM_MacStatusQuery(\r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       IN              pu1Byte                                         pMacStatus,\r
-       IN              u1Byte                                          MacID,  \r
-       IN              BOOLEAN                                         bPacketMatchBSSID,\r
-       IN              BOOLEAN                                         bPacketToSelf,\r
-       IN              BOOLEAN                                         bPacketBeacon\r
-       );\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_AP))\r
-\r
-HAL_STATUS\r
-ODM_ConfigRFWithTxPwrTrackHeaderFile(\r
-       IN      PDM_ODM_T                       pDM_Odm\r
-    );\r
-    \r
-HAL_STATUS\r
-ODM_ConfigRFWithHeaderFile(\r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      ODM_RF_Config_Type              ConfigType,\r
-       IN      ODM_RF_RADIO_PATH_E     eRFPath\r
-       );\r
-\r
-HAL_STATUS\r
-ODM_ConfigBBWithHeaderFile(\r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      ODM_BB_Config_Type              ConfigType\r
-    );\r
-\r
-HAL_STATUS\r
-ODM_ConfigMACWithHeaderFile(\r
-       IN      PDM_ODM_T       pDM_Odm\r
-    );\r
-\r
-HAL_STATUS\r
-ODM_ConfigFWWithHeaderFile(\r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      ODM_FW_Config_Type      ConfigType,\r
-       OUT u1Byte                              *pFirmware,\r
-       OUT u4Byte                              *pSize\r
-       );\r
-\r
-u4Byte \r
-ODM_GetHWImgVersion(\r
-       IN      PDM_ODM_T       pDM_Odm\r
-       );\r
-\r
-s4Byte\r
-odm_SignalScaleMapping(        \r
-       IN OUT PDM_ODM_T pDM_Odm,\r
-       IN      s4Byte CurrSig \r
-       );\r
-\r
-#endif\r
-\r
-#endif\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_NoiseMonitor.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_NoiseMonitor.c
deleted file mode 100755 (executable)
index cda06bd..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-//#include "Mp_Precomp.h"\r
-#include "odm_precomp.h"\r
-\r
-//=================================================\r
-// This function is for inband noise test utility only\r
-// To obtain the inband noise level(dbm), do the following.\r
-// 1. disable DIG and Power Saving \r
-// 2. Set initial gain = 0x1a\r
-// 3. Stop updating idle time pwer report (for driver read)\r
-//     - 0x80c[25]\r
-//\r
-//=================================================\r
-\r
-#define Valid_Min                              -35\r
-#define Valid_Max                      10\r
-#define ValidCnt                               5       \r
-\r
-s2Byte odm_InbandNoise_Monitor_NSeries(PDM_ODM_T       pDM_Odm,u8 bPauseDIG,u8 IGIValue,u32 max_time)\r
-{\r
-       u4Byte                          tmp4b;  \r
-       u1Byte                          max_rf_path=0,rf_path;  \r
-       u1Byte                          reg_c50, reg_c58,valid_done=0;  \r
-       struct noise_level              noise_data;\r
-       u32 start  = 0,         func_start=0,   func_end = 0;\r
-\r
-       func_start = ODM_GetCurrentTime(pDM_Odm);\r
-       pDM_Odm->noise_level.noise_all = 0;\r
-       \r
-       if((pDM_Odm->RFType == ODM_1T2R) ||(pDM_Odm->RFType == ODM_2T2R))       \r
-               max_rf_path = 2;\r
-       else\r
-               max_rf_path = 1;\r
-       \r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD,("odm_DebugControlInbandNoise_Nseries() ==> \n"));\r
-\r
-       ODM_Memory_Set(pDM_Odm,&noise_data,0,sizeof(struct noise_level));\r
-       \r
-       //\r
-       // Step 1. Disable DIG && Set initial gain.\r
-       //\r
-       \r
-       if(bPauseDIG)\r
-       {\r
-               odm_PauseDIG(pDM_Odm,ODM_PAUSE_DIG,IGIValue);\r
-       }\r
-       //\r
-       // Step 2. Disable all power save for read registers\r
-       //\r
-       //dcmd_DebugControlPowerSave(pAdapter, PSDisable);\r
-\r
-       //\r
-       // Step 3. Get noise power level\r
-       //\r
-       start = ODM_GetCurrentTime(pDM_Odm);\r
-       while(1)\r
-       {\r
-               \r
-               //Stop updating idle time pwer report (for driver read)\r
-               ODM_SetBBReg(pDM_Odm, rFPGA0_TxGainStage, BIT25, 1);    \r
-               \r
-               //Read Noise Floor Report\r
-               tmp4b = ODM_GetBBReg(pDM_Odm, 0x8f8,bMaskDWord );\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD,("Noise Floor Report (0x8f8) = 0x%08x\n", tmp4b));\r
-               \r
-               //ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskByte0, TestInitialGain);\r
-               //if(max_rf_path == 2)\r
-               //      ODM_SetBBReg(pDM_Odm, rOFDM0_XBAGCCore1, bMaskByte0, TestInitialGain);\r
-               \r
-               //update idle time pwer report per 5us\r
-               ODM_SetBBReg(pDM_Odm, rFPGA0_TxGainStage, BIT25, 0);\r
-               \r
-               noise_data.value[ODM_RF_PATH_A] = (u1Byte)(tmp4b&0xff);         \r
-               noise_data.value[ODM_RF_PATH_B]  = (u1Byte)((tmp4b&0xff00)>>8);\r
-       \r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("value_a = 0x%x(%d), value_b = 0x%x(%d)\n", \r
-                       noise_data.value[ODM_RF_PATH_A], noise_data.value[ODM_RF_PATH_A], noise_data.value[ODM_RF_PATH_B], noise_data.value[ODM_RF_PATH_B]));\r
-\r
-                for(rf_path = ODM_RF_PATH_A; rf_path < max_rf_path; rf_path++) \r
-                {\r
-                       noise_data.sval[rf_path] = (s1Byte)noise_data.value[rf_path];\r
-                       noise_data.sval[rf_path] /= 2;\r
-                }      \r
-                       \r
-               \r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD,("sval_a = %d, sval_b = %d\n", \r
-                       noise_data.sval[ODM_RF_PATH_A], noise_data.sval[ODM_RF_PATH_B]));\r
-               //ODM_delay_ms(10);\r
-               //ODM_sleep_ms(10);\r
-\r
-               for(rf_path = ODM_RF_PATH_A; rf_path < max_rf_path; rf_path++) \r
-               {\r
-                       if( (noise_data.valid_cnt[rf_path] < ValidCnt) && (noise_data.sval[rf_path] < Valid_Max && noise_data.sval[rf_path] >= Valid_Min))\r
-                       {\r
-                               noise_data.valid_cnt[rf_path]++;\r
-                               noise_data.sum[rf_path] += noise_data.sval[rf_path];\r
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD,("RF_Path:%d Valid sval = %d\n", rf_path,noise_data.sval[rf_path]));\r
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD,("Sum of sval = %d, \n", noise_data.sum[rf_path]));\r
-                               if(noise_data.valid_cnt[rf_path] == ValidCnt)\r
-                               {                               \r
-                                       valid_done++;\r
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD,("After divided, RF_Path:%d ,sum = %d \n", rf_path,noise_data.sum[rf_path]));\r
-                               }                               \r
-                       \r
-                       }\r
-                       \r
-               }\r
-\r
-               //printk("####### valid_done:%d #############\n",valid_done);\r
-               if ((valid_done==max_rf_path) || (ODM_GetProgressingTime(pDM_Odm,start) > max_time))\r
-               {\r
-                       for(rf_path = ODM_RF_PATH_A; rf_path < max_rf_path; rf_path++)\r
-                       { \r
-                               //printk("%s PATH_%d - sum = %d, valid_cnt = %d \n",__FUNCTION__,rf_path,noise_data.sum[rf_path], noise_data.valid_cnt[rf_path]);\r
-                               if(noise_data.valid_cnt[rf_path])\r
-                                       noise_data.sum[rf_path] /= noise_data.valid_cnt[rf_path];               \r
-                               else\r
-                                       noise_data.sum[rf_path]  = 0;\r
-                       }\r
-                       break;\r
-               }\r
-       }\r
-       reg_c50 = (s4Byte)ODM_GetBBReg(pDM_Odm,rOFDM0_XAAGCCore1,bMaskByte0);\r
-       reg_c50 &= ~BIT7;\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD,("0x%x = 0x%02x(%d)\n", rOFDM0_XAAGCCore1, reg_c50, reg_c50));\r
-       pDM_Odm->noise_level.noise[ODM_RF_PATH_A] = -110 + reg_c50 + noise_data.sum[ODM_RF_PATH_A];\r
-       pDM_Odm->noise_level.noise_all += pDM_Odm->noise_level.noise[ODM_RF_PATH_A];\r
-               \r
-       if(max_rf_path == 2){\r
-               reg_c58 = (s4Byte)ODM_GetBBReg(pDM_Odm,rOFDM0_XBAGCCore1,bMaskByte0);\r
-               reg_c58 &= ~BIT7;\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD,("0x%x = 0x%02x(%d)\n", rOFDM0_XBAGCCore1, reg_c58, reg_c58));\r
-               pDM_Odm->noise_level.noise[ODM_RF_PATH_B] = -110 + reg_c58 + noise_data.sum[ODM_RF_PATH_B];\r
-               pDM_Odm->noise_level.noise_all += pDM_Odm->noise_level.noise[ODM_RF_PATH_B];\r
-       }\r
-       pDM_Odm->noise_level.noise_all /= max_rf_path;\r
-       \r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD,("noise_a = %d, noise_b = %d\n", \r
-               pDM_Odm->noise_level.noise[ODM_RF_PATH_A],\r
-               pDM_Odm->noise_level.noise[ODM_RF_PATH_B]));\r
-\r
-       //\r
-       // Step 4. Recover the Dig\r
-       //\r
-       if(bPauseDIG)\r
-       {\r
-               odm_PauseDIG(pDM_Odm,ODM_RESUME_DIG,IGIValue);\r
-       }       \r
-       func_end = ODM_GetProgressingTime(pDM_Odm,func_start) ; \r
-       //printk("%s noise_a = %d, noise_b = %d noise_all:%d (%d ms)\n",__FUNCTION__,\r
-       //      pDM_Odm->noise_level.noise[ODM_RF_PATH_A],\r
-       //      pDM_Odm->noise_level.noise[ODM_RF_PATH_B],\r
-       //      pDM_Odm->noise_level.noise_all,func_end);       \r
-       \r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD,("odm_DebugControlInbandNoise_Nseries() <== \n"));\r
-       return pDM_Odm->noise_level.noise_all;\r
-\r
-}\r
-s2Byte ODM_InbandNoise_Monitor(PVOID pDM_VOID,u8 bPauseDIG,u8 IGIValue,u32 max_time)\r
-{\r
-\r
-       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES )\r
-       {\r
-               //odm_InbandNoise_Monitor_JaguarSeries(pDM_Odm,bPauseDIG,IGIValue,max_time);\r
-               return 0;\r
-       }\r
-       else\r
-       {\r
-               return odm_InbandNoise_Monitor_NSeries(pDM_VOID,bPauseDIG,IGIValue,max_time);\r
-       }\r
-}\r
-\r
-\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_NoiseMonitor.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_NoiseMonitor.h
deleted file mode 100755 (executable)
index 6625be6..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- *****************************************************************************/\r
-#ifndef        __ODMNOISEMONITOR_H__\r
-#define __ODMNOISEMONITOR_H__\r
-\r
-#define        ODM_MAX_CHANNEL_NUM                                     38//14+24\r
-struct noise_level\r
-{\r
-       //u1Byte                                value_a, value_b;\r
-       u1Byte                          value[MAX_RF_PATH];\r
-       //s1Byte                                sval_a, sval_b;\r
-       s1Byte                          sval[MAX_RF_PATH];\r
-       \r
-       //s4Byte                                noise_a=0, noise_b=0,sum_a=0, sum_b=0;\r
-       //s4Byte                                noise[ODM_RF_PATH_MAX];\r
-       s4Byte                          sum[MAX_RF_PATH];\r
-       //u1Byte                                valid_cnt_a=0, valid_cnt_b=0, \r
-       u1Byte                          valid[MAX_RF_PATH];\r
-       u1Byte                          valid_cnt[MAX_RF_PATH];\r
-\r
-};\r
-\r
-\r
-typedef struct _ODM_NOISE_MONITOR_\r
-{\r
-       s1Byte                  noise[MAX_RF_PATH];\r
-       s2Byte                  noise_all;      \r
-}ODM_NOISE_MONITOR;\r
-\r
-s2Byte ODM_InbandNoise_Monitor(PVOID pDM_VOID,u8 bPauseDIG,u8 IGIValue,u32 max_time);\r
-\r
-#endif\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_PathDiv.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_PathDiv.c
deleted file mode 100755 (executable)
index f24e3c4..0000000
+++ /dev/null
@@ -1,1580 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-#include "odm_precomp.h"\r
-\r
-
-\r
-VOID
-odm_PathDiversityInit(
-       IN      PVOID   pDM_VOID\r
-)
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       if(!(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV))
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("Return: Not Support PathDiv\n"));
-               return;
-       }
-
-#if RTL8812A_SUPPORT
-
-       if(pDM_Odm->SupportICType & ODM_RTL8812)
-               ODM_PathDiversityInit_8812A(pDM_Odm);
-#endif 
-#endif
-}
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-VOID
-odm_PathDiversity(
-       IN      PVOID   pDM_VOID\r
-)
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       if(!(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV))
-       {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("Return: Not Support PathDiv\n"));
-               return;
-       }
-
-#if RTL8812A_SUPPORT
-
-       if(pDM_Odm->SupportICType & ODM_RTL8812)
-               ODM_PathDiversity_8812A(pDM_Odm);
-#endif 
-}\r
-#endif  //(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) \r
-\r
-\r
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-//\r
-// 2011/12/02 MH Copy from MP oursrc for temporarily test.
-//\r
-\r
-BOOLEAN\r
-odm_IsConnected_92C(
-       IN      PADAPTER        Adapter
-)
-{
-       PRT_WLAN_STA    pEntry;
-       PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);
-       u4Byte          i;
-       BOOLEAN         bConnected=FALSE;
-       
-       if(pMgntInfo->mAssoc)
-       {
-               bConnected = TRUE;
-       }
-       else
-       {
-               for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)
-               {
-                       if(IsAPModeExist(Adapter)  && GetFirstExtAdapter(Adapter) != NULL)
-                               pEntry = AsocEntry_EnumStation(GetFirstExtAdapter(Adapter), i);
-                       else
-                               pEntry = AsocEntry_EnumStation(GetDefaultAdapter(Adapter), i);
-
-                       if(pEntry!=NULL)
-                       {
-                               if(pEntry->bAssociated)
-                               {
-                                       bConnected = TRUE;
-                                       break;
-                               }
-                       }
-                       else
-                       {
-                               break;
-                       }
-               }
-       }
-       return  bConnected;
-}
-\r
-BOOLEAN
-ODM_PathDiversityBeforeLink92C(
-       //IN    PADAPTER        Adapter
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-#if (RT_MEM_SIZE_LEVEL != RT_MEM_SIZE_MINIMUM)
-       PADAPTER                Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE*  pHalData = NULL;
-       PMGNT_INFO              pMgntInfo = NULL;
-       //pSWAT_T               pDM_SWAT_Table = &Adapter->DM_SWAT_Table;
-       pPD_T                   pDM_PDTable = NULL;
-
-       s1Byte                  Score = 0;
-       PRT_WLAN_BSS    pTmpBssDesc;
-       PRT_WLAN_BSS    pTestBssDesc;
-
-       u1Byte                  target_chnl = 0;
-       u1Byte                  index;
-
-       if (pDM_Odm->Adapter == NULL)  //For BSOD when plug/unplug fast.  //By YJ,120413
-       {       // The ODM structure is not initialized.
-               return FALSE;
-       }
-       pHalData = GET_HAL_DATA(Adapter);
-       pMgntInfo = &Adapter->MgntInfo;
-       pDM_PDTable = &Adapter->DM_PDTable;
-       
-       // Condition that does not need to use path diversity.
-       if((!IS_92C_SERIAL(pHalData->VersionID)) || (pHalData->PathDivCfg!=1) || pMgntInfo->AntennaTest )
-       {
-               RT_TRACE(COMP_INIT, DBG_LOUD, 
-                               ("ODM_PathDiversityBeforeLink92C(): No PathDiv Mechanism before link.\n"));
-               return FALSE;
-       }
-
-       // Since driver is going to set BB register, it shall check if there is another thread controlling BB/RF.
-       PlatformAcquireSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
-       if(pHalData->eRFPowerState!=eRfOn || pMgntInfo->RFChangeInProgress || pMgntInfo->bMediaConnect)
-       {
-               PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
-       
-               RT_TRACE(COMP_INIT, DBG_LOUD, 
-                               ("ODM_PathDiversityBeforeLink92C(): RFChangeInProgress(%x), eRFPowerState(%x)\n", 
-                               pMgntInfo->RFChangeInProgress,
-                               pHalData->eRFPowerState));
-       
-               //pDM_SWAT_Table->SWAS_NoLink_State = 0;
-               pDM_PDTable->PathDiv_NoLink_State = 0;
-               
-               return FALSE;
-       }
-       else
-       {
-               PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
-       }
-
-       //1 Run AntDiv mechanism "Before Link" part.
-       //if(pDM_SWAT_Table->SWAS_NoLink_State == 0)
-       if(pDM_PDTable->PathDiv_NoLink_State == 0)
-       {
-               //1 Prepare to do Scan again to check current antenna state.
-
-               // Set check state to next step.
-               //pDM_SWAT_Table->SWAS_NoLink_State = 1;
-               pDM_PDTable->PathDiv_NoLink_State = 1;
-       
-               // Copy Current Scan list.
-               Adapter->MgntInfo.tmpNumBssDesc = pMgntInfo->NumBssDesc;
-               PlatformMoveMemory((PVOID)Adapter->MgntInfo.tmpbssDesc, (PVOID)pMgntInfo->bssDesc, sizeof(RT_WLAN_BSS)*MAX_BSS_DESC);
-
-               // Switch Antenna to another one.
-               if(pDM_PDTable->DefaultRespPath == 0)
-               {
-                       PHY_SetBBReg(Adapter, rCCK0_AFESetting  , 0x0F000000, 0x05); // TRX path = PathB
-                       odm_SetRespPath_92C(Adapter, 1);
-                       pDM_PDTable->OFDMTXPath = 0xFFFFFFFF;
-                       pDM_PDTable->CCKTXPath = 0xFFFFFFFF;
-               }
-               else
-               {
-                       PHY_SetBBReg(Adapter, rCCK0_AFESetting  , 0x0F000000, 0x00); // TRX path = PathA
-                       odm_SetRespPath_92C(Adapter, 0);
-                       pDM_PDTable->OFDMTXPath = 0x0;
-                       pDM_PDTable->CCKTXPath = 0x0;
-               }
-#if 0  
-
-               pDM_SWAT_Table->PreAntenna = pDM_SWAT_Table->CurAntenna;
-               pDM_SWAT_Table->CurAntenna = (pDM_SWAT_Table->CurAntenna==Antenna_A)?Antenna_B:Antenna_A;
-               
-               RT_TRACE(COMP_INIT, DBG_LOUD, 
-                       ("ODM_SwAntDivCheckBeforeLink: Change to Ant(%s) for testing.\n", (pDM_SWAT_Table->CurAntenna==Antenna_A)?"A":"B"));
-               //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, DM_SWAT_Table.CurAntenna);
-               pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 = ((pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 & 0xfffffcff) | (pDM_SWAT_Table->CurAntenna<<8));
-               PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, bMaskDWord, pDM_SWAT_Table->SWAS_NoLink_BK_Reg860);
-#endif
-
-               // Go back to scan function again.
-               RT_TRACE(COMP_INIT, DBG_LOUD, ("ODM_PathDiversityBeforeLink92C: Scan one more time\n"));
-               pMgntInfo->ScanStep=0;
-               target_chnl = odm_SwAntDivSelectScanChnl(Adapter);
-               odm_SwAntDivConstructScanChnl(Adapter, target_chnl);
-               PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 5);
-
-               return TRUE;
-       }
-       else
-       {
-               //1 ScanComple() is called after antenna swiched.
-               //1 Check scan result and determine which antenna is going
-               //1 to be used.
-
-               for(index=0; index<Adapter->MgntInfo.tmpNumBssDesc; index++)
-               {
-                       pTmpBssDesc = &(Adapter->MgntInfo.tmpbssDesc[index]);
-                       pTestBssDesc = &(pMgntInfo->bssDesc[index]);
-
-                       if(PlatformCompareMemory(pTestBssDesc->bdBssIdBuf, pTmpBssDesc->bdBssIdBuf, 6)!=0)
-                       {
-                               RT_TRACE(COMP_INIT, DBG_LOUD, ("ODM_PathDiversityBeforeLink92C(): ERROR!! This shall not happen.\n"));
-                               continue;
-                       }
-
-                       if(pTmpBssDesc->RecvSignalPower > pTestBssDesc->RecvSignalPower)
-                       {
-                               RT_TRACE(COMP_INIT, DBG_LOUD, ("ODM_PathDiversityBeforeLink92C: Compare scan entry: Score++\n"));
-                               RT_PRINT_STR(COMP_INIT, DBG_LOUD, "SSID: ", pTestBssDesc->bdSsIdBuf, pTestBssDesc->bdSsIdLen);
-                               RT_TRACE(COMP_INIT, DBG_LOUD, ("Original: %d, Test: %d\n", pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
-                       
-                               Score++;
-                               PlatformMoveMemory(pTestBssDesc, pTmpBssDesc, sizeof(RT_WLAN_BSS));
-                       }
-                       else if(pTmpBssDesc->RecvSignalPower < pTestBssDesc->RecvSignalPower)
-                       {
-                               RT_TRACE(COMP_INIT, DBG_LOUD, ("ODM_PathDiversityBeforeLink92C: Compare scan entry: Score--\n"));
-                               RT_PRINT_STR(COMP_INIT, DBG_LOUD, "SSID: ", pTestBssDesc->bdSsIdBuf, pTestBssDesc->bdSsIdLen);
-                               RT_TRACE(COMP_INIT, DBG_LOUD, ("Original: %d, Test: %d\n", pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
-                               Score--;
-                       }
-
-               }
-
-               if(pMgntInfo->NumBssDesc!=0 && Score<=0)
-               {
-                       RT_TRACE(COMP_INIT, DBG_LOUD,
-                               ("ODM_PathDiversityBeforeLink92C(): DefaultRespPath=%d\n", pDM_PDTable->DefaultRespPath));
-
-                       //pDM_SWAT_Table->PreAntenna = pDM_SWAT_Table->CurAntenna;
-               }
-               else
-               {
-                       RT_TRACE(COMP_INIT, DBG_LOUD, 
-                               ("ODM_PathDiversityBeforeLink92C(): DefaultRespPath=%d\n", pDM_PDTable->DefaultRespPath));
-
-                       if(pDM_PDTable->DefaultRespPath == 0)
-                       {
-                               pDM_PDTable->OFDMTXPath = 0xFFFFFFFF;
-                               pDM_PDTable->CCKTXPath = 0xFFFFFFFF;
-                               odm_SetRespPath_92C(Adapter, 1);
-                       }
-                       else
-                       {
-                               pDM_PDTable->OFDMTXPath = 0x0;
-                               pDM_PDTable->CCKTXPath = 0x0;
-                               odm_SetRespPath_92C(Adapter, 0);
-                       }
-                       PHY_SetBBReg(Adapter, rCCK0_AFESetting  , 0x0F000000, 0x01); // RX path = PathAB
-
-                       //pDM_SWAT_Table->CurAntenna = pDM_SWAT_Table->PreAntenna;
-
-                       //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, DM_SWAT_Table.CurAntenna);
-                       //pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 = ((pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 & 0xfffffcff) | (pDM_SWAT_Table->CurAntenna<<8));
-                       //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, bMaskDWord, pDM_SWAT_Table->SWAS_NoLink_BK_Reg860);
-               }
-
-               // Check state reset to default and wait for next time.
-               //pDM_SWAT_Table->SWAS_NoLink_State = 0;
-               pDM_PDTable->PathDiv_NoLink_State = 0;
-
-               return FALSE;
-       }
-#else
-               return  FALSE;
-#endif
-       
-}
-
-
-
-VOID
-odm_PathDiversityAfterLink_92C(
-       IN      PADAPTER        Adapter
-)
-{
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
-       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
-       pPD_T           pDM_PDTable = &Adapter->DM_PDTable;
-       u1Byte          DefaultRespPath=0;
-
-       if((!IS_92C_SERIAL(pHalData->VersionID)) || (pHalData->PathDivCfg != 1) || (pHalData->eRFPowerState == eRfOff))
-       {
-               if(pHalData->PathDivCfg == 0)
-               {
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("No ODM_TXPathDiversity()\n"));
-               }
-               else
-               {
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("2T ODM_TXPathDiversity()\n"));
-               }
-               return;
-       }
-       if(!odm_IsConnected_92C(Adapter))
-       {
-               RT_TRACE(       COMP_INIT, DBG_LOUD, ("ODM_TXPathDiversity(): No Connections\n"));
-               return;
-       }
-       
-       
-       if(pDM_PDTable->TrainingState == 0)
-       {
-               RT_TRACE(       COMP_INIT, DBG_LOUD, ("ODM_TXPathDiversity() ==>\n"));
-               odm_OFDMTXPathDiversity_92C(Adapter);
-
-               if((pDM_PDTable->CCKPathDivEnable == TRUE) && (pDM_PDTable->OFDM_Pkt_Cnt < 100))
-               {
-                       //RT_TRACE(     COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: TrainingState=0\n"));
-                       
-                       if(pDM_PDTable->CCK_Pkt_Cnt > 300)
-                               pDM_PDTable->Timer = 20;
-                       else if(pDM_PDTable->CCK_Pkt_Cnt > 100)
-                               pDM_PDTable->Timer = 60;
-                       else
-                               pDM_PDTable->Timer = 250;
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: timer=%d\n",pDM_PDTable->Timer));
-
-                       PHY_SetBBReg(Adapter, rCCK0_AFESetting  , 0x0F000000, 0x00); // RX path = PathA
-                       pDM_PDTable->TrainingState = 1;
-                       pHalData->RSSI_test = TRUE;
-                       ODM_SetTimer( pDM_Odm, &pDM_Odm->CCKPathDiversityTimer, pDM_PDTable->Timer); //ms
-               }
-               else
-               {
-                       pDM_PDTable->CCKTXPath = pDM_PDTable->OFDMTXPath;
-                       DefaultRespPath = pDM_PDTable->OFDMDefaultRespPath;
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_SetRespPath_92C: Skip odm_CCKTXPathDiversity_92C, DefaultRespPath is OFDM\n"));
-                       odm_SetRespPath_92C(Adapter, DefaultRespPath);
-                       odm_ResetPathDiversity_92C(Adapter);
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("ODM_TXPathDiversity() <==\n"));
-               }
-       }
-       else if(pDM_PDTable->TrainingState == 1)
-       {               
-               //RT_TRACE(     COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: TrainingState=1\n"));\r
-               PHY_SetBBReg(Adapter, rCCK0_AFESetting  , 0x0F000000, 0x05); // RX path = PathB
-               pDM_PDTable->TrainingState = 2;
-               ODM_SetTimer( pDM_Odm, &pDM_Odm->CCKPathDiversityTimer, pDM_PDTable->Timer); //ms
-       }
-       else
-       {
-               //RT_TRACE(     COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: TrainingState=2\n"));\r
-               pDM_PDTable->TrainingState = 0; 
-               odm_CCKTXPathDiversity_92C(Adapter); 
-               if(pDM_PDTable->OFDM_Pkt_Cnt != 0)
-               {
-                       DefaultRespPath = pDM_PDTable->OFDMDefaultRespPath;
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_SetRespPath_92C: DefaultRespPath is OFDM\n"));
-               }
-               else
-               {
-                       DefaultRespPath = pDM_PDTable->CCKDefaultRespPath;
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_SetRespPath_92C: DefaultRespPath is CCK\n"));
-               }
-               odm_SetRespPath_92C(Adapter, DefaultRespPath);
-               odm_ResetPathDiversity_92C(Adapter);
-               RT_TRACE(       COMP_INIT, DBG_LOUD, ("ODM_TXPathDiversity() <==\n"));
-       }
-
-}
-\r
-VOID
-odm_SetRespPath_92C(
-       IN      PADAPTER        Adapter,
-       IN      u1Byte  DefaultRespPath
-       )
-{
-       pPD_T   pDM_PDTable = &Adapter->DM_PDTable;
-
-       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_SetRespPath_92C: Select Response Path=%d\n",DefaultRespPath));
-       if(DefaultRespPath != pDM_PDTable->DefaultRespPath)
-       {
-               if(DefaultRespPath == 0)
-               {
-                       PlatformEFIOWrite1Byte(Adapter, 0x6D8, (PlatformEFIORead1Byte(Adapter, 0x6D8)&0xc0)|0x15);      
-               }
-               else
-               {
-                       PlatformEFIOWrite1Byte(Adapter, 0x6D8, (PlatformEFIORead1Byte(Adapter, 0x6D8)&0xc0)|0x2A);
-               }       
-       }
-       pDM_PDTable->DefaultRespPath = DefaultRespPath;
-}\r
-\r
-VOID
-odm_OFDMTXPathDiversity_92C(
-       IN      PADAPTER        Adapter)
-{
-//     HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
-       PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);
-       PRT_WLAN_STA    pEntry;
-       u1Byte  i, DefaultRespPath = 0;
-       s4Byte  MinRSSI = 0xFF;
-       pPD_T   pDM_PDTable = &Adapter->DM_PDTable;
-       pDM_PDTable->OFDMTXPath = 0;
-       
-       //1 Default Port
-       if(pMgntInfo->mAssoc)
-       {
-               RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: Default port RSSI[0]=%d, RSSI[1]=%d\n",
-                       Adapter->RxStats.RxRSSIPercentage[0], Adapter->RxStats.RxRSSIPercentage[1]));
-               if(Adapter->RxStats.RxRSSIPercentage[0] > Adapter->RxStats.RxRSSIPercentage[1])
-               {
-                       pDM_PDTable->OFDMTXPath = pDM_PDTable->OFDMTXPath & (~BIT0);
-                       MinRSSI =  Adapter->RxStats.RxRSSIPercentage[1];
-                       DefaultRespPath = 0;
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: Default port Select Path-0\n"));
-               }
-               else
-               {
-                       pDM_PDTable->OFDMTXPath =  pDM_PDTable->OFDMTXPath | BIT0;
-                       MinRSSI =  Adapter->RxStats.RxRSSIPercentage[0];
-                       DefaultRespPath = 1;
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: Default port Select Path-1\n"));
-               }
-                       //RT_TRACE(     COMP_INIT, DBG_LOUD, ("pDM_PDTable->OFDMTXPath =0x%x\n",pDM_PDTable->OFDMTXPath));\r
-       }
-       //1 Extension Port
-       for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)
-       {
-               if(IsAPModeExist(Adapter)  && GetFirstExtAdapter(Adapter) != NULL)
-                       pEntry = AsocEntry_EnumStation(GetFirstExtAdapter(Adapter), i);
-               else
-                       pEntry = AsocEntry_EnumStation(GetDefaultAdapter(Adapter), i);
-
-               if(pEntry!=NULL)
-               {
-                       if(pEntry->bAssociated)
-                       {
-                               RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: MACID=%d, RSSI_0=%d, RSSI_1=%d\n", 
-                                       pEntry->AssociatedMacId, pEntry->rssi_stat.RxRSSIPercentage[0], pEntry->rssi_stat.RxRSSIPercentage[1]));
-                               
-                               if(pEntry->rssi_stat.RxRSSIPercentage[0] > pEntry->rssi_stat.RxRSSIPercentage[1])
-                               {
-                                       pDM_PDTable->OFDMTXPath = pDM_PDTable->OFDMTXPath & ~(BIT(pEntry->AssociatedMacId));
-                                       //pHalData->TXPath = pHalData->TXPath & ~(1<<(pEntry->AssociatedMacId));
-                                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: MACID=%d Select Path-0\n", pEntry->AssociatedMacId));
-                                       if(pEntry->rssi_stat.RxRSSIPercentage[1] < MinRSSI)
-                                       {
-                                               MinRSSI = pEntry->rssi_stat.RxRSSIPercentage[1];
-                                               DefaultRespPath = 0;
-                                       }
-                               }
-                               else
-                               {
-                                       pDM_PDTable->OFDMTXPath = pDM_PDTable->OFDMTXPath | BIT(pEntry->AssociatedMacId);
-                                       //pHalData->TXPath = pHalData->TXPath | (1 << (pEntry->AssociatedMacId));
-                                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: MACID=%d Select Path-1\n", pEntry->AssociatedMacId));
-                                       if(pEntry->rssi_stat.RxRSSIPercentage[0] < MinRSSI)
-                                       {
-                                               MinRSSI = pEntry->rssi_stat.RxRSSIPercentage[0];
-                                               DefaultRespPath = 1;
-                                       }
-                               }
-                       }
-               }
-               else
-               {
-                       break;
-               }
-       }
-
-       pDM_PDTable->OFDMDefaultRespPath = DefaultRespPath;
-}
-\r
-\r
-VOID
-odm_CCKTXPathDiversity_92C(
-       IN      PADAPTER        Adapter
-)
-{
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
-       PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);
-       PRT_WLAN_STA    pEntry;
-       s4Byte  MinRSSI = 0xFF;
-       u1Byte  i, DefaultRespPath = 0;
-//     BOOLEAN bBModePathDiv = FALSE;
-       pPD_T   pDM_PDTable = &Adapter->DM_PDTable;
-
-       //1 Default Port
-       if(pMgntInfo->mAssoc)
-       {
-               if(pHalData->OFDM_Pkt_Cnt == 0)
-               {
-                       for(i=0; i<2; i++)
-                       {
-                               if(pDM_PDTable->RSSI_CCK_Path_cnt[i] > 1) //Because the first packet is discarded
-                                       pDM_PDTable->RSSI_CCK_Path[i] = pDM_PDTable->RSSI_CCK_Path[i] / (pDM_PDTable->RSSI_CCK_Path_cnt[i]-1);
-                               else
-                                       pDM_PDTable->RSSI_CCK_Path[i] = 0;
-                       }
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: pDM_PDTable->RSSI_CCK_Path[0]=%d, pDM_PDTable->RSSI_CCK_Path[1]=%d\n",
-                               pDM_PDTable->RSSI_CCK_Path[0], pDM_PDTable->RSSI_CCK_Path[1]));
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: pDM_PDTable->RSSI_CCK_Path_cnt[0]=%d, pDM_PDTable->RSSI_CCK_Path_cnt[1]=%d\n",
-                               pDM_PDTable->RSSI_CCK_Path_cnt[0], pDM_PDTable->RSSI_CCK_Path_cnt[1]));
-               
-                       if(pDM_PDTable->RSSI_CCK_Path[0] > pDM_PDTable->RSSI_CCK_Path[1])
-                       {
-                               pDM_PDTable->CCKTXPath = pDM_PDTable->CCKTXPath & (~BIT0);
-                               MinRSSI =  pDM_PDTable->RSSI_CCK_Path[1];
-                               DefaultRespPath = 0;
-                               RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Default port Select CCK Path-0\n"));
-                       }
-                       else if(pDM_PDTable->RSSI_CCK_Path[0] < pDM_PDTable->RSSI_CCK_Path[1])
-                       {
-                               pDM_PDTable->CCKTXPath =  pDM_PDTable->CCKTXPath | BIT0;
-                               MinRSSI =  pDM_PDTable->RSSI_CCK_Path[0];
-                               DefaultRespPath = 1;
-                               RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Default port Select CCK Path-1\n"));
-                       }
-                       else
-                       {
-                               if((pDM_PDTable->RSSI_CCK_Path[0] != 0) && (pDM_PDTable->RSSI_CCK_Path[0] < MinRSSI))
-                               {
-                                       pDM_PDTable->CCKTXPath = pDM_PDTable->CCKTXPath & (~BIT0);
-                                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Default port Select CCK Path-0\n"));
-                                       MinRSSI =  pDM_PDTable->RSSI_CCK_Path[1];
-                                       DefaultRespPath = 0;
-                               }
-                               else
-                               {
-                                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Default port unchange CCK Path\n"));
-                               }
-                       }
-               }
-               else //Follow OFDM decision
-               {
-                       pDM_PDTable->CCKTXPath = (pDM_PDTable->CCKTXPath & (~BIT0)) | (pDM_PDTable->OFDMTXPath &BIT0);
-                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Follow OFDM decision, Default port Select CCK Path-%d\n",
-                               pDM_PDTable->CCKTXPath &BIT0));
-               }
-       }
-       //1 Extension Port
-       for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)
-       {
-               if(IsAPModeExist(Adapter)  && GetFirstExtAdapter(Adapter) != NULL)
-                       pEntry = AsocEntry_EnumStation(GetFirstExtAdapter(Adapter), i);
-               else
-                       pEntry = AsocEntry_EnumStation(GetDefaultAdapter(Adapter), i);
-
-               if(pEntry!=NULL)
-               {
-                       if(pEntry->bAssociated)
-                       {
-                               if(pEntry->rssi_stat.OFDM_Pkt_Cnt == 0)
-                               {
-                                       u1Byte j=0;
-                                       for(j=0; j<2; j++)
-                                       {
-                                               if(pEntry->rssi_stat.RSSI_CCK_Path_cnt[j] > 1)
-                                                       pEntry->rssi_stat.RSSI_CCK_Path[j] = pEntry->rssi_stat.RSSI_CCK_Path[j] / (pEntry->rssi_stat.RSSI_CCK_Path_cnt[j]-1);
-                                               else
-                                                       pEntry->rssi_stat.RSSI_CCK_Path[j] = 0;
-                                       }
-                                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: MACID=%d, RSSI_CCK0=%d, RSSI_CCK1=%d\n", 
-                                               pEntry->AssociatedMacId, pEntry->rssi_stat.RSSI_CCK_Path[0], pEntry->rssi_stat.RSSI_CCK_Path[1]));
-                                       
-                                       if(pEntry->rssi_stat.RSSI_CCK_Path[0] >pEntry->rssi_stat.RSSI_CCK_Path[1])
-                                       {
-                                               pDM_PDTable->CCKTXPath = pDM_PDTable->CCKTXPath & ~(BIT(pEntry->AssociatedMacId));
-                                               RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: MACID=%d Select CCK Path-0\n", pEntry->AssociatedMacId));
-                                               if(pEntry->rssi_stat.RSSI_CCK_Path[1] < MinRSSI)
-                                               {
-                                                       MinRSSI = pEntry->rssi_stat.RSSI_CCK_Path[1];
-                                                       DefaultRespPath = 0;
-                                               }
-                                       }
-                                       else if(pEntry->rssi_stat.RSSI_CCK_Path[0] <pEntry->rssi_stat.RSSI_CCK_Path[1])
-                                       {
-                                               pDM_PDTable->CCKTXPath = pDM_PDTable->CCKTXPath | BIT(pEntry->AssociatedMacId);
-                                               RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: MACID=%d Select CCK Path-1\n", pEntry->AssociatedMacId));
-                                               if(pEntry->rssi_stat.RSSI_CCK_Path[0] < MinRSSI)
-                                               {
-                                                       MinRSSI = pEntry->rssi_stat.RSSI_CCK_Path[0];
-                                                       DefaultRespPath = 1;
-                                               }
-                                       }
-                                       else
-                                       {
-                                               if((pEntry->rssi_stat.RSSI_CCK_Path[0] != 0) && (pEntry->rssi_stat.RSSI_CCK_Path[0] < MinRSSI))
-                                               {
-                                                       pDM_PDTable->CCKTXPath = pDM_PDTable->CCKTXPath & ~(BIT(pEntry->AssociatedMacId));
-                                                       MinRSSI = pEntry->rssi_stat.RSSI_CCK_Path[1];
-                                                       DefaultRespPath = 0;
-                                                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: MACID=%d Select CCK Path-0\n", pEntry->AssociatedMacId));
-                                               }
-                                               else
-                                               {
-                                                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: MACID=%d unchange CCK Path\n", pEntry->AssociatedMacId));
-                                               }
-                                       }
-                               }
-                               else //Follow OFDM decision
-                               {
-                                       pDM_PDTable->CCKTXPath = (pDM_PDTable->CCKTXPath & (~(BIT(pEntry->AssociatedMacId)))) | (pDM_PDTable->OFDMTXPath & BIT(pEntry->AssociatedMacId));
-                                       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Follow OFDM decision, MACID=%d Select CCK Path-%d\n",
-                                               pEntry->AssociatedMacId, (pDM_PDTable->CCKTXPath & BIT(pEntry->AssociatedMacId))>>(pEntry->AssociatedMacId)));
-                               }
-                       }
-               }
-               else
-               {
-                       break;
-               }
-       }
-
-       RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C:MinRSSI=%d\n",MinRSSI));
-
-       if(MinRSSI == 0xFF)
-               DefaultRespPath = pDM_PDTable->CCKDefaultRespPath;
-
-       pDM_PDTable->CCKDefaultRespPath = DefaultRespPath;
-}
-\r
-\r
-VOID
-odm_ResetPathDiversity_92C(
-               IN      PADAPTER        Adapter
-)
-{
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       pPD_T   pDM_PDTable = &Adapter->DM_PDTable;
-       PRT_WLAN_STA    pEntry;
-       u4Byte  i,j;
-
-       pHalData->RSSI_test = FALSE;
-       pDM_PDTable->CCK_Pkt_Cnt = 0;
-       pDM_PDTable->OFDM_Pkt_Cnt = 0;
-       pHalData->CCK_Pkt_Cnt =0;
-       pHalData->OFDM_Pkt_Cnt =0;
-       
-       if(pDM_PDTable->CCKPathDivEnable == TRUE)       
-               PHY_SetBBReg(Adapter, rCCK0_AFESetting  , 0x0F000000, 0x01); //RX path = PathAB
-
-       for(i=0; i<2; i++)
-       {
-               pDM_PDTable->RSSI_CCK_Path_cnt[i]=0;
-               pDM_PDTable->RSSI_CCK_Path[i] = 0;
-       }
-       for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)
-       {
-               if(IsAPModeExist(Adapter)  && GetFirstExtAdapter(Adapter) != NULL)
-                       pEntry = AsocEntry_EnumStation(GetFirstExtAdapter(Adapter), i);
-               else
-                       pEntry = AsocEntry_EnumStation(GetDefaultAdapter(Adapter), i);
-
-               if(pEntry!=NULL)
-               {
-                       pEntry->rssi_stat.CCK_Pkt_Cnt = 0;
-                       pEntry->rssi_stat.OFDM_Pkt_Cnt = 0;
-                       for(j=0; j<2; j++)
-                       {
-                               pEntry->rssi_stat.RSSI_CCK_Path_cnt[j] = 0;
-                               pEntry->rssi_stat.RSSI_CCK_Path[j] = 0;
-                       }
-               }
-               else
-                       break;
-       }
-}
-
-
-
-
-
-VOID
-odm_CCKTXPathDiversityCallback(
-       PRT_TIMER               pTimer
-)
-{
-#if USE_WORKITEM
-       PADAPTER        Adapter = (PADAPTER)pTimer->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-          PDM_ODM_T            pDM_Odm = &pHalData->DM_OutSrc;
-#else
-       PADAPTER        Adapter = (PADAPTER)pTimer->Adapter;
-#endif
-
-#if DEV_BUS_TYPE==RT_PCI_INTERFACE
-#if USE_WORKITEM
-       PlatformScheduleWorkItem(&pDM_Odm->CCKPathDiversityWorkitem);
-#else
-       odm_PathDiversityAfterLink_92C(Adapter);
-#endif
-#else
-       PlatformScheduleWorkItem(&pDM_Odm->CCKPathDiversityWorkitem);
-#endif
-
-}
-
-
-VOID
-odm_CCKTXPathDiversityWorkItemCallback(
-    IN PVOID            pContext
-    )
-{
-       PADAPTER        Adapter = (PADAPTER)pContext;
-
-       odm_CCKTXPathDiversity_92C(Adapter);
-}
-
-//
-// 20100514 Luke/Joseph:
-// Callback function for 500ms antenna test trying.
-//
-VOID
-odm_PathDivChkAntSwitchCallback(
-       PRT_TIMER               pTimer
-)
-{
-       PADAPTER                Adapter = (PADAPTER)pTimer->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
-
-#if DEV_BUS_TYPE==RT_PCI_INTERFACE
-
-#if USE_WORKITEM
-       PlatformScheduleWorkItem(&pDM_Odm->PathDivSwitchWorkitem);
-#else
-       odm_PathDivChkAntSwitch(pDM_Odm);
-#endif
-#else
-       PlatformScheduleWorkItem(&pDM_Odm->PathDivSwitchWorkitem);
-#endif
-
-//odm_SwAntDivChkAntSwitch(Adapter, SWAW_STEP_DETERMINE);
-
-}
-
-
-VOID
-odm_PathDivChkAntSwitchWorkitemCallback(
-    IN PVOID            pContext
-    )
-{
-       PADAPTER        pAdapter = (PADAPTER)pContext;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
-       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
-
-       odm_PathDivChkAntSwitch(pDM_Odm);
-}\r
-\r
-\r
- //MAC0_ACCESS_PHY1
-
-// 2011-06-22 Neil Chen & Gary Hsin
-// Refer to Jr.Luke's SW ANT DIV
-// 92D Path Diversity Main function
-// refer to 88C software antenna diversity
-// 
-VOID
-odm_PathDivChkAntSwitch(
-       PDM_ODM_T               pDM_Odm
-       //PADAPTER              Adapter,
-       //u1Byte                        Step
-)
-{
-       PADAPTER                Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       PMGNT_INFO              pMgntInfo = &Adapter->MgntInfo;
-
-
-       pSWAT_T                 pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       s4Byte                  curRSSI=100, RSSI_A, RSSI_B;
-       u1Byte                  nextAntenna=AUX_ANT;
-       static u8Byte           lastTxOkCnt=0, lastRxOkCnt=0;
-       u8Byte                  curTxOkCnt, curRxOkCnt;
-       static u8Byte           TXByteCnt_A=0, TXByteCnt_B=0, RXByteCnt_A=0, RXByteCnt_B=0;
-       u8Byte                  CurByteCnt=0, PreByteCnt=0;
-       static u1Byte           TrafficLoad = TRAFFIC_LOW;
-       u1Byte                  Score_A=0, Score_B=0;
-       u1Byte                  i=0x0;
-       // Neil Chen
-       static u1Byte        pathdiv_para=0x0;     
-       static u1Byte        switchfirsttime=0x00;
-       // u1Byte                 regB33 = (u1Byte) PHY_QueryBBReg(Adapter, 0xB30,BIT27);
-       u1Byte                  regB33 = (u1Byte)ODM_GetBBReg(pDM_Odm, PATHDIV_REG, BIT27);
-
-
-       //u1Byte                 reg637 =0x0;   
-       static u1Byte        fw_value=0x0;         
-       //u8Byte                        curTxOkCnt_tmp, curRxOkCnt_tmp;
-       PADAPTER            BuddyAdapter = Adapter->BuddyAdapter;     // another adapter MAC
-        // Path Diversity   //Neil Chen--2011--06--22
-
-       //u1Byte                 PathDiv_Trigger = (u1Byte) PHY_QueryBBReg(Adapter, 0xBA0,BIT31);
-       u1Byte                 PathDiv_Trigger = (u1Byte) ODM_GetBBReg(pDM_Odm, PATHDIV_TRI,BIT31);
-       u1Byte                 PathDiv_Enable = pHalData->bPathDiv_Enable;
-
-
-       //DbgPrint("Path Div PG Value:%x \n",PathDiv_Enable);   
-       if((BuddyAdapter==NULL)||(!PathDiv_Enable)||(PathDiv_Trigger)||(pHalData->CurrentBandType == BAND_ON_2_4G))
-       {
-           return;
-       }
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD,("===================>odm_PathDivChkAntSwitch()\n"));
-
-       // The first time to switch path excluding 2nd, 3rd, ....etc....
-       if(switchfirsttime==0)
-       {
-           if(regB33==0)
-           {
-              pDM_SWAT_Table->CurAntenna = MAIN_ANT;    // Default MAC0_5G-->Path A (current antenna)     
-           }       
-       }
-
-       // Condition that does not need to use antenna diversity.
-       if(pDM_Odm->SupportICType != ODM_RTL8192D)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("odm_PathDiversityMechanims(): No PathDiv Mechanism.\n"));
-               return;
-       }
-
-       // Radio off: Status reset to default and return.
-       if(pHalData->eRFPowerState==eRfOff)
-       {
-               //ODM_SwAntDivRestAfterLink(Adapter);
-               return;
-       }
-
-       /*
-       // Handling step mismatch condition.
-       // Peak step is not finished at last time. Recover the variable and check again.
-       if(     Step != pDM_SWAT_Table->try_flag        )
-       {
-               ODM_SwAntDivRestAfterLink(Adapter);
-       } */
-       
-       if(pDM_SWAT_Table->try_flag == 0xff)
-       {
-               // Select RSSI checking target
-               if(pMgntInfo->mAssoc && !ACTING_AS_AP(Adapter))
-               {
-                       // Target: Infrastructure mode AP.
-                       pHalData->RSSI_target = NULL;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("odm_PathDivMechanism(): RSSI_target is DEF AP!\n"));
-               }
-               else
-               {
-                       u1Byte                  index = 0;
-                       PRT_WLAN_STA    pEntry = NULL;
-                       PADAPTER                pTargetAdapter = NULL;
-               
-                       if(     pMgntInfo->mIbss || ACTING_AS_AP(Adapter) )
-                       {
-                               // Target: AP/IBSS peer.
-                               pTargetAdapter = Adapter;
-                       }
-                       else if(IsAPModeExist(Adapter)  && GetFirstExtAdapter(Adapter) != NULL)
-                       {
-                               // Target: VWIFI peer.
-                               pTargetAdapter = GetFirstExtAdapter(Adapter);
-                       }
-
-                       if(pTargetAdapter != NULL)
-                       {
-                               for(index=0; index<ODM_ASSOCIATE_ENTRY_NUM; index++)
-                               {
-                                       pEntry = AsocEntry_EnumStation(pTargetAdapter, index);
-                                       if(pEntry != NULL)
-                                       {
-                                               if(pEntry->bAssociated)
-                                                       break;                  
-                                       }
-                               }
-                       }
-
-                       if(pEntry == NULL)
-                       {
-                               ODM_PathDivRestAfterLink(pDM_Odm);
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("odm_SwAntDivChkAntSwitch(): No Link.\n"));
-                               return;
-                       }
-                       else
-                       {
-                               pHalData->RSSI_target = pEntry;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("odm_SwAntDivChkAntSwitch(): RSSI_target is PEER STA\n"));
-                       }
-               }
-                       
-               pHalData->RSSI_cnt_A = 0;
-               pHalData->RSSI_cnt_B = 0;
-               pDM_SWAT_Table->try_flag = 0;
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("odm_SwAntDivChkAntSwitch(): Set try_flag to 0 prepare for peak!\n"));
-               return;
-       }
-       else
-       {
-              // 1st step
-               curTxOkCnt = Adapter->TxStats.NumTxBytesUnicast - lastTxOkCnt;
-               curRxOkCnt = Adapter->RxStats.NumRxBytesUnicast - lastRxOkCnt;
-               lastTxOkCnt = Adapter->TxStats.NumTxBytesUnicast;
-               lastRxOkCnt = Adapter->RxStats.NumRxBytesUnicast;
-       
-               if(pDM_SWAT_Table->try_flag == 1)   // Training State
-               {
-                       if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-                       {
-                               TXByteCnt_A += curTxOkCnt;
-                               RXByteCnt_A += curRxOkCnt;
-                       }
-                       else
-                       {
-                               TXByteCnt_B += curTxOkCnt;
-                               RXByteCnt_B += curRxOkCnt;
-                       }
-               
-                       nextAntenna = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? AUX_ANT : MAIN_ANT;
-                       pDM_SWAT_Table->RSSI_Trying--;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: RSSI_Trying = %d\n",pDM_SWAT_Table->RSSI_Trying));
-                       if(pDM_SWAT_Table->RSSI_Trying == 0)
-                       {
-                               CurByteCnt = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? (TXByteCnt_A+RXByteCnt_A) : (TXByteCnt_B+RXByteCnt_B);
-                               PreByteCnt = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? (TXByteCnt_B+RXByteCnt_B) : (TXByteCnt_A+RXByteCnt_A);
-                               
-                               if(TrafficLoad == TRAFFIC_HIGH)
-                               {
-                                       //CurByteCnt = PlatformDivision64(CurByteCnt, 9);
-                                       PreByteCnt =PreByteCnt*9;
-                               }
-                               else if(TrafficLoad == TRAFFIC_LOW)
-                               {
-                                       //CurByteCnt = PlatformDivision64(CurByteCnt, 2);
-                                       PreByteCnt =PreByteCnt*2;
-                               }
-                               if(pHalData->RSSI_cnt_A > 0)
-                                       RSSI_A = pHalData->RSSI_sum_A/pHalData->RSSI_cnt_A; 
-                               else
-                                       RSSI_A = 0;
-                               if(pHalData->RSSI_cnt_B > 0)
-                                       RSSI_B = pHalData->RSSI_sum_B/pHalData->RSSI_cnt_B; 
-                            else
-                                       RSSI_B = 0;
-                               curRSSI = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? RSSI_A : RSSI_B;
-                               pDM_SWAT_Table->PreRSSI =  (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? RSSI_B : RSSI_A;
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: PreRSSI = %d, CurRSSI = %d\n",pDM_SWAT_Table->PreRSSI, curRSSI));
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: preAntenna= %s, curAntenna= %s \n", 
-                               (pDM_SWAT_Table->PreAntenna == MAIN_ANT?"MAIN":"AUX"), (pDM_SWAT_Table->CurAntenna == MAIN_ANT?"MAIN":"AUX")));
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: RSSI_A= %d, RSSI_cnt_A = %d, RSSI_B= %d, RSSI_cnt_B = %d\n",
-                                       RSSI_A, pHalData->RSSI_cnt_A, RSSI_B, pHalData->RSSI_cnt_B));
-                       }
-
-               }
-               else   // try_flag=0
-               {
-               
-                       if(pHalData->RSSI_cnt_A > 0)
-                               RSSI_A = pHalData->RSSI_sum_A/pHalData->RSSI_cnt_A; 
-                       else
-                               RSSI_A = 0;
-                       if(pHalData->RSSI_cnt_B > 0)
-                               RSSI_B = pHalData->RSSI_sum_B/pHalData->RSSI_cnt_B; 
-                       else
-                               RSSI_B = 0;     
-                       curRSSI = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? RSSI_A : RSSI_B;
-                       pDM_SWAT_Table->PreRSSI =  (pDM_SWAT_Table->PreAntenna == MAIN_ANT)? RSSI_A : RSSI_B;
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: PreRSSI = %d, CurRSSI = %d\n", pDM_SWAT_Table->PreRSSI, curRSSI));
-                      ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: preAntenna= %s, curAntenna= %s \n", 
-                       (pDM_SWAT_Table->PreAntenna == MAIN_ANT?"MAIN":"AUX"), (pDM_SWAT_Table->CurAntenna == MAIN_ANT?"MAIN":"AUX")));
-
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: RSSI_A= %d, RSSI_cnt_A = %d, RSSI_B= %d, RSSI_cnt_B = %d\n",
-                               RSSI_A, pHalData->RSSI_cnt_A, RSSI_B, pHalData->RSSI_cnt_B));
-                       //RT_TRACE(COMP_INIT, DBG_LOUD, ("Ekul:curTxOkCnt = %d\n", curTxOkCnt));
-                       //RT_TRACE(COMP_INIT, DBG_LOUD, ("Ekul:curRxOkCnt = %d\n", curRxOkCnt));
-               }
-
-               //1 Trying State
-               if((pDM_SWAT_Table->try_flag == 1)&&(pDM_SWAT_Table->RSSI_Trying == 0))
-               {
-
-                       if(pDM_SWAT_Table->TestMode == TP_MODE)
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: TestMode = TP_MODE"));
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH= TRY:CurByteCnt = %"i64fmt"d,", CurByteCnt));
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH= TRY:PreByteCnt = %"i64fmt"d\n",PreByteCnt));             
-                               if(CurByteCnt < PreByteCnt)
-                               {
-                                       if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-                                               pDM_SWAT_Table->SelectAntennaMap=pDM_SWAT_Table->SelectAntennaMap<<1;
-                                       else
-                                               pDM_SWAT_Table->SelectAntennaMap=(pDM_SWAT_Table->SelectAntennaMap<<1)+1;
-                               }
-                               else
-                               {
-                                       if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-                                               pDM_SWAT_Table->SelectAntennaMap=(pDM_SWAT_Table->SelectAntennaMap<<1)+1;
-                                       else
-                                               pDM_SWAT_Table->SelectAntennaMap=pDM_SWAT_Table->SelectAntennaMap<<1;
-                               }
-                               for (i= 0; i<8; i++)
-                               {
-                                       if(((pDM_SWAT_Table->SelectAntennaMap>>i)&BIT0) == 1)
-                                               Score_A++;
-                                       else
-                                               Score_B++;
-                               }
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("SelectAntennaMap=%x\n ",pDM_SWAT_Table->SelectAntennaMap));
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Score_A=%d, Score_B=%d\n", Score_A, Score_B));
-                       
-                               if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-                               {
-                                       nextAntenna = (Score_A >= Score_B)?MAIN_ANT:AUX_ANT;
-                               }
-                               else
-                               {
-                                       nextAntenna = (Score_B >= Score_A)?AUX_ANT:MAIN_ANT;
-                               }
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: nextAntenna=%s\n",(nextAntenna==MAIN_ANT)?"MAIN":"AUX"));
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: preAntenna= %s, curAntenna= %s \n", 
-                               (pDM_SWAT_Table->PreAntenna == MAIN_ANT?"MAIN":"AUX"), (pDM_SWAT_Table->CurAntenna == MAIN_ANT?"MAIN":"AUX")));
-
-                               if(nextAntenna != pDM_SWAT_Table->CurAntenna)
-                               {
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Switch back to another antenna"));
-                               }
-                               else
-                               {
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: current anntena is good\n"));
-                               }       
-                       }
-
-                    
-                       if(pDM_SWAT_Table->TestMode == RSSI_MODE)
-                       {       
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: TestMode = RSSI_MODE"));
-                               pDM_SWAT_Table->SelectAntennaMap=0xAA;
-                               if(curRSSI < pDM_SWAT_Table->PreRSSI) //Current antenna is worse than previous antenna
-                               {
-                                       //RT_TRACE(COMP_INIT, DBG_LOUD, ("SWAS: Switch back to another antenna"));
-                                       nextAntenna = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)?AUX_ANT : MAIN_ANT;
-                               }
-                               else // current anntena is good
-                               {
-                                       nextAntenna =pDM_SWAT_Table->CurAntenna;
-                                       //RT_TRACE(COMP_INIT, DBG_LOUD, ("SWAS: current anntena is good\n"));
-                               }
-                       }
-                       
-                       pDM_SWAT_Table->try_flag = 0;
-                       pHalData->RSSI_test = FALSE;
-                       pHalData->RSSI_sum_A = 0;
-                       pHalData->RSSI_cnt_A = 0;
-                       pHalData->RSSI_sum_B = 0;
-                       pHalData->RSSI_cnt_B = 0;
-                       TXByteCnt_A = 0;
-                       TXByteCnt_B = 0;
-                       RXByteCnt_A = 0;
-                       RXByteCnt_B = 0;
-                       
-               }
-
-               //1 Normal State
-               else if(pDM_SWAT_Table->try_flag == 0)
-               {
-                       if(TrafficLoad == TRAFFIC_HIGH)
-                       {
-                               if ((curTxOkCnt+curRxOkCnt) > 3750000)//if(PlatformDivision64(curTxOkCnt+curRxOkCnt, 2) > 1875000)
-                                       TrafficLoad = TRAFFIC_HIGH;
-                               else
-                                       TrafficLoad = TRAFFIC_LOW;
-                       }
-                       else if(TrafficLoad == TRAFFIC_LOW)
-                               {
-                               if ((curTxOkCnt+curRxOkCnt) > 3750000)//if(PlatformDivision64(curTxOkCnt+curRxOkCnt, 2) > 1875000)
-                                       TrafficLoad = TRAFFIC_HIGH;
-                               else
-                                       TrafficLoad = TRAFFIC_LOW;
-                       }
-                       if(TrafficLoad == TRAFFIC_HIGH)
-                               pDM_SWAT_Table->bTriggerAntennaSwitch = 0;
-                       //RT_TRACE(COMP_INIT, DBG_LOUD, ("Normal:TrafficLoad = %llu\n", curTxOkCnt+curRxOkCnt));
-
-                       //Prepare To Try Antenna                
-                               nextAntenna = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? AUX_ANT : MAIN_ANT;
-                               pDM_SWAT_Table->try_flag = 1;
-                               pHalData->RSSI_test = TRUE;
-                       if((curRxOkCnt+curTxOkCnt) > 1000)
-                       {
-#if DEV_BUS_TYPE==RT_PCI_INTERFACE
-                           pDM_SWAT_Table->RSSI_Trying = 4;                           
-#else
-                           pDM_SWAT_Table->RSSI_Trying = 2;
-#endif
-                               pDM_SWAT_Table->TestMode = TP_MODE;
-                       }
-                       else
-                       {
-                               pDM_SWAT_Table->RSSI_Trying = 2;
-                               pDM_SWAT_Table->TestMode = RSSI_MODE;
-
-                       }
-                          
-                       //RT_TRACE(COMP_INIT, DBG_LOUD, ("SWAS: Normal State -> Begin Trying!\n"));                     
-                       pHalData->RSSI_sum_A = 0;
-                       pHalData->RSSI_cnt_A = 0;
-                       pHalData->RSSI_sum_B = 0;
-                       pHalData->RSSI_cnt_B = 0;
-               } // end of try_flag=0
-       }
-       
-       //1 4.Change TRX antenna
-       if(nextAntenna != pDM_SWAT_Table->CurAntenna)
-       {
-       
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Change TX Antenna!\n "));
-               //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, nextAntenna); for 88C
-               if(nextAntenna==MAIN_ANT)
-               {
-                   ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Next Antenna is RF PATH A\n "));
-                   pathdiv_para = 0x02;   //02 to switchback to RF path A
-                   fw_value = 0x03;
-#if DEV_BUS_TYPE==RT_PCI_INTERFACE
-                 odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
-#else
-                 ODM_FillH2CCmd(Adapter, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));      
-#endif
-               }       
-              else if(nextAntenna==AUX_ANT)
-              {
-                  ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Next Antenna is RF PATH B\n "));
-                  if(switchfirsttime==0)  // First Time To Enter Path Diversity
-                  {
-                      switchfirsttime=0x01;
-                      pathdiv_para = 0x00;
-                         fw_value=0x00;    // to backup RF Path A Releated Registers             
-                                         
-#if DEV_BUS_TYPE==RT_PCI_INTERFACE
-                     odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
-#else
-                     ODM_FillH2CCmd(Adapter, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));  
-                     //for(u1Byte n=0; n<80,n++)
-                     //{
-                     //delay_us(500);
-                         ODM_delay_ms(500);
-                     odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
-                                        
-                        fw_value=0x01;         // to backup RF Path A Releated Registers                
-                     ODM_FillH2CCmd(Adapter, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));  
-#endif 
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: FIRST TIME To DO PATH SWITCH!\n "));    
-                  }               
-                   else
-                   {
-                       pathdiv_para = 0x01;
-                        fw_value = 0x02;       
-#if DEV_BUS_TYPE==RT_PCI_INTERFACE
-                     odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
-#else
-                     ODM_FillH2CCmd(Adapter, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));  
-#endif 
-                   }           
-              }
-           //   odm_PathDiversity_8192D(Adapter, pathdiv_para);
-       }
-
-       //1 5.Reset Statistics
-       pDM_SWAT_Table->PreAntenna = pDM_SWAT_Table->CurAntenna;
-       pDM_SWAT_Table->CurAntenna = nextAntenna;
-       pDM_SWAT_Table->PreRSSI = curRSSI;
-
-       //1 6.Set next timer
-
-       if(pDM_SWAT_Table->RSSI_Trying == 0)
-               return;
-
-       if(pDM_SWAT_Table->RSSI_Trying%2 == 0)
-       {
-               if(pDM_SWAT_Table->TestMode == TP_MODE)
-               {
-                       if(TrafficLoad == TRAFFIC_HIGH)
-                       {
-#if DEV_BUS_TYPE==RT_PCI_INTERFACE
-                               ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 10 ); //ms
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Test another antenna for 10 ms\n"));
-#else
-                               ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 20 ); //ms
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Test another antenna for 20 ms\n"));
-#endif                         
-                       }
-                       else if(TrafficLoad == TRAFFIC_LOW)
-                       {
-                               ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 50 ); //ms
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Test another antenna for 50 ms\n"));
-                       }
-               }
-               else   // TestMode == RSSI_MODE
-               {
-                       ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 500 ); //ms
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Test another antenna for 500 ms\n"));
-               }
-       }
-       else
-       {
-               if(pDM_SWAT_Table->TestMode == TP_MODE)
-               {
-                       if(TrafficLoad == TRAFFIC_HIGH)
-                               
-#if DEV_BUS_TYPE==RT_PCI_INTERFACE
-                               ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 90 ); //ms
-                               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Test another antenna for 90 ms\n"));
-#else          
-                               ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 180); //ms
-#endif                         
-                       else if(TrafficLoad == TRAFFIC_LOW)
-                               ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 100 ); //ms
-               }
-               else
-                       ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 500 ); //ms
-       }
-}
-\r
-\r
-\r
-VOID
-ODM_CCKPathDiversityChkPerPktRssi(
-       PADAPTER                Adapter,
-       BOOLEAN                 bIsDefPort,
-       BOOLEAN                 bMatchBSSID,
-       PRT_WLAN_STA    pEntry,
-       PRT_RFD                 pRfd,
-       pu1Byte                 pDesc
-       )
-{
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       BOOLEAN                 bCount = FALSE;
-       pPD_T   pDM_PDTable = &Adapter->DM_PDTable;
-       //BOOLEAN       isCCKrate = RX_HAL_IS_CCK_RATE_92C(pDesc);
-#if DEV_BUS_TYPE != RT_SDIO_INTERFACE
-       BOOLEAN isCCKrate = RX_HAL_IS_CCK_RATE(Adapter, pDesc);
-#else  //below code would be removed if we have verified SDIO
-       BOOLEAN isCCKrate = IS_HARDWARE_TYPE_8188E(Adapter) ? RX_HAL_IS_CCK_RATE_88E(pDesc) : RX_HAL_IS_CCK_RATE_92C(pDesc);
-#endif
-
-       if((pHalData->PathDivCfg != 1) || (pHalData->RSSI_test == FALSE))
-               return;
-               
-       if(pHalData->RSSI_target==NULL && bIsDefPort && bMatchBSSID)
-               bCount = TRUE;
-       else if(pHalData->RSSI_target!=NULL && pEntry!=NULL && pHalData->RSSI_target==pEntry)
-               bCount = TRUE;
-
-       if(bCount && isCCKrate)
-       {
-               if(pDM_PDTable->TrainingState == 1 )
-               {
-                       if(pEntry)
-                       {
-                               if(pEntry->rssi_stat.RSSI_CCK_Path_cnt[0] != 0)
-                                       pEntry->rssi_stat.RSSI_CCK_Path[0] += pRfd->Status.RxPWDBAll;
-                               pEntry->rssi_stat.RSSI_CCK_Path_cnt[0]++;
-                       }
-                       else
-                       {
-                               if(pDM_PDTable->RSSI_CCK_Path_cnt[0] != 0)
-                                       pDM_PDTable->RSSI_CCK_Path[0] += pRfd->Status.RxPWDBAll;
-                               pDM_PDTable->RSSI_CCK_Path_cnt[0]++;
-                       }
-               }
-               else if(pDM_PDTable->TrainingState == 2 )
-               {
-                       if(pEntry)
-                       {
-                               if(pEntry->rssi_stat.RSSI_CCK_Path_cnt[1] != 0)
-                                       pEntry->rssi_stat.RSSI_CCK_Path[1] += pRfd->Status.RxPWDBAll;
-                               pEntry->rssi_stat.RSSI_CCK_Path_cnt[1]++;
-                       }
-                       else
-                       {
-                               if(pDM_PDTable->RSSI_CCK_Path_cnt[1] != 0)
-                                       pDM_PDTable->RSSI_CCK_Path[1] += pRfd->Status.RxPWDBAll;
-                               pDM_PDTable->RSSI_CCK_Path_cnt[1]++;
-                       }
-               }
-       }
-}
-
-
-
-
-//Neil Chen---2011--06--22
-//----92D Path Diversity----//
-//#ifdef PathDiv92D
-//==================================
-//3 Path Diversity 
-//==================================
-//
-// 20100514 Luke/Joseph:
-// Add new function for antenna diversity after link.
-// This is the main function of antenna diversity after link.
-// This function is called in HalDmWatchDog() and ODM_SwAntDivChkAntSwitchCallback().
-// HalDmWatchDog() calls this function with SWAW_STEP_PEAK to initialize the antenna test.
-// In SWAW_STEP_PEAK, another antenna and a 500ms timer will be set for testing.
-// After 500ms, ODM_SwAntDivChkAntSwitchCallback() calls this function to compare the signal just
-// listened on the air with the RSSI of original antenna.
-// It chooses the antenna with better RSSI.
-// There is also a aged policy for error trying. Each error trying will cost more 5 seconds waiting 
-// penalty to get next try.
-//
-//
-// 20100503 Joseph:
-// Add new function SwAntDivCheck8192C().
-// This is the main function of Antenna diversity function before link.
-// Mainly, it just retains last scan result and scan again.
-// After that, it compares the scan result to see which one gets better RSSI.
-// It selects antenna with better receiving power and returns better scan result.
-//
-
-
-//
-// 20100514 Luke/Joseph:
-// This function is used to gather the RSSI information for antenna testing.
-// It selects the RSSI of the peer STA that we want to know.
-//
-VOID
-ODM_PathDivChkPerPktRssi(
-       PADAPTER                Adapter,
-       BOOLEAN                 bIsDefPort,
-       BOOLEAN                 bMatchBSSID,
-       PRT_WLAN_STA    pEntry,
-       PRT_RFD                 pRfd
-       )
-{
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);      
-       BOOLEAN                 bCount = FALSE;
-       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
-       pSWAT_T                 pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-
-       if(pHalData->RSSI_target==NULL && bIsDefPort && bMatchBSSID)
-               bCount = TRUE;
-       else if(pHalData->RSSI_target!=NULL && pEntry!=NULL && pHalData->RSSI_target==pEntry)
-               bCount = TRUE;
-
-       if(bCount)
-       {
-               //1 RSSI for SW Antenna Switch
-               if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
-               {
-                       pHalData->RSSI_sum_A += pRfd->Status.RxPWDBAll;
-                       pHalData->RSSI_cnt_A++;
-               }
-               else
-               {
-                       pHalData->RSSI_sum_B += pRfd->Status.RxPWDBAll;
-                       pHalData->RSSI_cnt_B++;
-
-               }
-       }
-}
-\r
-\r
-//
-// 20100514 Luke/Joseph:
-// Add new function to reset antenna diversity state after link.
-//
-VOID
-ODM_PathDivRestAfterLink(
-       IN      PDM_ODM_T               pDM_Odm
-       )
-{
-       PADAPTER                Adapter=pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       pSWAT_T                 pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-
-       pHalData->RSSI_cnt_A = 0;
-       pHalData->RSSI_cnt_B = 0;
-       pHalData->RSSI_test = FALSE;
-       pDM_SWAT_Table->try_flag = 0x0;       // NOT 0xff
-       pDM_SWAT_Table->RSSI_Trying = 0;
-       pDM_SWAT_Table->SelectAntennaMap=0xAA;
-       pDM_SWAT_Table->CurAntenna = MAIN_ANT;  
-}\r
-\r
-\r
-//==================================================
-//3 PathDiv End
-//==================================================\r
-\r
-\r
-VOID
-ODM_FillTXPathInTXDESC(
-               IN      PADAPTER        Adapter,
-               IN      PRT_TCB         pTcb,
-               IN      pu1Byte         pDesc
-)
-{
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       u4Byte  TXPath;
-       pPD_T   pDM_PDTable = &Adapter->DM_PDTable;
-
-       //2011.09.05  Add by Luke Lee for path diversity
-       if(pHalData->PathDivCfg == 1)
-       {       
-               TXPath = (pDM_PDTable->OFDMTXPath >> pTcb->macId) & BIT0;
-               //RT_TRACE(     COMP_INIT, DBG_LOUD, ("Fill TXDESC: macID=%d, TXPath=%d\n", pTcb->macId, TXPath));
-               //SET_TX_DESC_TX_ANT_CCK(pDesc,TXPath);
-               if(TXPath == 0)
-               {
-                       SET_TX_DESC_TX_ANTL_92C(pDesc,1);
-                       SET_TX_DESC_TX_ANT_HT_92C(pDesc,1);
-               }
-               else
-               {
-                       SET_TX_DESC_TX_ANTL_92C(pDesc,2);
-                       SET_TX_DESC_TX_ANT_HT_92C(pDesc,2);
-               }
-               TXPath = (pDM_PDTable->CCKTXPath >> pTcb->macId) & BIT0;
-               if(TXPath == 0)
-               {
-                       SET_TX_DESC_TX_ANT_CCK_92C(pDesc,1);
-               }
-               else
-               {
-                       SET_TX_DESC_TX_ANT_CCK_92C(pDesc,2);
-               }
-       }
-}
-
-//Only for MP //Neil Chen--2012--0502--
-VOID
-odm_PathDivInit_92D(
-IN     PDM_ODM_T       pDM_Odm)
-{
-       pPATHDIV_PARA   pathIQK = &pDM_Odm->pathIQK;
-
-       pathIQK->org_2g_RegC14=0x0;
-       pathIQK->org_2g_RegC4C=0x0;
-       pathIQK->org_2g_RegC80=0x0;
-       pathIQK->org_2g_RegC94=0x0;
-       pathIQK->org_2g_RegCA0=0x0;
-       pathIQK->org_5g_RegC14=0x0;
-       pathIQK->org_5g_RegCA0=0x0;
-       pathIQK->org_5g_RegE30=0x0;
-       pathIQK->swt_2g_RegC14=0x0;
-       pathIQK->swt_2g_RegC4C=0x0;
-       pathIQK->swt_2g_RegC80=0x0;
-       pathIQK->swt_2g_RegC94=0x0;
-       pathIQK->swt_2g_RegCA0=0x0;
-       pathIQK->swt_5g_RegC14=0x0;
-       pathIQK->swt_5g_RegCA0=0x0;
-       pathIQK->swt_5g_RegE30=0x0;
-
-}\r
-\r
-\r
-u1Byte
-odm_SwAntDivSelectScanChnl(
-       IN      PADAPTER        Adapter
-       )
-{
-#if (RT_MEM_SIZE_LEVEL != RT_MEM_SIZE_MINIMUM)
-       PHAL_DATA_TYPE          pHalData = GET_HAL_DATA(Adapter);
-       PMGNT_INFO                      pMgntInfo = &(Adapter->MgntInfo);
-       PDM_ODM_T                       pDM_Odm = &pHalData->DM_OutSrc;
-       u1Byte                          i, j, ScanChannel = 0, ChannelNum = 0;
-       PRT_CHANNEL_LIST        pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo);
-       u1Byte                          EachChannelSTAs[MAX_SCAN_CHANNEL_NUM] = {0};
-
-       if(pMgntInfo->tmpNumBssDesc == 0)
-               return 0;
-
-       for(i = 0; i < pMgntInfo->tmpNumBssDesc; i++)
-       {               
-               ChannelNum = pMgntInfo->tmpbssDesc[i].ChannelNumber;
-               for(j = 0; j < pChannelList->ChannelLen; j++)
-               {
-                       if(pChannelList->ChnlListEntry[j].ChannelNum == ChannelNum)
-                       {
-                               EachChannelSTAs[j]++;
-                               break;
-                       }
-               }
-       }
-       
-       for(i = 0; i < MAX_SCAN_CHANNEL_NUM; i++)
-               {
-               if(EachChannelSTAs[i] > EachChannelSTAs[ScanChannel])
-                       ScanChannel = i;
-               }
-
-       if(EachChannelSTAs[ScanChannel] == 0)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("odm_SwAntDivSelectScanChnl(): Scan List is empty.\n"));
-               return 0;
-       }
-       
-       ScanChannel = pChannelList->ChnlListEntry[ScanChannel].ChannelNum;
-
-       
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, 
-               ("odm_SwAntDivSelectScanChnl(): Channel (( %d )) is select as scan channel.\n", ScanChannel));
-
-       return ScanChannel;
-#else
-       return  0;
-#endif 
-}
-
-
-VOID
-odm_SwAntDivConstructScanChnl(
-       IN      PADAPTER        Adapter,
-       IN      u1Byte          ScanChnl
-       )
-{
-
-       PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;
-
-       if(ScanChnl == 0)
-       {
-               u1Byte                          i;              
-               PRT_CHANNEL_LIST        pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo);
-       
-               // 20100519 Joseph: Original antenna scanned nothing. 
-               // Test antenna shall scan all channel with half period in this condition.
-
-               RT_TRACE_F(COMP_SCAN, DBG_TRACE, (" RT_CHNL_LIST_ACTION_CONSTRUCT chnl %d \n", ScanChnl));
-
-               RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST, NULL, NULL);
-               for(i = 0; i < pChannelList->ChannelLen; i++)
-                       pChannelList->ChnlListEntry[i].ScanPeriod /= 2;
-       }
-       else
-       {
-               // The using of this CustomizedScanRequest is a trick to rescan the two channels 
-               //      under the NORMAL scanning process. It will not affect MGNT_INFO.CustomizedScanRequest.
-               CUSTOMIZED_SCAN_REQUEST CustomScanReq;
-
-               CustomScanReq.bEnabled = TRUE;
-               CustomScanReq.Channels[0] = ScanChnl;
-               CustomScanReq.Channels[1] = pMgntInfo->dot11CurrentChannelNumber;
-               CustomScanReq.nChannels = 2;
-               CustomScanReq.ScanType = SCAN_ACTIVE;
-               CustomScanReq.Duration = DEFAULT_PASSIVE_SCAN_PERIOD;
-
-               RT_TRACE_F(COMP_SCAN, DBG_TRACE, (" RT_CHNL_LIST_ACTION_CONSTRUCT chnl %d \n", ScanChnl));
-
-               RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST, &CustomScanReq, NULL);
-       }
-
-}
-\r
-\r
-#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_PathDiv.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_PathDiv.h
deleted file mode 100755 (executable)
index 85791d0..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
\r
-#ifndef        __ODMPATHDIV_H__\r
-#define    __ODMPATHDIV_H__\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) \r
-\r
-VOID   \r
-odm_PathDiversityInit(\r
-       IN      PVOID   pDM_VOID\r
-       );\r
-\r
-VOID    \r
-odm_PathDiversity(\r
-       IN      PVOID   pDM_VOID\r
-       );\r
-\r
-#endif  //(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) \r
-\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) \r
-\r
-//#define   PATHDIV_ENABLE      1\r
-#define dm_PathDiv_RSSI_Check  ODM_PathDivChkPerPktRssi\r
-#define PathDivCheckBeforeLink8192C    ODM_PathDiversityBeforeLink92C\r
-\r
-typedef struct _PathDiv_Parameter_define_\r
-{\r
-       u4Byte org_5g_RegE30;\r
-       u4Byte org_5g_RegC14;\r
-       u4Byte org_5g_RegCA0;\r
-       u4Byte swt_5g_RegE30;\r
-       u4Byte swt_5g_RegC14;\r
-       u4Byte swt_5g_RegCA0;\r
-       //for 2G IQK information\r
-       u4Byte org_2g_RegC80;\r
-       u4Byte org_2g_RegC4C;\r
-       u4Byte org_2g_RegC94;\r
-       u4Byte org_2g_RegC14;\r
-       u4Byte org_2g_RegCA0;\r
-\r
-       u4Byte swt_2g_RegC80;\r
-       u4Byte swt_2g_RegC4C;\r
-       u4Byte swt_2g_RegC94;\r
-       u4Byte swt_2g_RegC14;\r
-       u4Byte swt_2g_RegCA0;\r
-}PATHDIV_PARA,*pPATHDIV_PARA;\r
-\r
-VOID   \r
-odm_PathDiversityInit_92C(\r
-       IN      PADAPTER        Adapter\r
-       );\r
-\r
-VOID   \r
-odm_2TPathDiversityInit_92C(\r
-       IN      PADAPTER        Adapter\r
-       );\r
-\r
-VOID   \r
-odm_1TPathDiversityInit_92C(   \r
-       IN      PADAPTER        Adapter\r
-       );\r
-\r
-BOOLEAN\r
-odm_IsConnected_92C(\r
-       IN      PADAPTER        Adapter\r
-       );\r
-\r
-BOOLEAN \r
-ODM_PathDiversityBeforeLink92C(\r
-       //IN    PADAPTER        Adapter\r
-       IN              PDM_ODM_T               pDM_Odm\r
-       );\r
-\r
-VOID   \r
-odm_PathDiversityAfterLink_92C(\r
-       IN      PADAPTER        Adapter\r
-       );\r
-\r
-VOID\r
-odm_SetRespPath_92C(   \r
-       IN      PADAPTER        Adapter,        \r
-       IN      u1Byte  DefaultRespPath\r
-       );\r
-\r
-VOID   \r
-odm_OFDMTXPathDiversity_92C(\r
-       IN      PADAPTER        Adapter\r
-       );\r
-\r
-VOID   \r
-odm_CCKTXPathDiversity_92C(    \r
-       IN      PADAPTER        Adapter\r
-       );\r
-\r
-VOID   \r
-odm_ResetPathDiversity_92C(    \r
-       IN      PADAPTER        Adapter\r
-       );\r
-\r
-VOID\r
-odm_CCKTXPathDiversityCallback(\r
-       PRT_TIMER               pTimer\r
-       );\r
-\r
-VOID\r
-odm_CCKTXPathDiversityWorkItemCallback(\r
-       IN PVOID            pContext\r
-       );\r
-\r
-VOID\r
-odm_PathDivChkAntSwitchCallback(\r
-       PRT_TIMER               pTimer\r
-       );\r
-\r
-VOID\r
-odm_PathDivChkAntSwitchWorkitemCallback(\r
-       IN PVOID            pContext\r
-       );\r
-\r
-\r
-VOID \r
-odm_PathDivChkAntSwitch(\r
-       PDM_ODM_T    pDM_Odm\r
-       );\r
-\r
-VOID\r
-ODM_CCKPathDiversityChkPerPktRssi(\r
-       PADAPTER                Adapter,\r
-       BOOLEAN                 bIsDefPort,\r
-       BOOLEAN                 bMatchBSSID,\r
-       PRT_WLAN_STA    pEntry,\r
-       PRT_RFD                 pRfd,\r
-       pu1Byte                 pDesc\r
-       );\r
-\r
-VOID \r
-ODM_PathDivChkPerPktRssi(\r
-       PADAPTER                Adapter,\r
-       BOOLEAN                 bIsDefPort,\r
-       BOOLEAN                 bMatchBSSID,\r
-       PRT_WLAN_STA    pEntry,\r
-       PRT_RFD                 pRfd    \r
-       );\r
-\r
-VOID
-ODM_PathDivRestAfterLink(
-       IN      PDM_ODM_T               pDM_Odm
-       );\r
-\r
-VOID
-ODM_FillTXPathInTXDESC(
-               IN      PADAPTER        Adapter,
-               IN      PRT_TCB         pTcb,
-               IN      pu1Byte         pDesc
-       );\r
-\r
-VOID
-odm_PathDivInit_92D(
-       IN      PDM_ODM_T       pDM_Odm\r
-       );\r
-\r
-u1Byte\r
-odm_SwAntDivSelectScanChnl(
-       IN      PADAPTER        Adapter
-       );\r
-\r
-VOID
-odm_SwAntDivConstructScanChnl(
-       IN      PADAPTER        Adapter,
-       IN      u1Byte          ScanChnl
-       );\r
-       \r
- #endif       //#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) \r
\r
\r
- #endif                 //#ifndef  __ODMPATHDIV_H__\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RaInfo.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RaInfo.c
deleted file mode 100755 (executable)
index e6dfd55..0000000
+++ /dev/null
@@ -1,1583 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-#include "odm_precomp.h"\r
-\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-VOID\r
-odm_RSSIMonitorInit(\r
-       IN              PVOID           pDM_VOID\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       pRA_T           pRA_Table = &pDM_Odm->DM_RA_Table;\r
-       pRA_Table->firstconnect = FALSE;\r
-       \r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
-       pRA_Table->PT_collision_pre = TRUE;   //be used in ODM_DynamicARFBSelect(WIN only)\r
-#endif \r
-\r
-}\r
-#endif\r
-\r
-VOID\r
-odm_RSSIMonitorCheck(\r
-       IN              PVOID           pDM_VOID\r
-       )\r
-{\r
-       // \r
-       // For AP/ADSL use prtl8192cd_priv\r
-       // For CE/NIC use PADAPTER\r
-       //\r
-PDM_ODM_T              pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       if (!(pDM_Odm->SupportAbility & ODM_BB_RSSI_MONITOR))\r
-               return;\r
-       \r
-       //\r
-       // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate\r
-       // at the same time. In the stage2/3, we need to prive universal interface and merge all\r
-       // HW dynamic mechanism.\r
-       //\r
-       switch  (pDM_Odm->SupportPlatform)\r
-       {\r
-               case    ODM_WIN:\r
-                       odm_RSSIMonitorCheckMP(pDM_Odm);\r
-                       break;\r
-\r
-               case    ODM_CE:\r
-                       odm_RSSIMonitorCheckCE(pDM_Odm);\r
-                       break;\r
-\r
-               case    ODM_AP:\r
-                       odm_RSSIMonitorCheckAP(pDM_Odm);\r
-                       break;          \r
-\r
-               case    ODM_ADSL:\r
-                       //odm_DIGAP(pDM_Odm);\r
-                       break;  \r
-       }\r
-       \r
-}      // odm_RSSIMonitorCheck\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-VOID\r
-odm_RSSIDumpToRegister(\r
-       IN      PVOID   pDM_VOID\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-\r
-       if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-       {\r
-               PlatformEFIOWrite1Byte(Adapter, rA_RSSIDump_Jaguar, Adapter->RxStats.RxRSSIPercentage[0]);\r
-               PlatformEFIOWrite1Byte(Adapter, rB_RSSIDump_Jaguar, Adapter->RxStats.RxRSSIPercentage[1]);\r
-\r
-               // Rx EVM\r
-               PlatformEFIOWrite1Byte(Adapter, rS1_RXevmDump_Jaguar, Adapter->RxStats.RxEVMdbm[0]);\r
-               PlatformEFIOWrite1Byte(Adapter, rS2_RXevmDump_Jaguar, Adapter->RxStats.RxEVMdbm[1]);\r
-\r
-               // Rx SNR\r
-               PlatformEFIOWrite1Byte(Adapter, rA_RXsnrDump_Jaguar, (u1Byte)(Adapter->RxStats.RxSNRdB[0]));\r
-               PlatformEFIOWrite1Byte(Adapter, rB_RXsnrDump_Jaguar, (u1Byte)(Adapter->RxStats.RxSNRdB[1]));\r
-\r
-               // Rx Cfo_Short\r
-               PlatformEFIOWrite2Byte(Adapter, rA_CfoShortDump_Jaguar, Adapter->RxStats.RxCfoShort[0]);\r
-               PlatformEFIOWrite2Byte(Adapter, rB_CfoShortDump_Jaguar, Adapter->RxStats.RxCfoShort[1]);\r
-\r
-               // Rx Cfo_Tail\r
-               PlatformEFIOWrite2Byte(Adapter, rA_CfoLongDump_Jaguar, Adapter->RxStats.RxCfoTail[0]);\r
-               PlatformEFIOWrite2Byte(Adapter, rB_CfoLongDump_Jaguar, Adapter->RxStats.RxCfoTail[1]);\r
-       }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
-               PlatformEFIOWrite1Byte(Adapter, rA_RSSIDump_92E, Adapter->RxStats.RxRSSIPercentage[0]);\r
-               PlatformEFIOWrite1Byte(Adapter, rB_RSSIDump_92E, Adapter->RxStats.RxRSSIPercentage[1]);\r
-               // Rx EVM\r
-               PlatformEFIOWrite1Byte(Adapter, rS1_RXevmDump_92E, Adapter->RxStats.RxEVMdbm[0]);\r
-               PlatformEFIOWrite1Byte(Adapter, rS2_RXevmDump_92E, Adapter->RxStats.RxEVMdbm[1]);\r
-               // Rx SNR\r
-               PlatformEFIOWrite1Byte(Adapter, rA_RXsnrDump_92E, (u1Byte)(Adapter->RxStats.RxSNRdB[0]));\r
-               PlatformEFIOWrite1Byte(Adapter, rB_RXsnrDump_92E, (u1Byte)(Adapter->RxStats.RxSNRdB[1]));\r
-               // Rx Cfo_Short\r
-               PlatformEFIOWrite2Byte(Adapter, rA_CfoShortDump_92E, Adapter->RxStats.RxCfoShort[0]);\r
-               PlatformEFIOWrite2Byte(Adapter, rB_CfoShortDump_92E, Adapter->RxStats.RxCfoShort[1]);\r
-               // Rx Cfo_Tail\r
-               PlatformEFIOWrite2Byte(Adapter, rA_CfoLongDump_92E, Adapter->RxStats.RxCfoTail[0]);\r
-               PlatformEFIOWrite2Byte(Adapter, rB_CfoLongDump_92E, Adapter->RxStats.RxCfoTail[1]);\r
-        }\r
-}\r
-#endif\r
-\r
-VOID\r
-odm_RSSIMonitorCheckMP(\r
-       IN      PVOID   pDM_VOID\r
-       )\r
-{\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
-       PRT_WLAN_STA    pEntry = NULL;\r
-       u1Byte                  i;\r
-       s4Byte                  tmpEntryMaxPWDB=0, tmpEntryMinPWDB=0xff;\r
-       u1Byte                  H2C_Parameter[4] ={0};\r
-       PMGNT_INFO              pMgntInfo = &Adapter->MgntInfo;\r
-       PMGNT_INFO              pDefaultMgntInfo = &Adapter->MgntInfo;\r
-       u8Byte                  curTxOkCnt = 0, curRxOkCnt = 0; \r
-       u1Byte                  STBC_TX = 0;\r
-       BOOLEAN                 FirstConnect;                                                    \r
-       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table; \r
-       pDIG_T                  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
-\r
-#if (BEAMFORMING_SUPPORT == 1) \r
-       BEAMFORMING_CAP Beamform_cap = BEAMFORMING_CAP_NONE;\r
-       u1Byte                  TxBF_EN = 0;\r
-#endif\r
-\r
-       PADAPTER        pLoopAdapter = GetDefaultAdapter(Adapter);\r
-\r
-       BOOLEAN         bExtRAInfo = FALSE;\r
-\r
-       if(pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8812 || pDM_Odm->SupportICType == ODM_RTL8821)\r
-               bExtRAInfo = TRUE;\r
-\r
-       FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == FALSE);\r
-       pRA_Table->firstconnect = pHalData->bLinked;                                               \r
-       H2C_Parameter[3] |= FirstConnect << 5;\r
-\r
-       if(pDM_Odm->SupportICType == ODM_RTL8188E && (pDefaultMgntInfo->CustomerID==RT_CID_819x_HP))\r
-       {\r
-               if(curRxOkCnt >(curTxOkCnt*6))\r
-                       PlatformEFIOWrite4Byte(Adapter, REG_ARFR0, 0x8f015);\r
-               else\r
-                       PlatformEFIOWrite4Byte(Adapter, REG_ARFR0, 0xff015);\r
-       }       \r
-\r
-       if(pDM_Odm->SupportICType == ODM_RTL8812 || pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               if(curRxOkCnt >(curTxOkCnt*6))\r
-                       H2C_Parameter[3]=0x01;\r
-               else\r
-                       H2C_Parameter[3]=0x00;\r
-       }\r
-\r
-       while(pLoopAdapter)\r
-       {               \r
-       \r
-               if(pLoopAdapter != NULL){\r
-                       pMgntInfo = &pLoopAdapter->MgntInfo;                    \r
-                       curTxOkCnt = pLoopAdapter->TxStats.NumTxBytesUnicast - pMgntInfo->lastTxOkCnt;\r
-                       curRxOkCnt = pLoopAdapter->RxStats.NumRxBytesUnicast - pMgntInfo->lastRxOkCnt;\r
-                       pMgntInfo->lastTxOkCnt = curTxOkCnt;\r
-                       pMgntInfo->lastRxOkCnt = curRxOkCnt;                    \r
-               }\r
-\r
-               for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++)\r
-               {\r
-               \r
-                       if(IsAPModeExist(pLoopAdapter))\r
-                       {\r
-                               if(GetFirstExtAdapter(pLoopAdapter) != NULL && \r
-                                       GetFirstExtAdapter(pLoopAdapter) == pLoopAdapter){      \r
-                                       pEntry = AsocEntry_EnumStation(pLoopAdapter, i);                \r
-                               }\r
-                               else if(GetFirstGOPort(pLoopAdapter) != NULL && \r
-                                       IsFirstGoAdapter(pLoopAdapter)){\r
-                                       pEntry = AsocEntry_EnumStation(pLoopAdapter, i);                                                \r
-                               }                               \r
-                       }\r
-                       else\r
-                       {\r
-                                       if(GetDefaultAdapter(pLoopAdapter) == pLoopAdapter){\r
-                                               pEntry = AsocEntry_EnumStation(pLoopAdapter, i);                                        \r
-                                       }\r
-                       }\r
-\r
-               if(pEntry != NULL)\r
-               {\r
-                       if(pEntry->bAssociated)\r
-                       {\r
-                       \r
-                               RT_DISP_ADDR(FDM, DM_PWDB, ("pEntry->MacAddr ="), pEntry->MacAddr);\r
-                               RT_DISP(FDM, DM_PWDB, ("pEntry->rssi = 0x%x(%d)\n", \r
-                                       pEntry->rssi_stat.UndecoratedSmoothedPWDB, pEntry->rssi_stat.UndecoratedSmoothedPWDB));\r
-\r
-                               if(bExtRAInfo)\r
-                               {\r
-\r
-#if (BEAMFORMING_SUPPORT == 1)\r
-                                       Beamform_cap = Beamforming_GetEntryBeamCapByMacId(Adapter, pEntry->AssociatedMacId);\r
-                                       if(Beamform_cap & (BEAMFORMER_CAP_HT_EXPLICIT |BEAMFORMER_CAP_VHT_SU))\r
-                                               TxBF_EN = 1;\r
-                                       else\r
-                                               TxBF_EN = 0;\r
-       \r
-                                       H2C_Parameter[3] |= TxBF_EN << 6; \r
-                                       \r
-                                       if(TxBF_EN)\r
-                                               STBC_TX = 0;\r
-                                       else\r
-#endif\r
-                                       {\r
-                                               if(IS_WIRELESS_MODE_AC(Adapter))\r
-                                                       STBC_TX = TEST_FLAG(pEntry->VHTInfo.STBC, STBC_VHT_ENABLE_TX);\r
-                                               else\r
-                                                       STBC_TX = TEST_FLAG(pEntry->HTInfo.STBC, STBC_HT_ENABLE_TX);\r
-                                       }\r
-\r
-                                       H2C_Parameter[3] |= STBC_TX << 1;\r
-                               }\r
-\r
-                               if(pEntry->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB)\r
-                                       tmpEntryMinPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;\r
-                               if(pEntry->rssi_stat.UndecoratedSmoothedPWDB > tmpEntryMaxPWDB)\r
-                                       tmpEntryMaxPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;\r
-\r
-                               H2C_Parameter[2] = (u1Byte)(pEntry->rssi_stat.UndecoratedSmoothedPWDB & 0xFF);\r
-                               H2C_Parameter[1] = 0x20;   // fw v12 cmdid 5:use max macid ,for nic ,default macid is 0 ,max macid is 1\r
-                               H2C_Parameter[0] = (pEntry->AssociatedMacId);\r
-                               if(bExtRAInfo)\r
-                                       ODM_FillH2CCmd(Adapter, ODM_H2C_RSSI_REPORT, 4, H2C_Parameter);\r
-                               else\r
-                                       ODM_FillH2CCmd(Adapter, ODM_H2C_RSSI_REPORT, 3, H2C_Parameter);\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       break;\r
-               }\r
-       }\r
-\r
-               pLoopAdapter = GetNextExtAdapter(pLoopAdapter);\r
-       }\r
-\r
-       if(tmpEntryMaxPWDB != 0)        // If associated entry is found\r
-       {\r
-               pHalData->EntryMaxUndecoratedSmoothedPWDB = tmpEntryMaxPWDB;\r
-               RT_DISP(FDM, DM_PWDB, ("EntryMaxPWDB = 0x%x(%d)\n",     tmpEntryMaxPWDB, tmpEntryMaxPWDB));\r
-       }\r
-       else\r
-       {\r
-               pHalData->EntryMaxUndecoratedSmoothedPWDB = 0;\r
-       }\r
-       \r
-       if(tmpEntryMinPWDB != 0xff) // If associated entry is found\r
-       {\r
-               pHalData->EntryMinUndecoratedSmoothedPWDB = tmpEntryMinPWDB;\r
-               RT_DISP(FDM, DM_PWDB, ("EntryMinPWDB = 0x%x(%d)\n", tmpEntryMinPWDB, tmpEntryMinPWDB));\r
-\r
-       }\r
-       else\r
-       {\r
-               pHalData->EntryMinUndecoratedSmoothedPWDB = 0;\r
-       }\r
-\r
-       // Indicate Rx signal strength to FW.\r
-       if(pHalData->bUseRAMask)\r
-       {\r
-               if(bExtRAInfo)\r
-               {\r
-                       PRT_HIGH_THROUGHPUT             pHTInfo = GET_HT_INFO(pDefaultMgntInfo);\r
-                       PRT_VERY_HIGH_THROUGHPUT        pVHTInfo = GET_VHT_INFO(pDefaultMgntInfo);\r
-\r
-#if (BEAMFORMING_SUPPORT == 1)\r
-                       \r
-                       Beamform_cap = Beamforming_GetEntryBeamCapByMacId(Adapter, pDefaultMgntInfo->mMacId);\r
-\r
-                       if(Beamform_cap & (BEAMFORMER_CAP_HT_EXPLICIT |BEAMFORMER_CAP_VHT_SU))\r
-                               TxBF_EN = 1;\r
-                       else\r
-                               TxBF_EN = 0;\r
-\r
-                       H2C_Parameter[3] |= TxBF_EN << 6; \r
-\r
-                       if(TxBF_EN)\r
-                               STBC_TX = 0;\r
-                       else\r
-#endif\r
-                       {\r
-                               if(IS_WIRELESS_MODE_AC(Adapter))\r
-                                       STBC_TX = TEST_FLAG(pVHTInfo->VhtCurStbc, STBC_VHT_ENABLE_TX);\r
-                               else\r
-                                       STBC_TX = TEST_FLAG(pHTInfo->HtCurStbc, STBC_HT_ENABLE_TX);\r
-                       }\r
-\r
-                       H2C_Parameter[3] |= STBC_TX << 1;\r
-               }\r
-               \r
-               H2C_Parameter[2] = (u1Byte)(pHalData->UndecoratedSmoothedPWDB & 0xFF);\r
-               H2C_Parameter[1] = 0x20;        // fw v12 cmdid 5:use max macid ,for nic ,default macid is 0 ,max macid is 1\r
-               H2C_Parameter[0] = 0;           // fw v12 cmdid 5:use max macid ,for nic ,default macid is 0 ,max macid is 1\r
-               if(bExtRAInfo)\r
-                       ODM_FillH2CCmd(Adapter, ODM_H2C_RSSI_REPORT, 4, H2C_Parameter);\r
-               else\r
-                       ODM_FillH2CCmd(Adapter, ODM_H2C_RSSI_REPORT, 3, H2C_Parameter);\r
-       }\r
-       else\r
-       {\r
-               PlatformEFIOWrite1Byte(Adapter, 0x4fe, (u1Byte)pHalData->UndecoratedSmoothedPWDB);\r
-       }\r
-\r
-       if((pDM_Odm->SupportICType == ODM_RTL8812)||(pDM_Odm->SupportICType == ODM_RTL8192E))\r
-               odm_RSSIDumpToRegister(pDM_Odm);\r
-               \r
-       {\r
-               PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter);\r
-               s4Byte  GlobalRSSI_min = 0xFF, LocalRSSI_Min;\r
-               BOOLEAN         bLink= FALSE;\r
-               \r
-               while(pLoopAdapter)\r
-               {\r
-                       LocalRSSI_Min = odm_FindMinimumRSSI(pLoopAdapter);\r
-                       //DbgPrint("pHalData->bLinked=%d, LocalRSSI_Min=%d\n", pHalData->bLinked, LocalRSSI_Min);\r
-                       if((LocalRSSI_Min < GlobalRSSI_min) && (LocalRSSI_Min != 0))\r
-                               GlobalRSSI_min = LocalRSSI_Min;                 \r
-                       \r
-                       if(pHalData->bLinked)\r
-                               bLink = TRUE;\r
-                       \r
-                       pLoopAdapter = GetNextExtAdapter(pLoopAdapter);\r
-               }\r
-\r
-               pHalData->bLinked = bLink;\r
-               ODM_CmnInfoUpdate(&pHalData->DM_OutSrc ,ODM_CMNINFO_LINK, (u8Byte)bLink);\r
-               ODM_CmnInfoUpdate(&pHalData->DM_OutSrc ,ODM_CMNINFO_RSSI_MIN, (u8Byte)GlobalRSSI_min);\r
-               \r
-       }\r
-       \r
-#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-}\r
-\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_CE)\r
-//\r
-//sherry move from DUSC to here 20110517\r
-//\r
-static VOID\r
-FindMinimumRSSI_Dmsp(\r
-       IN      PADAPTER        pAdapter\r
-)\r
-{\r
-#if 0\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
-       s32     Rssi_val_min_back_for_mac0;\r
-       BOOLEAN         bGetValueFromBuddyAdapter = dm_DualMacGetParameterFromBuddyAdapter(pAdapter);\r
-       BOOLEAN         bRestoreRssi = _FALSE;\r
-       PADAPTER        BuddyAdapter = pAdapter->BuddyAdapter;\r
-\r
-       if(pHalData->MacPhyMode92D == DUALMAC_SINGLEPHY)\r
-       {\r
-               if(BuddyAdapter!= NULL)\r
-               {\r
-                       if(pHalData->bSlaveOfDMSP)\r
-                       {\r
-                               //ODM_RT_TRACE(pDM_Odm,COMP_EASY_CONCURRENT,DBG_LOUD,("bSlavecase of dmsp\n"));\r
-                               BuddyAdapter->DualMacDMSPControl.RssiValMinForAnotherMacOfDMSP = pdmpriv->MinUndecoratedPWDBForDM;\r
-                       }\r
-                       else\r
-                       {\r
-                               if(bGetValueFromBuddyAdapter)\r
-                               {\r
-                                       //ODM_RT_TRACE(pDM_Odm,COMP_EASY_CONCURRENT,DBG_LOUD,("get new RSSI\n"));\r
-                                       bRestoreRssi = _TRUE;\r
-                                       Rssi_val_min_back_for_mac0 = pdmpriv->MinUndecoratedPWDBForDM;\r
-                                       pdmpriv->MinUndecoratedPWDBForDM = pAdapter->DualMacDMSPControl.RssiValMinForAnotherMacOfDMSP;\r
-                               }\r
-                       }\r
-               }\r
-               \r
-       }\r
-\r
-       if(bRestoreRssi)\r
-       {\r
-               bRestoreRssi = _FALSE;\r
-               pdmpriv->MinUndecoratedPWDBForDM = Rssi_val_min_back_for_mac0;\r
-       }\r
-#endif\r
-}\r
-\r
-static void\r
-FindMinimumRSSI(\r
-IN     PADAPTER        pAdapter\r
-       )\r
-{      \r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;   \r
-       PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
-\r
-       //1 1.Determine the minimum RSSI \r
-\r
-       if((pDM_Odm->bLinked != _TRUE) &&\r
-               (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))\r
-       {\r
-               pdmpriv->MinUndecoratedPWDBForDM = 0;\r
-               //ODM_RT_TRACE(pDM_Odm,COMP_BB_POWERSAVING, DBG_LOUD, ("Not connected to any \n"));\r
-       }\r
-       else\r
-       {\r
-               pdmpriv->MinUndecoratedPWDBForDM = pdmpriv->EntryMinUndecoratedSmoothedPWDB;\r
-       }\r
-\r
-       //DBG_8192C("%s=>MinUndecoratedPWDBForDM(%d)\n",__FUNCTION__,pdmpriv->MinUndecoratedPWDBForDM);\r
-       //ODM_RT_TRACE(pDM_Odm,COMP_DIG, DBG_LOUD, ("MinUndecoratedPWDBForDM =%d\n",pHalData->MinUndecoratedPWDBForDM));\r
-}\r
-#endif\r
-\r
-VOID\r
-odm_RSSIMonitorCheckCE(\r
-       IN              PVOID           pDM_VOID\r
-       )\r
-{\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER        Adapter = pDM_Odm->Adapter;\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
-       struct dvobj_priv       *pdvobjpriv = adapter_to_dvobj(Adapter);\r
-       int     i;\r
-       int     tmpEntryMaxPWDB=0, tmpEntryMinPWDB=0xff;\r
-       u8      sta_cnt=0;\r
-       u32     UL_DL_STATE = 0, STBC_TX = 0, TxBF_EN = 0;\r
-       u32     PWDB_rssi[NUM_STA]={0};//[0~15]:MACID, [16~31]:PWDB_rssi\r
-       BOOLEAN                 FirstConnect = FALSE;\r
-       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
-\r
-       if(pDM_Odm->bLinked != _TRUE)\r
-               return;\r
-\r
-       #if((RTL8812A_SUPPORT==1)||(RTL8821A_SUPPORT==1))\r
-       if((pDM_Odm->SupportICType == ODM_RTL8812)||(pDM_Odm->SupportICType == ODM_RTL8821))\r
-       {\r
-               u64     curTxOkCnt = pdvobjpriv->traffic_stat.cur_tx_bytes;\r
-               u64     curRxOkCnt = pdvobjpriv->traffic_stat.cur_rx_bytes;\r
-\r
-               if(curRxOkCnt >(curTxOkCnt*6))\r
-                       UL_DL_STATE = 1;\r
-               else\r
-                       UL_DL_STATE = 0;\r
-       }\r
-       #endif\r
-\r
-       FirstConnect = (pDM_Odm->bLinked) && (pRA_Table->firstconnect == FALSE);    \r
-       pRA_Table->firstconnect = pDM_Odm->bLinked;\r
-\r
-       //if(check_fwstate(&Adapter->mlmepriv, WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)\r
-       {\r
-               #if 1\r
-               struct sta_info *psta;\r
-               \r
-               for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++) {\r
-                       if (IS_STA_VALID(psta = pDM_Odm->pODM_StaInfo[i]))\r
-                       {\r
-                                       if(IS_MCAST( psta->hwaddr))  //if(psta->mac_id ==1)\r
-                                                continue;\r
-                                                               \r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB == (-1))\r
-                                                continue;\r
-                                                               \r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB)\r
-                                               tmpEntryMinPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
-\r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB > tmpEntryMaxPWDB)\r
-                                               tmpEntryMaxPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
-\r
-                                       #if 0\r
-                                       DBG_871X("%s mac_id:%u, mac:"MAC_FMT", rssi:%d\n", __func__,\r
-                                               psta->mac_id, MAC_ARG(psta->hwaddr), psta->rssi_stat.UndecoratedSmoothedPWDB);\r
-                                       #endif\r
-\r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB != (-1)) {\r
-\r
-#ifdef CONFIG_80211N_HT\r
-                                               if(pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8812)\r
-                                               {\r
-#ifdef CONFIG_BEAMFORMING\r
-                                                       BEAMFORMING_CAP Beamform_cap = beamforming_get_entry_beam_cap_by_mac_id(&Adapter->mlmepriv, psta->mac_id);\r
-\r
-                                                       if(Beamform_cap & (BEAMFORMER_CAP_HT_EXPLICIT |BEAMFORMER_CAP_VHT_SU))\r
-                                                               TxBF_EN = 1;\r
-                                                       else\r
-                                                               TxBF_EN = 0;\r
-\r
-                                                       if (TxBF_EN) {\r
-                                                               STBC_TX = 0;\r
-                                                       }\r
-                                                       else\r
-#endif\r
-                                                       {\r
-#ifdef CONFIG_80211AC_VHT\r
-                                                               if(IsSupportedVHT(psta->wireless_mode))\r
-                                                                       STBC_TX = TEST_FLAG(psta->vhtpriv.stbc_cap, STBC_VHT_ENABLE_TX);\r
-                                                               else    \r
-#endif\r
-                                                                       STBC_TX = TEST_FLAG(psta->htpriv.stbc_cap, STBC_HT_ENABLE_TX);\r
-                                                       }\r
-                                               }\r
-#endif\r
-\r
-                                               if(pDM_Odm->SupportICType == ODM_RTL8192D)\r
-                                                       PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16) | ((Adapter->stapriv.asoc_sta_count+1) << 8));\r
-                                               else if ((pDM_Odm->SupportICType == ODM_RTL8192E)||(pDM_Odm->SupportICType == ODM_RTL8812)||(pDM_Odm->SupportICType == ODM_RTL8821))\r
-                                                       PWDB_rssi[sta_cnt++] = (((u8)(psta->mac_id&0xFF)) | ((psta->rssi_stat.UndecoratedSmoothedPWDB&0x7F)<<16) |(STBC_TX << 25) | (FirstConnect << 29) | (TxBF_EN << 30));\r
-                                               else\r
-                                                       PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16) );\r
-                                       }\r
-                       }\r
-               }\r
-               #else\r
-               _irqL irqL;\r
-               _list   *plist, *phead;\r
-               struct sta_info *psta;\r
-               struct sta_priv *pstapriv = &Adapter->stapriv;\r
-               u8 bcast_addr[ETH_ALEN]= {0xff,0xff,0xff,0xff,0xff,0xff};\r
-\r
-               _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);\r
-\r
-               for(i=0; i< NUM_STA; i++)\r
-               {\r
-                       phead = &(pstapriv->sta_hash[i]);\r
-                       plist = get_next(phead);\r
-               \r
-                       while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)\r
-                       {\r
-                               psta = LIST_CONTAINOR(plist, struct sta_info, hash_list);\r
-\r
-                               plist = get_next(plist);\r
-\r
-                               if(_rtw_memcmp(psta->hwaddr, bcast_addr, ETH_ALEN) || \r
-                                       _rtw_memcmp(psta->hwaddr, myid(&Adapter->eeprompriv), ETH_ALEN))\r
-                                       continue;\r
-\r
-                               if(psta->state & WIFI_ASOC_STATE)\r
-                               {\r
-                                       \r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB)\r
-                                               tmpEntryMinPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
-\r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB > tmpEntryMaxPWDB)\r
-                                               tmpEntryMaxPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
-\r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB != (-1)){\r
-                                               //printk("%s==> mac_id(%d),rssi(%d)\n",__FUNCTION__,psta->mac_id,psta->rssi_stat.UndecoratedSmoothedPWDB);\r
-                                               #if(RTL8192D_SUPPORT==1)\r
-                                               PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16) | ((Adapter->stapriv.asoc_sta_count+1) << 8));\r
-                                               #else\r
-                                               PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16) );\r
-                                               #endif\r
-                                       }\r
-                               }\r
-                       \r
-                       }\r
-\r
-               }\r
-       \r
-               _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);\r
-               #endif\r
-\r
-               //printk("%s==> sta_cnt(%d)\n",__FUNCTION__,sta_cnt);\r
-\r
-               for(i=0; i< sta_cnt; i++)\r
-               {\r
-                       if(PWDB_rssi[i] != (0)){\r
-                               if(pHalData->fw_ractrl == _TRUE)// Report every sta's RSSI to FW\r
-                               {\r
-                                       #if(RTL8192D_SUPPORT==1)\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8192D){\r
-                                               FillH2CCmd92D(Adapter, H2C_RSSI_REPORT, 3, (u8 *)(&PWDB_rssi[i]));              \r
-                                       }\r
-                                       #endif\r
-                                       \r
-                                       #if((RTL8192C_SUPPORT==1)||(RTL8723A_SUPPORT==1))\r
-                                       if((pDM_Odm->SupportICType == ODM_RTL8192C)||(pDM_Odm->SupportICType == ODM_RTL8723A)){\r
-                                               rtl8192c_set_rssi_cmd(Adapter, (u8*)&PWDB_rssi[i]);\r
-                                       }\r
-                                       #endif\r
-                                       \r
-                                       #if((RTL8812A_SUPPORT==1)||(RTL8821A_SUPPORT==1))\r
-                                       if((pDM_Odm->SupportICType == ODM_RTL8812)||(pDM_Odm->SupportICType == ODM_RTL8821)){   \r
-                                               PWDB_rssi[i] |= (UL_DL_STATE << 24);\r
-                                               rtl8812_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
-                                       }\r
-                                       #endif\r
-                                       #if(RTL8192E_SUPPORT==1)\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8192E){\r
-                                               rtl8192e_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
-                                       }\r
-                                       #endif\r
-                                       #if(RTL8723B_SUPPORT==1)\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8723B){\r
-                                               rtl8723b_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
-                                       }\r
-                                       #endif\r
-\r
-                                       #if(RTL8188E_SUPPORT==1)\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8188E){\r
-                                               rtl8188e_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
-                                       }\r
-                                       #endif\r
-                                                                               \r
-                               }\r
-                               else{\r
-                                       #if((RTL8188E_SUPPORT==1)&&(RATE_ADAPTIVE_SUPPORT == 1))\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8188E){\r
-                                               ODM_RA_SetRSSI_8188E(\r
-                                               &(pHalData->odmpriv), (PWDB_rssi[i]&0xFF), (u8)((PWDB_rssi[i]>>16) & 0xFF));\r
-                                       }\r
-                                       #endif\r
-                               }\r
-                       }\r
-               }               \r
-       }\r
-\r
-\r
-\r
-       if(tmpEntryMaxPWDB != 0)        // If associated entry is found\r
-       {\r
-               pdmpriv->EntryMaxUndecoratedSmoothedPWDB = tmpEntryMaxPWDB;             \r
-       }\r
-       else\r
-       {\r
-               pdmpriv->EntryMaxUndecoratedSmoothedPWDB = 0;\r
-       }\r
-\r
-       if(tmpEntryMinPWDB != 0xff) // If associated entry is found\r
-       {\r
-               pdmpriv->EntryMinUndecoratedSmoothedPWDB = tmpEntryMinPWDB;             \r
-       }\r
-       else\r
-       {\r
-               pdmpriv->EntryMinUndecoratedSmoothedPWDB = 0;\r
-       }\r
-\r
-       FindMinimumRSSI(Adapter);//get pdmpriv->MinUndecoratedPWDBForDM\r
-\r
-       #if(RTL8192D_SUPPORT==1)\r
-       FindMinimumRSSI_Dmsp(Adapter);\r
-       #endif\r
-       pDM_Odm->RSSI_Min = pdmpriv->MinUndecoratedPWDBForDM;\r
-       //ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_RSSI_MIN, pdmpriv->MinUndecoratedPWDBForDM);\r
-#endif//if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-}\r
-\r
-\r
-VOID\r
-odm_RSSIMonitorCheckAP(\r
-       IN              PVOID           pDM_VOID\r
-       )\r
-{\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-#if defined(CONFIG_RTL_92C_SUPPORT) || defined(CONFIG_RTL_92D_SUPPORT) ||defined(CONFIG_RTL_8812_SUPPORT)||defined(CONFIG_WLAN_HAL_8881A)||defined(CONFIG_WLAN_HAL_8192EE)\r
-       {\r
-               PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-               prtl8192cd_priv priv            = pDM_Odm->priv;                \r
-               u4Byte i;\r
-               PSTA_INFO_T pstat;\r
-               static u1Byte H2C_Parameter[5];\r
-               u1Byte    TxBF_EN = 0;\r
-               pBDC_T  pDM_BdcTable = &pDM_Odm->DM_BdcTable;\r
-\r
-               if( priv->up_time % 2 )\r
-                       return;\r
-\r
-               pDM_BdcTable->num_Txbfee_Client=0;\r
-               pDM_BdcTable->num_Txbfer_Client=0;\r
-               //pDM_BdcTable->num_Client=0;\r
-               \r
-               for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)\r
-               {\r
-                       pstat = pDM_Odm->pODM_StaInfo[i];\r
-                       if(IS_STA_VALID(pstat) )\r
-                       {                       \r
-#ifdef BEAMFORMING_SUPPORT\r
-                               BEAMFORMING_CAP Beamform_cap = Beamforming_GetEntryBeamCapByMacId(priv, pstat->aid);\r
-                               if(Beamform_cap == BEAMFORMER_CAP_HT_EXPLICIT || Beamform_cap == BEAMFORMER_CAP_VHT_SU ||\r
-                                        Beamform_cap == (BEAMFORMER_CAP_HT_EXPLICIT|BEAMFORMEE_CAP_HT_EXPLICIT) ||\r
-                                        Beamform_cap == (BEAMFORMER_CAP_VHT_SU|BEAMFORMEE_CAP_VHT_SU))\r
-                               {\r
-                                       TxBF_EN = (1<< 6);\r
-                                       pDM_BdcTable->w_BFee_Client[i]=1; //AP act as BFer\r
-                                       pDM_BdcTable->num_Txbfee_Client++;\r
-                               }\r
-                               else \r
-                               {\r
-                                       pDM_BdcTable->w_BFee_Client[i]=0; //AP act as BFer\r
-                               }\r
-                               \r
-                               if((Beamform_cap & BEAMFORMEE_CAP_HT_EXPLICIT) || (Beamform_cap & BEAMFORMEE_CAP_VHT_SU) )\r
-                               {\r
-                                       pDM_BdcTable->w_BFer_Client[i]=1; //AP act as BFee\r
-                                       pDM_BdcTable->num_Txbfer_Client++;\r
-                               }\r
-                               else \r
-                               {\r
-                                       pDM_BdcTable->w_BFer_Client[i]=0; //AP act as BFer\r
-                               }\r
-\r
-                                       \r
-                               //pDM_BdcTable->num_Client++;\r
-               \r
-                               \r
-                               \r
-#endif                 \r
-//#ifdef STA_EXT\r
-//                             if (GET_CHIP_VER(priv)==VERSION_8812E && REMAP_AID(pstat) < (RTL8812_NUM_STAT - 1))\r
-//#endif\r
-                               {\r
-#ifdef CONFIG_RTL_8812_SUPPORT\r
-#ifdef STA_EXT\r
-                                       if(REMAP_AID(pstat) < (RTL8812_NUM_STAT - 1))\r
-#endif                                 \r
-\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8812) {\r
-                                               memset(H2C_Parameter,0,5);                                              \r
-                                               H2C_Parameter[2] = (u1Byte)(pstat->rssi & 0x7F);\r
-                                               H2C_Parameter[0] = REMAP_AID(pstat);                            \r
-                                               if ((priv->pmib->dot11nConfigEntry.dot11nSTBC) && (\r
-                                                       (pstat->ht_cap_buf.ht_cap_info & cpu_to_le16(_HTCAP_RX_STBC_CAP_)\r
-#ifdef RTK_AC_SUPPORT                  \r
-                                                       || (pstat->vht_cap_buf.vht_cap_info & cpu_to_le32(_VHTCAP_RX_STBC_CAP_))\r
-#endif\r
-                                                       )))     \r
-                                                       H2C_Parameter[3] |= 2;\r
-                                               H2C_Parameter[3] |= TxBF_EN ; \r
-                                               FillH2CCmd8812(pDM_Odm->priv, H2C_8812_RSSI_REPORT, 4, H2C_Parameter);\r
-                                       }\r
-#endif\r
-                               }\r
-//#ifdef STA_EXT\r
-//                             else if (GET_CHIP_VER(priv)!=VERSION_8812E && REMAP_AID(pstat) < (FW_NUM_STAT - 1)) \r
-//#endif\r
-                               {\r
-#if defined(CONFIG_WLAN_HAL_8881A) || defined(CONFIG_WLAN_HAL_8192EE)\r
-#ifdef STA_EXT\r
-                                       if(REMAP_AID(pstat) < (RTL8812_NUM_STAT - 1))\r
-#endif \r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E) {\r
-//                                             u1Byte  H2C_Parameter[5] ={0};  \r
-                                               u1Byte  cmdlen = 3;\r
-                                               memset(H2C_Parameter, 0, 5);\r
-                                               H2C_Parameter[2] = (u1Byte)(pstat->rssi & 0xFF);\r
-                                               H2C_Parameter[0] = REMAP_AID(pstat);\r
-                                               if(pDM_Odm->SupportICType == ODM_RTL8192E) {\r
-                                                       cmdlen = 4;\r
-                                                       if ((priv->pmib->dot11nConfigEntry.dot11nSTBC) && (pstat->ht_cap_buf.ht_cap_info & cpu_to_le16(_HTCAP_RX_STBC_CAP_)))   \r
-                                                               H2C_Parameter[3] |= 2;          \r
-                                                        H2C_Parameter[3] |= TxBF_EN; \r
-\r
-                                               } \r
-                        GET_HAL_INTERFACE(pDM_Odm->priv)->FillH2CCmdHandler(pDM_Odm->priv, H2C_88XX_RSSI_REPORT, cmdlen, H2C_Parameter);\r
-                                       }\r
-#endif\r
-                               \r
-#if defined(CONFIG_RTL_92C_SUPPORT) || defined(CONFIG_RTL_92D_SUPPORT) \r
-#ifdef STA_EXT\r
-                                       if(REMAP_AID(pstat) < (FW_NUM_STAT - 1))\r
-#endif\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8192C || pDM_Odm->SupportICType == ODM_RTL8192D) \r
-                                               add_update_rssi(pDM_Odm->priv, pstat);\r
-#endif\r
-                               }\r
-\r
-                       }               \r
-               }\r
-       }\r
-#endif\r
-#endif\r
-\r
-}\r
-\r
-\r
-\r
-\r
-\r
-VOID\r
-odm_RateAdaptiveMaskInit(\r
-       IN      PVOID   pDM_VOID        \r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PODM_RATE_ADAPTIVE      pOdmRA = &pDM_Odm->RateAdaptive;\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       PMGNT_INFO              pMgntInfo = &pDM_Odm->Adapter->MgntInfo;\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pDM_Odm->Adapter);\r
-\r
-       pMgntInfo->Ratr_State = DM_RATR_STA_INIT;\r
-\r
-       if (pMgntInfo->DM_Type == DM_Type_ByDriver)\r
-               pHalData->bUseRAMask = TRUE;\r
-       else\r
-               pHalData->bUseRAMask = FALSE;   \r
-\r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-       pOdmRA->Type = DM_Type_ByDriver;\r
-       if (pOdmRA->Type == DM_Type_ByDriver)\r
-               pDM_Odm->bUseRAMask = _TRUE;\r
-       else\r
-               pDM_Odm->bUseRAMask = _FALSE;   \r
-#endif\r
-\r
-       pOdmRA->RATRState = DM_RATR_STA_INIT;\r
-       \r
-#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-               pOdmRA->LdpcThres = 50;         \r
-       else\r
-               pOdmRA->LdpcThres = 35;\r
-               \r
-       pOdmRA->RtsThres = 35;\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       pOdmRA->LdpcThres = 35;\r
-       pOdmRA->bUseLdpc = FALSE;\r
-       \r
-#else\r
-       pOdmRA->UltraLowRSSIThresh = 9; \r
-       \r
-#endif\r
-\r
-       pOdmRA->HighRSSIThresh = 50;\r
-       pOdmRA->LowRSSIThresh = 20;\r
-}\r
-/*-----------------------------------------------------------------------------\r
- * Function:   odm_RefreshRateAdaptiveMask()\r
- *\r
- * Overview:   Update rate table mask according to rssi\r
- *\r
- * Input:              NONE\r
- *\r
- * Output:             NONE\r
- *\r
- * Return:             NONE\r
- *\r
- * Revised History:\r
- *     When            Who             Remark\r
- *     05/27/2009      hpfan   Create Version 0.  \r
- *\r
- *---------------------------------------------------------------------------*/\r
-VOID\r
-odm_RefreshRateAdaptiveMask(\r
-       IN      PVOID   pDM_VOID\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("odm_RefreshRateAdaptiveMask()---------->\n")); \r
-       if (!(pDM_Odm->SupportAbility & ODM_BB_RA_MASK))\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("odm_RefreshRateAdaptiveMask(): Return cos not supported\n"));\r
-               return; \r
-       }\r
-       //\r
-       // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate\r
-       // at the same time. In the stage2/3, we need to prive universal interface and merge all\r
-       // HW dynamic mechanism.\r
-       //\r
-       switch  (pDM_Odm->SupportPlatform)\r
-       {\r
-               case    ODM_WIN:\r
-                       odm_RefreshRateAdaptiveMaskMP(pDM_Odm);\r
-                       break;\r
-\r
-               case    ODM_CE:\r
-                       odm_RefreshRateAdaptiveMaskCE(pDM_Odm);\r
-                       break;\r
-\r
-               case    ODM_AP:\r
-               case    ODM_ADSL:\r
-                       odm_RefreshRateAdaptiveMaskAPADSL(pDM_Odm);\r
-                       break;\r
-       }\r
-       \r
-}\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-VOID\r
-odm_RefreshLdpcRtsMP(\r
-       IN      PADAPTER                        pAdapter,\r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      u1Byte                          mMacId,\r
-       IN      u1Byte                          IOTPeer,\r
-       IN      s4Byte                          UndecoratedSmoothedPWDB \r
-       )\r
-{\r
-       BOOLEAN                                 bCtlLdpc = FALSE;\r
-       PMGNT_INFO                              pMgntInfo = GetDefaultMgntInfo(pAdapter);\r
-       PODM_RATE_ADAPTIVE              pRA = &pDM_Odm->RateAdaptive;\r
-\r
-       if(pDM_Odm->SupportICType != ODM_RTL8821 && pDM_Odm->SupportICType != ODM_RTL8812)\r
-               return;\r
-\r
-       if((pDM_Odm->SupportICType == ODM_RTL8821) && (pDM_Odm->CutVersion == ODM_CUT_A))\r
-               bCtlLdpc = TRUE;\r
-       else if(        pDM_Odm->SupportICType == ODM_RTL8812 && \r
-                       IOTPeer == HT_IOT_PEER_REALTEK_JAGUAR_CCUTAP)\r
-                               bCtlLdpc = TRUE;\r
-\r
-       if(bCtlLdpc)\r
-       {\r
-               if(UndecoratedSmoothedPWDB < (pRA->LdpcThres-5))\r
-                       MgntSet_TX_LDPC(pAdapter, mMacId, TRUE);\r
-               else if(UndecoratedSmoothedPWDB > pRA->LdpcThres)\r
-                       MgntSet_TX_LDPC(pAdapter, mMacId, FALSE);\r
-       }       \r
-\r
-       if(UndecoratedSmoothedPWDB < (pRA->RtsThres-5))\r
-               pRA->bLowerRtsRate = TRUE;\r
-       else if(UndecoratedSmoothedPWDB > pRA->RtsThres)\r
-               pRA->bLowerRtsRate = FALSE;\r
-}\r
-#endif\r
-\r
-\r
-VOID\r
-odm_RefreshRateAdaptiveMaskMP(\r
-       IN              PVOID           pDM_VOID\r
-       )\r
-{\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER                                pAdapter         =  pDM_Odm->Adapter;\r
-       PADAPTER                                pTargetAdapter = NULL;\r
-       HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(pAdapter);\r
-       PMGNT_INFO                              pMgntInfo = GetDefaultMgntInfo(pAdapter);\r
-\r
-       if(pAdapter->bDriverStopped)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("<---- odm_RefreshRateAdaptiveMask(): driver is going to unload\n"));\r
-               return;\r
-       }\r
-\r
-       if(!pHalData->bUseRAMask)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("<---- odm_RefreshRateAdaptiveMask(): driver does not control rate adaptive mask\n"));\r
-               return;\r
-       }\r
-\r
-       // if default port is connected, update RA table for default port (infrastructure mode only)\r
-       if(pMgntInfo->mAssoc && (!ACTING_AS_AP(pAdapter)))\r
-       {       \r
-               odm_RefreshLdpcRtsMP(pAdapter, pDM_Odm, pMgntInfo->mMacId,  pMgntInfo->IOTPeer, pHalData->UndecoratedSmoothedPWDB);\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("odm_RefreshRateAdaptiveMask(): Infrasture Mode\n"));\r
-               if( ODM_RAStateCheck(pDM_Odm, pHalData->UndecoratedSmoothedPWDB, pMgntInfo->bSetTXPowerTrainingByOid, &pMgntInfo->Ratr_State) )\r
-               {\r
-                       ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target AP addr : "), pMgntInfo->Bssid);\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pHalData->UndecoratedSmoothedPWDB, pMgntInfo->Ratr_State));\r
-                       pAdapter->HalFunc.UpdateHalRAMaskHandler(pAdapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State);\r
-               }\r
-               else if(pDM_Odm->bChangeState)\r
-               {\r
-                       ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target AP addr : "), pMgntInfo->Bssid);\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Change Power Training State, bDisablePowerTraining = %d\n", pDM_Odm->bDisablePowerTraining));\r
-                       pAdapter->HalFunc.UpdateHalRAMaskHandler(pAdapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State);\r
-               }\r
-       }\r
-\r
-       //\r
-       // The following part configure AP/VWifi/IBSS rate adaptive mask.\r
-       //\r
-\r
-       if(pMgntInfo->mIbss)    // Target: AP/IBSS peer.\r
-               pTargetAdapter = GetDefaultAdapter(pAdapter);\r
-       else\r
-               pTargetAdapter = GetFirstAPAdapter(pAdapter);\r
-\r
-       // if extension port (softap) is started, updaet RA table for more than one clients associate\r
-       if(pTargetAdapter != NULL)\r
-       {\r
-               int     i;\r
-               PRT_WLAN_STA    pEntry;\r
-\r
-               for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)\r
-               {\r
-                       pEntry = AsocEntry_EnumStation(pTargetAdapter, i);\r
-                       if(NULL != pEntry)\r
-                       {\r
-                               if(pEntry->bAssociated)\r
-                               {\r
-                                       odm_RefreshLdpcRtsMP(pAdapter, pDM_Odm, pEntry->AssociatedMacId, pEntry->IOTPeer, pEntry->rssi_stat.UndecoratedSmoothedPWDB);\r
-\r
-                                       if(ODM_RAStateCheck(pDM_Odm, pEntry->rssi_stat.UndecoratedSmoothedPWDB, pMgntInfo->bSetTXPowerTrainingByOid, &pEntry->Ratr_State) )\r
-                                       {\r
-                                               ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target STA addr : "), pEntry->MacAddr);\r
-                                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pEntry->rssi_stat.UndecoratedSmoothedPWDB, pEntry->Ratr_State));\r
-                                               pAdapter->HalFunc.UpdateHalRAMaskHandler(pTargetAdapter, pEntry->AssociatedMacId, pEntry, pEntry->Ratr_State);\r
-                                       }\r
-                                       else if(pDM_Odm->bChangeState)\r
-                                       {\r
-                                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Change Power Training State, bDisablePowerTraining = %d\n", pDM_Odm->bDisablePowerTraining));\r
-                                               pAdapter->HalFunc.UpdateHalRAMaskHandler(pAdapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State);\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       if(pMgntInfo->bSetTXPowerTrainingByOid)\r
-               pMgntInfo->bSetTXPowerTrainingByOid = FALSE;    \r
-#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-}\r
-\r
-\r
-\r
-VOID\r
-odm_RefreshRateAdaptiveMaskCE(\r
-       IN      PVOID   pDM_VOID        \r
-       )\r
-{\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       u1Byte  i;\r
-       PADAPTER        pAdapter         =  pDM_Odm->Adapter;\r
-       PODM_RATE_ADAPTIVE              pRA = &pDM_Odm->RateAdaptive;\r
-\r
-       if(pAdapter->bDriverStopped)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("<---- odm_RefreshRateAdaptiveMask(): driver is going to unload\n"));\r
-               return;\r
-       }\r
-\r
-       if(!pDM_Odm->bUseRAMask)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("<---- odm_RefreshRateAdaptiveMask(): driver does not control rate adaptive mask\n"));\r
-               return;\r
-       }\r
-\r
-       //printk("==> %s \n",__FUNCTION__);\r
-\r
-       for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++){\r
-               PSTA_INFO_T pstat = pDM_Odm->pODM_StaInfo[i];\r
-               if(IS_STA_VALID(pstat) ) {\r
-                       if(IS_MCAST( pstat->hwaddr))  //if(psta->mac_id ==1)\r
-                                continue;\r
-                       if(IS_MCAST( pstat->hwaddr))\r
-                               continue;\r
-\r
-                       #if((RTL8812A_SUPPORT==1)||(RTL8821A_SUPPORT==1))\r
-                       if((pDM_Odm->SupportICType == ODM_RTL8812)||(pDM_Odm->SupportICType == ODM_RTL8821))\r
-                       {\r
-                               if(pstat->rssi_stat.UndecoratedSmoothedPWDB < pRA->LdpcThres)\r
-                               {\r
-                                       pRA->bUseLdpc = TRUE;\r
-                                       pRA->bLowerRtsRate = TRUE;\r
-                                       if((pDM_Odm->SupportICType == ODM_RTL8821) && (pDM_Odm->CutVersion == ODM_CUT_A))\r
-                                               Set_RA_LDPC_8812(pstat, TRUE);\r
-                                       //DbgPrint("RSSI=%d, bUseLdpc = TRUE\n", pHalData->UndecoratedSmoothedPWDB);\r
-                               }\r
-                               else if(pstat->rssi_stat.UndecoratedSmoothedPWDB > (pRA->LdpcThres-5))\r
-                               {\r
-                                       pRA->bUseLdpc = FALSE;\r
-                                       pRA->bLowerRtsRate = FALSE;\r
-                                       if((pDM_Odm->SupportICType == ODM_RTL8821) && (pDM_Odm->CutVersion == ODM_CUT_A))\r
-                                               Set_RA_LDPC_8812(pstat, FALSE);\r
-                                       //DbgPrint("RSSI=%d, bUseLdpc = FALSE\n", pHalData->UndecoratedSmoothedPWDB);\r
-                               }\r
-                       }\r
-                       #endif\r
-\r
-                       if( TRUE == ODM_RAStateCheck(pDM_Odm, pstat->rssi_stat.UndecoratedSmoothedPWDB, FALSE , &pstat->rssi_level) )\r
-                       {\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pstat->rssi_stat.UndecoratedSmoothedPWDB, pstat->rssi_level));\r
-                               //printk("RSSI:%d, RSSI_LEVEL:%d\n", pstat->rssi_stat.UndecoratedSmoothedPWDB, pstat->rssi_level);\r
-                               rtw_hal_update_ra_mask(pstat, pstat->rssi_level);\r
-                       }\r
-               \r
-               }\r
-       }                       \r
-       \r
-#endif\r
-}\r
-\r
-VOID\r
-odm_RefreshRateAdaptiveMaskAPADSL(\r
-       IN      PVOID   pDM_VOID\r
-       )\r
-{\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       struct rtl8192cd_priv *priv = pDM_Odm->priv;\r
-       struct aid_obj *aidarray;\r
-       u4Byte i;\r
-       PSTA_INFO_T pstat;\r
-\r
-       if(priv->up_time % 2)\r
-               return; \r
-\r
-       for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++) {\r
-               pstat = pDM_Odm->pODM_StaInfo[i];\r
-\r
-               if(IS_STA_VALID(pstat) )\r
-               {                       \r
-#if defined(UNIVERSAL_REPEATER) || defined(MBSSID)\r
-                       aidarray = container_of(pstat, struct aid_obj, station);\r
-                       priv = aidarray->priv;\r
-#endif\r
-\r
-                       if (!priv->pmib->dot11StationConfigEntry.autoRate) \r
-                               continue;\r
-\r
-                       if(ODM_RAStateCheck(pDM_Odm, (s4Byte)pstat->rssi, FALSE, &pstat->rssi_level) ) {\r
-                               ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target STA addr : "), pstat->hwaddr);\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pstat->rssi, pstat->rssi_level));\r
-\r
-#if defined(CONFIG_PCI_HCI)\r
-#ifdef CONFIG_WLAN_HAL\r
-                               if (IS_HAL_CHIP(priv)) {\r
-#ifdef WDS\r
-                                       if(!(pstat->state & WIFI_WDS))//if WDS donot setting\r
-#endif\r
-                                               GET_HAL_INTERFACE(priv)->UpdateHalRAMaskHandler(priv, pstat, pstat->rssi_level);\r
-                               } else\r
-#endif\r
-#ifdef CONFIG_RTL_8812_SUPPORT\r
-                               if(GET_CHIP_VER(priv)== VERSION_8812E) {\r
-                                       UpdateHalRAMask8812(priv, pstat, 3);\r
-                               } else\r
-#endif\r
-#ifdef CONFIG_RTL_88E_SUPPORT\r
-                               if (GET_CHIP_VER(priv)==VERSION_8188E) {\r
-#ifdef TXREPORT\r
-                                       add_RATid(priv, pstat);\r
-#endif\r
-                               } else\r
-#endif\r
-                               {\r
-#if defined(CONFIG_RTL_92D_SUPPORT) || defined(CONFIG_RTL_92C_SUPPORT)\r
-                                       add_update_RATid(priv, pstat);\r
-#endif\r
-                               }\r
-#elif defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                               update_STA_RATid(priv, pstat);\r
-#endif\r
-                       }\r
-               }\r
-       }\r
-#endif\r
-}\r
-\r
-\r
-\r
-// Return Value: BOOLEAN\r
-// - TRUE: RATRState is changed.\r
-BOOLEAN \r
-ODM_RAStateCheck(\r
-       IN              PVOID                   pDM_VOID,\r
-       IN              s4Byte                  RSSI,\r
-       IN              BOOLEAN                 bForceUpdate,\r
-       OUT             pu1Byte                 pRATRState\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PODM_RATE_ADAPTIVE pRA = &pDM_Odm->RateAdaptive;\r
-       const u1Byte GoUpGap = 5;\r
-       u1Byte HighRSSIThreshForRA = pRA->HighRSSIThresh;\r
-       u1Byte LowRSSIThreshForRA = pRA->LowRSSIThresh;\r
-       u1Byte RATRState;\r
-\r
-       // Threshold Adjustment: \r
-       // when RSSI state trends to go up one or two levels, make sure RSSI is high enough.\r
-       // Here GoUpGap is added to solve the boundary's level alternation issue.\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       u1Byte UltraLowRSSIThreshForRA = pRA->UltraLowRSSIThresh;\r
-       if(pDM_Odm->SupportICType == ODM_RTL8881A)              \r
-               LowRSSIThreshForRA = 30;                // for LDPC / BCC switch\r
-#endif\r
-\r
-       switch (*pRATRState)\r
-       {\r
-               case DM_RATR_STA_INIT:\r
-               case DM_RATR_STA_HIGH:\r
-                       break;\r
-\r
-               case DM_RATR_STA_MIDDLE:\r
-                       HighRSSIThreshForRA += GoUpGap;\r
-                       break;\r
-\r
-               case DM_RATR_STA_LOW:\r
-                       HighRSSIThreshForRA += GoUpGap;\r
-                       LowRSSIThreshForRA += GoUpGap;\r
-                       break;\r
-                       \r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-               case DM_RATR_STA_ULTRA_LOW:\r
-                       HighRSSIThreshForRA += GoUpGap;\r
-                       LowRSSIThreshForRA += GoUpGap;\r
-                       UltraLowRSSIThreshForRA += GoUpGap;\r
-                       break;\r
-#endif\r
-\r
-               default: \r
-                       ODM_RT_ASSERT(pDM_Odm, FALSE, ("wrong rssi level setting %d !", *pRATRState) );\r
-                       break;\r
-       }\r
-\r
-       // Decide RATRState by RSSI.\r
-       if(RSSI > HighRSSIThreshForRA)\r
-               RATRState = DM_RATR_STA_HIGH;\r
-       else if(RSSI > LowRSSIThreshForRA)\r
-               RATRState = DM_RATR_STA_MIDDLE;\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       else if(RSSI > UltraLowRSSIThreshForRA)\r
-               RATRState = DM_RATR_STA_LOW;\r
-       else\r
-               RATRState = DM_RATR_STA_ULTRA_LOW;\r
-#else\r
-       else\r
-               RATRState = DM_RATR_STA_LOW;\r
-#endif\r
-       //printk("==>%s,RATRState:0x%02x ,RSSI:%d \n",__FUNCTION__,RATRState,RSSI);\r
-\r
-       if( *pRATRState!=RATRState || bForceUpdate)\r
-       {\r
-               ODM_RT_TRACE( pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI Level %d -> %d\n", *pRATRState, RATRState) );\r
-               *pRATRState = RATRState;\r
-               return TRUE;\r
-       }\r
-\r
-       return FALSE;\r
-}\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-VOID\r
-odm_RefreshBasicRateMask(\r
-       IN      PVOID   pDM_VOID\r
-       )\r
-{\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER                Adapter  =  pDM_Odm->Adapter;\r
-       static u1Byte           Stage = 0;\r
-       u1Byte                  CurStage = 0;\r
-       OCTET_STRING    osRateSet;\r
-       PMGNT_INFO              pMgntInfo = GetDefaultMgntInfo(Adapter);\r
-       u1Byte                  RateSet[5] = {MGN_1M, MGN_2M, MGN_5_5M, MGN_11M, MGN_6M};\r
-\r
-       if(pDM_Odm->SupportICType != ODM_RTL8812 && pDM_Odm->SupportICType != ODM_RTL8821 )\r
-               return;\r
-\r
-       if(pDM_Odm->bLinked == FALSE)   // unlink Default port information\r
-               CurStage = 0;   \r
-       else if(pDM_Odm->RSSI_Min < 40) // link RSSI  < 40%\r
-               CurStage = 1;\r
-       else if(pDM_Odm->RSSI_Min > 45) // link RSSI > 45%\r
-               CurStage = 3;   \r
-       else\r
-               CurStage = 2;                                   // link  25% <= RSSI <= 30%\r
-\r
-       if(CurStage != Stage)\r
-       {\r
-               if(CurStage == 1)\r
-               {\r
-                       FillOctetString(osRateSet, RateSet, 5);\r
-                       FilterSupportRate(pMgntInfo->mBrates, &osRateSet, FALSE);\r
-                       Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_BASIC_RATE, (pu1Byte)&osRateSet);\r
-               }\r
-               else if(CurStage == 3 && (Stage == 1 || Stage == 2))\r
-               {\r
-                       Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BASIC_RATE, (pu1Byte)(&pMgntInfo->mBrates) );\r
-               }\r
-       }\r
-       \r
-       Stage = CurStage;\r
-#endif\r
-}\r
-#endif  //#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-VOID\r
-ODM_DynamicARFBSelect(\r
-       IN              PVOID           pDM_VOID,\r
-       IN              u1Byte                  rate,\r
-       IN              BOOLEAN                 Collision_State \r
-)\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
-\r
-       if(pDM_Odm->SupportICType != ODM_RTL8192E)\r
-               return;\r
-\r
-       if(Collision_State == pRA_Table->PT_collision_pre)\r
-               return;\r
-\r
-       if (rate >= DESC_RATEMCS8  && rate <= DESC_RATEMCS12){\r
-               if (Collision_State == 1){\r
-                       if(rate == DESC_RATEMCS12){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07060501);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS11){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07070605);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS10){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08080706);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS9){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08080707);        \r
-                       }\r
-                       else{\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09090808);        \r
-                       }\r
-               }\r
-               else{   // Collision_State == 0\r
-                       if(rate == DESC_RATEMCS12){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x05010000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09080706);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS11){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x06050000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09080807);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS10){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x07060000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x0a090908);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS9){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x07070000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x0a090808);        \r
-                       }\r
-                       else{\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x08080000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x0b0a0909);        \r
-                       }\r
-               }\r
-       }\r
-       else{  // MCS13~MCS15,  1SS, G-mode\r
-               if (Collision_State == 1){\r
-                       if(rate == DESC_RATEMCS15){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x05040302);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS14){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x06050302);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS13){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07060502);        \r
-                       }\r
-                       else{\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x06050402);        \r
-                       }\r
-               }\r
-               else{   // Collision_State == 0\r
-                       if(rate == DESC_RATEMCS15){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x03020000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07060504);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS14){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x03020000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08070605);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS13){\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x05020000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09080706);        \r
-                       }\r
-                       else{\r
-\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x04020000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08070605);        \r
-                       }\r
-\r
-\r
-               }\r
-\r
-       }       \r
-        pRA_Table->PT_collision_pre = Collision_State; \r
-}\r
-\r
-VOID\r
-ODM_RateAdaptiveStateApInit(   \r
-       IN      PVOID           PADAPTER_VOID,\r
-       IN      PRT_WLAN_STA    pEntry\r
-       )\r
-{\r
-       PADAPTER                Adapter = (PADAPTER)PADAPTER_VOID;\r
-       pEntry->Ratr_State = DM_RATR_STA_INIT;\r
-}\r
-#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-u4Byte \r
-ODM_Get_Rate_Bitmap(\r
-       IN      PVOID           pDM_VOID,       \r
-       IN      u4Byte          macid,\r
-       IN      u4Byte          ra_mask,        \r
-       IN      u1Byte          rssi_level\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PSTA_INFO_T     pEntry;\r
-       u4Byte  rate_bitmap = 0;\r
-       u1Byte  WirelessMode;\r
-       //u1Byte        WirelessMode =*(pDM_Odm->pWirelessMode);\r
-       \r
-       \r
-       pEntry = pDM_Odm->pODM_StaInfo[macid];\r
-       if(!IS_STA_VALID(pEntry))\r
-               return ra_mask;\r
-\r
-       WirelessMode = pEntry->wireless_mode;\r
-       \r
-       switch(WirelessMode)\r
-       {\r
-               case ODM_WM_B:\r
-                       if(ra_mask & 0x0000000c)                //11M or 5.5M enable                            \r
-                               rate_bitmap = 0x0000000d;\r
-                       else\r
-                               rate_bitmap = 0x0000000f;\r
-                       break;\r
-                       \r
-               case (ODM_WM_G):\r
-               case (ODM_WM_A):\r
-                       if(rssi_level == DM_RATR_STA_HIGH)\r
-                               rate_bitmap = 0x00000f00;\r
-                       else\r
-                               rate_bitmap = 0x00000ff0;\r
-                       break;\r
-                       \r
-               case (ODM_WM_B|ODM_WM_G):\r
-                       if(rssi_level == DM_RATR_STA_HIGH)\r
-                               rate_bitmap = 0x00000f00;\r
-                       else if(rssi_level == DM_RATR_STA_MIDDLE)\r
-                               rate_bitmap = 0x00000ff0;\r
-                       else\r
-                               rate_bitmap = 0x00000ff5;\r
-                       break;          \r
-\r
-               case (ODM_WM_B|ODM_WM_G|ODM_WM_N24G)    :\r
-               case (ODM_WM_B|ODM_WM_N24G)     :\r
-               case (ODM_WM_G|ODM_WM_N24G)     :\r
-               case (ODM_WM_A|ODM_WM_N5G)      :\r
-                       {                                       \r
-                               if (    pDM_Odm->RFType == ODM_1T2R ||pDM_Odm->RFType == ODM_1T1R)\r
-                               {\r
-                                       if(rssi_level == DM_RATR_STA_HIGH)\r
-                                       {\r
-                                               rate_bitmap = 0x000f0000;\r
-                                       }\r
-                                       else if(rssi_level == DM_RATR_STA_MIDDLE)\r
-                                       {\r
-                                               rate_bitmap = 0x000ff000;\r
-                                       }\r
-                                       else{\r
-                                               if (*(pDM_Odm->pBandWidth) == ODM_BW40M)\r
-                                                       rate_bitmap = 0x000ff015;\r
-                                               else\r
-                                                       rate_bitmap = 0x000ff005;\r
-                                       }                               \r
-                               }\r
-                               else\r
-                               {\r
-                                       if(rssi_level == DM_RATR_STA_HIGH)\r
-                                       {               \r
-                                               rate_bitmap = 0x0f8f0000;\r
-                                       }\r
-                                       else if(rssi_level == DM_RATR_STA_MIDDLE)\r
-                                       {\r
-                                               rate_bitmap = 0x0f8ff000;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               if (*(pDM_Odm->pBandWidth) == ODM_BW40M)\r
-                                                       rate_bitmap = 0x0f8ff015;\r
-                                               else\r
-                                                       rate_bitmap = 0x0f8ff005;\r
-                                       }                                       \r
-                               }\r
-                       }\r
-                       break;\r
-\r
-               case (ODM_WM_AC|ODM_WM_G):\r
-                       if(rssi_level == 1)\r
-                               rate_bitmap = 0xfc3f0000;\r
-                       else if(rssi_level == 2)\r
-                               rate_bitmap = 0xfffff000;\r
-                       else\r
-                               rate_bitmap = 0xffffffff;\r
-                       break;\r
-\r
-               case (ODM_WM_AC|ODM_WM_A):\r
-\r
-                       if (pDM_Odm->RFType == RF_1T1R)\r
-                       {\r
-                               if(rssi_level == 1)                             // add by Gary for ac-series\r
-                                       rate_bitmap = 0x003f8000;\r
-                               else if (rssi_level == 2)\r
-                                       rate_bitmap = 0x003ff000;\r
-                               else\r
-                                       rate_bitmap = 0x003ff010;\r
-                       }\r
-                       else\r
-                       {\r
-                               if(rssi_level == 1)                             // add by Gary for ac-series\r
-                                       rate_bitmap = 0xfe3f8000;       // VHT 2SS MCS3~9\r
-                               else if (rssi_level == 2)\r
-                                       rate_bitmap = 0xfffff000;       // VHT 2SS MCS0~9\r
-                               else\r
-                                       rate_bitmap = 0xfffff010;       // All\r
-                       }\r
-                       break;\r
-                       \r
-               default:\r
-                       if(pDM_Odm->RFType == RF_1T2R)\r
-                               rate_bitmap = 0x000fffff;\r
-                       else\r
-                               rate_bitmap = 0x0fffffff;\r
-                       break;  \r
-\r
-       }\r
-\r
-       //printk("%s ==> rssi_level:0x%02x, WirelessMode:0x%02x, rate_bitmap:0x%08x \n",__FUNCTION__,rssi_level,WirelessMode,rate_bitmap);\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, (" ==> rssi_level:0x%02x, WirelessMode:0x%02x, rate_bitmap:0x%08x \n",rssi_level,WirelessMode,rate_bitmap));\r
-\r
-       return (ra_mask&rate_bitmap);\r
-       \r
-}      \r
-\r
-#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
\ No newline at end of file
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RaInfo.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RaInfo.h
deleted file mode 100755 (executable)
index 7787807..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
\r
-#ifndef        __ODMRAINFO_H__\r
-#define    __ODMRAINFO_H__\r
-\r
-#define AP_InitRateAdaptiveState       ODM_RateAdaptiveStateApInit\r
-\r
-#define                DM_RATR_STA_INIT                        0\r
-#define                DM_RATR_STA_HIGH                        1\r
-#define                DM_RATR_STA_MIDDLE              2\r
-#define                DM_RATR_STA_LOW                 3\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-#define                DM_RATR_STA_ULTRA_LOW   4\r
-#endif\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-typedef struct _Rate_Adaptive_Table_{\r
-       u1Byte          firstconnect;\r
-       #if(DM_ODM_SUPPORT_TYPE==ODM_WIN)\r
-       BOOLEAN         PT_collision_pre;\r
-       #endif\r
-}RA_T, *pRA_T;\r
-#endif\r
-\r
-\r
-typedef struct _ODM_RATE_ADAPTIVE\r
-{\r
-       u1Byte                          Type;                           // DM_Type_ByFW/DM_Type_ByDriver\r
-       u1Byte                          HighRSSIThresh;         // if RSSI > HighRSSIThresh     => RATRState is DM_RATR_STA_HIGH\r
-       u1Byte                          LowRSSIThresh;          // if RSSI <= LowRSSIThresh     => RATRState is DM_RATR_STA_LOW\r
-       u1Byte                          RATRState;                      // Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW\r
-\r
-       #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-       u1Byte                          LdpcThres;                      // if RSSI > LdpcThres => switch from LPDC to BCC\r
-       BOOLEAN                         bLowerRtsRate;\r
-       #endif\r
-\r
-       #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       u1Byte                          RtsThres;\r
-       #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       BOOLEAN                         bUseLdpc;\r
-       #else\r
-       u1Byte                          UltraLowRSSIThresh;\r
-       u4Byte                          LastRATR;                       // RATR Register Content\r
-       #endif\r
-\r
-} ODM_RATE_ADAPTIVE, *PODM_RATE_ADAPTIVE;\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-VOID
-odm_RSSIMonitorInit(
-       IN              PVOID           pDM_VOID\r
-       );
-#endif\r
-\r
-VOID\r
-odm_RSSIMonitorCheck(
-       IN              PVOID            pDM_VOID\r
-       );\r
-\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_WIN)\r
-VOID\r
-odm_RSSIDumpToRegister(\r
-       IN      PVOID   pDM_VOID\r
-       );\r
-#endif\r
-\r
-VOID
-odm_RSSIMonitorCheckMP(
-       IN              PVOID           pDM_VOID\r
-       );
-
-VOID 
-odm_RSSIMonitorCheckCE(
-       IN              PVOID           pDM_VOID\r
-       );\r
-\r
-VOID 
-odm_RSSIMonitorCheckAP(
-       IN              PVOID            pDM_VOID\r
-       );
-
-\r
-VOID\r
-odm_RateAdaptiveMaskInit(\r
-       IN      PVOID   pDM_VOID        \r
-       );\r
-\r
-VOID
-odm_RefreshRateAdaptiveMask(
-       IN      PVOID   pDM_VOID\r
-       );\r
-\r
-VOID
-odm_RefreshRateAdaptiveMaskMP(
-       IN      PVOID   pDM_VOID\r
-       );\r
-\r
-VOID
-odm_RefreshRateAdaptiveMaskCE(
-       IN      PVOID   pDM_VOID        \r
-       );\r
-\r
-VOID
-odm_RefreshRateAdaptiveMaskAPADSL(
-       IN      PVOID   pDM_VOID\r
-       );\r
-\r
-BOOLEAN 
-ODM_RAStateCheck(
-       IN              PVOID                   pDM_VOID,\r
-       IN              s4Byte                  RSSI,
-       IN              BOOLEAN                 bForceUpdate,
-       OUT             pu1Byte                 pRATRState
-       );\r
-       \r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-VOID
-odm_RefreshBasicRateMask(
-       IN      PVOID   pDM_VOID\r
-       );\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-VOID
-ODM_DynamicARFBSelect(
-       IN              PVOID                   pDM_VOID,\r
-       IN              u1Byte                  rate,
-       IN      BOOLEAN                 Collision_State 
-       );\r
-       \r
-VOID\r
-ODM_RateAdaptiveStateApInit(   \r
-       IN      PVOID           PADAPTER_VOID,\r
-       IN      PRT_WLAN_STA    pEntry\r
-       );\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-u4Byte \r
-ODM_Get_Rate_Bitmap(\r
-       IN      PVOID           pDM_VOID,       \r
-       IN      u4Byte          macid,\r
-       IN      u4Byte          ra_mask,        \r
-       IN      u1Byte          rssi_level\r
-       );\r
-#endif\r
-\r
-#endif //#ifndef       __ODMRAINFO_H__\r
-\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RegDefine11AC.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RegDefine11AC.h
deleted file mode 100755 (executable)
index 855aa16..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
\r
-#ifndef        __ODM_REGDEFINE11AC_H__\r
-#define __ODM_REGDEFINE11AC_H__\r
-\r
-//2 RF REG LIST\r
-\r
-\r
-\r
-//2 BB REG LIST\r
-//PAGE 8\r
-#define        ODM_REG_CCK_RPT_FORMAT_11AC     0x804\r
-#define        ODM_REG_BB_RX_PATH_11AC                 0x808\r
-#define        ODM_REG_BB_ATC_11AC                             0x860\r
-#define        ODM_REG_DBG_RPT_11AC                            0x8fc\r
-//PAGE 9\r
-#define        ODM_REG_OFDM_FA_RST_11AC                0x9A4\r
-#define        ODM_REG_NHM_TIMER_11AC                  0x990\r
-#define        ODM_REG_NHM_TH9_TH10_11AC               0x994\r
-#define        ODM_REG_NHM_TH3_TO_TH0_11AC     0x998\r
-#define        ODM_REG_NHM_TH7_TO_TH4_11AC     0x99c\r
-#define        ODM_REG_NHM_TH8_11AC                    0x9a0\r
-#define        ODM_REG_NHM_9E8_11AC                    0x9e8\r
-//PAGE A\r
-#define        ODM_REG_CCK_CCA_11AC                    0xA0A\r
-#define        ODM_REG_CCK_FA_RST_11AC                 0xA2C\r
-#define        ODM_REG_CCK_FA_11AC                             0xA5C\r
-//PAGE B\r
-#define        ODM_REG_RST_RPT_11AC                            0xB58\r
-//PAGE C\r
-#define        ODM_REG_TRMUX_11AC                              0xC08\r
-#define        ODM_REG_IGI_A_11AC                              0xC50\r
-//PAGE E\r
-#define        ODM_REG_IGI_B_11AC                              0xE50\r
-//PAGE F\r
-#define        ODM_REG_CCK_CCA_CNT_11AC                0xF08\r
-#define        ODM_REG_OFDM_FA_11AC                    0xF48\r
-#define        ODM_REG_RPT_11AC                                        0xfa0\r
-#define        ODM_REG_NHM_CNT_11AC                    0xfa8\r
-//PAGE 18\r
-#define        ODM_REG_IGI_C_11AC                              0x1850\r
-//PAGE 1A\r
-#define        ODM_REG_IGI_D_11AC                              0x1A50\r
-\r
-//2 MAC REG LIST\r
-#define        ODM_REG_RESP_TX_11AC                            0x6D8\r
-\r
-\r
-\r
-//DIG Related\r
-#define        ODM_BIT_IGI_11AC                                        0xFFFFFFFF\r
-#define        ODM_BIT_CCK_RPT_FORMAT_11AC             BIT16\r
-#define        ODM_BIT_BB_RX_PATH_11AC                 0xF\r
-#define        ODM_BIT_BB_ATC_11AC                             BIT14\r
-\r
-#endif\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RegDefine11N.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_RegDefine11N.h
deleted file mode 100755 (executable)
index c6e4b18..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
\r
-#ifndef        __ODM_REGDEFINE11N_H__\r
-#define __ODM_REGDEFINE11N_H__\r
-\r
-\r
-//2 RF REG LIST\r
-#define        ODM_REG_RF_MODE_11N                             0x00\r
-#define        ODM_REG_RF_0B_11N                               0x0B\r
-#define        ODM_REG_CHNBW_11N                               0x18\r
-#define        ODM_REG_T_METER_11N                             0x24\r
-#define        ODM_REG_RF_25_11N                               0x25\r
-#define        ODM_REG_RF_26_11N                               0x26\r
-#define        ODM_REG_RF_27_11N                               0x27\r
-#define        ODM_REG_RF_2B_11N                               0x2B\r
-#define        ODM_REG_RF_2C_11N                               0x2C\r
-#define        ODM_REG_RXRF_A3_11N                             0x3C\r
-#define        ODM_REG_T_METER_92D_11N                 0x42\r
-#define        ODM_REG_T_METER_88E_11N                 0x42\r
-\r
-\r
-\r
-//2 BB REG LIST\r
-//PAGE 8\r
-#define        ODM_REG_BB_CTRL_11N                             0x800\r
-#define        ODM_REG_RF_PIN_11N                              0x804\r
-#define        ODM_REG_PSD_CTRL_11N                            0x808\r
-#define        ODM_REG_TX_ANT_CTRL_11N                 0x80C\r
-#define        ODM_REG_BB_PWR_SAV5_11N         0x818\r
-#define        ODM_REG_CCK_RPT_FORMAT_11N              0x824\r
-#define        ODM_REG_RX_DEFUALT_A_11N                0x858\r
-#define        ODM_REG_RX_DEFUALT_B_11N                0x85A\r
-#define        ODM_REG_BB_PWR_SAV3_11N         0x85C\r
-#define        ODM_REG_ANTSEL_CTRL_11N                 0x860\r
-#define        ODM_REG_RX_ANT_CTRL_11N                 0x864\r
-#define        ODM_REG_PIN_CTRL_11N                            0x870\r
-#define        ODM_REG_BB_PWR_SAV1_11N         0x874\r
-#define        ODM_REG_ANTSEL_PATH_11N                 0x878\r
-#define        ODM_REG_BB_3WIRE_11N                    0x88C\r
-#define        ODM_REG_SC_CNT_11N                              0x8C4\r
-#define        ODM_REG_PSD_DATA_11N                            0x8B4\r
-#define        ODM_REG_PSD_DATA_11N                            0x8B4\r
-#define        ODM_REG_NHM_TIMER_11N                   0x894\r
-#define        ODM_REG_NHM_TH9_TH10_11N                0x890\r
-#define        ODM_REG_NHM_TH3_TO_TH0_11N              0x898\r
-#define        ODM_REG_NHM_TH7_TO_TH4_11N              0x89c\r
-#define        ODM_REG_NHM_CNT_11N                             0x8d8\r
-//PAGE 9\r
-#define        ODM_REG_DBG_RPT_11N                             0x908\r
-#define        ODM_REG_ANT_MAPPING1_11N                0x914\r
-#define        ODM_REG_ANT_MAPPING2_11N                0x918\r
-//PAGE A\r
-#define        ODM_REG_CCK_ANTDIV_PARA1_11N    0xA00\r
-#define        ODM_REG_CCK_CCA_11N                             0xA0A\r
-#define        ODM_REG_CCK_ANTDIV_PARA2_11N    0xA0C\r
-#define        ODM_REG_CCK_ANTDIV_PARA3_11N    0xA10\r
-#define        ODM_REG_CCK_ANTDIV_PARA4_11N    0xA14\r
-#define        ODM_REG_CCK_FILTER_PARA1_11N    0xA22\r
-#define        ODM_REG_CCK_FILTER_PARA2_11N    0xA23\r
-#define        ODM_REG_CCK_FILTER_PARA3_11N    0xA24\r
-#define        ODM_REG_CCK_FILTER_PARA4_11N    0xA25\r
-#define        ODM_REG_CCK_FILTER_PARA5_11N    0xA26\r
-#define        ODM_REG_CCK_FILTER_PARA6_11N    0xA27\r
-#define        ODM_REG_CCK_FILTER_PARA7_11N    0xA28\r
-#define        ODM_REG_CCK_FILTER_PARA8_11N    0xA29\r
-#define        ODM_REG_CCK_FA_RST_11N                  0xA2C\r
-#define        ODM_REG_CCK_FA_MSB_11N                  0xA58\r
-#define        ODM_REG_CCK_FA_LSB_11N                  0xA5C\r
-#define        ODM_REG_CCK_CCA_CNT_11N                 0xA60\r
-#define        ODM_REG_BB_PWR_SAV4_11N         0xA74\r
-//PAGE B\r
-#define        ODM_REG_LNA_SWITCH_11N                  0xB2C\r
-#define        ODM_REG_PATH_SWITCH_11N                 0xB30\r
-#define        ODM_REG_RSSI_CTRL_11N                   0xB38\r
-#define        ODM_REG_CONFIG_ANTA_11N                 0xB68\r
-#define        ODM_REG_RSSI_BT_11N                             0xB9C\r
-//PAGE C\r
-#define        ODM_REG_OFDM_FA_HOLDC_11N               0xC00\r
-#define        ODM_REG_BB_RX_PATH_11N                  0xC04\r
-#define        ODM_REG_TRMUX_11N                               0xC08\r
-#define        ODM_REG_OFDM_FA_RSTC_11N                0xC0C\r
-#define        ODM_REG_RXIQI_MATRIX_11N                        0xC14\r
-#define        ODM_REG_TXIQK_MATRIX_LSB1_11N   0xC4C\r
-#define        ODM_REG_IGI_A_11N                                       0xC50\r
-#define        ODM_REG_ANTDIV_PARA2_11N                0xC54\r
-#define        ODM_REG_IGI_B_11N                                       0xC58\r
-#define        ODM_REG_ANTDIV_PARA3_11N                0xC5C\r
-#define   ODM_REG_L1SBD_PD_CH_11N                      0XC6C\r
-#define        ODM_REG_BB_PWR_SAV2_11N         0xC70\r
-#define        ODM_REG_RX_OFF_11N                              0xC7C\r
-#define        ODM_REG_TXIQK_MATRIXA_11N               0xC80\r
-#define        ODM_REG_TXIQK_MATRIXB_11N               0xC88\r
-#define        ODM_REG_TXIQK_MATRIXA_LSB2_11N  0xC94\r
-#define        ODM_REG_TXIQK_MATRIXB_LSB2_11N  0xC9C\r
-#define        ODM_REG_RXIQK_MATRIX_LSB_11N    0xCA0\r
-#define        ODM_REG_ANTDIV_PARA1_11N                0xCA4\r
-#define        ODM_REG_OFDM_FA_TYPE1_11N               0xCF0\r
-//PAGE D\r
-#define        ODM_REG_OFDM_FA_RSTD_11N                0xD00\r
-#define        ODM_REG_BB_ATC_11N                              0xD2C\r
-#define        ODM_REG_OFDM_FA_TYPE2_11N               0xDA0\r
-#define        ODM_REG_OFDM_FA_TYPE3_11N               0xDA4\r
-#define        ODM_REG_OFDM_FA_TYPE4_11N               0xDA8\r
-#define        ODM_REG_RPT_11N                                 0xDF4\r
-//PAGE E\r
-#define        ODM_REG_TXAGC_A_6_18_11N                0xE00\r
-#define        ODM_REG_TXAGC_A_24_54_11N               0xE04\r
-#define        ODM_REG_TXAGC_A_1_MCS32_11N     0xE08\r
-#define        ODM_REG_TXAGC_A_MCS0_3_11N              0xE10\r
-#define        ODM_REG_TXAGC_A_MCS4_7_11N              0xE14\r
-#define        ODM_REG_TXAGC_A_MCS8_11_11N     0xE18\r
-#define        ODM_REG_TXAGC_A_MCS12_15_11N    0xE1C\r
-#define        ODM_REG_FPGA0_IQK_11N                   0xE28\r
-#define        ODM_REG_TXIQK_TONE_A_11N                0xE30\r
-#define        ODM_REG_RXIQK_TONE_A_11N                0xE34\r
-#define        ODM_REG_TXIQK_PI_A_11N                  0xE38\r
-#define        ODM_REG_RXIQK_PI_A_11N                  0xE3C\r
-#define        ODM_REG_TXIQK_11N                               0xE40\r
-#define        ODM_REG_RXIQK_11N                               0xE44\r
-#define        ODM_REG_IQK_AGC_PTS_11N                 0xE48\r
-#define        ODM_REG_IQK_AGC_RSP_11N                 0xE4C\r
-#define        ODM_REG_BLUETOOTH_11N                   0xE6C\r
-#define        ODM_REG_RX_WAIT_CCA_11N                 0xE70\r
-#define        ODM_REG_TX_CCK_RFON_11N                 0xE74\r
-#define        ODM_REG_TX_CCK_BBON_11N                 0xE78\r
-#define        ODM_REG_OFDM_RFON_11N                   0xE7C\r
-#define        ODM_REG_OFDM_BBON_11N                   0xE80\r
-#define        ODM_REG_TX2RX_11N                               0xE84\r
-#define        ODM_REG_TX2TX_11N                               0xE88\r
-#define        ODM_REG_RX_CCK_11N                              0xE8C\r
-#define        ODM_REG_RX_OFDM_11N                             0xED0\r
-#define        ODM_REG_RX_WAIT_RIFS_11N                0xED4\r
-#define        ODM_REG_RX2RX_11N                               0xED8\r
-#define        ODM_REG_STANDBY_11N                             0xEDC\r
-#define        ODM_REG_SLEEP_11N                               0xEE0\r
-#define        ODM_REG_PMPD_ANAEN_11N                  0xEEC\r
-#define        ODM_REG_IGI_C_11N                                       0xF84\r
-#define        ODM_REG_IGI_D_11N                                       0xF88\r
-\r
-//2 MAC REG LIST\r
-#define        ODM_REG_BB_RST_11N                              0x02\r
-#define        ODM_REG_ANTSEL_PIN_11N                  0x4C\r
-#define        ODM_REG_EARLY_MODE_11N                  0x4D0\r
-#define        ODM_REG_RSSI_MONITOR_11N                0x4FE\r
-#define        ODM_REG_EDCA_VO_11N                             0x500\r
-#define        ODM_REG_EDCA_VI_11N                             0x504\r
-#define        ODM_REG_EDCA_BE_11N                             0x508\r
-#define        ODM_REG_EDCA_BK_11N                             0x50C\r
-#define        ODM_REG_TXPAUSE_11N                             0x522\r
-#define        ODM_REG_RESP_TX_11N                             0x6D8\r
-#define        ODM_REG_ANT_TRAIN_PARA1_11N             0x7b0\r
-#define        ODM_REG_ANT_TRAIN_PARA2_11N             0x7b4\r
-\r
-\r
-//DIG Related\r
-#define        ODM_BIT_IGI_11N                                 0x0000007F\r
-#define        ODM_BIT_CCK_RPT_FORMAT_11N              BIT9\r
-#define        ODM_BIT_BB_RX_PATH_11N                  0xF\r
-#define        ODM_BIT_BB_ATC_11N                              BIT11\r
-\r
-#endif\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_debug.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_debug.c
deleted file mode 100755 (executable)
index 6dc171a..0000000
+++ /dev/null
@@ -1,629 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-\r
-#include "odm_precomp.h"\r
-\r
-\r
-VOID \r
-ODM_InitDebugSetting(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-       )\r
-{\r
-pDM_Odm->DebugLevel                            =       ODM_DBG_LOUD;\r
-\r
-pDM_Odm->DebugComponents                       = \r
-\\r
-#if DBG\r
-//BB Functions\r
-//                                                                     ODM_COMP_DIG                                    |\r
-//                                                                     ODM_COMP_RA_MASK                                |\r
-//                                                                     ODM_COMP_DYNAMIC_TXPWR          |\r
-//                                                                     ODM_COMP_FA_CNT                         |\r
-//                                                                     ODM_COMP_RSSI_MONITOR                   |\r
-//                                                                     ODM_COMP_CCK_PD                         |\r
-//                                                                     ODM_COMP_ANT_DIV                                |\r
-//                                                                     ODM_COMP_PWR_SAVE                               |\r
-//                                                                     ODM_COMP_PWR_TRAIN                      |\r
-//                                                                     ODM_COMP_RATE_ADAPTIVE          |\r
-//                                                                     ODM_COMP_PATH_DIV                               |\r
-//                                                                     ODM_COMP_DYNAMIC_PRICCA         |\r
-//                                                                     ODM_COMP_RXHP                                   |\r
-//                                                                     ODM_COMP_MP                                     |\r
-//                                                                     ODM_COMP_CFO_TRACKING           |\r
-\r
-//MAC Functions\r
-//                                                                     ODM_COMP_EDCA_TURBO                     |\r
-//                                                                     ODM_COMP_EARLY_MODE                     |\r
-//RF Functions\r
-//                                                                     ODM_COMP_TX_PWR_TRACK           |\r
-//                                                                     ODM_COMP_RX_GAIN_TRACK          |\r
-//                                                                     ODM_COMP_CALIBRATION                    |\r
-//Common\r
-//                                                                     ODM_COMP_COMMON                         |\r
-//                                                                     ODM_COMP_INIT                                   |\r
-//                                                                     ODM_COMP_PSD                                    |\r
-#endif\r
-                                                                       0;\r
-}\r
-\r
-#if 0\r
-/*------------------Declare variable-----------------------\r
-// Define debug flag array for common debug print macro. */\r
-u4Byte ODM_DBGP_Type[ODM_DBGP_TYPE_MAX];\r
-\r
-/* Define debug print header for every service module. */\r
-ODM_DBGP_HEAD_T        ODM_DBGP_Head;\r
-\r
-\r
-/*-----------------------------------------------------------------------------\r
- * Function:    DBGP_Flag_Init\r
- *\r
- * Overview:    Refresh all debug print control flag content to zero.\r
- *\r
- * Input:       NONE\r
- *\r
- * Output:      NONE\r
- *\r
- * Return:      NONE\r
- *\r
- * Revised History:\r
- *  When               Who             Remark\r
- *  10/20/2006 MHC             Create Version 0.\r
- *\r
- *---------------------------------------------------------------------------*/\r
-extern void    ODM_DBGP_Flag_Init(void)\r
-{    \r
-    u1Byte i;\r
-    \r
-       for (i = 0; i < ODM_DBGP_TYPE_MAX; i++)\r
-       {\r
-               ODM_DBGP_Type[i] = 0;\r
-       }\r
-    \r
-#ifndef ADSL_AP_BUILD_WORKAROUND\r
-#if DBG                \r
-       // 2010/06/02 MH Free build driver can not out any debug message!!!\r
-       // Init Debug flag enable condition\r
-\r
-       ODM_DBGP_Type[FINIT]                    =       \\r
-//                                                             INIT_EEPROM                                             |\r
-//                                                             INIT_TxPower                                            |\r
-//                                                             INIT_IQK                                                        |\r
-//                                                             INIT_RF                                                 |\r
-                                                               0;\r
-\r
-       ODM_DBGP_Type[FDM]                      =       \\r
-//                                                             WA_IOT                                                  |\r
-//                                                             DM_PWDB                                         |\r
-//                                                             DM_Monitor                                              |\r
-//                                                             DM_DIG                          |\r
-//                                                             DM_EDCA_Turbo           |\r
-//                                                             DM_BT30                         |\r
-                                                               0;\r
-\r
-       ODM_DBGP_Type[FIOCTL]           =       \\r
-//                                                             IOCTL_IRP                                               |\r
-//                                                             IOCTL_IRP_DETAIL                                        |\r
-//                                                             IOCTL_IRP_STATISTICS                            |\r
-//                                                             IOCTL_IRP_HANDLE                                |\r
-//                                                             IOCTL_BT_HCICMD                                 |\r
-//                                                             IOCTL_BT_HCICMD_DETAIL                  |\r
-//                                                             IOCTL_BT_HCICMD_EXT                             |\r
-//                                                             IOCTL_BT_EVENT                                  |\r
-//                                                             IOCTL_BT_EVENT_DETAIL                   |\r
-//                                                             IOCTL_BT_EVENT_PERIODICAL               |\r
-//                                                             IOCTL_BT_TX_ACLDATA                     |\r
-//                                                             IOCTL_BT_TX_ACLDATA_DETAIL              |\r
-//                                                             IOCTL_BT_RX_ACLDATA                             |\r
-//                                                             IOCTL_BT_RX_ACLDATA_DETAIL              |\r
-//                                                             IOCTL_BT_TP                                             |\r
-//                                                             IOCTL_STATE                                             |\r
-//                                                             IOCTL_BT_LOGO                                   |\r
-//                                                             IOCTL_CALLBACK_FUN                              |\r
-//                                                             IOCTL_PARSE_BT_PKT                              |\r
-                                                               0;\r
-\r
-       ODM_DBGP_Type[FBT]                      =       \\r
-//                                                             BT_TRACE                                                |\r
-                                                               0;\r
-\r
-       ODM_DBGP_Type[FEEPROM]          =       \\r
-//                                                             EEPROM_W                                                |\r
-//                                                             EFUSE_PG                                                |\r
-//                                                             EFUSE_READ_ALL                                  |\r
-//                                                             EFUSE_ANALYSIS                                  |\r
-//                                                             EFUSE_PG_DETAIL                                 |\r
-                                                               0;\r
-\r
-       ODM_DBGP_Type[FDBG_CTRL]        =       \\r
-//                                                             DBG_CTRL_TRACE                                  |\r
-//                                                             DBG_CTRL_INBAND_NOISE                   |\r
-                                                               0;\r
-       \r
-       // 2011/07/20 MH Add for short cut \r
-       ODM_DBGP_Type[FSHORT_CUT] =     \\r
-//                                                             SHCUT_TX                                                | \r
-//                                                             SHCUT_RX                                                |\r
-                                                               0;\r
-       \r
-#endif \r
-#endif\r
-       /* Define debug header of every service module. */\r
-       //ODM_DBGP_Head.pMANS   = "\n\r[MANS] ";\r
-       //ODM_DBGP_Head.pRTOS   = "\n\r[RTOS] ";\r
-       //ODM_DBGP_Head.pALM    = "\n\r[ALM]  ";\r
-       //ODM_DBGP_Head.pPEM    = "\n\r[PEM]  ";\r
-       //ODM_DBGP_Head.pCMPK   = "\n\r[CMPK] ";\r
-       //ODM_DBGP_Head.pRAPD   = "\n\r[RAPD] ";\r
-       //ODM_DBGP_Head.pTXPB   = "\n\r[TXPB] ";\r
-       //ODM_DBGP_Head.pQUMG   = "\n\r[QUMG] ";\r
-       \r
-}      /* DBGP_Flag_Init */\r
-\r
-#endif\r
-\r
-\r
-#if 0\r
-u4Byte GlobalDebugLevel                        =       DBG_LOUD;\r
-//\r
-// 2009/06/22 MH Allow Fre build to print none debug info at init time.\r
-//\r
-#if DBG\r
-u8Byte GlobalDebugComponents   =       \\r
-//                                                                     COMP_TRACE                              |\r
-//                                                                     COMP_DBG                                |\r
-//                                                                     COMP_INIT                               |\r
-//                                                                     COMP_OID_QUERY                  |\r
-//                                                                     COMP_OID_SET                    |\r
-//                                                                     COMP_RECV                               |\r
-//                                                                     COMP_SEND                               |\r
-//                                                                     COMP_IO                                 |\r
-//                                                                     COMP_POWER                              |\r
-//                                                                     COMP_MLME                               |\r
-//                                                                     COMP_SCAN                               |\r
-//                                                                     COMP_SYSTEM                     |\r
-//                                                                     COMP_SEC                                |\r
-//                                                                     COMP_AP                         |\r
-//                                                                     COMP_TURBO                              |\r
-//                                                                     COMP_QOS                                |\r
-//                                                                     COMP_AUTHENTICATOR      |\r
-//                                                                     COMP_BEACON                     |\r
-//                                                                     COMP_ANTENNA                    |\r
-//                                                                     COMP_RATE                               |\r
-//                                                                     COMP_EVENTS                     |\r
-//                                                                     COMP_FPGA                               |\r
-//                                                                     COMP_RM                         |\r
-//                                                                     COMP_MP                         |\r
-//                                                                     COMP_RXDESC                     |\r
-//                                                                     COMP_CKIP                               |\r
-//                                                                     COMP_DIG                                |\r
-//                                                                     COMP_TXAGC                              |\r
-//                                                                     COMP_HIPWR                              |\r
-//                                                                     COMP_HALDM                              |\r
-//                                                                     COMP_RSNA                               |\r
-//                                                                     COMP_INDIC                              |\r
-//                                                                     COMP_LED                                |\r
-//                                                                     COMP_RF                                 |\r
-//                                                                     COMP_DUALMACSWITCH      |\r
-//                                                                     COMP_EASY_CONCURRENT    |\r
-\r
-//1!!!!!!!!!!!!!!!!!!!!!!!!!!!\r
-//1//1Attention Please!!!<11n or 8190 specific code should be put below this line>\r
-//1!!!!!!!!!!!!!!!!!!!!!!!!!!!\r
-\r
-//                                                                     COMP_HT                         |\r
-//                                                                     COMP_POWER_TRACKING     |\r
-//                                                                     COMP_RX_REORDER         |\r
-//                                                                     COMP_AMSDU                      |\r
-//                                                                     COMP_WPS                                |\r
-//                                                                     COMP_RATR                               |\r
-//                                                                     COMP_RESET                              |\r
-//                                                                     COMP_CMD                                |\r
-//                                                                     COMP_EFUSE                              |\r
-//                                                                     COMP_MESH_INTERWORKING |\r
-//                                                                     COMP_CCX                                |       \r
-//                                                                     COMP_IOCTL                              |\r
-//                                                                     COMP_GP                                 |\r
-//                                                                     COMP_TXAGG                              |\r
-//                                                                     COMP_BB_POWERSAVING     |\r
-//                                                                     COMP_SWAS                               |\r
-//                                                                     COMP_P2P                                |\r
-//                                                                     COMP_MUX                                |\r
-//                                                                     COMP_FUNC                               |\r
-//                                                                     COMP_TDLS                               |\r
-//                                                                     COMP_OMNIPEEK                   |\r
-//                                                                     COMP_PSD                                |\r
-                                                                       0;\r
-\r
-\r
-#else\r
-u8Byte GlobalDebugComponents   = 0;\r
-#endif\r
-\r
-#if (RT_PLATFORM==PLATFORM_LINUX) \r
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))\r
-EXPORT_SYMBOL(GlobalDebugComponents);\r
-EXPORT_SYMBOL(GlobalDebugLevel);\r
-#endif\r
-#endif\r
-\r
-/*------------------Declare variable-----------------------\r
-// Define debug flag array for common debug print macro. */\r
-u4Byte                 DBGP_Type[DBGP_TYPE_MAX];\r
-\r
-/* Define debug print header for every service module. */\r
-DBGP_HEAD_T            DBGP_Head;\r
-\r
-\r
-/*-----------------------------------------------------------------------------\r
- * Function:    DBGP_Flag_Init\r
- *\r
- * Overview:    Refresh all debug print control flag content to zero.\r
- *\r
- * Input:       NONE\r
- *\r
- * Output:      NONE\r
- *\r
- * Return:      NONE\r
- *\r
- * Revised History:\r
- *  When               Who             Remark\r
- *  10/20/2006 MHC             Create Version 0.\r
- *\r
- *---------------------------------------------------------------------------*/\r
-extern void    DBGP_Flag_Init(void)\r
-{    \r
-    u1Byte     i;\r
-    \r
-       for (i = 0; i < DBGP_TYPE_MAX; i++)\r
-       {\r
-               DBGP_Type[i] = 0;\r
-       }\r
-    \r
-#if DBG                \r
-       // 2010/06/02 MH Free build driver can not out any debug message!!!\r
-       // Init Debug flag enable condition\r
-\r
-       DBGP_Type[FINIT]                        =       \\r
-//                                                             INIT_EEPROM                                             |\r
-//                                                             INIT_TxPower                                            |\r
-//                                                             INIT_IQK                                                        |\r
-//                                                             INIT_RF                                                 |\r
-                                                               0;\r
-\r
-       DBGP_Type[FDM]                  =       \\r
-//                                                             WA_IOT                                                  |\r
-//                                                             DM_PWDB                                         |\r
-//                                                             DM_Monitor                                              |\r
-//                                                             DM_DIG                          |\r
-//                                                             DM_EDCA_Turbo           |\r
-//                                                             DM_BT30                         |\r
-                                                               0;\r
-\r
-       DBGP_Type[FIOCTL]               =       \\r
-//                                                             IOCTL_IRP                                               |\r
-//                                                             IOCTL_IRP_DETAIL                                        |\r
-//                                                             IOCTL_IRP_STATISTICS                            |\r
-//                                                             IOCTL_IRP_HANDLE                                |\r
-//                                                             IOCTL_BT_HCICMD                                 |\r
-//                                                             IOCTL_BT_HCICMD_DETAIL                  |\r
-//                                                             IOCTL_BT_HCICMD_EXT                             |\r
-//                                                             IOCTL_BT_EVENT                                  |\r
-//                                                             IOCTL_BT_EVENT_DETAIL                   |\r
-//                                                             IOCTL_BT_EVENT_PERIODICAL               |\r
-//                                                             IOCTL_BT_TX_ACLDATA                     |\r
-//                                                             IOCTL_BT_TX_ACLDATA_DETAIL              |\r
-//                                                             IOCTL_BT_RX_ACLDATA                             |\r
-//                                                             IOCTL_BT_RX_ACLDATA_DETAIL              |\r
-//                                                             IOCTL_BT_TP                                             |\r
-//                                                             IOCTL_STATE                                             |\r
-//                                                             IOCTL_BT_LOGO                                   |\r
-//                                                             IOCTL_CALLBACK_FUN                              |\r
-//                                                             IOCTL_PARSE_BT_PKT                              |\r
-                                                               0;\r
-\r
-       DBGP_Type[FBT]                  =       \\r
-//                                                             BT_TRACE                                                |\r
-                                                               0;\r
-\r
-       DBGP_Type[FEEPROM]              =       \\r
-//                                                             EEPROM_W                                                |\r
-//                                                             EFUSE_PG                                                |\r
-//                                                             EFUSE_READ_ALL                                  |\r
-//                                                             EFUSE_ANALYSIS                                  |\r
-//                                                             EFUSE_PG_DETAIL                                 |\r
-                                                               0;\r
-\r
-       DBGP_Type[FDBG_CTRL]    =       \\r
-//                                                             DBG_CTRL_TRACE                                  |\r
-//                                                             DBG_CTRL_INBAND_NOISE                   |\r
-                                                               0;\r
-       \r
-       // 2011/07/20 MH Add for short cut \r
-       DBGP_Type[FSHORT_CUT] =         \\r
-//                                                             SHCUT_TX                                                | \r
-//                                                             SHCUT_RX                                                |\r
-                                                               0;\r
-       \r
-#endif \r
-       /* Define debug header of every service module. */\r
-       DBGP_Head.pMANS = "\n\r[MANS] ";\r
-       DBGP_Head.pRTOS = "\n\r[RTOS] ";\r
-       DBGP_Head.pALM  = "\n\r[ALM]  ";\r
-       DBGP_Head.pPEM  = "\n\r[PEM]  ";\r
-       DBGP_Head.pCMPK = "\n\r[CMPK] ";\r
-       DBGP_Head.pRAPD = "\n\r[RAPD] ";\r
-       DBGP_Head.pTXPB = "\n\r[TXPB] ";\r
-       DBGP_Head.pQUMG = "\n\r[QUMG] ";\r
-       \r
-}      /* DBGP_Flag_Init */\r
-\r
-\r
-/*-----------------------------------------------------------------------------\r
- * Function:    DBG_PrintAllFlag\r
- *\r
- * Overview:    Print All debug flag\r
- *\r
- * Input:       NONE\r
- *\r
- * Output:      NONE\r
- *\r
- * Return:      NONE\r
- *\r
- * Revised History:\r
- *  When               Who             Remark\r
- *  12/10/2008 MHC             Create Version 0.\r
- *\r
- *---------------------------------------------------------------------------*/\r
-extern void    DBG_PrintAllFlag(void)\r
-{\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 0    FQoS\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 1    FTX\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 2    FRX\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 3    FSEC\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 4    FMGNT\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 5    FMLME\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 6    FRESOURCE\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 7    FBEACON\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 8    FISR\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 9    FPHY\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 11   FMP\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 12   FPWR\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 13   FDM\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 14   FDBG_CTRL\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 15   FC2H\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("DBGFLAG 16   FBT\n"));                        \r
-}      // DBG_PrintAllFlag\r
-\r
-\r
-extern void    DBG_PrintAllComp(void)\r
-{\r
-       u1Byte  i;\r
-       \r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("GlobalDebugComponents Definition\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT0    COMP_TRACE\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT1    COMP_DBG\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT2    COMP_INIT\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT3    COMP_OID_QUERY\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT4    COMP_OID_SET\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT5    COMP_RECV\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT6    COMP_SEND\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT7    COMP_IO\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT8    COMP_POWER\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT9   COMP_MLME\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT10   COMP_SCAN\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT11   COMP_SYSTEM\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT12   COMP_SEC\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT13   COMP_AP\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT14   COMP_TURBO\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT15   COMP_QOS\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT16   COMP_AUTHENTICATOR\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT17   COMP_BEACON\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT18   COMP_BEACON\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT19   COMP_RATE\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT20   COMP_EVENTS\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT21   COMP_FPGA\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT22   COMP_RM\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT23   COMP_MP\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT24   COMP_RXDESC\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT25   COMP_CKIP\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT26   COMP_DIG\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT27   COMP_TXAGC\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT28   COMP_HIPWR\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT29   COMP_HALDM\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT30   COMP_RSNA\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT31   COMP_INDIC\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT32   COMP_LED\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT33   COMP_RF\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT34   COMP_HT\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT35   COMP_POWER_TRACKING\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT36   COMP_POWER_TRACKING\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT37   COMP_AMSDU\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT38   COMP_WPS\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT39   COMP_RATR\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT40   COMP_RESET\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT41   COMP_CMD\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT42   COMP_EFUSE\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT43   COMP_MESH_INTERWORKING\n"));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT43   COMP_CCX\n"));                \r
-       \r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("GlobalDebugComponents = %"i64fmt"x\n", GlobalDebugComponents));\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("Enable DBG COMP ="));\r
-       for (i = 0; i < 64; i++)\r
-       {\r
-               if (GlobalDebugComponents & ((u8Byte)0x1 << i) )\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT%02d |\n", i));\r
-               }\r
-       }\r
-       ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("\n"));\r
-       \r
-}      // DBG_PrintAllComp\r
-\r
-\r
-/*-----------------------------------------------------------------------------\r
- * Function:    DBG_PrintFlagEvent\r
- *\r
- * Overview:    Print dedicated debug flag event\r
- *\r
- * Input:       NONE\r
- *\r
- * Output:      NONE\r
- *\r
- * Return:      NONE\r
- *\r
- * Revised History:\r
- *  When               Who             Remark\r
- *  12/10/2008 MHC             Create Version 0.\r
- *\r
- *---------------------------------------------------------------------------*/\r
-extern void    DBG_PrintFlagEvent(u1Byte       DbgFlag)\r
-{\r
-       switch(DbgFlag)\r
-       {\r
-               case    FQoS:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    QoS_INIT\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    QoS_VISTA\n"));\r
-               break;\r
-\r
-               case    FTX:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    TX_DESC\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    TX_DESC_TID\n"));\r
-               break;\r
-\r
-               case    FRX:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    RX_DATA\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    RX_PHY_STS\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 2    RX_PHY_SS\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 3    RX_PHY_SQ\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 4    RX_PHY_ASTS\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 5    RX_ERR_LEN\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 6    RX_DEFRAG\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 7    RX_ERR_RATE\n"));\r
-               break;\r
-\r
-               case    FSEC:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("NA\n"));\r
-               break;\r
-\r
-               case    FMGNT:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("NA\n"));\r
-               break;\r
-\r
-               case    FMLME:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    MEDIA_STS\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    LINK_STS\n"));               \r
-               break;\r
-\r
-               case    FRESOURCE:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    OS_CHK\n"));\r
-               break;\r
-\r
-               case    FBEACON:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    BCN_SHOW\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    BCN_PEER\n"));               \r
-               break;\r
-\r
-               case    FISR:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    ISR_CHK\n"));\r
-               break;\r
-\r
-               case    FPHY:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    PHY_BBR\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    PHY_BBW\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 2    PHY_RFR\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 3    PHY_RFW\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 4    PHY_MACR\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 5    PHY_MACW\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 6    PHY_ALLR\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 7    PHY_ALLW\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 8    PHY_TXPWR\n"));\r
-               break;\r
-\r
-               case    FMP:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    MP_RX\n"));\r
-               break;\r
-               \r
-               case    FEEPROM:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    EEPROM_W\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    EFUSE_PG\n"));               \r
-               break;\r
-               \r
-               case    FPWR:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    LPS\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    IPS\n"));            \r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 2    PWRSW\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 3    PWRHW\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 4    PWRHAL\n"));\r
-               break;\r
-\r
-               case    FDM:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    WA_IOT\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    DM_PWDB\n"));                \r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 2    DM_Monitor\n"));             \r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 3    DM_DIG\n"));         \r
-               break;\r
-\r
-               case    FDBG_CTRL:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    DBG_CTRL_TRACE\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    DBG_CTRL_INBAND_NOISE\n"));          \r
-               break;\r
-               \r
-               case    FC2H:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    C2H_Summary\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    C2H_PacketData\n"));         \r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 2    C2H_ContentData\n"));                \r
-               break;\r
-               \r
-               case    FBT:\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 0    BT_TRACE\n"));\r
-               ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD,        ("BIT 1    BT_RFPoll\n"));              \r
-               break;          \r
-               \r
-               default:\r
-                       break;\r
-       }\r
-\r
-}      // DBG_PrintFlagEvent\r
-\r
-\r
-extern void    DBG_DumpMem(const u1Byte DbgComp, \r
-                                                       const u1Byte DbgLevel, \r
-                                                       pu1Byte pMem, \r
-                                                       u2Byte Len)\r
-{\r
-       u2Byte i;\r
-\r
-       for (i=0;i<((Len>>3) + 1);i++)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,DbgComp, DbgLevel, ("%02X %02X %02X %02X %02X %02X %02X %02X\n",\r
-                                       *(pMem+(i*8)), *(pMem+(i*8+1)), *(pMem+(i*8+2)), *(pMem+(i*8+3)),\r
-                                       *(pMem+(i*8+4)), *(pMem+(i*8+5)), *(pMem+(i*8+6)), *(pMem+(i*8+7))));\r
-               \r
-       }\r
-}\r
-\r
-\r
-#endif\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_debug.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_debug.h
deleted file mode 100755 (executable)
index 802d0df..0000000
+++ /dev/null
@@ -1,892 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-\r
-#ifndef        __ODM_DBG_H__\r
-#define __ODM_DBG_H__\r
-\r
-\r
-//-----------------------------------------------------------------------------\r
-//     Define the debug levels\r
-//\r
-//     1.      DBG_TRACE and DBG_LOUD are used for normal cases.\r
-//     So that, they can help SW engineer to develope or trace states changed \r
-//     and also help HW enginner to trace every operation to and from HW, \r
-//     e.g IO, Tx, Rx. \r
-//\r
-//     2.      DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases, \r
-//     which help us to debug SW or HW.\r
-//\r
-//-----------------------------------------------------------------------------\r
-//\r
-//     Never used in a call to ODM_RT_TRACE()!\r
-//\r
-#define ODM_DBG_OFF                                    1\r
-\r
-//\r
-//     Fatal bug. \r
-//     For example, Tx/Rx/IO locked up, OS hangs, memory access violation, \r
-//     resource allocation failed, unexpected HW behavior, HW BUG and so on.\r
-//\r
-#define ODM_DBG_SERIOUS                                2\r
-\r
-//\r
-//     Abnormal, rare, or unexpeted cases.\r
-//     For example, IRP/Packet/OID canceled, device suprisely unremoved and so on.\r
-//\r
-#define ODM_DBG_WARNING                                3\r
-\r
-//\r
-//     Normal case with useful information about current SW or HW state. \r
-//     For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status, \r
-//     SW protocol state change, dynamic mechanism state change and so on.\r
-//\r
-#define ODM_DBG_LOUD                                   4\r
-\r
-//\r
-//     Normal case with detail execution flow or information.\r
-//\r
-#define ODM_DBG_TRACE                                  5\r
-\r
-//-----------------------------------------------------------------------------\r
-// Define the tracing components\r
-//\r
-//-----------------------------------------------------------------------------\r
-//BB Functions\r
-#define ODM_COMP_DIG                                   BIT0    \r
-#define ODM_COMP_RA_MASK                               BIT1    \r
-#define ODM_COMP_DYNAMIC_TXPWR         BIT2\r
-#define ODM_COMP_FA_CNT                                BIT3\r
-#define ODM_COMP_RSSI_MONITOR          BIT4\r
-#define ODM_COMP_CCK_PD                                BIT5\r
-#define ODM_COMP_ANT_DIV                               BIT6\r
-#define ODM_COMP_PWR_SAVE                      BIT7\r
-#define ODM_COMP_PWR_TRAIN                     BIT8\r
-#define ODM_COMP_RATE_ADAPTIVE         BIT9\r
-#define ODM_COMP_PATH_DIV                              BIT10\r
-#define ODM_COMP_PSD                                   BIT11\r
-#define ODM_COMP_DYNAMIC_PRICCA                BIT12\r
-#define ODM_COMP_RXHP                                  BIT13                   \r
-#define ODM_COMP_MP                                    BIT14\r
-#define ODM_COMP_CFO_TRACKING          BIT15\r
-//MAC Functions\r
-#define ODM_COMP_EDCA_TURBO                    BIT16\r
-#define ODM_COMP_EARLY_MODE                    BIT17\r
-//RF Functions\r
-#define ODM_COMP_TX_PWR_TRACK          BIT24\r
-#define ODM_COMP_RX_GAIN_TRACK         BIT25\r
-#define ODM_COMP_CALIBRATION                   BIT26\r
-//Common Functions\r
-#define ODM_COMP_COMMON                                BIT30\r
-#define ODM_COMP_INIT                                  BIT31\r
-\r
-/*------------------------Export Marco Definition---------------------------*/\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       #define RT_PRINTK                               DbgPrint\r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-       #define DbgPrint        printk\r
-       #define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args);\r
-       #define RT_DISP(dbgtype, dbgflag, printstr)\r
-#else\r
-       #define DbgPrint        panic_printk\r
-       #define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args);\r
-#endif\r
-\r
-#ifndef ASSERT\r
-       #define ASSERT(expr)\r
-#endif\r
-\r
-#if DBG\r
-#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt)                                                                        \\r
-               if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel || level == ODM_DBG_SERIOUS))   \\r
-               {                                                                                                                                                       \\r
-                       RT_PRINTK fmt;                                                                                                                  \\r
-               }\r
-\r
-#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt)                                                                      \\r
-               if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel))       \\r
-               {                                                                                                                                                       \\r
-                       RT_PRINTK fmt;                                                                                                                  \\r
-               }\r
-\r
-#define ODM_RT_ASSERT(pDM_Odm, expr, fmt)                                                                                      \\r
-               if(!(expr)) {                                                                                                                                   \\r
-                       DbgPrint( "Assertion failed! %s at ......\n", #expr);                                                           \\r
-                       DbgPrint( "      ......%s,%s,line=%d\n",__FILE__,__FUNCTION__,__LINE__);                        \\r
-                       RT_PRINTK fmt;                                                                                                                  \\r
-                       ASSERT(FALSE);                                                                                                                  \\r
-               }\r
-#define ODM_dbg_enter() { DbgPrint("==> %s\n", __FUNCTION__); }\r
-#define ODM_dbg_exit() { DbgPrint("<== %s\n", __FUNCTION__); }\r
-#define ODM_dbg_trace(str) { DbgPrint("%s:%s\n", __FUNCTION__, str); }\r
-\r
-#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr)                                                   \\r
-                       if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel))       \\r
-                       {                                                                                                                                               \\r
-                               int __i;                                                                                                                                \\r
-                               pu1Byte __ptr = (pu1Byte)ptr;                                                                                   \\r
-                               DbgPrint("[ODM] ");                                                                                                     \\r
-                               DbgPrint(title_str);                                                                                                    \\r
-                               DbgPrint(" ");                                                                                                          \\r
-                               for( __i=0; __i<6; __i++ )                                                                                              \\r
-                                       DbgPrint("%02X%s", __ptr[__i], (__i==5)?"":"-");                                                \\r
-                               DbgPrint("\n");                                                                                                         \\r
-                       }\r
-#else\r
-#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt)\r
-#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt)\r
-#define ODM_RT_ASSERT(pDM_Odm, expr, fmt)\r
-#define ODM_dbg_enter()\r
-#define ODM_dbg_exit()\r
-#define ODM_dbg_trace(str)\r
-#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr)\r
-#endif\r
-\r
-\r
-VOID \r
-ODM_InitDebugSetting(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-       );\r
-\r
-\r
-\r
-#if 0\r
-#if DBG\r
-#define DbgPrint printk\r
-\r
-#define PRINT_DATA(_TitleString, _HexData, _HexDataLen)                                                                \\r
-                       {                                                                                                                                               \\r
-                               char                    *szTitle = _TitleString;                                                                        \\r
-                               pu1Byte         pbtHexData = _HexData;                                                                  \\r
-                               u4Byte          u4bHexDataLen = _HexDataLen;                                                    \\r
-                               u4Byte          __i;                                                                                                            \\r
-                               DbgPrint("%s", szTitle);                                                                                                        \\r
-                               for (__i=0;__i<u4bHexDataLen;__i++)                                                                     \\r
-                               {                                                                                                                                       \\r
-                                       if ((__i & 15) == 0)                                                                                            \\r
-                                       {                                                                                                                               \\r
-                                               DbgPrint("\n");                                                                                         \\r
-                                       }                                                                                                                               \\r
-                                       DbgPrint("%02X%s", pbtHexData[__i], ( ((__i&3)==3) ? "  " : " ") );             \\r
-                               }                                                                                                                                       \\r
-                               DbgPrint("\n");                                                                                                         \\r
-                       }\r
-\r
-// RT_PRINT_XXX macros: implemented for debugging purpose.\r
-// Added by Annie, 2005-11-21.\r
-#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen)                      \\r
-                       if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel))   \\r
-                       {                                                                                                                                               \\r
-                               int __i;                                                                                                                                \\r
-                               pu1Byte ptr = (pu1Byte)_HexData;                                                                                \\r
-                               DbgPrint("Rtl819x: ");                                                                                                  \\r
-                               DbgPrint(_TitleString);                                                                                         \\r
-                               for( __i=0; __i<(int)_HexDataLen; __i++ )                                                               \\r
-                               {                                                                                                                                       \\r
-                                       DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?"  ":" ");                  \\r
-                                       if (((__i + 1) % 16) == 0)      DbgPrint("\n");                                                 \\r
-                               }                                                                                                                                       \\r
-                               DbgPrint("\n");                                                                                                         \\r
-                       }\r
-\r
-#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr)                                                               \\r
-                       if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel))   \\r
-                       {                                                                                                                                               \\r
-                               int __i;                                                                                                                                \\r
-                               pu1Byte ptr = (pu1Byte)_Ptr;                                                                                    \\r
-                               DbgPrint("Rtl819x: ");                                                                                                  \\r
-                               DbgPrint(_TitleString);                                                                                         \\r
-                               DbgPrint(" ");                                                                                                                  \\r
-                               for( __i=0; __i<6; __i++ )                                                                                              \\r
-                                       DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-");                                                  \\r
-                               DbgPrint("\n");                                                                                                         \\r
-                       }\r
-\r
-#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum)                                     \\r
-                       if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel))   \\r
-                       {                                                                                                                                               \\r
-                               int __i, __j;                                                                                                                   \\r
-                               pu1Byte ptr = (pu1Byte)_Ptr;                                                                                    \\r
-                               DbgPrint("Rtl819x: ");                                                                                                  \\r
-                               DbgPrint(_TitleString);                                                                                         \\r
-                               DbgPrint("\n");                                                                                                         \\r
-                               for( __i=0; __i<(int)_AddNum; __i++ )                                                                   \\r
-                               {                                                                                                                                       \\r
-                                       for( __j=0; __j<6; __j++ )                                                                                      \\r
-                                               DbgPrint("%02X%s", ptr[__i*6+__j], (__j==5)?"":"-");                            \\r
-                                       DbgPrint("\n");                                                                                                 \\r
-                               }                                                                                                                                       \\r
-                       }\r
-\r
-// Added by Annie, 2005-11-22.\r
-#define        MAX_STR_LEN     64\r
-#define        PRINTABLE(_ch)  (_ch>=' ' &&_ch<='~' )  // I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22.\r
-\r
-#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len)                                                  \\r
-                       if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel))   \\r
-                       {                                                                                                                                               \\r
-                               int             __i;                                                                                                                    \\r
-                               u1Byte  buffer[MAX_STR_LEN];                                                                                    \\r
-                               int     length = (_Len<MAX_STR_LEN)? _Len : (MAX_STR_LEN-1) ;                           \\r
-                               PlatformZeroMemory( buffer, MAX_STR_LEN );                                                      \\r
-                               PlatformMoveMemory( buffer, (pu1Byte)_Ptr, length );                                            \\r
-                               for( __i=0; __i<MAX_STR_LEN; __i++ )                                                                    \\r
-                               {                                                                                                                                       \\r
-                                       if( !PRINTABLE(buffer[__i]) )   buffer[__i] = '?';                                              \\r
-                               }                                                                                                                                       \\r
-                               buffer[length] = '\0';                                                                                                  \\r
-                               DbgPrint("Rtl819x: ");                                                                                                  \\r
-                               DbgPrint(_TitleString);                                                                                         \\r
-                               DbgPrint(": %d, <%s>\n", _Len, buffer);                                                                 \\r
-                       }\r
-                       \r
-#else  // of #if DBG\r
-#define DbgPrint(...)  \r
-#define PRINT_DATA(_TitleString, _HexData, _HexDataLen)\r
-#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen)\r
-#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr)\r
-#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum)\r
-#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len)\r
-#endif // of #if DBG\r
-\r
-#endif \r
-\r
-\r
-#if 0\r
-/* Define debug print header for every service module.*/\r
-typedef struct tag_ODM_DBGP_Service_Module_Header_Name_Structure\r
-{\r
-       const char      *pMANS;\r
-       const char      *pRTOS;\r
-       const char      *pALM;\r
-       const char      *pPEM;\r
-       const char      *pCMPK;\r
-       const char      *pRAPD;\r
-       const char      *pTXPB;\r
-       const char      *pQUMG;\r
-}ODM_DBGP_HEAD_T;\r
-\r
-\r
-/* Define different debug flag for dedicated service modules in debug flag array. */\r
-// Each module has independt 32 bit debug flag you cnn define the flag as yout require.\r
-typedef enum tag_ODM_DBGP_Flag_Type_Definition\r
-{\r
-       ODM_FTX                         = 0,\r
-       ODM_FRX                         ,       \r
-       ODM_FPHY                                ,\r
-       ODM_FPWR                                ,\r
-       ODM_FDM                         ,\r
-       ODM_FC2H                                ,\r
-       ODM_FBT                         ,\r
-       ODM_DBGP_TYPE_MAX\r
-}ODM_DBGP_FLAG_E;\r
-\r
-\r
-// Define TX relative debug bit                                --> FTX\r
-#define                ODM_TX_DESC                     BIT0\r
-#define                ODM_TX_DESC_TID         BIT1\r
-#define                ODM_TX_PATH                     BIT2\r
-\r
-// Define RX relative debug  bit                               --> FRX\r
-#define                ODM_RX_DATA                             BIT0    \r
-#define                ODM_RX_PHY_STS                  BIT1\r
-#define                ODM_RX_PHY_SS                           BIT2\r
-#define                ODM_RX_PHY_SQ                           BIT3\r
-#define                ODM_RX_PHY_ASTS                 BIT4\r
-#define                ODM_RX_ERR_LEN                  BIT5\r
-#define                ODM_RX_DEFRAG                           BIT6\r
-#define                ODM_RX_ERR_RATE                 BIT7\r
-#define                ODM_RX_PATH                             BIT8\r
-#define                ODM_RX_BEACON                           BIT9\r
-\r
-// Define PHY-BB/RF/MAC check module bit               --> FPHY\r
-#define                ODM_PHY_BBR                             BIT0\r
-#define                ODM_PHY_BBW                             BIT1\r
-#define                ODM_PHY_RFR                             BIT2\r
-#define                ODM_PHY_RFW                             BIT3\r
-#define                ODM_PHY_MACR                            BIT4\r
-#define                ODM_PHY_MACW                            BIT5\r
-#define                ODM_PHY_ALLR                            BIT6\r
-#define                ODM_PHY_ALLW                            BIT7\r
-#define                ODM_PHY_TXPWR                   BIT8\r
-#define                ODM_PHY_PWRDIFF                 BIT9\r
-#define                ODM_PHY_SICR                            BIT10\r
-#define                ODM_PHY_SICW                            BIT11\r
-\r
-\r
-\r
-\r
-extern u4Byte ODM_GlobalDebugLevel;\r
-\r
-\r
-#if DBG\r
-extern u8Byte ODM_GlobalDebugComponents;\r
-#endif\r
-#endif\r
-#if 0\r
-\r
-//-----------------------------------------------------------------------------\r
-//     Define the debug levels\r
-//\r
-//     1.      DBG_TRACE and DBG_LOUD are used for normal cases.\r
-//     So that, they can help SW engineer to develope or trace states changed \r
-//     and also help HW enginner to trace every operation to and from HW, \r
-//     e.g IO, Tx, Rx. \r
-//\r
-//     2.      DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases, \r
-//     which help us to debug SW or HW.\r
-//\r
-//-----------------------------------------------------------------------------\r
-//\r
-//     Never used in a call to ODM_RT_TRACE(pDM_Odm,)!\r
-//\r
-#define DBG_OFF                                        0\r
-\r
-//\r
-//     Deprecated! Don't use it! \r
-//     TODO: fix related debug message!\r
-//\r
-//#define DBG_SEC                                      1\r
-\r
-//\r
-//     Fatal bug. \r
-//     For example, Tx/Rx/IO locked up, OS hangs, memory access violation, \r
-//     resource allocation failed, unexpected HW behavior, HW BUG and so on.\r
-//\r
-#define DBG_SERIOUS                            2\r
-\r
-//\r
-//     Abnormal, rare, or unexpeted cases.\r
-//     For example, IRP/Packet/OID canceled, device suprisely unremoved and so on.\r
-//\r
-#define DBG_WARNING                            3\r
-\r
-//\r
-//     Normal case with useful information about current SW or HW state. \r
-//     For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status, \r
-//     SW protocol state change, dynamic mechanism state change and so on.\r
-//\r
-#define DBG_LOUD                               4\r
-\r
-//\r
-//     Normal case with detail execution flow or information.\r
-//\r
-#define DBG_TRACE                              5\r
-\r
-\r
-\r
-//-----------------------------------------------------------------------------\r
-// Define the tracing components\r
-//\r
-//-----------------------------------------------------------------------------\r
-#define COMP_TRACE                             BIT0            // For function call tracing.\r
-#define COMP_DBG                               BIT1            // Only for temporary debug message.\r
-#define COMP_INIT                              BIT2            // during driver initialization / halt / reset.\r
-#define COMP_OID_QUERY                         BIT3            // Query OID.\r
-#define COMP_OID_SET                           BIT4            // Set OID.\r
-#define COMP_RECV                              BIT5            // Reveive part data path.\r
-#define COMP_SEND                              BIT6            // Send part path.\r
-#define COMP_IO                                        BIT7            // I/O Related. Added by Annie, 2006-03-02.\r
-#define COMP_POWER                             BIT8            // 802.11 Power Save mode or System/Device Power state related.\r
-#define COMP_MLME                              BIT9            // 802.11 link related: join/start BSS, leave BSS.\r
-#define COMP_SCAN                              BIT10   // For site survey.\r
-#define COMP_SYSTEM                            BIT11   // For general platform function.\r
-#define COMP_SEC                               BIT12   // For Security.\r
-#define COMP_AP                                        BIT13   // For AP mode related.\r
-#define COMP_TURBO                             BIT14   // For Turbo Mode related. By Annie, 2005-10-21.\r
-#define COMP_QOS                               BIT15   // For QoS.\r
-#define COMP_AUTHENTICATOR                     BIT16   // For AP mode Authenticator. Added by Annie, 2006-01-30.\r
-#define COMP_BEACON                            BIT17   // For Beacon related, by rcnjko.\r
-#define COMP_ANTENNA                           BIT18   // For Antenna diversity related, by rcnjko. \r
-#define COMP_RATE                              BIT19   // For Rate Adaptive mechanism, 2006.07.02, by rcnjko. #define COMP_EVENTS                              0x00000080      // Event handling\r
-#define COMP_EVENTS                            BIT20   // Event handling\r
-#define COMP_FPGA                              BIT21   // For FPGA verfication \r
-#define COMP_RM                                        BIT22   // For Radio Measurement. \r
-#define COMP_MP                                        BIT23   // For mass production test, by shien chang, 2006.07.13\r
-#define COMP_RXDESC                            BIT24   // Show Rx desc information for SD3 debug. Added by Annie, 2006-07-15.\r
-#define COMP_CKIP                              BIT25   // For CCX 1 S13: CKIP. Added by Annie, 2006-08-14.\r
-#define COMP_DIG                               BIT26   // For DIG, 2006.09.25, by rcnjko.\r
-#define COMP_TXAGC                             BIT27   // For Tx power, 060928, by rcnjko. \r
-#define COMP_HIPWR                             BIT28   // For High Power Mechanism, 060928, by rcnjko. \r
-#define COMP_HALDM                             BIT29   // For HW Dynamic Mechanism, 061010, by rcnjko. \r
-#define COMP_RSNA                              BIT30   // For RSNA IBSS , 061201, by CCW. \r
-#define COMP_INDIC                             BIT31   // For link indication\r
-#define COMP_LED                               BIT32   // For LED.\r
-#define COMP_RF                                        BIT33   // For RF.\r
-//1!!!!!!!!!!!!!!!!!!!!!!!!!!!\r
-//1//1Attention Please!!!<11n or 8190 specific code should be put below this line>\r
-//1!!!!!!!!!!!!!!!!!!!!!!!!!!!\r
-\r
-#define COMP_HT                                        BIT34   // For 802.11n HT related information. by Emily 2006-8-11\r
-#define COMP_POWER_TRACKING                    BIT35   //FOR 8190 TX POWER TRACKING\r
-#define COMP_RX_REORDER                                BIT36   // 8190 Rx Reorder\r
-#define COMP_AMSDU                             BIT37   // For A-MSDU Debugging\r
-#define COMP_WPS                               BIT38   //WPS Debug Message \r
-#define COMP_RATR                              BIT39   \r
-#define COMP_RESET                             BIT40\r
-// For debug command to print on dbgview!!\r
-#define COMP_CMD                               BIT41\r
-#define COMP_EFUSE                             BIT42\r
-#define COMP_MESH_INTERWORKING                         BIT43\r
-#define COMP_CCX                               BIT44   //CCX Debug Flag\r
-#define        COMP_IOCTL                              BIT45   // IO Control\r
-#define COMP_GP                                        BIT46   // For generic parser.\r
-#define COMP_TXAGG                             BIT47\r
-#define COMP_HVL                               BIT48     // For Ndis 6.2 Context Swirch and Hardware Virtualiztion Layer\r
-#define COMP_TEST                              BIT49\r
-#define COMP_BB_POWERSAVING    BIT50\r
-#define COMP_SWAS                              BIT51   // For SW Antenna Switch\r
-#define COMP_P2P                               BIT52\r
-#define COMP_MUX                               BIT53\r
-#define COMP_FUNC                              BIT54\r
-#define COMP_TDLS                              BIT55\r
-#define COMP_OMNIPEEK                  BIT56\r
-#define COMP_DUALMACSWITCH     BIT60   // 2010/12/27 Add for Dual mac mode debug\r
-#define COMP_EASY_CONCURRENT   BIT61   // 2010/12/27 Add for easy cncurrent mode debug\r
-#define COMP_PSD                               BIT63   //2011/3/9 Add for WLAN PSD for BT AFH\r
-\r
-#define COMP_DFS                                BIT62\r
-\r
-#define        COMP_ALL                                UINT64_C(0xFFFFFFFFFFFFFFFF) // All components\r
-// For debug print flag to use\r
-/*------------------------------Define structure----------------------------*/\r
-/* 2007/07/13 MH  *//*------For DeBuG Print modeue------*/\r
-\r
-/* Defnie structure to store different debug flag variable. Every debug flag \r
-     is a UINT32 integer and you can assign 32 different events. */\r
-typedef struct tag_DBGP_Debug_Flag_Structure\r
-{\r
-       u4Byte  Mans;                   /* Main Scheduler module. */\r
-       u4Byte  Rtos;                   /* RTOS module. */\r
-       u4Byte  Alarm;          /* Alarm module. */     \r
-       u4Byte  Pm;                     /* Performance monitor module. */       \r
-}DBGP_FLAG_T;\r
-\r
-/* Define debug print header for every service module.*/\r
-typedef struct tag_DBGP_Service_Module_Header_Name_Structure\r
-{\r
-       const char      *pMANS;\r
-       const char      *pRTOS;\r
-       const char      *pALM;\r
-       const char      *pPEM;\r
-       const char      *pCMPK;\r
-       const char      *pRAPD;\r
-       const char      *pTXPB;\r
-       const char      *pQUMG;\r
-}DBGP_HEAD_T;\r
-\r
-\r
-/* Define different debug flag for dedicated service modules in debug flag array. */\r
-// Each module has independt 32 bit debug flag you cnn define the flag as yout require.\r
-typedef enum tag_DBGP_Flag_Type_Definition\r
-{\r
-       FQoS                            = 0,    \r
-       FTX                                     = 1,\r
-       FRX                                     = 2,    \r
-       FSEC                            = 3,\r
-       FMGNT                           = 4,\r
-       FMLME                           = 5,\r
-       FRESOURCE                       = 6,\r
-       FBEACON                         = 7,\r
-       FISR                            = 8,\r
-       FPHY                            = 9,\r
-       FMP                                     = 10,\r
-       FEEPROM                 = 11,\r
-       FPWR                            = 12,\r
-       FDM                                     = 13,\r
-       FDBG_CTRL                       = 14,\r
-       FC2H                            = 15,\r
-       FBT                                     = 16,\r
-       FINIT                           = 17,\r
-       FIOCTL                          = 18,\r
-       FSHORT_CUT                      = 19,\r
-       DBGP_TYPE_MAX\r
-}DBGP_FLAG_E;\r
-\r
-\r
-// Define Qos Relative debug flag bit          --> FQoS\r
-#define                QoS_INIT                        BIT0\r
-#define                QoS_VISTA                       BIT1\r
-\r
-// Define TX relative debug bit                                --> FTX\r
-#define                TX_DESC                 BIT0\r
-#define                TX_DESC_TID             BIT1\r
-#define                TX_PATH                 BIT2\r
-\r
-// Define RX relative debug  bit                               --> FRX\r
-#define                RX_DATA                         BIT0    \r
-#define                RX_PHY_STS                              BIT1\r
-#define                RX_PHY_SS                               BIT2\r
-#define                RX_PHY_SQ                               BIT3\r
-#define                RX_PHY_ASTS                     BIT4\r
-#define                RX_ERR_LEN                      BIT5\r
-#define                RX_DEFRAG                       BIT6\r
-#define                RX_ERR_RATE                     BIT7\r
-#define                RX_PATH                         BIT8\r
-#define                RX_BEACON                               BIT9\r
-\r
-// Define Security relative debug  bit                 --> FSEC\r
-\r
-// Define MGNT relative debug bit                      --> FMGNT\r
-\r
-// Define MLME relative debug bit                              --> FMLME\r
-#define                MEDIA_STS                       BIT0\r
-#define                LINK_STS                        BIT1\r
-\r
-// Define OS resource check module bit         --> FRESOURCE\r
-#define                OS_CHK                          BIT0\r
-\r
-// Define beacon content check module bit              --> FBEACON\r
-#define                BCN_SHOW                        BIT0\r
-#define                BCN_PEER                        BIT1\r
-\r
-// Define ISR/IMR check module bit             --> FISR\r
-#define                ISR_CHK                         BIT0\r
-\r
-// Define PHY-BB/RF/MAC check module bit               --> FPHY\r
-#define                PHY_BBR                         BIT0\r
-#define                PHY_BBW                         BIT1\r
-#define                PHY_RFR                         BIT2\r
-#define                PHY_RFW                         BIT3\r
-#define                PHY_MACR                                BIT4\r
-#define                PHY_MACW                                BIT5\r
-#define                PHY_ALLR                                BIT6\r
-#define                PHY_ALLW                                BIT7\r
-#define                PHY_TXPWR                               BIT8\r
-#define                PHY_PWRDIFF                     BIT9\r
-#define                PHY_SICR                                BIT10\r
-#define                PHY_SICW                                BIT11\r
-\r
-// Define MPT driver check module bit          --> FMP\r
-#define                MP_RX                                   BIT0\r
-#define                MP_SWICH_CH                     BIT1\r
-\r
-// Define EEPROM and EFUSE  check module bit           --> FEEPROM\r
-#define                EEPROM_W                                        BIT0\r
-#define                EFUSE_PG                                        BIT1\r
-#define                EFUSE_READ_ALL                  BIT2\r
-#define                EFUSE_ANALYSIS                          BIT3\r
-#define                EFUSE_PG_DETAIL                 BIT4\r
-\r
-// Define power save  check module bit         --> FPWR\r
-#define                LPS                                     BIT0\r
-#define                IPS                                     BIT1\r
-#define                PWRSW                           BIT2\r
-#define                PWRHW                           BIT3\r
-#define                PWRHAL                          BIT4\r
-\r
-// Define Dynamic Mechanism check module bit           --> FDM\r
-#define                WA_IOT                          BIT0\r
-#define                DM_PWDB                 BIT1\r
-#define                DM_Monitor                      BIT2\r
-#define                DM_DIG                          BIT3\r
-#define                DM_EDCA_Turbo           BIT4\r
-#define                DM_BT30                 BIT5\r
-\r
-// Define Dbg Control module bit               --> FDBG_CTRL\r
-#define                DBG_CTRL_TRACE                  BIT0\r
-#define                DBG_CTRL_INBAND_NOISE   BIT1\r
-\r
-// Define FW C2H Cmd check module bit          --> FC2H\r
-#define                C2H_Summary                             BIT0\r
-#define                C2H_PacketData                          BIT1\r
-#define                C2H_ContentData                 BIT2\r
-// Define BT Cmd check module bit              --> FBT\r
-#define                BT_TRACE                                        BIT0\r
-#define                BT_RFPoll                                       BIT1\r
-\r
-// Define init check for module bit            --> FINIT\r
-#define                INIT_EEPROM                             BIT0\r
-#define                INIT_TxPower                            BIT1\r
-#define                INIT_IQK                                        BIT2\r
-#define                INIT_RF                                         BIT3\r
-\r
-// Define IOCTL Cmd check module bit           --> FIOCTL\r
-// section 1 : IRP related\r
-#define                IOCTL_IRP                                               BIT0\r
-#define                IOCTL_IRP_DETAIL                                BIT1\r
-#define                IOCTL_IRP_STATISTICS                    BIT2\r
-#define                IOCTL_IRP_HANDLE                                BIT3\r
-// section 2 : HCI command/event\r
-#define                IOCTL_BT_HCICMD                         BIT8\r
-#define                IOCTL_BT_HCICMD_DETAIL          BIT9\r
-#define                IOCTL_BT_HCICMD_EXT                     BIT10\r
-#define                IOCTL_BT_EVENT                                  BIT11\r
-#define                IOCTL_BT_EVENT_DETAIL                   BIT12\r
-#define                IOCTL_BT_EVENT_PERIODICAL               BIT13\r
-// section 3 : BT tx/rx data and throughput\r
-#define                IOCTL_BT_TX_ACLDATA                     BIT16\r
-#define                IOCTL_BT_TX_ACLDATA_DETAIL      BIT17\r
-#define                IOCTL_BT_RX_ACLDATA                     BIT18\r
-#define                IOCTL_BT_RX_ACLDATA_DETAIL      BIT19\r
-#define                IOCTL_BT_TP                                     BIT20\r
-// section 4 : BT connection state machine.\r
-#define                IOCTL_STATE                                     BIT21   \r
-#define                IOCTL_BT_LOGO                                   BIT22\r
-// section 5 : BT function trace\r
-#define                IOCTL_CALLBACK_FUN                      BIT24\r
-#define                IOCTL_PARSE_BT_PKT                      BIT25\r
-#define                IOCTL_BT_TX_PKT                         BIT26\r
-#define                IOCTL_BT_FLAG_MON                               BIT27\r
-\r
-//\r
-// Define init check for module bit            --> FSHORT_CUT\r
-// 2011/07/20 MH Add for short but definition.\r
-//\r
-#define                SHCUT_TX                                BIT0\r
-#define                SHCUT_RX                                BIT1\r
-\r
-\r
-/* 2007/07/13 MH  *//*------For DeBuG Print modeue------*/\r
-/*------------------------------Define structure----------------------------*/\r
-\r
-\r
-/*------------------------Export Marco Definition---------------------------*/\r
-#if (DM_ODM_SUPPORT_TYPE != ODM_WIN)\r
-#define RT_PRINTK(fmt, args...)    printk( "%s(): " fmt, __FUNCTION__, ## args);\r
-\r
-#if DBG\r
-#define ODM_RT_TRACE(pDM_Odm,comp, level, fmt)                                                                                 \\r
-               if(((comp) & GlobalDebugComponents) && (level <= GlobalDebugLevel))     \\r
-               {                                                                                                                                       \\r
-                       RT_PRINTK fmt;                                                                                                  \\r
-               }\r
-\r
-#define RT_TRACE_F(comp, level, fmt)                                                                                   \\r
-               if(((comp) & GlobalDebugComponents) && (level <= GlobalDebugLevel))     \\r
-               {                                                                                                                                       \\r
-                       RT_PRINTK fmt;                                                                                                  \\r
-               }\r
-\r
-#define RT_ASSERT(expr,fmt)                                                                                                    \\r
-               if(!(expr)) {                                                                                                                   \\r
-                       printk( "Assertion failed! %s at ......\n", #expr);                                                     \\r
-                       printk( "      ......%s,%s,line=%d\n",__FILE__,__FUNCTION__,__LINE__);  \\r
-               }\r
-#define dbg_enter() { printk("==> %s\n", __FUNCTION__); }\r
-#define dbg_exit() { printk("<== %s\n", __FUNCTION__); }\r
-#define dbg_trace(str) { printk("%s:%s\n", __FUNCTION__, str); }\r
-#else\r
-#define ODM_RT_TRACE(pDM_Odm,comp, level, fmt)\r
-#define RT_TRACE_F(comp, level, fmt)\r
-#define RT_ASSERT(expr, fmt)\r
-#define dbg_enter()\r
-#define dbg_exit()\r
-#define dbg_trace(str)\r
-#endif\r
-\r
-#if DBG\r
-#define DbgPrint printk\r
-\r
-#define PRINT_DATA(_TitleString, _HexData, _HexDataLen)                                                                \\r
-                       {                                                                                                                                               \\r
-                               char                    *szTitle = _TitleString;                                                                        \\r
-                               pu1Byte         pbtHexData = _HexData;                                                                  \\r
-                               u4Byte          u4bHexDataLen = _HexDataLen;                                                    \\r
-                               u4Byte          __i;                                                                                                            \\r
-                               DbgPrint("%s", szTitle);                                                                                                        \\r
-                               for (__i=0;__i<u4bHexDataLen;__i++)                                                                     \\r
-                               {                                                                                                                                       \\r
-                                       if ((__i & 15) == 0)                                                                                            \\r
-                                       {                                                                                                                               \\r
-                                               DbgPrint("\n");                                                                                         \\r
-                                       }                                                                                                                               \\r
-                                       DbgPrint("%02X%s", pbtHexData[__i], ( ((__i&3)==3) ? "  " : " ") );             \\r
-                               }                                                                                                                                       \\r
-                               DbgPrint("\n");                                                                                                         \\r
-                       }\r
-\r
-// RT_PRINT_XXX macros: implemented for debugging purpose.\r
-// Added by Annie, 2005-11-21.\r
-#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen)                      \\r
-                       if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel))   \\r
-                       {                                                                                                                                               \\r
-                               int __i;                                                                                                                                \\r
-                               pu1Byte ptr = (pu1Byte)_HexData;                                                                                \\r
-                               DbgPrint("Rtl819x: ");                                                                                                  \\r
-                               DbgPrint(_TitleString);                                                                                         \\r
-                               for( __i=0; __i<(int)_HexDataLen; __i++ )                                                               \\r
-                               {                                                                                                                                       \\r
-                                       DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?"  ":" ");                  \\r
-                                       if (((__i + 1) % 16) == 0)      DbgPrint("\n");                                                 \\r
-                               }                                                                                                                                       \\r
-                               DbgPrint("\n");                                                                                                         \\r
-                       }\r
-\r
-#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr)                                                               \\r
-                       if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel))   \\r
-                       {                                                                                                                                               \\r
-                               int __i;                                                                                                                                \\r
-                               pu1Byte ptr = (pu1Byte)_Ptr;                                                                                    \\r
-                               DbgPrint("Rtl819x: ");                                                                                                  \\r
-                               DbgPrint(_TitleString);                                                                                         \\r
-                               DbgPrint(" ");                                                                                                                  \\r
-                               for( __i=0; __i<6; __i++ )                                                                                              \\r
-                                       DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-");                                                  \\r
-                               DbgPrint("\n");                                                                                                         \\r
-                       }\r
-\r
-#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum)                                     \\r
-                       if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel))   \\r
-                       {                                                                                                                                               \\r
-                               int __i, __j;                                                                                                                   \\r
-                               pu1Byte ptr = (pu1Byte)_Ptr;                                                                                    \\r
-                               DbgPrint("Rtl819x: ");                                                                                                  \\r
-                               DbgPrint(_TitleString);                                                                                         \\r
-                               DbgPrint("\n");                                                                                                         \\r
-                               for( __i=0; __i<(int)_AddNum; __i++ )                                                                   \\r
-                               {                                                                                                                                       \\r
-                                       for( __j=0; __j<6; __j++ )                                                                                      \\r
-                                               DbgPrint("%02X%s", ptr[__i*6+__j], (__j==5)?"":"-");                            \\r
-                                       DbgPrint("\n");                                                                                                 \\r
-                               }                                                                                                                                       \\r
-                       }\r
-\r
-// Added by Annie, 2005-11-22.\r
-#define        MAX_STR_LEN     64\r
-#define        PRINTABLE(_ch)  (_ch>=' ' &&_ch<='~' )  // I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22.\r
-\r
-#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len)                                                  \\r
-                       if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel))   \\r
-                       {                                                                                                                                               \\r
-                               int             __i;                                                                                                                    \\r
-                               u1Byte  buffer[MAX_STR_LEN];                                                                                    \\r
-                               int     length = (_Len<MAX_STR_LEN)? _Len : (MAX_STR_LEN-1) ;                           \\r
-                               PlatformZeroMemory( buffer, MAX_STR_LEN );                                                      \\r
-                               PlatformMoveMemory( buffer, (pu1Byte)_Ptr, length );                                            \\r
-                               for( __i=0; __i<MAX_STR_LEN; __i++ )                                                                    \\r
-                               {                                                                                                                                       \\r
-                                       if( !PRINTABLE(buffer[__i]) )   buffer[__i] = '?';                                              \\r
-                               }                                                                                                                                       \\r
-                               buffer[length] = '\0';                                                                                                  \\r
-                               DbgPrint("Rtl819x: ");                                                                                                  \\r
-                               DbgPrint(_TitleString);                                                                                         \\r
-                               DbgPrint(": %d, <%s>\n", _Len, buffer);                                                                 \\r
-                       }\r
-                       \r
-#else  // of #if DBG\r
-#define DbgPrint(...)  \r
-#define PRINT_DATA(_TitleString, _HexData, _HexDataLen)\r
-#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen)\r
-#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr)\r
-#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum)\r
-#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len)\r
-#endif // of #if DBG\r
-\r
-\r
-\r
-#endif // #if (DM_ODM_SUPPORT_TYPE != ODM_WIN)\r
-\r
-#define                DEBUG_PRINT                             1\r
-\r
-// Please add new OS's print API by yourself\r
-\r
-//#if (RT_PLATFORM==PLATFORM_WINDOWS) \r
-#if (DEBUG_PRINT == 1) && DBG\r
-#define        RT_DISP(dbgtype, dbgflag, printstr)\\r
-{\\r
-       if (DBGP_Type[dbgtype] & dbgflag)\\r
-       {\\r
-               DbgPrint printstr;\\r
-       }\\r
-}\r
-\r
-#define        RT_DISP_ADDR(dbgtype, dbgflag, printstr, _Ptr)\\r
-{\\r
-       if (DBGP_Type[dbgtype] & dbgflag)\\r
-       {\\r
-                               int __i;                                                \\r
-                               pu1Byte ptr = (pu1Byte)_Ptr;    \\r
-                               DbgPrint printstr;                              \\r
-                               DbgPrint(" ");                                  \\r
-                               for( __i=0; __i<6; __i++ )              \\r
-                                       DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-");          \\r
-                               DbgPrint("\n");                                                 \\r
-       }\\r
-}\r
-\r
-#define RT_DISP_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen)\\r
-{\\r
-       if (DBGP_Type[dbgtype] & dbgflag)\\r
-       {\\r
-               int __i;                                                                        \\r
-               pu1Byte ptr = (pu1Byte)_HexData;                        \\r
-               DbgPrint(_TitleString);                                 \\r
-               for( __i=0; __i<(int)_HexDataLen; __i++ )       \\r
-               {                                                                               \\r
-                       DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?"  ":" ");\\r
-                       if (((__i + 1) % 16) == 0)      DbgPrint("\n");\\r
-               }                                                                               \\r
-               DbgPrint("\n");                                                 \\r
-       }\\r
-}\r
-\r
-#define FunctionIn(_comp)              ODM_RT_TRACE(pDM_Odm,(_comp), DBG_LOUD, ("==========> %s\n",  __FUNCTION__))\r
-#define FunctionOut(_comp)             ODM_RT_TRACE(pDM_Odm,(_comp), DBG_LOUD, ("<========== %s\n",  __FUNCTION__))\r
-\r
-\r
-#else\r
-\r
-#define        RT_DISP(dbgtype, dbgflag, printstr)\r
-#define        RT_DISP_ADDR(dbgtype, dbgflag, printstr, _Ptr)\r
-#define   RT_DISP_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen)\r
-\r
-#define FunctionIn(_comp)\r
-#define FunctionOut(_comp)\r
-#endif\r
-/*------------------------Export Marco Definition---------------------------*/\r
-\r
-\r
-/*------------------------Export global variable----------------------------*/\r
-extern u4Byte                  DBGP_Type[DBGP_TYPE_MAX];\r
-extern DBGP_HEAD_T     DBGP_Head;\r
-\r
-/*------------------------Export global variable----------------------------*/\r
-\r
-\r
-/*--------------------------Exported Function prototype---------------------*/\r
-extern void    DBGP_Flag_Init(void);\r
-extern void    DBG_PrintAllFlag(void);\r
-extern void    DBG_PrintAllComp(void);\r
-extern void    DBG_PrintFlagEvent(u1Byte       DbgFlag);\r
-extern void    DBG_DumpMem(const u1Byte DbgComp, \r
-                                                       const u1Byte DbgLevel, \r
-                                                       pu1Byte pMem, \r
-                                                       u2Byte Len);\r
-\r
-/*--------------------------Exported Function prototype---------------------*/\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-extern u4Byte GlobalDebugLevel;\r
-extern u8Byte GlobalDebugComponents;\r
-\r
-\r
-#endif\r
-\r
-\r
-#endif // __ODM_DBG_H__\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_interface.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_interface.c
deleted file mode 100755 (executable)
index 36908dc..0000000
+++ /dev/null
@@ -1,764 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-\r
-\r
-#include "odm_precomp.h"\r
-\r
-//\r
-// ODM IO Relative API.\r
-//\r
-\r
-u1Byte\r
-ODM_Read1Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       prtl8192cd_priv priv    = pDM_Odm->priv;\r
-       return  RTL_R8(RegAddr);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       return rtw_read8(Adapter,RegAddr);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       return  PlatformEFIORead1Byte(Adapter, RegAddr);\r
-#endif \r
-\r
-}\r
-\r
-\r
-u2Byte\r
-ODM_Read2Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       prtl8192cd_priv priv    = pDM_Odm->priv;\r
-       return  RTL_R16(RegAddr);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       return rtw_read16(Adapter,RegAddr);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       return  PlatformEFIORead2Byte(Adapter, RegAddr);\r
-#endif \r
-\r
-}\r
-\r
-\r
-u4Byte\r
-ODM_Read4Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       prtl8192cd_priv priv    = pDM_Odm->priv;\r
-       return  RTL_R32(RegAddr);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       return rtw_read32(Adapter,RegAddr);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       return  PlatformEFIORead4Byte(Adapter, RegAddr);\r
-#endif \r
-\r
-}\r
-\r
-\r
-VOID\r
-ODM_Write1Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr,\r
-       IN      u1Byte                  Data\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       prtl8192cd_priv priv    = pDM_Odm->priv;\r
-       RTL_W8(RegAddr, Data);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       rtw_write8(Adapter,RegAddr, Data);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       PlatformEFIOWrite1Byte(Adapter, RegAddr, Data);\r
-#endif\r
-       \r
-}\r
-\r
-\r
-VOID\r
-ODM_Write2Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr,\r
-       IN      u2Byte                  Data\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       prtl8192cd_priv priv    = pDM_Odm->priv;\r
-       RTL_W16(RegAddr, Data);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       rtw_write16(Adapter,RegAddr, Data);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       PlatformEFIOWrite2Byte(Adapter, RegAddr, Data);\r
-#endif \r
-\r
-}\r
-\r
-\r
-VOID\r
-ODM_Write4Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr,\r
-       IN      u4Byte                  Data\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       prtl8192cd_priv priv    = pDM_Odm->priv;\r
-       RTL_W32(RegAddr, Data);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       rtw_write32(Adapter,RegAddr, Data);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       PlatformEFIOWrite4Byte(Adapter, RegAddr, Data);\r
-#endif \r
-\r
-}\r
-\r
-\r
-VOID\r
-ODM_SetMACReg( \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u4Byte          RegAddr,\r
-       IN      u4Byte          BitMask,\r
-       IN      u4Byte          Data\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);\r
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);\r
-#endif \r
-}\r
-\r
-\r
-u4Byte \r
-ODM_GetMACReg( \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u4Byte          RegAddr,\r
-       IN      u4Byte          BitMask\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       return PHY_QueryMacReg(pDM_Odm->priv, RegAddr, BitMask);\r
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       return PHY_QueryMacReg(Adapter, RegAddr, BitMask);\r
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE))\r
-       return PHY_QueryBBReg(pDM_Odm->Adapter, RegAddr, BitMask);\r
-#endif \r
-}\r
-\r
-\r
-VOID\r
-ODM_SetBBReg(  \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u4Byte          RegAddr,\r
-       IN      u4Byte          BitMask,\r
-       IN      u4Byte          Data\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);\r
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);\r
-#endif \r
-}\r
-\r
-\r
-u4Byte \r
-ODM_GetBBReg(  \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u4Byte          RegAddr,\r
-       IN      u4Byte          BitMask\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);\r
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       return PHY_QueryBBReg(Adapter, RegAddr, BitMask);\r
-#endif \r
-}\r
-\r
-\r
-VOID\r
-ODM_SetRFReg(  \r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
-       IN      u4Byte                          RegAddr,\r
-       IN      u4Byte                          BitMask,\r
-       IN      u4Byte                          Data\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       PHY_SetRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, Data);\r
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data);\r
-#endif \r
-}\r
-\r
-\r
-u4Byte \r
-ODM_GetRFReg(  \r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
-       IN      u4Byte                          RegAddr,\r
-       IN      u4Byte                          BitMask\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       return PHY_QueryRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, 1);\r
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       return PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask);\r
-#endif \r
-}\r
-\r
-\r
-\r
-\r
-//\r
-// ODM Memory relative API.\r
-//\r
-VOID\r
-ODM_AllocateMemory(    \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       OUT     PVOID           *pPtr,\r
-       IN      u4Byte          length\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       *pPtr = kmalloc(length, GFP_ATOMIC);\r
-#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )\r
-       *pPtr = rtw_zvmalloc(length);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       PlatformAllocateMemory(Adapter, pPtr, length);\r
-#endif \r
-}\r
-\r
-// length could be ignored, used to detect memory leakage.\r
-VOID\r
-ODM_FreeMemory(        \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       OUT     PVOID           pPtr,\r
-       IN      u4Byte          length\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       kfree(pPtr);\r
-#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )  \r
-       rtw_vmfree(pPtr, length);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       //PADAPTER    Adapter = pDM_Odm->Adapter;\r
-       PlatformFreeMemory(pPtr, length);\r
-#endif \r
-}\r
-\r
-VOID\r
-ODM_MoveMemory(        \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       OUT PVOID               pDest,\r
-       IN  PVOID               pSrc,\r
-       IN  u4Byte              Length\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )  \r
-       _rtw_memcpy(pDest, pSrc, Length);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PlatformMoveMemory(pDest, pSrc, Length);\r
-#endif \r
-}\r
-\r
-void ODM_Memory_Set\r
-       (IN     PDM_ODM_T       pDM_Odm,\r
-               IN  PVOID       pbuf,\r
-               IN  s1Byte      value,\r
-               IN  u4Byte      length)\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )  \r
-       _rtw_memset(pbuf,value, length);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PlatformFillMemory(pbuf,length,value);\r
-#endif\r
-}\r
-s4Byte ODM_CompareMemory(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      PVOID           pBuf1,\r
-       IN      PVOID           pBuf2,\r
-       IN      u4Byte          length\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       return memcmp(pBuf1,pBuf2,length);\r
-#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )  \r
-       return _rtw_memcmp(pBuf1,pBuf2,length);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)   \r
-       return PlatformCompareMemory(pBuf1,pBuf2,length);\r
-#endif \r
-}\r
-\r
-\r
-\r
-//\r
-// ODM MISC relative API.\r
-//\r
-VOID\r
-ODM_AcquireSpinLock(   \r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      RT_SPINLOCK_TYPE        type\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       PlatformAcquireSpinLock(Adapter, type);\r
-#endif \r
-}\r
-VOID\r
-ODM_ReleaseSpinLock(   \r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      RT_SPINLOCK_TYPE        type\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-\r
-#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       PlatformReleaseSpinLock(Adapter, type);\r
-#endif \r
-}\r
-\r
-//\r
-// Work item relative API. FOr MP driver only~!\r
-//\r
-VOID\r
-ODM_InitializeWorkItem(        \r
-       IN      PDM_ODM_T                                       pDM_Odm,\r
-       IN      PRT_WORK_ITEM                           pRtWorkItem,\r
-       IN      RT_WORKITEM_CALL_BACK           RtWorkItemCallback,\r
-       IN      PVOID                                           pContext,\r
-       IN      const char*                                     szID\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       PlatformInitializeWorkItem(Adapter, pRtWorkItem, RtWorkItemCallback, pContext, szID);\r
-#endif \r
-}\r
-\r
-\r
-VOID\r
-ODM_StartWorkItem(     \r
-       IN      PRT_WORK_ITEM   pRtWorkItem\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PlatformStartWorkItem(pRtWorkItem);\r
-#endif \r
-}\r
-\r
-\r
-VOID\r
-ODM_StopWorkItem(      \r
-       IN      PRT_WORK_ITEM   pRtWorkItem\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PlatformStopWorkItem(pRtWorkItem);\r
-#endif \r
-}\r
-\r
-\r
-VOID\r
-ODM_FreeWorkItem(      \r
-       IN      PRT_WORK_ITEM   pRtWorkItem\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PlatformFreeWorkItem(pRtWorkItem);\r
-#endif \r
-}\r
-\r
-\r
-VOID\r
-ODM_ScheduleWorkItem(  \r
-       IN      PRT_WORK_ITEM   pRtWorkItem\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PlatformScheduleWorkItem(pRtWorkItem);\r
-#endif \r
-}\r
-\r
-\r
-VOID\r
-ODM_IsWorkItemScheduled(       \r
-       IN      PRT_WORK_ITEM   pRtWorkItem\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PlatformIsWorkItemScheduled(pRtWorkItem);\r
-#endif \r
-}\r
-\r
-\r
-\r
-//\r
-// ODM Timer relative API.\r
-//\r
-VOID\r
-ODM_StallExecution(    \r
-       IN      u4Byte  usDelay\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       rtw_udelay_os(usDelay);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PlatformStallExecution(usDelay);\r
-#endif \r
-}\r
-\r
-VOID\r
-ODM_delay_ms(IN u4Byte ms)\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       delay_ms(ms);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       rtw_mdelay_os(ms);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       delay_ms(ms);\r
-#endif                 \r
-}\r
-\r
-VOID\r
-ODM_delay_us(IN u4Byte us)\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       delay_us(us);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       rtw_udelay_os(us);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PlatformStallExecution(us);\r
-#endif                 \r
-}\r
-\r
-VOID\r
-ODM_sleep_ms(IN u4Byte ms)\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       rtw_msleep_os(ms);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)   \r
-#endif         \r
-}\r
-\r
-VOID\r
-ODM_sleep_us(IN u4Byte us)\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       rtw_usleep_os(us);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)   \r
-#endif         \r
-}\r
-\r
-VOID\r
-ODM_SetTimer(  \r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      PRT_TIMER               pTimer, \r
-       IN      u4Byte                  msDelay\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       mod_timer(pTimer, jiffies + (msDelay+9)/10);    \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       _set_timer(pTimer,msDelay ); //ms\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
-       PlatformSetTimer(Adapter, pTimer, msDelay);\r
-#endif \r
-\r
-}\r
-\r
-VOID\r
-ODM_InitializeTimer(\r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      PRT_TIMER                       pTimer, \r
-       IN      RT_TIMER_CALL_BACK      CallBackFunc, \r
-       IN      PVOID                           pContext,\r
-       IN      const char*                     szID\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       pTimer->function = CallBackFunc;\r
-       pTimer->data = (unsigned long)pDM_Odm;\r
-       init_timer(pTimer);     \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       PADAPTER Adapter = pDM_Odm->Adapter;\r
-       _init_timer(pTimer,Adapter->pnetdev,CallBackFunc,pDM_Odm);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER Adapter = pDM_Odm->Adapter;\r
-       PlatformInitializeTimer(Adapter, pTimer, CallBackFunc,pContext,szID);\r
-#endif \r
-}\r
-\r
-\r
-VOID\r
-ODM_CancelTimer(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      PRT_TIMER               pTimer\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       del_timer_sync(pTimer);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       _cancel_timer_ex(pTimer);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       PADAPTER Adapter = pDM_Odm->Adapter;\r
-       PlatformCancelTimer(Adapter, pTimer);\r
-#endif\r
-}\r
-\r
-\r
-VOID\r
-ODM_ReleaseTimer(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      PRT_TIMER               pTimer\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-\r
-       PADAPTER Adapter = pDM_Odm->Adapter;\r
-\r
-    // <20120301, Kordan> If the initilization fails, InitializeAdapterXxx will return regardless of InitHalDm. \r
-    // Hence, uninitialized timers cause BSOD when the driver releases resources since the init fail.\r
-    if (pTimer == 0) \r
-    {\r
-        ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_SERIOUS, ("=====>ODM_ReleaseTimer(), The timer is NULL! Please check it!\n"));\r
-        return;\r
-    }\r
-        \r
-       PlatformReleaseTimer(Adapter, pTimer);\r
-#endif\r
-}\r
-\r
-\r
-//\r
-// ODM FW relative API.\r
-//\r
-#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-VOID\r
-ODM_FillH2CCmd(\r
-       IN      PADAPTER                Adapter,\r
-       IN      u1Byte  ElementID,\r
-       IN      u4Byte  CmdLen,\r
-       IN      pu1Byte pCmdBuffer\r
-)\r
-{\r
-       if(IS_HARDWARE_TYPE_JAGUAR(Adapter))\r
-       {\r
-               switch(ElementID)\r
-               {\r
-               case ODM_H2C_RSSI_REPORT:\r
-                       FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-                       break;\r
-               default:\r
-                       break;\r
-               }\r
-\r
-       }\r
-       else if(IS_HARDWARE_TYPE_8192E(Adapter))\r
-       {\r
-               switch(ElementID)\r
-               {\r
-               case ODM_H2C_RSSI_REPORT:\r
-                       FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-                       break;\r
-               default:\r
-                       break;\r
-               }       \r
-       }\r
-       else if(IS_HARDWARE_TYPE_8723B(Adapter))\r
-       {\r
-               //\r
-               // <Roger_TODO> We should take RTL8723B into consideration, 2012.10.08\r
-               //\r
-               switch(ElementID)\r
-               {\r
-                       case ODM_H2C_RSSI_REPORT:\r
-                          FillH2CCmd8723B(Adapter, H2C_8723B_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-                          break;\r
-                          \r
-                       default:\r
-                          break;                          \r
-               }\r
-\r
-       }\r
-       else if(IS_HARDWARE_TYPE_8188E(Adapter))\r
-       {\r
-               switch(ElementID)\r
-               {\r
-               case ODM_H2C_PSD_RESULT:\r
-                       FillH2CCmd88E(Adapter, H2C_88E_PSD_RESULT, CmdLen, pCmdBuffer);\r
-                       break;\r
-               case ODM_H2C_RSSI_REPORT:\r
-                       if(IS_VENDOR_8188E_I_CUT_SERIES(Adapter))\r
-                               FillH2CCmd88E(Adapter, H2C_88E_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-                       break;\r
-               default:\r
-                       break;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               switch(ElementID)\r
-               {\r
-               case ODM_H2C_RSSI_REPORT:\r
-                       FillH2CCmd92C(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-                       break;\r
-               case ODM_H2C_PSD_RESULT:\r
-                       FillH2CCmd92C(Adapter, H2C_92C_PSD_RESULT, CmdLen, pCmdBuffer);\r
-                       break;\r
-               default:\r
-                       break;\r
-               }\r
-       }\r
-}\r
-#else\r
-u4Byte\r
-ODM_FillH2CCmd(        \r
-       IN      pu1Byte         pH2CBuffer,\r
-       IN      u4Byte          H2CBufferLen,\r
-       IN      u4Byte          CmdNum,\r
-       IN      pu4Byte         pElementID,\r
-       IN      pu4Byte         pCmdLen,\r
-       IN      pu1Byte*                pCmbBuffer,\r
-       IN      pu1Byte         CmdStartSeq\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)   \r
-       //FillH2CCmd(pH2CBuffer, H2CBufferLen, CmdNum, pElementID, pCmdLen, pCmbBuffer, CmdStartSeq);\r
-       return  FALSE;\r
-#endif\r
-\r
-       return  TRUE;\r
-}\r
-#endif\r
-\r
-\r
-u4Byte\r
-ODM_GetCurrentTime(    \r
-       IN      PDM_ODM_T               pDM_Odm\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       return  0;\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       return rtw_get_current_time();\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)   \r
-       return  0;\r
-#endif\r
-}\r
-\r
-s4Byte\r
-ODM_GetProgressingTime(        \r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  Start_Time\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       return  0;\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       return rtw_get_passing_time_ms(Start_Time);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)   \r
-       return  0;\r
-#endif\r
-}\r
-\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_interface.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_interface.h
deleted file mode 100755 (executable)
index 689318a..0000000
+++ /dev/null
@@ -1,400 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-\r
-#ifndef        __ODM_INTERFACE_H__\r
-#define __ODM_INTERFACE_H__\r
-\r
-\r
-\r
-//\r
-// =========== Constant/Structure/Enum/... Define\r
-//\r
-\r
-\r
-\r
-//\r
-// =========== Macro Define\r
-//\r
-\r
-#define _reg_all(_name)                        ODM_##_name\r
-#define _reg_ic(_name, _ic)            ODM_##_name##_ic\r
-#define _bit_all(_name)                        BIT_##_name\r
-#define _bit_ic(_name, _ic)            BIT_##_name##_ic\r
-\r
-// _cat: implemented by Token-Pasting Operator.\r
-#if 0\r
-#define _cat(_name, _ic_type, _func)                                                           \\r
-       (                                                                                                                       \\r
-               _func##_all(_name)                                                                              \\r
-       )\r
-#endif\r
-\r
-/*===================================\r
-\r
-#define ODM_REG_DIG_11N                0xC50\r
-#define ODM_REG_DIG_11AC       0xDDD\r
-\r
-ODM_REG(DIG,_pDM_Odm)\r
-=====================================*/\r
-\r
-#define _reg_11N(_name)                        ODM_REG_##_name##_11N \r
-#define _reg_11AC(_name)               ODM_REG_##_name##_11AC\r
-#define _bit_11N(_name)                        ODM_BIT_##_name##_11N \r
-#define _bit_11AC(_name)               ODM_BIT_##_name##_11AC\r
-\r
-#if 1 //TODO: enable it if we need to support run-time to differentiate between 92C_SERIES and JAGUAR_SERIES.\r
-#define _cat(_name, _ic_type, _func)                                                                   \\r
-       (                                                                                                                       \\r
-               ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name):           \\r
-               _func##_11AC(_name)                                                                     \\r
-       )\r
-#endif\r
-#if 0 // only sample code\r
-#define _cat(_name, _ic_type, _func)                                                                   \\r
-       (                                                                                                                       \\r
-               ((_ic_type) & ODM_RTL8192C)? _func##_ic(_name, _8192C):         \\r
-               ((_ic_type) & ODM_RTL8192D)? _func##_ic(_name, _8192D):         \\r
-               ((_ic_type) & ODM_RTL8192S)? _func##_ic(_name, _8192S):         \\r
-               ((_ic_type) & ODM_RTL8723A)? _func##_ic(_name, _8723A):         \\r
-               ((_ic_type) & ODM_RTL8188E)? _func##_ic(_name, _8188E):         \\r
-               _func##_ic(_name, _8195)                                                                        \\r
-       )\r
-#endif\r
-\r
-// _name: name of register or bit.\r
-// Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)" \r
-//        gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType.\r
-#define ODM_REG(_name, _pDM_Odm)       _cat(_name, _pDM_Odm->SupportICType, _reg)\r
-#define ODM_BIT(_name, _pDM_Odm)       _cat(_name, _pDM_Odm->SupportICType, _bit)\r
-\r
-typedef enum _ODM_H2C_CMD \r
-{\r
-       ODM_H2C_RSSI_REPORT = 0,\r
-       ODM_H2C_PSD_RESULT=1,   \r
-       ODM_H2C_PathDiv = 2,               \r
-       ODM_MAX_H2CCMD\r
-}ODM_H2C_CMD;\r
-\r
-\r
-//\r
-// 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.\r
-// Suggest HW team to use thread instead of workitem. Windows also support the feature.\r
-//\r
-#if (DM_ODM_SUPPORT_TYPE != ODM_WIN)\r
-typedef  void *PRT_WORK_ITEM ;\r
-typedef  void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;\r
-typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext);\r
-\r
-#if 0\r
-typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE;\r
-\r
-typedef struct _RT_WORK_ITEM\r
-{\r
-       \r
-       RT_WORKITEM_HANDLE                      Handle;                 // Platform-dependent handle for this workitem, e.g. Ndis Workitem object.\r
-       PVOID                                           Adapter;                // Pointer to Adapter object.\r
-       PVOID                                           pContext;               // Parameter to passed to CallBackFunc(). \r
-       RT_WORKITEM_CALL_BACK           CallbackFunc;   // Callback function of the workitem.\r
-       u1Byte                                          RefCount;               // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled. \r
-       PVOID                                           pPlatformExt;   // Pointer to platform-dependent extension.     \r
-       BOOLEAN                                         bFree;\r
-       char                                            szID[36];               // An identity string of this workitem.\r
-}RT_WORK_ITEM, *PRT_WORK_ITEM;\r
-\r
-#endif\r
-\r
-\r
-#endif\r
-\r
-//\r
-// =========== Extern Variable ??? It should be forbidden.\r
-//\r
-\r
-\r
-//\r
-// =========== EXtern Function Prototype\r
-//\r
-\r
-\r
-u1Byte\r
-ODM_Read1Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr\r
-       );\r
-\r
-u2Byte\r
-ODM_Read2Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr\r
-       );\r
-\r
-u4Byte\r
-ODM_Read4Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr\r
-       );\r
-\r
-VOID\r
-ODM_Write1Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr,\r
-       IN      u1Byte                  Data\r
-       );\r
-\r
-VOID\r
-ODM_Write2Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr,\r
-       IN      u2Byte                  Data\r
-       );\r
-\r
-VOID\r
-ODM_Write4Byte(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  RegAddr,\r
-       IN      u4Byte                  Data\r
-       );\r
-\r
-VOID\r
-ODM_SetMACReg( \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u4Byte          RegAddr,\r
-       IN      u4Byte          BitMask,\r
-       IN      u4Byte          Data\r
-       );\r
-\r
-u4Byte \r
-ODM_GetMACReg( \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u4Byte          RegAddr,\r
-       IN      u4Byte          BitMask\r
-       );\r
-\r
-VOID\r
-ODM_SetBBReg(  \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u4Byte          RegAddr,\r
-       IN      u4Byte          BitMask,\r
-       IN      u4Byte          Data\r
-       );\r
-\r
-u4Byte \r
-ODM_GetBBReg(  \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u4Byte          RegAddr,\r
-       IN      u4Byte          BitMask\r
-       );\r
-\r
-VOID\r
-ODM_SetRFReg(  \r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
-       IN      u4Byte                          RegAddr,\r
-       IN      u4Byte                          BitMask,\r
-       IN      u4Byte                          Data\r
-       );\r
-\r
-u4Byte \r
-ODM_GetRFReg(  \r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
-       IN      u4Byte                          RegAddr,\r
-       IN      u4Byte                          BitMask\r
-       );\r
-\r
-\r
-//\r
-// Memory Relative Function.\r
-//\r
-VOID\r
-ODM_AllocateMemory(    \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       OUT     PVOID           *pPtr,\r
-       IN      u4Byte          length\r
-       );\r
-VOID\r
-ODM_FreeMemory(        \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       OUT     PVOID           pPtr,\r
-       IN      u4Byte          length\r
-       );\r
-\r
-VOID\r
-ODM_MoveMemory(        \r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       OUT PVOID               pDest,\r
-       IN  PVOID               pSrc,\r
-       IN  u4Byte              Length\r
-       );\r
-\r
-s4Byte ODM_CompareMemory(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      PVOID           pBuf1,\r
-      IN       PVOID           pBuf2,\r
-      IN       u4Byte          length\r
-       );\r
-\r
-void ODM_Memory_Set\r
-       (IN     PDM_ODM_T       pDM_Odm,\r
-               IN  PVOID       pbuf,\r
-               IN  s1Byte      value,\r
-               IN  u4Byte      length);\r
-       \r
-//\r
-// ODM MISC-spin lock relative API.\r
-//\r
-VOID\r
-ODM_AcquireSpinLock(   \r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      RT_SPINLOCK_TYPE        type\r
-       );\r
-\r
-VOID\r
-ODM_ReleaseSpinLock(   \r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      RT_SPINLOCK_TYPE        type\r
-       );\r
-\r
-\r
-//\r
-// ODM MISC-workitem relative API.\r
-//\r
-VOID\r
-ODM_InitializeWorkItem(        \r
-       IN      PDM_ODM_T                                       pDM_Odm,\r
-       IN      PRT_WORK_ITEM                           pRtWorkItem,\r
-       IN      RT_WORKITEM_CALL_BACK           RtWorkItemCallback,\r
-       IN      PVOID                                           pContext,\r
-       IN      const char*                                     szID\r
-       );\r
-\r
-VOID\r
-ODM_StartWorkItem(     \r
-       IN      PRT_WORK_ITEM   pRtWorkItem\r
-       );\r
-\r
-VOID\r
-ODM_StopWorkItem(      \r
-       IN      PRT_WORK_ITEM   pRtWorkItem\r
-       );\r
-\r
-VOID\r
-ODM_FreeWorkItem(      \r
-       IN      PRT_WORK_ITEM   pRtWorkItem\r
-       );\r
-\r
-VOID\r
-ODM_ScheduleWorkItem(  \r
-       IN      PRT_WORK_ITEM   pRtWorkItem\r
-       );\r
-\r
-VOID\r
-ODM_IsWorkItemScheduled(       \r
-       IN      PRT_WORK_ITEM   pRtWorkItem\r
-       );\r
-\r
-//\r
-// ODM Timer relative API.\r
-//\r
-VOID\r
-ODM_StallExecution(    \r
-       IN      u4Byte  usDelay\r
-       );\r
-\r
-VOID\r
-ODM_delay_ms(IN u4Byte ms);\r
-\r
-\r
-\r
-VOID\r
-ODM_delay_us(IN u4Byte us);\r
-\r
-VOID\r
-ODM_sleep_ms(IN u4Byte ms);\r
-\r
-VOID\r
-ODM_sleep_us(IN u4Byte us);\r
-\r
-VOID\r
-ODM_SetTimer(  \r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      PRT_TIMER               pTimer, \r
-       IN      u4Byte                  msDelay\r
-       );\r
-\r
-VOID\r
-ODM_InitializeTimer(\r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      PRT_TIMER                       pTimer, \r
-       IN      RT_TIMER_CALL_BACK      CallBackFunc, \r
-       IN      PVOID                           pContext,\r
-       IN      const char*                     szID\r
-       );\r
-\r
-VOID\r
-ODM_CancelTimer(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      PRT_TIMER               pTimer\r
-       );\r
-\r
-VOID\r
-ODM_ReleaseTimer(\r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      PRT_TIMER               pTimer\r
-       );\r
-\r
-\r
-//\r
-// ODM FW relative API.\r
-//\r
-#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-VOID\r
-ODM_FillH2CCmd(\r
-       IN      PADAPTER                Adapter,\r
-       IN      u1Byte  ElementID,\r
-       IN      u4Byte  CmdLen,\r
-       IN      pu1Byte pCmdBuffer\r
-);\r
-#else\r
-u4Byte\r
-ODM_FillH2CCmd(        \r
-       IN      pu1Byte         pH2CBuffer,\r
-       IN      u4Byte          H2CBufferLen,\r
-       IN      u4Byte          CmdNum,\r
-       IN      pu4Byte         pElementID,\r
-       IN      pu4Byte         pCmdLen,\r
-       IN      pu1Byte*                pCmbBuffer,\r
-       IN      pu1Byte         CmdStartSeq\r
-       );\r
-#endif\r
-\r
-u4Byte\r
-ODM_GetCurrentTime(    \r
-       IN      PDM_ODM_T               pDM_Odm\r
-       );\r
-s4Byte\r
-ODM_GetProgressingTime(        \r
-       IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u4Byte                  Start_Time\r
-       );\r
-\r
-#endif // __ODM_INTERFACE_H__\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_precomp.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_precomp.h
deleted file mode 100755 (executable)
index 56264ce..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-#ifndef        __ODM_PRECOMP_H__\r
-#define __ODM_PRECOMP_H__\r
-\r
-#include "odm_types.h"\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-#include "Precomp.h"           // We need to include mp_precomp.h due to batch file setting.\r
-\r
-#else\r
-\r
-#define                TEST_FALG___            1\r
-\r
-#endif\r
-\r
-//2 Config Flags and Structs - defined by each ODM Type\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-       #include "../8192cd_cfg.h"\r
-       #include "../odm_inc.h"\r
-\r
-       #include "../8192cd.h"\r
-       #include "../8192cd_util.h"\r
-       #ifdef _BIG_ENDIAN_\r
-       #define ODM_ENDIAN_TYPE                         ODM_ENDIAN_BIG\r
-       #else\r
-       #define ODM_ENDIAN_TYPE                         ODM_ENDIAN_LITTLE\r
-       #endif\r
-\r
-       #ifdef AP_BUILD_WORKAROUND\r
-       #include "../8192cd_headers.h"\r
-       #include "../8192cd_debug.h"            \r
-       #endif\r
-       \r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)\r
-       // Flags\r
-       #include "../8192cd_cfg.h"              // OUTSRC needs ADSL config flags.\r
-       #include "../odm_inc.h"                 // OUTSRC needs some extra flags.\r
-       // Data Structure\r
-       #include "../common_types.h"    // OUTSRC and rtl8192cd both needs basic type such as UINT8 and BIT0.\r
-       #include "../8192cd.h"                  // OUTSRC needs basic ADSL struct definition.\r
-       #include "../8192cd_util.h"             // OUTSRC needs basic I/O function.\r
-       #ifdef _BIG_ENDIAN_\r
-       #define ODM_ENDIAN_TYPE                         ODM_ENDIAN_BIG\r
-       #else\r
-       #define ODM_ENDIAN_TYPE                         ODM_ENDIAN_LITTLE\r
-       #endif\r
-\r
-       #ifdef ADSL_AP_BUILD_WORKAROUND\r
-       // NESTED_INC: Functions defined outside should not be included!! Marked by Annie, 2011-10-14.\r
-       #include "../8192cd_headers.h"\r
-       #include "../8192cd_debug.h"    \r
-       #endif  \r
-       \r
-#elif (DM_ODM_SUPPORT_TYPE ==ODM_CE)\r
-       //#include <drv_conf.h>\r
-       //#include <basic_types.h>\r
-       //#include <osdep_service.h>\r
-       //#include <drv_types.h>\r
-       //#include <rtw_byteorder.h>\r
-       //#include <hal_intf.h>\r
-#define BEAMFORMING_SUPPORT 0          \r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       #include "Mp_Precomp.h"\r
-       #define ODM_ENDIAN_TYPE                         ODM_ENDIAN_LITTLE\r
-#endif\r
-\r
\r
-//2 Hardware Parameter Files\r
-\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-#if (RTL8192C_SUPPORT==1)\r
-       #include "rtl8192c/Hal8192CEFWImg_AP.h"\r
-       #include "rtl8192c/Hal8192CEPHYImg_AP.h"\r
-       #include "rtl8192c/Hal8192CEMACImg_AP.h"\r
-#endif\r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)\r
-       #include "rtl8192c/Hal8192CEFWImg_ADSL.h"\r
-       #include "rtl8192c/Hal8192CEPHYImg_ADSL.h"\r
-       #include "rtl8192c/Hal8192CEMACImg_ADSL.h"\r
-\r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-       #if(RTL8192CE_SUPPORT ==1)\r
-       #include "rtl8192c/Hal8192CEFWImg_CE.h"\r
-       #include "rtl8192c/Hal8192CEPHYImg_CE.h"\r
-       #include "rtl8192c/Hal8192CEMACImg_CE.h"\r
-       #endif\r
-       \r
-       #if(RTL8192CU_SUPPORT ==1)\r
-       #include "rtl8192c/Hal8192CUFWImg_CE.h"\r
-       #include "rtl8192c/Hal8192CUPHYImg_CE.h"\r
-       #include "rtl8192c/Hal8192CUMACImg_CE.h"\r
-       #endif\r
-       \r
-       #if(RTL8192DE_SUPPORT ==1)\r
-       #include "rtl8192d/Hal8192DEFWImg_CE.h"\r
-       #include "rtl8192d/Hal8192DEPHYImg_CE.h"\r
-       #include "rtl8192d/Hal8192DEMACImg_CE.h"        \r
-       #endif\r
-       \r
-       #if(RTL8192DU_SUPPORT ==1)\r
-       #include "rtl8192d/Hal8192DUFWImg_CE.h"\r
-       #include "rtl8192d/Hal8192DUPHYImg_CE.h"\r
-       #include "rtl8192d/Hal8192DUMACImg_CE.h"\r
-       #endif\r
-       \r
-       #if(RTL8723AS_SUPPORT==1)\r
-       #include "rtl8723a/Hal8723SHWImg_CE.h"\r
-       #endif\r
-       \r
-       #if(RTL8723AU_SUPPORT==1)\r
-       #include "rtl8723a/Hal8723UHWImg_CE.h"  \r
-       #endif  \r
-       \r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-\r
-#endif\r
-\r
-\r
-//2 OutSrc Header Files\r
-\r
-#include "odm.h"\r
-#include "odm_HWConfig.h"\r
-#include "odm_debug.h"\r
-#include "odm_RegDefine11AC.h"\r
-#include "odm_RegDefine11N.h"\r
-#include "odm_AntDiv.h"\r
-#include "odm_EdcaTurboCheck.h"\r
-#include "odm_DIG.h"\r
-#include "odm_PathDiv.h"\r
-#include "odm_RaInfo.h"\r
-#include "odm_DynamicBBPowerSaving.h"\r
-#include "odm_DynamicTxPower.h"\r
-#include "odm_CfoTracking.h"\r
-#include "odm_NoiseMonitor.h"\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-#if (RTL8192C_SUPPORT==1)\r
-       #include "rtl8192c/HalDMOutSrc8192C_AP.h"\r
-#endif\r
-#if (RTL8188E_SUPPORT==1)\r
-               #include "rtl8188e/Hal8188ERateAdaptive.h"//for  RA,Power training\r
-#endif\r
-\r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)\r
-       #include "rtl8192c/HalDMOutSrc8192C_ADSL.h"\r
-\r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-       //#include "hal_com.h"\r
-       #include "HalPhyRf.h"\r
-       #if (RTL8192C_SUPPORT==1) \r
-       #ifdef CONFIG_INTEL_PROXIM\r
-       #include "../proxim/intel_proxim.h"     \r
-       #endif\r
-       #include  "rtl8192c/HalDMOutSrc8192C_CE.h"\r
-       #include <rtl8192c_hal.h>\r
-       #endif\r
-       \r
-       #if (RTL8192D_SUPPORT==1)\r
-       #include  "rtl8192d/HalDMOutSrc8192D_CE.h"\r
-       #include  "rtl8192d_hal.h"\r
-       #endif\r
-       \r
-       #if (RTL8723A_SUPPORT==1)\r
-               #include "rtl8192c/HalDMOutSrc8192C_CE.h" //for IQK,LCK,Power-tracking\r
-               #include "rtl8723a_hal.h"\r
-       #endif\r
-       \r
-       #if (RTL8188E_SUPPORT==1)\r
-               #include "rtl8188e/HalPhyRf_8188e.h"//for IQK,LCK,Power-tracking\r
-               #include "rtl8188e/Hal8188ERateAdaptive.h"//for  RA,Power training\r
-               #include "rtl8188e_hal.h"       \r
-       #endif\r
-       \r
-       #if (RTL8192E_SUPPORT==1)\r
-               #include "rtl8192e/HalPhyRf_8192e.h"//for IQK,LCK,Power-tracking                \r
-               #include "rtl8192e_hal.h"                       \r
-       #endif\r
-\r
-       #if (RTL8812A_SUPPORT==1)\r
-               #include "rtl8812a/HalPhyRf_8812A.h"//for IQK,LCK,Power-tracking\r
-               #include "rtl8812a_hal.h"\r
-       #endif\r
-\r
-       #if (RTL8821A_SUPPORT==1)\r
-               #include "rtl8821a/HalPhyRf_8821A.h"//for IQK,LCK,Power-tracking\r
-               #include "rtl8812a/HalPhyRf_8812A.h"//for IQK,LCK,Power-tracking\r
-               #include "rtl8812a_hal.h"               \r
-       #endif\r
-\r
-       #if (RTL8723B_SUPPORT==1)\r
-               #include "rtl8723b/HalPhyRf_8723B.h"//for IQK,LCK,Power-tracking\r
-               #include "rtl8723b_hal.h"\r
-       #endif\r
-#endif\r
-\r
-#include "odm_interface.h"\r
-#include "odm_reg.h"\r
-\r
-#if (RTL8192C_SUPPORT==1) \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-#include "rtl8192c/Hal8192CHWImg_MAC.h"\r
-#include "rtl8192c/Hal8192CHWImg_RF.h"\r
-#include "rtl8192c/Hal8192CHWImg_BB.h"\r
-#include "rtl8192c/Hal8192CHWImg_FW.h"\r
-#endif\r
-#include "rtl8192c/odm_RTL8192C.h"\r
-#endif\r
-#if (RTL8192D_SUPPORT==1) \r
-#include "rtl8192d/odm_RTL8192D.h"\r
-#endif\r
-\r
-#if (RTL8723A_SUPPORT==1) \r
-#include "rtl8723a/HalHWImg8723A_MAC.h"\r
-#include "rtl8723a/HalHWImg8723A_RF.h"\r
-#include "rtl8723a/HalHWImg8723A_BB.h"\r
-#include "rtl8723a/HalHWImg8723A_FW.h"\r
-#include "rtl8723a/odm_RegConfig8723A.h"\r
-#endif\r
-\r
-#if (RTL8188E_SUPPORT==1) \r
-#include "rtl8188e/HalHWImg8188E_MAC.h"\r
-#include "rtl8188e/HalHWImg8188E_RF.h"\r
-#include "rtl8188e/HalHWImg8188E_BB.h"\r
-#include "rtl8188e/HalHWImg8188E_FW.h"\r
-#include "rtl8188e/Hal8188EReg.h"\r
-\r
-#if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
-#include "rtl8188e/HalPhyRf_8188e.h"\r
-#endif\r
-\r
-#if (TESTCHIP_SUPPORT == 1) \r
-#include "rtl8188e/HalHWImg8188E_TestChip_MAC.h"\r
-#include "rtl8188e/HalHWImg8188E_TestChip_RF.h"\r
-#include "rtl8188e/HalHWImg8188E_TestChip_BB.h"\r
-#endif\r
-\r
-\r
-#include "rtl8188e/odm_RegConfig8188E.h"\r
-#include "rtl8188e/odm_RTL8188E.h"\r
-#endif\r
-\r
-#if (RTL8192E_SUPPORT==1) \r
-#include "rtl8192e/HalHWImg8192E_MAC.h"\r
-#include "rtl8192e/HalHWImg8192E_RF.h"\r
-#include "rtl8192e/HalHWImg8192E_BB.h"\r
-#include "rtl8192e/HalHWImg8192E_FW.h"\r
-#include "rtl8192e/Hal8192EReg.h"\r
-#include "rtl8192e/odm_RegConfig8192E.h"\r
-#include "rtl8192e/odm_RTL8192E.h"\r
-#endif\r
-\r
-#if (RTL8723B_SUPPORT==1) \r
-#include "rtl8723b/HalHWImg8723B_MAC.h"\r
-#include "rtl8723b/HalHWImg8723B_RF.h"\r
-#include "rtl8723b/HalHWImg8723B_BB.h"\r
-#include "rtl8723b/HalHWImg8723B_FW.h"\r
-#include "rtl8723b/HalHWImg8723B_MP.h"\r
-#include "rtl8723b/Hal8723BReg.h"\r
-#include "rtl8723b/odm_RTL8723B.h"\r
-#include "rtl8723b/odm_RegConfig8723B.h"\r
-#endif\r
-\r
-#if (RTL8812A_SUPPORT==1) \r
-#include "rtl8812a/HalHWImg8812A_MAC.h"\r
-#include "rtl8812a/HalHWImg8812A_RF.h"\r
-#include "rtl8812a/HalHWImg8812A_BB.h"\r
-#include "rtl8812a/HalHWImg8812A_FW.h"\r
-#include "rtl8812a/odm_RegConfig8812A.h"\r
-#include "rtl8812a/odm_RTL8812A.h"\r
-#if (TESTCHIP_SUPPORT == 1) \r
-#include "rtl8812a/HalHWImg8812A_TestChip_MAC.h"\r
-#include "rtl8812a/HalHWImg8812A_TestChip_RF.h"\r
-#include "rtl8812a/HalHWImg8812A_TestChip_BB.h"\r
-#endif\r
-#endif\r
-\r
-\r
-#if (RTL8821A_SUPPORT==1) \r
-#include "rtl8821a/HalHWImg8821A_MAC.h"\r
-#include "rtl8821a/HalHWImg8821A_RF.h"\r
-#include "rtl8821a/HalHWImg8821A_BB.h"\r
-#include "rtl8821a/HalHWImg8821A_FW.h"\r
-#include "rtl8821a/odm_RegConfig8821A.h"\r
-#include "rtl8821a/odm_RTL8821A.h"\r
-#if (TESTCHIP_SUPPORT == 1) \r
-#include "rtl8821a/HalHWImg8821A_TestChip_MAC.h"\r
-#include "rtl8821a/HalHWImg8821A_TestChip_RF.h"\r
-#include "rtl8821a/HalHWImg8821A_TestChip_BB.h"\r
-#include "rtl8821a/HalHWImg8821A_TestChip_FW.h"\r
-#endif\r
-#endif\r
-\r
-#endif // __ODM_PRECOMP_H__\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_reg.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_reg.h
deleted file mode 100755 (executable)
index 16999a1..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-//============================================================\r
-// File Name: odm_reg.h\r
-//\r
-// Description:\r
-//\r
-// This file is for general register definition.\r
-//\r
-//\r
-//============================================================\r
-#ifndef        __HAL_ODM_REG_H__\r
-#define __HAL_ODM_REG_H__\r
-\r
-//\r
-// Register Definition\r
-//\r
-\r
-//MAC REG\r
-#define        ODM_BB_RESET                                    0x002\r
-#define        ODM_DUMMY                                               0x4fe\r
-#define        RF_T_METER_OLD                          0x24\r
-#define        RF_T_METER_NEW                          0x42\r
-\r
-#define        ODM_EDCA_VO_PARAM                       0x500\r
-#define        ODM_EDCA_VI_PARAM                       0x504\r
-#define        ODM_EDCA_BE_PARAM                       0x508\r
-#define        ODM_EDCA_BK_PARAM                       0x50C\r
-#define        ODM_TXPAUSE                                     0x522\r
-\r
-//BB REG\r
-#define        ODM_FPGA_PHY0_PAGE8                     0x800\r
-#define        ODM_PSD_SETTING                         0x808\r
-#define        ODM_AFE_SETTING                         0x818\r
-#define        ODM_TXAGC_B_24_54                       0x834\r
-#define        ODM_TXAGC_B_MCS32_5                     0x838\r
-#define        ODM_TXAGC_B_MCS0_MCS3           0x83c\r
-#define        ODM_TXAGC_B_MCS4_MCS7           0x848\r
-#define        ODM_TXAGC_B_MCS8_MCS11          0x84c\r
-#define        ODM_ANALOG_REGISTER                     0x85c\r
-#define        ODM_RF_INTERFACE_OUTPUT         0x860\r
-#define        ODM_TXAGC_B_MCS12_MCS15 0x868\r
-#define        ODM_TXAGC_B_11_A_2_11           0x86c\r
-#define        ODM_AD_DA_LSB_MASK                      0x874\r
-#define        ODM_ENABLE_3_WIRE                       0x88c\r
-#define        ODM_PSD_REPORT                          0x8b4\r
-#define        ODM_R_ANT_SELECT                                0x90c\r
-#define        ODM_CCK_ANT_SELECT                      0xa07\r
-#define        ODM_CCK_PD_THRESH                       0xa0a\r
-#define        ODM_CCK_RF_REG1                         0xa11\r
-#define        ODM_CCK_MATCH_FILTER                    0xa20\r
-#define        ODM_CCK_RAKE_MAC                                0xa2e\r
-#define        ODM_CCK_CNT_RESET                       0xa2d\r
-#define        ODM_CCK_TX_DIVERSITY                    0xa2f\r
-#define        ODM_CCK_FA_CNT_MSB                      0xa5b\r
-#define        ODM_CCK_FA_CNT_LSB                      0xa5c\r
-#define        ODM_CCK_NEW_FUNCTION            0xa75\r
-#define        ODM_OFDM_PHY0_PAGE_C            0xc00\r
-#define        ODM_OFDM_RX_ANT                         0xc04\r
-#define        ODM_R_A_RXIQI                                   0xc14\r
-#define        ODM_R_A_AGC_CORE1                       0xc50\r
-#define        ODM_R_A_AGC_CORE2                       0xc54\r
-#define        ODM_R_B_AGC_CORE1                       0xc58\r
-#define        ODM_R_AGC_PAR                                   0xc70\r
-#define        ODM_R_HTSTF_AGC_PAR                     0xc7c\r
-#define        ODM_TX_PWR_TRAINING_A           0xc90\r
-#define        ODM_TX_PWR_TRAINING_B           0xc98\r
-#define        ODM_OFDM_FA_CNT1                                0xcf0\r
-#define        ODM_OFDM_PHY0_PAGE_D            0xd00\r
-#define        ODM_OFDM_FA_CNT2                                0xda0\r
-#define        ODM_OFDM_FA_CNT3                                0xda4\r
-#define        ODM_OFDM_FA_CNT4                                0xda8\r
-#define        ODM_TXAGC_A_6_18                                0xe00\r
-#define        ODM_TXAGC_A_24_54                       0xe04\r
-#define        ODM_TXAGC_A_1_MCS32                     0xe08\r
-#define        ODM_TXAGC_A_MCS0_MCS3           0xe10\r
-#define        ODM_TXAGC_A_MCS4_MCS7           0xe14\r
-#define        ODM_TXAGC_A_MCS8_MCS11          0xe18\r
-#define        ODM_TXAGC_A_MCS12_MCS15         0xe1c\r
-\r
-//RF REG\r
-#define        ODM_GAIN_SETTING                                0x00\r
-#define        ODM_CHANNEL                                     0x18\r
-\r
-//Ant Detect Reg\r
-#define        ODM_DPDT                                                0x300\r
-\r
-//PSD Init\r
-#define        ODM_PSDREG                                      0x808\r
-\r
-//92D Path Div\r
-#define        PATHDIV_REG                                     0xB30\r
-#define        PATHDIV_TRI                                     0xBA0\r
-\r
-\r
-//\r
-// Bitmap Definition\r
-//\r
-\r
-#define        BIT_FA_RESET                                    BIT0\r
-\r
-\r
-\r
-#endif\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_types.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/odm_types.h
deleted file mode 100755 (executable)
index 4ebbe72..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __ODM_TYPES_H__
-#define __ODM_TYPES_H__
-
-//
-// Define Different SW team support
-//
-#define        ODM_AP                  0x01    //BIT0 
-#define        ODM_ADSL                0x02    //BIT1
-#define        ODM_CE                  0x04    //BIT2
-#define        ODM_WIN                 0x08    //BIT3
-
-#define        DM_ODM_SUPPORT_TYPE                     ODM_CE
-
-// Deifne HW endian support
-#define        ODM_ENDIAN_BIG  0
-#define        ODM_ENDIAN_LITTLE       1
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-#define GET_ODM(__pAdapter)    ((PDM_ODM_T)(&((GET_HAL_DATA(__pAdapter))->DM_OutSrc)))
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-#define GET_ODM(__pAdapter)    ((PDM_ODM_T)(&((GET_HAL_DATA(__pAdapter))->odmpriv)))
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE != ODM_WIN)
-#define        RT_PCI_INTERFACE                                1
-#define        RT_USB_INTERFACE                                2
-#define        RT_SDIO_INTERFACE                               3
-#endif
-
-typedef enum _HAL_STATUS{
-       HAL_STATUS_SUCCESS,
-       HAL_STATUS_FAILURE,
-       /*RT_STATUS_PENDING,
-       RT_STATUS_RESOURCE,
-       RT_STATUS_INVALID_CONTEXT,
-       RT_STATUS_INVALID_PARAMETER,
-       RT_STATUS_NOT_SUPPORT,
-       RT_STATUS_OS_API_FAILED,*/
-}HAL_STATUS,*PHAL_STATUS;
-
-
-#if( (DM_ODM_SUPPORT_TYPE == ODM_AP) ||(DM_ODM_SUPPORT_TYPE == ODM_ADSL) || (DM_ODM_SUPPORT_TYPE == ODM_CE))
-
-#define                VISTA_USB_RX_REVISE                     0
-
-//
-// Declare for ODM spin lock defintion temporarily fro compile pass.
-//
-typedef enum _RT_SPINLOCK_TYPE{
-       RT_TX_SPINLOCK = 1,
-       RT_RX_SPINLOCK = 2,
-       RT_RM_SPINLOCK = 3,
-       RT_CAM_SPINLOCK = 4,
-       RT_SCAN_SPINLOCK = 5,
-       RT_LOG_SPINLOCK = 7, 
-       RT_BW_SPINLOCK = 8,
-       RT_CHNLOP_SPINLOCK = 9,
-       RT_RF_OPERATE_SPINLOCK = 10,
-       RT_INITIAL_SPINLOCK = 11,
-       RT_RF_STATE_SPINLOCK = 12, // For RF state. Added by Bruce, 2007-10-30.
-#if VISTA_USB_RX_REVISE
-       RT_USBRX_CONTEXT_SPINLOCK = 13,
-       RT_USBRX_POSTPROC_SPINLOCK = 14, // protect data of Adapter->IndicateW/ IndicateR
-#endif
-       //Shall we define Ndis 6.2 SpinLock Here ?
-       RT_PORT_SPINLOCK=16,
-       RT_H2C_SPINLOCK = 20, // For H2C cmd. Added by tynli. 2009.11.09.
-
-       RT_BTData_SPINLOCK=25,
-
-       RT_WAPI_OPTION_SPINLOCK=26,
-       RT_WAPI_RX_SPINLOCK=27,
-
-      // add for 92D CCK control issue  
-       RT_CCK_PAGEA_SPINLOCK = 28,
-       RT_BUFFER_SPINLOCK = 29,
-       RT_CHANNEL_AND_BANDWIDTH_SPINLOCK = 30,
-       RT_GEN_TEMP_BUF_SPINLOCK = 31,
-       RT_AWB_SPINLOCK = 32,
-       RT_FW_PS_SPINLOCK = 33,
-       RT_HW_TIMER_SPIN_LOCK = 34,
-       RT_MPT_WI_SPINLOCK = 35,
-       RT_P2P_SPIN_LOCK = 36,  // Protect P2P context
-       RT_DBG_SPIN_LOCK = 37,
-       RT_IQK_SPINLOCK = 38,
-       RT_PENDED_OID_SPINLOCK = 39,
-       RT_CHNLLIST_SPINLOCK = 40,      
-       RT_INDIC_SPINLOCK = 41, //protect indication    
-}RT_SPINLOCK_TYPE;
-
-#endif
-
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       #define STA_INFO_T                      RT_WLAN_STA
-       #define PSTA_INFO_T                     PRT_WLAN_STA
-
-//    typedef unsigned long            u4Byte,*pu4Byte;
-#define CONFIG_HW_ANTENNA_DIVERSITY 
-#define CONFIG_SW_ANTENNA_DIVERSITY 
-
-#elif (DM_ODM_SUPPORT_TYPE == ODM_AP)
-
-       // To let ADSL/AP project compile ok; it should be removed after all conflict are solved. Added by Annie, 2011-10-07.
-       #define ADSL_AP_BUILD_WORKAROUND
-       #define AP_BUILD_WORKAROUND
-       //
-#ifdef CONFIG_ANT_SWITCH
-       #define CONFIG_HW_ANTENNA_DIVERSITY 
-       #if ( defined(CONFIG_NO_2G_DIVERSITY) && defined(CONFIG_NO_5G_DIVERSITY) )
-               #define CONFIG_NOT_SUPPORT_ANTDIV 
-       #elif( !defined(CONFIG_NO_2G_DIVERSITY) && defined(CONFIG_NO_5G_DIVERSITY) )
-               #define CONFIG_2G_SUPPORT_ANTDIV
-       #elif( defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_NO_5G_DIVERSITY) )
-               #define CONFIG_5G_SUPPORT_ANTDIV
-       #elif( !defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_NO_5G_DIVERSITY) )
-               #define CONFIG_2G5G_SUPPORT_ANTDIV 
-       #endif
-#endif
-
-       #ifdef AP_BUILD_WORKAROUND
-       #include "../typedef.h"
-       #else
-       typedef void                                    VOID,*PVOID;
-       typedef unsigned char                   BOOLEAN,*PBOOLEAN;
-       typedef unsigned char                   u1Byte,*pu1Byte;
-       typedef unsigned short                  u2Byte,*pu2Byte;
-       typedef unsigned int                    u4Byte,*pu4Byte;
-       typedef unsigned long long              u8Byte,*pu8Byte;
-       typedef char                                    s1Byte,*ps1Byte;
-       typedef short                                   s2Byte,*ps2Byte;
-       typedef long                                    s4Byte,*ps4Byte;
-       typedef long long                               s8Byte,*ps8Byte;
-       #endif
-
-       typedef struct rtl8192cd_priv   *prtl8192cd_priv;
-       typedef struct stat_info                STA_INFO_T,*PSTA_INFO_T;
-       typedef struct timer_list               RT_TIMER, *PRT_TIMER;
-       typedef  void *                         RT_TIMER_CALL_BACK;
-
-       #define DEV_BUS_TYPE            RT_PCI_INTERFACE
-
-       #define _TRUE                           1
-       #define _FALSE                          0
-       
-#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)
-
-       // To let ADSL/AP project compile ok; it should be removed after all conflict are solved. Added by Annie, 2011-10-07.
-       #define ADSL_AP_BUILD_WORKAROUND
-       #define ADSL_BUILD_WORKAROUND
-       //
-
-       typedef unsigned char                   BOOLEAN,*PBOOLEAN;
-       typedef unsigned char                   u1Byte,*pu1Byte;
-       typedef unsigned short                  u2Byte,*pu2Byte;
-       typedef unsigned int                    u4Byte,*pu4Byte;
-       typedef unsigned long long              u8Byte,*pu8Byte;
-       typedef char                                    s1Byte,*ps1Byte;
-       typedef short                                   s2Byte,*ps2Byte;
-       typedef long                                    s4Byte,*ps4Byte;
-       typedef long long                               s8Byte,*ps8Byte;
-
-       typedef struct rtl8192cd_priv   *prtl8192cd_priv;
-       typedef struct stat_info                STA_INFO_T,*PSTA_INFO_T;
-       typedef struct timer_list               RT_TIMER, *PRT_TIMER;
-       typedef  void *                         RT_TIMER_CALL_BACK;
-       
-       #define DEV_BUS_TYPE            RT_PCI_INTERFACE
-
-       #define _TRUE                           1
-       #define _FALSE                          0
-
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-       #include <drv_types.h>
-
-#if 0
-       typedef u8                                      u1Byte, *pu1Byte;
-       typedef u16                                     u2Byte,*pu2Byte;
-       typedef u32                                     u4Byte,*pu4Byte;
-       typedef u64                                     u8Byte,*pu8Byte;
-       typedef s8                                      s1Byte,*ps1Byte;
-       typedef s16                                     s2Byte,*ps2Byte;
-       typedef s32                                     s4Byte,*ps4Byte;
-       typedef s64                                     s8Byte,*ps8Byte;
-#else
-       #define u1Byte          u8
-       #define pu1Byte         u8*     
-
-       #define u2Byte          u16
-       #define pu2Byte         u16*            
-
-       #define u4Byte          u32
-       #define pu4Byte         u32*    
-
-       #define u8Byte          u64
-       #define pu8Byte         u64*
-
-       #define s1Byte          s8
-       #define ps1Byte         s8*     
-
-       #define s2Byte          s16
-       #define ps2Byte         s16*    
-
-       #define s4Byte          s32
-       #define ps4Byte         s32*    
-
-       #define s8Byte          s64
-       #define ps8Byte         s64*    
-       
-#endif
-       #ifdef CONFIG_USB_HCI
-               #define DEV_BUS_TYPE    RT_USB_INTERFACE
-       #elif defined(CONFIG_PCI_HCI)
-               #define DEV_BUS_TYPE    RT_PCI_INTERFACE
-       #elif defined(CONFIG_SDIO_HCI)
-               #define DEV_BUS_TYPE    RT_SDIO_INTERFACE
-       #elif defined(CONFIG_GSPI_HCI)
-               #define DEV_BUS_TYPE    RT_SDIO_INTERFACE
-       #endif
-       
-
-       #if defined(CONFIG_LITTLE_ENDIAN)       
-               #define ODM_ENDIAN_TYPE                 ODM_ENDIAN_LITTLE
-       #elif defined (CONFIG_BIG_ENDIAN)
-               #define ODM_ENDIAN_TYPE                 ODM_ENDIAN_BIG
-       #endif
-       
-       typedef struct timer_list               RT_TIMER, *PRT_TIMER;
-       typedef  void *                         RT_TIMER_CALL_BACK;
-       #define STA_INFO_T                      struct sta_info
-       #define PSTA_INFO_T             struct sta_info *
-               
-
-
-       #define TRUE    _TRUE   
-       #define FALSE   _FALSE
-
-
-       #define SET_TX_DESC_ANTSEL_A_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 24, 1, __Value)
-       #define SET_TX_DESC_ANTSEL_B_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 25, 1, __Value)
-       #define SET_TX_DESC_ANTSEL_C_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 29, 1, __Value)
-
-       //define useless flag to avoid compile warning
-       #define USE_WORKITEM 0
-       #define         FOR_BRAZIL_PRETEST 0
-       #define   FPGA_TWO_MAC_VERIFICATION     0
-       #define RTL8881A_SUPPORT        0
-#endif
-
-#define READ_NEXT_PAIR(v1, v2, i) do { if (i+2 >= ArrayLen) break; i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
-#define COND_ELSE  2
-#define COND_ENDIF 3
-
-#endif // __ODM_TYPES_H__
-
index 13e5e28ec647e46f6f927c95e407a5be502009b0..e89ce1ed69cfcb6a6afe548a88b30184278a6581 100755 (executable)
 #include "phydm_precomp.h"
 
 
 #include "phydm_precomp.h"
 
 
-const u2Byte dB_Invert_Table[8][12] = {
-       {       1,              1,              1,              2,              2,              2,              2,              3,              3,              3,              4,              4},
-       {       4,              5,              6,              6,              7,              8,              9,              10,             11,             13,             14,             16},
-       {       18,             20,             22,             25,             28,             32,             35,             40,             45,             50,             56,             63},
-       {       71,             79,             89,             100,    112,    126,    141,    158,    178,    200,    224,    251},
-       {       282,    316,    355,    398,    447,    501,    562,    631,    708,    794,    891,    1000},
-       {       1122,   1259,   1413,   1585,   1778,   1995,   2239,   2512,   2818,   3162,   3548,   3981},
-       {       4467,   5012,   5623,   6310,   7079,   7943,   8913,   10000,  11220,  12589,  14125,  15849},
-       {       17783,  19953,  22387,  25119,  28184,  31623,  35481,  39811,  44668,  50119,  56234,  65535}};
+const u2Byte dB_Invert_Table[12][8] = {
+       {       1,              1,              1,              2,              2,              2,              2,              3},
+       {       3,              3,              4,              4,              4,              5,              6,              6},
+       {       7,              8,              9,              10,             11,             13,             14,             16},
+       {       18,             20,             22,             25,             28,             32,             35,             40},
+       {       45,             50,             56,             63,             71,             79,             89,             100},
+       {       112,            126,            141,            158,            178,            200,            224,            251},
+       {       282,            316,            355,            398,            447,            501,            562,            631},
+       {       708,            794,            891,            1000,   1122,   1259,   1413,   1585},
+       {       1778,   1995,   2239,   2512,   2818,   3162,   3548,   3981},
+       {       4467,   5012,   5623,   6310,   7079,   7943,   8913,   10000},
+       {       11220,  12589,  14125,  15849,  17783,  19953,  22387,  25119},
+       {       28184,  31623,  35481,  39811,  44668,  50119,  56234,  65535}
+};
 
 
 //============================================================
 // Local Function predefine.
 //============================================================
 
 
 
 //============================================================
 // Local Function predefine.
 //============================================================
 
-VOID
-odm_SwAntDetectInit(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-
-
-
-
-VOID
-odm_AntennaDiversityInit(
-       IN              PDM_ODM_T               pDM_Odm 
-);
-
-VOID
-odm_AntennaDiversity(
-       IN              PDM_ODM_T               pDM_Odm 
-);
+/* START------------COMMON INFO RELATED--------------- */
 
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
 VOID
 
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
 VOID
@@ -67,24 +55,13 @@ ODM_UpdateInitRateWorkItemCallback(
     );
 #endif
 
     );
 #endif
 
-
 VOID
 odm_GlobalAdapterCheck(
        IN              VOID
        );
 
 VOID
 odm_GlobalAdapterCheck(
        IN              VOID
        );
 
-//Remove RAMask by RS_James
-
-
+//move to odm_PowerTacking.h by YuChen
 
 
-VOID
-odm_IQCalibrate(
-               IN      PDM_ODM_T       pDM_Odm 
-               );
-
-//remove PT by Yuchen
-
-//Remove Edca by Yu Chen
 
 
 VOID
 
 
 VOID
@@ -92,15 +69,51 @@ odm_UpdatePowerTrainingState(
        IN      PDM_ODM_T       pDM_Odm
 );
 
        IN      PDM_ODM_T       pDM_Odm
 );
 
-VOID
-ODM_AsocEntry_Init(
-       IN      PDM_ODM_T       pDM_Odm
-       );
-
 //============================================================
 //3 Export Interface
 //============================================================
 
 //============================================================
 //3 Export Interface
 //============================================================
 
+/*Y = 10*log(X)*/
+s4Byte
+ODM_PWdB_Conversion(
+       IN  s4Byte X,
+       IN  u4Byte TotalBit,
+       IN  u4Byte DecimalBit
+       )
+{
+       s4Byte Y, integer = 0, decimal = 0;
+       u4Byte i;
+
+       if(X == 0)
+               X = 1; // log2(x), x can't be 0
+
+       for(i = (TotalBit-1); i > 0; i--)
+       {
+               if(X & BIT(i))
+               {
+                       integer = i;
+                       if(i > 0)
+                               decimal = (X & BIT(i-1))?2:0; //decimal is 0.5dB*3=1.5dB~=2dB 
+                       break;
+               }
+       }
+       
+       Y = 3*(integer-DecimalBit)+decimal; //10*log(x)=3*log2(x), 
+
+       return Y;
+}
+
+s4Byte
+ODM_SignConversion(
+    IN  s4Byte value,
+    IN  u4Byte TotalBit
+    )
+{
+       if(value&BIT(TotalBit-1))
+               value -= BIT(TotalBit);
+       return value;
+}
+
 VOID
 ODM_InitMpDriverStatus(
        IN              PDM_ODM_T               pDM_Odm
 VOID
 ODM_InitMpDriverStatus(
        IN              PDM_ODM_T               pDM_Odm
@@ -152,13 +165,52 @@ ODM_UpdateMpDriverStatus(
 #endif
 }
 
 #endif
 }
 
+VOID
+PHYDM_InitTRXAntennaSetting(
+       IN              PDM_ODM_T               pDM_Odm
+)
+{
+#if RTL8814A_SUPPORT
+       u1Byte  RxAnt = 0, TxAnt = 0;
+
+       RxAnt = (u1Byte)ODM_GetBBReg(pDM_Odm, ODM_REG(BB_RX_PATH,pDM_Odm), ODM_BIT(BB_RX_PATH,pDM_Odm));
+       TxAnt = (u1Byte)ODM_GetBBReg(pDM_Odm, ODM_REG(BB_TX_PATH,pDM_Odm), ODM_BIT(BB_TX_PATH,pDM_Odm));
+       pDM_Odm->TRXAntStatus =  (RxAnt << 4) + TxAnt;
+#endif
+}
+
+VOID
+phydm_Init_cck_setting(
+       IN              PDM_ODM_T               pDM_Odm
+)
+{
+       u4Byte value_824,value_82c;
+
+       pDM_Odm->bCckHighPower = (BOOLEAN) ODM_GetBBReg(pDM_Odm, ODM_REG(CCK_RPT_FORMAT,pDM_Odm), ODM_BIT(CCK_RPT_FORMAT,pDM_Odm));
+
+       #if (RTL8192E_SUPPORT == 1)
+       if(pDM_Odm->SupportICType & (ODM_RTL8192E))
+       {
+               /* 0x824[9] = 0x82C[9] = 0xA80[7]  these regiaters settinh should be equal or CCK RSSI report may inaccurate */
+               value_824 = ODM_GetBBReg(pDM_Odm, 0x824, BIT9);
+               value_82c = ODM_GetBBReg(pDM_Odm, 0x82c, BIT9);
+               
+               if(value_824 != value_82c)
+               {
+                       ODM_SetBBReg(pDM_Odm, 0x82c , BIT9, value_824);
+               }
+               ODM_SetBBReg(pDM_Odm, 0xa80 , BIT7, value_824);
+               pDM_Odm->cck_agc_report_type = (BOOLEAN)value_824;
+       }
+       #endif
+}
+
 VOID
 odm_CommonInfoSelfInit(
        IN              PDM_ODM_T               pDM_Odm
        )
 {
 VOID
 odm_CommonInfoSelfInit(
        IN              PDM_ODM_T               pDM_Odm
        )
 {
-       pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;
-       pDM_Odm->bCckHighPower = (BOOLEAN) ODM_GetBBReg(pDM_Odm, ODM_REG(CCK_RPT_FORMAT,pDM_Odm), ODM_BIT(CCK_RPT_FORMAT,pDM_Odm));             
+       phydm_Init_cck_setting(pDM_Odm);
        pDM_Odm->RFPathRxEnable = (u1Byte) ODM_GetBBReg(pDM_Odm, ODM_REG(BB_RX_PATH,pDM_Odm), ODM_BIT(BB_RX_PATH,pDM_Odm));
 #if (DM_ODM_SUPPORT_TYPE != ODM_CE)    
        pDM_Odm->pbNet_closed = &pDM_Odm->BOOLEAN_temp;
        pDM_Odm->RFPathRxEnable = (u1Byte) ODM_GetBBReg(pDM_Odm, ODM_REG(BB_RX_PATH,pDM_Odm), ODM_BIT(BB_RX_PATH,pDM_Odm));
 #if (DM_ODM_SUPPORT_TYPE != ODM_CE)    
        pDM_Odm->pbNet_closed = &pDM_Odm->BOOLEAN_temp;
@@ -166,9 +218,15 @@ odm_CommonInfoSelfInit(
 
        PHYDM_InitDebugSetting(pDM_Odm);
        ODM_InitMpDriverStatus(pDM_Odm);
 
        PHYDM_InitDebugSetting(pDM_Odm);
        ODM_InitMpDriverStatus(pDM_Odm);
+       PHYDM_InitTRXAntennaSetting(pDM_Odm);
 
        pDM_Odm->TxRate = 0xFF;
 
 
        pDM_Odm->TxRate = 0xFF;
 
+       pDM_Odm->number_linked_client = 0;
+       pDM_Odm->pre_number_linked_client = 0;
+       pDM_Odm->number_active_client = 0;
+       pDM_Odm->pre_number_active_client = 0;
+       
 }
 
 VOID
 }
 
 VOID
@@ -176,8 +234,8 @@ odm_CommonInfoSelfUpdate(
        IN              PDM_ODM_T               pDM_Odm
        )
 {
        IN              PDM_ODM_T               pDM_Odm
        )
 {
-       u1Byte  EntryCnt=0;
-       u1Byte  i;
+       u1Byte  EntryCnt = 0, num_active_client = 0;
+       u4Byte  i, OneEntry_MACID = 0, ma_rx_tp = 0;
        PSTA_INFO_T     pEntry;
 
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
        PSTA_INFO_T     pEntry;
 
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
@@ -206,30 +264,68 @@ odm_CommonInfoSelfUpdate(
                pDM_Odm->bsta_state = FALSE;
 #endif
 
                pDM_Odm->bsta_state = FALSE;
 #endif
 
-
-       if(*(pDM_Odm->pBandWidth) == ODM_BW40M)
+/* THis variable cannot be used because it is wrong*/
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+       if (*(pDM_Odm->pBandWidth) == ODM_BW40M)
        {
        {
-               if(*(pDM_Odm->pSecChOffset) == 1)
-                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) -2;
-               else if(*(pDM_Odm->pSecChOffset) == 2)
-                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) +2;
-       }
-       else
+               if (*(pDM_Odm->pSecChOffset) == 1)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) + 2;
+               else if (*(pDM_Odm->pSecChOffset) == 2)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) - 2;
+       } else if (*(pDM_Odm->pBandWidth) == ODM_BW80M) {
+               if (*(pDM_Odm->pSecChOffset) == 1)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) + 6;
+               else if (*(pDM_Odm->pSecChOffset) == 2)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) - 6;
+       } else
+               pDM_Odm->ControlChannel = *(pDM_Odm->pChannel);
+#else
+       if (*(pDM_Odm->pBandWidth) == ODM_BW40M) {
+               if (*(pDM_Odm->pSecChOffset) == 1)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) - 2;
+               else if (*(pDM_Odm->pSecChOffset) == 2)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) + 2;
+       } else
                pDM_Odm->ControlChannel = *(pDM_Odm->pChannel);
                pDM_Odm->ControlChannel = *(pDM_Odm->pChannel);
+#endif
 
        for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)
        {
                pEntry = pDM_Odm->pODM_StaInfo[i];
                if(IS_STA_VALID(pEntry))
 
        for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)
        {
                pEntry = pDM_Odm->pODM_StaInfo[i];
                if(IS_STA_VALID(pEntry))
+               {
                        EntryCnt++;
                        EntryCnt++;
+                       if(EntryCnt==1)
+                       {
+                               OneEntry_MACID=i;
+                       }
+
+                       #if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+                               ma_rx_tp =  (pEntry->rx_byte_cnt_LowMAW)<<3; /*  low moving average RX  TP   ( bit /sec)*/
+
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("ClientTP[%d]: ((%d )) bit/sec\n", i, ma_rx_tp));
+                               
+                               if (ma_rx_tp > ACTIVE_TP_THRESHOLD)
+                                       num_active_client++;
+                       #endif
+                }
        }
        
        if(EntryCnt == 1)
        }
        
        if(EntryCnt == 1)
+       {
                pDM_Odm->bOneEntryOnly = TRUE;
                pDM_Odm->bOneEntryOnly = TRUE;
+               pDM_Odm->OneEntry_MACID=OneEntry_MACID;
+       }
        else
                pDM_Odm->bOneEntryOnly = FALSE;
 
        else
                pDM_Odm->bOneEntryOnly = FALSE;
 
-       // Update MP driver status
+       pDM_Odm->pre_number_linked_client = pDM_Odm->number_linked_client;
+       pDM_Odm->pre_number_active_client = pDM_Odm->number_active_client;
+       
+       pDM_Odm->number_linked_client = EntryCnt;
+       pDM_Odm->number_active_client = num_active_client;      
+
+       /* Update MP driver status*/
        ODM_UpdateMpDriverStatus(pDM_Odm);
 }
 
        ODM_UpdateMpDriverStatus(pDM_Odm);
 }
 
@@ -260,6 +356,10 @@ PhyDM_Get_Structure(
                case    PHYDM_CFOTRACK:
                        pStruct = &DM_CfoTrack;
                break;
                case    PHYDM_CFOTRACK:
                        pStruct = &DM_CfoTrack;
                break;
+
+               case    PHYDM_ADAPTIVITY:
+                       pStruct = &(pDM_Odm->Adaptivity);
+               break;
                
                default:
                break;
                
                default:
                break;
@@ -274,6 +374,10 @@ PhyDM_Get_Structure(
                case    PHYDM_CFOTRACK:
                        pStruct = &(pDM_Odm->DM_CfoTrack);
                break;
                case    PHYDM_CFOTRACK:
                        pStruct = &(pDM_Odm->DM_CfoTrack);
                break;
+
+               case    PHYDM_ADAPTIVITY:
+                       pStruct = &(pDM_Odm->Adaptivity);
+               break;
                
                default:
                break;
                
                default:
                break;
@@ -303,23 +407,23 @@ ODM_DMInit(
        IN              PDM_ODM_T               pDM_Odm
        )
 {
        IN              PDM_ODM_T               pDM_Odm
        )
 {
-
        odm_CommonInfoSelfInit(pDM_Odm);
        odm_DIGInit(pDM_Odm);
        Phydm_NHMCounterStatisticsInit(pDM_Odm);
        Phydm_AdaptivityInit(pDM_Odm);
        odm_CommonInfoSelfInit(pDM_Odm);
        odm_DIGInit(pDM_Odm);
        Phydm_NHMCounterStatisticsInit(pDM_Odm);
        Phydm_AdaptivityInit(pDM_Odm);
+       phydm_ra_info_init(pDM_Odm);
        odm_RateAdaptiveMaskInit(pDM_Odm);
        odm_RateAdaptiveMaskInit(pDM_Odm);
+       odm_RA_ParaAdjust_init(pDM_Odm);
        ODM_CfoTrackingInit(pDM_Odm);
        ODM_EdcaTurboInit(pDM_Odm);
        odm_RSSIMonitorInit(pDM_Odm);
        ODM_CfoTrackingInit(pDM_Odm);
        ODM_EdcaTurboInit(pDM_Odm);
        odm_RSSIMonitorInit(pDM_Odm);
-       odm_TXPowerTrackingInit(pDM_Odm);
+       phydm_rf_init(pDM_Odm);
        odm_AntennaDiversityInit(pDM_Odm);
        odm_AutoChannelSelectInit(pDM_Odm);
        odm_AntennaDiversityInit(pDM_Odm);
        odm_AutoChannelSelectInit(pDM_Odm);
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       ODM_ClearTxPowerTrackingState(pDM_Odm);
        odm_PathDiversityInit(pDM_Odm);
        odm_PathDiversityInit(pDM_Odm);
-#endif
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
+       phydm_Beamforming_Init(pDM_Odm);
+#endif 
 
        if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
        {
 
        if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
        {
@@ -346,22 +450,6 @@ ODM_DMInit(
                        odm_PrimaryCCA_Check_Init(pDM_Odm);
        #endif
 
                        odm_PrimaryCCA_Check_Init(pDM_Odm);
        #endif
 
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       #if (RTL8723A_SUPPORT == 1)
-               if(pDM_Odm->SupportICType == ODM_RTL8723A)
-                       odm_PSDMonitorInit(pDM_Odm);
-       #endif
-
-       #if (RTL8192D_SUPPORT == 1)
-               if(pDM_Odm->SupportICType==ODM_RTL8192D)
-                       odm_PathDivInit_92D(pDM_Odm);
-       #endif
-
-       #if ((RTL8192C_SUPPORT == 1) || (RTL8192D_SUPPORT == 1))
-               if(pDM_Odm->SupportICType & (ODM_RTL8192C|ODM_RTL8192D))
-                       odm_RXHPInit(pDM_Odm);
-       #endif
-#endif
 #endif
 
        }
 #endif
 
        }
@@ -373,11 +461,108 @@ ODM_DMReset(
        IN              PDM_ODM_T               pDM_Odm
        )
 {
        IN              PDM_ODM_T               pDM_Odm
        )
 {
-        #if (defined(CONFIG_HW_ANTENNA_DIVERSITY))
        ODM_AntDivReset(pDM_Odm);
        ODM_AntDivReset(pDM_Odm);
-        #endif
 }
 
 }
 
+
+VOID
+phydm_support_ablity_debug(
+       IN              PVOID           pDM_VOID,
+       IN              u4Byte          *const dm_value,
+       IN              u4Byte                  *_used,
+       OUT             char                    *output,
+       IN              u4Byte                  *_out_len
+       )
+{
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       u4Byte                  pre_support_ability;
+       u4Byte used = *_used;
+       u4Byte out_len = *_out_len;
+
+       pre_support_ability = pDM_Odm->SupportAbility ; 
+       PHYDM_SNPRINTF((output+used, out_len-used,"\n%s\n", "================================"));
+       if(dm_value[0] == 100)
+       {
+               PHYDM_SNPRINTF((output+used, out_len-used, "[Supportablity] PhyDM Selection\n"));
+               PHYDM_SNPRINTF((output+used, out_len-used,"%s\n", "================================"));
+               PHYDM_SNPRINTF((output+used, out_len-used, "00. (( %s ))DIG  \n", ((pDM_Odm->SupportAbility & ODM_BB_DIG)?("V"):(".")) ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "01. (( %s ))RA_MASK  \n", ((pDM_Odm->SupportAbility & ODM_BB_RA_MASK)?("V"):(".")) ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "02. (( %s ))DYNAMIC_TXPWR  \n", ((pDM_Odm->SupportAbility & ODM_BB_DYNAMIC_TXPWR)?("V"):("."))   ));                
+               PHYDM_SNPRINTF((output+used, out_len-used, "03. (( %s ))FA_CNT  \n", ((pDM_Odm->SupportAbility & ODM_BB_FA_CNT)?("V"):("."))  ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "04. (( %s ))RSSI_MONITOR  \n", ((pDM_Odm->SupportAbility & ODM_BB_RSSI_MONITOR)?("V"):("."))   ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "05. (( %s ))CCK_PD  \n", ((pDM_Odm->SupportAbility & ODM_BB_CCK_PD)?("V"):("."))   ));      
+               PHYDM_SNPRINTF((output+used, out_len-used, "06. (( %s ))ANT_DIV  \n", ((pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)?("V"):("."))  ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "07. (( %s ))PWR_SAVE  \n", ((pDM_Odm->SupportAbility & ODM_BB_PWR_SAVE)?("V"):("."))  ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "08. (( %s ))PWR_TRAIN  \n", ((pDM_Odm->SupportAbility & ODM_BB_PWR_TRAIN)?("V"):("."))   ));        
+               PHYDM_SNPRINTF((output+used, out_len-used, "09. (( %s ))RATE_ADAPTIVE  \n", ((pDM_Odm->SupportAbility & ODM_BB_RATE_ADAPTIVE)?("V"):("."))   ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "10. (( %s ))PATH_DIV  \n", ((pDM_Odm->SupportAbility & ODM_BB_PATH_DIV)?("V"):("."))));
+               PHYDM_SNPRINTF((output+used, out_len-used, "11. (( %s ))PSD  \n", ((pDM_Odm->SupportAbility & ODM_BB_PSD)?("V"):(".")) ));      
+               PHYDM_SNPRINTF((output+used, out_len-used, "12. (( %s ))RXHP  \n", ((pDM_Odm->SupportAbility & ODM_BB_RXHP)?("V"):("."))   ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "13. (( %s ))ADAPTIVITY  \n", ((pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY)?("V"):(".")) ));        
+               PHYDM_SNPRINTF((output+used, out_len-used, "14. (( %s ))CFO_TRACKING  \n", ((pDM_Odm->SupportAbility & ODM_BB_CFO_TRACKING)?("V"):(".")) ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "15. (( %s ))NHM_CNT  \n", ((pDM_Odm->SupportAbility & ODM_BB_NHM_CNT)?("V"):("."))  ));     
+               PHYDM_SNPRINTF((output+used, out_len-used, "16. (( %s ))PRIMARY_CCA  \n", ((pDM_Odm->SupportAbility & ODM_BB_PRIMARY_CCA)?("V"):(".")) ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "20. (( %s ))EDCA_TURBO  \n", ((pDM_Odm->SupportAbility & ODM_MAC_EDCA_TURBO)?("V"):("."))  ));      
+               PHYDM_SNPRINTF((output+used, out_len-used, "21. (( %s ))EARLY_MODE  \n", ((pDM_Odm->SupportAbility & ODM_MAC_EARLY_MODE)?("V"):(".")) ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "24. (( %s ))TX_PWR_TRACK  \n", ((pDM_Odm->SupportAbility & ODM_RF_TX_PWR_TRACK)?("V"):("."))  ));   
+               PHYDM_SNPRINTF((output+used, out_len-used, "25. (( %s ))RX_GAIN_TRACK  \n", ((pDM_Odm->SupportAbility & ODM_RF_RX_GAIN_TRACK)?("V"):("."))  ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "26. (( %s ))RF_CALIBRATION  \n", ((pDM_Odm->SupportAbility & ODM_RF_CALIBRATION)?("V"):("."))   ));
+               PHYDM_SNPRINTF((output+used, out_len-used,"%s\n", "================================"));
+       }
+       /*
+       else if(dm_value[0] == 101)
+       {
+               pDM_Odm->SupportAbility = 0 ;
+               DbgPrint("Disable all SupportAbility components \n");
+               PHYDM_SNPRINTF((output+used, out_len-used,"%s\n", "Disable all SupportAbility components"));    
+       }
+       */
+       else
+       {
+
+               if(dm_value[1] == 1) //enable
+               {
+                       pDM_Odm->SupportAbility |= BIT(dm_value[0]) ;
+                       if(BIT(dm_value[0]) & ODM_BB_PATH_DIV)
+                       {
+                               odm_PathDiversityInit(pDM_Odm);
+                       }
+               }
+               else if(dm_value[1] == 2) //disable
+               {
+                       pDM_Odm->SupportAbility &= ~(BIT(dm_value[0])) ;
+               }
+               else
+               {
+                       //DbgPrint("\n[Warning!!!]  1:enable,  2:disable \n\n");
+                       PHYDM_SNPRINTF((output+used, out_len-used,"%s\n", "[Warning!!!]  1:enable,  2:disable"));
+               }
+       }
+       PHYDM_SNPRINTF((output+used, out_len-used,"pre-SupportAbility  =  0x%x\n",  pre_support_ability ));     
+       PHYDM_SNPRINTF((output+used, out_len-used,"Curr-SupportAbility =  0x%x\n", pDM_Odm->SupportAbility ));
+       PHYDM_SNPRINTF((output+used, out_len-used,"%s\n", "================================"));
+}
+
+#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
+//
+//tmp modify for LC Only
+//
+VOID
+ODM_DMWatchdog_LPS(
+       IN              PDM_ODM_T               pDM_Odm
+       )
+{      
+       odm_CommonInfoSelfUpdate(pDM_Odm);
+       odm_FalseAlarmCounterStatistics(pDM_Odm);
+       odm_RSSIMonitorCheck(pDM_Odm);
+       odm_DIGbyRSSI_LPS(pDM_Odm);     
+       odm_CCKPacketDetectionThresh(pDM_Odm);
+       odm_CommonInfoSelfReset(pDM_Odm);
+
+       if(*(pDM_Odm->pbPowerSaving)==TRUE)
+               return;
+}
+#endif
 //
 // 2011/09/20 MH This is the entry pointer for all team to execute HW out source DM.
 // You can not add any dummy function here, be care, you can only use DM structure
 //
 // 2011/09/20 MH This is the entry pointer for all team to execute HW out source DM.
 // You can not add any dummy function here, be care, you can only use DM structure
@@ -392,12 +577,24 @@ ODM_DMWatchdog(
        odm_CommonInfoSelfUpdate(pDM_Odm);
        phydm_BasicDbgMessage(pDM_Odm);
        odm_HWSetting(pDM_Odm);
        odm_CommonInfoSelfUpdate(pDM_Odm);
        phydm_BasicDbgMessage(pDM_Odm);
        odm_HWSetting(pDM_Odm);
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+       {
+       prtl8192cd_priv priv            = pDM_Odm->priv;
+       if( (priv->auto_channel != 0) && (priv->auto_channel != 2) )//if ACS running, do not do FA/CCA counter read
+               return;
+       }
+#endif 
        odm_FalseAlarmCounterStatistics(pDM_Odm);
        odm_RSSIMonitorCheck(pDM_Odm);
 
        if(*(pDM_Odm->pbPowerSaving) == TRUE)
        {
                odm_DIGbyRSSI_LPS(pDM_Odm);
        odm_FalseAlarmCounterStatistics(pDM_Odm);
        odm_RSSIMonitorCheck(pDM_Odm);
 
        if(*(pDM_Odm->pbPowerSaving) == TRUE)
        {
                odm_DIGbyRSSI_LPS(pDM_Odm);
+               {
+                       pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;
+                       Phydm_Adaptivity(pDM_Odm, pDM_DigTable->CurIGValue);
+               }
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("DMWatchdog in power saving mode\n"));
                return;
        }
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("DMWatchdog in power saving mode\n"));
                return;
        }
@@ -407,9 +604,10 @@ ODM_DMWatchdog(
        odm_DIG(pDM_Odm);
        {
                pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;
        odm_DIG(pDM_Odm);
        {
                pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;
-               pDM_Odm->bAdaOn = Phydm_Adaptivity(pDM_Odm, pDM_DigTable->CurIGValue);
+               Phydm_Adaptivity(pDM_Odm, pDM_DigTable->CurIGValue);
        }
        odm_CCKPacketDetectionThresh(pDM_Odm);
        }
        odm_CCKPacketDetectionThresh(pDM_Odm);
+       phydm_ra_dynamic_retry_limit(pDM_Odm);
        odm_RefreshRateAdaptiveMask(pDM_Odm);
        odm_RefreshBasicRateMask(pDM_Odm);
        odm_DynamicBBPowerSaving(pDM_Odm);
        odm_RefreshRateAdaptiveMask(pDM_Odm);
        odm_RefreshBasicRateMask(pDM_Odm);
        odm_DynamicBBPowerSaving(pDM_Odm);
@@ -418,21 +616,14 @@ ODM_DMWatchdog(
        ODM_CfoTracking(pDM_Odm);
        odm_DynamicTxPower(pDM_Odm);
        odm_AntennaDiversity(pDM_Odm);
        ODM_CfoTracking(pDM_Odm);
        odm_DynamicTxPower(pDM_Odm);
        odm_AntennaDiversity(pDM_Odm);
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
+       phydm_Beamforming_Watchdog(pDM_Odm);
+#endif
 
 
-#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-
-       ODM_TXPowerTrackingCheck(pDM_Odm);
+       phydm_rf_watchdog(pDM_Odm);
 
 
-       if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-               odm_IQCalibrate(pDM_Odm);
-       else 
-#endif
        if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
        {
        if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
        {
-#if (RTL8192D_SUPPORT == 1)
-               if(pDM_Odm->SupportICType==ODM_RTL8192D)
-                       ODM_DynamicEarlyMode(pDM_Odm);
-#endif
                
 #if (RTL8188E_SUPPORT == 1)
                if(pDM_Odm->SupportICType==ODM_RTL8188E)
                
 #if (RTL8188E_SUPPORT == 1)
                if(pDM_Odm->SupportICType==ODM_RTL8188E)
@@ -445,13 +636,6 @@ ODM_DMWatchdog(
                if(pDM_Odm->SupportICType==ODM_RTL8192E)
                        odm_DynamicPrimaryCCA_Check(pDM_Odm); 
        #endif
                if(pDM_Odm->SupportICType==ODM_RTL8192E)
                        odm_DynamicPrimaryCCA_Check(pDM_Odm); 
        #endif
-
-#if( DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       #if ((RTL8192C_SUPPORT == 1) || (RTL8192D_SUPPORT == 1))
-               if(pDM_Odm->SupportICType & (ODM_RTL8192C|ODM_RTL8192D))
-                       odm_RXHP(pDM_Odm);
-       #endif
-#endif
 #endif
        }
 
 #endif
        }
 
@@ -562,6 +746,9 @@ ODM_CmnInfoInit(
                case    ODM_CMNINFO_EXT_TRSW:
                        pDM_Odm->ExtTRSW = (u1Byte)Value;
                        break;
                case    ODM_CMNINFO_EXT_TRSW:
                        pDM_Odm->ExtTRSW = (u1Byte)Value;
                        break;
+               case    ODM_CMNINFO_EXT_LNA_GAIN:
+                       pDM_Odm->ExtLNAGain = (u1Byte)Value;
+                       break;
                case    ODM_CMNINFO_PATCH_ID:
                        pDM_Odm->PatchID = (u1Byte)Value;
                        break;
                case    ODM_CMNINFO_PATCH_ID:
                        pDM_Odm->PatchID = (u1Byte)Value;
                        break;
@@ -580,6 +767,9 @@ ODM_CmnInfoInit(
                case    ODM_CMNINFO_DOMAIN_CODE_5G:
                        pDM_Odm->odm_Regulation5G = (u1Byte)Value;
                        break;
                case    ODM_CMNINFO_DOMAIN_CODE_5G:
                        pDM_Odm->odm_Regulation5G = (u1Byte)Value;
                        break;
+               case    ODM_CMNINFO_CONFIG_BB_RF:
+                       pDM_Odm->ConfigBBRF = (BOOLEAN)Value;
+                       break;
                case    ODM_CMNINFO_IQKFWOFFLOAD:
                        pDM_Odm->IQKFWOffload = (u1Byte)Value;
                        break;
                case    ODM_CMNINFO_IQKFWOFFLOAD:
                        pDM_Odm->IQKFWOffload = (u1Byte)Value;
                        break;
@@ -700,10 +890,17 @@ ODM_CmnInfoHook(
                        pDM_Odm->DM_DigTable.pbP2pLinkInProgress = (u1Byte *)pValue;
                        break;
 
                        pDM_Odm->DM_DigTable.pbP2pLinkInProgress = (u1Byte *)pValue;
                        break;
 
-               case ODM_CMNINFO_FCS_MODE:
+               case    ODM_CMNINFO_IS1ANTENNA:
+                       pDM_Odm->pIs1Antenna = (BOOLEAN *)pValue;
+                       break;
+                       
+               case    ODM_CMNINFO_RFDEFAULTPATH:
+                       pDM_Odm->pRFDefaultPath= (u1Byte *)pValue;
+                       break;
+
+               case    ODM_CMNINFO_FCS_MODE:
                        pDM_Odm->pIsFcsModeEnable = (BOOLEAN *)pValue;
                        break;
                        pDM_Odm->pIsFcsModeEnable = (BOOLEAN *)pValue;
                        break;
-//sd7 only
 
                //case  ODM_CMNINFO_RTSTA_AID:
                //      pDM_Odm->pAidMap =  (u1Byte *)pValue;
 
                //case  ODM_CMNINFO_RTSTA_AID:
                //      pDM_Odm->pAidMap =  (u1Byte *)pValue;
@@ -751,6 +948,16 @@ ODM_CmnInfoPtrArrayHook(
                //              
                case    ODM_CMNINFO_STA_STATUS:
                        pDM_Odm->pODM_StaInfo[Index] = (PSTA_INFO_T)pValue;
                //              
                case    ODM_CMNINFO_STA_STATUS:
                        pDM_Odm->pODM_StaInfo[Index] = (PSTA_INFO_T)pValue;
+                       
+                       if (IS_STA_VALID(pDM_Odm->pODM_StaInfo[Index]))
+                       #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+                               pDM_Odm->platform2phydm_macid_table[((PSTA_INFO_T)pValue)->AssociatedMacId] = Index; /*AssociatedMacId are unique bttween different Adapter*/
+                       #elif (DM_ODM_SUPPORT_TYPE == ODM_AP)
+                               pDM_Odm->platform2phydm_macid_table[((PSTA_INFO_T)pValue)->aid] = Index;
+                       #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
+                               pDM_Odm->platform2phydm_macid_table[((PSTA_INFO_T)pValue)->mac_id] = Index;
+                       #endif
+                       
                        break;          
                //To remove the compiler warning, must add an empty default statement to handle the other values.                               
                default:
                        break;          
                //To remove the compiler warning, must add an empty default statement to handle the other values.                               
                default:
@@ -799,7 +1006,7 @@ ODM_CmnInfoUpdate(
                case    ODM_CMNINFO_LINK:
                        pDM_Odm->bLinked = (BOOLEAN)Value;
                        break;
                case    ODM_CMNINFO_LINK:
                        pDM_Odm->bLinked = (BOOLEAN)Value;
                        break;
-                       
+
                case    ODM_CMNINFO_STATION_STATE:
                        pDM_Odm->bsta_state = (BOOLEAN)Value;
                        break;
                case    ODM_CMNINFO_STATION_STATE:
                        pDM_Odm->bsta_state = (BOOLEAN)Value;
                        break;
@@ -822,6 +1029,7 @@ ODM_CmnInfoUpdate(
                case    ODM_CMNINFO_RA_THRESHOLD_LOW:
                        pDM_Odm->RateAdaptive.LowRSSIThresh = (u1Byte)Value;
                        break;
                case    ODM_CMNINFO_RA_THRESHOLD_LOW:
                        pDM_Odm->RateAdaptive.LowRSSIThresh = (u1Byte)Value;
                        break;
+#if defined(BT_30_SUPPORT) && (BT_30_SUPPORT == 1)
                // The following is for BT HS mode and BT coexist mechanism.
                case ODM_CMNINFO_BT_ENABLED:
                        pDM_Odm->bBtEnabled = (BOOLEAN)Value;
                // The following is for BT HS mode and BT coexist mechanism.
                case ODM_CMNINFO_BT_ENABLED:
                        pDM_Odm->bBtEnabled = (BOOLEAN)Value;
@@ -843,10 +1051,18 @@ ODM_CmnInfoUpdate(
                        pDM_Odm->bBtLimitedDig = (BOOLEAN)Value;
                        break;  
 
                        pDM_Odm->bBtLimitedDig = (BOOLEAN)Value;
                        break;  
 
+               case ODM_CMNINFO_BT_DIG:
+                       pDM_Odm->btHsDigVal = (u1Byte)Value;
+                       break;
+                       
+               case    ODM_CMNINFO_BT_BUSY:
+                       pDM_Odm->bBtBusy = (BOOLEAN)Value;
+                       break;  
+
                case    ODM_CMNINFO_BT_DISABLE_EDCA:
                        pDM_Odm->bBtDisableEdcaTurbo = (BOOLEAN)Value;
                        break;
                case    ODM_CMNINFO_BT_DISABLE_EDCA:
                        pDM_Odm->bBtDisableEdcaTurbo = (BOOLEAN)Value;
                        break;
-
+#endif
 
 #if(DM_ODM_SUPPORT_TYPE & ODM_AP)              // for repeater mode add by YuChen 2014.06.23
 #ifdef UNIVERSAL_REPEATER
 
 #if(DM_ODM_SUPPORT_TYPE & ODM_AP)              // for repeater mode add by YuChen 2014.06.23
 #ifdef UNIVERSAL_REPEATER
@@ -855,6 +1071,11 @@ ODM_CmnInfoUpdate(
                        break;
 #endif
 #endif
                        break;
 #endif
 #endif
+
+               case    ODM_CMNINFO_AP_TOTAL_NUM:
+                       pDM_Odm->APTotalNum = (u1Byte)Value;
+                       break;
+
 /*
                case    ODM_CMNINFO_OP_MODE:
                        pDM_Odm->OPMode = (u1Byte)Value;
 /*
                case    ODM_CMNINFO_OP_MODE:
                        pDM_Odm->OPMode = (u1Byte)Value;
@@ -897,21 +1118,23 @@ ODM_CmnInfoUpdate(
 VOID
 ODM_InitAllWorkItems(IN PDM_ODM_T      pDM_Odm )
 {
 VOID
 ODM_InitAllWorkItems(IN PDM_ODM_T      pDM_Odm )
 {
-#if USE_WORKITEM
-       PADAPTER                pAdapter = pDM_Odm->Adapter;
 
 
+       PADAPTER                pAdapter = pDM_Odm->Adapter;
+#if USE_WORKITEM
+#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)
        ODM_InitializeWorkItem( pDM_Odm, 
                                                        &pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem_8723B, 
                                                        (RT_WORKITEM_CALL_BACK)ODM_SW_AntDiv_WorkitemCallback,
                                                        (PVOID)pAdapter,
                                                        "AntennaSwitchWorkitem");
        ODM_InitializeWorkItem( pDM_Odm, 
                                                        &pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem_8723B, 
                                                        (RT_WORKITEM_CALL_BACK)ODM_SW_AntDiv_WorkitemCallback,
                                                        (PVOID)pAdapter,
                                                        "AntennaSwitchWorkitem");
-       
+#endif
+       #if ((RTL8192C_SUPPORT == 1) && (defined(CONFIG_SW_ANTENNA_DIVERSITY))) 
        ODM_InitializeWorkItem( pDM_Odm, 
                                                        &pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem, 
                                                        (RT_WORKITEM_CALL_BACK)odm_SwAntDivChkAntSwitchWorkitemCallback,
                                                        (PVOID)pAdapter,
                                                        "AntennaSwitchWorkitem");
        ODM_InitializeWorkItem( pDM_Odm, 
                                                        &pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem, 
                                                        (RT_WORKITEM_CALL_BACK)odm_SwAntDivChkAntSwitchWorkitemCallback,
                                                        (PVOID)pAdapter,
                                                        "AntennaSwitchWorkitem");
-       
+       #endif  
 
        ODM_InitializeWorkItem(
                pDM_Odm,
 
        ODM_InitializeWorkItem(
                pDM_Odm,
@@ -940,16 +1163,14 @@ ODM_InitAllWorkItems(IN PDM_ODM_T        pDM_Odm )
                (RT_WORKITEM_CALL_BACK)ODM_UpdateInitRateWorkItemCallback, 
                (PVOID)pAdapter,
                "RaRptWorkitem");
                (RT_WORKITEM_CALL_BACK)ODM_UpdateInitRateWorkItemCallback, 
                (PVOID)pAdapter,
                "RaRptWorkitem");
-       
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-#if (RTL8188E_SUPPORT == 1)
+
+#if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )
        ODM_InitializeWorkItem(
                pDM_Odm,
                &(pDM_Odm->FastAntTrainingWorkitem), 
                (RT_WORKITEM_CALL_BACK)odm_FastAntTrainingWorkItemCallback, 
                (PVOID)pAdapter,
                "FastAntTrainingWorkitem");
        ODM_InitializeWorkItem(
                pDM_Odm,
                &(pDM_Odm->FastAntTrainingWorkitem), 
                (RT_WORKITEM_CALL_BACK)odm_FastAntTrainingWorkItemCallback, 
                (PVOID)pAdapter,
                "FastAntTrainingWorkitem");
-#endif
 #endif
        ODM_InitializeWorkItem(
                pDM_Odm,
 #endif
        ODM_InitializeWorkItem(
                pDM_Odm,
@@ -957,32 +1178,86 @@ ODM_InitAllWorkItems(IN PDM_ODM_T        pDM_Odm )
                (RT_WORKITEM_CALL_BACK)odm_PSD_RXHPWorkitemCallback, 
                (PVOID)pAdapter,
                "PSDRXHP_WorkItem");  
                (RT_WORKITEM_CALL_BACK)odm_PSD_RXHPWorkitemCallback, 
                (PVOID)pAdapter,
                "PSDRXHP_WorkItem");  
-#endif
+#endif /*#if USE_WORKITEM*/
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_EnterWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_EnterWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_EnterWorkIterm");
+       
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_LeaveWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_LeaveWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_LeaveWorkIterm");
+       
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_FwNdpaWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_FwNdpaWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_FwNdpaWorkIterm");
+
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_ClkWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_ClkWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_ClkWorkIterm");
+
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_RateWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_RateWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_ClkWorkIterm");
+
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_StatusWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_StatusWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_StatusWorkItem");
+
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_ResetTxPathWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_ResetTxPathWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_ResetTxPathWorkItem");
+
+
 }
 
 VOID
 ODM_FreeAllWorkItems(IN PDM_ODM_T      pDM_Odm )
 {
 #if USE_WORKITEM
 }
 
 VOID
 ODM_FreeAllWorkItems(IN PDM_ODM_T      pDM_Odm )
 {
 #if USE_WORKITEM
-       ODM_FreeWorkItem(       &(pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem_8723B));
-       
-       ODM_FreeWorkItem(       &(pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem));
-
+#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)
+       ODM_FreeWorkItem(&(pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem_8723B));
+#endif
+       ODM_FreeWorkItem(&(pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem));
        ODM_FreeWorkItem(&(pDM_Odm->PathDivSwitchWorkitem));      
        ODM_FreeWorkItem(&(pDM_Odm->PathDivSwitchWorkitem));      
-
        ODM_FreeWorkItem(&(pDM_Odm->CCKPathDiversityWorkitem));
        ODM_FreeWorkItem(&(pDM_Odm->CCKPathDiversityWorkitem));
-       
        ODM_FreeWorkItem(&(pDM_Odm->FastAntTrainingWorkitem));
        ODM_FreeWorkItem(&(pDM_Odm->FastAntTrainingWorkitem));
-
        ODM_FreeWorkItem(&(pDM_Odm->MPT_DIGWorkitem));
        ODM_FreeWorkItem(&(pDM_Odm->MPT_DIGWorkitem));
-
        ODM_FreeWorkItem(&(pDM_Odm->RaRptWorkitem));
        ODM_FreeWorkItem(&(pDM_Odm->RaRptWorkitem));
-
        ODM_FreeWorkItem((&pDM_Odm->DM_RXHP_Table.PSDTimeWorkitem));
        ODM_FreeWorkItem((&pDM_Odm->DM_RXHP_Table.PSDTimeWorkitem));
+       ODM_FreeWorkItem((&pDM_Odm->sbdcnt_workitem));
 #endif
 #endif
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_EnterWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_LeaveWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_FwNdpaWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_ClkWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_RateWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_StatusWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_ResetTxPathWorkItem));
+
 
 }
 
 }
-#endif
+#endif /*#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)*/
 
 /*
 VOID
 
 /*
 VOID
@@ -1031,55 +1306,6 @@ odm_IsLinked(
 }
 */
 
 }
 */
 
-
-//3============================================================
-//3 DIG
-//3============================================================
-/*-----------------------------------------------------------------------------
- * Function:   odm_DIGInit()
- *
- * Overview:   Set DIG scheme init value.
- *
- * Input:              NONE
- *
- * Output:             NONE
- *
- * Return:             NONE
- *
- * Revised History:
- *     When            Who             Remark
- *
- *---------------------------------------------------------------------------*/
-
-//Remove DIG by yuchen
-
-//Remove DIG and FA check by Yu Chen
-
-
-//3============================================================
-//3 BB Power Save
-//3============================================================
-
-//Remove BB power saving by Yuchen
-
-//3============================================================
-//3 RATR MASK
-//3============================================================
-//3============================================================
-//3 Rate Adaptive
-//3============================================================
-
-//Remove RAMask by RS_James
-
-//3============================================================
-//3 Dynamic Tx Power
-//3============================================================
-
-//Remove BY YuChen
-
-//Remove  Rssimonitorcheck related function to odm_rssimonitorcheck.c 
-
-
 VOID
 ODM_InitAllTimers(
        IN PDM_ODM_T    pDM_Odm 
 VOID
 ODM_InitAllTimers(
        IN PDM_ODM_T    pDM_Odm 
@@ -1091,25 +1317,34 @@ ODM_InitAllTimers(
        ODM_InitializeTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer,
                (RT_TIMER_CALL_BACK)odm_SwAntDivChkAntSwitchCallback, NULL, "SwAntennaSwitchTimer");
 #endif
        ODM_InitializeTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer,
                (RT_TIMER_CALL_BACK)odm_SwAntDivChkAntSwitchCallback, NULL, "SwAntennaSwitchTimer");
 #endif
-       
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->PSDTimer, 
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+#ifdef MP_TEST
+       if (pDM_Odm->priv->pshare->rf_ft_var.mp_specific) 
+               ODM_InitializeTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer, 
+                       (RT_TIMER_CALL_BACK)odm_MPT_DIGCallback, NULL, "MPT_DIGTimer"); 
+#endif
+#elif(DM_ODM_SUPPORT_TYPE == ODM_WIN)
+       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer, 
+               (RT_TIMER_CALL_BACK)odm_MPT_DIGCallback, NULL, "MPT_DIGTimer");
+#endif
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->PSDTimer, 
                (RT_TIMER_CALL_BACK)dm_PSDMonitorCallback, NULL, "PSDTimer");
                (RT_TIMER_CALL_BACK)dm_PSDMonitorCallback, NULL, "PSDTimer");
-       //
-       //Path Diversity
-       //Neil Chen--2011--06--16--  / 2012/02/23 MH Revise Arch.
-       //
        ODM_InitializeTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 
                (RT_TIMER_CALL_BACK)odm_PathDivChkAntSwitchCallback, NULL, "PathDivTimer");
        ODM_InitializeTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 
                (RT_TIMER_CALL_BACK)odm_PathDivChkAntSwitchCallback, NULL, "PathDivTimer");
-
        ODM_InitializeTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer, 
                (RT_TIMER_CALL_BACK)odm_CCKTXPathDiversityCallback, NULL, "CCKPathDiversityTimer");
        ODM_InitializeTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer, 
                (RT_TIMER_CALL_BACK)odm_CCKTXPathDiversityCallback, NULL, "CCKPathDiversityTimer");
-
-       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer, 
-               (RT_TIMER_CALL_BACK)odm_MPT_DIGCallback, NULL, "MPT_DIGTimer");
-
        ODM_InitializeTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer,
        ODM_InitializeTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer,
-               (RT_TIMER_CALL_BACK)odm_PSD_RXHPCallback, NULL, "PSDRXHPTimer");  
+               (RT_TIMER_CALL_BACK)odm_PSD_RXHPCallback, NULL, "PSDRXHPTimer"); 
+       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->sbdcnt_timer,
+               (RT_TIMER_CALL_BACK)phydm_sbd_callback, NULL, "SbdTimer"); 
+       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_FwNdpaTimer,
+               (RT_TIMER_CALL_BACK)halComTxbf_FwNdpaTimerCallback, NULL, "Txbf_FwNdpaTimer");
+
+       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.BeamformingTimer,
+               (RT_TIMER_CALL_BACK)Beamforming_SWTimerCallback, NULL, "BeamformingTimer");
 #endif 
 }
 
 #endif 
 }
 
@@ -1132,20 +1367,27 @@ ODM_CancelAllTimers(
        ODM_CancelTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer);
 #endif
 
        ODM_CancelTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer);
 #endif
 
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+#ifdef MP_TEST
+       if (pDM_Odm->priv->pshare->rf_ft_var.mp_specific)
+               ODM_CancelTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
+#endif
+#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+       ODM_CancelTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
+#endif
+
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->PSDTimer);   
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->PSDTimer);   
-       //
-       //Path Diversity
-       //Neil Chen--2011--06--16--  / 2012/02/23 MH Revise Arch.
-       //
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer);
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer);
-
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer);
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer);
-
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
-
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer);
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer);
+       ODM_CancelTimer(pDM_Odm, &pDM_Odm->sbdcnt_timer);
+       ODM_CancelTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_FwNdpaTimer);
+       ODM_CancelTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.BeamformingTimer);
 #endif 
 #endif 
+
+
 }
 
 
 }
 
 
@@ -1160,20 +1402,24 @@ ODM_ReleaseAllTimers(
        ODM_ReleaseTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer);
 #endif
 
        ODM_ReleaseTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer);
 #endif
 
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+    #ifdef MP_TEST
+       if (pDM_Odm->priv->pshare->rf_ft_var.mp_specific)
+               ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
+    #endif
+#elif(DM_ODM_SUPPORT_TYPE == ODM_WIN)
+ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
+#endif
 
 
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->PSDTimer);
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->PSDTimer);
-       //
-       //Path Diversity
-       //Neil Chen--2011--06--16--  / 2012/02/23 MH Revise Arch.
-       //
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer);
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer);
-
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer);
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer);
-
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
-
-       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer); 
+       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer);
+       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->sbdcnt_timer);
+       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_FwNdpaTimer);
+       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.BeamformingTimer);
 #endif 
 }
 
 #endif 
 }
 
@@ -1182,157 +1428,30 @@ ODM_ReleaseAllTimers(
 //3 Tx Power Tracking
 //3============================================================
 
 //3 Tx Power Tracking
 //3============================================================
 
-VOID
-odm_IQCalibrate(
-               IN      PDM_ODM_T       pDM_Odm 
-               )
-{
-       PADAPTER        Adapter = pDM_Odm->Adapter;
-
-#if( DM_ODM_SUPPORT_TYPE == ODM_WIN)   
-       if(*pDM_Odm->pIsFcsModeEnable)
-               return;
-#endif
-
-       if(!IS_HARDWARE_TYPE_JAGUAR(Adapter))
-               return;
-       else if(IS_HARDWARE_TYPE_8812AU(Adapter))
-               return;
-#if (RTL8821A_SUPPORT == 1)
-       if(pDM_Odm->bLinked)
-       {
-               if((*pDM_Odm->pChannel != pDM_Odm->preChannel) && (!*pDM_Odm->pbScanInProcess))
-               {
-                       pDM_Odm->preChannel = *pDM_Odm->pChannel;
-                       pDM_Odm->LinkedInterval = 0;
-               }
-
-               if(pDM_Odm->LinkedInterval < 3)
-                       pDM_Odm->LinkedInterval++;
-               
-               if(pDM_Odm->LinkedInterval == 2)
-               {
-                       // Mark out IQK flow to prevent tx stuck. by Maddest 20130306
-                       // Open it verified by James 20130715
-                       PHY_IQCalibrate_8821A(pDM_Odm, FALSE);
-               }
-       }
-       else
-               pDM_Odm->LinkedInterval = 0;
-#endif
-}
-
-
-
-//antenna mapping info
-// 1: right-side antenna
-// 2/0: left-side antenna
-//PDM_SWAT_Table->CCK_Ant1_Cnt /OFDM_Ant1_Cnt:  for right-side antenna:   Ant:1    RxDefaultAnt1
-//PDM_SWAT_Table->CCK_Ant2_Cnt /OFDM_Ant2_Cnt:  for left-side antenna:     Ant:0    RxDefaultAnt2
-// We select left antenna as default antenna in initial process, modify it as needed
-//
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-// Only for 8723A SW ANT DIV INIT--2012--07--17
-VOID
-odm_SwAntDivInit_NIC_8723A(
-       IN      PDM_ODM_T               pDM_Odm)
-{
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       PADAPTER                Adapter = pDM_Odm->Adapter;
-       
-       u1Byte                  btAntNum=BT_GetPgAntNum(Adapter);
-
-       if(IS_HARDWARE_TYPE_8723A(Adapter))
-       {
-               pDM_SWAT_Table->ANTA_ON =TRUE;
-               
-               // Set default antenna B status by PG
-               if(btAntNum == 2)
-                       pDM_SWAT_Table->ANTB_ON = TRUE;
-               else if(btAntNum == 1)
-                       pDM_SWAT_Table->ANTB_ON = FALSE;
-               else
-                       pDM_SWAT_Table->ANTB_ON = TRUE;
-       }       
-       
-}
-
-#endif //end #ifMP
-
 
 
 
 
-//3============================================================
-//3 SW Antenna Diversity
-//3============================================================
 
 
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
 VOID
 VOID
-odm_AntennaDiversityInit(
-       IN              PDM_ODM_T               pDM_Odm 
-)
+ODM_InitAllThreads(
+       IN PDM_ODM_T    pDM_Odm 
+       )
 {
 {
-       if(pDM_Odm->mp_mode == TRUE)
-               return;
-
-       if(pDM_Odm->SupportICType & (ODM_OLD_IC_ANTDIV_SUPPORT))
-       {
-               #if (RTL8192C_SUPPORT==1) 
-               ODM_OldIC_AntDiv_Init(pDM_Odm);
-               #endif
-       }
-       else
-       {
-               #if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-               ODM_AntDiv_Config(pDM_Odm);
-               ODM_AntDivInit(pDM_Odm);
-               #endif
-       }
+       #ifdef TPT_THREAD
+       kTPT_task_init(pDM_Odm->priv);
+       #endif
 }
 
 VOID
 }
 
 VOID
-odm_AntennaDiversity(
-       IN              PDM_ODM_T               pDM_Odm 
-)
-{
-       if(pDM_Odm->mp_mode == TRUE)
-               return;
-
-       if(pDM_Odm->SupportICType & (ODM_OLD_IC_ANTDIV_SUPPORT))
-       {
-               #if (RTL8192C_SUPPORT==1) 
-               ODM_OldIC_AntDiv(pDM_Odm);
-               #endif
-       }
-       else
-       {
-               #if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-               ODM_AntDiv(pDM_Odm);
-               #endif
-       }
-}
-
-
-void
-odm_SwAntDetectInit(
-       IN              PDM_ODM_T               pDM_Odm
+ODM_StopAllThreads(
+       IN PDM_ODM_T    pDM_Odm 
        )
 {
        )
 {
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-#if (RTL8723B_SUPPORT == 1)
-       pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c = ODM_Read4Byte(pDM_Odm, rDPDT_control);
-#endif
-       pDM_SWAT_Table->PreAntenna = MAIN_ANT;
-       pDM_SWAT_Table->CurAntenna = MAIN_ANT;
-       pDM_SWAT_Table->SWAS_NoLink_State = 0;
+       #ifdef TPT_THREAD
+       kTPT_task_stop(pDM_Odm->priv);
+       #endif
 }
 }
-
-
-//============================================================
-//EDCA Turbo
-//============================================================
-
-//Remove Edca by Yuchen
+#endif 
 
 
 #if( DM_ODM_SUPPORT_TYPE == ODM_WIN) 
 
 
 #if( DM_ODM_SUPPORT_TYPE == ODM_WIN) 
@@ -1352,7 +1471,7 @@ ODM_CheckPowerStatus(
        // 2011/07/27 MH We are not testing ready~~!! We may fail to get correct value when init sequence.
        if (pMgntInfo->init_adpt_in_progress == TRUE)
        {
        // 2011/07/27 MH We are not testing ready~~!! We may fail to get correct value when init sequence.
        if (pMgntInfo->init_adpt_in_progress == TRUE)
        {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ODM_CheckPowerStatus Return TRUE, due to initadapter"));
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ODM_CheckPowerStatus Return TRUE, due to initadapter\n"));
                return  TRUE;
        }
        
                return  TRUE;
        }
        
@@ -1368,6 +1487,37 @@ ODM_CheckPowerStatus(
        }
        return  TRUE;
 }
        }
        return  TRUE;
 }
+#elif( DM_ODM_SUPPORT_TYPE == ODM_AP)
+BOOLEAN
+ODM_CheckPowerStatus(
+               IN      PADAPTER                Adapter)
+{
+       /*
+          HAL_DATA_TYPE                *pHalData = GET_HAL_DATA(Adapter);
+          PDM_ODM_T                    pDM_Odm = &pHalData->DM_OutSrc;
+          RT_RF_POWER_STATE    rtState;
+          PMGNT_INFO                   pMgntInfo       = &(Adapter->MgntInfo);
+
+       // 2011/07/27 MH We are not testing ready~~!! We may fail to get correct value when init sequence.
+       if (pMgntInfo->init_adpt_in_progress == TRUE)
+       {
+       ODM_RT_TRACE(pDM_Odm,COMP_INIT, DBG_LOUD, ("ODM_CheckPowerStatus Return TRUE, due to initadapter"));
+       return  TRUE;
+       }
+
+       //
+       //      2011/07/19 MH We can not execute tx pwoer tracking/ LLC calibrate or IQK.
+       //
+       Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState));        
+       if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep || rtState == eRfOff)
+       {
+       ODM_RT_TRACE(pDM_Odm,COMP_INIT, DBG_LOUD, ("ODM_CheckPowerStatus Return FALSE, due to %d/%d/%d\n", 
+       Adapter->bDriverStopped, Adapter->bDriverIsGoingToPnpSetPowerSleep, rtState));
+       return  FALSE;
+       }
+        */
+       return  TRUE;
+}
 #endif
 
 // need to ODM CE Platform
 #endif
 
 // need to ODM CE Platform
@@ -1406,7 +1556,7 @@ GetPSDData(
        psd_report = ODM_GetBBReg(pDM_Odm,0x8B4, bMaskDWord) & 0x0000FFFF;
        
 #if 1//(DEV_BUS_TYPE == RT_PCI_INTERFACE) && ( (RT_PLATFORM == PLATFORM_LINUX) || (RT_PLATFORM == PLATFORM_MACOSX))
        psd_report = ODM_GetBBReg(pDM_Odm,0x8B4, bMaskDWord) & 0x0000FFFF;
        
 #if 1//(DEV_BUS_TYPE == RT_PCI_INTERFACE) && ( (RT_PLATFORM == PLATFORM_LINUX) || (RT_PLATFORM == PLATFORM_MACOSX))
-       psd_report = (u4Byte) (ConvertTo_dB(psd_report))+(u4Byte)(initial_gain_psd-0x1c);
+       psd_report = (u4Byte) (odm_ConvertTo_dB(psd_report))+(u4Byte)(initial_gain_psd-0x1c);
 #else
        psd_report = (int) (20*log10((double)psd_report))+(int)(initial_gain_psd-0x1c);
 #endif
 #else
        psd_report = (int) (20*log10((double)psd_report))+(int)(initial_gain_psd-0x1c);
 #endif
@@ -1414,9 +1564,10 @@ GetPSDData(
        return psd_report;
        
 }
        return psd_report;
        
 }
+#endif
 
 u4Byte 
 
 u4Byte 
-ConvertTo_dB(
+odm_ConvertTo_dB(
        u4Byte  Value)
 {
        u1Byte i;
        u4Byte  Value)
 {
        u1Byte i;
@@ -1424,21 +1575,21 @@ ConvertTo_dB(
        u4Byte dB;
 
        Value = Value & 0xFFFF;
        u4Byte dB;
 
        Value = Value & 0xFFFF;
-       
-       for (i=0;i<8;i++)
+
+       for (i = 0; i < 12; i++)
        {
        {
-               if (Value <= dB_Invert_Table[i][11])
+               if (Value <= dB_Invert_Table[i][7])
                {
                        break;
                }
        }
 
                {
                        break;
                }
        }
 
-       if (i >= 8)
+       if (i >= 12)
        {
                return (96);    // maximum 96 dB
        }
 
        {
                return (96);    // maximum 96 dB
        }
 
-       for (j=0;j<12;j++)
+       for (j = 0; j < 8; j++)
        {
                if (Value <= dB_Invert_Table[i][j])
                {
        {
                if (Value <= dB_Invert_Table[i][j])
                {
@@ -1446,673 +1597,27 @@ ConvertTo_dB(
                }
        }
 
                }
        }
 
-       dB = i*12 + j + 1;
+       dB = (i << 3) + j + 1;
 
        return (dB);
 }
 
 
        return (dB);
 }
 
-#endif
-
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN| ODM_CE))
-
-VOID
-odm_PHY_SaveAFERegisters(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      pu4Byte         AFEReg,
-       IN      pu4Byte         AFEBackup,
-       IN      u4Byte          RegisterNum
-       )
-{
-       u4Byte  i;
-       
-       //RT_DISP(FINIT, INIT_IQK, ("Save ADDA parameters.\n"));
-       for( i = 0 ; i < RegisterNum ; i++){
-               AFEBackup[i] = ODM_GetBBReg(pDM_Odm, AFEReg[i], bMaskDWord);
-       }
-}
-
-VOID
-odm_PHY_ReloadAFERegisters(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      pu4Byte         AFEReg,
-       IN      pu4Byte         AFEBackup,
-       IN      u4Byte          RegiesterNum
-       )
-{
-       u4Byte  i;
-
-       //RT_DISP(FINIT, INIT_IQK, ("Reload ADDA power saving parameters !\n"));
-       for(i = 0 ; i < RegiesterNum; i++)
-       {
-       
-               ODM_SetBBReg(pDM_Odm, AFEReg[i], bMaskDWord, AFEBackup[i]);
-       }
-}
-
-//
-// Description:
-//     Set Single/Dual Antenna default setting for products that do not do detection in advance.
-//
-// Added by Joseph, 2012.03.22
-//
-VOID
-ODM_SingleDualAntennaDefaultSetting(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       PADAPTER        pAdapter         =  pDM_Odm->Adapter;
-       u1Byte btAntNum = 2;
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
-       btAntNum=BT_GetPgAntNum(pAdapter);
-#elif (DM_ODM_SUPPORT_TYPE & (ODM_CE))
-#ifdef CONFIG_BT_COEXIST
-       btAntNum = hal_btcoex_GetPgAntNum(pAdapter);
-#endif
-#endif
-
-       // Set default antenna A and B status
-       if(btAntNum == 2)
-       {
-               pDM_SWAT_Table->ANTA_ON=TRUE;
-               pDM_SWAT_Table->ANTB_ON=TRUE;
-               //RT_TRACE(COMP_ANTENNA, DBG_LOUD, ("Dual antenna\n"));
-       }
-#ifdef CONFIG_BT_COEXIST
-       else if(btAntNum == 1)
-       {// Set antenna A as default
-               pDM_SWAT_Table->ANTA_ON=TRUE;
-               pDM_SWAT_Table->ANTB_ON=FALSE;
-               //RT_TRACE(COMP_ANTENNA, DBG_LOUD, ("Single antenna\n"));
-       }
-       else
-       {
-               //RT_ASSERT(FALSE, ("Incorrect antenna number!!\n"));
-       }
-#endif
-}
-
-
-
-//2 8723A ANT DETECT
-//
-// Description:
-//     Implement IQK single tone for RF DPK loopback and BB PSD scanning. 
-//     This function is cooperated with BB team Neil. 
-//
-// Added by Roger, 2011.12.15
-//
-BOOLEAN
-ODM_SingleDualAntennaDetection(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              u1Byte                  mode
-       )
-{
-       PADAPTER        pAdapter         =  pDM_Odm->Adapter;
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       u4Byte          CurrentChannel,RfLoopReg;
-       u1Byte          n;
-       u4Byte          Reg88c, Regc08, Reg874, Regc50, Reg948=0, Regb2c=0, Reg92c=0, AFE_rRx_Wait_CCA=0;
-       u1Byte          initial_gain = 0x5a;
-       u4Byte          PSD_report_tmp;
-       u4Byte          AntA_report = 0x0, AntB_report = 0x0,AntO_report=0x0;
-       BOOLEAN         bResult = TRUE;
-       u4Byte          AFE_Backup[16];
-       u4Byte          AFE_REG_8723A[16] = {
-                                       rRx_Wait_CCA,   rTx_CCK_RFON, 
-                                       rTx_CCK_BBON,   rTx_OFDM_RFON,
-                                       rTx_OFDM_BBON,  rTx_To_Rx,
-                                       rTx_To_Tx,              rRx_CCK, 
-                                       rRx_OFDM,               rRx_Wait_RIFS, 
-                                       rRx_TO_Rx,              rStandby,
-                                       rSleep,                 rPMPD_ANAEN,    
-                                       rFPGA0_XCD_SwitchControl, rBlue_Tooth};
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection()============> \n"));     
-
-       
-       if(!(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C|ODM_RTL8723B)))
-               return bResult;
-
-       // Retrieve antenna detection registry info, added by Roger, 2012.11.27.
-       if(!IS_ANT_DETECT_SUPPORT_SINGLE_TONE(pAdapter))
-               return bResult;
-
-       if(pDM_Odm->SupportICType == ODM_RTL8192C)
-       {
-               //Which path in ADC/DAC is turnned on for PSD: both I/Q
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT10|BIT11, 0x3);
-               //Ageraged number: 8
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT12|BIT13, 0x1);
-               //pts = 128;
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x0);
-       }
-
-       //1 Backup Current RF/BB Settings       
-       
-       CurrentChannel = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, ODM_CHANNEL, bRFRegOffsetMask);
-       RfLoopReg = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x00, bRFRegOffsetMask);
-       if(!(pDM_Odm->SupportICType == ODM_RTL8723B))
-       ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_A);  // change to Antenna A
-#if (RTL8723B_SUPPORT == 1)
-       else
-       {
-               Reg92c = ODM_GetBBReg(pDM_Odm, 0x92c, bMaskDWord);
-               Reg948 = ODM_GetBBReg(pDM_Odm, rS0S1_PathSwitch, bMaskDWord);
-               Regb2c = ODM_GetBBReg(pDM_Odm, AGC_table_select, bMaskDWord);
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, 0x3, 0x1);
-               ODM_SetBBReg(pDM_Odm, rfe_ctrl_anta_src, 0xff, 0x77);
-               ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, 0x3ff, 0x000);
-               ODM_SetBBReg(pDM_Odm, AGC_table_select, BIT31, 0x0);
-       }
-#endif
-       ODM_StallExecution(10);
-       
-       //Store A Path Register 88c, c08, 874, c50
-       Reg88c = ODM_GetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord);
-       Regc08 = ODM_GetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord);
-       Reg874 = ODM_GetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord);
-       Regc50 = ODM_GetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskDWord);  
-       
-       // Store AFE Registers
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       odm_PHY_SaveAFERegisters(pDM_Odm, AFE_REG_8723A, AFE_Backup, 16);       
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               AFE_rRx_Wait_CCA = ODM_GetBBReg(pDM_Odm, rRx_Wait_CCA,bMaskDWord);
-       
-       //Set PSD 128 pts
-       ODM_SetBBReg(pDM_Odm, rFPGA0_PSDFunction, BIT14|BIT15, 0x0);  //128 pts
-       
-       // To SET CH1 to do
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, ODM_CHANNEL, bRFRegOffsetMask, 0x7401);     //Channel 1
-       
-       // AFE all on step
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       {
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_CCK_RFON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_CCK_BBON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_OFDM_RFON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_OFDM_BBON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_To_Rx, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_To_Tx, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_CCK, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_OFDM, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_RIFS, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_TO_Rx, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rStandby, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rSleep, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rPMPD_ANAEN, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_SwitchControl, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rBlue_Tooth, bMaskDWord, 0x6FDB25A4);
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-       {
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, 0x01c00016);
-       }
-
-       // 3 wire Disable
-       ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord, 0xCCF000C0);
-       
-       //BB IQK Setting
-       ODM_SetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord, 0x000800E4);
-       ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, 0x22208000);
-
-       //IQK setting tone@ 4.34Mhz
-       ODM_SetBBReg(pDM_Odm, rTx_IQK_Tone_A, bMaskDWord, 0x10008C1C);
-       ODM_SetBBReg(pDM_Odm, rTx_IQK, bMaskDWord, 0x01007c00); 
-
-       //Page B init
-       ODM_SetBBReg(pDM_Odm, rConfig_AntA, bMaskDWord, 0x00080000);
-       ODM_SetBBReg(pDM_Odm, rConfig_AntA, bMaskDWord, 0x0f600000);
-       ODM_SetBBReg(pDM_Odm, rRx_IQK, bMaskDWord, 0x01004800);
-       ODM_SetBBReg(pDM_Odm, rRx_IQK_Tone_A, bMaskDWord, 0x10008c1f);
-       ODM_SetBBReg(pDM_Odm, rTx_IQK_PI_A, bMaskDWord, 0x82150008);
-       ODM_SetBBReg(pDM_Odm, rRx_IQK_PI_A, bMaskDWord, 0x28150008);
-       ODM_SetBBReg(pDM_Odm, rIQK_AGC_Rsp, bMaskDWord, 0x001028d0);    
-
-       //RF loop Setting
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x0, 0xFFFFF, 0x50008);    
-       
-       //IQK Single tone start
-       ODM_SetBBReg(pDM_Odm, rFPGA0_IQK, bMaskH3Bytes, 0x808000);
-       ODM_SetBBReg(pDM_Odm, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
-       ODM_SetBBReg(pDM_Odm, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-       
-       ODM_StallExecution(10000);
-
-       // PSD report of antenna A
-       PSD_report_tmp=0x0;
-       for (n=0;n<2;n++)
-       {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);        
-               if(PSD_report_tmp >AntA_report)
-                       AntA_report=PSD_report_tmp;
-       }
-
-        // change to Antenna B
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_B); 
-#if (RTL8723B_SUPPORT == 1)
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, 0x3, 0x2);
-#endif
-
-       ODM_StallExecution(10); 
-
-       // PSD report of antenna B
-       PSD_report_tmp=0x0;
-       for (n=0;n<2;n++)
-       {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);        
-               if(PSD_report_tmp > AntB_report)
-                       AntB_report=PSD_report_tmp;
-       }
-
-       // change to open case
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, 0);  // change to Antenna A
-#if (RTL8723B_SUPPORT == 1)
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, 0x3, 0x0);
-#endif
-
-       ODM_StallExecution(10); 
-       
-       // PSD report of open case
-       PSD_report_tmp=0x0;
-       for (n=0;n<2;n++)
-       {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);        
-               if(PSD_report_tmp > AntO_report)
-                       AntO_report=PSD_report_tmp;
-       }
-
-       //Close IQK Single Tone function
-       ODM_SetBBReg(pDM_Odm, rFPGA0_IQK, bMaskH3Bytes, 0x000000);      
-
-       //1 Return to antanna A
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_A);  // change to Antenna A
-#if (RTL8723B_SUPPORT == 1)
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-       {
-               // external DPDT
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, bMaskDWord, Reg92c);
-
-               //internal S0/S1
-               ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, bMaskDWord, Reg948);
-               ODM_SetBBReg(pDM_Odm, AGC_table_select, bMaskDWord, Regb2c);
-       }
-#endif
-       ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord, Reg88c);
-       ODM_SetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord, Regc08);
-       ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, Reg874);
-       ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, 0x7F, 0x40);
-       ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskDWord, Regc50);
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask,CurrentChannel);
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x00, bRFRegOffsetMask,RfLoopReg);
-
-       //Reload AFE Registers
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       odm_PHY_ReloadAFERegisters(pDM_Odm, AFE_REG_8723A, AFE_Backup, 16);     
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, AFE_rRx_Wait_CCA);
-
-       if(pDM_Odm->SupportICType == ODM_RTL8723A)
-       {
-               //2 Test Ant B based on Ant A is ON
-               if(mode==ANTTESTB)
-               {
-                       if(AntA_report >=       100)
-                       {
-                               if(AntB_report > (AntA_report+1))
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));         
-                               }       
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Dual Antenna is A and B\n"));  
-                               }       
-                       }
-                       else
-                       {
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                               pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                               bResult = FALSE;
-                       }
-               }       
-               //2 Test Ant A and B based on DPDT Open
-               else if(mode==ANTTESTALL)
-               {
-                       if((AntO_report >=100) && (AntO_report <=118))
-                       {
-                               if(AntA_report > (AntO_report+1))
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant A is OFF\n"));
-                               }       
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant A is ON\n"));
-                               }
-
-                               if(AntB_report > (AntO_report+2))
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant B is OFF\n"));
-                               }       
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant B is ON\n"));
-                               }
-                               
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_A[%d]= %d \n", 2416, AntA_report));   
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_B[%d]= %d \n", 2416, AntB_report));   
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_O[%d]= %d \n", 2416, AntO_report));
-                               
-                               pDM_Odm->AntDetectedInfo.bAntDetected= TRUE;
-                               pDM_Odm->AntDetectedInfo.dBForAntA = AntA_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntB = AntB_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntO = AntO_report;
-                               
-                               }
-                       else
-                               {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("return FALSE!!\n"));
-                               bResult = FALSE;
-                       }
-               }
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8192C)
-       {
-               if(AntA_report >=       100)
-               {
-                       if(AntB_report > (AntA_report+2))
-                       {
-                               pDM_SWAT_Table->ANTA_ON=FALSE;
-                               pDM_SWAT_Table->ANTB_ON=TRUE;
-                               ODM_SetBBReg(pDM_Odm,  rFPGA0_XA_RFInterfaceOE, 0x300, Antenna_B);
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna B\n"));         
-                       }       
-                       else if(AntA_report > (AntB_report+2))
-                       {
-                               pDM_SWAT_Table->ANTA_ON=TRUE;
-                               pDM_SWAT_Table->ANTB_ON=FALSE;
-                               ODM_SetBBReg(pDM_Odm,  rFPGA0_XA_RFInterfaceOE, 0x300, Antenna_A);
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));
-                       }       
-                       else
-                       {
-                               pDM_SWAT_Table->ANTA_ON=TRUE;
-                               pDM_SWAT_Table->ANTB_ON=TRUE;
-                               RT_TRACE(COMP_ANTENNA, DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Dual Antenna \n"));
-                       }
-               }
-               else
-               {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                       pDM_SWAT_Table->ANTA_ON=TRUE; // Set Antenna A on as default 
-                       pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                       bResult = FALSE;
-               }
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_A[%d]= %d \n", 2416, AntA_report));   
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_B[%d]= %d \n", 2416, AntB_report));   
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_O[%d]= %d \n", 2416, AntO_report));
-               
-               //2 Test Ant B based on Ant A is ON
-               if(mode==ANTTESTB)
-               {
-                       if(AntA_report >=100 && AntA_report <= 116)
-                       {
-                               if(AntB_report >= (AntA_report+4) && AntB_report > 116)
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));         
-                               }       
-                               else if(AntB_report >=100 && AntB_report <= 116)
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Dual Antenna is A and B\n"));  
-                               }
-                               else
-                               {
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                                       pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                                       bResult = FALSE;
-                               }
-                       }
-                       else
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                               pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                               bResult = FALSE;
-                       }
-               }       
-               //2 Test Ant A and B based on DPDT Open
-               else if(mode==ANTTESTALL)
-               {
-                       if((AntA_report >= 100) && (AntB_report >= 100) && (AntA_report <= 120) && (AntB_report <= 120))
-                       {
-                               if((AntA_report - AntB_report < 2) || (AntB_report - AntA_report < 2))
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=TRUE;
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SingleDualAntennaDetection(): Dual Antenna\n"));
-                               }
-                               else if(((AntA_report - AntB_report >= 2) && (AntA_report - AntB_report <= 4)) || 
-                                       ((AntB_report - AntA_report >= 2) && (AntB_report - AntA_report <= 4)))
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=FALSE;
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       bResult = FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                               }
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTA_ON = TRUE;
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));
-                               }
-                               
-                               pDM_Odm->AntDetectedInfo.bAntDetected= TRUE;
-                               pDM_Odm->AntDetectedInfo.dBForAntA = AntA_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntB = AntB_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntO = AntO_report;
-                               
-                       }
-                       else
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("return FALSE!!\n"));
-                               bResult = FALSE;
-                       }
-               }
-       }
-               
-       return bResult;
-
-}
-
-
-#endif   // end odm_CE
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN| ODM_CE))
-
-VOID
-odm_Set_RA_DM_ARFB_by_Noisy(
-       IN      PDM_ODM_T       pDM_Odm
-)
-{
-       //DbgPrint("DM_ARFB ====> \n");
-       if (pDM_Odm->bNoisyState){
-               ODM_Write4Byte(pDM_Odm,0x430,0x00000000);
-               ODM_Write4Byte(pDM_Odm,0x434,0x05040200);
-               //DbgPrint("DM_ARFB ====> Noisy State\n");
-       }
-       else{
-               ODM_Write4Byte(pDM_Odm,0x430,0x02010000);
-               ODM_Write4Byte(pDM_Odm,0x434,0x07050403);
-               //DbgPrint("DM_ARFB ====> Clean State\n");
-       }
-       
-}
-
-VOID
-ODM_UpdateNoisyState(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      BOOLEAN         bNoisyStateFromC2H
-       )
-{
-       //DbgPrint("Get C2H Command! NoisyState=0x%x\n ", bNoisyStateFromC2H);
-       if(pDM_Odm->SupportICType == ODM_RTL8821  || pDM_Odm->SupportICType == ODM_RTL8812  || 
-          pDM_Odm->SupportICType == ODM_RTL8723B || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8188E)
-       {
-               pDM_Odm->bNoisyState = bNoisyStateFromC2H;
-       }
-       odm_Set_RA_DM_ARFB_by_Noisy(pDM_Odm);
-};
-
-u4Byte
-Set_RA_DM_Ratrbitmap_by_Noisy(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      WIRELESS_MODE   WirelessMode,
-       IN      u4Byte                  ratr_bitmap,
-       IN      u1Byte                  rssi_level
-)
+u4Byte 
+odm_ConvertTo_linear(
+       u4Byte  Value)
 {
 {
-       u4Byte ret_bitmap = ratr_bitmap;
-       switch (WirelessMode)
-       {
-               case WIRELESS_MODE_AC_24G :
-               case WIRELESS_MODE_AC_5G :
-               case WIRELESS_MODE_AC_ONLY:
-                       if (pDM_Odm->bNoisyState){ // in Noisy State
-                               if (rssi_level==1)
-                                       ret_bitmap&=0xfe3f0e08;
-                               else if (rssi_level==2)
-                                       ret_bitmap&=0xff3f8f8c;
-                               else if (rssi_level==3)
-                                       ret_bitmap&=0xffffffcc ;
-                               else
-                                       ret_bitmap&=0xffffffff ;
-                       }
-                       else{                                   // in SNR State
-                               if (rssi_level==1){
-                                       ret_bitmap&=0xfc3e0c08;
-                               }
-                               else if (rssi_level==2){
-                                       ret_bitmap&=0xfe3f0e08;
-                               }
-                               else if (rssi_level==3){
-                                       ret_bitmap&=0xffbfefcc;
-                               }
-                               else{
-                                       ret_bitmap&=0x0fffffff;
-                               }
-                       }
-                       break;
-               case WIRELESS_MODE_B:
-               case WIRELESS_MODE_A:
-               case WIRELESS_MODE_G:
-               case WIRELESS_MODE_N_24G:
-               case WIRELESS_MODE_N_5G:
-                       if (pDM_Odm->bNoisyState){
-                               if (rssi_level==1)
-                                       ret_bitmap&=0x0f0e0c08;
-                               else if (rssi_level==2)
-                                       ret_bitmap&=0x0f8f0e0c;
-                               else if (rssi_level==3)
-                                       ret_bitmap&=0x0fefefcc ;
-                               else
-                                       ret_bitmap&=0xffffffff ;
-                       }
-                       else{
-                               if (rssi_level==1){
-                                       ret_bitmap&=0x0f8f0e08;
-                               }
-                               else if (rssi_level==2){
-                                       ret_bitmap&=0x0fcf8f8c;
-                               }
-                               else if (rssi_level==3){
-                                       ret_bitmap&=0x0fffffcc;
-                               }
-                               else{
-                                       ret_bitmap&=0x0fffffff;
-                               }
-                       }
-                       break;
-               default:
-                       break;
-       }
-       //DbgPrint("DM_RAMask ====> rssi_LV = %d, BITMAP = %x \n", rssi_level, ret_bitmap);
-       return ret_bitmap;
-
-}
+       u1Byte i;
+       u1Byte j;
+       u4Byte linear;
 
 
+       Value = Value & 0xFF;
 
 
+       i = (u1Byte)((Value - 1) >> 3);
+       j = (u1Byte)(Value-1) - (i << 3);
 
 
-VOID
-ODM_UpdateInitRate(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      u1Byte          Rate
-       )
-{
-       u1Byte                  p = 0;
+       linear = dB_Invert_Table[i][j];
 
 
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("Get C2H Command! Rate=0x%x\n", Rate));
-       
-       if(pDM_Odm->SupportICType == ODM_RTL8821  || pDM_Odm->SupportICType == ODM_RTL8812  || 
-          pDM_Odm->SupportICType == ODM_RTL8723B || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8188E)
-       {
-               pDM_Odm->TxRate = Rate;
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       #if DEV_BUS_TYPE==RT_PCI_INTERFACE
-               #if USE_WORKITEM
-               PlatformScheduleWorkItem(&pDM_Odm->RaRptWorkitem);
-               #else
-               if(pDM_Odm->SupportICType == ODM_RTL8821)
-               {
-                       ODM_TxPwrTrackSetPwr8821A(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8812)
-               {
-                       for (p = ODM_RF_PATH_A; p < MAX_PATH_NUM_8812A; p++)            
-                       {
-                               ODM_TxPwrTrackSetPwr8812A(pDM_Odm, MIX_MODE, p, 0);
-                       }
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               {
-                       ODM_TxPwrTrackSetPwr_8723B(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8192E)
-               {
-                       for (p = ODM_RF_PATH_A; p < MAX_PATH_NUM_8192E; p++)            
-                       {
-                               ODM_TxPwrTrackSetPwr92E(pDM_Odm, MIX_MODE, p, 0);
-                       }
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8188E)
-               {
-                       ODM_TxPwrTrackSetPwr88E(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-               }
-               #endif
-       #else
-               PlatformScheduleWorkItem(&pDM_Odm->RaRptWorkitem);
-       #endif  
-#endif
-       }
-       else
-               return;
+       return (linear);
 }
 
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
 }
 
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
@@ -2155,7 +1660,6 @@ ODM_UpdateInitRateWorkItemCallback(
        }
 }
 #endif
        }
 }
 #endif
-#endif
 
 //
 // ODM multi-port consideration, added by Roger, 2013.10.01.
 
 //
 // ODM multi-port consideration, added by Roger, 2013.10.01.
@@ -2395,3 +1899,46 @@ odm_UpdatePowerTrainingState(
 #endif
 }
 
 #endif
 }
 
+
+
+/*===========================================================*/
+/* The following is for compile only*/
+/*===========================================================*/
+/*#define TARGET_CHNL_NUM_2G_5G        59*/
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+
+u1Byte GetRightChnlPlaceforIQK(u1Byte chnl)
+{
+       u1Byte  channel_all[TARGET_CHNL_NUM_2G_5G] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 100, 
+               102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 149, 151, 153, 155, 157, 159, 161, 163, 165};
+       u1Byte  place = chnl;
+
+       
+       if (chnl > 14) {
+               for (place = 14; place < sizeof(channel_all); place++) {
+                       if (channel_all[place] == chnl)
+                               return place-13;
+               }
+       }
+       
+       return 0;
+}
+
+VOID
+FillH2CCmd92C( 
+       IN      PADAPTER                Adapter,
+       IN      u1Byte  ElementID,
+       IN      u4Byte  CmdLen,
+       IN      pu1Byte pCmdBuffer
+)
+{}
+VOID
+PHY_SetTxPowerLevel8192C(
+       IN      PADAPTER                Adapter,
+       IN      u1Byte                  channel
+       )
+{
+}
+#endif
+/*===========================================================*/
+
index 3a50704ce852797f160e30b0dcf0601774e54691..d6aa4b4d2d841c5760b8ce098c1a3edf1f47cdab 100755 (executable)
 //============================================================\r
 // include files\r
 //============================================================\r
 //============================================================\r
 // include files\r
 //============================================================\r
+#include "phydm_pre_define.h"\r
 #include "phydm_DIG.h"\r
 #include "phydm_EdcaTurboCheck.h"\r
 #include "phydm_PathDiv.h"\r
 #include "phydm_DIG.h"\r
 #include "phydm_EdcaTurboCheck.h"\r
 #include "phydm_PathDiv.h"\r
+#include "phydm_AntDiv.h"\r
+#include "phydm_AntDect.h"\r
 #include "phydm_DynamicBBPowerSaving.h"\r
 #include "phydm_RaInfo.h"\r
 #include "phydm_DynamicTxPower.h"\r
 #include "phydm_DynamicBBPowerSaving.h"\r
 #include "phydm_RaInfo.h"\r
 #include "phydm_DynamicTxPower.h"\r
 #include "phydm_ACS.h"\r
 #include "phydm_PowerTracking.h"\r
 #include "PhyDM_Adaptivity.h"\r
 #include "phydm_ACS.h"\r
 #include "phydm_PowerTracking.h"\r
 #include "PhyDM_Adaptivity.h"\r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_AP))\r
+#if (RTL8814A_SUPPORT == 1)\r
+#include "rtl8814a/PhyDM_IQK_8814A.h"\r
+#endif\r
+#endif\r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_CE))\r
 #include "phydm_NoiseMonitor.h"\r
 #include "phydm_NoiseMonitor.h"\r
+#endif\r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
+#include "phydm_beamforming.h"\r
 #include "phydm_RXHP.h"\r
 #endif\r
 \r
 #include "phydm_RXHP.h"\r
 #endif\r
 \r
 //\r
 \r
 \r
 //\r
 \r
 \r
-\r
-//\r
-// Antenna Switch Relative Definition.\r
-//\r
-\r
-//\r
-// 20100503 Joseph:\r
-// Add new function SwAntDivCheck8192C().\r
-// This is the main function of Antenna diversity function before link.\r
-// Mainly, it just retains last scan result and scan again.\r
-// After that, it compares the scan result to see which one gets better RSSI.\r
-// It selects antenna with better receiving power and returns better scan result.\r
-//\r
+//For SW AntDiv, PathDiv, 8192C AntDiv joint use\r
 #define        TP_MODE         0\r
 #define        RSSI_MODE               1\r
 #define        TP_MODE         0\r
 #define        RSSI_MODE               1\r
+\r
 #define        TRAFFIC_LOW     0\r
 #define        TRAFFIC_HIGH    1\r
 #define        TRAFFIC_LOW     0\r
 #define        TRAFFIC_HIGH    1\r
+#define        TRAFFIC_UltraLOW        2\r
+\r
 #define        NONE                    0\r
 \r
 \r
 #define        NONE                    0\r
 \r
 \r
-//============================================================\r
-//3 Tx Power Tracking\r
-//3============================================================\r
-\r
-\r
-//============================================================\r
-//3 PSD Handler\r
-//3============================================================\r
-\r
-#define        AFH_PSD         1       //0:normal PSD scan, 1: only do 20 pts PSD\r
-#define        MODE_40M                0       //0:20M, 1:40M\r
-#define        PSD_TH2         3  \r
-#define        PSD_CHMIN               20   // Minimum channel number for BT AFH\r
-#define        SIR_STEP_SIZE   3\r
-#define   Smooth_Size_1        5\r
-#define        Smooth_TH_1     3\r
-#define   Smooth_Size_2        10\r
-#define        Smooth_TH_2     4\r
-#define   Smooth_Size_3        20\r
-#define        Smooth_TH_3     4\r
-#define   Smooth_Step_Size 5\r
-#define        Adaptive_SIR    1\r
-#if(RTL8723_FPGA_VERIFICATION == 1)\r
-#define        PSD_RESCAN              1\r
-#else\r
-#define        PSD_RESCAN              4\r
-#endif\r
-#define        PSD_SCAN_INTERVAL       700 //ms\r
-\r
 \r
 \r
 //8723A High Power IGI Setting\r
 \r
 \r
 //8723A High Power IGI Setting\r
 #define                DM_DIG_HIGH_PWR_THRESHOLD       0x3a\r
 #define                DM_DIG_LOW_PWR_THRESHOLD        0x14\r
 \r
 #define                DM_DIG_HIGH_PWR_THRESHOLD       0x3a\r
 #define                DM_DIG_LOW_PWR_THRESHOLD        0x14\r
 \r
-//ANT Test\r
-#define                ANTTESTALL              0x00            //Ant A or B will be Testing   \r
-#define                ANTTESTA                0x01            //Ant A will be Testing \r
-#define                ANTTESTB                0x02            //Ant B will be testing\r
-\r
-//for 8723A Ant Definition--2012--06--07 due to different IC may be different ANT define\r
-#define                MAIN_ANT                1               //Ant A or Ant Main\r
-#define                AUX_ANT         2               //AntB or Ant Aux\r
-#define                MAX_ANT         3               // 3 for AP using\r
-\r
 \r
 \r
-//Antenna Diversity Type\r
-#define        SW_ANTDIV       0\r
-#define        HW_ANTDIV       1\r
 //============================================================\r
 // structure and define\r
 //============================================================\r
 //============================================================\r
 // structure and define\r
 //============================================================\r
@@ -165,12 +127,6 @@ typedef            struct _WLAN_STA{
 \r
 #endif\r
 \r
 \r
 #endif\r
 \r
-//Remove DIG by Yuchen\r
-\r
-//Remoce BB power saving by Yuchn\r
-\r
-//Remove DIG by yuchen\r
-\r
 typedef struct _Dynamic_Primary_CCA{\r
        u1Byte          PriCCA_flag;\r
        u1Byte          intf_flag;\r
 typedef struct _Dynamic_Primary_CCA{\r
        u1Byte          PriCCA_flag;\r
        u1Byte          intf_flag;\r
@@ -178,168 +134,18 @@ typedef struct _Dynamic_Primary_CCA{
        u1Byte          DupRTS_flag;\r
        u1Byte          Monitor_flag;\r
        u1Byte          CH_offset;\r
        u1Byte          DupRTS_flag;\r
        u1Byte          Monitor_flag;\r
        u1Byte          CH_offset;\r
-       u1Byte                  MF_state;\r
+       u1Byte          MF_state;\r
 }Pri_CCA_T, *pPri_CCA_T;\r
 \r
 }Pri_CCA_T, *pPri_CCA_T;\r
 \r
-//Remove RA_T,*pRA_T by RS_James\r
-\r
-typedef struct _RX_High_Power_\r
-{\r
-       u1Byte          RXHP_flag;\r
-       u1Byte          PSD_func_trigger;\r
-       u1Byte          PSD_bitmap_RXHP[80];\r
-       u1Byte          Pre_IGI;\r
-       u1Byte          Cur_IGI;\r
-       u1Byte          Pre_pw_th;\r
-       u1Byte          Cur_pw_th;\r
-       BOOLEAN         First_time_enter;\r
-       BOOLEAN         RXHP_enable;\r
-       u1Byte          TP_Mode;\r
-       RT_TIMER        PSDTimer;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)   \r
-       #if USE_WORKITEM\r
-       RT_WORK_ITEM            PSDTimeWorkitem;\r
-       #endif\r
-#endif\r
-\r
-}RXHP_T, *pRXHP_T;\r
-       \r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_CE))\r
-#define ASSOCIATE_ENTRY_NUM                                    32 // Max size of AsocEntry[].\r
-#define        ODM_ASSOCIATE_ENTRY_NUM                         ASSOCIATE_ENTRY_NUM\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-#define ASSOCIATE_ENTRY_NUM                                    NUM_STAT\r
-#define        ODM_ASSOCIATE_ENTRY_NUM                         ASSOCIATE_ENTRY_NUM+1\r
-\r
-#else\r
-//\r
-// 2012/01/12 MH Revise for compatiable with other SW team. \r
-// 0 is for STA 1-n is for AP clients.\r
-//\r
-#define ODM_ASSOCIATE_ENTRY_NUM                                ASSOCIATE_ENTRY_NUM+1// Default port only one\r
-#endif\r
 \r
 \r
-//#ifdef CONFIG_ANTENNA_DIVERSITY\r
-// This indicates two different the steps. \r
-// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.\r
-// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK\r
-// with original RSSI to determine if it is necessary to switch antenna.\r
-#define SWAW_STEP_PEAK         0\r
-#define SWAW_STEP_DETERMINE    1\r
-\r
-#define        TP_MODE         0\r
-#define        RSSI_MODE               1\r
-#define        TRAFFIC_LOW     0\r
-#define        TRAFFIC_HIGH    1\r
-#define        TRAFFIC_UltraLOW        2\r
-\r
-typedef struct _SW_Antenna_Switch_\r
-{\r
-       u1Byte          Double_chk_flag;\r
-       u1Byte          try_flag;\r
-       s4Byte          PreRSSI;\r
-       u1Byte          CurAntenna;\r
-       u1Byte          PreAntenna;\r
-       u1Byte          RSSI_Trying;\r
-       u1Byte          TestMode;\r
-       u1Byte          bTriggerAntennaSwitch;\r
-       u1Byte          SelectAntennaMap;\r
-       u1Byte          RSSI_target;    \r
-       u1Byte          reset_idx;\r
-       u2Byte          Single_Ant_Counter;\r
-       u2Byte          Dual_Ant_Counter;\r
-       u2Byte          Aux_FailDetec_Counter;\r
-       u2Byte          Retry_Counter;\r
-\r
-       // Before link Antenna Switch check\r
-       u1Byte          SWAS_NoLink_State;\r
-       u4Byte          SWAS_NoLink_BK_Reg860;\r
-       u4Byte          SWAS_NoLink_BK_Reg92c;\r
-       u4Byte          SWAS_NoLink_BK_Reg948;\r
-       BOOLEAN         ANTA_ON;        //To indicate Ant A is or not\r
-       BOOLEAN         ANTB_ON;        //To indicate Ant B is on or not\r
-       BOOLEAN         Pre_Aux_FailDetec;\r
-       BOOLEAN         RSSI_AntDect_bResult;   \r
-       u1Byte          Ant5G;\r
-       u1Byte          Ant2G;\r
-\r
-       s4Byte          RSSI_sum_A;\r
-       s4Byte          RSSI_sum_B;\r
-       s4Byte          RSSI_cnt_A;\r
-       s4Byte          RSSI_cnt_B;\r
-\r
-       u8Byte          lastTxOkCnt;\r
-       u8Byte          lastRxOkCnt;\r
-       u8Byte          TXByteCnt_A;\r
-       u8Byte          TXByteCnt_B;\r
-       u8Byte          RXByteCnt_A;\r
-       u8Byte          RXByteCnt_B;\r
-       u1Byte          TrafficLoad;\r
-       u1Byte          Train_time;\r
-       u1Byte          Train_time_flag;\r
-       RT_TIMER        SwAntennaSwitchTimer;\r
-#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)   \r
-       RT_TIMER        SwAntennaSwitchTimer_8723B;\r
-       u4Byte          PktCnt_SWAntDivByCtrlFrame;\r
-       BOOLEAN         bSWAntDivByCtrlFrame;\r
-#endif\r
-       \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)   \r
-       #if USE_WORKITEM\r
-       RT_WORK_ITEM                    SwAntennaSwitchWorkitem;\r
-#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)   \r
-       RT_WORK_ITEM                    SwAntennaSwitchWorkitem_8723B;\r
-       #endif\r
-#endif\r
-#endif\r
-/* CE Platform use\r
-#ifdef CONFIG_SW_ANTENNA_DIVERSITY\r
-       _timer SwAntennaSwitchTimer; \r
-       u8Byte lastTxOkCnt;\r
-       u8Byte lastRxOkCnt;\r
-       u8Byte TXByteCnt_A;\r
-       u8Byte TXByteCnt_B;\r
-       u8Byte RXByteCnt_A;\r
-       u8Byte RXByteCnt_B;\r
-       u1Byte DoubleComfirm;\r
-       u1Byte TrafficLoad;\r
-       //SW Antenna Switch\r
-\r
-\r
-#endif\r
-*/\r
-#ifdef CONFIG_HW_ANTENNA_DIVERSITY\r
-       //Hybrid Antenna Diversity\r
-       u4Byte          CCK_Ant1_Cnt[ASSOCIATE_ENTRY_NUM+1];\r
-       u4Byte          CCK_Ant2_Cnt[ASSOCIATE_ENTRY_NUM+1];\r
-       u4Byte          OFDM_Ant1_Cnt[ASSOCIATE_ENTRY_NUM+1];\r
-       u4Byte          OFDM_Ant2_Cnt[ASSOCIATE_ENTRY_NUM+1];\r
-       u4Byte          RSSI_Ant1_Sum[ASSOCIATE_ENTRY_NUM+1];\r
-       u4Byte          RSSI_Ant2_Sum[ASSOCIATE_ENTRY_NUM+1];\r
-       u1Byte          TxAnt[ASSOCIATE_ENTRY_NUM+1];\r
-       u1Byte          TargetSTA;\r
-       u1Byte          antsel;\r
-       u1Byte          RxIdleAnt;\r
-\r
-#endif\r
-       \r
-}SWAT_T, *pSWAT_T;\r
-//#endif\r
-\r
-// Edca Remove by YuChen\r
-\r
-//ODM_RATE_ADAPTIVE Remove by RS_James\r
-\r
-\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+#if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
 \r
 \r
 #ifdef ADSL_AP_BUILD_WORKAROUND\r
 #define MAX_TOLERANCE                  5\r
 #define IQK_DELAY_TIME                 1               //ms\r
 #endif\r
 \r
 \r
 #ifdef ADSL_AP_BUILD_WORKAROUND\r
 #define MAX_TOLERANCE                  5\r
 #define IQK_DELAY_TIME                 1               //ms\r
 #endif\r
-\r
+#if 0//defined in 8192cd.h\r
 //\r
 // Indicate different AP vendor for IOT issue.\r
 //\r
 //\r
 // Indicate different AP vendor for IOT issue.\r
 //\r
@@ -363,6 +169,7 @@ typedef enum _HT_IOT_PEER
        HT_IOT_PEER_REALTEK_WOW                 = 15,   \r
        HT_IOT_PEER_MAX                                 = 16\r
 }HT_IOT_PEER_E, *PHTIOT_PEER_E;\r
        HT_IOT_PEER_REALTEK_WOW                 = 15,   \r
        HT_IOT_PEER_MAX                                 = 16\r
 }HT_IOT_PEER_E, *PHTIOT_PEER_E;\r
+#endif\r
 #endif//#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
 \r
 #define                DM_Type_ByFW                    0\r
 #endif//#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
 \r
 #define                DM_Type_ByFW                    0\r
@@ -371,19 +178,31 @@ typedef enum _HT_IOT_PEER
 //\r
 // Declare for common info\r
 //\r
 //\r
 // Declare for common info\r
 //\r
-#define MAX_PATH_NUM_92CS              2\r
-#define MAX_PATH_NUM_8188E             1\r
-#define MAX_PATH_NUM_8192E             2\r
-#define MAX_PATH_NUM_8723B             1\r
-#define MAX_PATH_NUM_8812A             2\r
-#define MAX_PATH_NUM_8821A             1\r
-#define MAX_PATH_NUM_8814A             4\r
-#define MAX_PATH_NUM_8822B             2\r
-\r
 \r
 #define IQK_THRESHOLD                  8\r
 #define DPK_THRESHOLD                  4\r
 \r
 \r
 #define IQK_THRESHOLD                  8\r
 #define DPK_THRESHOLD                  4\r
 \r
+\r
+#if (DM_ODM_SUPPORT_TYPE &  (ODM_AP))\r
+__PACK typedef struct _ODM_Phy_Status_Info_\r
+{\r
+       u1Byte          RxPWDBAll;      \r
+       u1Byte          SignalQuality;   // in 0-100 index. \r
+       u1Byte          RxMIMOSignalStrength[4];// in 0~100 index\r
+       s1Byte          RxMIMOSignalQuality[4]; //EVM\r
+       u1Byte          RxSNR[4];//per-path's SNR       \r
+       u1Byte          BandWidth;\r
+\r
+} __WLAN_ATTRIB_PACK__ ODM_PHY_INFO_T, *PODM_PHY_INFO_T;\r
+\r
+typedef struct _ODM_Phy_Status_Info_Append_\r
+{\r
+       u1Byte          MAC_CRC32;      \r
+\r
+}ODM_PHY_INFO_Append_T,*PODM_PHY_INFO_Append_T;\r
+\r
+#else\r
+\r
 typedef struct _ODM_Phy_Status_Info_\r
 {\r
        //\r
 typedef struct _ODM_Phy_Status_Info_\r
 {\r
        //\r
@@ -395,7 +214,6 @@ typedef struct _ODM_Phy_Status_Info_
 #else\r
        u1Byte          RxPWDBAll;      \r
 #endif\r
 #else\r
        u1Byte          RxPWDBAll;      \r
 #endif\r
-\r
        u1Byte          SignalQuality;                  // in 0-100 index. \r
        s1Byte          RxMIMOSignalQuality[4]; //per-path's EVM\r
        u1Byte          RxMIMOEVMdbm[4];                //per-path's EVM dbm\r
        u1Byte          SignalQuality;                  // in 0-100 index. \r
        s1Byte          RxMIMOSignalQuality[4]; //per-path's EVM\r
        u1Byte          RxMIMOEVMdbm[4];                //per-path's EVM dbm\r
@@ -417,7 +235,7 @@ typedef struct _ODM_Phy_Status_Info_
        u1Byte          BandWidth;\r
        u1Byte          btCoexPwrAdjust;\r
 }ODM_PHY_INFO_T,*PODM_PHY_INFO_T;\r
        u1Byte          BandWidth;\r
        u1Byte          btCoexPwrAdjust;\r
 }ODM_PHY_INFO_T,*PODM_PHY_INFO_T;\r
-\r
+#endif\r
 \r
 typedef struct _ODM_Per_Pkt_Info_\r
 {\r
 \r
 typedef struct _ODM_Per_Pkt_Info_\r
 {\r
@@ -451,24 +269,6 @@ typedef struct _ODM_Mac_Status_Info_
        \r
 }ODM_MAC_INFO;\r
 \r
        \r
 }ODM_MAC_INFO;\r
 \r
-\r
-typedef enum tag_Dynamic_ODM_Support_Ability_Type\r
-{\r
-       // BB Team\r
-       ODM_DIG                         = 0x00000001,\r
-       ODM_HIGH_POWER          = 0x00000002,\r
-       ODM_CCK_CCA_TH          = 0x00000004,\r
-       ODM_FA_STATISTICS               = 0x00000008,\r
-       ODM_RAMASK                      = 0x00000010,\r
-       ODM_RSSI_MONITOR                = 0x00000020,\r
-       ODM_SW_ANTDIV           = 0x00000040,\r
-       ODM_HW_ANTDIV           = 0x00000080,\r
-       ODM_BB_PWRSV                    = 0x00000100,\r
-       ODM_2TPATHDIV                   = 0x00000200,\r
-       ODM_1TPATHDIV                   = 0x00000400,\r
-       ODM_PSD2AFH                     = 0x00000800\r
-}ODM_Ability_E;\r
-\r
 //\r
 // 2011/20/20 MH For MP driver RT_WLAN_STA =  STA_INFO_T\r
 // Please declare below ODM relative info in your STA info structure.\r
 //\r
 // 2011/20/20 MH For MP driver RT_WLAN_STA =  STA_INFO_T\r
 // Please declare below ODM relative info in your STA info structure.\r
@@ -514,8 +314,7 @@ typedef             struct _ODM_STA_INFO{
        //1 For 88E RA (don't redefine the naming)\r
        u1Byte          rate_id;\r
        u1Byte          rate_SGI;\r
        //1 For 88E RA (don't redefine the naming)\r
        u1Byte          rate_id;\r
        u1Byte          rate_SGI;\r
-       u1Byte          rssi_sta_ra;\v\r
-\r
+       u1Byte          rssi_sta_ra;\r
        u1Byte          SGI_enable;\r
        u1Byte          Decision_rate;\r
        u1Byte          Pre_rate;\r
        u1Byte          SGI_enable;\r
        u1Byte          Decision_rate;\r
        u1Byte          Pre_rate;\r
@@ -571,10 +370,12 @@ typedef enum _ODM_Common_Info_Definition
        ODM_CMNINFO_GLNA,\r
        ODM_CMNINFO_ALNA,\r
        ODM_CMNINFO_EXT_TRSW,\r
        ODM_CMNINFO_GLNA,\r
        ODM_CMNINFO_ALNA,\r
        ODM_CMNINFO_EXT_TRSW,\r
+       ODM_CMNINFO_EXT_LNA_GAIN,\r
        ODM_CMNINFO_PATCH_ID,                           //CUSTOMER ID\r
        ODM_CMNINFO_BINHCT_TEST,\r
        ODM_CMNINFO_BWIFI_TEST,\r
        ODM_CMNINFO_SMART_CONCURRENT,\r
        ODM_CMNINFO_PATCH_ID,                           //CUSTOMER ID\r
        ODM_CMNINFO_BINHCT_TEST,\r
        ODM_CMNINFO_BWIFI_TEST,\r
        ODM_CMNINFO_SMART_CONCURRENT,\r
+       ODM_CMNINFO_CONFIG_BB_RF,\r
        ODM_CMNINFO_DOMAIN_CODE_2G,\r
        ODM_CMNINFO_DOMAIN_CODE_5G,\r
        ODM_CMNINFO_IQKFWOFFLOAD,\r
        ODM_CMNINFO_DOMAIN_CODE_2G,\r
        ODM_CMNINFO_DOMAIN_CODE_5G,\r
        ODM_CMNINFO_IQKFWOFFLOAD,\r
@@ -632,13 +433,15 @@ typedef enum _ODM_Common_Info_Definition
        ODM_CMNINFO_BT_HS_RSSI,\r
        ODM_CMNINFO_BT_OPERATION,\r
        ODM_CMNINFO_BT_LIMITED_DIG,                                     //Need to Limited Dig or not\r
        ODM_CMNINFO_BT_HS_RSSI,\r
        ODM_CMNINFO_BT_OPERATION,\r
        ODM_CMNINFO_BT_LIMITED_DIG,                                     //Need to Limited Dig or not\r
+       ODM_CMNINFO_BT_DIG,\r
+       ODM_CMNINFO_BT_BUSY,                                    //Check Bt is using or not//neil        \r
        ODM_CMNINFO_BT_DISABLE_EDCA,\r
        ODM_CMNINFO_BT_DISABLE_EDCA,\r
-#if(DM_ODM_SUPPORT_TYPE & ODM_AP)              // for repeater mode add by YuChen 2014.06.\r
+#if(DM_ODM_SUPPORT_TYPE & ODM_AP)              // for repeater mode add by YuChen 2014.06.23\r
 #ifdef UNIVERSAL_REPEATER\r
        ODM_CMNINFO_VXD_LINK,\r
 #endif\r
 #endif\r
 #ifdef UNIVERSAL_REPEATER\r
        ODM_CMNINFO_VXD_LINK,\r
 #endif\r
 #endif\r
-       \r
+       ODM_CMNINFO_AP_TOTAL_NUM,\r
 //------------CALL BY VALUE-------------//\r
 \r
        //\r
 //------------CALL BY VALUE-------------//\r
 \r
        //\r
@@ -666,7 +469,7 @@ typedef enum _ODM_Support_Ability_Definition
        ODM_BB_DYNAMIC_TXPWR            = BIT2,\r
        ODM_BB_FA_CNT                                   = BIT3,\r
        ODM_BB_RSSI_MONITOR                     = BIT4,\r
        ODM_BB_DYNAMIC_TXPWR            = BIT2,\r
        ODM_BB_FA_CNT                                   = BIT3,\r
        ODM_BB_RSSI_MONITOR                     = BIT4,\r
-       ODM_BB_CCK_PD                                   = BIT5,\r
+       ODM_BB_CCK_PD                           = BIT5,\r
        ODM_BB_ANT_DIV                          = BIT6,\r
        ODM_BB_PWR_SAVE                         = BIT7,\r
        ODM_BB_PWR_TRAIN                                = BIT8,\r
        ODM_BB_ANT_DIV                          = BIT6,\r
        ODM_BB_PWR_SAVE                         = BIT7,\r
        ODM_BB_PWR_TRAIN                                = BIT8,\r
@@ -678,6 +481,7 @@ typedef enum _ODM_Support_Ability_Definition
        ODM_BB_CFO_TRACKING                     = BIT14,\r
        ODM_BB_NHM_CNT                          = BIT15,\r
        ODM_BB_PRIMARY_CCA                      = BIT16,\r
        ODM_BB_CFO_TRACKING                     = BIT14,\r
        ODM_BB_NHM_CNT                          = BIT15,\r
        ODM_BB_PRIMARY_CCA                      = BIT16,\r
+       ODM_BB_TXBF                             = BIT17,\r
        \r
        //\r
        // MAC DM section BIT 20-23\r
        \r
        //\r
        // MAC DM section BIT 20-23\r
@@ -690,294 +494,11 @@ typedef enum _ODM_Support_Ability_Definition
        //\r
        ODM_RF_TX_PWR_TRACK                     = BIT24,\r
        ODM_RF_RX_GAIN_TRACK                    = BIT25,\r
        //\r
        ODM_RF_TX_PWR_TRACK                     = BIT24,\r
        ODM_RF_RX_GAIN_TRACK                    = BIT25,\r
-       ODM_RF_CALIBRATION                              = BIT26,\r
+       ODM_RF_CALIBRATION                      = BIT26,\r
        \r
 }ODM_ABILITY_E;\r
 \r
        \r
 }ODM_ABILITY_E;\r
 \r
-//     ODM_CMNINFO_INTERFACE\r
-typedef enum tag_ODM_Support_Interface_Definition\r
-{\r
-       ODM_ITRF_PCIE   =       0x1,\r
-       ODM_ITRF_USB    =       0x2,\r
-       ODM_ITRF_SDIO   =       0x4,\r
-       ODM_ITRF_ALL    =       0x7,\r
-}ODM_INTERFACE_E;\r
-\r
-// ODM_CMNINFO_IC_TYPE\r
-typedef enum tag_ODM_Support_IC_Type_Definition\r
-{\r
-       ODM_RTL8192S    =       BIT0,\r
-       ODM_RTL8192C    =       BIT1,\r
-       ODM_RTL8192D    =       BIT2,\r
-       ODM_RTL8723A    =       BIT3,\r
-       ODM_RTL8188E    =       BIT4,\r
-       ODM_RTL8812     =       BIT5,\r
-       ODM_RTL8821     =       BIT6,\r
-       ODM_RTL8192E    =       BIT7,   \r
-       ODM_RTL8723B    =       BIT8,\r
-       ODM_RTL8814A    =       BIT9,   \r
-       ODM_RTL8881A    =       BIT10,\r
-       ODM_RTL8821B    =       BIT11,\r
-       ODM_RTL8822B    =       BIT12,\r
-        ODM_RTL8703B   =       BIT13\r
-}ODM_IC_TYPE_E;\r
-\r
-#define ODM_IC_11N_SERIES              (ODM_RTL8192S|ODM_RTL8192C|ODM_RTL8192D|ODM_RTL8723A|ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8703B)\r
-#define ODM_IC_11AC_SERIES             (ODM_RTL8812|ODM_RTL8821|ODM_RTL8814A|ODM_RTL8881A|ODM_RTL8821B|ODM_RTL8822B)\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-\r
-#ifdef RTK_AC_SUPPORT\r
-#define ODM_IC_11AC_SERIES_SUPPORT             1\r
-#else\r
-#define ODM_IC_11AC_SERIES_SUPPORT             0\r
-#endif\r
-\r
-#define ODM_IC_11N_SERIES_SUPPORT                      1\r
-#define ODM_CONFIG_BT_COEXIST                          0\r
-\r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-\r
-#define ODM_IC_11AC_SERIES_SUPPORT             1\r
-#define ODM_IC_11N_SERIES_SUPPORT                      1\r
-#define ODM_CONFIG_BT_COEXIST                          1\r
-\r
-#else \r
-\r
-#if((RTL8192C_SUPPORT == 1) || (RTL8192D_SUPPORT == 1) || (RTL8723A_SUPPORT == 1) || (RTL8188E_SUPPORT == 1) ||\\r
-(RTL8723B_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8195A_SUPPORT == 1))\r
-#define ODM_IC_11N_SERIES_SUPPORT                      1\r
-#define ODM_IC_11AC_SERIES_SUPPORT             0\r
-#else\r
-#define ODM_IC_11N_SERIES_SUPPORT                      0\r
-#define ODM_IC_11AC_SERIES_SUPPORT             1\r
-#endif\r
-\r
-#ifdef CONFIG_BT_COEXIST\r
-#define ODM_CONFIG_BT_COEXIST                          1\r
-#else\r
-#define ODM_CONFIG_BT_COEXIST                          0\r
-#endif\r
-\r
-#endif\r
-\r
-\r
-//ODM_CMNINFO_CUT_VER\r
-typedef enum tag_ODM_Cut_Version_Definition\r
-{\r
-       ODM_CUT_A               =       0,\r
-       ODM_CUT_B               =       1,\r
-       ODM_CUT_C               =       2,\r
-       ODM_CUT_D               =       3,\r
-       ODM_CUT_E               =       4,\r
-       ODM_CUT_F               =       5,\r
-\r
-       ODM_CUT_I               =       8,\r
-       ODM_CUT_J               =       9,\r
-       ODM_CUT_K               =       10,     \r
-       ODM_CUT_TEST    =       15,\r
-}ODM_CUT_VERSION_E;\r
-\r
-// ODM_CMNINFO_FAB_VER\r
-typedef enum tag_ODM_Fab_Version_Definition\r
-{\r
-       ODM_TSMC        =       0,\r
-       ODM_UMC         =       1,\r
-}ODM_FAB_E;\r
-\r
-// ODM_CMNINFO_RF_TYPE\r
-//\r
-// For example 1T2R (A+AB = BIT0|BIT4|BIT5)\r
-//\r
-typedef enum tag_ODM_RF_Path_Bit_Definition\r
-{\r
-       ODM_RF_TX_A     =       BIT0,\r
-       ODM_RF_TX_B     =       BIT1,\r
-       ODM_RF_TX_C     =       BIT2,\r
-       ODM_RF_TX_D     =       BIT3,\r
-       ODM_RF_RX_A     =       BIT4,\r
-       ODM_RF_RX_B     =       BIT5,\r
-       ODM_RF_RX_C     =       BIT6,\r
-       ODM_RF_RX_D     =       BIT7,\r
-}ODM_RF_PATH_E;\r
-\r
-\r
-typedef enum tag_ODM_RF_Type_Definition\r
-{\r
-       ODM_1T1R        =       0,\r
-       ODM_1T2R        =       1,\r
-       ODM_2T2R        =       2,\r
-       ODM_2T3R        =       3,\r
-       ODM_2T4R        =       4,\r
-       ODM_3T3R        =       5,\r
-       ODM_3T4R        =       6,\r
-       ODM_4T4R        =       7,\r
-}ODM_RF_TYPE_E;\r
-\r
-\r
-//\r
-// ODM Dynamic common info value definition\r
-//\r
-\r
-//typedef enum _MACPHY_MODE_8192D{\r
-//     SINGLEMAC_SINGLEPHY,\r
-//     DUALMAC_DUALPHY,\r
-//     DUALMAC_SINGLEPHY,\r
-//}MACPHY_MODE_8192D,*PMACPHY_MODE_8192D;\r
-// Above is the original define in MP driver. Please use the same define. THX.\r
-typedef enum tag_ODM_MAC_PHY_Mode_Definition\r
-{\r
-       ODM_SMSP        = 0,\r
-       ODM_DMSP        = 1,\r
-       ODM_DMDP        = 2,\r
-}ODM_MAC_PHY_MODE_E;\r
-\r
-\r
-typedef enum tag_BT_Coexist_Definition\r
-{      \r
-       ODM_BT_BUSY             = 1,\r
-       ODM_BT_ON                       = 2,\r
-       ODM_BT_OFF              = 3,\r
-       ODM_BT_NONE             = 4,\r
-}ODM_BT_COEXIST_E;\r
-\r
-// ODM_CMNINFO_OP_MODE\r
-typedef enum tag_Operation_Mode_Definition\r
-{\r
-       ODM_NO_LINK             = BIT0,\r
-       ODM_LINK                        = BIT1,\r
-       ODM_SCAN                        = BIT2,\r
-       ODM_POWERSAVE   = BIT3,\r
-       ODM_AP_MODE             = BIT4,\r
-       ODM_CLIENT_MODE = BIT5,\r
-       ODM_AD_HOC              = BIT6,\r
-       ODM_WIFI_DIRECT = BIT7,\r
-       ODM_WIFI_DISPLAY        = BIT8,\r
-}ODM_OPERATION_MODE_E;\r
-\r
-// ODM_CMNINFO_WM_MODE\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_CE))\r
-typedef enum tag_Wireless_Mode_Definition\r
-{\r
-        ODM_WM_UNKNOW     = 0x0,\r
-        ODM_WM_B                  = BIT0,\r
-        ODM_WM_G                  = BIT1,\r
-        ODM_WM_A                  = BIT2,\r
-        ODM_WM_N24G           = BIT3,\r
-        ODM_WM_N5G             = BIT4,\r
-        ODM_WM_AUTO           = BIT5,\r
-        ODM_WM_AC                = BIT6,\r
-}ODM_WIRELESS_MODE_E;\r
-#else\r
-typedef enum tag_Wireless_Mode_Definition\r
-{\r
-        ODM_WM_UNKNOWN         = 0x00,\r
-        ODM_WM_A                       = BIT0,\r
-        ODM_WM_B                       = BIT1,\r
-        ODM_WM_G                       = BIT2,\r
-        ODM_WM_AUTO            = BIT3,\r
-        ODM_WM_N24G            = BIT4,\r
-        ODM_WM_N5G             = BIT5,\r
-        ODM_WM_AC_5G   = BIT6,\r
-        ODM_WM_AC_24G          = BIT7,\r
-        ODM_WM_AC_ONLY         = BIT8,\r
-        ODM_WM_MAX             = BIT9\r
-}ODM_WIRELESS_MODE_E;\r
-#endif\r
-\r
-// ODM_CMNINFO_BAND\r
-typedef enum tag_Band_Type_Definition\r
-{\r
-    ODM_BAND_2_4G = 0,\r
-    ODM_BAND_5G,\r
-    ODM_BAND_ON_BOTH,\r
-    ODM_BANDMAX\r
-\r
-}ODM_BAND_TYPE_E;\r
-\r
-// ODM_CMNINFO_SEC_CHNL_OFFSET\r
-typedef enum tag_Secondary_Channel_Offset_Definition\r
-{\r
-       ODM_DONT_CARE   = 0,\r
-       ODM_BELOW               = 1,\r
-       ODM_ABOVE                       = 2\r
-}ODM_SEC_CHNL_OFFSET_E;\r
-\r
-// ODM_CMNINFO_SEC_MODE\r
-typedef enum tag_Security_Definition\r
-{\r
-       ODM_SEC_OPEN                    = 0,\r
-       ODM_SEC_WEP40           = 1,\r
-       ODM_SEC_TKIP                    = 2,\r
-       ODM_SEC_RESERVE                 = 3,\r
-       ODM_SEC_AESCCMP                 = 4,\r
-       ODM_SEC_WEP104          = 5,\r
-       ODM_WEP_WPA_MIXED    = 6, // WEP + WPA\r
-       ODM_SEC_SMS4                    = 7,\r
-}ODM_SECURITY_E;\r
-\r
-// ODM_CMNINFO_BW\r
-typedef enum tag_Bandwidth_Definition\r
-{      \r
-       ODM_BW20M               = 0,\r
-       ODM_BW40M               = 1,\r
-       ODM_BW80M               = 2,\r
-       ODM_BW160M              = 3,\r
-       ODM_BW10M               = 4,\r
-}ODM_BW_E;\r
-\r
-\r
-// ODM_CMNINFO_BOARD_TYPE\r
-// For non-AC-series IC , ODM_BOARD_5G_EXT_PA and ODM_BOARD_5G_EXT_LNA are ignored\r
-// For AC-series IC, external PA & LNA can be indivisuallly added on 2.4G and/or 5G \r
-typedef enum tag_Board_Definition\r
-{\r
-    ODM_BOARD_DEFAULT          = 0,      // The DEFAULT case.\r
-    ODM_BOARD_MINICARD  = BIT(0), // 0 = non-mini card, 1= mini card.\r
-    ODM_BOARD_SLIM      = BIT(1), // 0 = non-slim card, 1 = slim card\r
-    ODM_BOARD_BT        = BIT(2), // 0 = without BT card, 1 = with BT\r
-    ODM_BOARD_EXT_PA    = BIT(3), // 0 = no 2G ext-PA, 1 = existing 2G ext-PA\r
-    ODM_BOARD_EXT_LNA   = BIT(4), // 0 = no 2G ext-LNA, 1 = existing 2G ext-LNA\r
-    ODM_BOARD_EXT_TRSW  = BIT(5), // 0 = no ext-TRSW, 1 = existing ext-TRSW\r
-    ODM_BOARD_EXT_PA_5G        = BIT(6), // 0 = no 5G ext-PA, 1 = existing 5G ext-PA\r
-    ODM_BOARD_EXT_LNA_5G= BIT(7), // 0 = no 5G ext-LNA, 1 = existing 5G ext-LNA\r
-}ODM_BOARD_TYPE_E;\r
-\r
-typedef enum tag_ODM_Package_Definition\r
-{\r
-    ODM_PACKAGE_DEFAULT         = 0,     \r
-    ODM_PACKAGE_QFN68        = BIT(0), \r
-    ODM_PACKAGE_TFBGA90      = BIT(1), \r
-    ODM_PACKAGE_TFBGA79      = BIT(2), \r
-}ODM_Package_TYPE_E;\r
-\r
-typedef enum tag_ODM_TYPE_GPA_Definition\r
-{\r
-    TYPE_GPA0 = 0,       \r
-    TYPE_GPA1 = BIT(1)|BIT(0)\r
-}ODM_TYPE_GPA_E;\r
-\r
-typedef enum tag_ODM_TYPE_APA_Definition\r
-{\r
-    TYPE_APA0 = 0,       \r
-    TYPE_APA1 = BIT(1)|BIT(0)\r
-}ODM_TYPE_APA_E;\r
-\r
-typedef enum tag_ODM_TYPE_GLNA_Definition\r
-{\r
-    TYPE_GLNA0 = 0,      \r
-    TYPE_GLNA1 = BIT(2)|BIT(0),\r
-    TYPE_GLNA2 = BIT(3)|BIT(1),\r
-    TYPE_GLNA3 = BIT(3)|BIT(2)|BIT(1)|BIT(0)\r
-}ODM_TYPE_GLNA_E;\r
-\r
-typedef enum tag_ODM_TYPE_ALNA_Definition\r
-{\r
-    TYPE_ALNA0 = 0,      \r
-    TYPE_ALNA1 = BIT(2)|BIT(0),\r
-    TYPE_ALNA2 = BIT(3)|BIT(1),\r
-    TYPE_ALNA3 = BIT(3)|BIT(2)|BIT(1)|BIT(0)\r
-}ODM_TYPE_ALNA_E;\r
+//Move some non-DM enum,define, struc. form phydm.h to phydm_types.h by Dino\r
 \r
 // ODM_CMNINFO_ONE_PATH_CCA\r
 typedef enum tag_CCA_Path\r
 \r
 // ODM_CMNINFO_ONE_PATH_CCA\r
 typedef enum tag_CCA_Path\r
@@ -987,137 +508,23 @@ typedef enum tag_CCA_Path
        ODM_CCA_1R_B            = 2,\r
 }ODM_CCA_PATH_E;\r
 \r
        ODM_CCA_1R_B            = 2,\r
 }ODM_CCA_PATH_E;\r
 \r
-\r
-typedef struct _ODM_RA_Info_\r
-{\r
-       u1Byte RateID;\r
-       u4Byte RateMask;\r
-       u4Byte RAUseRate;\r
-       u1Byte RateSGI;\r
-       u1Byte RssiStaRA;\r
-       u1Byte PreRssiStaRA;\r
-       u1Byte SGIEnable;\r
-       u1Byte DecisionRate;\r
-       u1Byte PreRate;\r
-       u1Byte HighestRate;\r
-       u1Byte LowestRate;\r
-       u4Byte NscUp;\r
-       u4Byte NscDown;\r
-       u2Byte RTY[5];\r
-       u4Byte TOTAL;\r
-       u2Byte DROP;\r
-       u1Byte Active;\r
-       u2Byte RptTime;\r
-       u1Byte RAWaitingCounter;\r
-       u1Byte RAPendingCounter;        \r
-#if 1 //POWER_TRAINING_ACTIVE == 1 // For compile  pass only~!\r
-       u1Byte PTActive;  // on or off\r
-       u1Byte PTTryState;  // 0 trying state, 1 for decision state\r
-       u1Byte PTStage;  // 0~6\r
-       u1Byte PTStopCount; //Stop PT counter\r
-       u1Byte PTPreRate;  // if rate change do PT\r
-       u1Byte PTPreRssi; // if RSSI change 5% do PT\r
-       u1Byte PTModeSS;  // decide whitch rate should do PT\r
-       u1Byte RAstage;  // StageRA, decide how many times RA will be done between PT\r
-       u1Byte PTSmoothFactor;\r
-#endif\r
-} ODM_RA_INFO_T,*PODM_RA_INFO_T;\r
+//move RAInfo to Phydm_RaInfo.h\r
 \r
 //Remove struct  PATHDIV_PARA to odm_PathDiv.h \r
 \r
 \r
 //Remove struct  PATHDIV_PARA to odm_PathDiv.h \r
 \r
-//move to PowerTracking.h by YuChen\r
-\r
+//Remove struct to odm_PowerTracking.h by YuChen\r
 //\r
 // ODM Dynamic common info value definition\r
 //\r
 //\r
 // ODM Dynamic common info value definition\r
 //\r
+//Move AntDiv form phydm.h to Phydm_AntDiv.h by Dino\r
 \r
 \r
-typedef struct _FAST_ANTENNA_TRAINNING_\r
-{\r
-       u1Byte  Bssid[6];\r
-       u1Byte  antsel_rx_keep_0;\r
-       u1Byte  antsel_rx_keep_1;\r
-       u1Byte  antsel_rx_keep_2;\r
-       u1Byte  antsel_rx_keep_3;\r
-       u4Byte  antSumRSSI[7];\r
-       u4Byte  antRSSIcnt[7];\r
-       u4Byte  antAveRSSI[7];\r
-       u1Byte  FAT_State;\r
-       u4Byte  TrainIdx;\r
-       u1Byte  antsel_a[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u1Byte  antsel_b[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u1Byte  antsel_c[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  MainAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  AuxAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  MainAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  AuxAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u1Byte  RxIdleAnt;\r
-       BOOLEAN bBecomeLinked;\r
-       u4Byte  MinMaxRSSI;\r
-       u1Byte  idx_AntDiv_counter_2G;\r
-       u1Byte  idx_AntDiv_counter_5G;\r
-       u4Byte  AntDiv_2G_5G;\r
-       u4Byte    CCK_counter_main;\r
-       u4Byte    CCK_counter_aux;      \r
-       u4Byte    OFDM_counter_main;\r
-       u4Byte    OFDM_counter_aux;     \r
-\r
-\r
-       u4Byte    CCK_CtrlFrame_Cnt_main;\r
-       u4Byte    CCK_CtrlFrame_Cnt_aux;\r
-       u4Byte    OFDM_CtrlFrame_Cnt_main;\r
-       u4Byte    OFDM_CtrlFrame_Cnt_aux;\r
-       u4Byte  MainAnt_CtrlFrame_Sum;\r
-       u4Byte  AuxAnt_CtrlFrame_Sum;\r
-       u4Byte  MainAnt_CtrlFrame_Cnt;\r
-       u4Byte  AuxAnt_CtrlFrame_Cnt;\r
-\r
-}FAT_T,*pFAT_T;\r
-\r
-typedef enum _FAT_STATE\r
-{\r
-       FAT_NORMAL_STATE                        = 0,\r
-       FAT_TRAINING_STATE              = 1,\r
-}FAT_STATE_E, *PFAT_STATE_E;\r
-\r
-typedef enum _ANT_DIV_TYPE\r
-{\r
-       NO_ANTDIV                       = 0xFF, \r
-       CG_TRX_HW_ANTDIV                = 0x01,\r
-       CGCS_RX_HW_ANTDIV       = 0x02,\r
-       FIXED_HW_ANTDIV         = 0x03,\r
-       CG_TRX_SMART_ANTDIV     = 0x04,\r
-       CGCS_RX_SW_ANTDIV       = 0x05,\r
-       S0S1_SW_ANTDIV          = 0x06 //8723B intrnal switch S0 S1\r
-}ANT_DIV_TYPE_E, *PANT_DIV_TYPE_E;\r
-\r
-\r
-typedef struct _ODM_PATH_DIVERSITY_\r
-{\r
-       u1Byte  RespTxPath;\r
-       u1Byte  PathSel[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  PathA_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  PathB_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  PathA_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
-       u4Byte  PathB_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
-}PATHDIV_T, *pPATHDIV_T;\r
-\r
+//move PathDiv to Phydm_PathDiv.h\r
 \r
 typedef enum _BASEBAND_CONFIG_PHY_REG_PG_VALUE_TYPE{\r
        PHY_REG_PG_RELATIVE_VALUE = 0,\r
        PHY_REG_PG_EXACT_VALUE = 1\r
 } PHY_REG_PG_TYPE;\r
 \r
 \r
 typedef enum _BASEBAND_CONFIG_PHY_REG_PG_VALUE_TYPE{\r
        PHY_REG_PG_RELATIVE_VALUE = 0,\r
        PHY_REG_PG_EXACT_VALUE = 1\r
 } PHY_REG_PG_TYPE;\r
 \r
-\r
-//\r
-// Antenna detection information from single tone mechanism, added by Roger, 2012.11.27.\r
-//\r
-typedef struct _ANT_DETECTED_INFO{\r
-       BOOLEAN                 bAntDetected;\r
-       u4Byte                  dBForAntA;\r
-       u4Byte                  dBForAntB;\r
-       u4Byte                  dBForAntO;\r
-}ANT_DETECTED_INFO, *PANT_DETECTED_INFO;\r
-\r
 //\r
 // 2011/09/22 MH Copy from SD4 defined structure. We use to support PHY DM integration.\r
 //\r
 //\r
 // 2011/09/22 MH Copy from SD4 defined structure. We use to support PHY DM integration.\r
 //\r
@@ -1125,6 +532,7 @@ typedef struct _ANT_DETECTED_INFO{
 #if (RT_PLATFORM != PLATFORM_LINUX)\r
 typedef \r
 #endif\r
 #if (RT_PLATFORM != PLATFORM_LINUX)\r
 typedef \r
 #endif\r
+       \r
 struct DM_Out_Source_Dynamic_Mechanism_Structure\r
 #else// for AP,ADSL,CE Team\r
 typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure\r
 struct DM_Out_Source_Dynamic_Mechanism_Structure\r
 #else// for AP,ADSL,CE Team\r
 typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure\r
@@ -1206,13 +614,14 @@ typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure
        u1Byte                  TypeALNA;\r
        u1Byte                  TypeAPA;\r
        // with external LNA  NO/Yes = 0/1\r
        u1Byte                  TypeALNA;\r
        u1Byte                  TypeAPA;\r
        // with external LNA  NO/Yes = 0/1\r
-       u1Byte                  ExtLNA;\r
-       u1Byte                  ExtLNA5G;\r
+       u1Byte                  ExtLNA; // 2G\r
+       u1Byte                  ExtLNA5G; //5G\r
        // with external PA  NO/Yes = 0/1\r
        // with external PA  NO/Yes = 0/1\r
-       u1Byte                  ExtPA;\r
-       u1Byte                  ExtPA5G;\r
+       u1Byte                  ExtPA; // 2G\r
+       u1Byte                  ExtPA5G; //5G\r
        // with external TRSW  NO/Yes = 0/1\r
        u1Byte                  ExtTRSW;\r
        // with external TRSW  NO/Yes = 0/1\r
        u1Byte                  ExtTRSW;\r
+       u1Byte                  ExtLNAGain; // 2G\r
        u1Byte                  PatchID; //Customer ID\r
        BOOLEAN                 bInHctTest;\r
        BOOLEAN                 bWIFITest;\r
        u1Byte                  PatchID; //Customer ID\r
        BOOLEAN                 bInHctTest;\r
        BOOLEAN                 bWIFITest;\r
@@ -1220,7 +629,7 @@ typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure
        BOOLEAN                 bDualMacSmartConcurrent;\r
        u4Byte                  BK_SupportAbility;\r
        u1Byte                  AntDivType;\r
        BOOLEAN                 bDualMacSmartConcurrent;\r
        u4Byte                  BK_SupportAbility;\r
        u1Byte                  AntDivType;\r
-\r
+       BOOLEAN                 ConfigBBRF;\r
        u1Byte                  odm_Regulation2_4G;\r
        u1Byte                  odm_Regulation5G;\r
        u1Byte                  IQKFWOffload;\r
        u1Byte                  odm_Regulation2_4G;\r
        u1Byte                  odm_Regulation5G;\r
        u1Byte                  IQKFWOffload;\r
@@ -1270,7 +679,7 @@ typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure
        //u1Byte                        *pAidMap;\r
        u1Byte                  *pu1ForcedIgiLb;\r
        BOOLEAN                 *pIsFcsModeEnable;\r
        //u1Byte                        *pAidMap;\r
        u1Byte                  *pu1ForcedIgiLb;\r
        BOOLEAN                 *pIsFcsModeEnable;\r
-//--------- For 8723B IQK-----------//\r
+/*--------- For 8723B IQK-----------*/\r
        BOOLEAN                 *pIs1Antenna;\r
        u1Byte                  *pRFDefaultPath;\r
        // 0:S1, 1:S0\r
        BOOLEAN                 *pIs1Antenna;\r
        u1Byte                  *pRFDefaultPath;\r
        // 0:S1, 1:S0\r
@@ -1283,17 +692,29 @@ typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure
        BOOLEAN                 bWIFI_Display;\r
        BOOLEAN                 bLinked;\r
        BOOLEAN                 bsta_state;\r
        BOOLEAN                 bWIFI_Display;\r
        BOOLEAN                 bLinked;\r
        BOOLEAN                 bsta_state;\r
+#if(DM_ODM_SUPPORT_TYPE & ODM_AP)              // for repeater mode add by YuChen 2014.06.23\r
+#ifdef UNIVERSAL_REPEATER\r
+       BOOLEAN                 VXD_bLinked;\r
+#endif\r
+#endif                                                                 // for repeater mode add by YuChen 2014.06.23   \r
        u1Byte                  RSSI_Min;       \r
        u1Byte                  RSSI_Min;       \r
-       u1Byte          InterfaceIndex; // Add for 92D  dual MAC: 0--Mac0 1--Mac1\r
-       BOOLEAN         bIsMPChip;\r
+       u1Byte                  InterfaceIndex; /*Add for 92D  dual MAC: 0--Mac0 1--Mac1*/\r
+       BOOLEAN                 bIsMPChip;\r
        BOOLEAN                 bOneEntryOnly;\r
        BOOLEAN                 mp_mode;\r
        BOOLEAN                 bOneEntryOnly;\r
        BOOLEAN                 mp_mode;\r
+       u4Byte                  OneEntry_MACID;\r
+       u1Byte                  pre_number_linked_client;       \r
+       u1Byte                  number_linked_client;\r
+       u1Byte                  pre_number_active_client;       \r
+       u1Byte                  number_active_client;\r
        // Common info for BTDM\r
        BOOLEAN                 bBtEnabled;                     // BT is enabled\r
        BOOLEAN                 bBtConnectProcess;      // BT HS is under connection progress.\r
        u1Byte                  btHsRssi;                               // BT HS mode wifi rssi value.\r
        BOOLEAN                 bBtHsOperation;         // BT HS mode is under progress\r
        // Common info for BTDM\r
        BOOLEAN                 bBtEnabled;                     // BT is enabled\r
        BOOLEAN                 bBtConnectProcess;      // BT HS is under connection progress.\r
        u1Byte                  btHsRssi;                               // BT HS mode wifi rssi value.\r
        BOOLEAN                 bBtHsOperation;         // BT HS mode is under progress\r
+       u1Byte                  btHsDigVal;                     // use BT rssi to decide the DIG value\r
        BOOLEAN                 bBtDisableEdcaTurbo;    // Under some condition, don't enable the EDCA Turbo\r
        BOOLEAN                 bBtDisableEdcaTurbo;    // Under some condition, don't enable the EDCA Turbo\r
+       BOOLEAN                 bBtBusy;                        // BT is busy.\r
        BOOLEAN                 bBtLimitedDig;                  // BT is busy.\r
 //------------CALL BY VALUE-------------//\r
        u1Byte                  RSSI_A;\r
        BOOLEAN                 bBtLimitedDig;                  // BT is busy.\r
 //------------CALL BY VALUE-------------//\r
        u1Byte                  RSSI_A;\r
@@ -1304,6 +725,7 @@ typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure
        u8Byte                  RSSI_TRSW_H;\r
        u8Byte                  RSSI_TRSW_L;    \r
        u8Byte                  RSSI_TRSW_iso;\r
        u8Byte                  RSSI_TRSW_H;\r
        u8Byte                  RSSI_TRSW_L;    \r
        u8Byte                  RSSI_TRSW_iso;\r
+       u1Byte                  TRXAntStatus;\r
 \r
        u1Byte                  RxRate;\r
        BOOLEAN                 bNoisyState;\r
 \r
        u1Byte                  RxRate;\r
        BOOLEAN                 bNoisyState;\r
@@ -1320,54 +742,59 @@ typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure
        BOOLEAN                 IsBbSwingOffsetPositiveA;\r
        u4Byte                  BbSwingOffsetB;\r
        BOOLEAN                 IsBbSwingOffsetPositiveB;\r
        BOOLEAN                 IsBbSwingOffsetPositiveA;\r
        u4Byte                  BbSwingOffsetB;\r
        BOOLEAN                 IsBbSwingOffsetPositiveB;\r
-       s1Byte                  TH_L2H_ini;\r
-       s1Byte                  TH_EDCCA_HL_diff;\r
-       s1Byte                  IGI_Base;\r
-       u1Byte                  IGI_target;\r
-       BOOLEAN                 ForceEDCCA;\r
-       u1Byte                  AdapEn_RSSI;\r
-       s1Byte                  Force_TH_H;\r
-       s1Byte                  Force_TH_L;\r
-       u1Byte                  IGI_LowerBound;\r
-       u1Byte                  antdiv_rssi;\r
+       u1Byte                  antdiv_rssi;\r
+       u1Byte                  fat_comb_a;\r
+       u1Byte                  fat_comb_b;\r
+       u1Byte                  antdiv_intvl;\r
        u1Byte                  AntType;\r
        u1Byte                  pre_AntType;\r
        u1Byte                  AntType;\r
        u1Byte                  pre_AntType;\r
-       u1Byte                  antdiv_period;\r
-        u1Byte                 antdiv_select;  \r
+       u1Byte                  antdiv_period;\r
+       u1Byte                  antdiv_select;\r
+       u1Byte                  path_select;    \r
+       u1Byte                  antdiv_evm_en;\r
+       u1Byte                  bdc_holdstate;\r
        u1Byte                  NdpaPeriod;\r
        BOOLEAN                 H2C_RARpt_connect;\r
        u1Byte                  NdpaPeriod;\r
        BOOLEAN                 H2C_RARpt_connect;\r
+       BOOLEAN                 cck_agc_report_type;\r
+       \r
+       u1Byte                  dm_dig_max_TH;\r
+       u1Byte                  dm_dig_min_TH;\r
+       u1Byte                  print_agc;\r
 \r
 \r
-       // add by Yu Cehn for adaptivtiy\r
-       BOOLEAN                 adaptivity_flag;\r
-       u1Byte                  tolerance_cnt;\r
-       u8Byte                  NHMCurTxOkcnt;\r
-       u8Byte                  NHMCurRxOkcnt;\r
-       u8Byte                  NHMLastTxOkcnt;\r
-       u8Byte                  NHMLastRxOkcnt;\r
-       u1Byte                  NHMWait;\r
-       s1Byte                  H2L_lb;\r
-       s1Byte                  L2H_lb;\r
-       u1Byte                  Adaptivity_IGI_upper;\r
+       //For Adaptivtiy\r
        u2Byte                  NHM_cnt_0;\r
        u2Byte                  NHM_cnt_1;\r
        u2Byte                  NHM_cnt_0;\r
        u2Byte                  NHM_cnt_1;\r
+       s1Byte                  TH_L2H_ini;\r
+       s1Byte                  TH_EDCCA_HL_diff;\r
+       s1Byte                  TH_L2H_ini_backup;\r
        BOOLEAN                 Carrier_Sense_enable;\r
        BOOLEAN                 Carrier_Sense_enable;\r
-       BOOLEAN                 bFirstLink;\r
-       BOOLEAN                 bCheck;\r
-       BOOLEAN                 EDCCA_enable_state;\r
-       BOOLEAN                 NHM_enable;\r
-       BOOLEAN                 DynamicLinkAdaptivity;\r
-       BOOLEAN                 bAdaOn;\r
+       u1Byte                  Adaptivity_IGI_upper;\r
+       BOOLEAN                 adaptivity_flag;\r
+       u1Byte                  DCbackoff;\r
+       BOOLEAN                 Adaptivity_enable;\r
+       u1Byte                  APTotalNum;\r
+       ADAPTIVITY_STATISTICS   Adaptivity;\r
+       //For Adaptivtiy\r
+       u1Byte                  LastUSBHub;\r
+       \r
+       u1Byte                  c2h_cmd_start;\r
+       u1Byte                  fw_debug_trace[60]; \r
+       u1Byte                  pre_c2h_seq;\r
+       BOOLEAN                 fw_buff_is_enpty;\r
 \r
 \r
+#if (DM_ODM_SUPPORT_TYPE &  (ODM_CE))\r
        ODM_NOISE_MONITOR noise_level;//[ODM_MAX_CHANNEL_NUM];\r
        ODM_NOISE_MONITOR noise_level;//[ODM_MAX_CHANNEL_NUM];\r
+#endif\r
        //\r
        //2 Define STA info.\r
        // _ODM_STA_INFO\r
        // 2012/01/12 MH For MP, we need to reduce one array pointer for default port.??\r
        PSTA_INFO_T             pODM_StaInfo[ODM_ASSOCIATE_ENTRY_NUM];\r
        //\r
        //2 Define STA info.\r
        // _ODM_STA_INFO\r
        // 2012/01/12 MH For MP, we need to reduce one array pointer for default port.??\r
        PSTA_INFO_T             pODM_StaInfo[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u2Byte                  platform2phydm_macid_table[ODM_ASSOCIATE_ENTRY_NUM];            /* platform_macid_table[platform_macid] = phydm_macid */\r
 \r
 #if (RATE_ADAPTIVE_SUPPORT == 1)\r
        u2Byte                  CurrminRptTime;\r
 \r
 #if (RATE_ADAPTIVE_SUPPORT == 1)\r
        u2Byte                  CurrminRptTime;\r
-       ODM_RA_INFO_T   RAInfo[ODM_ASSOCIATE_ENTRY_NUM]; //See HalMacID support\r
+       ODM_RA_INFO_T   RAInfo[ODM_ASSOCIATE_ENTRY_NUM]; //Use MacID as array index. STA MacID=0, VWiFi Client MacID={1, ODM_ASSOCIATE_ENTRY_NUM-1} //YJ,add,120119\r
 #endif\r
        //\r
        // 2012/02/14 MH Add to share 88E ra with other SW team.\r
 #endif\r
        //\r
        // 2012/02/14 MH Add to share 88E ra with other SW team.\r
@@ -1395,6 +822,11 @@ typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure
        //\r
        //ODM Structure\r
        //\r
        //\r
        //ODM Structure\r
        //\r
+        #if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
+       #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
+       BDC_T                                   DM_BdcTable;\r
+       #endif\r
+        #endif\r
        FAT_T                                           DM_FatTable;\r
        DIG_T                                           DM_DigTable;\r
        PS_T                                            DM_PSTable;\r
        FAT_T                                           DM_FatTable;\r
        DIG_T                                           DM_DigTable;\r
        PS_T                                            DM_PSTable;\r
@@ -1405,21 +837,28 @@ typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure
        RA_T                                            DM_RA_Table;  \r
        FALSE_ALARM_STATISTICS          FalseAlmCnt;\r
        FALSE_ALARM_STATISTICS          FlaseAlmCntBuddyAdapter;\r
        RA_T                                            DM_RA_Table;  \r
        FALSE_ALARM_STATISTICS          FalseAlmCnt;\r
        FALSE_ALARM_STATISTICS          FlaseAlmCntBuddyAdapter;\r
-       //#ifdef CONFIG_ANTENNA_DIVERSITY\r
        SWAT_T                                          DM_SWAT_Table;\r
        BOOLEAN                                         RSSI_test;\r
        CFO_TRACKING                                    DM_CfoTrack;\r
        ACS                                                     DM_ACS;\r
        SWAT_T                                          DM_SWAT_Table;\r
        BOOLEAN                                         RSSI_test;\r
        CFO_TRACKING                                    DM_CfoTrack;\r
        ACS                                                     DM_ACS;\r
-       //#endif \r
-       \r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_AP))\r
+#if (RTL8814A_SUPPORT == 1)\r
+       IQK_INFO        IQK_info;\r
+#endif /* (RTL8814A_SUPPORT==1) */\r
+#endif\r
+\r
 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
        //Path Div Struct\r
        PATHDIV_PARA    pathIQK;\r
 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
        //Path Div Struct\r
        PATHDIV_PARA    pathIQK;\r
+#endif\r
+#if(defined(CONFIG_PATH_DIVERSITY))\r
+       PATHDIV_T       DM_PathDiv;\r
 #endif \r
 \r
        EDCA_T          DM_EDCA_Table;\r
        u4Byte          WMMEDCA_BE;\r
 #endif \r
 \r
        EDCA_T          DM_EDCA_Table;\r
        u4Byte          WMMEDCA_BE;\r
-       PATHDIV_T       DM_PathDiv;\r
+\r
        // Copy from SD4 structure\r
        //\r
        // ==================================================\r
        // Copy from SD4 structure\r
        //\r
        // ==================================================\r
@@ -1455,37 +894,13 @@ typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure
        u1Byte                  bUseRAMask;\r
 \r
        ODM_RATE_ADAPTIVE       RateAdaptive;\r
        u1Byte                  bUseRAMask;\r
 \r
        ODM_RATE_ADAPTIVE       RateAdaptive;\r
-\r
+//#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))\r
+#if(defined(CONFIG_ANT_DETECTION))\r
        ANT_DETECTED_INFO       AntDetectedInfo; // Antenna detected information for RSSI tool\r
        ANT_DETECTED_INFO       AntDetectedInfo; // Antenna detected information for RSSI tool\r
-\r
+#endif\r
        ODM_RF_CAL_T    RFCalibrateInfo;\r
        ODM_RF_CAL_T    RFCalibrateInfo;\r
-       \r
-       //\r
-       // TX power tracking\r
-       //\r
-       u1Byte                  BbSwingIdxOfdm[MAX_RF_PATH];\r
-       u1Byte                  BbSwingIdxOfdmCurrent;\r
-       u1Byte                  BbSwingIdxOfdmBase[MAX_RF_PATH];\r
-       BOOLEAN                 BbSwingFlagOfdm;\r
-       u1Byte                  BbSwingIdxCck;\r
-       u1Byte                  BbSwingIdxCckCurrent;\r
-       u1Byte                  BbSwingIdxCckBase;\r
-       u1Byte                  DefaultOfdmIndex;\r
-       u1Byte                  DefaultCckIndex;        \r
-       BOOLEAN                 BbSwingFlagCck;\r
-       \r
-       s1Byte                  Absolute_OFDMSwingIdx[MAX_RF_PATH];   \r
-       s1Byte                  Remnant_OFDMSwingIdx[MAX_RF_PATH];   \r
-       s1Byte                  Remnant_CCKSwingIdx;\r
-       s1Byte                  Modify_TxAGC_Value;       //Remnat compensate value at TxAGC \r
-       BOOLEAN                 Modify_TxAGC_Flag_PathA;\r
-       BOOLEAN                 Modify_TxAGC_Flag_PathB;\r
-       BOOLEAN                 Modify_TxAGC_Flag_PathC;\r
-       BOOLEAN                 Modify_TxAGC_Flag_PathD;\r
-       BOOLEAN                 Modify_TxAGC_Flag_PathA_CCK;\r
-       \r
-       s1Byte                  KfreeOffset[MAX_RF_PATH];\r
 \r
 \r
+       \r
        //\r
        // Dynamic ATC switch\r
        //\r
        //\r
        // Dynamic ATC switch\r
        //\r
@@ -1511,21 +926,26 @@ typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure
        //2011.09.27 add for Path Diversity\r
        RT_TIMER                                CCKPathDiversityTimer;\r
        RT_TIMER        FastAntTrainingTimer;\r
        //2011.09.27 add for Path Diversity\r
        RT_TIMER                                CCKPathDiversityTimer;\r
        RT_TIMER        FastAntTrainingTimer;\r
-       \r
+#ifdef ODM_EVM_ENHANCE_ANTDIV\r
+       RT_TIMER                        EVM_FastAntTrainingTimer;\r
+#endif\r
+       RT_TIMER                sbdcnt_timer;\r
+\r
        // ODM relative workitem.\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        // ODM relative workitem.\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       #if USE_WORKITEM\r
+#if USE_WORKITEM\r
        RT_WORK_ITEM                    PathDivSwitchWorkitem;\r
        RT_WORK_ITEM                    CCKPathDiversityWorkitem;\r
        RT_WORK_ITEM                    FastAntTrainingWorkitem;\r
        RT_WORK_ITEM                    MPT_DIGWorkitem;\r
        RT_WORK_ITEM                    RaRptWorkitem;\r
        RT_WORK_ITEM                    PathDivSwitchWorkitem;\r
        RT_WORK_ITEM                    CCKPathDiversityWorkitem;\r
        RT_WORK_ITEM                    FastAntTrainingWorkitem;\r
        RT_WORK_ITEM                    MPT_DIGWorkitem;\r
        RT_WORK_ITEM                    RaRptWorkitem;\r
-       #endif\r
+       RT_WORK_ITEM                    sbdcnt_workitem;\r
 #endif\r
 \r
 #endif\r
 \r
-       #if (BEAMFORMING_SUPPORT == 1)\r
+#if (BEAMFORMING_SUPPORT == 1)\r
        RT_BEAMFORMING_INFO BeamformingInfo;\r
        RT_BEAMFORMING_INFO BeamformingInfo;\r
-       #endif \r
+#endif \r
+#endif\r
 \r
 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
        \r
 \r
 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
        \r
@@ -1540,37 +960,15 @@ typedef  struct DM_Out_Source_Dynamic_Mechanism_Structure
 #endif\r
 \r
 \r
 #endif\r
 \r
 \r
-\r
-#if 1 //92c-series\r
-#define ODM_RF_PATH_MAX 2\r
-#else //jaguar - series\r
-#define ODM_RF_PATH_MAX 4\r
-#endif\r
-\r
-typedef enum _PhyDM_Structure_Type{\r
+typedef enum _PHYDM_STRUCTURE_TYPE{\r
        PHYDM_FALSEALMCNT,\r
        PHYDM_CFOTRACK,\r
        PHYDM_FALSEALMCNT,\r
        PHYDM_CFOTRACK,\r
+       PHYDM_ADAPTIVITY,\r
        PHYDM_ROMINFO,\r
        \r
        PHYDM_ROMINFO,\r
        \r
-}PhyDM_Structure_Type;\r
-\r
-typedef enum _ODM_RF_RADIO_PATH {\r
-    ODM_RF_PATH_A = 0,   //Radio Path A\r
-    ODM_RF_PATH_B = 1,   //Radio Path B\r
-    ODM_RF_PATH_C = 2,   //Radio Path C\r
-    ODM_RF_PATH_D = 3,   //Radio Path D\r
-    ODM_RF_PATH_AB,\r
-    ODM_RF_PATH_AC,\r
-    ODM_RF_PATH_AD,\r
-    ODM_RF_PATH_BC,\r
-    ODM_RF_PATH_BD,\r
-    ODM_RF_PATH_CD,\r
-    ODM_RF_PATH_ABC,\r
-    ODM_RF_PATH_ACD,\r
-    ODM_RF_PATH_BCD,\r
-    ODM_RF_PATH_ABCD,\r
-  //  ODM_RF_PATH_MAX,    //Max RF number 90 support\r
-} ODM_RF_RADIO_PATH_E, *PODM_RF_RADIO_PATH_E;\r
+}PHYDM_STRUCTURE_TYPE;\r
+\r
+\r
 \r
  typedef enum _ODM_RF_CONTENT{\r
        odm_radioa_txt = 0x1000,\r
 \r
  typedef enum _ODM_RF_CONTENT{\r
        odm_radioa_txt = 0x1000,\r
@@ -1580,13 +978,13 @@ typedef enum _ODM_RF_RADIO_PATH {
 } ODM_RF_CONTENT;\r
 \r
 typedef enum _ODM_BB_Config_Type{\r
 } ODM_RF_CONTENT;\r
 \r
 typedef enum _ODM_BB_Config_Type{\r
-    CONFIG_BB_PHY_REG,   \r
-    CONFIG_BB_AGC_TAB,   \r
-    CONFIG_BB_AGC_TAB_2G,\r
-    CONFIG_BB_AGC_TAB_5G, \r
-    CONFIG_BB_PHY_REG_PG,  \r
-    CONFIG_BB_PHY_REG_MP,\r
-    CONFIG_BB_AGC_TAB_DIFF,\r
+       CONFIG_BB_PHY_REG,   \r
+       CONFIG_BB_AGC_TAB,   \r
+       CONFIG_BB_AGC_TAB_2G,\r
+       CONFIG_BB_AGC_TAB_5G, \r
+       CONFIG_BB_PHY_REG_PG,\r
+       CONFIG_BB_PHY_REG_MP,\r
+       CONFIG_BB_AGC_TAB_DIFF,\r
 } ODM_BB_Config_Type, *PODM_BB_Config_Type;\r
 \r
 typedef enum _ODM_RF_Config_Type{ \r
 } ODM_BB_Config_Type, *PODM_BB_Config_Type;\r
 \r
 typedef enum _ODM_RF_Config_Type{ \r
@@ -1658,10 +1056,7 @@ typedef enum _RT_STATUS{
 //3===========================================================\r
 //3 Tx Power Tracking\r
 //3===========================================================\r
 //3===========================================================\r
 //3 Tx Power Tracking\r
 //3===========================================================\r
-#if 0 //mask this, since these have been defined in typdef.h, vivi\r
-#define        OFDM_TABLE_SIZE         43\r
-#define        CCK_TABLE_SIZE          33\r
-#endif \r
+\r
 \r
 \r
 //3===========================================================\r
 \r
 \r
 //3===========================================================\r
@@ -1687,24 +1082,11 @@ typedef enum tag_RF_Type_Definition
        RF_MAX = 2,\r
 }DM_RF_E;\r
 \r
        RF_MAX = 2,\r
 }DM_RF_E;\r
 \r
-//3===========================================================\r
-//3 Antenna Diversity\r
-//3===========================================================\r
-typedef enum tag_SW_Antenna_Switch_Definition\r
-{\r
-       Antenna_A = 1,\r
-       Antenna_B = 2,  \r
-       Antenna_MAX = 3,\r
-}DM_SWAS_E;\r
-\r
-\r
-// Maximal number of antenna detection mechanism needs to perform, added by Roger, 2011.12.28.\r
-#define        MAX_ANTENNA_DETECTION_CNT       10 \r
 \r
 //\r
 // Extern Global Variables.\r
 //\r
 \r
 //\r
 // Extern Global Variables.\r
 //\r
-//remove PT by YuChen\r
+//PowerTracking move to odm_powerTrakcing.h by YuChen\r
 //\r
 // check Sta pointer valid or not\r
 //\r
 //\r
 // check Sta pointer valid or not\r
 //\r
@@ -1715,25 +1097,13 @@ typedef enum tag_SW_Antenna_Switch_Definition
 #else\r
 #define IS_STA_VALID(pSta)             (pSta)\r
 #endif\r
 #else\r
 #define IS_STA_VALID(pSta)             (pSta)\r
 #endif\r
-// 20100514 Joseph: Add definition for antenna switching test after link.\r
-// This indicates two different the steps. \r
-// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.\r
-// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK\r
-// with original RSSI to determine if it is necessary to switch antenna.\r
-#define SWAW_STEP_PEAK         0\r
-#define SWAW_STEP_DETERMINE    1\r
 \r
 //Remove DIG by yuchen\r
 \r
 \r
 //Remove DIG by yuchen\r
 \r
-\r
-\r
-\r
 //Remove BB power saving by Yuchen\r
 \r
 //Remove BB power saving by Yuchen\r
 \r
+//remove PT by yuchen\r
 \r
 \r
-\r
-\r
-                                               \r
 //ODM_RAStateCheck() Remove by RS_James\r
 \r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_AP|ODM_ADSL))\r
 //ODM_RAStateCheck() Remove by RS_James\r
 \r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_AP|ODM_ADSL))\r
@@ -1760,9 +1130,13 @@ ODM_CheckPowerStatus(
 \r
 #endif\r
 \r
 \r
 #endif\r
 \r
-#if((DM_ODM_SUPPORT_TYPE==ODM_WIN)||(DM_ODM_SUPPORT_TYPE==ODM_CE))\r
 \r
 \r
-u4Byte ConvertTo_dB(u4Byte Value);\r
+\r
+u4Byte odm_ConvertTo_dB(u4Byte Value);\r
+\r
+u4Byte odm_ConvertTo_linear(u4Byte Value);\r
+\r
+#if((DM_ODM_SUPPORT_TYPE==ODM_WIN)||(DM_ODM_SUPPORT_TYPE==ODM_CE))\r
 \r
 u4Byte\r
 GetPSDData(\r
 \r
 u4Byte\r
 GetPSDData(\r
@@ -1772,16 +1146,26 @@ GetPSDData(
 \r
 #endif\r
 \r
 \r
 #endif\r
 \r
-//Remove ODM_Get_Rate_Bitmap() by RS_James     \r
+#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
+VOID\r
+ODM_DMWatchdog_LPS(\r
+       IN              PDM_ODM_T               pDM_Odm\r
+);\r
+#endif\r
 \r
 \r
 \r
 \r
-#if (BEAMFORMING_SUPPORT == 1)\r
-BEAMFORMING_CAP\r
-Beamforming_GetEntryBeamCapByMacId(\r
- IN PMGNT_INFO pMgntInfo,\r
- IN u1Byte  MacId\r
- );\r
-#endif\r
+s4Byte\r
+ODM_PWdB_Conversion(\r
+    IN  s4Byte X,\r
+    IN  u4Byte TotalBit,\r
+    IN  u4Byte DecimalBit\r
+    );\r
+\r
+s4Byte\r
+ODM_SignConversion(\r
+    IN  s4Byte value,\r
+    IN  u4Byte TotalBit\r
+    );\r
 \r
 VOID \r
 ODM_DMInit(\r
 \r
 VOID \r
 ODM_DMInit(\r
@@ -1793,6 +1177,15 @@ ODM_DMReset(
        IN      PDM_ODM_T       pDM_Odm\r
        );\r
 \r
        IN      PDM_ODM_T       pDM_Odm\r
        );\r
 \r
+VOID\r
+phydm_support_ablity_debug(\r
+       IN              PVOID           pDM_VOID,\r
+       IN              u4Byte          *const dm_value,\r
+       IN              u4Byte                  *_used,\r
+       OUT             char                            *output,\r
+       IN              u4Byte                  *_out_len\r
+       );\r
+\r
 VOID\r
 ODM_DMWatchdog(\r
        IN              PDM_ODM_T                       pDM_Odm                 // For common use in the future\r
 VOID\r
 ODM_DMWatchdog(\r
        IN              PDM_ODM_T                       pDM_Odm                 // For common use in the future\r
@@ -1827,6 +1220,18 @@ ODM_CmnInfoUpdate(
        IN              u8Byte                  Value   \r
        );\r
 \r
        IN              u8Byte                  Value   \r
        );\r
 \r
+#if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
+VOID \r
+ODM_InitAllThreads(\r
+    IN PDM_ODM_T       pDM_Odm \r
+    );\r
+\r
+VOID\r
+ODM_StopAllThreads(\r
+       IN PDM_ODM_T    pDM_Odm \r
+       );\r
+#endif\r
+\r
 VOID \r
 ODM_InitAllTimers(\r
     IN PDM_ODM_T       pDM_Odm \r
 VOID \r
 ODM_InitAllTimers(\r
     IN PDM_ODM_T       pDM_Odm \r
@@ -1853,20 +1258,6 @@ VOID ODM_InitAllWorkItems(IN PDM_ODM_T   pDM_Odm );
 VOID ODM_FreeAllWorkItems(IN PDM_ODM_T pDM_Odm );\r
 \r
 \r
 VOID ODM_FreeAllWorkItems(IN PDM_ODM_T pDM_Odm );\r
 \r
 \r
-//===========================================//\r
-// Neil Chen----2011--06--15--\r
-\r
-//3 Path Diversity\r
-//===========================================================\r
-\r
-#define        TP_MODE                0\r
-#define        RSSI_MODE                      1\r
-#define        TRAFFIC_LOW            0\r
-#define        TRAFFIC_HIGH           1\r
-\r
-//#define   PATHDIV_ENABLE      1\r
-\r
-//#define dm_PathDiv_RSSI_Check        ODM_PathDivChkPerPktRssi\r
 \r
 u8Byte\r
 PlatformDivision64(\r
 \r
 u8Byte\r
 PlatformDivision64(\r
@@ -1874,26 +1265,17 @@ PlatformDivision64(
        IN u8Byte       y\r
 );\r
 \r
        IN u8Byte       y\r
 );\r
 \r
-\r
-// 20100514 Joseph: Add definition for antenna switching test after link.\r
-// This indicates two different the steps. \r
-// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.\r
-// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK\r
-// with original RSSI to determine if it is necessary to switch antenna.\r
-#define SWAW_STEP_PEAK         0\r
-#define SWAW_STEP_DETERMINE    1\r
-\r
 //====================================================\r
 //3 PathDiV End\r
 //====================================================\r
 \r
 //====================================================\r
 //3 PathDiV End\r
 //====================================================\r
 \r
-//#define PathDivCheckBeforeLink8192C  ODM_PathDiversityBeforeLink92C\r
 \r
 #define DM_ChangeDynamicInitGainThresh         ODM_ChangeDynamicInitGainThresh\r
 //void ODM_ChangeDynamicInitGainThresh(IN      PADAPTER        pAdapter,\r
 //                                                                                     IN      INT32           DM_Type,\r
 //                                                                                     IN      INT32           DM_Value);\r
 //\r
 \r
 #define DM_ChangeDynamicInitGainThresh         ODM_ChangeDynamicInitGainThresh\r
 //void ODM_ChangeDynamicInitGainThresh(IN      PADAPTER        pAdapter,\r
 //                                                                                     IN      INT32           DM_Type,\r
 //                                                                                     IN      INT32           DM_Value);\r
 //\r
+// PathDiveristy Remove by RS_James\r
 \r
 typedef enum tag_DIG_Connect_Definition\r
 {\r
 \r
 typedef enum tag_DIG_Connect_Definition\r
 {\r
@@ -1919,78 +1301,80 @@ typedef enum tag_DIG_Connect_Definition
 //\r
 // For new definition in MP temporarily fro power tracking,\r
 //\r
 //\r
 // For new definition in MP temporarily fro power tracking,\r
 //\r
+/*\r
 #define odm_TXPowerTrackingDirectCall(_Adapter)        \\r
        IS_HARDWARE_TYPE_8192D(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92D(_Adapter) : \\r
        IS_HARDWARE_TYPE_8192C(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92C(_Adapter) : \\r
        IS_HARDWARE_TYPE_8723A(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_8723A(_Adapter) :\\r
        ODM_TXPowerTrackingCallback_ThermalMeter(_Adapter)\r
 #define odm_TXPowerTrackingDirectCall(_Adapter)        \\r
        IS_HARDWARE_TYPE_8192D(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92D(_Adapter) : \\r
        IS_HARDWARE_TYPE_8192C(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92C(_Adapter) : \\r
        IS_HARDWARE_TYPE_8723A(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_8723A(_Adapter) :\\r
        ODM_TXPowerTrackingCallback_ThermalMeter(_Adapter)\r
-\r
+*/\r
 \r
 \r
 #endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 \r
 \r
 \r
 #endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 \r
-\r
-#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN |ODM_CE))\r
-\r
 VOID\r
 VOID\r
-ODM_SingleDualAntennaDefaultSetting(\r
+ODM_AsocEntry_Init(\r
        IN              PDM_ODM_T               pDM_Odm\r
        );\r
 \r
        IN              PDM_ODM_T               pDM_Odm\r
        );\r
 \r
-BOOLEAN\r
-ODM_SingleDualAntennaDetection(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              u1Byte                  mode\r
-       );\r
+//Remove ODM_DynamicARFBSelect() by RS_James\r
 \r
 \r
-#endif // #if((DM_ODM_SUPPORT_TYPE==ODM_WIN)||(DM_ODM_SUPPORT_TYPE==ODM_CE))\r
-VOID\r
-ODM_UpdateNoisyState(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      BOOLEAN         bNoisyStateFromC2H\r
+PVOID\r
+PhyDM_Get_Structure(\r
+       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              u1Byte                  Structure_Type\r
 );\r
 \r
 );\r
 \r
-u4Byte\r
-Set_RA_DM_Ratrbitmap_by_Noisy(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      WIRELESS_MODE   WirelessMode,\r
-       IN      u4Byte                  ratr_bitmap,\r
-       IN      u1Byte                  rssi_level\r
-);\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) ||(DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+/*===========================================================*/\r
+/* The following is for compile only*/\r
+/*===========================================================*/\r
 \r
 \r
-VOID\r
-ODM_UpdateInitRate(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
-       IN      u1Byte          Rate\r
-       );\r
+#define        IS_HARDWARE_TYPE_8723A(_Adapter)                        FALSE\r
+#define IS_HARDWARE_TYPE_8723AE(_Adapter)                      FALSE\r
+#define        IS_HARDWARE_TYPE_8192C(_Adapter)                        FALSE\r
+#define        IS_HARDWARE_TYPE_8192D(_Adapter)                        FALSE\r
+#define        RF_T_METER_92D                                  0x42\r
 \r
 \r
-VOID\r
-ODM_InitializeTimer(\r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      PRT_TIMER                       pTimer, \r
-       IN      RT_TIMER_CALL_BACK      CallBackFunc, \r
-       IN      PVOID                           pContext,\r
-       IN      const char*                     szID\r
-);\r
 \r
 \r
-VOID\r
-ODM_CancelAllTimers(\r
-       IN PDM_ODM_T    pDM_Odm \r
-);\r
+#define SET_TX_DESC_ANTSEL_A_92C(__pTxDesc, __Value) SET_BITS_TO_LE_1BYTE(__pTxDesc+8+3, 0, 1, __Value)\r
+#define SET_TX_DESC_TX_ANTL_92C(__pTxDesc, __Value) SET_BITS_TO_LE_1BYTE(__pTxDesc+8+3, 4, 2, __Value)\r
+#define SET_TX_DESC_TX_ANT_HT_92C(__pTxDesc, __Value) SET_BITS_TO_LE_1BYTE(__pTxDesc+8+3, 6, 2, __Value)\r
+#define SET_TX_DESC_TX_ANT_CCK_92C(__pTxDesc, __Value) SET_BITS_TO_LE_1BYTE(__pTxDesc+8+3, 2, 2, __Value)\r
 \r
 \r
-VOID\r
-ODM_ReleaseAllTimers(\r
-       IN PDM_ODM_T    pDM_Odm \r
-);\r
+#define GET_RX_STATUS_DESC_RX_MCS(__pRxStatusDesc)                             LE_BITS_TO_1BYTE( __pRxStatusDesc+12, 0, 6)\r
 \r
 \r
-//Remove ODM_DynamicARFBSelect() by RS_James\r
+#define                RX_HAL_IS_CCK_RATE_92C(pDesc)\\r
+                       (GET_RX_STATUS_DESC_RX_MCS(pDesc) == DESC_RATE1M ||\\r
+                       GET_RX_STATUS_DESC_RX_MCS(pDesc) == DESC_RATE2M ||\\r
+                       GET_RX_STATUS_DESC_RX_MCS(pDesc) == DESC_RATE5_5M ||\\r
+                       GET_RX_STATUS_DESC_RX_MCS(pDesc) == DESC_RATE11M)\r
 \r
 \r
-PVOID\r
-PhyDM_Get_Structure(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              u1Byte                  Structure_Type\r
+#define                H2C_92C_PSD_RESULT                              16\r
+\r
+#define                rConfig_ram64x16                                0xb2c\r
+\r
+#define TARGET_CHNL_NUM_2G_5G  59\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+\r
+VOID\r
+FillH2CCmd92C( \r
+       IN      PADAPTER                Adapter,\r
+       IN      u1Byte  ElementID,\r
+       IN      u4Byte  CmdLen,\r
+       IN      pu1Byte pCmdBuffer\r
 );\r
 );\r
+VOID\r
+PHY_SetTxPowerLevel8192C(\r
+       IN      PADAPTER                Adapter,\r
+       IN      u1Byte                  channel\r
+       );\r
+u1Byte GetRightChnlPlaceforIQK(u1Byte chnl);\r
+\r
+#endif\r
 \r
 \r
+//===========================================================\r
+#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
 void odm_dtc(PDM_ODM_T pDM_Odm);\r
 \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
 void odm_dtc(PDM_ODM_T pDM_Odm);\r
index d24c4c63bbdee2dae8fadde3c43552b56b70af7f..0651fbe034689c927a12115abd3fc196679c2387 100755 (executable)
@@ -58,4 +58,4 @@ ODM_GetAutoChannelSelectResult(
        IN              u1Byte                  Band\r
 );\r
 \r
        IN              u1Byte                  Band\r
 );\r
 \r
-#endif
\ No newline at end of file
+#endif\r
index d6a1c5d86fafdd7e0345b2a954ed71502ee057bf..baa1fc4a06f3f3f1524fca8c7991ff25b444ee83 100755 (executable)
@@ -25,7 +25,8 @@
 #include "Mp_Precomp.h"\r
 #include "phydm_precomp.h"\r
 \r
 #include "Mp_Precomp.h"\r
 #include "phydm_precomp.h"\r
 \r
-#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN |ODM_CE))\r
+//#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN |ODM_CE))\r
+#if(defined(CONFIG_ANT_DETECTION))\r
 \r
 //IS_ANT_DETECT_SUPPORT_SINGLE_TONE(Adapter)   \r
 //IS_ANT_DETECT_SUPPORT_RSSI(Adapter)          \r
 \r
 //IS_ANT_DETECT_SUPPORT_SINGLE_TONE(Adapter)   \r
 //IS_ANT_DETECT_SUPPORT_RSSI(Adapter)          \r
 \r
 VOID\r
 odm_PHY_SaveAFERegisters(\r
 \r
 VOID\r
 odm_PHY_SaveAFERegisters(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
+       IN      PVOID           pDM_VOID,\r
        IN      pu4Byte         AFEReg,\r
        IN      pu4Byte         AFEBackup,\r
        IN      u4Byte          RegisterNum\r
        )\r
 {\r
        IN      pu4Byte         AFEReg,\r
        IN      pu4Byte         AFEBackup,\r
        IN      u4Byte          RegisterNum\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        u4Byte  i;\r
        \r
        //RT_DISP(FINIT, INIT_IQK, ("Save ADDA parameters.\n"));\r
        u4Byte  i;\r
        \r
        //RT_DISP(FINIT, INIT_IQK, ("Save ADDA parameters.\n"));\r
@@ -52,12 +54,13 @@ odm_PHY_SaveAFERegisters(
 \r
 VOID\r
 odm_PHY_ReloadAFERegisters(\r
 \r
 VOID\r
 odm_PHY_ReloadAFERegisters(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
+       IN      PVOID           pDM_VOID,\r
        IN      pu4Byte         AFEReg,\r
        IN      pu4Byte         AFEBackup,\r
        IN      u4Byte          RegiesterNum\r
        )\r
 {\r
        IN      pu4Byte         AFEReg,\r
        IN      pu4Byte         AFEBackup,\r
        IN      u4Byte          RegiesterNum\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        u4Byte  i;\r
 \r
        //RT_DISP(FINIT, INIT_IQK, ("Reload ADDA power saving parameters !\n"));\r
        u4Byte  i;\r
 \r
        //RT_DISP(FINIT, INIT_IQK, ("Reload ADDA power saving parameters !\n"));\r
@@ -76,9 +79,10 @@ odm_PHY_ReloadAFERegisters(
 //\r
 VOID\r
 ODM_SingleDualAntennaDefaultSetting(\r
 //\r
 VOID\r
 ODM_SingleDualAntennaDefaultSetting(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
        )\r
 {\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        PADAPTER        pAdapter         =  pDM_Odm->Adapter;\r
 \r
        pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        PADAPTER        pAdapter         =  pDM_Odm->Adapter;\r
 \r
@@ -113,10 +117,11 @@ ODM_SingleDualAntennaDefaultSetting(
 //\r
 BOOLEAN\r
 ODM_SingleDualAntennaDetection(\r
 //\r
 BOOLEAN\r
 ODM_SingleDualAntennaDetection(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID           pDM_VOID,\r
        IN              u1Byte                  mode\r
        )\r
 {\r
        IN              u1Byte                  mode\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PADAPTER        pAdapter         =  pDM_Odm->Adapter;\r
        pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        u4Byte          CurrentChannel,RfLoopReg;\r
        PADAPTER        pAdapter         =  pDM_Odm->Adapter;\r
        pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        u4Byte          CurrentChannel,RfLoopReg;\r
@@ -492,30 +497,17 @@ ODM_SingleDualAntennaDetection(
 //1 [2. Scan AP RSSI Method] ==================================================\r
 \r
 \r
 //1 [2. Scan AP RSSI Method] ==================================================\r
 \r
 \r
-void\r
-odm_SwAntDetectInit(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-       )\r
-{\r
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
-       \r
-       //pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c = ODM_Read4Byte(pDM_Odm, rDPDT_control);\r
-       //pDM_SWAT_Table->PreAntenna = MAIN_ANT;\r
-       //pDM_SWAT_Table->CurAntenna = MAIN_ANT;\r
-       pDM_SWAT_Table->SWAS_NoLink_State = 0;\r
-       pDM_SWAT_Table->Pre_Aux_FailDetec = FALSE;\r
-       pDM_SWAT_Table->SWAS_NoLink_BK_Reg948 = 0xff;\r
-}\r
 \r
 \r
 BOOLEAN\r
 ODM_SwAntDivCheckBeforeLink(\r
 \r
 \r
 BOOLEAN\r
 ODM_SwAntDivCheckBeforeLink(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
        )\r
 {\r
 \r
 #if (RT_MEM_SIZE_LEVEL != RT_MEM_SIZE_MINIMUM)\r
 \r
        )\r
 {\r
 \r
 #if (RT_MEM_SIZE_LEVEL != RT_MEM_SIZE_MINIMUM)\r
 \r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
        HAL_DATA_TYPE*  pHalData = GET_HAL_DATA(Adapter);\r
        PMGNT_INFO              pMgntInfo = &Adapter->MgntInfo;\r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
        HAL_DATA_TYPE*  pHalData = GET_HAL_DATA(Adapter);\r
        PMGNT_INFO              pMgntInfo = &Adapter->MgntInfo;\r
@@ -971,10 +963,11 @@ return FALSE;
 \r
 u4Byte\r
 odm_GetPSDData(\r
 \r
 u4Byte\r
 odm_GetPSDData(\r
-       IN PDM_ODM_T    pDM_Odm,\r
+       IN      PVOID                   pDM_VOID,\r
        IN u2Byte                       point,\r
        IN u1Byte               initial_gain)\r
 {\r
        IN u2Byte                       point,\r
        IN u1Byte               initial_gain)\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        u4Byte                  psd_report;\r
        \r
        ODM_SetBBReg(pDM_Odm, 0x808, 0x3FF, point);\r
        u4Byte                  psd_report;\r
        \r
        ODM_SetBBReg(pDM_Odm, 0x808, 0x3FF, point);\r
@@ -983,7 +976,7 @@ odm_GetPSDData(
        ODM_SetBBReg(pDM_Odm, 0x808, BIT22, 0);//Stop PSD calculation,  Reg808[22]=1->0\r
        psd_report = ODM_GetBBReg(pDM_Odm,0x8B4, bMaskDWord) & 0x0000FFFF;//Read PSD report, Reg8B4[15:0]\r
        \r
        ODM_SetBBReg(pDM_Odm, 0x808, BIT22, 0);//Stop PSD calculation,  Reg808[22]=1->0\r
        psd_report = ODM_GetBBReg(pDM_Odm,0x8B4, bMaskDWord) & 0x0000FFFF;//Read PSD report, Reg8B4[15:0]\r
        \r
-       psd_report = (u4Byte) (ConvertTo_dB(psd_report));//+(u4Byte)(initial_gain);\r
+       psd_report = (u4Byte) (odm_ConvertTo_dB(psd_report));//+(u4Byte)(initial_gain);\r
        return psd_report;\r
 }\r
 \r
        return psd_report;\r
 }\r
 \r
@@ -991,9 +984,10 @@ odm_GetPSDData(
 \r
 VOID\r
 ODM_SingleDualAntennaDetection_PSD(\r
 \r
 VOID\r
 ODM_SingleDualAntennaDetection_PSD(\r
-       IN       PDM_ODM_T      pDM_Odm\r
+       IN       PVOID  pDM_VOID\r
 )\r
 {\r
 )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PADAPTER        pAdapter         =  pDM_Odm->Adapter;\r
        pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        u4Byte  Channel_ori;\r
        PADAPTER        pAdapter         =  pDM_Odm->Adapter;\r
        pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        u4Byte  Channel_ori;\r
@@ -1200,7 +1194,22 @@ ODM_SingleDualAntennaDetection_PSD(
 \r
 }\r
 \r
 \r
 }\r
 \r
+#endif\r
+void\r
+odm_SwAntDetectInit(\r
+       IN              PVOID           pDM_VOID\r
+       )\r
+{\r
+#if(defined(CONFIG_ANT_DETECTION))\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
 \r
 \r
-\r
-\r
+       //pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c = ODM_Read4Byte(pDM_Odm, rDPDT_control);\r
+       //pDM_SWAT_Table->PreAntenna = MAIN_ANT;\r
+       //pDM_SWAT_Table->CurAntenna = MAIN_ANT;\r
+       pDM_SWAT_Table->SWAS_NoLink_State = 0;\r
+       pDM_SWAT_Table->Pre_Aux_FailDetec = FALSE;\r
+       pDM_SWAT_Table->SWAS_NoLink_BK_Reg948 = 0xff;\r
 #endif\r
 #endif\r
+}\r
+\r
index 9e18c2ebfeee8314717bdcaf991d22deab6f3519..19b2561f4a668a0782bf38c7eb8fa08e89ae0e3c 100755 (executable)
 #ifndef        __PHYDMANTDECT_H__\r
 #define    __PHYDMANTDECT_H__\r
 \r
 #ifndef        __PHYDMANTDECT_H__\r
 #define    __PHYDMANTDECT_H__\r
 \r
-#define ANTDECT_VERSION        "1.0"\r
+#define ANTDECT_VERSION        "2.0" //2014.11.04\r
+\r
+#if(defined(CONFIG_ANT_DETECTION))\r
+//#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN |ODM_CE))\r
+//ANT Test\r
+#define                ANTTESTALL              0x00    /*Ant A or B will be Testing*/   \r
+#define                ANTTESTA                0x01    /*Ant A will be Testing*/       \r
+#define                ANTTESTB                0x02    /*Ant B will be testing*/\r
+\r
+#define        MAX_ANTENNA_DETECTION_CNT       10 \r
+\r
+\r
+typedef struct _ANT_DETECTED_INFO{\r
+       BOOLEAN                 bAntDetected;\r
+       u4Byte                  dBForAntA;\r
+       u4Byte                  dBForAntB;\r
+       u4Byte                  dBForAntO;\r
+}ANT_DETECTED_INFO, *PANT_DETECTED_INFO;\r
+\r
+\r
+typedef enum tag_SW_Antenna_Switch_Definition\r
+{\r
+       Antenna_A = 1,\r
+       Antenna_B = 2,  \r
+       Antenna_MAX = 3,\r
+}DM_SWAS_E;\r
+\r
+\r
 \r
 \r
-#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN |ODM_CE))\r
 //1 [1. Single Tone Method] ===================================================\r
 \r
 \r
 \r
 VOID\r
 ODM_SingleDualAntennaDefaultSetting(\r
 //1 [1. Single Tone Method] ===================================================\r
 \r
 \r
 \r
 VOID\r
 ODM_SingleDualAntennaDefaultSetting(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
        );\r
 \r
 BOOLEAN\r
 ODM_SingleDualAntennaDetection(\r
        );\r
 \r
 BOOLEAN\r
 ODM_SingleDualAntennaDetection(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID           pDM_VOID,\r
        IN              u1Byte                  mode\r
        );\r
 \r
 //1 [2. Scan AP RSSI Method] ==================================================\r
 \r
        IN              u1Byte                  mode\r
        );\r
 \r
 //1 [2. Scan AP RSSI Method] ==================================================\r
 \r
-VOID
-odm_SwAntDetectInit(
-       IN              PDM_ODM_T               pDM_Odm
-       );\r
-\r
-\r
 #define SwAntDivCheckBeforeLink        ODM_SwAntDivCheckBeforeLink\r
 \r
 BOOLEAN \r
 ODM_SwAntDivCheckBeforeLink(\r
 #define SwAntDivCheckBeforeLink        ODM_SwAntDivCheckBeforeLink\r
 \r
 BOOLEAN \r
 ODM_SwAntDivCheckBeforeLink(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
        );\r
 \r
 \r
        );\r
 \r
 \r
@@ -62,15 +82,17 @@ ODM_SwAntDivCheckBeforeLink(
 \r
 VOID\r
 ODM_SingleDualAntennaDetection_PSD(\r
 \r
 VOID\r
 ODM_SingleDualAntennaDetection_PSD(\r
-       IN       PDM_ODM_T      pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 );\r
 \r
 );\r
 \r
+#endif\r
 \r
 \r
+VOID\r
+odm_SwAntDetectInit(\r
+       IN              PVOID           pDM_VOID\r
+       );\r
 \r
 \r
 \r
 \r
-\r
-\r
-#endif\r
 #endif\r
 \r
 \r
 #endif\r
 \r
 \r
index 4898e9ce7db2d19342f033ecec0f8bfac12430c7..f9349b047651c8b954e4e6fa2d6e289377673e09 100755 (executable)
 //======================================================\r
 VOID\r
 ODM_StopAntennaSwitchDm(\r
 //======================================================\r
 VOID\r
 ODM_StopAntennaSwitchDm(\r
-       IN      PDM_ODM_T       pDM_Odm\r
+       IN              PVOID                   pDM_VOID\r
        )\r
 {\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        // disable ODM antenna diversity\r
        pDM_Odm->SupportAbility &= ~ODM_BB_ANT_DIV;\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("STOP Antenna Diversity \n"));\r
        // disable ODM antenna diversity\r
        pDM_Odm->SupportAbility &= ~ODM_BB_ANT_DIV;\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("STOP Antenna Diversity \n"));\r
@@ -41,10 +42,11 @@ ODM_StopAntennaSwitchDm(
 \r
 VOID\r
 ODM_SetAntConfig(\r
 \r
 VOID\r
 ODM_SetAntConfig(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
+       IN      PVOID   pDM_VOID,\r
        IN      u1Byte          antSetting      // 0=A, 1=B, 2=C, ....\r
        )\r
 {\r
        IN      u1Byte          antSetting      // 0=A, 1=B, 2=C, ....\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
        {\r
                if(antSetting == 0)             // ant A\r
        if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
        {\r
                if(antSetting == 0)             // ant A\r
@@ -57,88 +59,156 @@ ODM_SetAntConfig(
 //======================================================\r
 \r
 \r
 //======================================================\r
 \r
 \r
-VOID
-ODM_SwAntDivRestAfterLink(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;
-       u4Byte             i;
-
-       if(pDM_Odm->SupportICType == ODM_RTL8723A)
-       {
-           pDM_SWAT_Table->RSSI_cnt_A = 0;
-           pDM_SWAT_Table->RSSI_cnt_B = 0;
-           pDM_Odm->RSSI_test = FALSE;
-           pDM_SWAT_Table->try_flag = 0xff;
-           pDM_SWAT_Table->RSSI_Trying = 0;
-           pDM_SWAT_Table->SelectAntennaMap=0xAA;
-       
-       }
-       else if(pDM_Odm->SupportICType & (ODM_RTL8723B|ODM_RTL8821))
-       {
-               pDM_Odm->RSSI_test = FALSE;
-               pDM_SWAT_Table->try_flag = 0xff;
-               pDM_SWAT_Table->RSSI_Trying = 0;
-               pDM_SWAT_Table->Double_chk_flag= 0;
-               
-               pDM_FatTable->RxIdleAnt=MAIN_ANT;
-               
-               for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)
-               {
-                       pDM_FatTable->MainAnt_Sum[i] = 0;
-                       pDM_FatTable->AuxAnt_Sum[i] = 0;
-                       pDM_FatTable->MainAnt_Cnt[i] = 0;
-                       pDM_FatTable->AuxAnt_Cnt[i] = 0;
-               }
-
-       }
-}
-\r
-\r
-#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
 VOID\r
 VOID\r
-odm_AntDiv_on_off( IN PDM_ODM_T        pDM_Odm ,IN u1Byte swch)\r
+ODM_SwAntDivRestAfterLink(\r
+       IN              PVOID           pDM_VOID\r
+       )\r
 {\r
 {\r
-       if(pDM_Odm->AntDivType==S0S1_SW_ANTDIV || pDM_Odm->AntDivType==CGCS_RX_SW_ANTDIV) \r
-               return;\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
+       pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;\r
+       u4Byte             i;\r
 \r
 \r
-       if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8723A)\r
        {\r
        {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("(( Turn %s )) N-Series HW-AntDiv block\n",(swch==ANTDIV_ON)?"ON" : "OFF"));\r
-               ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, swch); //OFDM AntDiv function block enable\r
-               if( pDM_Odm->AntDivType != S0S1_SW_ANTDIV)\r
-                       ODM_SetBBReg(pDM_Odm, 0xa00 , BIT15, swch); //CCK AntDiv function block enable\r
+           pDM_SWAT_Table->RSSI_cnt_A = 0;\r
+           pDM_SWAT_Table->RSSI_cnt_B = 0;\r
+           pDM_Odm->RSSI_test = FALSE;\r
+           pDM_SWAT_Table->try_flag = 0xff;\r
+           pDM_SWAT_Table->RSSI_Trying = 0;\r
+           pDM_SWAT_Table->SelectAntennaMap=0xAA;\r
+       \r
+       }\r
+       else if(pDM_Odm->SupportICType & (ODM_RTL8723B|ODM_RTL8821))\r
+       {\r
+               pDM_Odm->RSSI_test = FALSE;\r
+               pDM_SWAT_Table->try_flag = 0xff;\r
+               pDM_SWAT_Table->RSSI_Trying = 0;\r
+               pDM_SWAT_Table->Double_chk_flag= 0;\r
+               \r
+               pDM_FatTable->RxIdleAnt=MAIN_ANT;\r
+               \r
+               for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)\r
+               {\r
+                       pDM_FatTable->MainAnt_Sum[i] = 0;\r
+                       pDM_FatTable->AuxAnt_Sum[i] = 0;\r
+                       pDM_FatTable->MainAnt_Cnt[i] = 0;\r
+                       pDM_FatTable->AuxAnt_Cnt[i] = 0;\r
+               }\r
+\r
        }\r
        }\r
-       else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
+}\r
+\r
+\r
+#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
+VOID\r
+odm_AntDiv_on_off( \r
+       IN      PVOID           pDM_VOID ,\r
+       IN      u1Byte          swch\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
+       \r
+       if(pDM_FatTable->AntDiv_OnOff != swch)\r
        {\r
        {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("(( Turn %s )) AC-Series HW-AntDiv block\n",(swch==ANTDIV_ON)?"ON" : "OFF"));\r
-               if(pDM_Odm->SupportICType == ODM_RTL8812)\r
+               if(pDM_Odm->AntDivType==S0S1_SW_ANTDIV || pDM_Odm->AntDivType==CGCS_RX_SW_ANTDIV) \r
+                       return;\r
+\r
+               if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
                {\r
                {\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("(( Turn %s )) N-Series HW-AntDiv block\n",(swch==ANTDIV_ON)?"ON" : "OFF"));\r
                        ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, swch); //OFDM AntDiv function block enable\r
                        ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, swch); //OFDM AntDiv function block enable\r
-                       //ODM_SetBBReg(pDM_Odm, 0xa00 , BIT15, swch); //CCK AntDiv function block enable\r
+                       ODM_SetBBReg(pDM_Odm, 0xa00 , BIT15, swch); //CCK AntDiv function block enable\r
                }\r
                }\r
-               else\r
+               else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
                {\r
                {\r
-               ODM_SetBBReg(pDM_Odm, 0x8D4 , BIT24, swch); //OFDM AntDiv function block enable\r
-                       \r
-                       if( (pDM_Odm->CutVersion >= ODM_CUT_C) && (pDM_Odm->SupportICType == ODM_RTL8821) && ( pDM_Odm->AntDivType != S0S1_SW_ANTDIV))\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("(( Turn %s )) AC-Series HW-AntDiv block\n",(swch==ANTDIV_ON)?"ON" : "OFF"));\r
+                       if(pDM_Odm->SupportICType == ODM_RTL8812)\r
                        {\r
                        {\r
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("(( Turn %s )) CCK HW-AntDiv block\n",(swch==ANTDIV_ON)?"ON" : "OFF"));\r
-                               ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, swch); \r
-                               ODM_SetBBReg(pDM_Odm, 0xA00 , BIT15, swch); //CCK AntDiv function block enable\r
+                               ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, swch); //OFDM AntDiv function block enable\r
+                               ODM_SetBBReg(pDM_Odm, 0xa00 , BIT15, swch); //CCK AntDiv function block enable\r
                        }\r
                        }\r
-               }\r
-         }\r
+                       else\r
+                       {\r
+                               ODM_SetBBReg(pDM_Odm, 0x8D4 , BIT24, swch); //OFDM AntDiv function block enable\r
+                               \r
+                               if( (pDM_Odm->CutVersion >= ODM_CUT_C) && (pDM_Odm->SupportICType == ODM_RTL8821) && ( pDM_Odm->AntDivType != S0S1_SW_ANTDIV))\r
+                               {\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("(( Turn %s )) CCK HW-AntDiv block\n",(swch==ANTDIV_ON)?"ON" : "OFF"));\r
+                                       ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, swch); \r
+                                       ODM_SetBBReg(pDM_Odm, 0xA00 , BIT15, swch); //CCK AntDiv function block enable\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+       pDM_FatTable->AntDiv_OnOff =swch;\r
+       \r
+}\r
+\r
+VOID\r
+odm_FastTraining_enable(\r
+       IN              PVOID           pDM_VOID, \r
+       IN              u1Byte                          swch\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte enable;\r
+       \r
+       if( swch== FAT_ON)\r
+               enable=1;\r
+       else\r
+               enable=0;\r
+\r
+       if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
+       {\r
+           \r
+            ODM_SetBBReg(pDM_Odm, 0xe08 , BIT16, enable);      //enable fast training\r
+        }\r
+        else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+        {\r
+           ODM_SetBBReg(pDM_Odm, 0xB34 , BIT28, enable);       //enable fast training (path-A)\r
+           //ODM_SetBBReg(pDM_Odm, 0xB34 , BIT29, enable);     //enable fast training (path-B)\r
+        }\r
+}\r
+\r
+VOID\r
+odm_Tx_By_TxDesc_or_Reg( \r
+       IN              PVOID           pDM_VOID, \r
+       IN              u1Byte                  swch\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte enable;\r
+       \r
+       if( swch== TX_BY_DESC)\r
+               enable=1;\r
+       else\r
+               enable=0;\r
+\r
+       if(pDM_Odm->AntDivType != CGCS_RX_HW_ANTDIV)\r
+       {\r
+               if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
+               {\r
+                               ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, enable); \r
+               }       \r
+               else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
+               {\r
+                               ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, enable); \r
+               }\r
+       }\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-ODM_UpdateRxIdleAnt(IN PDM_ODM_T pDM_Odm, IN u1Byte Ant)\r
+ODM_UpdateRxIdleAnt(\r
+       IN              PVOID           pDM_VOID, \r
+       IN              u1Byte          Ant\r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        u4Byte  DefaultAnt, OptionalAnt,value32;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        u4Byte  DefaultAnt, OptionalAnt,value32;\r
-\r
+       \r
        //#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
        //PADAPTER              pAdapter = pDM_Odm->Adapter;\r
        //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);\r
        //#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
        //PADAPTER              pAdapter = pDM_Odm->Adapter;\r
        //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);\r
@@ -149,7 +219,7 @@ ODM_UpdateRxIdleAnt(IN PDM_ODM_T pDM_Odm, IN u1Byte Ant)
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Update Rx-Idle-Ant ] RxIdleAnt =%s\n",(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
 \r
                if(!(pDM_Odm->SupportICType & ODM_RTL8723B))\r
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Update Rx-Idle-Ant ] RxIdleAnt =%s\n",(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
 \r
                if(!(pDM_Odm->SupportICType & ODM_RTL8723B))\r
-                       pDM_FatTable->RxIdleAnt = Ant;\r
+                       pDM_FatTable->RxIdleAnt = Ant;\r
 \r
                if(Ant == MAIN_ANT)\r
                {\r
 \r
                if(Ant == MAIN_ANT)\r
                {\r
@@ -170,21 +240,23 @@ ODM_UpdateRxIdleAnt(IN PDM_ODM_T pDM_Odm, IN u1Byte Ant)
                                ODM_SetBBReg(pDM_Odm, 0xB38 , BIT8|BIT7|BIT6, OptionalAnt);//Optional RX\r
                                ODM_SetBBReg(pDM_Odm, 0x860, BIT14|BIT13|BIT12, DefaultAnt);//Default TX        \r
                        }\r
                                ODM_SetBBReg(pDM_Odm, 0xB38 , BIT8|BIT7|BIT6, OptionalAnt);//Optional RX\r
                                ODM_SetBBReg(pDM_Odm, 0x860, BIT14|BIT13|BIT12, DefaultAnt);//Default TX        \r
                        }\r
+                       #if (RTL8723B_SUPPORT == 1)\r
                        else if(pDM_Odm->SupportICType==ODM_RTL8723B)\r
                        {\r
                                value32 = ODM_GetBBReg(pDM_Odm, 0x948, 0xFFF);\r
                        else if(pDM_Odm->SupportICType==ODM_RTL8723B)\r
                        {\r
                                value32 = ODM_GetBBReg(pDM_Odm, 0x948, 0xFFF);\r
-                               \r
-                               if (value32 !=0x280)\r
-                                       ODM_UpdateRxIdleAnt_8723B(pDM_Odm, Ant, DefaultAnt, OptionalAnt);\r
-                               else\r
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Update Rx-Idle-Ant ] 8723B: Fail to set RX antenna due to 0x948 = 0x280\n"));\r
+                       \r
+                               if(value32 !=0x280)\r
+                                       ODM_UpdateRxIdleAnt_8723B(pDM_Odm, Ant, DefaultAnt, OptionalAnt);\r
+                               else\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Update Rx-Idle-Ant ] 8723B: Fail to set RX antenna due to 0x948 = 0x280\n"));\r
                        }\r
                        }\r
-                       else\r
+                       #endif\r
+                       else //88E\r
                        {\r
                                ODM_SetBBReg(pDM_Odm, 0x864 , BIT5|BIT4|BIT3, DefaultAnt);      //Default RX\r
                                ODM_SetBBReg(pDM_Odm, 0x864 , BIT8|BIT7|BIT6, OptionalAnt);     //Optional RX\r
                        {\r
                                ODM_SetBBReg(pDM_Odm, 0x864 , BIT5|BIT4|BIT3, DefaultAnt);      //Default RX\r
                                ODM_SetBBReg(pDM_Odm, 0x864 , BIT8|BIT7|BIT6, OptionalAnt);     //Optional RX\r
-                               ODM_SetBBReg(pDM_Odm, 0x860, BIT14|BIT13|BIT12, DefaultAnt);            //Default TX    \r
-                       }\r
+                               ODM_SetBBReg(pDM_Odm, 0x860, BIT14|BIT13|BIT12, DefaultAnt);            //Default TX    \r
+                       }\r
                }\r
                else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
                {\r
                }\r
                else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
                {\r
@@ -204,7 +276,7 @@ ODM_UpdateRxIdleAnt(IN PDM_ODM_T pDM_Odm, IN u1Byte Ant)
                        ODM_SetBBReg(pDM_Odm, ODM_REG_TRMUX_11AC , BIT27|BIT26|BIT25, DefaultAnt);       //Default TX\r
                        */\r
                }\r
                        ODM_SetBBReg(pDM_Odm, ODM_REG_TRMUX_11AC , BIT27|BIT26|BIT25, DefaultAnt);       //Default TX\r
                        */\r
                }\r
-               \r
+\r
                if(pDM_Odm->SupportICType==ODM_RTL8188E)\r
                {               \r
                        ODM_SetMACReg(pDM_Odm, 0x6D8 , BIT7|BIT6, DefaultAnt);  //\14PathA Resp Tx\r
                if(pDM_Odm->SupportICType==ODM_RTL8188E)\r
                {               \r
                        ODM_SetMACReg(pDM_Odm, 0x6D8 , BIT7|BIT6, DefaultAnt);  //\14PathA Resp Tx\r
@@ -213,10 +285,10 @@ ODM_UpdateRxIdleAnt(IN PDM_ODM_T pDM_Odm, IN u1Byte Ant)
                {\r
                        ODM_SetMACReg(pDM_Odm, 0x6D8 , BIT10|BIT9|BIT8, DefaultAnt);    //\14PathA Resp Tx\r
                }       \r
                {\r
                        ODM_SetMACReg(pDM_Odm, 0x6D8 , BIT10|BIT9|BIT8, DefaultAnt);    //\14PathA Resp Tx\r
                }       \r
-               \r
+\r
        }\r
        else// pDM_FatTable->RxIdleAnt == Ant\r
        }\r
        else// pDM_FatTable->RxIdleAnt == Ant\r
-       {\r
+        {\r
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Stay in Ori-Ant ]  RxIdleAnt =%s\n",(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
                pDM_FatTable->RxIdleAnt = Ant;\r
        }\r
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Stay in Ori-Ant ]  RxIdleAnt =%s\n",(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
                pDM_FatTable->RxIdleAnt = Ant;\r
        }\r
@@ -224,33 +296,508 @@ ODM_UpdateRxIdleAnt(IN PDM_ODM_T pDM_Odm, IN u1Byte Ant)
 \r
 \r
 VOID\r
 \r
 \r
 VOID\r
-odm_UpdateTxAnt(IN PDM_ODM_T pDM_Odm, IN u1Byte Ant, IN u4Byte MacId)\r
+odm_UpdateTxAnt(\r
+       IN              PVOID           pDM_VOID, \r
+       IN              u1Byte          Ant, \r
+       IN              u4Byte          MacId\r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        u1Byte  TxAnt;\r
 \r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        u1Byte  TxAnt;\r
 \r
-       if(Ant == MAIN_ANT)\r
-               TxAnt = ANT1_2G;\r
+       if (pDM_Odm->AntDivType==CG_TRX_SMART_ANTDIV)\r
+       {\r
+               TxAnt=Ant;\r
+       }\r
        else\r
        else\r
-               TxAnt = ANT2_2G;\r
+       {\r
+               if(Ant == MAIN_ANT)\r
+                       TxAnt = ANT1_2G;\r
+               else\r
+                       TxAnt = ANT2_2G;\r
+       }\r
        \r
        pDM_FatTable->antsel_a[MacId] = TxAnt&BIT0;\r
        pDM_FatTable->antsel_b[MacId] = (TxAnt&BIT1)>>1;\r
        pDM_FatTable->antsel_c[MacId] = (TxAnt&BIT2)>>2;\r
        \r
        pDM_FatTable->antsel_a[MacId] = TxAnt&BIT0;\r
        pDM_FatTable->antsel_b[MacId] = (TxAnt&BIT1)>>1;\r
        pDM_FatTable->antsel_c[MacId] = (TxAnt&BIT2)>>2;\r
-        #if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-       if (pDM_Odm->antdiv_rssi)\r
-        {\r
-               //panic_printk("[Tx from TxInfo]: MacID:(( %d )),  TxAnt = (( %s ))\n",MacId,(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT");\r
-               //panic_printk("antsel_tr_mux=(( 3'b%d%d%d ))\n",       pDM_FatTable->antsel_c[MacId] , pDM_FatTable->antsel_b[MacId] , pDM_FatTable->antsel_a[MacId] );\r
+       \r
+       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Tx from TxInfo]: MacID:(( %d )),  TxAnt = (( %s ))\n", MacId,(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
+       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("antsel_tr_mux=(( 3'b%d%d%d ))\n",pDM_FatTable->antsel_c[MacId] , pDM_FatTable->antsel_b[MacId] , pDM_FatTable->antsel_a[MacId] ));\r
+       \r
+}\r
+\r
+#ifdef BEAMFORMING_SUPPORT\r
+#if(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+\r
+VOID\r
+odm_BDC_Init(\r
+       IN              PVOID           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pBDC_T  pDM_BdcTable=&pDM_Odm->DM_BdcTable;\r
+\r
+       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("\n[ BDC Initialization......] \n"));\r
+       pDM_BdcTable->BDC_state=BDC_DIV_TRAIN_STATE;\r
+       pDM_BdcTable->BDC_Mode=BDC_MODE_NULL;\r
+       pDM_BdcTable->BDC_Try_flag=0;\r
+       pDM_BdcTable->BDCcoexType_wBfer=0;\r
+       pDM_Odm->bdc_holdstate=0xff;\r
+       \r
+       if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, 0xd7c , 0x0FFFFFFF, 0x1081008); \r
+               ODM_SetBBReg(pDM_Odm, 0xd80 , 0x0FFFFFFF, 0); \r
+       }\r
+       else if(pDM_Odm->SupportICType == ODM_RTL8812)\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, 0x9b0 , 0x0FFFFFFF, 0x1081008);     //0x9b0[30:0] = 01081008\r
+               ODM_SetBBReg(pDM_Odm, 0x9b4 , 0x0FFFFFFF, 0);                 //0x9b4[31:0] = 00000000\r
+       }\r
+       \r
+}\r
+\r
+\r
+VOID\r
+odm_CSI_on_off(\r
+       IN              PVOID           pDM_VOID, \r
+       IN              u1Byte                  CSI_en\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       if(CSI_en==CSI_ON)\r
+       {\r
+               if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+               {\r
+                       ODM_SetMACReg(pDM_Odm, 0xd84 , BIT11, 1);  //0xd84[11]=1\r
+               }\r
+               else if(pDM_Odm->SupportICType == ODM_RTL8812)\r
+               {\r
+                       ODM_SetMACReg(pDM_Odm, 0x9b0 , BIT31, 1);  //0x9b0[31]=1\r
+               }\r
+       \r
+       }\r
+       else if(CSI_en==CSI_OFF)\r
+       {\r
+               if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+               {\r
+                       ODM_SetMACReg(pDM_Odm, 0xd84 , BIT11, 0);  //0xd84[11]=0\r
+               }\r
+               else if(pDM_Odm->SupportICType == ODM_RTL8812)\r
+               {\r
+                       ODM_SetMACReg(pDM_Odm, 0x9b0 , BIT31, 0);  //0x9b0[31]=0\r
+               }\r
+       }       \r
+}\r
+\r
+VOID\r
+odm_BDCcoexType_withBferClient(\r
+       IN              PVOID           pDM_VOID, \r
+       IN              u1Byte                  swch\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pBDC_T  pDM_BdcTable = &pDM_Odm->DM_BdcTable;\r
+       u1Byte     BDCcoexType_wBfer;\r
+       \r
+       if(swch==DIVON_CSIOFF)\r
+       {\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[BDCcoexType: 1] {DIV,CSI} ={1,0} \n"));\r
+               BDCcoexType_wBfer=1;\r
+\r
+               if(BDCcoexType_wBfer != pDM_BdcTable->BDCcoexType_wBfer)\r
+               {\r
+                       odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);\r
+                       odm_CSI_on_off(pDM_Odm,CSI_OFF);\r
+                       pDM_BdcTable->BDCcoexType_wBfer=1;\r
+               }\r
        }\r
        }\r
-        #endif\r
-       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Tx from TxInfo]: MacID:(( %d )),  TxAnt = (( %s ))\n", \r
-       //                                      MacId,(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
-       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("antsel_tr_mux=(( 3'b%d%d%d ))\n",\r
-                                                       //pDM_FatTable->antsel_c[MacId] , pDM_FatTable->antsel_b[MacId] , pDM_FatTable->antsel_a[MacId] ));\r
+       else if(swch==DIVOFF_CSION)\r
+       {\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[BDCcoexType: 2] {DIV,CSI} ={0,1}\n"));\r
+               BDCcoexType_wBfer=2;\r
+\r
+               if(BDCcoexType_wBfer != pDM_BdcTable->BDCcoexType_wBfer)\r
+               {\r
+                       odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
+                       odm_CSI_on_off(pDM_Odm,CSI_ON);\r
+                       pDM_BdcTable->BDCcoexType_wBfer=2;\r
+               }\r
+       }\r
+}\r
+\r
+VOID\r
+odm_BF_AntDiv_ModeArbitration(\r
+       IN              PVOID           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pBDC_T                  pDM_BdcTable = &pDM_Odm->DM_BdcTable;\r
+       u1Byte                  current_BDC_Mode;\r
+\r
+       #if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("\n"));\r
+       \r
+               //2 Mode 1\r
+               if((pDM_BdcTable->num_Txbfee_Client !=0) && (pDM_BdcTable->num_Txbfer_Client == 0))\r
+               {\r
+                       current_BDC_Mode=BDC_MODE_1;\r
+                       \r
+                       if(current_BDC_Mode != pDM_BdcTable->BDC_Mode)\r
+                       {\r
+                               pDM_BdcTable->BDC_Mode=BDC_MODE_1;\r
+                               odm_BDCcoexType_withBferClient( pDM_Odm, DIVON_CSIOFF);\r
+                               pDM_BdcTable->BDC_RxIdleUpdate_counter=1;\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Change to (( Mode1 ))\n"));\r
+                       }\r
+\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Antdiv + BF coextance Mode] : (( Mode1 ))\n"));\r
+               }\r
+               //2 Mode 2\r
+               else if((pDM_BdcTable->num_Txbfee_Client ==0) && (pDM_BdcTable->num_Txbfer_Client != 0))\r
+               {\r
+                       current_BDC_Mode=BDC_MODE_2;\r
+                       \r
+                       if(current_BDC_Mode != pDM_BdcTable->BDC_Mode)\r
+                       {\r
+                               pDM_BdcTable->BDC_Mode=BDC_MODE_2;\r
+                               pDM_BdcTable->BDC_state=BDC_DIV_TRAIN_STATE;\r
+                               pDM_BdcTable->BDC_Try_flag=0;\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Change to (( Mode2 ))\n"));\r
+                               \r
+                       }\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Antdiv + BF coextance Mode] : (( Mode2 ))\n"));\r
+               }\r
+               //2 Mode 3\r
+               else if((pDM_BdcTable->num_Txbfee_Client !=0) && (pDM_BdcTable->num_Txbfer_Client != 0))\r
+               {\r
+                       current_BDC_Mode=BDC_MODE_3;\r
+                       \r
+                       if(current_BDC_Mode != pDM_BdcTable->BDC_Mode)\r
+                       {\r
+                               pDM_BdcTable->BDC_Mode=BDC_MODE_3;\r
+                               pDM_BdcTable->BDC_state=BDC_DIV_TRAIN_STATE;\r
+                               pDM_BdcTable->BDC_Try_flag=0;\r
+                               pDM_BdcTable->BDC_RxIdleUpdate_counter=1;\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Change to (( Mode3 ))\n"));\r
+                       }\r
+\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Antdiv + BF coextance Mode] : (( Mode3 ))\n"));\r
+               }\r
+               //2 Mode 4\r
+               else if((pDM_BdcTable->num_Txbfee_Client ==0) && (pDM_BdcTable->num_Txbfer_Client == 0))\r
+               {\r
+                       current_BDC_Mode=BDC_MODE_4;\r
+                       \r
+                       if(current_BDC_Mode != pDM_BdcTable->BDC_Mode)\r
+                       {\r
+                               pDM_BdcTable->BDC_Mode=BDC_MODE_4;\r
+                               odm_BDCcoexType_withBferClient( pDM_Odm, DIVON_CSIOFF);\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Change to (( Mode4 ))\n"));\r
+                       }\r
+\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Antdiv + BF coextance Mode] : (( Mode4 ))\n"));\r
+               }\r
+       #endif\r
+\r
+}\r
+\r
+VOID\r
+odm_DivTrainState_setting( \r
+       IN              PVOID           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pBDC_T  pDM_BdcTable=&pDM_Odm->DM_BdcTable;\r
+\r
+       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("\n*****[S T A R T ]*****  [2-0. DIV_TRAIN_STATE] \n"));\r
+       pDM_BdcTable->BDC_Try_counter =2;\r
+       pDM_BdcTable->BDC_Try_flag=1; \r
+       pDM_BdcTable->BDC_state=BDC_BFer_TRAIN_STATE;                                   \r
+       odm_BDCcoexType_withBferClient( pDM_Odm, DIVON_CSIOFF);\r
+}\r
+\r
+VOID\r
+odm_BDCcoex_BFeeRxDiv_Arbitration(\r
+       IN              PVOID           pDM_VOID\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pBDC_T    pDM_BdcTable = &pDM_Odm->DM_BdcTable;\r
+       BOOLEAN StopBF_flag;\r
+       u1Byte  BDC_active_Mode;\r
+\r
+\r
+       #if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
+\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***{ num_BFee,  num_BFer , num_Client}  = (( %d  ,  %d  ,  %d))  \n",pDM_BdcTable->num_Txbfee_Client,pDM_BdcTable->num_Txbfer_Client,pDM_BdcTable->num_Client));\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***{ num_BF_tars,  num_DIV_tars }  = ((  %d  ,  %d ))  \n",pDM_BdcTable->num_BfTar , pDM_BdcTable->num_DivTar ));\r
+\r
+               //2 [ MIB control ]\r
+               if (pDM_Odm->bdc_holdstate==2) \r
+               {\r
+                       odm_BDCcoexType_withBferClient( pDM_Odm, DIVOFF_CSION); \r
+                       pDM_BdcTable->BDC_state=BDC_BF_HOLD_STATE;\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Force in [ BF STATE] \n"));\r
+                       return; \r
+               }\r
+               else if (pDM_Odm->bdc_holdstate==1) \r
+               {\r
+                       pDM_BdcTable->BDC_state=BDC_DIV_HOLD_STATE;\r
+                       odm_BDCcoexType_withBferClient( pDM_Odm, DIVON_CSIOFF); \r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Force in [ DIV STATE] \n"));\r
+                       return; \r
+               }\r
+\r
+               //------------------------------------------------------------\r
+\r
+\r
+               \r
+               //2 Mode 2 & 3\r
+               if(pDM_BdcTable->BDC_Mode==BDC_MODE_2 ||pDM_BdcTable->BDC_Mode==BDC_MODE_3)\r
+               {\r
+\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("\n{ Try_flag ,  Try_counter } = {  %d , %d  } \n",pDM_BdcTable->BDC_Try_flag,pDM_BdcTable->BDC_Try_counter));\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("BDCcoexType = (( %d ))  \n\n", pDM_BdcTable->BDCcoexType_wBfer));\r
+                       \r
+                        // All Client have Bfer-Cap-------------------------------\r
+                       if(pDM_BdcTable->num_Txbfer_Client == pDM_BdcTable->num_Client) //BFer STA Only?: yes\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("BFer STA only?  (( Yes ))\n"));\r
+                               pDM_BdcTable->BDC_Try_flag=0;\r
+                               pDM_BdcTable->BDC_state=BDC_DIV_TRAIN_STATE;\r
+                               odm_BDCcoexType_withBferClient( pDM_Odm, DIVOFF_CSION);\r
+                               return;\r
+                       }\r
+                       else\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("BFer STA only?  (( No ))\n"));\r
+                       }\r
+                       //\r
+                       if(pDM_BdcTable->bAll_BFSta_Idle==FALSE && pDM_BdcTable->bAll_DivSta_Idle==TRUE)\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("All DIV-STA are idle, but BF-STA not\n"));\r
+                               pDM_BdcTable->BDC_Try_flag=0;\r
+                               pDM_BdcTable->BDC_state=BDC_BFer_TRAIN_STATE;\r
+                               odm_BDCcoexType_withBferClient( pDM_Odm, DIVOFF_CSION);\r
+                               return;\r
+                       }\r
+                       else if(pDM_BdcTable->bAll_BFSta_Idle==TRUE && pDM_BdcTable->bAll_DivSta_Idle==FALSE)\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("All BF-STA are idle, but DIV-STA not\n"));\r
+                               pDM_BdcTable->BDC_Try_flag=0;\r
+                               pDM_BdcTable->BDC_state=BDC_DIV_TRAIN_STATE;\r
+                               odm_BDCcoexType_withBferClient( pDM_Odm, DIVON_CSIOFF);\r
+                               return;\r
+                       }\r
+\r
+                       //Select active mode--------------------------------------\r
+                       if(pDM_BdcTable->num_BfTar ==0) //  Selsect_1,  Selsect_2\r
+                       {\r
+                               if(pDM_BdcTable->num_DivTar ==0)  // Selsect_3\r
+                               {\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Select active mode (( 1 )) \n"));\r
+                                       pDM_BdcTable->BDC_active_Mode=1;\r
+                               }\r
+                               else\r
+                               {\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Select active mode  (( 2 ))\n"));\r
+                                       pDM_BdcTable->BDC_active_Mode=2;\r
+                               }\r
+                               pDM_BdcTable->BDC_Try_flag=0;\r
+                               pDM_BdcTable->BDC_state=BDC_DIV_TRAIN_STATE;\r
+                               odm_BDCcoexType_withBferClient( pDM_Odm, DIVON_CSIOFF);\r
+                               return;\r
+                       }\r
+                       else // num_BfTar > 0\r
+                       {                       \r
+                               if(pDM_BdcTable->num_DivTar ==0)  // Selsect_3\r
+                               {\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Select active mode (( 3 ))\n"));         \r
+                                       pDM_BdcTable->BDC_active_Mode=3;\r
+                                       pDM_BdcTable->BDC_Try_flag=0;\r
+                                       pDM_BdcTable->BDC_state=BDC_BFer_TRAIN_STATE;\r
+                                       odm_BDCcoexType_withBferClient( pDM_Odm, DIVOFF_CSION);\r
+                                       return;\r
+                               }\r
+                               else // Selsect_4\r
+                               {\r
+                                       BDC_active_Mode=4;\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Select active mode (( 4 ))\n")); \r
+                                       \r
+                                       if(BDC_active_Mode!=pDM_BdcTable->BDC_active_Mode)\r
+                                       {\r
+                                               pDM_BdcTable->BDC_active_Mode=4;\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Change to active mode (( 4 ))  &  return!!! \n"));       \r
+                                               return;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+#if 1\r
+               if (pDM_Odm->bdc_holdstate==0xff) \r
+               {\r
+                       pDM_BdcTable->BDC_state=BDC_DIV_HOLD_STATE;\r
+                       odm_BDCcoexType_withBferClient( pDM_Odm, DIVON_CSIOFF); \r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Force in [ DIV STATE] \n"));     \r
+                       return;\r
+               }\r
+#endif\r
+\r
+                       // Does Client number changed ? -------------------------------\r
+                       if(pDM_BdcTable->num_Client !=pDM_BdcTable->pre_num_Client)\r
+                       { \r
+                               pDM_BdcTable->BDC_Try_flag=0;\r
+                               pDM_BdcTable->BDC_state=BDC_DIV_TRAIN_STATE;\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[  The number of client has been changed !!!]   return to (( BDC_DIV_TRAIN_STATE )) \n"));       \r
+                       }\r
+                       pDM_BdcTable->pre_num_Client=pDM_BdcTable->num_Client;\r
+\r
+                       if( pDM_BdcTable->BDC_Try_flag==0)\r
+                       {\r
+                               //2 DIV_TRAIN_STATE (Mode 2-0)\r
+                               if(pDM_BdcTable->BDC_state==BDC_DIV_TRAIN_STATE)\r
+                               {\r
+                                       odm_DivTrainState_setting( pDM_Odm);\r
+                               }\r
+                               //2 BFer_TRAIN_STATE (Mode 2-1)\r
+                               else if(pDM_BdcTable->BDC_state==BDC_BFer_TRAIN_STATE) \r
+                               {\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*****[2-1. BFer_TRAIN_STATE ]*****  \n"));\r
+                                       \r
+                                       //if(pDM_BdcTable->num_BfTar==0) \r
+                                       //{\r
+                                       //      ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("BF_tars exist?  : (( No )),   [ BDC_BFer_TRAIN_STATE ] >> [BDC_DIV_TRAIN_STATE] \n"));\r
+                                       //      odm_DivTrainState_setting( pDM_Odm);\r
+                                       //}\r
+                                       //else //num_BfTar != 0\r
+                                       //{\r
+                                               pDM_BdcTable->BDC_Try_counter=2;\r
+                                               pDM_BdcTable->BDC_Try_flag=1;\r
+                                               pDM_BdcTable->BDC_state=BDC_DECISION_STATE;\r
+                                               odm_BDCcoexType_withBferClient( pDM_Odm, DIVOFF_CSION); \r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("BF_tars exist?  : (( Yes )),   [ BDC_BFer_TRAIN_STATE ] >> [BDC_DECISION_STATE] \n"));\r
+                                       //}\r
+                               }\r
+                               //2 DECISION_STATE (Mode 2-2)\r
+                               else if(pDM_BdcTable->BDC_state==BDC_DECISION_STATE)\r
+                               {                       \r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*****[2-2. DECISION_STATE]***** \n"));\r
+                                       //if(pDM_BdcTable->num_BfTar==0) \r
+                                       //{\r
+                                       //      ODM_AntDiv_Printk(("BF_tars exist?  : (( No )),   [ DECISION_STATE ] >> [BDC_DIV_TRAIN_STATE] \n"));\r
+                                       //      odm_DivTrainState_setting( pDM_Odm);\r
+                                       //}\r
+                                       //else //num_BfTar != 0\r
+                                       //{\r
+                                               if(pDM_BdcTable->BF_pass==FALSE || pDM_BdcTable->DIV_pass == FALSE)\r
+                                                       StopBF_flag=TRUE;\r
+                                               else\r
+                                                       StopBF_flag=FALSE;\r
+                                               \r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("BF_tars exist?  : (( Yes )),  {BF_pass, DIV_pass, StopBF_flag }  = { %d, %d, %d } \n" ,pDM_BdcTable->BF_pass,pDM_BdcTable->DIV_pass,StopBF_flag));\r
+                                       \r
+                                               if(StopBF_flag==TRUE) //DIV_en\r
+                                               {\r
+                                                       pDM_BdcTable->BDC_Hold_counter=10; //20\r
+                                                       odm_BDCcoexType_withBferClient( pDM_Odm, DIVON_CSIOFF); \r
+                                                       pDM_BdcTable->BDC_state=BDC_DIV_HOLD_STATE;\r
+                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ StopBF_flag= ((TRUE)),   BDC_DECISION_STATE ] >> [BDC_DIV_HOLD_STATE] \n"));\r
+                                               }\r
+                                               else //BF_en\r
+                                               {\r
+                                                       pDM_BdcTable->BDC_Hold_counter=10; //20\r
+                                                       odm_BDCcoexType_withBferClient( pDM_Odm, DIVOFF_CSION); \r
+                                                       pDM_BdcTable->BDC_state=BDC_BF_HOLD_STATE;\r
+                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[StopBF_flag= ((FALSE)),   BDC_DECISION_STATE ] >> [BDC_BF_HOLD_STATE] \n"));\r
+                                               }\r
+                                       //}\r
+                               }\r
+                               //2 BF-HOLD_STATE (Mode 2-3)\r
+                               else if(pDM_BdcTable->BDC_state==BDC_BF_HOLD_STATE)\r
+                               {\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*****[2-3. BF_HOLD_STATE ]*****\n"));    \r
+\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("BDC_Hold_counter = (( %d )) \n",pDM_BdcTable->BDC_Hold_counter ));       \r
+\r
+                                       if(pDM_BdcTable->BDC_Hold_counter==1)\r
+                                       {\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ BDC_BF_HOLD_STATE ] >> [BDC_DIV_TRAIN_STATE] \n"));    \r
+                                               odm_DivTrainState_setting( pDM_Odm);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               pDM_BdcTable->BDC_Hold_counter--;\r
+                                               \r
+                                               //if(pDM_BdcTable->num_BfTar==0) \r
+                                               //{\r
+                                               //      ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("BF_tars exist?  : (( No )),   [ BDC_BF_HOLD_STATE ] >> [BDC_DIV_TRAIN_STATE] \n"));      \r
+                                               //      odm_DivTrainState_setting( pDM_Odm);\r
+                                               //}\r
+                                               //else //num_BfTar != 0\r
+                                               //{\r
+                                                       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("BF_tars exist?  : (( Yes ))\n"));      \r
+                                                       pDM_BdcTable->BDC_state=BDC_BF_HOLD_STATE;\r
+                                                       odm_BDCcoexType_withBferClient( pDM_Odm, DIVOFF_CSION);\r
+                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ BDC_BF_HOLD_STATE ] >> [BDC_BF_HOLD_STATE] \n"));      \r
+                                               //}\r
+                                       }\r
+                               \r
+                               }\r
+                               //2 DIV-HOLD_STATE (Mode 2-4)\r
+                               else if(pDM_BdcTable->BDC_state==BDC_DIV_HOLD_STATE)\r
+                               {\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*****[2-4. DIV_HOLD_STATE ]*****\n"));   \r
+                                       \r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("BDC_Hold_counter = (( %d )) \n",pDM_BdcTable->BDC_Hold_counter ));\r
+                                       \r
+                                       if(pDM_BdcTable->BDC_Hold_counter==1)\r
+                                       {\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ BDC_DIV_HOLD_STATE ] >> [BDC_DIV_TRAIN_STATE] \n"));   \r
+                                               odm_DivTrainState_setting( pDM_Odm);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               pDM_BdcTable->BDC_Hold_counter--;\r
+                                               pDM_BdcTable->BDC_state=BDC_DIV_HOLD_STATE;\r
+                                               odm_BDCcoexType_withBferClient( pDM_Odm, DIVON_CSIOFF); \r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ BDC_DIV_HOLD_STATE ] >> [BDC_DIV_HOLD_STATE] \n"));    \r
+                                       }\r
+                               \r
+                               }\r
+                               \r
+                       }\r
+                       else if( pDM_BdcTable->BDC_Try_flag==1)\r
+                       {\r
+                               //2 Set Training Counter\r
+                               if(pDM_BdcTable->BDC_Try_counter >1)\r
+                               {\r
+                                       pDM_BdcTable->BDC_Try_counter--;\r
+                                       if(pDM_BdcTable->BDC_Try_counter ==1)\r
+                                               pDM_BdcTable->BDC_Try_flag=0; \r
+                                               \r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Training !!\n"));\r
+                                       //return ;\r
+                               }\r
+                               \r
+                       }\r
+                       \r
+               }\r
+\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("\n[end]\n"));\r
+\r
+       #endif //#if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
+\r
+\r
+\r
+\r
        \r
        \r
+\r
 }\r
 \r
 }\r
 \r
+#endif\r
+#endif //#ifdef BEAMFORMING_SUPPORT\r
 \r
 \r
 #if (RTL8188E_SUPPORT == 1)\r
 \r
 \r
 #if (RTL8188E_SUPPORT == 1)\r
@@ -258,18 +805,17 @@ odm_UpdateTxAnt(IN PDM_ODM_T pDM_Odm, IN u1Byte Ant, IN u4Byte MacId)
 \r
 VOID\r
 odm_RX_HWAntDiv_Init_88E(\r
 \r
 VOID\r
 odm_RX_HWAntDiv_Init_88E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 )\r
 {\r
 )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        u4Byte  value32;\r
 \r
        u4Byte  value32;\r
 \r
-       pDM_Odm->AntType = ODM_AUTO_ANT;\r
-\r
        if(pDM_Odm->mp_mode == TRUE)\r
        {\r
        if(pDM_Odm->mp_mode == TRUE)\r
        {\r
-               pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_IGI_A_11N , BIT7, 0); // disable HW AntDiv \r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_LNA_SWITCH_11N , BIT31, 1);  // 1:CG, 0:CS\r
+               pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_IGI_A_11N , BIT7, 0); // disable HW AntDiv \r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_LNA_SWITCH_11N , BIT31, 1);  // 1:CG, 0:CS\r
                return;\r
        }\r
        \r
                return;\r
        }\r
        \r
@@ -294,17 +840,18 @@ odm_RX_HWAntDiv_Init_88E(
 \r
 VOID\r
 odm_TRX_HWAntDiv_Init_88E(\r
 \r
 VOID\r
 odm_TRX_HWAntDiv_Init_88E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 )\r
 {\r
 )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        u4Byte  value32;\r
        \r
        if(pDM_Odm->mp_mode == TRUE)\r
        {\r
        u4Byte  value32;\r
        \r
        if(pDM_Odm->mp_mode == TRUE)\r
        {\r
-               pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_IGI_A_11N , BIT7, 0); // disable HW AntDiv \r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_RX_ANT_CTRL_11N , BIT5|BIT4|BIT3, 0); //Default RX   (0/1)\r
-               return;\r
+               pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_IGI_A_11N , BIT7, 0); // disable HW AntDiv \r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_RX_ANT_CTRL_11N , BIT5|BIT4|BIT3, 0); //Default RX   (0/1)\r
+               return;\r
        }\r
 \r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8188E AntDiv_Init =>  AntDivType=[CG_TRX_HW_ANTDIV (SPDT)]\n"));\r
        }\r
 \r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8188E AntDiv_Init =>  AntDivType=[CG_TRX_HW_ANTDIV (SPDT)]\n"));\r
@@ -330,35 +877,44 @@ odm_TRX_HWAntDiv_Init_88E(
                ODM_SetBBReg(pDM_Odm, ODM_REG_RX_DEFUALT_A_11N , BIT13|BIT12|BIT11, 2); //Reg858[13:11]=3'b010\r
        }\r
        else //MPchip\r
                ODM_SetBBReg(pDM_Odm, ODM_REG_RX_DEFUALT_A_11N , BIT13|BIT12|BIT11, 2); //Reg858[13:11]=3'b010\r
        }\r
        else //MPchip\r
-               ODM_SetBBReg(pDM_Odm, ODM_REG_ANT_MAPPING1_11N , bMaskDWord, 0x0001);   //Reg914=3'b010, Reg915=3'b001\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_ANT_MAPPING1_11N , bMaskDWord, 0x0201);   /*Reg914=3'b010, Reg915=3'b001*/\r
 }\r
 \r
 }\r
 \r
+\r
+#if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
 VOID\r
 odm_Smart_HWAntDiv_Init_88E(\r
 VOID\r
 odm_Smart_HWAntDiv_Init_88E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 )\r
 {\r
 )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        u4Byte  value32, i;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        u4Byte  value32, i;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-       u4Byte  AntCombination = 2;\r
 \r
 \r
-    ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8188E AntDiv_Init =>  AntDivType=[CG_TRX_SMART_ANTDIV]\n"));\r
+       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8188E AntDiv_Init =>  AntDivType=[CG_TRX_SMART_ANTDIV]\n"));\r
     \r
        if(pDM_Odm->mp_mode == TRUE)\r
        {\r
     \r
        if(pDM_Odm->mp_mode == TRUE)\r
        {\r
-    ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("pDM_Odm->AntDivType: %d\n", pDM_Odm->AntDivType));\r
-    return;\r
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("pDM_Odm->AntDivType: %d\n", pDM_Odm->AntDivType));\r
+               return;\r
        }\r
 \r
        }\r
 \r
+       pDM_FatTable->TrainIdx = 0;\r
+       pDM_FatTable->FAT_State = FAT_NORMAL_STATE;\r
+       \r
+       pDM_Odm->fat_comb_a=5;\r
+       pDM_Odm->antdiv_intvl = 0x64; // 100ms\r
+\r
        for(i=0; i<6; i++)\r
        {\r
                pDM_FatTable->Bssid[i] = 0;\r
        for(i=0; i<6; i++)\r
        {\r
                pDM_FatTable->Bssid[i] = 0;\r
+       }\r
+       for(i=0; i< (pDM_Odm->fat_comb_a) ; i++)\r
+       {\r
                pDM_FatTable->antSumRSSI[i] = 0;\r
                pDM_FatTable->antRSSIcnt[i] = 0;\r
                pDM_FatTable->antAveRSSI[i] = 0;\r
        }\r
                pDM_FatTable->antSumRSSI[i] = 0;\r
                pDM_FatTable->antRSSIcnt[i] = 0;\r
                pDM_FatTable->antAveRSSI[i] = 0;\r
        }\r
-       pDM_FatTable->TrainIdx = 0;\r
-       pDM_FatTable->FAT_State = FAT_NORMAL_STATE;\r
 \r
        //MAC Setting\r
        value32 = ODM_GetMACReg(pDM_Odm, 0x4c, bMaskDWord);\r
 \r
        //MAC Setting\r
        value32 = ODM_GetMACReg(pDM_Odm, 0x4c, bMaskDWord);\r
@@ -375,11 +931,11 @@ odm_Smart_HWAntDiv_Init_88E(
        ODM_SetBBReg(pDM_Odm, 0x870 , BIT9|BIT8, 0);//Reg870[8]=1'b0, Reg870[9]=1'b0            //antsel antselb by HW\r
        ODM_SetBBReg(pDM_Odm, 0x864 , BIT10, 0);        //Reg864[10]=1'b0       //antsel2 by HW\r
        ODM_SetBBReg(pDM_Odm, 0xb2c , BIT22, 0);        //Regb2c[22]=1'b0       //disable CS/CG switch\r
        ODM_SetBBReg(pDM_Odm, 0x870 , BIT9|BIT8, 0);//Reg870[8]=1'b0, Reg870[9]=1'b0            //antsel antselb by HW\r
        ODM_SetBBReg(pDM_Odm, 0x864 , BIT10, 0);        //Reg864[10]=1'b0       //antsel2 by HW\r
        ODM_SetBBReg(pDM_Odm, 0xb2c , BIT22, 0);        //Regb2c[22]=1'b0       //disable CS/CG switch\r
-       ODM_SetBBReg(pDM_Odm, 0xb2c , BIT31, 1);        //Regb2c[31]=1'b1       //output at CG only\r
+       ODM_SetBBReg(pDM_Odm, 0xb2c , BIT31, 0);        //Regb2c[31]=1'b1       //output at CS only\r
        ODM_SetBBReg(pDM_Odm, 0xca4 , bMaskDWord, 0x000000a0);\r
        \r
        //antenna mapping table\r
        ODM_SetBBReg(pDM_Odm, 0xca4 , bMaskDWord, 0x000000a0);\r
        \r
        //antenna mapping table\r
-       if(AntCombination == 2)\r
+       if(pDM_Odm->fat_comb_a == 2)\r
        {\r
                if(!pDM_Odm->bIsMPChip) //testchip\r
                {\r
        {\r
                if(!pDM_Odm->bIsMPChip) //testchip\r
                {\r
@@ -392,7 +948,7 @@ odm_Smart_HWAntDiv_Init_88E(
                        ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte1, 2);\r
                }\r
        }\r
                        ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte1, 2);\r
                }\r
        }\r
-       else if(AntCombination == 7)\r
+       else\r
        {\r
                if(!pDM_Odm->bIsMPChip) //testchip\r
                {\r
        {\r
                if(!pDM_Odm->bIsMPChip) //testchip\r
                {\r
@@ -408,29 +964,24 @@ odm_Smart_HWAntDiv_Init_88E(
                }\r
                else //MPchip\r
                {\r
                }\r
                else //MPchip\r
                {\r
-                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte0, 0);\r
-                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte1, 1);   \r
-                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte2, 2);\r
-                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte3, 3);\r
-                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte0, 4);\r
-                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte1, 5);\r
-                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte2, 6);\r
-                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte3, 7);\r
+                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte0, 4);     // 0: 3b'000\r
+                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte1, 2);     // 1: 3b'001  \r
+                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte2, 0);     // 2: 3b'010\r
+                       ODM_SetBBReg(pDM_Odm, 0x914 , bMaskByte3, 1);     // 3: 3b'011\r
+                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte0, 3);     // 4: 3b'100\r
+                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte1, 5);     // 5: 3b'101\r
+                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte2, 6);     // 6: 3b'110\r
+                       ODM_SetBBReg(pDM_Odm, 0x918 , bMaskByte3, 255); // 7: 3b'111\r
                }\r
        }\r
 \r
        //Default Ant Setting when no fast training\r
                }\r
        }\r
 \r
        //Default Ant Setting when no fast training\r
-       ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 1); //Reg80c[21]=1'b1              //from TX Info\r
        ODM_SetBBReg(pDM_Odm, 0x864 , BIT5|BIT4|BIT3, 0);       //Default RX\r
        ODM_SetBBReg(pDM_Odm, 0x864 , BIT8|BIT7|BIT6, 1);       //Optional RX\r
        ODM_SetBBReg(pDM_Odm, 0x864 , BIT5|BIT4|BIT3, 0);       //Default RX\r
        ODM_SetBBReg(pDM_Odm, 0x864 , BIT8|BIT7|BIT6, 1);       //Optional RX\r
-       //ODM_SetBBReg(pDM_Odm, 0x860 , BIT14|BIT13|BIT12, 1);  //Default TX\r
+       ODM_SetBBReg(pDM_Odm, 0x860 , BIT14|BIT13|BIT12, 0);//Default TX\r
 \r
        //Enter Traing state\r
 \r
        //Enter Traing state\r
-       ODM_SetBBReg(pDM_Odm, 0x864 , BIT2|BIT1|BIT0, (AntCombination-1));      //Reg864[2:0]=3'd6      //ant combination=reg864[2:0]+1\r
-       //ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 0); //RegC50[7]=1'b0              //disable HW AntDiv\r
-       //ODM_SetBBReg(pDM_Odm,  0xe08 , BIT16, 0); //RegE08[16]=1'b0           //disable fast training\r
-       //ODM_SetBBReg(pDM_Odm, 0xe08 , BIT16, 1);      //RegE08[16]=1'b1               //enable fast training\r
-       ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 1); //RegC50[7]=1'b1                //enable HW AntDiv\r
+       ODM_SetBBReg(pDM_Odm, 0x864 , BIT2|BIT1|BIT0, (pDM_Odm->fat_comb_a-1)); //Reg864[2:0]=3'd6      //ant combination=reg864[2:0]+1\r
 \r
        //SW Control\r
        //PHY_SetBBReg(Adapter, 0x864 , BIT10, 1);\r
 \r
        //SW Control\r
        //PHY_SetBBReg(Adapter, 0x864 , BIT10, 1);\r
@@ -440,23 +991,27 @@ odm_Smart_HWAntDiv_Init_88E(
        //PHY_SetBBReg(Adapter, 0x860 , BIT9, 0);\r
        //PHY_SetBBReg(Adapter, 0x860 , BIT8, 0);\r
 }\r
        //PHY_SetBBReg(Adapter, 0x860 , BIT9, 0);\r
        //PHY_SetBBReg(Adapter, 0x860 , BIT8, 0);\r
 }\r
+#endif\r
+\r
 #endif //#if (RTL8188E_SUPPORT == 1)\r
 \r
 \r
 #if (RTL8192E_SUPPORT == 1)\r
 VOID\r
 odm_RX_HWAntDiv_Init_92E(\r
 #endif //#if (RTL8188E_SUPPORT == 1)\r
 \r
 \r
 #if (RTL8192E_SUPPORT == 1)\r
 VOID\r
 odm_RX_HWAntDiv_Init_92E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 )\r
 {\r
 )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        \r
        if(pDM_Odm->mp_mode == TRUE)\r
        {\r
        \r
        if(pDM_Odm->mp_mode == TRUE)\r
        {\r
-        //pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
-       odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-        ODM_SetBBReg(pDM_Odm, 0xc50 , BIT8, 0); //r_rxdiv_enable_anta  Regc50[8]=1'b0  0: control by c50[9]\r
-        ODM_SetBBReg(pDM_Odm, 0xc50 , BIT9, 1);  // 1:CG, 0:CS\r
-        return;\r
+               //pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
+               odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
+               ODM_SetBBReg(pDM_Odm, 0xc50 , BIT8, 0); //r_rxdiv_enable_anta  Regc50[8]=1'b0  0: control by c50[9]\r
+               ODM_SetBBReg(pDM_Odm, 0xc50 , BIT9, 1);  // 1:CG, 0:CS\r
+               return;\r
        }\r
        \r
         ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8192E AntDiv_Init =>  AntDivType=[CGCS_RX_HW_ANTDIV]\n"));\r
        }\r
        \r
         ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8192E AntDiv_Init =>  AntDivType=[CGCS_RX_HW_ANTDIV]\n"));\r
@@ -474,49 +1029,69 @@ odm_RX_HWAntDiv_Init_92E(
         \r
         //CCK Settings\r
         ODM_SetBBReg(pDM_Odm, 0xa04 , 0xF000000, 0); //Select which path to receive for CCK_1 & CCK_2\r
         \r
         //CCK Settings\r
         ODM_SetBBReg(pDM_Odm, 0xa04 , 0xF000000, 0); //Select which path to receive for CCK_1 & CCK_2\r
-        ODM_SetBBReg(pDM_Odm, 0xb34 , BIT30, 1); //(92E) ANTSEL_CCK_opt = r_en_antsel_cck? ANTSEL_CCK: 1'b0\r
+        ODM_SetBBReg(pDM_Odm, 0xb34 , BIT30, 0); //(92E) ANTSEL_CCK_opt = r_en_antsel_cck? ANTSEL_CCK: 1'b0\r
         ODM_SetBBReg(pDM_Odm, 0xa74 , BIT7, 1); //Fix CCK PHY status report issue\r
         ODM_SetBBReg(pDM_Odm, 0xa0c , BIT4, 1); //CCK complete HW AntDiv within 64 samples      \r
         ODM_SetBBReg(pDM_Odm, 0xa74 , BIT7, 1); //Fix CCK PHY status report issue\r
         ODM_SetBBReg(pDM_Odm, 0xa0c , BIT4, 1); //CCK complete HW AntDiv within 64 samples      \r
+        \r
+        #ifdef ODM_EVM_ENHANCE_ANTDIV\r
+       //EVM enhance AntDiv method init----------------------------------------------------------------------\r
+       pDM_FatTable->EVM_method_enable=0;\r
+       pDM_FatTable->FAT_State = NORMAL_STATE_MIAN;\r
+       pDM_Odm->antdiv_intvl = 0x64; \r
+       ODM_SetBBReg(pDM_Odm, 0x910 , 0x3f, 0xf );         \r
+       pDM_Odm->antdiv_evm_en=1;\r
+       //pDM_Odm->antdiv_period=1;\r
+\r
+       #endif\r
+        \r
 }\r
 \r
 VOID\r
 odm_TRX_HWAntDiv_Init_92E(\r
 }\r
 \r
 VOID\r
 odm_TRX_HWAntDiv_Init_92E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 )\r
 {\r
 )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        \r
        if(pDM_Odm->mp_mode == TRUE)\r
        {\r
        \r
        if(pDM_Odm->mp_mode == TRUE)\r
        {\r
-        //pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
-       odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-        ODM_SetBBReg(pDM_Odm, 0xc50 , BIT8, 0); //r_rxdiv_enable_anta  Regc50[8]=1'b0  0: control by c50[9]\r
-        ODM_SetBBReg(pDM_Odm, 0xc50 , BIT9, 1);  // 1:CG, 0:CS\r
-        return;\r
+               //pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV;\r
+               odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
+               ODM_SetBBReg(pDM_Odm, 0xc50 , BIT8, 0); //r_rxdiv_enable_anta  Regc50[8]=1'b0  0: control by c50[9]\r
+               ODM_SetBBReg(pDM_Odm, 0xc50 , BIT9, 1);  // 1:CG, 0:CS\r
+               return;\r
        }\r
 \r
        }\r
 \r
-#if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
-        pDM_Odm->antdiv_rssi=0;\r
-#endif\r
-\r
-        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8192E AntDiv_Init =>  AntDivType=[CG_TRX_HW_ANTDIV]\n"));\r
+        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8192E AntDiv_Init =>  AntDivType=[ Only for DIR605, CG_TRX_HW_ANTDIV]\n"));\r
        \r
        //3 --RFE pin setting---------\r
        //[MAC]\r
        ODM_SetMACReg(pDM_Odm, 0x38, BIT11, 1);            //DBG PAD Driving control (GPIO 8)\r
        \r
        //3 --RFE pin setting---------\r
        //[MAC]\r
        ODM_SetMACReg(pDM_Odm, 0x38, BIT11, 1);            //DBG PAD Driving control (GPIO 8)\r
-       ODM_SetMACReg(pDM_Odm, 0x4c, BIT23, 0);            //path-A , RFE_CTRL_3 & RFE_CTRL_4\r
+       ODM_SetMACReg(pDM_Odm, 0x4c, BIT23, 0);            //path-A , RFE_CTRL_3 \r
+       ODM_SetMACReg(pDM_Odm, 0x4c, BIT29, 1);            //path-A , RFE_CTRL_8\r
        //[BB]\r
        //[BB]\r
-       ODM_SetBBReg(pDM_Odm, 0x944 , BIT4|BIT3, 0x3);     //RFE_buffer\r
+       ODM_SetBBReg(pDM_Odm, 0x944 , BIT3, 1);              //RFE_buffer\r
+       ODM_SetBBReg(pDM_Odm, 0x944 , BIT8, 1); \r
        ODM_SetBBReg(pDM_Odm, 0x940 , BIT7|BIT6, 0x0); // r_rfe_path_sel_   (RFE_CTRL_3)\r
        ODM_SetBBReg(pDM_Odm, 0x940 , BIT7|BIT6, 0x0); // r_rfe_path_sel_   (RFE_CTRL_3)\r
-       ODM_SetBBReg(pDM_Odm, 0x940 , BIT9|BIT8, 0x0); // r_rfe_path_sel_   (RFE_CTRL_4)\r
+       ODM_SetBBReg(pDM_Odm, 0x940 , BIT17|BIT16, 0x0); // r_rfe_path_sel_   (RFE_CTRL_8)\r
        ODM_SetBBReg(pDM_Odm, 0x944 , BIT31, 0);     //RFE_buffer\r
        ODM_SetBBReg(pDM_Odm, 0x92C , BIT3, 0);     //rfe_inv  (RFE_CTRL_3)\r
        ODM_SetBBReg(pDM_Odm, 0x944 , BIT31, 0);     //RFE_buffer\r
        ODM_SetBBReg(pDM_Odm, 0x92C , BIT3, 0);     //rfe_inv  (RFE_CTRL_3)\r
-       ODM_SetBBReg(pDM_Odm, 0x92C , BIT4, 1);     //rfe_inv  (RFE_CTRL_4)\r
-       ODM_SetBBReg(pDM_Odm, 0x930 , 0xFF000, 0x88);           //path-A , RFE_CTRL_3 & 4=> ANTSEL[0]\r
+       ODM_SetBBReg(pDM_Odm, 0x92C , BIT8, 1);     //rfe_inv  (RFE_CTRL_8)\r
+       ODM_SetBBReg(pDM_Odm, 0x930 , 0xF000, 0x8);           //path-A , RFE_CTRL_3 \r
+       ODM_SetBBReg(pDM_Odm, 0x934 , 0xF, 0x8);           //path-A , RFE_CTRL_8\r
        //3 -------------------------\r
        \r
         //Pin Settings\r
        ODM_SetBBReg(pDM_Odm, 0xC50 , BIT8, 0);    //path-A     //disable CS/CG switch\r
        //3 -------------------------\r
        \r
         //Pin Settings\r
        ODM_SetBBReg(pDM_Odm, 0xC50 , BIT8, 0);    //path-A     //disable CS/CG switch\r
-       ODM_SetBBReg(pDM_Odm, 0xC50 , BIT9, 1);    //path-A     //output at CG only\r
+\r
+/* Let it follows PHY_REG for bit9 setting\r
+       if(pDM_Odm->priv->pshare->rf_ft_var.use_ext_pa || pDM_Odm->priv->pshare->rf_ft_var.use_ext_lna)\r
+               ODM_SetBBReg(pDM_Odm, 0xC50 , BIT9, 1);//path-A         //output at CS\r
+       else\r
+               ODM_SetBBReg(pDM_Odm, 0xC50 , BIT9, 0);    //path-A     //output at CG ->normal power\r
+*/\r
+\r
        ODM_SetBBReg(pDM_Odm, 0x870 , BIT9|BIT8, 0);  //path-A          //antsel antselb by HW\r
        ODM_SetBBReg(pDM_Odm, 0xB38 , BIT10, 0);           //path-A     //antsel2 by HW \r
  \r
        ODM_SetBBReg(pDM_Odm, 0x870 , BIT9|BIT8, 0);  //path-A          //antsel antselb by HW\r
        ODM_SetBBReg(pDM_Odm, 0xB38 , BIT10, 0);           //path-A     //antsel2 by HW \r
  \r
@@ -529,30 +1104,45 @@ odm_TRX_HWAntDiv_Init_92E(
         \r
         //CCK Settings\r
         ODM_SetBBReg(pDM_Odm, 0xa04 , 0xF000000, 0); //Select which path to receive for CCK_1 & CCK_2\r
         \r
         //CCK Settings\r
         ODM_SetBBReg(pDM_Odm, 0xa04 , 0xF000000, 0); //Select which path to receive for CCK_1 & CCK_2\r
-        ODM_SetBBReg(pDM_Odm, 0xb34 , BIT30, 1); //(92E) ANTSEL_CCK_opt = r_en_antsel_cck? ANTSEL_CCK: 1'b0\r
+        ODM_SetBBReg(pDM_Odm, 0xb34 , BIT30, 0); //(92E) ANTSEL_CCK_opt = r_en_antsel_cck? ANTSEL_CCK: 1'b0\r
         ODM_SetBBReg(pDM_Odm, 0xa74 , BIT7, 1); //Fix CCK PHY status report issue\r
         ODM_SetBBReg(pDM_Odm, 0xa0c , BIT4, 1); //CCK complete HW AntDiv within 64 samples \r
 \r
         //Timming issue\r
         ODM_SetBBReg(pDM_Odm, 0xE20 , BIT23|BIT22|BIT21|BIT20, 8); //keep antidx after tx for ACK ( unit x 32 mu sec)\r
         ODM_SetBBReg(pDM_Odm, 0xa74 , BIT7, 1); //Fix CCK PHY status report issue\r
         ODM_SetBBReg(pDM_Odm, 0xa0c , BIT4, 1); //CCK complete HW AntDiv within 64 samples \r
 \r
         //Timming issue\r
         ODM_SetBBReg(pDM_Odm, 0xE20 , BIT23|BIT22|BIT21|BIT20, 8); //keep antidx after tx for ACK ( unit x 32 mu sec)\r
+\r
+       #ifdef ODM_EVM_ENHANCE_ANTDIV\r
+       //EVM enhance AntDiv method init----------------------------------------------------------------------\r
+       pDM_FatTable->EVM_method_enable=0;\r
+       pDM_FatTable->FAT_State = NORMAL_STATE_MIAN;\r
+       pDM_Odm->antdiv_intvl = 0x64; \r
+       ODM_SetBBReg(pDM_Odm, 0x910 , 0x3f, 0xf );         \r
+       pDM_Odm->antdiv_evm_en=1;\r
+       //pDM_Odm->antdiv_period=1;\r
+       #endif\r
 }\r
 \r
 }\r
 \r
+#if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
 VOID\r
 odm_Smart_HWAntDiv_Init_92E(\r
 VOID\r
 odm_Smart_HWAntDiv_Init_92E(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 )\r
 {\r
 )\r
 {\r
-    ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8188E AntDiv_Init =>  AntDivType=[CG_TRX_SMART_ANTDIV]\n"));\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8188E AntDiv_Init =>  AntDivType=[CG_TRX_SMART_ANTDIV]\n"));\r
 }\r
 }\r
+#endif\r
+\r
 #endif //#if (RTL8192E_SUPPORT == 1)\r
 \r
 \r
 #if (RTL8723B_SUPPORT == 1)\r
 VOID\r
 odm_TRX_HWAntDiv_Init_8723B(\r
 #endif //#if (RTL8192E_SUPPORT == 1)\r
 \r
 \r
 #if (RTL8723B_SUPPORT == 1)\r
 VOID\r
 odm_TRX_HWAntDiv_Init_8723B(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 )\r
 {\r
 )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8723B AntDiv_Init =>  AntDivType=[CG_TRX_HW_ANTDIV(DPDT)]\n"));\r
       \r
        //Mapping Table\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8723B AntDiv_Init =>  AntDivType=[CG_TRX_HW_ANTDIV(DPDT)]\n"));\r
       \r
        //Mapping Table\r
@@ -597,18 +1187,16 @@ odm_TRX_HWAntDiv_Init_8723B(
        if(pDM_Odm->AntType == ODM_AUTO_ANT)\r
                ODM_SetBBReg(pDM_Odm, 0xA00 , BIT15, 0); //CCK AntDiv function block enable\r
 \r
        if(pDM_Odm->AntType == ODM_AUTO_ANT)\r
                ODM_SetBBReg(pDM_Odm, 0xA00 , BIT15, 0); //CCK AntDiv function block enable\r
 \r
-       //ODM_SetBBReg(pDM_Odm, 0x80C , BIT21, 0); //TX Ant  by Reg\r
-\r
-\r
 }\r
 \r
        \r
 \r
 VOID\r
 odm_S0S1_SWAntDiv_Init_8723B(\r
 }\r
 \r
        \r
 \r
 VOID\r
 odm_S0S1_SWAntDiv_Init_8723B(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 )\r
 {\r
 )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 \r
        pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 \r
@@ -637,11 +1225,12 @@ odm_S0S1_SWAntDiv_Init_8723B(
 \r
 VOID\r
 odm_S0S1_SWAntDiv_Reset_8723B(\r
 \r
 VOID\r
 odm_S0S1_SWAntDiv_Reset_8723B(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 )\r
 {\r
 )\r
 {\r
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
-       pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pSWAT_T         pDM_SWAT_Table  = &pDM_Odm->DM_SWAT_Table;\r
+       pFAT_T          pDM_FatTable    = &pDM_Odm->DM_FatTable;\r
     \r
        pDM_FatTable->bBecomeLinked  =FALSE;\r
        pDM_SWAT_Table->try_flag = 0xff;        \r
     \r
        pDM_FatTable->bBecomeLinked  =FALSE;\r
        pDM_SWAT_Table->try_flag = 0xff;        \r
@@ -653,12 +1242,13 @@ odm_S0S1_SWAntDiv_Reset_8723B(
 \r
 VOID\r
 ODM_UpdateRxIdleAnt_8723B(\r
 \r
 VOID\r
 ODM_UpdateRxIdleAnt_8723B(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID                   pDM_VOID,\r
        IN              u1Byte                  Ant,\r
        IN              u4Byte                  DefaultAnt, \r
        IN              u4Byte                  OptionalAnt\r
 )\r
 {\r
        IN              u1Byte                  Ant,\r
        IN              u4Byte                  DefaultAnt, \r
        IN              u4Byte                  OptionalAnt\r
 )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        PADAPTER                pAdapter = pDM_Odm->Adapter;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
        pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        PADAPTER                pAdapter = pDM_Odm->Adapter;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
@@ -740,19 +1330,11 @@ ODM_UpdateRxIdleAnt_8723B(
 #if (RTL8821A_SUPPORT == 1)\r
 VOID\r
 odm_TRX_HWAntDiv_Init_8821A(\r
 #if (RTL8821A_SUPPORT == 1)\r
 VOID\r
 odm_TRX_HWAntDiv_Init_8821A(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
+       IN              PVOID           pDM_VOID\r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        \r
        \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)   \r
-\r
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
-       pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_5G_ANT_SELECT, (pu1Byte)(&pDM_Odm->AntType));   \r
-#else\r
-       pDM_Odm->AntType = ODM_AUTO_ANT;\r
-#endif\r
-       pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_5G_ANT_SELECT, (pu1Byte)(&pDM_Odm->AntType));   \r
-\r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8821A AntDiv_Init => AntDivType=[ CG_TRX_HW_ANTDIV (DPDT)] \n"));\r
 \r
        //Output Pin Settings\r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8821A AntDiv_Init => AntDivType=[ CG_TRX_HW_ANTDIV (DPDT)] \n"));\r
 \r
        //Output Pin Settings\r
@@ -775,12 +1357,6 @@ odm_TRX_HWAntDiv_Init_8821A(
        ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte0, 0);\r
        ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte1, 1);\r
 \r
        ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte0, 0);\r
        ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte1, 1);\r
 \r
-       //Set ANT1_8821A as MAIN_ANT\r
-       if((pDM_Odm->AntType == ODM_FIX_MAIN_ANT) || (pDM_Odm->AntType == ODM_AUTO_ANT))\r
-               ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
-       else\r
-               ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);\r
-\r
        //OFDM HW AntDiv Parameters\r
        ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF, 0xA0); //thershold\r
        ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF000, 0x10); //bias\r
        //OFDM HW AntDiv Parameters\r
        ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF, 0xA0); //thershold\r
        ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF000, 0x10); //bias\r
@@ -802,29 +1378,18 @@ odm_TRX_HWAntDiv_Init_8821A(
 \r
        //response TX ant by RX ant\r
        ODM_SetMACReg(pDM_Odm, 0x668 , BIT3, 1);\r
 \r
        //response TX ant by RX ant\r
        ODM_SetMACReg(pDM_Odm, 0x668 , BIT3, 1);\r
-       \r
-\r
                        \r
 }\r
 \r
 VOID\r
 odm_S0S1_SWAntDiv_Init_8821A(\r
                        \r
 }\r
 \r
 VOID\r
 odm_S0S1_SWAntDiv_Init_8821A(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
+       IN              PVOID           pDM_VOID\r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 \r
        pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 \r
-\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)   \r
-\r
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
-       pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_5G_ANT_SELECT, (pu1Byte)(&pDM_Odm->AntType));   \r
-#else\r
-       pDM_Odm->AntType = ODM_AUTO_ANT;\r
-#endif\r
-\r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8821A AntDiv_Init => AntDivType=[ S0S1_SW_AntDiv] \n"));\r
 \r
        //Output Pin Settings\r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8821A AntDiv_Init => AntDivType=[ S0S1_SW_AntDiv] \n"));\r
 \r
        //Output Pin Settings\r
@@ -847,12 +1412,6 @@ odm_S0S1_SWAntDiv_Init_8821A(
        ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte0, 0);\r
        ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte1, 1);\r
 \r
        ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte0, 0);\r
        ODM_SetBBReg(pDM_Odm, 0xCA4 , bMaskByte1, 1);\r
 \r
-       //Set ANT1_8821A as MAIN_ANT\r
-       if((pDM_Odm->AntType == ODM_FIX_MAIN_ANT) || (pDM_Odm->AntType == ODM_AUTO_ANT))\r
-               ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
-       else\r
-               ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);\r
-\r
        //OFDM HW AntDiv Parameters\r
        ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF, 0xA0); //thershold\r
        ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF000, 0x10); //bias\r
        //OFDM HW AntDiv Parameters\r
        ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF, 0xA0); //thershold\r
        ODM_SetBBReg(pDM_Odm, 0x8D4 , 0x7FF000, 0x10); //bias\r
@@ -874,8 +1433,8 @@ odm_S0S1_SWAntDiv_Init_8821A(
 \r
        //response TX ant by RX ant\r
        ODM_SetMACReg(pDM_Odm, 0x668 , BIT3, 1);\r
 \r
        //response TX ant by RX ant\r
        ODM_SetMACReg(pDM_Odm, 0x668 , BIT3, 1);\r
-       \r
-               \r
+\r
+\r
        ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 0); \r
        \r
        pDM_SWAT_Table->try_flag = 0xff;        \r
        ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 0); \r
        \r
        pDM_SWAT_Table->try_flag = 0xff;        \r
@@ -891,18 +1450,20 @@ odm_S0S1_SWAntDiv_Init_8821A(
 #if (RTL8881A_SUPPORT == 1)\r
 VOID\r
 odm_RX_HWAntDiv_Init_8881A(\r
 #if (RTL8881A_SUPPORT == 1)\r
 VOID\r
 odm_RX_HWAntDiv_Init_8881A(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
+       IN              PVOID           pDM_VOID\r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8881A AntDiv_Init => AntDivType=[ CGCS_RX_HW_ANTDIV] \n"));\r
 \r
 }\r
 \r
 VOID\r
 odm_TRX_HWAntDiv_Init_8881A(\r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8881A AntDiv_Init => AntDivType=[ CGCS_RX_HW_ANTDIV] \n"));\r
 \r
 }\r
 \r
 VOID\r
 odm_TRX_HWAntDiv_Init_8881A(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
+       IN              PVOID           pDM_VOID\r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 \r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8881A AntDiv_Init => AntDivType=[ CG_TRX_HW_ANTDIV (SPDT)] \n"));\r
 \r
 \r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8881A AntDiv_Init => AntDivType=[ CG_TRX_HW_ANTDIV (SPDT)] \n"));\r
 \r
@@ -943,10 +1504,11 @@ odm_TRX_HWAntDiv_Init_8881A(
 #if (RTL8812A_SUPPORT == 1)\r
 VOID\r
 odm_TRX_HWAntDiv_Init_8812A(\r
 #if (RTL8812A_SUPPORT == 1)\r
 VOID\r
 odm_TRX_HWAntDiv_Init_8812A(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
+       IN              PVOID           pDM_VOID\r
+       )\r
 {\r
 {\r
-        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8812A AntDiv_Init => AntDivType=[ CG_TRX_HW_ANTDIV (SPDT)] \n"));\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***8812A AntDiv_Init => AntDivType=[ CG_TRX_HW_ANTDIV (SPDT)] \n"));\r
 \r
        //3 //3 --RFE pin setting---------\r
        //[BB]\r
 \r
        //3 //3 --RFE pin setting---------\r
        //[BB]\r
@@ -981,34 +1543,342 @@ odm_TRX_HWAntDiv_Init_8812A(
        ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 0); //TX Ant  by Reg //  A-cut bug\r
        \r
 }\r
        ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 0); //TX Ant  by Reg //  A-cut bug\r
        \r
 }\r
-\r
-#endif //#if (RTL8812A_SUPPORT == 1)\r
+\r
+#endif //#if (RTL8812A_SUPPORT == 1)\r
+\r
+\r
+\r
+\r
+#ifdef ODM_EVM_ENHANCE_ANTDIV\r
+\r
+\r
+\r
+VOID\r
+odm_EVM_FastAnt_Reset(\r
+       IN              PVOID           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
+               \r
+       pDM_FatTable->EVM_method_enable=0;\r
+       odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);\r
+       pDM_FatTable->FAT_State = NORMAL_STATE_MIAN;\r
+       pDM_Odm->antdiv_period=0;\r
+       ODM_SetMACReg(pDM_Odm, 0x608, BIT8, 0);\r
+}\r
+\r
+\r
+VOID\r
+odm_EVM_Enhance_AntDiv(\r
+       IN              PVOID           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u4Byte  Main_RSSI, Aux_RSSI ;\r
+       u4Byte  Main_CRC_utility=0,Aux_CRC_utility=0,utility_ratio=1;\r
+       u4Byte  Main_EVM, Aux_EVM,Diff_RSSI=0,diff_EVM=0;       \r
+       u1Byte  score_EVM=0,score_CRC=0;\r
+       pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
+       u4Byte  value32, i;\r
+       BOOLEAN Main_above1=FALSE,Aux_above1=FALSE;\r
+       BOOLEAN Force_antenna=FALSE;\r
+       PSTA_INFO_T     pEntry;\r
+       pDM_FatTable->TargetAnt_enhance=0xFF;\r
+       \r
+       \r
+       if((pDM_Odm->SupportICType & ODM_EVM_ENHANCE_ANTDIV_SUPPORT_IC))\r
+       {\r
+               if(pDM_Odm->bOneEntryOnly)\r
+               {\r
+                       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[One Client only] \n"));\r
+                       i = pDM_Odm->OneEntry_MACID;\r
+\r
+                       Main_RSSI = (pDM_FatTable->MainAnt_Cnt[i]!=0)?(pDM_FatTable->MainAnt_Sum[i]/pDM_FatTable->MainAnt_Cnt[i]):0;\r
+                       Aux_RSSI = (pDM_FatTable->AuxAnt_Cnt[i]!=0)?(pDM_FatTable->AuxAnt_Sum[i]/pDM_FatTable->AuxAnt_Cnt[i]):0;\r
+\r
+                       if((Main_RSSI==0 && Aux_RSSI !=0 && Aux_RSSI>=FORCE_RSSI_DIFF) || (Main_RSSI!=0 && Aux_RSSI==0 && Main_RSSI>=FORCE_RSSI_DIFF))\r
+                       {\r
+                               Diff_RSSI=FORCE_RSSI_DIFF;\r
+                       }\r
+                       else if(Main_RSSI!=0 && Aux_RSSI !=0)\r
+                       {\r
+                               Diff_RSSI = (Main_RSSI>=Aux_RSSI)?(Main_RSSI-Aux_RSSI):(Aux_RSSI-Main_RSSI); \r
+                       }\r
+                       \r
+\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, (" Main_Cnt = (( %d ))  , Main_RSSI= ((  %d )) \n", pDM_FatTable->MainAnt_Cnt[i], Main_RSSI));\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, (" Aux_Cnt   = (( %d ))  , Aux_RSSI = ((  %d )) \n" , pDM_FatTable->AuxAnt_Cnt[i] , Aux_RSSI));\r
+                                               \r
+                       if(  ((Main_RSSI>=Evm_RSSI_TH_High||Aux_RSSI>=Evm_RSSI_TH_High )|| (pDM_FatTable->EVM_method_enable==1)  )\r
+                               //&& (Diff_RSSI <= FORCE_RSSI_DIFF + 1)\r
+                                    )\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[> TH_H || EVM_method_enable==1]  && "));\r
+                               \r
+                               if(((Main_RSSI>=Evm_RSSI_TH_Low)||(Aux_RSSI>=Evm_RSSI_TH_Low) ))\r
+                               {\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[> TH_L ] \n"));\r
+\r
+                                       //2 [ Normal state Main]\r
+                                       if(pDM_FatTable->FAT_State == NORMAL_STATE_MIAN)\r
+                                       {\r
+\r
+                                               pDM_FatTable->EVM_method_enable=1;\r
+                                               odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
+                                               pDM_Odm->antdiv_period=3;\r
+\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ start training: MIAN] \n"));\r
+                                               pDM_FatTable->MainAntEVM_Sum[i] = 0;\r
+                                               pDM_FatTable->AuxAntEVM_Sum[i] = 0;\r
+                                               pDM_FatTable->MainAntEVM_Cnt[i] = 0;\r
+                                               pDM_FatTable->AuxAntEVM_Cnt[i] = 0;\r
+\r
+                                               pDM_FatTable->FAT_State = NORMAL_STATE_AUX;\r
+                                               ODM_SetMACReg(pDM_Odm, 0x608, BIT8, 1); //Accept CRC32 Error packets.\r
+                                               ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
+                                               \r
+                                               pDM_FatTable->CRC32_Ok_Cnt=0;\r
+                                               pDM_FatTable->CRC32_Fail_Cnt=0;\r
+                                               ODM_SetTimer(pDM_Odm,&pDM_Odm->EVM_FastAntTrainingTimer, pDM_Odm->antdiv_intvl ); //m\r
+                                       }\r
+                                       //2 [ Normal state Aux ]\r
+                                       else if(pDM_FatTable->FAT_State == NORMAL_STATE_AUX)\r
+                                       {\r
+                                               pDM_FatTable->MainCRC32_Ok_Cnt=pDM_FatTable->CRC32_Ok_Cnt;\r
+                                               pDM_FatTable->MainCRC32_Fail_Cnt=pDM_FatTable->CRC32_Fail_Cnt;\r
+                                               \r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ start training: AUX] \n"));\r
+                                               pDM_FatTable->FAT_State = TRAINING_STATE;\r
+                                               ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);\r
+\r
+                                               pDM_FatTable->CRC32_Ok_Cnt=0;\r
+                                               pDM_FatTable->CRC32_Fail_Cnt=0;\r
+                                               ODM_SetTimer(pDM_Odm,&pDM_Odm->EVM_FastAntTrainingTimer, pDM_Odm->antdiv_intvl ); //ms\r
+                                       }                                       \r
+                                       else if(pDM_FatTable->FAT_State == TRAINING_STATE)\r
+                                       {\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Training state ] \n"));\r
+                                               pDM_FatTable->FAT_State = NORMAL_STATE_MIAN;\r
+                                               \r
+                                               //3 [CRC32 statistic]\r
+                                               pDM_FatTable->AuxCRC32_Ok_Cnt=pDM_FatTable->CRC32_Ok_Cnt;\r
+                                               pDM_FatTable->AuxCRC32_Fail_Cnt=pDM_FatTable->CRC32_Fail_Cnt;\r
+\r
+                                               if( (pDM_FatTable->MainCRC32_Ok_Cnt  >= ((pDM_FatTable->AuxCRC32_Ok_Cnt)<<1)) || (Diff_RSSI>=18))\r
+                                               {\r
+                                                       pDM_FatTable->TargetAnt_CRC32=MAIN_ANT;\r
+                                                       Force_antenna=TRUE;\r
+                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("CRC32 Force Main \n"));\r
+                                               }\r
+                                               else if((pDM_FatTable->AuxCRC32_Ok_Cnt  >= ((pDM_FatTable->MainCRC32_Ok_Cnt)<<1)) || (Diff_RSSI>=18))\r
+                                               {\r
+                                                       pDM_FatTable->TargetAnt_CRC32=AUX_ANT;\r
+                                                       Force_antenna=TRUE;\r
+                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("CRC32 Force Aux \n"));\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       if(pDM_FatTable->MainCRC32_Fail_Cnt<=5)\r
+                                                               pDM_FatTable->MainCRC32_Fail_Cnt=5;\r
+                                                       \r
+                                                       if(pDM_FatTable->AuxCRC32_Fail_Cnt<=5)\r
+                                                               pDM_FatTable->AuxCRC32_Fail_Cnt=5;\r
+                                               \r
+                                                       if(pDM_FatTable->MainCRC32_Ok_Cnt >pDM_FatTable->MainCRC32_Fail_Cnt )\r
+                                                               Main_above1=TRUE;\r
+                                               \r
+                                                       if(pDM_FatTable->AuxCRC32_Ok_Cnt >pDM_FatTable->AuxCRC32_Fail_Cnt )\r
+                                                               Aux_above1=TRUE;\r
+\r
+                                                       if(Main_above1==TRUE && Aux_above1==FALSE)\r
+                                                       {\r
+                                                               Force_antenna=TRUE;\r
+                                                               pDM_FatTable->TargetAnt_CRC32=MAIN_ANT;\r
+                                                       }\r
+                                                       else if(Main_above1==FALSE && Aux_above1==TRUE)\r
+                                                       {\r
+                                                               Force_antenna=TRUE;\r
+                                                               pDM_FatTable->TargetAnt_CRC32=AUX_ANT;\r
+                                                       }\r
+                                                       else if(Main_above1==TRUE && Aux_above1==TRUE)\r
+                                                       {\r
+                                                               Main_CRC_utility=((pDM_FatTable->MainCRC32_Ok_Cnt)<<7)/pDM_FatTable->MainCRC32_Fail_Cnt;\r
+                                                               Aux_CRC_utility=((pDM_FatTable->AuxCRC32_Ok_Cnt)<<7)/pDM_FatTable->AuxCRC32_Fail_Cnt;\r
+                                                               pDM_FatTable->TargetAnt_CRC32 = (Main_CRC_utility==Aux_CRC_utility)?(pDM_FatTable->pre_TargetAnt_enhance):((Main_CRC_utility>=Aux_CRC_utility)?MAIN_ANT:AUX_ANT);\r
+                                                               \r
+                                                               if(Main_CRC_utility!=0 && Aux_CRC_utility!=0)\r
+                                                               {\r
+                                                                       if(Main_CRC_utility>=Aux_CRC_utility)\r
+                                                                               utility_ratio=(Main_CRC_utility<<1)/Aux_CRC_utility;\r
+                                                                       else\r
+                                                                               utility_ratio=(Aux_CRC_utility<<1)/Main_CRC_utility;\r
+                                                               }\r
+                                                       }\r
+                                                       else if(Main_above1==FALSE && Aux_above1==FALSE)\r
+                                                       {\r
+                                                               if(pDM_FatTable->MainCRC32_Ok_Cnt==0)\r
+                                                                       pDM_FatTable->MainCRC32_Ok_Cnt=1;\r
+                                                               if(pDM_FatTable->AuxCRC32_Ok_Cnt==0)\r
+                                                                       pDM_FatTable->AuxCRC32_Ok_Cnt=1;\r
+                                                               \r
+                                                               Main_CRC_utility=((pDM_FatTable->MainCRC32_Fail_Cnt)<<7)/pDM_FatTable->MainCRC32_Ok_Cnt;\r
+                                                               Aux_CRC_utility=((pDM_FatTable->AuxCRC32_Fail_Cnt)<<7)/pDM_FatTable->AuxCRC32_Ok_Cnt;\r
+                                                               pDM_FatTable->TargetAnt_CRC32 = (Main_CRC_utility==Aux_CRC_utility)?(pDM_FatTable->pre_TargetAnt_enhance):((Main_CRC_utility<=Aux_CRC_utility)?MAIN_ANT:AUX_ANT);       \r
+\r
+                                                               if(Main_CRC_utility!=0 && Aux_CRC_utility!=0)\r
+                                                               {\r
+                                                                       if(Main_CRC_utility>=Aux_CRC_utility)\r
+                                                                               utility_ratio=(Main_CRC_utility<<1)/(Aux_CRC_utility);\r
+                                                                       else\r
+                                                                               utility_ratio=(Aux_CRC_utility<<1)/(Main_CRC_utility);\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                               ODM_SetMACReg(pDM_Odm, 0x608, BIT8, 0);//NOT Accept CRC32 Error packets.\r
+\r
+                                               //3 [EVM statistic]                     \r
+                                               Main_EVM = (pDM_FatTable->MainAntEVM_Cnt[i]!=0)?(pDM_FatTable->MainAntEVM_Sum[i]/pDM_FatTable->MainAntEVM_Cnt[i]):0;\r
+                                               Aux_EVM = (pDM_FatTable->AuxAntEVM_Cnt[i]!=0)?(pDM_FatTable->AuxAntEVM_Sum[i]/pDM_FatTable->AuxAntEVM_Cnt[i]):0;\r
+                                               pDM_FatTable->TargetAnt_EVM = (Main_EVM==Aux_EVM)?(pDM_FatTable->pre_TargetAnt_enhance):((Main_EVM>=Aux_EVM)?MAIN_ANT:AUX_ANT);\r
+\r
+                                               if((Main_EVM==0 || Aux_EVM==0))\r
+                                                       diff_EVM=0;\r
+                                               else if(Main_EVM>=Aux_EVM)\r
+                                                       diff_EVM=Main_EVM-Aux_EVM;\r
+                                               else\r
+                                                       diff_EVM=Aux_EVM-Main_EVM;\r
+\r
+                                               //2 [ Decision state ]                                  \r
+                                               if(pDM_FatTable->TargetAnt_EVM ==pDM_FatTable->TargetAnt_CRC32 )\r
+                                               {\r
+                                                       if( (utility_ratio<2 && Force_antenna==FALSE)  && diff_EVM<=2)\r
+                                                               pDM_FatTable->TargetAnt_enhance=pDM_FatTable->pre_TargetAnt_enhance;\r
+                                                       else\r
+                                                               pDM_FatTable->TargetAnt_enhance=pDM_FatTable->TargetAnt_EVM;\r
+                                               }\r
+                                               else if(diff_EVM<=2 && (utility_ratio > 4 && Force_antenna==FALSE)) \r
+                                               {\r
+                                                       pDM_FatTable->TargetAnt_enhance=pDM_FatTable->TargetAnt_CRC32;\r
+                                               }\r
+                                               else if(diff_EVM>=20) // \r
+                                               {\r
+                                                       pDM_FatTable->TargetAnt_enhance=pDM_FatTable->TargetAnt_EVM;\r
+                                               }\r
+                                               else if(utility_ratio>=6 && Force_antenna==FALSE) // utility_ratio>3\r
+                                               {\r
+                                                       pDM_FatTable->TargetAnt_enhance=pDM_FatTable->TargetAnt_CRC32;\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       if(Force_antenna==TRUE)\r
+                                                               score_CRC=3;\r
+                                                       else if(utility_ratio>=4) //>2\r
+                                                               score_CRC=2;\r
+                                       else if(utility_ratio>=3) //>1.5\r
+                                               score_CRC=1;\r
+                                       else\r
+                                               score_CRC=0;\r
+                                       \r
+                                       if(diff_EVM>=10)\r
+                                               score_EVM=2;\r
+                                       else if(diff_EVM>=5)\r
+                                               score_EVM=1;\r
+                                       else\r
+                                               score_EVM=0;\r
+\r
+                                       if(score_CRC>score_EVM)\r
+                                               pDM_FatTable->TargetAnt_enhance=pDM_FatTable->TargetAnt_CRC32;\r
+                                       else if(score_CRC<score_EVM)\r
+                                               pDM_FatTable->TargetAnt_enhance=pDM_FatTable->TargetAnt_EVM;\r
+                                       else\r
+                                               pDM_FatTable->TargetAnt_enhance=pDM_FatTable->pre_TargetAnt_enhance;\r
+                               }\r
+                               pDM_FatTable->pre_TargetAnt_enhance=pDM_FatTable->TargetAnt_enhance;\r
+\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** Client[ %d ] : MainEVM_Cnt = (( %d ))  , Main_EVM= ((  %d )) \n",i, pDM_FatTable->MainAntEVM_Cnt[i], Main_EVM));\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** Client[ %d ] : AuxEVM_Cnt   = (( %d ))  , Aux_EVM = ((  %d )) \n" ,i, pDM_FatTable->AuxAntEVM_Cnt[i] , Aux_EVM));\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** TargetAnt_EVM = (( %s ))\n", ( pDM_FatTable->TargetAnt_EVM  ==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("M_CRC_Ok = (( %d ))  , M_CRC_Fail = ((  %d )), Main_CRC_utility = (( %d )) \n" , pDM_FatTable->MainCRC32_Ok_Cnt, pDM_FatTable->MainCRC32_Fail_Cnt,Main_CRC_utility));\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("A_CRC_Ok  = (( %d ))  , A_CRC_Fail = ((  %d )), Aux_CRC_utility   = ((  %d )) \n" , pDM_FatTable->AuxCRC32_Ok_Cnt, pDM_FatTable->AuxCRC32_Fail_Cnt,Aux_CRC_utility));\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** TargetAnt_CRC32 = (( %s ))\n", ( pDM_FatTable->TargetAnt_CRC32 ==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("****** TargetAnt_enhance = (( %s ))******\n", ( pDM_FatTable->TargetAnt_enhance ==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
+                               \r
+                                       \r
+                                       }\r
+                               }\r
+                               else // RSSI< = Evm_RSSI_TH_Low\r
+                               { \r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ <TH_L: escape from > TH_L ] \n"));\r
+                                       odm_EVM_FastAnt_Reset(pDM_Odm);\r
+                               }\r
+                       }\r
+                       else \r
+                       { \r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[escape from> TH_H || EVM_method_enable==1] \n"));\r
+                               odm_EVM_FastAnt_Reset(pDM_Odm);\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[multi-Client] \n"));\r
+                       odm_EVM_FastAnt_Reset(pDM_Odm);\r
+               }                       \r
+       }\r
+}\r
+\r
+VOID\r
+odm_EVM_FastAntTrainingCallback(\r
+       IN              PVOID           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("******odm_EVM_FastAntTrainingCallback****** \n"));\r
+       odm_HW_AntDiv(pDM_Odm);\r
+}\r
+#endif\r
 \r
 VOID\r
 odm_HW_AntDiv(\r
 \r
 VOID\r
 odm_HW_AntDiv(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
+       IN              PVOID           pDM_VOID\r
+       )\r
 {\r
 {\r
-       u4Byte  i,MinMaxRSSI=0xFF, AntDivMaxRSSI=0, MaxRSSI=0, LocalMaxRSSI;\r
-       u4Byte  Main_RSSI, Aux_RSSI, pkt_ratio_m=0, pkt_ratio_a=0,pkt_threshold=10;\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u4Byte  i,MinMaxRSSI=0xFF,  AntDivMaxRSSI=0, MaxRSSI=0, LocalMaxRSSI;\r
+       u4Byte  Main_RSSI, Aux_RSSI;\r
        u1Byte  RxIdleAnt=0, TargetAnt=7;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
        PSTA_INFO_T     pEntry;\r
 \r
        u1Byte  RxIdleAnt=0, TargetAnt=7;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
        PSTA_INFO_T     pEntry;\r
 \r
+       #ifdef BEAMFORMING_SUPPORT\r
+       #if(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+       pBDC_T    pDM_BdcTable = &pDM_Odm->DM_BdcTable;\r
+       u4Byte  TH1=500000;\r
+       u4Byte  TH2=10000000; \r
+       u4Byte  MA_rx_Temp, degrade_TP_temp, improve_TP_temp;\r
+       u1Byte  Monitor_RSSI_threshold=30;\r
+\r
+       pDM_BdcTable->BF_pass=TRUE;\r
+       pDM_BdcTable->DIV_pass=TRUE;\r
+       pDM_BdcTable->bAll_DivSta_Idle=TRUE;\r
+       pDM_BdcTable->bAll_BFSta_Idle=TRUE;\r
+       pDM_BdcTable->num_BfTar=0 ;\r
+       pDM_BdcTable->num_DivTar=0;\r
+       pDM_BdcTable->num_Client=0;\r
+       #endif\r
+       #endif\r
+\r
        if(!pDM_Odm->bLinked) //bLinked==False\r
        {\r
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[No Link!!!]\n"));\r
        if(!pDM_Odm->bLinked) //bLinked==False\r
        {\r
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[No Link!!!]\n"));\r
-       \r
-               #if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
-                       if (pDM_Odm->antdiv_rssi)\r
-                               panic_printk("[No Link!!!]\n");\r
-               #endif\r
-       \r
+               \r
                if(pDM_FatTable->bBecomeLinked == TRUE)\r
                {\r
                        odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
                        ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
                if(pDM_FatTable->bBecomeLinked == TRUE)\r
                {\r
                        odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
                        ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
+                       odm_Tx_By_TxDesc_or_Reg(pDM_Odm , REG);\r
+                       pDM_Odm->antdiv_period=0;\r
 \r
                        pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;\r
                }\r
 \r
                        pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;\r
                }\r
@@ -1020,11 +1890,13 @@ odm_HW_AntDiv(
                {\r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Linked !!!]\n"));\r
                        odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);\r
                {\r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Linked !!!]\n"));\r
                        odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);\r
+                       odm_Tx_By_TxDesc_or_Reg(pDM_Odm , TX_BY_DESC);\r
+                       \r
                        //if(pDM_Odm->SupportICType == ODM_RTL8821 )\r
                                //ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, 0); //CCK AntDiv function disable\r
                                \r
                        //#if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
                        //if(pDM_Odm->SupportICType == ODM_RTL8821 )\r
                                //ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, 0); //CCK AntDiv function disable\r
                                \r
                        //#if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
-                       //else if(pDM_Odm->SupportICType == ODM_RTL8881 )\r
+                       //else if(pDM_Odm->SupportICType == ODM_RTL8881A)\r
                        //      ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, 0); //CCK AntDiv function disable\r
                        //#endif\r
                        \r
                        //      ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, 0); //CCK AntDiv function disable\r
                        //#endif\r
                        \r
@@ -1038,11 +1910,45 @@ odm_HW_AntDiv(
                                ODM_SetBBReg(pDM_Odm, 0x930 , 0xF0, 8); // DPDT_P = ANTSEL[0]   // for 8723B AntDiv function patch.  BB  Dino  130412   \r
                                ODM_SetBBReg(pDM_Odm, 0x930 , 0xF, 8); // DPDT_N = ANTSEL[0]\r
                        }\r
                                ODM_SetBBReg(pDM_Odm, 0x930 , 0xF0, 8); // DPDT_P = ANTSEL[0]   // for 8723B AntDiv function patch.  BB  Dino  130412   \r
                                ODM_SetBBReg(pDM_Odm, 0x930 , 0xF, 8); // DPDT_N = ANTSEL[0]\r
                        }\r
+                       \r
+                       //2 BDC Init\r
+                       #ifdef BEAMFORMING_SUPPORT\r
+                       #if(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+                               odm_BDC_Init(pDM_Odm);\r
+                       #endif\r
+                       #endif\r
+                       \r
+                       #ifdef ODM_EVM_ENHANCE_ANTDIV\r
+                               odm_EVM_FastAnt_Reset(pDM_Odm);\r
+                       #endif\r
                }       \r
        }       \r
 \r
                }       \r
        }       \r
 \r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("\n[HW AntDiv] Start =>\n"));\r
-          \r
+       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("\n AntDiv Start =>\n"));\r
+\r
+       #ifdef ODM_EVM_ENHANCE_ANTDIV\r
+       if(pDM_Odm->antdiv_evm_en==1)\r
+       {\r
+               odm_EVM_Enhance_AntDiv(pDM_Odm);\r
+               if(pDM_FatTable->FAT_State !=NORMAL_STATE_MIAN)\r
+                       return;\r
+       }\r
+       else\r
+       {\r
+               odm_EVM_FastAnt_Reset(pDM_Odm);\r
+       }\r
+       #endif\r
+       \r
+       //2 BDC Mode Arbitration\r
+       #ifdef BEAMFORMING_SUPPORT\r
+       #if(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+       if(pDM_Odm->antdiv_evm_en == 0 ||pDM_FatTable->EVM_method_enable==0)\r
+       {\r
+               odm_BF_AntDiv_ModeArbitration(pDM_Odm);\r
+       }\r
+       #endif\r
+       #endif\r
+\r
        for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)\r
        {\r
                pEntry = pDM_Odm->pODM_StaInfo[i];\r
        for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)\r
        {\r
                pEntry = pDM_Odm->pODM_StaInfo[i];\r
@@ -1052,39 +1958,13 @@ odm_HW_AntDiv(
                        Main_RSSI = (pDM_FatTable->MainAnt_Cnt[i]!=0)?(pDM_FatTable->MainAnt_Sum[i]/pDM_FatTable->MainAnt_Cnt[i]):0;\r
                        Aux_RSSI = (pDM_FatTable->AuxAnt_Cnt[i]!=0)?(pDM_FatTable->AuxAnt_Sum[i]/pDM_FatTable->AuxAnt_Cnt[i]):0;\r
                        TargetAnt = (Main_RSSI==Aux_RSSI)?pDM_FatTable->RxIdleAnt:((Main_RSSI>=Aux_RSSI)?MAIN_ANT:AUX_ANT);\r
                        Main_RSSI = (pDM_FatTable->MainAnt_Cnt[i]!=0)?(pDM_FatTable->MainAnt_Sum[i]/pDM_FatTable->MainAnt_Cnt[i]):0;\r
                        Aux_RSSI = (pDM_FatTable->AuxAnt_Cnt[i]!=0)?(pDM_FatTable->AuxAnt_Sum[i]/pDM_FatTable->AuxAnt_Cnt[i]):0;\r
                        TargetAnt = (Main_RSSI==Aux_RSSI)?pDM_FatTable->RxIdleAnt:((Main_RSSI>=Aux_RSSI)?MAIN_ANT:AUX_ANT);\r
-                       /*\r
-                       if( pDM_FatTable->MainAnt_Cnt[i]!=0 && pDM_FatTable->AuxAnt_Cnt[i]!=0 )\r
-                       {\r
-                       pkt_ratio_m=( pDM_FatTable->MainAnt_Cnt[i] / pDM_FatTable->AuxAnt_Cnt[i] );\r
-                       pkt_ratio_a=( pDM_FatTable->AuxAnt_Cnt[i] / pDM_FatTable->MainAnt_Cnt[i] );\r
-                               \r
-                               if (pkt_ratio_m >= pkt_threshold)\r
-                                       TargetAnt=MAIN_ANT;\r
-                               \r
-                               else if(pkt_ratio_a >= pkt_threshold)\r
-                                       TargetAnt=AUX_ANT;\r
-                       }\r
-                       */                      \r
-                       //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("*** SupportICType=[%lu] \n",pDM_Odm->SupportICType));\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***  Main_Cnt = (( %d ))  , Main_RSSI= ((  %d )) \n", pDM_FatTable->MainAnt_Cnt[i], Main_RSSI));\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***  Aux_Cnt   = (( %d ))  , Aux_RSSI = ((  %d )) \n", pDM_FatTable->AuxAnt_Cnt[i]  , Aux_RSSI ));\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** MAC ID:[ %d ] , TargetAnt = (( %s )) \n", i ,( TargetAnt ==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
-\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("*** Phy_AntSel_A=[ %d, %d, %d] \n",((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT2)>>2,\r
-                                                                                                             ((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT1) >>1, ((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT0)));\r
-                       #if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
-                       if (pDM_Odm->antdiv_rssi)\r
-                       {\r
-                               panic_printk("*** SupportICType=[%lu] \n",pDM_Odm->SupportICType);\r
-                               //panic_printk("*** Phy_AntSel_A=[ %d, %d, %d] \n",((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT2)>>2,\r
-                               //      ((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT1) >>1, ((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT0));\r
-                               //panic_printk("*** Phy_AntSel_B=[ %d, %d, %d] \n",((pDM_Odm->DM_FatTable.antsel_rx_keep_1)&BIT2)>>2,\r
-                               //      ((pDM_Odm->DM_FatTable.antsel_rx_keep_1)&BIT1) >>1, ((pDM_Odm->DM_FatTable.antsel_rx_keep_1)&BIT0))\r
-                               panic_printk("*** Client[ %lu ] , Main_Cnt = (( %lu ))  , Main_RSSI= ((  %lu )) \n",i, pDM_FatTable->MainAnt_Cnt[i], Main_RSSI);\r
-                               panic_printk("*** Client[ %lu ] , Aux_Cnt   = (( %lu ))  , Aux_RSSI = ((  %lu )) \n" ,i, pDM_FatTable->AuxAnt_Cnt[i] , Aux_RSSI);\r
-                       }\r
-                       #endif\r
-\r
+               \r
+                       //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("*** SupportICType=[%d] \n",pDM_Odm->SupportICType));\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** Client[ %d ] : Main_Cnt = (( %d ))  , Main_RSSI= ((  %d )) \n",i, pDM_FatTable->MainAnt_Cnt[i], Main_RSSI));\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** Client[ %d ] : Aux_Cnt   = (( %d ))  , Aux_RSSI = ((  %d )) \n" ,i, pDM_FatTable->AuxAnt_Cnt[i] , Aux_RSSI));\r
+                       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** MAC ID:[ %d ] , TargetAnt = (( %s )) \n", i ,( TargetAnt ==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
+                       //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("*** Phy_AntSel_A=[ %d, %d, %d] \n",((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT2)>>2,\r
+                       //                                                                                    ((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT1) >>1, ((pDM_Odm->DM_FatTable.antsel_rx_keep_0)&BIT0)));\r
 \r
                        LocalMaxRSSI = (Main_RSSI>Aux_RSSI)?Main_RSSI:Aux_RSSI;\r
                        //2 Select MaxRSSI for DIG\r
 \r
                        LocalMaxRSSI = (Main_RSSI>Aux_RSSI)?Main_RSSI:Aux_RSSI;\r
                        //2 Select MaxRSSI for DIG\r
@@ -1099,47 +1979,173 @@ odm_HW_AntDiv(
                                RxIdleAnt = TargetAnt;\r
                                MinMaxRSSI = LocalMaxRSSI;\r
                        }\r
                                RxIdleAnt = TargetAnt;\r
                                MinMaxRSSI = LocalMaxRSSI;\r
                        }\r
-                       /*\r
-                       if((pDM_FatTable->RxIdleAnt == MAIN_ANT) && (Main_RSSI == 0))\r
-                               Main_RSSI = Aux_RSSI;\r
-                       else if((pDM_FatTable->RxIdleAnt == AUX_ANT) && (Aux_RSSI == 0))\r
-                               Aux_RSSI = Main_RSSI;\r
-               \r
-                       LocalMinRSSI = (Main_RSSI>Aux_RSSI)?Aux_RSSI:Main_RSSI;\r
-                       if(LocalMinRSSI < MinRSSI)\r
+\r
+                       #ifdef ODM_EVM_ENHANCE_ANTDIV\r
+                       if(pDM_Odm->antdiv_evm_en==1)\r
                        {\r
                        {\r
-                               MinRSSI = LocalMinRSSI;\r
-                               RxIdleAnt = TargetAnt;\r
-                       }       \r
-                       */\r
+                               if(pDM_FatTable->TargetAnt_enhance!=0xFF)\r
+                               {\r
+                                       TargetAnt=pDM_FatTable->TargetAnt_enhance;\r
+                                       RxIdleAnt = pDM_FatTable->TargetAnt_enhance;\r
+                               }\r
+                       }\r
+                       #endif\r
+\r
                        //2 Select TX Antenna\r
                        //2 Select TX Antenna\r
+                       if(pDM_Odm->AntDivType != CGCS_RX_HW_ANTDIV)\r
+                       {\r
+                               #ifdef BEAMFORMING_SUPPORT\r
+                               #if(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+                                       if(pDM_BdcTable->w_BFee_Client[i]==0)\r
+                               #endif  \r
+                               #endif\r
+                                       {\r
+                                               odm_UpdateTxAnt(pDM_Odm, TargetAnt, i);\r
+                                       }\r
+                       }\r
+\r
+                       //------------------------------------------------------------\r
+\r
+                       #ifdef BEAMFORMING_SUPPORT\r
+                       #if(DM_ODM_SUPPORT_TYPE  == ODM_AP) \r
+\r
+                       pDM_BdcTable->num_Client++;\r
+\r
+                       if(pDM_BdcTable->BDC_Mode==BDC_MODE_2 ||pDM_BdcTable->BDC_Mode==BDC_MODE_3)\r
+                       {\r
+                               //2 Byte Counter\r
+\r
+                               MA_rx_Temp=  (pEntry->rx_byte_cnt_LowMAW)<<3 ; //  RX  TP   ( bit /sec)\r
+                               \r
+                               if(pDM_BdcTable->BDC_state==BDC_BFer_TRAIN_STATE)\r
+                               {\r
+                                       pDM_BdcTable->MA_rx_TP_DIV[i]=  MA_rx_Temp ;\r
+                               }\r
+                               else\r
+                               {\r
+                                       pDM_BdcTable->MA_rx_TP[i] =MA_rx_Temp ;\r
+                               }\r
+\r
+                               if( (MA_rx_Temp < TH2)   &&  (MA_rx_Temp > TH1) && (LocalMaxRSSI<=Monitor_RSSI_threshold))\r
+                               {\r
+                                       if(pDM_BdcTable->w_BFer_Client[i]==1) // Bfer_Target\r
+                                       {\r
+                                               pDM_BdcTable->num_BfTar++;\r
+                                               \r
+                                               if(pDM_BdcTable->BDC_state==BDC_DECISION_STATE && pDM_BdcTable->BDC_Try_flag==0)\r
+                                               {\r
+                                                       improve_TP_temp = (pDM_BdcTable->MA_rx_TP_DIV[i] * 9)>>3 ; //* 1.125\r
+                                                       pDM_BdcTable->BF_pass = (pDM_BdcTable->MA_rx_TP[i] > improve_TP_temp)?TRUE:FALSE;\r
+                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** Client[ %d ] :  { MA_rx_TP,improve_TP_temp , MA_rx_TP_DIV,  BF_pass}={ %d,  %d, %d , %d }  \n" ,i,pDM_BdcTable->MA_rx_TP[i],improve_TP_temp,pDM_BdcTable->MA_rx_TP_DIV[i], pDM_BdcTable->BF_pass ));\r
+                                               }               \r
+                                       }               \r
+                                       else// DIV_Target\r
+                                       {\r
+                                               pDM_BdcTable->num_DivTar++;\r
+                                               \r
+                                               if(pDM_BdcTable->BDC_state==BDC_DECISION_STATE && pDM_BdcTable->BDC_Try_flag==0)\r
+                                               {\r
+                                                       degrade_TP_temp=(pDM_BdcTable->MA_rx_TP_DIV[i]*5)>>3;//* 0.625\r
+                                                       pDM_BdcTable->DIV_pass = (pDM_BdcTable->MA_rx_TP[i] >degrade_TP_temp)?TRUE:FALSE;\r
+                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** Client[ %d ] :  { MA_rx_TP, degrade_TP_temp , MA_rx_TP_DIV,  DIV_pass}=\n{ %d,  %d, %d , %d }  \n" ,i,pDM_BdcTable->MA_rx_TP[i],degrade_TP_temp,pDM_BdcTable->MA_rx_TP_DIV[i], pDM_BdcTable->DIV_pass ));\r
+                                               }                                                       \r
+                                       }\r
+                               }\r
 \r
 \r
-                       #if TX_BY_REG\r
+                               if(MA_rx_Temp > TH1)\r
+                               {\r
+                                       if(pDM_BdcTable->w_BFer_Client[i]==1) // Bfer_Target\r
+                                       {\r
+                                               pDM_BdcTable->bAll_BFSta_Idle=FALSE;\r
+                                       }               \r
+                                       else// DIV_Target\r
+                                       {\r
+                                               pDM_BdcTable->bAll_DivSta_Idle=FALSE;\r
+                                       }\r
+                               }\r
+               \r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** Client[ %d ] :  { BFmeeCap , BFmerCap}  = { %d , %d } \n" ,i, pDM_BdcTable->w_BFee_Client[i] , pDM_BdcTable->w_BFer_Client[i]));\r
+\r
+                               if(pDM_BdcTable->BDC_state==BDC_BFer_TRAIN_STATE)\r
+                               {\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** Client[ %d ] :    MA_rx_TP_DIV = (( %d ))  \n",i,pDM_BdcTable->MA_rx_TP_DIV[i]  ));\r
+                                       \r
+                               }\r
+                               else\r
+                               {\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** Client[ %d ] :    MA_rx_TP = (( %d ))  \n",i,pDM_BdcTable->MA_rx_TP[i]  ));\r
+                               }\r
                        \r
                        \r
-                       #else\r
-                               if(pDM_Odm->AntDivType != CGCS_RX_HW_ANTDIV)\r
-                                       odm_UpdateTxAnt(pDM_Odm, TargetAnt, i);\r
+                       }\r
+                       #endif\r
                        #endif\r
 \r
                }\r
                        #endif\r
 \r
                }\r
-               pDM_FatTable->MainAnt_Sum[i] = 0;\r
-               pDM_FatTable->AuxAnt_Sum[i] = 0;\r
-               pDM_FatTable->MainAnt_Cnt[i] = 0;\r
-               pDM_FatTable->AuxAnt_Cnt[i] = 0;\r
+\r
+               #ifdef BEAMFORMING_SUPPORT\r
+               #if(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+               if(pDM_BdcTable->BDC_Try_flag==0)\r
+               #endif\r
+               #endif  \r
+               {\r
+                       pDM_FatTable->MainAnt_Sum[i] = 0;\r
+                       pDM_FatTable->AuxAnt_Sum[i] = 0;\r
+                       pDM_FatTable->MainAnt_Cnt[i] = 0;\r
+                       pDM_FatTable->AuxAnt_Cnt[i] = 0;\r
+                }\r
        }\r
        \r
        }\r
        \r
-       //2 Set RX Idle Antenna\r
-       ODM_UpdateRxIdleAnt(pDM_Odm, RxIdleAnt);\r
 \r
 \r
-       #if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
-               if (pDM_Odm->antdiv_rssi)\r
-                       panic_printk("*** RxIdleAnt = (( %s )) \n \n", ( RxIdleAnt ==MAIN_ANT)?"MAIN_ANT":"AUX_ANT");\r
-       #endif\r
        \r
        \r
+       //2 Set RX Idle Antenna & TX Antenna(Because of HW Bug )        \r
+       #if(DM_ODM_SUPPORT_TYPE  == ODM_AP ) \r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** RxIdleAnt = (( %s ))\n\n", ( RxIdleAnt ==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));\r
+               \r
+               #ifdef BEAMFORMING_SUPPORT\r
+               #if(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+                       if(pDM_BdcTable->BDC_Mode==BDC_MODE_1 ||pDM_BdcTable->BDC_Mode==BDC_MODE_3)\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** BDC_RxIdleUpdate_counter = (( %d ))\n", pDM_BdcTable->BDC_RxIdleUpdate_counter));\r
+                       \r
+                               if(pDM_BdcTable->BDC_RxIdleUpdate_counter==1)\r
+                               {\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***Update RxIdle Antenna!!! \n"));\r
+                                       pDM_BdcTable->BDC_RxIdleUpdate_counter=30;\r
+                                       ODM_UpdateRxIdleAnt(pDM_Odm, RxIdleAnt);\r
+                               }\r
+                               else\r
+                               {\r
+                                       pDM_BdcTable->BDC_RxIdleUpdate_counter--;\r
+                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***NOT update RxIdle Antenna because of BF  ( need to fix TX-ant)\n"));\r
+                               }\r
+                       }\r
+                       else\r
+               #endif\r
+               #endif  \r
+                               ODM_UpdateRxIdleAnt(pDM_Odm, RxIdleAnt);\r
+       #else\r
+       \r
+               ODM_UpdateRxIdleAnt(pDM_Odm, RxIdleAnt);\r
+       \r
+       #endif//#if(DM_ODM_SUPPORT_TYPE  == ODM_AP)\r
+\r
+\r
+\r
+       //2 BDC Main Algorithm\r
+       #ifdef BEAMFORMING_SUPPORT\r
+       #if(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+       if(pDM_Odm->antdiv_evm_en ==0 ||pDM_FatTable->EVM_method_enable==0)\r
+       {\r
+               odm_BDCcoex_BFeeRxDiv_Arbitration(pDM_Odm);\r
+       }\r
+       #endif\r
+       #endif\r
+\r
        if(AntDivMaxRSSI == 0)\r
                pDM_DigTable->AntDiv_RSSI_max = pDM_Odm->RSSI_Min;\r
        else\r
        if(AntDivMaxRSSI == 0)\r
                pDM_DigTable->AntDiv_RSSI_max = pDM_Odm->RSSI_Min;\r
        else\r
-               pDM_DigTable->AntDiv_RSSI_max = AntDivMaxRSSI;\r
+               pDM_DigTable->AntDiv_RSSI_max = AntDivMaxRSSI;\r
+       \r
        pDM_DigTable->RSSI_max = MaxRSSI;\r
 }\r
 \r
        pDM_DigTable->RSSI_max = MaxRSSI;\r
 }\r
 \r
@@ -1148,16 +2154,17 @@ odm_HW_AntDiv(
 #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
 VOID\r
 odm_S0S1_SwAntDiv(\r
 #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
 VOID\r
 odm_S0S1_SwAntDiv(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID                   pDM_VOID,       \r
        IN              u1Byte                  Step\r
        )\r
 {\r
        IN              u1Byte                  Step\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        u4Byte                  i,MinMaxRSSI=0xFF, LocalMaxRSSI,LocalMinRSSI;\r
        u4Byte                  Main_RSSI, Aux_RSSI;\r
        u1Byte                  reset_period=10, SWAntDiv_threshold=35;\r
        u1Byte                  HighTraffic_TrainTime_U=0x32,HighTraffic_TrainTime_L=0,Train_time_temp;\r
        u1Byte                  LowTraffic_TrainTime_U=200,LowTraffic_TrainTime_L=0;\r
        u4Byte                  i,MinMaxRSSI=0xFF, LocalMaxRSSI,LocalMinRSSI;\r
        u4Byte                  Main_RSSI, Aux_RSSI;\r
        u1Byte                  reset_period=10, SWAntDiv_threshold=35;\r
        u1Byte                  HighTraffic_TrainTime_U=0x32,HighTraffic_TrainTime_L=0,Train_time_temp;\r
        u1Byte                  LowTraffic_TrainTime_U=200,LowTraffic_TrainTime_L=0;\r
-       pSWAT_T                 pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
+       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;   \r
        u1Byte                  RxIdleAnt = pDM_SWAT_Table->PreAntenna, TargetAnt, nextAnt=0;\r
        PSTA_INFO_T             pEntry=NULL;\r
        pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;   \r
        u1Byte                  RxIdleAnt = pDM_SWAT_Table->PreAntenna, TargetAnt, nextAnt=0;\r
        PSTA_INFO_T             pEntry=NULL;\r
@@ -1199,8 +2206,8 @@ odm_S0S1_SwAntDiv(
 \r
                        pDM_SWAT_Table->lastTxOkCnt = 0; \r
                        pDM_SWAT_Table->lastRxOkCnt =0; \r
 \r
                        pDM_SWAT_Table->lastTxOkCnt = 0; \r
                        pDM_SWAT_Table->lastRxOkCnt =0; \r
-                       TxCntOffset = *(pDM_Odm->pNumTxBytesUnicast);\r
-                       RxCntOffset = *(pDM_Odm->pNumRxBytesUnicast);\r
+                       TxCntOffset =  *(pDM_Odm->pNumTxBytesUnicast);\r
+                       RxCntOffset =  *(pDM_Odm->pNumRxBytesUnicast);\r
                        \r
                        pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;\r
                }\r
                        \r
                        pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;\r
                }\r
@@ -1236,15 +2243,15 @@ odm_S0S1_SwAntDiv(
                {\r
                \r
                        //---trafic decision---\r
                {\r
                \r
                        //---trafic decision---\r
-                       curTxOkCnt = *(pDM_Odm->pNumTxBytesUnicast) - pDM_SWAT_Table->lastTxOkCnt - TxCntOffset;\r
-                       curRxOkCnt = *(pDM_Odm->pNumRxBytesUnicast) - pDM_SWAT_Table->lastRxOkCnt - RxCntOffset;\r
+                       curTxOkCnt =  *(pDM_Odm->pNumTxBytesUnicast) - pDM_SWAT_Table->lastTxOkCnt - TxCntOffset;\r
+                       curRxOkCnt =  *(pDM_Odm->pNumRxBytesUnicast) - pDM_SWAT_Table->lastRxOkCnt - RxCntOffset;\r
                        pDM_SWAT_Table->lastTxOkCnt =  *(pDM_Odm->pNumTxBytesUnicast);\r
                        pDM_SWAT_Table->lastRxOkCnt =  *(pDM_Odm->pNumRxBytesUnicast);\r
                        \r
                        if (curTxOkCnt > 1875000 || curRxOkCnt > 1875000)//if(PlatformDivision64(curTxOkCnt+curRxOkCnt, 2) > 1875000)  ( 1.875M * 8bit ) / 2= 7.5M bits /sec )\r
                        {\r
                                pDM_SWAT_Table->TrafficLoad = TRAFFIC_HIGH;\r
                        pDM_SWAT_Table->lastTxOkCnt =  *(pDM_Odm->pNumTxBytesUnicast);\r
                        pDM_SWAT_Table->lastRxOkCnt =  *(pDM_Odm->pNumRxBytesUnicast);\r
                        \r
                        if (curTxOkCnt > 1875000 || curRxOkCnt > 1875000)//if(PlatformDivision64(curTxOkCnt+curRxOkCnt, 2) > 1875000)  ( 1.875M * 8bit ) / 2= 7.5M bits /sec )\r
                        {\r
                                pDM_SWAT_Table->TrafficLoad = TRAFFIC_HIGH;\r
-                               Train_time_temp=pDM_SWAT_Table->Train_time ;\r
+                               Train_time_temp = pDM_SWAT_Table->Train_time ;\r
                                \r
                                if(pDM_SWAT_Table->Train_time_flag==3)\r
                                {\r
                                \r
                                if(pDM_SWAT_Table->Train_time_flag==3)\r
                                {\r
@@ -1291,7 +2298,7 @@ odm_S0S1_SwAntDiv(
                        {\r
                                pDM_SWAT_Table->TrafficLoad = TRAFFIC_LOW;\r
                                Train_time_temp=pDM_SWAT_Table->Train_time ;\r
                        {\r
                                pDM_SWAT_Table->TrafficLoad = TRAFFIC_LOW;\r
                                Train_time_temp=pDM_SWAT_Table->Train_time ;\r
-\r
+                               \r
                                if(pDM_SWAT_Table->Train_time_flag==3)\r
                                {\r
                                        LowTraffic_TrainTime_L=10;\r
                                if(pDM_SWAT_Table->Train_time_flag==3)\r
                                {\r
                                        LowTraffic_TrainTime_L=10;\r
@@ -1312,7 +2319,7 @@ odm_S0S1_SwAntDiv(
                                }\r
                                else\r
                                        Train_time_temp+=10;    \r
                                }\r
                                else\r
                                        Train_time_temp+=10;    \r
-\r
+                               \r
                                //--\r
                                if(Train_time_temp >= LowTraffic_TrainTime_U)\r
                                        Train_time_temp=LowTraffic_TrainTime_U;\r
                                //--\r
                                if(Train_time_temp >= LowTraffic_TrainTime_U)\r
                                        Train_time_temp=LowTraffic_TrainTime_U;\r
@@ -1321,7 +2328,7 @@ odm_S0S1_SwAntDiv(
                                        Train_time_temp=LowTraffic_TrainTime_L;\r
 \r
                                pDM_SWAT_Table->Train_time = Train_time_temp; //50ms~20ms\r
                                        Train_time_temp=LowTraffic_TrainTime_L;\r
 \r
                                pDM_SWAT_Table->Train_time = Train_time_temp; //50ms~20ms\r
-\r
+                               \r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("  Train_time_flag=((%d)) , Train_time=((%d)) \n",pDM_SWAT_Table->Train_time_flag, pDM_SWAT_Table->Train_time));\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("  [Low Traffic]  \n" ));\r
                        }\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("  Train_time_flag=((%d)) , Train_time=((%d)) \n",pDM_SWAT_Table->Train_time_flag, pDM_SWAT_Table->Train_time));\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("  [Low Traffic]  \n" ));\r
                        }\r
@@ -1356,10 +2363,10 @@ odm_S0S1_SwAntDiv(
 \r
                                pDM_SWAT_Table->Double_chk_flag =1;\r
                                pDM_SWAT_Table->try_flag = 1; \r
 \r
                                pDM_SWAT_Table->Double_chk_flag =1;\r
                                pDM_SWAT_Table->try_flag = 1; \r
-                               pDM_SWAT_Table->RSSI_Trying = 0;\r
+                               pDM_SWAT_Table->RSSI_Trying = 0;\r
 \r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, (" Test the current Ant for (( %d )) ms again \n", pDM_SWAT_Table->Train_time));\r
 \r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, (" Test the current Ant for (( %d )) ms again \n", pDM_SWAT_Table->Train_time));\r
-                               ODM_UpdateRxIdleAnt(pDM_Odm, pDM_FatTable->RxIdleAnt);  \r
+                               ODM_UpdateRxIdleAnt(pDM_Odm, pDM_FatTable->RxIdleAnt);\r
                                ODM_SetTimer(pDM_Odm,&pDM_SWAT_Table->SwAntennaSwitchTimer_8723B, pDM_SWAT_Table->Train_time ); //ms    \r
                                return;\r
                        }\r
                                ODM_SetTimer(pDM_Odm,&pDM_SWAT_Table->SwAntennaSwitchTimer_8723B, pDM_SWAT_Table->Train_time ); //ms    \r
                                return;\r
                        }\r
@@ -1372,9 +2379,9 @@ odm_S0S1_SwAntDiv(
                                pDM_SWAT_Table->RSSI_Trying = 2;\r
                        else\r
                                pDM_SWAT_Table->RSSI_Trying = 1;\r
                                pDM_SWAT_Table->RSSI_Trying = 2;\r
                        else\r
                                pDM_SWAT_Table->RSSI_Trying = 1;\r
-                       \r
+\r
                        odm_S0S1_SwAntDivByCtrlFrame(pDM_Odm, SWAW_STEP_PEAK);\r
                        odm_S0S1_SwAntDivByCtrlFrame(pDM_Odm, SWAW_STEP_PEAK);\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("[set try_flag=1]  Normal State:  Begin Trying!! \n"));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("[set try_flag=1]  Normal State:  Begin Trying!! \n"));                   \r
                }\r
        \r
                else if(pDM_SWAT_Table->try_flag == 1 && pDM_SWAT_Table->Double_chk_flag== 0)\r
                }\r
        \r
                else if(pDM_SWAT_Table->try_flag == 1 && pDM_SWAT_Table->Double_chk_flag== 0)\r
@@ -1388,7 +2395,7 @@ odm_S0S1_SwAntDiv(
                {\r
                        BOOLEAN bByCtrlFrame = FALSE;\r
                        u8Byte  pkt_cnt_total = 0;\r
                {\r
                        BOOLEAN bByCtrlFrame = FALSE;\r
                        u8Byte  pkt_cnt_total = 0;\r
-                       \r
+               \r
                        for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)\r
                        {\r
                                pEntry = pDM_Odm->pODM_StaInfo[i];\r
                        for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)\r
                        {\r
                                pEntry = pDM_Odm->pODM_StaInfo[i];\r
@@ -1403,7 +2410,7 @@ odm_S0S1_SwAntDiv(
                                        \r
                                        if(pDM_FatTable->AuxAnt_Cnt[i]<=1 && pDM_FatTable->CCK_counter_aux>=1)\r
                                                Aux_RSSI=0;\r
                                        \r
                                        if(pDM_FatTable->AuxAnt_Cnt[i]<=1 && pDM_FatTable->CCK_counter_aux>=1)\r
                                                Aux_RSSI=0;\r
-\r
+                                       \r
                                        TargetAnt = (Main_RSSI==Aux_RSSI)?pDM_SWAT_Table->PreAntenna:((Main_RSSI>=Aux_RSSI)?MAIN_ANT:AUX_ANT);\r
                                        LocalMaxRSSI = (Main_RSSI>=Aux_RSSI) ? Main_RSSI : Aux_RSSI;\r
                                        LocalMinRSSI = (Main_RSSI>=Aux_RSSI) ? Aux_RSSI : Main_RSSI;\r
                                        TargetAnt = (Main_RSSI==Aux_RSSI)?pDM_SWAT_Table->PreAntenna:((Main_RSSI>=Aux_RSSI)?MAIN_ANT:AUX_ANT);\r
                                        LocalMaxRSSI = (Main_RSSI>=Aux_RSSI) ? Main_RSSI : Aux_RSSI;\r
                                        LocalMinRSSI = (Main_RSSI>=Aux_RSSI) ? Aux_RSSI : Main_RSSI;\r
@@ -1418,28 +2425,28 @@ odm_S0S1_SwAntDiv(
                                        \r
                                        if (LocalMaxRSSI != 0 && LocalMaxRSSI < MinMaxRSSI)\r
                                        {\r
                                        \r
                                        if (LocalMaxRSSI != 0 && LocalMaxRSSI < MinMaxRSSI)\r
                                        {\r
-                                                       RxIdleAnt = TargetAnt;\r
-                                                       MinMaxRSSI = LocalMaxRSSI;\r
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** LocalMaxRSSI-LocalMinRSSI = ((%d))\n",(LocalMaxRSSI-LocalMinRSSI)));\r
-                                       \r
-                                                       if((LocalMaxRSSI-LocalMinRSSI)>8)\r
+                                               RxIdleAnt = TargetAnt;\r
+                                               MinMaxRSSI = LocalMaxRSSI;\r
+                                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("*** LocalMaxRSSI-LocalMinRSSI = ((%d))\n",(LocalMaxRSSI-LocalMinRSSI)));\r
+                               \r
+                                               if((LocalMaxRSSI-LocalMinRSSI)>8)\r
+                                               {\r
+                                                       if(LocalMinRSSI != 0)\r
+                                                               pDM_SWAT_Table->Train_time_flag=3;\r
+                                                       else\r
                                                        {\r
                                                        {\r
-                                                               if(LocalMinRSSI != 0)\r
-                                                                       pDM_SWAT_Table->Train_time_flag=3;\r
+                                                               if(MinMaxRSSI > SWAntDiv_threshold)\r
+                                                                       pDM_SWAT_Table->Train_time_flag=0;\r
                                                                else\r
                                                                else\r
-                                                               {\r
-                                                                       if(MinMaxRSSI > SWAntDiv_threshold)\r
-                                                                               pDM_SWAT_Table->Train_time_flag=0;\r
-                                                                       else\r
-                                                                               pDM_SWAT_Table->Train_time_flag=3;\r
-                                                               }\r
+                                                                       pDM_SWAT_Table->Train_time_flag=3;\r
                                                        }\r
                                                        }\r
-                                                       else if((LocalMaxRSSI-LocalMinRSSI)>5)\r
-                                                               pDM_SWAT_Table->Train_time_flag=2;\r
-                                                       else if((LocalMaxRSSI-LocalMinRSSI)>2)\r
-                                                               pDM_SWAT_Table->Train_time_flag=1;\r
-                                                       else\r
-                                                               pDM_SWAT_Table->Train_time_flag=0;\r
+                                               }\r
+                                               else if((LocalMaxRSSI-LocalMinRSSI)>5)\r
+                                                       pDM_SWAT_Table->Train_time_flag=2;\r
+                                               else if((LocalMaxRSSI-LocalMinRSSI)>2)\r
+                                                       pDM_SWAT_Table->Train_time_flag=1;\r
+                                               else\r
+                                                       pDM_SWAT_Table->Train_time_flag=0;\r
                                                        \r
                                        }\r
                                        \r
                                                        \r
                                        }\r
                                        \r
@@ -1450,10 +2457,10 @@ odm_S0S1_SwAntDiv(
                                                pDM_FatTable->antsel_a[i] = ANT2_2G;\r
                        \r
                                }\r
                                                pDM_FatTable->antsel_a[i] = ANT2_2G;\r
                        \r
                                }\r
-                                       pDM_FatTable->MainAnt_Sum[i] = 0;\r
-                                       pDM_FatTable->AuxAnt_Sum[i] = 0;\r
-                                       pDM_FatTable->MainAnt_Cnt[i] = 0;\r
-                                       pDM_FatTable->AuxAnt_Cnt[i] = 0;\r
+                               pDM_FatTable->MainAnt_Sum[i] = 0;\r
+                               pDM_FatTable->AuxAnt_Sum[i] = 0;\r
+                               pDM_FatTable->MainAnt_Cnt[i] = 0;\r
+                               pDM_FatTable->AuxAnt_Cnt[i] = 0;\r
                        }\r
 \r
                        if(pDM_SWAT_Table->bSWAntDivByCtrlFrame)\r
                        }\r
 \r
                        if(pDM_SWAT_Table->bSWAntDivByCtrlFrame)\r
@@ -1470,7 +2477,7 @@ odm_S0S1_SwAntDiv(
                        pDM_FatTable->OFDM_counter_aux=0;\r
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Control frame packet counter = %d, Data frame packet counter = %llu\n", \r
                                pDM_SWAT_Table->PktCnt_SWAntDivByCtrlFrame, pkt_cnt_total));\r
                        pDM_FatTable->OFDM_counter_aux=0;\r
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Control frame packet counter = %d, Data frame packet counter = %llu\n", \r
                                pDM_SWAT_Table->PktCnt_SWAntDivByCtrlFrame, pkt_cnt_total));\r
-\r
+                       \r
                        if(MinMaxRSSI == 0xff || ((pkt_cnt_total < (pDM_SWAT_Table->PktCnt_SWAntDivByCtrlFrame >> 1)) && pDM_Odm->PhyDbgInfo.NumQryBeaconPkt < 2))\r
                        {       \r
                                MinMaxRSSI = 0;\r
                        if(MinMaxRSSI == 0xff || ((pkt_cnt_total < (pDM_SWAT_Table->PktCnt_SWAntDivByCtrlFrame >> 1)) && pDM_Odm->PhyDbgInfo.NumQryBeaconPkt < 2))\r
                        {       \r
                                MinMaxRSSI = 0;\r
@@ -1493,7 +2500,7 @@ odm_S0S1_SwAntDiv(
                                                RxIdleAnt = (Main_RSSI==Aux_RSSI)?pDM_SWAT_Table->PreAntenna:((Main_RSSI>=Aux_RSSI)?MAIN_ANT:AUX_ANT);\r
                                                LocalMaxRSSI = (Main_RSSI>=Aux_RSSI) ? Main_RSSI : Aux_RSSI;\r
                                                LocalMinRSSI = (Main_RSSI>=Aux_RSSI) ? Aux_RSSI : Main_RSSI;\r
                                                RxIdleAnt = (Main_RSSI==Aux_RSSI)?pDM_SWAT_Table->PreAntenna:((Main_RSSI>=Aux_RSSI)?MAIN_ANT:AUX_ANT);\r
                                                LocalMaxRSSI = (Main_RSSI>=Aux_RSSI) ? Main_RSSI : Aux_RSSI;\r
                                                LocalMinRSSI = (Main_RSSI>=Aux_RSSI) ? Aux_RSSI : Main_RSSI;\r
-               \r
+\r
                                                if((LocalMaxRSSI-LocalMinRSSI)>8)\r
                                                        pDM_SWAT_Table->Train_time_flag=3;\r
                                                else if((LocalMaxRSSI-LocalMinRSSI)>5)\r
                                                if((LocalMaxRSSI-LocalMinRSSI)>8)\r
                                                        pDM_SWAT_Table->Train_time_flag=3;\r
                                                else if((LocalMaxRSSI-LocalMinRSSI)>5)\r
@@ -1508,8 +2515,8 @@ odm_S0S1_SwAntDiv(
                                        }\r
                                }\r
                        }\r
                                        }\r
                                }\r
                        }\r
-                       \r
-                       pDM_FatTable->MinMaxRSSI=MinMaxRSSI;\r
+\r
+                       pDM_FatTable->MinMaxRSSI = MinMaxRSSI;\r
                        pDM_SWAT_Table->try_flag = 0;\r
                                                \r
                        if( pDM_SWAT_Table->Double_chk_flag==1)\r
                        pDM_SWAT_Table->try_flag = 0;\r
                                                \r
                        if( pDM_SWAT_Table->Double_chk_flag==1)\r
@@ -1545,7 +2552,7 @@ odm_S0S1_SwAntDiv(
                                pDM_SWAT_Table->PreAntenna =RxIdleAnt;\r
                                ODM_UpdateRxIdleAnt(pDM_Odm, RxIdleAnt );\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("[reset try_flag = 0] Training accomplished !!!] \n\n\n"));\r
                                pDM_SWAT_Table->PreAntenna =RxIdleAnt;\r
                                ODM_UpdateRxIdleAnt(pDM_Odm, RxIdleAnt );\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("[reset try_flag = 0] Training accomplished !!!] \n\n\n"));\r
-                               return;\r
+                               return;\r
                        }\r
                        \r
                }\r
                        }\r
                        \r
                }\r
@@ -1607,45 +2614,27 @@ ODM_SW_AntDiv_WorkitemCallback(
 \r
 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
 \r
 \r
 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
 \r
-VOID\r
-ODM_SW_AntDiv_WorkitemCallback(\r
-    IN PVOID            pContext\r
-    )\r
-{\r
-       PADAPTER                pAdapter = (PADAPTER)pContext;\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
-\r
-       //DbgPrint("SW_antdiv_Workitem_Callback");\r
-       odm_S0S1_SwAntDiv(&pHalData->odmpriv, SWAW_STEP_DETERMINE);\r
-}\r
-\r
 VOID\r
 ODM_SW_AntDiv_Callback(void *FunctionContext)\r
 {\r
        PDM_ODM_T       pDM_Odm= (PDM_ODM_T)FunctionContext;\r
        PADAPTER        padapter = pDM_Odm->Adapter;\r
 VOID\r
 ODM_SW_AntDiv_Callback(void *FunctionContext)\r
 {\r
        PDM_ODM_T       pDM_Odm= (PDM_ODM_T)FunctionContext;\r
        PADAPTER        padapter = pDM_Odm->Adapter;\r
-\r
-\r
        if(padapter->net_closed == _TRUE)\r
            return;\r
        if(padapter->net_closed == _TRUE)\r
            return;\r
-\r
-#if 0 // Can't do I/O in timer callback\r
        odm_S0S1_SwAntDiv(pDM_Odm, SWAW_STEP_DETERMINE);\r
        odm_S0S1_SwAntDiv(pDM_Odm, SWAW_STEP_DETERMINE);\r
-#else\r
-       rtw_run_in_thread_cmd(padapter, ODM_SW_AntDiv_WorkitemCallback, padapter);\r
-#endif\r
 }\r
 \r
 }\r
 \r
-#endif\r
 \r
 \r
+#endif\r
 \r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
 VOID\r
 odm_S0S1_SwAntDivByCtrlFrame(\r
 \r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
 VOID\r
 odm_S0S1_SwAntDivByCtrlFrame(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID                   pDM_VOID,       \r
        IN              u1Byte                  Step\r
        )\r
 {\r
        IN              u1Byte                  Step\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        \r
        pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        \r
@@ -1676,11 +2665,13 @@ odm_S0S1_SwAntDivByCtrlFrame(
 \r
 VOID\r
 odm_AntselStatisticsOfCtrlFrame(\r
 \r
 VOID\r
 odm_AntselStatisticsOfCtrlFrame(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID                   pDM_VOID,\r
        IN              u1Byte                  antsel_tr_mux,\r
        IN              u4Byte                  RxPWDBAll\r
        IN              u1Byte                  antsel_tr_mux,\r
        IN              u4Byte                  RxPWDBAll\r
-)\r
+       \r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 \r
        if(antsel_tr_mux == ANT1_2G)\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 \r
        if(antsel_tr_mux == ANT1_2G)\r
@@ -1697,11 +2688,16 @@ odm_AntselStatisticsOfCtrlFrame(
 \r
 VOID\r
 odm_S0S1_SwAntDivByCtrlFrame_ProcessRSSI(\r
 \r
 VOID\r
 odm_S0S1_SwAntDivByCtrlFrame_ProcessRSSI(\r
-       IN              PDM_ODM_T                               pDM_Odm,\r
-       IN              PODM_PHY_INFO_T         pPhyInfo,\r
-       IN              PODM_PACKET_INFO_T              pPktinfo\r
+       IN              PVOID                   pDM_VOID,       \r
+       IN              PVOID                   p_phy_info_void,\r
+       IN              PVOID                   p_pkt_info_void\r
+       //IN            PODM_PHY_INFO_T         pPhyInfo,\r
+       //IN            PODM_PACKET_INFO_T              pPktinfo\r
        )\r
 {\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PODM_PHY_INFO_T  pPhyInfo=(PODM_PHY_INFO_T)p_phy_info_void;\r
+       PODM_PACKET_INFO_T      pPktinfo=(PODM_PACKET_INFO_T)p_pkt_info_void;\r
        pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        BOOLEAN         isCCKrate;\r
        pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
        pFAT_T          pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        BOOLEAN         isCCKrate;\r
@@ -1747,17 +2743,17 @@ odm_S0S1_SwAntDivByCtrlFrame_ProcessRSSI(
 #endif  //#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 \r
 \r
 #endif  //#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 \r
 \r
+#endif //#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
 \r
 \r
-#endif //#if (RTL8723B_SUPPORT == 1)\r
 \r
 \r
+#if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
 \r
 \r
-#if(RTL8188E_SUPPORT == 1  || RTL8192E_SUPPORT == 1)\r
-#if (!(DM_ODM_SUPPORT_TYPE == ODM_CE))\r
 VOID\r
 odm_SetNextMACAddrTarget(\r
 VOID\r
 odm_SetNextMACAddrTarget(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
+       IN              PVOID           pDM_VOID\r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        PSTA_INFO_T     pEntry;\r
        //u1Byte        Bssid[6];\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        PSTA_INFO_T     pEntry;\r
        //u1Byte        Bssid[6];\r
@@ -1785,15 +2781,18 @@ odm_SetNextMACAddrTarget(
 #else\r
                                value32 = (pEntry->MacAddr[5]<<8)|pEntry->MacAddr[4];\r
 #endif\r
 #else\r
                                value32 = (pEntry->MacAddr[5]<<8)|pEntry->MacAddr[4];\r
 #endif\r
-                               ODM_SetMACReg(pDM_Odm, 0x7b4, 0xFFFF, value32);\r
+                               \r
+                               ODM_SetMACReg(pDM_Odm, 0x7b4, 0xFFFF, value32);//0x7b4~0x7b5\r
+                               \r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
                                value32 = (pEntry->hwaddr[3]<<24)|(pEntry->hwaddr[2]<<16) |(pEntry->hwaddr[1]<<8) |pEntry->hwaddr[0];\r
 #else\r
                                value32 = (pEntry->MacAddr[3]<<24)|(pEntry->MacAddr[2]<<16) |(pEntry->MacAddr[1]<<8) |pEntry->MacAddr[0];\r
 #endif\r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
                                value32 = (pEntry->hwaddr[3]<<24)|(pEntry->hwaddr[2]<<16) |(pEntry->hwaddr[1]<<8) |pEntry->hwaddr[0];\r
 #else\r
                                value32 = (pEntry->MacAddr[3]<<24)|(pEntry->MacAddr[2]<<16) |(pEntry->MacAddr[1]<<8) |pEntry->MacAddr[0];\r
 #endif\r
-                               ODM_SetMACReg(pDM_Odm, 0x7b0, bMaskDWord, value32);\r
+                               ODM_SetMACReg(pDM_Odm, 0x7b0, bMaskDWord, value32);//0x7b0~0x7b3\r
 \r
 \r
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_FatTable->TrainIdx=%lu\n",pDM_FatTable->TrainIdx));\r
+                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_FatTable->TrainIdx=%d\n",pDM_FatTable->TrainIdx));\r
+                               \r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Training MAC Addr = %x:%x:%x:%x:%x:%x\n",\r
                                        pEntry->hwaddr[5],pEntry->hwaddr[4],pEntry->hwaddr[3],pEntry->hwaddr[2],pEntry->hwaddr[1],pEntry->hwaddr[0]));\r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Training MAC Addr = %x:%x:%x:%x:%x:%x\n",\r
                                        pEntry->hwaddr[5],pEntry->hwaddr[4],pEntry->hwaddr[3],pEntry->hwaddr[2],pEntry->hwaddr[1],pEntry->hwaddr[0]));\r
@@ -1852,85 +2851,203 @@ odm_SetNextMACAddrTarget(
 \r
 VOID\r
 odm_FastAntTraining(\r
 \r
 VOID\r
 odm_FastAntTraining(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
+       IN              PVOID           pDM_VOID\r
+       )\r
 {\r
 {\r
-       u4Byte  i, MaxRSSI=0;\r
-       u1Byte  TargetAnt=2;\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-       BOOLEAN bPktFilterMacth = FALSE;\r
+\r
+       u4Byte  MaxRSSI_pathA=0, Pckcnt_pathA=0;\r
+       u1Byte  i,TargetAnt_pathA=0;\r
+       BOOLEAN bPktFilterMacth_pathA = FALSE;\r
+       #if(RTL8192E_SUPPORT == 1)\r
+       u4Byte  MaxRSSI_pathB=0, Pckcnt_pathB=0;\r
+       u1Byte  TargetAnt_pathB=0;\r
+       BOOLEAN bPktFilterMacth_pathB = FALSE;\r
+       #endif\r
+\r
+\r
+       if(!pDM_Odm->bLinked) //bLinked==False\r
+       {\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[No Link!!!]\n"));\r
+               \r
+               if(pDM_FatTable->bBecomeLinked == TRUE)\r
+               {\r
+                       odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
+                       odm_FastTraining_enable(pDM_Odm , FAT_OFF);\r
+                       odm_Tx_By_TxDesc_or_Reg(pDM_Odm , REG);\r
+                       pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;\r
+               }\r
+               return;\r
+       }\r
+       else\r
+       {\r
+               if(pDM_FatTable->bBecomeLinked ==FALSE)\r
+               {\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Linked!!!]\n"));\r
+                       odm_Tx_By_TxDesc_or_Reg(pDM_Odm , TX_BY_DESC);\r
+                       pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;\r
+               }\r
+       }\r
+\r
+               \r
+        if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
+       {\r
+           ODM_SetBBReg(pDM_Odm, 0x864 , BIT2|BIT1|BIT0, ((pDM_Odm->fat_comb_a)-1));\r
+        }\r
+       #if(RTL8192E_SUPPORT == 1)\r
+        else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+        {\r
+           ODM_SetBBReg(pDM_Odm, 0xB38 , BIT2|BIT1|BIT0, ((pDM_Odm->fat_comb_a)-1) );     //path-A  // ant combination=regB38[2:0]+1\r
+          ODM_SetBBReg(pDM_Odm, 0xB38 , BIT18|BIT17|BIT16, ((pDM_Odm->fat_comb_b)-1) );  //path-B  // ant combination=regB38[18:16]+1\r
+        }\r
+       #endif\r
 \r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("==>odm_FastAntTraining()\n"));\r
 \r
        //1 TRAINING STATE\r
        if(pDM_FatTable->FAT_State == FAT_TRAINING_STATE)\r
        {\r
 \r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("==>odm_FastAntTraining()\n"));\r
 \r
        //1 TRAINING STATE\r
        if(pDM_FatTable->FAT_State == FAT_TRAINING_STATE)\r
        {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Enter FAT_TRAINING_STATE\n"));\r
                //2 Caculate RSSI per Antenna\r
                //2 Caculate RSSI per Antenna\r
-               for (i=0; i<7; i++)\r
+\r
+                //3 [path-A]---------------------------\r
+               for (i=0; i<(pDM_Odm->fat_comb_a); i++) // i : antenna index\r
                {\r
                        if(pDM_FatTable->antRSSIcnt[i] == 0)\r
                                pDM_FatTable->antAveRSSI[i] = 0;\r
                        else\r
                        {\r
                        pDM_FatTable->antAveRSSI[i] = pDM_FatTable->antSumRSSI[i] /pDM_FatTable->antRSSIcnt[i];\r
                {\r
                        if(pDM_FatTable->antRSSIcnt[i] == 0)\r
                                pDM_FatTable->antAveRSSI[i] = 0;\r
                        else\r
                        {\r
                        pDM_FatTable->antAveRSSI[i] = pDM_FatTable->antSumRSSI[i] /pDM_FatTable->antRSSIcnt[i];\r
-                               bPktFilterMacth = TRUE;\r
+                               bPktFilterMacth_pathA = TRUE;\r
                        }\r
                        }\r
-                       if(pDM_FatTable->antAveRSSI[i] > MaxRSSI)\r
+                       \r
+                       if(pDM_FatTable->antAveRSSI[i] > MaxRSSI_pathA)\r
+                       {\r
+                               MaxRSSI_pathA = pDM_FatTable->antAveRSSI[i];\r
+                                Pckcnt_pathA = pDM_FatTable ->antRSSIcnt[i];\r
+                               TargetAnt_pathA =  i ; \r
+                       }\r
+                        else if(pDM_FatTable->antAveRSSI[i] == MaxRSSI_pathA)\r
+                       {\r
+                               if(  (pDM_FatTable->antRSSIcnt[i] )   >   Pckcnt_pathA)\r
                        {\r
                        {\r
-                               MaxRSSI = pDM_FatTable->antAveRSSI[i];\r
-                               TargetAnt = (u1Byte) i;\r
+                                       MaxRSSI_pathA = pDM_FatTable->antAveRSSI[i];\r
+                                       Pckcnt_pathA = pDM_FatTable ->antRSSIcnt[i];\r
+                                       TargetAnt_pathA = i ;\r
+                               }\r
                        }\r
 \r
                        }\r
 \r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_FatTable->antAveRSSI[%lu] = %lu, pDM_FatTable->antRSSIcnt[%lu] = %lu\n",\r
-                               i, pDM_FatTable->antAveRSSI[i], i, pDM_FatTable->antRSSIcnt[i]));\r
+                       ODM_RT_TRACE("*** Ant-Index : [ %d ],      Counter = (( %d )),     Avg RSSI = (( %d )) \n", i, pDM_FatTable->antRSSIcnt[i],  pDM_FatTable->antAveRSSI[i] );\r
                }\r
 \r
                }\r
 \r
-               //2 Select TRX Antenna\r
-               if(bPktFilterMacth == FALSE)\r
+\r
+               /*\r
+               #if(RTL8192E_SUPPORT == 1)\r
+               //3 [path-B]---------------------------\r
+               for (i=0; i<(pDM_Odm->fat_comb_b); i++)\r
+               {\r
+                       if(pDM_FatTable->antRSSIcnt_pathB[i] == 0)\r
+                               pDM_FatTable->antAveRSSI_pathB[i] = 0;                          \r
+                       else // (antRSSIcnt[i] != 0)\r
+                       {\r
+                               pDM_FatTable->antAveRSSI_pathB[i] = pDM_FatTable->antSumRSSI_pathB[i] /pDM_FatTable->antRSSIcnt_pathB[i];\r
+                               bPktFilterMacth_pathB = TRUE;\r
+                       }\r
+                       if(pDM_FatTable->antAveRSSI_pathB[i] > MaxRSSI_pathB)\r
+                       {\r
+                               MaxRSSI_pathB = pDM_FatTable->antAveRSSI_pathB[i];\r
+                                Pckcnt_pathB = pDM_FatTable ->antRSSIcnt_pathB[i];\r
+                               TargetAnt_pathB = (u1Byte) i; \r
+                       }\r
+                        if(pDM_FatTable->antAveRSSI_pathB[i] == MaxRSSI_pathB)\r
+                       {\r
+                               if(pDM_FatTable ->antRSSIcnt_pathB > Pckcnt_pathB)\r
                {\r
                {\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("None Packet is matched\n"));\r
+                                       MaxRSSI_pathB = pDM_FatTable->antAveRSSI_pathB[i];\r
+                                       TargetAnt_pathB = (u1Byte) i;\r
+                               } \r
+               }\r
+                       if (pDM_Odm->fat_print_rssi==1)\r
+               {\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***{Path-B}: Sum RSSI[%d] = (( %d )),      cnt RSSI [%d] = (( %d )),     Avg RSSI[%d] = (( %d )) \n",\r
+                               i, pDM_FatTable->antSumRSSI_pathB[i], i, pDM_FatTable->antRSSIcnt_pathB[i], i, pDM_FatTable->antAveRSSI_pathB[i]));\r
+                       }\r
+               }\r
+               #endif\r
+               */\r
+\r
+       //1 DECISION STATE\r
+\r
+               //2 Select TRX Antenna\r
 \r
 \r
-                       ODM_SetBBReg(pDM_Odm, 0xe08 , BIT16, 0);        //RegE08[16]=1'b0               //disable fast training\r
-                       ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 0);         //RegC50[7]=1'b0                //disable HW AntDiv\r
+               odm_FastTraining_enable(pDM_Odm , FAT_OFF);\r
+\r
+               //3 [path-A]---------------------------\r
+               if(bPktFilterMacth_pathA  == FALSE)\r
+               {\r
+                       //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("{Path-A}: None Packet is matched\n"));\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("{Path-A}: None Packet is matched\n"));\r
+                       odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("TargetAnt=%d, MaxRSSI=%lu\n",TargetAnt,MaxRSSI));\r
-\r
-                       ODM_SetBBReg(pDM_Odm, 0xe08 , BIT16, 0);        //RegE08[16]=1'b0               //disable fast training\r
-                       //ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 0);               //RegC50[7]=1'b0                //disable HW AntDiv\r
-                       ODM_SetBBReg(pDM_Odm, 0x864 , BIT8|BIT7|BIT6, TargetAnt);       //Default RX is Omni, Optional RX is the best decision by FAT\r
-                       //ODM_SetBBReg(pDM_Odm, 0x860 , BIT14|BIT13|BIT12, TargetAnt);  //Default TX\r
-                       ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 1); //Reg80c[21]=1'b1              //from TX Info\r
+                       ODM_RT_TRACE("TargetAnt_pathA = (( %d )) , MaxRSSI_pathA = (( %d )) \n",TargetAnt_pathA,MaxRSSI_pathA);\r
 \r
 \r
-#if 0\r
-                       pEntry = pDM_Odm->pODM_StaInfo[pDM_FatTable->TrainIdx];\r
+                       //3 [ update RX-optional ant ]        Default RX is Omni, Optional RX is the best decision by FAT\r
+                       if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
+                       {\r
+                               ODM_SetBBReg(pDM_Odm, 0x864 , BIT8|BIT7|BIT6, TargetAnt_pathA); \r
+                       }\r
+                       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+                       {\r
+                               ODM_SetBBReg(pDM_Odm, 0xB38 , BIT8|BIT7|BIT6, TargetAnt_pathA);//Optional RX [pth-A]\r
+                       }\r
+                       //3 [ update TX ant ]\r
+                       odm_UpdateTxAnt(pDM_Odm, TargetAnt_pathA, (pDM_FatTable->TrainIdx)); \r
 \r
 \r
-                       if(IS_STA_VALID(pEntry))\r
+                       if(TargetAnt_pathA == 0)\r
+                               odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
+               }\r
+               /*\r
+               #if(RTL8192E_SUPPORT == 1)\r
+               //3 [path-B]---------------------------\r
+               if(bPktFilterMacth_pathB == FALSE)\r
+               {\r
+                       if (pDM_Odm->fat_print_rssi==1)\r
+                       {\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("***[%d]{Path-B}: None Packet is matched\n\n\n",__LINE__));\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       if (pDM_Odm->fat_print_rssi==1)\r
                        {\r
                        {\r
-                               pEntry->antsel_a = TargetAnt&BIT0;\r
-                               pEntry->antsel_b = (TargetAnt&BIT1)>>1;\r
-                               pEntry->antsel_c = (TargetAnt&BIT2)>>2;\r
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, \r
+                               (" ***TargetAnt_pathB = (( %d )) *** MaxRSSI = (( %d ))***\n\n\n",TargetAnt_pathB,MaxRSSI_pathB));\r
                        }\r
                        }\r
-#else\r
-                       pDM_FatTable->antsel_a[pDM_FatTable->TrainIdx] = TargetAnt&BIT0;\r
-                       pDM_FatTable->antsel_b[pDM_FatTable->TrainIdx] = (TargetAnt&BIT1)>>1;\r
-                       pDM_FatTable->antsel_c[pDM_FatTable->TrainIdx] = (TargetAnt&BIT2)>>2;\r
-#endif\r
-\r
-\r
-                       if(TargetAnt == 0)\r
-                               ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 0);         //RegC50[7]=1'b0                //disable HW AntDiv\r
+                       ODM_SetBBReg(pDM_Odm, 0xB38 , BIT21|BIT20|BIT19, TargetAnt_pathB);      //Default RX is Omni, Optional RX is the best decision by FAT           \r
+                       ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 1); //Reg80c[21]=1'b1              //from TX Info\r
 \r
 \r
+                       pDM_FatTable->antsel_pathB[pDM_FatTable->TrainIdx] = TargetAnt_pathB;\r
                }\r
                }\r
+               #endif\r
+               */\r
 \r
                //2 Reset Counter\r
 \r
                //2 Reset Counter\r
-               for(i=0; i<7; i++)\r
+               for(i=0; i<(pDM_Odm->fat_comb_a); i++)\r
                {\r
                        pDM_FatTable->antSumRSSI[i] = 0;\r
                        pDM_FatTable->antRSSIcnt[i] = 0;\r
                }\r
                {\r
                        pDM_FatTable->antSumRSSI[i] = 0;\r
                        pDM_FatTable->antRSSIcnt[i] = 0;\r
                }\r
+               /*\r
+               #if(RTL8192E_SUPPORT == 1)\r
+               for(i=0; i<=(pDM_Odm->fat_comb_b); i++)\r
+               {\r
+                       pDM_FatTable->antSumRSSI_pathB[i] = 0;\r
+                       pDM_FatTable->antRSSIcnt_pathB[i] = 0;\r
+               }\r
+               #endif\r
+               */\r
                \r
                pDM_FatTable->FAT_State = FAT_NORMAL_STATE;\r
                return;\r
                \r
                pDM_FatTable->FAT_State = FAT_NORMAL_STATE;\r
                return;\r
@@ -1939,36 +3056,27 @@ odm_FastAntTraining(
        //1 NORMAL STATE\r
        if(pDM_FatTable->FAT_State == FAT_NORMAL_STATE)\r
        {\r
        //1 NORMAL STATE\r
        if(pDM_FatTable->FAT_State == FAT_NORMAL_STATE)\r
        {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Enter FAT_NORMAL_STATE\n"));\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Start  Normal State]\n"));\r
 \r
                odm_SetNextMACAddrTarget(pDM_Odm);\r
 \r
 \r
                odm_SetNextMACAddrTarget(pDM_Odm);\r
 \r
-#if 0\r
-                               pEntry = pDM_Odm->pODM_StaInfo[pDM_FatTable->TrainIdx];\r
-                               if(IS_STA_VALID(pEntry))\r
-                               {\r
-                                       pEntry->antsel_a = TargetAnt&BIT0;\r
-                                       pEntry->antsel_b = (TargetAnt&BIT1)>>1;\r
-                                       pEntry->antsel_c = (TargetAnt&BIT2)>>2;\r
-                               }\r
-#endif\r
-\r
                //2 Prepare Training\r
                pDM_FatTable->FAT_State = FAT_TRAINING_STATE;\r
                //2 Prepare Training\r
                pDM_FatTable->FAT_State = FAT_TRAINING_STATE;\r
-               ODM_SetBBReg(pDM_Odm, 0xe08 , BIT16, 1);        //RegE08[16]=1'b1               //enable fast training\r
-               ODM_SetBBReg(pDM_Odm, 0xc50 , BIT7, 1); //RegC50[7]=1'b1                //enable HW AntDiv\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Start FAT_TRAINING_STATE\n"));\r
-               ODM_SetTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer, 500 ); //ms\r
-               \r
+               odm_FastTraining_enable(pDM_Odm , FAT_ON);\r
+               odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);          //enable HW AntDiv\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Start Training State]\n"));\r
+\r
+               ODM_SetTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer, pDM_Odm->antdiv_intvl ); //ms\r
        }\r
                \r
 }\r
 \r
 VOID\r
 odm_FastAntTrainingCallback(\r
        }\r
                \r
 }\r
 \r
 VOID\r
 odm_FastAntTrainingCallback(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
+       IN              PVOID           pDM_VOID\r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
        PADAPTER        padapter = pDM_Odm->Adapter;\r
 \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
        PADAPTER        padapter = pDM_Odm->Adapter;\r
@@ -1981,38 +3089,29 @@ odm_FastAntTrainingCallback(
 #if USE_WORKITEM\r
        ODM_ScheduleWorkItem(&pDM_Odm->FastAntTrainingWorkitem);\r
 #else\r
 #if USE_WORKITEM\r
        ODM_ScheduleWorkItem(&pDM_Odm->FastAntTrainingWorkitem);\r
 #else\r
+       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("******odm_FastAntTrainingCallback****** \n"));\r
        odm_FastAntTraining(pDM_Odm);\r
 #endif\r
 }\r
 \r
 VOID\r
 odm_FastAntTrainingWorkItemCallback(\r
        odm_FastAntTraining(pDM_Odm);\r
 #endif\r
 }\r
 \r
 VOID\r
 odm_FastAntTrainingWorkItemCallback(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
+       IN              PVOID           pDM_VOID\r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("******odm_FastAntTrainingWorkItemCallback****** \n"));\r
        odm_FastAntTraining(pDM_Odm);\r
 }\r
        odm_FastAntTraining(pDM_Odm);\r
 }\r
-#endif\r
-\r
-#endif\r
 \r
 \r
-VOID\r
-ODM_AntDivReset(\r
-       IN PDM_ODM_T    pDM_Odm \r
-       )\r
-{\r
-       //2 [--8723B---]\r
-#if (RTL8723B_SUPPORT == 1)\r
-       if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-               odm_S0S1_SWAntDiv_Reset_8723B(pDM_Odm);\r
 #endif\r
 #endif\r
-}\r
 \r
 VOID\r
 ODM_AntDivInit(\r
 \r
 VOID\r
 ODM_AntDivInit(\r
-       IN PDM_ODM_T    pDM_Odm \r
+       IN              PVOID           pDM_VOID\r
        )\r
 {\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        pSWAT_T                 pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
 \r
        pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        pSWAT_T                 pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
 \r
@@ -2041,69 +3140,45 @@ ODM_AntDivInit(
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[2G & 5G AntDiv Init]:Support Both 2G & 5G Antenna Diversity Function\n"));\r
        }\r
 \r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[2G & 5G AntDiv Init]:Support Both 2G & 5G Antenna Diversity Function\n"));\r
        }\r
 \r
-        pDM_Odm->antdiv_rssi=0;\r
-\r
 #endif \r
        //---\r
 #endif \r
        //---\r
-       \r
+\r
        //2 [--General---]\r
        pDM_Odm->antdiv_period=0;\r
        //2 [--General---]\r
        pDM_Odm->antdiv_period=0;\r
-       pDM_Odm->antdiv_select=0;\r
-       pDM_SWAT_Table->Ant5G = MAIN_ANT;\r
-       pDM_SWAT_Table->Ant2G = MAIN_ANT;\r
-       pDM_FatTable->CCK_counter_main=0;\r
-       pDM_FatTable->CCK_counter_aux=0;\r
-       pDM_FatTable->OFDM_counter_main=0;\r
-       pDM_FatTable->OFDM_counter_aux=0;\r
-       \r
-       //3 [Set MAIN_ANT as default antenna if Auto-Ant enable]\r
-       if (pDM_Odm->antdiv_select==1)\r
-               pDM_Odm->AntType = ODM_FIX_MAIN_ANT;\r
-       else if (pDM_Odm->antdiv_select==2)\r
-               pDM_Odm->AntType = ODM_FIX_AUX_ANT;\r
-       else if(pDM_Odm->antdiv_select==0)\r
-               pDM_Odm->AntType = ODM_AUTO_ANT;\r
+\r
+       pDM_FatTable->bBecomeLinked =FALSE;\r
+       pDM_FatTable->AntDiv_OnOff =0xff;\r
+\r
+       //3       -   AP   -\r
+       #if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
        \r
        \r
-       if(pDM_Odm->AntType == ODM_AUTO_ANT)\r
-       {\r
-               odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-               ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
-       }\r
-       else\r
-       {\r
-               odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
+               #ifdef BEAMFORMING_SUPPORT\r
+               #if(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+               odm_BDC_Init(pDM_Odm);\r
+               #endif\r
+               #endif\r
                \r
                \r
-               if(pDM_Odm->AntType == ODM_FIX_MAIN_ANT)\r
-               {\r
-                       ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
-                       return;\r
-               }\r
-               else if(pDM_Odm->AntType == ODM_FIX_AUX_ANT)\r
-               {\r
-                       ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);\r
-                       return;\r
-               }\r
-       }\r
-       //---\r
-       if(pDM_Odm->AntDivType != CGCS_RX_HW_ANTDIV)\r
-       {\r
-               if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
-               {\r
-                       #if TX_BY_REG\r
-                       ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 0); //Reg80c[21]=1'b0              //from Reg\r
-                       #else\r
-                       ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 1);\r
-                       #endif\r
-               }       \r
-               else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
-               {\r
-                       #if TX_BY_REG\r
-                       ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 0); \r
-                       #else\r
-                       ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 1); \r
-                       #endif\r
-               }\r
-       }\r
+       //3     -   WIN   -\r
+       #elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+               pDM_SWAT_Table->Ant5G = MAIN_ANT;\r
+               pDM_SWAT_Table->Ant2G = MAIN_ANT;\r
+               pDM_FatTable->CCK_counter_main=0;\r
+               pDM_FatTable->CCK_counter_aux=0;\r
+               pDM_FatTable->OFDM_counter_main=0;\r
+               pDM_FatTable->OFDM_counter_aux=0;\r
+       #endif\r
+\r
+       //2 [---Set MAIN_ANT as default antenna if Auto-Ant enable---]\r
+       odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
+\r
+       pDM_Odm->AntType = ODM_AUTO_ANT;\r
+\r
+       pDM_FatTable->RxIdleAnt = ANTDIV_INIT;\r
+       ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
+               \r
+       //2 [---Set TX Antenna---]\r
+       odm_Tx_By_TxDesc_or_Reg(pDM_Odm , REG);\r
+\r
                \r
        //2 [--88E---]\r
        if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
                \r
        //2 [--88E---]\r
        if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
@@ -2124,9 +3199,11 @@ ODM_AntDivInit(
                        odm_RX_HWAntDiv_Init_88E(pDM_Odm);\r
                else if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
                        odm_TRX_HWAntDiv_Init_88E(pDM_Odm);\r
                        odm_RX_HWAntDiv_Init_88E(pDM_Odm);\r
                else if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
                        odm_TRX_HWAntDiv_Init_88E(pDM_Odm);\r
+               #if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
                else if(pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)\r
                        odm_Smart_HWAntDiv_Init_88E(pDM_Odm);\r
                else if(pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)\r
                        odm_Smart_HWAntDiv_Init_88E(pDM_Odm);\r
-       #endif  \r
+               #endif  \r
+       #endif\r
        }\r
        \r
        //2 [--92E---]\r
        }\r
        \r
        //2 [--92E---]\r
@@ -2148,8 +3225,10 @@ ODM_AntDivInit(
                        odm_RX_HWAntDiv_Init_92E(pDM_Odm);\r
                else if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
                        odm_TRX_HWAntDiv_Init_92E(pDM_Odm);\r
                        odm_RX_HWAntDiv_Init_92E(pDM_Odm);\r
                else if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
                        odm_TRX_HWAntDiv_Init_92E(pDM_Odm);\r
+               #if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
                else if(pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)\r
                        odm_Smart_HWAntDiv_Init_92E(pDM_Odm);\r
                else if(pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)\r
                        odm_Smart_HWAntDiv_Init_92E(pDM_Odm);\r
+               #endif\r
        \r
        }\r
        #endif  \r
        \r
        }\r
        #endif  \r
@@ -2238,13 +3317,13 @@ ODM_AntDivInit(
 \r
 VOID\r
 ODM_AntDiv(\r
 \r
 VOID\r
 ODM_AntDiv(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-)\r
-{      \r
+       IN              PVOID           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
        pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 \r
        PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
        pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 \r
-//#if (DM_ODM_SUPPORT_TYPE == ODM_AP)  \r
        if(*pDM_Odm->pBandType == ODM_BAND_5G )\r
        {\r
                if(pDM_FatTable->idx_AntDiv_counter_5G <  pDM_Odm->antdiv_period )\r
        if(*pDM_Odm->pBandType == ODM_BAND_5G )\r
        {\r
                if(pDM_FatTable->idx_AntDiv_counter_5G <  pDM_Odm->antdiv_period )\r
@@ -2265,7 +3344,7 @@ ODM_AntDiv(
                else\r
                        pDM_FatTable->idx_AntDiv_counter_2G=0;\r
        }\r
                else\r
                        pDM_FatTable->idx_AntDiv_counter_2G=0;\r
        }\r
-//#endif       \r
+       \r
        //----------\r
        if(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))\r
        {\r
        //----------\r
        if(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))\r
        {\r
@@ -2285,46 +3364,50 @@ ODM_AntDiv(
                if( BeamformCap & BEAMFORMEE_CAP ) //  BFmee On  &&   Div On ->  Div Off\r
                {       \r
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ AntDiv : OFF ]   BFmee ==1 \n"));\r
                if( BeamformCap & BEAMFORMEE_CAP ) //  BFmee On  &&   Div On ->  Div Off\r
                {       \r
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ AntDiv : OFF ]   BFmee ==1 \n"));\r
-                       if(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)\r
+                       if(pDM_FatTable->fix_ant_bfee == 0)\r
                        {\r
                                odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
                        {\r
                                odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-                               pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);\r
-                               return;\r
+                               pDM_FatTable->fix_ant_bfee = 1;\r
                        }\r
                        }\r
+                       return;\r
                }\r
                else // BFmee Off   &&   Div Off ->  Div On\r
                }\r
                else // BFmee Off   &&   Div Off ->  Div On\r
-       #endif\r
                {\r
                {\r
-                       if(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)  &&  pDM_Odm->bLinked) \r
+                       if((pDM_FatTable->fix_ant_bfee == 1)  &&  pDM_Odm->bLinked) \r
                        {\r
                        {\r
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ AntDiv : ON ]   BFmee ==0 \n"));\r
+                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ AntDiv : ON ]   BFmee ==0\n"));\r
                                if((pDM_Odm->AntDivType!=S0S1_SW_ANTDIV) )\r
                                        odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);\r
                                if((pDM_Odm->AntDivType!=S0S1_SW_ANTDIV) )\r
                                        odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);\r
-                               \r
-                               pDM_Odm->SupportAbility |= (ODM_BB_ANT_DIV);\r
+\r
+                               pDM_FatTable->fix_ant_bfee = 0;\r
                        }\r
                }\r
                        }\r
                }\r
-        }\r
-#endif\r
+       }\r
+       #endif  \r
+#elif (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+       //----------just for fool proof\r
+\r
+       if(pDM_Odm->antdiv_rssi)\r
+               pDM_Odm->DebugComponents |= ODM_COMP_ANT_DIV;\r
+       else\r
+               pDM_Odm->DebugComponents &= ~ODM_COMP_ANT_DIV;\r
 \r
 \r
-       //----------\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
        if(pDM_FatTable->AntDiv_2G_5G == ODM_ANTDIV_2G)\r
        {\r
        if(pDM_FatTable->AntDiv_2G_5G == ODM_ANTDIV_2G)\r
        {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ 2G AntDiv Running ]\n"));\r
+               //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ 2G AntDiv Running ]\n"));\r
                if(!(pDM_Odm->SupportICType & ODM_ANTDIV_2G_SUPPORT_IC))\r
                        return;\r
        }\r
        else if(pDM_FatTable->AntDiv_2G_5G == ODM_ANTDIV_5G)\r
        {\r
                if(!(pDM_Odm->SupportICType & ODM_ANTDIV_2G_SUPPORT_IC))\r
                        return;\r
        }\r
        else if(pDM_FatTable->AntDiv_2G_5G == ODM_ANTDIV_5G)\r
        {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ 5G AntDiv Running ]\n"));\r
+               //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ 5G AntDiv Running ]\n"));\r
                if(!(pDM_Odm->SupportICType & ODM_ANTDIV_5G_SUPPORT_IC))\r
                if(!(pDM_Odm->SupportICType & ODM_ANTDIV_5G_SUPPORT_IC))\r
-               return;\r
-       }\r
-       else if(pDM_FatTable->AntDiv_2G_5G == (ODM_ANTDIV_2G|ODM_ANTDIV_5G))\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ 2G & 5G AntDiv Running ]\n"));\r
+                       return;\r
        }\r
        }\r
+       //else  if(pDM_FatTable->AntDiv_2G_5G == (ODM_ANTDIV_2G|ODM_ANTDIV_5G))\r
+       //{\r
+               //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("[ 2G & 5G AntDiv Running ]\n"));\r
+       //}\r
 #endif\r
 \r
        //----------\r
 #endif\r
 \r
        //----------\r
@@ -2333,7 +3416,7 @@ ODM_AntDiv(
                pDM_Odm->AntType = ODM_FIX_MAIN_ANT;\r
        else if (pDM_Odm->antdiv_select==2)\r
                pDM_Odm->AntType = ODM_FIX_AUX_ANT;\r
                pDM_Odm->AntType = ODM_FIX_MAIN_ANT;\r
        else if (pDM_Odm->antdiv_select==2)\r
                pDM_Odm->AntType = ODM_FIX_AUX_ANT;\r
-       else  if (pDM_Odm->antdiv_select==0)\r
+       else  //if (pDM_Odm->antdiv_select==0)\r
                pDM_Odm->AntType = ODM_AUTO_ANT;\r
 \r
        //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("AntType= (( %d )) , pre_AntType= (( %d ))  \n",pDM_Odm->AntType,pDM_Odm->pre_AntType));\r
                pDM_Odm->AntType = ODM_AUTO_ANT;\r
 \r
        //ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,("AntType= (( %d )) , pre_AntType= (( %d ))  \n",pDM_Odm->AntType,pDM_Odm->pre_AntType));\r
@@ -2345,11 +3428,7 @@ ODM_AntDiv(
                if(pDM_Odm->AntType != pDM_Odm->pre_AntType)\r
                {\r
                        odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
                if(pDM_Odm->AntType != pDM_Odm->pre_AntType)\r
                {\r
                        odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
-\r
-                       if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
-                               ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 0);\r
-                       else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
-                               ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 0); \r
+                       odm_Tx_By_TxDesc_or_Reg(pDM_Odm , REG);\r
                                                \r
                        if(pDM_Odm->AntType == ODM_FIX_MAIN_ANT)\r
                                ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
                                                \r
                        if(pDM_Odm->AntType == ODM_FIX_MAIN_ANT)\r
                                ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);\r
@@ -2364,10 +3443,7 @@ ODM_AntDiv(
                if(pDM_Odm->AntType != pDM_Odm->pre_AntType)\r
                {\r
                        odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);\r
                if(pDM_Odm->AntType != pDM_Odm->pre_AntType)\r
                {\r
                        odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);\r
-                        if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
-                               ODM_SetBBReg(pDM_Odm, 0x80c , BIT21, 1);\r
-                       else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
-                               ODM_SetBBReg(pDM_Odm, 0x900 , BIT18, 1); \r
+                       odm_Tx_By_TxDesc_or_Reg(pDM_Odm , TX_BY_DESC);\r
                }\r
                pDM_Odm->pre_AntType=pDM_Odm->AntType;\r
        }\r
                }\r
                pDM_Odm->pre_AntType=pDM_Odm->AntType;\r
        }\r
@@ -2380,22 +3456,27 @@ ODM_AntDiv(
                #if (RTL8188E_SUPPORT == 1)\r
                if(pDM_Odm->AntDivType==CG_TRX_HW_ANTDIV ||pDM_Odm->AntDivType==CGCS_RX_HW_ANTDIV)\r
                        odm_HW_AntDiv(pDM_Odm);\r
                #if (RTL8188E_SUPPORT == 1)\r
                if(pDM_Odm->AntDivType==CG_TRX_HW_ANTDIV ||pDM_Odm->AntDivType==CGCS_RX_HW_ANTDIV)\r
                        odm_HW_AntDiv(pDM_Odm);\r
-               #if (!(DM_ODM_SUPPORT_TYPE == ODM_CE))\r
+\r
+               #if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
                else if (pDM_Odm->AntDivType==CG_TRX_SMART_ANTDIV)\r
                        odm_FastAntTraining(pDM_Odm);   \r
                #endif\r
                else if (pDM_Odm->AntDivType==CG_TRX_SMART_ANTDIV)\r
                        odm_FastAntTraining(pDM_Odm);   \r
                #endif\r
+               \r
                #endif\r
                #endif\r
+\r
        }\r
        //2 [--92E---]  \r
        #if (RTL8192E_SUPPORT == 1)\r
        else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
        {\r
        }\r
        //2 [--92E---]  \r
        #if (RTL8192E_SUPPORT == 1)\r
        else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
        {\r
-               if(pDM_Odm->AntDivType==CGCS_RX_HW_ANTDIV)\r
+               if(pDM_Odm->AntDivType==CGCS_RX_HW_ANTDIV || pDM_Odm->AntDivType==CG_TRX_HW_ANTDIV)\r
                        odm_HW_AntDiv(pDM_Odm);\r
                        odm_HW_AntDiv(pDM_Odm);\r
-               #if (!(DM_ODM_SUPPORT_TYPE == ODM_CE))\r
+               \r
+               #if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
                else if (pDM_Odm->AntDivType==CG_TRX_SMART_ANTDIV)\r
                        odm_FastAntTraining(pDM_Odm);   \r
                #endif\r
                else if (pDM_Odm->AntDivType==CG_TRX_SMART_ANTDIV)\r
                        odm_FastAntTraining(pDM_Odm);   \r
                #endif\r
+               \r
        }\r
        #endif\r
 \r
        }\r
        #endif\r
 \r
@@ -2418,7 +3499,7 @@ ODM_AntDiv(
                {\r
                        if(pDM_Odm->AntDivType == S0S1_SW_ANTDIV)\r
                        {\r
                {\r
                        if(pDM_Odm->AntDivType == S0S1_SW_ANTDIV)\r
                        {\r
-                       pDM_Odm->AntDivType=CG_TRX_HW_ANTDIV;\r
+                               pDM_Odm->AntDivType=CG_TRX_HW_ANTDIV;\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,(" [S0S1_SW_ANTDIV]  ->  [CG_TRX_HW_ANTDIV]\n"));\r
                                //ODM_SetBBReg(pDM_Odm, 0x8D4 , BIT24, 1); \r
                                if(pDM_FatTable->bBecomeLinked ==TRUE)\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,(" [S0S1_SW_ANTDIV]  ->  [CG_TRX_HW_ANTDIV]\n"));\r
                                //ODM_SetBBReg(pDM_Odm, 0x8D4 , BIT24, 1); \r
                                if(pDM_FatTable->bBecomeLinked ==TRUE)\r
@@ -2429,7 +3510,7 @@ ODM_AntDiv(
                {\r
                        if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
                        {\r
                {\r
                        if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
                        {\r
-                       pDM_Odm->AntDivType=S0S1_SW_ANTDIV;\r
+                               pDM_Odm->AntDivType=S0S1_SW_ANTDIV;\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,(" [CG_TRX_HW_ANTDIV]  ->  [S0S1_SW_ANTDIV]\n"));\r
                                //ODM_SetBBReg(pDM_Odm, 0x8D4 , BIT24, 0);\r
                                odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,ODM_DBG_LOUD,(" [CG_TRX_HW_ANTDIV]  ->  [S0S1_SW_ANTDIV]\n"));\r
                                //ODM_SetBBReg(pDM_Odm, 0x8D4 , BIT24, 0);\r
                                odm_AntDiv_on_off(pDM_Odm, ANTDIV_OFF);\r
@@ -2439,14 +3520,16 @@ ODM_AntDiv(
                if (pDM_Odm->AntDivType==S0S1_SW_ANTDIV)\r
                        odm_S0S1_SwAntDiv(pDM_Odm, SWAW_STEP_PEAK);\r
                else if (pDM_Odm->AntDivType==CG_TRX_HW_ANTDIV)\r
                if (pDM_Odm->AntDivType==S0S1_SW_ANTDIV)\r
                        odm_S0S1_SwAntDiv(pDM_Odm, SWAW_STEP_PEAK);\r
                else if (pDM_Odm->AntDivType==CG_TRX_HW_ANTDIV)\r
-               odm_HW_AntDiv(pDM_Odm);\r
+                       odm_HW_AntDiv(pDM_Odm);\r
        }\r
        #endif\r
        }\r
        #endif\r
+       \r
        //2 [--8881A---]\r
        #if (RTL8881A_SUPPORT == 1)\r
        else if(pDM_Odm->SupportICType == ODM_RTL8881A)         \r
                odm_HW_AntDiv(pDM_Odm);\r
        #endif\r
        //2 [--8881A---]\r
        #if (RTL8881A_SUPPORT == 1)\r
        else if(pDM_Odm->SupportICType == ODM_RTL8881A)         \r
                odm_HW_AntDiv(pDM_Odm);\r
        #endif\r
+       \r
        //2 [--8812A---]\r
        #if (RTL8812A_SUPPORT == 1)\r
        else if(pDM_Odm->SupportICType == ODM_RTL8812)\r
        //2 [--8812A---]\r
        #if (RTL8812A_SUPPORT == 1)\r
        else if(pDM_Odm->SupportICType == ODM_RTL8812)\r
@@ -2457,47 +3540,78 @@ ODM_AntDiv(
 \r
 VOID\r
 odm_AntselStatistics(\r
 \r
 VOID\r
 odm_AntselStatistics(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID                   pDM_VOID,       \r
        IN              u1Byte                  antsel_tr_mux,\r
        IN              u4Byte                  MacId,\r
        IN              u1Byte                  antsel_tr_mux,\r
        IN              u4Byte                  MacId,\r
-       IN              u4Byte                  RxPWDBAll\r
-)\r
+       IN              u4Byte                  utility,\r
+       IN            u1Byte                    method\r
+\r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
-\r
-       if(antsel_tr_mux == ANT1_2G)\r
+       if(method==RSSI_METHOD)\r
+       {\r
+               if(antsel_tr_mux == ANT1_2G)\r
+               {\r
+                       pDM_FatTable->MainAnt_Sum[MacId]+=utility;\r
+                       pDM_FatTable->MainAnt_Cnt[MacId]++;\r
+               }\r
+               else\r
+               {\r
+                       pDM_FatTable->AuxAnt_Sum[MacId]+=utility;\r
+                       pDM_FatTable->AuxAnt_Cnt[MacId]++;\r
+               }\r
+       }\r
+       #ifdef ODM_EVM_ENHANCE_ANTDIV\r
+       else if(method==EVM_METHOD)\r
        {\r
        {\r
-               pDM_FatTable->MainAnt_Sum[MacId]+=RxPWDBAll;\r
-               pDM_FatTable->MainAnt_Cnt[MacId]++;\r
+               if(antsel_tr_mux == ANT1_2G)\r
+               {\r
+                       pDM_FatTable->MainAntEVM_Sum[MacId]+=(utility<<5);\r
+                       pDM_FatTable->MainAntEVM_Cnt[MacId]++;\r
+               }\r
+               else\r
+               {\r
+                       pDM_FatTable->AuxAntEVM_Sum[MacId]+=(utility<<5);\r
+                       pDM_FatTable->AuxAntEVM_Cnt[MacId]++;\r
+               }\r
        }\r
        }\r
-       else\r
+       else if(method==CRC32_METHOD)\r
        {\r
        {\r
-               pDM_FatTable->AuxAnt_Sum[MacId]+=RxPWDBAll;\r
-               pDM_FatTable->AuxAnt_Cnt[MacId]++;\r
+               if(utility==0)\r
+                       pDM_FatTable->CRC32_Fail_Cnt++;\r
+               else\r
+                       pDM_FatTable->CRC32_Ok_Cnt+=utility;\r
        }\r
        }\r
+       #endif\r
 }\r
 \r
 \r
 VOID\r
 ODM_Process_RSSIForAntDiv(     \r
 }\r
 \r
 \r
 VOID\r
 ODM_Process_RSSIForAntDiv(     \r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       IN              PODM_PHY_INFO_T                         pPhyInfo,\r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
+       IN OUT          PVOID                   pDM_VOID,       \r
+       IN                      PVOID                   p_phy_info_void,\r
+       IN                      PVOID                   p_pkt_info_void\r
+       //IN            PODM_PHY_INFO_T                         pPhyInfo,\r
+       //IN            PODM_PACKET_INFO_T                      pPktinfo\r
        )\r
 {\r
        )\r
 {\r
-u1Byte                 isCCKrate=0,CCKMaxRate=DESC_RATE11M;\r
-pFAT_T                 pDM_FatTable = &pDM_Odm->DM_FatTable;\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PODM_PHY_INFO_T         pPhyInfo=(PODM_PHY_INFO_T)p_phy_info_void;\r
+       PODM_PACKET_INFO_T       pPktinfo=(PODM_PACKET_INFO_T)p_pkt_info_void;\r
+       u1Byte                  isCCKrate=0,CCKMaxRate=ODM_RATE11M;\r
+       pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 \r
 #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN))\r
        u4Byte                  RxPower_Ant0, RxPower_Ant1;     \r
 \r
 #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN))\r
        u4Byte                  RxPower_Ant0, RxPower_Ant1;     \r
+       u4Byte                  RxEVM_Ant0, RxEVM_Ant1;\r
 #else\r
        u1Byte                  RxPower_Ant0, RxPower_Ant1;     \r
 #else\r
        u1Byte                  RxPower_Ant0, RxPower_Ant1;     \r
+       u1Byte                  RxEVM_Ant0, RxEVM_Ant1;\r
 #endif\r
 \r
 #endif\r
 \r
-       if(pDM_Odm->SupportICType & ODM_N_ANTDIV_SUPPORT)\r
-               CCKMaxRate=DESC_RATE11M;\r
-       else if(pDM_Odm->SupportICType & ODM_AC_ANTDIV_SUPPORT)\r
-               CCKMaxRate=DESC_RATE11M;\r
+       CCKMaxRate=ODM_RATE11M;\r
        isCCKrate = (pPktinfo->DataRate <= CCKMaxRate)?TRUE:FALSE;\r
 \r
 #if ((RTL8192C_SUPPORT == 1) ||(RTL8192D_SUPPORT == 1))\r
        isCCKrate = (pPktinfo->DataRate <= CCKMaxRate)?TRUE:FALSE;\r
 \r
 #if ((RTL8192C_SUPPORT == 1) ||(RTL8192D_SUPPORT == 1))\r
@@ -2505,10 +3619,6 @@ pFAT_T                   pDM_FatTable = &pDM_Odm->DM_FatTable;
                {\r
                                if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)\r
                                {\r
                {\r
                                if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)\r
                                {\r
-                                       //if(pPktinfo->bPacketBeacon)\r
-                                       //{\r
-                                       //      DbgPrint("This is beacon, isCCKrate=%d\n", isCCKrate);\r
-                                       //}\r
                                        ODM_AntselStatistics_88C(pDM_Odm, pPktinfo->StationID,  pPhyInfo->RxPWDBAll, isCCKrate);\r
                                }\r
                }\r
                                        ODM_AntselStatistics_88C(pDM_Odm, pPktinfo->StationID,  pPhyInfo->RxPWDBAll, isCCKrate);\r
                                }\r
                }\r
@@ -2518,13 +3628,16 @@ pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;
        {\r
                RxPower_Ant0 = pPhyInfo->RxMIMOSignalStrength[0];\r
                RxPower_Ant1= pPhyInfo->RxMIMOSignalStrength[1];\r
        {\r
                RxPower_Ant0 = pPhyInfo->RxMIMOSignalStrength[0];\r
                RxPower_Ant1= pPhyInfo->RxMIMOSignalStrength[1];\r
+\r
+               RxEVM_Ant0 =pPhyInfo->RxMIMOSignalQuality[0];\r
+               RxEVM_Ant1 =pPhyInfo->RxMIMOSignalQuality[1];\r
        }\r
        else\r
                RxPower_Ant0=pPhyInfo->RxPWDBAll;\r
        \r
        if(pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)\r
        {\r
        }\r
        else\r
                RxPower_Ant0=pPhyInfo->RxPWDBAll;\r
        \r
        if(pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)\r
        {\r
-               if( (pDM_Odm->SupportICType & ODM_SMART_ANT_SUPPORT) &&  pPktinfo->bPacketToSelf   && pDM_FatTable->FAT_State == FAT_TRAINING_STATE )//(pPktinfo->bPacketMatchBSSID && (!pPktinfo->bPacketBeacon))\r
+               if( (pDM_Odm->SupportICType & ODM_SMART_ANT_SUPPORT) &&  (pPktinfo->bPacketToSelf)   && (pDM_FatTable->FAT_State == FAT_TRAINING_STATE) )//(pPktinfo->bPacketMatchBSSID && (!pPktinfo->bPacketBeacon))\r
                {\r
                        u1Byte  antsel_tr_mux;\r
                        antsel_tr_mux = (pDM_FatTable->antsel_rx_keep_2<<2) |(pDM_FatTable->antsel_rx_keep_1 <<1) |pDM_FatTable->antsel_rx_keep_0;\r
                {\r
                        u1Byte  antsel_tr_mux;\r
                        antsel_tr_mux = (pDM_FatTable->antsel_rx_keep_2<<2) |(pDM_FatTable->antsel_rx_keep_1 <<1) |pDM_FatTable->antsel_rx_keep_0;\r
@@ -2536,8 +3649,17 @@ pFAT_T                   pDM_FatTable = &pDM_Odm->DM_FatTable;
        {\r
                if(  ( pDM_Odm->SupportICType & ODM_ANTDIV_SUPPORT ) &&  (pPktinfo->bPacketToSelf || pPktinfo->bPacketMatchBSSID)  )\r
                {\r
        {\r
                if(  ( pDM_Odm->SupportICType & ODM_ANTDIV_SUPPORT ) &&  (pPktinfo->bPacketToSelf || pPktinfo->bPacketMatchBSSID)  )\r
                {\r
-                        if(pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8192E)\r
-                               odm_AntselStatistics(pDM_Odm, pDM_FatTable->antsel_rx_keep_0, pPktinfo->StationID,RxPower_Ant0);\r
+                       if(pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8192E)\r
+                       {\r
+                               odm_AntselStatistics(pDM_Odm, pDM_FatTable->antsel_rx_keep_0, pPktinfo->StationID,RxPower_Ant0,RSSI_METHOD);\r
+\r
+                               #ifdef ODM_EVM_ENHANCE_ANTDIV\r
+                               if(!isCCKrate)\r
+                               {\r
+                                       odm_AntselStatistics(pDM_Odm, pDM_FatTable->antsel_rx_keep_0, pPktinfo->StationID,RxEVM_Ant0,EVM_METHOD);\r
+                               }\r
+                               #endif\r
+                       }\r
                        else// SupportICType == ODM_RTL8821 and ODM_RTL8723B and ODM_RTL8812)\r
                        {\r
                                if(isCCKrate && (pDM_Odm->AntDivType == S0S1_SW_ANTDIV))\r
                        else// SupportICType == ODM_RTL8821 and ODM_RTL8723B and ODM_RTL8812)\r
                        {\r
                                if(isCCKrate && (pDM_Odm->AntDivType == S0S1_SW_ANTDIV))\r
@@ -2545,12 +3667,12 @@ pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;
                                        pDM_FatTable->antsel_rx_keep_0 = (pDM_FatTable->RxIdleAnt == MAIN_ANT) ? ANT1_2G : ANT2_2G;\r
 \r
 \r
                                        pDM_FatTable->antsel_rx_keep_0 = (pDM_FatTable->RxIdleAnt == MAIN_ANT) ? ANT1_2G : ANT2_2G;\r
 \r
 \r
-                                               if(pDM_FatTable->antsel_rx_keep_0==ANT1_2G)\r
-                                                       pDM_FatTable->CCK_counter_main++;\r
-                                               else// if(pDM_FatTable->antsel_rx_keep_0==ANT2_2G)\r
-                                                       pDM_FatTable->CCK_counter_aux++;\r
+                                       if(pDM_FatTable->antsel_rx_keep_0==ANT1_2G)\r
+                                               pDM_FatTable->CCK_counter_main++;\r
+                                       else// if(pDM_FatTable->antsel_rx_keep_0==ANT2_2G)\r
+                                               pDM_FatTable->CCK_counter_aux++;\r
 \r
 \r
-                                       odm_AntselStatistics(pDM_Odm, pDM_FatTable->antsel_rx_keep_0, pPktinfo->StationID, RxPower_Ant0);\r
+                                       odm_AntselStatistics(pDM_Odm, pDM_FatTable->antsel_rx_keep_0, pPktinfo->StationID, RxPower_Ant0,RSSI_METHOD);\r
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
@@ -2558,11 +3680,11 @@ pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;
                                                pDM_FatTable->OFDM_counter_main++;\r
                                        else// if(pDM_FatTable->antsel_rx_keep_0==ANT2_2G)\r
                                                pDM_FatTable->OFDM_counter_aux++;\r
                                                pDM_FatTable->OFDM_counter_main++;\r
                                        else// if(pDM_FatTable->antsel_rx_keep_0==ANT2_2G)\r
                                                pDM_FatTable->OFDM_counter_aux++;\r
-                                       odm_AntselStatistics(pDM_Odm, pDM_FatTable->antsel_rx_keep_0, pPktinfo->StationID, RxPower_Ant0);\r
+                                       odm_AntselStatistics(pDM_Odm, pDM_FatTable->antsel_rx_keep_0, pPktinfo->StationID, RxPower_Ant0,RSSI_METHOD);\r
+                               }\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
-       }\r
        //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("isCCKrate=%d, PWDB_ALL=%d\n",isCCKrate, pPhyInfo->RxPWDBAll));\r
        //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("antsel_tr_mux=3'b%d%d%d\n",pDM_FatTable->antsel_rx_keep_2, pDM_FatTable->antsel_rx_keep_1, pDM_FatTable->antsel_rx_keep_0));\r
 }\r
        //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("isCCKrate=%d, PWDB_ALL=%d\n",isCCKrate, pPhyInfo->RxPWDBAll));\r
        //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("antsel_tr_mux=3'b%d%d%d\n",pDM_FatTable->antsel_rx_keep_2, pDM_FatTable->antsel_rx_keep_1, pDM_FatTable->antsel_rx_keep_0));\r
 }\r
@@ -2570,92 +3692,87 @@ pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
 VOID\r
 ODM_SetTxAntByTxInfo(\r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
 VOID\r
 ODM_SetTxAntByTxInfo(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID                   pDM_VOID,       \r
        IN              pu1Byte                 pDesc,\r
        IN              u1Byte                  macId   \r
        IN              pu1Byte                 pDesc,\r
        IN              u1Byte                  macId   \r
-)\r
+\r
+       )\r
 {\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 \r
        pFAT_T  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 \r
-       if(!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))\r
+       if (!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))\r
                return;\r
 \r
                return;\r
 \r
-       if(pDM_Odm->AntDivType==CGCS_RX_HW_ANTDIV)\r
+       if (pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV)\r
                return;\r
 \r
 \r
                return;\r
 \r
 \r
-       if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {\r
-               #if (RTL8723B_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8723B) {\r
+#if (RTL8723B_SUPPORT == 1)\r
                SET_TX_DESC_ANTSEL_A_8723B(pDesc, pDM_FatTable->antsel_a[macId]);\r
                SET_TX_DESC_ANTSEL_A_8723B(pDesc, pDM_FatTable->antsel_a[macId]);\r
-               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[8723B] SetTxAntByTxInfo_WIN: MacID=%d, antsel_tr_mux=3'b%d%d%d\n", \r
-                       //macId, pDM_FatTable->antsel_c[macId], pDM_FatTable->antsel_b[macId], pDM_FatTable->antsel_a[macId]));\r
-               #endif\r
-       }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               #if (RTL8821A_SUPPORT == 1)\r
+               /*ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[8723B] SetTxAntByTxInfo_WIN: MacID=%d, antsel_tr_mux=3'b%d%d%d\n", \r
+                       macId, pDM_FatTable->antsel_c[macId], pDM_FatTable->antsel_b[macId], pDM_FatTable->antsel_a[macId]));*/\r
+#endif\r
+       } else if (pDM_Odm->SupportICType == ODM_RTL8821) {\r
+#if (RTL8821A_SUPPORT == 1)\r
                SET_TX_DESC_ANTSEL_A_8812(pDesc, pDM_FatTable->antsel_a[macId]);\r
                SET_TX_DESC_ANTSEL_A_8812(pDesc, pDM_FatTable->antsel_a[macId]);\r
-               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[8821A] SetTxAntByTxInfo_WIN: MacID=%d, antsel_tr_mux=3'b%d%d%d\n", \r
-                       //macId, pDM_FatTable->antsel_c[macId], pDM_FatTable->antsel_b[macId], pDM_FatTable->antsel_a[macId]));\r
-               #endif\r
-       }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               #if (RTL8188E_SUPPORT == 1)\r
+               /*ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[8821A] SetTxAntByTxInfo_WIN: MacID=%d, antsel_tr_mux=3'b%d%d%d\n", \r
+                       macId, pDM_FatTable->antsel_c[macId], pDM_FatTable->antsel_b[macId], pDM_FatTable->antsel_a[macId]));*/\r
+#endif\r
+       } else if (pDM_Odm->SupportICType == ODM_RTL8188E) {\r
+#if (RTL8188E_SUPPORT == 1)\r
                SET_TX_DESC_ANTSEL_A_88E(pDesc, pDM_FatTable->antsel_a[macId]);\r
                SET_TX_DESC_ANTSEL_B_88E(pDesc, pDM_FatTable->antsel_b[macId]);\r
                SET_TX_DESC_ANTSEL_C_88E(pDesc, pDM_FatTable->antsel_c[macId]);\r
                SET_TX_DESC_ANTSEL_A_88E(pDesc, pDM_FatTable->antsel_a[macId]);\r
                SET_TX_DESC_ANTSEL_B_88E(pDesc, pDM_FatTable->antsel_b[macId]);\r
                SET_TX_DESC_ANTSEL_C_88E(pDesc, pDM_FatTable->antsel_c[macId]);\r
-               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[8188E] SetTxAntByTxInfo_WIN: MacID=%d, antsel_tr_mux=3'b%d%d%d\n", \r
-                       //macId, pDM_FatTable->antsel_c[macId], pDM_FatTable->antsel_b[macId], pDM_FatTable->antsel_a[macId]));\r
-               #endif\r
-       }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
-\r
-       \r
+               /*ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[8188E] SetTxAntByTxInfo_WIN: MacID=%d, antsel_tr_mux=3'b%d%d%d\n", \r
+                       macId, pDM_FatTable->antsel_c[macId], pDM_FatTable->antsel_b[macId], pDM_FatTable->antsel_a[macId]));*/\r
+#endif\r
        }\r
 }\r
        }\r
 }\r
-#else// (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+#elif(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
 \r
 VOID\r
 ODM_SetTxAntByTxInfo(\r
 \r
 VOID\r
 ODM_SetTxAntByTxInfo(\r
-       //IN            PDM_ODM_T               pDM_Odm,\r
        struct  rtl8192cd_priv          *priv,\r
        struct  rtl8192cd_priv          *priv,\r
-       struct  tx_desc                 *pdesc,\r
-       struct  tx_insn                 *txcfg,\r
+       struct  tx_desc *pdesc,\r
        unsigned short                  aid     \r
 )\r
 {\r
        pFAT_T          pDM_FatTable = &priv->pshare->_dmODM.DM_FatTable;\r
        unsigned short                  aid     \r
 )\r
 {\r
        pFAT_T          pDM_FatTable = &priv->pshare->_dmODM.DM_FatTable;\r
-       u4Byte          SupportICType=priv->pshare->_dmODM.SupportICType;\r
+       u4Byte          SupportICType = priv->pshare->_dmODM.SupportICType;\r
 \r
 \r
-       if(SupportICType == ODM_RTL8881A)\r
-       {\r
-               //panic_printk("[%s] [%d]   ******ODM_SetTxAntByTxInfo_8881E******   \n",__FUNCTION__,__LINE__);        \r
-               pdesc->Dword6 &= set_desc(~ (BIT(18)|BIT(17)|BIT(16))); \r
+       if (SupportICType == ODM_RTL8881A) {\r
+               /*panic_printk("[%s] [%d]   ******ODM_SetTxAntByTxInfo_8881E******\n",__FUNCTION__,__LINE__);   */\r
+               pdesc->Dword6 &= set_desc(~(BIT(18)|BIT(17)|BIT(16)));  \r
                pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_a[aid]<<16);\r
                pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_a[aid]<<16);\r
-       }\r
-       else if(SupportICType == ODM_RTL8192E)\r
-       {\r
-               //panic_printk("[%s] [%d]   ******ODM_SetTxAntByTxInfo_8192E******   \n",__FUNCTION__,__LINE__);        \r
-               pdesc->Dword6 &= set_desc(~ (BIT(18)|BIT(17)|BIT(16))); \r
+       } else if (SupportICType == ODM_RTL8192E) {\r
+               /*panic_printk("[%s] [%d]   ******ODM_SetTxAntByTxInfo_8192E******\n",__FUNCTION__,__LINE__);   */\r
+               pdesc->Dword6 &= set_desc(~(BIT(18)|BIT(17)|BIT(16)));  \r
                pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_a[aid]<<16);\r
                pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_a[aid]<<16);\r
-       }\r
-       else if(SupportICType == ODM_RTL8812)\r
-       {\r
-               //3 [path-A]\r
-               //panic_printk("[%s] [%d]   ******ODM_SetTxAntByTxInfo_8881E******   \n",__FUNCTION__,__LINE__);\r
+       } else if (SupportICType == ODM_RTL8188E) {\r
+               /*panic_printk("[%s] [%d]   ******ODM_SetTxAntByTxInfo_8188E******\n",__FUNCTION__,__LINE__);*/\r
+               pdesc->Dword2 &= set_desc(~BIT(24));\r
+               pdesc->Dword2 &= set_desc(~BIT(25));\r
+               pdesc->Dword7 &= set_desc(~BIT(29));\r
+\r
+               pdesc->Dword2 |= set_desc(pDM_FatTable->antsel_a[aid]<<24);\r
+               pdesc->Dword2 |= set_desc(pDM_FatTable->antsel_b[aid]<<25);\r
+               pdesc->Dword7 |= set_desc(pDM_FatTable->antsel_c[aid]<<29);\r
+                       \r
+               \r
+       } else if (SupportICType == ODM_RTL8812) {\r
+               /*[path-A]*/\r
+               /*panic_printk("[%s] [%d]   ******ODM_SetTxAntByTxInfo_8881E******\n",__FUNCTION__,__LINE__);*/\r
+                       \r
+               pdesc->Dword6 &= set_desc(~BIT(16));\r
+               pdesc->Dword6 &= set_desc(~BIT(17));\r
+               pdesc->Dword6 &= set_desc(~BIT(18));\r
+\r
+               pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_a[aid]<<16);\r
+               pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_b[aid]<<17);\r
+               pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_c[aid]<<18);\r
                        \r
                        \r
-               pdesc->Dword6 &= set_desc(~ BIT(16));\r
-               pdesc->Dword6 &= set_desc(~ BIT(17));\r
-               pdesc->Dword6 &= set_desc(~ BIT(18));\r
-               if(txcfg->pstat)\r
-               {\r
-                       pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_a[aid]<<16);\r
-                       pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_b[aid]<<17);\r
-                       pdesc->Dword6 |= set_desc(pDM_FatTable->antsel_c[aid]<<18);\r
-               }\r
        }\r
 }\r
 #endif\r
        }\r
 }\r
 #endif\r
@@ -2663,9 +3780,10 @@ ODM_SetTxAntByTxInfo(
 \r
 VOID\r
 ODM_AntDiv_Config(\r
 \r
 VOID\r
 ODM_AntDiv_Config(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
        )\r
 {\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("WIN Config Antenna Diversity\n"));\r
        pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;\r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("WIN Config Antenna Diversity\n"));\r
@@ -2677,15 +3795,15 @@ ODM_AntDiv_Config(
 #elif (DM_ODM_SUPPORT_TYPE & (ODM_CE))\r
 \r
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("CE Config Antenna Diversity\n"));\r
 #elif (DM_ODM_SUPPORT_TYPE & (ODM_CE))\r
 \r
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("CE Config Antenna Diversity\n"));\r
-               //if(pDM_Odm->SupportICType & ODM_ANTDIV_SUPPORT)\r
-               //{\r
-                       //pDM_Odm->SupportAbility |= ODM_BB_ANT_DIV;\r
-               //}\r
+               if(pDM_Odm->SupportICType & ODM_ANTDIV_SUPPORT)\r
+               {\r
+                       pDM_Odm->SupportAbility |= ODM_BB_ANT_DIV;      \r
+               }\r
                \r
                if(pDM_Odm->SupportICType==ODM_RTL8723B)\r
                {\r
                        pDM_Odm->AntDivType = S0S1_SW_ANTDIV;\r
                \r
                if(pDM_Odm->SupportICType==ODM_RTL8723B)\r
                {\r
                        pDM_Odm->AntDivType = S0S1_SW_ANTDIV;\r
-               }       \r
+               }                               \r
 \r
 #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
 \r
 \r
 #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
 \r
@@ -2709,7 +3827,7 @@ ODM_AntDiv_Config(
                                        pDM_Odm->AntDivType = CGCS_RX_HW_ANTDIV; \r
                                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 5G] : AntDiv Type = CGCS_RX_HW_ANTDIV\n"));\r
                                        panic_printk("[ 5G] : AntDiv Type = CGCS_RX_HW_ANTDIV\n");\r
                                        pDM_Odm->AntDivType = CGCS_RX_HW_ANTDIV; \r
                                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 5G] : AntDiv Type = CGCS_RX_HW_ANTDIV\n"));\r
                                        panic_printk("[ 5G] : AntDiv Type = CGCS_RX_HW_ANTDIV\n");\r
-                               #elif( defined(CONFIG_5G_CG_TRX_DIVERSITY) )\r
+                               #elif( defined(CONFIG_5G_CG_TRX_DIVERSITY)||defined(CONFIG_2G5G_CG_TRX_DIVERSITY_8881A))\r
                                        pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;\r
                                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 5G] : AntDiv Type = CG_TRX_HW_ANTDIV\n"));                             \r
                                        panic_printk("[ 5G] : AntDiv Type = CG_TRX_HW_ANTDIV\n");\r
                                        pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;\r
                                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 5G] : AntDiv Type = CG_TRX_HW_ANTDIV\n"));                             \r
                                        panic_printk("[ 5G] : AntDiv Type = CG_TRX_HW_ANTDIV\n");\r
@@ -2726,7 +3844,7 @@ ODM_AntDiv_Config(
                                #if ( defined(CONFIG_2G_CGCS_RX_DIVERSITY) )\r
                                                pDM_Odm->AntDivType = CGCS_RX_HW_ANTDIV;\r
                                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 2.4G] : AntDiv Type = CGCS_RX_HW_ANTDIV\n"));          \r
                                #if ( defined(CONFIG_2G_CGCS_RX_DIVERSITY) )\r
                                                pDM_Odm->AntDivType = CGCS_RX_HW_ANTDIV;\r
                                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 2.4G] : AntDiv Type = CGCS_RX_HW_ANTDIV\n"));          \r
-                               #elif( defined(CONFIG_2G_CG_TRX_DIVERSITY) )\r
+                               #elif( defined(CONFIG_2G_CG_TRX_DIVERSITY) || defined(CONFIG_2G5G_CG_TRX_DIVERSITY_8881A))\r
                                                pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;\r
                                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 2.4G] : AntDiv Type = CG_TRX_HW_ANTDIV\n"));\r
                                #elif( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
                                                pDM_Odm->AntDivType = CG_TRX_HW_ANTDIV;\r
                                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ 2.4G] : AntDiv Type = CG_TRX_HW_ANTDIV\n"));\r
                                #elif( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
@@ -2796,8 +3914,8 @@ ODM_AntDiv_Config(
                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Not Support 5G AntDivType\n"));\r
                                pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);\r
                }\r
                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Not Support 5G AntDivType\n"));\r
                                pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);\r
                }\r
-       #endif          \r
-#endif\r
+       #endif  \r
+#endif \r
 \r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SupportAbility = (( %x ))\n", pDM_Odm->SupportAbility ));\r
 \r
 \r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("SupportAbility = (( %x ))\n", pDM_Odm->SupportAbility ));\r
 \r
@@ -2806,40 +3924,48 @@ ODM_AntDiv_Config(
 \r
 VOID\r
 ODM_AntDivTimers(\r
 \r
 VOID\r
 ODM_AntDivTimers(\r
-       IN PDM_ODM_T    pDM_Odm,\r
-       IN u1Byte                       state\r
+       IN              PVOID           pDM_VOID,       \r
+       IN              u1Byte          state\r
        )\r
 {\r
        )\r
 {\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        if(state==INIT_ANTDIV_TIMMER)\r
        {\r
                #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
                        ODM_InitializeTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer_8723B,\r
                        (RT_TIMER_CALL_BACK)ODM_SW_AntDiv_Callback, NULL, "SwAntennaSwitchTimer_8723B");\r
        if(state==INIT_ANTDIV_TIMMER)\r
        {\r
                #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
                        ODM_InitializeTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer_8723B,\r
                        (RT_TIMER_CALL_BACK)ODM_SW_AntDiv_Callback, NULL, "SwAntennaSwitchTimer_8723B");\r
-               #elif (RTL8188E_SUPPORT == 1)\r
-                       #if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+               #elif ( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
                        ODM_InitializeTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer,\r
                        (RT_TIMER_CALL_BACK)odm_FastAntTrainingCallback, NULL, "FastAntTrainingTimer");\r
                        ODM_InitializeTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer,\r
                        (RT_TIMER_CALL_BACK)odm_FastAntTrainingCallback, NULL, "FastAntTrainingTimer");\r
-                       #endif\r
+               #endif\r
+\r
+               #ifdef ODM_EVM_ENHANCE_ANTDIV\r
+                       ODM_InitializeTimer(pDM_Odm,&pDM_Odm->EVM_FastAntTrainingTimer,\r
+                       (RT_TIMER_CALL_BACK)odm_EVM_FastAntTrainingCallback, NULL, "EVM_FastAntTrainingTimer");\r
                #endif\r
        }\r
        else if(state==CANCEL_ANTDIV_TIMMER)\r
        {\r
                #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
                        ODM_CancelTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer_8723B);\r
                #endif\r
        }\r
        else if(state==CANCEL_ANTDIV_TIMMER)\r
        {\r
                #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
                        ODM_CancelTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer_8723B);\r
-               #elif (RTL8188E_SUPPORT == 1)\r
-                       #if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+               #elif ( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
                        ODM_CancelTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer);\r
                        ODM_CancelTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer);\r
-                       #endif\r
+               #endif\r
+\r
+               #ifdef ODM_EVM_ENHANCE_ANTDIV\r
+                       ODM_CancelTimer(pDM_Odm,&pDM_Odm->EVM_FastAntTrainingTimer);\r
                #endif\r
        }\r
        else if(state==RELEASE_ANTDIV_TIMMER)\r
        {\r
                #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
                        ODM_ReleaseTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer_8723B);\r
                #endif\r
        }\r
        else if(state==RELEASE_ANTDIV_TIMMER)\r
        {\r
                #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
                        ODM_ReleaseTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer_8723B);\r
-               #elif (RTL8188E_SUPPORT == 1)\r
-                       #if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+               #elif ( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
                        ODM_ReleaseTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer);\r
                        ODM_ReleaseTimer(pDM_Odm,&pDM_Odm->FastAntTrainingTimer);\r
-                       #endif\r
+               #endif\r
+\r
+               #ifdef ODM_EVM_ENHANCE_ANTDIV\r
+                       ODM_ReleaseTimer(pDM_Odm,&pDM_Odm->EVM_FastAntTrainingTimer);\r
                #endif\r
        }\r
 \r
                #endif\r
        }\r
 \r
@@ -2847,4 +3973,72 @@ ODM_AntDivTimers(
 \r
 #endif //#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
 \r
 \r
 #endif //#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
 \r
+VOID\r
+ODM_AntDivReset(\r
+       IN              PVOID           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       //2 [--8723B---]\r
+#if (RTL8723B_SUPPORT == 1)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
+       {\r
+               #if(defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
+               odm_S0S1_SWAntDiv_Reset_8723B(pDM_Odm);\r
+               #endif\r
+       }\r
+#endif\r
+}\r
+\r
+VOID\r
+odm_AntennaDiversityInit(\r
+       IN              PVOID           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       if(pDM_Odm->mp_mode == TRUE)\r
+               return;\r
+       \r
+       if(pDM_Odm->SupportICType & (ODM_OLD_IC_ANTDIV_SUPPORT))\r
+       {\r
+               #if (RTL8192C_SUPPORT==1) \r
+               #if (!(DM_ODM_SUPPORT_TYPE & (ODM_AP)))\r
+               ODM_OldIC_AntDiv_Init(pDM_Odm);\r
+               #endif\r
+               #endif\r
+       }\r
+       else\r
+       {\r
+               #if(defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
+               ODM_AntDiv_Config(pDM_Odm);\r
+               ODM_AntDivInit(pDM_Odm);\r
+               #endif\r
+       }\r
+}\r
+\r
+VOID\r
+odm_AntennaDiversity(\r
+       IN              PVOID           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       if(pDM_Odm->mp_mode == TRUE)\r
+               return;\r
+\r
+       if(pDM_Odm->SupportICType & (ODM_OLD_IC_ANTDIV_SUPPORT))\r
+       {\r
+               #if (RTL8192C_SUPPORT==1)\r
+               #if (!(DM_ODM_SUPPORT_TYPE & (ODM_AP)))\r
+               ODM_OldIC_AntDiv(pDM_Odm);\r
+               #endif\r
+               #endif\r
+       }\r
+       else\r
+       {\r
+               #if(defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
+               ODM_AntDiv(pDM_Odm);\r
+               #endif\r
+       }\r
+}\r
+\r
 \r
 \r
index 1e88e11fef8ee99b7796f2bc503b6f59444eaddb..21f75c8f48886a21d42b879aadbf3717aae9a3eb 100755 (executable)
  *\r
  *\r
  ******************************************************************************/\r
  *\r
  *\r
  ******************************************************************************/\r
\r
+\r
 #ifndef        __PHYDMANTDIV_H__\r
 #define    __PHYDMANTDIV_H__\r
 \r
 #ifndef        __PHYDMANTDIV_H__\r
 #define    __PHYDMANTDIV_H__\r
 \r
-#define ANTDIV_VERSION "1.0"\r
+/*#define ANTDIV_VERSION       "2.0"  //2014.11.04*/\r
+/*#define ANTDIV_VERSION       "2.1"  //2015.01.13  Dino*/\r
+#define ANTDIV_VERSION "2.2"  /*2015.01.16  Dino*/\r
+\r
+//1 ============================================================\r
+//1  Definition \r
+//1 ============================================================\r
+\r
+#define        ANTDIV_INIT             0xff\r
+#define        MAIN_ANT        1               //Ant A or Ant Main\r
+#define        AUX_ANT         2               //AntB or Ant Aux\r
+#define        MAX_ANT         3               // 3 for AP using\r
 \r
 #define ANT1_2G 0 // = ANT2_5G\r
 #define ANT2_2G 1 // = ANT1_5G\r
 \r
 #define ANT1_2G 0 // = ANT2_5G\r
 #define ANT2_2G 1 // = ANT1_5G\r
 #define        ODM_FIX_MAIN_ANT        1\r
 #define        ODM_FIX_AUX_ANT 2\r
 \r
 #define        ODM_FIX_MAIN_ANT        1\r
 #define        ODM_FIX_AUX_ANT 2\r
 \r
-#define        TX_BY_REG       0\r
-\r
-#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
-#define ODM_RTL8881A 0   //Just for windows driver to jointly use ODM-driver\r
-#endif\r
-\r
 #define ODM_ANTDIV_SUPPORT             (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
 #define ODM_N_ANTDIV_SUPPORT           (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B)\r
 #define ODM_AC_ANTDIV_SUPPORT          (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
 #define ODM_ANTDIV_SUPPORT             (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
 #define ODM_N_ANTDIV_SUPPORT           (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B)\r
 #define ODM_AC_ANTDIV_SUPPORT          (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
 \r
 #define ODM_ANTDIV_2G_SUPPORT_IC                       (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8881A)\r
 #define ODM_ANTDIV_5G_SUPPORT_IC                       (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
 \r
 #define ODM_ANTDIV_2G_SUPPORT_IC                       (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8881A)\r
 #define ODM_ANTDIV_5G_SUPPORT_IC                       (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
+\r
+#define ODM_EVM_ENHANCE_ANTDIV_SUPPORT_IC      (ODM_RTL8192E)\r
+\r
 #define ODM_ANTDIV_2G  BIT0\r
 #define ODM_ANTDIV_5G  BIT1\r
 \r
 #define ANTDIV_ON 1\r
 #define ANTDIV_OFF 0\r
 \r
 #define ODM_ANTDIV_2G  BIT0\r
 #define ODM_ANTDIV_5G  BIT1\r
 \r
 #define ANTDIV_ON 1\r
 #define ANTDIV_OFF 0\r
 \r
+#define FAT_ON 1\r
+#define FAT_OFF 0\r
+\r
+#define TX_BY_DESC 1\r
+#define REG 0\r
+\r
+#define RSSI_METHOD 0\r
+#define EVM_METHOD 1\r
+#define CRC32_METHOD 2\r
+\r
 #define INIT_ANTDIV_TIMMER 0\r
 #define CANCEL_ANTDIV_TIMMER 1\r
 #define RELEASE_ANTDIV_TIMMER 2\r
 \r
 #define INIT_ANTDIV_TIMMER 0\r
 #define CANCEL_ANTDIV_TIMMER 1\r
 #define RELEASE_ANTDIV_TIMMER 2\r
 \r
+#define CRC32_FAIL 1\r
+#define CRC32_OK 0\r
+\r
+#define Evm_RSSI_TH_High 25\r
+#define Evm_RSSI_TH_Low 20\r
+\r
+#define NORMAL_STATE_MIAN 1\r
+#define NORMAL_STATE_AUX 2\r
+#define TRAINING_STATE 3\r
+\r
+#define FORCE_RSSI_DIFF 10\r
+\r
+#define CSI_ON 1\r
+#define CSI_OFF 0\r
+\r
+#define DIVON_CSIOFF 1\r
+#define DIVOFF_CSION 2\r
+\r
+#define BDC_DIV_TRAIN_STATE 0\r
+#define BDC_BFer_TRAIN_STATE 1\r
+#define BDC_DECISION_STATE 2\r
+#define BDC_BF_HOLD_STATE 3\r
+#define BDC_DIV_HOLD_STATE 4\r
+\r
+#define BDC_MODE_1 1\r
+#define BDC_MODE_2 2\r
+#define BDC_MODE_3 3\r
+#define BDC_MODE_4 4\r
+#define BDC_MODE_NULL 0xff\r
+\r
+#define SWAW_STEP_PEAK         0\r
+#define SWAW_STEP_DETERMINE    1\r
+\r
+//1 ============================================================\r
+//1  structure\r
+//1 ============================================================\r
+\r
+\r
+typedef struct _SW_Antenna_Switch_\r
+{\r
+       u1Byte          Double_chk_flag;\r
+       u1Byte          try_flag;\r
+       s4Byte          PreRSSI;\r
+       u1Byte          CurAntenna;\r
+       u1Byte          PreAntenna;\r
+       u1Byte          RSSI_Trying;\r
+       u1Byte          TestMode;\r
+       u1Byte          bTriggerAntennaSwitch;\r
+       u1Byte          SelectAntennaMap;\r
+       u1Byte          RSSI_target;    \r
+       u1Byte          reset_idx;\r
+       u2Byte          Single_Ant_Counter;\r
+       u2Byte          Dual_Ant_Counter;\r
+       u2Byte          Aux_FailDetec_Counter;\r
+       u2Byte          Retry_Counter;\r
+\r
+       // Before link Antenna Switch check\r
+       u1Byte          SWAS_NoLink_State;\r
+       u4Byte          SWAS_NoLink_BK_Reg860;\r
+       u4Byte          SWAS_NoLink_BK_Reg92c;\r
+       u4Byte          SWAS_NoLink_BK_Reg948;\r
+       BOOLEAN         ANTA_ON;        //To indicate Ant A is or not\r
+       BOOLEAN         ANTB_ON;        //To indicate Ant B is on or not\r
+       BOOLEAN         Pre_Aux_FailDetec;\r
+       BOOLEAN         RSSI_AntDect_bResult;   \r
+       u1Byte          Ant5G;\r
+       u1Byte          Ant2G;\r
+\r
+       s4Byte          RSSI_sum_A;\r
+       s4Byte          RSSI_sum_B;\r
+       s4Byte          RSSI_cnt_A;\r
+       s4Byte          RSSI_cnt_B;\r
+\r
+       u8Byte          lastTxOkCnt;\r
+       u8Byte          lastRxOkCnt;\r
+       u8Byte          TXByteCnt_A;\r
+       u8Byte          TXByteCnt_B;\r
+       u8Byte          RXByteCnt_A;\r
+       u8Byte          RXByteCnt_B;\r
+       u1Byte          TrafficLoad;\r
+       u1Byte          Train_time;\r
+       u1Byte          Train_time_flag;\r
+       RT_TIMER        SwAntennaSwitchTimer;\r
+#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)   \r
+       RT_TIMER        SwAntennaSwitchTimer_8723B;\r
+       u4Byte          PktCnt_SWAntDivByCtrlFrame;\r
+       BOOLEAN         bSWAntDivByCtrlFrame;\r
+#endif\r
+       \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)   \r
+       #if USE_WORKITEM\r
+       RT_WORK_ITEM                    SwAntennaSwitchWorkitem;\r
+#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)   \r
+       RT_WORK_ITEM                    SwAntennaSwitchWorkitem_8723B;  \r
+       #endif\r
+#endif\r
+#endif\r
+/* CE Platform use\r
+#ifdef CONFIG_SW_ANTENNA_DIVERSITY\r
+       _timer SwAntennaSwitchTimer; \r
+       u8Byte lastTxOkCnt;\r
+       u8Byte lastRxOkCnt;\r
+       u8Byte TXByteCnt_A;\r
+       u8Byte TXByteCnt_B;\r
+       u8Byte RXByteCnt_A;\r
+       u8Byte RXByteCnt_B;\r
+       u1Byte DoubleComfirm;\r
+       u1Byte TrafficLoad;\r
+       //SW Antenna Switch\r
+\r
+\r
+#endif\r
+*/\r
+#ifdef CONFIG_HW_ANTENNA_DIVERSITY\r
+       //Hybrid Antenna Diversity\r
+       u4Byte          CCK_Ant1_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte          CCK_Ant2_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte          OFDM_Ant1_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte          OFDM_Ant2_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte          RSSI_Ant1_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte          RSSI_Ant2_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u1Byte          TxAnt[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u1Byte          TargetSTA;\r
+       u1Byte          antsel;\r
+       u1Byte          RxIdleAnt;\r
+\r
+#endif\r
+       \r
+}SWAT_T, *pSWAT_T;\r
+\r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
+#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
+typedef struct _BF_DIV_COEX_\r
+{\r
+       BOOLEAN w_BFer_Client[ODM_ASSOCIATE_ENTRY_NUM];\r
+       BOOLEAN w_BFee_Client[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte  MA_rx_TP[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte  MA_rx_TP_DIV[ODM_ASSOCIATE_ENTRY_NUM];\r
+\r
+       u1Byte  BDCcoexType_wBfer;\r
+       u1Byte num_Txbfee_Client;\r
+       u1Byte num_Txbfer_Client;\r
+       u1Byte BDC_Try_counter;\r
+       u1Byte BDC_Hold_counter;\r
+       u1Byte BDC_Mode;\r
+       u1Byte BDC_active_Mode;\r
+       u1Byte BDC_state;\r
+       u1Byte BDC_RxIdleUpdate_counter;\r
+       u1Byte num_Client;\r
+       u1Byte pre_num_Client;\r
+       u1Byte num_BfTar;\r
+       u1Byte num_DivTar;\r
+       \r
+       BOOLEAN bAll_DivSta_Idle;\r
+       BOOLEAN bAll_BFSta_Idle;\r
+       BOOLEAN BDC_Try_flag;\r
+       BOOLEAN BF_pass;\r
+       BOOLEAN DIV_pass;       \r
+}BDC_T,*pBDC_T;\r
+#endif\r
+#endif\r
+\r
+\r
+typedef struct _FAST_ANTENNA_TRAINNING_\r
+{\r
+       u1Byte  Bssid[6];\r
+       u1Byte  antsel_rx_keep_0;\r
+       u1Byte  antsel_rx_keep_1;\r
+       u1Byte  antsel_rx_keep_2;\r
+       u1Byte  antsel_rx_keep_3;\r
+       u4Byte  antSumRSSI[7];\r
+       u4Byte  antRSSIcnt[7];\r
+       u4Byte  antAveRSSI[7];\r
+       u1Byte  FAT_State;\r
+       u4Byte  TrainIdx;\r
+       u1Byte  antsel_a[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u1Byte  antsel_b[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u1Byte  antsel_c[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte  MainAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte  AuxAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte  MainAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte  AuxAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u1Byte  RxIdleAnt;\r
+       u1Byte  AntDiv_OnOff;\r
+       BOOLEAN bBecomeLinked;\r
+       u4Byte  MinMaxRSSI;\r
+       u1Byte  idx_AntDiv_counter_2G;\r
+       u1Byte  idx_AntDiv_counter_5G;\r
+       u1Byte  AntDiv_2G_5G;\r
+       u4Byte    CCK_counter_main;\r
+       u4Byte    CCK_counter_aux;      \r
+       u4Byte    OFDM_counter_main;\r
+       u4Byte    OFDM_counter_aux;\r
+\r
+       #ifdef ODM_EVM_ENHANCE_ANTDIV\r
+       u4Byte  MainAntEVM_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte  AuxAntEVM_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte  MainAntEVM_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte  AuxAntEVM_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
+       BOOLEAN EVM_method_enable;\r
+       u1Byte  TargetAnt_EVM;\r
+       u1Byte  TargetAnt_CRC32;\r
+       u1Byte  TargetAnt_enhance;\r
+       u1Byte  pre_TargetAnt_enhance;\r
+       u2Byte  Main_MPDU_OK_cnt;\r
+       u2Byte  Aux_MPDU_OK_cnt;        \r
+\r
+       u4Byte  CRC32_Ok_Cnt;\r
+       u4Byte  CRC32_Fail_Cnt;\r
+       u4Byte  MainCRC32_Ok_Cnt;\r
+       u4Byte  AuxCRC32_Ok_Cnt;\r
+       u4Byte  MainCRC32_Fail_Cnt;\r
+       u4Byte  AuxCRC32_Fail_Cnt;\r
+       #endif  \r
+       #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+       u4Byte    CCK_CtrlFrame_Cnt_main;\r
+       u4Byte    CCK_CtrlFrame_Cnt_aux;\r
+       u4Byte    OFDM_CtrlFrame_Cnt_main;\r
+       u4Byte    OFDM_CtrlFrame_Cnt_aux;\r
+       u4Byte  MainAnt_CtrlFrame_Sum;\r
+       u4Byte  AuxAnt_CtrlFrame_Sum;\r
+       u4Byte  MainAnt_CtrlFrame_Cnt;\r
+       u4Byte  AuxAnt_CtrlFrame_Cnt;\r
+       #endif\r
+       BOOLEAN fix_ant_bfee;\r
+}FAT_T,*pFAT_T;\r
+\r
+\r
+//1 ============================================================\r
+//1  enumeration\r
+//1 ============================================================\r
+\r
+\r
+\r
+typedef enum _FAT_STATE\r
+{\r
+       FAT_NORMAL_STATE                        = 0,\r
+       FAT_TRAINING_STATE              = 1,\r
+}FAT_STATE_E, *PFAT_STATE_E;\r
+\r
+\r
+typedef enum _ANT_DIV_TYPE\r
+{\r
+       NO_ANTDIV                       = 0xFF, \r
+       CG_TRX_HW_ANTDIV                = 0x01,\r
+       CGCS_RX_HW_ANTDIV       = 0x02,\r
+       FIXED_HW_ANTDIV         = 0x03,\r
+       CG_TRX_SMART_ANTDIV     = 0x04,\r
+       CGCS_RX_SW_ANTDIV       = 0x05,\r
+       S0S1_SW_ANTDIV          = 0x06 //8723B intrnal switch S0 S1\r
+}ANT_DIV_TYPE_E, *PANT_DIV_TYPE_E;\r
+\r
+\r
+//1 ============================================================\r
+//1  function prototype\r
+//1 ============================================================\r
+\r
+\r
 VOID\r
 ODM_StopAntennaSwitchDm(\r
 VOID\r
 ODM_StopAntennaSwitchDm(\r
-       IN      PDM_ODM_T       pDM_Odm\r
+       IN      PVOID   pDM_VOID\r
        );\r
 VOID\r
 ODM_SetAntConfig(\r
        );\r
 VOID\r
 ODM_SetAntConfig(\r
-       IN      PDM_ODM_T       pDM_Odm,\r
+       IN      PVOID   pDM_VOID,\r
        IN      u1Byte          antSetting      // 0=A, 1=B, 2=C, ....\r
        );\r
 \r
 \r
        IN      u1Byte          antSetting      // 0=A, 1=B, 2=C, ....\r
        );\r
 \r
 \r
-\r
 #define SwAntDivRestAfterLink  ODM_SwAntDivRestAfterLink\r
 #define SwAntDivRestAfterLink  ODM_SwAntDivRestAfterLink\r
-VOID ODM_SwAntDivRestAfterLink(        IN      PDM_ODM_T       pDM_Odm);\r
+VOID ODM_SwAntDivRestAfterLink(        \r
+       IN      PVOID   pDM_VOID\r
+       );\r
 \r
 #if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
 \r
 VOID\r
 ODM_UpdateRxIdleAnt(\r
 \r
 #if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
 \r
 VOID\r
 ODM_UpdateRxIdleAnt(\r
-       IN              PDM_ODM_T               pDM_Odm, \r
-       IN               u1Byte                 Ant\r
-);\r
-\r
-VOID\r
-odm_AntselStatistics(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
-       IN              u1Byte                  antsel_tr_mux,\r
-       IN              u4Byte                  MacId,\r
-       IN              u4Byte                  RxPWDBAll\r
+       IN              PVOID           pDM_VOID, \r
+       IN               u1Byte         Ant\r
 );\r
 \r
 #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 VOID\r
 ODM_SW_AntDiv_Callback(\r
 );\r
 \r
 #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 VOID\r
 ODM_SW_AntDiv_Callback(\r
-       IN      PRT_TIMER                       pTimer\r
-);\r
+       IN      PRT_TIMER               pTimer\r
+       );\r
 \r
 VOID\r
 ODM_SW_AntDiv_WorkitemCallback(\r
 \r
 VOID\r
 ODM_SW_AntDiv_WorkitemCallback(\r
-    IN PVOID            pContext\r
-    );\r
+       IN              PVOID            pContext\r
+       );\r
 \r
 \r
 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
 \r
 VOID\r
 \r
 \r
 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
 \r
 VOID\r
-ODM_SW_AntDiv_Callback(void *FunctionContext);\r
+ODM_SW_AntDiv_Callback(\r
+       void            *FunctionContext\r
+       );\r
 \r
 #endif\r
 \r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
 VOID\r
 odm_S0S1_SwAntDivByCtrlFrame(\r
 \r
 #endif\r
 \r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
 VOID\r
 odm_S0S1_SwAntDivByCtrlFrame(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID                   pDM_VOID,\r
        IN              u1Byte                  Step\r
        IN              u1Byte                  Step\r
-       );\r
+);\r
 \r
 VOID\r
 odm_AntselStatisticsOfCtrlFrame(\r
 \r
 VOID\r
 odm_AntselStatisticsOfCtrlFrame(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID                   pDM_VOID,\r
        IN              u1Byte                  antsel_tr_mux,\r
        IN              u4Byte                  RxPWDBAll\r
 );\r
 \r
 VOID\r
 odm_S0S1_SwAntDivByCtrlFrame_ProcessRSSI(\r
        IN              u1Byte                  antsel_tr_mux,\r
        IN              u4Byte                  RxPWDBAll\r
 );\r
 \r
 VOID\r
 odm_S0S1_SwAntDivByCtrlFrame_ProcessRSSI(\r
-       IN              PDM_ODM_T                               pDM_Odm,\r
-       IN              PODM_PHY_INFO_T         pPhyInfo,\r
-       IN              PODM_PACKET_INFO_T              pPktinfo\r
-       );\r
+       IN              PVOID                           pDM_VOID,\r
+       IN              PVOID           p_phy_info_void,\r
+       IN              PVOID           p_pkt_info_void\r
+);\r
 \r
 \r
-#endif  //#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+/*\r
+VOID\r
+odm_S0S1_SwAntDivByCtrlFrame_ProcessRSSI(\r
+       IN              PVOID                           pDM_VOID,\r
+       IN              PVOID           p_phy_info_void,\r
+       IN              PVOID           p_pkt_info_void\r
+);\r
+*/\r
+\r
+#endif \r
 #endif\r
 \r
 #endif\r
 \r
-#if(RTL8188E_SUPPORT == 1  || RTL8192E_SUPPORT == 1)\r
-#if ( !(DM_ODM_SUPPORT_TYPE == ODM_CE))\r
+#ifdef ODM_EVM_ENHANCE_ANTDIV\r
+VOID\r
+odm_EVM_FastAntTrainingCallback(\r
+       IN              PVOID           pDM_VOID\r
+);\r
+#endif\r
+\r
+VOID\r
+odm_HW_AntDiv(\r
+       IN              PVOID           pDM_VOID\r
+);\r
+\r
+#if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
 VOID\r
 odm_FastAntTraining(\r
 VOID\r
 odm_FastAntTraining(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 );\r
 \r
 VOID\r
 odm_FastAntTrainingCallback(\r
 );\r
 \r
 VOID\r
 odm_FastAntTrainingCallback(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 );\r
 \r
 VOID\r
 odm_FastAntTrainingWorkItemCallback(\r
 );\r
 \r
 VOID\r
 odm_FastAntTrainingWorkItemCallback(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 );\r
 #endif\r
 );\r
 #endif\r
-#endif\r
+\r
 \r
 VOID\r
 ODM_AntDivInit(\r
 \r
 VOID\r
 ODM_AntDivInit(\r
-       IN               PDM_ODM_T              pDM_Odm \r
+       IN              PVOID           pDM_VOID\r
 );\r
 \r
 VOID\r
 );\r
 \r
 VOID\r
-ODM_AntDivReset(\r
-       IN              PDM_ODM_T               pDM_Odm \r
+ODM_AntDiv(\r
+       IN              PVOID           pDM_VOID\r
 );\r
 \r
 VOID\r
 );\r
 \r
 VOID\r
-ODM_AntDiv(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+odm_AntselStatistics(\r
+       IN              PVOID                   pDM_VOID,\r
+       IN              u1Byte                  antsel_tr_mux,\r
+       IN              u4Byte                  MacId,\r
+       IN              u4Byte                  utility,\r
+       IN            u1Byte                    method\r
+);\r
+/*\r
+VOID\r
+ODM_Process_RSSIForAntDiv(     \r
+       IN OUT  PVOID           pDM_VOID,\r
+       IN              PVOID           p_phy_info_void,\r
+       IN              PVOID           p_pkt_info_void\r
 );\r
 );\r
+*/\r
+\r
 \r
 VOID\r
 ODM_Process_RSSIForAntDiv(     \r
 \r
 VOID\r
 ODM_Process_RSSIForAntDiv(     \r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       IN              PODM_PHY_INFO_T                         pPhyInfo,\r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
+       IN OUT  PVOID           pDM_VOID,\r
+       IN              PVOID           p_phy_info_void,\r
+       IN              PVOID           p_pkt_info_void\r
 );\r
 \r
 );\r
 \r
+\r
+\r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
 VOID\r
 ODM_SetTxAntByTxInfo(\r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
 VOID\r
 ODM_SetTxAntByTxInfo(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID                   pDM_VOID,\r
        IN              pu1Byte                 pDesc,\r
        IN              u1Byte                  macId   \r
 );\r
 \r
        IN              pu1Byte                 pDesc,\r
        IN              u1Byte                  macId   \r
 );\r
 \r
-#else// (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+#elif(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+\r
 VOID\r
 ODM_SetTxAntByTxInfo(\r
 VOID\r
 ODM_SetTxAntByTxInfo(\r
-       //IN            PDM_ODM_T               pDM_Odm,\r
        struct  rtl8192cd_priv          *priv,\r
        struct  tx_desc                 *pdesc,\r
        struct  rtl8192cd_priv          *priv,\r
        struct  tx_desc                 *pdesc,\r
-       struct  tx_insn                 *txcfg,\r
        unsigned short                  aid     \r
 );\r
 \r
        unsigned short                  aid     \r
 );\r
 \r
@@ -195,13 +501,13 @@ ODM_SetTxAntByTxInfo(
 \r
 VOID\r
 ODM_AntDiv_Config(\r
 \r
 VOID\r
 ODM_AntDiv_Config(\r
-       IN              PDM_ODM_T               pDM_Odm\r
+       IN              PVOID           pDM_VOID\r
 );\r
 \r
 \r
 VOID\r
 ODM_UpdateRxIdleAnt_8723B(\r
 );\r
 \r
 \r
 VOID\r
 ODM_UpdateRxIdleAnt_8723B(\r
-       IN              PDM_ODM_T               pDM_Odm,\r
+       IN              PVOID                   pDM_VOID,\r
        IN              u1Byte                  Ant,\r
        IN              u4Byte                  DefaultAnt, \r
        IN              u4Byte                  OptionalAnt\r
        IN              u1Byte                  Ant,\r
        IN              u4Byte                  DefaultAnt, \r
        IN              u4Byte                  OptionalAnt\r
@@ -209,9 +515,26 @@ ODM_UpdateRxIdleAnt_8723B(
 \r
 VOID\r
 ODM_AntDivTimers(\r
 \r
 VOID\r
 ODM_AntDivTimers(\r
-       IN PDM_ODM_T    pDM_Odm,\r
-       IN u1Byte                       state\r
+       IN              PVOID           pDM_VOID,\r
+       IN              u1Byte          state\r
 );\r
 \r
 #endif //#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
 );\r
 \r
 #endif //#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
+\r
+VOID\r
+ODM_AntDivReset(\r
+       IN              PVOID           pDM_VOID\r
+);\r
+\r
+VOID\r
+odm_AntennaDiversityInit(\r
+       IN              PVOID           pDM_VOID\r
+);\r
+\r
+VOID\r
+odm_AntennaDiversity(\r
+       IN              PVOID           pDM_VOID\r
+);\r
+\r
+\r
 #endif //#ifndef       __ODMANTDIV_H__\r
 #endif //#ifndef       __ODMANTDIV_H__\r
index 489bc49806fe6ef0e33967bfe8aafc049e5c513e..c857727e98deaebed178e0d765ab1fbd0d338ae2 100755 (executable)
@@ -26,6 +26,7 @@ odm_SetCrystalCap(
        IN              u1Byte                                  CrystalCap
 )
 {
        IN              u1Byte                                  CrystalCap
 )
 {
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
        PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
        PCFO_TRACKING                           pCfoTrack = (PCFO_TRACKING)PhyDM_Get_Structure( pDM_Odm, PHYDM_CFOTRACK);
        BOOLEAN                                         bEEPROMCheck;
        PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
        PCFO_TRACKING                           pCfoTrack = (PCFO_TRACKING)PhyDM_Get_Structure( pDM_Odm, PHYDM_CFOTRACK);
        BOOLEAN                                         bEEPROMCheck;
@@ -75,7 +76,7 @@ odm_SetCrystalCap(
                ODM_SetBBReg(pDM_Odm, REG_AFE_XTAL_CTRL, 0x7E000000, CrystalCap);
                ODM_SetBBReg(pDM_Odm, REG_AFE_PLL_CTRL, 0x7E, CrystalCap);      
        }
                ODM_SetBBReg(pDM_Odm, REG_AFE_XTAL_CTRL, 0x7E000000, CrystalCap);
                ODM_SetBBReg(pDM_Odm, REG_AFE_PLL_CTRL, 0x7E, CrystalCap);      
        }
-       else if(pDM_Odm->SupportICType & ODM_RTL8814A)
+       else if(pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_RTL8822B))
        {
                // write 0x2C[26:21] = 0x2C[20:15] = CrystalCap
                CrystalCap = CrystalCap & 0x3F;
        {
                // write 0x2C[26:21] = 0x2C[20:15] = CrystalCap
                CrystalCap = CrystalCap & 0x3F;
@@ -88,6 +89,7 @@ odm_SetCrystalCap(
        }
 
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("odm_SetCrystalCap(): CrystalCap = 0x%x\n", CrystalCap));
        }
 
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("odm_SetCrystalCap(): CrystalCap = 0x%x\n", CrystalCap));
+#endif
 }
 
 u1Byte
 }
 
 u1Byte
@@ -237,6 +239,7 @@ ODM_CfoTracking(
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): CFO_kHz_A = %dkHz, CFO_kHz_B = %dkHz, CFO_ave = %dkHz\n", 
                                                CFO_kHz_A, CFO_kHz_B, CFO_ave));
 
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): CFO_kHz_A = %dkHz, CFO_kHz_B = %dkHz, CFO_ave = %dkHz\n", 
                                                CFO_kHz_A, CFO_kHz_B, CFO_ave));
 
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
                //4 1.3 Avoid abnormal large CFO
                CFO_ave_diff = (pCfoTrack->CFO_ave_pre >= CFO_ave)?(pCfoTrack->CFO_ave_pre - CFO_ave):(CFO_ave - pCfoTrack->CFO_ave_pre);
                if(CFO_ave_diff > 20 && pCfoTrack->largeCFOHit == 0 && !pCfoTrack->bAdjust)
                //4 1.3 Avoid abnormal large CFO
                CFO_ave_diff = (pCfoTrack->CFO_ave_pre >= CFO_ave)?(pCfoTrack->CFO_ave_pre - CFO_ave):(CFO_ave - pCfoTrack->CFO_ave_pre);
                if(CFO_ave_diff > 20 && pCfoTrack->largeCFOHit == 0 && !pCfoTrack->bAdjust)
@@ -281,7 +284,7 @@ ODM_CfoTracking(
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): Crystal cap offset = %d\n", Adjust_Xtal));
                }
 #endif
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): Crystal cap offset = %d\n", Adjust_Xtal));
                }
 #endif
-
+               
                //4 1.7 Adjust Crystal Cap.
                if(pCfoTrack->bAdjust)
                {
                //4 1.7 Adjust Crystal Cap.
                if(pCfoTrack->bAdjust)
                {
@@ -297,6 +300,7 @@ ODM_CfoTracking(
 
                        odm_SetCrystalCap(pDM_Odm, (u1Byte)CrystalCap);
                }
 
                        odm_SetCrystalCap(pDM_Odm, (u1Byte)CrystalCap);
                }
+#endif
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): Crystal cap = 0x%x, Default Crystal cap = 0x%x\n", 
                        pCfoTrack->CrystalCap, pCfoTrack->DefXCap));
 
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_CFO_TRACKING, ODM_DBG_LOUD, ("ODM_CfoTracking(): Crystal cap = 0x%x, Default Crystal cap = 0x%x\n", 
                        pCfoTrack->CrystalCap, pCfoTrack->DefXCap));
 
index 77e0a4baa3f18a1de2090ddd7c31c9b12b55c5cb..92a63750f45afc48c068d03eff250527ba8617fb 100755 (executable)
@@ -65,4 +65,4 @@ ODM_ParsingCFO(
        IN      s1Byte*                                         pcfotail
 );
 
        IN      s1Byte*                                         pcfotail
 );
 
-#endif
\ No newline at end of file
+#endif
index 4e6304fe50e7442f11e42eab432b646a74499859..69653067f28af63afe8d7d2afb92023a5231b268 100755 (executable)
@@ -413,19 +413,25 @@ ODM_Write_DIG(
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_TRACE, ("ODM_REG(IGI_A,pDM_Odm)=0x%x, ODM_BIT(IGI,pDM_Odm)=0x%x \n",
                ODM_REG(IGI_A,pDM_Odm),ODM_BIT(IGI,pDM_Odm)));
 
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_TRACE, ("ODM_REG(IGI_A,pDM_Odm)=0x%x, ODM_BIT(IGI,pDM_Odm)=0x%x \n",
                ODM_REG(IGI_A,pDM_Odm),ODM_BIT(IGI,pDM_Odm)));
 
-       if(pDM_DigTable->CurIGValue != CurrentIGI)
+       //1 Check initial gain by upper bound           
+       if(!pDM_DigTable->bPSDInProgress)
        {
        {
-               //1 Check initial gain by upper bound           
-               if(!pDM_DigTable->bPSDInProgress)
+               if(CurrentIGI > pDM_DigTable->rx_gain_range_max)
                {
                {
-                       if(CurrentIGI > pDM_DigTable->rx_gain_range_max)
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_TRACE, ("CurrentIGI(0x%02x) is larger than upper bound !!\n",CurrentIGI));
-                               CurrentIGI = pDM_DigTable->rx_gain_range_max;
-                       }
-
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_TRACE, ("CurrentIGI(0x%02x) is larger than upper bound !!\n",CurrentIGI));
+                       CurrentIGI = pDM_DigTable->rx_gain_range_max;
                }
                }
+               if(pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY && pDM_Odm->adaptivity_flag == TRUE)
+               {
+                       if(CurrentIGI > pDM_Odm->Adaptivity_IGI_upper)
+                               CurrentIGI = pDM_Odm->Adaptivity_IGI_upper;
+       
+                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_write_DIG(): Adaptivity case: Force upper bound to 0x%x !!!!!!\n", CurrentIGI));
+               }
+       }
 
 
+       if(pDM_DigTable->CurIGValue != CurrentIGI)
+       {
                //1 Set IGI value
                if(pDM_Odm->SupportPlatform & (ODM_WIN|ODM_CE))
                { 
                //1 Set IGI value
                if(pDM_Odm->SupportPlatform & (ODM_WIN|ODM_CE))
                { 
@@ -643,7 +649,7 @@ odm_DIGInit(
 {
        PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
        pDIG_T                                          pDM_DigTable = &pDM_Odm->DM_DigTable;
 {
        PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
        pDIG_T                                          pDM_DigTable = &pDM_Odm->DM_DigTable;
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
        PFALSE_ALARM_STATISTICS         FalseAlmCnt = (PFALSE_ALARM_STATISTICS)PhyDM_Get_Structure( pDM_Odm, PHYDM_FALSEALMCNT);
 #endif
 
        PFALSE_ALARM_STATISTICS         FalseAlmCnt = (PFALSE_ALARM_STATISTICS)PhyDM_Get_Structure( pDM_Odm, PHYDM_FALSEALMCNT);
 #endif
 
@@ -670,7 +676,7 @@ odm_DIGInit(
        //To Initialize pDM_Odm->bDMInitialGainEnable == FALSE to avoid DIG error
        pDM_Odm->bDMInitialGainEnable = TRUE;
 
        //To Initialize pDM_Odm->bDMInitialGainEnable == FALSE to avoid DIG error
        pDM_Odm->bDMInitialGainEnable = TRUE;
 
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
        pDM_DigTable->DIG_Dynamic_MIN_0 = 0x25;
        pDM_DigTable->DIG_Dynamic_MIN_1 = 0x25;
 
        pDM_DigTable->DIG_Dynamic_MIN_0 = 0x25;
        pDM_DigTable->DIG_Dynamic_MIN_1 = 0x25;
 
@@ -738,7 +744,6 @@ odm_DIG(
        u1Byte                                          CurrentIGI = pDM_DigTable->CurIGValue;
        u1Byte                                          offset;
        u4Byte                                          dm_FA_thres[3];
        u1Byte                                          CurrentIGI = pDM_DigTable->CurIGValue;
        u1Byte                                          offset;
        u4Byte                                          dm_FA_thres[3];
-       u1Byte                                          Adap_IGI_Upper = 0;
        u4Byte                                          TxTp = 0, RxTp = 0;
        BOOLEAN                                         bDFSBand = FALSE;
        BOOLEAN                                         bPerformance = TRUE, bFirstTpTarget = FALSE, bFirstCoverage = FALSE;
        u4Byte                                          TxTp = 0, RxTp = 0;
        BOOLEAN                                         bDFSBand = FALSE;
        BOOLEAN                                         bPerformance = TRUE, bFirstTpTarget = FALSE, bFirstCoverage = FALSE;
@@ -752,9 +757,6 @@ odm_DIG(
                return;
 
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG()===========================>\n\n"));
                return;
 
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG()===========================>\n\n"));
-
-       if(pDM_Odm->adaptivity_flag == TRUE)
-               Adap_IGI_Upper = pDM_Odm->Adaptivity_IGI_upper;
        
 
        //1 Update status
        
 
        //1 Update status
@@ -947,7 +949,12 @@ odm_DIG(
                        ((*pDM_Odm->pChannel >= 100) && (*pDM_Odm->pChannel <= 140)))
                {
                        bDFSBand = TRUE;
                        ((*pDM_Odm->pChannel >= 100) && (*pDM_Odm->pChannel <= 140)))
                {
                        bDFSBand = TRUE;
-                       dm_dig_min = DM_DIG_MIN_AP_DFS;
+                       if (*pDM_Odm->pBandWidth == ODM_BW20M){
+                               dm_dig_min = DM_DIG_MIN_AP_DFS+2;
+                       }
+                       else{
+                               dm_dig_min = DM_DIG_MIN_AP_DFS;
+                       }
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): ====== In DFS band ======\n"));
                }
                
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): ====== In DFS band ======\n"));
                }
                
@@ -1100,8 +1107,8 @@ odm_DIG(
                {
                        pDM_DigTable->rx_gain_range_min = DIG_Dynamic_MIN;
 
                {
                        pDM_DigTable->rx_gain_range_min = DIG_Dynamic_MIN;
 
-                       if(FirstDisConnect)
-                       pDM_DigTable->ForbiddenIGI = DIG_Dynamic_MIN;
+                       if (FirstDisConnect)
+                               pDM_DigTable->ForbiddenIGI = DIG_Dynamic_MIN;
                }
                else
                        pDM_DigTable->rx_gain_range_min = odm_ForbiddenIGICheck(pDM_Odm, DIG_Dynamic_MIN, CurrentIGI);
                }
                else
                        pDM_DigTable->rx_gain_range_min = odm_ForbiddenIGICheck(pDM_Odm, DIG_Dynamic_MIN, CurrentIGI);
@@ -1224,23 +1231,7 @@ odm_DIG(
        if(CurrentIGI > pDM_DigTable->rx_gain_range_max)
                CurrentIGI = pDM_DigTable->rx_gain_range_max;
 
        if(CurrentIGI > pDM_DigTable->rx_gain_range_max)
                CurrentIGI = pDM_DigTable->rx_gain_range_max;
 
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): CurIGValue=0x%x, TotalFA = %d\n\n", CurrentIGI, pFalseAlmCnt->Cnt_all));
-
-       //1 Force upper bound and lower bound for adaptivity
-       if(pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY && pDM_Odm->adaptivity_flag == TRUE)
-       {
-               if(CurrentIGI > Adap_IGI_Upper)
-                       CurrentIGI = Adap_IGI_Upper;
-               
-               if(pDM_Odm->IGI_LowerBound != 0)
-               {
-                       if(CurrentIGI < pDM_Odm->IGI_LowerBound)
-                               CurrentIGI = pDM_Odm->IGI_LowerBound;
-               }
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Adaptivity case: Force upper bound to 0x%x !!!!!!\n", Adap_IGI_Upper));
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Adaptivity case: Force lower bound to 0x%x !!!!!!\n\n", pDM_Odm->IGI_LowerBound));
-       }
-       
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): CurIGValue=0x%x, TotalFA = %d\n\n", CurrentIGI, pFalseAlmCnt->Cnt_all)); 
 
        //1 High power RSSI threshold
 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
 
        //1 High power RSSI threshold
 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
@@ -1347,14 +1338,6 @@ odm_DIGbyRSSI_LPS(
        PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
        PFALSE_ALARM_STATISTICS         pFalseAlmCnt = (PFALSE_ALARM_STATISTICS)PhyDM_Get_Structure( pDM_Odm, PHYDM_FALSEALMCNT);
 
        PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
        PFALSE_ALARM_STATISTICS         pFalseAlmCnt = (PFALSE_ALARM_STATISTICS)PhyDM_Get_Structure( pDM_Odm, PHYDM_FALSEALMCNT);
 
-#if (DM_ODM_SUPPORT_TYPE & ODM_CE)
-#if 0          //and 2.3.5 coding rule
-       struct mlme_priv        *pmlmepriv = &(pAdapter->mlmepriv);
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);     
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-#endif
-#endif
-
        u1Byte  RSSI_Lower=DM_DIG_MIN_NIC;   //0x1E or 0x1C
        u1Byte  CurrentIGI=pDM_Odm->RSSI_Min;
 
        u1Byte  RSSI_Lower=DM_DIG_MIN_NIC;   //0x1E or 0x1C
        u1Byte  CurrentIGI=pDM_Odm->RSSI_Min;
 
@@ -1389,7 +1372,6 @@ odm_DIGbyRSSI_LPS(
         else if(CurrentIGI < RSSI_Lower)
                CurrentIGI =RSSI_Lower;
 
         else if(CurrentIGI < RSSI_Lower)
                CurrentIGI =RSSI_Lower;
 
-       
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIGbyRSSI_LPS(): pFalseAlmCnt->Cnt_all = %d\n",pFalseAlmCnt->Cnt_all));
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIGbyRSSI_LPS(): pDM_Odm->RSSI_Min = %d\n",pDM_Odm->RSSI_Min));
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIGbyRSSI_LPS(): CurrentIGI = 0x%x\n",CurrentIGI));
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIGbyRSSI_LPS(): pFalseAlmCnt->Cnt_all = %d\n",pFalseAlmCnt->Cnt_all));
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIGbyRSSI_LPS(): pDM_Odm->RSSI_Min = %d\n",pDM_Odm->RSSI_Min));
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIGbyRSSI_LPS(): CurrentIGI = 0x%x\n",CurrentIGI));
@@ -1420,16 +1402,6 @@ odm_FalseAlarmCounterStatistics(
 #endif
 #endif
 
 #endif
 #endif
 
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       if((pDM_Odm->SupportICType == ODM_RTL8192D) &&
-               (*(pDM_Odm->pMacPhyMode)==ODM_DMSP)&&    ////modify by Guo.Mingzhi 2011-12-29
-               (!(*(pDM_Odm->pbMasterOfDMSP))))
-       {
-               odm_FalseAlarmCounterStatistics_ForSlaveOfDMSP(pDM_Odm);
-               return;
-       }
-#endif         
-
        if(!(pDM_Odm->SupportAbility & ODM_BB_FA_CNT))
                return;
 
        if(!(pDM_Odm->SupportAbility & ODM_BB_FA_CNT))
                return;
 
@@ -1617,7 +1589,7 @@ odm_FalseAlarmCounterStatistics(
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Ofdm_fail=%d\n",      FalseAlmCnt->Cnt_Ofdm_fail));
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Cck_fail=%d\n",       FalseAlmCnt->Cnt_Cck_fail));
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Ofdm_fail=%d\n",      FalseAlmCnt->Cnt_Ofdm_fail));
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Ofdm_fail=%d\n",      FalseAlmCnt->Cnt_Ofdm_fail));
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Cck_fail=%d\n",       FalseAlmCnt->Cnt_Cck_fail));
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Ofdm_fail=%d\n",      FalseAlmCnt->Cnt_Ofdm_fail));
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Total False Alarm=%d\n",  FalseAlmCnt->Cnt_all));
+       ODM_RT_TRACE(pDM_Odm,ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Total False Alarm=%d\n\n",        FalseAlmCnt->Cnt_all));
 }
 
 //3============================================================
 }
 
 //3============================================================
@@ -1932,8 +1904,8 @@ ODM_MPT_DIG(
 
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("===> ODM_MPT_DIG, pBandType = %d\n", *pDM_Odm->pBandType));
        
 
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("===> ODM_MPT_DIG, pBandType = %d\n", *pDM_Odm->pBandType));
        
-#if (ODM_FIX_2G_DIG || (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)))
-       if (*pDM_Odm->pBandType == ODM_BAND_5G || (pDM_Odm->SupportICType & ODM_RTL8814A)) // for 5G or 8814
+#if (ODM_FIX_2G_DIG || (DM_ODM_SUPPORT_TYPE & ODM_AP))
+       if (*pDM_Odm->pBandType == ODM_BAND_5G || (pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_RTL8822B))) // for 5G or 8814
 #else
        if (1) // for both 2G/5G
 #endif
 #else
        if (1) // for both 2G/5G
 #endif
@@ -1992,7 +1964,7 @@ ODM_MPT_DIG(
        {
                if(pDM_Odm->MPDIG_2G == FALSE)
                {
        {
                if(pDM_Odm->MPDIG_2G == FALSE)
                {
-                       if((pDM_Odm->SupportPlatform & ODM_WIN) && !(pDM_Odm->SupportICType & ODM_RTL8814A))
+                       if((pDM_Odm->SupportPlatform & ODM_WIN) && !(pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_RTL8822B)))
                        {
                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("===> Fix IGI\n"));
                                ODM_Write1Byte( pDM_Odm, ODM_REG(IGI_A,pDM_Odm), IGI_A);
                        {
                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("===> Fix IGI\n"));
                                ODM_Write1Byte( pDM_Odm, ODM_REG(IGI_A,pDM_Odm), IGI_A);
index 54e74d781dad092f27ca3b7255250347365e2f24..9c21fc7c8b64cc488a588fb4c37c6e7c72187b5a 100755 (executable)
@@ -21,7 +21,7 @@
 #ifndef        __PHYDMDIG_H__\r
 #define    __PHYDMDIG_H__\r
 \r
 #ifndef        __PHYDMDIG_H__\r
 #define    __PHYDMDIG_H__\r
 \r
-#define DIG_VERSION    "1.1"\r
+#define DIG_VERSION    "1.4"   /*2015.01.13*/\r
 \r
 typedef struct _Dynamic_Initial_Gain_Threshold_\r
 {\r
 \r
 typedef struct _Dynamic_Initial_Gain_Threshold_\r
 {\r
index ef045098afbf58cb6e1854cf660f6a015122395e..724a891625056f5bf700725f57ae3d3ec514c475 100755 (executable)
@@ -42,8 +42,8 @@ typedef struct _Dynamic_Power_Saving_
 \r
 void ODM_RF_Saving(\r
        IN              PVOID                                   pDM_VOID,\r
 \r
 void ODM_RF_Saving(\r
        IN              PVOID                                   pDM_VOID,\r
-       IN      u1Byte          bForceInNormal \r
-       );\r
+       IN      u1Byte          bForceInNormal\r
+);\r
 \r
 VOID 
 odm_DynamicBBPowerSavingInit(
 \r
 VOID 
 odm_DynamicBBPowerSavingInit(
@@ -60,4 +60,4 @@ odm_1R_CCA(
        IN              PVOID                                   pDM_VOID\r
        );\r
 \r
        IN              PVOID                                   pDM_VOID\r
        );\r
 \r
-#endif
\ No newline at end of file
+#endif\r
index 5a6d2a94f8056ba3d64b4255466a74d7a358ec63..a9d70d911b013c44a4730e8ba6be28e3441b1919 100755 (executable)
@@ -53,35 +53,8 @@ odm_DynamicTxPowerInit(
 
        pHalData->LastDTPLvl = TxHighPwrLevel_Normal;
        pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
 
        pHalData->LastDTPLvl = TxHighPwrLevel_Normal;
        pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-       PADAPTER        Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       pdmpriv->bDynamicTxPowerEnable = _FALSE;
-
-       #if (RTL8192C_SUPPORT==1) 
-       #ifdef CONFIG_USB_HCI
-
-       #ifdef CONFIG_INTEL_PROXIM
-       if((pHalData->BoardType == BOARD_USB_High_PA)||(Adapter->proximity.proxim_support==_TRUE))
-       #else
-       if(pHalData->BoardType == BOARD_USB_High_PA)
-       #endif
 
 
-       {
-               //odm_SavePowerIndex(Adapter);
-               odm_DynamicTxPowerSavePowerIndex(pDM_Odm);
-               pdmpriv->bDynamicTxPowerEnable = _TRUE;
-       }               
-       else    
-       #else
-               pdmpriv->bDynamicTxPowerEnable = _FALSE;
-       #endif
-       #endif
-       
-       pdmpriv->LastDTPLvl = TxHighPwrLevel_Normal;
-       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; 
-       
+\r
 #endif
        
 }
 #endif
        
 }
@@ -101,12 +74,8 @@ odm_DynamicTxPowerSavePowerIndex(
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);      
        for(index = 0; index< 6; index++)
                pHalData->PowerIndex_backup[index] = PlatformEFIORead1Byte(Adapter, Power_Index_REG[index]);
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);      
        for(index = 0; index< 6; index++)
                pHalData->PowerIndex_backup[index] = PlatformEFIORead1Byte(Adapter, Power_Index_REG[index]);
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)  
-       PADAPTER        Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       for(index = 0; index< 6; index++)
-               pdmpriv->PowerIndex_backup[index] = rtw_read8(Adapter, Power_Index_REG[index]);
+       
+       \r
 #endif
 #endif
 }
 #endif
 #endif
 }
@@ -125,10 +94,8 @@ odm_DynamicTxPowerRestorePowerIndex(
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
        for(index = 0; index< 6; index++)
                PlatformEFIOWrite1Byte(Adapter, Power_Index_REG[index], pHalData->PowerIndex_backup[index]);
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
        for(index = 0; index< 6; index++)
                PlatformEFIOWrite1Byte(Adapter, Power_Index_REG[index], pHalData->PowerIndex_backup[index]);
-#elif(DM_ODM_SUPPORT_TYPE == ODM_CE)   
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       for(index = 0; index< 6; index++)
-               rtw_write8(Adapter, Power_Index_REG[index], pdmpriv->PowerIndex_backup[index]);
+
+\r
 #endif
 #endif
 }
 #endif
 #endif
 }
@@ -249,8 +216,8 @@ odm_DynamicTxPowerAP(
        if(!priv->pshare->rf_ft_var.tx_pwr_ctrl)
                return;
        
        if(!priv->pshare->rf_ft_var.tx_pwr_ctrl)
                return;
        
-#if ((RTL8812E_SUPPORT==1) || (RTL8881A_SUPPORT==1))
-       if (pDM_Odm->SupportICType & (ODM_RTL8812 | ODM_RTL8881A))
+#if ((RTL8812E_SUPPORT==1) || (RTL8881A_SUPPORT==1) || (RTL8814A_SUPPORT==1))
+       if (pDM_Odm->SupportICType & (ODM_RTL8812 | ODM_RTL8881A | ODM_RTL8814A))
                pwr_thd = TX_POWER_NEAR_FIELD_THRESH_8812;
 #endif
 
                pwr_thd = TX_POWER_NEAR_FIELD_THRESH_8812;
 #endif
 
@@ -294,6 +261,20 @@ odm_DynamicTxPowerAP(
                        }
                }
 #endif                 
                        }
                }
 #endif                 
+
+#ifdef CONFIG_WLAN_HAL_8814AE
+               if (GET_CHIP_VER(priv) == VERSION_8814A) {
+                       if (!disable_pwr_ctrl && (pDM_Odm->RSSI_Min != 0xff)) {\r
+                               if (pDM_Odm->RSSI_Min > pwr_thd)\r
+                                       RRSR_power_control_14(priv,  1);\r
+                               else if (pDM_Odm->RSSI_Min < (pwr_thd-8))\r
+                                       RRSR_power_control_14(priv,  0);\r
+                       } else {
+                                       RRSR_power_control_14(priv,  0);\r
+                       }
+               }
+#endif         
+
        }
 //#endif       
 
        }
 //#endif       
 
@@ -424,129 +405,9 @@ odm_DynamicTxPower_92C(
        pHalData->LastDTPLvl = pHalData->DynamicTxHighPowerLvl;
 
        
        pHalData->LastDTPLvl = pHalData->DynamicTxHighPowerLvl;
 
        
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-
-       #if (RTL8192C_SUPPORT==1) 
-       PADAPTER Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       struct mlme_priv        *pmlmepriv = &(Adapter->mlmepriv);
-       struct mlme_ext_priv    *pmlmeext = &Adapter->mlmeextpriv;
-       int     UndecoratedSmoothedPWDB;
 
 
-       if(!pdmpriv->bDynamicTxPowerEnable)
-               return;
 
 
-#ifdef CONFIG_INTEL_PROXIM
-       if(Adapter->proximity.proxim_on== _TRUE){
-               struct proximity_priv *prox_priv=Adapter->proximity.proximity_priv;
-               // Intel set fixed tx power 
-               printk("\n %s  Adapter->proximity.proxim_on=%d prox_priv->proxim_modeinfo->power_output=%d \n",__FUNCTION__,Adapter->proximity.proxim_on,prox_priv->proxim_modeinfo->power_output);
-               if(prox_priv!=NULL){
-                       if(prox_priv->proxim_modeinfo->power_output> 0) 
-                       {
-                               switch(prox_priv->proxim_modeinfo->power_output)
-                               {
-                                       case 1:
-                                               pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_100;
-                                               printk("TxHighPwrLevel_100\n");
-                                               break;
-                                       case 2:
-                                               pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_70;
-                                               printk("TxHighPwrLevel_70\n");
-                                               break;
-                                       case 3:
-                                               pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_50;
-                                               printk("TxHighPwrLevel_50\n");
-                                               break;
-                                       case 4:
-                                               pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_35;
-                                               printk("TxHighPwrLevel_35\n");
-                                               break;
-                                       case 5:
-                                               pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_15;
-                                               printk("TxHighPwrLevel_15\n");
-                                               break;
-                                       default:
-                                               pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
-                                               printk("TxHighPwrLevel_100\n");
-                                               break;
-                               }               
-                       }
-               }
-       }
-       else
-#endif 
-       {
-               // STA not connected and AP not connected
-               if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE) &&   
-                       (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))
-               {
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("Not connected to any \n"));
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-
-                       //the LastDTPlvl should reset when disconnect, 
-                       //otherwise the tx power level wouldn't change when disconnect and connect again.
-                       // Maddest 20091220.
-                       pdmpriv->LastDTPLvl=TxHighPwrLevel_Normal;
-                       return;
-               }
-               
-               if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)       // Default port
-               {
-               #if 0
-                       //todo: AP Mode
-                       if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
-                              (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE))
-                       {
-                               UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-                               //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-                       }
-                       else
-                       {
-                               UndecoratedSmoothedPWDB = pdmpriv->UndecoratedSmoothedPWDB;
-                               //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-                       }
-               #else
-               UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;     
-               #endif
-               }
-               else // associated entry pwdb
-               {       
-                       UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-               }
-                       
-               if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
-               }
-               else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
-                       (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
-               }
-               else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
-               }
-       }
-       if( (pdmpriv->DynamicTxHighPowerLvl != pdmpriv->LastDTPLvl) )
-       {
-               PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
-               if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Normal) // HP1 -> Normal  or HP2 -> Normal
-                       odm_DynamicTxPowerRestorePowerIndex(pDM_Odm);
-               else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
-                       odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x14);
-               else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
-                       odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x10);
-       }
-       pdmpriv->LastDTPLvl = pdmpriv->DynamicTxHighPowerLvl;
-       #endif
-#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 
 }
 
 
 }
 
@@ -556,6 +417,7 @@ odm_DynamicTxPower_92D(
        IN              PVOID                                   pDM_VOID\r
        )
 {
        IN              PVOID                                   pDM_VOID\r
        )
 {
+#if (RTL8192D_SUPPORT==1)
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        PADAPTER Adapter = pDM_Odm->Adapter;
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        PADAPTER Adapter = pDM_Odm->Adapter;
@@ -716,167 +578,9 @@ odm_DynamicTxPower_92D(
 
                }
        pHalData->LastDTPLvl = pHalData->DynamicTxHighPowerLvl;
 
                }
        pHalData->LastDTPLvl = pHalData->DynamicTxHighPowerLvl;
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-#if (RTL8192D_SUPPORT==1) 
-       PADAPTER Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       struct mlme_priv        *pmlmepriv = &(Adapter->mlmepriv);
-
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       DM_ODM_T                *podmpriv = &pHalData->odmpriv;
-       int     UndecoratedSmoothedPWDB;
-       #if (RTL8192D_EASY_SMART_CONCURRENT == 1)
-       PADAPTER        BuddyAdapter = Adapter->BuddyAdapter;
-       BOOLEAN         bGetValueFromBuddyAdapter = DualMacGetParameterFromBuddyAdapter(Adapter);
-       u8              HighPowerLvlBackForMac0 = TxHighPwrLevel_Level1;
-       #endif
-
-       // If dynamic high power is disabled.
-       if( (pdmpriv->bDynamicTxPowerEnable != _TRUE) ||
-               (!(podmpriv->SupportAbility& ODM_BB_DYNAMIC_TXPWR)) )
-       {
-               pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-               return;
-       }
 
 
-       // STA not connected and AP not connected
-       if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE) &&   
-               (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))
-       {
-               //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("Not connected to any \n"));
-               pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-               //the LastDTPlvl should reset when disconnect, 
-               //otherwise the tx power level wouldn't change when disconnect and connect again.
-               // Maddest 20091220.
-               pdmpriv->LastDTPLvl=TxHighPwrLevel_Normal;
-               return;
-       }
-               
-       if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)       // Default port
-       {
-       #if 0
-               //todo: AP Mode
-               if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
-              (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE))
-               {
-                       UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-               }
-               else
-               {
-                       UndecoratedSmoothedPWDB = pdmpriv->UndecoratedSmoothedPWDB;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-               }
-       #else
-       UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-       #endif
-       }
-       else // associated entry pwdb
-       {       
-               UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-               //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
-       }
-#if TX_POWER_FOR_5G_BAND == 1
-       if(pHalData->CurrentBandType92D == BAND_ON_5G){
-               if(UndecoratedSmoothedPWDB >= 0x33)
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level2 (TxPwr=0x0)\n"));
-               }
-               else if((UndecoratedSmoothedPWDB <0x33) &&
-                       (UndecoratedSmoothedPWDB >= 0x2b) )
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
-               }
-               else if(UndecoratedSmoothedPWDB < 0x2b)
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Normal\n"));
-               }
-       }
-       else
-#endif
-       {
-               if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
-               }
-               else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
-                       (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
-               }
-               else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
-               {
-                       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-                       //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
-               }
-       }
-#if (RTL8192D_EASY_SMART_CONCURRENT == 1)
-       if(bGetValueFromBuddyAdapter)
-       {
-               //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 1 \n"));
-               if(Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP)
-               {
-                       //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() change value \n"));
-                       HighPowerLvlBackForMac0 = pHalData->DynamicTxHighPowerLvl;
-                       pHalData->DynamicTxHighPowerLvl = Adapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP;
-                       PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
-                       pHalData->DynamicTxHighPowerLvl = HighPowerLvlBackForMac0;
-                       Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = _FALSE;
-               }                                               
-       }
-#endif
-
-       if( (pdmpriv->DynamicTxHighPowerLvl != pdmpriv->LastDTPLvl) )
-       {
-               //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("PHY_SetTxPowerLevel8192S() Channel = %d \n" , pHalData->CurrentChannel));
-#if (RTL8192D_EASY_SMART_CONCURRENT == 1)
-               if(BuddyAdapter == NULL)
-               {
-                       //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter == NULL case \n"));
-                       if(!Adapter->bSlaveOfDMSP)
-                       {
-                               PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
-                       }
-               }
-               else
-               {
-                       if(pHalData->MacPhyMode92D == DUALMAC_SINGLEPHY)
-                       {
-                               //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMSP \n"));
-                               if(Adapter->bSlaveOfDMSP)
-                               {
-                                       //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() bslave case  \n"));
-                                       BuddyAdapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = _TRUE;
-                                       BuddyAdapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP = pHalData->DynamicTxHighPowerLvl;
-                               }
-                               else
-                               {
-                                       //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() master case  \n"));                                     
-                                       if(!bGetValueFromBuddyAdapter)
-                                       {
-                                               //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 0 \n"));
-                                               PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMDP\n"));
-                               PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
-                       }
-               }
-#else
-               PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
+\r
+#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 #endif
 #endif
-       }
-       pdmpriv->LastDTPLvl = pdmpriv->DynamicTxHighPowerLvl;
-#endif 
-#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
 }
 \r
 }
 \r
index 508cd31277d30a606de4fb1a46512865130d3827..041372d47903d86b0421c4ec9b1d51ffdfc348b0 100755 (executable)
@@ -21,7 +21,8 @@
 #ifndef        __PHYDMDYNAMICTXPOWER_H__\r
 #define    __PHYDMDYNAMICTXPOWER_H__\r
 \r
 #ifndef        __PHYDMDYNAMICTXPOWER_H__\r
 #define    __PHYDMDYNAMICTXPOWER_H__\r
 \r
-#define DYNAMIC_TXPWR_VERSION  "1.0"\r
+/*#define DYNAMIC_TXPWR_VERSION        "1.0"*/\r
+#define DYNAMIC_TXPWR_VERSION  "1.1" /*2015.01.13*/\r
 \r
 #define                TX_POWER_NEAR_FIELD_THRESH_LVL2 74\r
 #define                TX_POWER_NEAR_FIELD_THRESH_LVL1 67\r
 \r
 #define                TX_POWER_NEAR_FIELD_THRESH_LVL2 74\r
 #define                TX_POWER_NEAR_FIELD_THRESH_LVL1 67\r
index 479300050b4d9954b814baa1c3a379cc7fdd0cb1..ab7fc9f1308c4c66e5b0d54bf0ec85617174cace 100755 (executable)
@@ -29,9 +29,8 @@ ODM_EdcaTurboInit(
        IN      PVOID           pDM_VOID)\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        IN      PVOID           pDM_VOID)\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if ((DM_ODM_SUPPORT_TYPE == ODM_AP)||(DM_ODM_SUPPORT_TYPE==ODM_ADSL))\r
-       odm_EdcaParaInit(pDM_Odm);\r
-#elif (DM_ODM_SUPPORT_TYPE==ODM_WIN)\r
+\r
+#if (DM_ODM_SUPPORT_TYPE==ODM_WIN)\r
        PADAPTER        Adapter = NULL;\r
        HAL_DATA_TYPE   *pHalData = NULL;\r
 \r
        PADAPTER        Adapter = NULL;\r
        HAL_DATA_TYPE   *pHalData = NULL;\r
 \r
@@ -79,7 +78,7 @@ odm_EdcaTurboCheck(
        //\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("odm_EdcaTurboCheck========================>\n"));\r
        //\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("odm_EdcaTurboCheck========================>\n"));\r
-       \r
+\r
        if(!(pDM_Odm->SupportAbility& ODM_MAC_EDCA_TURBO ))\r
                return;\r
 \r
        if(!(pDM_Odm->SupportAbility& ODM_MAC_EDCA_TURBO ))\r
                return;\r
 \r
@@ -97,14 +96,6 @@ odm_EdcaTurboCheck(
                        odm_EdcaTurboCheckCE(pDM_Odm);\r
 #endif\r
                        break;\r
                        odm_EdcaTurboCheckCE(pDM_Odm);\r
 #endif\r
                        break;\r
-\r
-               case    ODM_AP:\r
-               case    ODM_ADSL:\r
-\r
-#if ((DM_ODM_SUPPORT_TYPE == ODM_AP)||(DM_ODM_SUPPORT_TYPE==ODM_ADSL))\r
-               odm_IotEngine(pDM_Odm);\r
-#endif\r
-                       break;  \r
        }\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("<========================odm_EdcaTurboCheck\n"));\r
 \r
        }\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("<========================odm_EdcaTurboCheck\n"));\r
 \r
@@ -202,19 +193,15 @@ odm_EdcaTurboCheckCE(
 \r
                //if ((pDM_Odm->DM_EDCA_Table.prv_traffic_idx != trafficIndex) || (!pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA))\r
                {\r
 \r
                //if ((pDM_Odm->DM_EDCA_Table.prv_traffic_idx != trafficIndex) || (!pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA))\r
                {\r
-                       if(ICType==ODM_RTL8192D)\r
-                       {      \r
+                       if (ICType == ODM_RTL8192D) {\r
                                // Single PHY\r
                                // Single PHY\r
-                               if(pDM_Odm->RFType==ODM_2T2R)\r
-                               {\r
+                               if (pDM_Odm->RFType == ODM_2T2R) {\r
                                        EDCA_BE_UL = 0x60a42b;    //0x5ea42b;\r
                                        EDCA_BE_DL = 0x60a42b;    //0x5ea42b;\r
                                        EDCA_BE_UL = 0x60a42b;    //0x5ea42b;\r
                                        EDCA_BE_DL = 0x60a42b;    //0x5ea42b;\r
-                               }\r
-                               else\r
-                               {\r
+                       } else {\r
                                        EDCA_BE_UL = 0x6ea42b;\r
                                        EDCA_BE_DL = 0x6ea42b;\r
                                        EDCA_BE_UL = 0x6ea42b;\r
                                        EDCA_BE_DL = 0x6ea42b;\r
-                               }\r
+                       }\r
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
@@ -222,9 +209,7 @@ odm_EdcaTurboCheckCE(
                                        if((ICType==ODM_RTL8192C)&&(pDM_Odm->RFType==ODM_2T2R)) {\r
                                                EDCA_BE_UL = 0x60a42b;\r
                                                EDCA_BE_DL = 0x60a42b;\r
                                        if((ICType==ODM_RTL8192C)&&(pDM_Odm->RFType==ODM_2T2R)) {\r
                                                EDCA_BE_UL = 0x60a42b;\r
                                                EDCA_BE_DL = 0x60a42b;\r
-                                       }\r
-                                       else\r
-                                       {\r
+                                       } else {\r
                                                EDCA_BE_UL = 0x6ea42b;\r
                                                EDCA_BE_DL = 0x6ea42b;\r
                                        }\r
                                                EDCA_BE_UL = 0x6ea42b;\r
                                                EDCA_BE_DL = 0x6ea42b;\r
                                        }\r
@@ -424,8 +409,8 @@ odm_EdcaTurboCheckMP(
                                                ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
                                        else //Uplink\r
                                        {\r
                                                ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
                                        else //Uplink\r
                                        {\r
-                                               //DbgPrint("pDM_Odm->RFCalibrateInfo.ThermalValue = 0x%X\n", pDM_Odm->RFCalibrateInfo.ThermalValue);\r
-                                               //if(pDM_Odm->RFCalibrateInfo.ThermalValue < pHalData->EEPROMThermalMeter)\r
+                                               /*DbgPrint("pRFCalibrateInfo->ThermalValue = 0x%X\n", pRFCalibrateInfo->ThermalValue);*/\r
+                                               /*if(pRFCalibrateInfo->ThermalValue < pHalData->EEPROMThermalMeter)*/\r
                                                if((pDM_Odm->RFCalibrateInfo.ThermalValue < 0x2c) || (*pDM_Odm->pBandType == BAND_ON_2_4G))\r
                                                        ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
                                                else\r
                                                if((pDM_Odm->RFCalibrateInfo.ThermalValue < 0x2c) || (*pDM_Odm->pBandType == BAND_ON_2_4G))\r
                                                        ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
                                                else\r
@@ -499,8 +484,8 @@ odm_EdcaTurboCheckMP(
                                                ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
                                        else //Uplink\r
                                        {\r
                                                ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
                                        else //Uplink\r
                                        {\r
-                                               //DbgPrint("pDM_Odm->RFCalibrateInfo.ThermalValue = 0x%X\n", pDM_Odm->RFCalibrateInfo.ThermalValue);\r
-                                               //if(pDM_Odm->RFCalibrateInfo.ThermalValue < pHalData->EEPROMThermalMeter)\r
+                                               /*DbgPrint("pRFCalibrateInfo->ThermalValue = 0x%X\n", pRFCalibrateInfo->ThermalValue);*/\r
+                                               /*if(pRFCalibrateInfo->ThermalValue < pHalData->EEPROMThermalMeter)*/\r
                                                if((pDM_Odm->RFCalibrateInfo.ThermalValue < 0x2c) || (*pDM_Odm->pBandType == BAND_ON_2_4G))\r
                                                        ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
                                                else\r
                                                if((pDM_Odm->RFCalibrateInfo.ThermalValue < 0x2c) || (*pDM_Odm->pBandType == BAND_ON_2_4G))\r
                                                        ODM_Write4Byte(pDM_Odm,ODM_EDCA_BE_PARAM,EDCA_BE);\r
                                                else\r
@@ -653,7 +638,7 @@ ODM_EdcaParaSelByIot(
        u4Byte                         ICType=pDM_Odm->SupportICType;\r
        u1Byte                         WirelessMode=0xFF;                   //invalid value\r
        u4Byte                          RFType=pDM_Odm->RFType;\r
        u4Byte                         ICType=pDM_Odm->SupportICType;\r
        u1Byte                         WirelessMode=0xFF;                   //invalid value\r
        u4Byte                          RFType=pDM_Odm->RFType;\r
-         u4Byte                         IOTPeerSubType=0;\r
+       u4Byte                         IOTPeerSubType = 0;\r
 \r
        PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;\r
        u1Byte                          TwoPortStatus = (u1Byte)TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE;\r
 \r
        PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;\r
        u1Byte                          TwoPortStatus = (u1Byte)TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE;\r
@@ -754,8 +739,8 @@ ODM_EdcaParaSelByIot(
                        if(WirelessMode==ODM_WM_G)\r
                                (*EDCA_BE_DL) = edca_setting_DL_GMode[IOTPeer];\r
                        else\r
                        if(WirelessMode==ODM_WM_G)\r
                                (*EDCA_BE_DL) = edca_setting_DL_GMode[IOTPeer];\r
                        else\r
-                       (*EDCA_BE_DL) = edca_setting_DL[IOTPeer];\r
-                       \r
+                               (*EDCA_BE_DL) = edca_setting_DL[IOTPeer];\r
+\r
                        if(ICType == ODM_RTL8821)\r
                                 (*EDCA_BE_DL) = 0x5ea630;\r
                        \r
                        if(ICType == ODM_RTL8821)\r
                                 (*EDCA_BE_DL) = 0x5ea630;\r
                        \r
@@ -775,9 +760,19 @@ ODM_EdcaParaSelByIot(
                (*EDCA_BE_UL) = 0x5ea42b;\r
                (*EDCA_BE_DL) = 0x5ea42b;\r
 \r
                (*EDCA_BE_UL) = 0x5ea42b;\r
                (*EDCA_BE_DL) = 0x5ea42b;\r
 \r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("8812A: EDCA_BE_UL=0x%lx EDCA_BE_DL =0x%lx",(*EDCA_BE_UL),(*EDCA_BE_DL)));\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("8812A: EDCA_BE_UL=0x%lx EDCA_BE_DL =0x%lx\n",(*EDCA_BE_UL),(*EDCA_BE_DL)));\r
        }\r
 \r
        }\r
 \r
+       if((ICType==ODM_RTL8814A) && (IOTPeer == HT_IOT_PEER_REALTEK))           /*8814AU and 8814AR*/\r
+       {\r
+               (*EDCA_BE_UL) = 0x5ea42b;\r
+               (*EDCA_BE_DL) = 0xa42b;\r
+\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("8814A: EDCA_BE_UL=0x%lx EDCA_BE_DL =0x%lx\n",(*EDCA_BE_UL),(*EDCA_BE_DL)));\r
+       }\r
+\r
+       \r
+\r
        // Revised for Atheros DIR-655 IOT issue to improve down link TP, added by Roger, 2013.03.22.\r
        if((ICType == ODM_RTL8723A) && (IOTPeerSubType== HT_IOT_PEER_ATHEROS_DIR655) && \r
                (pMgntInfo->dot11CurrentChannelNumber == 6))\r
        // Revised for Atheros DIR-655 IOT issue to improve down link TP, added by Roger, 2013.03.22.\r
        if((ICType == ODM_RTL8723A) && (IOTPeerSubType== HT_IOT_PEER_ATHEROS_DIR655) && \r
                (pMgntInfo->dot11CurrentChannelNumber == 6))\r
@@ -785,7 +780,7 @@ ODM_EdcaParaSelByIot(
                (*EDCA_BE_DL) = 0xa92b;\r
        }\r
 \r
                (*EDCA_BE_DL) = 0xa92b;\r
        }\r
 \r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Special: EDCA_BE_UL=0x%lx EDCA_BE_DL =0x%lx",(*EDCA_BE_UL),(*EDCA_BE_DL)));\r
+       ODM_RT_TRACE(pDM_Odm,ODM_COMP_EDCA_TURBO,ODM_DBG_LOUD,("Special: EDCA_BE_UL=0x%lx EDCA_BE_DL =0x%lx, IOTPeer = %d\n",(*EDCA_BE_UL),(*EDCA_BE_DL), IOTPeer));\r
 \r
 }\r
 \r
 \r
 }\r
 \r
@@ -837,1079 +832,4 @@ odm_EdcaChooseTrafficIdx(
 \r
 #endif\r
 \r
 \r
 #endif\r
 \r
-#if((DM_ODM_SUPPORT_TYPE==ODM_AP)||(DM_ODM_SUPPORT_TYPE==ODM_ADSL))\r
-\r
-void odm_EdcaParaInit(\r
-       IN      PVOID           pDM_VOID\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       prtl8192cd_priv priv            = pDM_Odm->priv;\r
-       int   mode=priv->pmib->dot11BssType.net_work_type;\r
-       \r
-       static unsigned int slot_time, sifs_time;\r
-       struct ParaRecord EDCA[4];\r
-\r
-        memset(EDCA, 0, 4*sizeof(struct ParaRecord));\r
-\r
-       sifs_time = 10;\r
-       slot_time = 20;\r
-\r
-       if (mode & (ODM_WM_N24G|ODM_WM_N5G))\r
-               sifs_time = 16;\r
-\r
-       if (mode & (ODM_WM_N24G|ODM_WM_N5G| ODM_WM_G|ODM_WM_A))\r
-               slot_time = 9;\r
-\r
-\r
-#ifdef RTK_AC_SUPPORT //for 11ac logo,  edit aifs time for cca test cases\r
-       if(AC_SIGMA_MODE != AC_SIGMA_NONE)\r
-               sifs_time = 10; \r
-#endif\r
-\r
-\r
-#if((defined(RTL_MANUAL_EDCA))&&(DM_ODM_SUPPORT_TYPE==ODM_AP))\r
-        if( priv->pmib->dot11QosEntry.ManualEDCA ) {\r
-                if( OPMODE & WIFI_AP_STATE )\r
-                        memcpy(EDCA, priv->pmib->dot11QosEntry.AP_manualEDCA, 4*sizeof(struct ParaRecord));\r
-                else\r
-                        memcpy(EDCA, priv->pmib->dot11QosEntry.STA_manualEDCA, 4*sizeof(struct ParaRecord));\r
-\r
-               #ifdef WIFI_WMM\r
-               if (QOS_ENABLE)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM, (EDCA[VI].TXOPlimit<< 16) | (EDCA[VI].ECWmax<< 12) | (EDCA[VI].ECWmin<< 8) | (sifs_time + EDCA[VI].AIFSN* slot_time));\r
-               else\r
-               #endif\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM, (EDCA[BE].TXOPlimit<< 16) | (EDCA[BE].ECWmax<< 12) | (EDCA[BE].ECWmin<< 8) | (sifs_time + EDCA[VI].AIFSN* slot_time));\r
-\r
-       }else\r
-       #endif //RTL_MANUAL_EDCA\r
-       {\r
-\r
-                if(OPMODE & WIFI_AP_STATE)\r
-                {\r
-                       memcpy(EDCA, rtl_ap_EDCA, 2*sizeof(struct ParaRecord));\r
-\r
-                       if(mode & (ODM_WM_A|ODM_WM_G|ODM_WM_N24G|ODM_WM_N5G))\r
-                               memcpy(&EDCA[VI], &rtl_ap_EDCA[VI_AG], 2*sizeof(struct ParaRecord));\r
-                       else\r
-                               memcpy(&EDCA[VI], &rtl_ap_EDCA[VI], 2*sizeof(struct ParaRecord));\r
-                }\r
-                else\r
-                {\r
-                       memcpy(EDCA, rtl_sta_EDCA, 2*sizeof(struct ParaRecord));\r
-\r
-                       if(mode & (ODM_WM_A|ODM_WM_G|ODM_WM_N24G|ODM_WM_N5G))\r
-                               memcpy(&EDCA[VI], &rtl_sta_EDCA[VI_AG], 2*sizeof(struct ParaRecord));\r
-                       else\r
-                               memcpy(&EDCA[VI], &rtl_sta_EDCA[VI], 2*sizeof(struct ParaRecord));\r
-                }\r
-                \r
-       #ifdef WIFI_WMM\r
-               if (QOS_ENABLE)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM, (EDCA[VI].TXOPlimit<< 16) | (EDCA[VI].ECWmax<< 12) | (EDCA[VI].ECWmin<< 8) | (sifs_time + EDCA[VI].AIFSN* slot_time));\r
-               else\r
-       #endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM,  (EDCA[BK].ECWmax<< 12) | (EDCA[BK].ECWmin<< 8) | (sifs_time + EDCA[VI].AIFSN* slot_time));\r
-#elif(DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM,  (EDCA[BK].ECWmax<< 12) | (EDCA[BK].ECWmin<< 8) | (sifs_time + 2* slot_time));\r
-#endif\r
-                       \r
-\r
-       }\r
-\r
-       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VO_PARAM, (EDCA[VO].TXOPlimit<< 16) | (EDCA[VO].ECWmax<< 12) | (EDCA[VO].ECWmin<< 8) | (sifs_time + EDCA[VO].AIFSN* slot_time));\r
-       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM,  (EDCA[BE].TXOPlimit<< 16) | (EDCA[BE].ECWmax<< 12) | (EDCA[BE].ECWmin<< 8) | (sifs_time + EDCA[BE].AIFSN* slot_time));\r
-       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BK_PARAM, (EDCA[BK].TXOPlimit<< 16) | (EDCA[BK].ECWmax<< 12) | (EDCA[BK].ECWmin<< 8) | (sifs_time + EDCA[BK].AIFSN* slot_time));\r
-\r
-#if defined(RTK_AC_SUPPORT) && defined(RTL_MANUAL_EDCA) //for 11ac logo,  make BK worse to seperate with BE.\r
-       if((AC_SIGMA_MODE != AC_SIGMA_NONE) && (priv->pmib->dot11QosEntry.ManualEDCA))\r
-       {\r
-               ODM_Write4Byte(pDM_Odm, ODM_EDCA_BK_PARAM, (EDCA[BK].TXOPlimit<< 16) | (EDCA[BK].ECWmax<< 12) | (EDCA[BK].ECWmin<< 8) | 0xa4 );\r
-       }\r
-#endif\r
-\r
-//     ODM_Write1Byte(pDM_Odm,ACMHWCTRL, 0x00);\r
-\r
-       priv->pshare->iot_mode_enable = 0;\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-       if (priv->pshare->rf_ft_var.wifi_beq_iot)\r
-               priv->pshare->iot_mode_VI_exist = 0;\r
-       \r
-       #ifdef WMM_VIBE_PRI\r
-       priv->pshare->iot_mode_BE_exist = 0;\r
-       #endif\r
-       \r
-#ifdef WMM_BEBK_PRI\r
-       priv->pshare->iot_mode_BK_exist = 0;\r
-#endif\r
-       \r
-       #ifdef LOW_TP_TXOP\r
-       priv->pshare->BE_cwmax_enhance = 0;\r
-       #endif\r
-\r
-#elif (DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-      priv->pshare->iot_mode_BE_exist = 0;   \r
-#endif\r
-       priv->pshare->iot_mode_VO_exist = 0;\r
-}\r
-\r
-BOOLEAN\r
-ODM_ChooseIotMainSTA(\r
-       IN      PVOID           pDM_VOID,\r
-       IN      PSTA_INFO_T             pstat\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       prtl8192cd_priv priv = pDM_Odm->priv;\r
-       BOOLEAN         bhighTP_found_pstat=FALSE;\r
-       \r
-       if ((GET_ROOT(priv)->up_time % 2) == 0) {\r
-               unsigned int tx_2s_avg = 0;\r
-               unsigned int rx_2s_avg = 0;\r
-               int i=0, aggReady=0;\r
-               unsigned long total_sum = (priv->pshare->current_tx_bytes+priv->pshare->current_rx_bytes);\r
-               int assoc_num = GET_ROOT(priv)->assoc_num;\r
-#ifdef MBSSID\r
-               if (GET_ROOT(priv)->pmib->miscEntry.vap_enable){\r
-                       for (i=0; i<RTL8192CD_NUM_VWLAN; ++i)\r
-                               assoc_num += GET_ROOT(priv)->pvap_priv[i]-> assoc_num;\r
-               }\r
-#endif \r
-#ifdef UNIVERSAL_REPEATER\r
-               if (IS_DRV_OPEN(GET_VXD_PRIV(GET_ROOT(priv))))\r
-                       assoc_num += GET_VXD_PRIV(GET_ROOT(priv))-> assoc_num;\r
-#endif\r
-#ifdef WDS\r
-                if(GET_ROOT(priv)->pmib->dot11WdsInfo.wdsEnabled)\r
-                       assoc_num ++;\r
-#endif\r
-\r
-\r
-               pstat->current_tx_bytes += pstat->tx_byte_cnt;\r
-               pstat->current_rx_bytes += pstat->rx_byte_cnt;\r
-\r
-               if (total_sum != 0) {\r
-                       if (total_sum <= 1000000) {\r
-                       tx_2s_avg = (unsigned int)((pstat->current_tx_bytes*100) / total_sum);\r
-                       rx_2s_avg = (unsigned int)((pstat->current_rx_bytes*100) / total_sum);\r
-                       } else {\r
-                               tx_2s_avg = (unsigned int)(pstat->current_tx_bytes / (total_sum / 100));\r
-                               rx_2s_avg = (unsigned int)(pstat->current_rx_bytes / (total_sum / 100));\r
-                       }\r
-\r
-               }\r
-\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-               if (pstat->ht_cap_len) {\r
-                       if ((tx_2s_avg + rx_2s_avg) >=25 ) {//50//\r
-\r
-                                       priv->pshare->highTP_found_pstat = pstat;\r
-                                       bhighTP_found_pstat=TRUE;\r
-                               }\r
-                       }\r
-#elif(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-               for(i=0; i<8; i++)\r
-                       aggReady += (pstat->ADDBA_ready[i]);\r
-\r
-               if ((pstat->ht_cap_len && (\r
-#ifdef SUPPORT_TX_AMSDU                        \r
-                       AMSDU_ENABLE || \r
-#endif                 \r
-                       aggReady)) || (pstat->IOTPeer==HT_IOT_PEER_INTEL))\r
-               {\r
-                       if ((assoc_num==1) || (tx_2s_avg + rx_2s_avg >= 25)) {\r
-                               priv->pshare->highTP_found_pstat = pstat;\r
-                       }\r
-                       \r
-               #ifdef CLIENT_MODE\r
-                       if (OPMODE & WIFI_STATION_STATE) {\r
-                               if ((tx_2s_avg + rx_2s_avg) >= 20)\r
-                                       priv->pshare->highTP_found_pstat = pstat;\r
-               }\r
-               #endif                          \r
-       }\r
-#endif\r
-       } \r
-       else {\r
-               pstat->current_tx_bytes = pstat->tx_byte_cnt;\r
-               pstat->current_rx_bytes = pstat->rx_byte_cnt;\r
-       }\r
-\r
-       return bhighTP_found_pstat;\r
-}\r
-\r
-\r
-#ifdef WIFI_WMM\r
-VOID\r
-ODM_IotEdcaSwitch(\r
-       IN      PVOID           pDM_VOID,\r
-       IN      unsigned char           enable\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       prtl8192cd_priv priv    = pDM_Odm->priv;\r
-       int   mode=priv->pmib->dot11BssType.net_work_type;\r
-       unsigned int slot_time = 20, sifs_time = 10, BE_TXOP = 47, VI_TXOP = 94;\r
-       unsigned int vi_cw_max = 4, vi_cw_min = 3, vi_aifs;\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-       u32 be_edca, vi_edca;\r
-       u16 disable_cfe;\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-       if (!(!priv->pmib->dot11OperationEntry.wifi_specific ||\r
-               ((OPMODE & WIFI_AP_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific))\r
-       #ifdef CLIENT_MODE\r
-               || ((OPMODE & WIFI_STATION_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific))\r
-       #endif\r
-               ))\r
-               return;\r
-#endif\r
-\r
-#ifdef RTK_AC_SUPPORT //for 11ac logo, do not dynamic switch edca \r
-       if(AC_SIGMA_MODE != AC_SIGMA_NONE)\r
-               return;\r
-#endif\r
-\r
-       if ((mode & (ODM_WM_N24G|ODM_WM_N5G)) && (priv->pshare->ht_sta_num\r
-       #ifdef WDS\r
-               || ((OPMODE & WIFI_AP_STATE) && priv->pmib->dot11WdsInfo.wdsEnabled && priv->pmib->dot11WdsInfo.wdsNum)\r
-       #endif\r
-               ))\r
-               sifs_time = 16;\r
-\r
-       if (mode & (ODM_WM_N24G|ODM_WM_N5G|ODM_WM_G|ODM_WM_A)) {\r
-               slot_time = 9;\r
-       } \r
-       else\r
-       {\r
-               BE_TXOP = 94;\r
-               VI_TXOP = 188;\r
-       }\r
-\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-       vi_edca = -1;\r
-       disable_cfe = -1;\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-       if (priv->pshare->iot_mode_VO_exist) {\r
-               // to separate AC_VI and AC_BE to avoid using the same EDCA settings\r
-               if (priv->pshare->iot_mode_BE_exist) {\r
-                       vi_cw_max = 5;\r
-                       vi_cw_min = 3;\r
-               } else {\r
-                       vi_cw_max = 6;\r
-                       vi_cw_min = 4;\r
-               }\r
-       }\r
-       vi_aifs = (sifs_time + ((OPMODE & WIFI_AP_STATE)?1:2) * slot_time);\r
-\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-       vi_edca = ((VI_TXOP*(1-priv->pshare->iot_mode_VO_exist)) << 16)| (vi_cw_max << 12) | (vi_cw_min << 8) | vi_aifs;\r
-#else\r
-       ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM, ((VI_TXOP*(1-priv->pshare->iot_mode_VO_exist)) << 16)| (vi_cw_max << 12) | (vi_cw_min << 8) | vi_aifs);\r
-#endif\r
-       \r
-#elif (DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-       if ((OPMODE & WIFI_AP_STATE) && priv->pmib->dot11OperationEntry.wifi_specific) {\r
-               if (priv->pshare->iot_mode_VO_exist) {\r
-       #ifdef WMM_VIBE_PRI\r
-                       if (priv->pshare->iot_mode_BE_exist) \r
-                       {\r
-                               vi_cw_max = 5;\r
-                               vi_cw_min = 3;\r
-                               vi_aifs = (sifs_time + ((OPMODE & WIFI_AP_STATE)?1:2) * slot_time);\r
-                       }\r
-                       else \r
-       #endif\r
-                       {\r
-                       vi_cw_max = 6;\r
-                       vi_cw_min = 4;\r
-                       vi_aifs = 0x2b;\r
-                       }\r
-               } \r
-               else {\r
-                       vi_aifs = (sifs_time + ((OPMODE & WIFI_AP_STATE)?1:2) * slot_time);\r
-               }\r
-\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-               vi_edca = ((VI_TXOP*(1-priv->pshare->iot_mode_VO_exist)) << 16)\r
-                       | (vi_cw_max << 12) | (vi_cw_min << 8) | vi_aifs;\r
-#else\r
-               ODM_Write4Byte(pDM_Odm, ODM_EDCA_VI_PARAM, ((VI_TXOP*(1-priv->pshare->iot_mode_VO_exist)) << 16)\r
-                       | (vi_cw_max << 12) | (vi_cw_min << 8) | vi_aifs);\r
-#endif\r
-\r
-       #ifdef WMM_BEBK_PRI\r
-       #ifdef CONFIG_RTL_88E_SUPPORT\r
-               if ((GET_CHIP_VER(priv) == VERSION_8188E) && priv->pshare->iot_mode_BK_exist) {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       be_edca = (10 << 12) | (6 << 8) | 0x4f;\r
-#else\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BK_PARAM, (10 << 12) | (6 << 8) | 0x4f);\r
-#endif\r
-               }\r
-       #endif          \r
-       #endif\r
-#if defined(CONFIG_WLAN_HAL_8881A) \r
-               if (GET_CHIP_VER(priv) == VERSION_8881A) \r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BK_PARAM,  0xa64f);\r
-#endif         \r
-       }\r
-#endif\r
-\r
-\r
-\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-       if (priv->pshare->rf_ft_var.wifi_beq_iot && priv->pshare->iot_mode_VI_exist) {\r
-#if defined(CONFIG_RTL_88E_SUPPORT) || defined(CONFIG_RTL_8812_SUPPORT)\r
-               if (GET_CHIP_VER(priv) == VERSION_8188E || GET_CHIP_VER(priv) == VERSION_8812E) {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       be_edca = (10 << 12) | (6 << 8) | 0x4f;\r
-#else\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (10 << 12) | (6 << 8) | 0x4f);\r
-#endif\r
-               }\r
-               else\r
-#endif\r
-               {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       be_edca = (10 << 12) | (4 << 8) | 0x4f;\r
-#else\r
-               ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (10 << 12) | (4 << 8) | 0x4f);\r
-#endif\r
-               }\r
-       } else if(!enable)\r
-#elif(DM_ODM_SUPPORT_TYPE==ODM_ADSL)      \r
-       if(!enable)                                 //if iot is disable ,maintain original BEQ PARAM\r
-#endif\r
-       {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-               be_edca = (((OPMODE & WIFI_AP_STATE)?6:10) << 12) | (4 << 8)\r
-                       | (sifs_time + 3 * slot_time);\r
-               disable_cfe = 1;\r
-#else\r
-               ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (((OPMODE & WIFI_AP_STATE)?6:10) << 12) | (4 << 8)\r
-                       | (sifs_time + 3 * slot_time));\r
-#endif\r
-#ifdef CONFIG_PCI_HCI\r
-//             ODM_Write2Byte(pDM_Odm, RD_CTRL, ODM_Read2Byte(pDM_Odm, RD_CTRL) | (DIS_TXOP_CFE));\r
-#endif\r
-       }\r
-       else\r
-       {\r
-               int txop;\r
-               unsigned int cw_max;\r
-#ifdef LOW_TP_TXOP\r
-               unsigned int txop_close;\r
-#endif\r
-               \r
-       #if((DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined LOW_TP_TXOP))\r
-                       cw_max = ((priv->pshare->BE_cwmax_enhance) ? 10 : 6);\r
-                       txop_close = ((priv->pshare->rf_ft_var.low_tp_txop && priv->pshare->rf_ft_var.low_tp_txop_close) ? 1 : 0);\r
-\r
-                       if(priv->pshare->txop_enlarge == 0xe)   //if intel case\r
-                               txop = (txop_close ? 0 : (BE_TXOP*2));\r
-                       else                                                        //if other case\r
-                               txop = (txop_close ? 0: (BE_TXOP*priv->pshare->txop_enlarge));\r
-       #else\r
-                       cw_max=6;\r
-                       if((priv->pshare->txop_enlarge==0xe)||(priv->pshare->txop_enlarge==0xd))\r
-                               txop=BE_TXOP*2;\r
-                       else\r
-                               txop=BE_TXOP*priv->pshare->txop_enlarge;\r
-\r
-       #endif\r
-                           \r
-               if (priv->pshare->ht_sta_num\r
-       #ifdef WDS\r
-                       || ((OPMODE & WIFI_AP_STATE) && (mode & (ODM_WM_N24G|ODM_WM_N5G)) &&\r
-                       priv->pmib->dot11WdsInfo.wdsEnabled && priv->pmib->dot11WdsInfo.wdsNum)\r
-       #endif\r
-                       ) \r
-                       {\r
-\r
-                       if (priv->pshare->txop_enlarge == 0xe) {\r
-                               // is intel client, use a different edca value\r
-                               //ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop<< 16) | (cw_max<< 12) | (4 << 8) | 0x1f);\r
-                               if (pDM_Odm->RFType==ODM_1T1R) {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                                       be_edca = (txop << 16) | (5 << 12) | (3 << 8) | 0x1f;\r
-#else\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) | (5 << 12) | (3 << 8) | 0x1f);\r
-#endif\r
-                               }\r
-                               else {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                                       be_edca = (txop << 16) | (8 << 12) | (5 << 8) | 0x1f;\r
-#else\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) | (8 << 12) | (5 << 8) | 0x1f);\r
-#endif\r
-                               }\r
-                               \r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                               disable_cfe = 0;\r
-#endif\r
-#ifdef CONFIG_PCI_HCI\r
-//                             ODM_Write2Byte(pDM_Odm, RD_CTRL, ODM_Read2Byte(pDM_Odm, RD_CTRL) & ~(DIS_TXOP_CFE));\r
-#endif\r
-                               priv->pshare->txop_enlarge = 2;\r
-                       } \r
-#if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-       #ifndef LOW_TP_TXOP\r
-                        else if (priv->pshare->txop_enlarge == 0xd) {\r
-                               // is intel ralink, use a different edca value\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                               be_edca = (txop << 16) | (6 << 12) | (5 << 8) | 0x2b;\r
-#else\r
-                               ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) | (6 << 12) | (5 << 8) | 0x2b);\r
-#endif\r
-                               priv->pshare->txop_enlarge = 2;\r
-                       } \r
-       #endif\r
-#endif\r
-                       else \r
-                       {\r
-//                             if (txop == 0) {\r
-//#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-//                                     disable_cfe = 1;\r
-//#endif\r
-//#ifdef CONFIG_PCI_HCI\r
-//                                     ODM_Write2Byte(pDM_Odm, RD_CTRL, ODM_Read2Byte(pDM_Odm, RD_CTRL) | (DIS_TXOP_CFE));\r
-//#endif\r
-//                             }\r
-                                       \r
-                               if (pDM_Odm->RFType==ODM_2T2R) {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                                       be_edca = (txop << 16) | (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time);\r
-#else\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) |\r
-                                               (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time));\r
-#endif\r
-                               }\r
-                               else\r
-                               #if(DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined LOW_TP_TXOP)\r
-                               {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                                       be_edca = (txop << 16) |\r
-                                               (((priv->pshare->BE_cwmax_enhance) ? 10 : 5) << 12) | (3 << 8) | (sifs_time + 2 * slot_time);\r
-#else\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) |\r
-                                               (((priv->pshare->BE_cwmax_enhance) ? 10 : 5) << 12) | (3 << 8) | (sifs_time + 2 * slot_time));\r
-#endif\r
-                               }\r
-                               #else\r
-                               {\r
-                                       PSTA_INFO_T             pstat = priv->pshare->highTP_found_pstat;\r
-                                       if ((GET_CHIP_VER(priv)==VERSION_8881A) && pstat && (pstat->IOTPeer == HT_IOT_PEER_HTC))\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, 0x642b);\r
-                                       else {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                                       be_edca = (txop << 16) | (5 << 12) | (3 << 8) | (sifs_time + 2 * slot_time);\r
-                               #else\r
-                                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (txop << 16) |\r
-                                               (5 << 12) | (3 << 8) | (sifs_time + 2 * slot_time));\r
-#endif\r
-                                       }\r
-                               }\r
-                               #endif\r
-                       }\r
-               }\r
-              else \r
-              {\r
- #if((DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined LOW_TP_TXOP))\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                        be_edca = (BE_TXOP << 16) | (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time);\r
-#else\r
-                        ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (BE_TXOP << 16) | (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time));\r
-#endif\r
- #else\r
-               #if defined(CONFIG_RTL_8196D) || defined(CONFIG_RTL_8197DL) || defined(CONFIG_RTL_8196E) || (defined(CONFIG_RTL_8197D) && !defined(CONFIG_PORT0_EXT_GIGA))\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       be_edca = (BE_TXOP*2 << 16) | (cw_max << 12) | (5 << 8) | (sifs_time + 3 * slot_time);\r
- #else\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM,  (BE_TXOP*2 << 16) | (cw_max << 12) | (5 << 8) | (sifs_time + 3 * slot_time));\r
-#endif\r
-               #else\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       be_edca = (BE_TXOP*2 << 16) | (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time);\r
-               #else\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM,  (BE_TXOP*2 << 16) | (cw_max << 12) | (4 << 8) | (sifs_time + 3 * slot_time));\r
-               #endif\r
-               #endif\r
-/*             \r
-               if (priv->pshare->txop_enlarge == 0xe) {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       disable_cfe = 0;\r
-#endif\r
-       #ifdef CONFIG_PCI_HCI\r
-                       ODM_Write2Byte(pDM_Odm, RD_CTRL, ODM_Read2Byte(pDM_Odm, RD_CTRL) & ~(DIS_TXOP_CFE));\r
-       #endif\r
-               } else {\r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                       disable_cfe = 1;\r
-#endif\r
-       #ifdef CONFIG_PCI_HCI\r
-                       ODM_Write2Byte(pDM_Odm, RD_CTRL, ODM_Read2Byte(pDM_Odm, RD_CTRL) | (DIS_TXOP_CFE));\r
-       #endif\r
-               }\r
-*/                     \r
- #endif\r
-              }\r
-\r
-       }\r
-       \r
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-       notify_IOT_EDCA_switch(priv, be_edca, vi_edca, disable_cfe);\r
-#endif\r
-}\r
-#endif\r
-\r
-VOID \r
-odm_IotEngine(\r
-       IN      PVOID           pDM_VOID\r
-       )\r
-{\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       struct rtl8192cd_priv *priv=pDM_Odm->priv;\r
-       PSTA_INFO_T pstat = NULL;\r
-       u4Byte i;\r
-       \r
-#ifdef WIFI_WMM\r
-       unsigned int switch_turbo = 0, avg_tp;\r
-#endif \r
-////////////////////////////////////////////////////////\r
-//  if EDCA Turbo function is not supported or Manual EDCA Setting\r
-//  then return\r
-////////////////////////////////////////////////////////\r
-       if(!(pDM_Odm->SupportAbility&ODM_MAC_EDCA_TURBO)){\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("ODM_MAC_EDCA_TURBO NOT SUPPORTED\n"));\r
-               return;\r
-       }\r
-       \r
-#if((DM_ODM_SUPPORT_TYPE==ODM_AP)&& defined(RTL_MANUAL_EDCA) && defined(WIFI_WMM))\r
-       if(priv->pmib->dot11QosEntry.ManualEDCA){\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("ODM_MAC_EDCA_TURBO OFF: MANUAL SETTING\n"));\r
-               return ;\r
-       }\r
-#endif \r
-\r
-#if !(DM_ODM_SUPPORT_TYPE &ODM_AP)\r
- //////////////////////////////////////////////////////\r
- //find high TP STA every 2s\r
-//////////////////////////////////////////////////////\r
-       if ((GET_ROOT(priv)->up_time % 2) == 0) \r
-               priv->pshare->highTP_found_pstat==NULL;\r
-\r
-#if 0\r
-       phead = &priv->asoc_list;\r
-       plist = phead->next;\r
-       while(plist != phead)   {\r
-               pstat = list_entry(plist, struct stat_info, asoc_list);\r
-\r
-               if(ODM_ChooseIotMainSTA(pDM_Odm, pstat));              //find the correct station\r
-                       break;\r
-               if (plist == plist->next)                                          //the last plist \r
-                       break;\r
-               plist = plist->next;\r
-       };\r
-#endif\r
-\r
-       //find highTP STA\r
-       for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++) {\r
-               pstat = pDM_Odm->pODM_StaInfo[i];\r
-               if(IS_STA_VALID(pstat) && (ODM_ChooseIotMainSTA(pDM_Odm, pstat)))        //find the correct station\r
-                               break;\r
-       }\r
-\r
- //////////////////////////////////////////////////////\r
- //if highTP STA is not found, then return\r
- //////////////////////////////////////////////////////\r
-       if(priv->pshare->highTP_found_pstat==NULL)      {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("ODM_MAC_EDCA_TURBO OFF: NO HT STA FOUND\n"));\r
-               return;\r
-       }\r
-#endif\r
-\r
-       pstat=priv->pshare->highTP_found_pstat;\r
-       if(pstat) {\r
-               if((pstat->tx_avarage + pstat->rx_avarage) < (1<<17))   // 1M bps\r
-                       pstat = NULL;\r
-       }\r
-\r
-#ifdef WIFI_WMM\r
-       if (QOS_ENABLE) {\r
-               if (!priv->pmib->dot11OperationEntry.wifi_specific \r
-               #if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-                       ||((OPMODE & WIFI_AP_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific))\r
-               #elif(DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-                       || (priv->pmib->dot11OperationEntry.wifi_specific == 2)\r
-               #endif\r
-                       ) {\r
-                       if (priv->pshare->iot_mode_enable &&\r
-                               ((priv->pshare->phw->VO_pkt_count > 50) ||\r
-                                (priv->pshare->phw->VI_pkt_count > 50) ||\r
-                                (priv->pshare->phw->BK_pkt_count > 50))) {\r
-                               priv->pshare->iot_mode_enable = 0;\r
-                               switch_turbo++;\r
-#ifdef CONFIG_WLAN_HAL_8881A\r
-                               if (GET_CHIP_VER(priv) == VERSION_8881A) {\r
-                                       RTL_W32(0x460, 0x03086666);\r
-                               }\r
-#endif //CONFIG_WLAN_HAL_8881A\r
-                       } else if ((!priv->pshare->iot_mode_enable) &&\r
-                               ((priv->pshare->phw->VO_pkt_count < 50) &&\r
-                                (priv->pshare->phw->VI_pkt_count < 50) &&\r
-                                (priv->pshare->phw->BK_pkt_count < 50))) {\r
-                               priv->pshare->iot_mode_enable++;\r
-                               switch_turbo++;\r
-//#ifdef CONFIG_WLAN_HAL_8881A\r
-#if 0\r
-                               if (GET_CHIP_VER(priv) == VERSION_8881A) {\r
-                                       if (get_bonding_type_8881A()==BOND_8881AB) {\r
-                                               RTL_W32(0x460, 0x03086666);\r
-                                       }\r
-                                       else {\r
-                                               RTL_W32(0x460, 0x0320ffff);\r
-                                       }\r
-                               }\r
-#endif //CONFIG_WLAN_HAL_8881A\r
-                       }\r
-               }\r
-\r
-\r
-               #if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-               if ((OPMODE & WIFI_AP_STATE) && priv->pmib->dot11OperationEntry.wifi_specific)\r
-               #elif (DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-               if (priv->pmib->dot11OperationEntry.wifi_specific) \r
-               #endif\r
-               {\r
-                       if (!priv->pshare->iot_mode_VO_exist && (priv->pshare->phw->VO_pkt_count > 50)) {\r
-                               priv->pshare->iot_mode_VO_exist++;\r
-                               switch_turbo++;\r
-                       } else if (priv->pshare->iot_mode_VO_exist && (priv->pshare->phw->VO_pkt_count < 50)) {\r
-                               priv->pshare->iot_mode_VO_exist = 0;\r
-                               switch_turbo++;\r
-                       }\r
-#if((DM_ODM_SUPPORT_TYPE==ODM_ADSL)||((DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined WMM_VIBE_PRI)))\r
-                       if (priv->pshare->iot_mode_VO_exist) {\r
-                               //printk("[%s %d] BE_pkt_count=%d\n", __FUNCTION__, __LINE__, priv->pshare->phw->BE_pkt_count);\r
-                               if (!priv->pshare->iot_mode_BE_exist && (priv->pshare->phw->BE_pkt_count > 250)) {\r
-                                       priv->pshare->iot_mode_BE_exist++;\r
-                                       switch_turbo++;\r
-                               } else if (priv->pshare->iot_mode_BE_exist && (priv->pshare->phw->BE_pkt_count < 250)) {\r
-                                       priv->pshare->iot_mode_BE_exist = 0;\r
-                                       switch_turbo++;\r
-                               }\r
-                       }\r
-#endif\r
-\r
-#if((DM_ODM_SUPPORT_TYPE==ODM_ADSL)||((DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined WMM_BEBK_PRI)))\r
-                       if (priv->pshare->phw->BE_pkt_count) {\r
-                               //printk("[%s %d] BK_pkt_count=%d\n", __FUNCTION__, __LINE__, priv->pshare->phw->BK_pkt_count);\r
-                               if (!priv->pshare->iot_mode_BK_exist && (priv->pshare->phw->BK_pkt_count > 250)) {\r
-                                       priv->pshare->iot_mode_BK_exist++;\r
-                                       switch_turbo++;\r
-                               } else if (priv->pshare->iot_mode_BK_exist && (priv->pshare->phw->BK_pkt_count < 250)) {\r
-                                       priv->pshare->iot_mode_BK_exist = 0;\r
-                                       switch_turbo++;\r
-                               }\r
-                       }\r
-#endif\r
-\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-                       if (priv->pshare->rf_ft_var.wifi_beq_iot) \r
-                       {\r
-                               if (!priv->pshare->iot_mode_VI_exist && (priv->pshare->phw->VI_rx_pkt_count > 50)) {\r
-                                       priv->pshare->iot_mode_VI_exist++;\r
-                                       switch_turbo++;\r
-                               } else if (priv->pshare->iot_mode_VI_exist && (priv->pshare->phw->VI_rx_pkt_count < 50)) {\r
-                                       priv->pshare->iot_mode_VI_exist = 0;\r
-                                       switch_turbo++;\r
-                               }\r
-                       }\r
-#endif\r
-\r
-               }\r
-               else if (!pstat || pstat->rssi < priv->pshare->rf_ft_var.txop_enlarge_lower) {\r
-                  if (priv->pshare->txop_enlarge) {\r
-                          priv->pshare->txop_enlarge = 0;\r
-                          if (priv->pshare->iot_mode_enable)\r
-                                       switch_turbo++;\r
-                               }\r
-               }\r
-\r
-#if(defined(CLIENT_MODE) && (DM_ODM_SUPPORT_TYPE==ODM_AP))\r
-        if ((OPMODE & WIFI_STATION_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific))\r
-        {\r
-            if (priv->pshare->iot_mode_enable &&\r
-                (((priv->pshare->phw->VO_pkt_count > 50) ||\r
-                 (priv->pshare->phw->VI_pkt_count > 50) ||\r
-                 (priv->pshare->phw->BK_pkt_count > 50)) ||\r
-                 (pstat && (!pstat->ADDBA_ready[0]) & (!pstat->ADDBA_ready[3]))))\r
-            {\r
-                priv->pshare->iot_mode_enable = 0;\r
-                switch_turbo++;\r
-            }\r
-            else if ((!priv->pshare->iot_mode_enable) &&\r
-                (((priv->pshare->phw->VO_pkt_count < 50) &&\r
-                 (priv->pshare->phw->VI_pkt_count < 50) &&\r
-                 (priv->pshare->phw->BK_pkt_count < 50)) &&\r
-                 (pstat && (pstat->ADDBA_ready[0] | pstat->ADDBA_ready[3]))))\r
-            {\r
-                priv->pshare->iot_mode_enable++;\r
-                switch_turbo++;\r
-            }\r
-        }\r
-#endif\r
-\r
-               priv->pshare->phw->VO_pkt_count = 0;\r
-               priv->pshare->phw->VI_pkt_count = 0;\r
-               priv->pshare->phw->BK_pkt_count = 0;\r
-\r
-       #if((DM_ODM_SUPPORT_TYPE==ODM_ADSL)||((DM_ODM_SUPPORT_TYPE==ODM_AP)&&(defined WMM_VIBE_PRI)))\r
-               priv->pshare->phw->BE_pkt_count = 0;\r
-       #endif\r
-               \r
-       #if(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-               if (priv->pshare->rf_ft_var.wifi_beq_iot)\r
-                       priv->pshare->phw->VI_rx_pkt_count = 0;\r
-               #endif\r
-\r
-       }\r
-#endif\r
-\r
-       if ((priv->up_time % 2) == 0) {\r
-               /*\r
-                * decide EDCA content for different chip vendor\r
-                */\r
-#ifdef WIFI_WMM\r
-       #if(DM_ODM_SUPPORT_TYPE==ODM_ADSL)\r
-               if (QOS_ENABLE && (!priv->pmib->dot11OperationEntry.wifi_specific || (priv->pmib->dot11OperationEntry.wifi_specific == 2)\r
-       \r
-       #elif(DM_ODM_SUPPORT_TYPE==ODM_AP)\r
-               if (QOS_ENABLE && (!priv->pmib->dot11OperationEntry.wifi_specific || \r
-                       ((OPMODE & WIFI_AP_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific == 2))\r
-               #ifdef CLIENT_MODE\r
-            || ((OPMODE & WIFI_STATION_STATE) && (priv->pmib->dot11OperationEntry.wifi_specific == 2))\r
-               #endif\r
-       #endif\r
-               ))\r
-       \r
-               {\r
-\r
-                       if (pstat && pstat->rssi >= priv->pshare->rf_ft_var.txop_enlarge_upper) {\r
-#ifdef LOW_TP_TXOP\r
-                               if (pstat->IOTPeer==HT_IOT_PEER_INTEL)\r
-                               {\r
-                                       if (priv->pshare->txop_enlarge != 0xe)\r
-                                       {\r
-                                               priv->pshare->txop_enlarge = 0xe;\r
-\r
-                                               if (priv->pshare->iot_mode_enable)\r
-                                                       switch_turbo++;\r
-                                       }\r
-                               } \r
-                               else if (priv->pshare->txop_enlarge != 2) \r
-                               {\r
-                                       priv->pshare->txop_enlarge = 2;\r
-                                       if (priv->pshare->iot_mode_enable)\r
-                                               switch_turbo++;\r
-                               }\r
-#else\r
-                               if (priv->pshare->txop_enlarge != 2)\r
-                               {\r
-                                       if (pstat->IOTPeer==HT_IOT_PEER_INTEL)\r
-                                               priv->pshare->txop_enlarge = 0xe;                                               \r
-                                       else if (pstat->IOTPeer==HT_IOT_PEER_RALINK)\r
-                                               priv->pshare->txop_enlarge = 0xd;                                               \r
-                                       else if (pstat->IOTPeer==HT_IOT_PEER_HTC)\r
-                                               priv->pshare->txop_enlarge = 0;         \r
-                                       else\r
-                                               priv->pshare->txop_enlarge = 2;\r
-\r
-                                       if (priv->pshare->iot_mode_enable)\r
-                                               switch_turbo++;\r
-                               }\r
-#endif\r
-                       }\r
-                       else if (!pstat || pstat->rssi < priv->pshare->rf_ft_var.txop_enlarge_lower) \r
-                       {\r
-                               if (priv->pshare->txop_enlarge) {\r
-                                       priv->pshare->txop_enlarge = 0;\r
-                                       if (priv->pshare->iot_mode_enable)\r
-                                               switch_turbo++;\r
-                               }\r
-                       }\r
-\r
-#if((DM_ODM_SUPPORT_TYPE==ODM_AP)&&( defined LOW_TP_TXOP))\r
-                       // for Intel IOT, need to enlarge CW MAX from 6 to 10\r
-                       if (pstat && pstat->IOTPeer==HT_IOT_PEER_INTEL && (((pstat->tx_avarage+pstat->rx_avarage)>>10) < \r
-                                       priv->pshare->rf_ft_var.cwmax_enhance_thd)) \r
-                       {\r
-                               if (!priv->pshare->BE_cwmax_enhance && priv->pshare->iot_mode_enable)\r
-                               {\r
-                                       priv->pshare->BE_cwmax_enhance = 1;\r
-                                       switch_turbo++;\r
-                               }\r
-                       } else {\r
-                               if (priv->pshare->BE_cwmax_enhance) {\r
-                                       priv->pshare->BE_cwmax_enhance = 0;\r
-                                       switch_turbo++;\r
-                               }\r
-                       }\r
-#endif\r
-               }\r
-#endif\r
-               priv->pshare->current_tx_bytes = 0;\r
-               priv->pshare->current_rx_bytes = 0;\r
-       }else {\r
-               if ((GET_CHIP_VER(priv) == VERSION_8881A)||(GET_CHIP_VER(priv) == VERSION_8192E)|| (GET_CHIP_VER(priv) == VERSION_8188E) ){\r
-                       unsigned int uldl_tp = (priv->pshare->current_tx_bytes+priv->pshare->current_rx_bytes)>>17;\r
-                       if((uldl_tp > 40) && (priv->pshare->agg_to!= 1)) {\r
-                               RTL_W8(0x462, 0x08);\r
-                               priv->pshare->agg_to = 1;\r
-                       } else if((uldl_tp < 35) && (priv->pshare->agg_to !=0)) {\r
-                               RTL_W8(0x462, 0x02);\r
-                               priv->pshare->agg_to = 0;\r
-                       } \r
-               }\r
-       }\r
-       \r
-#if((DM_ODM_SUPPORT_TYPE==ODM_AP)&& defined( SW_TX_QUEUE))\r
-       if(AMPDU_ENABLE) {\r
-#ifdef TX_EARLY_MODE\r
-               if (GET_TX_EARLY_MODE) {\r
-                       if (!GET_EM_SWQ_ENABLE &&\r
-                               ((priv->assoc_num > 1) ||\r
-                               (pstat && pstat->IOTPeer != HT_IOT_PEER_UNKNOWN))) {\r
-                               if ((priv->pshare->em_tx_byte_cnt >> 17) > EM_TP_UP_BOUND) \r
-                                       priv->pshare->reach_tx_limit_cnt++;                             \r
-                               else                                    \r
-                                       priv->pshare->reach_tx_limit_cnt = 0;   \r
-\r
-                               if (priv->pshare->txop_enlarge && priv->pshare->reach_tx_limit_cnt) { //>= WAIT_TP_TIME//\r
-                                       GET_EM_SWQ_ENABLE = 1;                  \r
-                                       priv->pshare->reach_tx_limit_cnt = 0;\r
-\r
-                                       if (pstat->IOTPeer == HT_IOT_PEER_INTEL)\r
-                                               MAX_EM_QUE_NUM = 12;\r
-                                       else if (pstat->IOTPeer == HT_IOT_PEER_RALINK)\r
-                                               MAX_EM_QUE_NUM = 10;\r
-                                       \r
-                                       enable_em(priv);                        \r
-                               }\r
-                       }\r
-                       else if (GET_EM_SWQ_ENABLE) {\r
-                               if ((priv->pshare->em_tx_byte_cnt >> 17) < EM_TP_LOW_BOUND)\r
-                                       priv->pshare->reach_tx_limit_cnt++;                             \r
-                               else                                    \r
-                                       priv->pshare->reach_tx_limit_cnt = 0;   \r
-\r
-                               if (!priv->pshare->txop_enlarge || priv->pshare->reach_tx_limit_cnt >= WAIT_TP_TIME) {\r
-                                       GET_EM_SWQ_ENABLE = 0;\r
-                                       priv->pshare->reach_tx_limit_cnt = 0;\r
-                                       disable_em(priv);\r
-                               }\r
-                       }\r
-               }\r
-#endif\r
-\r
-#if defined(CONFIG_WLAN_HAL_8881A) || defined(CONFIG_WLAN_HAL_8192EE) || defined(CONFIG_RTL_8812_SUPPORT) || defined(CONFIG_WLAN_HAL_8814AE)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8812 || pDM_Odm->SupportICType == ODM_RTL8814A) {      \r
-               if (priv->assoc_num > 9)\r
-       {\r
-               if (priv->swq_txmac_chg >= priv->pshare->rf_ft_var.swq_en_highthd){\r
-                               if ((priv->swq_decision == 0)){\r
-                               switch_turbo++;\r
-                               if (priv->pshare->txop_enlarge == 0)\r
-                                       priv->pshare->txop_enlarge = 2;\r
-                                       priv->swq_decision = 1;\r
-                               }\r
-                       else\r
-                       {\r
-                               if ((switch_turbo > 0) && (priv->pshare->txop_enlarge == 0) && (priv->pshare->iot_mode_enable != 0))\r
-                               {\r
-                                       priv->pshare->txop_enlarge = 2;\r
-                                       switch_turbo--;\r
-                               }\r
-                       }\r
-               }\r
-               else if(priv->swq_txmac_chg <= priv->pshare->rf_ft_var.swq_dis_lowthd){\r
-                               priv->swq_decision = 0;\r
-               }\r
-                       else if ((priv->swq_decision == 1) && (switch_turbo > 0) && (priv->pshare->txop_enlarge == 0) && (priv->pshare->iot_mode_enable != 0))        {\r
-                       priv->pshare->txop_enlarge = 2;\r
-                       switch_turbo--;\r
-               }\r
-               } else {\r
-                       priv->swq_decision = 0;\r
-    }\r
-       } else if(CONFIG_WLAN_NOT_HAL_EXIST)\r
-#endif\r
-               {       \r
-               if (priv->assoc_num > 1)\r
-       {\r
-               if (priv->swq_txmac_chg >= priv->pshare->rf_ft_var.swq_en_highthd){\r
-                               if ((priv->swq_decision == 0)){\r
-                               switch_turbo++;\r
-                               if (priv->pshare->txop_enlarge == 0)\r
-                                       priv->pshare->txop_enlarge = 2;\r
-                                       priv->swq_decision = 1;\r
-                               }\r
-                       else\r
-                       {\r
-                               if ((switch_turbo > 0) && (priv->pshare->txop_enlarge == 0) && (priv->pshare->iot_mode_enable != 0))\r
-                               {\r
-                                       priv->pshare->txop_enlarge = 2;\r
-                                       switch_turbo--;\r
-                               }\r
-                       }\r
-               }\r
-               else if(priv->swq_txmac_chg <= priv->pshare->rf_ft_var.swq_dis_lowthd){\r
-                               priv->swq_decision = 0;\r
-               }\r
-                       else if ((priv->swq_decision == 1) && (switch_turbo > 0) && (priv->pshare->txop_enlarge == 0) && (priv->pshare->iot_mode_enable != 0))        {\r
-                       priv->pshare->txop_enlarge = 2;\r
-                       switch_turbo--;\r
-               }\r
-    }\r
-       //#if (defined CONFIG_RTL_819XD))\r
-               else if (priv->assoc_num == 1 && (priv->up_time % 2 == 0)\r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP) && defined(TX_EARLY_MODE)\r
-                       && (!GET_TX_EARLY_MODE || !GET_EM_SWQ_ENABLE) \r
-#endif\r
-               ) {\r
-                       if ((pstat) && (pstat->ADDBA_ready[0] | pstat->ADDBA_ready[3])) {\r
-                               //int en_thd = 14417920>>(priv->up_time % 2);\r
-                               avg_tp = (pstat->current_tx_bytes >> 17);\r
-\r
-                               //if ((priv->swq_decision == 0) && (pstat->current_tx_bytes > en_thd) && (pstat->current_rx_bytes > en_thd) )  { //50Mbps\r
-                               if ((priv->swq_decision == 0) && (avg_tp  > TP_HIGH_WATER_MARK)) { //55Mbps\r
-                                       //printk("[%s:%d] swq_decision=1 current_tp: %d Mbps\n", __FUNCTION__, __LINE__, avg_tp);\r
-                                       priv->swq_decision = 1;\r
-                               }\r
-                               //else if ((priv->swq_decision == 1) && ((pstat->tx_avarage < 4587520) || (pstat->rx_avarage < 4587520))) { //35Mbps\r
-                               else if ((priv->swq_decision == 1) && (avg_tp < TP_LOW_WATER_MARK)) { //35Mbps\r
-                                       //printk("[%s:%d] swq_decision=0 current_tp: %d Mbps\n", __FUNCTION__, __LINE__, avg_tp);\r
-                                       priv->swq_decision = 0;\r
-                               }\r
-                       } else {\r
-                               priv->swq_decision = 0;\r
-            }\r
-            }\r
-        }\r
-               if( (priv->swq_decision == 1) \r
-#if (DM_ODM_SUPPORT_TYPE==ODM_AP) && defined(TX_EARLY_MODE)            \r
-               || (GET_EM_SWQ_ENABLE == 1) \r
-#endif         \r
-               ) {\r
-                       priv->swq_en = 1;\r
-                       priv->swqen_keeptime = priv->up_time;\r
-               } else {\r
-            priv->swq_en = 0;\r
-                       priv->swqen_keeptime = 0;\r
-        }\r
-    }\r
-#endif\r
-\r
-#ifdef WIFI_WMM\r
-#ifdef LOW_TP_TXOP\r
-       if ((!priv->pmib->dot11OperationEntry.wifi_specific || (priv->pmib->dot11OperationEntry.wifi_specific == 2))\r
-               && QOS_ENABLE) {\r
-               if (switch_turbo || priv->pshare->rf_ft_var.low_tp_txop) {\r
-                       unsigned int thd_tp;\r
-                       unsigned char under_thd;\r
-                       unsigned int curr_tp;\r
-\r
-                       if (priv->pmib->dot11BssType.net_work_type & (ODM_WM_N24G|ODM_WM_N5G| ODM_WM_G))\r
-                       {\r
-                               // Determine the upper bound throughput threshold.\r
-                               if (priv->pmib->dot11BssType.net_work_type & (ODM_WM_N24G|ODM_WM_N5G)) {\r
-                                       if (priv->assoc_num && priv->assoc_num != priv->pshare->ht_sta_num)\r
-                                               thd_tp = priv->pshare->rf_ft_var.low_tp_txop_thd_g;\r
-                                       else\r
-                                               thd_tp = priv->pshare->rf_ft_var.low_tp_txop_thd_n;\r
-                               }\r
-                               else\r
-                                       thd_tp = priv->pshare->rf_ft_var.low_tp_txop_thd_g;\r
-\r
-                               // Determine to close txop.\r
-#if defined(UNIVERSAL_REPEATER) || defined(MBSSID)\r
-                               if(IS_STA_VALID(pstat)) \r
-                               {       \r
-                                       struct rtl8192cd_priv *tmppriv;\r
-                                       struct aid_obj *aidarray;       \r
-                                       aidarray = container_of(pstat, struct aid_obj, station);\r
-                                       tmppriv = aidarray->priv;\r
-\r
-                                       curr_tp = (unsigned int)(tmppriv->ext_stats.tx_avarage>>17) + (unsigned int)(tmppriv->ext_stats.rx_avarage>>17);\r
-                               } \r
-                               else \r
-#endif\r
-                               curr_tp = (unsigned int)(priv->ext_stats.tx_avarage>>17) + (unsigned int)(priv->ext_stats.rx_avarage>>17);\r
-                               if (curr_tp <= thd_tp && curr_tp >= priv->pshare->rf_ft_var.low_tp_txop_thd_low)\r
-                                       under_thd = 1;\r
-                               else\r
-                                       under_thd = 0;\r
-                       }\r
-                       else\r
-                       {\r
-                               under_thd = 0;\r
-                       }\r
-\r
-                       if (switch_turbo) \r
-                       {\r
-                               priv->pshare->rf_ft_var.low_tp_txop_close = under_thd;\r
-                               priv->pshare->rf_ft_var.low_tp_txop_count = 0;\r
-                       }\r
-                       else if (priv->pshare->iot_mode_enable && (priv->pshare->rf_ft_var.low_tp_txop_close != under_thd)) {\r
-                               priv->pshare->rf_ft_var.low_tp_txop_count++;\r
-                               if (priv->pshare->rf_ft_var.low_tp_txop_close) {\r
-                                       priv->pshare->rf_ft_var.low_tp_txop_count = priv->pshare->rf_ft_var.low_tp_txop_delay;\r
-                               }\r
-                               if (priv->pshare->rf_ft_var.low_tp_txop_count ==priv->pshare->rf_ft_var.low_tp_txop_delay) \r
-\r
-                               {                                       \r
-                                       priv->pshare->rf_ft_var.low_tp_txop_count = 0;\r
-                                       priv->pshare->rf_ft_var.low_tp_txop_close = under_thd;\r
-                                       switch_turbo++;\r
-                               }\r
-                       } \r
-                       else \r
-                       {\r
-                               priv->pshare->rf_ft_var.low_tp_txop_count = 0;\r
-                       }\r
-               }\r
-       }\r
-#endif         \r
-\r
-#ifdef WMM_DSCP_C42\r
-       if (switch_turbo) {\r
-               if (!priv->pshare->iot_mode_enable && !priv->pshare->aggrmax_change) {\r
-                       RTL_W16(0x4ca, 0x0404);\r
-                       priv->pshare->aggrmax_change = 1;\r
-               }\r
-               else if (priv->pshare->iot_mode_enable && priv->pshare->aggrmax_change) {\r
-                       RTL_W16(0x4ca, priv->pshare->aggrmax_bak);\r
-                       priv->pshare->aggrmax_change = 0;\r
-               }\r
-       } \r
-#endif\r
-#ifdef TX_EARLY_MODE\r
-               unsigned int em_tp = ((priv->ext_stats.tx_avarage>>17) + (priv->ext_stats.rx_avarage>>17));\r
-               if (em_tp > 80)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (0x5e << 16) | (4 << 12) | (3 << 8) | 0x19);\r
-               else //if (em_tp < 75)\r
-                       ODM_Write4Byte(pDM_Odm, ODM_EDCA_BE_PARAM, (0x5e << 16) | (6 << 12) | (5 << 8) | 0x2b);\r
-#endif\r
-       if (switch_turbo)\r
-               ODM_IotEdcaSwitch( pDM_Odm, priv->pshare->iot_mode_enable );\r
-#endif\r
-}\r
-#endif\r
 \r
 \r
index 4557d158ce99455add825101bd699ecc5f6e9370..982df9249a19391de226dd38aef001302c4552da 100755 (executable)
@@ -21,7 +21,8 @@
 #ifndef        __PHYDMEDCATURBOCHECK_H__\r
 #define    __PHYDMEDCATURBOCHECK_H__\r
 \r
 #ifndef        __PHYDMEDCATURBOCHECK_H__\r
 #define    __PHYDMEDCATURBOCHECK_H__\r
 \r
-#define EDCATURBO_VERSION      "1.0"\r
+/*#define EDCATURBO_VERSION    "2.1"*/\r
+#define EDCATURBO_VERSION      "2.2"   /*2015.01.13*/\r
 \r
 typedef struct _EDCA_TURBO_\r
 {\r
 \r
 typedef struct _EDCA_TURBO_\r
 {\r
@@ -48,52 +49,9 @@ static u4Byte edca_setting_DL_GMode[HT_IOT_PEER_MAX] =
 // UNKNOWN             REALTEK_90      REALTEK_92SE    BROADCOM                RALINK          ATHEROS         CISCO           MERU,       MARVELL     92U_AP          SELF_AP\r
 { 0x4322,              0xa44f,                 0x5e4322,               0xa42b,                         0x5e4322,       0x4322,                 0xa42b,         0x5ea42b, 0xa44f,               0x5e4322,       0x5ea42b};\r
 \r
 // UNKNOWN             REALTEK_90      REALTEK_92SE    BROADCOM                RALINK          ATHEROS         CISCO           MERU,       MARVELL     92U_AP          SELF_AP\r
 { 0x4322,              0xa44f,                 0x5e4322,               0xa42b,                         0x5e4322,       0x4322,                 0xa42b,         0x5ea42b, 0xa44f,               0x5e4322,       0x5ea42b};\r
 \r
-\r
-//============================================================\r
-// EDCA Paramter for AP/ADSL   by Mingzhi 2011-11-22\r
-//============================================================\r
-#elif (DM_ODM_SUPPORT_TYPE &ODM_ADSL)\r
-enum qos_prio { BK, BE, VI, VO, VI_AG, VO_AG };\r
-\r
-static const struct ParaRecord rtl_ap_EDCA[] =\r
-{\r
-//ACM,AIFSN, ECWmin, ECWmax, TXOplimit\r
-     {0,     7,      4,      10,     0},            //BK\r
-     {0,     3,      4,      6,      0},             //BE\r
-     {0,     1,      3,      4,      188},         //VI\r
-     {0,     1,      2,      3,      102},         //VO\r
-     {0,     1,      3,      4,      94},          //VI_AG\r
-     {0,     1,      2,      3,      47},          //VO_AG\r
-};\r
-\r
-static const struct ParaRecord rtl_sta_EDCA[] =\r
-{\r
-//ACM,AIFSN, ECWmin, ECWmax, TXOplimit\r
-     {0,     7,      4,      10,     0},\r
-     {0,     3,      4,      10,     0},\r
-     {0,     2,      3,      4,      188},\r
-     {0,     2,      2,      3,      102},\r
-     {0,     2,      3,      4,      94},\r
-     {0,     2,      2,      3,      47},\r
-};\r
 #endif\r
 \r
 \r
 #endif\r
 \r
 \r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-#ifdef WIFI_WMM\r
-VOID\r
-ODM_IotEdcaSwitch(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN      unsigned char           enable\r
-       );\r
-#endif\r
-\r
-BOOLEAN\r
-ODM_ChooseIotMainSTA(\r
-       IN              PVOID                                   pDM_VOID,\r
-       IN      PSTA_INFO_T             pstat\r
-       );\r
-#endif\r
 \r
 VOID\r
 odm_EdcaTurboCheck(\r
 \r
 VOID\r
 odm_EdcaTurboCheck(\r
@@ -137,16 +95,6 @@ VOID
 odm_EdcaTurboCheckCE(\r
        IN      PVOID           pDM_VOID\r
        );\r
 odm_EdcaTurboCheckCE(\r
        IN      PVOID           pDM_VOID\r
        );\r
-#else\r
-VOID \r
-odm_IotEngine(\r
-       IN      PVOID           pDM_VOID\r
-       );\r
-\r
-VOID\r
-odm_EdcaParaInit(\r
-       IN      PVOID           pDM_VOID\r
-       );\r
 #endif\r
 \r
 #endif\r
 #endif\r
 \r
 #endif\r
index e8dc0a60b356535cdd28524a5c2e93b1813ab905..d7da773522c41f5ee58e962146bdd434d5159413 100755 (executable)
@@ -59,7 +59,6 @@
 #define GET_VERSION_TC(ic, txt)                (ODM_GetVersion_TC_##ic##txt())\r
 #define GET_VERSION(ic, txt) (pDM_Odm->bIsMPChip?GET_VERSION_MP(ic,txt):GET_VERSION_TC(ic,txt))\r
 \r
 #define GET_VERSION_TC(ic, txt)                (ODM_GetVersion_TC_##ic##txt())\r
 #define GET_VERSION(ic, txt) (pDM_Odm->bIsMPChip?GET_VERSION_MP(ic,txt):GET_VERSION_TC(ic,txt))\r
 \r
-\r
 u1Byte\r
 odm_QueryRxPwrPercentage(\r
        IN              s1Byte          AntPower\r
 u1Byte\r
 odm_QueryRxPwrPercentage(\r
        IN              s1Byte          AntPower\r
@@ -302,6 +301,7 @@ odm_SignalScaleMapping(
        IN      s4Byte CurrSig \r
 )\r
 {      \r
        IN      s4Byte CurrSig \r
 )\r
 {      \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        if(     (pDM_Odm->SupportPlatform == ODM_WIN) && \r
                (pDM_Odm->SupportInterface  != ODM_ITRF_PCIE) && //USB & SDIO\r
                (pDM_Odm->PatchID==10))//pMgntInfo->CustomerID == RT_CID_819x_Netcore\r
        if(     (pDM_Odm->SupportPlatform == ODM_WIN) && \r
                (pDM_Odm->SupportInterface  != ODM_ITRF_PCIE) && //USB & SDIO\r
                (pDM_Odm->PatchID==10))//pMgntInfo->CustomerID == RT_CID_819x_Netcore\r
@@ -313,8 +313,9 @@ odm_SignalScaleMapping(
                        (pDM_Odm->PatchID==19))//pMgntInfo->CustomerID == RT_CID_819x_Lenovo)\r
        {\r
                return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(pDM_Odm, CurrSig);\r
                        (pDM_Odm->PatchID==19))//pMgntInfo->CustomerID == RT_CID_819x_Lenovo)\r
        {\r
                return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(pDM_Odm, CurrSig);\r
-       }\r
-       else{           \r
+       }else\r
+#endif\r
+        {              \r
                return odm_SignalScaleMapping_92CSeries(pDM_Odm,CurrSig);\r
        }\r
        \r
                return odm_SignalScaleMapping_92CSeries(pDM_Odm,CurrSig);\r
        }\r
        \r
@@ -571,9 +572,19 @@ odm_EVMdbToPercentage(
 \r
        //DbgPrint("Value=%d\n", Value);\r
        //ODM_RT_DISP(FRX, RX_PHY_SQ, ("EVMdbToPercentage92C Value=%d / %x \n", ret_val, ret_val));\r
 \r
        //DbgPrint("Value=%d\n", Value);\r
        //ODM_RT_DISP(FRX, RX_PHY_SQ, ("EVMdbToPercentage92C Value=%d / %x \n", ret_val, ret_val));\r
+       #ifdef ODM_EVM_ENHANCE_ANTDIV\r
                \r
        if(ret_val >= 0)\r
                ret_val = 0;\r
                \r
        if(ret_val >= 0)\r
                ret_val = 0;\r
+               if(ret_val <= -40)\r
+                       ret_val = -40;\r
+\r
+               ret_val = 0 - ret_val;\r
+               ret_val*=3;\r
+\r
+       #else\r
+               if(ret_val >= 0)\r
+                       ret_val = 0;\r
        if(ret_val <= -33)\r
                ret_val = -33;\r
 \r
        if(ret_val <= -33)\r
                ret_val = -33;\r
 \r
@@ -582,6 +593,7 @@ odm_EVMdbToPercentage(
 \r
        if(ret_val == 99)\r
                ret_val = 100;\r
 \r
        if(ret_val == 99)\r
                ret_val = 100;\r
+       #endif\r
 \r
        return(ret_val);\r
 }\r
 \r
        return(ret_val);\r
 }\r
@@ -644,7 +656,7 @@ odm_RxPhyStatus92CSeries_Parsing(
        u1Byte                          LNA_idx, VGA_idx;\r
        PPHY_STATUS_RPT_8192CD_T pPhyStaRpt = (PPHY_STATUS_RPT_8192CD_T)pPhyStatus;\r
 \r
        u1Byte                          LNA_idx, VGA_idx;\r
        PPHY_STATUS_RPT_8192CD_T pPhyStaRpt = (PPHY_STATUS_RPT_8192CD_T)pPhyStatus;\r
 \r
-       isCCKrate = (pPktinfo->DataRate <= DESC_RATE11M)?TRUE :FALSE;\r
+       isCCKrate = (pPktinfo->DataRate <= ODM_RATE11M) ? TRUE : FALSE;\r
        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;\r
        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
 \r
        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;\r
        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
 \r
@@ -676,58 +688,101 @@ odm_RxPhyStatus92CSeries_Parsing(
                        VGA_idx = (cck_agc_rpt & 0x1F); \r
                        if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8192E))\r
                        {\r
                        VGA_idx = (cck_agc_rpt & 0x1F); \r
                        if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8192E))\r
                        {\r
-                               switch(LNA_idx)\r
+                               if(pDM_Odm->cck_agc_report_type == 0 && (pDM_Odm->SupportICType & ODM_RTL8192E) )\r
                                {\r
                                {\r
-                                       case 7:\r
-                                               if(VGA_idx <= 27)\r
-                                                       rx_pwr_all = -100 + 2*(27-VGA_idx); //VGA_idx = 27~2\r
-                                               else\r
+                                       switch(LNA_idx)\r
+                                       {\r
+                                               case 7:\r
+                                                       rx_pwr_all = -45  - 2*(VGA_idx);\r
+                                                       break;\r
+                                               case 6:\r
+                                                       rx_pwr_all = -43 -2*(VGA_idx); \r
+                                                       break;\r
+                                               case 5:\r
+                                                       rx_pwr_all = -27 - 2*(VGA_idx); \r
+                                                       break;\r
+                                               case 4:\r
+                                                       rx_pwr_all = -21 - 2*(VGA_idx); \r
+                                                       break;\r
+                                               case 3:\r
+                                                       rx_pwr_all = -18 - 2*(VGA_idx); \r
+                                                       break;\r
+                                               case 2:\r
+                                                       rx_pwr_all = -6 - 2*(VGA_idx);\r
+                                                       break;\r
+                                               case 1:\r
+                                                       rx_pwr_all = 9 -2*(VGA_idx);\r
+                                                       break;\r
+                                               case 0:\r
+                                                       rx_pwr_all = 15 -2*(VGA_idx);\r
+                                                       break;\r
+                                               default:\r
+\r
+                                                       break;\r
+                                       }\r
+\r
+                                       if(pDM_Odm->BoardType & ODM_BOARD_EXT_LNA)\r
+                                       {\r
+                                               rx_pwr_all -= pDM_Odm->ExtLNAGain;\r
+                                       }\r
+                                       \r
+                                       PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
+                               }\r
+                               else\r
+                               {                                       \r
+                                       switch(LNA_idx)\r
+                                       {\r
+                                               case 7:\r
+                                                       if(VGA_idx <= 27)\r
+                                                               rx_pwr_all = -100 + 2*(27-VGA_idx); //VGA_idx = 27~2\r
+                                                       else\r
                                                        rx_pwr_all = -100;\r
                                                        rx_pwr_all = -100;\r
-                                               break;\r
-                                       case 6:\r
+                                                       break;\r
+                                               case 6:\r
                                                        rx_pwr_all = -48 + 2*(2-VGA_idx); //VGA_idx = 2~0\r
                                                        rx_pwr_all = -48 + 2*(2-VGA_idx); //VGA_idx = 2~0\r
-                                               break;\r
-                                       case 5:\r
+                                                       break;\r
+                                               case 5:\r
                                                        rx_pwr_all = -42 + 2*(7-VGA_idx); //VGA_idx = 7~5\r
                                                        rx_pwr_all = -42 + 2*(7-VGA_idx); //VGA_idx = 7~5\r
-                                               break;\r
-                                       case 4:\r
+                                                       break;\r
+                                               case 4:\r
                                                        rx_pwr_all = -36 + 2*(7-VGA_idx); //VGA_idx = 7~4\r
                                                        rx_pwr_all = -36 + 2*(7-VGA_idx); //VGA_idx = 7~4\r
-                                               break;\r
-                                       case 3:\r
+                                                       break;\r
+                                               case 3:\r
                                                        //rx_pwr_all = -28 + 2*(7-VGA_idx); //VGA_idx = 7~0\r
                                                        rx_pwr_all = -24 + 2*(7-VGA_idx); //VGA_idx = 7~0\r
                                                        //rx_pwr_all = -28 + 2*(7-VGA_idx); //VGA_idx = 7~0\r
                                                        rx_pwr_all = -24 + 2*(7-VGA_idx); //VGA_idx = 7~0\r
-                                               break;\r
-                                       case 2:\r
-                                               if(cck_highpwr)\r
-                                                       rx_pwr_all = -12 + 2*(5-VGA_idx); //VGA_idx = 5~0\r
-                                               else\r
-                                                       rx_pwr_all = -6+ 2*(5-VGA_idx);\r
-                                               break;\r
-                                       case 1:\r
-                                                       rx_pwr_all = 8-2*VGA_idx;\r
-                                               break;\r
-                                       case 0:\r
+                                                       break;\r
+                                               case 2:\r
+                                                       if(cck_highpwr)\r
+                                                               rx_pwr_all = -12 + 2*(5-VGA_idx); //VGA_idx = 5~0\r
+                                                       else\r
+                                                               rx_pwr_all = -6+ 2*(5-VGA_idx);\r
+                                                       break;\r
+                                               case 1:\r
+                                                               rx_pwr_all = 8-2*VGA_idx;\r
+                                                       break;\r
+                                               case 0:\r
                                                        rx_pwr_all = 14-2*VGA_idx;\r
                                                        rx_pwr_all = 14-2*VGA_idx;\r
-                                               break;\r
-                                       default:\r
-                                               //DbgPrint("CCK Exception default\n");\r
-                                               break;\r
-                               }\r
-                               rx_pwr_all += 6;\r
+                                                       break;\r
+                                               default:\r
+                                                       //DbgPrint("CCK Exception default\n");\r
+                                                       break;\r
+                                       }\r
+                                       rx_pwr_all += 8;\r
 \r
 \r
-                               //2012.10.08 LukeLee: Modify for 92E CCK RSSI\r
-                               if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
-                                       rx_pwr_all += 10;\r
+                                       //2012.10.08 LukeLee: Modify for 92E CCK RSSI\r
+                                       if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+                                               rx_pwr_all += 8;\r
                                \r
                                \r
-                               PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
-                               if(cck_highpwr == FALSE)\r
-                               {\r
-                                       if(PWDB_ALL >= 80)\r
-                                               PWDB_ALL = ((PWDB_ALL-80)<<1)+((PWDB_ALL-80)>>1)+80;\r
-                                       else if((PWDB_ALL <= 78) && (PWDB_ALL >= 20))\r
-                                               PWDB_ALL += 3;\r
-                                       if(PWDB_ALL>100)\r
-                                               PWDB_ALL = 100;\r
+                                       PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
+                                       if(cck_highpwr == FALSE)\r
+                                       {\r
+                                               if(PWDB_ALL >= 80)\r
+                                                       PWDB_ALL = ((PWDB_ALL-80)<<1)+((PWDB_ALL-80)>>1)+80;\r
+                                               else if((PWDB_ALL <= 78) && (PWDB_ALL >= 20))\r
+                                                       PWDB_ALL += 3;\r
+                                               if(PWDB_ALL>100)\r
+                                                       PWDB_ALL = 100;\r
+                                       }\r
                                }\r
                        }\r
                        else if(pDM_Odm->SupportICType & (ODM_RTL8723B))\r
                                }\r
                        }\r
                        else if(pDM_Odm->SupportICType & (ODM_RTL8723B))\r
@@ -830,16 +885,17 @@ odm_RxPhyStatus92CSeries_Parsing(
                {\r
                        u1Byte  SQ,SQ_rpt;                      \r
                        \r
                {\r
                        u1Byte  SQ,SQ_rpt;                      \r
                        \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)                   \r
                        if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
                                (pDM_Odm->PatchID==RT_CID_819x_Lenovo)){\r
                                SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,0,0);\r
                        if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
                                (pDM_Odm->PatchID==RT_CID_819x_Lenovo)){\r
                                SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,0,0);\r
-                       }\r
-                       else if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
+                       }else if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
                                (pDM_Odm->PatchID==RT_CID_819x_Acer))\r
                        {\r
                                SQ = odm_SQ_process_patch_RT_CID_819x_Acer(pDM_Odm,isCCKrate,PWDB_ALL,0,0);\r
                                (pDM_Odm->PatchID==RT_CID_819x_Acer))\r
                        {\r
                                SQ = odm_SQ_process_patch_RT_CID_819x_Acer(pDM_Odm,isCCKrate,PWDB_ALL,0,0);\r
-                       }\r
-                       else if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest){\r
+                       }else \r
+#endif\r
+                       if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest){\r
                                SQ = 100;\r
                        }\r
                        else{                                           \r
                                SQ = 100;\r
                        }\r
                        else{                                           \r
@@ -860,7 +916,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
                }\r
        }\r
                        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
                }\r
        }\r
-       else //is OFDM rate\r
+       else //is OFDM rate\r
        {\r
                pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
 \r
        {\r
                pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
 \r
@@ -878,7 +934,6 @@ odm_RxPhyStatus92CSeries_Parsing(
 \r
                        rx_pwr[i] = ((pPhyStaRpt->path_agc[i].gain& 0x3F)*2) - 110;\r
 \r
 \r
                        rx_pwr[i] = ((pPhyStaRpt->path_agc[i].gain& 0x3F)*2) - 110;\r
 \r
-\r
                #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
                        pPhyInfo->RxPwr[i] = rx_pwr[i];\r
                #endif  \r
                #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
                        pPhyInfo->RxPwr[i] = rx_pwr[i];\r
                #endif  \r
@@ -888,9 +943,10 @@ odm_RxPhyStatus92CSeries_Parsing(
                        total_rssi += RSSI;\r
                        //RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));\r
 \r
                        total_rssi += RSSI;\r
                        //RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));\r
 \r
-                       //Modification for ext-LNA board\r
+\r
                        if(pDM_Odm->SupportICType&ODM_RTL8192C)\r
                        {       \r
                        if(pDM_Odm->SupportICType&ODM_RTL8192C)\r
                        {       \r
+                               //Modification for ext-LNA board        \r
                                if(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA))\r
                                {\r
                                        if((pPhyStaRpt->path_agc[i].trsw) == 1)\r
                                if(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA))\r
                                {\r
                                        if((pPhyStaRpt->path_agc[i].trsw) == 1)\r
@@ -905,7 +961,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                \r
                        pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;\r
 \r
                \r
                        pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;\r
 \r
-               #if (DM_ODM_SUPPORT_TYPE &  (/*ODM_WIN|*/ODM_CE|ODM_AP|ODM_ADSL))\r
+               #if (DM_ODM_SUPPORT_TYPE &  (/*ODM_WIN|*/ODM_CE|ODM_AP))\r
                        //Get Rx snr value in DB                \r
                        pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = (s4Byte)(pPhyStaRpt->path_rxsnr[i]/2);\r
                #endif\r
                        //Get Rx snr value in DB                \r
                        pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = (s4Byte)(pPhyStaRpt->path_rxsnr[i]/2);\r
                #endif\r
@@ -913,6 +969,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                        /* Record Signal Strength for next packet */\r
                        //if(pPktinfo->bPacketMatchBSSID)\r
                        {                               \r
                        /* Record Signal Strength for next packet */\r
                        //if(pPktinfo->bPacketMatchBSSID)\r
                        {                               \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)                           \r
                                if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
                                        (pDM_Odm->PatchID==RT_CID_819x_Lenovo))\r
                                {\r
                                if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
                                        (pDM_Odm->PatchID==RT_CID_819x_Lenovo))\r
                                {\r
@@ -925,7 +982,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                                {\r
                                        pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Acer(pDM_Odm,isCCKrate,PWDB_ALL,0,RSSI);\r
                                }       \r
                                {\r
                                        pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Acer(pDM_Odm,isCCKrate,PWDB_ALL,0,RSSI);\r
                                }       \r
-                               \r
+#endif                         \r
                        }\r
                }\r
                \r
                        }\r
                }\r
                \r
@@ -936,7 +993,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                rx_pwr_all = (((pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all) >> 1 )& 0x7f) -110;             \r
                \r
                PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);  \r
                rx_pwr_all = (((pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all) >> 1 )& 0x7f) -110;             \r
                \r
                PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);  \r
-               //RT_DISP(FRX, RX_PHY_SS, ("PWDB_ALL=%d\n",PWDB_ALL));          \r
+       \r
        \r
                pPhyInfo->RxPWDBAll = PWDB_ALL;\r
                //ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));\r
        \r
                pPhyInfo->RxPWDBAll = PWDB_ALL;\r
                //ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));\r
@@ -955,7 +1012,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                        //\r
                        // (3)EVM of HT rate\r
                        //\r
                        //\r
                        // (3)EVM of HT rate\r
                        //\r
-                       if(pPktinfo->DataRate >=DESC_RATEMCS8 && pPktinfo->DataRate <=DESC_RATEMCS15)\r
+                       if(pPktinfo->DataRate >=ODM_RATEMCS8 && pPktinfo->DataRate <=ODM_RATEMCS15)\r
                                Max_spatial_stream = 2; //both spatial stream make sense\r
                        else\r
                                Max_spatial_stream = 1; //only spatial stream 1 makes sense\r
                                Max_spatial_stream = 2; //both spatial stream make sense\r
                        else\r
                                Max_spatial_stream = 1; //only spatial stream 1 makes sense\r
@@ -967,7 +1024,6 @@ odm_RxPhyStatus92CSeries_Parsing(
                                // value to positive one, then the dbm value (which is supposed to be negative)  is not correct anymore.                        \r
                                EVM = odm_EVMdbToPercentage( (pPhyStaRpt->stream_rxevm[i] ));   //dbm\r
 \r
                                // value to positive one, then the dbm value (which is supposed to be negative)  is not correct anymore.                        \r
                                EVM = odm_EVMdbToPercentage( (pPhyStaRpt->stream_rxevm[i] ));   //dbm\r
 \r
-                               //RT_DISP(FRX, RX_PHY_SQ, ("RXRATE=%x RXEVM=%x EVM=%s%d\n", \r
                                //GET_RX_STATUS_DESC_RX_MCS(pDesc), pDrvInfo->rxevm[i], "%", EVM));\r
                                \r
                                //if(pPktinfo->bPacketMatchBSSID)\r
                                //GET_RX_STATUS_DESC_RX_MCS(pDesc), pDrvInfo->rxevm[i], "%", EVM));\r
                                \r
                                //if(pPktinfo->bPacketMatchBSSID)\r
@@ -991,33 +1047,46 @@ odm_RxPhyStatus92CSeries_Parsing(
        {               \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
                // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
        {               \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
                // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
+               if(pDM_Odm->PatchID == RT_CID_819x_Acer)\r
+               {\r
+                       if(IS_HARDWARE_TYPE_8723BE(pDM_Odm->Adapter))\r
+                               pPhyInfo->SignalStrength = (u1Byte) (PWDB_ALL - 4);\r
+                       else if(IS_HARDWARE_TYPE_8188EE(pDM_Odm->Adapter))\r
+                               pPhyInfo->SignalStrength = (u1Byte) (PWDB_ALL + 6);\r
+                       else\r
+                               pPhyInfo->SignalStrength = (u1Byte) (PWDB_ALL - 4);\r
+               }\r
+               else\r
                pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));//PWDB_ALL;\r
 #else\r
                pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));//PWDB_ALL;\r
 #else\r
-#ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING\r
+       #ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING\r
                pPhyInfo->SignalStrength = (u1Byte)PWDB_ALL;\r
                pPhyInfo->SignalStrength = (u1Byte)PWDB_ALL;\r
-#else\r
+       #else\r
                pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));//PWDB_ALL;\r
                pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));//PWDB_ALL;\r
-#endif\r
-#endif\r
+       #endif\r
+#endif /*#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)*/\r
        }\r
        else\r
        {       \r
                if (rf_rx_num != 0)\r
                {                       \r
        }\r
        else\r
        {       \r
                if (rf_rx_num != 0)\r
                {                       \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+               #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
                        // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
                        // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
-                       pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));//PWDB_ALL;\r
-#else\r
-#ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING\r
+                       if(pDM_Odm->PatchID == RT_CID_819x_Acer)\r
+                               pPhyInfo->SignalStrength = (u1Byte) (total_rssi/=rf_rx_num);\r
+                       else\r
+                               pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));/*PWDB*/\r
+               #else\r
+                       #ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING\r
                        total_rssi/=rf_rx_num;\r
                        pPhyInfo->SignalStrength = (u1Byte)total_rssi;\r
                        total_rssi/=rf_rx_num;\r
                        pPhyInfo->SignalStrength = (u1Byte)total_rssi;\r
-#else\r
+                       #else\r
                        pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi/=rf_rx_num));\r
                        pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi/=rf_rx_num));\r
-#endif\r
-#endif\r
+                       #endif\r
+               #endif\r
                }\r
        }\r
                }\r
        }\r
-#endif\r
+#endif /*#if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))*/\r
 \r
        //DbgPrint("isCCKrate = %d, pPhyInfo->RxPWDBAll = %d, pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a = 0x%x\n", \r
                //isCCKrate, pPhyInfo->RxPWDBAll, pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a);\r
 \r
        //DbgPrint("isCCKrate = %d, pPhyInfo->RxPWDBAll = %d, pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a = 0x%x\n", \r
                //isCCKrate, pPhyInfo->RxPWDBAll, pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a);\r
@@ -1033,351 +1102,370 @@ odm_RxPhyStatus92CSeries_Parsing(
 }\r
 #endif\r
 \r
 }\r
 #endif\r
 \r
-\r
 #if    ODM_IC_11AC_SERIES_SUPPORT\r
 \r
 VOID\r
 #if    ODM_IC_11AC_SERIES_SUPPORT\r
 \r
 VOID\r
-odm_RxPhyStatusJaguarSeries_Parsing(\r
-       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
-       OUT             PODM_PHY_INFO_T                 pPhyInfo,               \r
-       IN              pu1Byte                                         pPhyStatus,\r
-       IN              PODM_PACKET_INFO_T                      pPktinfo\r
-       )\r
-{                                                      \r
-       u1Byte                          i, Max_spatial_stream;\r
-       s1Byte                          rx_pwr[4], rx_pwr_all=0;\r
-       u1Byte                          EVM = 0, EVMdbm, PWDB_ALL = 0, PWDB_ALL_BT;\r
-       u1Byte                          RSSI, total_rssi=0;\r
-       u1Byte                          isCCKrate=0;    \r
-       u1Byte                          rf_rx_num = 0;\r
-       u1Byte                          cck_highpwr = 0;\r
-       u1Byte                          LNA_idx, VGA_idx;\r
-\r
-       \r
-       PPHY_STATUS_RPT_8812_T pPhyStaRpt = (PPHY_STATUS_RPT_8812_T)pPhyStatus; \r
-\r
-       if(pPktinfo->DataRate <= DESC_RATE54M)\r
-       {\r
-               switch(pPhyStaRpt->r_RFMOD){\r
-                       case 1:\r
-                               if(pPhyStaRpt->sub_chnl == 0)\r
-                                       pPhyInfo->BandWidth = 1;\r
-                               else\r
-                                       pPhyInfo->BandWidth = 0;\r
-                               break;\r
+odm_RxPhyBWJaguarSeries_Parsing(\r
+       OUT             PODM_PHY_INFO_T                 pPhyInfo,\r
+       IN              PODM_PACKET_INFO_T                      pPktinfo,\r
+       IN              PPHY_STATUS_RPT_8812_T          pPhyStaRpt\r
+)\r
+{\r
 \r
 \r
-                       case 2:\r
-                               if(pPhyStaRpt->sub_chnl == 0)\r
-                                       pPhyInfo->BandWidth = 2;\r
-                               else if(pPhyStaRpt->sub_chnl == 9 || pPhyStaRpt->sub_chnl == 10)\r
-                                       pPhyInfo->BandWidth = 1;\r
-                               else \r
-                                       pPhyInfo->BandWidth = 0;\r
-                               break;\r
+       if(pPktinfo->DataRate <= ODM_RATE54M) {\r
+               switch (pPhyStaRpt->r_RFMOD) {\r
+               case 1:\r
+                       if (pPhyStaRpt->sub_chnl == 0)\r
+                               pPhyInfo->BandWidth = 1;\r
+                       else\r
+                               pPhyInfo->BandWidth = 0;\r
+                       break;\r
 \r
 \r
-                       default:        case 0:\r
+               case 2:\r
+                       if (pPhyStaRpt->sub_chnl == 0)\r
+                               pPhyInfo->BandWidth = 2;\r
+                       else if (pPhyStaRpt->sub_chnl == 9 || pPhyStaRpt->sub_chnl == 10)\r
+                               pPhyInfo->BandWidth = 1;\r
+                       else\r
                                pPhyInfo->BandWidth = 0;\r
                                pPhyInfo->BandWidth = 0;\r
-                               break;                  \r
-               }       \r
+                       break;\r
+\r
+               default:\r
+               case 0:\r
+                       pPhyInfo->BandWidth = 0;\r
+                       break;\r
+               }\r
        }\r
 \r
        }\r
 \r
-       if(pPktinfo->DataRate <= DESC_RATE11M)\r
+}\r
+\r
+VOID\r
+odm_RxPhyStatusJaguarSeries_Parsing(\r
+       IN OUT  PDM_ODM_T                                       pDM_Odm,\r
+       OUT             PODM_PHY_INFO_T                 pPhyInfo,\r
+       IN              pu1Byte                                         pPhyStatus,\r
+       IN              PODM_PACKET_INFO_T                      pPktinfo\r
+)\r
+{\r
+       u1Byte                                  i, Max_spatial_stream;\r
+       s1Byte                                  rx_pwr[4], rx_pwr_all = 0;\r
+       u1Byte                                  EVM, EVMdbm, PWDB_ALL = 0, PWDB_ALL_BT;\r
+       u1Byte                                  RSSI, total_rssi = 0;\r
+       u1Byte                                  isCCKrate = 0;\r
+       u1Byte                                  rf_rx_num = 0;\r
+       u1Byte                                  cck_highpwr = 0;\r
+       u1Byte                                  LNA_idx, VGA_idx;\r
+       PPHY_STATUS_RPT_8812_T pPhyStaRpt = (PPHY_STATUS_RPT_8812_T)pPhyStatus;\r
+\r
+       if (pDM_Odm->SupportICType == ODM_RTL8812 || pDM_Odm->SupportICType == ODM_RTL8821)\r
+               odm_RxPhyBWJaguarSeries_Parsing(pPhyInfo, pPktinfo, pPhyStaRpt);\r
+\r
+       if (pPktinfo->DataRate <= ODM_RATE11M)\r
                isCCKrate = TRUE;\r
        else\r
                isCCKrate = FALSE;\r
                isCCKrate = TRUE;\r
        else\r
                isCCKrate = FALSE;\r
-       \r
+\r
        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;\r
        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;\r
        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
+       pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_C] = -1;\r
+       pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_D] = -1;\r
 \r
 \r
-\r
-       if(isCCKrate)\r
-       {\r
+       if (isCCKrate) {\r
                u1Byte cck_agc_rpt;\r
                pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;\r
                u1Byte cck_agc_rpt;\r
                pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;\r
-               // \r
-               // (1)Hardware does not provide RSSI for CCK\r
-               // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)\r
-               //\r
 \r
 \r
-               //if(pHalData->eRFPowerState == eRfOn)\r
-                       cck_highpwr = pDM_Odm->bCckHighPower;\r
-               //else\r
-               //      cck_highpwr = FALSE;\r
+               /*(1)Hardware does not provide RSSI for CCK*/\r
+               /*(2)PWDB, Average PWDB calculated by hardware (for rate adaptive)*/\r
+\r
+               /*if(pHalData->eRFPowerState == eRfOn)*/\r
+               cck_highpwr = pDM_Odm->bCckHighPower;\r
+               /*else*/\r
+               /*cck_highpwr = FALSE;*/\r
 \r
                cck_agc_rpt =  pPhyStaRpt->cfosho[0] ;\r
 \r
                cck_agc_rpt =  pPhyStaRpt->cfosho[0] ;\r
-               LNA_idx = ((cck_agc_rpt & 0xE0) >>5);\r
-               VGA_idx = (cck_agc_rpt & 0x1F); \r
-               \r
-               if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-               {\r
-                       switch(LNA_idx)\r
-                       {\r
-                               case 7:\r
-                                       if(VGA_idx <= 27)\r
-                                               rx_pwr_all = -100 + 2*(27-VGA_idx); //VGA_idx = 27~2\r
-                                       else\r
-                                               rx_pwr_all = -100;\r
-                                       break;\r
-                               case 6:\r
-                                               rx_pwr_all = -48 + 2*(2-VGA_idx); //VGA_idx = 2~0\r
-                                       break;\r
-                               case 5:\r
-                                               rx_pwr_all = -42 + 2*(7-VGA_idx); //VGA_idx = 7~5\r
-                                       break;\r
-                               case 4:\r
-                                               rx_pwr_all = -36 + 2*(7-VGA_idx); //VGA_idx = 7~4\r
-                                       break;\r
-                               case 3:\r
-                                               //rx_pwr_all = -28 + 2*(7-VGA_idx); //VGA_idx = 7~0\r
-                                               rx_pwr_all = -24 + 2*(7-VGA_idx); //VGA_idx = 7~0\r
-                                       break;\r
-                               case 2:\r
-                                       if(cck_highpwr)\r
-                                               rx_pwr_all = -12 + 2*(5-VGA_idx); //VGA_idx = 5~0\r
-                                       else\r
-                                               rx_pwr_all = -6+ 2*(5-VGA_idx);\r
-                                       break;\r
-                               case 1:\r
-                                               rx_pwr_all = 8-2*VGA_idx;\r
-                                       break;\r
-                               case 0:\r
-                                               rx_pwr_all = 14-2*VGA_idx;\r
-                                       break;\r
-                               default:\r
-                                       //DbgPrint("CCK Exception default\n");\r
-                                       break;\r
+               LNA_idx = ((cck_agc_rpt & 0xE0) >> 5);\r
+               VGA_idx = (cck_agc_rpt & 0x1F);\r
+\r
+               if (pDM_Odm->SupportICType == ODM_RTL8812) {\r
+                       switch (LNA_idx) {\r
+                       case 7:\r
+                               if (VGA_idx <= 27)\r
+                                       rx_pwr_all = -100 + 2 * (27 - VGA_idx); /*VGA_idx = 27~2*/\r
+                               else\r
+                                       rx_pwr_all = -100;\r
+                               break;\r
+                       case 6:\r
+                               rx_pwr_all = -48 + 2 * (2 - VGA_idx); /*VGA_idx = 2~0*/\r
+                               break;\r
+                       case 5:\r
+                               rx_pwr_all = -42 + 2 * (7 - VGA_idx); /*VGA_idx = 7~5*/\r
+                               break;\r
+                       case 4:\r
+                               rx_pwr_all = -36 + 2 * (7 - VGA_idx); /*VGA_idx = 7~4*/\r
+                               break;\r
+                       case 3:\r
+                               /*rx_pwr_all = -28 + 2*(7-VGA_idx); VGA_idx = 7~0*/\r
+                               rx_pwr_all = -24 + 2 * (7 - VGA_idx); /*VGA_idx = 7~0*/\r
+                               break;\r
+                       case 2:\r
+                               if (cck_highpwr)\r
+                                       rx_pwr_all = -12 + 2 * (5 - VGA_idx); /*VGA_idx = 5~0*/\r
+                               else\r
+                                       rx_pwr_all = -6 + 2 * (5 - VGA_idx);\r
+                               break;\r
+                       case 1:\r
+                               rx_pwr_all = 8 - 2 * VGA_idx;\r
+                               break;\r
+                       case 0:\r
+                               rx_pwr_all = 14 - 2 * VGA_idx;\r
+                               break;\r
+                       default:\r
+                               /*DbgPrint("CCK Exception default\n");*/\r
+                               break;\r
                        }\r
                        rx_pwr_all += 6;\r
                        PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
                        }\r
                        rx_pwr_all += 6;\r
                        PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
-                       \r
-                       if(cck_highpwr == FALSE)\r
-                       {\r
-                               if(PWDB_ALL >= 80)\r
-                                       PWDB_ALL = ((PWDB_ALL-80)<<1)+((PWDB_ALL-80)>>1)+80;\r
-                               else if((PWDB_ALL <= 78) && (PWDB_ALL >= 20))\r
+\r
+                       if (cck_highpwr == FALSE) {\r
+                               if (PWDB_ALL >= 80)\r
+                                       PWDB_ALL = ((PWDB_ALL - 80) << 1) + ((PWDB_ALL - 80) >> 1) + 80;\r
+                               else if ((PWDB_ALL <= 78) && (PWDB_ALL >= 20))\r
                                        PWDB_ALL += 3;\r
                                        PWDB_ALL += 3;\r
-                               if(PWDB_ALL>100)\r
+                               if (PWDB_ALL > 100)\r
                                        PWDB_ALL = 100;\r
                        }\r
                                        PWDB_ALL = 100;\r
                        }\r
-               }\r
-               else if(pDM_Odm->SupportICType == ODM_RTL8821)\r
-               {\r
+               } else if (pDM_Odm->SupportICType & (ODM_RTL8821 | ODM_RTL8881A)) {\r
                        s1Byte Pout = -6;\r
                        s1Byte Pout = -6;\r
-                               \r
-                       switch(LNA_idx)\r
-                               {\r
-                               case 5:\r
-                                       rx_pwr_all = Pout -32 -(2*VGA_idx);\r
-                                               break;\r
-                               case 4:\r
-                                       rx_pwr_all = Pout -24 -(2*VGA_idx);\r
-                                               break;\r
-                               case 2:\r
-                                       rx_pwr_all = Pout -11 -(2*VGA_idx);\r
-                                               break;\r
-                               case 1:\r
-                                       rx_pwr_all = Pout + 5 -(2*VGA_idx);\r
-                                               break;\r
-                               case 0:\r
-                                       rx_pwr_all = Pout + 21 -(2*VGA_idx);\r
-                                               break;\r
-                               }\r
+\r
+                       switch (LNA_idx) {\r
+                       case 5:\r
+                               rx_pwr_all = Pout - 32 - (2 * VGA_idx);\r
+                               break;\r
+                       case 4:\r
+                               rx_pwr_all = Pout - 24 - (2 * VGA_idx);\r
+                               break;\r
+                       case 2:\r
+                               rx_pwr_all = Pout - 11 - (2 * VGA_idx);\r
+                               break;\r
+                       case 1:\r
+                               rx_pwr_all = Pout + 5 - (2 * VGA_idx);\r
+                               break;\r
+                       case 0:\r
+                               rx_pwr_all = Pout + 21 - (2 * VGA_idx);\r
+                               break;\r
+                       }\r
+                       PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
+               } else if (pDM_Odm->SupportICType == ODM_RTL8814A || pDM_Odm->SupportICType == ODM_RTL8822B) {\r
+                       s1Byte Pout = -6;\r
+\r
+                       switch (LNA_idx) {\r
+                       /*CCK only use LNA: 2, 3, 5, 7*/\r
+                       case 7:\r
+                               rx_pwr_all = Pout - 32 - (2 * VGA_idx);\r
+                               break;\r
+                       case 5:\r
+                               rx_pwr_all = Pout - 22 - (2 * VGA_idx);\r
+                               break;\r
+                       case 3:\r
+                               rx_pwr_all = Pout - 2 - (2 * VGA_idx);\r
+                               break;\r
+                       case 2:\r
+                               rx_pwr_all = Pout + 5 - (2 * VGA_idx);\r
+                               break;\r
+                       /*case 6:*/\r
+                       /*rx_pwr_all = Pout -26 - (2*VGA_idx);*/\r
+                       /*break;*/\r
+                       /*case 4:*/\r
+                       /*rx_pwr_all = Pout - 8 - (2*VGA_idx);*/\r
+                       /*break;*/\r
+                       /*case 1:*/\r
+                       /*rx_pwr_all = Pout + 21 - (2*VGA_idx);*/\r
+                       /*break;*/\r
+                       /*case 0:*/\r
+                       /*rx_pwr_all = Pout + 10 - (2*VGA_idx);*/\r
+/*                     //      break;*/\r
+                       default:\r
+/*                             //DbgPrint("CCK Exception default\n");*/\r
+                               break;\r
+                       }\r
                        PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
                }\r
                        PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
                }\r
-       \r
+\r
                pPhyInfo->RxPWDBAll = PWDB_ALL;\r
                pPhyInfo->RxPWDBAll = PWDB_ALL;\r
-               //if(pPktinfo->StationID == 0)\r
-               //{\r
-               //      DbgPrint("CCK: LNA_idx = %d, VGA_idx = %d, pPhyInfo->RxPWDBAll = %d\n", \r
-               //              LNA_idx, VGA_idx, pPhyInfo->RxPWDBAll);\r
-               //}\r
+/*             //if(pPktinfo->StationID == 0)*/\r
+/*             //{*/\r
+/*             //      DbgPrint("CCK: LNA_idx = %d, VGA_idx = %d, pPhyInfo->RxPWDBAll = %d\n",*/\r
+/*             //              LNA_idx, VGA_idx, pPhyInfo->RxPWDBAll);*/\r
+/*             //}*/\r
 #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
                pPhyInfo->BTRxRSSIPercentage = PWDB_ALL;\r
                pPhyInfo->RecvSignalPower = rx_pwr_all;\r
 #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
                pPhyInfo->BTRxRSSIPercentage = PWDB_ALL;\r
                pPhyInfo->RecvSignalPower = rx_pwr_all;\r
-#endif         \r
-               //\r
-               // (3) Get Signal Quality (EVM)\r
-               //\r
-               //if(pPktinfo->bPacketMatchBSSID)\r
-               {\r
-                       u1Byte  SQ,SQ_rpt;                      \r
-                       \r
-                       if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
-                               (pDM_Odm->PatchID==RT_CID_819x_Lenovo))\r
-                       {\r
-                               SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,0,0);\r
-                       }\r
-                       else if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest)\r
-                       {\r
+#endif\r
+               /*(3) Get Signal Quality (EVM)*/\r
+               if (pPktinfo->bPacketMatchBSSID) {\r
+                       u1Byte  SQ, SQ_rpt;\r
+\r
+                       if ((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
+                               (pDM_Odm->PatchID == RT_CID_819x_Lenovo)) {\r
+                               SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm, isCCKrate, PWDB_ALL, 0, 0);\r
+                       } else if (pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest) {\r
                                SQ = 100;\r
                                SQ = 100;\r
-                       }\r
-                       else\r
-                       {                                               \r
+                       } else {\r
                                SQ_rpt = pPhyStaRpt->pwdb_all;\r
                                SQ_rpt = pPhyStaRpt->pwdb_all;\r
-                                       \r
-                               if(SQ_rpt > 64)\r
+\r
+                               if (SQ_rpt > 64)\r
                                        SQ = 0;\r
                                else if (SQ_rpt < 20)\r
                                        SQ = 100;\r
                                else\r
                                        SQ = 0;\r
                                else if (SQ_rpt < 20)\r
                                        SQ = 100;\r
                                else\r
-                                       SQ = ((64-SQ_rpt) * 100) / 44;\r
-                       \r
+                                       SQ = ((64 - SQ_rpt) * 100) / 44;\r
                        }\r
                        }\r
-                       \r
-                       //DbgPrint("cck SQ = %d\n", SQ);\r
+\r
+/*                     //DbgPrint("cck SQ = %d\n", SQ);*/\r
                        pPhyInfo->SignalQuality = SQ;\r
                        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = SQ;\r
                        pPhyInfo->SignalQuality = SQ;\r
                        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = SQ;\r
-                       pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
                }\r
                }\r
-       }\r
-       else //is OFDM rate\r
-       {\r
+       } else {\r
+               /*is OFDM rate*/\r
                pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
 \r
                pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
 \r
-               // \r
-               // (1)Get RSSI for OFDM rate\r
-               //\r
-               \r
-               for(i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX; i++)   \r
-               {\r
-                       // 2008/01/30 MH we will judge RF RX path now.\r
-                       //DbgPrint("pDM_Odm->RFPathRxEnable = %x\n", pDM_Odm->RFPathRxEnable);\r
+               /*(1)Get RSSI for OFDM rate*/\r
+\r
+               for (i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX_JAGUAR; i++) {\r
+                       /*2008/01/30 MH we will judge RF RX path now.*/\r
+/*                     //DbgPrint("pDM_Odm->RFPathRxEnable = %x\n", pDM_Odm->RFPathRxEnable);*/\r
                        if (pDM_Odm->RFPathRxEnable & BIT(i))\r
                        if (pDM_Odm->RFPathRxEnable & BIT(i))\r
-                       {                               \r
                                rf_rx_num++;\r
                                rf_rx_num++;\r
-                       }\r
-                       //else\r
-                               //continue;\r
-                       //2012.05.25 LukeLee: Testchip AGC report is wrong, it should be restored back to old formula in MP chip\r
-                       //if((pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821)) && (!pDM_Odm->bIsMPChip))\r
-                               rx_pwr[i] = (pPhyStaRpt->gain_trsw[i]&0x7F) - 110;\r
-                       //else\r
-                       //      rx_pwr[i] = ((pPhyStaRpt->gain_trsw[i]& 0x3F)*2) - 110;  //OLD FORMULA\r
+/*                     //else*/\r
+/*                     //continue;*/\r
+                       /*2012.05.25 LukeLee: Testchip AGC report is wrong, it should be restored back to old formula in MP chip*/\r
+/*                     //if((pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821)) && (!pDM_Odm->bIsMPChip))*/\r
+                       if (i < ODM_RF_PATH_C)\r
+                               rx_pwr[i] = (pPhyStaRpt->gain_trsw[i] & 0x7F) - 110;\r
+                       else\r
+                               rx_pwr[i] = (pPhyStaRpt->gain_trsw_cd[i - 2] & 0x7F) - 110;\r
+/*                     //else*/\r
+                       /*rx_pwr[i] = ((pPhyStaRpt->gain_trsw[i]& 0x3F)*2) - 110;  OLD FORMULA*/\r
 \r
 \r
-               #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
                        pPhyInfo->RxPwr[i] = rx_pwr[i];\r
                        pPhyInfo->RxPwr[i] = rx_pwr[i];\r
-               #endif  \r
+#endif\r
 \r
                        /* Translate DBM to percentage. */\r
 \r
                        /* Translate DBM to percentage. */\r
-                       RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);     \r
-               \r
+                       RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);\r
+\r
                        total_rssi += RSSI;\r
                        total_rssi += RSSI;\r
-                       //RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));\r
+/*                     //RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));*/\r
 \r
 \r
+                       pPhyInfo->RxMIMOSignalStrength[i] = (u1Byte) RSSI;\r
 \r
 \r
-               \r
-                       pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;\r
 \r
 \r
-               #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE|ODM_AP|ODM_ADSL))\r
-                       //Get Rx snr value in DB                \r
-                       pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = pPhyStaRpt->rxsnr[i]/2;\r
-               #endif\r
+                       /*Get Rx snr value in DB*/\r
+                       if (i < ODM_RF_PATH_C)\r
+                               pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = pPhyStaRpt->rxsnr[i] / 2;\r
+                       else if (pDM_Odm->SupportICType & (ODM_RTL8814A | ODM_RTL8822B))\r
+                               pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = pPhyStaRpt->csi_current[i - 2] / 2;\r
 \r
 \r
-                       //\r
-                       // (2) CFO_short  & CFO_tail\r
-                       //                      \r
-                       pPhyInfo->Cfo_short[i] = odm_Cfo( (pPhyStaRpt->cfosho[i]) );\r
-                       pPhyInfo->Cfo_tail[i] = odm_Cfo( (pPhyStaRpt->cfotail[i]) );\r
+\r
+                       /*(2) CFO_short  & CFO_tail*/\r
+                       if (i < ODM_RF_PATH_C) {\r
+                               pPhyInfo->Cfo_short[i] = odm_Cfo((pPhyStaRpt->cfosho[i]));\r
+                               pPhyInfo->Cfo_tail[i] = odm_Cfo((pPhyStaRpt->cfotail[i]));\r
+                       }\r
 \r
                        /* Record Signal Strength for next packet */\r
 \r
                        /* Record Signal Strength for next packet */\r
-                       //if(pPktinfo->bPacketMatchBSSID)\r
-                       {                               \r
-                               if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
-                                       (pDM_Odm->PatchID==RT_CID_819x_Lenovo))\r
-                               {\r
-                                       if(i==ODM_RF_PATH_A)\r
-                                               pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,i,RSSI);\r
-                               \r
+                       if (pPktinfo->bPacketMatchBSSID) {\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+                               if ((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
+                                       (pDM_Odm->PatchID == RT_CID_819x_Lenovo)) {\r
+                                       if (i == ODM_RF_PATH_A)\r
+                                               pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm, isCCKrate, PWDB_ALL, i, RSSI);\r
+\r
                                }\r
                                }\r
+#endif\r
                        }\r
                }\r
                        }\r
                }\r
-               \r
-               \r
-               //\r
-               // (3)PWDB, Average PWDB cacluated by hardware (for rate adaptive)\r
-               //\r
-               //2012.05.25 LukeLee: Testchip AGC report is wrong, it should be restored back to old formula in MP chip\r
-               if((pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821)) && (!pDM_Odm->bIsMPChip))\r
-                       rx_pwr_all = (pPhyStaRpt->pwdb_all& 0x7f) -110;\r
+\r
+               /*(3)PWDB, Average PWDB calculated by hardware (for rate adaptive)*/\r
+\r
+               /*2012.05.25 LukeLee: Testchip AGC report is wrong, it should be restored back to old formula in MP chip*/\r
+               if ((pDM_Odm->SupportICType & (ODM_RTL8812 | ODM_RTL8821 | ODM_RTL8881A)) && (!pDM_Odm->bIsMPChip))\r
+                       rx_pwr_all = (pPhyStaRpt->pwdb_all & 0x7f) - 110;\r
                else\r
                else\r
-                       rx_pwr_all = (((pPhyStaRpt->pwdb_all) >> 1 )& 0x7f) -110;        //OLD FORMULA\r
+                       rx_pwr_all = (((pPhyStaRpt->pwdb_all) >> 1) & 0x7f) - 110;       /*OLD FORMULA*/\r
+\r
+               PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
 \r
 \r
-               PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);  \r
-                       \r
                pPhyInfo->RxPWDBAll = PWDB_ALL;\r
                pPhyInfo->RxPWDBAll = PWDB_ALL;\r
-               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));\r
-       #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
+               /*ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));*/\r
+#if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
                pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT;\r
                pPhyInfo->RxPower = rx_pwr_all;\r
                pPhyInfo->RecvSignalPower = rx_pwr_all;\r
                pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT;\r
                pPhyInfo->RxPower = rx_pwr_all;\r
                pPhyInfo->RecvSignalPower = rx_pwr_all;\r
-       #endif\r
+#endif\r
 \r
 \r
-               //DbgPrint("OFDM: pPhyInfo->RxPWDBAll = %d, pPhyInfo->RxMIMOSignalStrength[0] = %d, pPhyInfo->RxMIMOSignalStrength[1] = %d\n",\r
-               //      pPhyInfo->RxPWDBAll, pPhyInfo->RxMIMOSignalStrength[0], pPhyInfo->RxMIMOSignalStrength[1]);\r
-       \r
-       \r
-               if((pDM_Odm->SupportPlatform == ODM_WIN) &&(pDM_Odm->PatchID==19))\r
-               {\r
-                       //do nothing    \r
-               }\r
-               else\r
-               {       //pMgntInfo->CustomerID != RT_CID_819x_Lenovo\r
-                       //\r
-                       // (4)EVM of OFDM rate\r
-                       //\r
-                       if(     (pPktinfo->DataRate>=DESC_RATEMCS8) &&\r
-                               (pPktinfo->DataRate <=DESC_RATEMCS15))\r
-                               Max_spatial_stream = 2;\r
-                       else if(        (pPktinfo->DataRate>=DESC_RATEVHTSS2MCS0) &&\r
-                               (pPktinfo->DataRate <=DESC_RATEVHTSS2MCS9))\r
-                               Max_spatial_stream = 2;\r
+               if ((pDM_Odm->SupportPlatform == ODM_WIN) && (pDM_Odm->PatchID == 19)) {\r
+                       /*do nothing*/\r
+               } else {\r
+                       /*pMgntInfo->CustomerID != RT_CID_819x_Lenovo*/\r
+\r
+                       /*(4)EVM of OFDM rate*/\r
+                       \r
+                       if ((pPktinfo->DataRate >= ODM_RATEMCS8) &&\r
+                               (pPktinfo->DataRate <= ODM_RATEMCS15))\r
+                               Max_spatial_stream = 2;\r
+                       else if ((pPktinfo->DataRate >= ODM_RATEVHTSS2MCS0) &&\r
+                                        (pPktinfo->DataRate <= ODM_RATEVHTSS2MCS9))\r
+                               Max_spatial_stream = 2;\r
+                       else if ((pPktinfo->DataRate >= ODM_RATEMCS16) &&\r
+                                        (pPktinfo->DataRate <= ODM_RATEMCS23))\r
+                               Max_spatial_stream = 3;\r
+                       else if ((pPktinfo->DataRate >= ODM_RATEVHTSS3MCS0) &&\r
+                                        (pPktinfo->DataRate <= ODM_RATEVHTSS3MCS9))\r
+                               Max_spatial_stream = 3;\r
                        else\r
                        else\r
-                               Max_spatial_stream = 1; \r
+                               Max_spatial_stream = 1;\r
 \r
 \r
-                       //if(pPktinfo->bPacketMatchBSSID)\r
-                       {\r
-                               //DbgPrint("pPktinfo->DataRate = %d\n", pPktinfo->DataRate);\r
+                       if (pPktinfo->bPacketMatchBSSID) {\r
+                               /*DbgPrint("pPktinfo->DataRate = %d\n", pPktinfo->DataRate);*/\r
 \r
 \r
-                               for(i=0; i<Max_spatial_stream; i++)\r
-                               {\r
-                                       // Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment\r
-                                       // fill most significant bit to "zero" when doing shifting operation which may change a negative \r
-                                       // value to positive one, then the dbm value (which is supposed to be negative)  is not correct anymore.                        \r
-                                       //\r
-                                       // 2013/09/02 MH According to 8812AU test, when use RX evm the value sometimes\r
-                                       // will be incorrect and 1SS-MCS-0-7 always incorrect. Only use LSIG the evm value\r
-                                       // seems ok. This seems BB bug, we need use another way to display better SQ.\r
-                                       //\r
-                                       //if (pPktinfo->DataRate>=DESC8812_RATE6M && pPktinfo->DataRate<=DESC8812_RATE54M)\r
-                                       {\r
-                                               \r
-                                               if(i==ODM_RF_PATH_A )\r
-                                               {\r
-                                                       EVM = odm_EVMdbToPercentage( (pPhyStaRpt->sigevm ));    //dbm\r
+                               for (i = 0; i < Max_spatial_stream; i++) {\r
+                                       /*Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment*/\r
+                                       /*fill most significant bit to "zero" when doing shifting operation which may change a negative*/\r
+                                       /*value to positive one, then the dbm value (which is supposed to be negative)  is not correct anymore.*/\r
+\r
+                                       if (pPktinfo->DataRate >= DESC_RATE6M && pPktinfo->DataRate <= DESC_RATE54M) {\r
+                                               if (i == ODM_RF_PATH_A) {\r
+                                                       EVM = odm_EVMdbToPercentage((pPhyStaRpt->sigevm));      /*dbm*/\r
                                                        EVM += 20;\r
                                                        if (EVM > 100)\r
                                                                EVM = 100;\r
                                                }\r
                                                        EVM += 20;\r
                                                        if (EVM > 100)\r
                                                                EVM = 100;\r
                                                }\r
-                                       }\r
-#if 0\r
-                                       else\r
-                                       {\r
-                                               if (pPhyStaRpt->rxevm[i] == -128)\r
-                                               {\r
-                                                       pPhyStaRpt->rxevm[i] = -25;\r
+                                       } else {\r
+                                               if (i < ODM_RF_PATH_C) {\r
+                                                       if (pPhyStaRpt->rxevm[i] == -128)\r
+                                                               pPhyStaRpt->rxevm[i] = -25;\r
+                                                       EVM = odm_EVMdbToPercentage((pPhyStaRpt->rxevm[i]));    /*dbm*/\r
+                                               } else {\r
+                                                       if (pPhyStaRpt->rxevm_cd[i - 2] == -128){\r
+                                                               pPhyStaRpt->rxevm_cd[i - 2] = -25;\r
+                                                       }\r
+                                                       EVM = odm_EVMdbToPercentage((pPhyStaRpt->rxevm_cd[i - 2]));     /*dbm*/\r
                                                }\r
                                                }\r
-                                               EVM = odm_EVMdbToPercentage( (pPhyStaRpt->rxevm[i] ));  //dbm\r
                                        }\r
                                        }\r
-#endif\r
-                                       EVMdbm = odm_EVMdbm_JaguarSeries(pPhyStaRpt->rxevm[i]);\r
-                                       //RT_DISP(FRX, RX_PHY_SQ, ("RXRATE=%x RXEVM=%x EVM=%s%d\n", \r
-                                       //pPktinfo->DataRate, pPhyStaRpt->rxevm[i], "%", EVM));\r
-                                       \r
+\r
+                                       if (i < ODM_RF_PATH_C)\r
+                                               EVMdbm = odm_EVMdbm_JaguarSeries(pPhyStaRpt->rxevm[i]);\r
+                                       else\r
+                                               EVMdbm = odm_EVMdbm_JaguarSeries(pPhyStaRpt->rxevm_cd[i - 2]);\r
+                                       /*RT_DISP(FRX, RX_PHY_SQ, ("RXRATE=%x RXEVM=%x EVM=%s%d\n",*/\r
+                                       /*pPktinfo->DataRate, pPhyStaRpt->rxevm[i], "%", EVM));*/\r
+\r
                                        {\r
                                        {\r
-                                               if(i==ODM_RF_PATH_A) // Fill value in RFD, Get the first spatial stream only\r
-                                               {\r
+                                               if (i == ODM_RF_PATH_A) { \r
+                                                       /*Fill value in RFD, Get the first spatial stream only*/\r
                                                        pPhyInfo->SignalQuality = EVM;\r
                                                        pPhyInfo->SignalQuality = EVM;\r
-                                               }                                       \r
+                                               }\r
                                                pPhyInfo->RxMIMOSignalQuality[i] = EVM;\r
                                                pPhyInfo->RxMIMOEVMdbm[i] = EVMdbm;\r
                                        }\r
                                                pPhyInfo->RxMIMOSignalQuality[i] = EVM;\r
                                                pPhyInfo->RxMIMOEVMdbm[i] = EVMdbm;\r
                                        }\r
@@ -1386,49 +1474,60 @@ odm_RxPhyStatusJaguarSeries_Parsing(
                }\r
 \r
                ODM_ParsingCFO(pDM_Odm, pPktinfo, pPhyStaRpt->cfotail);\r
                }\r
 \r
                ODM_ParsingCFO(pDM_Odm, pPktinfo, pPhyStaRpt->cfotail);\r
-               \r
+\r
        }\r
        }\r
-       //DbgPrint("isCCKrate= %d, pPhyInfo->SignalStrength=%d % PWDB_AL=%d rf_rx_num=%d\n", isCCKrate, pPhyInfo->SignalStrength, PWDB_ALL, rf_rx_num);\r
-       \r
+/*     //DbgPrint("isCCKrate= %d, pPhyInfo->SignalStrength=%d % PWDB_AL=%d rf_rx_num=%d\n", isCCKrate, pPhyInfo->SignalStrength, PWDB_ALL, rf_rx_num);*/\r
+\r
 #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
 #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))\r
-       //UI BSS List signal strength(in percentage), make it good looking, from 0~100.\r
-       //It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp().\r
-       if(isCCKrate)\r
-       {               \r
+       /*UI BSS List signal strength(in percentage), make it good looking, from 0~100.*/\r
+       /*It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp().*/\r
+       if (isCCKrate) {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-               // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
-               pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));//PWDB_ALL;\r
+               /*2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/*/\r
+               pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));/*PWDB_ALL;*/\r
 #else\r
 #else\r
-               pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));//PWDB_ALL;\r
+               pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));/*PWDB_ALL;*/\r
 #endif\r
 #endif\r
-       }\r
-       else\r
-       {       \r
-               if (rf_rx_num != 0)\r
-               {                       \r
+       } else {\r
+               if (rf_rx_num != 0) {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-                       // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
-                       pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));//PWDB_ALL;\r
+                       /*2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/*/\r
+                       pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi /= rf_rx_num)); /*PWDB_ALL;*/\r
 #else\r
 #else\r
-                       pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi/=rf_rx_num));\r
+                       pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi /= rf_rx_num));\r
 #endif\r
                }\r
        }\r
 #endif\r
        pDM_Odm->RxPWDBAve = pDM_Odm->RxPWDBAve + pPhyInfo->RxPWDBAll;\r
 #endif\r
                }\r
        }\r
 #endif\r
        pDM_Odm->RxPWDBAve = pDM_Odm->RxPWDBAve + pPhyInfo->RxPWDBAll;\r
-       \r
+\r
        pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->antidx_anta;\r
        pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->antidx_antb;\r
        pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->antidx_anta;\r
        pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->antidx_antb;\r
-\r
-       //DbgPrint("pPhyStaRpt->antidx_anta = %d, pPhyStaRpt->antidx_antb = %d, pPhyStaRpt->resvd_1 = %d", \r
-       //      pPhyStaRpt->antidx_anta, pPhyStaRpt->antidx_antb, pPhyStaRpt->resvd_1);\r
-\r
-       //DbgPrint("----------------------------\n");\r
-       //DbgPrint("pPktinfo->StationID=%d, pPktinfo->DataRate=0x%x\n",pPktinfo->StationID, pPktinfo->DataRate);\r
-       //DbgPrint("pPhyStaRpt->gain_trsw[0]=0x%x, pPhyStaRpt->gain_trsw[1]=0x%x, pPhyStaRpt->pwdb_all=0x%x\n",\r
-       //                      pPhyStaRpt->gain_trsw[0],pPhyStaRpt->gain_trsw[1], pPhyStaRpt->pwdb_all);\r
-       //DbgPrint("pPhyInfo->RxMIMOSignalStrength[0]=%d, pPhyInfo->RxMIMOSignalStrength[1]=%d, RxPWDBAll=%d\n",\r
-       //                      pPhyInfo->RxMIMOSignalStrength[0], pPhyInfo->RxMIMOSignalStrength[1], pPhyInfo->RxPWDBAll);\r
+       pDM_Odm->DM_FatTable.antsel_rx_keep_2 = pPhyStaRpt->antidx_antc;\r
+       pDM_Odm->DM_FatTable.antsel_rx_keep_3 = pPhyStaRpt->antidx_antd;\r
+\r
+\r
+/*             DbgPrint("pPhyStaRpt->antidx_anta = %d, pPhyStaRpt->antidx_antb = %d\n",*/\r
+/*                     pPhyStaRpt->antidx_anta, pPhyStaRpt->antidx_antb);*/\r
+/*             DbgPrint("----------------------------\n");*/\r
+/*             DbgPrint("pPktinfo->StationID=%d, pPktinfo->DataRate=0x%x\n",pPktinfo->StationID, pPktinfo->DataRate);*/\r
+/*             DbgPrint("pPhyStaRpt->r_RFMOD = %d\n", pPhyStaRpt->r_RFMOD);*/\r
+/*             DbgPrint("pPhyStaRpt->gain_trsw[0]=0x%x, pPhyStaRpt->gain_trsw[1]=0x%x\n",*/\r
+/*                             pPhyStaRpt->gain_trsw[0],pPhyStaRpt->gain_trsw[1]);*/\r
+/*             DbgPrint("pPhyStaRpt->gain_trsw[2]=0x%x, pPhyStaRpt->gain_trsw[3]=0x%x\n",*/\r
+/*                             pPhyStaRpt->gain_trsw_cd[0],pPhyStaRpt->gain_trsw_cd[1]);*/\r
+/*             DbgPrint("pPhyStaRpt->pwdb_all = 0x%x, pPhyInfo->RxPWDBAll = %d\n", pPhyStaRpt->pwdb_all, pPhyInfo->RxPWDBAll);*/\r
+/*             DbgPrint("pPhyStaRpt->cfotail[i] = 0x%x, pPhyStaRpt->CFO_tail[i] = 0x%x\n", pPhyStaRpt->cfotail[0], pPhyStaRpt->cfotail[1]);*/\r
+/*             DbgPrint("pPhyStaRpt->rxevm[0] = %d, pPhyStaRpt->rxevm[1] = %d\n", pPhyStaRpt->rxevm[0], pPhyStaRpt->rxevm[1]);*/\r
+/*             DbgPrint("pPhyStaRpt->rxevm[2] = %d, pPhyStaRpt->rxevm[3] = %d\n", pPhyStaRpt->rxevm_cd[0], pPhyStaRpt->rxevm_cd[1]);*/\r
+/*             DbgPrint("pPhyInfo->RxMIMOSignalStrength[0]=%d, pPhyInfo->RxMIMOSignalStrength[1]=%d, RxPWDBAll=%d\n",*/\r
+/*                             pPhyInfo->RxMIMOSignalStrength[0], pPhyInfo->RxMIMOSignalStrength[1], pPhyInfo->RxPWDBAll);*/\r
+/*             DbgPrint("pPhyInfo->RxMIMOSignalStrength[2]=%d, pPhyInfo->RxMIMOSignalStrength[3]=%d\n",*/\r
+/*                             pPhyInfo->RxMIMOSignalStrength[2], pPhyInfo->RxMIMOSignalStrength[3]);*/\r
+/*             DbgPrint("ppPhyInfo->RxMIMOSignalQuality[0]=%d, pPhyInfo->RxMIMOSignalQuality[1]=%d\n",*/\r
+/*                             pPhyInfo->RxMIMOSignalQuality[0], pPhyInfo->RxMIMOSignalQuality[1]);*/\r
+/*             DbgPrint("ppPhyInfo->RxMIMOSignalQuality[2]=%d, pPhyInfo->RxMIMOSignalQuality[3]=%d\n",*/\r
+/*                             pPhyInfo->RxMIMOSignalQuality[2], pPhyInfo->RxMIMOSignalQuality[3]);*/\r
 \r
 }\r
 \r
 \r
 }\r
 \r
@@ -1457,7 +1556,7 @@ odm_Process_RSSIForDM(
        u4Byte                  Weighting=0;\r
        PSTA_INFO_T             pEntry;\r
 \r
        u4Byte                  Weighting=0;\r
        PSTA_INFO_T             pEntry;\r
 \r
-       if(pPktinfo->StationID == 0xFF)\r
+       if (pPktinfo->StationID >= ODM_ASSOCIATE_ENTRY_NUM)\r
                return;\r
 \r
 #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
                return;\r
 \r
 #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
@@ -1490,15 +1589,8 @@ odm_Process_RSSIForDM(
        if(pPktinfo->bPacketBeacon)\r
                pDM_Odm->PhyDbgInfo.NumQryBeaconPkt++;\r
        \r
        if(pPktinfo->bPacketBeacon)\r
                pDM_Odm->PhyDbgInfo.NumQryBeaconPkt++;\r
        \r
-       isCCKrate = (pPktinfo->DataRate <= DESC_RATE11M)?TRUE :FALSE;\r
+       isCCKrate = (pPktinfo->DataRate <= ODM_RATE11M )?TRUE :FALSE;\r
        pDM_Odm->RxRate = pPktinfo->DataRate;\r
        pDM_Odm->RxRate = pPktinfo->DataRate;\r
-       /*\r
-       if(!isCCKrate)\r
-       {\r
-               DbgPrint("OFDM: pPktinfo->StationID=%d, isCCKrate=%d, pPhyInfo->RxPWDBAll=%d\n",\r
-                       pPktinfo->StationID, isCCKrate, pPhyInfo->RxPWDBAll);\r
-       }\r
-       */\r
 \r
        //--------------Statistic for antenna/path diversity------------------\r
        if(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)\r
 \r
        //--------------Statistic for antenna/path diversity------------------\r
        if(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)\r
@@ -1507,22 +1599,12 @@ odm_Process_RSSIForDM(
                        ODM_Process_RSSIForAntDiv(pDM_Odm,pPhyInfo,pPktinfo);\r
                #endif\r
        }\r
                        ODM_Process_RSSIForAntDiv(pDM_Odm,pPhyInfo,pPktinfo);\r
                #endif\r
        }\r
+       #if(defined(CONFIG_PATH_DIVERSITY))\r
        else if(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV)\r
        {\r
        else if(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV)\r
        {\r
-               #if (RTL8812A_SUPPORT == 1)\r
-               if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-               {\r
-                       pPATHDIV_T      pDM_PathDiv = &pDM_Odm->DM_PathDiv;\r
-                       if(pPktinfo->bPacketToSelf || pPktinfo->bPacketMatchBSSID)\r
-                       {\r
-                               if(pPktinfo->DataRate > DESC_RATE11M)\r
-                                       ODM_PathStatistics_8812A(pDM_Odm, pPktinfo->StationID, pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A], \r
-                                                                                                                                             pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B]);\r
-                       }\r
-               }\r
-               #endif\r
+               phydm_process_rssi_for_path_div(pDM_Odm,pPhyInfo,pPktinfo);\r
        }\r
        }\r
-\r
+       #endif\r
        //-----------------Smart Antenna Debug Message------------------//\r
        \r
        UndecoratedSmoothedCCK =  pEntry->rssi_stat.UndecoratedSmoothedCCK;\r
        //-----------------Smart Antenna Debug Message------------------//\r
        \r
        UndecoratedSmoothedCCK =  pEntry->rssi_stat.UndecoratedSmoothedCCK;\r
@@ -1710,10 +1792,12 @@ ODM_PhyStatusQuery_92CSeries(
 }\r
 #endif\r
 \r
 }\r
 #endif\r
 \r
-#if(ODM_IC_11AC_SERIES_SUPPORT == 1)\r
+\r
 //\r
 // Endianness before calling this API\r
 //\r
 //\r
 // Endianness before calling this API\r
 //\r
+#if    ODM_IC_11AC_SERIES_SUPPORT\r
+\r
 VOID\r
 ODM_PhyStatusQuery_JaguarSeries(\r
        IN OUT  PDM_ODM_T                                       pDM_Odm,\r
 VOID\r
 ODM_PhyStatusQuery_JaguarSeries(\r
        IN OUT  PDM_ODM_T                                       pDM_Odm,\r
@@ -1722,7 +1806,6 @@ ODM_PhyStatusQuery_JaguarSeries(
        IN              PODM_PACKET_INFO_T                      pPktinfo\r
        )\r
 {\r
        IN              PODM_PACKET_INFO_T                      pPktinfo\r
        )\r
 {\r
-\r
        odm_RxPhyStatusJaguarSeries_Parsing(\r
                                                        pDM_Odm,\r
                                                        pPhyInfo,\r
        odm_RxPhyStatusJaguarSeries_Parsing(\r
                                                        pDM_Odm,\r
                                                        pPhyInfo,\r
@@ -1730,11 +1813,12 @@ ODM_PhyStatusQuery_JaguarSeries(
                                                        pPktinfo);\r
        \r
        odm_Process_RSSIForDM(pDM_Odm,pPhyInfo,pPktinfo);\r
                                                        pPktinfo);\r
        \r
        odm_Process_RSSIForDM(pDM_Odm,pPhyInfo,pPktinfo);\r
-\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       //phydm_sbd_check(pDM_Odm);\r
+#endif\r
 }\r
 #endif\r
 \r
 }\r
 #endif\r
 \r
-\r
 VOID\r
 ODM_PhyStatusQuery(\r
        IN OUT  PDM_ODM_T                                       pDM_Odm,\r
 VOID\r
 ODM_PhyStatusQuery(\r
        IN OUT  PDM_ODM_T                                       pDM_Odm,\r
@@ -1743,12 +1827,13 @@ ODM_PhyStatusQuery(
        IN              PODM_PACKET_INFO_T                      pPktinfo\r
        )\r
 {\r
        IN              PODM_PACKET_INFO_T                      pPktinfo\r
        )\r
 {\r
-#if(ODM_IC_11AC_SERIES_SUPPORT == 1)\r
+\r
+#if    ODM_IC_11AC_SERIES_SUPPORT\r
        if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES )\r
                ODM_PhyStatusQuery_JaguarSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);\r
 #endif\r
 \r
        if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES )\r
                ODM_PhyStatusQuery_JaguarSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);\r
 #endif\r
 \r
-#if(ODM_IC_11N_SERIES_SUPPORT ==1)\r
+#if    ODM_IC_11N_SERIES_SUPPORT\r
        if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES )\r
                ODM_PhyStatusQuery_92CSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);\r
 #endif\r
        if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES )\r
                ODM_PhyStatusQuery_92CSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);\r
 #endif\r
@@ -1782,7 +1867,10 @@ ODM_ConfigRFWithHeaderFile(
        IN      ODM_RF_RADIO_PATH_E     eRFPath\r
     )\r
 {\r
        IN      ODM_RF_RADIO_PATH_E     eRFPath\r
     )\r
 {\r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)   \r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
+       PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);       \r
+#endif\r
 \r
    ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
                                ("===>ODM_ConfigRFWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
 \r
    ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
                                ("===>ODM_ConfigRFWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
@@ -1790,6 +1878,8 @@ ODM_ConfigRFWithHeaderFile(
                                ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
                                pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
 \r
                                ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
                                pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
 \r
+//1 AP doesn't use PHYDM power tracking table in these ICs\r
+#if (DM_ODM_SUPPORT_TYPE !=  ODM_AP)\r
 #if (RTL8723A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
        {\r
 #if (RTL8723A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
        {\r
@@ -1799,57 +1889,58 @@ ODM_ConfigRFWithHeaderFile(
                }\r
        }\r
 #endif\r
                }\r
        }\r
 #endif\r
-\r
-#if (RTL8188E_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               if(ConfigType == CONFIG_RF_RADIO) {\r
-                       if(eRFPath == ODM_RF_PATH_A)\r
-                                       READ_AND_CONFIG_MP(8188E,_RadioA);\r
-               }\r
-               else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
-                       READ_AND_CONFIG_MP(8188E,_TXPWR_LMT);\r
-               }\r
-       }\r
-#endif\r
-\r
 #if (RTL8812A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8812)\r
        {\r
                if(ConfigType == CONFIG_RF_RADIO) {\r
 #if (RTL8812A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8812)\r
        {\r
                if(ConfigType == CONFIG_RF_RADIO) {\r
-                       if(eRFPath == ODM_RF_PATH_A)\r
-                       {\r
+                       if(eRFPath == ODM_RF_PATH_A){\r
                                READ_AND_CONFIG_MP(8812A,_RadioA);\r
                        }\r
                                READ_AND_CONFIG_MP(8812A,_RadioA);\r
                        }\r
-                       else if(eRFPath == ODM_RF_PATH_B)\r
-                       {\r
+                       else if(eRFPath == ODM_RF_PATH_B){\r
                                READ_AND_CONFIG_MP(8812A,_RadioB);\r
                        }\r
                }\r
                else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
                                READ_AND_CONFIG_MP(8812A,_RadioB);\r
                        }\r
                }\r
                else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
+                       #if (DM_ODM_SUPPORT_TYPE & ODM_WIN) && (DEV_BUS_TYPE == RT_PCI_INTERFACE)\r
+                       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
+                       if ((pHalData->EEPROMSVID == 0x17AA && pHalData->EEPROMSMID == 0xA811) ||\r
+                               (pHalData->EEPROMSVID == 0x10EC && pHalData->EEPROMSMID == 0xA812) ||\r
+                               (pHalData->EEPROMSVID == 0x10EC && pHalData->EEPROMSMID == 0x8812))\r
+                               READ_AND_CONFIG_MP(8812A,_TXPWR_LMT_HM812A03);\r
+                       #endif                          \r
                        READ_AND_CONFIG_MP(8812A,_TXPWR_LMT);\r
                }\r
        }\r
 #endif\r
                        READ_AND_CONFIG_MP(8812A,_TXPWR_LMT);\r
                }\r
        }\r
 #endif\r
-\r
 #if (RTL8821A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8821)\r
        {\r
                if(ConfigType == CONFIG_RF_RADIO) {\r
 #if (RTL8821A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8821)\r
        {\r
                if(ConfigType == CONFIG_RF_RADIO) {\r
-                       if(eRFPath == ODM_RF_PATH_A)\r
-                       {\r
+                       if(eRFPath == ODM_RF_PATH_A){\r
                                READ_AND_CONFIG_MP(8821A,_RadioA);\r
                        }\r
                }\r
                else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
                        \r
                                READ_AND_CONFIG_MP(8821A,_RadioA);\r
                        }\r
                }\r
                else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
                        \r
+                       \r
+                       \r
                        if (pDM_Odm->SupportInterface == ODM_ITRF_USB) {\r
                                if (pDM_Odm->ExtPA5G || pDM_Odm->ExtLNA5G)\r
                                        READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8811AU_FEM);\r
                                else\r
                                        READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8811AU_IPA);                                \r
                        if (pDM_Odm->SupportInterface == ODM_ITRF_USB) {\r
                                if (pDM_Odm->ExtPA5G || pDM_Odm->ExtLNA5G)\r
                                        READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8811AU_FEM);\r
                                else\r
                                        READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8811AU_IPA);                                \r
-                       } else {\r
-                               READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8821A);                     \r
+                       } \r
+                       else {\r
+                               #if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)    \r
+                               PADAPTER                Adapter = pDM_Odm->Adapter;\r
+                               PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);       \r
+                               if (pMgntInfo->CustomerID == RT_CID_8821AE_ASUS_MB)\r
+                                       READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8821A_SAR_8mm);\r
+                               else if (pMgntInfo->CustomerID == RT_CID_8821AE_ASUS_NB)\r
+                                       READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8821A_SAR_5mm);\r
+                               else\r
+                               #endif\r
+                                       READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8821A);                     \r
                        }\r
                }\r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("<===8821_ODM_ConfigRFWithHeaderFile\n"));\r
                        }\r
                }\r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("<===8821_ODM_ConfigRFWithHeaderFile\n"));\r
@@ -1859,12 +1950,10 @@ ODM_ConfigRFWithHeaderFile(
 #if (RTL8723B_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
        {\r
 #if (RTL8723B_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
        {\r
-               if(ConfigType == CONFIG_RF_RADIO) {\r
+               if(ConfigType == CONFIG_RF_RADIO)\r
                        READ_AND_CONFIG_MP(8723B,_RadioA);\r
                        READ_AND_CONFIG_MP(8723B,_RadioA);\r
-               }\r
-               else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
+               else if(ConfigType == CONFIG_RF_TXPWR_LMT)\r
                        READ_AND_CONFIG_MP(8723B,_TXPWR_LMT);\r
                        READ_AND_CONFIG_MP(8723B,_TXPWR_LMT);\r
-               }\r
        }\r
 #endif\r
 \r
        }\r
 #endif\r
 \r
@@ -1877,23 +1966,87 @@ ODM_ConfigRFWithHeaderFile(
                        else if(eRFPath == ODM_RF_PATH_B)\r
                                READ_AND_CONFIG_MP(8192E,_RadioB);\r
                }\r
                        else if(eRFPath == ODM_RF_PATH_B)\r
                                READ_AND_CONFIG_MP(8192E,_RadioB);\r
                }\r
-               else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
+               else if(ConfigType == CONFIG_RF_TXPWR_LMT)\r
                        READ_AND_CONFIG_MP(8192E,_TXPWR_LMT);\r
                        READ_AND_CONFIG_MP(8192E,_TXPWR_LMT);\r
-               }\r
        }\r
 #endif\r
        }\r
 #endif\r
+#endif//(DM_ODM_SUPPORT_TYPE !=  ODM_AP)\r
 \r
 \r
+//1 All platforms support\r
+#if (RTL8188E_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
+       {\r
+               if(ConfigType == CONFIG_RF_RADIO) {\r
+                       if(eRFPath == ODM_RF_PATH_A)\r
+                                       READ_AND_CONFIG_MP(8188E,_RadioA);\r
+               }\r
+               else if(ConfigType == CONFIG_RF_TXPWR_LMT)\r
+                       READ_AND_CONFIG_MP(8188E,_TXPWR_LMT);\r
+       }\r
+#endif\r
 #if (RTL8814A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
        {\r
 #if (RTL8814A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
        {\r
-               /*\r
-               if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
-                       READ_AND_CONFIG(8813A,_TXPWR_LMT);\r
-               }\r
-               */              \r
+               if(ConfigType == CONFIG_RF_RADIO) {\r
+                       if(eRFPath == ODM_RF_PATH_A)\r
+                               READ_AND_CONFIG_MP(8814A,_RadioA);\r
+                       else if(eRFPath == ODM_RF_PATH_B)\r
+                               READ_AND_CONFIG_MP(8814A,_RadioB);\r
+                       else if(eRFPath == ODM_RF_PATH_C)\r
+                               READ_AND_CONFIG_MP(8814A,_RadioC);\r
+                       else if(eRFPath == ODM_RF_PATH_D)\r
+                               READ_AND_CONFIG_MP(8814A,_RadioD);\r
+               }       \r
+               else if(ConfigType == CONFIG_RF_TXPWR_LMT) \r
+                       READ_AND_CONFIG_MP(8814A,_TXPWR_LMT);\r
        }\r
 #endif\r
        }\r
 #endif\r
-       \r
+\r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+#if (RTL8821B_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8821B)\r
+       {\r
+               if (ConfigType == CONFIG_RF_RADIO) {\r
+                       if (eRFPath == ODM_RF_PATH_A)\r
+                               READ_AND_CONFIG(8821B, _RadioA);\r
+               } else if (ConfigType == CONFIG_RF_TXPWR_LMT)\r
+                       READ_AND_CONFIG(8821B, _TXPWR_LMT);\r
+       }\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)\r
+               if (pDM_Odm->SupportICType == ODM_RTL8822B)\r
+               {\r
+                       if(ConfigType == CONFIG_RF_RADIO) {\r
+                               if(eRFPath == ODM_RF_PATH_A)\r
+                                       READ_AND_CONFIG_TC(8822B,_RadioA);\r
+                               else if(eRFPath == ODM_RF_PATH_B)\r
+                                       READ_AND_CONFIG_TC(8822B,_RadioB);\r
+                       }       \r
+               }\r
+#endif\r
+#if (RTL8703B_SUPPORT == 1)\r
+               if (pDM_Odm->SupportICType == ODM_RTL8703B)\r
+               {\r
+                       if(ConfigType == CONFIG_RF_RADIO) {\r
+                               if(eRFPath == ODM_RF_PATH_A)\r
+                                       READ_AND_CONFIG_TC(8703B,_RadioA);\r
+                       }       \r
+               }\r
+#endif\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if (RTL8188F_SUPPORT == 1)\r
+               if (pDM_Odm->SupportICType == ODM_RTL8188F)\r
+               {\r
+                       if(ConfigType == CONFIG_RF_RADIO) {\r
+                               if(eRFPath == ODM_RF_PATH_A)\r
+                                       READ_AND_CONFIG_TC(8188F,_RadioA);\r
+                       }       \r
+               }\r
+#endif\r
+#endif\r
+#endif//(DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+\r
        return HAL_STATUS_SUCCESS;\r
 }\r
 \r
        return HAL_STATUS_SUCCESS;\r
 }\r
 \r
@@ -1907,22 +2060,23 @@ ODM_ConfigRFWithTxPwrTrackHeaderFile(
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
                                 ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
                                 pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
                                 ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
                                 pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
-       if(0)\r
-       {\r
-       }\r
-#if (RTL8821A_SUPPORT == 1) \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8821)\r
+\r
+\r
+//1 AP doesn't use PHYDM power tracking table in these ICs\r
+#if (DM_ODM_SUPPORT_TYPE !=  ODM_AP)\r
+#if RTL8821A_SUPPORT\r
+       if(pDM_Odm->SupportICType == ODM_RTL8821)\r
        {\r
                if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
                        READ_AND_CONFIG_MP(8821A,_TxPowerTrack_PCIE);\r
                else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
        {\r
                if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
                        READ_AND_CONFIG_MP(8821A,_TxPowerTrack_PCIE);\r
                else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
-                       READ_AND_CONFIG_MP(8821A,_TxPowerTrack_USB);\r
-               else\r
-                       READ_AND_CONFIG_MP(8821A,_TxPowerTrack_PCIE);\r
+                       READ_AND_CONFIG_MP(8821A,_TxPowerTrack_USB);                    \r
+               else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
+                       READ_AND_CONFIG_MP(8821A,_TxPowerTrack_SDIO);\r
        }\r
        }\r
-#endif\r
-#if (RTL8812A_SUPPORT == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8812)\r
+#endif \r
+#if RTL8812A_SUPPORT   \r
+       if(pDM_Odm->SupportICType == ODM_RTL8812)\r
        {\r
                if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
                        READ_AND_CONFIG_MP(8812A,_TxPowerTrack_PCIE);\r
        {\r
                if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
                        READ_AND_CONFIG_MP(8812A,_TxPowerTrack_PCIE);\r
@@ -1934,18 +2088,20 @@ ODM_ConfigRFWithTxPwrTrackHeaderFile(
                }\r
                \r
        }\r
                }\r
                \r
        }\r
-#endif\r
-#if (RTL8192E_SUPPORT == 1) \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+#endif \r
+#if RTL8192E_SUPPORT   \r
+       if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
        {\r
                if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
                        READ_AND_CONFIG_MP(8192E,_TxPowerTrack_PCIE);\r
                else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
                        READ_AND_CONFIG_MP(8192E,_TxPowerTrack_USB); \r
        {\r
                if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
                        READ_AND_CONFIG_MP(8192E,_TxPowerTrack_PCIE);\r
                else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
                        READ_AND_CONFIG_MP(8192E,_TxPowerTrack_USB); \r
+               else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
+                       READ_AND_CONFIG_MP(8192E,_TxPowerTrack_SDIO); \r
        }\r
 #endif\r
 #if RTL8723B_SUPPORT   \r
        }\r
 #endif\r
 #if RTL8723B_SUPPORT   \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
        {\r
                if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
                        READ_AND_CONFIG_MP(8723B,_TxPowerTrack_PCIE);\r
        {\r
                if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
                        READ_AND_CONFIG_MP(8723B,_TxPowerTrack_PCIE);\r
@@ -1956,16 +2112,54 @@ ODM_ConfigRFWithTxPwrTrackHeaderFile(
        }\r
 #endif \r
 #if RTL8188E_SUPPORT   \r
        }\r
 #endif \r
 #if RTL8188E_SUPPORT   \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
        {\r
                if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
                        READ_AND_CONFIG_MP(8188E,_TxPowerTrack_PCIE);\r
                else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
                        READ_AND_CONFIG_MP(8188E,_TxPowerTrack_USB);\r
        {\r
                if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
                        READ_AND_CONFIG_MP(8188E,_TxPowerTrack_PCIE);\r
                else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
                        READ_AND_CONFIG_MP(8188E,_TxPowerTrack_USB);\r
+               else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
+                       READ_AND_CONFIG_MP(8188E,_TxPowerTrack_SDIO);\r
+       }\r
+#endif\r
+#endif//(DM_ODM_SUPPORT_TYPE !=  ODM_AP)\r
+\r
+//1 All platforms support\r
+#if RTL8814A_SUPPORT\r
+       if(pDM_Odm->SupportICType == ODM_RTL8814A) \r
+       {\r
+               if(pDM_Odm->RFEType == 0)\r
+                       READ_AND_CONFIG_MP(8814A,_TxPowerTrack_Type0);\r
+               else if(pDM_Odm->RFEType == 2)\r
+                       READ_AND_CONFIG_MP(8814A,_TxPowerTrack_Type2);\r
                else\r
                else\r
-                       READ_AND_CONFIG_MP(8188E,_TxPowerTrack_PCIE);\r
+                       READ_AND_CONFIG_MP(8814A,_TxPowerTrack);\r
        }\r
        }\r
+#endif \r
+\r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+#if RTL8821B_SUPPORT\r
+       if(pDM_Odm->SupportICType == ODM_RTL8821B)\r
+                       READ_AND_CONFIG(8821B,_TxPowerTrack);                   \r
+#endif \r
+#if RTL8822B_SUPPORT\r
+       if(pDM_Odm->SupportICType == ODM_RTL8822B)\r
+                       READ_AND_CONFIG_TC(8822B,_TxPowerTrack);                        \r
+#endif \r
+#if RTL8703B_SUPPORT\r
+       if(pDM_Odm->SupportICType == ODM_RTL8703B)\r
+                       READ_AND_CONFIG_TC(8703B,_TxPowerTrack_PCIE);                   \r
+#endif \r
+\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if RTL8188F_SUPPORT\r
+       if(pDM_Odm->SupportICType == ODM_RTL8188F)\r
+                       READ_AND_CONFIG_TC(8188F,_TxPowerTrack_PCIE);                   \r
+#endif \r
 #endif\r
 #endif\r
+#endif//(DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+\r
 \r
        return HAL_STATUS_SUCCESS;\r
 }\r
 \r
        return HAL_STATUS_SUCCESS;\r
 }\r
@@ -1976,75 +2170,43 @@ ODM_ConfigBBWithHeaderFile(
        IN      ODM_BB_Config_Type              ConfigType\r
        )\r
 {\r
        IN      ODM_BB_Config_Type              ConfigType\r
        )\r
 {\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)   \r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
-#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
        PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);       \r
 #endif\r
        PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);       \r
 #endif\r
-#endif\r
-       \r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
-                               ("===>ODM_ConfigBBWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
-    ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
-                               ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
-                               pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
 \r
 \r
+//1 AP doesn't use PHYDM initialization in these ICs\r
+#if (DM_ODM_SUPPORT_TYPE !=  ODM_AP)   \r
 #if (RTL8723A_SUPPORT == 1) \r
 #if (RTL8723A_SUPPORT == 1) \r
-    if(pDM_Odm->SupportICType == ODM_RTL8723A)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8723A)\r
        {\r
        {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
+               if(ConfigType == CONFIG_BB_PHY_REG){\r
                        READ_AND_CONFIG_MP(8723A,_PHY_REG);\r
                        READ_AND_CONFIG_MP(8723A,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
                        READ_AND_CONFIG_MP(8723A,_AGC_TAB);\r
                        READ_AND_CONFIG_MP(8723A,_AGC_TAB);\r
-               }\r
+               }               \r
        }               \r
 #endif\r
        }               \r
 #endif\r
-\r
-#if (RTL8188E_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
-                               READ_AND_CONFIG_MP(8188E,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
-                               READ_AND_CONFIG_MP(8188E,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
-                       READ_AND_CONFIG_MP(8188E,_PHY_REG_PG);\r
-               }\r
-       }\r
-#endif\r
-\r
 #if (RTL8812A_SUPPORT == 1) \r
        if(pDM_Odm->SupportICType == ODM_RTL8812)\r
        {\r
 #if (RTL8812A_SUPPORT == 1) \r
        if(pDM_Odm->SupportICType == ODM_RTL8812)\r
        {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
+               if(ConfigType == CONFIG_BB_PHY_REG){\r
                        READ_AND_CONFIG_MP(8812A,_PHY_REG);\r
                        READ_AND_CONFIG_MP(8812A,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
                        READ_AND_CONFIG_MP(8812A,_AGC_TAB);\r
                }\r
                else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
                {\r
                        if (pDM_Odm->RFEType == 3 && pDM_Odm->bIsMPChip) \r
                                READ_AND_CONFIG_MP(8812A,_PHY_REG_PG_ASUS);\r
                        READ_AND_CONFIG_MP(8812A,_AGC_TAB);\r
                }\r
                else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
                {\r
                        if (pDM_Odm->RFEType == 3 && pDM_Odm->bIsMPChip) \r
                                READ_AND_CONFIG_MP(8812A,_PHY_REG_PG_ASUS);\r
-#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+                       #if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
                        else if (pMgntInfo->CustomerID == RT_CID_WNC_NEC && pDM_Odm->bIsMPChip) \r
                                READ_AND_CONFIG_MP(8812A,_PHY_REG_PG_NEC);\r
                        else if (pMgntInfo->CustomerID == RT_CID_WNC_NEC && pDM_Odm->bIsMPChip) \r
                                READ_AND_CONFIG_MP(8812A,_PHY_REG_PG_NEC);\r
-#endif                 \r
+                       #endif                  \r
                        else\r
                                READ_AND_CONFIG_MP(8812A,_PHY_REG_PG);\r
                }\r
                        else\r
                                READ_AND_CONFIG_MP(8812A,_PHY_REG_PG);\r
                }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_MP)\r
-               {\r
+               else if(ConfigType == CONFIG_BB_PHY_REG_MP){\r
                        READ_AND_CONFIG_MP(8812A,_PHY_REG_MP);\r
                }\r
                else if(ConfigType == CONFIG_BB_AGC_TAB_DIFF)\r
                        READ_AND_CONFIG_MP(8812A,_PHY_REG_MP);\r
                }\r
                else if(ConfigType == CONFIG_BB_AGC_TAB_DIFF)\r
@@ -2054,80 +2216,142 @@ ODM_ConfigBBWithHeaderFile(
                        else if (100 <= *pDM_Odm->pChannel) \r
                                AGC_DIFF_CONFIG_MP(8812A,HB);\r
                }\r
                        else if (100 <= *pDM_Odm->pChannel) \r
                                AGC_DIFF_CONFIG_MP(8812A,HB);\r
                }\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() phy:Rtl8812AGCTABArray\n"));\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8812PHY_REGArray\n"));\r
        }               \r
 #endif\r
        }               \r
 #endif\r
-\r
 #if (RTL8821A_SUPPORT == 1) \r
        if(pDM_Odm->SupportICType == ODM_RTL8821)\r
        {\r
 #if (RTL8821A_SUPPORT == 1) \r
        if(pDM_Odm->SupportICType == ODM_RTL8821)\r
        {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
+               if(ConfigType == CONFIG_BB_PHY_REG){\r
                        READ_AND_CONFIG_MP(8821A,_PHY_REG);\r
                        READ_AND_CONFIG_MP(8821A,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
                        READ_AND_CONFIG_MP(8821A,_AGC_TAB);\r
                        READ_AND_CONFIG_MP(8821A,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_PHY_REG_PG){\r
                        READ_AND_CONFIG_MP(8821A,_PHY_REG_PG);\r
                        READ_AND_CONFIG_MP(8821A,_PHY_REG_PG);\r
-               }\r
-       }\r
+               }               \r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() phy:Rtl8821AGCTABArray\n"));\r
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8821PHY_REGArray\n"));\r
+       }               \r
 #endif\r
 #if (RTL8723B_SUPPORT == 1)\r
 #endif\r
 #if (RTL8723B_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
        {\r
        {\r
-\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
+               if(ConfigType == CONFIG_BB_PHY_REG){\r
                        READ_AND_CONFIG_MP(8723B,_PHY_REG);\r
                        READ_AND_CONFIG_MP(8723B,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
                        READ_AND_CONFIG_MP(8723B,_AGC_TAB);\r
                        READ_AND_CONFIG_MP(8723B,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_PHY_REG_PG){\r
                        READ_AND_CONFIG_MP(8723B,_PHY_REG_PG);\r
                }\r
        }\r
 #endif\r
 #if (RTL8192E_SUPPORT == 1)\r
                        READ_AND_CONFIG_MP(8723B,_PHY_REG_PG);\r
                }\r
        }\r
 #endif\r
 #if (RTL8192E_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
        {\r
        {\r
-\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
+               if(ConfigType == CONFIG_BB_PHY_REG){\r
                        READ_AND_CONFIG_MP(8192E,_PHY_REG);\r
                        READ_AND_CONFIG_MP(8192E,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
                        READ_AND_CONFIG_MP(8192E,_AGC_TAB);\r
                        READ_AND_CONFIG_MP(8192E,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_PHY_REG_PG){\r
                        READ_AND_CONFIG_MP(8192E,_PHY_REG_PG);\r
                }\r
        }\r
 #endif\r
                        READ_AND_CONFIG_MP(8192E,_PHY_REG_PG);\r
                }\r
        }\r
 #endif\r
+#endif//(DM_ODM_SUPPORT_TYPE !=  ODM_AP)\r
+\r
+\r
+//1 All platforms support\r
+#if (RTL8188E_SUPPORT == 1)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
+       {\r
+               if(ConfigType == CONFIG_BB_PHY_REG)\r
+                       READ_AND_CONFIG_MP(8188E,_PHY_REG);\r
+               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
+                       READ_AND_CONFIG_MP(8188E,_AGC_TAB);\r
+               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
+                       READ_AND_CONFIG_MP(8188E,_PHY_REG_PG);\r
+       }\r
+#endif\r
 #if (RTL8814A_SUPPORT == 1)\r
 #if (RTL8814A_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
        {\r
        {\r
+               if(ConfigType == CONFIG_BB_PHY_REG){\r
+                       READ_AND_CONFIG_MP(8814A,_PHY_REG);\r
+               }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
+                       READ_AND_CONFIG_MP(8814A,_AGC_TAB);\r
+               }else if(ConfigType == CONFIG_BB_PHY_REG_PG){\r
+                       READ_AND_CONFIG_MP(8814A,_PHY_REG_PG);\r
+               }else if(ConfigType == CONFIG_BB_PHY_REG_MP){\r
+                       READ_AND_CONFIG_MP(8814A,_PHY_REG_MP);\r
+               }\r
+       }\r
+#endif\r
 \r
 \r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
-                       READ_AND_CONFIG(8813A,_PHY_REG);\r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+#if (RTL8821B_SUPPORT == 1) \r
+       if(pDM_Odm->SupportICType == ODM_RTL8821B)\r
+       {\r
+               if (ConfigType == CONFIG_BB_PHY_REG) {\r
+                       READ_AND_CONFIG(8821B,_PHY_REG);\r
+               } else if (ConfigType == CONFIG_BB_AGC_TAB) { \r
+                   READ_AND_CONFIG(8821B,_AGC_TAB);\r
+               } else if (ConfigType == CONFIG_BB_PHY_REG_PG) {\r
+                       READ_AND_CONFIG(8821B,_PHY_REG_PG);\r
                }\r
                }\r
+       }               \r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8822B)\r
+       {\r
+               if(ConfigType == CONFIG_BB_PHY_REG)\r
+                       READ_AND_CONFIG_TC(8822B,_PHY_REG);\r
                else if(ConfigType == CONFIG_BB_AGC_TAB)\r
                else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
-                       READ_AND_CONFIG(8813A,_AGC_TAB);\r
-               }\r
+                       READ_AND_CONFIG_TC(8822B,_AGC_TAB);\r
                else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
                else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
-                       //READ_AND_CONFIG(8813A,_PHY_REG_PG);\r
-               }\r
+                       READ_AND_CONFIG_TC(8822B,_PHY_REG_PG);\r
+               else if(ConfigType == CONFIG_BB_PHY_REG_MP)\r
+                       READ_AND_CONFIG_TC(8822B,_PHY_REG_MP);\r
        }\r
 #endif\r
        }\r
 #endif\r
+#if (RTL8703B_SUPPORT == 1)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8703B)\r
+       {\r
+               if(ConfigType == CONFIG_BB_PHY_REG)\r
+                       READ_AND_CONFIG_TC(8703B,_PHY_REG);\r
+               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
+                       READ_AND_CONFIG_TC(8703B,_AGC_TAB);\r
+               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
+                       READ_AND_CONFIG_TC(8703B,_PHY_REG_PG);\r
+       }\r
+#endif\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if (RTL8188F_SUPPORT == 1)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8188F)\r
+       {\r
+               if(ConfigType == CONFIG_BB_PHY_REG)\r
+                       READ_AND_CONFIG_TC(8188F,_PHY_REG);\r
+               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
+                       READ_AND_CONFIG_TC(8188F,_AGC_TAB);\r
+               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
+                       READ_AND_CONFIG_TC(8188F,_PHY_REG_PG);\r
+       }\r
+#endif\r
+#endif\r
+#if (RTL8195A_SUPPORT == 1)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8195A)\r
+       {\r
+               if(ConfigType == CONFIG_BB_PHY_REG)\r
+                       READ_AND_CONFIG(8195A,_PHY_REG);\r
+               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
+                       READ_AND_CONFIG(8195A,_AGC_TAB);\r
+               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
+                       READ_AND_CONFIG(8195A,_PHY_REG_PG);\r
+       }\r
+#endif\r
+#endif//(DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+\r
        return HAL_STATUS_SUCCESS; \r
 }                 \r
 \r
        return HAL_STATUS_SUCCESS; \r
 }                 \r
 \r
@@ -2136,57 +2360,89 @@ ODM_ConfigMACWithHeaderFile(
        IN      PDM_ODM_T       pDM_Odm\r
        )\r
 {\r
        IN      PDM_ODM_T       pDM_Odm\r
        )\r
 {\r
-#if (DM_ODM_SUPPORT_TYPE &  (ODM_CE|ODM_WIN))  \r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)   \r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
+       PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);       \r
 #endif\r
 #endif\r
-       u1Byte result = HAL_STATUS_SUCCESS;\r
 \r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
                                ("===>ODM_ConfigMACWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
 \r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
                                ("===>ODM_ConfigMACWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
-    ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
                                ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
                                pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
                                ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
                                pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
-       \r
+\r
+//1 AP doesn't use PHYDM initialization in these ICs\r
+#if (DM_ODM_SUPPORT_TYPE !=  ODM_AP)   \r
 #if (RTL8723A_SUPPORT == 1)\r
 #if (RTL8723A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
-       {\r
+       if (pDM_Odm->SupportICType == ODM_RTL8723A){\r
                READ_AND_CONFIG_MP(8723A,_MAC_REG);\r
        }\r
 #endif\r
                READ_AND_CONFIG_MP(8723A,_MAC_REG);\r
        }\r
 #endif\r
-#if (RTL8188E_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               READ_AND_CONFIG_MP(8188E,_MAC_REG);\r
-       }\r
-#endif\r
 #if (RTL8812A_SUPPORT == 1)\r
 #if (RTL8812A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8812)\r
-       {\r
+       if (pDM_Odm->SupportICType == ODM_RTL8812){\r
                READ_AND_CONFIG_MP(8812A,_MAC_REG);\r
        }\r
 #endif\r
 #if (RTL8821A_SUPPORT == 1)\r
                READ_AND_CONFIG_MP(8812A,_MAC_REG);\r
        }\r
 #endif\r
 #if (RTL8821A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
+       if (pDM_Odm->SupportICType == ODM_RTL8821){\r
                READ_AND_CONFIG_MP(8821A,_MAC_REG);\r
 \r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("<===8821_ODM_ConfigMACwithHeaderFile\n"));\r
        }\r
 #endif\r
 #if (RTL8723B_SUPPORT == 1)  \r
                READ_AND_CONFIG_MP(8821A,_MAC_REG);\r
 \r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("<===8821_ODM_ConfigMACwithHeaderFile\n"));\r
        }\r
 #endif\r
 #if (RTL8723B_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {\r
+       if (pDM_Odm->SupportICType == ODM_RTL8723B){\r
                READ_AND_CONFIG_MP(8723B,_MAC_REG);\r
        }\r
 #endif\r
 #if (RTL8192E_SUPPORT == 1)  \r
                READ_AND_CONFIG_MP(8723B,_MAC_REG);\r
        }\r
 #endif\r
 #if (RTL8192E_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
+       if (pDM_Odm->SupportICType == ODM_RTL8192E){\r
                READ_AND_CONFIG_MP(8192E,_MAC_REG);\r
        }\r
 #endif\r
                READ_AND_CONFIG_MP(8192E,_MAC_REG);\r
        }\r
 #endif\r
+#endif//(DM_ODM_SUPPORT_TYPE !=  ODM_AP)\r
+\r
+//1 All platforms support\r
+#if (RTL8188E_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8188E){\r
+               READ_AND_CONFIG_MP(8188E,_MAC_REG);\r
+       }\r
+#endif\r
+#if (RTL8814A_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8814A){\r
+               READ_AND_CONFIG_MP(8814A,_MAC_REG);\r
+       }\r
+#endif\r
+\r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+#if (RTL8821B_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8821B){\r
+               READ_AND_CONFIG(8821B,_MAC_REG);\r
+       }\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8822B)\r
+               READ_AND_CONFIG_TC(8822B,_MAC_REG);\r
+#endif\r
+#if (RTL8703B_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8703B)\r
+               READ_AND_CONFIG_TC(8703B,_MAC_REG);\r
+#endif\r
 \r
 \r
-       return result;\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if (RTL8188F_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8188F)\r
+               READ_AND_CONFIG_TC(8188F,_MAC_REG);\r
+#endif\r
+#endif\r
+#if (RTL8195A_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8195A)\r
+               READ_AND_CONFIG_MP(8195A,_MAC_REG);\r
+#endif\r
+#endif /*#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)*/\r
+\r
+       return HAL_STATUS_SUCCESS;    \r
 } \r
 \r
 HAL_STATUS\r
 } \r
 \r
 HAL_STATUS\r
@@ -2197,97 +2453,72 @@ ODM_ConfigFWWithHeaderFile(
        OUT u4Byte                              *pSize\r
        )\r
 {\r
        OUT u4Byte                              *pSize\r
        )\r
 {\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
 \r
 #if (RTL8188E_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
        {\r
        #ifdef CONFIG_SFW_SUPPORTED\r
 \r
 #if (RTL8188E_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
        {\r
        #ifdef CONFIG_SFW_SUPPORTED\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
+               if (ConfigType == CONFIG_FW_NIC){\r
                        READ_FIRMWARE_MP(8188E,_FW_NIC_T);\r
                        READ_FIRMWARE_MP(8188E,_FW_NIC_T);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN){\r
                        READ_FIRMWARE_MP(8188E,_FW_WoWLAN_T);\r
                        READ_FIRMWARE_MP(8188E,_FW_WoWLAN_T);\r
-               }\r
-               else if(ConfigType == CONFIG_FW_NIC_2)\r
-               {\r
+               }else if(ConfigType == CONFIG_FW_NIC_2){\r
                        READ_FIRMWARE_MP(8188E,_FW_NIC_S);\r
                        READ_FIRMWARE_MP(8188E,_FW_NIC_S);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN_2)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN_2){\r
                        READ_FIRMWARE_MP(8188E,_FW_WoWLAN_S);\r
                }\r
        #else\r
                if (ConfigType == CONFIG_FW_NIC)\r
                        READ_FIRMWARE_MP(8188E,_FW_WoWLAN_S);\r
                }\r
        #else\r
                if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
                        READ_FIRMWARE_MP(8188E,_FW_NIC);\r
                        READ_FIRMWARE_MP(8188E,_FW_NIC);\r
-               }\r
                else if (ConfigType == CONFIG_FW_WoWLAN)\r
                else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
                        READ_FIRMWARE_MP(8188E,_FW_WoWLAN);\r
                        READ_FIRMWARE_MP(8188E,_FW_WoWLAN);\r
-               }\r
        #endif\r
        }\r
 #endif\r
 #if (RTL8723B_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
        {\r
        #endif\r
        }\r
 #endif\r
 #if (RTL8723B_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
        {\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
+               if (ConfigType == CONFIG_FW_NIC){\r
                        READ_FIRMWARE_MP(8723B,_FW_NIC);\r
                        READ_FIRMWARE_MP(8723B,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN){\r
                        READ_FIRMWARE_MP(8723B,_FW_WoWLAN);\r
                        READ_FIRMWARE_MP(8723B,_FW_WoWLAN);\r
-               }\r
-#ifdef CONFIG_AP_WOWLAN\r
-               else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
-               {\r
+               #ifdef CONFIG_AP_WOWLAN\r
+               }else if (ConfigType == CONFIG_FW_AP_WoWLAN){\r
                        READ_FIRMWARE(8723B,_FW_AP_WoWLAN);\r
                        READ_FIRMWARE(8723B,_FW_AP_WoWLAN);\r
-               }\r
-#endif\r
-               else if (ConfigType == CONFIG_FW_BT)\r
-               {\r
+               #endif\r
+               }else if (ConfigType == CONFIG_FW_BT){\r
                        READ_FIRMWARE_MP(8723B,_FW_BT);\r
                        READ_FIRMWARE_MP(8723B,_FW_BT);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_MP)\r
-               {\r
+               #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+               }else if (ConfigType == CONFIG_FW_MP){\r
                        READ_FIRMWARE_MP(8723B,_FW_MP);\r
                        READ_FIRMWARE_MP(8723B,_FW_MP);\r
+               #endif\r
                }\r
        }\r
                }\r
        }\r
-#endif\r
+#endif //#if (RTL8723B_SUPPORT == 1)  \r
 #if (RTL8812A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8812)\r
        {\r
 #if (RTL8812A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8812)\r
        {\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
+               if (ConfigType == CONFIG_FW_NIC){\r
                        READ_FIRMWARE_MP(8812A,_FW_NIC);\r
                        READ_FIRMWARE_MP(8812A,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN){\r
                        READ_FIRMWARE_MP(8812A,_FW_WoWLAN);\r
                        READ_FIRMWARE_MP(8812A,_FW_WoWLAN);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_BT)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_BT){\r
                        READ_FIRMWARE_MP(8812A,_FW_NIC_BT);\r
                }\r
                        READ_FIRMWARE_MP(8812A,_FW_NIC_BT);\r
                }\r
-\r
        }\r
 #endif\r
 #if (RTL8821A_SUPPORT == 1)\r
        }\r
 #endif\r
 #if (RTL8821A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
+       if (pDM_Odm->SupportICType == ODM_RTL8821){\r
+               if (ConfigType == CONFIG_FW_NIC){\r
                        READ_FIRMWARE_MP(8821A,_FW_NIC);\r
                        READ_FIRMWARE_MP(8821A,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN){\r
                        READ_FIRMWARE_MP(8821A,_FW_WoWLAN);\r
                        READ_FIRMWARE_MP(8821A,_FW_WoWLAN);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_BT)\r
-               {\r
+#ifdef CONFIG_AP_WOWLAN\r
+               } else if (ConfigType == CONFIG_FW_AP_WoWLAN) {\r
+                       READ_FIRMWARE_MP(8821A , _FW_AP);\r
+#endif /*CONFIG_AP_WOWLAN*/\r
+               }else if (ConfigType == CONFIG_FW_BT){\r
                        READ_FIRMWARE_MP(8821A,_FW_NIC_BT);\r
                }\r
        }\r
                        READ_FIRMWARE_MP(8821A,_FW_NIC_BT);\r
                }\r
        }\r
@@ -2295,27 +2526,63 @@ ODM_ConfigFWWithHeaderFile(
 #if (RTL8192E_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
        {\r
 #if (RTL8192E_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
        {\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
+               if (ConfigType == CONFIG_FW_NIC){\r
                        READ_FIRMWARE_MP(8192E,_FW_NIC);\r
                        READ_FIRMWARE_MP(8192E,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN){\r
                        READ_FIRMWARE_MP(8192E,_FW_WoWLAN);\r
                        READ_FIRMWARE_MP(8192E,_FW_WoWLAN);\r
-               }\r
-#ifdef CONFIG_AP_WOWLAN\r
+               #ifdef CONFIG_AP_WOWLAN\r
                else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
                else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
-               {\r
                        READ_FIRMWARE_MP(8192E,_FW_AP_WoWLAN);\r
                        READ_FIRMWARE_MP(8192E,_FW_AP_WoWLAN);\r
+               #endif\r
                }\r
                }\r
+       }\r
+#endif\r
+#if (RTL8814A_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
+       {\r
+               if (ConfigType == CONFIG_FW_NIC)\r
+                       READ_FIRMWARE_MP(8814A,_FW_NIC);\r
+       }\r
 #endif\r
 \r
 #endif\r
 \r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+#if (RTL8821B_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8821B)\r
+       {\r
+       }\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8822B)\r
+       {\r
+               if (ConfigType == CONFIG_FW_NIC)\r
+                       READ_FIRMWARE_MP(8822B,_FW_NIC);\r
+               else if (ConfigType == CONFIG_FW_WoWLAN)\r
+                       READ_FIRMWARE(8822B,_FW_WoWLAN);\r
        }\r
 #endif\r
        }\r
 #endif\r
+#if (RTL8703B_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8703B)\r
+       {\r
+               if (ConfigType == CONFIG_FW_NIC)\r
+                       READ_FIRMWARE_MP(8703B,_FW_NIC);\r
+       }\r
+#endif\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if (RTL8188F_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8188F)\r
+       {\r
+               if (ConfigType == CONFIG_FW_NIC)\r
+                       READ_FIRMWARE_MP(8188F,_FW_NIC);\r
+       }\r
+#endif\r
+#endif\r
+#endif//(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+\r
+#endif//(DM_ODM_SUPPORT_TYPE != ODM_AP)\r
        return HAL_STATUS_SUCCESS;    \r
 } \r
 \r
        return HAL_STATUS_SUCCESS;    \r
 } \r
 \r
-\r
 u4Byte \r
 ODM_GetHWImgVersion(\r
        IN      PDM_ODM_T       pDM_Odm\r
 u4Byte \r
 ODM_GetHWImgVersion(\r
        IN      PDM_ODM_T       pDM_Odm\r
@@ -2323,40 +2590,63 @@ ODM_GetHWImgVersion(
 {\r
     u4Byte  Version=0;\r
 \r
 {\r
     u4Byte  Version=0;\r
 \r
+//1 AP doesn't use PHYDM initialization in these ICs\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
 #if (RTL8723A_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
                Version = GET_VERSION_MP(8723A,_MAC_REG);\r
 #endif\r
 #if (RTL8723A_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
                Version = GET_VERSION_MP(8723A,_MAC_REG);\r
 #endif\r
-\r
 #if (RTL8723B_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
                Version = GET_VERSION_MP(8723B,_MAC_REG);\r
 #endif\r
 #if (RTL8723B_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
                Version = GET_VERSION_MP(8723B,_MAC_REG);\r
 #endif\r
-\r
-#if (RTL8188E_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
-               Version = GET_VERSION_MP(8188E,_MAC_REG);\r
-#endif\r
-\r
 #if (RTL8821A_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8821)\r
                Version = GET_VERSION_MP(8821A,_MAC_REG);\r
 #endif\r
 #if (RTL8821A_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8821)\r
                Version = GET_VERSION_MP(8821A,_MAC_REG);\r
 #endif\r
-\r
 #if (RTL8192E_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
                Version = GET_VERSION_MP(8192E,_MAC_REG);\r
 #endif\r
 #if (RTL8192E_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
                Version = GET_VERSION_MP(8192E,_MAC_REG);\r
 #endif\r
-\r
 #if (RTL8812A_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8812)\r
                Version = GET_VERSION_MP(8812A,_MAC_REG);\r
 #endif\r
 #if (RTL8812A_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8812)\r
                Version = GET_VERSION_MP(8812A,_MAC_REG);\r
 #endif\r
+#endif //(DM_ODM_SUPPORT_TYPE != ODM_AP)\r
 \r
 \r
-       return Version;\r
-}\r
-\r
+/*1 All platforms support*/\r
+#if (RTL8188E_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
+               Version = GET_VERSION_MP(8188E,_MAC_REG);\r
+#endif\r
+#if (RTL8814A_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
+               Version = GET_VERSION_MP(8814A,_MAC_REG);\r
+#endif\r
 \r
 \r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+#if (RTL8821B_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8821B)\r
+               Version = GET_VERSION(8821B,_MAC_REG);\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8822B)\r
+               Version = GET_VERSION(8822B, _MAC_REG);\r
+#endif\r
+#if (RTL8703B_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8703B)\r
+               Version = GET_VERSION_TC(8703B, _MAC_REG);\r
+#endif\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if (RTL8188F_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8188F)\r
+               Version = GET_VERSION_TC(8188F, _MAC_REG);\r
+#endif\r
+#endif\r
+#endif //(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 \r
 \r
+       return Version;\r
+}\r
 \r
 \r
 \r
 \r
index da0e5fc1cfcec829cd620ceb0cef74824a0e531a..11d2d3862e259509b1fe0fcb235ab13e2e971de3 100755 (executable)
@@ -51,119 +51,131 @@ typedef struct _Phy_Rx_AGC_Info
        #endif\r
 } PHY_RX_AGC_INFO_T,*pPHY_RX_AGC_INFO_T;\r
 \r
        #endif\r
 } PHY_RX_AGC_INFO_T,*pPHY_RX_AGC_INFO_T;\r
 \r
-typedef struct _Phy_Status_Rpt_8192cd\r
-{\r
+typedef struct _Phy_Status_Rpt_8192cd {\r
        PHY_RX_AGC_INFO_T path_agc[2];\r
        PHY_RX_AGC_INFO_T path_agc[2];\r
-       u1Byte  ch_corr[2];                                                                     \r
+       u1Byte  ch_corr[2];\r
        u1Byte  cck_sig_qual_ofdm_pwdb_all;\r
        u1Byte  cck_agc_rpt_ofdm_cfosho_a;\r
        u1Byte  cck_rpt_b_ofdm_cfosho_b;\r
        u1Byte  cck_sig_qual_ofdm_pwdb_all;\r
        u1Byte  cck_agc_rpt_ofdm_cfosho_a;\r
        u1Byte  cck_rpt_b_ofdm_cfosho_b;\r
-       u1Byte  rsvd_1;//ch_corr_msb;\r
-       u1Byte  noise_power_db_msb;\r
-       s1Byte  path_cfotail[2];        \r
-       u1Byte  pcts_mask[2];   \r
-       s1Byte  stream_rxevm[2];        \r
+       u1Byte  rsvd_1;/*ch_corr_msb;*/\r
+       u1Byte  noise_power_db_msb;\r
+       s1Byte  path_cfotail[2];\r
+       u1Byte  pcts_mask[2];\r
+       s1Byte  stream_rxevm[2];\r
        u1Byte  path_rxsnr[2];\r
        u1Byte  path_rxsnr[2];\r
-       u1Byte  noise_power_db_lsb;\r
+       u1Byte  noise_power_db_lsb;\r
        u1Byte  rsvd_2[3];\r
        u1Byte  rsvd_2[3];\r
-       u1Byte  stream_csi[2];\r
-       u1Byte  stream_target_csi[2];\r
-       s1Byte  sig_evm;\r
-       u1Byte  rsvd_3; \r
-\r
-#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)     \r
-       u1Byte  antsel_rx_keep_2:1;     //ex_intf_flg:1;\r
-       u1Byte  sgi_en:1;\r
-       u1Byte  rxsc:2; \r
-       u1Byte  idle_long:1;\r
-       u1Byte  r_ant_train_en:1;\r
-       u1Byte  ant_sel_b:1;\r
-       u1Byte  ant_sel:1;      \r
-#else  // _BIG_ENDIAN_ \r
-       u1Byte  ant_sel:1;      \r
-       u1Byte  ant_sel_b:1;\r
-       u1Byte  r_ant_train_en:1;\r
-       u1Byte  idle_long:1;\r
-       u1Byte  rxsc:2;\r
-       u1Byte  sgi_en:1;\r
-       u1Byte  antsel_rx_keep_2:1;     //ex_intf_flg:1;\r
+       u1Byte  stream_csi[2];\r
+       u1Byte  stream_target_csi[2];\r
+       s1Byte  sig_evm;\r
+       u1Byte  rsvd_3;\r
+\r
+#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)\r
+       u1Byte  antsel_rx_keep_2: 1;    /*ex_intf_flg:1;*/\r
+       u1Byte  sgi_en: 1;\r
+       u1Byte  rxsc: 2;\r
+       u1Byte  idle_long: 1;\r
+       u1Byte  r_ant_train_en: 1;\r
+       u1Byte  ant_sel_b: 1;\r
+       u1Byte  ant_sel: 1;\r
+#else  /*_BIG_ENDIAN_  */\r
+       u1Byte  ant_sel: 1;\r
+       u1Byte  ant_sel_b: 1;\r
+       u1Byte  r_ant_train_en: 1;\r
+       u1Byte  idle_long: 1;\r
+       u1Byte  rxsc: 2;\r
+       u1Byte  sgi_en: 1;\r
+       u1Byte  antsel_rx_keep_2: 1;/*ex_intf_flg:1;*/\r
+#endif\r
+} PHY_STATUS_RPT_8192CD_T, *PPHY_STATUS_RPT_8192CD_T;\r
+\r
+\r
+typedef struct _Phy_Status_Rpt_8812 {\r
+/*     DWORD 0*/\r
+       u1Byte                  gain_trsw[2];                                                   /*path-A and path-B {TRSW, gain[6:0] }*/\r
+       u1Byte                  chl_num_LSB;                                                    /*channel number[7:0]*/\r
+#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)\r
+       u1Byte                  chl_num_MSB: 2;                                                 /*channel number[9:8]*/\r
+       u1Byte                  sub_chnl: 4;                                                            /*sub-channel location[3:0]*/\r
+       u1Byte                  r_RFMOD: 2;                                                             /*RF mode[1:0]*/\r
+#else  /*_BIG_ENDIAN_  */\r
+       u1Byte                  r_RFMOD: 2;\r
+       u1Byte                  sub_chnl: 4;\r
+       u1Byte                  chl_num_MSB: 2;\r
 #endif\r
 #endif\r
-} PHY_STATUS_RPT_8192CD_T,*PPHY_STATUS_RPT_8192CD_T;\r
 \r
 \r
+/*     DWORD 1*/\r
+       u1Byte                  pwdb_all;                                                               /*CCK signal quality / OFDM pwdb all*/\r
+       s1Byte                  cfosho[2];              /*DW1 byte 1 DW1 byte2  CCK AGC report and CCK_BB_Power / OFDM Path-A and Path-B short CFO*/\r
+#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)\r
+       /*this should be checked again because the definition of 8812 and 8814 is different*/\r
+/*     u1Byte                  r_cck_rx_enable_pathc:2;                                        cck rx enable pathc[1:0]*/\r
+/*     u1Byte                  cck_rx_path:4;                                                  cck rx path[3:0]*/\r
+       u1Byte                  resvd_0: 6;\r
+       u1Byte                  bt_RF_ch_MSB: 2;                                                /*8812A:2'b0                    8814A: bt rf channel keep[7:6]*/\r
+#else  /*_BIG_ENDIAN_*/\r
+       u1Byte                  bt_RF_ch_MSB: 2;\r
+       u1Byte                  resvd_0: 6;\r
+#endif\r
 \r
 \r
-typedef struct _Phy_Status_Rpt_8812\r
-{\r
-#if 0\r
-       PHY_RX_AGC_INFO_T path_agc[2];\r
-       u1Byte  ch_num[2];                                                                      \r
-       u1Byte  cck_sig_qual_ofdm_pwdb_all;\r
-       u1Byte  cck_agc_rpt_ofdm_cfosho_a;\r
-       u1Byte  cck_bb_pwr_ofdm_cfosho_b;\r
-       u1Byte    cck_rx_path;  //CCK_RX_PATH [3:0] (with regA07[3:0] definition)       \r
-       u1Byte  rsvd_1; \r
-       u1Byte  path_cfotail[2];        \r
-       u1Byte  pcts_mask[2];   \r
-       s1Byte  stream_rxevm[2];        \r
-       u1Byte  path_rxsnr[2];\r
-       u1Byte  rsvd_2[2];      \r
-       u1Byte  stream_snr[2];  \r
-       u1Byte  stream_csi[2];\r
-       u1Byte  rsvd_3[2];\r
-       s1Byte  sig_evm;\r
-       u1Byte  rsvd_4; \r
-#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)     \r
-       u1Byte  antidx_anta:3;\r
-       u1Byte  antidx_antb:3;\r
-       u1Byte  rsvd_5:2;\r
-#else  // _BIG_ENDIAN_ \r
-       u1Byte  rsvd_5:2;\r
-       u1Byte  antidx_antb:3;\r
-       u1Byte  antidx_anta:3;  \r
+/*     DWORD 2*/\r
+#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)\r
+       u1Byte                  ant_div_sw_a: 1;                                                        /*8812A: ant_div_sw_a    8814A: 1'b0*/\r
+       u1Byte                  ant_div_sw_b: 1;                                                        /*8812A: ant_div_sw_b    8814A: 1'b0*/\r
+       u1Byte                  bt_RF_ch_LSB: 6;                                                /*8812A: 6'b0                   8814A: bt rf channel keep[5:0]*/\r
+#else  /*_BIG_ENDIAN_  */\r
+       u1Byte                  bt_RF_ch_LSB: 6;\r
+       u1Byte                  ant_div_sw_b: 1;\r
+       u1Byte                  ant_div_sw_a: 1;\r
 #endif\r
 #endif\r
+       s1Byte                  cfotail[2];                /*DW2 byte 1 DW2 byte 2      path-A and path-B CFO tail*/\r
+       u1Byte                  PCTS_MSK_RPT_0;                                         /*PCTS mask report[7:0]*/\r
+       u1Byte                  PCTS_MSK_RPT_1;                                         /*PCTS mask report[15:8]*/\r
+\r
+/*     DWORD 3*/\r
+       s1Byte                  rxevm[2];                /*DW3 byte 1 DW3 byte 2        stream 1 and stream 2 RX EVM*/\r
+       s1Byte                  rxsnr[2];                /*DW3 byte 3 DW4 byte 0        path-A and path-B RX SNR*/\r
+\r
+/*     DWORD 4*/\r
+       u1Byte                  PCTS_MSK_RPT_2;                                         /*PCTS mask report[23:16]*/\r
+#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)\r
+       u1Byte                  PCTS_MSK_RPT_3: 6;                                              /*PCTS mask report[29:24]*/\r
+       u1Byte                  pcts_rpt_valid: 1;                                                      /*pcts_rpt_valid*/\r
+       u1Byte                  resvd_1: 1;                                                             /*1'b0*/\r
+#else  /*_BIG_ENDIAN_*/\r
+       u1Byte                  resvd_1: 1;\r
+       u1Byte                  pcts_rpt_valid: 1;\r
+       u1Byte                  PCTS_MSK_RPT_3: 6;\r
 #endif\r
 #endif\r
-\r
-       //2012.05.24 LukeLee: This structure should take big/little endian in consideration later.....\r
-       \r
-       //DWORD 0\r
-       u1Byte                  gain_trsw[2];\r
-#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)     \r
-       u2Byte                  chl_num:10;\r
-       u2Byte                  sub_chnl:4;\r
-       u2Byte                  r_RFMOD:2;\r
-#else  // _BIG_ENDIAN_ \r
-       u2Byte                  r_RFMOD:2;\r
-       u2Byte                  sub_chnl:4;\r
-       u2Byte                  chl_num:10;\r
+       s1Byte                  rxevm_cd[2];       /*DW 4 byte 3 DW5 byte 0  8812A: 16'b0       8814A: stream 3 and stream 4 RX EVM*/\r
+\r
+/*     DWORD 5*/\r
+       u1Byte                  csi_current[2];    /*DW5 byte 1 DW5 byte 2      8812A: stream 1 and 2 CSI       8814A:  path-C and path-D RX SNR*/\r
+       u1Byte                  gain_trsw_cd[2];           /*DW5 byte 3 DW6 byte 0      path-C and path-D {TRSW, gain[6:0] }*/\r
+\r
+/*     DWORD 6*/\r
+       s1Byte                  sigevm;                                                                 /*signal field EVM*/\r
+#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)\r
+       u1Byte                  antidx_antc: 3;                                                 /*8812A: 3'b0           8814A: antidx_antc[2:0]*/\r
+       u1Byte                  antidx_antd: 3;                                                 /*8812A: 3'b0           8814A: antidx_antd[2:0]*/\r
+       u1Byte                  dpdt_ctrl_keep: 1;                                              /*8812A: 1'b0           8814A: dpdt_ctrl_keep*/\r
+       u1Byte                  GNT_BT_keep: 1;                                                 /*8812A: 1'b0           8814A: GNT_BT_keep*/\r
+#else  /*_BIG_ENDIAN_*/\r
+       u1Byte                  GNT_BT_keep: 1;\r
+       u1Byte                  dpdt_ctrl_keep: 1;\r
+       u1Byte                  antidx_antd: 3;\r
+       u1Byte                  antidx_antc: 3;\r
 #endif\r
 #endif\r
-\r
-       //DWORD 1\r
-       u1Byte                  pwdb_all;\r
-       u1Byte                  cfosho[4];      // DW 1 byte 1 DW 2 byte 0\r
-\r
-       //DWORD 2\r
-       s1Byte                  cfotail[4];     // DW 2 byte 1 DW 3 byte 0\r
-\r
-       //DWORD 3\r
-       s1Byte                  rxevm[2];       // DW 3 byte 1 DW 3 byte 2\r
-       s1Byte                  rxsnr[2];       // DW 3 byte 3 DW 4 byte 0\r
-\r
-       //DWORD 4\r
-       u1Byte                  PCTS_MSK_RPT[2];        \r
-       u1Byte                  pdsnr[2];       // DW 4 byte 3 DW 5 Byte 0\r
-\r
-       //DWORD 5\r
-       u1Byte                  csi_current[2];\r
-       u1Byte                  rx_gain_c;\r
-\r
-       //DWORD 6\r
-       u1Byte                  rx_gain_d;\r
-       s1Byte                  sigevm;\r
-       u1Byte                  resvd_0;\r
-       u1Byte                  antidx_anta:3;\r
-       u1Byte                  antidx_antb:3;\r
-       u1Byte                  resvd_1:2;\r
-} PHY_STATUS_RPT_8812_T,*PPHY_STATUS_RPT_8812_T;\r
-\r
+#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)\r
+       u1Byte                  antidx_anta: 3;                                                 /*antidx_anta[2:0]*/\r
+       u1Byte                  antidx_antb: 3;                                                 /*antidx_antb[2:0]*/\r
+       u1Byte                  resvd_2: 2;                                                             /*1'b0*/\r
+#else  /*_BIG_ENDIAN_*/\r
+       u1Byte                  resvd_2: 2;\r
+       u1Byte                  antidx_antb: 3;\r
+       u1Byte                  antidx_anta: 3;\r
+#endif\r
+} PHY_STATUS_RPT_8812_T, *PPHY_STATUS_RPT_8812_T;\r
 \r
 VOID\r
 odm_Init_RSSIForDM(\r
 \r
 VOID\r
 odm_Init_RSSIForDM(\r
@@ -187,7 +199,6 @@ ODM_MacStatusQuery(
        IN              BOOLEAN                                         bPacketToSelf,\r
        IN              BOOLEAN                                         bPacketBeacon\r
        );\r
        IN              BOOLEAN                                         bPacketToSelf,\r
        IN              BOOLEAN                                         bPacketBeacon\r
        );\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_AP))\r
 \r
 HAL_STATUS\r
 ODM_ConfigRFWithTxPwrTrackHeaderFile(\r
 \r
 HAL_STATUS\r
 ODM_ConfigRFWithTxPwrTrackHeaderFile(\r
@@ -231,7 +242,6 @@ odm_SignalScaleMapping(
        IN      s4Byte CurrSig \r
        );\r
 \r
        IN      s4Byte CurrSig \r
        );\r
 \r
-#endif\r
 \r
 #endif\r
 \r
 \r
 #endif\r
 \r
index 3bbea923f5af6b45776081a9eacd5190688f442a..72f8907059d102de64a7e3dbf8fc658f1edc2bab 100755 (executable)
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *                                        
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+//============================================================
+// include files
+//============================================================
 #include "Mp_Precomp.h"
 #include "Mp_Precomp.h"
-#include "phydm_precomp.h"\r
-\r
+#include "phydm_precomp.h"
+
+#if(defined(CONFIG_PATH_DIVERSITY))
+#if RTL8814A_SUPPORT
 
 
-\r
 VOID
 VOID
-odm_PathDiversityInit(
-       IN      PVOID   pDM_VOID\r
+phydm_dtp_fix_tx_path(
+       IN      PVOID   pDM_VOID,
+       IN      u1Byte  path
+       )
+{
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       pPATHDIV_T              pDM_PathDiv = &pDM_Odm->DM_PathDiv;
+       u1Byte                  i,num_enable_path=0;
+
+       if(path==pDM_PathDiv->pre_tx_path)
+       {
+               return;
+       }
+       else
+       {
+               pDM_PathDiv->pre_tx_path=path;
+       }
+
+       ODM_SetBBReg( pDM_Odm, 0x93c, BIT18|BIT19, 3);
+
+       for(i=0; i<4; i++)
+       {
+               if(path&BIT(i))
+                       num_enable_path++;
+       }
+       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Number of trun-on path : (( %d ))\n", num_enable_path));
+
+       if(num_enable_path == 1)
+       {
+               ODM_SetBBReg( pDM_Odm, 0x93c, 0xf00000, path);
+       
+               if(path==PHYDM_A)//1-1
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A ))\n"));
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
+               }
+               else    if(path==PHYDM_B)//1-2
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( B ))\n"));
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 0);
+               }
+               else    if(path==PHYDM_C)//1-3
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( C ))\n"));
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 0);
+
+               }
+               else    if(path==PHYDM_D)//1-4
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( D ))\n"));
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 0);
+               }
+
+       }
+       else    if(num_enable_path == 2)
+       {
+               ODM_SetBBReg( pDM_Odm, 0x93c, 0xf00000, path);
+               ODM_SetBBReg( pDM_Odm, 0x940, 0xf0, path);
+       
+               if(path==PHYDM_AB)//2-1
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A B ))\n"));
+                       //set for 1ss
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 1);
+                       //set for 2ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 1);                  
+               }
+               else    if(path==PHYDM_AC)//2-2
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A C ))\n"));
+                       //set for 1ss
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 1);
+                       //set for 2ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 1);  
+               }
+               else    if(path==PHYDM_AD)//2-3
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A D ))\n"));
+                       //set for 1ss
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 1);
+                       //set for 2ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 1);  
+               }
+               else    if(path==PHYDM_BC)//2-4
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( B C ))\n"));
+                       //set for 1ss
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 1);
+                       //set for 2ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 1);  
+               }
+               else    if(path==PHYDM_BD)//2-5
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( B D ))\n"));
+                       //set for 1ss
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 1);
+                       //set for 2ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 1);  
+               }
+               else    if(path==PHYDM_CD)//2-6
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( C D ))\n"));
+                       //set for 1ss
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 1);
+                       //set for 2ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 1);  
+               }
+
+       }
+       else    if(num_enable_path == 3)
+       {
+               ODM_SetBBReg( pDM_Odm, 0x93c, 0xf00000, path);
+               ODM_SetBBReg( pDM_Odm, 0x940, 0xf0, path);
+               ODM_SetBBReg( pDM_Odm, 0x940, 0xf0000, path);
+       
+               if(path==PHYDM_ABC)//3-1
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A B C))\n"));
+                       //set for 1ss
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 1);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 2);                  
+                       //set for 2ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 1);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 2);
+                       //set for 3ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT21|BIT20, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT23|BIT22, 1);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT25|BIT24, 2);
+               }
+               else    if(path==PHYDM_ABD)//3-2
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A B D ))\n"));
+                       //set for 1ss
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 1);          
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 2);
+                       //set for 2ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 1);          
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 2);
+                       //set for 3ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT21|BIT20, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT23|BIT22, 1);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT27|BIT26, 2);
+
+               }
+               else    if(path==PHYDM_ACD)//3-3
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A C D ))\n"));
+                       //set for 1ss
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 1);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 2);                  
+                       //set for 2ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 1);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 2);
+                       //set for 3ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT21|BIT20, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT25|BIT24, 1);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT27|BIT26, 2);
+               }
+               else    if(path==PHYDM_BCD)//3-4
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( B C D))\n"));
+                       //set for 1ss
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 1);
+                       ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 2);                  
+                       //set for 2ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 1);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 2);
+                       //set for 3ss
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT23|BIT22, 0);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT25|BIT24, 1);
+                       ODM_SetBBReg( pDM_Odm, 0x940, BIT27|BIT26, 2);
+               }
+       }
+       else    if(num_enable_path == 4)
+       {
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path ((A  B C D))\n"));
+       }
+
+}
+
+VOID
+phydm_find_default_path(
+       IN      PVOID   pDM_VOID
+       )
+{
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       pPATHDIV_T              pDM_PathDiv = &pDM_Odm->DM_PathDiv;
+       u4Byte  rssi_avg_a=0, rssi_avg_b=0, rssi_avg_c=0, rssi_avg_d=0, rssi_avg_bcd=0;
+       u4Byte  rssi_total_a=0, rssi_total_b=0, rssi_total_c=0, rssi_total_d=0;
+
+       //2 Default Path Selection By RSSI
+
+       rssi_avg_a = (pDM_PathDiv->path_a_cnt_all > 0)? (pDM_PathDiv->path_a_sum_all / pDM_PathDiv->path_a_cnt_all) :0 ;
+       rssi_avg_b = (pDM_PathDiv->path_b_cnt_all > 0)? (pDM_PathDiv->path_b_sum_all / pDM_PathDiv->path_b_cnt_all) :0 ;
+       rssi_avg_c = (pDM_PathDiv->path_c_cnt_all > 0)? (pDM_PathDiv->path_c_sum_all / pDM_PathDiv->path_c_cnt_all) :0 ;
+       rssi_avg_d = (pDM_PathDiv->path_d_cnt_all > 0)? (pDM_PathDiv->path_d_sum_all / pDM_PathDiv->path_d_cnt_all) :0 ;
+
+
+       pDM_PathDiv->path_a_sum_all = 0;
+       pDM_PathDiv->path_a_cnt_all = 0;
+       pDM_PathDiv->path_b_sum_all = 0;
+       pDM_PathDiv->path_b_cnt_all = 0;
+       pDM_PathDiv->path_c_sum_all = 0;
+       pDM_PathDiv->path_c_cnt_all = 0;
+       pDM_PathDiv->path_d_sum_all = 0;
+       pDM_PathDiv->path_d_cnt_all = 0;
+
+       if(pDM_PathDiv->use_path_a_as_default_ant == 1)
+       {
+               rssi_avg_bcd=(rssi_avg_b+rssi_avg_c+rssi_avg_d)/3;
+
+               if( (rssi_avg_a + ANT_DECT_RSSI_TH) > rssi_avg_bcd  )
+               {
+                       pDM_PathDiv->is_pathA_exist=TRUE;
+                       pDM_PathDiv->default_path=PATH_A;
+               }
+               else
+               {
+                       pDM_PathDiv->is_pathA_exist=FALSE;
+               }
+       }
+       else
+       {
+               if( (rssi_avg_a >=rssi_avg_b) && (rssi_avg_a >=rssi_avg_c)&&(rssi_avg_a >=rssi_avg_d))
+                       pDM_PathDiv->default_path=PATH_A;
+               else if(  (rssi_avg_b >=rssi_avg_c)&&(rssi_avg_b >=rssi_avg_d))
+                       pDM_PathDiv->default_path=PATH_B;
+               else if(  rssi_avg_c >=rssi_avg_d)
+                       pDM_PathDiv->default_path=PATH_C;
+               else
+                       pDM_PathDiv->default_path=PATH_D;
+       }
+
+
+}
+
+
+VOID
+phydm_candidate_dtp_update(
+       IN      PVOID   pDM_VOID
+       )
+{
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       pPATHDIV_T              pDM_PathDiv = &pDM_Odm->DM_PathDiv;
+
+       pDM_PathDiv->num_candidate=3;
+       
+       if(pDM_PathDiv->use_path_a_as_default_ant == 1)
+       {
+               if(pDM_PathDiv->num_tx_path==3)
+               {
+                       if(pDM_PathDiv->is_pathA_exist)
+                       {
+                               pDM_PathDiv->ant_candidate_1 =  PHYDM_ABC; 
+                               pDM_PathDiv->ant_candidate_2 =  PHYDM_ABD; 
+                               pDM_PathDiv->ant_candidate_3 =  PHYDM_ACD;
+                       }
+                       else // use path BCD 
+                       {
+                               pDM_PathDiv->num_candidate=1;
+                               phydm_dtp_fix_tx_path(pDM_Odm, PHYDM_BCD);
+                               return;
+                       }
+               }
+               else    if(pDM_PathDiv->num_tx_path==2)
+               {
+                       if(pDM_PathDiv->is_pathA_exist)
+                       {
+                               pDM_PathDiv->ant_candidate_1 =  PHYDM_AB; 
+                               pDM_PathDiv->ant_candidate_2 =  PHYDM_AC; 
+                               pDM_PathDiv->ant_candidate_3 =  PHYDM_AD; 
+                       }
+                       else
+                       {
+                               pDM_PathDiv->ant_candidate_1 =  PHYDM_BC; 
+                               pDM_PathDiv->ant_candidate_2 =  PHYDM_BD; 
+                               pDM_PathDiv->ant_candidate_3 =  PHYDM_CD; 
+                       }       
+               }
+       }
+       else
+       {
+               //2 3 TX Mode 
+               if(pDM_PathDiv->num_tx_path==3)//choose 3 ant form 4 
+               {
+                       if(pDM_PathDiv->default_path == PATH_A) //choose 2 ant form 3
+                       {
+                               pDM_PathDiv->ant_candidate_1 =  PHYDM_ABC; 
+                               pDM_PathDiv->ant_candidate_2 =  PHYDM_ABD; 
+                               pDM_PathDiv->ant_candidate_3 =  PHYDM_ACD; 
+                       }
+                       else if(pDM_PathDiv->default_path==PATH_B)
+                       {
+                               pDM_PathDiv->ant_candidate_1 =  PHYDM_ABC; 
+                               pDM_PathDiv->ant_candidate_2 =  PHYDM_ABD; 
+                               pDM_PathDiv->ant_candidate_3 =  PHYDM_BCD; 
+                       }
+                       else if(pDM_PathDiv->default_path == PATH_C)
+                       {
+                               pDM_PathDiv->ant_candidate_1 =  PHYDM_ABC; 
+                               pDM_PathDiv->ant_candidate_2 =  PHYDM_ACD; 
+                               pDM_PathDiv->ant_candidate_3 =  PHYDM_BCD; 
+                       }
+                       else if(pDM_PathDiv->default_path == PATH_D)
+                       {
+                               pDM_PathDiv->ant_candidate_1 =  PHYDM_ABD; 
+                               pDM_PathDiv->ant_candidate_2 =  PHYDM_ACD; 
+                               pDM_PathDiv->ant_candidate_3 =  PHYDM_BCD; 
+                       }
+               }
+               
+               //2 2 TX Mode 
+               else if(pDM_PathDiv->num_tx_path==2)//choose 2 ant form 4 
+               {
+                       if(pDM_PathDiv->default_path == PATH_A) //choose 2 ant form 3
+                       {
+                               pDM_PathDiv->ant_candidate_1 =  PHYDM_AB; 
+                               pDM_PathDiv->ant_candidate_2 =  PHYDM_AC; 
+                               pDM_PathDiv->ant_candidate_3 =  PHYDM_AD; 
+                       }
+                       else if(pDM_PathDiv->default_path==PATH_B)
+                       {
+                               pDM_PathDiv->ant_candidate_1 =  PHYDM_AB; 
+                               pDM_PathDiv->ant_candidate_2 =  PHYDM_BC; 
+                               pDM_PathDiv->ant_candidate_3 =  PHYDM_BD; 
+                       }
+                       else if(pDM_PathDiv->default_path == PATH_C)
+                       {
+                               pDM_PathDiv->ant_candidate_1 =  PHYDM_AC; 
+                               pDM_PathDiv->ant_candidate_2 =  PHYDM_BC; 
+                               pDM_PathDiv->ant_candidate_3 =  PHYDM_CD; 
+                       }
+                       else if(pDM_PathDiv->default_path == PATH_D)
+                       {
+                               pDM_PathDiv->ant_candidate_1=  PHYDM_AD; 
+                               pDM_PathDiv->ant_candidate_2 =  PHYDM_BD; 
+                               pDM_PathDiv->ant_candidate_3=  PHYDM_CD; 
+                       }
+               }
+       }
+}
+
+
+VOID
+phydm_dynamic_tx_path(
+       IN      PVOID   pDM_VOID
 )
 )
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+{
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       pPATHDIV_T              pDM_PathDiv = &pDM_Odm->DM_PathDiv;     
+       
+       PSTA_INFO_T     pEntry;
+       u4Byte  i;
+       u1Byte  num_client=0;
+       u1Byte  H2C_Parameter[6] ={0};
 
 
-       if(pDM_Odm->mp_mode == TRUE)
+
+       if(!pDM_Odm->bLinked) //bLinked==False
+       {
+               ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("DTP_8814 [No Link!!!]\n"));
+               
+               if(pDM_PathDiv->bBecomeLinked == TRUE)
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" [Be disconnected]----->\n"));
+                       pDM_PathDiv->bBecomeLinked = pDM_Odm->bLinked;
+               }
+               return;
+       }       
+       else
+       {
+               if(pDM_PathDiv->bBecomeLinked ==FALSE)
+               {
+                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" [Be Linked !!!]----->\n"));
+                       pDM_PathDiv->bBecomeLinked = pDM_Odm->bLinked;
+               }       
+       }       
+       
+       //2 [Period CTRL]
+       if(pDM_PathDiv->dtp_period >=2)
+       {
+               pDM_PathDiv->dtp_period=0;      
+       }
+       else
+       {       
+               //ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("Phydm_Dynamic_Tx_Path_8814A()  Stay = (( %d ))\n",pDM_PathDiv->dtp_period));
+               pDM_PathDiv->dtp_period++;              
+               return;
+       }
+       
+
+       //2 [Fix Path]
+       if (pDM_Odm->path_select != PHYDM_AUTO_PATH)
+       {
                return;
                return;
+       }
+       
+       //2 [Check Bfer]        
+       #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+       #if (BEAMFORMING_SUPPORT == 1)
+       {
+               BEAMFORMING_CAP         BeamformCap = (pDM_Odm->BeamformingInfo.BeamformCap);
 
 
+               if( BeamformCap & BEAMFORMER_CAP ) //  BFmer On  &&   Div On ->  Div Off
+               {       
+                       if( pDM_PathDiv->fix_path_bfer == 0) 
+                       {
+                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("[ PathDiv : OFF ]   BFmer ==1  \n"));
+                               pDM_PathDiv->fix_path_bfer = 1 ;                        
+                       }
+                       return;
+               }
+               else // BFmer Off   &&   Div Off ->  Div On
+               {
+                       if( pDM_PathDiv->fix_path_bfer == 1 ) 
+                       {
+                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("[ PathDiv : ON ]   BFmer ==0 \n"));
+                               pDM_PathDiv->fix_path_bfer = 0;
+                       }
+               }
+       }
+       #endif  
+       #endif
+
+       if(pDM_PathDiv->use_path_a_as_default_ant ==1)
+       {
+               phydm_find_default_path(pDM_Odm);
+               phydm_candidate_dtp_update(pDM_Odm);    
+       }
+       else
+       {
+               if( pDM_PathDiv->dtp_state == PHYDM_DTP_INIT)
+               {
+                       phydm_find_default_path(pDM_Odm);
+                       phydm_candidate_dtp_update(pDM_Odm);
+                       pDM_PathDiv->dtp_state = PHYDM_DTP_RUNNING_1;
+               }
+               
+               else    if( pDM_PathDiv->dtp_state == PHYDM_DTP_RUNNING_1)
+               {
+                       pDM_PathDiv->dtp_check_patha_counter++;
+                       
+                       if(pDM_PathDiv->dtp_check_patha_counter>=NUM_RESET_DTP_PERIOD)
+                       {
+                               pDM_PathDiv->dtp_check_patha_counter=0;
+                               pDM_PathDiv->dtp_state = PHYDM_DTP_INIT;
+                       }
+                       //2 Search space update         
+                       else
+                       {
+                               // 1.  find the worst candidate
+                               
+
+                               // 2. repalce the worst candidate
+                       }
+               }
+       }
+
+       //2 Dynamic Path Selection H2C
+
+       if(pDM_PathDiv->num_candidate == 1)
+       {
+               return;
+       }
+       else
+       {       
+               H2C_Parameter[0] =  pDM_PathDiv->num_candidate;
+               H2C_Parameter[1] =  pDM_PathDiv->num_tx_path;   
+               H2C_Parameter[2] =  pDM_PathDiv->ant_candidate_1; 
+               H2C_Parameter[3] =  pDM_PathDiv->ant_candidate_2; 
+               H2C_Parameter[4] =  pDM_PathDiv->ant_candidate_3; 
+
+               ODM_FillH2CCmd(pDM_Odm, PHYDM_H2C_DYNAMIC_TX_PATH, 6, H2C_Parameter);
+       }
+
+}
+
+
+
+VOID
+phydm_dynamic_tx_path_init(
+       IN      PVOID   pDM_VOID
+       )
+{
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       pPATHDIV_T              pDM_PathDiv  = &(pDM_Odm->DM_PathDiv);
+       PADAPTER                pAdapter = pDM_Odm->Adapter;
+       #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+       USB_MODE_MECH   *pUsbModeMech = &pAdapter->UsbModeMechanism;
+       #endif
+       u1Byte                  search_space_2[NUM_CHOOSE2_FROM4]= {PHYDM_AB, PHYDM_AC, PHYDM_AD, PHYDM_BC, PHYDM_BD, PHYDM_CD };
+       u1Byte                  search_space_3[NUM_CHOOSE3_FROM4]= {PHYDM_BCD, PHYDM_ACD,  PHYDM_ABD, PHYDM_ABC};
+
+       #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+               pDM_PathDiv->is_u3_mode = (pUsbModeMech->CurUsbMode==USB_MODE_U3)? 1 : 0 ;
+       #else
+               pDM_PathDiv->is_u3_mode = 1;
+       #endif
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("Dynamic TX Path Init 8814\n"));
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("is_u3_mode = (( %d ))\n", pDM_PathDiv->is_u3_mode));
+
+       memcpy(&(pDM_PathDiv->search_space_2[0]), &(search_space_2[0]), NUM_CHOOSE2_FROM4);
+       memcpy(&(pDM_PathDiv->search_space_3[0]), &(search_space_3[0]), NUM_CHOOSE3_FROM4);
+
+       pDM_PathDiv->use_path_a_as_default_ant= 1;
+       pDM_PathDiv->dtp_state = PHYDM_DTP_INIT;        
+       pDM_Odm->path_select = PHYDM_AUTO_PATH;
+       pDM_PathDiv->path_div_type = PHYDM_4R_PATH_DIV;
+
+       
+       if(pDM_PathDiv->is_u3_mode )
+       {
+               pDM_PathDiv->num_tx_path=3;
+               phydm_dtp_fix_tx_path(pDM_Odm, PHYDM_BCD);/* 3TX  Set Init TX Path*/
+               
+       }
+       else
+       {
+               pDM_PathDiv->num_tx_path=2;
+               phydm_dtp_fix_tx_path(pDM_Odm, PHYDM_BC);/* 2TX // Set Init TX Path*/
+       }
+       
+}
+
+
+VOID
+phydm_process_rssi_for_path_div(       
+       IN OUT          PVOID                   pDM_VOID,       
+       IN                      PVOID                   p_phy_info_void,
+       IN                      PVOID                   p_pkt_info_void
+       )
+{
+       PDM_ODM_T                       pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       PODM_PHY_INFO_T                 pPhyInfo=(PODM_PHY_INFO_T)p_phy_info_void;
+       PODM_PACKET_INFO_T       pPktinfo=(PODM_PACKET_INFO_T)p_pkt_info_void;
+       pPATHDIV_T                      pDM_PathDiv  = &(pDM_Odm->DM_PathDiv);
+
+       if(pPktinfo->bPacketToSelf || pPktinfo->bPacketMatchBSSID)
+       {
+               if(pPktinfo->DataRate > ODM_RATE11M)
+               {
+                       if(pDM_PathDiv->path_div_type == PHYDM_4R_PATH_DIV)
+                       {
+                               #if RTL8814A_SUPPORT
+                               if(pDM_Odm->SupportICType & ODM_RTL8814A)
+                               {
+                                       pDM_PathDiv->path_a_sum_all+=pPhyInfo->RxMIMOSignalStrength[0];
+                                       pDM_PathDiv->path_a_cnt_all++;
+                                       
+                                       pDM_PathDiv->path_b_sum_all+=pPhyInfo->RxMIMOSignalStrength[1];
+                                       pDM_PathDiv->path_b_cnt_all++;
+                                       
+                                       pDM_PathDiv->path_c_sum_all+=pPhyInfo->RxMIMOSignalStrength[2];
+                                       pDM_PathDiv->path_c_cnt_all++;
+                                       
+                                       pDM_PathDiv->path_d_sum_all+=pPhyInfo->RxMIMOSignalStrength[3];
+                                       pDM_PathDiv->path_d_cnt_all++;
+                               }
+                               #endif
+                       }
+                       else
+                       {
+                               pDM_PathDiv->PathA_Sum[pPktinfo->StationID]+=pPhyInfo->RxMIMOSignalStrength[0];
+                               pDM_PathDiv->PathA_Cnt[pPktinfo->StationID]++;
+
+                               pDM_PathDiv->PathB_Sum[pPktinfo->StationID]+=pPhyInfo->RxMIMOSignalStrength[1];
+                               pDM_PathDiv->PathB_Cnt[pPktinfo->StationID]++;
+                       }
+               }
+       }
+       
+       
+}
+
+#endif //#if RTL8814A_SUPPORT
+
+VOID
+odm_pathdiv_debug(
+       IN              PVOID           pDM_VOID,
+       IN              u4Byte          *const dm_value,
+       IN              u4Byte          *_used,
+       OUT             char                    *output,
+       IN              u4Byte          *_out_len
+       )
+{
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       pPATHDIV_T                      pDM_PathDiv  = &(pDM_Odm->DM_PathDiv);
+       u4Byte used = *_used;
+       u4Byte out_len = *_out_len;
+       
+       pDM_Odm->path_select = (dm_value[0] & 0xf);
+       PHYDM_SNPRINTF((output+used, out_len-used,"Path_select = (( 0x%x ))\n",pDM_Odm->path_select ));
+       
+       //2 [Fix Path]
+       if (pDM_Odm->path_select != PHYDM_AUTO_PATH)
+       {
+               PHYDM_SNPRINTF((output+used, out_len-used,"Trun on path  [%s%s%s%s]\n",
+                       ((pDM_Odm->path_select) & 0x1)?"A":"",
+                       ((pDM_Odm->path_select) & 0x2)?"B":"",
+                       ((pDM_Odm->path_select) & 0x4)?"C":"",
+                       ((pDM_Odm->path_select) & 0x8)?"D":"" ));
+               
+               phydm_dtp_fix_tx_path( pDM_Odm, pDM_Odm->path_select );
+       }
+       else
+       {
+               PHYDM_SNPRINTF((output+used, out_len-used,"%s\n","Auto Path"));
+       }
+}
+
+#endif // #if(defined(CONFIG_PATH_DIVERSITY))
+
+VOID
+phydm_c2h_dtp_handler(
+ IN    PVOID   pDM_VOID,
+ IN    pu1Byte   CmdBuf,
+ IN    u1Byte  CmdLen
+)
+{
+#if(defined(CONFIG_PATH_DIVERSITY))
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       pPATHDIV_T              pDM_PathDiv  = &(pDM_Odm->DM_PathDiv);
+
+       u1Byte  macid = CmdBuf[0]; 
+       u1Byte  target = CmdBuf[1];     
+       u1Byte  nsc_1 = CmdBuf[2];
+       u1Byte  nsc_2 = CmdBuf[3];
+       u1Byte  nsc_3 = CmdBuf[4];
+
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("Target_candidate = (( %d ))\n", target));
+       /*
+       if( (nsc_1 >= nsc_2) &&  (nsc_1 >= nsc_3))
+       {
+               phydm_dtp_fix_tx_path(pDM_Odm, pDM_PathDiv->ant_candidate_1);
+       }
+       else    if( nsc_2 >= nsc_3)
+       {
+               phydm_dtp_fix_tx_path(pDM_Odm, pDM_PathDiv->ant_candidate_2);
+       }
+       else
+       {
+               phydm_dtp_fix_tx_path(pDM_Odm, pDM_PathDiv->ant_candidate_3);   
+       }
+       */
+#endif 
+}
+
+VOID
+odm_PathDiversity(
+       IN      PVOID   pDM_VOID
+)
+{
+#if(defined(CONFIG_PATH_DIVERSITY))
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
        if(!(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV))
        {
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("Return: Not Support PathDiv\n"));
        if(!(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV))
        {
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("Return: Not Support PathDiv\n"));
@@ -44,19 +708,34 @@ odm_PathDiversityInit(
        }
 
        #if RTL8812A_SUPPORT
        }
 
        #if RTL8812A_SUPPORT
+
        if(pDM_Odm->SupportICType & ODM_RTL8812)
        if(pDM_Odm->SupportICType & ODM_RTL8812)
-               ODM_PathDiversityInit_8812A(pDM_Odm);
+                       ODM_PathDiversity_8812A(pDM_Odm);
+               else
+       #endif
+
+       #if RTL8814A_SUPPORT
+               if(pDM_Odm->SupportICType & ODM_RTL8814A)
+                       phydm_dynamic_tx_path(pDM_Odm);
+               else
        #endif
        #endif
+               {}
 #endif
 }
 #endif
 }
-\r
+
 VOID
 VOID
-odm_PathDiversity(
-       IN      PVOID   pDM_VOID\r
+odm_PathDiversityInit(
+       IN      PVOID   pDM_VOID
 )
 )
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+{
+#if(defined(CONFIG_PATH_DIVERSITY))
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+
+       /*pDM_Odm->SupportAbility |= ODM_BB_PATH_DIV;*/
+       
+       if(pDM_Odm->mp_mode == TRUE)
+               return;
+
        if(!(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV))
        {
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("Return: Not Support PathDiv\n"));
        if(!(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV))
        {
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("Return: Not Support PathDiv\n"));
@@ -64,21 +743,28 @@ odm_PathDiversity(
        }
 
 #if RTL8812A_SUPPORT
        }
 
 #if RTL8812A_SUPPORT
+               if(pDM_Odm->SupportICType & ODM_RTL8812)
+                       ODM_PathDiversityInit_8812A(pDM_Odm);
+               else
+       #endif
+
+       #if RTL8814A_SUPPORT
+               if(pDM_Odm->SupportICType & ODM_RTL8814A)
+                       phydm_dynamic_tx_path_init(pDM_Odm);
+               else
+       #endif  
+               {}
+#endif
+}
+
 
 
-       if(pDM_Odm->SupportICType & ODM_RTL8812)
-               ODM_PathDiversity_8812A(pDM_Odm);
-#endif 
-#endif  //(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-}\r
-\r
-\r
 
 
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-//\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+//
 // 2011/12/02 MH Copy from MP oursrc for temporarily test.
 // 2011/12/02 MH Copy from MP oursrc for temporarily test.
-//\r
-\r
-BOOLEAN\r
+//
+#if RTL8192C_SUPPORT
+BOOLEAN
 odm_IsConnected_92C(
        IN      PADAPTER        Adapter
 )
 odm_IsConnected_92C(
        IN      PADAPTER        Adapter
 )
@@ -117,7 +803,7 @@ odm_IsConnected_92C(
        }
        return  bConnected;
 }
        }
        return  bConnected;
 }
-\r
+
 BOOLEAN
 ODM_PathDiversityBeforeLink92C(
        //IN    PADAPTER        Adapter
 BOOLEAN
 ODM_PathDiversityBeforeLink92C(
        //IN    PADAPTER        Adapter
@@ -371,14 +1057,14 @@ odm_PathDiversityAfterLink_92C(
        }
        else if(pDM_PDTable->TrainingState == 1)
        {               
        }
        else if(pDM_PDTable->TrainingState == 1)
        {               
-               //RT_TRACE(     COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: TrainingState=1\n"));\r
+               //RT_TRACE(     COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: TrainingState=1\n"));
                PHY_SetBBReg(Adapter, rCCK0_AFESetting  , 0x0F000000, 0x05); // RX path = PathB
                pDM_PDTable->TrainingState = 2;
                ODM_SetTimer( pDM_Odm, &pDM_Odm->CCKPathDiversityTimer, pDM_PDTable->Timer); //ms
        }
        else
        {
                PHY_SetBBReg(Adapter, rCCK0_AFESetting  , 0x0F000000, 0x05); // RX path = PathB
                pDM_PDTable->TrainingState = 2;
                ODM_SetTimer( pDM_Odm, &pDM_Odm->CCKPathDiversityTimer, pDM_PDTable->Timer); //ms
        }
        else
        {
-               //RT_TRACE(     COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: TrainingState=2\n"));\r
+               //RT_TRACE(     COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: TrainingState=2\n"));
                pDM_PDTable->TrainingState = 0; 
                odm_CCKTXPathDiversity_92C(Adapter); 
                if(pDM_PDTable->OFDM_Pkt_Cnt != 0)
                pDM_PDTable->TrainingState = 0; 
                odm_CCKTXPathDiversity_92C(Adapter); 
                if(pDM_PDTable->OFDM_Pkt_Cnt != 0)
@@ -397,7 +1083,7 @@ odm_PathDiversityAfterLink_92C(
        }
 
 }
        }
 
 }
-\r
+
 VOID
 odm_SetRespPath_92C(
        IN      PADAPTER        Adapter,
 VOID
 odm_SetRespPath_92C(
        IN      PADAPTER        Adapter,
@@ -419,8 +1105,8 @@ odm_SetRespPath_92C(
                }       
        }
        pDM_PDTable->DefaultRespPath = DefaultRespPath;
                }       
        }
        pDM_PDTable->DefaultRespPath = DefaultRespPath;
-}\r
-\r
+}
+
 VOID
 odm_OFDMTXPathDiversity_92C(
        IN      PADAPTER        Adapter)
 VOID
 odm_OFDMTXPathDiversity_92C(
        IN      PADAPTER        Adapter)
@@ -452,7 +1138,7 @@ odm_OFDMTXPathDiversity_92C(
                        DefaultRespPath = 1;
                        RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: Default port Select Path-1\n"));
                }
                        DefaultRespPath = 1;
                        RT_TRACE(       COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: Default port Select Path-1\n"));
                }
-                       //RT_TRACE(     COMP_INIT, DBG_LOUD, ("pDM_PDTable->OFDMTXPath =0x%x\n",pDM_PDTable->OFDMTXPath));\r
+                       //RT_TRACE(     COMP_INIT, DBG_LOUD, ("pDM_PDTable->OFDMTXPath =0x%x\n",pDM_PDTable->OFDMTXPath));
        }
        //1 Extension Port
        for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)
        }
        //1 Extension Port
        for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)
@@ -501,8 +1187,8 @@ odm_OFDMTXPathDiversity_92C(
 
        pDM_PDTable->OFDMDefaultRespPath = DefaultRespPath;
 }
 
        pDM_PDTable->OFDMDefaultRespPath = DefaultRespPath;
 }
-\r
-\r
+
+
 VOID
 odm_CCKTXPathDiversity_92C(
        IN      PADAPTER        Adapter
 VOID
 odm_CCKTXPathDiversity_92C(
        IN      PADAPTER        Adapter
@@ -650,8 +1336,8 @@ odm_CCKTXPathDiversity_92C(
 
        pDM_PDTable->CCKDefaultRespPath = DefaultRespPath;
 }
 
        pDM_PDTable->CCKDefaultRespPath = DefaultRespPath;
 }
-\r
-\r
+
+
 VOID
 odm_ResetPathDiversity_92C(
                IN      PADAPTER        Adapter
 VOID
 odm_ResetPathDiversity_92C(
                IN      PADAPTER        Adapter
@@ -777,9 +1463,9 @@ odm_PathDivChkAntSwitchWorkitemCallback(
        PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
 
        odm_PathDivChkAntSwitch(pDM_Odm);
        PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;
 
        odm_PathDivChkAntSwitch(pDM_Odm);
-}\r
-\r
-\r
+}
+
+
  //MAC0_ACCESS_PHY1
 
 // 2011-06-22 Neil Chen & Gary Hsin
  //MAC0_ACCESS_PHY1
 
 // 2011-06-22 Neil Chen & Gary Hsin
@@ -1151,7 +1837,7 @@ odm_PathDivChkAntSwitch(
 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
                  odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
 #else
 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
                  odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
 #else
-                 ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));      \r
+                 ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));      
 #endif
                }       
               else if(nextAntenna==AUX_ANT)
 #endif
                }       
               else if(nextAntenna==AUX_ANT)
@@ -1166,7 +1852,7 @@ odm_PathDivChkAntSwitch(
 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
                      odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
 #else
 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
                      odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
 #else
-                     ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));  \r
+                     ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));  
                      //for(u1Byte n=0; n<80,n++)
                      //{
                      //delay_us(500);
                      //for(u1Byte n=0; n<80,n++)
                      //{
                      //delay_us(500);
@@ -1174,7 +1860,7 @@ odm_PathDivChkAntSwitch(
                      odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
                                         
                         fw_value=0x01;         // to backup RF Path A Releated Registers                
                      odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
                                         
                         fw_value=0x01;         // to backup RF Path A Releated Registers                
-                     ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));  \r
+                     ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));  
 #endif 
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: FIRST TIME To DO PATH SWITCH!\n "));    
                   }               
 #endif 
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: FIRST TIME To DO PATH SWITCH!\n "));    
                   }               
@@ -1185,7 +1871,7 @@ odm_PathDivChkAntSwitch(
 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
                      odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
 #else
 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
                      odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
 #else
-                     ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));  \r
+                     ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));  
 #endif 
                    }           
               }
 #endif 
                    }           
               }
@@ -1247,9 +1933,9 @@ odm_PathDivChkAntSwitch(
                        ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 500 ); //ms
        }
 }
                        ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 500 ); //ms
        }
 }
-\r
-\r
-\r
+
+
+
 VOID
 ODM_CCKPathDiversityChkPerPktRssi(
        PADAPTER                Adapter,
 VOID
 ODM_CCKPathDiversityChkPerPktRssi(
        PADAPTER                Adapter,
@@ -1385,8 +2071,8 @@ ODM_PathDivChkPerPktRssi(
                }
        }
 }
                }
        }
 }
-\r
-\r
+
+
 //
 // 20100514 Luke/Joseph:
 // Add new function to reset antenna diversity state after link.
 //
 // 20100514 Luke/Joseph:
 // Add new function to reset antenna diversity state after link.
@@ -1407,14 +2093,14 @@ ODM_PathDivRestAfterLink(
        pDM_SWAT_Table->RSSI_Trying = 0;
        pDM_SWAT_Table->SelectAntennaMap=0xAA;
        pDM_SWAT_Table->CurAntenna = MAIN_ANT;  
        pDM_SWAT_Table->RSSI_Trying = 0;
        pDM_SWAT_Table->SelectAntennaMap=0xAA;
        pDM_SWAT_Table->CurAntenna = MAIN_ANT;  
-}\r
-\r
-\r
+}
+
+
 //==================================================
 //3 PathDiv End
 //==================================================
 //3 PathDiv End
-//==================================================\r
-\r
-\r
+//==================================================
+
+
 VOID
 ODM_FillTXPathInTXDESC(
                IN      PADAPTER        Adapter,
 VOID
 ODM_FillTXPathInTXDESC(
                IN      PADAPTER        Adapter,
@@ -1478,9 +2164,9 @@ IN        PDM_ODM_T       pDM_Odm)
        pathIQK->swt_5g_RegCA0=0x0;
        pathIQK->swt_5g_RegE30=0x0;
 
        pathIQK->swt_5g_RegCA0=0x0;
        pathIQK->swt_5g_RegE30=0x0;
 
-}\r
-\r
-\r
+}
+
+
 u1Byte
 odm_SwAntDivSelectScanChnl(
        IN      PADAPTER        Adapter
 u1Byte
 odm_SwAntDivSelectScanChnl(
        IN      PADAPTER        Adapter
@@ -1579,7 +2265,52 @@ odm_SwAntDivConstructScanChnl(
        }
 
 }
        }
 
 }
-\r
-\r
+#else
+
+VOID
+odm_PathDivChkAntSwitchCallback(
+       PRT_TIMER               pTimer
+)
+{
+}
+
+VOID
+odm_PathDivChkAntSwitchWorkitemCallback(
+    IN PVOID            pContext
+    )
+{
+}
+
+VOID
+odm_CCKTXPathDiversityCallback(
+       PRT_TIMER               pTimer
+)
+{
+}
+
+VOID
+odm_CCKTXPathDiversityWorkItemCallback(
+    IN PVOID            pContext
+    )
+{
+}
+u1Byte
+odm_SwAntDivSelectScanChnl(
+       IN      PADAPTER        Adapter
+       )
+{
+       return  0;
+}
+VOID
+odm_SwAntDivConstructScanChnl(
+       IN      PADAPTER        Adapter,
+       IN      u1Byte          ScanChnl
+       )
+{
+}
+
+
+#endif
+
 #endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
 #endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-\r
+
index e72e937a7bf52aebe3d573eeae8336c34e72962d..ca2116f43bdd3e57c64c8d55a6baf822e3f381de 100755 (executable)
  \r
 #ifndef        __PHYDMPATHDIV_H__\r
 #define    __PHYDMPATHDIV_H__\r
  \r
 #ifndef        __PHYDMPATHDIV_H__\r
 #define    __PHYDMPATHDIV_H__\r
+/*#define PATHDIV_VERSION "2.0" //2014.11.04*/\r
+#define PATHDIV_VERSION        "3.0" /*2015.01.13 Dino*/\r
 \r
 \r
-#define PATHDIV_VERSION        "1.0"\r
+#if(defined(CONFIG_PATH_DIVERSITY))\r
+#define USE_PATH_A_AS_DEFAULT_ANT   //for 8814 dynamic TX path selection\r
 \r
 \r
-VOID   \r
+#define        NUM_RESET_DTP_PERIOD 5\r
+#define        ANT_DECT_RSSI_TH 3 \r
+\r
+#define PATH_A 1\r
+#define PATH_B 2\r
+#define PATH_C 3\r
+#define PATH_D 4\r
+\r
+#define PHYDM_AUTO_PATH        0\r
+#define PHYDM_FIX_PATH         1\r
+\r
+#define NUM_CHOOSE2_FROM4 6\r
+#define NUM_CHOOSE3_FROM4 4\r
+\r
+\r
+#define                PHYDM_A          BIT0\r
+#define                PHYDM_B          BIT1\r
+#define                PHYDM_C          BIT2\r
+#define                PHYDM_D          BIT3\r
+#define                PHYDM_AB         (BIT0 | BIT1)  // 0\r
+#define                PHYDM_AC         (BIT0 | BIT2)  // 1\r
+#define                PHYDM_AD         (BIT0 | BIT3)  // 2\r
+#define                PHYDM_BC         (BIT1 | BIT2)  // 3\r
+#define                PHYDM_BD         (BIT1 | BIT3)  // 4\r
+#define                PHYDM_CD         (BIT2 | BIT3)  // 5\r
+\r
+#define                PHYDM_ABC        (BIT0 | BIT1 | BIT2) /* 0*/\r
+#define                PHYDM_ABD        (BIT0 | BIT1 | BIT3) /* 1*/\r
+#define                PHYDM_ACD        (BIT0 | BIT2 | BIT3) /* 2*/\r
+#define                PHYDM_BCD        (BIT1 | BIT2 | BIT3) /* 3*/\r
+\r
+#define                PHYDM_ABCD       (BIT0 | BIT1 | BIT2 | BIT3)\r
+\r
+\r
+typedef enum dtp_state\r
+{\r
+       PHYDM_DTP_INIT=1,\r
+       PHYDM_DTP_RUNNING_1\r
+\r
+}PHYDM_DTP_STATE;\r
+\r
+typedef enum path_div_type\r
+{\r
+       PHYDM_2R_PATH_DIV = 1,\r
+       PHYDM_4R_PATH_DIV = 2\r
+}PHYDM_PATH_DIV_TYPE;\r
+\r
+VOID\r
+phydm_process_rssi_for_path_div(       \r
+       IN OUT          PVOID                   pDM_VOID,       \r
+       IN                      PVOID                   p_phy_info_void,\r
+       IN                      PVOID                   p_pkt_info_void\r
+       );\r
+\r
+typedef struct _ODM_PATH_DIVERSITY_\r
+{\r
+       u1Byte  RespTxPath;\r
+       u1Byte  PathSel[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte  PathA_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u4Byte  PathB_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u2Byte  PathA_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u2Byte  PathB_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
+       u1Byte  path_div_type;\r
+  #if RTL8814A_SUPPORT\r
+       \r
+       u4Byte  path_a_sum_all;\r
+       u4Byte  path_b_sum_all;\r
+       u4Byte  path_c_sum_all;\r
+       u4Byte  path_d_sum_all;\r
+\r
+       u4Byte  path_a_cnt_all;\r
+       u4Byte  path_b_cnt_all;\r
+       u4Byte  path_c_cnt_all;\r
+       u4Byte  path_d_cnt_all;\r
+       \r
+       u1Byte  dtp_period;\r
+       BOOLEAN bBecomeLinked;\r
+       BOOLEAN is_u3_mode;\r
+       u1Byte  num_tx_path;\r
+       u1Byte  default_path;\r
+       u1Byte  num_candidate;\r
+       u1Byte  ant_candidate_1;\r
+       u1Byte  ant_candidate_2;\r
+       u1Byte  ant_candidate_3;\r
+       u1Byte     dtp_state;\r
+       u1Byte  dtp_check_patha_counter;\r
+       BOOLEAN fix_path_bfer;\r
+       u1Byte  search_space_2[NUM_CHOOSE2_FROM4];\r
+       u1Byte  search_space_3[NUM_CHOOSE3_FROM4];\r
+       \r
+       u1Byte  pre_tx_path;\r
+       u1Byte  use_path_a_as_default_ant;\r
+       BOOLEAN is_pathA_exist;\r
+\r
+  #endif\r
+}PATHDIV_T, *pPATHDIV_T;\r
+\r
+\r
+#endif //#if(defined(CONFIG_PATH_DIVERSITY))\r
+\r
+VOID\r
+phydm_c2h_dtp_handler(\r
+        IN     PVOID   pDM_VOID,\r
+        IN     pu1Byte   CmdBuf,\r
+        IN     u1Byte  CmdLen\r
+       );\r
+\r
+VOID\r
 odm_PathDiversityInit(\r
        IN      PVOID   pDM_VOID\r
        );\r
 \r
 odm_PathDiversityInit(\r
        IN      PVOID   pDM_VOID\r
        );\r
 \r
-VOID    \r
+VOID\r
 odm_PathDiversity(\r
        IN      PVOID   pDM_VOID\r
        );\r
 \r
 odm_PathDiversity(\r
        IN      PVOID   pDM_VOID\r
        );\r
 \r
+VOID\r
+odm_pathdiv_debug(\r
+       IN              PVOID           pDM_VOID,\r
+       IN              u4Byte          *const dm_value,\r
+       IN              u4Byte          *_used,\r
+       OUT             char            *output,\r
+       IN              u4Byte          *_out_len\r
+       );\r
+\r
+\r
+\r
+//1 [OLD IC]--------------------------------------------------------------------------------\r
+\r
+\r
+\r
+\r
+\r
+\r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) \r
 \r
 //#define   PATHDIV_ENABLE      1\r
 #define dm_PathDiv_RSSI_Check  ODM_PathDivChkPerPktRssi\r
 #define PathDivCheckBeforeLink8192C    ODM_PathDiversityBeforeLink92C\r
 \r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) \r
 \r
 //#define   PATHDIV_ENABLE      1\r
 #define dm_PathDiv_RSSI_Check  ODM_PathDivChkPerPktRssi\r
 #define PathDivCheckBeforeLink8192C    ODM_PathDiversityBeforeLink92C\r
 \r
+\r
+\r
+\r
 typedef struct _PathDiv_Parameter_define_\r
 {\r
        u4Byte org_5g_RegE30;\r
 typedef struct _PathDiv_Parameter_define_\r
 {\r
        u4Byte org_5g_RegE30;\r
@@ -158,32 +289,32 @@ ODM_PathDivChkPerPktRssi(
        PRT_RFD                 pRfd    \r
        );\r
 \r
        PRT_RFD                 pRfd    \r
        );\r
 \r
-VOID
-ODM_PathDivRestAfterLink(
-       IN      PDM_ODM_T               pDM_Odm
+VOID\r
+ODM_PathDivRestAfterLink(\r
+       IN      PDM_ODM_T               pDM_Odm\r
        );\r
 \r
        );\r
 \r
-VOID
-ODM_FillTXPathInTXDESC(
-               IN      PADAPTER        Adapter,
-               IN      PRT_TCB         pTcb,
-               IN      pu1Byte         pDesc
+VOID\r
+ODM_FillTXPathInTXDESC(\r
+               IN      PADAPTER        Adapter,\r
+               IN      PRT_TCB         pTcb,\r
+               IN      pu1Byte         pDesc\r
        );\r
 \r
        );\r
 \r
-VOID
-odm_PathDivInit_92D(
+VOID\r
+odm_PathDivInit_92D(\r
        IN      PDM_ODM_T       pDM_Odm\r
        );\r
 \r
 u1Byte\r
        IN      PDM_ODM_T       pDM_Odm\r
        );\r
 \r
 u1Byte\r
-odm_SwAntDivSelectScanChnl(
-       IN      PADAPTER        Adapter
+odm_SwAntDivSelectScanChnl(\r
+       IN      PADAPTER        Adapter\r
        );\r
 \r
        );\r
 \r
-VOID
-odm_SwAntDivConstructScanChnl(
-       IN      PADAPTER        Adapter,
-       IN      u1Byte          ScanChnl
+VOID\r
+odm_SwAntDivConstructScanChnl(\r
+       IN      PADAPTER        Adapter,\r
+       IN      u1Byte          ScanChnl\r
        );\r
        \r
  #endif       //#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) \r
        );\r
        \r
  #endif       //#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) \r
index 507b250ec17457940e22106355eeb95dd746ab8b..827f636dd92dab02317b3896887bcd07ba89526b 100755 (executable)
@@ -1,29 +1,29 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-#include "Mp_Precomp.h"\r
-#include "phydm_precomp.h"\r
-\r
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *                                        
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+/*============================================================ */
+/* include files                                                                                               */
+/*============================================================ */
+#include "Mp_Precomp.h"
+#include "phydm_precomp.h"
+
 //============================================================
 // Global var
 //============================================================
 //============================================================
 // Global var
 //============================================================
@@ -302,7 +302,7 @@ u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE] =
        0x3C4, // 35, +5.5dB
        0x3FE  // 36, +6.0dB    
 };
        0x3C4, // 35, +5.5dB
        0x3FE  // 36, +6.0dB    
 };
-\r
+
 #ifdef AP_BUILD_WORKAROUND
 
 unsigned int TxPwrTrk_OFDM_SwingTbl[TxPwrTrk_OFDM_SwingTbl_Len] = {
 #ifdef AP_BUILD_WORKAROUND
 
 unsigned int TxPwrTrk_OFDM_SwingTbl[TxPwrTrk_OFDM_SwingTbl_Len] = {
@@ -345,16 +345,16 @@ unsigned int TxPwrTrk_OFDM_SwingTbl[TxPwrTrk_OFDM_SwingTbl_Len] = {
        /* -12.0dB */ 0x10000040
 };
 #endif
        /* -12.0dB */ 0x10000040
 };
 #endif
-\r
+
 
 
 VOID
 odm_TXPowerTrackingInit(
 
 
 VOID
 odm_TXPowerTrackingInit(
-       IN      PVOID           pDM_VOID \r
+       IN      PVOID   pDM_VOID 
        )
 {
        )
 {
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
        if(!(pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_IC_11N_SERIES)))
                return;
 #endif
        if(!(pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_IC_11N_SERIES)))
                return;
 #endif
@@ -364,11 +364,11 @@ odm_TXPowerTrackingInit(
 
 u1Byte 
 getSwingIndex(
 
 u1Byte 
 getSwingIndex(
-       IN      PVOID           pDM_VOID \r
+       IN      PVOID   pDM_VOID 
        )
 {
        )
 {
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       PADAPTER                Adapter = pDM_Odm->Adapter;
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
        u1Byte                  i = 0;
        u4Byte                  bbSwing;
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
        u1Byte                  i = 0;
        u4Byte                  bbSwing;
@@ -412,12 +412,13 @@ getSwingIndex(
 
 VOID
 odm_TXPowerTrackingThermalMeterInit(
 
 VOID
 odm_TXPowerTrackingThermalMeterInit(
-       IN      PVOID           pDM_VOID \r
+       IN      PVOID   pDM_VOID
        )
 {
        )
 {
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       u1Byte defaultSwingIndex = getSwingIndex(pDM_Odm);\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       u1Byte defaultSwingIndex = getSwingIndex(pDM_Odm);
        u1Byte                  p = 0;
        u1Byte                  p = 0;
+       PODM_RF_CAL_T   pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
        PADAPTER                Adapter = pDM_Odm->Adapter;
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
        PADAPTER                Adapter = pDM_Odm->Adapter;
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
@@ -425,80 +426,63 @@ odm_TXPowerTrackingThermalMeterInit(
        if(pDM_Odm->mp_mode == FALSE)
                pHalData->TxPowerTrackControl = TRUE;
 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
        if(pDM_Odm->mp_mode == FALSE)
                pHalData->TxPowerTrackControl = TRUE;
 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
-       PADAPTER                        Adapter = pDM_Odm->Adapter;
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
+       PADAPTER                Adapter = pDM_Odm->Adapter;
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
 
 
+       pRFCalibrateInfo->bTXPowerTracking = _TRUE;
+       pRFCalibrateInfo->TXPowercount = 0;
+       pRFCalibrateInfo->bTXPowerTrackingInit = _FALSE;
 
 
-       if (pDM_Odm->SupportICType >= ODM_RTL8188E) 
-       {
-               pDM_Odm->RFCalibrateInfo.bTXPowerTracking = _TRUE;
-               pDM_Odm->RFCalibrateInfo.TXPowercount = 0;
-               pDM_Odm->RFCalibrateInfo.bTXPowerTrackingInit = _FALSE;
-               
-               if(pDM_Odm->mp_mode == FALSE)
-                       pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _TRUE;
-               else
-                       pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _FALSE;
-
-               MSG_8192C("pDM_Odm TxPowerTrackControl = %d\n", pDM_Odm->RFCalibrateInfo.TxPowerTrackControl);
-       }
+       if(pDM_Odm->mp_mode == FALSE)
+               pRFCalibrateInfo->TxPowerTrackControl = _TRUE;
        else
        else
-       {
-               struct dm_priv  *pdmpriv = &pHalData->dmpriv;
+               pRFCalibrateInfo->TxPowerTrackControl = _FALSE; 
 
 
-               pdmpriv->bTXPowerTracking = _TRUE;
-               pdmpriv->TXPowercount = 0;
-               pdmpriv->bTXPowerTrackingInit = _FALSE;
-               //#if   (MP_DRIVER != 1)                //for mp driver, turn off txpwrtracking as default
-
-               if(pDM_Odm->mp_mode == FALSE)
-                       pdmpriv->TxPowerTrackControl = _TRUE;
-               else
-                       pdmpriv->TxPowerTrackControl = _FALSE;
+       if(pDM_Odm->mp_mode == FALSE)
+               pRFCalibrateInfo->TxPowerTrackControl = _TRUE;
 
 
 
 
-               //MSG_8192C("pdmpriv->TxPowerTrackControl = %d\n", pdmpriv->TxPowerTrackControl);
-       }
+       MSG_8192C("pDM_Odm TxPowerTrackControl = %d\n", pRFCalibrateInfo->TxPowerTrackControl);
        
 #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
        #ifdef RTL8188E_SUPPORT
        {
        
 #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
        #ifdef RTL8188E_SUPPORT
        {
-               pDM_Odm->RFCalibrateInfo.bTXPowerTracking = _TRUE;
-               pDM_Odm->RFCalibrateInfo.TXPowercount = 0;
-               pDM_Odm->RFCalibrateInfo.bTXPowerTrackingInit = _FALSE;
-               pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _TRUE;
+               pRFCalibrateInfo->bTXPowerTracking = _TRUE;
+               pRFCalibrateInfo->TXPowercount = 0;
+               pRFCalibrateInfo->bTXPowerTrackingInit = _FALSE;
+               pRFCalibrateInfo->TxPowerTrackControl = _TRUE;
        }
        #endif
 #endif
 
        //pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = TRUE;
        }
        #endif
 #endif
 
        //pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = TRUE;
-       pDM_Odm->RFCalibrateInfo.ThermalValue = pHalData->EEPROMThermalMeter;
-       pDM_Odm->RFCalibrateInfo.ThermalValue_IQK = pHalData->EEPROMThermalMeter;
-       pDM_Odm->RFCalibrateInfo.ThermalValue_LCK = pHalData->EEPROMThermalMeter;       
+       pRFCalibrateInfo->ThermalValue = pHalData->EEPROMThermalMeter;
+       pRFCalibrateInfo->ThermalValue_IQK = pHalData->EEPROMThermalMeter;
+       pRFCalibrateInfo->ThermalValue_LCK = pHalData->EEPROMThermalMeter;      
 
        // The index of "0 dB" in SwingTable.
        if (pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8723B ||
                pDM_Odm->SupportICType == ODM_RTL8192E) 
        {
 
        // The index of "0 dB" in SwingTable.
        if (pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8723B ||
                pDM_Odm->SupportICType == ODM_RTL8192E) 
        {
-               pDM_Odm->DefaultOfdmIndex = (defaultSwingIndex >= OFDM_TABLE_SIZE) ? 30 : defaultSwingIndex;
-               pDM_Odm->DefaultCckIndex = 20;  
+               pRFCalibrateInfo->DefaultOfdmIndex = (defaultSwingIndex >= OFDM_TABLE_SIZE) ? 30 : defaultSwingIndex;
+               pRFCalibrateInfo->DefaultCckIndex = 20; 
        }
        else
        {
        }
        else
        {
-               pDM_Odm->DefaultOfdmIndex = (defaultSwingIndex >= TXSCALE_TABLE_SIZE) ? 24 : defaultSwingIndex;
-               pDM_Odm->DefaultCckIndex = 24;  
+               pRFCalibrateInfo->DefaultOfdmIndex = (defaultSwingIndex >= TXSCALE_TABLE_SIZE) ? 24 : defaultSwingIndex;
+               pRFCalibrateInfo->DefaultCckIndex = 24; 
        }
 
        }
 
-       pDM_Odm->BbSwingIdxCckBase = pDM_Odm->DefaultCckIndex;
-       pDM_Odm->RFCalibrateInfo.CCK_index = pDM_Odm->DefaultCckIndex;
+       pRFCalibrateInfo->BbSwingIdxCckBase = pRFCalibrateInfo->DefaultCckIndex;
+       pRFCalibrateInfo->CCK_index = pRFCalibrateInfo->DefaultCckIndex;
        
        for (p = ODM_RF_PATH_A; p < MAX_RF_PATH; ++p)
        {
        
        for (p = ODM_RF_PATH_A; p < MAX_RF_PATH; ++p)
        {
-               pDM_Odm->BbSwingIdxOfdmBase[p] = pDM_Odm->DefaultOfdmIndex;             
-               pDM_Odm->RFCalibrateInfo.OFDM_index[p] = pDM_Odm->DefaultOfdmIndex;             
-               pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = 0;
-               pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p] = 0;
-               pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
+               pRFCalibrateInfo->BbSwingIdxOfdmBase[p] = pRFCalibrateInfo->DefaultOfdmIndex;           
+               pRFCalibrateInfo->OFDM_index[p] = pRFCalibrateInfo->DefaultOfdmIndex;           
+               pRFCalibrateInfo->DeltaPowerIndex[p] = 0;
+               pRFCalibrateInfo->DeltaPowerIndexLast[p] = 0;
+               pRFCalibrateInfo->PowerIndexOffset[p] = 0;
        }
 
 }
        }
 
 }
@@ -506,15 +490,13 @@ odm_TXPowerTrackingThermalMeterInit(
 
 VOID
 ODM_TXPowerTrackingCheck(
 
 VOID
 ODM_TXPowerTrackingCheck(
-       IN      PVOID           pDM_VOID\r
+       IN      PVOID   pDM_VOID
        )
 {
        )
 {
-       //
-       // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate
-       // at the same time. In the stage2/3, we need to prive universal interface and merge all
-       // HW dynamic mechanism.
-       //\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       /* 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate
+       at the same time. In the stage2/3, we need to prive universal interface and merge all
+       HW dynamic mechanism. */
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
        switch  (pDM_Odm->SupportPlatform)
        {
                case    ODM_WIN:
        switch  (pDM_Odm->SupportPlatform)
        {
                case    ODM_WIN:
@@ -538,11 +520,11 @@ ODM_TXPowerTrackingCheck(
 
 VOID
 odm_TXPowerTrackingCheckCE(
 
 VOID
 odm_TXPowerTrackingCheckCE(
-       IN      PVOID           pDM_VOID\r
+       IN      PVOID   pDM_VOID
        )
 {
        )
 {
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
        PADAPTER        Adapter = pDM_Odm->Adapter;
        #if( (RTL8192C_SUPPORT==1) ||  (RTL8723A_SUPPORT==1) )
        if(IS_HARDWARE_TYPE_8192C(Adapter)){
        PADAPTER        Adapter = pDM_Odm->Adapter;
        #if( (RTL8192C_SUPPORT==1) ||  (RTL8723A_SUPPORT==1) )
        if(IS_HARDWARE_TYPE_8192C(Adapter)){
@@ -561,16 +543,14 @@ odm_TXPowerTrackingCheckCE(
        }
        #endif
 
        }
        #endif
 
-       #if(((RTL8188E_SUPPORT==1) ||  (RTL8812A_SUPPORT==1) ||  (RTL8821A_SUPPORT==1) ||  (RTL8192E_SUPPORT==1)  ||  (RTL8723B_SUPPORT==1)  ))
-       if(!(pDM_Odm->SupportAbility & ODM_RF_TX_PWR_TRACK))
-       {
+       #if (((RTL8188E_SUPPORT == 1) ||  (RTL8812A_SUPPORT == 1) ||  (RTL8821A_SUPPORT == 1) ||  (RTL8192E_SUPPORT == 1)  ||  (RTL8723B_SUPPORT == 1)  ||  (RTL8814A_SUPPORT == 1)))
+       if (!(pDM_Odm->SupportAbility & ODM_RF_TX_PWR_TRACK))
                return;
                return;
-       }
 
        if(!pDM_Odm->RFCalibrateInfo.TM_Trigger)                //at least delay 1 sec
        {
                //pHalData->TxPowerCheckCnt++;  //cosa add for debug
 
        if(!pDM_Odm->RFCalibrateInfo.TM_Trigger)                //at least delay 1 sec
        {
                //pHalData->TxPowerCheckCnt++;  //cosa add for debug
-               if(IS_HARDWARE_TYPE_8188E(Adapter) || IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_8192E(Adapter)||IS_HARDWARE_TYPE_8723B(Adapter))
+               if (IS_HARDWARE_TYPE_8188E(Adapter) || IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_8192E(Adapter) || IS_HARDWARE_TYPE_8723B(Adapter) || IS_HARDWARE_TYPE_8814A(Adapter))
                        ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_T_METER_NEW, (BIT17 | BIT16), 0x03);
                else
                        ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_T_METER_OLD, bRFRegOffsetMask, 0x60);
                        ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_T_METER_NEW, (BIT17 | BIT16), 0x03);
                else
                        ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_T_METER_OLD, bRFRegOffsetMask, 0x60);
@@ -592,11 +572,11 @@ odm_TXPowerTrackingCheckCE(
 
 VOID
 odm_TXPowerTrackingCheckMP(
 
 VOID
 odm_TXPowerTrackingCheckMP(
-       IN      PVOID           pDM_VOID\r
+       IN      PVOID   pDM_VOID
        )
 {
        )
 {
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
        PADAPTER        Adapter = pDM_Odm->Adapter;
 
        if (ODM_CheckPowerStatus(Adapter) == FALSE) 
        PADAPTER        Adapter = pDM_Odm->Adapter;
 
        if (ODM_CheckPowerStatus(Adapter) == FALSE) 
@@ -620,11 +600,11 @@ odm_TXPowerTrackingCheckMP(
 
 VOID
 odm_TXPowerTrackingCheckAP(
 
 VOID
 odm_TXPowerTrackingCheckAP(
-       IN      PVOID           pDM_VOID\r
+       IN      PVOID   pDM_VOID
        )
 {
        )
 {
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
        prtl8192cd_priv priv            = pDM_Odm->priv;
 
        if ( (priv->pmib->dot11RFEntry.ther) && ((priv->up_time % priv->pshare->rf_ft_var.tpt_period) == 0)){
        prtl8192cd_priv priv            = pDM_Odm->priv;
 
        if ( (priv->pmib->dot11RFEntry.ther) && ((priv->up_time % priv->pshare->rf_ft_var.tpt_period) == 0)){
@@ -642,8 +622,8 @@ odm_TXPowerTrackingCheckAP(
 #endif 
 
 }
 #endif 
 
 }
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
 VOID
 odm_TXPowerTrackingThermalMeterCheck(
        IN      PADAPTER                Adapter
 VOID
 odm_TXPowerTrackingThermalMeterCheck(
        IN      PADAPTER                Adapter
@@ -682,6 +662,6 @@ odm_TXPowerTrackingThermalMeterCheck(
        }
 #endif
 }
        }
 #endif
 }
-#endif\r
-\r
-\r
+#endif
+
+
index 727cdb14a8167c1826792e4ed21a703bae098d19..4594a5e6608b54a672442b90ff514afe3ed95991 100755 (executable)
@@ -118,21 +118,59 @@ typedef struct ODM_RF_Calibration_Structure
        IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];\r
        u1Byte  Delta_LCK;\r
        s1Byte  BBSwingDiff2G, BBSwingDiff5G; // Unit: dB\r
        IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];\r
        u1Byte  Delta_LCK;\r
        s1Byte  BBSwingDiff2G, BBSwingDiff5G; // Unit: dB\r
-    u1Byte  DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE];\r
-    u1Byte  DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GCCKC_P[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GCCKC_N[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GCCKD_P[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GCCKD_N[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GC_P[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GC_N[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GD_P[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GD_N[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_5GC_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_5GC_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_5GD_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_5GD_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE];\r
+       u1Byte  DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE];\r
     \r
     \r
+       u1Byte                  BbSwingIdxOfdm[MAX_RF_PATH];\r
+       u1Byte                  BbSwingIdxOfdmCurrent;\r
+#if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))  \r
+       u1Byte                  BbSwingIdxOfdmBase[MAX_RF_PATH];\r
+#else\r
+       u1Byte                  BbSwingIdxOfdmBase;\r
+#endif\r
+       BOOLEAN                 BbSwingFlagOfdm;\r
+       u1Byte                  BbSwingIdxCck;\r
+       u1Byte                  BbSwingIdxCckCurrent;\r
+       u1Byte                  BbSwingIdxCckBase;\r
+       u1Byte                  DefaultOfdmIndex;\r
+       u1Byte                  DefaultCckIndex;        \r
+       BOOLEAN                 BbSwingFlagCck;\r
+       \r
+       s1Byte                  Absolute_OFDMSwingIdx[MAX_RF_PATH];   \r
+       s1Byte                  Remnant_OFDMSwingIdx[MAX_RF_PATH];   \r
+       s1Byte                  Remnant_CCKSwingIdx;\r
+       s1Byte                  Modify_TxAGC_Value;       /*Remnat compensate value at TxAGC */\r
+       BOOLEAN                 Modify_TxAGC_Flag_PathA;\r
+       BOOLEAN                 Modify_TxAGC_Flag_PathB;\r
+       BOOLEAN                 Modify_TxAGC_Flag_PathC;\r
+       BOOLEAN                 Modify_TxAGC_Flag_PathD;\r
+       BOOLEAN                 Modify_TxAGC_Flag_PathA_CCK;\r
+       \r
+       s1Byte                  KfreeOffset[MAX_RF_PATH];\r
     \r
        //--------------------------------------------------------------------//        \r
        \r
     \r
        //--------------------------------------------------------------------//        \r
        \r
@@ -175,7 +213,9 @@ typedef struct ODM_RF_Calibration_Structure
        u1Byte  bDPPathBOK;\r
 \r
        u4Byte  TxLOK[2];\r
        u1Byte  bDPPathBOK;\r
 \r
        u4Byte  TxLOK[2];\r
-\r
+       u4Byte  DpkTxAGC;\r
+       s4Byte  DpkGain;\r
+       u4Byte  DpkThermal[4];\r
 }ODM_RF_CAL_T,*PODM_RF_CAL_T;\r
 \r
 \r
 }ODM_RF_CAL_T,*PODM_RF_CAL_T;\r
 \r
 \r
index fcdcb0eca354059fb76cd87f9eb0f323eed6be0a..f05f50b2140c7f8b2a08d4ccd211da5141521dc3 100755 (executable)
@@ -812,7 +812,7 @@ odm_PSD_Monitor(
                        {
                                if(H2C_PSD_DATA[i] !=H2C_PSD_DATA_last[i])
                                {
                        {
                                if(H2C_PSD_DATA[i] !=H2C_PSD_DATA_last[i])
                                {
-                                       FW_FillH2CCmd(Adapter, H2C_92C_PSD_RESULT, 5, H2C_PSD_DATA);
+                                       FillH2CCmd92C(Adapter, H2C_92C_PSD_RESULT, 5, H2C_PSD_DATA);
                                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_PSD, DBG_LOUD,("Need to Update the AFH Map \n"));
                                        break;
                                }
                                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_PSD, DBG_LOUD,("Need to Update the AFH Map \n"));
                                        break;
                                }
@@ -1305,7 +1305,7 @@ void odm_RXHP(
        PMGNT_INFO      pMgntInfo = &(Adapter->MgntInfo);
        pDIG_T          pDM_DigTable = &pDM_Odm->DM_DigTable;
        pRXHP_T         pRX_HP_Table  = &pDM_Odm->DM_RXHP_Table;
        PMGNT_INFO      pMgntInfo = &(Adapter->MgntInfo);
        pDIG_T          pDM_DigTable = &pDM_Odm->DM_DigTable;
        pRXHP_T         pRX_HP_Table  = &pDM_Odm->DM_RXHP_Table;
-       PFALSE_ALARM_STATISTICS         FalseAlmCnt = (PFALSE_ALARM_STATISTICS)PhyDM_Get_Structure( pDM_Odm , PHYDM_FALSEALMCNT);\r
+       PFALSE_ALARM_STATISTICS         FalseAlmCnt = (PFALSE_ALARM_STATISTICS)PhyDM_Get_Structure(pDM_Odm, PHYDM_FALSEALMCNT);\r
        
        u1Byte                  i, j, sum;
        u1Byte                  Is40MHz;
        
        u1Byte                  i, j, sum;
        u1Byte                  Is40MHz;
index 0e7873745a3ac357ea43b71703f3931dad6d5d2f..1b4f42e095dd8cadeb5613cf686109a4da4650ff 100755 (executable)
@@ -1,7 +1,7 @@
 /******************************************************************************\r
  *\r
  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
 /******************************************************************************\r
  *\r
  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
+ *\r
  * This program is free software; you can redistribute it and/or modify it\r
  * under the terms of version 2 of the GNU General Public License as\r
  * published by the Free Software Foundation.\r
  * This program is free software; you can redistribute it and/or modify it\r
  * under the terms of version 2 of the GNU General Public License as\r
  * published by the Free Software Foundation.\r
 #include "Mp_Precomp.h"\r
 #include "phydm_precomp.h"\r
 \r
 #include "Mp_Precomp.h"\r
 #include "phydm_precomp.h"\r
 \r
+#if (defined(CONFIG_RA_DBG_CMD))\r
+VOID\r
+ODM_C2HRaParaReportHandler(\r
+       IN      PVOID   pDM_VOID,\r
+       IN pu1Byte   CmdBuf,\r
+       IN u1Byte   CmdLen\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T               pRA_Table = &pDM_Odm->DM_RA_Table;\r
+\r
+       u1Byte  para_idx = CmdBuf[0]; //Retry Penalty, NH, NL\r
+       u1Byte  RateTypeStart = CmdBuf[1];\r
+       u1Byte  RateTypeLength = CmdLen - 2;\r
+       u1Byte  i;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("[ From FW C2H RA Para ]  CmdBuf[0]= (( %d ))\n", CmdBuf[0]));\r
+\r
+       if (para_idx == RADBG_RTY_PENALTY) {\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" |Rate Index|   |RTY Penality Index| \n"));\r
+\r
+               for (i = 0 ; i < (RateTypeLength) ; i++) {\r
+                       if (pRA_Table->is_ra_dbg_init)\r
+                               pRA_Table->RTY_P_default[RateTypeStart + i] = CmdBuf[2 + i];\r
+\r
+                       pRA_Table->RTY_P[RateTypeStart + i] = CmdBuf[2 + i];\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("%8d  %15d \n", (RateTypeStart + i), pRA_Table->RTY_P[RateTypeStart + i]));\r
+               }\r
+\r
+       } else  if (para_idx == RADBG_N_HIGH) {\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" |Rate Index|    |N-High| \n"));\r
+\r
+\r
+       } else  if (para_idx == RADBG_N_LOW){\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" |Rate Index|   |N-Low| \n"));\r
+\r
+       }\r
+       else     if (para_idx == RADBG_RATE_UP_RTY_RATIO) {\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" |Rate Index|   |Rate Up RTY Ratio| \n"));\r
+\r
+               for (i = 0 ; i < (RateTypeLength) ; i++) {\r
+                       if (pRA_Table->is_ra_dbg_init)\r
+                               pRA_Table->RATE_UP_RTY_RATIO_default[RateTypeStart + i] = CmdBuf[2 + i];\r
+\r
+                       pRA_Table->RATE_UP_RTY_RATIO[RateTypeStart + i] = CmdBuf[2 + i];\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("%8d  %15d \n", (RateTypeStart + i), pRA_Table->RATE_UP_RTY_RATIO[RateTypeStart + i]));\r
+               }\r
+       } else   if (para_idx == RADBG_RATE_DOWN_RTY_RATIO) {\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" |Rate Index|   |Rate Down RTY Ratio| \n"));\r
+\r
+               for (i = 0 ; i < (RateTypeLength) ; i++) {\r
+                       if (pRA_Table->is_ra_dbg_init)\r
+                               pRA_Table->RATE_DOWN_RTY_RATIO_default[RateTypeStart + i] = CmdBuf[2 + i];\r
+\r
+                       pRA_Table->RATE_DOWN_RTY_RATIO[RateTypeStart + i] = CmdBuf[2 + i];\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("%8d  %15d \n", (RateTypeStart + i), pRA_Table->RATE_DOWN_RTY_RATIO[RateTypeStart + i]));\r
+               }\r
+       } else   if (para_idx == RADBG_DEBUG_MONITOR1) {\r
+               ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("-------------------------------\n"));\r
+               if (pDM_Odm->SupportICType & PHYDM_IC_3081_SERIES) {\r
+\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "RSSI =", CmdBuf[1]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  0x%x \n", "Rate =", CmdBuf[2] & 0x7f));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "SGI =", (CmdBuf[2] & 0x80) >> 7));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "BW =", CmdBuf[3]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "BW_max =", CmdBuf[4]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  0x%x \n", "multi_rate0 =", CmdBuf[5]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  0x%x \n", "multi_rate1 =", CmdBuf[6]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "DISRA =",       CmdBuf[7]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "VHT_EN =", CmdBuf[8]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "SGI_support =", CmdBuf[9]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "try_ness =", CmdBuf[10]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  0x%x \n", "pre_rate =", CmdBuf[11]));\r
+               } else {\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "RSSI =", CmdBuf[1]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %x \n", "BW =", CmdBuf[2]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "DISRA =", CmdBuf[3]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "VHT_EN =", CmdBuf[4]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "Hightest Rate =", CmdBuf[5]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  0x%x \n", "Lowest Rate =", CmdBuf[6]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  0x%x \n", "SGI_support =", CmdBuf[7]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "Rate_ID =",     CmdBuf[8]));;\r
+               }\r
+               ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("-------------------------------\n"));\r
+       } else   if (para_idx == RADBG_DEBUG_MONITOR2) {\r
+               ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("-------------------------------\n"));\r
+               if (pDM_Odm->SupportICType & PHYDM_IC_3081_SERIES) {\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %d \n", "RateID =", CmdBuf[1]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  0x%x \n", "highest_rate =", CmdBuf[2]));\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  0x%x \n", "lowest_rate =", CmdBuf[3]));\r
+\r
+                       for (i = 4 ; i <= 11 ; i++)\r
+                               ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("RAMASK =  0x%x \n", CmdBuf[i]));\r
+               } else {\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  %x%x  %x%x  %x%x  %x%x \n", "RA Mask:",\r
+                                                CmdBuf[8], CmdBuf[7], CmdBuf[6], CmdBuf[5], CmdBuf[4], CmdBuf[3], CmdBuf[2], CmdBuf[1]));\r
+               }\r
+               ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("-------------------------------\n"));\r
+       } else   if (para_idx == RADBG_DEBUG_MONITOR3) {\r
+\r
+               for (i = 0 ; i < (CmdLen - 1) ; i++)\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("content[%d] =  %d \n", i, CmdBuf[1 + i]));\r
+       } else   if (para_idx == RADBG_DEBUG_MONITOR4)\r
+               ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("%5s  {%d.%d} \n", "RA Version =", CmdBuf[1], CmdBuf[2]));\r
+\r
+}\r
 \r
 VOID\r
 \r
 VOID\r
-odm_RSSIMonitorInit(\r
+odm_RA_ParaAdjust_Send_H2C(\r
+       IN      PVOID   pDM_VOID\r
+)\r
+{\r
+\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
+       u1Byte                  H2C_Parameter[6] = {0};\r
+\r
+       H2C_Parameter[0] =  RA_FIRST_MACID;\r
+\r
+       //ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("RA_Para_feedback_req= (( %d ))  \n",pRA_Table->RA_Para_feedback_req ));\r
+       if (pRA_Table->RA_Para_feedback_req) { //H2C_Parameter[5]=1 ; ask FW for all RA parameters\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("[H2C] Ask FW for RA parameter \n"));\r
+               H2C_Parameter[5] |= BIT1; //ask FW to report RA parameters\r
+               H2C_Parameter[1] =  pRA_Table->para_idx; //pRA_Table->para_idx;\r
+               pRA_Table->RA_Para_feedback_req = 0;\r
+       } else {\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("[H2C] Send H2C to FW for modifying RA parameter \n"));\r
+\r
+               H2C_Parameter[1] =  pRA_Table->para_idx;\r
+               H2C_Parameter[2] =  pRA_Table->rate_idx;\r
+               //1 [8 bit]\r
+               if (pRA_Table->para_idx == RADBG_RTY_PENALTY || pRA_Table->para_idx == RADBG_RATE_UP_RTY_RATIO || pRA_Table->para_idx == RADBG_RATE_DOWN_RTY_RATIO) {\r
+                       H2C_Parameter[3] = pRA_Table->value;\r
+                       H2C_Parameter[4] = 0;\r
+               }\r
+               //1 [16 bit]\r
+               else { //if ((pRA_Table->rate_idx==RADBG_N_HIGH)||(pRA_Table->rate_idx==RADBG_N_LOW))\r
+                       H2C_Parameter[3] = (u1Byte)(((pRA_Table->value_16) & 0xf0) >> 4); //byte1\r
+                       H2C_Parameter[4] = (u1Byte)((pRA_Table->value_16) & 0x0f);         //byte0\r
+               }\r
+       }\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" H2C_Parameter[1] = 0x%x  \n", H2C_Parameter[1]));\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" H2C_Parameter[2] = 0x%x  \n", H2C_Parameter[2]));\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" H2C_Parameter[3] = 0x%x  \n", H2C_Parameter[3]));\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" H2C_Parameter[4] = 0x%x  \n", H2C_Parameter[4]));\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" H2C_Parameter[5] = 0x%x  \n", H2C_Parameter[5]));\r
+\r
+       ODM_FillH2CCmd(pDM_Odm, ODM_H2C_RA_PARA_ADJUST, 6, H2C_Parameter);\r
+\r
+}\r
+\r
+\r
+VOID\r
+odm_RA_ParaAdjust(\r
        IN              PVOID           pDM_VOID\r
        IN              PVOID           pDM_VOID\r
-       )\r
+)\r
 {\r
 {\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       pRA_T           pRA_Table = &pDM_Odm->DM_RA_Table;\r
-       pRA_Table->firstconnect = FALSE;\r
-       \r
+       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
+       u1Byte                  para_idx = pRA_Table->para_idx;\r
+       u1Byte                  rate_idx = pRA_Table->rate_idx;\r
+       u1Byte                  value = pRA_Table->value;\r
+       u1Byte                  Pre_value = 0xff;\r
+\r
+       u1Byte                  temp_idx;\r
+       BOOLEAN                 sign = 0;\r
+\r
+       if (pRA_Table->para_idx == RADBG_RTY_PENALTY) {\r
+               Pre_value = pRA_Table->RTY_P[rate_idx];\r
+               pRA_Table->RTY_P[rate_idx] = value;\r
+               pRA_Table->RTY_P_modify_note[rate_idx] = 1;\r
+       } else  if (pRA_Table->para_idx == RADBG_N_HIGH) {\r
+\r
+       } else  if (pRA_Table->para_idx == RADBG_N_LOW) {\r
+\r
+       } else   if (pRA_Table->para_idx == RADBG_RATE_UP_RTY_RATIO) {\r
+               Pre_value = pRA_Table->RATE_UP_RTY_RATIO[rate_idx];\r
+               pRA_Table->RATE_UP_RTY_RATIO[rate_idx] = value;\r
+               pRA_Table->RATE_UP_RTY_RATIO_modify_note[rate_idx] = 1;\r
+       } else   if (pRA_Table->para_idx == RADBG_RATE_DOWN_RTY_RATIO) {\r
+               Pre_value = pRA_Table->RATE_DOWN_RTY_RATIO[rate_idx];\r
+               pRA_Table->RATE_DOWN_RTY_RATIO[rate_idx] = value;\r
+               pRA_Table->RATE_DOWN_RTY_RATIO_modify_note[rate_idx] = 1;\r
+       }\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("  Change RA Papa[%d], Rate[ %d ],   ((%d))  ->  ((%d)) \n", pRA_Table->para_idx, rate_idx, Pre_value, value));\r
+       odm_RA_ParaAdjust_Send_H2C(pDM_Odm);\r
+}\r
+\r
+\r
+VOID\r
+phydm_ra_print_msg(\r
+       IN              PVOID           pDM_VOID,\r
+       IN              u1Byte          *value,\r
+       IN              u1Byte          *value_default,\r
+       IN              u1Byte          *modify_note\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
+       u4Byte i;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" |Rate index| |Current-value| |Default-value| |Modify?| \n"));\r
+       for (i = 0 ; i <= (pRA_Table->rate_length); i++) {\r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
-       pRA_Table->PT_collision_pre = TRUE;   //used in ODM_DynamicARFBSelect(WIN only)\r
-#endif \r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("     [ %d ]  %20d  %25d  %20s \n", i, value[i], value_default[i], ((modify_note[i] == 1) ? "V" : " .  ")));\r
+#else\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("     [ %d ]  %10d  %14d  %14s \n", i, value[i], value_default[i], ((modify_note[i] == 1) ? "V" : " .  ")));\r
 #endif\r
 #endif\r
+       }\r
+\r
 }\r
 \r
 }\r
 \r
+VOID\r
+odm_RA_debug(\r
+       IN              PVOID           pDM_VOID,\r
+       IN              u4Byte          *const dm_value\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
+       u4Byte i;\r
+\r
+       pRA_Table->is_ra_dbg_init = FALSE;\r
+\r
+       if (dm_value[0] == 100) { /*1 Print RA Parameters*/\r
+               u1Byte  default_pointer_value;\r
+               u1Byte  *pvalue;\r
+               u1Byte  *pvalue_default;\r
+               u1Byte  *pmodify_note;\r
+\r
+               pvalue = pvalue_default = pmodify_note = &default_pointer_value;\r
+\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("\n------------------------------------------------------------------------------------\n"));\r
+\r
+               if (dm_value[1] == RADBG_RTY_PENALTY) { /* [1]*/\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" [1] RTY_PENALTY \n"));\r
+                       pvalue          =       &(pRA_Table->RTY_P[0]);\r
+                       pvalue_default  =       &(pRA_Table->RTY_P_default[0]);\r
+                       pmodify_note    =       &(pRA_Table->RTY_P_modify_note[0]);\r
+               } else if (dm_value[1] == RADBG_N_HIGH) { /* [2]*/\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" [2] N_HIGH \n"));\r
+\r
+               } else if (dm_value[1] == RADBG_N_LOW) { /*[3]*/\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" [3] N_LOW \n"));\r
+\r
+               } else if (dm_value[1] == RADBG_RATE_UP_RTY_RATIO) { /* [8]*/\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" [8] RATE_UP_RTY_RATIO \n"));\r
+                       pvalue          =       &(pRA_Table->RATE_UP_RTY_RATIO[0]);\r
+                       pvalue_default  =       &(pRA_Table->RATE_UP_RTY_RATIO_default[0]);\r
+                       pmodify_note    =       &(pRA_Table->RATE_UP_RTY_RATIO_modify_note[0]);\r
+               } else if (dm_value[1] == RADBG_RATE_DOWN_RTY_RATIO) { /* [9]*/\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" [9] RATE_DOWN_RTY_RATIO \n"));\r
+                       pvalue          =       &(pRA_Table->RATE_DOWN_RTY_RATIO[0]);\r
+                       pvalue_default  =       &(pRA_Table->RATE_DOWN_RTY_RATIO_default[0]);\r
+                       pmodify_note    =       &(pRA_Table->RATE_DOWN_RTY_RATIO_modify_note[0]);\r
+               }\r
+\r
+               phydm_ra_print_msg(pDM_Odm, pvalue, pvalue_default, pmodify_note);\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("\n------------------------------------------------------------------------------------\n\n"));\r
+\r
+       } else if (dm_value[0] == 101) {\r
+               pRA_Table->para_idx = (u1Byte)dm_value[1];\r
+\r
+               pRA_Table->RA_Para_feedback_req = 1;\r
+               odm_RA_ParaAdjust_Send_H2C(pDM_Odm);\r
+       } else {\r
+               pRA_Table->para_idx = (u1Byte)dm_value[0];\r
+               pRA_Table->rate_idx  = (u1Byte)dm_value[1];\r
+               pRA_Table->value = (u1Byte)dm_value[2];\r
+\r
+               odm_RA_ParaAdjust(pDM_Odm);\r
+       }\r
+\r
+}\r
 \r
 VOID\r
 \r
 VOID\r
-odm_RSSIMonitorCheck(\r
+odm_RA_ParaAdjust_init(\r
        IN              PVOID           pDM_VOID\r
        IN              PVOID           pDM_VOID\r
-       )\r
+)\r
 {\r
 {\r
-       // \r
-       // For AP/ADSL use prtl8192cd_priv\r
-       // For CE/NIC use PADAPTER\r
-       //\r
-PDM_ODM_T              pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       if (!(pDM_Odm->SupportAbility & ODM_BB_RSSI_MONITOR))\r
-               return;\r
-       \r
-       //\r
-       // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate\r
-       // at the same time. In the stage2/3, we need to prive universal interface and merge all\r
-       // HW dynamic mechanism.\r
-       //\r
-       switch  (pDM_Odm->SupportPlatform)\r
-       {\r
-               case    ODM_WIN:\r
-                       odm_RSSIMonitorCheckMP(pDM_Odm);\r
-                       break;\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
+       u1Byte                  i;\r
+       u1Byte                  ra_para_pool_u8[3] = { RADBG_RTY_PENALTY,  RADBG_RATE_UP_RTY_RATIO, RADBG_RATE_DOWN_RTY_RATIO};\r
+       /*\r
+               RTY_PENALTY             =       1,  //u8\r
+               N_HIGH                          =       2,\r
+               N_LOW                           =       3,\r
+               RATE_UP_TABLE           =       4,\r
+               RATE_DOWN_TABLE =       5,\r
+               TRYING_NECESSARY        =       6,\r
+               DROPING_NECESSARY =     7,\r
+               RATE_UP_RTY_RATIO       =       8, //u8\r
+               RATE_DOWN_RTY_RATIO=    9, //u8\r
+               ALL_PARA                =       0xff\r
+\r
+       */\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("odm_RA_ParaAdjust_init \n"));\r
+\r
+       pRA_Table->is_ra_dbg_init = TRUE;\r
+       for (i = 0; i < 3; i++) {\r
+               pRA_Table->RA_Para_feedback_req = 1;\r
+               pRA_Table->para_idx     =       ra_para_pool_u8[i];\r
+               odm_RA_ParaAdjust_Send_H2C(pDM_Odm);\r
+       }\r
 \r
 \r
-               case    ODM_CE:\r
-                       odm_RSSIMonitorCheckCE(pDM_Odm);\r
-                       break;\r
+       if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
+               pRA_Table->rate_length = ODM_RATEMCS15;\r
+       else if ((pDM_Odm->SupportICType == ODM_RTL8723B) || (pDM_Odm->SupportICType == ODM_RTL8188E))\r
+               pRA_Table->rate_length = ODM_RATEMCS7;\r
+       else if ((pDM_Odm->SupportICType == ODM_RTL8821) || (pDM_Odm->SupportICType == ODM_RTL8881A))\r
+               pRA_Table->rate_length = ODM_RATEVHTSS1MCS9;\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8812)\r
+               pRA_Table->rate_length = ODM_RATEVHTSS2MCS9;\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
+               pRA_Table->rate_length = ODM_RATEVHTSS3MCS9;\r
+       else\r
+               pRA_Table->rate_length = ODM_RATEVHTSS4MCS9;\r
 \r
 \r
-               case    ODM_AP:\r
-                       odm_RSSIMonitorCheckAP(pDM_Odm);\r
-                       break;          \r
+}\r
+\r
+#else\r
 \r
 \r
-               case    ODM_ADSL:\r
-                       //odm_DIGAP(pDM_Odm);\r
-                       break;  \r
+VOID\r
+ODM_C2HRaParaReportHandler(\r
+       IN      PVOID   pDM_VOID,\r
+       IN pu1Byte   CmdBuf,\r
+       IN u1Byte   CmdLen\r
+)\r
+{\r
+}\r
+\r
+VOID\r
+odm_RA_debug(\r
+       IN              PVOID           pDM_VOID,\r
+       IN              u4Byte          *const dm_value\r
+)\r
+{\r
+}\r
+\r
+VOID\r
+odm_RA_ParaAdjust_init(\r
+       IN              PVOID           pDM_VOID\r
+)\r
+\r
+{\r
+}\r
+\r
+#endif //#if (defined(CONFIG_RA_DBG_CMD))\r
+\r
+#if (defined(CONFIG_RA_DYNAMIC_RTY_LIMIT))\r
+\r
+VOID\r
+phydm_retry_limit_table_bound(\r
+       IN      PVOID   pDM_VOID,\r
+       IN      u1Byte  *retry_limit,\r
+       IN      u1Byte  offset\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
+\r
+       if (*retry_limit >  offset) {\r
+               \r
+               *retry_limit -= offset;\r
+               \r
+               if (*retry_limit < pRA_Table->retrylimit_low)\r
+                       *retry_limit = pRA_Table->retrylimit_low;\r
+               else if (*retry_limit > pRA_Table->retrylimit_high)\r
+                       *retry_limit = pRA_Table->retrylimit_high;\r
+       } else\r
+               *retry_limit = pRA_Table->retrylimit_low;\r
+}\r
+\r
+VOID\r
+phydm_reset_retry_limit_table(\r
+       IN      PVOID   pDM_VOID\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
+       u1Byte                  i;\r
+\r
+       #if (DM_ODM_SUPPORT_TYPE == ODM_WIN) /*support all IC platform*/\r
+\r
+       #else\r
+               #if ((RTL8192E_SUPPORT == 1) || (RTL8723B_SUPPORT == 1) || (RTL8188E_SUPPORT == 1)) \r
+                       u1Byte per_rate_retrylimit_table_20M[ODM_RATEMCS15+1] = {\r
+                               1, 1, 2, 4,                                     /*CCK*/\r
+                               2, 2, 4, 6, 8, 12, 16, 18,              /*OFDM*/\r
+                               2, 4, 6, 8, 12, 18, 20, 22,             /*20M HT-1SS*/\r
+                               2, 4, 6, 8, 12, 18, 20, 22              /*20M HT-2SS*/\r
+                       };\r
+                       u1Byte per_rate_retrylimit_table_40M[ODM_RATEMCS15+1] = {\r
+                               1, 1, 2, 4,                                     /*CCK*/\r
+                               2, 2, 4, 6, 8, 12, 16, 18,              /*OFDM*/\r
+                               4, 8, 12, 16, 24, 32, 32, 32,           /*40M HT-1SS*/\r
+                               4, 8, 12, 16, 24, 32, 32, 32            /*40M HT-2SS*/\r
+                       };\r
+\r
+               #elif (RTL8821A_SUPPORT == 1) || (RTL8881A_SUPPORT == 1) \r
+\r
+               #elif (RTL8812A_SUPPORT == 1)\r
+\r
+               #elif(RTL8814A_SUPPORT == 1)\r
+\r
+               #else\r
+\r
+               #endif\r
+       #endif\r
+\r
+       memcpy(&(pRA_Table->per_rate_retrylimit_20M[0]), &(per_rate_retrylimit_table_20M[0]), ODM_NUM_RATE_IDX);\r
+       memcpy(&(pRA_Table->per_rate_retrylimit_40M[0]), &(per_rate_retrylimit_table_40M[0]), ODM_NUM_RATE_IDX);\r
+\r
+       for (i = 0; i < ODM_NUM_RATE_IDX; i++) {\r
+               phydm_retry_limit_table_bound(pDM_Odm, &(pRA_Table->per_rate_retrylimit_20M[i]), 0);\r
+               phydm_retry_limit_table_bound(pDM_Odm, &(pRA_Table->per_rate_retrylimit_40M[i]), 0);\r
+       }       \r
+}\r
+\r
+VOID\r
+phydm_ra_dynamic_retry_limit(\r
+       IN      PVOID   pDM_VOID\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
+       PSTA_INFO_T             pEntry;\r
+       u1Byte  i, retry_offset;\r
+       u4Byte  ma_rx_tp;\r
+\r
+\r
+       if (pDM_Odm->pre_number_active_client == pDM_Odm->number_active_client) {\r
+               \r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, (" pre_number_active_client ==  number_active_client\n"));\r
+               return;\r
+               \r
+       } else {\r
+               if (pDM_Odm->number_active_client == 1) {\r
+                       phydm_reset_retry_limit_table(pDM_Odm);\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("one client only->reset to default value\n"));\r
+               } else {\r
+\r
+                       retry_offset = pDM_Odm->number_active_client * pRA_Table->retry_descend_num;\r
+                       \r
+                       for (i = 0; i < ODM_NUM_RATE_IDX; i++) {\r
+\r
+                               phydm_retry_limit_table_bound(pDM_Odm, &(pRA_Table->per_rate_retrylimit_20M[i]), retry_offset);\r
+                               phydm_retry_limit_table_bound(pDM_Odm, &(pRA_Table->per_rate_retrylimit_40M[i]), retry_offset); \r
+                       }                               \r
+               }\r
        }\r
        }\r
-       \r
-}      // odm_RSSIMonitorCheck\r
+}\r
 \r
 \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 VOID\r
 VOID\r
-odm_RSSIDumpToRegister(\r
+phydm_ra_dynamic_retry_limit_init(\r
        IN      PVOID   pDM_VOID\r
        IN      PVOID   pDM_VOID\r
-       )\r
+)\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
+       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
 \r
 \r
-       if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-       {\r
-               PlatformEFIOWrite1Byte(Adapter, rA_RSSIDump_Jaguar, Adapter->RxStats.RxRSSIPercentage[0]);\r
-               PlatformEFIOWrite1Byte(Adapter, rB_RSSIDump_Jaguar, Adapter->RxStats.RxRSSIPercentage[1]);\r
+       pRA_Table->retry_descend_num = RA_RETRY_DESCEND_NUM;\r
+       pRA_Table->retrylimit_low = RA_RETRY_LIMIT_LOW;\r
+       pRA_Table->retrylimit_high = RA_RETRY_LIMIT_HIGH;\r
+       \r
+       phydm_reset_retry_limit_table(pDM_Odm);\r
+       \r
+}\r
+#else\r
+VOID\r
+phydm_ra_dynamic_retry_limit(\r
+       IN      PVOID   pDM_VOID\r
+)\r
+{\r
+}\r
+#endif\r
 \r
 \r
-               // Rx EVM\r
-               PlatformEFIOWrite1Byte(Adapter, rS1_RXevmDump_Jaguar, Adapter->RxStats.RxEVMdbm[0]);\r
-               PlatformEFIOWrite1Byte(Adapter, rS2_RXevmDump_Jaguar, Adapter->RxStats.RxEVMdbm[1]);\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+VOID\r
+phydm_ra_dynamic_rate_id_on_assoc(\r
+       IN      PVOID   pDM_VOID,\r
+       IN      u1Byte  wireless_mode,\r
+       IN      u1Byte  init_rate_id\r
+)\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       \r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("[ON ASSOC] rf_mode = ((0x%x)), wireless_mode = ((0x%x)), init_rate_id = ((0x%x))\n", pDM_Odm->RFType, wireless_mode, init_rate_id));\r
+       \r
+       if ((pDM_Odm->RFType == ODM_2T2R) | (pDM_Odm->RFType == ODM_2T2R_GREEN) | (pDM_Odm->RFType == ODM_2T3R) | (pDM_Odm->RFType == ODM_2T4R)) {\r
+               \r
+               if ((pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8192E)) &&\r
+                       (wireless_mode & (ODM_WM_N24G | ODM_WM_N5G))\r
+                       ){\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("[ON ASSOC] set N-2SS ARFR5 table\n"));\r
+                       ODM_SetMACReg(pDM_Odm, 0x4a4, bMaskDWord, 0xfc1ffff);   /*N-2SS, ARFR5, rate_id = 0xe*/\r
+                       ODM_SetMACReg(pDM_Odm, 0x4a8, bMaskDWord, 0x0);         /*N-2SS, ARFR5, rate_id = 0xe*/\r
+               } else if ((pDM_Odm->SupportICType & (ODM_RTL8812)) &&\r
+                       (wireless_mode & (ODM_WM_AC_5G | ODM_WM_AC_24G | ODM_WM_AC_ONLY))\r
+                       ){\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("[ON ASSOC] set AC-2SS ARFR0 table\n"));\r
+                       ODM_SetMACReg(pDM_Odm, 0x444, bMaskDWord, 0x0fff);      /*AC-2SS, ARFR0, rate_id = 0x9*/\r
+                       ODM_SetMACReg(pDM_Odm, 0x448, bMaskDWord, 0xff01f000);          /*AC-2SS, ARFR0, rate_id = 0x9*/\r
+               }\r
+       }\r
 \r
 \r
-               // Rx SNR\r
-               PlatformEFIOWrite1Byte(Adapter, rA_RXsnrDump_Jaguar, (u1Byte)(Adapter->RxStats.RxSNRdB[0]));\r
-               PlatformEFIOWrite1Byte(Adapter, rB_RXsnrDump_Jaguar, (u1Byte)(Adapter->RxStats.RxSNRdB[1]));\r
+}\r
 \r
 \r
-               // Rx Cfo_Short\r
-               PlatformEFIOWrite2Byte(Adapter, rA_CfoShortDump_Jaguar, Adapter->RxStats.RxCfoShort[0]);\r
-               PlatformEFIOWrite2Byte(Adapter, rB_CfoShortDump_Jaguar, Adapter->RxStats.RxCfoShort[1]);\r
+VOID\r
+phydm_ra_dynamic_rate_id_init(\r
+       IN      PVOID   pDM_VOID\r
+)\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       \r
+       if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8192E)) {\r
+               \r
+               ODM_SetMACReg(pDM_Odm, 0x4a4, bMaskDWord, 0xfc1ffff);   /*N-2SS, ARFR5, rate_id = 0xe*/\r
+               ODM_SetMACReg(pDM_Odm, 0x4a8, bMaskDWord, 0x0);         /*N-2SS, ARFR5, rate_id = 0xe*/\r
+               \r
+               ODM_SetMACReg(pDM_Odm, 0x444, bMaskDWord, 0x0fff);              /*AC-2SS, ARFR0, rate_id = 0x9*/\r
+               ODM_SetMACReg(pDM_Odm, 0x448, bMaskDWord, 0xff01f000);  /*AC-2SS, ARFR0, rate_id = 0x9*/\r
+       }\r
+}\r
 \r
 \r
-               // Rx Cfo_Tail\r
-               PlatformEFIOWrite2Byte(Adapter, rA_CfoLongDump_Jaguar, Adapter->RxStats.RxCfoTail[0]);\r
-               PlatformEFIOWrite2Byte(Adapter, rB_CfoLongDump_Jaguar, Adapter->RxStats.RxCfoTail[1]);\r
+VOID\r
+phydm_update_rate_id(\r
+       IN      PVOID   pDM_VOID,\r
+       IN      u1Byte  rate,\r
+       IN      u1Byte  platform_macid\r
+)\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T           pRA_Table = &pDM_Odm->DM_RA_Table;\r
+       u1Byte          current_tx_ss;\r
+       u1Byte          rate_idx = rate & 0x7f; /*remove bit7 SGI*/\r
+       u1Byte          wireless_mode;  \r
+       u1Byte          phydm_macid;\r
+       PSTA_INFO_T     pEntry;\r
+       \r
+       if (rate_idx >= ODM_RATEVHTSS2MCS0) {\r
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("Rate[%d]: (( VHT2SS-MCS%d ))\n", platform_macid, (rate_idx-ODM_RATEVHTSS2MCS0)));\r
+               /*dummy for SD4 check patch*/\r
+       } else if (rate_idx >= ODM_RATEVHTSS1MCS0) {\r
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("Rate[%d]: (( VHT1SS-MCS%d ))\n", platform_macid, (rate_idx-ODM_RATEVHTSS1MCS0)));\r
+               /*dummy for SD4 check patch*/\r
+       } else if (rate_idx >= ODM_RATEMCS0) {\r
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("Rate[%d]: (( HT-MCS%d ))\n", platform_macid, (rate_idx-ODM_RATEMCS0)));\r
+               /*dummy for SD4 check patch*/\r
+       } else {\r
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("Rate[%d]: (( HT-MCS%d ))\n", platform_macid, rate_idx));\r
+               /*dummy for SD4 check patch*/\r
        }\r
        }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
-               PlatformEFIOWrite1Byte(Adapter, rA_RSSIDump_92E, Adapter->RxStats.RxRSSIPercentage[0]);\r
-               PlatformEFIOWrite1Byte(Adapter, rB_RSSIDump_92E, Adapter->RxStats.RxRSSIPercentage[1]);\r
-               // Rx EVM\r
-               PlatformEFIOWrite1Byte(Adapter, rS1_RXevmDump_92E, Adapter->RxStats.RxEVMdbm[0]);\r
-               PlatformEFIOWrite1Byte(Adapter, rS2_RXevmDump_92E, Adapter->RxStats.RxEVMdbm[1]);\r
-               // Rx SNR\r
-               PlatformEFIOWrite1Byte(Adapter, rA_RXsnrDump_92E, (u1Byte)(Adapter->RxStats.RxSNRdB[0]));\r
-               PlatformEFIOWrite1Byte(Adapter, rB_RXsnrDump_92E, (u1Byte)(Adapter->RxStats.RxSNRdB[1]));\r
-               // Rx Cfo_Short\r
-               PlatformEFIOWrite2Byte(Adapter, rA_CfoShortDump_92E, Adapter->RxStats.RxCfoShort[0]);\r
-               PlatformEFIOWrite2Byte(Adapter, rB_CfoShortDump_92E, Adapter->RxStats.RxCfoShort[1]);\r
-               // Rx Cfo_Tail\r
-               PlatformEFIOWrite2Byte(Adapter, rA_CfoLongDump_92E, Adapter->RxStats.RxCfoTail[0]);\r
-               PlatformEFIOWrite2Byte(Adapter, rB_CfoLongDump_92E, Adapter->RxStats.RxCfoTail[1]);\r
-        }\r
+\r
+       phydm_macid = pDM_Odm->platform2phydm_macid_table[platform_macid];\r
+       pEntry = pDM_Odm->pODM_StaInfo[phydm_macid];\r
+       \r
+       if (IS_STA_VALID(pEntry)) {\r
+               wireless_mode = pEntry->WirelessMode;\r
+\r
+               if ((pDM_Odm->RFType  == ODM_2T2R) | (pDM_Odm->RFType  == ODM_2T2R_GREEN) | (pDM_Odm->RFType  == ODM_2T3R) | (pDM_Odm->RFType  == ODM_2T4R)) {\r
+                       \r
+                       pEntry->ratr_idx = pEntry->ratr_idx_init;\r
+                       if (wireless_mode & (ODM_WM_N24G | ODM_WM_N5G)) { /*N mode*/\r
+                               if (rate_idx >= ODM_RATEMCS8 && rate_idx <= ODM_RATEMCS15) { /*2SS mode*/\r
+                                       \r
+                                       pEntry->ratr_idx = ARFR_5_RATE_ID;\r
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("ARFR_5\n"));\r
+                               }\r
+                       } else if (wireless_mode & (ODM_WM_AC_5G | ODM_WM_AC_24G | ODM_WM_AC_ONLY)) {/*AC mode*/\r
+                               if (rate_idx >= ODM_RATEVHTSS2MCS0 && rate_idx <= ODM_RATEVHTSS2MCS9) {/*2SS mode*/\r
+                                       \r
+                                       pEntry->ratr_idx = ARFR_0_RATE_ID;\r
+                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("ARFR_0\n"));\r
+                               }\r
+                       }\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("UPdate_RateID[%d]: (( 0x%x ))\n", platform_macid, pEntry->ratr_idx));\r
+               }\r
+       }\r
+\r
 }\r
 #endif\r
 \r
 }\r
 #endif\r
 \r
+VOID\r
+phydm_c2h_ra_report_handler(\r
+       IN PVOID        pDM_VOID,\r
+       IN pu1Byte   CmdBuf,\r
+       IN u1Byte   CmdLen\r
+)\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T           pRA_Table = &pDM_Odm->DM_RA_Table;\r
+       u1Byte  rate = CmdBuf[0];\r
+       u1Byte  macid = CmdBuf[1];\r
+       #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PADAPTER        Adapter = pDM_Odm->Adapter;\r
+       \r
+       GET_HAL_DATA(Adapter)->CurrentRARate = HwRateToMRate(rate);     \r
+       ODM_UpdateInitRate(pDM_Odm, rate);\r
+       #endif\r
+\r
+       #if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+       if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8192E))\r
+               phydm_update_rate_id(pDM_Odm, rate, macid);\r
+       #endif\r
+\r
+}\r
+\r
+VOID\r
+odm_RSSIMonitorInit(\r
+       IN              PVOID           pDM_VOID\r
+)\r
+{\r
+#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T           pRA_Table = &pDM_Odm->DM_RA_Table;\r
+       pRA_Table->firstconnect = FALSE;\r
+\r
+#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
+       pRA_Table->PT_collision_pre = TRUE;   //used in ODM_DynamicARFBSelect(WIN only)\r
+#endif\r
+#endif\r
+}\r
+\r
+VOID\r
+ODM_RAPostActionOnAssoc(\r
+       IN      PVOID   pDM_VOID\r
+)\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       pDM_Odm->H2C_RARpt_connect = 1;\r
+       odm_RSSIMonitorCheck(pDM_Odm);\r
+       pDM_Odm->H2C_RARpt_connect = 0;\r
+}\r
+\r
+VOID\r
+odm_RSSIMonitorCheck(\r
+       IN              PVOID           pDM_VOID\r
+)\r
+{\r
+       //\r
+       // For AP/ADSL use prtl8192cd_priv\r
+       // For CE/NIC use PADAPTER\r
+       //\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       if (!(pDM_Odm->SupportAbility & ODM_BB_RSSI_MONITOR))\r
+               return;\r
+\r
+       //\r
+       // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate\r
+       // at the same time. In the stage2/3, we need to prive universal interface and merge all\r
+       // HW dynamic mechanism.\r
+       //\r
+       switch  (pDM_Odm->SupportPlatform) {\r
+       case    ODM_WIN:\r
+               odm_RSSIMonitorCheckMP(pDM_Odm);\r
+               break;\r
+\r
+       case    ODM_CE:\r
+               odm_RSSIMonitorCheckCE(pDM_Odm);\r
+               break;\r
+\r
+       case    ODM_AP:\r
+               odm_RSSIMonitorCheckAP(pDM_Odm);\r
+               break;\r
+\r
+       case    ODM_ADSL:\r
+               //odm_DIGAP(pDM_Odm);\r
+               break;\r
+       }\r
+\r
+}      // odm_RSSIMonitorCheck\r
+\r
 VOID\r
 odm_RSSIMonitorCheckMP(\r
        IN      PVOID   pDM_VOID\r
 VOID\r
 odm_RSSIMonitorCheckMP(\r
        IN      PVOID   pDM_VOID\r
-       )\r
+)\r
 {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte                  H2C_Parameter[4] = {0};\r
+       u4Byte                  i;\r
+       BOOLEAN                 bExtRAInfo = FALSE;\r
+       u1Byte                  cmdlen = 3;\r
+       u1Byte                  TxBF_EN = 0, stbc_en = 0;\r
+\r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
        PRT_WLAN_STA    pEntry = NULL;\r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
        PRT_WLAN_STA    pEntry = NULL;\r
-       u1Byte                  i;\r
-       s4Byte                  tmpEntryMaxPWDB=0, tmpEntryMinPWDB=0xff;\r
-       u1Byte                  H2C_Parameter[4] ={0};\r
+       s4Byte                  tmpEntryMaxPWDB = 0, tmpEntryMinPWDB = 0xff;\r
        PMGNT_INFO              pMgntInfo = &Adapter->MgntInfo;\r
        PMGNT_INFO              pDefaultMgntInfo = &Adapter->MgntInfo;\r
        PMGNT_INFO              pMgntInfo = &Adapter->MgntInfo;\r
        PMGNT_INFO              pDefaultMgntInfo = &Adapter->MgntInfo;\r
-       u8Byte                  curTxOkCnt = 0, curRxOkCnt = 0; \r
-       u1Byte                  STBC_TX = 0;\r
-       BOOLEAN                 FirstConnect;                                                    \r
-       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table; \r
+       u8Byte                  curTxOkCnt = 0, curRxOkCnt = 0;\r
+       //BOOLEAN                       FirstConnect = 0;\r
+       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
        pDIG_T                  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
 \r
        pDIG_T                  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
 \r
-#if (BEAMFORMING_SUPPORT == 1) \r
+#if (BEAMFORMING_SUPPORT )\r
        BEAMFORMING_CAP Beamform_cap = BEAMFORMING_CAP_NONE;\r
        BEAMFORMING_CAP Beamform_cap = BEAMFORMING_CAP_NONE;\r
-       u1Byte                  TxBF_EN = 0;\r
 #endif\r
 \r
        PADAPTER        pLoopAdapter = GetDefaultAdapter(Adapter);\r
 \r
 #endif\r
 \r
        PADAPTER        pLoopAdapter = GetDefaultAdapter(Adapter);\r
 \r
-       BOOLEAN         bExtRAInfo = FALSE;\r
-\r
-       if(pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8812 || pDM_Odm->SupportICType == ODM_RTL8821 || pDM_Odm->SupportICType == ODM_RTL8723B)\r
+       if (pDM_Odm->SupportICType & EXT_RA_INFO_SUPPORT_IC) {\r
                bExtRAInfo = TRUE;\r
                bExtRAInfo = TRUE;\r
+               cmdlen = 4;\r
+       }\r
 \r
 \r
-       FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == FALSE);\r
-       pRA_Table->firstconnect = pHalData->bLinked;                                               \r
-       H2C_Parameter[3] |= FirstConnect << 5;\r
+       //FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == FALSE);\r
+       //pRA_Table->firstconnect = pHalData->bLinked;\r
 \r
 \r
-       if(pDM_Odm->SupportICType == ODM_RTL8188E && (pDefaultMgntInfo->CustomerID==RT_CID_819x_HP))\r
-       {\r
-               if(curRxOkCnt >(curTxOkCnt*6))\r
-                       PlatformEFIOWrite4Byte(Adapter, REG_ARFR0, 0x8f015);\r
-               else\r
-                       PlatformEFIOWrite4Byte(Adapter, REG_ARFR0, 0xff015);\r
-       }       \r
 \r
 \r
-       if(pDM_Odm->SupportICType == ODM_RTL8812 || pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               if(curRxOkCnt >(curTxOkCnt*6))\r
-                       H2C_Parameter[3]=0x01;\r
-               else\r
-                       H2C_Parameter[3]=0x00;\r
-       }\r
+       /*\r
+               if(pDM_Odm->SupportICType == ODM_RTL8188E && (pDefaultMgntInfo->CustomerID==RT_CID_819x_HP))\r
+               {\r
+                       if(curRxOkCnt >(curTxOkCnt*6))\r
+                               PlatformEFIOWrite4Byte(Adapter, REG_ARFR0, 0x8f015);\r
+                       else\r
+                               PlatformEFIOWrite4Byte(Adapter, REG_ARFR0, 0xff015);\r
+               }\r
 \r
 \r
-       while(pLoopAdapter)\r
-       {               \r
-       \r
-               if(pLoopAdapter != NULL){\r
-                       pMgntInfo = &pLoopAdapter->MgntInfo;                    \r
+\r
+               if(pDM_Odm->SupportICType == ODM_RTL8812 || pDM_Odm->SupportICType == ODM_RTL8821 ||\r
+                  pDM_Odm->SupportICType == ODM_RTL8814A|| pDM_Odm->SupportICType == ODM_RTL8822B)\r
+               {\r
+                       if(curRxOkCnt >(curTxOkCnt*6))\r
+                               H2C_Parameter[3]|=RAINFO_BE_RX_STATE;\r
+               }\r
+       */\r
+\r
+       while (pLoopAdapter) {\r
+\r
+               if (pLoopAdapter != NULL) {\r
+                       pMgntInfo = &pLoopAdapter->MgntInfo;\r
                        curTxOkCnt = pLoopAdapter->TxStats.NumTxBytesUnicast - pMgntInfo->lastTxOkCnt;\r
                        curRxOkCnt = pLoopAdapter->RxStats.NumRxBytesUnicast - pMgntInfo->lastRxOkCnt;\r
                        pMgntInfo->lastTxOkCnt = curTxOkCnt;\r
                        curTxOkCnt = pLoopAdapter->TxStats.NumTxBytesUnicast - pMgntInfo->lastTxOkCnt;\r
                        curRxOkCnt = pLoopAdapter->RxStats.NumRxBytesUnicast - pMgntInfo->lastRxOkCnt;\r
                        pMgntInfo->lastTxOkCnt = curTxOkCnt;\r
-                       pMgntInfo->lastRxOkCnt = curRxOkCnt;                    \r
+                       pMgntInfo->lastRxOkCnt = curRxOkCnt;\r
                }\r
 \r
                }\r
 \r
-               for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++)\r
-               {\r
-               \r
-                       if(IsAPModeExist(pLoopAdapter))\r
-                       {\r
-                               if(GetFirstExtAdapter(pLoopAdapter) != NULL && \r
-                                       GetFirstExtAdapter(pLoopAdapter) == pLoopAdapter){      \r
-                                       pEntry = AsocEntry_EnumStation(pLoopAdapter, i);                \r
-                               }\r
-                               else if(GetFirstGOPort(pLoopAdapter) != NULL && \r
-                                       IsFirstGoAdapter(pLoopAdapter)){\r
-                                       pEntry = AsocEntry_EnumStation(pLoopAdapter, i);                                                \r
-                               }                               \r
-                       }\r
-                       else\r
-                       {\r
-                                       if(GetDefaultAdapter(pLoopAdapter) == pLoopAdapter){\r
-                                               pEntry = AsocEntry_EnumStation(pLoopAdapter, i);                                        \r
-                                       }\r
+               for (i = 0; i < ASSOCIATE_ENTRY_NUM; i++) {\r
+\r
+                       if (IsAPModeExist(pLoopAdapter)) {\r
+                               if (GetFirstExtAdapter(pLoopAdapter) != NULL &&\r
+                                       GetFirstExtAdapter(pLoopAdapter) == pLoopAdapter)\r
+                                       pEntry = AsocEntry_EnumStation(pLoopAdapter, i);\r
+                               else if (GetFirstGOPort(pLoopAdapter) != NULL &&\r
+                                                IsFirstGoAdapter(pLoopAdapter))\r
+                                       pEntry = AsocEntry_EnumStation(pLoopAdapter, i);\r
+                       } else {\r
+                               if (GetDefaultAdapter(pLoopAdapter) == pLoopAdapter)\r
+                                       pEntry = AsocEntry_EnumStation(pLoopAdapter, i);\r
                        }\r
 \r
                        }\r
 \r
-               if(pEntry != NULL)\r
-               {\r
-                       if(pEntry->bAssociated)\r
-                       {\r
-                       \r
-                               RT_DISP_ADDR(FDM, DM_PWDB, ("pEntry->MacAddr ="), pEntry->MacAddr);\r
-                               RT_DISP(FDM, DM_PWDB, ("pEntry->rssi = 0x%x(%d)\n", \r
-                                       pEntry->rssi_stat.UndecoratedSmoothedPWDB, pEntry->rssi_stat.UndecoratedSmoothedPWDB));\r
+                       if (pEntry != NULL) {\r
+                               if (pEntry->bAssociated) {\r
 \r
 \r
-                               if(bExtRAInfo)\r
-                               {\r
+                                       RT_DISP_ADDR(FDM, DM_PWDB, ("pEntry->MacAddr ="), pEntry->MacAddr);\r
+                                       RT_DISP(FDM, DM_PWDB, ("pEntry->rssi = 0x%x(%d)\n",\r
+                                                                                  pEntry->rssi_stat.UndecoratedSmoothedPWDB, pEntry->rssi_stat.UndecoratedSmoothedPWDB));\r
 \r
 \r
-#if (BEAMFORMING_SUPPORT == 1)\r
-                                       Beamform_cap = Beamforming_GetEntryBeamCapByMacId(Adapter, pEntry->AssociatedMacId);\r
-                                       if(Beamform_cap & (BEAMFORMER_CAP_HT_EXPLICIT |BEAMFORMER_CAP_VHT_SU))\r
+                                       //2 BF_en\r
+#if (BEAMFORMING_SUPPORT)\r
+                                       Beamform_cap = phydm_Beamforming_GetEntryBeamCapByMacId(pDM_Odm, pEntry->AssociatedMacId);\r
+                                       if (Beamform_cap & (BEAMFORMER_CAP_HT_EXPLICIT | BEAMFORMER_CAP_VHT_SU))\r
                                                TxBF_EN = 1;\r
                                                TxBF_EN = 1;\r
-                                       else\r
-                                               TxBF_EN = 0;\r
-       \r
-                                       H2C_Parameter[3] |= TxBF_EN << 6; \r
-                                       \r
-                                       if(TxBF_EN)\r
-                                               STBC_TX = 0;\r
-                                       else\r
 #endif\r
 #endif\r
-                                       {\r
-                                               if(IS_WIRELESS_MODE_AC(Adapter))\r
-                                                       STBC_TX = TEST_FLAG(pEntry->VHTInfo.STBC, STBC_VHT_ENABLE_TX);\r
-                                               else\r
-                                                       STBC_TX = TEST_FLAG(pEntry->HTInfo.STBC, STBC_HT_ENABLE_TX);\r
-                                       }\r
+                                       //2 STBC_en\r
+                                       if ((IS_WIRELESS_MODE_AC(Adapter) && TEST_FLAG(pEntry->VHTInfo.STBC, STBC_VHT_ENABLE_TX)) ||\r
+                                               TEST_FLAG(pEntry->HTInfo.STBC, STBC_HT_ENABLE_TX))\r
+                                               stbc_en = 1;\r
+\r
+                                       if (pEntry->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB)\r
+                                               tmpEntryMinPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;\r
+                                       if (pEntry->rssi_stat.UndecoratedSmoothedPWDB > tmpEntryMaxPWDB)\r
+                                               tmpEntryMaxPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;\r
+\r
+                                       if (bExtRAInfo) {\r
+                                               if (curRxOkCnt > (curTxOkCnt * 6))\r
+                                                       H2C_Parameter[3] |= RAINFO_BE_RX_STATE;\r
+\r
+                                               if (TxBF_EN)\r
+                                                       H2C_Parameter[3] |= RAINFO_BF_STATE;\r
+                                               else {\r
+                                                       if (stbc_en)\r
+                                                               H2C_Parameter[3] |= RAINFO_STBC_STATE;\r
+                                               }\r
 \r
 \r
-                                       H2C_Parameter[3] |= STBC_TX << 1;\r
-                               }\r
+                                               if (pDM_Odm->H2C_RARpt_connect)\r
+                                                       H2C_Parameter[3] |= RAINFO_INIT_RSSI_RATE_STATE;\r
+                                       }\r
 \r
 \r
-                               if(pEntry->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB)\r
-                                       tmpEntryMinPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;\r
-                               if(pEntry->rssi_stat.UndecoratedSmoothedPWDB > tmpEntryMaxPWDB)\r
-                                       tmpEntryMaxPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;\r
+                                       H2C_Parameter[2] = (u1Byte)(pEntry->rssi_stat.UndecoratedSmoothedPWDB & 0xFF);\r
+                                       //H2C_Parameter[1] = 0x20;   // fw v12 cmdid 5:use max macid ,for nic ,default macid is 0 ,max macid is 1\r
+                                       H2C_Parameter[0] = (pEntry->AssociatedMacId);\r
 \r
 \r
-                               H2C_Parameter[2] = (u1Byte)(pEntry->rssi_stat.UndecoratedSmoothedPWDB & 0xFF);\r
-                               H2C_Parameter[1] = 0x20;   // fw v12 cmdid 5:use max macid ,for nic ,default macid is 0 ,max macid is 1\r
-                               H2C_Parameter[0] = (pEntry->AssociatedMacId);\r
-                               if(bExtRAInfo)\r
-                                       ODM_FillH2CCmd(pDM_Odm, ODM_H2C_RSSI_REPORT, 4, H2C_Parameter);\r
-                               else\r
-                                       ODM_FillH2CCmd(pDM_Odm, ODM_H2C_RSSI_REPORT, 3, H2C_Parameter);\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       break;\r
+                                       ODM_FillH2CCmd(pDM_Odm, ODM_H2C_RSSI_REPORT, cmdlen, H2C_Parameter);\r
+                               }\r
+                       } else\r
+                               break;\r
                }\r
                }\r
-       }\r
 \r
                pLoopAdapter = GetNextExtAdapter(pLoopAdapter);\r
        }\r
 \r
 \r
                pLoopAdapter = GetNextExtAdapter(pLoopAdapter);\r
        }\r
 \r
-       if(tmpEntryMaxPWDB != 0)        // If associated entry is found\r
-       {\r
+       if (tmpEntryMaxPWDB != 0) {     // If associated entry is found\r
                pHalData->EntryMaxUndecoratedSmoothedPWDB = tmpEntryMaxPWDB;\r
                RT_DISP(FDM, DM_PWDB, ("EntryMaxPWDB = 0x%x(%d)\n",     tmpEntryMaxPWDB, tmpEntryMaxPWDB));\r
                pHalData->EntryMaxUndecoratedSmoothedPWDB = tmpEntryMaxPWDB;\r
                RT_DISP(FDM, DM_PWDB, ("EntryMaxPWDB = 0x%x(%d)\n",     tmpEntryMaxPWDB, tmpEntryMaxPWDB));\r
-       }\r
-       else\r
-       {\r
+       } else\r
                pHalData->EntryMaxUndecoratedSmoothedPWDB = 0;\r
                pHalData->EntryMaxUndecoratedSmoothedPWDB = 0;\r
-       }\r
-       \r
-       if(tmpEntryMinPWDB != 0xff) // If associated entry is found\r
-       {\r
+\r
+       if (tmpEntryMinPWDB != 0xff) { // If associated entry is found\r
                pHalData->EntryMinUndecoratedSmoothedPWDB = tmpEntryMinPWDB;\r
                RT_DISP(FDM, DM_PWDB, ("EntryMinPWDB = 0x%x(%d)\n", tmpEntryMinPWDB, tmpEntryMinPWDB));\r
 \r
                pHalData->EntryMinUndecoratedSmoothedPWDB = tmpEntryMinPWDB;\r
                RT_DISP(FDM, DM_PWDB, ("EntryMinPWDB = 0x%x(%d)\n", tmpEntryMinPWDB, tmpEntryMinPWDB));\r
 \r
-       }\r
-       else\r
-       {\r
+       } else\r
                pHalData->EntryMinUndecoratedSmoothedPWDB = 0;\r
                pHalData->EntryMinUndecoratedSmoothedPWDB = 0;\r
-       }\r
 \r
        // Indicate Rx signal strength to FW.\r
 \r
        // Indicate Rx signal strength to FW.\r
-       if(pHalData->bUseRAMask)\r
-       {\r
-               if(bExtRAInfo)\r
-               {\r
-                       PRT_HIGH_THROUGHPUT             pHTInfo = GET_HT_INFO(pDefaultMgntInfo);\r
-                       PRT_VERY_HIGH_THROUGHPUT        pVHTInfo = GET_VHT_INFO(pDefaultMgntInfo);\r
+       if (pHalData->bUseRAMask) {\r
+               PRT_HIGH_THROUGHPUT             pHTInfo = GET_HT_INFO(pDefaultMgntInfo);\r
+               PRT_VERY_HIGH_THROUGHPUT        pVHTInfo = GET_VHT_INFO(pDefaultMgntInfo);\r
 \r
 \r
+               //2 BF_en\r
 #if (BEAMFORMING_SUPPORT == 1)\r
 #if (BEAMFORMING_SUPPORT == 1)\r
-                       \r
-                       Beamform_cap = Beamforming_GetEntryBeamCapByMacId(Adapter, pDefaultMgntInfo->mMacId);\r
-\r
-                       if(Beamform_cap & (BEAMFORMER_CAP_HT_EXPLICIT |BEAMFORMER_CAP_VHT_SU))\r
-                               TxBF_EN = 1;\r
-                       else\r
-                               TxBF_EN = 0;\r
+               Beamform_cap = phydm_Beamforming_GetEntryBeamCapByMacId(pDM_Odm, pDefaultMgntInfo->mMacId);\r
 \r
 \r
-                       H2C_Parameter[3] |= TxBF_EN << 6; \r
-\r
-                       if(TxBF_EN)\r
-                               STBC_TX = 0;\r
-                       else\r
+               if (Beamform_cap & (BEAMFORMER_CAP_HT_EXPLICIT | BEAMFORMER_CAP_VHT_SU))\r
+                       TxBF_EN = 1;\r
 #endif\r
 #endif\r
-                       {\r
-                               if(IS_WIRELESS_MODE_AC(Adapter))\r
-                                       STBC_TX = TEST_FLAG(pVHTInfo->VhtCurStbc, STBC_VHT_ENABLE_TX);\r
-                               else\r
-                                       STBC_TX = TEST_FLAG(pHTInfo->HtCurStbc, STBC_HT_ENABLE_TX);\r
+\r
+               //2 STBC_en\r
+               if ((IS_WIRELESS_MODE_AC(Adapter) && TEST_FLAG(pVHTInfo->VhtCurStbc, STBC_VHT_ENABLE_TX)) ||\r
+                       TEST_FLAG(pHTInfo->HtCurStbc, STBC_HT_ENABLE_TX))\r
+                       stbc_en = 1;\r
+\r
+               if (bExtRAInfo) {\r
+                       if (TxBF_EN)\r
+                               H2C_Parameter[3] |= RAINFO_BF_STATE;\r
+                       else {\r
+                               if (stbc_en)\r
+                                       H2C_Parameter[3] |= RAINFO_STBC_STATE;\r
                        }\r
 \r
                        }\r
 \r
-                       H2C_Parameter[3] |= STBC_TX << 1;\r
+                       if (pDM_Odm->H2C_RARpt_connect)\r
+                               H2C_Parameter[3] |= RAINFO_INIT_RSSI_RATE_STATE;\r
                }\r
                }\r
-               \r
+\r
                H2C_Parameter[2] = (u1Byte)(pHalData->UndecoratedSmoothedPWDB & 0xFF);\r
                H2C_Parameter[2] = (u1Byte)(pHalData->UndecoratedSmoothedPWDB & 0xFF);\r
-               H2C_Parameter[1] = 0x20;        // fw v12 cmdid 5:use max macid ,for nic ,default macid is 0 ,max macid is 1\r
+               //H2C_Parameter[1] = 0x20;      // fw v12 cmdid 5:use max macid ,for nic ,default macid is 0 ,max macid is 1\r
                H2C_Parameter[0] = 0;           // fw v12 cmdid 5:use max macid ,for nic ,default macid is 0 ,max macid is 1\r
                H2C_Parameter[0] = 0;           // fw v12 cmdid 5:use max macid ,for nic ,default macid is 0 ,max macid is 1\r
-               if(bExtRAInfo)\r
-                       ODM_FillH2CCmd(pDM_Odm, ODM_H2C_RSSI_REPORT, 4, H2C_Parameter);\r
-               else\r
-                       ODM_FillH2CCmd(pDM_Odm, ODM_H2C_RSSI_REPORT, 3, H2C_Parameter);\r
-               \r
+\r
+               ODM_FillH2CCmd(pDM_Odm, ODM_H2C_RSSI_REPORT, cmdlen, H2C_Parameter);\r
+\r
                // BT 3.0 HS mode Rssi\r
                // BT 3.0 HS mode Rssi\r
-               if(pDM_Odm->bBtHsOperation)\r
-               {\r
+               if (pDM_Odm->bBtHsOperation) {\r
                        H2C_Parameter[2] = pDM_Odm->btHsRssi;\r
                        H2C_Parameter[2] = pDM_Odm->btHsRssi;\r
-                       H2C_Parameter[1] = 0x0;\r
+                       //H2C_Parameter[1] = 0x0;\r
                        H2C_Parameter[0] = 2;\r
                        H2C_Parameter[0] = 2;\r
-                       if(bExtRAInfo)\r
-                               ODM_FillH2CCmd(pDM_Odm, ODM_H2C_RSSI_REPORT, 4, H2C_Parameter);\r
-                       else    \r
-                               ODM_FillH2CCmd(pDM_Odm, ODM_H2C_RSSI_REPORT, 3, H2C_Parameter);\r
+\r
+                       ODM_FillH2CCmd(pDM_Odm, ODM_H2C_RSSI_REPORT, cmdlen, H2C_Parameter);\r
                }\r
                }\r
-       }\r
-       else\r
-       {\r
+       } else\r
                PlatformEFIOWrite1Byte(Adapter, 0x4fe, (u1Byte)pHalData->UndecoratedSmoothedPWDB);\r
                PlatformEFIOWrite1Byte(Adapter, 0x4fe, (u1Byte)pHalData->UndecoratedSmoothedPWDB);\r
-       }\r
 \r
 \r
-       if((pDM_Odm->SupportICType == ODM_RTL8812)||(pDM_Odm->SupportICType == ODM_RTL8192E))\r
+       if ((pDM_Odm->SupportICType == ODM_RTL8812) || (pDM_Odm->SupportICType == ODM_RTL8192E))\r
                odm_RSSIDumpToRegister(pDM_Odm);\r
                odm_RSSIDumpToRegister(pDM_Odm);\r
-               \r
+\r
 \r
        {\r
                PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter);\r
                s4Byte  GlobalRSSI_min = 0xFF, LocalRSSI_Min;\r
 \r
        {\r
                PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter);\r
                s4Byte  GlobalRSSI_min = 0xFF, LocalRSSI_Min;\r
-               BOOLEAN         bLink= FALSE;\r
-               \r
-               while(pLoopAdapter)\r
-               {\r
+               BOOLEAN         bLink = FALSE;\r
+\r
+               while (pLoopAdapter) {\r
                        LocalRSSI_Min = odm_FindMinimumRSSI(pLoopAdapter);\r
                        //DbgPrint("pHalData->bLinked=%d, LocalRSSI_Min=%d\n", pHalData->bLinked, LocalRSSI_Min);\r
                        LocalRSSI_Min = odm_FindMinimumRSSI(pLoopAdapter);\r
                        //DbgPrint("pHalData->bLinked=%d, LocalRSSI_Min=%d\n", pHalData->bLinked, LocalRSSI_Min);\r
-                       if((LocalRSSI_Min < GlobalRSSI_min) && (LocalRSSI_Min != 0))\r
-                               GlobalRSSI_min = LocalRSSI_Min;                 \r
-                       \r
-                       if(pHalData->bLinked)\r
+                       if ((LocalRSSI_Min < GlobalRSSI_min) && (LocalRSSI_Min != 0))\r
+                               GlobalRSSI_min = LocalRSSI_Min;\r
+\r
+                       if (pHalData->bLinked)\r
                                bLink = TRUE;\r
                                bLink = TRUE;\r
-                       \r
+\r
                        pLoopAdapter = GetNextExtAdapter(pLoopAdapter);\r
                }\r
 \r
                pHalData->bLinked = bLink;\r
                        pLoopAdapter = GetNextExtAdapter(pLoopAdapter);\r
                }\r
 \r
                pHalData->bLinked = bLink;\r
-               ODM_CmnInfoUpdate(&pHalData->DM_OutSrc ,ODM_CMNINFO_LINK, (u8Byte)bLink);\r
-               ODM_CmnInfoUpdate(&pHalData->DM_OutSrc ,ODM_CMNINFO_RSSI_MIN, (u8Byte)GlobalRSSI_min);\r
-               \r
-       }\r
-       \r
-#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-}\r
-\r
-#if(DM_ODM_SUPPORT_TYPE==ODM_CE)\r
-//\r
-//sherry move from DUSC to here 20110517\r
-//\r
-static VOID\r
-FindMinimumRSSI_Dmsp(\r
-       IN      PADAPTER        pAdapter\r
-)\r
-{\r
-#if 0\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
-       s32     Rssi_val_min_back_for_mac0;\r
-       BOOLEAN         bGetValueFromBuddyAdapter = dm_DualMacGetParameterFromBuddyAdapter(pAdapter);\r
-       BOOLEAN         bRestoreRssi = _FALSE;\r
-       PADAPTER        BuddyAdapter = pAdapter->BuddyAdapter;\r
-\r
-       if(pHalData->MacPhyMode92D == DUALMAC_SINGLEPHY)\r
-       {\r
-               if(BuddyAdapter!= NULL)\r
-               {\r
-                       if(pHalData->bSlaveOfDMSP)\r
-                       {\r
-                               //ODM_RT_TRACE(pDM_Odm,COMP_EASY_CONCURRENT,DBG_LOUD,("bSlavecase of dmsp\n"));\r
-                               BuddyAdapter->DualMacDMSPControl.RssiValMinForAnotherMacOfDMSP = pdmpriv->MinUndecoratedPWDBForDM;\r
-                       }\r
-                       else\r
-                       {\r
-                               if(bGetValueFromBuddyAdapter)\r
-                               {\r
-                                       //ODM_RT_TRACE(pDM_Odm,COMP_EASY_CONCURRENT,DBG_LOUD,("get new RSSI\n"));\r
-                                       bRestoreRssi = _TRUE;\r
-                                       Rssi_val_min_back_for_mac0 = pdmpriv->MinUndecoratedPWDBForDM;\r
-                                       pdmpriv->MinUndecoratedPWDBForDM = pAdapter->DualMacDMSPControl.RssiValMinForAnotherMacOfDMSP;\r
-                               }\r
-                       }\r
-               }\r
-               \r
-       }\r
-\r
-       if(bRestoreRssi)\r
-       {\r
-               bRestoreRssi = _FALSE;\r
-               pdmpriv->MinUndecoratedPWDBForDM = Rssi_val_min_back_for_mac0;\r
-       }\r
-#endif\r
-}\r
-\r
-static void\r
-FindMinimumRSSI(\r
-IN     PADAPTER        pAdapter\r
-       )\r
-{      \r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;   \r
-       PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
-\r
-       //1 1.Determine the minimum RSSI \r
+               ODM_CmnInfoUpdate(&pHalData->DM_OutSrc , ODM_CMNINFO_LINK, (u8Byte)bLink);\r
+               ODM_CmnInfoUpdate(&pHalData->DM_OutSrc , ODM_CMNINFO_RSSI_MIN, (u8Byte)GlobalRSSI_min);\r
 \r
 \r
-       if((pDM_Odm->bLinked != _TRUE) &&\r
-               (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))\r
-       {\r
-               pdmpriv->MinUndecoratedPWDBForDM = 0;\r
-               //ODM_RT_TRACE(pDM_Odm,COMP_BB_POWERSAVING, DBG_LOUD, ("Not connected to any \n"));\r
-       }\r
-       else\r
-       {\r
-               pdmpriv->MinUndecoratedPWDBForDM = pdmpriv->EntryMinUndecoratedSmoothedPWDB;\r
        }\r
 \r
        }\r
 \r
-       //DBG_8192C("%s=>MinUndecoratedPWDBForDM(%d)\n",__FUNCTION__,pdmpriv->MinUndecoratedPWDBForDM);\r
-       //ODM_RT_TRACE(pDM_Odm,COMP_DIG, DBG_LOUD, ("MinUndecoratedPWDBForDM =%d\n",pHalData->MinUndecoratedPWDBForDM));\r
+#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 }\r
 }\r
-#endif\r
 \r
 VOID\r
 odm_RSSIMonitorCheckCE(\r
        IN              PVOID           pDM_VOID\r
 \r
 VOID\r
 odm_RSSIMonitorCheckCE(\r
        IN              PVOID           pDM_VOID\r
-       )\r
+)\r
 {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PADAPTER        Adapter = pDM_Odm->Adapter;\r
 {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PADAPTER        Adapter = pDM_Odm->Adapter;\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);      \r
        struct dvobj_priv       *pdvobjpriv = adapter_to_dvobj(Adapter);\r
        int     i;\r
        struct dvobj_priv       *pdvobjpriv = adapter_to_dvobj(Adapter);\r
        int     i;\r
-       int     tmpEntryMaxPWDB=0, tmpEntryMinPWDB=0xff;\r
-       u8      sta_cnt=0;\r
+       int     tmpEntryMaxPWDB = 0, tmpEntryMinPWDB = 0xff;\r
+       u8      sta_cnt = 0;\r
        u32     UL_DL_STATE = 0, STBC_TX = 0, TxBF_EN = 0;\r
        u32     UL_DL_STATE = 0, STBC_TX = 0, TxBF_EN = 0;\r
-       u32     PWDB_rssi[NUM_STA]={0};//[0~15]:MACID, [16~31]:PWDB_rssi\r
+       u32     PWDB_rssi[NUM_STA] = {0}; //[0~15]:MACID, [16~31]:PWDB_rssi\r
        BOOLEAN                 FirstConnect = FALSE;\r
        pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
 \r
        BOOLEAN                 FirstConnect = FALSE;\r
        pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
 \r
-       if(pDM_Odm->bLinked != _TRUE)\r
+       if (pDM_Odm->bLinked != _TRUE)\r
                return;\r
 \r
                return;\r
 \r
-       #if((RTL8812A_SUPPORT==1)||(RTL8821A_SUPPORT==1))\r
-       if((pDM_Odm->SupportICType == ODM_RTL8812)||(pDM_Odm->SupportICType == ODM_RTL8821))\r
-       {\r
+#if((RTL8812A_SUPPORT==1)||(RTL8821A_SUPPORT==1))\r
+       if ((pDM_Odm->SupportICType == ODM_RTL8812) || (pDM_Odm->SupportICType == ODM_RTL8821)) {\r
                u64     curTxOkCnt = pdvobjpriv->traffic_stat.cur_tx_bytes;\r
                u64     curRxOkCnt = pdvobjpriv->traffic_stat.cur_rx_bytes;\r
 \r
                u64     curTxOkCnt = pdvobjpriv->traffic_stat.cur_tx_bytes;\r
                u64     curRxOkCnt = pdvobjpriv->traffic_stat.cur_rx_bytes;\r
 \r
-               if(curRxOkCnt >(curTxOkCnt*6))\r
+               if (curRxOkCnt > (curTxOkCnt * 6))\r
                        UL_DL_STATE = 1;\r
                else\r
                        UL_DL_STATE = 0;\r
        }\r
                        UL_DL_STATE = 1;\r
                else\r
                        UL_DL_STATE = 0;\r
        }\r
-       #endif\r
+#endif\r
 \r
 \r
-       FirstConnect = (pDM_Odm->bLinked) && (pRA_Table->firstconnect == FALSE);    \r
+       FirstConnect = (pDM_Odm->bLinked) && (pRA_Table->firstconnect == FALSE);\r
        pRA_Table->firstconnect = pDM_Odm->bLinked;\r
 \r
        //if(check_fwstate(&Adapter->mlmepriv, WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)\r
        {\r
        pRA_Table->firstconnect = pDM_Odm->bLinked;\r
 \r
        //if(check_fwstate(&Adapter->mlmepriv, WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)\r
        {\r
-               #if 1\r
                struct sta_info *psta;\r
                struct sta_info *psta;\r
-               \r
-               for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++) {\r
-                       if (IS_STA_VALID(psta = pDM_Odm->pODM_StaInfo[i]))\r
-                       {\r
-                                       if(IS_MCAST( psta->hwaddr))  //if(psta->mac_id ==1)\r
-                                                continue;\r
-                                                               \r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB == (-1))\r
-                                                continue;\r
-                                                               \r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB)\r
-                                               tmpEntryMinPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
-\r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB > tmpEntryMaxPWDB)\r
-                                               tmpEntryMaxPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
-\r
-                                       #if 0\r
-                                       DBG_871X("%s mac_id:%u, mac:"MAC_FMT", rssi:%d\n", __func__,\r
-                                               psta->mac_id, MAC_ARG(psta->hwaddr), psta->rssi_stat.UndecoratedSmoothedPWDB);\r
-                                       #endif\r
-\r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB != (-1)) {\r
+\r
+               for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {\r
+                       if (IS_STA_VALID(psta = pDM_Odm->pODM_StaInfo[i])) {\r
+                               if (IS_MCAST(psta->hwaddr))  //if(psta->mac_id ==1)\r
+                                       continue;\r
+\r
+                               if (psta->rssi_stat.UndecoratedSmoothedPWDB == (-1))\r
+                                       continue;\r
+\r
+                               if (psta->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB)\r
+                                       tmpEntryMinPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
+\r
+                               if (psta->rssi_stat.UndecoratedSmoothedPWDB > tmpEntryMaxPWDB)\r
+                                       tmpEntryMaxPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
+\r
+#if 0\r
+                               DBG_871X("%s mac_id:%u, mac:"MAC_FMT", rssi:%d\n", __func__,\r
+                                                psta->mac_id, MAC_ARG(psta->hwaddr), psta->rssi_stat.UndecoratedSmoothedPWDB);\r
+#endif\r
+\r
+                               if (psta->rssi_stat.UndecoratedSmoothedPWDB != (-1)) {\r
 \r
 #ifdef CONFIG_80211N_HT\r
 \r
 #ifdef CONFIG_80211N_HT\r
-                                               if(pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8812)\r
-                                               {\r
+                                       if (pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8812) {\r
 #ifdef CONFIG_BEAMFORMING\r
 #ifdef CONFIG_BEAMFORMING\r
-                                                       BEAMFORMING_CAP Beamform_cap = beamforming_get_entry_beam_cap_by_mac_id(&Adapter->mlmepriv, psta->mac_id);\r
+                                               BEAMFORMING_CAP Beamform_cap = beamforming_get_entry_beam_cap_by_mac_id(&Adapter->mlmepriv, psta->mac_id);\r
 \r
 \r
-                                                       if(Beamform_cap & (BEAMFORMER_CAP_HT_EXPLICIT |BEAMFORMER_CAP_VHT_SU))\r
-                                                               TxBF_EN = 1;\r
-                                                       else\r
-                                                               TxBF_EN = 0;\r
+                                               if (Beamform_cap & (BEAMFORMER_CAP_HT_EXPLICIT | BEAMFORMER_CAP_VHT_SU))\r
+                                                       TxBF_EN = 1;\r
+                                               else\r
+                                                       TxBF_EN = 0;\r
 \r
 \r
-                                                       if (TxBF_EN) {\r
-                                                               STBC_TX = 0;\r
-                                                       }\r
-                                                       else\r
+                                               if (TxBF_EN)\r
+                                                       STBC_TX = 0;\r
+                                               else\r
 #endif\r
 #endif\r
-                                                       {\r
+                                               {\r
 #ifdef CONFIG_80211AC_VHT\r
 #ifdef CONFIG_80211AC_VHT\r
-                                                               if(IsSupportedVHT(psta->wireless_mode))\r
-                                                                       STBC_TX = TEST_FLAG(psta->vhtpriv.stbc_cap, STBC_VHT_ENABLE_TX);\r
-                                                               else    \r
+                                                       if (IsSupportedVHT(psta->wireless_mode))\r
+                                                               STBC_TX = TEST_FLAG(psta->vhtpriv.stbc_cap, STBC_VHT_ENABLE_TX);\r
+                                                       else\r
 #endif\r
 #endif\r
-                                                                       STBC_TX = TEST_FLAG(psta->htpriv.stbc_cap, STBC_HT_ENABLE_TX);\r
-                                                       }\r
+                                                               STBC_TX = TEST_FLAG(psta->htpriv.stbc_cap, STBC_HT_ENABLE_TX);\r
                                                }\r
                                                }\r
-#endif\r
-\r
-                                               if(pDM_Odm->SupportICType == ODM_RTL8192D)\r
-                                                       PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16) | ((Adapter->stapriv.asoc_sta_count+1) << 8));\r
-                                               else if ((pDM_Odm->SupportICType == ODM_RTL8192E)||(pDM_Odm->SupportICType == ODM_RTL8812)||(pDM_Odm->SupportICType == ODM_RTL8821))\r
-                                                       PWDB_rssi[sta_cnt++] = (((u8)(psta->mac_id&0xFF)) | ((psta->rssi_stat.UndecoratedSmoothedPWDB&0x7F)<<16) |(STBC_TX << 25) | (FirstConnect << 29) | (TxBF_EN << 30));\r
-                                               else\r
-                                                       PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16) );\r
                                        }\r
                                        }\r
-                       }\r
-               }\r
-               #else\r
-               _irqL irqL;\r
-               _list   *plist, *phead;\r
-               struct sta_info *psta;\r
-               struct sta_priv *pstapriv = &Adapter->stapriv;\r
-               u8 bcast_addr[ETH_ALEN]= {0xff,0xff,0xff,0xff,0xff,0xff};\r
-\r
-               _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);\r
-\r
-               for(i=0; i< NUM_STA; i++)\r
-               {\r
-                       phead = &(pstapriv->sta_hash[i]);\r
-                       plist = get_next(phead);\r
-               \r
-                       while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)\r
-                       {\r
-                               psta = LIST_CONTAINOR(plist, struct sta_info, hash_list);\r
-\r
-                               plist = get_next(plist);\r
-\r
-                               if(_rtw_memcmp(psta->hwaddr, bcast_addr, ETH_ALEN) || \r
-                                       _rtw_memcmp(psta->hwaddr, myid(&Adapter->eeprompriv), ETH_ALEN))\r
-                                       continue;\r
+#endif\r
 \r
 \r
-                               if(psta->state & WIFI_ASOC_STATE)\r
-                               {\r
-                                       \r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB)\r
-                                               tmpEntryMinPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
-\r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB > tmpEntryMaxPWDB)\r
-                                               tmpEntryMaxPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
-\r
-                                       if(psta->rssi_stat.UndecoratedSmoothedPWDB != (-1)){\r
-                                               //printk("%s==> mac_id(%d),rssi(%d)\n",__FUNCTION__,psta->mac_id,psta->rssi_stat.UndecoratedSmoothedPWDB);\r
-                                               #if(RTL8192D_SUPPORT==1)\r
-                                               PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16) | ((Adapter->stapriv.asoc_sta_count+1) << 8));\r
-                                               #else\r
-                                               PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16) );\r
-                                               #endif\r
-                                       }\r
+                                       if (pDM_Odm->SupportICType == ODM_RTL8192D)\r
+                                               PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB << 16) | ((Adapter->stapriv.asoc_sta_count + 1) << 8));\r
+                                       else if ((pDM_Odm->SupportICType == ODM_RTL8192E) || (pDM_Odm->SupportICType == ODM_RTL8812) || (pDM_Odm->SupportICType == ODM_RTL8821))\r
+                                               PWDB_rssi[sta_cnt++] = (((u8)(psta->mac_id & 0xFF)) | ((psta->rssi_stat.UndecoratedSmoothedPWDB & 0x7F) << 16) | (STBC_TX << 25) | (FirstConnect << 29) | (TxBF_EN << 30));\r
+                                       else\r
+                                               PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB << 16));\r
                                }\r
                                }\r
-                       \r
                        }\r
                        }\r
-\r
                }\r
                }\r
-       \r
-               _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);\r
-               #endif\r
 \r
                //printk("%s==> sta_cnt(%d)\n",__FUNCTION__,sta_cnt);\r
 \r
 \r
                //printk("%s==> sta_cnt(%d)\n",__FUNCTION__,sta_cnt);\r
 \r
-               for(i=0; i< sta_cnt; i++)\r
-               {\r
-                       if(PWDB_rssi[i] != (0)){\r
-                               if(pHalData->fw_ractrl == _TRUE)// Report every sta's RSSI to FW\r
-                               {\r
-                                       #if(RTL8192D_SUPPORT==1)\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8192D){\r
-                                               FillH2CCmd92D(Adapter, H2C_RSSI_REPORT, 3, (u8 *)(&PWDB_rssi[i]));              \r
-                                       }\r
-                                       #endif\r
-                                       \r
-                                       #if((RTL8192C_SUPPORT==1)||(RTL8723A_SUPPORT==1))\r
-                                       if((pDM_Odm->SupportICType == ODM_RTL8192C)||(pDM_Odm->SupportICType == ODM_RTL8723A)){\r
-                                               rtl8192c_set_rssi_cmd(Adapter, (u8*)&PWDB_rssi[i]);\r
-                                       }\r
-                                       #endif\r
-                                       \r
-                                       #if((RTL8812A_SUPPORT==1)||(RTL8821A_SUPPORT==1))\r
-                                       if((pDM_Odm->SupportICType == ODM_RTL8812)||(pDM_Odm->SupportICType == ODM_RTL8821)){   \r
+               for (i = 0; i < sta_cnt; i++) {\r
+                       if (PWDB_rssi[i] != (0)) {\r
+                               if (pHalData->fw_ractrl == _TRUE) { // Report every sta's RSSI to FW\r
+#if((RTL8812A_SUPPORT==1)||(RTL8821A_SUPPORT==1))\r
+                                       if ((pDM_Odm->SupportICType == ODM_RTL8812) || (pDM_Odm->SupportICType == ODM_RTL8821)) {\r
                                                PWDB_rssi[i] |= (UL_DL_STATE << 24);\r
                                                rtl8812_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
                                        }\r
                                                PWDB_rssi[i] |= (UL_DL_STATE << 24);\r
                                                rtl8812_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
                                        }\r
-                                       #endif\r
-                                       #if(RTL8192E_SUPPORT==1)\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8192E){\r
+#endif\r
+#if(RTL8192E_SUPPORT==1)\r
+                                       if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
                                                rtl8192e_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
                                                rtl8192e_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
-                                       }\r
-                                       #endif\r
-                                       #if(RTL8723B_SUPPORT==1)\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8723B){\r
+#endif\r
+#if(RTL8723B_SUPPORT==1)\r
+                                       if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
                                                rtl8723b_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
                                                rtl8723b_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
-                                       }\r
-                                       #endif\r
+#endif\r
 \r
 \r
-                                       #if(RTL8188E_SUPPORT==1)\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8188E){\r
+#if(RTL8188E_SUPPORT==1)\r
+                                       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
                                                rtl8188e_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
                                                rtl8188e_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
-                                       }\r
-                                       #endif\r
-                                                                               \r
-                               }\r
-                               else{\r
-                                       #if((RTL8188E_SUPPORT==1)&&(RATE_ADAPTIVE_SUPPORT == 1))\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8188E){\r
+#endif\r
+\r
+#if (RTL8814A_SUPPORT == 1)\r
+                                       if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
+                                               rtl8814_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));\r
+#endif\r
+                               } else {\r
+#if((RTL8188E_SUPPORT==1)&&(RATE_ADAPTIVE_SUPPORT == 1))\r
+                                       if (pDM_Odm->SupportICType == ODM_RTL8188E) {\r
                                                ODM_RA_SetRSSI_8188E(\r
                                                ODM_RA_SetRSSI_8188E(\r
-                                               &(pHalData->odmpriv), (PWDB_rssi[i]&0xFF), (u8)((PWDB_rssi[i]>>16) & 0xFF));\r
+                                                       &(pHalData->odmpriv), (PWDB_rssi[i] & 0xFF), (u8)((PWDB_rssi[i] >> 16) & 0xFF));\r
                                        }\r
                                        }\r
-                                       #endif\r
+#endif\r
                                }\r
                        }\r
                                }\r
                        }\r
-               }               \r
+               }\r
        }\r
 \r
 \r
 \r
        }\r
 \r
 \r
 \r
-       if(tmpEntryMaxPWDB != 0)        // If associated entry is found\r
-       {\r
-               pdmpriv->EntryMaxUndecoratedSmoothedPWDB = tmpEntryMaxPWDB;             \r
-       }\r
+       if (tmpEntryMaxPWDB != 0)       // If associated entry is found\r
+               pHalData->EntryMaxUndecoratedSmoothedPWDB = tmpEntryMaxPWDB;\r
        else\r
        else\r
-       {\r
-               pdmpriv->EntryMaxUndecoratedSmoothedPWDB = 0;\r
-       }\r
+               pHalData->EntryMaxUndecoratedSmoothedPWDB = 0;\r
 \r
 \r
-       if(tmpEntryMinPWDB != 0xff) // If associated entry is found\r
-       {\r
-               pdmpriv->EntryMinUndecoratedSmoothedPWDB = tmpEntryMinPWDB;             \r
-       }\r
+       if (tmpEntryMinPWDB != 0xff) // If associated entry is found\r
+               pHalData->EntryMinUndecoratedSmoothedPWDB = tmpEntryMinPWDB;\r
        else\r
        else\r
-       {\r
-               pdmpriv->EntryMinUndecoratedSmoothedPWDB = 0;\r
-       }\r
+               pHalData->EntryMinUndecoratedSmoothedPWDB = 0;\r
 \r
        FindMinimumRSSI(Adapter);//get pdmpriv->MinUndecoratedPWDBForDM\r
 \r
 \r
        FindMinimumRSSI(Adapter);//get pdmpriv->MinUndecoratedPWDBForDM\r
 \r
-       #if(RTL8192D_SUPPORT==1)\r
-       FindMinimumRSSI_Dmsp(Adapter);\r
-       #endif\r
-       pDM_Odm->RSSI_Min = pdmpriv->MinUndecoratedPWDBForDM;\r
+       pDM_Odm->RSSI_Min = pHalData->MinUndecoratedPWDBForDM;\r
        //ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_RSSI_MIN, pdmpriv->MinUndecoratedPWDBForDM);\r
 #endif//if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
 }\r
        //ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_RSSI_MIN, pdmpriv->MinUndecoratedPWDBForDM);\r
 #endif//if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
 }\r
@@ -699,124 +1081,114 @@ odm_RSSIMonitorCheckCE(
 VOID\r
 odm_RSSIMonitorCheckAP(\r
        IN              PVOID           pDM_VOID\r
 VOID\r
 odm_RSSIMonitorCheckAP(\r
        IN              PVOID           pDM_VOID\r
-       )\r
+)\r
 {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
 {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-#if defined(CONFIG_RTL_92C_SUPPORT) || defined(CONFIG_RTL_92D_SUPPORT) ||defined(CONFIG_RTL_8812_SUPPORT)||defined(CONFIG_WLAN_HAL_8881A)||defined(CONFIG_WLAN_HAL_8192EE)\r
-       {\r
-               PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-               prtl8192cd_priv priv            = pDM_Odm->priv;                \r
-               u4Byte i;\r
-               PSTA_INFO_T pstat;\r
-               static u1Byte H2C_Parameter[5];\r
-               u1Byte    TxBF_EN = 0;\r
-               pBDC_T  pDM_BdcTable = &pDM_Odm->DM_BdcTable;\r
-\r
-               if( priv->up_time % 2 )\r
-                       return;\r
-\r
-               pDM_BdcTable->num_Txbfee_Client=0;\r
-               pDM_BdcTable->num_Txbfer_Client=0;\r
-               //pDM_BdcTable->num_Client=0;\r
-               \r
-               for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)\r
-               {\r
-                       pstat = pDM_Odm->pODM_StaInfo[i];\r
-                       if(IS_STA_VALID(pstat) )\r
-                       {                       \r
-#ifdef BEAMFORMING_SUPPORT\r
-                               BEAMFORMING_CAP Beamform_cap = Beamforming_GetEntryBeamCapByMacId(priv, pstat->aid);\r
-                               if(Beamform_cap == BEAMFORMER_CAP_HT_EXPLICIT || Beamform_cap == BEAMFORMER_CAP_VHT_SU ||\r
-                                        Beamform_cap == (BEAMFORMER_CAP_HT_EXPLICIT|BEAMFORMEE_CAP_HT_EXPLICIT) ||\r
-                                        Beamform_cap == (BEAMFORMER_CAP_VHT_SU|BEAMFORMEE_CAP_VHT_SU))\r
-                               {\r
-                                       TxBF_EN = (1<< 6);\r
-                                       pDM_BdcTable->w_BFee_Client[i]=1; //AP act as BFer\r
-                                       pDM_BdcTable->num_Txbfee_Client++;\r
-                               }\r
-                               else \r
-                               {\r
-                                       pDM_BdcTable->w_BFee_Client[i]=0; //AP act as BFer\r
-                               }\r
-                               \r
-                               if((Beamform_cap & BEAMFORMEE_CAP_HT_EXPLICIT) || (Beamform_cap & BEAMFORMEE_CAP_VHT_SU) )\r
-                               {\r
-                                       pDM_BdcTable->w_BFer_Client[i]=1; //AP act as BFee\r
-                                       pDM_BdcTable->num_Txbfer_Client++;\r
-                               }\r
-                               else \r
-                               {\r
-                                       pDM_BdcTable->w_BFer_Client[i]=0; //AP act as BFer\r
-                               }\r
+#if (RTL8812A_SUPPORT||RTL8881A_SUPPORT||RTL8192E_SUPPORT||RTL8814A_SUPPORT)\r
 \r
 \r
-                                       \r
-                               //pDM_BdcTable->num_Client++;\r
-               \r
-                               \r
-                               \r
-#endif                 \r
-//#ifdef STA_EXT\r
-//                             if (GET_CHIP_VER(priv)==VERSION_8812E && REMAP_AID(pstat) < (RTL8812_NUM_STAT - 1))\r
-//#endif\r
-                               {\r
-#ifdef CONFIG_RTL_8812_SUPPORT\r
-#ifdef STA_EXT\r
-                                       if(REMAP_AID(pstat) < (RTL8812_NUM_STAT - 1))\r
-#endif                                 \r
-\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8812) {\r
-                                               memset(H2C_Parameter,0,5);                                              \r
-                                               H2C_Parameter[2] = (u1Byte)(pstat->rssi & 0x7F);\r
-                                               H2C_Parameter[0] = REMAP_AID(pstat);                            \r
-                                               if ((priv->pmib->dot11nConfigEntry.dot11nSTBC) && (\r
-                                                       (pstat->ht_cap_buf.ht_cap_info & cpu_to_le16(_HTCAP_RX_STBC_CAP_)\r
-#ifdef RTK_AC_SUPPORT                  \r
-                                                       || (pstat->vht_cap_buf.vht_cap_info & cpu_to_le32(_VHTCAP_RX_STBC_CAP_))\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte                  H2C_Parameter[4] = {0};\r
+       u4Byte                   i;\r
+       BOOLEAN                 bExtRAInfo = FALSE;\r
+       u1Byte                  cmdlen = 3 ;\r
+       u1Byte                  TxBF_EN = 0, stbc_en = 0;\r
+\r
+       prtl8192cd_priv priv            = pDM_Odm->priv;\r
+       PSTA_INFO_T             pstat;\r
+       BOOLEAN                 act_bfer = FALSE;\r
+\r
+#ifdef BEAMFORMING_SUPPORT\r
+#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
+       pBDC_T  pDM_BdcTable = &pDM_Odm->DM_BdcTable;\r
+       pDM_BdcTable->num_Txbfee_Client = 0;\r
+       pDM_BdcTable->num_Txbfer_Client = 0;\r
 #endif\r
 #endif\r
-                                                       )))     \r
-                                                       H2C_Parameter[3] |= 2;\r
-                                               H2C_Parameter[3] |= TxBF_EN ; \r
-                                               FillH2CCmd8812(pDM_Odm->priv, H2C_8812_RSSI_REPORT, 4, H2C_Parameter);\r
-                                       }\r
 #endif\r
 #endif\r
-                               }\r
-//#ifdef STA_EXT\r
-//                             else if (GET_CHIP_VER(priv)!=VERSION_8812E && REMAP_AID(pstat) < (FW_NUM_STAT - 1)) \r
-//#endif\r
-                               {\r
-#if defined(CONFIG_WLAN_HAL_8881A) || defined(CONFIG_WLAN_HAL_8192EE)\r
-#ifdef STA_EXT\r
-                                       if(REMAP_AID(pstat) < (RTL8812_NUM_STAT - 1))\r
-#endif \r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E) {\r
-//                                             u1Byte  H2C_Parameter[5] ={0};  \r
-                                               u1Byte  cmdlen = 3;\r
-                                               memset(H2C_Parameter, 0, 5);\r
-                                               H2C_Parameter[2] = (u1Byte)(pstat->rssi & 0xFF);\r
-                                               H2C_Parameter[0] = REMAP_AID(pstat);\r
-                                               if(pDM_Odm->SupportICType == ODM_RTL8192E) {\r
-                                                       cmdlen = 4;\r
-                                                       if ((priv->pmib->dot11nConfigEntry.dot11nSTBC) && (pstat->ht_cap_buf.ht_cap_info & cpu_to_le16(_HTCAP_RX_STBC_CAP_)))   \r
-                                                               H2C_Parameter[3] |= 2;          \r
-                                                        H2C_Parameter[3] |= TxBF_EN; \r
-\r
-                                               } \r
-                        GET_HAL_INTERFACE(pDM_Odm->priv)->FillH2CCmdHandler(pDM_Odm->priv, H2C_88XX_RSSI_REPORT, cmdlen, H2C_Parameter);\r
-                                       }\r
+\r
+\r
+       if (priv->up_time % 2)\r
+               return;\r
+\r
+       if (pDM_Odm->SupportICType & EXT_RA_INFO_SUPPORT_IC) {\r
+               bExtRAInfo = TRUE;\r
+               cmdlen = 4;\r
+       }\r
+\r
+       for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {\r
+               pstat = pDM_Odm->pODM_StaInfo[i];\r
+\r
+               if (IS_STA_VALID(pstat)) {\r
+                       if (pstat->sta_in_firmware != 1)\r
+                               continue;\r
+\r
+                       //2 BF_en\r
+#ifdef BEAMFORMING_SUPPORT\r
+                       BEAMFORMING_CAP Beamform_cap = Beamforming_GetEntryBeamCapByMacId(priv, pstat->aid);\r
+\r
+                       if (Beamform_cap == BEAMFORMER_CAP_HT_EXPLICIT || Beamform_cap == BEAMFORMER_CAP_VHT_SU ||\r
+                               Beamform_cap == (BEAMFORMER_CAP_HT_EXPLICIT | BEAMFORMEE_CAP_HT_EXPLICIT) ||\r
+                               Beamform_cap == (BEAMFORMER_CAP_VHT_SU | BEAMFORMEE_CAP_VHT_SU)) {\r
+                               TxBF_EN = 1;\r
+                               act_bfer = TRUE;\r
+                       }\r
+\r
+#if (defined(CONFIG_HW_ANTENNA_DIVERSITY)) //BDC\r
+\r
+                       if (act_bfer == TRUE) {\r
+                               pDM_BdcTable->w_BFee_Client[i] = 1; //AP act as BFer\r
+                               pDM_BdcTable->num_Txbfee_Client++;\r
+                       } else {\r
+                               pDM_BdcTable->w_BFee_Client[i] = 0; //AP act as BFer\r
+                       }\r
+\r
+                       if ((Beamform_cap & BEAMFORMEE_CAP_HT_EXPLICIT) || (Beamform_cap & BEAMFORMEE_CAP_VHT_SU)) {\r
+                               pDM_BdcTable->w_BFer_Client[i] = 1; //AP act as BFee\r
+                               pDM_BdcTable->num_Txbfer_Client++;\r
+                       } else {\r
+                               pDM_BdcTable->w_BFer_Client[i] = 0; //AP act as BFer\r
+                       }\r
 #endif\r
 #endif\r
-                               \r
-#if defined(CONFIG_RTL_92C_SUPPORT) || defined(CONFIG_RTL_92D_SUPPORT) \r
-#ifdef STA_EXT\r
-                                       if(REMAP_AID(pstat) < (FW_NUM_STAT - 1))\r
 #endif\r
 #endif\r
-                                       if(pDM_Odm->SupportICType == ODM_RTL8192C || pDM_Odm->SupportICType == ODM_RTL8192D) \r
-                                               add_update_rssi(pDM_Odm->priv, pstat);\r
+\r
+                       //2 STBC_en\r
+                       if ((priv->pmib->dot11nConfigEntry.dot11nSTBC) &&\r
+                               ((pstat->ht_cap_buf.ht_cap_info & cpu_to_le16(_HTCAP_RX_STBC_CAP_))\r
+#ifdef RTK_AC_SUPPORT\r
+                                || (pstat->vht_cap_buf.vht_cap_info & cpu_to_le32(_VHTCAP_RX_STBC_CAP_))\r
 #endif\r
 #endif\r
+                               ))\r
+                               stbc_en = 1;\r
+\r
+                       //2 RAINFO\r
+\r
+                       if (bExtRAInfo) {\r
+                               if ((pstat->rx_avarage)  > ((pstat->tx_avarage) * 6))\r
+                                       H2C_Parameter[3] |= RAINFO_BE_RX_STATE;\r
+\r
+                               if (TxBF_EN)\r
+                                       H2C_Parameter[3] |= RAINFO_BF_STATE;\r
+                               else {\r
+                                       if (stbc_en)\r
+                                               H2C_Parameter[3] |= RAINFO_STBC_STATE;\r
                                }\r
 \r
                                }\r
 \r
-                       }               \r
+                               if (pDM_Odm->H2C_RARpt_connect)\r
+                                       H2C_Parameter[3] |= RAINFO_INIT_RSSI_RATE_STATE;\r
+\r
+                               //ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("[RAINFO] H2C_Para[3] = %x,  \n",H2C_Parameter[3]));\r
+                       }\r
+\r
+                       H2C_Parameter[2] = (u1Byte)(pstat->rssi & 0xFF);\r
+                       H2C_Parameter[0] = REMAP_AID(pstat);\r
+\r
+                       //ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("[RSSI] H2C_Para[2] = %x,  \n",H2C_Parameter[2]));\r
+                       //ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("[MACID] H2C_Para[0] = %x,  \n",H2C_Parameter[0]));\r
+\r
+                       ODM_FillH2CCmd(pDM_Odm, ODM_H2C_RSSI_REPORT, cmdlen, H2C_Parameter);\r
+\r
                }\r
        }\r
                }\r
        }\r
+\r
 #endif\r
 #endif\r
 \r
 #endif\r
 #endif\r
 \r
@@ -825,8 +1197,8 @@ odm_RSSIMonitorCheckAP(
 \r
 VOID\r
 odm_RateAdaptiveMaskInit(\r
 \r
 VOID\r
 odm_RateAdaptiveMaskInit(\r
-       IN      PVOID   pDM_VOID        \r
-       )\r
+       IN      PVOID   pDM_VOID\r
+)\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PODM_RATE_ADAPTIVE      pOdmRA = &pDM_Odm->RateAdaptive;\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PODM_RATE_ADAPTIVE      pOdmRA = &pDM_Odm->RateAdaptive;\r
@@ -840,33 +1212,33 @@ odm_RateAdaptiveMaskInit(
        if (pMgntInfo->DM_Type == DM_Type_ByDriver)\r
                pHalData->bUseRAMask = TRUE;\r
        else\r
        if (pMgntInfo->DM_Type == DM_Type_ByDriver)\r
                pHalData->bUseRAMask = TRUE;\r
        else\r
-               pHalData->bUseRAMask = FALSE;   \r
+               pHalData->bUseRAMask = FALSE;\r
 \r
 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
        pOdmRA->Type = DM_Type_ByDriver;\r
        if (pOdmRA->Type == DM_Type_ByDriver)\r
                pDM_Odm->bUseRAMask = _TRUE;\r
        else\r
 \r
 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
        pOdmRA->Type = DM_Type_ByDriver;\r
        if (pOdmRA->Type == DM_Type_ByDriver)\r
                pDM_Odm->bUseRAMask = _TRUE;\r
        else\r
-               pDM_Odm->bUseRAMask = _FALSE;   \r
+               pDM_Odm->bUseRAMask = _FALSE;\r
 #endif\r
 \r
        pOdmRA->RATRState = DM_RATR_STA_INIT;\r
 #endif\r
 \r
        pOdmRA->RATRState = DM_RATR_STA_INIT;\r
-       \r
+\r
 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-       if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-               pOdmRA->LdpcThres = 50;         \r
+       if (pDM_Odm->SupportICType == ODM_RTL8812)\r
+               pOdmRA->LdpcThres = 50;\r
        else\r
                pOdmRA->LdpcThres = 35;\r
        else\r
                pOdmRA->LdpcThres = 35;\r
-               \r
+\r
        pOdmRA->RtsThres = 35;\r
        pOdmRA->RtsThres = 35;\r
-       \r
+\r
 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
        pOdmRA->LdpcThres = 35;\r
        pOdmRA->bUseLdpc = FALSE;\r
 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
        pOdmRA->LdpcThres = 35;\r
        pOdmRA->bUseLdpc = FALSE;\r
-       \r
+\r
 #else\r
 #else\r
-       pOdmRA->UltraLowRSSIThresh = 9; \r
-       \r
+       pOdmRA->UltraLowRSSIThresh = 9;\r
+\r
 #endif\r
 \r
        pOdmRA->HighRSSIThresh = 50;\r
 #endif\r
 \r
        pOdmRA->HighRSSIThresh = 50;\r
@@ -885,87 +1257,46 @@ odm_RateAdaptiveMaskInit(
  *\r
  * Revised History:\r
  *     When            Who             Remark\r
  *\r
  * Revised History:\r
  *     When            Who             Remark\r
- *     05/27/2009      hpfan   Create Version 0.  \r
+ *     05/27/2009      hpfan   Create Version 0.\r
  *\r
  *---------------------------------------------------------------------------*/\r
 VOID\r
 odm_RefreshRateAdaptiveMask(\r
        IN      PVOID   pDM_VOID\r
  *\r
  *---------------------------------------------------------------------------*/\r
 VOID\r
 odm_RefreshRateAdaptiveMask(\r
        IN      PVOID   pDM_VOID\r
-       )\r
+)\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("odm_RefreshRateAdaptiveMask()---------->\n")); \r
-       if (!(pDM_Odm->SupportAbility & ODM_BB_RA_MASK))\r
-       {\r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("odm_RefreshRateAdaptiveMask()---------->\n"));\r
+       if (!(pDM_Odm->SupportAbility & ODM_BB_RA_MASK)) {\r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("odm_RefreshRateAdaptiveMask(): Return cos not supported\n"));\r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("odm_RefreshRateAdaptiveMask(): Return cos not supported\n"));\r
-               return; \r
+               return;\r
        }\r
        //\r
        // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate\r
        // at the same time. In the stage2/3, we need to prive universal interface and merge all\r
        // HW dynamic mechanism.\r
        //\r
        }\r
        //\r
        // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate\r
        // at the same time. In the stage2/3, we need to prive universal interface and merge all\r
        // HW dynamic mechanism.\r
        //\r
-       switch  (pDM_Odm->SupportPlatform)\r
-       {\r
-               case    ODM_WIN:\r
-                       odm_RefreshRateAdaptiveMaskMP(pDM_Odm);\r
-                       break;\r
-\r
-               case    ODM_CE:\r
-                       odm_RefreshRateAdaptiveMaskCE(pDM_Odm);\r
-                       break;\r
-\r
-               case    ODM_AP:\r
-               case    ODM_ADSL:\r
-                       odm_RefreshRateAdaptiveMaskAPADSL(pDM_Odm);\r
-                       break;\r
+       switch  (pDM_Odm->SupportPlatform) {\r
+       case    ODM_WIN:\r
+               odm_RefreshRateAdaptiveMaskMP(pDM_Odm);\r
+               break;\r
+\r
+       case    ODM_CE:\r
+               odm_RefreshRateAdaptiveMaskCE(pDM_Odm);\r
+               break;\r
+\r
+       case    ODM_AP:\r
+       case    ODM_ADSL:\r
+               odm_RefreshRateAdaptiveMaskAPADSL(pDM_Odm);\r
+               break;\r
        }\r
        }\r
-       \r
-}\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-VOID\r
-odm_RefreshLdpcRtsMP(\r
-       IN      PADAPTER                        pAdapter,\r
-       IN      PDM_ODM_T                       pDM_Odm,\r
-       IN      u1Byte                          mMacId,\r
-       IN      u1Byte                          IOTPeer,\r
-       IN      s4Byte                          UndecoratedSmoothedPWDB \r
-       )\r
-{\r
-       BOOLEAN                                 bCtlLdpc = FALSE;\r
-       PMGNT_INFO                              pMgntInfo = GetDefaultMgntInfo(pAdapter);\r
-       PODM_RATE_ADAPTIVE              pRA = &pDM_Odm->RateAdaptive;\r
-\r
-       if(pDM_Odm->SupportICType != ODM_RTL8821 && pDM_Odm->SupportICType != ODM_RTL8812)\r
-               return;\r
-\r
-       if((pDM_Odm->SupportICType == ODM_RTL8821) && (pDM_Odm->CutVersion == ODM_CUT_A))\r
-               bCtlLdpc = TRUE;\r
-       else if(        pDM_Odm->SupportICType == ODM_RTL8812 && \r
-                       IOTPeer == HT_IOT_PEER_REALTEK_JAGUAR_CCUTAP)\r
-                               bCtlLdpc = TRUE;\r
-\r
-       if(bCtlLdpc)\r
-       {\r
-               if(UndecoratedSmoothedPWDB < (pRA->LdpcThres-5))\r
-                       MgntSet_TX_LDPC(pAdapter, mMacId, TRUE);\r
-               else if(UndecoratedSmoothedPWDB > pRA->LdpcThres)\r
-                       MgntSet_TX_LDPC(pAdapter, mMacId, FALSE);\r
-       }       \r
 \r
 \r
-       if(UndecoratedSmoothedPWDB < (pRA->RtsThres-5))\r
-               pRA->bLowerRtsRate = TRUE;\r
-       else if(UndecoratedSmoothedPWDB > pRA->RtsThres)\r
-               pRA->bLowerRtsRate = FALSE;\r
 }\r
 }\r
-#endif\r
-\r
 \r
 VOID\r
 odm_RefreshRateAdaptiveMaskMP(\r
        IN              PVOID           pDM_VOID\r
 \r
 VOID\r
 odm_RefreshRateAdaptiveMaskMP(\r
        IN              PVOID           pDM_VOID\r
-       )\r
+)\r
 {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
@@ -974,31 +1305,25 @@ odm_RefreshRateAdaptiveMaskMP(
        HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(pAdapter);\r
        PMGNT_INFO                              pMgntInfo = GetDefaultMgntInfo(pAdapter);\r
 \r
        HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(pAdapter);\r
        PMGNT_INFO                              pMgntInfo = GetDefaultMgntInfo(pAdapter);\r
 \r
-       if(pAdapter->bDriverStopped)\r
-       {\r
+       if (pAdapter->bDriverStopped) {\r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("<---- odm_RefreshRateAdaptiveMask(): driver is going to unload\n"));\r
                return;\r
        }\r
 \r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("<---- odm_RefreshRateAdaptiveMask(): driver is going to unload\n"));\r
                return;\r
        }\r
 \r
-       if(!pHalData->bUseRAMask)\r
-       {\r
+       if (!pHalData->bUseRAMask) {\r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("<---- odm_RefreshRateAdaptiveMask(): driver does not control rate adaptive mask\n"));\r
                return;\r
        }\r
 \r
        // if default port is connected, update RA table for default port (infrastructure mode only)\r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("<---- odm_RefreshRateAdaptiveMask(): driver does not control rate adaptive mask\n"));\r
                return;\r
        }\r
 \r
        // if default port is connected, update RA table for default port (infrastructure mode only)\r
-       if(pMgntInfo->mAssoc && (!ACTING_AS_AP(pAdapter)))\r
-       {       \r
+       if (pMgntInfo->mAssoc && (!ACTING_AS_AP(pAdapter))) {\r
                odm_RefreshLdpcRtsMP(pAdapter, pDM_Odm, pMgntInfo->mMacId,  pMgntInfo->IOTPeer, pHalData->UndecoratedSmoothedPWDB);\r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("odm_RefreshRateAdaptiveMask(): Infrasture Mode\n"));\r
                odm_RefreshLdpcRtsMP(pAdapter, pDM_Odm, pMgntInfo->mMacId,  pMgntInfo->IOTPeer, pHalData->UndecoratedSmoothedPWDB);\r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("odm_RefreshRateAdaptiveMask(): Infrasture Mode\n"));\r
-               if( ODM_RAStateCheck(pDM_Odm, pHalData->UndecoratedSmoothedPWDB, pMgntInfo->bSetTXPowerTrainingByOid, &pMgntInfo->Ratr_State) )\r
-               {\r
+               if (ODM_RAStateCheck(pDM_Odm, pHalData->UndecoratedSmoothedPWDB, pMgntInfo->bSetTXPowerTrainingByOid, &pMgntInfo->Ratr_State)) {\r
                        ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target AP addr : "), pMgntInfo->Bssid);\r
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pHalData->UndecoratedSmoothedPWDB, pMgntInfo->Ratr_State));\r
                        pAdapter->HalFunc.UpdateHalRAMaskHandler(pAdapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State);\r
                        ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target AP addr : "), pMgntInfo->Bssid);\r
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pHalData->UndecoratedSmoothedPWDB, pMgntInfo->Ratr_State));\r
                        pAdapter->HalFunc.UpdateHalRAMaskHandler(pAdapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State);\r
-               }\r
-               else if(pDM_Odm->bChangeState)\r
-               {\r
+               } else if (pDM_Odm->bChangeState) {\r
                        ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target AP addr : "), pMgntInfo->Bssid);\r
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Change Power Training State, bDisablePowerTraining = %d\n", pDM_Odm->bDisablePowerTraining));\r
                        pAdapter->HalFunc.UpdateHalRAMaskHandler(pAdapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State);\r
                        ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target AP addr : "), pMgntInfo->Bssid);\r
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Change Power Training State, bDisablePowerTraining = %d\n", pDM_Odm->bDisablePowerTraining));\r
                        pAdapter->HalFunc.UpdateHalRAMaskHandler(pAdapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State);\r
@@ -1009,34 +1334,27 @@ odm_RefreshRateAdaptiveMaskMP(
        // The following part configure AP/VWifi/IBSS rate adaptive mask.\r
        //\r
 \r
        // The following part configure AP/VWifi/IBSS rate adaptive mask.\r
        //\r
 \r
-       if(pMgntInfo->mIbss)    // Target: AP/IBSS peer.\r
+       if (pMgntInfo->mIbss)   // Target: AP/IBSS peer.\r
                pTargetAdapter = GetDefaultAdapter(pAdapter);\r
        else\r
                pTargetAdapter = GetFirstAPAdapter(pAdapter);\r
 \r
        // if extension port (softap) is started, updaet RA table for more than one clients associate\r
                pTargetAdapter = GetDefaultAdapter(pAdapter);\r
        else\r
                pTargetAdapter = GetFirstAPAdapter(pAdapter);\r
 \r
        // if extension port (softap) is started, updaet RA table for more than one clients associate\r
-       if(pTargetAdapter != NULL)\r
-       {\r
+       if (pTargetAdapter != NULL) {\r
                int     i;\r
                PRT_WLAN_STA    pEntry;\r
 \r
                int     i;\r
                PRT_WLAN_STA    pEntry;\r
 \r
-               for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)\r
-               {\r
+               for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {\r
                        pEntry = AsocEntry_EnumStation(pTargetAdapter, i);\r
                        pEntry = AsocEntry_EnumStation(pTargetAdapter, i);\r
-                       if(NULL != pEntry)\r
-                       {\r
-                               if(pEntry->bAssociated)\r
-                               {\r
+                       if (NULL != pEntry) {\r
+                               if (pEntry->bAssociated) {\r
                                        odm_RefreshLdpcRtsMP(pAdapter, pDM_Odm, pEntry->AssociatedMacId, pEntry->IOTPeer, pEntry->rssi_stat.UndecoratedSmoothedPWDB);\r
 \r
                                        odm_RefreshLdpcRtsMP(pAdapter, pDM_Odm, pEntry->AssociatedMacId, pEntry->IOTPeer, pEntry->rssi_stat.UndecoratedSmoothedPWDB);\r
 \r
-                                       if(ODM_RAStateCheck(pDM_Odm, pEntry->rssi_stat.UndecoratedSmoothedPWDB, pMgntInfo->bSetTXPowerTrainingByOid, &pEntry->Ratr_State) )\r
-                                       {\r
+                                       if (ODM_RAStateCheck(pDM_Odm, pEntry->rssi_stat.UndecoratedSmoothedPWDB, pMgntInfo->bSetTXPowerTrainingByOid, &pEntry->Ratr_State)) {\r
                                                ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target STA addr : "), pEntry->MacAddr);\r
                                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pEntry->rssi_stat.UndecoratedSmoothedPWDB, pEntry->Ratr_State));\r
                                                pAdapter->HalFunc.UpdateHalRAMaskHandler(pTargetAdapter, pEntry->AssociatedMacId, pEntry, pEntry->Ratr_State);\r
                                                ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target STA addr : "), pEntry->MacAddr);\r
                                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pEntry->rssi_stat.UndecoratedSmoothedPWDB, pEntry->Ratr_State));\r
                                                pAdapter->HalFunc.UpdateHalRAMaskHandler(pTargetAdapter, pEntry->AssociatedMacId, pEntry, pEntry->Ratr_State);\r
-                                       }\r
-                                       else if(pDM_Odm->bChangeState)\r
-                                       {\r
+                                       } else if (pDM_Odm->bChangeState) {\r
                                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Change Power Training State, bDisablePowerTraining = %d\n", pDM_Odm->bDisablePowerTraining));\r
                                                pAdapter->HalFunc.UpdateHalRAMaskHandler(pAdapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State);\r
                                        }\r
                                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Change Power Training State, bDisablePowerTraining = %d\n", pDM_Odm->bDisablePowerTraining));\r
                                                pAdapter->HalFunc.UpdateHalRAMaskHandler(pAdapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State);\r
                                        }\r
@@ -1045,16 +1363,16 @@ odm_RefreshRateAdaptiveMaskMP(
                }\r
        }\r
 \r
                }\r
        }\r
 \r
-       if(pMgntInfo->bSetTXPowerTrainingByOid)\r
-               pMgntInfo->bSetTXPowerTrainingByOid = FALSE;    \r
+       if (pMgntInfo->bSetTXPowerTrainingByOid)\r
+               pMgntInfo->bSetTXPowerTrainingByOid = FALSE;\r
 #endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 }\r
 \r
 \r
 VOID\r
 odm_RefreshRateAdaptiveMaskCE(\r
 #endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 }\r
 \r
 \r
 VOID\r
 odm_RefreshRateAdaptiveMaskCE(\r
-       IN      PVOID   pDM_VOID        \r
-       )\r
+       IN      PVOID   pDM_VOID\r
+)\r
 {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
@@ -1062,97 +1380,87 @@ odm_RefreshRateAdaptiveMaskCE(
        PADAPTER        pAdapter         =  pDM_Odm->Adapter;\r
        PODM_RATE_ADAPTIVE              pRA = &pDM_Odm->RateAdaptive;\r
 \r
        PADAPTER        pAdapter         =  pDM_Odm->Adapter;\r
        PODM_RATE_ADAPTIVE              pRA = &pDM_Odm->RateAdaptive;\r
 \r
-       if(pAdapter->bDriverStopped)\r
-       {\r
+       if (pAdapter->bDriverStopped) {\r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("<---- odm_RefreshRateAdaptiveMask(): driver is going to unload\n"));\r
                return;\r
        }\r
 \r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE, ("<---- odm_RefreshRateAdaptiveMask(): driver is going to unload\n"));\r
                return;\r
        }\r
 \r
-       if(!pDM_Odm->bUseRAMask)\r
-       {\r
+       if (!pDM_Odm->bUseRAMask) {\r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("<---- odm_RefreshRateAdaptiveMask(): driver does not control rate adaptive mask\n"));\r
                return;\r
        }\r
 \r
        //printk("==> %s \n",__FUNCTION__);\r
 \r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("<---- odm_RefreshRateAdaptiveMask(): driver does not control rate adaptive mask\n"));\r
                return;\r
        }\r
 \r
        //printk("==> %s \n",__FUNCTION__);\r
 \r
-       for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++){\r
+       for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {\r
                PSTA_INFO_T pstat = pDM_Odm->pODM_StaInfo[i];\r
                PSTA_INFO_T pstat = pDM_Odm->pODM_StaInfo[i];\r
-               if(IS_STA_VALID(pstat) ) {\r
-                       if(IS_MCAST( pstat->hwaddr))  //if(psta->mac_id ==1)\r
-                                continue;\r
-                       if(IS_MCAST( pstat->hwaddr))\r
+               if (IS_STA_VALID(pstat)) {\r
+                       if (IS_MCAST(pstat->hwaddr))  //if(psta->mac_id ==1)\r
+                               continue;\r
+                       if (IS_MCAST(pstat->hwaddr))\r
                                continue;\r
 \r
                                continue;\r
 \r
-                       #if((RTL8812A_SUPPORT==1)||(RTL8821A_SUPPORT==1))\r
-                       if((pDM_Odm->SupportICType == ODM_RTL8812)||(pDM_Odm->SupportICType == ODM_RTL8821))\r
-                       {\r
-                               if(pstat->rssi_stat.UndecoratedSmoothedPWDB < pRA->LdpcThres)\r
-                               {\r
+#if((RTL8812A_SUPPORT==1)||(RTL8821A_SUPPORT==1))\r
+                       if ((pDM_Odm->SupportICType == ODM_RTL8812) || (pDM_Odm->SupportICType == ODM_RTL8821)) {\r
+                               if (pstat->rssi_stat.UndecoratedSmoothedPWDB < pRA->LdpcThres) {\r
                                        pRA->bUseLdpc = TRUE;\r
                                        pRA->bLowerRtsRate = TRUE;\r
                                        pRA->bUseLdpc = TRUE;\r
                                        pRA->bLowerRtsRate = TRUE;\r
-                                       if((pDM_Odm->SupportICType == ODM_RTL8821) && (pDM_Odm->CutVersion == ODM_CUT_A))\r
+                                       if ((pDM_Odm->SupportICType == ODM_RTL8821) && (pDM_Odm->CutVersion == ODM_CUT_A))\r
                                                Set_RA_LDPC_8812(pstat, TRUE);\r
                                        //DbgPrint("RSSI=%d, bUseLdpc = TRUE\n", pHalData->UndecoratedSmoothedPWDB);\r
                                                Set_RA_LDPC_8812(pstat, TRUE);\r
                                        //DbgPrint("RSSI=%d, bUseLdpc = TRUE\n", pHalData->UndecoratedSmoothedPWDB);\r
-                               }\r
-                               else if(pstat->rssi_stat.UndecoratedSmoothedPWDB > (pRA->LdpcThres-5))\r
-                               {\r
+                               } else if (pstat->rssi_stat.UndecoratedSmoothedPWDB > (pRA->LdpcThres - 5)) {\r
                                        pRA->bUseLdpc = FALSE;\r
                                        pRA->bLowerRtsRate = FALSE;\r
                                        pRA->bUseLdpc = FALSE;\r
                                        pRA->bLowerRtsRate = FALSE;\r
-                                       if((pDM_Odm->SupportICType == ODM_RTL8821) && (pDM_Odm->CutVersion == ODM_CUT_A))\r
+                                       if ((pDM_Odm->SupportICType == ODM_RTL8821) && (pDM_Odm->CutVersion == ODM_CUT_A))\r
                                                Set_RA_LDPC_8812(pstat, FALSE);\r
                                        //DbgPrint("RSSI=%d, bUseLdpc = FALSE\n", pHalData->UndecoratedSmoothedPWDB);\r
                                }\r
                        }\r
                                                Set_RA_LDPC_8812(pstat, FALSE);\r
                                        //DbgPrint("RSSI=%d, bUseLdpc = FALSE\n", pHalData->UndecoratedSmoothedPWDB);\r
                                }\r
                        }\r
-                       #endif\r
+#endif\r
 \r
 \r
-                       if( TRUE == ODM_RAStateCheck(pDM_Odm, pstat->rssi_stat.UndecoratedSmoothedPWDB, FALSE , &pstat->rssi_level) )\r
-                       {\r
+                       if (TRUE == ODM_RAStateCheck(pDM_Odm, pstat->rssi_stat.UndecoratedSmoothedPWDB, FALSE , &pstat->rssi_level)) {\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pstat->rssi_stat.UndecoratedSmoothedPWDB, pstat->rssi_level));\r
                                //printk("RSSI:%d, RSSI_LEVEL:%d\n", pstat->rssi_stat.UndecoratedSmoothedPWDB, pstat->rssi_level);\r
                                rtw_hal_update_ra_mask(pstat, pstat->rssi_level);\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pstat->rssi_stat.UndecoratedSmoothedPWDB, pstat->rssi_level));\r
                                //printk("RSSI:%d, RSSI_LEVEL:%d\n", pstat->rssi_stat.UndecoratedSmoothedPWDB, pstat->rssi_level);\r
                                rtw_hal_update_ra_mask(pstat, pstat->rssi_level);\r
-                       }\r
-                       else if(pDM_Odm->bChangeState)\r
-                       {\r
+                       } else if (pDM_Odm->bChangeState) {\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Change Power Training State, bDisablePowerTraining = %d\n", pDM_Odm->bDisablePowerTraining));\r
                                rtw_hal_update_ra_mask(pstat, pstat->rssi_level);\r
                        }\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Change Power Training State, bDisablePowerTraining = %d\n", pDM_Odm->bDisablePowerTraining));\r
                                rtw_hal_update_ra_mask(pstat, pstat->rssi_level);\r
                        }\r
-               \r
+\r
                }\r
                }\r
-       }                       \r
-       \r
+       }\r
+\r
 #endif\r
 }\r
 \r
 VOID\r
 odm_RefreshRateAdaptiveMaskAPADSL(\r
        IN      PVOID   pDM_VOID\r
 #endif\r
 }\r
 \r
 VOID\r
 odm_RefreshRateAdaptiveMaskAPADSL(\r
        IN      PVOID   pDM_VOID\r
-       )\r
+)\r
 {\r
 {\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+#if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        struct rtl8192cd_priv *priv = pDM_Odm->priv;\r
        struct aid_obj *aidarray;\r
        u4Byte i;\r
        PSTA_INFO_T pstat;\r
 \r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        struct rtl8192cd_priv *priv = pDM_Odm->priv;\r
        struct aid_obj *aidarray;\r
        u4Byte i;\r
        PSTA_INFO_T pstat;\r
 \r
-       if(priv->up_time % 2)\r
-               return; \r
+       if (priv->up_time % 2)\r
+               return;\r
 \r
 \r
-       for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++) {\r
+       for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {\r
                pstat = pDM_Odm->pODM_StaInfo[i];\r
 \r
                pstat = pDM_Odm->pODM_StaInfo[i];\r
 \r
-               if(IS_STA_VALID(pstat) )\r
-               {                       \r
+               if (IS_STA_VALID(pstat)) {\r
 #if defined(UNIVERSAL_REPEATER) || defined(MBSSID)\r
                        aidarray = container_of(pstat, struct aid_obj, station);\r
                        priv = aidarray->priv;\r
 #endif\r
 \r
 #if defined(UNIVERSAL_REPEATER) || defined(MBSSID)\r
                        aidarray = container_of(pstat, struct aid_obj, station);\r
                        priv = aidarray->priv;\r
 #endif\r
 \r
-                       if (!priv->pmib->dot11StationConfigEntry.autoRate) \r
+                       if (!priv->pmib->dot11StationConfigEntry.autoRate)\r
                                continue;\r
 \r
                                continue;\r
 \r
-                       if(ODM_RAStateCheck(pDM_Odm, (s4Byte)pstat->rssi, FALSE, &pstat->rssi_level) ) {\r
+                       if (ODM_RAStateCheck(pDM_Odm, (s4Byte)pstat->rssi, FALSE, &pstat->rssi_level)) {\r
                                ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target STA addr : "), pstat->hwaddr);\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pstat->rssi, pstat->rssi_level));\r
 \r
                                ODM_PRINT_ADDR(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("Target STA addr : "), pstat->hwaddr);\r
                                ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pstat->rssi, pstat->rssi_level));\r
 \r
@@ -1160,436 +1468,900 @@ odm_RefreshRateAdaptiveMaskAPADSL(
 #ifdef CONFIG_WLAN_HAL\r
                                if (IS_HAL_CHIP(priv)) {\r
 #ifdef WDS\r
 #ifdef CONFIG_WLAN_HAL\r
                                if (IS_HAL_CHIP(priv)) {\r
 #ifdef WDS\r
-                                       if(!(pstat->state & WIFI_WDS))//if WDS donot setting\r
+//                                     if(!(pstat->state & WIFI_WDS))//if WDS donot setting\r
+#endif\r
+                                       GET_HAL_INTERFACE(priv)->UpdateHalRAMaskHandler(priv, pstat, pstat->rssi_level);\r
+                               } else\r
+#endif\r
+#ifdef CONFIG_RTL_8812_SUPPORT\r
+                                       if (GET_CHIP_VER(priv) == VERSION_8812E)\r
+                                               UpdateHalRAMask8812(priv, pstat, 3);\r
+                                       else\r
+#endif\r
+#ifdef CONFIG_RTL_88E_SUPPORT\r
+                                               if (GET_CHIP_VER(priv) == VERSION_8188E) {\r
+#ifdef TXREPORT\r
+                                                       add_RATid(priv, pstat);\r
+#endif\r
+                                               } else\r
+#endif\r
+                                               {\r
+#if defined(CONFIG_RTL_92D_SUPPORT) || defined(CONFIG_RTL_92C_SUPPORT)\r
+                                                       add_update_RATid(priv, pstat);\r
+#endif\r
+                                               }\r
+#elif defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
+                               update_STA_RATid(priv, pstat);\r
+#endif\r
+                       }\r
+               }\r
+       }\r
+#endif\r
+}\r
+\r
+\r
+// Return Value: BOOLEAN\r
+// - TRUE: RATRState is changed.\r
+BOOLEAN\r
+ODM_RAStateCheck(\r
+       IN              PVOID                   pDM_VOID,\r
+       IN              s4Byte                  RSSI,\r
+       IN              BOOLEAN                 bForceUpdate,\r
+       OUT             pu1Byte                 pRATRState\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PODM_RATE_ADAPTIVE pRA = &pDM_Odm->RateAdaptive;\r
+       const u1Byte GoUpGap = 5;\r
+       u1Byte HighRSSIThreshForRA = pRA->HighRSSIThresh;\r
+       u1Byte LowRSSIThreshForRA = pRA->LowRSSIThresh;\r
+       u1Byte RATRState;\r
+\r
+       // Threshold Adjustment:\r
+       // when RSSI state trends to go up one or two levels, make sure RSSI is high enough.\r
+       // Here GoUpGap is added to solve the boundary's level alternation issue.\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+       u1Byte UltraLowRSSIThreshForRA = pRA->UltraLowRSSIThresh;\r
+       if (pDM_Odm->SupportICType == ODM_RTL8881A)\r
+               LowRSSIThreshForRA = 30;                // for LDPC / BCC switch\r
+#endif\r
+\r
+       switch (*pRATRState) {\r
+       case DM_RATR_STA_INIT:\r
+       case DM_RATR_STA_HIGH:\r
+               break;\r
+\r
+       case DM_RATR_STA_MIDDLE:\r
+               HighRSSIThreshForRA += GoUpGap;\r
+               break;\r
+\r
+       case DM_RATR_STA_LOW:\r
+               HighRSSIThreshForRA += GoUpGap;\r
+               LowRSSIThreshForRA += GoUpGap;\r
+               break;\r
+\r
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+       case DM_RATR_STA_ULTRA_LOW:\r
+               HighRSSIThreshForRA += GoUpGap;\r
+               LowRSSIThreshForRA += GoUpGap;\r
+               UltraLowRSSIThreshForRA += GoUpGap;\r
+               break;\r
+#endif\r
+\r
+       default:\r
+               ODM_RT_ASSERT(pDM_Odm, FALSE, ("wrong rssi level setting %d !", *pRATRState));\r
+               break;\r
+       }\r
+\r
+       // Decide RATRState by RSSI.\r
+       if (RSSI > HighRSSIThreshForRA)\r
+               RATRState = DM_RATR_STA_HIGH;\r
+       else if (RSSI > LowRSSIThreshForRA)\r
+               RATRState = DM_RATR_STA_MIDDLE;\r
+\r
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+       else if (RSSI > UltraLowRSSIThreshForRA)\r
+               RATRState = DM_RATR_STA_LOW;\r
+       else\r
+               RATRState = DM_RATR_STA_ULTRA_LOW;\r
+#else\r
+       else\r
+               RATRState = DM_RATR_STA_LOW;\r
+#endif\r
+       //printk("==>%s,RATRState:0x%02x ,RSSI:%d \n",__FUNCTION__,RATRState,RSSI);\r
+\r
+       if (*pRATRState != RATRState || bForceUpdate) {\r
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI Level %d -> %d\n", *pRATRState, RATRState));\r
+               *pRATRState = RATRState;\r
+               return TRUE;\r
+       }\r
+\r
+       return FALSE;\r
+}\r
+\r
+VOID\r
+odm_RefreshBasicRateMask(\r
+       IN      PVOID   pDM_VOID\r
+)\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PADAPTER                Adapter  =  pDM_Odm->Adapter;\r
+       static u1Byte           Stage = 0;\r
+       u1Byte                  CurStage = 0;\r
+       OCTET_STRING    osRateSet;\r
+       PMGNT_INFO              pMgntInfo = GetDefaultMgntInfo(Adapter);\r
+       u1Byte                  RateSet[5] = {MGN_1M, MGN_2M, MGN_5_5M, MGN_11M, MGN_6M};\r
+\r
+       if (pDM_Odm->SupportICType != ODM_RTL8812 && pDM_Odm->SupportICType != ODM_RTL8821)\r
+               return;\r
+\r
+       if (pDM_Odm->bLinked == FALSE)  // unlink Default port information\r
+               CurStage = 0;\r
+       else if (pDM_Odm->RSSI_Min < 40)        // link RSSI  < 40%\r
+               CurStage = 1;\r
+       else if (pDM_Odm->RSSI_Min > 45)        // link RSSI > 45%\r
+               CurStage = 3;\r
+       else\r
+               CurStage = 2;                                   // link  25% <= RSSI <= 30%\r
+\r
+       if (CurStage != Stage) {\r
+               if (CurStage == 1) {\r
+                       FillOctetString(osRateSet, RateSet, 5);\r
+                       FilterSupportRate(pMgntInfo->mBrates, &osRateSet, FALSE);\r
+                       Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_BASIC_RATE, (pu1Byte)&osRateSet);\r
+               } else if (CurStage == 3 && (Stage == 1 || Stage == 2))\r
+                       Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_BASIC_RATE, (pu1Byte)(&pMgntInfo->mBrates));\r
+       }\r
+\r
+       Stage = CurStage;\r
+#endif\r
+}\r
+\r
+\r
+VOID\r
+phydm_ra_info_init(\r
+       IN      PVOID   pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       #if (defined(CONFIG_RA_DYNAMIC_RTY_LIMIT))\r
+       phydm_ra_dynamic_retry_limit_init(pDM_Odm);\r
+       #endif\r
+       #if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+       phydm_ra_dynamic_rate_id_init(pDM_Odm);\r
+       #endif\r
+}\r
+\r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))\r
+u1Byte\r
+odm_Find_RTS_Rate(\r
+       IN              PVOID                   pDM_VOID,\r
+       IN              u1Byte                  Tx_Rate,\r
+       IN              BOOLEAN                 bErpProtect\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte  RTS_Ini_Rate = ODM_RATE6M;\r
+       \r
+       if (bErpProtect) /* use CCK rate as RTS*/\r
+               RTS_Ini_Rate = ODM_RATE1M;\r
+       else {\r
+               switch (Tx_Rate) {\r
+               case ODM_RATEVHTSS3MCS9:\r
+               case ODM_RATEVHTSS3MCS8:\r
+               case ODM_RATEVHTSS3MCS7:\r
+               case ODM_RATEVHTSS3MCS6:\r
+               case ODM_RATEVHTSS3MCS5:\r
+               case ODM_RATEVHTSS3MCS4:\r
+               case ODM_RATEVHTSS3MCS3:\r
+               case ODM_RATEVHTSS2MCS9:\r
+               case ODM_RATEVHTSS2MCS8:\r
+               case ODM_RATEVHTSS2MCS7:\r
+               case ODM_RATEVHTSS2MCS6:\r
+               case ODM_RATEVHTSS2MCS5:\r
+               case ODM_RATEVHTSS2MCS4:\r
+               case ODM_RATEVHTSS2MCS3:\r
+               case ODM_RATEVHTSS1MCS9:\r
+               case ODM_RATEVHTSS1MCS8:\r
+               case ODM_RATEVHTSS1MCS7:\r
+               case ODM_RATEVHTSS1MCS6:\r
+               case ODM_RATEVHTSS1MCS5:\r
+               case ODM_RATEVHTSS1MCS4:\r
+               case ODM_RATEVHTSS1MCS3:\r
+               case ODM_RATEMCS15:\r
+               case ODM_RATEMCS14:\r
+               case ODM_RATEMCS13:\r
+               case ODM_RATEMCS12:\r
+               case ODM_RATEMCS11:\r
+               case ODM_RATEMCS7:\r
+               case ODM_RATEMCS6:\r
+               case ODM_RATEMCS5:\r
+               case ODM_RATEMCS4:\r
+               case ODM_RATEMCS3:\r
+               case ODM_RATE54M:\r
+               case ODM_RATE48M:\r
+               case ODM_RATE36M:\r
+               case ODM_RATE24M:               \r
+                       RTS_Ini_Rate = ODM_RATE24M;\r
+                       break;\r
+               case ODM_RATEVHTSS3MCS2:\r
+               case ODM_RATEVHTSS3MCS1:\r
+               case ODM_RATEVHTSS2MCS2:\r
+               case ODM_RATEVHTSS2MCS1:\r
+               case ODM_RATEVHTSS1MCS2:\r
+               case ODM_RATEVHTSS1MCS1:\r
+               case ODM_RATEMCS10:\r
+               case ODM_RATEMCS9:\r
+               case ODM_RATEMCS2:\r
+               case ODM_RATEMCS1:\r
+               case ODM_RATE18M:\r
+               case ODM_RATE12M:\r
+                       RTS_Ini_Rate = ODM_RATE12M;\r
+                       break;\r
+               case ODM_RATEVHTSS3MCS0:\r
+               case ODM_RATEVHTSS2MCS0:\r
+               case ODM_RATEVHTSS1MCS0:\r
+               case ODM_RATEMCS8:\r
+               case ODM_RATEMCS0:\r
+               case ODM_RATE9M:\r
+               case ODM_RATE6M:\r
+                       RTS_Ini_Rate = ODM_RATE6M;\r
+                       break;\r
+               case ODM_RATE11M:\r
+               case ODM_RATE5_5M:\r
+               case ODM_RATE2M:\r
+               case ODM_RATE1M:\r
+                       RTS_Ini_Rate = ODM_RATE1M;\r
+                       break;\r
+               default:\r
+                       RTS_Ini_Rate = ODM_RATE6M;\r
+                       break;\r
+               }\r
+       }\r
+\r
+       if (*pDM_Odm->pBandType == 1) {\r
+               if (RTS_Ini_Rate < ODM_RATE6M)\r
+                       RTS_Ini_Rate = ODM_RATE6M;\r
+       }\r
+       return RTS_Ini_Rate;\r
+\r
+}\r
+\r
+VOID\r
+odm_Set_RA_DM_ARFB_by_Noisy(\r
+       IN      PDM_ODM_T       pDM_Odm\r
+)\r
+{\r
+       /*DbgPrint("DM_ARFB ====>\n");*/\r
+       if (pDM_Odm->bNoisyState) {\r
+               ODM_Write4Byte(pDM_Odm, 0x430, 0x00000000);\r
+               ODM_Write4Byte(pDM_Odm, 0x434, 0x05040200);\r
+               /*DbgPrint("DM_ARFB ====> Noisy State\n");*/\r
+       } else {\r
+               ODM_Write4Byte(pDM_Odm, 0x430, 0x02010000);\r
+               ODM_Write4Byte(pDM_Odm, 0x434, 0x07050403);\r
+               /*DbgPrint("DM_ARFB ====> Clean State\n");*/\r
+       }\r
+\r
+}\r
+\r
+VOID\r
+ODM_UpdateNoisyState(\r
+       IN      PVOID           pDM_VOID,\r
+       IN      BOOLEAN         bNoisyStateFromC2H\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       /*DbgPrint("Get C2H Command! NoisyState=0x%x\n ", bNoisyStateFromC2H);*/\r
+       if (pDM_Odm->SupportICType == ODM_RTL8821  || pDM_Odm->SupportICType == ODM_RTL8812  ||\r
+               pDM_Odm->SupportICType == ODM_RTL8723B || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8188E)\r
+               pDM_Odm->bNoisyState = bNoisyStateFromC2H;\r
+       odm_Set_RA_DM_ARFB_by_Noisy(pDM_Odm);\r
+};\r
+\r
+u4Byte\r
+Set_RA_DM_Ratrbitmap_by_Noisy(\r
+       IN      PVOID                   pDM_VOID,\r
+       IN      WIRELESS_MODE   WirelessMode,\r
+       IN      u4Byte                  ratr_bitmap,\r
+       IN      u1Byte                  rssi_level\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u4Byte ret_bitmap = ratr_bitmap;\r
+       \r
+       switch (WirelessMode) {\r
+       case WIRELESS_MODE_AC_24G:\r
+       case WIRELESS_MODE_AC_5G:\r
+       case WIRELESS_MODE_AC_ONLY:\r
+               if (pDM_Odm->bNoisyState) { /*in Noisy State*/\r
+                       if (rssi_level == 1)\r
+                               ret_bitmap &= 0xfe3f0e08;\r
+                       else if (rssi_level == 2)\r
+                               ret_bitmap &= 0xff3f8f8c;\r
+                       else if (rssi_level == 3)\r
+                               ret_bitmap &= 0xffffffff;\r
+                       else\r
+                               ret_bitmap &= 0xffffffff;\r
+               } else {                                /* in SNR State*/\r
+                       if (rssi_level == 1)\r
+                               ret_bitmap &= 0xfc3e0c08;\r
+                       else if (rssi_level == 2)\r
+                               ret_bitmap &= 0xfe3f0e08;\r
+                       else if (rssi_level == 3)\r
+                               ret_bitmap &= 0xffffffff;\r
+                       else\r
+                               ret_bitmap &= 0xffffffff;\r
+               }\r
+               break;\r
+       case WIRELESS_MODE_B:\r
+       case WIRELESS_MODE_A:\r
+       case WIRELESS_MODE_G:\r
+       case WIRELESS_MODE_N_24G:\r
+       case WIRELESS_MODE_N_5G:\r
+               if (pDM_Odm->bNoisyState) {\r
+                       if (rssi_level == 1)\r
+                               ret_bitmap &= 0x0f0e0c08;\r
+                       else if (rssi_level == 2)\r
+                               ret_bitmap &= 0x0f8f0e0c;\r
+                       else if (rssi_level == 3)\r
+                               ret_bitmap &= 0xffffffff;\r
+                       else\r
+                               ret_bitmap &= 0xffffffff;\r
+               } else {\r
+                       if (rssi_level == 1)\r
+                               ret_bitmap &= 0x0f8f0e08;\r
+                       else if (rssi_level == 2)\r
+                               ret_bitmap &= 0x0fcf8f8c;\r
+                       else if (rssi_level == 3)\r
+                               ret_bitmap &= 0xffffffff;\r
+                       else\r
+                               ret_bitmap &= 0xffffffff;\r
+               }\r
+               break;\r
+       default:\r
+               break;\r
+       }\r
+       /*DbgPrint("DM_RAMask ====> rssi_LV = %d, BITMAP = %x\n", rssi_level, ret_bitmap);*/\r
+       return ret_bitmap;\r
+\r
+}\r
+\r
+VOID\r
+ODM_UpdateInitRate(\r
+       IN      PVOID           pDM_VOID,\r
+       IN      u1Byte          Rate\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte                  p = 0;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("Get C2H Command! Rate=0x%x\n", Rate));\r
+\r
+       if (pDM_Odm->SupportICType == ODM_RTL8821  || pDM_Odm->SupportICType == ODM_RTL8812  ||\r
+               pDM_Odm->SupportICType == ODM_RTL8723B || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8188E) {\r
+               pDM_Odm->TxRate = Rate;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+#if DEV_BUS_TYPE == RT_PCI_INTERFACE\r
+#if USE_WORKITEM\r
+               PlatformScheduleWorkItem(&pDM_Odm->RaRptWorkitem);\r
+#else\r
+               if (pDM_Odm->SupportICType == ODM_RTL8821) {\r
+#if (RTL8821A_SUPPORT == 1)\r
+                       ODM_TxPwrTrackSetPwr8821A(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);\r
 #endif\r
 #endif\r
-                                               GET_HAL_INTERFACE(priv)->UpdateHalRAMaskHandler(priv, pstat, pstat->rssi_level);\r
-                               } else\r
+               } else if (pDM_Odm->SupportICType == ODM_RTL8812) {\r
+                       for (p = ODM_RF_PATH_A; p < MAX_PATH_NUM_8812A; p++) {\r
+#if (RTL8812A_SUPPORT == 1)\r
+                               ODM_TxPwrTrackSetPwr8812A(pDM_Odm, MIX_MODE, p, 0);\r
 #endif\r
 #endif\r
-#ifdef CONFIG_RTL_8812_SUPPORT\r
-                               if(GET_CHIP_VER(priv)== VERSION_8812E) {\r
-                                       UpdateHalRAMask8812(priv, pstat, 3);\r
-                               } else\r
+                       }\r
+               } else if (pDM_Odm->SupportICType == ODM_RTL8723B) {\r
+#if (RTL8723B_SUPPORT == 1)\r
+                       ODM_TxPwrTrackSetPwr_8723B(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);\r
 #endif\r
 #endif\r
-#ifdef CONFIG_RTL_88E_SUPPORT\r
-                               if (GET_CHIP_VER(priv)==VERSION_8188E) {\r
-#ifdef TXREPORT\r
-                                       add_RATid(priv, pstat);\r
+               } else if (pDM_Odm->SupportICType == ODM_RTL8192E) {\r
+                       for (p = ODM_RF_PATH_A; p < MAX_PATH_NUM_8192E; p++) {\r
+#if (RTL8192E_SUPPORT == 1)\r
+                               ODM_TxPwrTrackSetPwr92E(pDM_Odm, MIX_MODE, p, 0);\r
 #endif\r
 #endif\r
-                               } else\r
+                       }\r
+               } else if (pDM_Odm->SupportICType == ODM_RTL8188E) {\r
+#if (RTL8188E_SUPPORT == 1)\r
+                       ODM_TxPwrTrackSetPwr88E(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);\r
 #endif\r
 #endif\r
-                               {\r
-#if defined(CONFIG_RTL_92D_SUPPORT) || defined(CONFIG_RTL_92C_SUPPORT)\r
-                                       add_update_RATid(priv, pstat);\r
+               }\r
 #endif\r
 #endif\r
-                               }\r
-#elif defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)\r
-                               update_STA_RATid(priv, pstat);\r
+#else\r
+               PlatformScheduleWorkItem(&pDM_Odm->RaRptWorkitem);\r
 #endif\r
 #endif\r
-                       }\r
-               }\r
-       }\r
 #endif\r
 #endif\r
+       } else\r
+               return;\r
 }\r
 \r
 }\r
 \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 \r
 \r
-// Return Value: BOOLEAN\r
-// - TRUE: RATRState is changed.\r
-BOOLEAN \r
-ODM_RAStateCheck(\r
-       IN              PVOID                   pDM_VOID,\r
-       IN              s4Byte                  RSSI,\r
-       IN              BOOLEAN                 bForceUpdate,\r
-       OUT             pu1Byte                 pRATRState\r
-       )\r
+VOID\r
+odm_RSSIDumpToRegister(\r
+       IN      PVOID   pDM_VOID\r
+)\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PODM_RATE_ADAPTIVE pRA = &pDM_Odm->RateAdaptive;\r
-       const u1Byte GoUpGap = 5;\r
-       u1Byte HighRSSIThreshForRA = pRA->HighRSSIThresh;\r
-       u1Byte LowRSSIThreshForRA = pRA->LowRSSIThresh;\r
-       u1Byte RATRState;\r
-\r
-       // Threshold Adjustment: \r
-       // when RSSI state trends to go up one or two levels, make sure RSSI is high enough.\r
-       // Here GoUpGap is added to solve the boundary's level alternation issue.\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       u1Byte UltraLowRSSIThreshForRA = pRA->UltraLowRSSIThresh;\r
-       if(pDM_Odm->SupportICType == ODM_RTL8881A)              \r
-               LowRSSIThreshForRA = 30;                // for LDPC / BCC switch\r
-#endif\r
-\r
-       switch (*pRATRState)\r
-       {\r
-               case DM_RATR_STA_INIT:\r
-               case DM_RATR_STA_HIGH:\r
-                       break;\r
-\r
-               case DM_RATR_STA_MIDDLE:\r
-                       HighRSSIThreshForRA += GoUpGap;\r
-                       break;\r
+       PADAPTER                Adapter = pDM_Odm->Adapter;\r
 \r
 \r
-               case DM_RATR_STA_LOW:\r
-                       HighRSSIThreshForRA += GoUpGap;\r
-                       LowRSSIThreshForRA += GoUpGap;\r
-                       break;\r
-                       \r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-               case DM_RATR_STA_ULTRA_LOW:\r
-                       HighRSSIThreshForRA += GoUpGap;\r
-                       LowRSSIThreshForRA += GoUpGap;\r
-                       UltraLowRSSIThreshForRA += GoUpGap;\r
-                       break;\r
-#endif\r
+       if (pDM_Odm->SupportICType == ODM_RTL8812) {\r
+               PlatformEFIOWrite1Byte(Adapter, rA_RSSIDump_Jaguar, Adapter->RxStats.RxRSSIPercentage[0]);\r
+               PlatformEFIOWrite1Byte(Adapter, rB_RSSIDump_Jaguar, Adapter->RxStats.RxRSSIPercentage[1]);\r
 \r
 \r
-               default: \r
-                       ODM_RT_ASSERT(pDM_Odm, FALSE, ("wrong rssi level setting %d !", *pRATRState) );\r
-                       break;\r
-       }\r
+               /* Rx EVM*/\r
+               PlatformEFIOWrite1Byte(Adapter, rS1_RXevmDump_Jaguar, Adapter->RxStats.RxEVMdbm[0]);\r
+               PlatformEFIOWrite1Byte(Adapter, rS2_RXevmDump_Jaguar, Adapter->RxStats.RxEVMdbm[1]);\r
 \r
 \r
-       // Decide RATRState by RSSI.\r
-       if(RSSI > HighRSSIThreshForRA)\r
-               RATRState = DM_RATR_STA_HIGH;\r
-       else if(RSSI > LowRSSIThreshForRA)\r
-               RATRState = DM_RATR_STA_MIDDLE;\r
+               /* Rx SNR*/\r
+               PlatformEFIOWrite1Byte(Adapter, rA_RXsnrDump_Jaguar, (u1Byte)(Adapter->RxStats.RxSNRdB[0]));\r
+               PlatformEFIOWrite1Byte(Adapter, rB_RXsnrDump_Jaguar, (u1Byte)(Adapter->RxStats.RxSNRdB[1]));\r
 \r
 \r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       else if(RSSI > UltraLowRSSIThreshForRA)\r
-               RATRState = DM_RATR_STA_LOW;\r
-       else\r
-               RATRState = DM_RATR_STA_ULTRA_LOW;\r
-#else\r
-       else\r
-               RATRState = DM_RATR_STA_LOW;\r
-#endif\r
-       //printk("==>%s,RATRState:0x%02x ,RSSI:%d \n",__FUNCTION__,RATRState,RSSI);\r
+               /* Rx Cfo_Short*/\r
+               PlatformEFIOWrite2Byte(Adapter, rA_CfoShortDump_Jaguar, Adapter->RxStats.RxCfoShort[0]);\r
+               PlatformEFIOWrite2Byte(Adapter, rB_CfoShortDump_Jaguar, Adapter->RxStats.RxCfoShort[1]);\r
 \r
 \r
-       if( *pRATRState!=RATRState || bForceUpdate)\r
-       {\r
-               ODM_RT_TRACE( pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI Level %d -> %d\n", *pRATRState, RATRState) );\r
-               *pRATRState = RATRState;\r
-               return TRUE;\r
+               /* Rx Cfo_Tail*/\r
+               PlatformEFIOWrite2Byte(Adapter, rA_CfoLongDump_Jaguar, Adapter->RxStats.RxCfoTail[0]);\r
+               PlatformEFIOWrite2Byte(Adapter, rB_CfoLongDump_Jaguar, Adapter->RxStats.RxCfoTail[1]);\r
+       } else if (pDM_Odm->SupportICType == ODM_RTL8192E) {\r
+               PlatformEFIOWrite1Byte(Adapter, rA_RSSIDump_92E, Adapter->RxStats.RxRSSIPercentage[0]);\r
+               PlatformEFIOWrite1Byte(Adapter, rB_RSSIDump_92E, Adapter->RxStats.RxRSSIPercentage[1]);\r
+               /* Rx EVM*/\r
+               PlatformEFIOWrite1Byte(Adapter, rS1_RXevmDump_92E, Adapter->RxStats.RxEVMdbm[0]);\r
+               PlatformEFIOWrite1Byte(Adapter, rS2_RXevmDump_92E, Adapter->RxStats.RxEVMdbm[1]);\r
+               /* Rx SNR*/\r
+               PlatformEFIOWrite1Byte(Adapter, rA_RXsnrDump_92E, (u1Byte)(Adapter->RxStats.RxSNRdB[0]));\r
+               PlatformEFIOWrite1Byte(Adapter, rB_RXsnrDump_92E, (u1Byte)(Adapter->RxStats.RxSNRdB[1]));\r
+               /* Rx Cfo_Short*/\r
+               PlatformEFIOWrite2Byte(Adapter, rA_CfoShortDump_92E, Adapter->RxStats.RxCfoShort[0]);\r
+               PlatformEFIOWrite2Byte(Adapter, rB_CfoShortDump_92E, Adapter->RxStats.RxCfoShort[1]);\r
+               /* Rx Cfo_Tail*/\r
+               PlatformEFIOWrite2Byte(Adapter, rA_CfoLongDump_92E, Adapter->RxStats.RxCfoTail[0]);\r
+               PlatformEFIOWrite2Byte(Adapter, rB_CfoLongDump_92E, Adapter->RxStats.RxCfoTail[1]);\r
        }\r
        }\r
-\r
-       return FALSE;\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-odm_RefreshBasicRateMask(\r
-       IN      PVOID   pDM_VOID\r
-       )\r
+odm_RefreshLdpcRtsMP(\r
+       IN      PADAPTER                        pAdapter,\r
+       IN      PDM_ODM_T                       pDM_Odm,\r
+       IN      u1Byte                          mMacId,\r
+       IN      u1Byte                          IOTPeer,\r
+       IN      s4Byte                          UndecoratedSmoothedPWDB\r
+)\r
 {\r
 {\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PADAPTER                Adapter  =  pDM_Odm->Adapter;\r
-       static u1Byte           Stage = 0;\r
-       u1Byte                  CurStage = 0;\r
-       OCTET_STRING    osRateSet;\r
-       PMGNT_INFO              pMgntInfo = GetDefaultMgntInfo(Adapter);\r
-       u1Byte                  RateSet[5] = {MGN_1M, MGN_2M, MGN_5_5M, MGN_11M, MGN_6M};\r
+       BOOLEAN                                 bCtlLdpc = FALSE;\r
+       PMGNT_INFO                              pMgntInfo = GetDefaultMgntInfo(pAdapter);\r
+       PODM_RATE_ADAPTIVE              pRA = &pDM_Odm->RateAdaptive;\r
 \r
 \r
-       if(pDM_Odm->SupportICType != ODM_RTL8812 && pDM_Odm->SupportICType != ODM_RTL8821 )\r
+       if (pDM_Odm->SupportICType != ODM_RTL8821 && pDM_Odm->SupportICType != ODM_RTL8812)\r
                return;\r
 \r
                return;\r
 \r
-       if(pDM_Odm->bLinked == FALSE)   // unlink Default port information\r
-               CurStage = 0;   \r
-       else if(pDM_Odm->RSSI_Min < 40) // link RSSI  < 40%\r
-               CurStage = 1;\r
-       else if(pDM_Odm->RSSI_Min > 45) // link RSSI > 45%\r
-               CurStage = 3;   \r
-       else\r
-               CurStage = 2;                                   // link  25% <= RSSI <= 30%\r
+       if ((pDM_Odm->SupportICType == ODM_RTL8821) && (pDM_Odm->CutVersion == ODM_CUT_A))\r
+               bCtlLdpc = TRUE;\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8812 &&\r
+                        IOTPeer == HT_IOT_PEER_REALTEK_JAGUAR_CCUTAP)\r
+               bCtlLdpc = TRUE;\r
 \r
 \r
-       if(CurStage != Stage)\r
-       {\r
-               if(CurStage == 1)\r
-               {\r
-                       FillOctetString(osRateSet, RateSet, 5);\r
-                       FilterSupportRate(pMgntInfo->mBrates, &osRateSet, FALSE);\r
-                       Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_BASIC_RATE, (pu1Byte)&osRateSet);\r
-               }\r
-               else if(CurStage == 3 && (Stage == 1 || Stage == 2))\r
-               {\r
-                       Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BASIC_RATE, (pu1Byte)(&pMgntInfo->mBrates) );\r
-               }\r
+       if (bCtlLdpc) {\r
+               if (UndecoratedSmoothedPWDB < (pRA->LdpcThres - 5))\r
+                       MgntSet_TX_LDPC(pAdapter, mMacId, TRUE);\r
+               else if (UndecoratedSmoothedPWDB > pRA->LdpcThres)\r
+                       MgntSet_TX_LDPC(pAdapter, mMacId, FALSE);\r
        }\r
        }\r
-       \r
-       Stage = CurStage;\r
-#endif\r
+\r
+       if (UndecoratedSmoothedPWDB < (pRA->RtsThres - 5))\r
+               pRA->bLowerRtsRate = TRUE;\r
+       else if (UndecoratedSmoothedPWDB > pRA->RtsThres)\r
+               pRA->bLowerRtsRate = FALSE;\r
 }\r
 \r
 }\r
 \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 VOID\r
 ODM_DynamicARFBSelect(\r
        IN              PVOID           pDM_VOID,\r
        IN              u1Byte                  rate,\r
 VOID\r
 ODM_DynamicARFBSelect(\r
        IN              PVOID           pDM_VOID,\r
        IN              u1Byte                  rate,\r
-       IN              BOOLEAN                 Collision_State \r
+       IN              BOOLEAN                 Collision_State\r
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
 \r
 )\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
 \r
-       if(pDM_Odm->SupportICType != ODM_RTL8192E)\r
+       if (pDM_Odm->SupportICType != ODM_RTL8192E)\r
                return;\r
 \r
                return;\r
 \r
-       if(Collision_State == pRA_Table->PT_collision_pre)\r
+       if (Collision_State == pRA_Table->PT_collision_pre)\r
                return;\r
 \r
                return;\r
 \r
-       if (rate >= DESC_RATEMCS8  && rate <= DESC_RATEMCS12){\r
-               if (Collision_State == 1){\r
-                       if(rate == DESC_RATEMCS12){\r
+       if (rate >= DESC_RATEMCS8  && rate <= DESC_RATEMCS12) {\r
+               if (Collision_State == 1) {\r
+                       if (rate == DESC_RATEMCS12) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07060501);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS11){\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07060501);\r
+                       } else if (rate == DESC_RATEMCS11) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07070605);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS10){\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07070605);\r
+                       } else if (rate == DESC_RATEMCS10) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08080706);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS9){\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08080706);\r
+                       } else if (rate == DESC_RATEMCS9) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08080707);        \r
-                       }\r
-                       else{\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08080707);\r
+                       } else {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x0);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09090808);        \r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09090808);\r
                        }\r
                        }\r
-               }\r
-               else{   // Collision_State == 0\r
-                       if(rate == DESC_RATEMCS12){\r
+               } else { /* Collision_State == 0*/\r
+                       if (rate == DESC_RATEMCS12) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x05010000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x05010000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09080706);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS11){\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09080706);\r
+                       } else if (rate == DESC_RATEMCS11) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x06050000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x06050000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09080807);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS10){\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09080807);\r
+                       } else if (rate == DESC_RATEMCS10) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x07060000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x07060000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x0a090908);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS9){\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x0a090908);\r
+                       } else if (rate == DESC_RATEMCS9) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x07070000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x07070000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x0a090808);        \r
-                       }\r
-                       else{\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x0a090808);\r
+                       } else {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x08080000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x08080000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x0b0a0909);        \r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x0b0a0909);\r
                        }\r
                }\r
                        }\r
                }\r
-       }\r
-       else{  // MCS13~MCS15,  1SS, G-mode\r
-               if (Collision_State == 1){\r
-                       if(rate == DESC_RATEMCS15){\r
+       } else { /* MCS13~MCS15,  1SS, G-mode*/\r
+               if (Collision_State == 1) {\r
+                       if (rate == DESC_RATEMCS15) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x05040302);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS14){\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x05040302);\r
+                       } else if (rate == DESC_RATEMCS14) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x06050302);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS13){\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x06050302);\r
+                       } else if (rate == DESC_RATEMCS13) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07060502);        \r
-                       }\r
-                       else{\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07060502);\r
+                       } else {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x00000000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x06050402);        \r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x06050402);\r
                        }\r
                        }\r
-               }\r
-               else{   // Collision_State == 0\r
-                       if(rate == DESC_RATEMCS15){\r
+               } else { // Collision_State == 0\r
+                       if (rate == DESC_RATEMCS15) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x03020000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x03020000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07060504);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS14){\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x07060504);\r
+                       } else if (rate == DESC_RATEMCS14) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x03020000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x03020000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08070605);        \r
-                       }\r
-                       else if(rate == DESC_RATEMCS13){\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08070605);\r
+                       } else if (rate == DESC_RATEMCS13) {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x05020000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x05020000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09080706);        \r
-                       }\r
-                       else{\r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x09080706);\r
+                       } else {\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x04020000);\r
 \r
                                ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E, 0x04020000);\r
-                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08070605);        \r
+                               ODM_Write4Byte(pDM_Odm, REG_DARFRC_8192E+4, 0x08070605);\r
                        }\r
 \r
 \r
                }\r
 \r
                        }\r
 \r
 \r
                }\r
 \r
-       }       \r
-        pRA_Table->PT_collision_pre = Collision_State; \r
+       }\r
+       pRA_Table->PT_collision_pre = Collision_State;\r
 }\r
 \r
 VOID\r
 }\r
 \r
 VOID\r
-ODM_RateAdaptiveStateApInit(   \r
+ODM_RateAdaptiveStateApInit(\r
        IN      PVOID           PADAPTER_VOID,\r
        IN      PRT_WLAN_STA    pEntry\r
        IN      PVOID           PADAPTER_VOID,\r
        IN      PRT_WLAN_STA    pEntry\r
-       )\r
+)\r
 {\r
        PADAPTER                Adapter = (PADAPTER)PADAPTER_VOID;\r
        pEntry->Ratr_State = DM_RATR_STA_INIT;\r
 }\r
 {\r
        PADAPTER                Adapter = (PADAPTER)PADAPTER_VOID;\r
        pEntry->Ratr_State = DM_RATR_STA_INIT;\r
 }\r
-#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) /*#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)*/\r
+\r
+static void\r
+FindMinimumRSSI(\r
+       IN      PADAPTER        pAdapter\r
+)\r
+{\r
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
+       PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
+\r
+       /*Determine the minimum RSSI*/\r
+\r
+       if ((pDM_Odm->bLinked != _TRUE) &&\r
+               (pHalData->EntryMinUndecoratedSmoothedPWDB == 0)) {\r
+               pHalData->MinUndecoratedPWDBForDM = 0;\r
+               /*ODM_RT_TRACE(pDM_Odm,COMP_BB_POWERSAVING, DBG_LOUD, ("Not connected to any\n"));*/\r
+       } else\r
+               pHalData->MinUndecoratedPWDBForDM = pHalData->EntryMinUndecoratedSmoothedPWDB;\r
+\r
+       /*DBG_8192C("%s=>MinUndecoratedPWDBForDM(%d)\n",__FUNCTION__,pdmpriv->MinUndecoratedPWDBForDM);*/\r
+       /*ODM_RT_TRACE(pDM_Odm,COMP_DIG, DBG_LOUD, ("MinUndecoratedPWDBForDM =%d\n",pHalData->MinUndecoratedPWDBForDM));*/\r
+}\r
 \r
 \r
+u8Byte\r
+PhyDM_Get_Rate_Bitmap_Ex(\r
+       IN      PVOID           pDM_VOID,\r
+       IN      u4Byte          macid,\r
+       IN      u8Byte          ra_mask,\r
+       IN      u1Byte          rssi_level,\r
+       OUT             u8Byte  *dm_RA_Mask,\r
+       OUT             u1Byte  *dm_RteID\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PSTA_INFO_T     pEntry;\r
+       u8Byte  rate_bitmap = 0;\r
+       u1Byte  WirelessMode;\r
 \r
 \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-u4Byte \r
+       pEntry = pDM_Odm->pODM_StaInfo[macid];\r
+       if (!IS_STA_VALID(pEntry))\r
+               return ra_mask;\r
+       WirelessMode = pEntry->wireless_mode;\r
+       switch (WirelessMode) {\r
+       case ODM_WM_B:\r
+               if (ra_mask & 0x000000000000000c) /* 11M or 5.5M enable */\r
+                       rate_bitmap = 0x000000000000000d;\r
+               else\r
+                       rate_bitmap = 0x000000000000000f;\r
+               break;\r
+\r
+       case (ODM_WM_G):\r
+       case (ODM_WM_A):\r
+               if (rssi_level == DM_RATR_STA_HIGH)\r
+                       rate_bitmap = 0x0000000000000f00;\r
+               else\r
+                       rate_bitmap = 0x0000000000000ff0;\r
+               break;\r
+\r
+       case (ODM_WM_B|ODM_WM_G):\r
+               if (rssi_level == DM_RATR_STA_HIGH)\r
+                       rate_bitmap = 0x0000000000000f00;\r
+               else if (rssi_level == DM_RATR_STA_MIDDLE)\r
+                       rate_bitmap = 0x0000000000000ff0;\r
+               else\r
+                       rate_bitmap = 0x0000000000000ff5;\r
+               break;\r
+\r
+       case (ODM_WM_B|ODM_WM_G|ODM_WM_N24G):\r
+       case (ODM_WM_B|ODM_WM_N24G):\r
+       case (ODM_WM_G|ODM_WM_N24G):\r
+       case (ODM_WM_A|ODM_WM_N5G): {\r
+               if (pDM_Odm->RFType == ODM_1T2R || pDM_Odm->RFType == ODM_1T1R) {\r
+                       if (rssi_level == DM_RATR_STA_HIGH)\r
+                               rate_bitmap = 0x00000000000f0000;\r
+                       else if (rssi_level == DM_RATR_STA_MIDDLE)\r
+                               rate_bitmap = 0x00000000000ff000;\r
+                       else {\r
+                               if (*(pDM_Odm->pBandWidth) == ODM_BW40M)\r
+                                       rate_bitmap = 0x00000000000ff015;\r
+                               else\r
+                                       rate_bitmap = 0x00000000000ff005;\r
+                       }\r
+               } else if (pDM_Odm->RFType == ODM_2T2R  || pDM_Odm->RFType == ODM_2T3R  || pDM_Odm->RFType == ODM_2T4R) {\r
+                       if (rssi_level == DM_RATR_STA_HIGH)\r
+                               rate_bitmap = 0x000000000f8f0000;\r
+                       else if (rssi_level == DM_RATR_STA_MIDDLE)\r
+                               rate_bitmap = 0x000000000f8ff000;\r
+                       else {\r
+                               if (*(pDM_Odm->pBandWidth) == ODM_BW40M)\r
+                                       rate_bitmap = 0x000000000f8ff015;\r
+                               else\r
+                                       rate_bitmap = 0x000000000f8ff005;\r
+                       }\r
+               } else {\r
+                       if (rssi_level == DM_RATR_STA_HIGH)\r
+                               rate_bitmap = 0x0000000f0f0f0000;\r
+                       else if (rssi_level == DM_RATR_STA_MIDDLE)\r
+                               rate_bitmap = 0x0000000fcfcfe000;\r
+                       else {\r
+                               if (*(pDM_Odm->pBandWidth) == ODM_BW40M)\r
+                                       rate_bitmap = 0x0000000ffffff015;\r
+                               else\r
+                                       rate_bitmap = 0x0000000ffffff005;\r
+                       }\r
+               }\r
+       }\r
+       break;\r
+\r
+       case (ODM_WM_AC|ODM_WM_G):\r
+               if (rssi_level == 1)\r
+                       rate_bitmap = 0x00000000fc3f0000;\r
+               else if (rssi_level == 2)\r
+                       rate_bitmap = 0x00000000fffff000;\r
+               else\r
+                       rate_bitmap = 0x00000000ffffffff;\r
+               break;\r
+\r
+       case (ODM_WM_AC|ODM_WM_A):\r
+\r
+               if (pDM_Odm->RFType == ODM_1T2R || pDM_Odm->RFType == ODM_1T1R) {\r
+                       if (rssi_level == 1)                            /* add by Gary for ac-series */\r
+                               rate_bitmap = 0x00000000003f8000;\r
+                       else if (rssi_level == 2)\r
+                               rate_bitmap = 0x00000000003fe000;\r
+                       else\r
+                               rate_bitmap = 0x00000000003ff010;\r
+               } else if (pDM_Odm->RFType == ODM_2T2R  || pDM_Odm->RFType == ODM_2T3R  || pDM_Odm->RFType == ODM_2T4R) {\r
+                       if (rssi_level == 1)                            /* add by Gary for ac-series */\r
+                               rate_bitmap = 0x00000000fe3f8000;       /* VHT 2SS MCS3~9 */\r
+                       else if (rssi_level == 2)\r
+                               rate_bitmap = 0x00000000fffff000;       /* VHT 2SS MCS0~9 */\r
+                       else\r
+                               rate_bitmap = 0x00000000fffff010;       /* All */\r
+               } else {\r
+                       if (rssi_level == 1)                            /* add by Gary for ac-series */\r
+                               rate_bitmap = 0x000003f8fe3f8000ULL;       /* VHT 3SS MCS3~9 */\r
+                       else if (rssi_level == 2)\r
+                               rate_bitmap = 0x000003fffffff000ULL;       /* VHT3SS MCS0~9 */\r
+                       else\r
+                               rate_bitmap = 0x000003fffffff010ULL;       /* All */\r
+               }\r
+               break;\r
+\r
+       default:\r
+               if (pDM_Odm->RFType == ODM_1T2R || pDM_Odm->RFType == ODM_1T1R)\r
+                       rate_bitmap = 0x00000000000fffff;\r
+               else if (pDM_Odm->RFType == ODM_2T2R  || pDM_Odm->RFType == ODM_2T3R  || pDM_Odm->RFType == ODM_2T4R)\r
+                       rate_bitmap = 0x000000000fffffff;\r
+               else\r
+                       rate_bitmap = 0x0000003fffffffffULL;\r
+               break;\r
+\r
+       }\r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, (" ==> rssi_level:0x%02x, WirelessMode:0x%02x, rate_bitmap:0x%016llx\n", rssi_level, WirelessMode, rate_bitmap));\r
+\r
+       return (ra_mask & rate_bitmap);\r
+}\r
+\r
+\r
+u4Byte\r
 ODM_Get_Rate_Bitmap(\r
 ODM_Get_Rate_Bitmap(\r
-       IN      PVOID           pDM_VOID,       \r
+       IN      PVOID           pDM_VOID,\r
        IN      u4Byte          macid,\r
        IN      u4Byte          macid,\r
-       IN      u4Byte          ra_mask,        \r
+       IN      u4Byte          ra_mask,\r
        IN      u1Byte          rssi_level\r
        IN      u1Byte          rssi_level\r
-       )\r
+)\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PSTA_INFO_T     pEntry;\r
        u4Byte  rate_bitmap = 0;\r
        u1Byte  WirelessMode;\r
        //u1Byte        WirelessMode =*(pDM_Odm->pWirelessMode);\r
 {\r
        PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
        PSTA_INFO_T     pEntry;\r
        u4Byte  rate_bitmap = 0;\r
        u1Byte  WirelessMode;\r
        //u1Byte        WirelessMode =*(pDM_Odm->pWirelessMode);\r
-       \r
-       \r
+\r
+\r
        pEntry = pDM_Odm->pODM_StaInfo[macid];\r
        pEntry = pDM_Odm->pODM_StaInfo[macid];\r
-       if(!IS_STA_VALID(pEntry))\r
+       if (!IS_STA_VALID(pEntry))\r
                return ra_mask;\r
 \r
        WirelessMode = pEntry->wireless_mode;\r
                return ra_mask;\r
 \r
        WirelessMode = pEntry->wireless_mode;\r
-       \r
-       switch(WirelessMode)\r
-       {\r
-               case ODM_WM_B:\r
-                       if(ra_mask & 0x0000000c)                //11M or 5.5M enable                            \r
-                               rate_bitmap = 0x0000000d;\r
-                       else\r
-                               rate_bitmap = 0x0000000f;\r
-                       break;\r
-                       \r
-               case (ODM_WM_G):\r
-               case (ODM_WM_A):\r
-                       if(rssi_level == DM_RATR_STA_HIGH)\r
-                               rate_bitmap = 0x00000f00;\r
-                       else\r
-                               rate_bitmap = 0x00000ff0;\r
-                       break;\r
-                       \r
-               case (ODM_WM_B|ODM_WM_G):\r
-                       if(rssi_level == DM_RATR_STA_HIGH)\r
-                               rate_bitmap = 0x00000f00;\r
-                       else if(rssi_level == DM_RATR_STA_MIDDLE)\r
-                               rate_bitmap = 0x00000ff0;\r
-                       else\r
-                               rate_bitmap = 0x00000ff5;\r
-                       break;          \r
-\r
-               case (ODM_WM_B|ODM_WM_G|ODM_WM_N24G)    :\r
-               case (ODM_WM_B|ODM_WM_N24G)     :\r
-               case (ODM_WM_G|ODM_WM_N24G)     :\r
-               case (ODM_WM_A|ODM_WM_N5G)      :\r
-                       {                                       \r
-                               if (    pDM_Odm->RFType == ODM_1T2R ||pDM_Odm->RFType == ODM_1T1R)\r
-                               {\r
-                                       if(rssi_level == DM_RATR_STA_HIGH)\r
-                                       {\r
-                                               rate_bitmap = 0x000f0000;\r
-                                       }\r
-                                       else if(rssi_level == DM_RATR_STA_MIDDLE)\r
-                                       {\r
-                                               rate_bitmap = 0x000ff000;\r
-                                       }\r
-                                       else{\r
-                                               if (*(pDM_Odm->pBandWidth) == ODM_BW40M)\r
-                                                       rate_bitmap = 0x000ff015;\r
-                                               else\r
-                                                       rate_bitmap = 0x000ff005;\r
-                                       }                               \r
-                               }\r
-                               else\r
-                               {\r
-                                       if(rssi_level == DM_RATR_STA_HIGH)\r
-                                       {               \r
-                                               rate_bitmap = 0x0f8f0000;\r
-                                       }\r
-                                       else if(rssi_level == DM_RATR_STA_MIDDLE)\r
-                                       {\r
-                                               rate_bitmap = 0x0f8ff000;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               if (*(pDM_Odm->pBandWidth) == ODM_BW40M)\r
-                                                       rate_bitmap = 0x0f8ff015;\r
-                                               else\r
-                                                       rate_bitmap = 0x0f8ff005;\r
-                                       }                                       \r
-                               }\r
-                       }\r
-                       break;\r
-\r
-               case (ODM_WM_AC|ODM_WM_G):\r
-                       if(rssi_level == 1)\r
-                               rate_bitmap = 0xfc3f0000;\r
-                       else if(rssi_level == 2)\r
-                               rate_bitmap = 0xfffff000;\r
-                       else\r
-                               rate_bitmap = 0xffffffff;\r
-                       break;\r
 \r
 \r
-               case (ODM_WM_AC|ODM_WM_A):\r
+       switch (WirelessMode) {\r
+       case ODM_WM_B:\r
+               if (ra_mask & 0x0000000c)               //11M or 5.5M enable\r
+                       rate_bitmap = 0x0000000d;\r
+               else\r
+                       rate_bitmap = 0x0000000f;\r
+               break;\r
 \r
 \r
-                       if (pDM_Odm->RFType == RF_1T1R)\r
-                       {\r
-                               if(rssi_level == 1)                             // add by Gary for ac-series\r
-                                       rate_bitmap = 0x003f8000;\r
-                               else if (rssi_level == 2)\r
-                                       rate_bitmap = 0x003ff000;\r
+       case (ODM_WM_G):\r
+       case (ODM_WM_A):\r
+               if (rssi_level == DM_RATR_STA_HIGH)\r
+                       rate_bitmap = 0x00000f00;\r
+               else\r
+                       rate_bitmap = 0x00000ff0;\r
+               break;\r
+\r
+       case (ODM_WM_B|ODM_WM_G):\r
+               if (rssi_level == DM_RATR_STA_HIGH)\r
+                       rate_bitmap = 0x00000f00;\r
+               else if (rssi_level == DM_RATR_STA_MIDDLE)\r
+                       rate_bitmap = 0x00000ff0;\r
+               else\r
+                       rate_bitmap = 0x00000ff5;\r
+               break;\r
+\r
+       case (ODM_WM_B|ODM_WM_G|ODM_WM_N24G)    :\r
+       case (ODM_WM_B|ODM_WM_N24G)     :\r
+       case (ODM_WM_G|ODM_WM_N24G)     :\r
+       case (ODM_WM_A|ODM_WM_N5G)      : {\r
+               if (pDM_Odm->RFType == ODM_1T2R || pDM_Odm->RFType == ODM_1T1R) {\r
+                       if (rssi_level == DM_RATR_STA_HIGH)\r
+                               rate_bitmap = 0x000f0000;\r
+                       else if (rssi_level == DM_RATR_STA_MIDDLE)\r
+                               rate_bitmap = 0x000ff000;\r
+                       else {\r
+                               if (*(pDM_Odm->pBandWidth) == ODM_BW40M)\r
+                                       rate_bitmap = 0x000ff015;\r
                                else\r
                                else\r
-                                       rate_bitmap = 0x003ff010;\r
+                                       rate_bitmap = 0x000ff005;\r
                        }\r
                        }\r
-                       else\r
-                       {\r
-                               if(rssi_level == 1)                             // add by Gary for ac-series\r
-                                       rate_bitmap = 0xfe3f8000;       // VHT 2SS MCS3~9\r
-                               else if (rssi_level == 2)\r
-                                       rate_bitmap = 0xfffff000;       // VHT 2SS MCS0~9\r
+               } else {\r
+                       if (rssi_level == DM_RATR_STA_HIGH)\r
+                               rate_bitmap = 0x0f8f0000;\r
+                       else if (rssi_level == DM_RATR_STA_MIDDLE)\r
+                               rate_bitmap = 0x0f8ff000;\r
+                       else {\r
+                               if (*(pDM_Odm->pBandWidth) == ODM_BW40M)\r
+                                       rate_bitmap = 0x0f8ff015;\r
                                else\r
                                else\r
-                                       rate_bitmap = 0xfffff010;       // All\r
+                                       rate_bitmap = 0x0f8ff005;\r
                        }\r
                        }\r
-                       break;\r
-                       \r
-               default:\r
-                       if(pDM_Odm->RFType == RF_1T2R)\r
-                               rate_bitmap = 0x000fffff;\r
+               }\r
+       }\r
+       break;\r
+\r
+       case (ODM_WM_AC|ODM_WM_G):\r
+               if (rssi_level == 1)\r
+                       rate_bitmap = 0xfc3f0000;\r
+               else if (rssi_level == 2)\r
+                       rate_bitmap = 0xfffff000;\r
+               else\r
+                       rate_bitmap = 0xffffffff;\r
+               break;\r
+\r
+       case (ODM_WM_AC|ODM_WM_A):\r
+\r
+               if (pDM_Odm->RFType == RF_1T1R) {\r
+                       if (rssi_level == 1)                            // add by Gary for ac-series\r
+                               rate_bitmap = 0x003f8000;\r
+                       else if (rssi_level == 2)\r
+                               rate_bitmap = 0x003ff000;\r
+                       else\r
+                               rate_bitmap = 0x003ff010;\r
+               } else {\r
+                       if (rssi_level == 1)                            // add by Gary for ac-series\r
+                               rate_bitmap = 0xfe3f8000;       // VHT 2SS MCS3~9\r
+                       else if (rssi_level == 2)\r
+                               rate_bitmap = 0xfffff000;       // VHT 2SS MCS0~9\r
                        else\r
                        else\r
-                               rate_bitmap = 0x0fffffff;\r
-                       break;  \r
+                               rate_bitmap = 0xfffff010;       // All\r
+               }\r
+               break;\r
+\r
+       default:\r
+               if (pDM_Odm->RFType == RF_1T2R)\r
+                       rate_bitmap = 0x000fffff;\r
+               else\r
+                       rate_bitmap = 0x0fffffff;\r
+               break;\r
 \r
        }\r
 \r
 \r
        }\r
 \r
-       //printk("%s ==> rssi_level:0x%02x, WirelessMode:0x%02x, rate_bitmap:0x%08x \n",__FUNCTION__,rssi_level,WirelessMode,rate_bitmap);\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, (" ==> rssi_level:0x%02x, WirelessMode:0x%02x, rate_bitmap:0x%08x \n",rssi_level,WirelessMode,rate_bitmap));\r
+       DBG_871X("%s ==> rssi_level:0x%02x, WirelessMode:0x%02x, rate_bitmap:0x%08x\n", __func__, rssi_level, WirelessMode, rate_bitmap);\r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, (" ==> rssi_level:0x%02x, WirelessMode:0x%02x, rate_bitmap:0x%08x\n", rssi_level, WirelessMode, rate_bitmap));\r
 \r
 \r
-       return (ra_mask&rate_bitmap);\r
-       \r
-}      \r
+       return (ra_mask & rate_bitmap);\r
+\r
+}\r
+\r
+#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+\r
+#endif /*#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN| ODM_CE))*/\r
 \r
 \r
-#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
\ No newline at end of file
index b9625de98dd0ab876cdd5174dd238f7f6b3ebdb7..34bb79c7b9b9b39fa9ee792f3bd73806c81cffda 100755 (executable)
@@ -1,7 +1,7 @@
 /******************************************************************************\r
  *\r
  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
 /******************************************************************************\r
  *\r
  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
+ *\r
  * This program is free software; you can redistribute it and/or modify it\r
  * under the terms of version 2 of the GNU General Public License as\r
  * published by the Free Software Foundation.\r
  * This program is free software; you can redistribute it and/or modify it\r
  * under the terms of version 2 of the GNU General Public License as\r
  * published by the Free Software Foundation.\r
  *\r
  *\r
  ******************************************************************************/\r
  *\r
  *\r
  ******************************************************************************/\r
\r
+\r
 #ifndef        __PHYDMRAINFO_H__\r
 #define    __PHYDMRAINFO_H__\r
 \r
 #ifndef        __PHYDMRAINFO_H__\r
 #define    __PHYDMRAINFO_H__\r
 \r
-#define RAINFO_VERSION "1.0"\r
+/*#define RAINFO_VERSION       "2.0"  //2014.11.04*/\r
+/*#define RAINFO_VERSION       "3.0"  //2015.01.13 Dino*/\r
+/*#define RAINFO_VERSION       "3.1"  //2015.01.14 Dino*/\r
+#define RAINFO_VERSION "3.2"  /*2015.01.14 Dino*/\r
+\r
+#define        ACTIVE_TP_THRESHOLD     150\r
+#define        RA_RETRY_DESCEND_NUM    2\r
+#define        RA_RETRY_LIMIT_LOW      4\r
+#define        RA_RETRY_LIMIT_HIGH     32\r
+\r
+#define PHYDM_IC_8051_SERIES           (ODM_RTL8881A|ODM_RTL8812|ODM_RTL8821|ODM_RTL8192S|ODM_RTL8192C|ODM_RTL8192D|ODM_RTL8723A|ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8703B|ODM_RTL8188F)\r
+#define PHYDM_IC_3081_SERIES           (ODM_RTL8814A|ODM_RTL8821B|ODM_RTL8822B)\r
+\r
+#define RAINFO_BE_RX_STATE                     BIT0  // 1:RX    //ULDL\r
+#define RAINFO_STBC_STATE                      BIT1\r
+#define RAINFO_LDPC_STATE                      BIT2\r
+#define RAINFO_SHURTCUT_STATE          BIT3\r
+#define RAINFO_SHURTCUT_FLAG           BIT4\r
+#define RAINFO_INIT_RSSI_RATE_STATE  BIT5\r
+#define RAINFO_BF_STATE                                BIT6\r
+#define RAINFO_BE_TX_STATE                     BIT7 // 1:TX\r
+\r
+#define        RA_MASK_CCK             0xf\r
+#define        RA_MASK_OFDM            0xff0\r
+#define        RA_MASK_HT1SS           0xff000\r
+#define        RA_MASK_HT2SS           0xff00000\r
+/*#define      RA_MASK_MCS3SS  */\r
+#define        RA_MASK_HT4SS           0xff0\r
+#define        RA_MASK_VHT1SS  0x3ff000\r
+#define        RA_MASK_VHT2SS  0xffc00000\r
+\r
+#if(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+#define        EXT_RA_INFO_SUPPORT_IC (ODM_RTL8881A |ODM_RTL8192E |ODM_RTL8812 |ODM_RTL8814A|ODM_RTL8822B)\r
+#define                RA_FIRST_MACID  1\r
+#elif(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+#define        EXT_RA_INFO_SUPPORT_IC (ODM_RTL8192E|ODM_RTL8812|ODM_RTL8821|ODM_RTL8723B|ODM_RTL8814A|ODM_RTL8822B)\r
+#define                RA_FIRST_MACID  0\r
+#elif(DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+//#define      EXT_RA_INFO_SUPPORT_IC (ODM_RTL8192E|ODM_RTL8812|ODM_RTL8821|ODM_RTL8723B|ODM_RTL8814A|ODM_RTL8822B)\r
+#define                RA_FIRST_MACID  0\r
+#endif\r
+\r
 \r
 #define AP_InitRateAdaptiveState       ODM_RateAdaptiveStateApInit\r
 \r
 \r
 #define AP_InitRateAdaptiveState       ODM_RateAdaptiveStateApInit\r
 \r
 #define                DM_RATR_STA_HIGH                        1\r
 #define                DM_RATR_STA_MIDDLE              2\r
 #define                DM_RATR_STA_LOW                 3\r
 #define                DM_RATR_STA_HIGH                        1\r
 #define                DM_RATR_STA_MIDDLE              2\r
 #define                DM_RATR_STA_LOW                 3\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+#if(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
 #define                DM_RATR_STA_ULTRA_LOW   4\r
 #endif\r
 \r
 #define                DM_RATR_STA_ULTRA_LOW   4\r
 #endif\r
 \r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-typedef struct _Rate_Adaptive_Table_{\r
+typedef enum _phydm_arfr_num {\r
+       ARFR_0_RATE_ID  =       0x9,\r
+       ARFR_1_RATE_ID  =       0xa,\r
+       ARFR_2_RATE_ID  =       0xb,\r
+       ARFR_3_RATE_ID  =       0xc,\r
+       ARFR_4_RATE_ID  =       0xd,\r
+       ARFR_5_RATE_ID  =       0xe\r
+} PHYDM_RA_ARFR_NUM_E;\r
+\r
+typedef enum _Phydm_ra_dbg_para {\r
+       RADBG_RTY_PENALTY                       =       1,  //u8\r
+       RADBG_N_HIGH                            =       2,\r
+       RADBG_N_LOW                             =       3,\r
+       RADBG_TRATE_UP_TABLE            =       4,\r
+       RADBG_TRATE_DOWN_TABLE  =       5,\r
+       RADBG_TRYING_NECESSARY  =       6,\r
+       RADBG_TDROPING_NECESSARY =      7,\r
+       RADBG_RATE_UP_RTY_RATIO =       8, //u8\r
+       RADBG_RATE_DOWN_RTY_RATIO =     9, //u8\r
+\r
+       RADBG_DEBUG_MONITOR1 = 0xc,\r
+       RADBG_DEBUG_MONITOR2 = 0xd,\r
+       RADBG_DEBUG_MONITOR3 = 0xe,\r
+       RADBG_DEBUG_MONITOR4 = 0xf,\r
+       NUM_RA_PARA\r
+} PHYDM_RA_DBG_PARA_E;\r
+\r
+\r
+#if (RATE_ADAPTIVE_SUPPORT == 1)//88E RA\r
+typedef struct _ODM_RA_Info_ {\r
+       u1Byte RateID;\r
+       u4Byte RateMask;\r
+       u4Byte RAUseRate;\r
+       u1Byte RateSGI;\r
+       u1Byte RssiStaRA;\r
+       u1Byte PreRssiStaRA;\r
+       u1Byte SGIEnable;\r
+       u1Byte DecisionRate;\r
+       u1Byte PreRate;\r
+       u1Byte HighestRate;\r
+       u1Byte LowestRate;\r
+       u4Byte NscUp;\r
+       u4Byte NscDown;\r
+       u2Byte RTY[5];\r
+       u4Byte TOTAL;\r
+       u2Byte DROP;\r
+       u1Byte Active;\r
+       u2Byte RptTime;\r
+       u1Byte RAWaitingCounter;\r
+       u1Byte RAPendingCounter;\r
+#if 1 //POWER_TRAINING_ACTIVE == 1 // For compile  pass only~!\r
+       u1Byte PTActive;  // on or off\r
+       u1Byte PTTryState;  // 0 trying state, 1 for decision state\r
+       u1Byte PTStage;  // 0~6\r
+       u1Byte PTStopCount; //Stop PT counter\r
+       u1Byte PTPreRate;  // if rate change do PT\r
+       u1Byte PTPreRssi; // if RSSI change 5% do PT\r
+       u1Byte PTModeSS;  // decide whitch rate should do PT\r
+       u1Byte RAstage;  // StageRA, decide how many times RA will be done between PT\r
+       u1Byte PTSmoothFactor;\r
+#endif\r
+} ODM_RA_INFO_T, *PODM_RA_INFO_T;\r
+#endif\r
+\r
+\r
+typedef struct _Rate_Adaptive_Table_ {\r
        u1Byte          firstconnect;\r
        u1Byte          firstconnect;\r
-       #if(DM_ODM_SUPPORT_TYPE==ODM_WIN)\r
+#if(DM_ODM_SUPPORT_TYPE==ODM_WIN)\r
        BOOLEAN         PT_collision_pre;\r
        BOOLEAN         PT_collision_pre;\r
-       #endif\r
-}RA_T, *pRA_T;\r
 #endif\r
 \r
 #endif\r
 \r
-typedef struct _ODM_RATE_ADAPTIVE\r
-{\r
+#if (defined(CONFIG_RA_DBG_CMD))\r
+       BOOLEAN         is_ra_dbg_init;\r
+\r
+       u1Byte  RTY_P[ODM_NUM_RATE_IDX];\r
+       u1Byte  RTY_P_default[ODM_NUM_RATE_IDX];\r
+       BOOLEAN RTY_P_modify_note[ODM_NUM_RATE_IDX];\r
+\r
+       u1Byte  RATE_UP_RTY_RATIO[ODM_NUM_RATE_IDX];\r
+       u1Byte  RATE_UP_RTY_RATIO_default[ODM_NUM_RATE_IDX];\r
+       BOOLEAN RATE_UP_RTY_RATIO_modify_note[ODM_NUM_RATE_IDX];\r
+\r
+       u1Byte  RATE_DOWN_RTY_RATIO[ODM_NUM_RATE_IDX];\r
+       u1Byte  RATE_DOWN_RTY_RATIO_default[ODM_NUM_RATE_IDX];\r
+       BOOLEAN RATE_DOWN_RTY_RATIO_modify_note[ODM_NUM_RATE_IDX];\r
+\r
+       BOOLEAN RA_Para_feedback_req;\r
+\r
+       u1Byte   para_idx;\r
+       u1Byte  rate_idx;\r
+       u1Byte  value;\r
+       u2Byte  value_16;\r
+       u1Byte  rate_length;\r
+#endif\r
+\r
+       #if (defined(CONFIG_RA_DYNAMIC_RTY_LIMIT))\r
+       u1Byte per_rate_retrylimit_20M[ODM_NUM_RATE_IDX];\r
+       u1Byte per_rate_retrylimit_40M[ODM_NUM_RATE_IDX];       \r
+       u1Byte                  retry_descend_num;\r
+       u1Byte                  retrylimit_low;\r
+       u1Byte                  retrylimit_high;\r
+       #endif\r
+\r
+\r
+} RA_T, *pRA_T;\r
+\r
+typedef struct _ODM_RATE_ADAPTIVE {\r
        u1Byte                          Type;                           // DM_Type_ByFW/DM_Type_ByDriver\r
        u1Byte                          HighRSSIThresh;         // if RSSI > HighRSSIThresh     => RATRState is DM_RATR_STA_HIGH\r
        u1Byte                          LowRSSIThresh;          // if RSSI <= LowRSSIThresh     => RATRState is DM_RATR_STA_LOW\r
        u1Byte                          RATRState;                      // Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW\r
 \r
        u1Byte                          Type;                           // DM_Type_ByFW/DM_Type_ByDriver\r
        u1Byte                          HighRSSIThresh;         // if RSSI > HighRSSIThresh     => RATRState is DM_RATR_STA_HIGH\r
        u1Byte                          LowRSSIThresh;          // if RSSI <= LowRSSIThresh     => RATRState is DM_RATR_STA_LOW\r
        u1Byte                          RATRState;                      // Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW\r
 \r
-       #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
        u1Byte                          LdpcThres;                      // if RSSI > LdpcThres => switch from LPDC to BCC\r
        BOOLEAN                         bLowerRtsRate;\r
        u1Byte                          LdpcThres;                      // if RSSI > LdpcThres => switch from LPDC to BCC\r
        BOOLEAN                         bLowerRtsRate;\r
-       #endif\r
+#endif\r
 \r
 \r
-       #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
        u1Byte                          RtsThres;\r
        u1Byte                          RtsThres;\r
-       #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
        BOOLEAN                         bUseLdpc;\r
        BOOLEAN                         bUseLdpc;\r
-       #else\r
+#else\r
        u1Byte                          UltraLowRSSIThresh;\r
        u4Byte                          LastRATR;                       // RATR Register Content\r
        u1Byte                          UltraLowRSSIThresh;\r
        u4Byte                          LastRATR;                       // RATR Register Content\r
-       #endif\r
+#endif\r
 \r
 } ODM_RATE_ADAPTIVE, *PODM_RATE_ADAPTIVE;\r
 \r
 \r
 } ODM_RATE_ADAPTIVE, *PODM_RATE_ADAPTIVE;\r
 \r
-VOID
-odm_RSSIMonitorInit(
+VOID\r
+ODM_C2HRaParaReportHandler(\r
+       IN      PVOID   pDM_VOID,\r
+       IN pu1Byte   CmdBuf,\r
+       IN u1Byte   CmdLen\r
+);\r
+\r
+VOID\r
+odm_RA_ParaAdjust_Send_H2C(\r
+       IN      PVOID   pDM_VOID\r
+);\r
+\r
+VOID\r
+odm_RA_debug(\r
+       IN              PVOID           pDM_VOID,\r
+       IN              u4Byte          *const dm_value\r
+);\r
+\r
+VOID\r
+odm_RA_ParaAdjust_init(\r
        IN              PVOID           pDM_VOID\r
        IN              PVOID           pDM_VOID\r
-       );
+);\r
 \r
 VOID\r
 \r
 VOID\r
-odm_RSSIMonitorCheck(
-       IN              PVOID            pDM_VOID\r
-       );\r
+odm_RA_ParaAdjust(\r
+       IN              PVOID           pDM_VOID\r
+);\r
 \r
 \r
-#if(DM_ODM_SUPPORT_TYPE==ODM_WIN)\r
 VOID\r
 VOID\r
-odm_RSSIDumpToRegister(\r
+phydm_ra_dynamic_retry_limit(\r
        IN      PVOID   pDM_VOID\r
        IN      PVOID   pDM_VOID\r
-       );\r
-#endif\r
+);\r
 \r
 \r
-VOID
-odm_RSSIMonitorCheckMP(
-       IN              PVOID           pDM_VOID\r
-       );
-
-VOID 
-odm_RSSIMonitorCheckCE(
-       IN              PVOID           pDM_VOID\r
-       );\r
+VOID\r
+phydm_ra_dynamic_rate_id_on_assoc(\r
+       IN      PVOID   pDM_VOID,\r
+       IN      u1Byte  wireless_mode,\r
+       IN      u1Byte  init_rate_id\r
+);\r
 \r
 \r
-VOID 
-odm_RSSIMonitorCheckAP(
-       IN              PVOID            pDM_VOID\r
-       );
-
+VOID\r
+phydm_c2h_ra_report_handler(\r
+       IN PVOID        pDM_VOID,\r
+       IN pu1Byte   CmdBuf,\r
+       IN u1Byte   CmdLen\r
+);\r
 \r
 VOID\r
 \r
 VOID\r
-odm_RateAdaptiveMaskInit(\r
-       IN      PVOID   pDM_VOID        \r
-       );\r
+phydm_ra_info_init(\r
+       IN      PVOID   pDM_VOID\r
+);\r
 \r
 \r
-VOID
-odm_RefreshRateAdaptiveMask(
+VOID\r
+odm_RSSIMonitorInit(\r
        IN      PVOID   pDM_VOID\r
        IN      PVOID   pDM_VOID\r
-       );\r
+);\r
 \r
 \r
-VOID
-odm_RefreshRateAdaptiveMaskMP(
+VOID\r
+odm_RSSIMonitorCheck(\r
        IN      PVOID   pDM_VOID\r
        IN      PVOID   pDM_VOID\r
-       );\r
+);\r
 \r
 \r
-VOID
-odm_RefreshRateAdaptiveMaskCE(
-       IN      PVOID   pDM_VOID        \r
-       );\r
+VOID\r
+odm_RSSIMonitorCheckMP(\r
+       IN      PVOID   pDM_VOID\r
+);\r
 \r
 \r
-VOID
-odm_RefreshRateAdaptiveMaskAPADSL(
+VOID\r
+odm_RSSIMonitorCheckCE(\r
        IN      PVOID   pDM_VOID\r
        IN      PVOID   pDM_VOID\r
-       );\r
-\r
-BOOLEAN 
-ODM_RAStateCheck(
-       IN              PVOID                   pDM_VOID,\r
-       IN              s4Byte                  RSSI,
-       IN              BOOLEAN                 bForceUpdate,
-       OUT             pu1Byte                 pRATRState
-       );\r
-       \r
-VOID
-odm_RefreshBasicRateMask(
+);\r
+\r
+VOID\r
+odm_RSSIMonitorCheckAP(\r
        IN      PVOID   pDM_VOID\r
        IN      PVOID   pDM_VOID\r
-       );\r
+);\r
+\r
+\r
+VOID\r
+odm_RateAdaptiveMaskInit(\r
+       IN      PVOID   pDM_VOID\r
+);\r
 \r
 \r
+VOID\r
+odm_RefreshRateAdaptiveMask(\r
+       IN              PVOID           pDM_VOID\r
+);\r
+\r
+VOID\r
+odm_RefreshRateAdaptiveMaskMP(\r
+       IN              PVOID           pDM_VOID\r
+);\r
+\r
+VOID\r
+odm_RefreshRateAdaptiveMaskCE(\r
+       IN              PVOID           pDM_VOID\r
+);\r
+\r
+VOID\r
+odm_RefreshRateAdaptiveMaskAPADSL(\r
+       IN              PVOID           pDM_VOID\r
+);\r
+\r
+BOOLEAN\r
+ODM_RAStateCheck(\r
+       IN              PVOID               pDM_VOID,\r
+       IN              s4Byte                  RSSI,\r
+       IN              BOOLEAN                 bForceUpdate,\r
+       OUT             pu1Byte                 pRATRState\r
+);\r
+\r
+VOID\r
+odm_RefreshBasicRateMask(\r
+       IN              PVOID           pDM_VOID\r
+);\r
+VOID\r
+ODM_RAPostActionOnAssoc(\r
+       IN              PVOID   pDM_VOID\r
+);\r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))\r
+\r
+u1Byte\r
+odm_Find_RTS_Rate(\r
+       IN      PVOID           pDM_VOID,\r
+       IN              u1Byte                  Tx_Rate,\r
+       IN              BOOLEAN                 bErpProtect\r
+);\r
+\r
+VOID\r
+ODM_UpdateNoisyState(\r
+       IN      PVOID           pDM_VOID,\r
+       IN      BOOLEAN         bNoisyStateFromC2H\r
+);\r
+\r
+u4Byte\r
+Set_RA_DM_Ratrbitmap_by_Noisy(\r
+       IN      PVOID                   pDM_VOID,\r
+       IN      WIRELESS_MODE   WirelessMode,\r
+       IN      u4Byte                  ratr_bitmap,\r
+       IN      u1Byte                  rssi_level\r
+);\r
+\r
+VOID\r
+ODM_UpdateInitRate(\r
+       IN      PVOID           pDM_VOID,\r
+       IN      u1Byte          Rate\r
+);\r
 \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-VOID
-ODM_DynamicARFBSelect(
-       IN              PVOID                   pDM_VOID,\r
-       IN              u1Byte                  rate,
-       IN      BOOLEAN                 Collision_State 
-       );\r
-       \r
-VOID\r
-ODM_RateAdaptiveStateApInit(   \r
-       IN      PVOID           PADAPTER_VOID,\r
+\r
+VOID\r
+odm_RSSIDumpToRegister(\r
+       IN      PVOID   pDM_VOID\r
+);\r
+\r
+VOID\r
+odm_RefreshLdpcRtsMP(\r
+       IN      PADAPTER                        pAdapter,\r
+       IN      PDM_ODM_T                       pDM_Odm,\r
+       IN      u1Byte                          mMacId,\r
+       IN      u1Byte                          IOTPeer,\r
+       IN      s4Byte                          UndecoratedSmoothedPWDB\r
+);\r
+\r
+VOID\r
+ODM_DynamicARFBSelect(\r
+       IN              PVOID           pDM_VOID,\r
+       IN              u1Byte          rate,\r
+       IN      BOOLEAN         Collision_State\r
+);\r
+\r
+VOID\r
+ODM_RateAdaptiveStateApInit(\r
+       IN      PVOID                   PADAPTER_VOID,\r
        IN      PRT_WLAN_STA    pEntry\r
        IN      PRT_WLAN_STA    pEntry\r
-       );\r
-#endif\r
+);\r
+#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+\r
+static void\r
+FindMinimumRSSI(\r
+       IN      PADAPTER        pAdapter\r
+);\r
 \r
 \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-u4Byte \r
+u8Byte\r
+PhyDM_Get_Rate_Bitmap_Ex(\r
+       IN      PVOID           pDM_VOID,\r
+       IN      u4Byte          macid,\r
+       IN      u8Byte          ra_mask,\r
+       IN      u1Byte          rssi_level,\r
+       OUT             u8Byte  *dm_RA_Mask,\r
+       OUT             u1Byte  *dm_RteID\r
+);\r
+u4Byte\r
 ODM_Get_Rate_Bitmap(\r
 ODM_Get_Rate_Bitmap(\r
-       IN      PVOID           pDM_VOID,       \r
+       IN      PVOID       pDM_VOID,\r
        IN      u4Byte          macid,\r
        IN      u4Byte          macid,\r
-       IN      u4Byte          ra_mask,        \r
+       IN      u4Byte          ra_mask,\r
        IN      u1Byte          rssi_level\r
        IN      u1Byte          rssi_level\r
-       );\r
-#endif\r
+);\r
+#endif/*#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)*/\r
+\r
+#endif/*#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN| ODM_CE))*/\r
 \r
 \r
-#endif //#ifndef       __ODMRAINFO_H__\r
+#endif /*#ifndef       __ODMRAINFO_H__*/\r
 \r
 \r
 \r
 \r
index e7e54184f099a44b4997822760511fe760c8688c..ad680c88457e1f1eb292f2054ebd38c2264b4433 100755 (executable)
 //PAGE 8\r
 #define        ODM_REG_CCK_RPT_FORMAT_11AC     0x804\r
 #define        ODM_REG_BB_RX_PATH_11AC                 0x808\r
 //PAGE 8\r
 #define        ODM_REG_CCK_RPT_FORMAT_11AC     0x804\r
 #define        ODM_REG_BB_RX_PATH_11AC                 0x808\r
+#define        ODM_REG_BB_TX_PATH_11AC                 0x80c\r
 #define        ODM_REG_BB_ATC_11AC                             0x860\r
 #define        ODM_REG_BB_ATC_11AC                             0x860\r
-#define        ODM_REG_DBG_RPT_11AC                            0x8fc\r
+#define        ODM_REG_EDCCA_POWER_CAL         0x8dc\r
+#define        ODM_REG_DBG_RPT_11AC                    0x8fc\r
 //PAGE 9\r
 //PAGE 9\r
+#define        ODM_REG_EDCCA_DOWN_OPT                  0x900\r
+#define        ODM_REG_ACBB_EDCCA_ENHANCE              0x944\r
 #define        ODM_REG_OFDM_FA_RST_11AC                0x9A4\r
 #define        ODM_REG_NHM_TIMER_11AC                  0x990\r
 #define        ODM_REG_NHM_TH9_TH10_11AC               0x994\r
 #define        ODM_REG_OFDM_FA_RST_11AC                0x9A4\r
 #define        ODM_REG_NHM_TIMER_11AC                  0x990\r
 #define        ODM_REG_NHM_TH9_TH10_11AC               0x994\r
@@ -70,6 +74,7 @@
 #define        ODM_BIT_IGI_11AC                                        0xFFFFFFFF\r
 #define        ODM_BIT_CCK_RPT_FORMAT_11AC             BIT16\r
 #define        ODM_BIT_BB_RX_PATH_11AC                 0xF\r
 #define        ODM_BIT_IGI_11AC                                        0xFFFFFFFF\r
 #define        ODM_BIT_CCK_RPT_FORMAT_11AC             BIT16\r
 #define        ODM_BIT_BB_RX_PATH_11AC                 0xF\r
+#define        ODM_BIT_BB_TX_PATH_11AC                 0xF\r
 #define        ODM_BIT_BB_ATC_11AC                             BIT14\r
 \r
 #endif\r
 #define        ODM_BIT_BB_ATC_11AC                             BIT14\r
 \r
 #endif\r
index 9d07509f6febf88fad8a138621b60441f49490d7..374943d3ad78b20b36445490b757bb03c1147230 100755 (executable)
 #define        ODM_REG_RF_PIN_11N                              0x804\r
 #define        ODM_REG_PSD_CTRL_11N                            0x808\r
 #define        ODM_REG_TX_ANT_CTRL_11N                 0x80C\r
 #define        ODM_REG_RF_PIN_11N                              0x804\r
 #define        ODM_REG_PSD_CTRL_11N                            0x808\r
 #define        ODM_REG_TX_ANT_CTRL_11N                 0x80C\r
-#define        ODM_REG_BB_PWR_SAV5_11N         0x818\r
+#define        ODM_REG_BB_PWR_SAV5_11N                 0x818\r
 #define        ODM_REG_CCK_RPT_FORMAT_11N              0x824\r
 #define        ODM_REG_CCK_RPT_FORMAT_11N_B    0x82C\r
 #define        ODM_REG_RX_DEFUALT_A_11N                0x858\r
 #define        ODM_REG_RX_DEFUALT_B_11N                0x85A\r
 #define        ODM_REG_CCK_RPT_FORMAT_11N              0x824\r
 #define        ODM_REG_CCK_RPT_FORMAT_11N_B    0x82C\r
 #define        ODM_REG_RX_DEFUALT_A_11N                0x858\r
 #define        ODM_REG_RX_DEFUALT_B_11N                0x85A\r
-#define        ODM_REG_BB_PWR_SAV3_11N         0x85C\r
+#define        ODM_REG_BB_PWR_SAV3_11N                 0x85C\r
 #define        ODM_REG_ANTSEL_CTRL_11N                 0x860\r
 #define        ODM_REG_RX_ANT_CTRL_11N                 0x864\r
 #define        ODM_REG_PIN_CTRL_11N                            0x870\r
 #define        ODM_REG_ANTSEL_CTRL_11N                 0x860\r
 #define        ODM_REG_RX_ANT_CTRL_11N                 0x864\r
 #define        ODM_REG_PIN_CTRL_11N                            0x870\r
-#define        ODM_REG_BB_PWR_SAV1_11N         0x874\r
+#define        ODM_REG_BB_PWR_SAV1_11N                 0x874\r
 #define        ODM_REG_ANTSEL_PATH_11N                 0x878\r
 #define        ODM_REG_BB_3WIRE_11N                    0x88C\r
 #define        ODM_REG_SC_CNT_11N                              0x8C4\r
 #define        ODM_REG_ANTSEL_PATH_11N                 0x878\r
 #define        ODM_REG_BB_3WIRE_11N                    0x88C\r
 #define        ODM_REG_SC_CNT_11N                              0x8C4\r
 #define        ODM_REG_NHM_CNT_11N                             0x8d8\r
 //PAGE 9\r
 #define        ODM_REG_DBG_RPT_11N                             0x908\r
 #define        ODM_REG_NHM_CNT_11N                             0x8d8\r
 //PAGE 9\r
 #define        ODM_REG_DBG_RPT_11N                             0x908\r
+#define        ODM_REG_BB_TX_PATH_11N                  0x90c\r
 #define        ODM_REG_ANT_MAPPING1_11N                0x914\r
 #define        ODM_REG_ANT_MAPPING2_11N                0x918\r
 #define        ODM_REG_ANT_MAPPING1_11N                0x914\r
 #define        ODM_REG_ANT_MAPPING2_11N                0x918\r
+#define        ODM_REG_EDCCA_DOWN_OPT_11N      0x948\r
+\r
 //PAGE A\r
 #define        ODM_REG_CCK_ANTDIV_PARA1_11N    0xA00\r
 #define        ODM_REG_CCK_CCA_11N                             0xA0A\r
 //PAGE A\r
 #define        ODM_REG_CCK_ANTDIV_PARA1_11N    0xA00\r
 #define        ODM_REG_CCK_CCA_11N                             0xA0A\r
@@ -86,7 +89,7 @@
 #define        ODM_REG_CCK_FA_MSB_11N                  0xA58\r
 #define        ODM_REG_CCK_FA_LSB_11N                  0xA5C\r
 #define        ODM_REG_CCK_CCA_CNT_11N                 0xA60\r
 #define        ODM_REG_CCK_FA_MSB_11N                  0xA58\r
 #define        ODM_REG_CCK_FA_LSB_11N                  0xA5C\r
 #define        ODM_REG_CCK_CCA_CNT_11N                 0xA60\r
-#define        ODM_REG_BB_PWR_SAV4_11N         0xA74\r
+#define        ODM_REG_BB_PWR_SAV4_11N                 0xA74\r
 //PAGE B\r
 #define        ODM_REG_LNA_SWITCH_11N                  0xB2C\r
 #define        ODM_REG_PATH_SWITCH_11N                 0xB30\r
 //PAGE B\r
 #define        ODM_REG_LNA_SWITCH_11N                  0xB2C\r
 #define        ODM_REG_PATH_SWITCH_11N                 0xB30\r
 #define        ODM_REG_BB_RX_PATH_11N                  0xC04\r
 #define        ODM_REG_TRMUX_11N                               0xC08\r
 #define        ODM_REG_OFDM_FA_RSTC_11N                0xC0C\r
 #define        ODM_REG_BB_RX_PATH_11N                  0xC04\r
 #define        ODM_REG_TRMUX_11N                               0xC08\r
 #define        ODM_REG_OFDM_FA_RSTC_11N                0xC0C\r
-#define        ODM_REG_RXIQI_MATRIX_11N                        0xC14\r
+#define        ODM_REG_RXIQI_MATRIX_11N                0xC14\r
 #define        ODM_REG_TXIQK_MATRIX_LSB1_11N   0xC4C\r
 #define        ODM_REG_TXIQK_MATRIX_LSB1_11N   0xC4C\r
-#define        ODM_REG_IGI_A_11N                                       0xC50\r
+#define        ODM_REG_IGI_A_11N                               0xC50\r
 #define        ODM_REG_ANTDIV_PARA2_11N                0xC54\r
 #define        ODM_REG_IGI_B_11N                                       0xC58\r
 #define        ODM_REG_ANTDIV_PARA3_11N                0xC5C\r
 #define        ODM_REG_ANTDIV_PARA2_11N                0xC54\r
 #define        ODM_REG_IGI_B_11N                                       0xC58\r
 #define        ODM_REG_ANTDIV_PARA3_11N                0xC5C\r
 #define        ODM_REG_TXAGC_A_MCS4_7_11N              0xE14\r
 #define        ODM_REG_TXAGC_A_MCS8_11_11N     0xE18\r
 #define        ODM_REG_TXAGC_A_MCS12_15_11N    0xE1C\r
 #define        ODM_REG_TXAGC_A_MCS4_7_11N              0xE14\r
 #define        ODM_REG_TXAGC_A_MCS8_11_11N     0xE18\r
 #define        ODM_REG_TXAGC_A_MCS12_15_11N    0xE1C\r
+#define        DOM_REG_EDCCA_DCNF_11N                  0xE24\r
 #define        ODM_REG_FPGA0_IQK_11N                   0xE28\r
 #define        ODM_REG_TXIQK_TONE_A_11N                0xE30\r
 #define        ODM_REG_RXIQK_TONE_A_11N                0xE34\r
 #define        ODM_REG_FPGA0_IQK_11N                   0xE28\r
 #define        ODM_REG_TXIQK_TONE_A_11N                0xE30\r
 #define        ODM_REG_RXIQK_TONE_A_11N                0xE34\r
 #define        ODM_REG_EDCA_BK_11N                             0x50C\r
 #define        ODM_REG_TXPAUSE_11N                             0x522\r
 #define        ODM_REG_RESP_TX_11N                             0x6D8\r
 #define        ODM_REG_EDCA_BK_11N                             0x50C\r
 #define        ODM_REG_TXPAUSE_11N                             0x522\r
 #define        ODM_REG_RESP_TX_11N                             0x6D8\r
-#define        ODM_REG_ANT_TRAIN_PARA1_11N             0x7b0\r
-#define        ODM_REG_ANT_TRAIN_PARA2_11N             0x7b4\r
+#define        ODM_REG_ANT_TRAIN_PARA1_11N     0x7b0\r
+#define        ODM_REG_ANT_TRAIN_PARA2_11N     0x7b4\r
 \r
 \r
 //DIG Related\r
 #define        ODM_BIT_IGI_11N                                 0x0000007F\r
 #define        ODM_BIT_CCK_RPT_FORMAT_11N              BIT9\r
 #define        ODM_BIT_BB_RX_PATH_11N                  0xF\r
 \r
 \r
 //DIG Related\r
 #define        ODM_BIT_IGI_11N                                 0x0000007F\r
 #define        ODM_BIT_CCK_RPT_FORMAT_11N              BIT9\r
 #define        ODM_BIT_BB_RX_PATH_11N                  0xF\r
+#define        ODM_BIT_BB_TX_PATH_11N                  0xF\r
 #define        ODM_BIT_BB_ATC_11N                              BIT11\r
 \r
 #endif\r
 #define        ODM_BIT_BB_ATC_11N                              BIT11\r
 \r
 #endif\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_beamforming.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_beamforming.c
new file mode 100755 (executable)
index 0000000..815cd35
--- /dev/null
@@ -0,0 +1,2552 @@
+#include "Mp_Precomp.h"\r
+\r
+#if WPP_SOFTWARE_TRACE\r
+#include "phydm_beamforming.tmh"\r
+#endif\r
+\r
+#if (BEAMFORMING_SUPPORT == 1)\r
+\r
+\r
+u1Byte\r
+Beamforming_GetHTNDPTxRate(\r
+       IN      PADAPTER        Adapter,\r
+       u1Byte  CompSteeringNumofBFer\r
+)\r
+{\r
+       u1Byte Nr_index = 0;\r
+       u1Byte NDPTxRate;\r
+       /*Find Nr*/\r
+       \r
+       if(IS_HARDWARE_TYPE_8814A(Adapter))\r
+               Nr_index = TxBF_Nr(halTxbf8814A_GetNtx(Adapter), CompSteeringNumofBFer);\r
+       else\r
+               Nr_index = TxBF_Nr(1, CompSteeringNumofBFer);\r
+       \r
+       switch(Nr_index)\r
+       {\r
+               case 1:\r
+               NDPTxRate = MGN_MCS8;\r
+               break;\r
+\r
+               case 2:\r
+               NDPTxRate = MGN_MCS16;\r
+               break;\r
+\r
+               case 3:\r
+               NDPTxRate = MGN_MCS24;\r
+               break;\r
+                       \r
+               default:\r
+               NDPTxRate = MGN_MCS8;\r
+               break;\r
+       \r
+       }\r
+\r
+return NDPTxRate;\r
+\r
+}\r
+\r
+u1Byte\r
+Beamforming_GetVHTNDPTxRate(\r
+       IN      PADAPTER        Adapter,\r
+       u1Byte  CompSteeringNumofBFer\r
+)\r
+{\r
+       u1Byte Nr_index = 0;\r
+       u1Byte NDPTxRate;\r
+       /*Find Nr*/\r
+       if(IS_HARDWARE_TYPE_8814A(Adapter))\r
+               Nr_index = TxBF_Nr(halTxbf8814A_GetNtx(Adapter), CompSteeringNumofBFer);\r
+       else\r
+               Nr_index = TxBF_Nr(1, CompSteeringNumofBFer);\r
+       \r
+       switch(Nr_index)\r
+       {\r
+               case 1:\r
+               NDPTxRate = MGN_VHT2SS_MCS0;\r
+               break;\r
+\r
+               case 2:\r
+               NDPTxRate = MGN_VHT3SS_MCS0;\r
+               break;\r
+\r
+               case 3:\r
+               NDPTxRate = MGN_VHT4SS_MCS0;\r
+               break;\r
+                       \r
+               default:\r
+               NDPTxRate = MGN_VHT2SS_MCS0;\r
+               break;\r
+       \r
+       }\r
+\r
+return NDPTxRate;\r
+\r
+}\r
+\r
+\r
+PRT_BEAMFORMING_ENTRY\r
+phydm_Beamforming_GetBFeeEntryByAddr(\r
+       IN      PVOID           pDM_VOID,\r
+       IN      pu1Byte         RA,\r
+       OUT     pu1Byte         Idx\r
+       )\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte  i = 0;\r
+       PRT_BEAMFORMING_INFO pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s ===>\n", __FUNCTION__));\r
+       \r
+       for(i = 0; i < BEAMFORMEE_ENTRY_NUM; i++)\r
+       {\r
+               if(     pBeamInfo->BeamformeeEntry[i].bUsed && \r
+                       (eqMacAddr(RA,pBeamInfo->BeamformeeEntry[i].MacAddr) ))\r
+               {\r
+                       *Idx = i;\r
+                       return &(pBeamInfo->BeamformeeEntry[i]);\r
+               }\r
+       }\r
+\r
+       return NULL;\r
+}\r
+\r
+PRT_BEAMFORMER_ENTRY\r
+phydm_Beamforming_GetBFerEntryByAddr(\r
+       IN      PVOID   pDM_VOID,\r
+       IN      pu1Byte         TA,\r
+       OUT     pu1Byte         Idx\r
+       )\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte  i = 0;\r
+       PRT_BEAMFORMING_INFO pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s ===>\n", __FUNCTION__));\r
+       \r
+       for(i = 0; i < BEAMFORMER_ENTRY_NUM; i++)\r
+       {\r
+               if(     pBeamInfo->BeamformerEntry[i].bUsed && \r
+                       (eqMacAddr(TA,pBeamInfo->BeamformerEntry[i].MacAddr) ))\r
+               {\r
+                       *Idx = i;\r
+                       return &(pBeamInfo->BeamformerEntry[i]);\r
+               }\r
+       }\r
+\r
+       return NULL;\r
+}\r
+\r
+\r
+PRT_BEAMFORMING_ENTRY\r
+phydm_Beamforming_GetEntryByMacId(\r
+       IN      PVOID           pDM_VOID,\r
+       IN      u1Byte          MacId,\r
+       OUT     pu1Byte         Idx\r
+       )\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte  i = 0;\r
+       PRT_BEAMFORMING_INFO pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s ===>\n", __FUNCTION__));\r
+       \r
+       for(i = 0; i < BEAMFORMEE_ENTRY_NUM; i++)\r
+       {\r
+               if(     pBeamInfo->BeamformeeEntry[i].bUsed && \r
+                       (MacId == pBeamInfo->BeamformeeEntry[i].MacId))\r
+               {\r
+                       *Idx = i;\r
+                       return &(pBeamInfo->BeamformeeEntry[i]);\r
+               }\r
+       }\r
+\r
+       return NULL;\r
+}\r
+\r
+\r
+BEAMFORMING_CAP\r
+phydm_Beamforming_GetEntryBeamCapByMacId(\r
+       IN      PVOID           pDM_VOID,\r
+       IN      u1Byte          MacId\r
+       )\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte  i = 0;\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+       BEAMFORMING_CAP                 BeamformEntryCap = BEAMFORMING_CAP_NONE;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s ===>\n", __FUNCTION__));\r
+       \r
+       for(i = 0; i < BEAMFORMEE_ENTRY_NUM; i++)\r
+       {\r
+               if(     pBeamInfo->BeamformeeEntry[i].bUsed && \r
+                       (MacId == pBeamInfo->BeamformeeEntry[i].MacId))\r
+               {\r
+                       BeamformEntryCap =  pBeamInfo->BeamformeeEntry[i].BeamformEntryCap;\r
+                       i = BEAMFORMEE_ENTRY_NUM;\r
+               }\r
+       }\r
+\r
+       return BeamformEntryCap;\r
+}\r
+\r
+\r
+PRT_BEAMFORMING_ENTRY\r
+phydm_Beamforming_GetFreeBFeeEntry(\r
+       IN      PVOID           pDM_VOID,\r
+       OUT     pu1Byte         Idx\r
+       )\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte  i = 0;\r
+       PRT_BEAMFORMING_INFO pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s ===>\n", __FUNCTION__));\r
+\r
+       for(i = 0; i < BEAMFORMEE_ENTRY_NUM; i++)\r
+       {\r
+               if(pBeamInfo->BeamformeeEntry[i].bUsed == FALSE)\r
+               {\r
+                       *Idx = i;\r
+                       return &(pBeamInfo->BeamformeeEntry[i]);\r
+               }       \r
+       }\r
+       return NULL;\r
+}\r
+\r
+PRT_BEAMFORMER_ENTRY\r
+phydm_Beamforming_GetFreeBFerEntry(\r
+       IN      PVOID           pDM_VOID,\r
+       OUT     pu1Byte         Idx\r
+       )\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte  i = 0;\r
+       PRT_BEAMFORMING_INFO pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s ===>\n", __FUNCTION__));\r
+\r
+       for(i = 0; i < BEAMFORMER_ENTRY_NUM; i++)\r
+       {\r
+               if(pBeamInfo->BeamformerEntry[i].bUsed == FALSE)\r
+               {\r
+                       *Idx = i;\r
+                       return &(pBeamInfo->BeamformerEntry[i]);\r
+               }       \r
+       }\r
+       return NULL;\r
+}\r
+\r
+\r
+PRT_BEAMFORMING_ENTRY\r
+Beamforming_AddBFeeEntry(\r
+       IN      PADAPTER                        Adapter,\r
+       IN      pu1Byte                         RA,\r
+       IN      u2Byte                          AID,\r
+       IN      u2Byte                          MacID,\r
+       IN      CHANNEL_WIDTH           BW,\r
+       IN      BEAMFORMING_CAP BeamformCap,\r
+       IN      u1Byte                          NumofSoundingDim,\r
+       IN      u1Byte                          CompSteeringNumofBFer,\r
+       OUT     pu1Byte                         Idx\r
+       )\r
+{\r
+       HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                               pDM_Odm = &pHalData->DM_OutSrc;\r
+       PMGNT_INFO                              pMgntInfo = &(Adapter->MgntInfo);\r
+       PRT_BEAMFORMING_ENTRY   pEntry = phydm_Beamforming_GetFreeBFeeEntry(pDM_Odm, Idx);\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__));\r
+\r
+       if(pEntry != NULL)\r
+       {       \r
+               pEntry->bUsed = TRUE;\r
+               pEntry->AID = AID;\r
+               pEntry->MacId = MacID;\r
+               pEntry->SoundBW = BW;\r
+               if(ACTING_AS_AP(Adapter))\r
+               {\r
+                       u2Byte BSSID = ((Adapter->CurrentAddress[5] & 0xf0) >> 4) ^ \r
+                                                       (Adapter->CurrentAddress[5] & 0xf);     // BSSID[44:47] xor BSSID[40:43]\r
+                       pEntry->P_AID = (AID + BSSID * 32) & 0x1ff;             // (dec(A) + dec(B)*32) mod 512\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: BFee P_AID addressed to STA=%d\n", __FUNCTION__,pEntry->P_AID));\r
+               }               \r
+               else if(ACTING_AS_IBSS(Adapter))        // Ad hoc mode\r
+               {\r
+                       pEntry->P_AID = 0;\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: BFee P_AID as IBSS=%d\n", __FUNCTION__,pEntry->P_AID));\r
+               }\r
+               else    // client mode\r
+               {\r
+                       pEntry->P_AID =  RA[5];                                         // BSSID[39:47]\r
+                       pEntry->P_AID = (pEntry->P_AID << 1) | (RA[4] >> 7 );\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: BFee P_AID addressed to AP=0x%X\n", __FUNCTION__,pEntry->P_AID));\r
+               }\r
+               cpMacAddr(pEntry->MacAddr, RA);\r
+               pEntry->bTxBF = FALSE;\r
+               pEntry->bSound = FALSE;\r
+\r
+               //3 TODO SW/FW sound period\r
+               pEntry->SoundPeriod = 200;\r
+               pEntry->BeamformEntryCap = BeamformCap;\r
+               pEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_UNINITIALIZE;\r
+\r
+/*             pEntry->LogSeq = 0xff;                          // Move to Beamforming_AddBFerEntry*/\r
+/*             pEntry->LogRetryCnt = 0;                        // Move to Beamforming_AddBFerEntry*/\r
+/*             pEntry->LogSuccessCnt = 0;              // Move to Beamforming_AddBFerEntry*/\r
+\r
+               pEntry->LogStatusFailCnt = 0;\r
+\r
+               pEntry->NumofSoundingDim = NumofSoundingDim;\r
+               pEntry->CompSteeringNumofBFer = CompSteeringNumofBFer;\r
+\r
+               return pEntry;\r
+       }\r
+       else\r
+               return NULL;\r
+}\r
+\r
+PRT_BEAMFORMER_ENTRY\r
+Beamforming_AddBFerEntry(\r
+       IN      PADAPTER                        Adapter,\r
+       IN      pu1Byte                         RA,\r
+       IN      u2Byte                          AID,\r
+       IN      BEAMFORMING_CAP BeamformCap,\r
+       IN      u1Byte                          NumofSoundingDim,\r
+       OUT     pu1Byte                         Idx\r
+       )\r
+{\r
+       HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                               pDM_Odm = &pHalData->DM_OutSrc;\r
+       PMGNT_INFO                              pMgntInfo = &(Adapter->MgntInfo);\r
+       PRT_BEAMFORMER_ENTRY    pEntry = phydm_Beamforming_GetFreeBFerEntry(pDM_Odm, Idx);\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__));\r
+\r
+       if(pEntry != NULL)\r
+       {\r
+               pEntry->bUsed = TRUE;\r
+               if(ACTING_AS_AP(Adapter))\r
+               {\r
+                       u2Byte BSSID = ((Adapter->CurrentAddress[5] & 0xf0) >> 4) ^ \r
+                                                       (Adapter->CurrentAddress[5] & 0xf);     // BSSID[44:47] xor BSSID[40:43]\r
+                       pEntry->P_AID = (AID + BSSID * 32) & 0x1ff;             // (dec(A) + dec(B)*32) mod 512\r
+               }               \r
+               else if(ACTING_AS_IBSS(Adapter))\r
+               {\r
+                       pEntry->P_AID = 0;\r
+               }\r
+               else\r
+               {\r
+                       pEntry->P_AID =  RA[5];                                         // BSSID[39:47]\r
+                       pEntry->P_AID = (pEntry->P_AID << 1) | (RA[4] >> 7 );\r
+               }\r
+               \r
+               cpMacAddr(pEntry->MacAddr, RA);\r
+               pEntry->BeamformEntryCap = BeamformCap;\r
+               \r
+               pEntry->LogSeq = 0xff;                  // Modified by Jeffery @2014-10-29\r
+               pEntry->LogRetryCnt = 0;                // Modified by Jeffery @2014-10-29\r
+               pEntry->LogSuccessCnt = 0;              // Modified by Jeffery @2014-10-29              \r
+\r
+               pEntry->NumofSoundingDim = NumofSoundingDim;\r
+\r
+               return pEntry;\r
+       }\r
+       else\r
+               return NULL;\r
+}\r
+\r
+\r
+BOOLEAN\r
+Beamforming_RemoveEntry(\r
+       IN      PADAPTER                        Adapter,\r
+       IN      pu1Byte         RA,\r
+       OUT     pu1Byte         Idx\r
+       )\r
+{\r
+       HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                               pDM_Odm = &pHalData->DM_OutSrc;\r
+\r
+       PRT_BEAMFORMER_ENTRY    pBFerEntry = phydm_Beamforming_GetBFerEntryByAddr(pDM_Odm, RA, Idx);\r
+       PRT_BEAMFORMING_ENTRY   pEntry = phydm_Beamforming_GetBFeeEntryByAddr(pDM_Odm, RA, Idx);\r
+       BOOLEAN ret = FALSE;\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+       \r
+       if (pEntry != NULL) {   \r
+               pEntry->bUsed = FALSE;\r
+               pEntry->BeamformEntryCap = BEAMFORMING_CAP_NONE;\r
+               /*pEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_UNINITIALIZE;*/\r
+               pEntry->bBeamformingInProgress = FALSE;\r
+               ret = TRUE;\r
+       } \r
+       if (pBFerEntry != NULL) {\r
+               pBFerEntry->bUsed = FALSE;\r
+               pBFerEntry->BeamformEntryCap = BEAMFORMING_CAP_NONE;\r
+               ret = TRUE;\r
+       }\r
+       return ret;\r
+\r
+}\r
+\r
+/* Used for BeamformingStart_V1  */\r
+VOID\r
+phydm_Beamforming_NDPARate(\r
+       IN      PVOID           pDM_VOID,\r
+       CHANNEL_WIDTH   BW, \r
+       u1Byte                  Rate\r
+)\r
+{\r
+       u2Byte                  NDPARate = Rate;\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       \r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       if(NDPARate == 0)\r
+       {\r
+               if(pDM_Odm->RSSI_Min > 30) // link RSSI > 30%\r
+                       NDPARate = ODM_RATE24M;\r
+               else\r
+                       NDPARate = ODM_RATE6M;\r
+       }\r
+\r
+       if(NDPARate < ODM_RATEMCS0)\r
+               BW = ODM_BW20M;\r
+\r
+       NDPARate = (NDPARate << 8) | BW;\r
+       HalComTxbf_Set(pDM_Odm->Adapter, TXBF_SET_SOUNDING_RATE, (pu1Byte)&NDPARate);\r
+\r
+}\r
+\r
+\r
+/* Used for BeamformingStart_SW and  BeamformingStart_FW */\r
+VOID\r
+phydm_Beamforming_DymNDPARate(\r
+       IN      PVOID           pDM_VOID\r
+)\r
+{\r
+       u2Byte                  NDPARate = ODM_RATE6M, BW;\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       if(pDM_Odm->RSSI_Min > 30) // link RSSI > 30%\r
+               NDPARate = ODM_RATE24M;\r
+       else\r
+               NDPARate = ODM_RATE6M;\r
+\r
+       BW = ODM_BW20M;\r
+       NDPARate = NDPARate << 8 | BW;\r
+       HalComTxbf_Set(pDM_Odm->Adapter, TXBF_SET_SOUNDING_RATE, (pu1Byte)&NDPARate);\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s End, NDPA Rate = 0x%X \n", __FUNCTION__, NDPARate));\r
+}\r
+\r
+/*     \r
+*      SW Sounding : SW Timer unit 1ms \r
+*                               HW Timer unit (1/32000) s  32k is clock. \r
+*      FW Sounding : FW Timer unit 10ms\r
+*/\r
+VOID\r
+Beamforming_DymPeriod(\r
+       IN      PVOID           pDM_VOID\r
+)\r
+{\r
+       u1Byte                                  Idx;\r
+       BOOLEAN                                 bChangePeriod = FALSE;  \r
+       u2Byte                                  SoundPeriod_SW, SoundPeriod_FW;\r
+       PDM_ODM_T                               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PADAPTER                                Adapter = pDM_Odm->Adapter;\r
+       PHAL_DATA_TYPE                  pHalData = GET_HAL_DATA(Adapter);\r
+\r
+       PRT_BEAMFORMING_ENTRY   pBeamformEntry;\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = GET_BEAMFORM_INFO((Adapter));\r
+       PRT_SOUNDING_INFO               pSoundInfo = &(pBeamInfo->SoundingInfo);\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+       \r
+       //3 TODO  per-client throughput caculation.\r
+\r
+       if(Adapter->TxStats.CurrentTxTP + Adapter->RxStats.CurrentRxTP > 2)\r
+       {\r
+               //-@ Modified by David\r
+               SoundPeriod_SW = 20;    //32*20?\r
+               SoundPeriod_FW = 20;    // From  H2C cmd, unit = 10ms\r
+               \r
+               RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s, current TRX TP>2, SoundPeriod_SW=%d, SoundPeriod_FW=%d \n",\r
+               __FUNCTION__,\r
+               SoundPeriod_SW,\r
+               SoundPeriod_FW) );\r
+       }       \r
+       else\r
+       {\r
+               //-@ Modified by David\r
+               SoundPeriod_SW = 2000;//32*2000?\r
+               SoundPeriod_FW = 200;\r
+               \r
+               RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s, current TRX TP<2, SoundPeriod_SW=%d, SoundPeriod_FW=%d \n",\r
+               __FUNCTION__,\r
+               SoundPeriod_SW,\r
+               SoundPeriod_FW) );\r
+       }\r
+\r
+       for(Idx = 0; Idx < BEAMFORMEE_ENTRY_NUM; Idx++)\r
+       {\r
+               pBeamformEntry = pBeamInfo->BeamformeeEntry+Idx;\r
+               \r
+               if(pBeamformEntry->DefaultCSICnt > 20)\r
+               {\r
+                       //-@ Modified by David\r
+                       SoundPeriod_SW = 2000;\r
+                       SoundPeriod_FW = 200;\r
+               }\r
+               \r
+               RT_DISP(FBEAM, FBEAM_FUN, ("@%s Period = %d\n", __FUNCTION__, SoundPeriod_SW));         \r
+               if(pBeamformEntry->BeamformEntryCap & (BEAMFORMER_CAP_HT_EXPLICIT |BEAMFORMER_CAP_VHT_SU))\r
+               {\r
+                       if(pSoundInfo->SoundMode == SOUNDING_FW_VHT_TIMER || pSoundInfo->SoundMode == SOUNDING_FW_HT_TIMER)\r
+                       {                               \r
+                               if(pBeamformEntry->SoundPeriod != SoundPeriod_FW)\r
+                               {\r
+                                       pBeamformEntry->SoundPeriod = SoundPeriod_FW;\r
+                                       bChangePeriod = TRUE;   // Only FW sounding need to send H2C packet to change sound period. \r
+                               }\r
+                       }\r
+                       else if(pBeamformEntry->SoundPeriod != SoundPeriod_SW)\r
+                       {\r
+                               pBeamformEntry->SoundPeriod = SoundPeriod_SW;\r
+                       }\r
+               }\r
+       }\r
+\r
+       if(bChangePeriod)\r
+               HalComTxbf_Set(Adapter, TXBF_SET_SOUNDING_FW_NDPA, (pu1Byte)&Idx);\r
+}\r
+\r
+\r
+VOID\r
+Beamforming_GidPAid(\r
+       PADAPTER        Adapter,\r
+       PRT_TCB         pTcb\r
+)\r
+{\r
+       u1Byte          Idx = 0;\r
+       u1Byte          RA[6] ={0};\r
+       PMGNT_INFO      pMgntInfo = &(Adapter->MgntInfo);\r
+       pu1Byte         pHeader = GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb);\r
+\r
+       if(Adapter->HardwareType < HARDWARE_TYPE_RTL8192EE)\r
+               return;\r
+       else if(IS_WIRELESS_MODE_N(Adapter) == FALSE)\r
+               return;\r
+\r
+       GET_80211_HDR_ADDRESS1(pHeader, &RA);\r
+\r
+       // VHT SU PPDU carrying one or more group addressed MPDUs or\r
+       // Transmitting a VHT NDP intended for multiple recipients\r
+       if(     MacAddr_isBcst(RA) || MacAddr_isMulticast(RA)   ||\r
+               pTcb->macId == MAC_ID_STATIC_FOR_BROADCAST_MULTICAST)\r
+       {\r
+               pTcb->G_ID = 63;\r
+               pTcb->P_AID = 0;\r
+       }\r
+       else if(ACTING_AS_AP(Adapter))\r
+       {\r
+               u2Byte  AID = (u2Byte) (MacIdGetOwnerAssociatedClientAID(Adapter, pTcb->macId) & 0x1ff);                //AID[0:8]\r
+\r
+               pTcb->G_ID = 63;\r
+\r
+               if(AID == 0)    //A PPDU sent by an AP to a non associated STA\r
+                       pTcb->P_AID = 0;\r
+               else\r
+               {                       //Sent by an AP and addressed to a STA associated with that AP\r
+                       u2Byte  BSSID = 0;\r
+                       GET_80211_HDR_ADDRESS2(pHeader, &RA);\r
+                       BSSID = ((RA[5] & 0xf0) >> 4) ^ (RA[5] & 0xf);  // BSSID[44:47] xor BSSID[40:43]\r
+                       pTcb->P_AID = (AID + BSSID * 32) & 0x1ff;               // (dec(A) + dec(B)*32) mod 512\r
+               }\r
+       }\r
+       else if(ACTING_AS_IBSS(Adapter))\r
+       {\r
+               pTcb->G_ID = 63;\r
+               // P_AID for infrasturcture mode; MACID for ad-hoc mode. \r
+               pTcb->P_AID = pTcb->macId;\r
+       }\r
+       else if(MgntLinkStatusQuery(Adapter))   \r
+       {       // Addressed to AP\r
+               pTcb->G_ID = 0;\r
+               GET_80211_HDR_ADDRESS1(pHeader, &RA);\r
+               pTcb->P_AID =  RA[5];                                           // RA[39:47]\r
+               pTcb->P_AID = (pTcb->P_AID << 1) | (RA[4] >> 7 );\r
+       }\r
+       else\r
+       {\r
+               pTcb->G_ID = 63;\r
+               pTcb->P_AID = 0;\r
+       }\r
+\r
+       //RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s End, G_ID=0x%X, P_AID=0x%X \n", __FUNCTION__, pTcb->G_ID, pTcb->P_AID) );\r
+       \r
+}\r
+\r
+\r
+RT_STATUS\r
+Beamforming_GetReportFrame(\r
+       IN      PADAPTER                Adapter,\r
+       IN      PRT_RFD                 pRfd,\r
+       IN      POCTET_STRING   pPduOS\r
+       )\r
+{\r
+       HAL_DATA_TYPE                           *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                                       pDM_Odm = &pHalData->DM_OutSrc;\r
+       PRT_BEAMFORMING_ENTRY           pBeamformEntry = NULL;\r
+       PMGNT_INFO                                      pMgntInfo = &(Adapter->MgntInfo);\r
+       pu1Byte                                         pMIMOCtrlField, pCSIReport, pCSIMatrix;\r
+       u1Byte                                          Idx, Nc, Nr, CH_W;\r
+       u2Byte                                          CSIMatrixLen = 0;\r
+\r
+       ACT_PKT_TYPE                            pktType = ACT_PKT_TYPE_UNKNOWN;\r
+\r
+       //Memory comparison to see if CSI report is the same with previous one\r
+       pBeamformEntry = phydm_Beamforming_GetBFeeEntryByAddr(pDM_Odm, Frame_Addr2(*pPduOS), &Idx);\r
+\r
+       if( pBeamformEntry == NULL )\r
+       {\r
+               RT_DISP(FBEAM, FBEAM_DATA, ("Beamforming_GetReportFrame: Cannot find entry by addr\n"));\r
+               return RT_STATUS_FAILURE;\r
+       }\r
+\r
+       pktType = PacketGetActionFrameType(pPduOS);\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+       \r
+       //-@ Modified by David\r
+       if(pktType == ACT_PKT_VHT_COMPRESSED_BEAMFORMING)\r
+       {\r
+               pMIMOCtrlField = pPduOS->Octet + 26; \r
+               Nc = ((*pMIMOCtrlField) & 0x7) + 1;\r
+               Nr = (((*pMIMOCtrlField) & 0x38) >> 3) + 1;\r
+               CH_W =  (((*pMIMOCtrlField) & 0xC0) >> 6);\r
+               pCSIMatrix = pMIMOCtrlField + 3 + Nc; //24+(1+1+3)+2  MAC header+(Category+ActionCode+MIMOControlField) +SNR(Nc=2)\r
+               CSIMatrixLen = pPduOS->Length  - 26 -3 -Nc;\r
+       }       \r
+       else if(pktType == ACT_PKT_HT_COMPRESSED_BEAMFORMING)\r
+       {\r
+               pMIMOCtrlField = pPduOS->Octet + 26; \r
+               Nc = ((*pMIMOCtrlField) & 0x3) + 1;\r
+               Nr =  (((*pMIMOCtrlField) & 0xC) >> 2) + 1;\r
+               CH_W =  (((*pMIMOCtrlField) & 0x10) >> 4);\r
+               pCSIMatrix = pMIMOCtrlField + 6 + Nr;   //24+(1+1+6)+2  MAC header+(Category+ActionCode+MIMOControlField) +SNR(Nc=2)\r
+               CSIMatrixLen = pPduOS->Length  - 26 -6 -Nr;\r
+       }\r
+       else\r
+               return RT_STATUS_SUCCESS;       \r
+       \r
+       if(pktType == ACT_PKT_VHT_COMPRESSED_BEAMFORMING)\r
+       {\r
+               RT_DISP(FBEAM, FBEAM_FUN, ("[David]@BF_GetReportFrame: idx=%d, pkt type=VHT_Cprssed_BF, Nc=%d, Nr=%d, CH_W=%d\n", Idx, Nc, Nr, CH_W));\r
+       }       \r
+       else if(pktType == ACT_PKT_HT_COMPRESSED_BEAMFORMING)\r
+       {\r
+               RT_DISP(FBEAM, FBEAM_FUN, ("[David]@BF_GetReportFrame: idx=%d, pkt type=HT_Cprssed_BF, Nc=%d, Nr=%d, CH_W=%d\n", Idx, Nc, Nr, CH_W));\r
+       }\r
+\r
+       \r
+//     RT_DISP_DATA(FBEAM, FBEAM_DATA, "Beamforming_GetReportFrame \n", pMIMOCtrlField, pPduOS->Length - 26);\r
+\r
+       //-@ Modified by David - CSI buffer is not big enough, and comparison would result in blue screen\r
+       /*\r
+       if(pBeamformEntry->CSIMatrixLen != CSIMatrixLen)\r
+               pBeamformEntry->DefaultCSICnt = 0;\r
+       else if(PlatformCompareMemory(pBeamformEntry->CSIMatrix, pCSIMatrix, CSIMatrixLen)) \r
+       {\r
+               pBeamformEntry->DefaultCSICnt = 0;\r
+               RT_DISP(FBEAM, FBEAM_FUN, ("%s CSI report is NOT the same with previos one\n", __FUNCTION__));\r
+       }\r
+       else    if(pBeamformEntry->DefaultCSICnt <= 20)\r
+       {\r
+               pBeamformEntry->DefaultCSICnt ++;\r
+               RT_DISP(FBEAM, FBEAM_FUN, ("%s CSI report is the SAME with previos one\n", __FUNCTION__));\r
+       }\r
+\r
+       pBeamformEntry->CSIMatrixLen = CSIMatrixLen;\r
+       PlatformMoveMemory(&pBeamformEntry->CSIMatrix, pCSIMatrix, CSIMatrixLen);\r
+       */\r
+\r
+       return RT_STATUS_SUCCESS;\r
+}\r
+\r
+\r
+VOID\r
+Beamforming_GetNDPAFrame(\r
+       IN      PADAPTER                Adapter,\r
+       IN      OCTET_STRING    pduOS\r
+)\r
+{\r
+       pu1Byte                                         TA ;\r
+       u1Byte                                          Idx, Sequence;\r
+       pu1Byte                                         pNDPAFrame = pduOS.Octet;\r
+       PMGNT_INFO                              pMgntInfo = &(Adapter->MgntInfo);\r
+//     PRT_BEAMFORMING_ENTRY           pBeamformEntry = NULL;\r
+       PRT_BEAMFORMER_ENTRY            pBeamformerEntry = NULL;                // Modified By Jeffery @2014-10-29\r
+       HAL_DATA_TYPE                           *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                                       pDM_Odm = &pHalData->DM_OutSrc;\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+       RT_DISP_DATA(FBEAM, FBEAM_DATA, "Beamforming_GetNDPAFrame\n", pduOS.Octet, pduOS.Length);\r
+\r
+       if(IsCtrlNDPA(pNDPAFrame) == FALSE)     \r
+               return;\r
+       else if( (IS_HARDWARE_TYPE_8812(Adapter) == FALSE)||(IS_HARDWARE_TYPE_8821(Adapter) == FALSE) )\r
+               return;\r
+\r
+       TA = Frame_Addr2(pduOS);\r
+       // Remove signaling TA. \r
+       TA[0] = TA[0] & 0xFE; \r
+       \r
+//     pBeamformEntry = Beamforming_GetBFeeEntryByAddr(Adapter, TA, &Idx);             \r
+       pBeamformerEntry = phydm_Beamforming_GetBFerEntryByAddr(pDM_Odm, TA, &Idx);             // Modified By Jeffery @2014-10-29\r
+\r
+       if(pBeamformerEntry == NULL)\r
+               return;\r
+       else if(!(pBeamformerEntry->BeamformEntryCap & BEAMFORMEE_CAP_VHT_SU))\r
+               return;\r
+//     else if(pBeamformerEntry->LogSuccessCnt > 1)                    //¼È®É²¾°£,ÁקK¥Ã»·¥d¦º¦b³o­Óª¬ºA\r
+//             return;\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s begin, LogSeq=%d, LogRetryCnt=%d, LogSuccessCnt=%d\n",\r
+       __FUNCTION__,   \r
+       pBeamformerEntry->LogSeq,\r
+       pBeamformerEntry->LogRetryCnt,\r
+       pBeamformerEntry->LogSuccessCnt) );\r
+\r
+       Sequence = (pNDPAFrame[16]) >> 2;\r
+\r
+       if(pBeamformerEntry->LogSeq != Sequence)\r
+       {\r
+               /* Previous frame doesn't retry when meet new sequence number */\r
+               if(pBeamformerEntry->LogSeq != 0xff && pBeamformerEntry->LogRetryCnt == 0)\r
+                       pBeamformerEntry->LogSuccessCnt++;\r
+               \r
+               pBeamformerEntry->LogSeq = Sequence;\r
+               pBeamformerEntry->LogRetryCnt = 0;\r
+       }\r
+       else\r
+       {\r
+               if(pBeamformerEntry->LogRetryCnt == 3)\r
+                       HalComTxbf_Set(Adapter, TXBF_SET_SOUNDING_CLK, NULL);\r
+               else if(pBeamformerEntry->LogRetryCnt <= 3)\r
+                       pBeamformerEntry->LogRetryCnt++;\r
+       }\r
+\r
+/*     RT_DISP(FBEAM, FBEAM_FUN, ("%s End, LogSeq=%d, LogRetryCnt=%d, LogSuccessCnt=%d\n", \r
+       __FUNCTION__,\r
+       pBeamformerEntry->LogSeq,\r
+       pBeamformerEntry->LogRetryCnt,\r
+       pBeamformerEntry->LogSuccessCnt));*/\r
+       \r
+}\r
+\r
+\r
+VOID\r
+ConstructHTNDPAPacket(\r
+       PADAPTER                Adapter,\r
+       pu1Byte                 RA,\r
+       pu1Byte                 Buffer,\r
+       pu4Byte                 pLength,\r
+       CHANNEL_WIDTH   BW\r
+       )\r
+{\r
+       u2Byte                                  Duration= 0;\r
+       PMGNT_INFO                              pMgntInfo = &(Adapter->MgntInfo);\r
+       PRT_HIGH_THROUGHPUT             pHTInfo = GET_HT_INFO(pMgntInfo);\r
+       OCTET_STRING                    pNDPAFrame,ActionContent;\r
+       u1Byte                                  ActionHdr[4] = {ACT_CAT_VENDOR, 0x00, 0xe0, 0x4c};\r
+\r
+       PlatformZeroMemory(Buffer, 32);\r
+\r
+       SET_80211_HDR_FRAME_CONTROL(Buffer,0);\r
+\r
+       SET_80211_HDR_ORDER(Buffer, 1);\r
+       SET_80211_HDR_TYPE_AND_SUBTYPE(Buffer,Type_Action_No_Ack);\r
+\r
+       SET_80211_HDR_ADDRESS1(Buffer, RA);\r
+       SET_80211_HDR_ADDRESS2(Buffer, Adapter->CurrentAddress);\r
+       SET_80211_HDR_ADDRESS3(Buffer, pMgntInfo->Bssid);\r
+\r
+       Duration = 2*aSifsTime + 40;\r
+       \r
+       if(BW== CHANNEL_WIDTH_40)\r
+               Duration+= 87;\r
+       else    \r
+               Duration+= 180;\r
+\r
+       SET_80211_HDR_DURATION(Buffer, Duration);\r
+\r
+       //HT control field\r
+       SET_HT_CTRL_CSI_STEERING(Buffer+sMacHdrLng, 3);\r
+       SET_HT_CTRL_NDP_ANNOUNCEMENT(Buffer+sMacHdrLng, 1);\r
+       \r
+       FillOctetString(pNDPAFrame, Buffer, sMacHdrLng+sHTCLng);\r
+\r
+       FillOctetString(ActionContent, ActionHdr, 4);\r
+       PacketAppendData(&pNDPAFrame, ActionContent);   \r
+\r
+       *pLength = 32;\r
+}\r
+\r
+\r
+BOOLEAN\r
+SendFWHTNDPAPacket(\r
+       IN      PADAPTER                Adapter,\r
+       IN      pu1Byte                 RA,\r
+       IN      CHANNEL_WIDTH   BW\r
+       )\r
+{\r
+       PRT_TCB                                 pTcb;\r
+       PRT_TX_LOCAL_BUFFER     pBuf;\r
+       BOOLEAN                                 ret = TRUE;\r
+       u4Byte                                  BufLen;\r
+       pu1Byte                                 BufAddr;\r
+       u1Byte                                  DescLen = 0, Idx = 0, NDPTxRate;\r
+       PADAPTER                                pDefAdapter = GetDefaultAdapter(Adapter);\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = GET_BEAMFORM_INFO(Adapter);\r
+       HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                               pDM_Odm = &pHalData->DM_OutSrc;\r
+       PRT_BEAMFORMING_ENTRY   pBeamformEntry = phydm_Beamforming_GetBFeeEntryByAddr(pDM_Odm, RA, &Idx);\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+\r
+       if(pBeamformEntry == NULL)\r
+               return FALSE;\r
+\r
+       NDPTxRate = Beamforming_GetHTNDPTxRate(Adapter, pBeamformEntry->CompSteeringNumofBFer);\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("%s, NDPTxRate =%d\n", __FUNCTION__, NDPTxRate));\r
+       PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK);\r
+\r
+       if(MgntGetFWBuffer(pDefAdapter, &pTcb, &pBuf))\r
+       {\r
+#if(DEV_BUS_TYPE != RT_PCI_INTERFACE)\r
+               HAL_DATA_TYPE   *pHalData       = GET_HAL_DATA(Adapter);\r
+\r
+               DescLen = Adapter->HWDescHeadLength - pHalData->USBALLDummyLength;\r
+#endif\r
+               BufAddr = pBuf->Buffer.VirtualAddress + DescLen;\r
+\r
+               ConstructHTNDPAPacket(\r
+                               Adapter, \r
+                               RA,\r
+                               BufAddr, \r
+                               &BufLen,\r
+                               BW\r
+                               );\r
+\r
+               pTcb->PacketLength = BufLen + DescLen;\r
+\r
+               pTcb->bTxEnableSwCalcDur = TRUE;\r
+               \r
+               pTcb->BWOfPacket = BW;\r
+\r
+               if(ACTING_AS_IBSS(Adapter) || ACTING_AS_AP(Adapter))\r
+                       pTcb->G_ID = 63;\r
+\r
+               pTcb->P_AID = pBeamformEntry->P_AID;\r
+               pTcb->DataRate = NDPTxRate;     /*rate of NDP decide by Nr*/\r
+\r
+               Adapter->HalFunc.CmdSendPacketHandler(Adapter, pTcb, pBuf, pTcb->PacketLength, DESC_PACKET_TYPE_NORMAL, FALSE);\r
+       }\r
+       else\r
+               ret = FALSE;\r
+\r
+       PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK);\r
+       \r
+       if(ret)\r
+               RT_DISP_DATA(FBEAM, FBEAM_DATA, "", pBuf->Buffer.VirtualAddress, pTcb->PacketLength);\r
+\r
+       return ret;\r
+}\r
+\r
+\r
+BOOLEAN\r
+SendSWHTNDPAPacket(\r
+       IN      PADAPTER                Adapter,\r
+       IN      pu1Byte                 RA,\r
+       IN      CHANNEL_WIDTH   BW\r
+       )\r
+{\r
+       PRT_TCB                                 pTcb;\r
+       PRT_TX_LOCAL_BUFFER             pBuf;\r
+       BOOLEAN                                 ret = TRUE;\r
+       u1Byte                                  Idx = 0, NDPTxRate = 0;\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = GET_BEAMFORM_INFO(Adapter);\r
+       HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                               pDM_Odm = &pHalData->DM_OutSrc;\r
+       PRT_BEAMFORMING_ENTRY   pBeamformEntry = phydm_Beamforming_GetBFeeEntryByAddr(pDM_Odm, RA, &Idx);\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+\r
+       NDPTxRate = Beamforming_GetHTNDPTxRate(Adapter, pBeamformEntry->CompSteeringNumofBFer);\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("%s, NDPTxRate =%d\n", __FUNCTION__, NDPTxRate));\r
+       \r
+       PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK);\r
+\r
+       if(MgntGetBuffer(Adapter, &pTcb, &pBuf))\r
+       {\r
+               ConstructHTNDPAPacket(\r
+                               Adapter, \r
+                               RA,\r
+                               pBuf->Buffer.VirtualAddress, \r
+                               &pTcb->PacketLength,\r
+                               BW\r
+                               );\r
+\r
+               pTcb->bTxEnableSwCalcDur = TRUE;\r
+\r
+               pTcb->BWOfPacket = BW;\r
+\r
+               MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, NDPTxRate);\r
+       }\r
+       else\r
+               ret = FALSE;\r
+       \r
+       PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK);\r
+\r
+       if(ret)\r
+               RT_DISP_DATA(FBEAM, FBEAM_DATA, "", pBuf->Buffer.VirtualAddress, pTcb->PacketLength);\r
+\r
+       return ret;\r
+}\r
+\r
+\r
+\r
+\r
+BOOLEAN\r
+Beamforming_SendHTNDPAPacket(\r
+       IN      PADAPTER                Adapter,\r
+       IN      pu1Byte                 RA,\r
+       IN      CHANNEL_WIDTH   BW,\r
+       IN      u1Byte                  QIdx\r
+       )\r
+{\r
+       BOOLEAN         ret = TRUE;\r
+\r
+       if(QIdx == BEACON_QUEUE)\r
+               ret = SendFWHTNDPAPacket(Adapter, RA, BW);\r
+       else\r
+               ret = SendSWHTNDPAPacket(Adapter, RA, BW);\r
+\r
+       return ret;\r
+}\r
+\r
+\r
+VOID\r
+ConstructVHTNDPAPacket(\r
+       PADAPTER                Adapter,\r
+       pu1Byte                 RA,\r
+       u2Byte                  AID,\r
+       pu1Byte                 Buffer,\r
+       pu4Byte                 pLength,\r
+       CHANNEL_WIDTH   BW\r
+       )\r
+{\r
+       u2Byte                                  Duration= 0;\r
+       u1Byte                                  Sequence = 0;\r
+       pu1Byte                                 pNDPAFrame = Buffer;\r
+       PMGNT_INFO                              pMgntInfo = &(Adapter->MgntInfo);\r
+       PRT_HIGH_THROUGHPUT             pHTInfo = GET_HT_INFO(pMgntInfo);\r
+       RT_NDPA_STA_INFO                STAInfo;\r
+\r
+       // Frame control.\r
+       SET_80211_HDR_FRAME_CONTROL(pNDPAFrame, 0);\r
+       SET_80211_HDR_TYPE_AND_SUBTYPE(pNDPAFrame, Type_NDPA);\r
+\r
+       SET_80211_HDR_ADDRESS1(pNDPAFrame, RA);\r
+       SET_80211_HDR_ADDRESS2(pNDPAFrame, Adapter->CurrentAddress);\r
+\r
+       Duration = 2*aSifsTime + 44;\r
+       \r
+       if(BW == CHANNEL_WIDTH_80)\r
+               Duration += 40;\r
+       else if(BW == CHANNEL_WIDTH_40)\r
+               Duration+= 87;\r
+       else    \r
+               Duration+= 180;\r
+\r
+       SET_80211_HDR_DURATION(pNDPAFrame, Duration);\r
+\r
+       Sequence = pMgntInfo->SoundingSequence << 2;\r
+       PlatformMoveMemory(pNDPAFrame+16, &Sequence,1);\r
+\r
+       if(     ACTING_AS_IBSS(Adapter) || \r
+               (ACTING_AS_AP(Adapter) == FALSE))\r
+               AID = 0;\r
+\r
+       STAInfo.AID = AID;\r
+       STAInfo.FeedbackType = 0;\r
+       STAInfo.NcIndex = 0;\r
+       \r
+       PlatformMoveMemory(pNDPAFrame+17, (pu1Byte)&STAInfo, 2);\r
+\r
+       *pLength = 19;\r
+}\r
+\r
+BOOLEAN\r
+SendFWVHTNDPAPacket(\r
+       IN      PADAPTER                Adapter,\r
+       IN      pu1Byte                 RA,\r
+       IN      u2Byte                  AID,\r
+       IN      CHANNEL_WIDTH   BW\r
+       )\r
+{\r
+       PRT_TCB                                 pTcb;\r
+       PRT_TX_LOCAL_BUFFER             pBuf;\r
+       BOOLEAN                                 ret = TRUE;\r
+       u4Byte                                  BufLen;\r
+       pu1Byte                                 BufAddr;\r
+       u1Byte                                  DescLen = 0, Idx = 0, NDPTxRate = 0;\r
+       PADAPTER                                pDefAdapter = GetDefaultAdapter(Adapter);\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = GET_BEAMFORM_INFO(Adapter);\r
+       HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                               pDM_Odm = &pHalData->DM_OutSrc;\r
+       PRT_BEAMFORMING_ENTRY   pBeamformEntry =phydm_Beamforming_GetBFeeEntryByAddr(pDM_Odm, RA, &Idx);\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+\r
+       if(pBeamformEntry == NULL)\r
+               return FALSE;\r
+\r
+       NDPTxRate = Beamforming_GetVHTNDPTxRate(Adapter, pBeamformEntry->CompSteeringNumofBFer);\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("%s, NDPTxRate =%d\n", __FUNCTION__, NDPTxRate));\r
+       \r
+       PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK);\r
+\r
+       if(MgntGetFWBuffer(pDefAdapter, &pTcb, &pBuf))\r
+       {\r
+#if(DEV_BUS_TYPE != RT_PCI_INTERFACE)\r
+               HAL_DATA_TYPE   *pHalData       = GET_HAL_DATA(Adapter);\r
+\r
+               DescLen = Adapter->HWDescHeadLength - pHalData->USBALLDummyLength;\r
+#endif\r
+               BufAddr = pBuf->Buffer.VirtualAddress + DescLen;\r
+\r
+               ConstructVHTNDPAPacket(\r
+                               Adapter, \r
+                               RA,\r
+                               AID,\r
+                               BufAddr, \r
+                               &BufLen,\r
+                               BW\r
+                               );\r
+               \r
+               pTcb->PacketLength = BufLen + DescLen;\r
+\r
+               pTcb->bTxEnableSwCalcDur = TRUE;\r
+               \r
+               pTcb->BWOfPacket = BW;\r
+\r
+               if(ACTING_AS_IBSS(Adapter) || ACTING_AS_AP(Adapter))\r
+                       pTcb->G_ID = 63;\r
+\r
+               pTcb->P_AID = pBeamformEntry->P_AID;\r
+               pTcb->DataRate = NDPTxRate;     /*decide by Nr*/\r
+\r
+               Adapter->HalFunc.CmdSendPacketHandler(Adapter, pTcb, pBuf, pTcb->PacketLength, DESC_PACKET_TYPE_NORMAL, FALSE);\r
+       }\r
+       else\r
+               ret = FALSE;\r
+       \r
+       PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK);       \r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("@%s End, ret=%d \n", __FUNCTION__,ret));\r
+\r
+       if(ret)\r
+               RT_DISP_DATA(FBEAM, FBEAM_DATA, "", pBuf->Buffer.VirtualAddress, pTcb->PacketLength);\r
+\r
+       return ret;\r
+}\r
+\r
+\r
+BOOLEAN\r
+SendSWVHTNDPAPacket(\r
+       IN      PADAPTER                Adapter,\r
+       IN      pu1Byte                 RA,\r
+       IN      u2Byte                  AID,\r
+       IN      CHANNEL_WIDTH   BW\r
+       )\r
+{\r
+       PRT_TCB                                 pTcb;\r
+       PRT_TX_LOCAL_BUFFER             pBuf;\r
+       BOOLEAN                                 ret = TRUE;\r
+       u1Byte                                  Idx = 0, NDPTxRate = 0;\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = GET_BEAMFORM_INFO(Adapter);\r
+       HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                               pDM_Odm = &pHalData->DM_OutSrc;\r
+       PRT_BEAMFORMING_ENTRY   pBeamformEntry = phydm_Beamforming_GetBFeeEntryByAddr(pDM_Odm, RA, &Idx);\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+\r
+       NDPTxRate = Beamforming_GetVHTNDPTxRate(Adapter, pBeamformEntry->CompSteeringNumofBFer);\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("%s, NDPTxRate =%d\n", __FUNCTION__, NDPTxRate));\r
+\r
+       PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK);\r
+\r
+       if(MgntGetBuffer(Adapter, &pTcb, &pBuf))\r
+       {\r
+               ConstructVHTNDPAPacket(\r
+                               Adapter, \r
+                               RA,\r
+                               AID,\r
+                               pBuf->Buffer.VirtualAddress, \r
+                               &pTcb->PacketLength,\r
+                               BW\r
+                               );\r
+\r
+               pTcb->bTxEnableSwCalcDur = TRUE;\r
+               pTcb->BWOfPacket = BW;\r
+\r
+               /*rate of NDP decide by Nr*/\r
+               MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, NDPTxRate);\r
+       }\r
+       else\r
+               ret = FALSE;\r
+       \r
+       PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK);       \r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("%s\n", __FUNCTION__));\r
+\r
+       if(ret)\r
+               RT_DISP_DATA(FBEAM, FBEAM_DATA, "", pBuf->Buffer.VirtualAddress, pTcb->PacketLength);\r
+\r
+       return ret;\r
+}\r
+\r
+\r
+\r
+BOOLEAN\r
+Beamforming_SendVHTNDPAPacket(\r
+       IN      PADAPTER                Adapter,\r
+       IN      pu1Byte                 RA,\r
+       IN      u2Byte                  AID,\r
+       IN      CHANNEL_WIDTH   BW,\r
+       IN      u1Byte                  QIdx\r
+       )\r
+{\r
+       BOOLEAN                                 ret = TRUE;\r
+\r
+       if(QIdx == BEACON_QUEUE)\r
+               ret = SendFWVHTNDPAPacket(Adapter, RA, AID, BW);\r
+       else\r
+               ret = SendSWVHTNDPAPacket(Adapter, RA, AID, BW);\r
+\r
+       return ret;\r
+}\r
+\r
+\r
+BEAMFORMING_NOTIFY_STATE\r
+phydm_beamfomring_bSounding(\r
+       IN      PVOID                           pDM_VOID,\r
+       PRT_BEAMFORMING_INFO    pBeamInfo,\r
+       pu1Byte                                 Idx\r
+       )\r
+{\r
+       BEAMFORMING_NOTIFY_STATE        bSounding = BEAMFORMING_NOTIFY_NONE;\r
+       RT_BEAMFORMING_OID_INFO BeamOidInfo = pBeamInfo->BeamformingOidInfo;\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+//     if(( Beamforming_GetBeamCap(pBeamInfo) & BEAMFORMER_CAP) == 0)\r
+//             bSounding = BEAMFORMING_NOTIFY_RESET;\r
+       if(BeamOidInfo.SoundOidMode == SOUNDING_STOP_All_TIMER)\r
+               bSounding = BEAMFORMING_NOTIFY_RESET;\r
+       else \r
+       {\r
+               u1Byte i;\r
+\r
+               for(i=0;i<BEAMFORMEE_ENTRY_NUM;i++)\r
+               {\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("@%s: BFee Entry %d bUsed=%d, bSound=%d \n", __FUNCTION__, i, pBeamInfo->BeamformeeEntry[i].bUsed, pBeamInfo->BeamformeeEntry[i].bSound));\r
+                       if(pBeamInfo->BeamformeeEntry[i].bUsed && (!pBeamInfo->BeamformeeEntry[i].bSound))\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: Add BFee entry %d\n", __FUNCTION__, i));\r
+                               *Idx = i;\r
+                               bSounding = BEAMFORMING_NOTIFY_ADD;\r
+                       }\r
+\r
+                       if((!pBeamInfo->BeamformeeEntry[i].bUsed) && pBeamInfo->BeamformeeEntry[i].bSound)\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: Delete BFee entry %d\n", __FUNCTION__, i));\r
+                               *Idx = i;\r
+                               bSounding = BEAMFORMING_NOTIFY_DELETE;\r
+                       }\r
+               }\r
+       }\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s End, bSounding = %d\n", __FUNCTION__, bSounding) );\r
+       return bSounding;\r
+}\r
+\r
+\r
+//This function is unused\r
+u1Byte\r
+phydm_beamforming_SoundingIdx(\r
+       IN      PVOID                           pDM_VOID,\r
+       PRT_BEAMFORMING_INFO            pBeamInfo\r
+       )\r
+{\r
+       u1Byte                                  Idx = 0;\r
+       RT_BEAMFORMING_ENTRY    BeamEntry;\r
+       RT_BEAMFORMING_OID_INFO BeamOidInfo = pBeamInfo->BeamformingOidInfo;\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       if(     BeamOidInfo.SoundOidMode == SOUNDING_SW_HT_TIMER || BeamOidInfo.SoundOidMode == SOUNDING_SW_VHT_TIMER ||\r
+               BeamOidInfo.SoundOidMode == SOUNDING_HW_HT_TIMER || BeamOidInfo.SoundOidMode == SOUNDING_HW_VHT_TIMER)\r
+               Idx = BeamOidInfo.SoundOidIdx;\r
+       else\r
+       {\r
+               u1Byte  i;\r
+               for(i = 0; i < BEAMFORMEE_ENTRY_NUM; i++)\r
+               {\r
+                       if( pBeamInfo->BeamformeeEntry[i].bUsed &&\r
+                               (FALSE == pBeamInfo->BeamformeeEntry[i].bSound))\r
+                       {\r
+                               Idx = i;\r
+                               break;\r
+                       }\r
+               }\r
+       }\r
+\r
+       return Idx;\r
+}\r
+\r
+\r
+SOUNDING_MODE\r
+phydm_beamforming_SoundingMode(\r
+       IN      PVOID                           pDM_VOID,\r
+       PRT_BEAMFORMING_INFO    pBeamInfo,\r
+       u1Byte                                  Idx\r
+       )\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte                  SupportInterface = pDM_Odm->SupportInterface;\r
+\r
+       RT_BEAMFORMING_ENTRY            BeamEntry = pBeamInfo->BeamformeeEntry[Idx];\r
+       RT_BEAMFORMING_OID_INFO         BeamOidInfo = pBeamInfo->BeamformingOidInfo;\r
+       SOUNDING_MODE                           Mode = BeamOidInfo.SoundOidMode;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+//     RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s: OID mode is %d\n", __FUNCTION__, BeamOidInfo.SoundOidMode));\r
+\r
+       if(BeamOidInfo.SoundOidMode == SOUNDING_SW_VHT_TIMER || BeamOidInfo.SoundOidMode == SOUNDING_HW_VHT_TIMER)\r
+       {\r
+               if(BeamEntry.BeamformEntryCap & BEAMFORMER_CAP_VHT_SU)\r
+                       Mode = BeamOidInfo.SoundOidMode;\r
+               else \r
+                       Mode = SOUNDING_STOP_All_TIMER;\r
+       }       \r
+       else if(BeamOidInfo.SoundOidMode == SOUNDING_SW_HT_TIMER || BeamOidInfo.SoundOidMode == SOUNDING_HW_HT_TIMER)\r
+       {\r
+               if(BeamEntry.BeamformEntryCap & BEAMFORMER_CAP_HT_EXPLICIT)\r
+                       Mode = BeamOidInfo.SoundOidMode;\r
+               else\r
+                       Mode = SOUNDING_STOP_All_TIMER;\r
+       }       \r
+       else if(BeamEntry.BeamformEntryCap & BEAMFORMER_CAP_VHT_SU)\r
+       {\r
+               if((SupportInterface == ODM_ITRF_USB) && (pDM_Odm->SupportICType!= ODM_RTL8814A))\r
+                       Mode = SOUNDING_FW_VHT_TIMER;\r
+               else\r
+                       Mode = SOUNDING_SW_VHT_TIMER;\r
+       }\r
+       else if(BeamEntry.BeamformEntryCap & BEAMFORMER_CAP_HT_EXPLICIT)\r
+       {\r
+               if((SupportInterface == ODM_ITRF_USB) && (pDM_Odm->SupportICType != ODM_RTL8814A))\r
+               Mode = SOUNDING_FW_HT_TIMER;\r
+       else\r
+               Mode = SOUNDING_SW_HT_TIMER;\r
+       }\r
+       else \r
+               Mode = SOUNDING_STOP_All_TIMER;\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s End, SupportInterface=%d, Mode=%d \n", __FUNCTION__, SupportInterface, Mode));\r
+\r
+       return Mode;\r
+}\r
+\r
+\r
+u2Byte\r
+phydm_beamforming_SoundingTime(\r
+       IN      PVOID                           pDM_VOID,\r
+       PRT_BEAMFORMING_INFO    pBeamInfo,\r
+       SOUNDING_MODE                   Mode,\r
+       u1Byte                                  Idx\r
+       )\r
+{\r
+       u2Byte                                          SoundingTime = 0xffff;\r
+       RT_BEAMFORMING_ENTRY            BeamEntry = pBeamInfo->BeamformeeEntry[Idx];\r
+       RT_BEAMFORMING_OID_INFO BeamOidInfo = pBeamInfo->BeamformingOidInfo;\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       if(Mode == SOUNDING_HW_HT_TIMER || Mode == SOUNDING_HW_VHT_TIMER)\r
+               SoundingTime = BeamOidInfo.SoundOidPeriod * 32;\r
+       else if(Mode == SOUNDING_SW_HT_TIMER || Mode == SOUNDING_SW_VHT_TIMER)\r
+               //-@ Modified by David\r
+               SoundingTime = BeamEntry.SoundPeriod; //100*32;  //BeamOidInfo.SoundOidPeriod;\r
+       else\r
+               SoundingTime = BeamEntry.SoundPeriod;\r
+\r
+       return SoundingTime;\r
+}\r
+\r
+\r
+CHANNEL_WIDTH\r
+phydm_beamforming_SoundingBW(\r
+       IN      PVOID                           pDM_VOID,\r
+       PRT_BEAMFORMING_INFO    pBeamInfo,\r
+       SOUNDING_MODE                   Mode,\r
+       u1Byte                                  Idx\r
+       )\r
+{\r
+       CHANNEL_WIDTH                           SoundingBW = CHANNEL_WIDTH_20;\r
+       RT_BEAMFORMING_ENTRY            BeamEntry = pBeamInfo->BeamformeeEntry[Idx];\r
+       RT_BEAMFORMING_OID_INFO BeamOidInfo = pBeamInfo->BeamformingOidInfo;\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       if(Mode == SOUNDING_HW_HT_TIMER || Mode == SOUNDING_HW_VHT_TIMER)\r
+               SoundingBW = BeamOidInfo.SoundOidBW;\r
+       else if(Mode == SOUNDING_SW_HT_TIMER || Mode == SOUNDING_SW_VHT_TIMER)\r
+               //-@ Modified by David\r
+               SoundingBW = BeamEntry.SoundBW;   //BeamOidInfo.SoundOidBW;\r
+       else \r
+               SoundingBW = BeamEntry.SoundBW;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s, SoundingBW=0x%X \n", __FUNCTION__, SoundingBW) );\r
+\r
+       return SoundingBW;\r
+}\r
+\r
+\r
+BOOLEAN\r
+phydm_Beamforming_SelectBeamEntry(\r
+       IN      PVOID                           pDM_VOID,\r
+       PRT_BEAMFORMING_INFO    pBeamInfo\r
+       )\r
+{\r
+       PRT_SOUNDING_INFO               pSoundInfo = &(pBeamInfo->SoundingInfo);\r
+       PDM_ODM_T                               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       // pEntry.bSound is different between first and latter NDPA, and should not be used as BFee entry selection\r
+       // BTW, latter modification should sync to the selection mechanism of AP/ADSL instead of the fixed SoundIdx.\r
+       //pSoundInfo->SoundIdx = phydm_beamforming_SoundingIdx(pDM_Odm, pBeamInfo);\r
+       pSoundInfo->SoundIdx = 0;\r
+\r
+       if(pSoundInfo->SoundIdx < BEAMFORMEE_ENTRY_NUM)\r
+               pSoundInfo->SoundMode = phydm_beamforming_SoundingMode(pDM_Odm, pBeamInfo, pSoundInfo->SoundIdx);\r
+       else\r
+               pSoundInfo->SoundMode = SOUNDING_STOP_All_TIMER;\r
+       \r
+       if(SOUNDING_STOP_All_TIMER == pSoundInfo->SoundMode)\r
+               return FALSE;\r
+       else\r
+       {\r
+               pSoundInfo->SoundBW = phydm_beamforming_SoundingBW(pDM_Odm, pBeamInfo, pSoundInfo->SoundMode, pSoundInfo->SoundIdx );\r
+               pSoundInfo->SoundPeriod = phydm_beamforming_SoundingTime(pDM_Odm, pBeamInfo, pSoundInfo->SoundMode, pSoundInfo->SoundIdx );\r
+               return TRUE;\r
+       }\r
+}\r
+\r
+\r
+BOOLEAN\r
+phydm_beamforming_StartPeriod(\r
+       IN      PVOID                           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PADAPTER                                        Adapter = pDM_Odm->Adapter;\r
+       BOOLEAN                                         Ret = TRUE;\r
+       PRT_BEAMFORMING_INFO            pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+       PRT_SOUNDING_INFO                       pSoundInfo = &(pBeamInfo->SoundingInfo); \r
+       \r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       phydm_Beamforming_DymNDPARate(pDM_Odm);\r
+\r
+       phydm_Beamforming_SelectBeamEntry(pDM_Odm, pBeamInfo);          // Modified\r
+\r
+\r
+       if(pSoundInfo->SoundMode == SOUNDING_SW_VHT_TIMER || pSoundInfo->SoundMode == SOUNDING_SW_HT_TIMER)\r
+               ODM_SetTimer(pDM_Odm, &pBeamInfo->BeamformingTimer, pSoundInfo->SoundPeriod);\r
+       else if(pSoundInfo->SoundMode == SOUNDING_HW_VHT_TIMER || pSoundInfo->SoundMode == SOUNDING_HW_HT_TIMER ||\r
+                       pSoundInfo->SoundMode == SOUNDING_AUTO_VHT_TIMER || pSoundInfo->SoundMode == SOUNDING_AUTO_HT_TIMER)\r
+       {\r
+               HAL_HW_TIMER_TYPE TimerType = HAL_TIMER_TXBF;\r
+               u4Byte  val = (pSoundInfo->SoundPeriod | (TimerType<<16));\r
+\r
+               //HW timer stop: All IC has the same setting\r
+               Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_HW_REG_TIMER_STOP,  (pu1Byte)(&TimerType));\r
+               //ODM_Write1Byte(pDM_Odm, 0x15F, 0);\r
+               //HW timer init: All IC has the same setting, but 92E & 8812A only write 2 bytes\r
+               Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_HW_REG_TIMER_INIT,  (pu1Byte)(&val));\r
+               //ODM_Write1Byte(pDM_Odm, 0x164, 1);\r
+               //ODM_Write4Byte(pDM_Odm, 0x15C, val);\r
+               //HW timer start: All IC has the same setting\r
+               Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_HW_REG_TIMER_START,  (pu1Byte)(&TimerType));\r
+               //ODM_Write1Byte(pDM_Odm, 0x15F, 0x5);\r
+       }       \r
+       else if(pSoundInfo->SoundMode == SOUNDING_FW_VHT_TIMER || pSoundInfo->SoundMode == SOUNDING_FW_HT_TIMER)\r
+       {\r
+               Ret = BeamformingStart_FW(Adapter, pSoundInfo->SoundIdx);\r
+       }\r
+       else\r
+               Ret = FALSE;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: SoundIdx=%d, SoundMode=%d, SoundBW=%d, SoundPeriod=%d\n", __FUNCTION__, \r
+                       pSoundInfo->SoundIdx, pSoundInfo->SoundMode, pSoundInfo->SoundBW, pSoundInfo->SoundPeriod));\r
+\r
+       return Ret;\r
+}\r
+\r
+// Used after Beamforming_Leave, and will clear the setting of the "already deleted" entry\r
+VOID\r
+phydm_beamforming_EndPeriod_SW(\r
+       IN      PVOID                           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PADAPTER                                        Adapter = pDM_Odm->Adapter;\r
+       u1Byte                                          Idx = 0;\r
+       PRT_BEAMFORMING_ENTRY           pBeamformEntry;\r
+       PRT_BEAMFORMING_INFO            pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+       PRT_SOUNDING_INFO                       pSoundInfo = &(pBeamInfo->SoundingInfo);\r
+       \r
+       HAL_HW_TIMER_TYPE TimerType = HAL_TIMER_TXBF;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       if(pSoundInfo->SoundMode == SOUNDING_SW_VHT_TIMER || pSoundInfo->SoundMode == SOUNDING_SW_HT_TIMER)\r
+               ODM_CancelTimer(pDM_Odm, &pBeamInfo->BeamformingTimer);\r
+       else if(        pSoundInfo->SoundMode == SOUNDING_HW_VHT_TIMER || pSoundInfo->SoundMode == SOUNDING_HW_HT_TIMER ||\r
+                               pSoundInfo->SoundMode == SOUNDING_AUTO_VHT_TIMER || pSoundInfo->SoundMode == SOUNDING_AUTO_HT_TIMER)\r
+               //HW timer stop: All IC has the same setting\r
+               Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_HW_REG_TIMER_STOP,  (pu1Byte)(&TimerType));\r
+               //ODM_Write1Byte(pDM_Odm, 0x15F, 0);\r
+}\r
+\r
+VOID\r
+phydm_beamforming_EndPeriod_FW(\r
+       IN      PVOID                           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+       phydm_Beamforming_End_FW(pDM_Odm);\r
+}\r
+\r
+\r
+\r
+VOID \r
+phydm_beamforming_ClearEntry_SW(\r
+       IN      PVOID                   pDM_VOID,\r
+       BOOLEAN                         IsDelete,\r
+       u1Byte                          DeleteIdx\r
+       )\r
+{\r
+       u1Byte                                          Idx = 0;\r
+       PRT_BEAMFORMING_ENTRY           pBeamformEntry = NULL;\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PRT_BEAMFORMING_INFO            pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       if(IsDelete)\r
+       {\r
+               if(DeleteIdx<BEAMFORMEE_ENTRY_NUM)\r
+               {\r
+                       pBeamformEntry = pBeamInfo->BeamformeeEntry + DeleteIdx;\r
+\r
+                       if(!((!pBeamformEntry->bUsed) && pBeamformEntry->bSound))\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: SW DeleteIdx is wrong!!!!! \n",__FUNCTION__));\r
+                               return;\r
+                       }\r
+               }\r
+\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: SW delete BFee entry %d \n", __FUNCTION__, DeleteIdx));\r
+               if(pBeamformEntry->BeamformEntryState == BEAMFORMING_ENTRY_STATE_PROGRESSING)\r
+               {\r
+                       pBeamformEntry->bBeamformingInProgress = FALSE;\r
+                       pBeamformEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_UNINITIALIZE;\r
+               }\r
+               else if(pBeamformEntry->BeamformEntryState == BEAMFORMING_ENTRY_STATE_PROGRESSED)\r
+               {\r
+                       pBeamformEntry->BeamformEntryState  = BEAMFORMING_ENTRY_STATE_UNINITIALIZE;\r
+                       HalComTxbf_Set(pDM_Odm->Adapter, TXBF_SET_SOUNDING_STATUS, (pu1Byte)&DeleteIdx);\r
+               }\r
+\r
+               pBeamformEntry->bSound = FALSE;\r
+       }\r
+       else\r
+       {\r
+               for(Idx = 0; Idx < BEAMFORMEE_ENTRY_NUM; Idx++)\r
+               {\r
+                       pBeamformEntry = pBeamInfo->BeamformeeEntry+Idx;\r
+\r
+                       // Used after bSounding=RESET, and will clear the setting of "ever sounded" entry, which is not necessarily be deleted.\r
+                       // This function is mainly used in case "BeamOidInfo.SoundOidMode == SOUNDING_STOP_All_TIMER".\r
+                       // However, setting oid doesn't delete entries (bUsed is still TRUE), new entries may fail to be added in.\r
+               \r
+                       if(pBeamformEntry->bSound)\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: SW reset BFee entry %d \n", __FUNCTION__, Idx));\r
+                               /*      \r
+                               *       If End procedure is \r
+                               *       1. Between (Send NDPA, C2H packet return), reset state to initialized.\r
+                               *       After C2H packet return , status bit will be set to zero. \r
+                               *\r
+                               *       2. After C2H packet, then reset state to initialized and clear status bit.\r
+                               */\r
+\r
+                               if(pBeamformEntry->BeamformEntryState == BEAMFORMING_ENTRY_STATE_PROGRESSING)\r
+                                       phydm_Beamforming_End_SW(pDM_Odm, 0);\r
+                               else if(pBeamformEntry->BeamformEntryState == BEAMFORMING_ENTRY_STATE_PROGRESSED)\r
+                               {\r
+                                       pBeamformEntry->BeamformEntryState  = BEAMFORMING_ENTRY_STATE_INITIALIZED;\r
+                                       HalComTxbf_Set(pDM_Odm->Adapter, TXBF_SET_SOUNDING_STATUS, (pu1Byte)&Idx);\r
+                               }\r
+\r
+                               pBeamformEntry->bSound = FALSE;\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+VOID\r
+phydm_beamforming_ClearEntry_FW(\r
+       IN      PVOID                   pDM_VOID,\r
+       BOOLEAN                         IsDelete,\r
+       u1Byte                          DeleteIdx\r
+       )\r
+{\r
+       u1Byte                                          Idx = 0;\r
+       PRT_BEAMFORMING_ENTRY           pBeamformEntry = NULL;\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PRT_BEAMFORMING_INFO            pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       if(IsDelete)\r
+       {\r
+               if(DeleteIdx<BEAMFORMEE_ENTRY_NUM)\r
+               {\r
+                       pBeamformEntry = pBeamInfo->BeamformeeEntry + DeleteIdx;\r
+\r
+                       if(!((!pBeamformEntry->bUsed) && pBeamformEntry->bSound))\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: FW DeleteIdx is wrong!!!!! \n",__FUNCTION__));\r
+                               return;\r
+                       }\r
+               }\r
+       \r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: FW delete BFee entry %d \n", __FUNCTION__, DeleteIdx));\r
+               pBeamformEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_UNINITIALIZE;\r
+               pBeamformEntry->bSound = FALSE;\r
+       }\r
+       else\r
+       {\r
+               for(Idx = 0; Idx < BEAMFORMEE_ENTRY_NUM; Idx++)\r
+               {\r
+                       pBeamformEntry = pBeamInfo->BeamformeeEntry+Idx;\r
+\r
+                       // Used after bSounding=RESET, and will clear the setting of "ever sounded" entry, which is not necessarily be deleted.\r
+                       // This function is mainly used in case "BeamOidInfo.SoundOidMode == SOUNDING_STOP_All_TIMER".\r
+                       // However, setting oid doesn't delete entries (bUsed is still TRUE), new entries may fail to be added in.\r
+               \r
+                       if(pBeamformEntry->bSound)\r
+                       {\r
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: FW reset BFee entry %d \n", __FUNCTION__, Idx));\r
+                               /*      \r
+                               *       If End procedure is \r
+                               *       1. Between (Send NDPA, C2H packet return), reset state to initialized.\r
+                               *       After C2H packet return , status bit will be set to zero. \r
+                               *\r
+                               *       2. After C2H packet, then reset state to initialized and clear status bit.\r
+                               */\r
+                               \r
+                               pBeamformEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_INITIALIZED;\r
+                               pBeamformEntry->bSound = FALSE;\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+/*\r
+*      Called : \r
+*      1. Add and delete entry : Beamforming_Enter/Beamforming_Leave\r
+*      2. FW trigger :  Beamforming_SetTxBFen\r
+*      3. Set OID_RT_BEAMFORMING_PERIOD : BeamformingControl_V2\r
+*/\r
+VOID\r
+phydm_Beamforming_Notify(\r
+       IN      PVOID                   pDM_VOID\r
+       )\r
+{\r
+       u1Byte                                          Idx=BEAMFORMEE_ENTRY_NUM;\r
+       BEAMFORMING_NOTIFY_STATE        bSounding = BEAMFORMING_NOTIFY_NONE;\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PRT_BEAMFORMING_INFO            pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+       PRT_SOUNDING_INFO                       pSoundInfo = &(pBeamInfo->SoundingInfo);\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       bSounding = phydm_beamfomring_bSounding(pDM_Odm, pBeamInfo, &Idx);\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s, Before notify, BeamformState=%d, bSounding=%d, Idx=%d\n", __FUNCTION__, pBeamInfo->BeamformState, bSounding, Idx));\r
+       \r
+       if(pBeamInfo->BeamformState == BEAMFORMING_STATE_END)\r
+       {\r
+               if(bSounding==BEAMFORMING_NOTIFY_ADD)\r
+               {       \r
+                       if(phydm_beamforming_StartPeriod(pDM_Odm) == TRUE)\r
+                               pBeamInfo->BeamformState = BEAMFORMING_STATE_START_1BFee;\r
+               }\r
+       }\r
+       else if(pBeamInfo->BeamformState == BEAMFORMING_STATE_START_1BFee)\r
+       {\r
+               if(bSounding==BEAMFORMING_NOTIFY_ADD)\r
+               {\r
+                       if(phydm_beamforming_StartPeriod(pDM_Odm) == TRUE)\r
+                               pBeamInfo->BeamformState = BEAMFORMING_STATE_START_2BFee;\r
+                       else\r
+                               pBeamInfo->BeamformState = BEAMFORMING_STATE_START_1BFee;\r
+               }\r
+               else if(bSounding==BEAMFORMING_NOTIFY_DELETE)\r
+               {\r
+                       if(pSoundInfo->SoundMode == SOUNDING_FW_HT_TIMER || pSoundInfo->SoundMode == SOUNDING_FW_VHT_TIMER)\r
+                       {\r
+                               phydm_beamforming_ClearEntry_FW(pDM_Odm, TRUE, Idx);            // Modified by Jeffery @ 2014-11-04\r
+                               phydm_beamforming_EndPeriod_FW(pDM_Odm);\r
+                       }\r
+                       else\r
+                       {\r
+                               phydm_beamforming_ClearEntry_SW(pDM_Odm, TRUE, Idx);            // Modified by Jeffery @ 2014-11-04\r
+                               phydm_beamforming_EndPeriod_SW(pDM_Odm);\r
+                       }\r
+\r
+                       pBeamInfo->BeamformState = BEAMFORMING_STATE_END;\r
+               }\r
+               else if(bSounding==BEAMFORMING_NOTIFY_RESET)\r
+               {\r
+                       if(pSoundInfo->SoundMode == SOUNDING_FW_HT_TIMER || pSoundInfo->SoundMode == SOUNDING_FW_VHT_TIMER)\r
+                       {       \r
+                               phydm_beamforming_ClearEntry_FW(pDM_Odm, FALSE, Idx);           // Modified by Jeffery @ 2014-11-04\r
+                               phydm_beamforming_EndPeriod_FW(pDM_Odm);\r
+                       }\r
+                       else\r
+                       {\r
+                               phydm_beamforming_ClearEntry_SW(pDM_Odm, FALSE, Idx);           // Modified by Jeffery @ 2014-11-04\r
+                               phydm_beamforming_EndPeriod_SW(pDM_Odm);\r
+                       }\r
+                       \r
+                       pBeamInfo->BeamformState = BEAMFORMING_STATE_END;\r
+               }\r
+       }\r
+       else if(pBeamInfo->BeamformState == BEAMFORMING_STATE_START_2BFee)\r
+       {\r
+               if(bSounding==BEAMFORMING_NOTIFY_ADD)\r
+               {\r
+                       RT_ASSERT(FALSE, ("[David]@%s: Should be blocked at InitEntry!!!!! \n", __FUNCTION__));\r
+               }\r
+               else if(bSounding==BEAMFORMING_NOTIFY_DELETE)\r
+               {\r
+                       if(pSoundInfo->SoundMode == SOUNDING_FW_HT_TIMER || pSoundInfo->SoundMode == SOUNDING_FW_VHT_TIMER)\r
+                       {\r
+                               phydm_beamforming_ClearEntry_FW(pDM_Odm, TRUE, Idx);            // Modified by Jeffery @ 2014-11-04\r
+                               phydm_beamforming_EndPeriod_FW(pDM_Odm);\r
+                       }\r
+                       else\r
+                       {\r
+                               // For 2->1 entry, we should not cancel SW timer\r
+                               phydm_beamforming_ClearEntry_SW(pDM_Odm, TRUE, Idx);\r
+                       }\r
+               \r
+                       pBeamInfo->BeamformState = BEAMFORMING_STATE_START_1BFee;\r
+               }\r
+               else if(bSounding==BEAMFORMING_NOTIFY_RESET)\r
+               {\r
+                       if(pSoundInfo->SoundMode == SOUNDING_FW_HT_TIMER || pSoundInfo->SoundMode == SOUNDING_FW_VHT_TIMER)\r
+                       {\r
+                               phydm_beamforming_ClearEntry_FW(pDM_Odm, FALSE, Idx);           // Modified by Jeffery @ 2014-11-04\r
+                               phydm_beamforming_EndPeriod_FW(pDM_Odm);\r
+                       }\r
+                       else\r
+                       {\r
+                               phydm_beamforming_ClearEntry_SW(pDM_Odm, FALSE, Idx);           // Modified by Jeffery @ 2014-11-04\r
+                               phydm_beamforming_EndPeriod_SW(pDM_Odm);\r
+                       }\r
+                       \r
+                       pBeamInfo->BeamformState = BEAMFORMING_STATE_END;\r
+               }\r
+       }\r
+       else\r
+               RT_ASSERT(FALSE, ("%s BeamformState %d\n", __FUNCTION__, pBeamInfo->BeamformState));\r
+       \r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s End, after Notify, BeamformState =%d\n", __FUNCTION__, pBeamInfo->BeamformState));\r
+}\r
+\r
+\r
+\r
+BOOLEAN\r
+Beamforming_InitEntry(\r
+       PADAPTER                Adapter,\r
+       PRT_WLAN_STA    pSTA,\r
+       pu1Byte                 BFerBFeeIdx\r
+       )\r
+{\r
+       PMGNT_INFO                                      pMgntInfo = &Adapter->MgntInfo;\r
+       PRT_HIGH_THROUGHPUT                     pHTInfo = GET_HT_INFO(pMgntInfo);\r
+       PRT_VERY_HIGH_THROUGHPUT        pVHTInfo = GET_VHT_INFO(pMgntInfo);\r
+       PRT_BEAMFORMING_ENTRY           pBeamformEntry = NULL;\r
+       PRT_BEAMFORMER_ENTRY            pBeamformerEntry = NULL;\r
+       pu1Byte                                         RA; \r
+       u2Byte                                          AID, MacID;\r
+       WIRELESS_MODE                           WirelessMode;\r
+       CHANNEL_WIDTH                           BW = CHANNEL_WIDTH_20;\r
+       BEAMFORMING_CAP                         BeamformCap = BEAMFORMING_CAP_NONE;\r
+       u1Byte                                          BFerIdx=0xF, BFeeIdx=0xF;\r
+       u1Byte                                          NumofSoundingDim = 0, CompSteeringNumofBFer = 0;\r
+       HAL_DATA_TYPE                           *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                                       pDM_Odm = &pHalData->DM_OutSrc;\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__));\r
+\r
+       // The current setting does not support Beaforming\r
+       if(BEAMFORMING_CAP_NONE == pHTInfo->HtBeamformCap && BEAMFORMING_CAP_NONE == pVHTInfo->VhtBeamformCap)\r
+       {\r
+               RT_DISP(FBEAM, FBEAM_ERROR, ("The configuration disabled Beamforming! Skip...\n"));             \r
+               return FALSE;\r
+       }\r
+\r
+       // IBSS, AP mode\r
+       if(pSTA != NULL)\r
+       {\r
+               AID = pSTA->AID;\r
+               RA = pSTA->MacAddr;\r
+               MacID = pSTA->AssociatedMacId;\r
+               WirelessMode = pSTA->WirelessMode;\r
+               BW = pSTA->BandWidth;\r
+       }\r
+       else    // Client mode\r
+       {\r
+               AID = pMgntInfo->mAId;\r
+               RA = pMgntInfo->Bssid;\r
+               MacID = pMgntInfo->mMacId;\r
+               WirelessMode = pMgntInfo->dot11CurrentWirelessMode;\r
+               BW = pMgntInfo->dot11CurrentChannelBandWidth;\r
+       }\r
+\r
+       if(WirelessMode < WIRELESS_MODE_N_24G)\r
+               return FALSE;\r
+       else \r
+       {\r
+               //3 // HT\r
+               u1Byte CurBeamform; \r
+               u2Byte CurBeamformVHT;\r
+\r
+               if(pSTA != NULL)\r
+                       CurBeamform = pSTA->HTInfo.HtCurBeamform;\r
+               else\r
+                       CurBeamform = pHTInfo->HtCurBeamform;\r
+\r
+               // We are Beamformee because the STA is Beamformer\r
+               if(TEST_FLAG(CurBeamform, BEAMFORMING_HT_BEAMFORMER_ENABLE))\r
+               {\r
+                       BeamformCap =(BEAMFORMING_CAP)(BeamformCap |BEAMFORMEE_CAP_HT_EXPLICIT);\r
+                       NumofSoundingDim = (CurBeamform&BEAMFORMING_HT_BEAMFORMEE_CHNL_EST_CAP)>>6;\r
+               }\r
+\r
+               // We are Beamformer because the STA is Beamformee\r
+               if(     TEST_FLAG(CurBeamform, BEAMFORMING_HT_BEAMFORMEE_ENABLE) ||\r
+                       TEST_FLAG(pHTInfo->HtBeamformCap, BEAMFORMING_HT_BEAMFORMER_TEST))\r
+               {\r
+                       BeamformCap =(BEAMFORMING_CAP)(BeamformCap | BEAMFORMER_CAP_HT_EXPLICIT);\r
+                       CompSteeringNumofBFer = (CurBeamform & BEAMFORMING_HT_BEAMFORMER_STEER_NUM)>>4;\r
+               }\r
+\r
+               RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s, CurBeamform=0x%X, BeamformCap=0x%X\n", __FUNCTION__, CurBeamform, BeamformCap));\r
+               RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s, NumofSoundingDim=%d, CompSteeringNumofBFer=%d\n", __FUNCTION__, NumofSoundingDim, CompSteeringNumofBFer));\r
+\r
+\r
+               if(WirelessMode == WIRELESS_MODE_AC_5G || WirelessMode == WIRELESS_MODE_AC_24G)\r
+               {\r
+                       //3 // VHT\r
+                       if(pSTA != NULL)\r
+                               CurBeamformVHT = pSTA->VHTInfo.VhtCurBeamform;\r
+                       else\r
+                               CurBeamformVHT = pVHTInfo->VhtCurBeamform;                      \r
+\r
+                       // We are Beamformee because the STA is Beamformer\r
+                       if(TEST_FLAG(CurBeamformVHT, BEAMFORMING_VHT_BEAMFORMER_ENABLE))\r
+                       {\r
+                               BeamformCap =(BEAMFORMING_CAP)(BeamformCap |BEAMFORMEE_CAP_VHT_SU);\r
+                               NumofSoundingDim = (CurBeamformVHT & BEAMFORMING_VHT_BEAMFORMEE_SOUND_DIM)>>12;\r
+                       }\r
+                       // We are Beamformer because the STA is Beamformee\r
+                       if(     TEST_FLAG(CurBeamformVHT, BEAMFORMING_VHT_BEAMFORMEE_ENABLE) ||\r
+                               TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_BEAMFORMER_TEST))\r
+                       {\r
+                               BeamformCap =(BEAMFORMING_CAP)(BeamformCap |BEAMFORMER_CAP_VHT_SU);\r
+                               CompSteeringNumofBFer = (CurBeamformVHT & BEAMFORMING_VHT_BEAMFORMER_STS_CAP)>>8;\r
+                       }\r
+\r
+                       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s, CurBeamformVHT=0x%X, BeamformCap=0x%X\n", __FUNCTION__, CurBeamformVHT, BeamformCap));\r
+                       RT_DISP(FBEAM, FBEAM_FUN, ("%s, NumofSoundingDim=0x%X, CompSteeringNumofBFer=0x%X\n", __FUNCTION__, NumofSoundingDim, CompSteeringNumofBFer));\r
+                       \r
+               }\r
+       }\r
+\r
+\r
+       if(BeamformCap == BEAMFORMING_CAP_NONE)\r
+               return FALSE;\r
+       \r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s, Self BF Entry Cap = 0x%02X\n", __FUNCTION__, BeamformCap));\r
+\r
+       // We are BFee, so the entry is BFer\r
+       if((BeamformCap & BEAMFORMEE_CAP_VHT_SU) || (BeamformCap & BEAMFORMEE_CAP_HT_EXPLICIT))\r
+       {\r
+               pBeamformerEntry = phydm_Beamforming_GetBFerEntryByAddr(pDM_Odm, RA, &BFerIdx);\r
+               \r
+               if(pBeamformerEntry == NULL)\r
+               {\r
+                       pBeamformerEntry = Beamforming_AddBFerEntry(Adapter, RA, AID, BeamformCap, NumofSoundingDim ,&BFerIdx);\r
+\r
+                       if(pBeamformerEntry == NULL)\r
+                               RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s: Not enough BFer entry!!!!! \n", __FUNCTION__));\r
+               }       \r
+       }\r
+\r
+       // We are BFer, so the entry is BFee\r
+       if((BeamformCap & BEAMFORMER_CAP_VHT_SU) || (BeamformCap & BEAMFORMER_CAP_HT_EXPLICIT))\r
+       {\r
+               pBeamformEntry = phydm_Beamforming_GetBFeeEntryByAddr(pDM_Odm, RA, &BFeeIdx);\r
+\r
+               // ¦pªGBFeeIdx = 0xF «h¥Nªí¥Ø«eentry·í¤¤¨S¦³¬Û¦PªºMACID¦b¤º\r
+               RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s: Get BFee entry 0x%X by address \n", __FUNCTION__, BFeeIdx));\r
+               if(pBeamformEntry == NULL)\r
+               {\r
+                       pBeamformEntry = Beamforming_AddBFeeEntry(Adapter, RA, AID, MacID, BW, BeamformCap, NumofSoundingDim, CompSteeringNumofBFer, &BFeeIdx);\r
+\r
+                       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s: Add BFee entry %d \n", __FUNCTION__, BFeeIdx));\r
+\r
+                       if(pBeamformEntry == NULL)\r
+                               return FALSE;\r
+                       else\r
+                               pBeamformEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_INITIALIZEING;\r
+               }\r
+               else\r
+               {\r
+                       // Entry has been created. If entry is initialing or progressing then errors occur.\r
+                       if(     pBeamformEntry->BeamformEntryState != BEAMFORMING_ENTRY_STATE_INITIALIZED && \r
+                               pBeamformEntry->BeamformEntryState != BEAMFORMING_ENTRY_STATE_PROGRESSED)\r
+                       {\r
+                               RT_ASSERT(TRUE, ("Error State of Beamforming"));\r
+                               return FALSE;\r
+                       }       \r
+                       else\r
+                               pBeamformEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_INITIALIZEING;\r
+               }\r
+\r
+               pBeamformEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_INITIALIZED;\r
+\r
+       }\r
+\r
+       *BFerBFeeIdx = (BFerIdx<<4) | BFeeIdx;\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s End: BFerIdx=0x%X, BFeeIdx=0x%X, BFerBFeeIdx=0x%X \n", __FUNCTION__, BFerIdx, BFeeIdx, *BFerBFeeIdx));\r
+\r
+       return TRUE;\r
+}\r
+\r
+\r
+VOID\r
+Beamforming_DeInitEntry(\r
+       PADAPTER                Adapter,\r
+       pu1Byte                 RA\r
+       )\r
+{\r
+       u1Byte                                  Idx = 0;\r
+       PMGNT_INFO                              pMgntInfo = &(Adapter->MgntInfo);\r
+\r
+       if(Beamforming_RemoveEntry(Adapter, RA, &Idx) == TRUE)\r
+       {\r
+               HalComTxbf_Set(Adapter, TXBF_SET_SOUNDING_LEAVE, (pu1Byte)&Idx);\r
+       }\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s End, Idx = 0x%X\n", __FUNCTION__, Idx));\r
+}\r
+\r
+\r
+VOID\r
+Beamforming_Reset(\r
+       PADAPTER                Adapter\r
+       )\r
+{\r
+       u1Byte                                  Idx = 0;\r
+       PMGNT_INFO                              pMgntInfo = &(Adapter->MgntInfo);\r
+       PRT_BEAMFORMING_INFO    pBeamformingInfo = GET_BEAMFORM_INFO(Adapter);\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+\r
+       for(Idx = 0; Idx < BEAMFORMEE_ENTRY_NUM; Idx++)\r
+       {\r
+               if(pBeamformingInfo->BeamformeeEntry[Idx].bUsed == TRUE)\r
+               {\r
+                       pBeamformingInfo->BeamformeeEntry[Idx].bUsed = FALSE;\r
+                       pBeamformingInfo->BeamformeeEntry[Idx].BeamformEntryCap = BEAMFORMING_CAP_NONE;\r
+                       //pBeamformingInfo->BeamformeeEntry[Idx].BeamformEntryState = BEAMFORMING_ENTRY_STATE_UNINITIALIZE;\r
+                       //-@ Modified by David\r
+                       pBeamformingInfo->BeamformeeEntry[Idx].bBeamformingInProgress = FALSE;\r
+                       HalComTxbf_Set(Adapter, TXBF_SET_SOUNDING_LEAVE, (pu1Byte)&Idx);\r
+               }\r
+       }\r
+\r
+       for(Idx = 0; Idx < BEAMFORMER_ENTRY_NUM; Idx++)\r
+       {\r
+               pBeamformingInfo->BeamformerEntry[Idx].bUsed = FALSE;\r
+               RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s, Idx=%d, bUsed=%d \n", __FUNCTION__, Idx, pBeamformingInfo->BeamformerEntry[Idx].bUsed));\r
+       }\r
+\r
+}\r
+\r
+\r
+BOOLEAN\r
+BeamformingStart_V1(\r
+       PADAPTER                Adapter,\r
+       pu1Byte                 RA,\r
+       BOOLEAN                 Mode,\r
+       CHANNEL_WIDTH   BW,\r
+       u1Byte                  Rate\r
+       )\r
+{\r
+       u1Byte                                  Idx = 0;\r
+       PRT_BEAMFORMING_ENTRY   pEntry;\r
+       BOOLEAN                                 ret = TRUE;\r
+       PMGNT_INFO                              pMgntInfo = &(Adapter->MgntInfo);\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = GET_BEAMFORM_INFO(Adapter);\r
+       HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                               pDM_Odm = &pHalData->DM_OutSrc;\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+\r
+       pEntry = phydm_Beamforming_GetBFeeEntryByAddr(pDM_Odm, RA, &Idx);\r
+\r
+       if(pEntry->bUsed == FALSE)\r
+       {\r
+               RT_DISP_ADDR(FBEAM, FBEAM_ERROR, ("Skip Beamforming, no entry for addr = "), RA);\r
+               pEntry->bBeamformingInProgress = FALSE;\r
+               return FALSE;\r
+       }\r
+       else\r
+       {\r
+                if(pEntry->bBeamformingInProgress)\r
+                {\r
+                       RT_DISP(FBEAM, FBEAM_ERROR, ("bBeamformingInProgress, skip...\n"));\r
+                       return FALSE;\r
+                }\r
+\r
+               pEntry->bBeamformingInProgress = TRUE;\r
+\r
+               if(Mode == 1)\r
+               {       \r
+                       if(!(pEntry->BeamformEntryCap & BEAMFORMER_CAP_HT_EXPLICIT))\r
+                       {\r
+                               RT_DISP_ADDR(FBEAM, FBEAM_ERROR, ("Skip Beamforming, entry without BEAMFORMEE_CAP_HT_EXPLICIT for addr = "), RA);\r
+                               pEntry->bBeamformingInProgress = FALSE;\r
+                               return FALSE;\r
+                       }\r
+               }\r
+               else if(Mode == 0)\r
+               {\r
+                       if(!(pEntry->BeamformEntryCap & BEAMFORMER_CAP_VHT_SU))\r
+                       {\r
+                               RT_DISP_ADDR(FBEAM, FBEAM_ERROR, ("Skip Beamforming, entry without BEAMFORMEE_CAP_VHT_SU for addr = "), RA);\r
+                               pEntry->bBeamformingInProgress = FALSE;\r
+                               return FALSE;\r
+                       }\r
+\r
+               }\r
+               if(     pEntry->BeamformEntryState != BEAMFORMING_ENTRY_STATE_INITIALIZED &&\r
+                       pEntry->BeamformEntryState != BEAMFORMING_ENTRY_STATE_PROGRESSED)\r
+               {\r
+                       RT_DISP_ADDR(FBEAM, FBEAM_ERROR, ("Skip Beamforming, state without (BEAMFORMING_STATE_INITIALIZED | BEAMFORMING_STATE_PROGRESSED) for addr = "), RA);\r
+                       pEntry->bBeamformingInProgress = FALSE;\r
+                       return FALSE;\r
+               }       \r
+               else\r
+               {\r
+                       pEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_PROGRESSING;\r
+                       pEntry->bSound = TRUE;\r
+               }\r
+       }\r
+\r
+       pEntry->SoundBW = BW;\r
+       pBeamInfo->BeamformeeCurIdx = Idx;\r
+       phydm_Beamforming_NDPARate(pDM_Odm, BW, Rate);\r
+       HalComTxbf_Set(Adapter, TXBF_SET_SOUNDING_STATUS, (pu1Byte)&Idx);\r
+\r
+       if(Mode == 1)\r
+               ret = Beamforming_SendHTNDPAPacket(Adapter,RA, BW, NORMAL_QUEUE);       \r
+       else\r
+               ret = Beamforming_SendVHTNDPAPacket(Adapter,RA, pEntry->AID, BW, NORMAL_QUEUE);\r
+\r
+       if(ret == FALSE)\r
+       {\r
+               RT_DISP_ADDR(FBEAM, FBEAM_ERROR, ("Beamforming_RemoveEntry because of failure sending NDPA for addr = "), RA);\r
+/*             Beamforming_RemoveEntry(Adapter, RA, &Idx);*/\r
+               Beamforming_Leave(Adapter, RA);\r
+               pEntry->bBeamformingInProgress = FALSE;\r
+               return FALSE;\r
+       }\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("%s  Idx %d\n", __FUNCTION__, Idx));\r
+       return TRUE;\r
+}\r
+\r
+\r
+BOOLEAN\r
+BeamformingStart_SW(\r
+       PADAPTER                Adapter,\r
+       u1Byte                  Idx,\r
+       u1Byte                  Mode, \r
+       CHANNEL_WIDTH   BW\r
+       )\r
+{\r
+       pu1Byte                                 RA = NULL;\r
+       PRT_BEAMFORMING_ENTRY   pEntry;\r
+       BOOLEAN                                 ret = TRUE;\r
+       PMGNT_INFO                              pMgntInfo = &(Adapter->MgntInfo);\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = GET_BEAMFORM_INFO(Adapter);\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+\r
+       pEntry = &(pBeamInfo->BeamformeeEntry[Idx]);\r
+\r
+       if(pEntry->bUsed == FALSE)\r
+       {\r
+               RT_DISP(FBEAM, FBEAM_ERROR, ("Skip Beamforming, no entry for Idx =%d\n", Idx));\r
+               pEntry->bBeamformingInProgress = FALSE;\r
+               return FALSE;\r
+       }\r
+       else\r
+       {\r
+                if(pEntry->bBeamformingInProgress)\r
+                {\r
+                       RT_DISP(FBEAM, FBEAM_ERROR, ("bBeamformingInProgress, skip...\n"));\r
+                       return FALSE;\r
+                }\r
+\r
+               pEntry->bBeamformingInProgress = TRUE;\r
+               \r
+               RA = pEntry->MacAddr;\r
+               \r
+               if(Mode == SOUNDING_SW_HT_TIMER || Mode == SOUNDING_HW_HT_TIMER || Mode == SOUNDING_AUTO_HT_TIMER)\r
+               {       \r
+                       if(!(pEntry->BeamformEntryCap & BEAMFORMER_CAP_HT_EXPLICIT))\r
+                       {\r
+                               RT_DISP_ADDR(FBEAM, FBEAM_ERROR, ("Skip Beamforming, entry without BEAMFORMEE_CAP_HT_EXPLICIT for addr = "), RA);\r
+                               pEntry->bBeamformingInProgress = FALSE;\r
+                               return FALSE;\r
+                       }\r
+               }\r
+               else if(Mode == SOUNDING_SW_VHT_TIMER || Mode == SOUNDING_HW_VHT_TIMER || Mode == SOUNDING_AUTO_VHT_TIMER)\r
+               {\r
+                       if(!(pEntry->BeamformEntryCap & BEAMFORMER_CAP_VHT_SU))\r
+                       {\r
+                               RT_DISP_ADDR(FBEAM, FBEAM_ERROR, ("Skip Beamforming, entry without BEAMFORMEE_CAP_VHT_SU for addr = "), RA);\r
+                               pEntry->bBeamformingInProgress = FALSE;\r
+                               return FALSE;\r
+                       }\r
+\r
+               }\r
+               if(     pEntry->BeamformEntryState != BEAMFORMING_ENTRY_STATE_INITIALIZED &&\r
+                       pEntry->BeamformEntryState != BEAMFORMING_ENTRY_STATE_PROGRESSED)\r
+               {\r
+                       RT_DISP_ADDR(FBEAM, FBEAM_ERROR, ("Skip Beamforming, state without (BEAMFORMING_STATE_INITIALIZED | BEAMFORMING_STATE_PROGRESSED) for addr = "), RA);\r
+                       pEntry->bBeamformingInProgress = FALSE;\r
+                       return FALSE;\r
+               }       \r
+               else\r
+               {\r
+                       pEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_PROGRESSING;\r
+                       pEntry->bSound = TRUE;\r
+               }\r
+       }\r
+\r
+       pBeamInfo->BeamformeeCurIdx = Idx;\r
+//2014.12.22 Luke: Need to be checked\r
+       /*GET_TXBF_INFO(Adapter)->fTxbfSet(Adapter, TXBF_SET_SOUNDING_STATUS, (pu1Byte)&Idx);*/\r
+\r
+       if(Mode == SOUNDING_SW_HT_TIMER || Mode == SOUNDING_HW_HT_TIMER || Mode == SOUNDING_AUTO_HT_TIMER)\r
+               ret = Beamforming_SendHTNDPAPacket(Adapter,RA, BW, NORMAL_QUEUE);       \r
+       else\r
+               ret = Beamforming_SendVHTNDPAPacket(Adapter,RA, pEntry->AID, BW, NORMAL_QUEUE);\r
+\r
+       if(ret == FALSE)\r
+       {\r
+               RT_DISP_ADDR(FBEAM, FBEAM_ERROR, ("Beamforming_RemoveEntry because of failure sending NDPA for addr = "), RA);\r
+               Beamforming_Leave(Adapter, RA);\r
+               pEntry->bBeamformingInProgress = FALSE;\r
+               return FALSE;\r
+       }\r
+\r
+       if(Mode == SOUNDING_SW_HT_TIMER || Mode == SOUNDING_HW_HT_TIMER || Mode == SOUNDING_AUTO_HT_TIMER)\r
+       {\r
+               RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s: Send HT NDPA for current idx=%d\n", __FUNCTION__, Idx));\r
+       }\r
+       else\r
+       {\r
+               RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s: Send VHT NDPA for current idx=%d\n", __FUNCTION__, Idx));\r
+       }\r
+       \r
+       return TRUE;\r
+}\r
+\r
+\r
+BOOLEAN\r
+BeamformingStart_FW(\r
+       PADAPTER                Adapter,\r
+       u1Byte                  Idx\r
+       )\r
+{\r
+       pu1Byte                                 RA = NULL;\r
+       PRT_BEAMFORMING_ENTRY   pEntry;\r
+       BOOLEAN                                 ret = TRUE;\r
+       PMGNT_INFO                              pMgntInfo = &(Adapter->MgntInfo);\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = GET_BEAMFORM_INFO(Adapter);\r
+\r
+       pEntry = &(pBeamInfo->BeamformeeEntry[Idx]);\r
+       if(pEntry->bUsed == FALSE)\r
+       {\r
+               RT_DISP(FBEAM, FBEAM_ERROR, ("Skip Beamforming, no entry for Idx =%d\n", Idx));\r
+               return FALSE;\r
+       }\r
+\r
+       pEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_PROGRESSING;\r
+       pEntry->bSound = TRUE;\r
+       HalComTxbf_Set(Adapter, TXBF_SET_SOUNDING_FW_NDPA, (pu1Byte)&Idx);\r
+       \r
+       RT_DISP(FBEAM, FBEAM_FUN, ("@%s End, Idx=0x%X \n", __FUNCTION__, Idx));\r
+       return TRUE;\r
+}\r
+\r
+VOID\r
+Beamforming_CheckSoundingSuccess(\r
+       PADAPTER                Adapter,\r
+       BOOLEAN                 Status  \r
+)\r
+{\r
+       PMGNT_INFO                              pMgntInfo = &(Adapter->MgntInfo);\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = GET_BEAMFORM_INFO(Adapter);\r
+       PRT_BEAMFORMING_ENTRY   pEntry = &(pBeamInfo->BeamformeeEntry[pBeamInfo->BeamformeeCurIdx]);\r
+       HAL_DATA_TYPE                           *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                                       pDM_Odm = &pHalData->DM_OutSrc;\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+\r
+       if(Status == 1)\r
+       {\r
+               pEntry->LogStatusFailCnt = 0;\r
+       }       \r
+       else    if(pEntry->LogStatusFailCnt <= 20)\r
+       {\r
+               pEntry->LogStatusFailCnt++;\r
+               RT_DISP(FBEAM, FBEAM_ERROR, ("%s LogStatusFailCnt %d\n", __FUNCTION__, pEntry->LogStatusFailCnt));\r
+       }\r
+       if(pEntry->LogStatusFailCnt > 20)\r
+       {\r
+               RT_DISP(FBEAM, FBEAM_ERROR, ("%s LogStatusFailCnt > 20, Stop SOUNDING\n", __FUNCTION__));\r
+               pEntry->bSound = FALSE;\r
+               HalComTxbf_Set(Adapter, TXBF_SET_SOUNDING_FW_NDPA, (pu1Byte)&pBeamInfo->BeamformeeCurIdx);\r
+               Beamforming_DeInitEntry(Adapter, pEntry->MacAddr); \r
+\r
+               //-@ Modified by David - Every action of deleting entry should follow by Notify\r
+               phydm_Beamforming_Notify(pDM_Odm);\r
+       }\r
+}\r
+\r
+VOID\r
+phydm_Beamforming_End_SW(\r
+       IN      PVOID           pDM_VOID,\r
+       BOOLEAN                 Status  \r
+       )\r
+{\r
+       PDM_ODM_T                               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+       PRT_BEAMFORMING_ENTRY   pEntry = &(pBeamInfo->BeamformeeEntry[pBeamInfo->BeamformeeCurIdx]);\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       if(pEntry->BeamformEntryState != BEAMFORMING_ENTRY_STATE_PROGRESSING)\r
+       {\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s BeamformStatus %d\n", __FUNCTION__, pEntry->BeamformEntryState));\r
+               return;\r
+       }\r
+\r
+       if(Status == 1)\r
+       {\r
+               pEntry->LogStatusFailCnt = 0;\r
+               pEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_PROGRESSED;\r
+               HalComTxbf_Set(pDM_Odm->Adapter, TXBF_SET_SOUNDING_STATUS, (pu1Byte)&(pBeamInfo->BeamformeeCurIdx));\r
+       }       \r
+       else\r
+       {\r
+               pEntry->LogStatusFailCnt++;\r
+               pEntry->BeamformEntryState = BEAMFORMING_ENTRY_STATE_INITIALIZED;\r
+               HalComTxbf_Set(pDM_Odm->Adapter, TXBF_SET_TX_PATH_RESET, (pu1Byte)&(pBeamInfo->BeamformeeCurIdx));\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s LogStatusFailCnt %d\n", __FUNCTION__, pEntry->LogStatusFailCnt));\r
+       }       \r
+       if(pEntry->LogStatusFailCnt > 50)\r
+       {\r
+               RT_DISP(FBEAM, FBEAM_ERROR, ("%s LogStatusFailCnt > 50, Stop SOUNDING\n", __FUNCTION__));\r
+               pEntry->bSound = FALSE;\r
+               Beamforming_DeInitEntry(pDM_Odm->Adapter, pEntry->MacAddr); \r
+\r
+               /*Modified by David - Every action of deleting entry should follow by Notify*/\r
+               phydm_Beamforming_Notify(pDM_Odm);\r
+       }       \r
+       pEntry->bBeamformingInProgress = FALSE;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: Status=%d\n", __FUNCTION__, Status));\r
+}      \r
+\r
+\r
+VOID\r
+phydm_Beamforming_End_FW(\r
+       IN      PVOID                           pDM_VOID\r
+       )\r
+{\r
+       u1Byte                                  Idx = 0;\r
+       PDM_ODM_T                               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PADAPTER                                Adapter = pDM_Odm->Adapter;\r
+       PRT_BEAMFORMING_INFO    pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start! \n", __FUNCTION__) );\r
+       HalComTxbf_Set(Adapter, TXBF_SET_SOUNDING_FW_NDPA, (pu1Byte)&Idx);\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s End! \n", __FUNCTION__));\r
+}\r
+\r
+\r
+VOID\r
+Beamforming_TimerCallback(\r
+       PADAPTER                        Adapter\r
+       )\r
+{\r
+       BOOLEAN                                         ret = FALSE;\r
+       PMGNT_INFO                                      pMgntInfo = &(Adapter->MgntInfo);\r
+       PRT_BEAMFORMING_INFO            pBeamInfo = GET_BEAMFORM_INFO(Adapter);\r
+       PRT_BEAMFORMING_ENTRY           pEntry = &(pBeamInfo->BeamformeeEntry[pBeamInfo->BeamformeeCurIdx]);\r
+       PRT_SOUNDING_INFO                       pSoundInfo = &(pBeamInfo->SoundingInfo);\r
+       HAL_DATA_TYPE                           *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                                       pDM_Odm = &pHalData->DM_OutSrc;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       if(pEntry->bBeamformingInProgress)\r
+        {\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("bBeamformingInProgress, reset it\n"));\r
+               phydm_Beamforming_End_SW(pDM_Odm, 0);\r
+        }\r
+\r
+       ret = phydm_Beamforming_SelectBeamEntry(pDM_Odm, pBeamInfo);\r
+\r
+       if(ret)\r
+               ret = BeamformingStart_SW(Adapter,pSoundInfo->SoundIdx, pSoundInfo->SoundMode, pSoundInfo->SoundBW);\r
+       \r
+       if(ret)\r
+               ;\r
+       else\r
+       {\r
+               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s, Error value return from BeamformingStart_V2 \n", __FUNCTION__));\r
+       }\r
+\r
+       if(pBeamInfo->BeamformState >= BEAMFORMING_STATE_START_1BFee)\r
+       {\r
+               if(pSoundInfo->SoundMode == SOUNDING_SW_VHT_TIMER || pSoundInfo->SoundMode == SOUNDING_SW_HT_TIMER)\r
+                       ODM_SetTimer(pDM_Odm, &pBeamInfo->BeamformingTimer, pSoundInfo->SoundPeriod);\r
+               else\r
+               {\r
+                       u4Byte  val = (pSoundInfo->SoundPeriod << 16) | HAL_TIMER_TXBF;\r
+                       Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_HW_REG_TIMER_RESTART, (pu1Byte)(&val));\r
+               }\r
+       }\r
+}\r
+\r
+\r
+VOID\r
+Beamforming_SWTimerCallback(\r
+       PRT_TIMER               pTimer\r
+       )\r
+{\r
+       PADAPTER        Adapter=(PADAPTER)pTimer->Adapter;\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start!\n", __FUNCTION__) );\r
+       \r
+       Beamforming_TimerCallback(Adapter);\r
+}\r
+\r
+\r
+VOID\r
+phydm_Beamforming_Init(\r
+       IN      PVOID                           pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PRT_BEAMFORMING_INFO            pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+       PHAL_TXBF_INFO                          pTxbfInfo = &pBeamInfo->TxbfInfo;\r
+       PRT_BEAMFORMING_OID_INFO        pBeamOidInfo = &(pBeamInfo->BeamformingOidInfo);\r
+       \r
+       RT_DISP(FBEAM, FBEAM_FUN, ("%s Start!\n", __FUNCTION__) );\r
+       \r
+       pBeamOidInfo->SoundOidMode = SOUNDING_STOP_OID_TIMER;\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("%s Mode (%d)\n", __FUNCTION__, pBeamOidInfo->SoundOidMode));\r
+}      \r
+\r
+\r
+VOID\r
+Beamforming_Enter(\r
+       PADAPTER                Adapter,\r
+       PRT_WLAN_STA    pSTA\r
+)\r
+{\r
+       u1Byte  BFerBFeeIdx = 0xff;\r
+       \r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start! \n", __FUNCTION__) );\r
+\r
+       if(Beamforming_InitEntry(Adapter, pSTA, &BFerBFeeIdx))\r
+               HalComTxbf_Set(Adapter, TXBF_SET_SOUNDING_ENTER, (pu1Byte)&BFerBFeeIdx);\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s End! \n", __FUNCTION__) );\r
+}\r
+\r
+\r
+VOID\r
+Beamforming_Leave(\r
+       PADAPTER                Adapter,\r
+       pu1Byte                 RA\r
+       )\r
+{\r
+       HAL_DATA_TYPE                           *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                                       pDM_Odm = &pHalData->DM_OutSrc;\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s Start! \n", __FUNCTION__) );\r
+\r
+       if(RA == NULL)\r
+               Beamforming_Reset(Adapter);\r
+       else\r
+               Beamforming_DeInitEntry(Adapter, RA);\r
+\r
+       phydm_Beamforming_Notify(pDM_Odm);\r
+\r
+       RT_DISP(FBEAM, FBEAM_FUN, ("[David]@%s End!! \n", __FUNCTION__));\r
+}\r
+\r
+//Nobody calls this function\r
+VOID\r
+phydm_Beamforming_SetTxBFen(\r
+       IN      PVOID           pDM_VOID,\r
+       u1Byte                  MacId,\r
+       BOOLEAN                 bTxBF\r
+       )\r
+{\r
+       PDM_ODM_T                               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte                                  Idx = 0;\r
+       PRT_BEAMFORMING_ENTRY   pEntry;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       pEntry = phydm_Beamforming_GetEntryByMacId(pDM_Odm, MacId, &Idx);\r
+\r
+       if(pEntry == NULL)\r
+               return;\r
+       else\r
+               pEntry->bTxBF = bTxBF;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s MacId %d TxBF %d\n", __FUNCTION__, pEntry->MacId, pEntry->bTxBF));\r
+\r
+       phydm_Beamforming_Notify(pDM_Odm);\r
+}\r
+\r
+\r
+BEAMFORMING_CAP\r
+phydm_Beamforming_GetBeamCap(\r
+       IN      PVOID           pDM_VOID,\r
+       IN PRT_BEAMFORMING_INFO         pBeamInfo\r
+       )\r
+{\r
+       u1Byte                                  i;\r
+       BOOLEAN                                 bSelfBeamformer = FALSE;\r
+       BOOLEAN                                 bSelfBeamformee = FALSE;\r
+       RT_BEAMFORMING_ENTRY    BeamformeeEntry;\r
+       RT_BEAMFORMER_ENTRY     BeamformerEntry;\r
+       BEAMFORMING_CAP                 BeamformCap = BEAMFORMING_CAP_NONE;\r
+       PDM_ODM_T                               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       /*\r
+       for(i = 0; i < BEAMFORMEE_ENTRY_NUM; i++)\r
+       {\r
+               BeamformEntry = pBeamInfo->BeamformeeEntry[i];\r
+\r
+               if(BeamformEntry.bUsed)\r
+               {\r
+                       if( (BeamformEntry.BeamformEntryCap & BEAMFORMEE_CAP_VHT_SU) ||\r
+                               (BeamformEntry.BeamformEntryCap & BEAMFORMEE_CAP_HT_EXPLICIT))\r
+                               bSelfBeamformee = TRUE;\r
+                       if( (BeamformEntry.BeamformEntryCap & BEAMFORMER_CAP_VHT_SU) ||\r
+                               (BeamformEntry.BeamformEntryCap & BEAMFORMER_CAP_HT_EXPLICIT))\r
+                               bSelfBeamformer = TRUE;\r
+               }\r
+\r
+               if(bSelfBeamformer && bSelfBeamformee)\r
+                       i = BEAMFORMEE_ENTRY_NUM;\r
+       }\r
+       */\r
+\r
+       for(i = 0; i < BEAMFORMEE_ENTRY_NUM; i++)\r
+       {\r
+               BeamformeeEntry = pBeamInfo->BeamformeeEntry[i];\r
+\r
+               if(BeamformeeEntry.bUsed)\r
+               {\r
+                       bSelfBeamformer = TRUE;\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: BFee entry %d bUsed=TRUE \n", __FUNCTION__, i));\r
+                       break;\r
+               }\r
+               \r
+       }\r
+\r
+       for(i = 0; i < BEAMFORMER_ENTRY_NUM; i++)\r
+       {\r
+               BeamformerEntry = pBeamInfo->BeamformerEntry[i];\r
+\r
+               if(BeamformerEntry.bUsed)\r
+               {\r
+                       bSelfBeamformee = TRUE;\r
+                       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s: BFer entry %d bUsed=TRUE \n", __FUNCTION__, i));\r
+                       break;\r
+               }\r
+       }\r
+\r
+       if(bSelfBeamformer)\r
+               BeamformCap |= BEAMFORMER_CAP;\r
+       if(bSelfBeamformee)\r
+               BeamformCap |= BEAMFORMEE_CAP;\r
+\r
+       return BeamformCap;\r
+}\r
+\r
+\r
+BOOLEAN\r
+BeamformingControl_V1(\r
+       PADAPTER                Adapter,\r
+       pu1Byte                 RA,\r
+       u1Byte                  AID,\r
+       u1Byte                  Mode, \r
+       CHANNEL_WIDTH   BW,\r
+       u1Byte                  Rate\r
+       )\r
+{\r
+       BOOLEAN         ret = TRUE;\r
+       HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                               pDM_Odm = &pHalData->DM_OutSrc;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("AID (%d), Mode (%d), BW (%d)\n", AID, Mode, BW));\r
+\r
+       RT_DISP_ADDR(FBEAM, FBEAM_FUN, ("Addr = "), RA);\r
+\r
+       switch(Mode){   \r
+       case 0:\r
+               ret = BeamformingStart_V1(Adapter, RA, 0, BW, Rate);\r
+               break;\r
+       case 1:\r
+               ret = BeamformingStart_V1(Adapter, RA, 1, BW, Rate);\r
+               break;\r
+       case 2:\r
+               phydm_Beamforming_NDPARate(pDM_Odm, BW, Rate);\r
+               ret = Beamforming_SendVHTNDPAPacket(Adapter,RA, AID, BW, NORMAL_QUEUE);\r
+               break;\r
+       case 3:\r
+               phydm_Beamforming_NDPARate(pDM_Odm, BW, Rate);\r
+               ret = Beamforming_SendHTNDPAPacket(Adapter, RA, BW, NORMAL_QUEUE);\r
+               break;\r
+       }\r
+       return ret;\r
+}\r
+\r
+//Only OID uses this function\r
+BOOLEAN\r
+phydm_BeamformingControl_V2(\r
+       IN      PVOID           pDM_VOID,\r
+       u1Byte                  Idx,\r
+       u1Byte                  Mode, \r
+       CHANNEL_WIDTH   BW,\r
+       u2Byte                  Period\r
+       )\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PRT_BEAMFORMING_INFO            pBeamInfo =  &pDM_Odm->BeamformingInfo;\r
+       PRT_BEAMFORMING_OID_INFO        pBeamOidInfo = &(pBeamInfo->BeamformingOidInfo);\r
+\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("Idx (%d), Mode (%d), BW (%d), Period (%d)\n", Idx, Mode, BW, Period));\r
+\r
+       pBeamOidInfo->SoundOidIdx = Idx;\r
+       pBeamOidInfo->SoundOidMode = Mode;\r
+       pBeamOidInfo->SoundOidBW = BW;\r
+       pBeamOidInfo->SoundOidPeriod = Period;\r
+\r
+       phydm_Beamforming_Notify(pDM_Odm);\r
+\r
+       return TRUE;\r
+}\r
+\r
+\r
+VOID\r
+phydm_Beamforming_Watchdog(\r
+       IN      PVOID           pDM_VOID\r
+)\r
+{\r
+       PDM_ODM_T                                       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PRT_BEAMFORMING_INFO            pBeamInfo = &pDM_Odm->BeamformingInfo;\r
+       PADAPTER                                        Adapter = pDM_Odm->Adapter;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("%s Start!\n", __FUNCTION__) );\r
+\r
+       if(pBeamInfo->BeamformState < BEAMFORMING_STATE_START_1BFee)\r
+               return;\r
+\r
+       Beamforming_DymPeriod(pDM_Odm);\r
+       phydm_Beamforming_DymNDPARate(pDM_Odm);\r
+\r
+}\r
+\r
+#else\r
+\r
+RT_STATUS Beamforming_GetReportFrame(  IN      PADAPTER                Adapter,        IN      PRT_RFD                 pRfd, IN        POCTET_STRING   pPduOS){return RT_STATUS_SUCCESS;}\r
+VOID Beamforming_GetNDPAFrame( IN      PADAPTER                Adapter,        IN      OCTET_STRING    PduOS){}\r
+\r
+#endif\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_beamforming.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_beamforming.h
new file mode 100755 (executable)
index 0000000..5e1b1e1
--- /dev/null
@@ -0,0 +1,305 @@
+#ifndef __INC_BEAMFORMING_H\r
+#define __INC_BEAMFORMING_H\r
+\r
+#ifndef BEAMFORMING_SUPPORT\r
+#define        BEAMFORMING_SUPPORT             0\r
+#endif\r
+\r
+#if (BEAMFORMING_SUPPORT == 1)\r
+\r
+/*Beamforming Related*/\r
+#include "TXBF/HalComTxbf.h"\r
+#include "TXBF/HalTxbfJaguar.h"\r
+#include "TXBF/HalTxbf8192E.h"\r
+#include "TXBF/HalTxbf8814A.h"\r
+#include "TXBF/HalTxbf8821B.h"\r
+\r
+#define BEAMFORMEE_ENTRY_NUM           2\r
+#define BEAMFORMER_ENTRY_NUM                   2\r
+#define GET_BEAMFORM_INFO(_pAdapter)   ((PRT_BEAMFORMING_INFO)(&(((HAL_DATA_TYPE *)((_pAdapter)->HalData))->DM_OutSrc.BeamformingInfo)))\r
+\r
+typedef enum _BEAMFORMING_ENTRY_STATE\r
+{\r
+       BEAMFORMING_ENTRY_STATE_UNINITIALIZE, \r
+       BEAMFORMING_ENTRY_STATE_INITIALIZEING, \r
+       BEAMFORMING_ENTRY_STATE_INITIALIZED, \r
+       BEAMFORMING_ENTRY_STATE_PROGRESSING, \r
+       BEAMFORMING_ENTRY_STATE_PROGRESSED, \r
+}BEAMFORMING_ENTRY_STATE, *PBEAMFORMING_ENTRY_STATE;\r
+\r
+\r
+typedef enum _BEAMFORMING_STATE\r
+{\r
+       BEAMFORMING_STATE_END,\r
+       BEAMFORMING_STATE_START_1BFee, \r
+       BEAMFORMING_STATE_START_2BFee\r
+}BEAMFORMING_STATE, *PBEAMFORMING_STATE;\r
+\r
+typedef enum _BEAMFORMING_NOTIFY_STATE\r
+{\r
+       BEAMFORMING_NOTIFY_NONE,\r
+       BEAMFORMING_NOTIFY_ADD,\r
+       BEAMFORMING_NOTIFY_DELETE,\r
+       BEAMFORMING_NOTIFY_RESET\r
+} BEAMFORMING_NOTIFY_STATE, *PBEAMFORMING_NOTIFY_STATE;\r
+\r
+typedef enum _BEAMFORMING_CAP\r
+{\r
+       BEAMFORMING_CAP_NONE = 0x0,\r
+       BEAMFORMER_CAP_HT_EXPLICIT = 0x1, \r
+       BEAMFORMEE_CAP_HT_EXPLICIT = 0x2, \r
+       BEAMFORMER_CAP_VHT_SU = 0x4,                    // Self has er Cap, because Reg er  & peer ee\r
+       BEAMFORMEE_CAP_VHT_SU = 0x8,                    // Self has ee Cap, because Reg ee & peer er \r
+       BEAMFORMER_CAP = 0x10,\r
+       BEAMFORMEE_CAP = 0x20,\r
+}BEAMFORMING_CAP, *PBEAMFORMING_CAP;\r
+\r
+\r
+typedef enum _SOUNDING_MODE\r
+{\r
+       SOUNDING_SW_VHT_TIMER = 0x0,\r
+       SOUNDING_SW_HT_TIMER = 0x1, \r
+       SOUNDING_STOP_All_TIMER = 0x2, \r
+       SOUNDING_HW_VHT_TIMER = 0x3,                    \r
+       SOUNDING_HW_HT_TIMER = 0x4,\r
+       SOUNDING_STOP_OID_TIMER = 0x5, \r
+       SOUNDING_AUTO_VHT_TIMER = 0x6,\r
+       SOUNDING_AUTO_HT_TIMER = 0x7,\r
+       SOUNDING_FW_VHT_TIMER = 0x8,\r
+       SOUNDING_FW_HT_TIMER = 0x9,\r
+}SOUNDING_MODE, *PSOUNDING_MODE;\r
+\r
+\r
+typedef struct _RT_BEAMFORMING_ENTRY {\r
+       BOOLEAN bUsed;\r
+       BOOLEAN bTxBF;\r
+       BOOLEAN bSound;\r
+       u2Byte  AID;                            // Used to construct AID field of NDPA packet.\r
+       u2Byte  MacId;                          // Used to Set Reg42C in IBSS mode. \r
+       u2Byte  P_AID;                          // Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. \r
+       u1Byte  MacAddr[6];                     // Used to fill Reg6E4 to fill Mac address of CSI report frame.\r
+       CHANNEL_WIDTH                   SoundBW;        // Sounding BandWidth\r
+       u2Byte                                  SoundPeriod;\r
+       BEAMFORMING_CAP                 BeamformEntryCap;\r
+       BEAMFORMING_ENTRY_STATE BeamformEntryState;     \r
+       BOOLEAN                                         bBeamformingInProgress;\r
+//     u1Byte  LogSeq;                                                                 // Move to _RT_BEAMFORMER_ENTRY\r
+//     u2Byte  LogRetryCnt:3;          // 0~4                          // Move to _RT_BEAMFORMER_ENTRY\r
+//     u2Byte  LogSuccessCnt:2;                // 0~2                          // Move to _RT_BEAMFORMER_ENTRY\r
+       u2Byte  LogStatusFailCnt:5;     // 0~21\r
+       u2Byte  DefaultCSICnt:5;                // 0~21\r
+       u1Byte  CSIMatrix[327];\r
+       u2Byte  CSIMatrixLen;\r
+       u1Byte  NumofSoundingDim;\r
+       u1Byte  CompSteeringNumofBFer;\r
+} RT_BEAMFORMING_ENTRY, *PRT_BEAMFORMING_ENTRY;\r
+\r
+typedef struct _RT_BEAMFORMER_ENTRY {\r
+       BOOLEAN                         bUsed;\r
+       // P_AID of BFer entry is probably not used\r
+       u2Byte                          P_AID;                          // Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. \r
+       u1Byte                          MacAddr[6];\r
+       BEAMFORMING_CAP         BeamformEntryCap;\r
+       u1Byte                          NumofSoundingDim;\r
+       u1Byte                          LogSeq;                                                 // Modified by Jeffery @2014-10-29\r
+       u2Byte                          LogRetryCnt:3;          // 0~4          // Modified by Jeffery @2014-10-29      \r
+       u2Byte                          LogSuccessCnt:2;        // 0~2          // Modified by Jeffery @2014-10-29\r
+} RT_BEAMFORMER_ENTRY, *PRT_BEAMFORMER_ENTRY;\r
+\r
+typedef struct _RT_SOUNDING_INFO {\r
+       u1Byte                  SoundIdx;\r
+       CHANNEL_WIDTH   SoundBW;\r
+       SOUNDING_MODE   SoundMode; \r
+       u2Byte                  SoundPeriod;\r
+} RT_SOUNDING_INFO, *PRT_SOUNDING_INFO;\r
+\r
+\r
+\r
+typedef struct _RT_BEAMFORMING_OID_INFO {\r
+       u1Byte                  SoundOidIdx;\r
+       CHANNEL_WIDTH   SoundOidBW;     \r
+       SOUNDING_MODE   SoundOidMode;\r
+       u2Byte                  SoundOidPeriod;\r
+} RT_BEAMFORMING_OID_INFO, *PRT_BEAMFORMING_OID_INFO;\r
+\r
+\r
+typedef struct _RT_BEAMFORMING_INFO {\r
+       BEAMFORMING_CAP                         BeamformCap;\r
+       BEAMFORMING_STATE                       BeamformState;\r
+       RT_BEAMFORMING_ENTRY            BeamformeeEntry[BEAMFORMEE_ENTRY_NUM];\r
+       RT_BEAMFORMER_ENTRY                     BeamformerEntry[BEAMFORMER_ENTRY_NUM];\r
+       u1Byte                                          BeamformeeCurIdx;\r
+       RT_TIMER                                        BeamformingTimer;\r
+       RT_SOUNDING_INFO                        SoundingInfo;\r
+       RT_BEAMFORMING_OID_INFO         BeamformingOidInfo;\r
+       HAL_TXBF_INFO                           TxbfInfo;\r
+} RT_BEAMFORMING_INFO, *PRT_BEAMFORMING_INFO;\r
+\r
+\r
+typedef struct _RT_NDPA_STA_INFO {\r
+       u2Byte  AID:12; \r
+       u2Byte  FeedbackType:1;\r
+       u2Byte  NcIndex:3;      \r
+} RT_NDPA_STA_INFO, *PRT_NDPA_STA_INFO;\r
+\r
+\r
+BEAMFORMING_CAP\r
+phydm_Beamforming_GetEntryBeamCapByMacId(\r
+       IN      PVOID   pDM_VOID,\r
+       IN      u1Byte  MacId\r
+ );\r
+\r
+\r
+VOID\r
+Beamforming_GidPAid(\r
+       PADAPTER        Adapter,\r
+       PRT_TCB         pTcb\r
+       );\r
+\r
+\r
+BOOLEAN\r
+Beamforming_SendHTNDPAPacket(\r
+       IN      PADAPTER                Adapter,\r
+       IN      pu1Byte                 RA,\r
+       IN      CHANNEL_WIDTH   BW, \r
+       IN      u1Byte                  QIdx\r
+       );\r
+\r
+\r
+BOOLEAN\r
+Beamforming_SendVHTNDPAPacket(\r
+       IN      PADAPTER                Adapter,\r
+       IN      pu1Byte                 RA,\r
+       IN      u2Byte                  AID,\r
+       IN      CHANNEL_WIDTH   BW,\r
+       IN      u1Byte                  QIdx\r
+       );\r
+\r
+\r
+VOID\r
+phydm_Beamforming_Notify(\r
+       IN      PVOID   pDM_VOID\r
+       );\r
+\r
+\r
+VOID\r
+Beamforming_Enter(\r
+       PADAPTER                Adapter,\r
+       PRT_WLAN_STA    pSTA\r
+       );\r
+\r
+VOID\r
+Beamforming_Leave(\r
+       PADAPTER                Adapter,\r
+       pu1Byte                 RA\r
+       );\r
+\r
+BOOLEAN\r
+BeamformingStart_FW(\r
+       PADAPTER                Adapter,\r
+       u1Byte                  Idx\r
+       );\r
+\r
+VOID\r
+Beamforming_CheckSoundingSuccess(\r
+       PADAPTER                Adapter,\r
+       BOOLEAN                 Status  \r
+);\r
+\r
+VOID\r
+phydm_Beamforming_End_SW(\r
+       IN      PVOID   pDM_VOID,\r
+       BOOLEAN                 Status  \r
+       );\r
+\r
+VOID\r
+phydm_Beamforming_End_FW(\r
+       IN      PVOID   pDM_VOID\r
+       );\r
+\r
+VOID\r
+Beamforming_TimerCallback(\r
+       PADAPTER                        Adapter\r
+       );\r
+\r
+VOID\r
+phydm_Beamforming_Init(\r
+       IN      PVOID           pDM_VOID\r
+       );\r
+\r
+\r
+\r
+BEAMFORMING_CAP\r
+phydm_Beamforming_GetBeamCap(\r
+       IN      PVOID   pDM_VOID,\r
+       IN PRT_BEAMFORMING_INFO         pBeamInfo\r
+       );\r
+\r
+\r
+BOOLEAN\r
+BeamformingControl_V1(\r
+       PADAPTER                Adapter,\r
+       pu1Byte                 RA,\r
+       u1Byte                  AID,\r
+       u1Byte                  Mode,\r
+       CHANNEL_WIDTH   BW,\r
+       u1Byte                  Rate\r
+       );\r
+\r
+\r
+BOOLEAN\r
+phydm_BeamformingControl_V2(\r
+       IN      PVOID           pDM_VOID,\r
+       u1Byte                  Idx,\r
+       u1Byte                  Mode, \r
+       CHANNEL_WIDTH   BW,\r
+       u2Byte                  Period\r
+       );\r
+\r
+\r
+BOOLEAN\r
+BeamformingControl_V3(\r
+       PADAPTER                Adapter,\r
+       u1Byte                  Threshold,\r
+       u2Byte                  Period\r
+       );\r
+\r
+VOID\r
+phydm_Beamforming_Watchdog(\r
+       IN      PVOID           pDM_VOID\r
+       );\r
+\r
+VOID\r
+Beamforming_SWTimerCallback(\r
+       PRT_TIMER               pTimer\r
+       );\r
+\r
+#else\r
+#define Beamforming_GidPAid(Adapter, pTcb)\r
+#define Beamforming_Enter(Adapter, pSTA)\r
+#define Beamforming_Leave(Adapter, RA)\r
+#define Beamforming_End_SW(Adapter, Status)\r
+#define Beamforming_End_FW(Adapter)\r
+#define Beamforming_Init(Adapter)\r
+#define Beamforming_Release(Adapter)\r
+#define BeamformingControl_V1(Adapter, RA, AID, Mode, BW, Rate)                (TRUE)\r
+#define BeamformingControl_V2(Adapter, Idx, Mode, BW, Period)                  (TRUE)\r
+#define Beamforming_TimerCallback(Adapter)\r
+#define Beamforming_Watchdog(Adapter)\r
+#endif\r
+\r
+\r
+RT_STATUS\r
+Beamforming_GetReportFrame(\r
+       IN      PADAPTER                Adapter,\r
+       IN      PRT_RFD                 pRfd,\r
+       IN      POCTET_STRING   pPduOS\r
+       );\r
+\r
+VOID\r
+Beamforming_GetNDPAFrame(\r
+       IN      PADAPTER                Adapter,\r
+       IN      OCTET_STRING    pduOS\r
+       );\r
+\r
+#endif\r
index 7e514db3b6094aa2346038aa662944658fe8e527..0612602d145e262a97ff6cbe76bdafc8381cbf4b 100755 (executable)
@@ -1,7 +1,7 @@
 /******************************************************************************\r
  *\r
  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
 /******************************************************************************\r
  *\r
  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
+ *\r
  * This program is free software; you can redistribute it and/or modify it\r
  * under the terms of version 2 of the GNU General Public License as\r
  * published by the Free Software Foundation.\r
  * This program is free software; you can redistribute it and/or modify it\r
  * under the terms of version 2 of the GNU General Public License as\r
  * published by the Free Software Foundation.\r
 #include "phydm_precomp.h"\r
 \r
 \r
 #include "phydm_precomp.h"\r
 \r
 \r
-VOID \r
+VOID\r
 PHYDM_InitDebugSetting(\r
        IN              PDM_ODM_T               pDM_Odm\r
 PHYDM_InitDebugSetting(\r
        IN              PDM_ODM_T               pDM_Odm\r
-       )\r
+)\r
 {\r
 {\r
-pDM_Odm->DebugLevel                            =       ODM_DBG_TRACE;\r
+       pDM_Odm->DebugLevel = ODM_DBG_TRACE;\r
 \r
 \r
-pDM_Odm->DebugComponents                       = \r
-\\r
+       pDM_Odm->DebugComponents                        =\r
+               \\r
 #if DBG\r
 //BB Functions\r
 //                                                                     ODM_COMP_DIG                                    |\r
 #if DBG\r
 //BB Functions\r
 //                                                                     ODM_COMP_DIG                                    |\r
@@ -54,10 +54,12 @@ pDM_Odm->DebugComponents                    =
 //                                                                     ODM_COMP_CFO_TRACKING           |\r
 //                                                                     ODM_COMP_ACS                                    |\r
 //                                                                     PHYDM_COMP_ADAPTIVITY                   |\r
 //                                                                     ODM_COMP_CFO_TRACKING           |\r
 //                                                                     ODM_COMP_ACS                                    |\r
 //                                                                     PHYDM_COMP_ADAPTIVITY                   |\r
-\r
+//                                                                     PHYDM_COMP_RA_DBG                               |\r
+/*                                                                     PHYDM_COMP_TXBF                                 |*/\r
 //MAC Functions\r
 //                                                                     ODM_COMP_EDCA_TURBO                     |\r
 //                                                                     ODM_COMP_EARLY_MODE                     |\r
 //MAC Functions\r
 //                                                                     ODM_COMP_EDCA_TURBO                     |\r
 //                                                                     ODM_COMP_EARLY_MODE                     |\r
+/*                                                                     ODM_FW_DEBUG_TRACE                              |*/\r
 //RF Functions\r
 //                                                                     ODM_COMP_TX_PWR_TRACK           |\r
 //                                                                     ODM_COMP_RX_GAIN_TRACK          |\r
 //RF Functions\r
 //                                                                     ODM_COMP_TX_PWR_TRACK           |\r
 //                                                                     ODM_COMP_RX_GAIN_TRACK          |\r
@@ -67,12 +69,203 @@ pDM_Odm->DebugComponents                   =
 //                                                                     ODM_COMP_INIT                                   |\r
 //                                                                     ODM_COMP_PSD                                    |\r
 #endif\r
 //                                                                     ODM_COMP_INIT                                   |\r
 //                                                                     ODM_COMP_PSD                                    |\r
 #endif\r
-                                                                       0;\r
+               0;\r
+\r
+       pDM_Odm->fw_buff_is_enpty = TRUE;\r
+       pDM_Odm->pre_c2h_seq = 0;\r
 }\r
 \r
 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
 }\r
 \r
 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-\r
 static u1Byte  BbDbgBuf[BB_TMP_BUF_SIZE];\r
 static u1Byte  BbDbgBuf[BB_TMP_BUF_SIZE];\r
+\r
+VOID\r
+phydm_BB_RxHang_Info(IN PDM_ODM_T pDM_Odm)\r
+{\r
+       u4Byte  value32 = 0;\r
+\r
+\r
+       if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
+               return;\r
+\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xF80 , bMaskDWord);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rptreg of sc/bw/ht/...", value32);\r
+       DCMD_Printf(BbDbgBuf);\r
+\r
+       /* dbg_port = state machine */\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x007);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "state machine", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+       /* dbg_port = CCA-related*/\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x204);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "CCA-related", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+\r
+       /* dbg_port = edcca/rxd*/\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x278);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "edcca/rxd", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+       /* dbg_port = rx_state/mux_state/ADC_MASK_OFDM*/\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x290);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rx_state/mux_state/ADC_MASK_OFDM", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+       /* dbg_port = bf-related*/\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x2B2);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "bf-related", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+       /* dbg_port = bf-related*/\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x2B8);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "bf-related", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+       /* dbg_port = txon/rxd*/\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xA03);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "txon/rxd", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+       /* dbg_port = l_rate/l_length*/\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xA0B);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "l_rate/l_length", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+       /* dbg_port = rxd/rxd_hit*/\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xA0D);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rxd/rxd_hit", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+       /* dbg_port = dis_cca*/\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAA0);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "dis_cca", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+\r
+       /* dbg_port = tx*/\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAB0);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "tx", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+       /* dbg_port = rx plcp*/\r
+       {\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAD0);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rx plcp", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAD1);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rx plcp", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAD2);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rx plcp", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAD3);\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
+               DCMD_Printf(BbDbgBuf);\r
+\r
+               value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
+               rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rx plcp", (value32));\r
+               DCMD_Printf(BbDbgBuf);\r
+       }\r
+\r
+}\r
+\r
 VOID\r
 phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm)\r
 {\r
 VOID\r
 phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm)\r
 {\r
@@ -82,48 +275,48 @@ phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm)
        u4Byte  value32, value32_1, value32_2, value32_3;\r
        s4Byte  SFO_A, SFO_B, SFO_C, SFO_D;\r
        s4Byte  LFO_A, LFO_B, LFO_C, LFO_D;\r
        u4Byte  value32, value32_1, value32_2, value32_3;\r
        s4Byte  SFO_A, SFO_B, SFO_C, SFO_D;\r
        s4Byte  LFO_A, LFO_B, LFO_C, LFO_D;\r
-       static u1Byte   MCSS,Tail,Parity,rsv,vrsv,idx,smooth,htsound,agg,stbc,vstbc,fec,fecext,sgi,sgiext,htltf,vgid,vNsts,vtxops,vrsv2,vbrsv,bf,vbcrc;\r
-       static u2Byte   HLength,htcrc8,Length;\r
+       static u1Byte   MCSS, Tail, Parity, rsv, vrsv, idx, smooth, htsound, agg, stbc, vstbc, fec, fecext, sgi, sgiext, htltf, vgid, vNsts, vtxops, vrsv2, vbrsv, bf, vbcrc;\r
+       static u2Byte   HLength, htcrc8, Length;\r
        static u2Byte vpaid;\r
        static u2Byte vpaid;\r
-       static u2Byte   vLength,vhtcrc8,vMCSS,vTail,vbTail;\r
-       static u1Byte   HMCSS,HRX_BW;\r
+       static u2Byte   vLength, vhtcrc8, vMCSS, vTail, vbTail;\r
+       static u1Byte   HMCSS, HRX_BW;\r
+\r
 \r
 \r
-       \r
        u1Byte    pwDB;\r
        s1Byte    RXEVM_0, RXEVM_1, RXEVM_2 ;\r
        u1Byte    RF_gain_pathA, RF_gain_pathB, RF_gain_pathC, RF_gain_pathD;\r
        u1Byte    RX_SNR_pathA, RX_SNR_pathB, RX_SNR_pathC, RX_SNR_pathD;\r
        u1Byte    pwDB;\r
        s1Byte    RXEVM_0, RXEVM_1, RXEVM_2 ;\r
        u1Byte    RF_gain_pathA, RF_gain_pathB, RF_gain_pathC, RF_gain_pathD;\r
        u1Byte    RX_SNR_pathA, RX_SNR_pathB, RX_SNR_pathC, RX_SNR_pathD;\r
-       s4Byte    sig_power;\r
-       const char *RXHT_table[] = {"legacy", "HT", "VHT"};\r
-       const char *BW_table[] = {"20M", "40M", "80M"};\r
-       const char *RXSC_table[] = {"duplicate/full bw", "usc20-1", "lsc20-1", "usc20-2", "lsc20-2",  "usc40", "lsc40"};\r
+       s4Byte    sig_power;\r
+       const char *RXHT_table[3] = {"legacy", "HT", "VHT"};\r
+       const char *BW_table[3] = {"20M", "40M", "80M"};\r
+       const char *RXSC_table[7] = {"duplicate/full bw", "usc20-1", "lsc20-1", "usc20-2", "lsc20-2",  "usc40", "lsc40"};\r
+\r
+       const char *L_rate[8] = {"6M", "9M", "12M", "18M", "24M", "36M", "48M", "54M"};\r
 \r
 \r
-       const char *L_rate[]={"6M","9M","12M","18M","24M","36M","48M","54M"}; \r
 \r
 \r
-       \r
        /*\r
        const double evm_comp_20M = 0.579919469776867; //10*log10(64.0/56.0)\r
        const double evm_comp_40M = 0.503051183113957; //10*log10(128.0/114.0)\r
        const double evm_comp_80M = 0.244245993314183; //10*log10(256.0/242.0)\r
        const double evm_comp_160M = 0.244245993314183; //10*log10(512.0/484.0)\r
        /*\r
        const double evm_comp_20M = 0.579919469776867; //10*log10(64.0/56.0)\r
        const double evm_comp_40M = 0.503051183113957; //10*log10(128.0/114.0)\r
        const double evm_comp_80M = 0.244245993314183; //10*log10(256.0/242.0)\r
        const double evm_comp_160M = 0.244245993314183; //10*log10(512.0/484.0)\r
-       */\r
+          */\r
 \r
 \r
-       if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
+       if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
                return;\r
 \r
                return;\r
 \r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s \n", "BB Report Info");\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s\n", "BB Report Info");\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        DCMD_Printf(BbDbgBuf);\r
 \r
-       //BW & Mode Detection\r
-       ///////////////////////////////////////////////////////                 \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xf80 ,bMaskDWord);\r
-       value32_2 =value32; \r
-       RX_HT_BW = (u1Byte)(value32&0x1)        ;\r
-       RX_VHT_BW = (u1Byte)((value32>>1)&0x3);\r
-       RXSC = (u1Byte)(value32&0x78);\r
-       value32_1= (value32&0x180)>>7;\r
+       /*BW & Mode Detection*/\r
+       \r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xf80 , bMaskDWord);\r
+       value32_2 = value32;\r
+       RX_HT_BW = (u1Byte)(value32 & 0x1);\r
+       RX_VHT_BW = (u1Byte)((value32 >> 1) & 0x3);\r
+       RXSC = (u1Byte)(value32 & 0x78);\r
+       value32_1 = (value32 & 0x180) >> 7;\r
        RX_HT = (u1Byte)(value32_1);\r
        RX_HT = (u1Byte)(value32_1);\r
-       /*              \r
+       /*\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "F80", value32_2);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "F80", value32_2);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
@@ -139,69 +332,55 @@ phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm)
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "RX_HT", RX_HT);\r
        DCMD_Printf(BbDbgBuf);\r
        */\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "RX_HT", RX_HT);\r
        DCMD_Printf(BbDbgBuf);\r
        */\r
-       \r
+\r
        //rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  RX_HT:%s ", RXHT_table[RX_HT]);\r
        //DCMD_Printf(BbDbgBuf);\r
        RX_BW = 0;\r
 \r
        //rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  RX_HT:%s ", RXHT_table[RX_HT]);\r
        //DCMD_Printf(BbDbgBuf);\r
        RX_BW = 0;\r
 \r
-       if(RX_HT == 2)\r
-       {\r
+       if (RX_HT == 2) {\r
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: VHT Mode");\r
                DCMD_Printf(BbDbgBuf);\r
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: VHT Mode");\r
                DCMD_Printf(BbDbgBuf);\r
-               if(RX_VHT_BW==0)\r
-               {\r
+               if (RX_VHT_BW == 0) {\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=20M");\r
                        DCMD_Printf(BbDbgBuf);\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=20M");\r
                        DCMD_Printf(BbDbgBuf);\r
-               }       \r
-               else if(RX_VHT_BW==1)\r
-               {\r
+               } else if (RX_VHT_BW == 1) {\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=40M");\r
                        DCMD_Printf(BbDbgBuf);\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=40M");\r
                        DCMD_Printf(BbDbgBuf);\r
-               }\r
-               else\r
-               {\r
+               } else {\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=80M");\r
                        DCMD_Printf(BbDbgBuf);\r
                }\r
                RX_BW = RX_VHT_BW;\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=80M");\r
                        DCMD_Printf(BbDbgBuf);\r
                }\r
                RX_BW = RX_VHT_BW;\r
-       }\r
-       else if(RX_HT == 1)\r
-       {\r
+       } else if (RX_HT == 1) {\r
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: HT Mode");\r
                DCMD_Printf(BbDbgBuf);\r
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: HT Mode");\r
                DCMD_Printf(BbDbgBuf);\r
-               if(RX_HT_BW==0)\r
-               {\r
+               if (RX_HT_BW == 0) {\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=20M");\r
                        DCMD_Printf(BbDbgBuf);\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=20M");\r
                        DCMD_Printf(BbDbgBuf);\r
-               }       \r
-               else if(RX_HT_BW==1)\r
-               {\r
+               } else if (RX_HT_BW == 1) {\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=40M");\r
                        DCMD_Printf(BbDbgBuf);\r
                }\r
                RX_BW = RX_HT_BW;\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=40M");\r
                        DCMD_Printf(BbDbgBuf);\r
                }\r
                RX_BW = RX_HT_BW;\r
-       }\r
-       else\r
-       {\r
+       } else {\r
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: Legeacy Mode");\r
                DCMD_Printf(BbDbgBuf);\r
        }\r
 \r
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: Legeacy Mode");\r
                DCMD_Printf(BbDbgBuf);\r
        }\r
 \r
-       if(RX_HT !=0)\r
-       {\r
-               if(RXSC==0)\r
+       if (RX_HT != 0) {\r
+               if (RXSC == 0)\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  duplicate/full bw");\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  duplicate/full bw");\r
-               else if(RXSC==1)\r
+               else if (RXSC == 1)\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc20-1");\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc20-1");\r
-               else if(RXSC==2)\r
+               else if (RXSC == 2)\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc20-1");\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc20-1");\r
-               else if(RXSC==3)\r
+               else if (RXSC == 3)\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc20-2");\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc20-2");\r
-               else if(RXSC==4)\r
+               else if (RXSC == 4)\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc20-2");\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc20-2");\r
-               else if(RXSC==9)\r
+               else if (RXSC == 9)\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc40");\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc40");\r
-               else if(RXSC==10)\r
+               else if (RXSC == 10)\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc40");\r
                DCMD_Printf(BbDbgBuf);\r
        }\r
                        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc40");\r
                DCMD_Printf(BbDbgBuf);\r
        }\r
@@ -210,116 +389,116 @@ phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm)
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "  BW:%s", BW_table[RX_VHT_BW]);\r
                RX_BW = RX_VHT_BW;\r
                }\r
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "  BW:%s", BW_table[RX_VHT_BW]);\r
                RX_BW = RX_VHT_BW;\r
                }\r
-       else if(RX_HT == 1){            \r
+       else if(RX_HT == 1){\r
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "  BW:%s", BW_table[RX_HT_BW]);\r
                RX_BW = RX_HT_BW;\r
                }\r
        else\r
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE,  "");\r
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "  BW:%s", BW_table[RX_HT_BW]);\r
                RX_BW = RX_HT_BW;\r
                }\r
        else\r
                rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE,  "");\r
-       \r
-       DCMD_Printf(BbDbgBuf);  \r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "  RXSC:%s", RXSC_table[RXSC]);             \r
+\r
+       DCMD_Printf(BbDbgBuf);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "  RXSC:%s", RXSC_table[RXSC]);\r
        DCMD_Printf(BbDbgBuf);\r
        */\r
        DCMD_Printf(BbDbgBuf);\r
        */\r
-       /////////////////////////////////////////////////////// \r
-       \r
+\r
+\r
 //     rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "dB Conversion: 10log(65)", ODM_PWdB_Conversion(65,10,0));\r
 //     DCMD_Printf(BbDbgBuf);\r
 \r
 //     rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "dB Conversion: 10log(65)", ODM_PWdB_Conversion(65,10,0));\r
 //     DCMD_Printf(BbDbgBuf);\r
 \r
-        // RX signal power and AGC related info\r
-        ///////////////////////////////////////////////////////\r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xF90 ,bMaskDWord);\r
-       pwDB = (u1Byte) ((value32 & bMaskByte1) >> 8);\r
-       pwDB=pwDB>>1;\r
-       sig_power = -110+pwDB;\r
+       /* RX signal power and AGC related info*/\r
+\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xF90 , bMaskDWord);\r
+       pwDB = (u1Byte)((value32 & bMaskByte1) >> 8);\r
+       pwDB = pwDB >> 1;\r
+       sig_power = -110 + pwDB;\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM RX Signal Power(dB)", sig_power);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
 \r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM RX Signal Power(dB)", sig_power);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
 \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xd14 ,bMaskDWord);\r
-       RX_SNR_pathA = (u1Byte)(value32&0xFF)>>1;\r
-       RF_gain_pathA = (s1Byte) ((value32 & bMaskByte1) >> 8);\r
-       RF_gain_pathA *=2;\r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xd54 ,bMaskDWord);\r
-       RX_SNR_pathB = (u1Byte)(value32&0xFF)>>1;\r
-       RF_gain_pathB = (s1Byte) ((value32 & bMaskByte1) >> 8);\r
-       RF_gain_pathB *=2;\r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xd94 ,bMaskDWord);\r
-       RX_SNR_pathC = (u1Byte)(value32&0xFF)>>1;\r
-       RF_gain_pathC = (s1Byte) ((value32 & bMaskByte1) >> 8);\r
-       RF_gain_pathC *=2;\r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xdd4 ,bMaskDWord);\r
-       RX_SNR_pathD = (u1Byte)(value32&0xFF)>>1;\r
-       RF_gain_pathD = (s1Byte) ((value32 & bMaskByte1) >> 8);\r
-       RF_gain_pathD *=2;\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xd14 , bMaskDWord);\r
+       RX_SNR_pathA = (u1Byte)(value32 & 0xFF) >> 1;\r
+       RF_gain_pathA = (s1Byte)((value32 & bMaskByte1) >> 8);\r
+       RF_gain_pathA *= 2;\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xd54 , bMaskDWord);\r
+       RX_SNR_pathB = (u1Byte)(value32 & 0xFF) >> 1;\r
+       RF_gain_pathB = (s1Byte)((value32 & bMaskByte1) >> 8);\r
+       RF_gain_pathB *= 2;\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xd94 , bMaskDWord);\r
+       RX_SNR_pathC = (u1Byte)(value32 & 0xFF) >> 1;\r
+       RF_gain_pathC = (s1Byte)((value32 & bMaskByte1) >> 8);\r
+       RF_gain_pathC *= 2;\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xdd4 , bMaskDWord);\r
+       RX_SNR_pathD = (u1Byte)(value32 & 0xFF) >> 1;\r
+       RF_gain_pathD = (s1Byte)((value32 & bMaskByte1) >> 8);\r
+       RF_gain_pathD *= 2;\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "OFDM RX RF Gain(A/B/C/D)", RF_gain_pathA, RF_gain_pathA, RF_gain_pathC, RF_gain_pathD);\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "OFDM RX RF Gain(A/B/C/D)", RF_gain_pathA, RF_gain_pathA, RF_gain_pathC, RF_gain_pathD);\r
-       DCMD_Printf(BbDbgBuf);  \r
-        ///////////////////////////////////////////////////////\r
+       DCMD_Printf(BbDbgBuf);\r
 \r
 \r
-       // RX Counter related info\r
-        ///////////////////////////////////////////////////////        \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xF08 ,bMaskDWord);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM CCA Counter", ((value32&0xFFFF0000)>>16));\r
+\r
+       /* RX Counter related info*/\r
+\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xF08 , bMaskDWord);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM CCA Counter", ((value32 & 0xFFFF0000) >> 16));\r
        DCMD_Printf(BbDbgBuf);\r
        DCMD_Printf(BbDbgBuf);\r
-       \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xFD0 ,bMaskDWord);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM SBD Fail Counter", value32&0xFFFF);\r
+\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xFD0 , bMaskDWord);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM SBD Fail Counter", value32 & 0xFFFF);\r
        DCMD_Printf(BbDbgBuf);\r
        DCMD_Printf(BbDbgBuf);\r
-       \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xFC4 ,bMaskDWord);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "VHT SIGA/SIGB CRC8 Fail Counter", value32&0xFFFF, ((value32&0xFFFF0000)>>16));\r
+\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xFC4 , bMaskDWord);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "VHT SIGA/SIGB CRC8 Fail Counter", value32 & 0xFFFF, ((value32 & 0xFFFF0000) >> 16));\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        DCMD_Printf(BbDbgBuf);\r
 \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xFCC ,bMaskDWord);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "CCK CCA Counter", value32&0xFFFF);\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xFCC , bMaskDWord);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "CCK CCA Counter", value32 & 0xFFFF);\r
        DCMD_Printf(BbDbgBuf);\r
        DCMD_Printf(BbDbgBuf);\r
-       \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xFBC ,bMaskDWord);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "LSIG (\"Parity Fail\"/\"Rate Illegal\") Counter", value32&0xFFFF, ((value32&0xFFFF0000)>>16));\r
+\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xFBC , bMaskDWord);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "LSIG (\"Parity Fail\"/\"Rate Illegal\") Counter", value32 & 0xFFFF, ((value32 & 0xFFFF0000) >> 16));\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        DCMD_Printf(BbDbgBuf);\r
 \r
-       value32_1 = ODM_GetBBReg(pDM_Odm, 0xFC8 ,bMaskDWord);\r
-       value32_2 = ODM_GetBBReg(pDM_Odm, 0xFC0 ,bMaskDWord);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "HT/VHT MCS NOT SUPPORT counter", ((value32_2&0xFFFF0000)>>16), value32_1&0xFFFF);\r
+       value32_1 = ODM_GetBBReg(pDM_Odm, 0xFC8 , bMaskDWord);\r
+       value32_2 = ODM_GetBBReg(pDM_Odm, 0xFC0 , bMaskDWord);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "HT/VHT MCS NOT SUPPORT counter", ((value32_2 & 0xFFFF0000) >> 16), value32_1 & 0xFFFF);\r
        DCMD_Printf(BbDbgBuf);\r
        DCMD_Printf(BbDbgBuf);\r
-       ///////////////////////////////////////////////////////\r
-       \r
-       // PostFFT related info\r
-       ///////////////////////////////////////////////////////\r
-\r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xF8c ,bMaskDWord);\r
-       RXEVM_0 = (s1Byte) ((value32 & bMaskByte2) >> 16);\r
-       RXEVM_0 /=2;\r
-       if(RXEVM_0 < -63)\r
-               RXEVM_0=0;\r
-       \r
+\r
+\r
+       /* PostFFT related info*/\r
+\r
+\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xF8c , bMaskDWord);\r
+       RXEVM_0 = (s1Byte)((value32 & bMaskByte2) >> 16);\r
+       RXEVM_0 /= 2;\r
+       if (RXEVM_0 < -63)\r
+               RXEVM_0 = 0;\r
+\r
        DCMD_Printf(BbDbgBuf);\r
        DCMD_Printf(BbDbgBuf);\r
-       RXEVM_1 = (s1Byte) ((value32 & bMaskByte3) >> 24);\r
-       RXEVM_1 /=2;\r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xF88 ,bMaskDWord);\r
-       RXEVM_2 = (s1Byte) ((value32 & bMaskByte2) >> 16);\r
-       RXEVM_2 /=2;\r
+       RXEVM_1 = (s1Byte)((value32 & bMaskByte3) >> 24);\r
+       RXEVM_1 /= 2;\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xF88 , bMaskDWord);\r
+       RXEVM_2 = (s1Byte)((value32 & bMaskByte2) >> 16);\r
+       RXEVM_2 /= 2;\r
+\r
+       if (RXEVM_1 < -63)\r
+               RXEVM_1 = 0;\r
+       if (RXEVM_2 < -63)\r
+               RXEVM_2 = 0;\r
 \r
 \r
-       if(RXEVM_1 < -63)\r
-               RXEVM_1=0;\r
-       if(RXEVM_2 < -63)\r
-               RXEVM_2=0;\r
-       \r
        /*\r
        if(RX_BW == 0){\r
                RXEVM_0 -= evm_comp_20M;\r
                RXEVM_1 -= evm_comp_20M;\r
        /*\r
        if(RX_BW == 0){\r
                RXEVM_0 -= evm_comp_20M;\r
                RXEVM_1 -= evm_comp_20M;\r
-               RXEVM_2 -= evm_comp_20M;                \r
+               RXEVM_2 -= evm_comp_20M;\r
                }\r
        else if(RX_BW == 1){\r
                RXEVM_0 -= evm_comp_40M;\r
                RXEVM_1 -= evm_comp_40M;\r
                }\r
        else if(RX_BW == 1){\r
                RXEVM_0 -= evm_comp_40M;\r
                RXEVM_1 -= evm_comp_40M;\r
-               RXEVM_2 -= evm_comp_40M;                \r
+               RXEVM_2 -= evm_comp_40M;\r
                }\r
        else if (RX_BW == 2){\r
                RXEVM_0 -= evm_comp_80M;\r
                RXEVM_1 -= evm_comp_80M;\r
                }\r
        else if (RX_BW == 2){\r
                RXEVM_0 -= evm_comp_80M;\r
                RXEVM_1 -= evm_comp_80M;\r
-               RXEVM_2 -= evm_comp_80M;                \r
+               RXEVM_2 -= evm_comp_80M;\r
                }\r
                */\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d", "RXEVM (1ss/2ss/3ss)", RXEVM_0, RXEVM_1, RXEVM_2);\r
                }\r
                */\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d", "RXEVM (1ss/2ss/3ss)", RXEVM_0, RXEVM_1, RXEVM_2);\r
@@ -331,543 +510,912 @@ phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm)
 //     rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "B_RXSNR", (value32&0xFF00)>>9);\r
 //     DCMD_Printf(BbDbgBuf);\r
 \r
 //     rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "B_RXSNR", (value32&0xFF00)>>9);\r
 //     DCMD_Printf(BbDbgBuf);\r
 \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xF8C ,bMaskDWord);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "CSI_1st /CSI_2nd", value32&0xFFFF, ((value32&0xFFFF0000)>>16));\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xF8C , bMaskDWord);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "CSI_1st /CSI_2nd", value32 & 0xFFFF, ((value32 & 0xFFFF0000) >> 16));\r
        DCMD_Printf(BbDbgBuf);\r
        DCMD_Printf(BbDbgBuf);\r
-       ///////////////////////////////////////////////////////                 \r
-       \r
+\r
+\r
        //BW & Mode Detection\r
 \r
        //Reset Page F Counter\r
        //BW & Mode Detection\r
 \r
        //Reset Page F Counter\r
-       ODM_SetBBReg(pDM_Odm, 0xB58 ,BIT0, 1);\r
-       ODM_SetBBReg(pDM_Odm, 0xB58 ,BIT0, 0);\r
-       \r
+       ODM_SetBBReg(pDM_Odm, 0xB58 , BIT0, 1);\r
+       ODM_SetBBReg(pDM_Odm, 0xB58 , BIT0, 0);\r
+\r
        //CFO Report Info\r
        //Short CFO\r
        //CFO Report Info\r
        //Short CFO\r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xd0c ,bMaskDWord);\r
-       value32_1 = ODM_GetBBReg(pDM_Odm, 0xd4c ,bMaskDWord);\r
-       value32_2 = ODM_GetBBReg(pDM_Odm, 0xd8c ,bMaskDWord);\r
-       value32_3 = ODM_GetBBReg(pDM_Odm, 0xdcc ,bMaskDWord);\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xd0c , bMaskDWord);\r
+       value32_1 = ODM_GetBBReg(pDM_Odm, 0xd4c , bMaskDWord);\r
+       value32_2 = ODM_GetBBReg(pDM_Odm, 0xd8c , bMaskDWord);\r
+       value32_3 = ODM_GetBBReg(pDM_Odm, 0xdcc , bMaskDWord);\r
 \r
 \r
-       SFO_A=(s4Byte)(value32&bMask12Bits);\r
-       SFO_B=(s4Byte)(value32_1&bMask12Bits);\r
-       SFO_C=(s4Byte)(value32_2&bMask12Bits);\r
-       SFO_D=(s4Byte)(value32_3&bMask12Bits);\r
+       SFO_A = (s4Byte)(value32 & bMask12Bits);\r
+       SFO_B = (s4Byte)(value32_1 & bMask12Bits);\r
+       SFO_C = (s4Byte)(value32_2 & bMask12Bits);\r
+       SFO_D = (s4Byte)(value32_3 & bMask12Bits);\r
 \r
 \r
-       LFO_A=(s4Byte)(value32>>16);\r
-       LFO_B=(s4Byte)(value32_1>>16);\r
-       LFO_C=(s4Byte)(value32_2>>16);\r
-       LFO_D=(s4Byte)(value32_3>>16);\r
+       LFO_A = (s4Byte)(value32 >> 16);\r
+       LFO_B = (s4Byte)(value32_1 >> 16);\r
+       LFO_C = (s4Byte)(value32_2 >> 16);\r
+       LFO_D = (s4Byte)(value32_3 >> 16);\r
 \r
        //SFO 2's to dec\r
 \r
        //SFO 2's to dec\r
-       if(SFO_A >2047)\r
-       {\r
-               SFO_A=SFO_A-4096;\r
-       }\r
-       SFO_A=(SFO_A*312500)/2048;\r
-       \r
-       if(SFO_B >2047)\r
-       {\r
-               SFO_B=SFO_B-4096;\r
-       }\r
-       SFO_B=(SFO_B*312500)/2048;\r
-       if(SFO_C >2047)\r
-       {\r
-               SFO_C=SFO_C-4096;\r
-       }\r
-       SFO_C=(SFO_C*312500)/2048;\r
-       if(SFO_D >2047)\r
-       {\r
-               SFO_D=SFO_D-4096;\r
-       }\r
-       SFO_D=(SFO_D*312500)/2048;\r
+       if (SFO_A > 2047)\r
+               SFO_A = SFO_A - 4096;\r
+       SFO_A = (SFO_A * 312500) / 2048;\r
+\r
+       if (SFO_B > 2047)\r
+               SFO_B = SFO_B - 4096;\r
+       SFO_B = (SFO_B * 312500) / 2048;\r
+       if (SFO_C > 2047)\r
+               SFO_C = SFO_C - 4096;\r
+       SFO_C = (SFO_C * 312500) / 2048;\r
+       if (SFO_D > 2047)\r
+               SFO_D = SFO_D - 4096;\r
+       SFO_D = (SFO_D * 312500) / 2048;\r
 \r
        //LFO 2's to dec\r
 \r
        //LFO 2's to dec\r
-       \r
-       if(LFO_A >4095)\r
-       {\r
-               LFO_A=LFO_A-8192;\r
-       }\r
-       \r
-       if(LFO_B >4095)\r
-       {\r
-               LFO_B=LFO_B-8192;\r
-       }\r
 \r
 \r
-       if(LFO_C>4095)\r
-       {\r
-               LFO_C=LFO_C-8192;\r
-       }\r
+       if (LFO_A > 4095)\r
+               LFO_A = LFO_A - 8192;\r
 \r
 \r
-       if(LFO_D >4095)\r
-       {\r
-               LFO_D=LFO_D-8192;\r
-       }\r
-       LFO_A=LFO_A*312500/4096;\r
-       LFO_B=LFO_B*312500/4096;\r
-       LFO_C=LFO_C*312500/4096;\r
-       LFO_D=LFO_D*312500/4096;\r
+       if (LFO_B > 4095)\r
+               LFO_B = LFO_B - 8192;\r
+\r
+       if (LFO_C > 4095)\r
+               LFO_C = LFO_C - 8192;\r
+\r
+       if (LFO_D > 4095)\r
+               LFO_D = LFO_D - 8192;\r
+       LFO_A = LFO_A * 312500 / 4096;\r
+       LFO_B = LFO_B * 312500 / 4096;\r
+       LFO_C = LFO_C * 312500 / 4096;\r
+       LFO_D = LFO_D * 312500 / 4096;\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "CFO Report Info");\r
        DCMD_Printf(BbDbgBuf);\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "CFO Report Info");\r
        DCMD_Printf(BbDbgBuf);\r
-       \r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  Short CFO(Hz) <A/B/C/D>", SFO_A,SFO_B,SFO_C,SFO_D);\r
+\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  Short CFO(Hz) <A/B/C/D>", SFO_A, SFO_B, SFO_C, SFO_D);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        DCMD_Printf(BbDbgBuf);\r
 \r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  Long CFO(Hz) <A/B/C/D>", LFO_A,LFO_B,LFO_C,LFO_D);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  Long CFO(Hz) <A/B/C/D>", LFO_A, LFO_B, LFO_C, LFO_D);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        //SCFO\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        //SCFO\r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xd10 ,bMaskDWord);\r
-       value32_1 = ODM_GetBBReg(pDM_Odm, 0xd50 ,bMaskDWord);\r
-       value32_2 = ODM_GetBBReg(pDM_Odm, 0xd90 ,bMaskDWord);\r
-       value32_3 = ODM_GetBBReg(pDM_Odm, 0xdd0 ,bMaskDWord);\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xd10 , bMaskDWord);\r
+       value32_1 = ODM_GetBBReg(pDM_Odm, 0xd50 , bMaskDWord);\r
+       value32_2 = ODM_GetBBReg(pDM_Odm, 0xd90 , bMaskDWord);\r
+       value32_3 = ODM_GetBBReg(pDM_Odm, 0xdd0 , bMaskDWord);\r
 \r
 \r
-       SFO_A=(s4Byte)(value32&0x7ff);\r
-       SFO_B=(s4Byte)(value32_1&0x7ff);\r
-       SFO_C=(s4Byte)(value32_2&0x7ff);\r
-       SFO_D=(s4Byte)(value32_3&0x7ff);\r
+       SFO_A = (s4Byte)(value32 & 0x7ff);\r
+       SFO_B = (s4Byte)(value32_1 & 0x7ff);\r
+       SFO_C = (s4Byte)(value32_2 & 0x7ff);\r
+       SFO_D = (s4Byte)(value32_3 & 0x7ff);\r
 \r
 \r
-       if(SFO_A >1023)\r
-       {\r
-               SFO_A=SFO_A-2048;\r
-       }\r
-       \r
-       if(SFO_B >2047)\r
-       {\r
-               SFO_B=SFO_B-4096;\r
-}\r
+       if (SFO_A > 1023)\r
+               SFO_A = SFO_A - 2048;\r
 \r
 \r
-       if(SFO_C >2047)\r
-       {\r
-               SFO_C=SFO_C-4096;\r
-       }\r
+       if (SFO_B > 2047)\r
+               SFO_B = SFO_B - 4096;\r
 \r
 \r
-       if(SFO_D >2047)\r
-       {\r
-               SFO_D=SFO_D-4096;\r
-       }\r
-       \r
-       SFO_A=SFO_A*312500/1024;\r
-       SFO_B=SFO_B*312500/1024;\r
-       SFO_C=SFO_C*312500/1024;\r
-       SFO_D=SFO_D*312500/1024;\r
+       if (SFO_C > 2047)\r
+               SFO_C = SFO_C - 4096;\r
 \r
 \r
-       LFO_A=(s4Byte)(value32>>16);\r
-       LFO_B=(s4Byte)(value32_1>>16);\r
-       LFO_C=(s4Byte)(value32_2>>16);\r
-       LFO_D=(s4Byte)(value32_3>>16);\r
+       if (SFO_D > 2047)\r
+               SFO_D = SFO_D - 4096;\r
 \r
 \r
-       if(LFO_A >4095)\r
-       {\r
-               LFO_A=LFO_A-8192;\r
-       }\r
-       \r
-       if(LFO_B >4095)\r
-       {\r
-               LFO_B=LFO_B-8192;\r
-       }\r
+       SFO_A = SFO_A * 312500 / 1024;\r
+       SFO_B = SFO_B * 312500 / 1024;\r
+       SFO_C = SFO_C * 312500 / 1024;\r
+       SFO_D = SFO_D * 312500 / 1024;\r
 \r
 \r
-       if(LFO_C>4095)\r
-       {\r
-               LFO_C=LFO_C-8192;\r
-       }\r
+       LFO_A = (s4Byte)(value32 >> 16);\r
+       LFO_B = (s4Byte)(value32_1 >> 16);\r
+       LFO_C = (s4Byte)(value32_2 >> 16);\r
+       LFO_D = (s4Byte)(value32_3 >> 16);\r
 \r
 \r
-       if(LFO_D >4095)\r
-       {\r
-               LFO_D=LFO_D-8192;\r
-       }\r
-       LFO_A=LFO_A*312500/4096;\r
-       LFO_B=LFO_B*312500/4096;\r
-       LFO_C=LFO_C*312500/4096;\r
-       LFO_D=LFO_D*312500/4096;\r
-       \r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  Value SCFO(Hz) <A/B/C/D>", SFO_A,SFO_B,SFO_C,SFO_D);\r
+       if (LFO_A > 4095)\r
+               LFO_A = LFO_A - 8192;\r
+\r
+       if (LFO_B > 4095)\r
+               LFO_B = LFO_B - 8192;\r
+\r
+       if (LFO_C > 4095)\r
+               LFO_C = LFO_C - 8192;\r
+\r
+       if (LFO_D > 4095)\r
+               LFO_D = LFO_D - 8192;\r
+       LFO_A = LFO_A * 312500 / 4096;\r
+       LFO_B = LFO_B * 312500 / 4096;\r
+       LFO_C = LFO_C * 312500 / 4096;\r
+       LFO_D = LFO_D * 312500 / 4096;\r
+\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  Value SCFO(Hz) <A/B/C/D>", SFO_A, SFO_B, SFO_C, SFO_D);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        DCMD_Printf(BbDbgBuf);\r
 \r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  ACQ CFO(Hz) <A/B/C/D>", LFO_A,LFO_B,LFO_C,LFO_D);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  ACQ CFO(Hz) <A/B/C/D>", LFO_A, LFO_B, LFO_C, LFO_D);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        DCMD_Printf(BbDbgBuf);\r
 \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xd14 ,bMaskDWord);\r
-       value32_1 = ODM_GetBBReg(pDM_Odm, 0xd54 ,bMaskDWord);\r
-       value32_2 = ODM_GetBBReg(pDM_Odm, 0xd94 ,bMaskDWord);\r
-       value32_3 = ODM_GetBBReg(pDM_Odm, 0xdd4 ,bMaskDWord);\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xd14 , bMaskDWord);\r
+       value32_1 = ODM_GetBBReg(pDM_Odm, 0xd54 , bMaskDWord);\r
+       value32_2 = ODM_GetBBReg(pDM_Odm, 0xd94 , bMaskDWord);\r
+       value32_3 = ODM_GetBBReg(pDM_Odm, 0xdd4 , bMaskDWord);\r
 \r
 \r
-       LFO_A=(s4Byte)(value32>>16);\r
-       LFO_B=(s4Byte)(value32_1>>16);\r
-       LFO_C=(s4Byte)(value32_2>>16);\r
-       LFO_D=(s4Byte)(value32_3>>16);\r
+       LFO_A = (s4Byte)(value32 >> 16);\r
+       LFO_B = (s4Byte)(value32_1 >> 16);\r
+       LFO_C = (s4Byte)(value32_2 >> 16);\r
+       LFO_D = (s4Byte)(value32_3 >> 16);\r
 \r
 \r
-       if(LFO_A >4095)\r
-       {\r
-               LFO_A=LFO_A-8192;\r
-       }\r
-       \r
-       if(LFO_B >4095)\r
-       {\r
-               LFO_B=LFO_B-8192;\r
-       }\r
+       if (LFO_A > 4095)\r
+               LFO_A = LFO_A - 8192;\r
 \r
 \r
-       if(LFO_C>4095)\r
-       {\r
-               LFO_C=LFO_C-8192;\r
-       }\r
+       if (LFO_B > 4095)\r
+               LFO_B = LFO_B - 8192;\r
 \r
 \r
-       if(LFO_D >4095)\r
-       {\r
-               LFO_D=LFO_D-8192;\r
-       }\r
-       LFO_A=LFO_A*312500/4096;\r
-       LFO_B=LFO_B*312500/4096;\r
-       LFO_C=LFO_C*312500/4096;\r
-       LFO_D=LFO_D*312500/4096;\r
-       \r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  End CFO(Hz) <A/B/C/D>", LFO_A,LFO_B,LFO_C,LFO_D);\r
+       if (LFO_C > 4095)\r
+               LFO_C = LFO_C - 8192;\r
+\r
+       if (LFO_D > 4095)\r
+               LFO_D = LFO_D - 8192;\r
+\r
+       LFO_A = LFO_A * 312500 / 4096;\r
+       LFO_B = LFO_B * 312500 / 4096;\r
+       LFO_C = LFO_C * 312500 / 4096;\r
+       LFO_D = LFO_D * 312500 / 4096;\r
+\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  End CFO(Hz) <A/B/C/D>", LFO_A, LFO_B, LFO_C, LFO_D);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        DCMD_Printf(BbDbgBuf);\r
 \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xf20 ,bMaskDWord);   //L SIG\r
-       \r
-       Tail=(u1Byte)((value32&0xfc0000)>>16);\r
-       Parity = (u1Byte)((value32&0x20000)>>16);\r
-       Length =(u2Byte)((value32&0x1ffe00)>>8);\r
-       rsv = (u1Byte)(value32&0x10);\r
-       MCSS=(u1Byte)(value32&0x0f);\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xf20 , bMaskDWord);  /*L SIG*/\r
 \r
 \r
-       switch(MCSS)\r
-       {\r
-               case 0x0b:\r
-                       idx=0;\r
+       Tail = (u1Byte)((value32 & 0xfc0000) >> 16);\r
+       Parity = (u1Byte)((value32 & 0x20000) >> 16);\r
+       Length = (u2Byte)((value32 & 0x1ffe00) >> 8);\r
+       rsv = (u1Byte)(value32 & 0x10);\r
+       MCSS = (u1Byte)(value32 & 0x0f);\r
+\r
+       switch (MCSS) {\r
+       case 0x0b:\r
+               idx = 0;\r
                break;\r
                break;\r
-               case 0x0f:\r
-                       idx=1;\r
+       case 0x0f:\r
+               idx = 1;\r
                break;\r
                break;\r
-               case 0x0a:\r
-                       idx=2;\r
+       case 0x0a:\r
+               idx = 2;\r
                break;\r
                break;\r
-               case 0x0e:\r
-                       idx=3;\r
+       case 0x0e:\r
+               idx = 3;\r
                break;\r
                break;\r
-               case 0x09:\r
-                       idx=4;\r
+       case 0x09:\r
+               idx = 4;\r
                break;\r
                break;\r
-               case 0x08:\r
-                       idx=5;\r
+       case 0x08:\r
+               idx = 5;\r
                break;\r
                break;\r
-               case 0x0c:\r
-                       idx=6;\r
+       case 0x0c:\r
+               idx = 6;\r
                break;\r
                break;\r
-               default:\r
-                       idx=6;\r
+       default:\r
+               idx = 6;\r
                break;\r
                break;\r
-                       \r
+\r
        }\r
 \r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "L-SIG");\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        }\r
 \r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "L-SIG");\r
        DCMD_Printf(BbDbgBuf);\r
 \r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n   Rate:%s", L_rate[idx]);             \r
-       DCMD_Printf(BbDbgBuf);  \r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n   Rate:%s", L_rate[idx]);\r
+       DCMD_Printf(BbDbgBuf);\r
 \r
 \r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x/ %x /%x", "  Rsv/Length/Parity",rsv,RX_BW,Length);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x/ %x /%x", "  Rsv/Length/Parity", rsv, RX_BW, Length);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "HT-SIG1");\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        DCMD_Printf(BbDbgBuf);\r
 \r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "HT-SIG1");\r
        DCMD_Printf(BbDbgBuf);\r
 \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xf2c ,bMaskDWord);   //HT SIG\r
-       if(RX_HT == 1)\r
-       {\r
-       \r
-               HMCSS=(u1Byte)(value32&0x7F);\r
-               HRX_BW = (u1Byte)(value32&0x80);\r
-               HLength =(u2Byte)((value32>>8)&0xffff);\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xf2c , bMaskDWord);  /*HT SIG*/\r
+       if (RX_HT == 1) {\r
+\r
+               HMCSS = (u1Byte)(value32 & 0x7F);\r
+               HRX_BW = (u1Byte)(value32 & 0x80);\r
+               HLength = (u2Byte)((value32 >> 8) & 0xffff);\r
        }\r
        }\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x", "  MCS/BW/Length",HMCSS,HRX_BW,HLength);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x", "  MCS/BW/Length", HMCSS, HRX_BW, HLength);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "HT-SIG2");\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        DCMD_Printf(BbDbgBuf);\r
 \r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "HT-SIG2");\r
        DCMD_Printf(BbDbgBuf);\r
 \r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xf30 ,bMaskDWord);   //HT SIG\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xf30 , bMaskDWord);  /*HT SIG*/\r
+\r
+       if (RX_HT == 1) {\r
+               smooth = (u1Byte)(value32 & 0x01);\r
+               htsound = (u1Byte)(value32 & 0x02);\r
+               rsv = (u1Byte)(value32 & 0x04);\r
+               agg = (u1Byte)(value32 & 0x08);\r
+               stbc = (u1Byte)(value32 & 0x30);\r
+               fec = (u1Byte)(value32 & 0x40);\r
+               sgi = (u1Byte)(value32 & 0x80);\r
+               htltf = (u1Byte)((value32 & 0x300) >> 8);\r
+               htcrc8 = (u2Byte)((value32 & 0x3fc00) >> 8);\r
+               Tail = (u1Byte)((value32 & 0xfc0000) >> 16);\r
 \r
 \r
-       if(RX_HT == 1)\r
-       {\r
-               smooth = (u1Byte)(value32&0x01);\r
-               htsound =  (u1Byte)(value32&0x02);\r
-               rsv=(u1Byte)(value32&0x04);\r
-               agg =(u1Byte)(value32&0x08);\r
-               stbc =(u1Byte)(value32&0x30);\r
-               fec=(u1Byte)(value32&0x40);\r
-               sgi=(u1Byte)(value32&0x80);\r
-               htltf=(u1Byte)((value32&0x300)>>8);\r
-               htcrc8=(u2Byte)((value32&0x3fc00)>>8);\r
-               Tail=(u1Byte)((value32&0xfc0000)>>16);\r
 \r
 \r
-       \r
        }\r
        }\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/ %x/ %x", "  Smooth/NoSound/Rsv/Aggregate/STBC/LDPC",smooth,htsound,rsv,agg,stbc,fec);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/ %x/ %x", "  Smooth/NoSound/Rsv/Aggregate/STBC/LDPC", smooth, htsound, rsv, agg, stbc, fec);\r
        DCMD_Printf(BbDbgBuf);\r
        DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x", "  SGI/E-HT-LTFs/CRC/Tail",sgi,htltf,htcrc8,Tail);\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x", "  SGI/E-HT-LTFs/CRC/Tail", sgi, htltf, htcrc8, Tail);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        DCMD_Printf(BbDbgBuf);\r
 \r
-       \r
+\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-A1");\r
        DCMD_Printf(BbDbgBuf);\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-A1");\r
        DCMD_Printf(BbDbgBuf);\r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xf2c ,bMaskDWord);   //VHT SIG A1\r
-       if(RX_HT == 2)\r
-       {\r
-               //value32 = ODM_GetBBReg(pDM_Odm, 0xf2c ,bMaskDWord);   //VHT SIG A1\r
-               vRX_BW=(u1Byte)(value32&0x03);\r
-               vrsv=(u1Byte)(value32&0x04);\r
-               vstbc =(u1Byte)(value32&0x08);\r
-               vgid = (u1Byte)((value32&0x3f0)>>4);\r
-               vNsts = (u1Byte)(((value32&0x1c00)>>8)+1);\r
-               vpaid = (u2Byte)(value32&0x3fe);\r
-               vtxops =(u1Byte)((value32&0x400000)>>20);\r
-               vrsv2 = (u1Byte)((value32&0x800000)>>20);\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xf2c , bMaskDWord);  /*VHT SIG A1*/\r
+       if (RX_HT == 2) {\r
+               /* value32 = ODM_GetBBReg(pDM_Odm, 0xf2c ,bMaskDWord);*/\r
+               vRX_BW = (u1Byte)(value32 & 0x03);\r
+               vrsv = (u1Byte)(value32 & 0x04);\r
+               vstbc = (u1Byte)(value32 & 0x08);\r
+               vgid = (u1Byte)((value32 & 0x3f0) >> 4);\r
+               vNsts = (u1Byte)(((value32 & 0x1c00) >> 8) + 1);\r
+               vpaid = (u2Byte)(value32 & 0x3fe);\r
+               vtxops = (u1Byte)((value32 & 0x400000) >> 20);\r
+               vrsv2 = (u1Byte)((value32 & 0x800000) >> 20);\r
        }\r
 \r
        //rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F2C", value32);\r
        //DCMD_Printf(BbDbgBuf);\r
 \r
        }\r
 \r
        //rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F2C", value32);\r
        //DCMD_Printf(BbDbgBuf);\r
 \r
-       \r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/ %x/ %x /%x /%x", "  BW/Rsv1/STBC/GID/Nsts/PAID/TXOPPS/Rsv2",vRX_BW,vrsv,vstbc,vgid,vNsts,vpaid,vtxops,vrsv2);\r
+\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/ %x/ %x /%x /%x", "  BW/Rsv1/STBC/GID/Nsts/PAID/TXOPPS/Rsv2", vRX_BW, vrsv, vstbc, vgid, vNsts, vpaid, vtxops, vrsv2);\r
        DCMD_Printf(BbDbgBuf);\r
        DCMD_Printf(BbDbgBuf);\r
-       \r
+\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-A2");\r
        DCMD_Printf(BbDbgBuf);\r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-A2");\r
        DCMD_Printf(BbDbgBuf);\r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xf30 ,bMaskDWord);   //VHT SIG\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xf30 , bMaskDWord);  /*VHT SIG*/\r
 \r
 \r
 \r
 \r
-       if(RX_HT == 2)\r
-       {\r
-               //value32 = ODM_GetBBReg(pDM_Odm, 0xf30 ,bMaskDWord);   //VHT SIG\r
+       if (RX_HT == 2) {\r
+               /*value32 = ODM_GetBBReg(pDM_Odm, 0xf30 ,bMaskDWord); */  /*VHT SIG*/\r
 \r
                //sgi=(u1Byte)(value32&0x01);\r
 \r
                //sgi=(u1Byte)(value32&0x01);\r
-               sgiext =(u1Byte)(value32&0x03);\r
+               sgiext = (u1Byte)(value32 & 0x03);\r
                //fec = (u1Byte)(value32&0x04);\r
                //fec = (u1Byte)(value32&0x04);\r
-               fecext = (u1Byte)(value32&0x0C);\r
+               fecext = (u1Byte)(value32 & 0x0C);\r
 \r
 \r
-               vMCSS =(u1Byte)(value32&0xf0); \r
-               bf = (u1Byte)((value32&0x100)>>8); \r
-               vrsv =(u1Byte)((value32&0x200)>>8);  \r
-               vhtcrc8=(u2Byte)((value32&0x3fc00)>>8);\r
-               vTail=(u1Byte)((value32&0xfc0000)>>16);\r
+               vMCSS = (u1Byte)(value32 & 0xf0);\r
+               bf = (u1Byte)((value32 & 0x100) >> 8);\r
+               vrsv = (u1Byte)((value32 & 0x200) >> 8);\r
+               vhtcrc8 = (u2Byte)((value32 & 0x3fc00) >> 8);\r
+               vTail = (u1Byte)((value32 & 0xfc0000) >> 16);\r
        }\r
        }\r
-       //rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F30", value32);\r
-       //DCMD_Printf(BbDbgBuf);\r
-       \r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/ %x/ %x/ %x", "  SGI/FEC/MCS/BF/Rsv/CRC/Tail",sgiext,fecext,vMCSS,bf,vrsv,vhtcrc8,vTail);\r
+       /*rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F30", value32);*/\r
+       /*DCMD_Printf(BbDbgBuf);*/\r
+\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/ %x/ %x/ %x", "  SGI/FEC/MCS/BF/Rsv/CRC/Tail", sgiext, fecext, vMCSS, bf, vrsv, vhtcrc8, vTail);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-B");\r
        DCMD_Printf(BbDbgBuf);\r
        DCMD_Printf(BbDbgBuf);\r
 \r
        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-B");\r
        DCMD_Printf(BbDbgBuf);\r
-       value32 = ODM_GetBBReg(pDM_Odm, 0xf34 ,bMaskDWord);   //VHT SIG\r
+       value32 = ODM_GetBBReg(pDM_Odm, 0xf34 , bMaskDWord);  /*VHT SIG*/\r
        {\r
        {\r
-               vLength=(u2Byte)(value32&0x1fffff);\r
-               vbrsv = (u1Byte)((value32&0x600000)>>20);\r
-               vbTail =(u2Byte)((value32&0x1f800000)>>20);\r
-               vbcrc = (u1Byte)((value32&0x80000000)>>28);\r
-       \r
+               vLength = (u2Byte)(value32 & 0x1fffff);\r
+               vbrsv = (u1Byte)((value32 & 0x600000) >> 20);\r
+               vbTail = (u2Byte)((value32 & 0x1f800000) >> 20);\r
+               vbcrc = (u1Byte)((value32 & 0x80000000) >> 28);\r
+\r
        }\r
        }\r
-       //rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F34", value32);\r
-       //DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/", "  Length/Rsv/Tail/CRC",vLength,vbrsv,vbTail,vbcrc);\r
+       /*rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F34", value32);*/\r
+       /*DCMD_Printf(BbDbgBuf);*/\r
+       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/", "  Length/Rsv/Tail/CRC", vLength, vbrsv, vbTail, vbcrc);\r
        DCMD_Printf(BbDbgBuf);\r
        DCMD_Printf(BbDbgBuf);\r
-       \r
-               \r
+\r
+\r
 }\r
 \r
 }\r
 \r
+void phydm_sbd_check(\r
+       IN      PDM_ODM_T                                       pDM_Odm\r
+)\r
+{\r
+       static u4Byte   pkt_cnt = 0;\r
+       static BOOLEAN sbd_state = 0;\r
+       u4Byte  sym_count, count, value32;\r
+\r
+       if (sbd_state == 0) {\r
+               pkt_cnt++;\r
+               if (pkt_cnt % 5 == 0) { /*read SBD conter once every 5 packets*/\r
+                       ODM_SetTimer(pDM_Odm, &pDM_Odm->sbdcnt_timer, 0); /*ms*/\r
+                       sbd_state = 1;\r
+               }\r
+       } else { /*read counter*/\r
+               value32 = ODM_GetBBReg(pDM_Odm, 0xF98, bMaskDWord);\r
+               sym_count = (value32 & 0x7C000000) >> 26;\r
+               count = (value32 & 0x3F00000) >> 20;\r
+               DbgPrint("#SBD#    sym_count   %d   count   %d\n", sym_count, count);\r
+               sbd_state = 0;\r
+       }\r
+}\r
 \r
 \r
-VOID phydm_BasicProfile(\r
+void phydm_sbd_callback(\r
+       PRT_TIMER               pTimer\r
+)\r
+{\r
+       PADAPTER                Adapter = (PADAPTER)pTimer->Adapter;\r
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
+\r
+#if USE_WORKITEM\r
+       ODM_ScheduleWorkItem(&pDM_Odm->sbdcnt_workitem);\r
+#else\r
+       phydm_sbd_check(pDM_Odm);\r
+#endif\r
+}\r
+\r
+void phydm_sbd_workitem_callback(\r
+       IN PVOID            pContext\r
+)\r
+{\r
+       PADAPTER        pAdapter = (PADAPTER)pContext;\r
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
+       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
+\r
+       phydm_sbd_check(pDM_Odm);\r
+}\r
+#endif\r
+VOID\r
+phydm_BasicDbgMessage\r
+(\r
        IN              PVOID                   pDM_VOID\r
        IN              PVOID                   pDM_VOID\r
-       )\r
+)\r
 {\r
 {\r
-        PDM_ODM_T              pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-        PADAPTER                      Adapter = pDM_Odm->Adapter;\r
-        char* Cut = NULL;\r
-       char* ICType = NULL;\r
+#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PFALSE_ALARM_STATISTICS FalseAlmCnt = (PFALSE_ALARM_STATISTICS)PhyDM_Get_Structure(pDM_Odm , PHYDM_FALSEALMCNT);\r
+       pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_BasicDbgMsg==>\n"));\r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("bLinked = %d, RSSI_Min = %d, CurrentIGI = 0x%x\n",\r
+                                pDM_Odm->bLinked, pDM_Odm->RSSI_Min, pDM_DigTable->CurIGValue));\r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("Cnt_Cck_fail = %d, Cnt_Ofdm_fail = %d, Total False Alarm = %d\n",\r
+                                FalseAlmCnt->Cnt_Cck_fail, FalseAlmCnt->Cnt_Ofdm_fail, FalseAlmCnt->Cnt_all));\r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("RxRate = 0x%x, RSSI_A = %d, RSSI_B = %d\n",\r
+                                pDM_Odm->RxRate, pDM_Odm->RSSI_A, pDM_Odm->RSSI_B));\r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("RSSI_C = %d, RSSI_D = %d\n", pDM_Odm->RSSI_C, pDM_Odm->RSSI_D));\r
+#endif\r
+}\r
 \r
 \r
-        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n%-35s", "% Basic Profile %");\r
-       DCMD_Printf(BbDbgBuf);\r
 \r
 \r
-       if(pDM_Odm->SupportICType == ODM_RTL8192C)\r
+VOID phydm_BasicProfile(\r
+       IN              PVOID                   pDM_VOID,\r
+       IN              u4Byte                  *_used,\r
+       OUT             char                            *output,\r
+       IN              u4Byte                  *_out_len\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       char  *Cut = NULL;\r
+       char *ICType = NULL;\r
+       u4Byte used = *_used;\r
+       u4Byte out_len = *_out_len;\r
+\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "%-35s\n", "% Basic Profile %"));\r
+\r
+       if (pDM_Odm->SupportICType == ODM_RTL8192C)                     \r
                ICType = "RTL8192C";\r
                ICType = "RTL8192C";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192D)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8192D)\r
                ICType = "RTL8192D";\r
                ICType = "RTL8192D";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8723A)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
                ICType = "RTL8723A";\r
                ICType = "RTL8723A";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
                ICType = "RTL8188E";\r
                ICType = "RTL8188E";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8812)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8812)\r
                ICType = "RTL8812A";\r
                ICType = "RTL8812A";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8821)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8821)\r
                ICType = "RTL8821A";\r
                ICType = "RTL8821A";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
                ICType = "RTL8192E";\r
                ICType = "RTL8192E";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
                ICType = "RTL8723B";\r
                ICType = "RTL8723B";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
                ICType = "RTL8814A";\r
                ICType = "RTL8814A";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8881A)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8881A)\r
                ICType = "RTL8881A";\r
                ICType = "RTL8881A";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8821B)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8821B)\r
                ICType = "RTL8821B";\r
                ICType = "RTL8821B";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8822B)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8822B)\r
                ICType = "RTL8822B";\r
                ICType = "RTL8822B";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8703B)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8703B)\r
                ICType = "RTL8703B";\r
                ICType = "RTL8703B";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8195A)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8195A)\r
                ICType = "RTL8195A";\r
                ICType = "RTL8195A";\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8188F)\r
+       else if (pDM_Odm->SupportICType == ODM_RTL8188F)\r
                ICType = "RTL8188F";\r
                ICType = "RTL8188F";\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s (MP Chip: %s)","IC Type", ICType, pDM_Odm->bIsMPChip?"Yes":"No");          \r
-       DCMD_Printf(BbDbgBuf);\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s (MP Chip: %s)\n", "IC Type", ICType, pDM_Odm->bIsMPChip ? "Yes" : "No"));\r
+\r
+       if (pDM_Odm->CutVersion == ODM_CUT_A)                   \r
+               Cut = "A";\r
+       else if (pDM_Odm->CutVersion == ODM_CUT_B)            \r
+               Cut = "B";\r
+       else if (pDM_Odm->CutVersion == ODM_CUT_C)            \r
+               Cut = "C";\r
+       else if (pDM_Odm->CutVersion == ODM_CUT_D)            \r
+               Cut = "D";\r
+       else if (pDM_Odm->CutVersion == ODM_CUT_E)            \r
+               Cut = "E";\r
+       else if (pDM_Odm->CutVersion == ODM_CUT_F)            \r
+               Cut = "F";\r
+       else if (pDM_Odm->CutVersion == ODM_CUT_I)            \r
+               Cut = "I";\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Cut Version", Cut));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %d\n", "PHY Parameter Version", ODM_GetHWImgVersion(pDM_Odm)));\r
+#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+       {\r
+               PADAPTER                       Adapter = pDM_Odm->Adapter;\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %d (Subversion: %d)\n", "FW Version", Adapter->MgntInfo.FirmwareVersion, Adapter->MgntInfo.FirmwareSubVersion));\r
+       }\r
+#elif (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
+       {\r
+               struct rtl8192cd_priv *priv = pDM_Odm->priv;\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %d (Subversion: %d)\n", "FW Version", priv->pshare->fw_version, priv->pshare->fw_sub_version));\r
+       }\r
+#else\r
+       {\r
+               PADAPTER                       Adapter = pDM_Odm->Adapter;\r
+               HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %d (Subversion: %d)\n", "FW Version", pHalData->FirmwareVersion, pHalData->FirmwareSubVersion));\r
+       }\r
+#endif\r
+       //1 PHY DM Version List\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "%-35s\n", "% PHYDM Version %"));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Adaptivity", ADAPTIVITY_VERSION));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "DIG", DIG_VERSION));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Dynamic BB PowerSaving", DYNAMIC_BBPWRSAV_VERSION));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "CFO Tracking", CFO_TRACKING_VERSION));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Antenna Diversity", ANTDIV_VERSION));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Power Tracking", POWRTRACKING_VERSION));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Dynamic TxPower", DYNAMIC_TXPWR_VERSION));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "RA Info", RAINFO_VERSION));\r
+#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Antenna Detection", ANTDECT_VERSION));\r
+#endif\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Auto Channel Selection", ACS_VERSION));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "EDCA Turbo", EDCATURBO_VERSION));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Path Diversity", PATHDIV_VERSION));\r
+#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "RxHP", RXHP_VERSION));\r
+#endif\r
+       *_used = used;\r
+       *_out_len = out_len;\r
 \r
 \r
-        if(pDM_Odm->CutVersion==ODM_CUT_A)\r
-            Cut = "A";\r
-        else if(pDM_Odm->CutVersion==ODM_CUT_B)\r
-            Cut = "B";\r
-        else if(pDM_Odm->CutVersion==ODM_CUT_C)\r
-            Cut = "C";\r
-        else if(pDM_Odm->CutVersion==ODM_CUT_D)\r
-            Cut = "D";\r
-        else if(pDM_Odm->CutVersion==ODM_CUT_E)\r
-            Cut = "E";\r
-        else if(pDM_Odm->CutVersion==ODM_CUT_F)\r
-            Cut = "F";\r
-        else if(pDM_Odm->CutVersion==ODM_CUT_I)\r
-            Cut = "I";\r
-        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Cut Version", Cut);             \r
-       DCMD_Printf(BbDbgBuf);\r
-        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %d","PHY Parameter Version", ODM_GetHWImgVersion(pDM_Odm));          \r
-       DCMD_Printf(BbDbgBuf);\r
-        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %d (Subversion: %d)","FW Version", Adapter->MgntInfo.FirmwareVersion, Adapter->MgntInfo.FirmwareSubVersion);         \r
-       DCMD_Printf(BbDbgBuf);\r
+}\r
 \r
 \r
-       //1 PHY DM Version List\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n%-35s","% PHYDM Version %");\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Adaptivity", ADAPTIVITY_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","DIG", DIG_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Dynamic BB PowerSaving", DYNAMIC_BBPWRSAV_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","CFO Tracking", CFO_TRACKING_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Antenna Diversity", ANTDIV_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Power Tracking", POWRTRACKING_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Dynamic TxPower", DYNAMIC_TXPWR_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","RA Info", RAINFO_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Antenna Detection", ANTDECT_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Auto Channel Selection", ACS_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","EDCA Turbo", EDCATURBO_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Path Diversity", PATHDIV_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
-       rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","RxHP", RXHP_VERSION);\r
-       DCMD_Printf(BbDbgBuf);\r
+VOID\r
+phydm_fw_trace_en_h2c(\r
+       IN      PVOID   pDM_VOID,\r
+       IN      BOOLEAN         enable,\r
+       IN      u4Byte          monitor_mode,\r
+       IN      u4Byte          macid\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
+       u1Byte                  H2C_Parameter[3] = {0};\r
+\r
+       H2C_Parameter[0] = enable;\r
+       H2C_Parameter[1] = (u1Byte)monitor_mode;\r
+       H2C_Parameter[2] = (u1Byte)macid;\r
+       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("---->\n"));\r
+       if (monitor_mode == 0){\r
+               ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[H2C] FW_debug_en: (( %d ))\n", enable));\r
+       } else {\r
+               ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[H2C] FW_debug_en: (( %d )), mode: (( %d )), macid: (( %d ))\n", enable, monitor_mode, macid));\r
+       }\r
+       ODM_FillH2CCmd(pDM_Odm, PHYDM_H2C_FW_TRACE_EN, 3, H2C_Parameter);\r
+}\r
 \r
 \r
+VOID\r
+odm_debug_trace(\r
+       IN              PVOID           pDM_VOID,\r
+       IN              u4Byte          *const dm_value,\r
+       IN              u4Byte          *_used,\r
+       OUT             char            *output,\r
+       IN              u4Byte          *_out_len\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u8Byte                  pre_debug_components, one = 1;\r
+       u4Byte used = *_used;\r
+       u4Byte out_len = *_out_len;\r
+\r
+       pre_debug_components = pDM_Odm->DebugComponents;\r
+\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "\n%s\n", "================================"));\r
+       if (dm_value[0] == 100) {\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "[Debug Message] PhyDM Selection"));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "================================"));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "00. (( %s ))DIG\n", ((pDM_Odm->DebugComponents & ODM_COMP_DIG) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "01. (( %s ))RA_MASK\n", ((pDM_Odm->DebugComponents & ODM_COMP_RA_MASK) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "02. (( %s ))DYNAMIC_TXPWR\n", ((pDM_Odm->DebugComponents & ODM_COMP_DYNAMIC_TXPWR) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "03. (( %s ))FA_CNT\n", ((pDM_Odm->DebugComponents & ODM_COMP_FA_CNT) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "04. (( %s ))RSSI_MONITOR\n", ((pDM_Odm->DebugComponents & ODM_COMP_RSSI_MONITOR) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "05. (( %s ))CCK_PD\n", ((pDM_Odm->DebugComponents & ODM_COMP_CCK_PD) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "06. (( %s ))ANT_DIV\n", ((pDM_Odm->DebugComponents & ODM_COMP_ANT_DIV) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "07. (( %s ))PWR_SAVE\n", ((pDM_Odm->DebugComponents & ODM_COMP_PWR_SAVE) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "08. (( %s ))PWR_TRAIN\n", ((pDM_Odm->DebugComponents & ODM_COMP_PWR_TRAIN) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "09. (( %s ))RATE_ADAPTIVE\n", ((pDM_Odm->DebugComponents & ODM_COMP_RATE_ADAPTIVE) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "10. (( %s ))PATH_DIV\n", ((pDM_Odm->DebugComponents & ODM_COMP_PATH_DIV) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "11. (( %s ))PSD\n", ((pDM_Odm->DebugComponents & ODM_COMP_PSD) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "12. (( %s ))DYNAMIC_PRICCA\n", ((pDM_Odm->DebugComponents & ODM_COMP_DYNAMIC_PRICCA) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "13. (( %s ))RXHP\n", ((pDM_Odm->DebugComponents & ODM_COMP_RXHP) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "14. (( %s ))MP\n", ((pDM_Odm->DebugComponents & ODM_COMP_MP) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "15. (( %s ))CFO_TRACKING\n", ((pDM_Odm->DebugComponents & ODM_COMP_CFO_TRACKING) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "16. (( %s ))ACS\n", ((pDM_Odm->DebugComponents & ODM_COMP_ACS) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "17. (( %s ))ADAPTIVITY\n", ((pDM_Odm->DebugComponents & PHYDM_COMP_ADAPTIVITY) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "18. (( %s ))RA_DBG\n", ((pDM_Odm->DebugComponents & PHYDM_COMP_RA_DBG) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "20. (( %s ))EDCA_TURBO\n", ((pDM_Odm->DebugComponents & ODM_COMP_EDCA_TURBO) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "21. (( %s ))EARLY_MODE\n", ((pDM_Odm->DebugComponents & ODM_COMP_EARLY_MODE) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "22. (( %s ))FW_DEBUG_TRACE\n", ((pDM_Odm->DebugComponents & ODM_FW_DEBUG_TRACE) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "24. (( %s ))TX_PWR_TRACK\n", ((pDM_Odm->DebugComponents & ODM_COMP_TX_PWR_TRACK) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "25. (( %s ))RX_GAIN_TRACK\n", ((pDM_Odm->DebugComponents & ODM_COMP_RX_GAIN_TRACK) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "26. (( %s ))CALIBRATION\n", ((pDM_Odm->DebugComponents & ODM_COMP_CALIBRATION) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "29. (( %s ))BEAMFORMING_DEBUG\n", ((pDM_Odm->DebugComponents & BEAMFORMING_DEBUG) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "30. (( %s ))COMMON\n", ((pDM_Odm->DebugComponents & ODM_COMP_COMMON) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "31. (( %s ))INIT\n", ((pDM_Odm->DebugComponents & ODM_COMP_INIT) ? ("V") : ("."))));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "================================"));\r
+\r
+       } else if (dm_value[0] == 101) {\r
+               pDM_Odm->DebugComponents = 0;\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "Disable all debug components"));\r
+       } else {\r
+               if (dm_value[1] == 1) { /*enable*/\r
+                       pDM_Odm->DebugComponents |= (one << dm_value[0]);\r
+\r
+                       if (dm_value[0] == 22) { /*FW trace function*/\r
+                               phydm_fw_trace_en_h2c(pDM_Odm, 1, dm_value[2], dm_value[3]); /*H2C to enable C2H Msg*/\r
+                       }\r
+               } else if (dm_value[1] == 2) { /*disable*/\r
+                       pDM_Odm->DebugComponents &= ~(one << dm_value[0]);\r
+\r
+                       if (dm_value[0] == 22) { /*FW trace function*/\r
+                               phydm_fw_trace_en_h2c(pDM_Odm, 0, dm_value[2], dm_value[3]); /*H2C to disable C2H Msg*/\r
+                       }\r
+               } else\r
+                       PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "[Warning!!!]  1:enable,  2:disable"));\r
+       }\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "pre-DbgComponents = 0x%x\n", (u4Byte)pre_debug_components));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "Curr-DbgComponents = 0x%x\n", ((u4Byte)pDM_Odm->DebugComponents)));\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "================================"));\r
 }\r
 }\r
-#endif\r
+\r
+\r
+struct _PHYDM_COMMAND {\r
+       char name[16];\r
+       u1Byte id;\r
+};\r
+\r
+enum PHYDM_CMD_ID {\r
+       PHYDM_DEMO,\r
+       PHYDM_RA,\r
+       PHYDM_PROFILE,\r
+       PHYDM_PATHDIV,\r
+       PHYDM_DEBUG,\r
+       PHYDM_SUPPORT_ABLITY\r
+};\r
+\r
+struct _PHYDM_COMMAND phy_dm_ary[] = {\r
+       {"demo", PHYDM_DEMO},\r
+       {"ra", PHYDM_RA},\r
+       {"profile", PHYDM_PROFILE},\r
+       {"pathdiv", PHYDM_PATHDIV},\r
+       {"dbg", PHYDM_DEBUG},\r
+       {"ablity", PHYDM_SUPPORT_ABLITY}\r
+};\r
+\r
 VOID\r
 VOID\r
-phydm_BasicDbgMessage\r
-(\r
-       IN              PVOID                   pDM_VOID\r
-       )\r
+phydm_cmd_parser(\r
+       IN PDM_ODM_T    pDM_Odm,\r
+       IN char         input[][MAX_ARGV],\r
+       IN u4Byte       input_num,\r
+       IN u1Byte       flag,\r
+       OUT char        *output,\r
+       IN u4Byte       out_len\r
+)\r
 {\r
 {\r
-#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
-        PDM_ODM_T              pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
-       PFALSE_ALARM_STATISTICS FalseAlmCnt = (PFALSE_ALARM_STATISTICS)PhyDM_Get_Structure( pDM_Odm , PHYDM_FALSEALMCNT);\r
-       pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
-       \r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_BasicDbgMsg==>\n"));\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("bLinked = %d, RSSI_Min = %d, CurrentIGI = 0x%x \n",\r
-               pDM_Odm->bLinked, pDM_Odm->RSSI_Min, pDM_DigTable->CurIGValue) );\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("Cnt_Cck_fail = %d, Cnt_Ofdm_fail = %d, Total False Alarm = %d\n", \r
-               FalseAlmCnt->Cnt_Cck_fail, FalseAlmCnt->Cnt_Ofdm_fail, FalseAlmCnt->Cnt_all));\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("RxRate = 0x%x, RSSI_A = %d, RSSI_B = %d\n", \r
-               pDM_Odm->RxRate, pDM_Odm->RSSI_A, pDM_Odm->RSSI_B));\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("RSSI_C = %d, RSSI_D = %d\n", pDM_Odm->RSSI_C, pDM_Odm->RSSI_D));\r
+       u4Byte used = 0;\r
+       u1Byte id = 0;\r
+       int var1[5] = {0};\r
+       int i, input_idx = 0;\r
+\r
+       if (flag == 0) {\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "GET, nothing to print\n"));\r
+               return;\r
+       }\r
+\r
+       PHYDM_SNPRINTF((output + used, out_len - used, "\n"));\r
+\r
+       //Parsing Cmd ID\r
+       if (input_num) {\r
+               int n, i;\r
+\r
+               n = sizeof(phy_dm_ary) / sizeof(struct _PHYDM_COMMAND);\r
+               for (i = 0; i < n; i++) {\r
+                       if (strcmp(phy_dm_ary[i].name, input[0]) == 0) {\r
+                               id = phy_dm_ary[i].id;\r
+                               break;\r
+                       }\r
+               }\r
+               if (i == n) {\r
+                       PHYDM_SNPRINTF((output + used, out_len - used, "SET, command not found!\n"));\r
+                       return;\r
+               }\r
+       }\r
+\r
+       switch (id) {\r
+       case PHYDM_DEMO: { /*echo demo 10 0x3a z abcde >cmd*/\r
+               u4Byte   directory;\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_AP))\r
+               char   char_temp;\r
+#else\r
+               u4Byte char_temp;\r
+#endif\r
+               PHYDM_SSCANF(input[1], DCMD_DECIMAL, &directory);\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "Decimal Value = %d\n", directory));\r
+               PHYDM_SSCANF(input[2], DCMD_HEX, &directory);\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "Hex Value = 0x%x\n", directory));\r
+               PHYDM_SSCANF(input[3], DCMD_CHAR, &char_temp);\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "Char = %c\n", char_temp));\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "String = %s\n", input[4]));\r
+       }\r
+       break;\r
+\r
+       case PHYDM_RA:\r
+\r
+               for (i = 0; i < 5; i++) {\r
+                       if (input[i + 1]) {\r
+                               PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var1[i]);\r
+\r
+                               PHYDM_SNPRINTF((output + used, out_len - used, "new SET, RA_var[%d]= (( %d ))\n", i , var1[i]));\r
+                               input_idx++;\r
+                       }\r
+               }\r
+\r
+               if (input_idx >= 1) {\r
+                       /*PHYDM_SNPRINTF((output+used, out_len-used, "odm_RA_debug\n"));*/\r
+#if (defined(CONFIG_RA_DBG_CMD))\r
+                       odm_RA_debug(pDM_Odm, var1);\r
+#endif\r
+               }\r
+\r
+\r
+               break;\r
+\r
+       case PHYDM_PATHDIV:\r
+\r
+               for (i = 0; i < 5; i++) {\r
+                       if (input[i + 1]) {\r
+                               PHYDM_SSCANF(input[i + 1], DCMD_HEX, &var1[i]);\r
+\r
+                               /*PHYDM_SNPRINTF((output+used, out_len-used, "new SET, PATHDIV_var[%d]= (( %d ))\n", i , var1[i]));*/\r
+                               input_idx++;\r
+                       }\r
+               }\r
+\r
+               if (input_idx >= 1) {\r
+                       /*PHYDM_SNPRINTF((output+used, out_len-used, "odm_PATHDIV_debug\n"));*/\r
+#if (defined(CONFIG_PATH_DIVERSITY))\r
+                       odm_pathdiv_debug(pDM_Odm, var1, &used, output, &out_len);\r
 #endif\r
 #endif\r
+               }\r
+\r
+               break;\r
+\r
+       case PHYDM_DEBUG:\r
+\r
+               for (i = 0; i < 5; i++) {\r
+                       if (input[i + 1]) {\r
+                               PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var1[i]);\r
+\r
+                               /*PHYDM_SNPRINTF((output+used, out_len-used, "new SET, Debug_var[%d]= (( %d ))\n", i , var1[i]));*/\r
+                               input_idx++;\r
+                       }\r
+               }\r
+\r
+               if (input_idx >= 1) {\r
+                       /*PHYDM_SNPRINTF((output+used, out_len-used, "odm_debug_comp\n"));*/\r
+                       odm_debug_trace(pDM_Odm, var1, &used, output, &out_len);\r
+               }\r
+\r
+\r
+               break;\r
+\r
+       case PHYDM_SUPPORT_ABLITY:\r
+\r
+               for (i = 0; i < 5; i++) {\r
+                       if (input[i + 1]) {\r
+                               PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var1[i]);\r
+\r
+                               /*PHYDM_SNPRINTF((output+used, out_len-used, "new SET, support ablity_var[%d]= (( %d ))\n", i , var1[i]));*/\r
+                               input_idx++;\r
+                       }\r
+               }\r
+\r
+               if (input_idx >= 1) {\r
+                       /*PHYDM_SNPRINTF((output+used, out_len-used, "support ablity\n"));*/\r
+                       phydm_support_ablity_debug(pDM_Odm, var1, &used, output, &out_len);\r
+               }\r
+\r
+               break;\r
+\r
+       case PHYDM_PROFILE: /*echo profile, >cmd*/\r
+               phydm_BasicProfile(pDM_Odm, &used, output, &out_len);\r
+               break;\r
+\r
+       default:\r
+               PHYDM_SNPRINTF((output + used, out_len - used, "SET, unknown command!\n"));\r
+               break;\r
+\r
+       }\r
 }\r
 \r
 }\r
 \r
-#if( DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-struct _PHYDM_COMMAND {
-       char name[16];
-       u1Byte id;
-};
-
-enum PHYDM_CMD_ID {
-       PHYDM_ANTDIV,
-};
-
-struct _PHYDM_COMMAND phy_dm_ary[] = {
-       {"antdiv", PHYDM_ANTDIV},
-};
-
-s4Byte
-PhyDM_Cmd(
-       IN PDM_ODM_T    pDM_Odm,
-       IN char         *input,
-       IN u4Byte       in_len,
-       IN u1Byte       flag,
-       OUT char        *output,
-       IN u4Byte       out_len
-       )
-{
-       u4Byte used = 0;
-
-       if (flag == 0) {
-               if (out_len > used)
-                       used += snprintf(output+used, out_len-used, "GET, nothing to print\n");
-       } else {
-               char *token;
-               u1Byte id = 0;
-               int var = 0;
-
-               token = strsep(&input, ", ");
-               if (token) {
-                       int n, i;
-                       n = sizeof(phy_dm_ary)/sizeof(struct _PHYDM_COMMAND);
-                       for (i = 0; i < n; i++) {
-                               if (strcmp(phy_dm_ary[i].name, token) == 0) {
-                                       id = phy_dm_ary[i].id;
-                                       break;
-                               }
-                       }
-                       if (i == n) {
-                               if (out_len > used)
-                                       used += snprintf(output+used, out_len-used, "SET, command not found!\n");
-                               goto exit;
-                       }
-               }
-
-               switch (id) {
-               case PHYDM_ANTDIV:
-                       token = strsep(&input, ", ");
-                       sscanf(token, "%d", &var);
-                       if (out_len > used)
-                               used += snprintf(output+used, out_len-used, "SET, old antdiv_select=%d\n", pDM_Odm->antdiv_select);
-                       pDM_Odm->antdiv_select = var;
-                       if (out_len > used)
-                               used += snprintf(output+used, out_len-used, "SET, new antdiv_select=%d\n", pDM_Odm->antdiv_select);
-                       break;
-
-               default:
-                       if (out_len > used)
-                               used += snprintf(output+used, out_len-used, "SET, unknown command!\n");
-                       break;
-               }
-       }
-
-exit:
-       return 0;
+#ifdef __ECOS\r
+char *strsep(char **s, const char *ct)\r
+{\r
+       char *sbegin = *s;\r
+       char *end;\r
+\r
+       if (sbegin == NULL)\r
+               return NULL;\r
+\r
+       end = strpbrk(sbegin, ct);\r
+       if (end)\r
+               *end++ = '\0';\r
+       *s = end;\r
+       return sbegin;\r
+}\r
+#endif\r
+\r
+#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_AP))\r
+s4Byte\r
+phydm_cmd(\r
+       IN PDM_ODM_T    pDM_Odm,\r
+       IN char         *input,\r
+       IN u4Byte       in_len,\r
+       IN u1Byte       flag,\r
+       OUT char        *output,\r
+       IN u4Byte       out_len\r
+)\r
+{\r
+       char *token;\r
+       u4Byte  Argc = 0;\r
+       char            Argv[MAX_ARGC][MAX_ARGV];\r
+\r
+       do {\r
+               token = strsep(&input, ", ");\r
+               if (token) {\r
+                       strcpy(Argv[Argc], token);\r
+                       Argc++;\r
+               } else\r
+                       break;\r
+       } while (Argc < MAX_ARGC);\r
+\r
+       if (Argc == 1)\r
+               Argv[0][strlen(Argv[0]) - 1] = '\0';\r
+\r
+       phydm_cmd_parser(pDM_Odm, Argv, Argc, flag, output, out_len);\r
+\r
+       return 0;\r
 }\r
 #endif\r
 }\r
 #endif\r
+\r
+\r
+VOID\r
+phydm_fw_trace_handler(\r
+       IN      PVOID   pDM_VOID,\r
+       IN      pu1Byte CmdBuf,\r
+       IN      u1Byte  CmdLen\r
+)\r
+{\r
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte          temp_char_start;\r
+\r
+       /*u1Byte        debug_trace_11byte[60];*/\r
+       u1Byte          freg_num, c2h_seq, buf_0 = 0;\r
+\r
+       if (CmdLen > 12)\r
+               return;\r
+\r
+       buf_0 = CmdBuf[0];\r
+       freg_num = (buf_0 & 0xf);\r
+       c2h_seq = (buf_0 & 0xf0) >> 4;\r
+       /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW debug message] freg_num = (( %d )), c2h_seq = (( %d ))\n", freg_num,c2h_seq ));*/\r
+\r
+       /*strncpy(debug_trace_11byte,&CmdBuf[1],(CmdLen-1));*/\r
+       /*debug_trace_11byte[CmdLen-1] = '\0';*/\r
+       /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW debug message] %s\n", debug_trace_11byte));*/\r
+       /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW debug message] CmdLen = (( %d ))\n", CmdLen));*/\r
+       /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW debug message] c2h_cmd_start  = (( %d ))\n", pDM_Odm->c2h_cmd_start));*/\r
+\r
+\r
+\r
+       /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("pre_seq = (( %d )), current_seq = (( %d ))\n", pDM_Odm->pre_c2h_seq, c2h_seq));*/\r
+       /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("fw_buff_is_enpty = (( %d ))\n", pDM_Odm->fw_buff_is_enpty));*/\r
+\r
+       if ((c2h_seq != pDM_Odm->pre_c2h_seq)  &&  pDM_Odm->fw_buff_is_enpty == FALSE) {\r
+               pDM_Odm->fw_debug_trace[pDM_Odm->c2h_cmd_start] = '\0';\r
+               ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW Dbg Queue Overflow] %s\n", pDM_Odm->fw_debug_trace));\r
+               pDM_Odm->c2h_cmd_start = 0;\r
+       }\r
+\r
+       if ((CmdLen - 1) > (60 - pDM_Odm->c2h_cmd_start)) {\r
+               pDM_Odm->fw_debug_trace[pDM_Odm->c2h_cmd_start] = '\0';\r
+               ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW Dbg Queue error: wrong C2H length] %s\n", pDM_Odm->fw_debug_trace));\r
+               pDM_Odm->c2h_cmd_start = 0;\r
+               return;\r
+       }\r
+\r
+       strncpy(&(pDM_Odm->fw_debug_trace[pDM_Odm->c2h_cmd_start]), &CmdBuf[1], (CmdLen - 1));\r
+       pDM_Odm->c2h_cmd_start += (CmdLen - 1);\r
+       pDM_Odm->fw_buff_is_enpty = FALSE;\r
+\r
+       if (freg_num == 0 || pDM_Odm->c2h_cmd_start >= 60) {\r
+               if (pDM_Odm->c2h_cmd_start < 60)\r
+                       pDM_Odm->fw_debug_trace[pDM_Odm->c2h_cmd_start] = '\0';\r
+               else\r
+                       pDM_Odm->fw_debug_trace[59] = '\0';\r
+\r
+               ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW DBG Msg] %s\n", pDM_Odm->fw_debug_trace));\r
+               /*DbgPrint("[FW DBG Msg] %s\n", pDM_Odm->fw_debug_trace);*/\r
+               pDM_Odm->c2h_cmd_start = 0;\r
+               pDM_Odm->fw_buff_is_enpty = TRUE;\r
+       }\r
+\r
+       pDM_Odm->pre_c2h_seq = c2h_seq;\r
+}\r
+\r
+\r
+VOID\r
+phydm_fw_trace_handler_8051(\r
+       IN      PVOID   pDM_VOID,\r
+       IN      pu1Byte Buffer,\r
+       IN      u1Byte  CmdLen\r
+)\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#if 0\r
+       if (CmdLen >= 3)\r
+               CmdBuf[CmdLen - 1] = '\0';\r
+       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW DBG Msg] %s\n", &(CmdBuf[3])));\r
+#else\r
+\r
+       int i = 0;\r
+       u1Byte  Extend_c2hSubID = 0, Extend_c2hDbgLen = 0, Extend_c2hDbgSeq = 0;\r
+       u1Byte  fw_debug_trace[100];\r
+       pu1Byte Extend_c2hDbgContent = 0;\r
+\r
+       Extend_c2hSubID = Buffer[0];\r
+       Extend_c2hDbgLen = Buffer[1];\r
+       Extend_c2hDbgContent = Buffer + 2; /*DbgSeq+DbgContent  for show HEX*/\r
+\r
+GoBackforAggreDbgPkt:\r
+       i = 0;\r
+       Extend_c2hDbgSeq = Buffer[2];\r
+       Extend_c2hDbgContent = Buffer + 3;\r
+\r
+       for (; ; i++) {\r
+               fw_debug_trace[i] = Extend_c2hDbgContent[i];\r
+               if (Extend_c2hDbgContent[i + 1] == '\0') {\r
+                       fw_debug_trace[i + 1] = '\0';\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW DBG Msg] %s", &(fw_debug_trace[0])));\r
+                       break;\r
+               } else if (Extend_c2hDbgContent[i] == '\n') {\r
+                       fw_debug_trace[i + 1] = '\0';\r
+                       ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW DBG Msg] %s", &(fw_debug_trace[0])));\r
+                       Buffer = Extend_c2hDbgContent + i + 3;\r
+                       goto GoBackforAggreDbgPkt;\r
+               }\r
+       }\r
+\r
+\r
+#endif\r
+}\r
+\r
+\r
index 93574f2a0d90e11a44c7e7e2465598d4a6326b9b..686f5153f2f55c5262bd19c3e1a8575759d67e28 100755 (executable)
@@ -22,7 +22,7 @@
 #ifndef        __ODM_DBG_H__\r
 #define __ODM_DBG_H__\r
 \r
 #ifndef        __ODM_DBG_H__\r
 #define __ODM_DBG_H__\r
 \r
-\r
+#define DEBUG_VERSION  "1.0"  /*2015.01.13 Dino*/\r
 //-----------------------------------------------------------------------------\r
 //     Define the debug levels\r
 //\r
 //-----------------------------------------------------------------------------\r
 //     Define the debug levels\r
 //\r
 #define ODM_COMP_CFO_TRACKING          BIT15\r
 #define ODM_COMP_ACS                                   BIT16\r
 #define PHYDM_COMP_ADAPTIVITY                  BIT17\r
 #define ODM_COMP_CFO_TRACKING          BIT15\r
 #define ODM_COMP_ACS                                   BIT16\r
 #define PHYDM_COMP_ADAPTIVITY                  BIT17\r
+#define PHYDM_COMP_RA_DBG                              BIT18\r
+#define PHYDM_COMP_TXBF                                BIT19\r
 //MAC Functions\r
 #define ODM_COMP_EDCA_TURBO                    BIT20\r
 #define ODM_COMP_EARLY_MODE                    BIT21\r
 //MAC Functions\r
 #define ODM_COMP_EDCA_TURBO                    BIT20\r
 #define ODM_COMP_EARLY_MODE                    BIT21\r
+#define ODM_FW_DEBUG_TRACE                     BIT22\r
 //RF Functions\r
 #define ODM_COMP_TX_PWR_TRACK          BIT24\r
 #define ODM_COMP_RX_GAIN_TRACK         BIT25\r
 #define ODM_COMP_CALIBRATION                   BIT26\r
 //Common Functions\r
 //RF Functions\r
 #define ODM_COMP_TX_PWR_TRACK          BIT24\r
 #define ODM_COMP_RX_GAIN_TRACK         BIT25\r
 #define ODM_COMP_CALIBRATION                   BIT26\r
 //Common Functions\r
+#define        BEAMFORMING_DEBUG                       BIT29\r
 #define ODM_COMP_COMMON                                BIT30\r
 #define ODM_COMP_INIT                                  BIT31\r
 \r
 #define ODM_COMP_COMMON                                BIT30\r
 #define ODM_COMP_INIT                                  BIT31\r
 \r
                                DbgPrint("[ODM-8821] ");                                                                                        \\r
                        else if(pDM_Odm->SupportICType == ODM_RTL8814A)                                                 \\r
                                DbgPrint("[ODM-8814] ");                                                                                        \\r
                                DbgPrint("[ODM-8821] ");                                                                                        \\r
                        else if(pDM_Odm->SupportICType == ODM_RTL8814A)                                                 \\r
                                DbgPrint("[ODM-8814] ");                                                                                        \\r
+                       else if(pDM_Odm->SupportICType == ODM_RTL8822B)                                                 \\r
+                               DbgPrint("[ODM-8822] ");                                                                                        \\r
                        RT_PRINTK fmt;                                                                                                                  \\r
                }\r
 \r
                        RT_PRINTK fmt;                                                                                                                  \\r
                }\r
 \r
 VOID \r
 PHYDM_InitDebugSetting(IN              PDM_ODM_T               pDM_Odm);\r
 \r
 VOID \r
 PHYDM_InitDebugSetting(IN              PDM_ODM_T               pDM_Odm);\r
 \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+VOID phydm_BB_RxHang_Info(IN PDM_ODM_T pDM_Odm);\r
+#endif\r
+\r
 #define        BB_TMP_BUF_SIZE         100\r
 VOID phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm);\r
 #define        BB_TMP_BUF_SIZE         100\r
 VOID phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm);\r
-VOID phydm_BasicProfile(IN             PVOID                   pDM_VOID);\r
 VOID phydm_BasicDbgMessage(    IN              PVOID                   pDM_VOID);\r
 \r
 VOID phydm_BasicDbgMessage(    IN              PVOID                   pDM_VOID);\r
 \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+#define        PHYDM_DBGPRINT          0\r
+#define        PHYDM_SSCANF(x, y, z)   DCMD_Scanf(x, y, z)\r
+#if (PHYDM_DBGPRINT == 1)\r
+#define        PHYDM_SNPRINTF(msg)     \\r
+               {\\r
+                       rsprintf msg;\\r
+                       DbgPrint(output);\\r
+               }\r
+#else\r
+#define        PHYDM_SNPRINTF(msg)     \\r
+               {\\r
+                       rsprintf msg;\\r
+                       DCMD_Printf(output);\\r
+               }\r
+#endif\r
+#else\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+#define        PHYDM_DBGPRINT          0\r
+#else\r
+#define        PHYDM_DBGPRINT          1\r
+#endif\r
+#define        MAX_ARGC                                20\r
+#define        MAX_ARGV                                16\r
+#define        DCMD_DECIMAL                    "%d"\r
+#define        DCMD_CHAR                               "%c"\r
+#define        DCMD_HEX                                "%x"\r
+\r
+#define        PHYDM_SSCANF(x, y, z)   sscanf(x, y, z)\r
+#if (PHYDM_DBGPRINT == 1)\r
+#define        PHYDM_SNPRINTF(msg)\\r
+               {\\r
+                       snprintf msg;\\r
+                       DbgPrint(output);\\r
+               }\r
+#else\r
+#define        PHYDM_SNPRINTF(msg)\\r
+               {\\r
+                       if(out_len > used)\\r
+                               used+=snprintf msg;\\r
+               }\r
+#endif\r
+#endif\r
+\r
+\r
+VOID phydm_BasicProfile(\r
+       IN              PVOID                   pDM_VOID,\r
+       IN              u4Byte                  *_used,\r
+       OUT             char                            *output,\r
+       IN              u4Byte                  *_out_len\r
+       );\r
+#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_AP))\r
 s4Byte\r
 s4Byte\r
-PhyDM_Cmd(\r
+phydm_cmd(\r
        IN PDM_ODM_T    pDM_Odm,\r
        IN char         *input,\r
        IN u4Byte       in_len,\r
        IN PDM_ODM_T    pDM_Odm,\r
        IN char         *input,\r
        IN u4Byte       in_len,\r
@@ -197,6 +257,43 @@ PhyDM_Cmd(
        IN u4Byte       out_len\r
 );\r
 #endif\r
        IN u4Byte       out_len\r
 );\r
 #endif\r
+VOID\r
+phydm_cmd_parser(\r
+       IN PDM_ODM_T    pDM_Odm,\r
+       IN char         input[][16],\r
+       IN u4Byte       input_num,\r
+       IN u1Byte       flag,\r
+       OUT char        *output,\r
+       IN u4Byte       out_len\r
+);\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+void phydm_sbd_check(\r
+       IN      PDM_ODM_T                                       pDM_Odm\r
+       );\r
+\r
+void phydm_sbd_callback(\r
+       PRT_TIMER               pTimer\r
+       );\r
+\r
+void phydm_sbd_workitem_callback(\r
+    IN PVOID            pContext\r
+       );\r
+#endif\r
+\r
+VOID\r
+phydm_fw_trace_handler(\r
+       IN              PVOID   pDM_VOID,\r
+       IN              pu1Byte CmdBuf,\r
+       IN              u1Byte  CmdLen\r
+);\r
+\r
+VOID\r
+phydm_fw_trace_handler_8051(\r
+       IN      PVOID   pDM_VOID,\r
+       IN      pu1Byte CmdBuf,\r
+       IN      u1Byte  CmdLen\r
+);\r
 \r
 #endif // __ODM_DBG_H__\r
 \r
 \r
 #endif // __ODM_DBG_H__\r
 \r
index 16caf370b73c1e54e9adbbbd78d8865e65e21b2a..aea4dd9a68fb841edfb16b875807e16f03ee84b5 100755 (executable)
@@ -300,7 +300,7 @@ ODM_MoveMemory(
        IN  u4Byte              Length\r
        )\r
 {\r
        IN  u4Byte              Length\r
        )\r
 {\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+#if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
        memcpy(pDest, pSrc, Length);\r
 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )  \r
        _rtw_memcpy(pDest, pSrc, Length);\r
        memcpy(pDest, pSrc, Length);\r
 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )  \r
        _rtw_memcpy(pDest, pSrc, Length);\r
@@ -315,7 +315,7 @@ void ODM_Memory_Set
                IN  s1Byte      value,\r
                IN  u4Byte      length)\r
 {\r
                IN  s1Byte      value,\r
                IN  u4Byte      length)\r
 {\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+#if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
        \r
 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )  \r
        _rtw_memset(pbuf,value, length);\r
        \r
 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )  \r
        _rtw_memset(pbuf,value, length);\r
@@ -546,7 +546,7 @@ ODM_SetTimer(
        IN      u4Byte                  msDelay\r
        )\r
 {\r
        IN      u4Byte                  msDelay\r
        )\r
 {\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+#if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
        mod_timer(pTimer, jiffies + RTL_MILISECONDS_TO_JIFFIES(msDelay));\r
 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
        _set_timer(pTimer,msDelay ); //ms\r
        mod_timer(pTimer, jiffies + RTL_MILISECONDS_TO_JIFFIES(msDelay));\r
 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
        _set_timer(pTimer,msDelay ); //ms\r
@@ -566,7 +566,7 @@ ODM_InitializeTimer(
        IN      const char*                     szID\r
        )\r
 {\r
        IN      const char*                     szID\r
        )\r
 {\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+#if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
        init_timer(pTimer);\r
        pTimer->function = CallBackFunc;\r
        pTimer->data = (unsigned long)pDM_Odm;\r
        init_timer(pTimer);\r
        pTimer->function = CallBackFunc;\r
        pTimer->data = (unsigned long)pDM_Odm;\r
@@ -625,183 +625,272 @@ ODM_ReleaseTimer(
 }\r
 \r
 \r
 }\r
 \r
 \r
+u1Byte\r
+phydm_trans_h2c_id(\r
+       IN      PDM_ODM_T       pDM_Odm,\r
+       IN      u1Byte          phydm_h2c_id\r
+)\r
+{\r
+       u1Byte platform_h2c_id=0xff;\r
+\r
+       \r
+       switch(phydm_h2c_id)\r
+       {\r
+               //1 [0]\r
+               case ODM_H2C_RSSI_REPORT:\r
+\r
+                       #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+                               if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
+                               {\r
+                                       platform_h2c_id = H2C_88E_RSSI_REPORT;\r
+                               }\r
+                               else if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
+                               {\r
+                                       platform_h2c_id =H2C_8814A_RSSI_REPORT;                            \r
+                               }\r
+                               else\r
+                               {\r
+                                       platform_h2c_id = H2C_RSSI_REPORT;\r
+                               }\r
+                               \r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
+                               #if((RTL8812A_SUPPORT==1) ||(RTL8821A_SUPPORT==1))\r
+                                       platform_h2c_id = H2C_8812_RSSI_REPORT;\r
+                               #elif(RTL8814A_SUPPORT == 1)\r
+                                       platform_h2c_id = H2C_RSSI_SETTING;\r
+                               #elif(RTL8192E_SUPPORT==1)\r
+                                       platform_h2c_id =H2C_8192E_RSSI_REPORT;\r
+                               #elif(RTL8723B_SUPPORT==1)\r
+                                       platform_h2c_id =H2C_8723B_RSSI_SETTING;\r
+                               #elif(RTL8188E_SUPPORT==1)\r
+                                       platform_h2c_id =H2C_RSSI_REPORT;\r
+                               #elif(RTL8723A_SUPPORT==1)\r
+                                       platform_h2c_id =RSSI_SETTING_EID;\r
+                               #elif(RTL8192D_SUPPORT==1)\r
+                                       platform_h2c_id =H2C_RSSI_REPORT;\r
+                               #elif(RTL8192C_SUPPORT==1)\r
+                                       platform_h2c_id =RSSI_SETTING_EID;\r
+                               #endif\r
+                               \r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
+                               #if((RTL8881A_SUPPORT==1)||(RTL8192E_SUPPORT==1)||(RTL8814A_SUPPORT==1) )\r
+                                       if(pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E|| pDM_Odm->SupportICType == ODM_RTL8814A) \r
+                                       {\r
+                                               platform_h2c_id =H2C_88XX_RSSI_REPORT;                          \r
+                                               //ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("[H2C] H2C_88XX_RSSI_REPORT CMD_ID = (( %d )) \n", platform_h2c_id));\r
+                                       } else\r
+                               #endif\r
+                               #if(RTL8812A_SUPPORT==1) \r
+                                       if(pDM_Odm->SupportICType == ODM_RTL8812)\r
+                                       {\r
+                                               platform_h2c_id = H2C_8812_RSSI_REPORT;\r
+                                       } else\r
+                               #endif                          \r
+                                       {}\r
+                       #endif\r
+                       \r
+                               break;\r
+\r
+               //1 [3] \r
+               case ODM_H2C_WIFI_CALIBRATION:\r
+                       #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+                                       platform_h2c_id =H2C_WIFI_CALIBRATION;\r
+                       \r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
+                               #if(RTL8723B_SUPPORT==1) \r
+                                       platform_h2c_id = H2C_8723B_BT_WLAN_CALIBRATION;\r
+                               #endif\r
+                               \r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
+\r
+                       \r
+                       #endif\r
+                       \r
+                               break;          \r
+       \r
+                       \r
+               //1 [4]\r
+               case ODM_H2C_IQ_CALIBRATION:\r
+                       #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+                               platform_h2c_id =H2C_IQ_CALIBRATION;\r
+                       \r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
+                               #if((RTL8812A_SUPPORT==1) ||(RTL8821A_SUPPORT==1))\r
+                               platform_h2c_id = H2C_8812_IQ_CALIBRATION;\r
+                               #endif\r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
+\r
+                       \r
+                       #endif\r
+                       \r
+                               break;\r
+               //1 [5]\r
+               case ODM_H2C_RA_PARA_ADJUST:\r
+\r
+                       #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+                               if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
+                               {\r
+                                       platform_h2c_id =H2C_8814A_RA_PARA_ADJUST;                            \r
+                               }\r
+                               else\r
+                               {\r
+                               platform_h2c_id = H2C_RA_PARA_ADJUST;\r
+                               }\r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
+                               #if((RTL8812A_SUPPORT==1) ||(RTL8821A_SUPPORT==1))\r
+                                       platform_h2c_id = H2C_8812_RA_PARA_ADJUST;\r
+                               #elif(RTL8814A_SUPPORT == 1)\r
+                                       platform_h2c_id = H2C_RA_PARA_ADJUST;\r
+                               #elif(RTL8192E_SUPPORT==1)\r
+                                       platform_h2c_id =H2C_8192E_RA_PARA_ADJUST;\r
+                               #elif(RTL8723B_SUPPORT==1) \r
+                                       platform_h2c_id =H2C_8723B_RA_PARA_ADJUST;\r
+                               #endif\r
+                               \r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
+                               #if((RTL8881A_SUPPORT==1)||(RTL8192E_SUPPORT==1)||(RTL8814A_SUPPORT==1)) \r
+                                       if (pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8814A) \r
+                                       {\r
+                                               platform_h2c_id =H2C_88XX_RA_PARA_ADJUST;                               \r
+                                               /*ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("[H2C] H2C_88XX_RA_PARA_ADJUST CMD_ID = (( %d ))\n", platform_h2c_id));*/\r
+                                       } else\r
+                               #endif\r
+                               #if(RTL8812A_SUPPORT==1) \r
+                                       if(pDM_Odm->SupportICType == ODM_RTL8812)\r
+                                       {\r
+                                               platform_h2c_id = H2C_8812_RA_PARA_ADJUST;\r
+                                       } else\r
+                               #endif\r
+                                       {}\r
+                       #endif\r
+                       \r
+                               break;\r
+\r
+\r
+               //1 [6]\r
+               case PHYDM_H2C_DYNAMIC_TX_PATH:\r
+\r
+                       #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+                               if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
+                               {\r
+                                       platform_h2c_id =H2C_8814A_DYNAMIC_TX_PATH;\r
+                               }\r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
+                               #if (RTL8814A_SUPPORT == 1)\r
+                               if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
+                                       platform_h2c_id = H2C_DYNAMIC_TX_PATH;\r
+                               #endif\r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
+                               #if(RTL8814A_SUPPORT==1)\r
+                                       if( pDM_Odm->SupportICType == ODM_RTL8814A)\r
+                                       {\r
+                                               platform_h2c_id = H2C_88XX_DYNAMIC_TX_PATH;                             \r
+                                       } \r
+                               #endif\r
+\r
+                       #endif\r
+                       \r
+                               break;\r
+\r
+               /* [7]*/\r
+               case PHYDM_H2C_FW_TRACE_EN:\r
+\r
+                       #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+                               if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
+                                       platform_h2c_id = H2C_8814A_FW_TRACE_EN;\r
+                               else \r
+                                       platform_h2c_id = H2C_FW_TRACE_EN;\r
+                               \r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
+\r
+                               \r
+                       #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
+                               #if ((RTL8881A_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8814A_SUPPORT == 1))\r
+                                       if (pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8814A) {\r
+                                               platform_h2c_id  = H2C_88XX_FW_TRACE_EN;\r
+                                       } else\r
+                               #endif\r
+                               #if (RTL8812A_SUPPORT == 1) \r
+                                       if (pDM_Odm->SupportICType == ODM_RTL8812) {\r
+                                               platform_h2c_id = H2C_8812_FW_TRACE_EN;\r
+                                       } else\r
+                               #endif\r
+                                       {}\r
+\r
+                       #endif\r
+                       \r
+                               break;\r
+\r
+               default:\r
+                       platform_h2c_id=0xff;\r
+                       break;  \r
+       }       \r
+       \r
+       return platform_h2c_id;\r
+       \r
+}\r
+\r
 //\r
 // ODM FW relative API.\r
 //\r
 //\r
 // ODM FW relative API.\r
 //\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+\r
 VOID\r
 ODM_FillH2CCmd(\r
        IN      PDM_ODM_T               pDM_Odm,\r
 VOID\r
 ODM_FillH2CCmd(\r
        IN      PDM_ODM_T               pDM_Odm,\r
-       IN      u1Byte                  ElementID,\r
+       IN      u1Byte                  phydm_h2c_id,\r
        IN      u4Byte                  CmdLen,\r
        IN      pu1Byte                 pCmdBuffer\r
 )\r
 {\r
        IN      u4Byte                  CmdLen,\r
        IN      pu1Byte                 pCmdBuffer\r
 )\r
 {\r
-       PADAPTER                Adapter = pDM_Odm->Adapter;\r
+       PADAPTER        Adapter = pDM_Odm->Adapter;\r
+       u1Byte          platform_h2c_id;\r
 \r
 \r
-       if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
-       {\r
-               switch(ElementID)\r
-               {\r
-                       case ODM_H2C_RSSI_REPORT:\r
+       platform_h2c_id=phydm_trans_h2c_id(pDM_Odm, phydm_h2c_id);\r
 \r
 \r
-#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-                               FillH2CCmd(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-#else\r
-       #if((RTL8812A_SUPPORT==1) ||(RTL8821A_SUPPORT==1))\r
-                               FillH2CCmd_8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-       #endif\r
-#endif\r
-                               break;\r
-                       case ODM_H2C_IQ_CALIBRATION:\r
-#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-                               FillH2CCmd(Adapter, H2C_IQ_CALIBRATION, CmdLen, pCmdBuffer);\r
-#else\r
-       #if((RTL8812A_SUPPORT==1) ||(RTL8821A_SUPPORT==1))\r
-                               FillH2CCmd_8812(Adapter, H2C_8812_IQ_CALIBRATION, CmdLen, pCmdBuffer);\r
-       #endif\r
-#endif\r
-                               break;\r
-                       default:\r
-                               break;\r
-               }\r
-\r
-       }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+       if(platform_h2c_id==0xff)\r
        {\r
        {\r
-               switch(ElementID)\r
-               {\r
-                       case ODM_H2C_RSSI_REPORT:\r
-#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-                               FillH2CCmd(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-#else\r
-       #if(RTL8192E_SUPPORT==1)\r
-                               FillH2CCmd_8192E(Adapter, H2C_8192E_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-       #endif\r
-#endif\r
-                               break;\r
-                       default:\r
-                               break;\r
-               }       \r
+               ODM_RT_TRACE(pDM_Odm,PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("[H2C] Wrong H2C CMD-ID !! platform_h2c_id==0xff ,  PHYDM_ElementID=((%d )) \n",phydm_h2c_id));\r
+               return;\r
        }\r
        }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {\r
-               switch(ElementID)\r
-               {\r
-                       case ODM_H2C_RSSI_REPORT:\r
-#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-                               FillH2CCmd(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-#else\r
-       #if(RTL8723B_SUPPORT==1)\r
-                               FillH2CCmd8723B(Adapter, H2C_8723B_RSSI_SETTING, CmdLen, pCmdBuffer);\r
-       #endif\r
-#endif\r
-                               break;\r
-                       case ODM_H2C_WIFI_CALIBRATION:\r
-#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-                               FillH2CCmd(Adapter, H2C_WIFI_CALIBRATION, CmdLen, pCmdBuffer);\r
-#else\r
-       #if(RTL8723B_SUPPORT==1)\r
-                               FillH2CCmd8723B(Adapter, H2C_8723B_BT_WLAN_CALIBRATION, CmdLen, pCmdBuffer);\r
-       #endif\r
-#endif\r
-                               break;\r
-                       default:\r
-                               break;                     \r
-               }\r
 \r
 \r
-       }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               switch(ElementID)\r
+       #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+               if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
                {\r
                {\r
-                       case ODM_H2C_RSSI_REPORT:\r
-                               //if((pDM_Odm->CutVersion == ODM_CUT_I) && (!pDM_Odm->RaSupport88E)){\r
-                               if(!pDM_Odm->RaSupport88E){\r
-#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-                                       FillH2CCmd88E(Adapter, H2C_88E_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-#else\r
-       #if(RTL8188E_SUPPORT==1)\r
-                                       FillH2CCmd_88E(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-       #endif\r
-#endif                 \r
-                               }\r
-                               break;\r
-                       default:\r
-                               break;\r
+                       if(!pDM_Odm->RaSupport88E)\r
+                               FillH2CCmd88E(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);\r
                }\r
                }\r
-       }\r
-#if(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8723A)\r
-       {\r
-               switch(ElementID)\r
+               else if(pDM_Odm->SupportICType == ODM_RTL8192C)\r
                {\r
                {\r
-                       case ODM_H2C_RSSI_REPORT:\r
-       #if(RTL8723A_SUPPORT==1)\r
-                               FillH2CCmd(Adapter, RSSI_SETTING_EID, CmdLen, pCmdBuffer);\r
-       #endif\r
-                               break;\r
-                       default:\r
-                               break;\r
+                       FillH2CCmd92C(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);\r
                }\r
                }\r
-       }\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192D)\r
-       {\r
-               switch(ElementID)\r
+               else if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
                {\r
                {\r
-                       case ODM_H2C_RSSI_REPORT:\r
-       #if(RTL8192D_SUPPORT==1)\r
-                       FillH2CCmd92D(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);    \r
-       #endif\r
-                               break;\r
-                       default:\r
-                               break;\r
+                       FillH2CCmd8814A(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);\r
                }\r
                }\r
-       }\r
-#endif\r
-       else\r
-       {\r
-               switch(ElementID)\r
-               {\r
-                       case ODM_H2C_RSSI_REPORT:\r
-#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
-                               FillH2CCmd92C(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);\r
-#else\r
-       #if(RTL8192C_SUPPORT==1)\r
-                               rtl8192c_FillH2CCmd(Adapter, RSSI_SETTING_EID, CmdLen, pCmdBuffer);\r
-       #endif\r
-#endif\r
-                               break;\r
-                       default:\r
-                               break;\r
+               else\r
+               {               \r
+                       FillH2CCmd(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);\r
                }\r
                }\r
-       }\r
-}\r
-#else\r
-u4Byte\r
-ODM_FillH2CCmd(        \r
-       IN      pu1Byte         pH2CBuffer,\r
-       IN      u4Byte          H2CBufferLen,\r
-       IN      u4Byte          CmdNum,\r
-       IN      pu4Byte         pElementID,\r
-       IN      pu4Byte         pCmdLen,\r
-       IN      pu1Byte*                pCmbBuffer,\r
-       IN      pu1Byte         CmdStartSeq\r
-       )\r
-{\r
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       \r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
-\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)   \r
-       //FillH2CCmd(pH2CBuffer, H2CBufferLen, CmdNum, pElementID, pCmdLen, pCmbBuffer, CmdStartSeq);\r
-       return  FALSE;\r
-#endif\r
-\r
-       return  TRUE;\r
+       #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
+               rtw_hal_fill_h2c_cmd(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);\r
+\r
+       #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)     \r
+               #if((RTL8881A_SUPPORT==1)||(RTL8192E_SUPPORT==1)||(RTL8814A_SUPPORT==1)) \r
+                       if(pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E|| pDM_Odm->SupportICType == ODM_RTL8814A) \r
+                       {\r
+                               GET_HAL_INTERFACE(pDM_Odm->priv)->FillH2CCmdHandler(pDM_Odm->priv, platform_h2c_id, CmdLen, pCmdBuffer);\r
+                               //FillH2CCmd88XX(pDM_Odm->priv, platform_h2c_id, CmdLen, pCmdBuffer);                           \r
+                       } else\r
+               #endif\r
+               #if(RTL8812A_SUPPORT==1) \r
+                       if(pDM_Odm->SupportICType == ODM_RTL8812)\r
+                       {\r
+                               FillH2CCmd8812(pDM_Odm->priv, platform_h2c_id, CmdLen, pCmdBuffer);\r
+                       } else\r
+               #endif\r
+                       {}\r
+       #endif\r
 }\r
 }\r
-#endif\r
-\r
 \r
 u8Byte\r
 ODM_GetCurrentTime(    \r
 \r
 u8Byte\r
 ODM_GetCurrentTime(    \r
@@ -827,7 +916,7 @@ ODM_GetProgressingTime(
        return  0;\r
 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
        return rtw_get_passing_time_ms((u4Byte)Start_Time);\r
        return  0;\r
 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
        return rtw_get_passing_time_ms((u4Byte)Start_Time);\r
-#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)   \r
+#elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
        return   ((PlatformGetCurrentTime() - Start_Time)>>10);\r
 #endif\r
 }\r
        return   ((PlatformGetCurrentTime() - Start_Time)>>10);\r
 #endif\r
 }\r
index 6a6d50ce69536ec7575dcf20f932264964f2660a..b17437ec970da5ae385543f56d96d4b34c2801db 100755 (executable)
@@ -22,7 +22,7 @@
 #ifndef        __ODM_INTERFACE_H__\r
 #define __ODM_INTERFACE_H__\r
 \r
 #ifndef        __ODM_INTERFACE_H__\r
 #define __ODM_INTERFACE_H__\r
 \r
-\r
+#define INTERFACE_VERSION      "1.0"           /*2015.01.13  Dino*/\r
 \r
 //\r
 // =========== Constant/Structure/Enum/... Define\r
 \r
 //\r
 // =========== Constant/Structure/Enum/... Define\r
@@ -100,10 +100,13 @@ ODM_REG(DIG,_pDM_Odm)
 typedef enum _ODM_H2C_CMD \r
 {\r
        ODM_H2C_RSSI_REPORT = 0,\r
 typedef enum _ODM_H2C_CMD \r
 {\r
        ODM_H2C_RSSI_REPORT = 0,\r
-       ODM_H2C_PSD_RESULT=1,   \r
+       ODM_H2C_PSD_RESULT = 1, \r
        ODM_H2C_PathDiv = 2,\r
        ODM_H2C_WIFI_CALIBRATION = 3,\r
        ODM_H2C_IQ_CALIBRATION = 4,\r
        ODM_H2C_PathDiv = 2,\r
        ODM_H2C_WIFI_CALIBRATION = 3,\r
        ODM_H2C_IQ_CALIBRATION = 4,\r
+       ODM_H2C_RA_PARA_ADJUST = 5,\r
+       PHYDM_H2C_DYNAMIC_TX_PATH = 6,\r
+       PHYDM_H2C_FW_TRACE_EN = 7,\r
        ODM_MAX_H2CCMD\r
 }ODM_H2C_CMD;\r
 \r
        ODM_MAX_H2CCMD\r
 }ODM_H2C_CMD;\r
 \r
@@ -379,7 +382,6 @@ ODM_ReleaseTimer(
 //\r
 // ODM FW relative API.\r
 //\r
 //\r
 // ODM FW relative API.\r
 //\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
 VOID\r
 ODM_FillH2CCmd(\r
        IN      PDM_ODM_T               pDM_Odm,\r
 VOID\r
 ODM_FillH2CCmd(\r
        IN      PDM_ODM_T               pDM_Odm,\r
@@ -387,18 +389,6 @@ ODM_FillH2CCmd(
        IN      u4Byte                  CmdLen,\r
        IN      pu1Byte                 pCmdBuffer\r
 );\r
        IN      u4Byte                  CmdLen,\r
        IN      pu1Byte                 pCmdBuffer\r
 );\r
-#else\r
-u4Byte\r
-ODM_FillH2CCmd(        \r
-       IN      pu1Byte         pH2CBuffer,\r
-       IN      u4Byte          H2CBufferLen,\r
-       IN      u4Byte          CmdNum,\r
-       IN      pu4Byte         pElementID,\r
-       IN      pu4Byte         pCmdLen,\r
-       IN      pu1Byte*                pCmbBuffer,\r
-       IN      pu1Byte         CmdStartSeq\r
-       );\r
-#endif\r
 \r
 u8Byte\r
 ODM_GetCurrentTime(    \r
 \r
 u8Byte\r
 ODM_GetCurrentTime(    \r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_pre_define.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/phydm_pre_define.h
new file mode 100755 (executable)
index 0000000..6efe3e4
--- /dev/null
@@ -0,0 +1,564 @@
+/******************************************************************************\r
+ *\r
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
+ *                                        \r
+ * This program is free software; you can redistribute it and/or modify it\r
+ * under the terms of version 2 of the GNU General Public License as\r
+ * published by the Free Software Foundation.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ *\r
+ ******************************************************************************/\r
+\r
+\r
+#ifndef        __PHYDMPREDEFINE_H__\r
+#define    __PHYDMPREDEFINE_H__\r
+\r
+//1 ============================================================\r
+//1  Definition \r
+//1 ============================================================\r
+\r
+//Max path of IC\r
+#define MAX_PATH_NUM_92CS              2\r
+#define MAX_PATH_NUM_8188E             1\r
+#define MAX_PATH_NUM_8192E             2\r
+#define MAX_PATH_NUM_8723B             1\r
+#define MAX_PATH_NUM_8812A             2\r
+#define MAX_PATH_NUM_8821A             1\r
+#define MAX_PATH_NUM_8814A             4\r
+#define MAX_PATH_NUM_8822B             2\r
+#define MAX_PATH_NUM_8821B             2\r
+\r
+//Max RF path\r
+#define ODM_RF_PATH_MAX 2\r
+#define ODM_RF_PATH_MAX_JAGUAR 4\r
+\r
+//number of entry\r
+#if(DM_ODM_SUPPORT_TYPE & (ODM_CE))\r
+       #define ASSOCIATE_ENTRY_NUM                                     MACID_NUM_SW_LIMIT  /* Max size of AsocEntry[].*/\r
+       #define ODM_ASSOCIATE_ENTRY_NUM                         ASSOCIATE_ENTRY_NUM\r
+#elif(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+       #define ASSOCIATE_ENTRY_NUM                                     NUM_STAT\r
+       #define ODM_ASSOCIATE_ENTRY_NUM                         ASSOCIATE_ENTRY_NUM+1\r
+#else\r
+       #define ODM_ASSOCIATE_ENTRY_NUM                         (ASSOCIATE_ENTRY_NUM*3)+1// Default port only one // 0 is for STA 1-n is for AP clients.\r
+#endif\r
+\r
+/* -----MGN rate--------------------------------- */\r
+\r
+#define        ODM_MGN_1M                      0x02\r
+#define        ODM_MGN_2M                      0x04\r
+#define        ODM_MGN_5_5M                    0x0b\r
+#define        ODM_MGN_11M                     0x16\r
+\r
+#define        ODM_MGN_6M                      0x0c\r
+#define        ODM_MGN_9M                      0x12\r
+#define        ODM_MGN_12M                     0x18\r
+#define        ODM_MGN_18M                     0x24\r
+#define        ODM_MGN_24M                     0x30\r
+#define        ODM_MGN_36M                     0x48\r
+#define        ODM_MGN_48M                     0x60\r
+#define        ODM_MGN_54M                     0x6c\r
+\r
+/*TxHT = 1*/\r
+#define        ODM_MGN_MCS0                    0x80\r
+#define        ODM_MGN_MCS1                    0x81\r
+#define        ODM_MGN_MCS2                    0x82\r
+#define        ODM_MGN_MCS3                    0x83\r
+#define        ODM_MGN_MCS4                    0x84\r
+#define        ODM_MGN_MCS5                    0x85\r
+#define        ODM_MGN_MCS6                    0x86\r
+#define        ODM_MGN_MCS7                    0x87\r
+#define        ODM_MGN_MCS8                    0x88\r
+#define        ODM_MGN_MCS9                    0x89\r
+#define        ODM_MGN_MCS10           0x8a\r
+#define        ODM_MGN_MCS11           0x8b\r
+#define        ODM_MGN_MCS12           0x8c\r
+#define        ODM_MGN_MCS13           0x8d\r
+#define        ODM_MGN_MCS14           0x8e\r
+#define        ODM_MGN_MCS15           0x8f\r
+#define        ODM_MGN_VHT1SS_MCS0     0x90\r
+#define        ODM_MGN_VHT1SS_MCS1     0x91\r
+#define        ODM_MGN_VHT1SS_MCS2     0x92\r
+#define        ODM_MGN_VHT1SS_MCS3     0x93\r
+#define        ODM_MGN_VHT1SS_MCS4     0x94\r
+#define        ODM_MGN_VHT1SS_MCS5     0x95\r
+#define        ODM_MGN_VHT1SS_MCS6     0x96\r
+#define        ODM_MGN_VHT1SS_MCS7     0x97\r
+#define        ODM_MGN_VHT1SS_MCS8     0x98\r
+#define        ODM_MGN_VHT1SS_MCS9     0x99\r
+#define        ODM_MGN_VHT2SS_MCS0     0x9a\r
+#define        ODM_MGN_VHT2SS_MCS1     0x9b\r
+#define        ODM_MGN_VHT2SS_MCS2     0x9c\r
+#define        ODM_MGN_VHT2SS_MCS3     0x9d\r
+#define        ODM_MGN_VHT2SS_MCS4     0x9e\r
+#define        ODM_MGN_VHT2SS_MCS5     0x9f\r
+#define        ODM_MGN_VHT2SS_MCS6     0xa0\r
+#define        ODM_MGN_VHT2SS_MCS7     0xa1\r
+#define        ODM_MGN_VHT2SS_MCS8     0xa2\r
+#define        ODM_MGN_VHT2SS_MCS9     0xa3\r
+\r
+#define        ODM_MGN_MCS0_SG         0xc0\r
+#define        ODM_MGN_MCS1_SG         0xc1\r
+#define        ODM_MGN_MCS2_SG         0xc2\r
+#define        ODM_MGN_MCS3_SG         0xc3\r
+#define        ODM_MGN_MCS4_SG         0xc4\r
+#define        ODM_MGN_MCS5_SG         0xc5\r
+#define        ODM_MGN_MCS6_SG         0xc6\r
+#define        ODM_MGN_MCS7_SG         0xc7\r
+#define        ODM_MGN_MCS8_SG         0xc8\r
+#define        ODM_MGN_MCS9_SG         0xc9\r
+#define        ODM_MGN_MCS10_SG                0xca\r
+#define        ODM_MGN_MCS11_SG                0xcb\r
+#define        ODM_MGN_MCS12_SG                0xcc\r
+#define        ODM_MGN_MCS13_SG                0xcd\r
+#define        ODM_MGN_MCS14_SG                0xce\r
+#define        ODM_MGN_MCS15_SG                0xcf\r
+\r
+/* -----DESC rate--------------------------------- */\r
+\r
+#define ODM_RATEMCS15_SG               0x1c\r
+#define ODM_RATEMCS32                  0x20\r
+\r
+\r
+// CCK Rates, TxHT = 0\r
+#define ODM_RATE1M                             0x00\r
+#define ODM_RATE2M                             0x01\r
+#define ODM_RATE5_5M                   0x02\r
+#define ODM_RATE11M                            0x03\r
+// OFDM Rates, TxHT = 0\r
+#define ODM_RATE6M                             0x04\r
+#define ODM_RATE9M                             0x05\r
+#define ODM_RATE12M                            0x06\r
+#define ODM_RATE18M                            0x07\r
+#define ODM_RATE24M                            0x08\r
+#define ODM_RATE36M                            0x09\r
+#define ODM_RATE48M                            0x0A\r
+#define ODM_RATE54M                            0x0B\r
+// MCS Rates, TxHT = 1\r
+#define ODM_RATEMCS0                   0x0C\r
+#define ODM_RATEMCS1                   0x0D\r
+#define ODM_RATEMCS2                   0x0E\r
+#define ODM_RATEMCS3                   0x0F\r
+#define ODM_RATEMCS4                   0x10\r
+#define ODM_RATEMCS5                   0x11\r
+#define ODM_RATEMCS6                   0x12\r
+#define ODM_RATEMCS7                   0x13\r
+#define ODM_RATEMCS8                   0x14\r
+#define ODM_RATEMCS9                   0x15\r
+#define ODM_RATEMCS10                  0x16\r
+#define ODM_RATEMCS11                  0x17\r
+#define ODM_RATEMCS12                  0x18\r
+#define ODM_RATEMCS13                  0x19\r
+#define ODM_RATEMCS14                  0x1A\r
+#define ODM_RATEMCS15                  0x1B\r
+#define ODM_RATEMCS16                  0x1C\r
+#define ODM_RATEMCS17                  0x1D\r
+#define ODM_RATEMCS18                  0x1E\r
+#define ODM_RATEMCS19                  0x1F\r
+#define ODM_RATEMCS20                  0x20\r
+#define ODM_RATEMCS21                  0x21\r
+#define ODM_RATEMCS22                  0x22\r
+#define ODM_RATEMCS23                  0x23\r
+#define ODM_RATEMCS24                  0x24\r
+#define ODM_RATEMCS25                  0x25\r
+#define ODM_RATEMCS26                  0x26\r
+#define ODM_RATEMCS27                  0x27\r
+#define ODM_RATEMCS28                  0x28\r
+#define ODM_RATEMCS29                  0x29\r
+#define ODM_RATEMCS30                  0x2A\r
+#define ODM_RATEMCS31                  0x2B\r
+#define ODM_RATEVHTSS1MCS0             0x2C\r
+#define ODM_RATEVHTSS1MCS1             0x2D\r
+#define ODM_RATEVHTSS1MCS2             0x2E\r
+#define ODM_RATEVHTSS1MCS3             0x2F\r
+#define ODM_RATEVHTSS1MCS4             0x30\r
+#define ODM_RATEVHTSS1MCS5             0x31\r
+#define ODM_RATEVHTSS1MCS6             0x32\r
+#define ODM_RATEVHTSS1MCS7             0x33\r
+#define ODM_RATEVHTSS1MCS8             0x34\r
+#define ODM_RATEVHTSS1MCS9             0x35\r
+#define ODM_RATEVHTSS2MCS0             0x36\r
+#define ODM_RATEVHTSS2MCS1             0x37\r
+#define ODM_RATEVHTSS2MCS2             0x38\r
+#define ODM_RATEVHTSS2MCS3             0x39\r
+#define ODM_RATEVHTSS2MCS4             0x3A\r
+#define ODM_RATEVHTSS2MCS5             0x3B\r
+#define ODM_RATEVHTSS2MCS6             0x3C\r
+#define ODM_RATEVHTSS2MCS7             0x3D\r
+#define ODM_RATEVHTSS2MCS8             0x3E\r
+#define ODM_RATEVHTSS2MCS9             0x3F\r
+#define ODM_RATEVHTSS3MCS0             0x40\r
+#define ODM_RATEVHTSS3MCS1             0x41\r
+#define ODM_RATEVHTSS3MCS2             0x42\r
+#define ODM_RATEVHTSS3MCS3             0x43\r
+#define ODM_RATEVHTSS3MCS4             0x44\r
+#define ODM_RATEVHTSS3MCS5             0x45\r
+#define ODM_RATEVHTSS3MCS6             0x46\r
+#define ODM_RATEVHTSS3MCS7             0x47\r
+#define ODM_RATEVHTSS3MCS8             0x48\r
+#define ODM_RATEVHTSS3MCS9             0x49\r
+#define ODM_RATEVHTSS4MCS0             0x4A\r
+#define ODM_RATEVHTSS4MCS1             0x4B\r
+#define ODM_RATEVHTSS4MCS2             0x4C\r
+#define ODM_RATEVHTSS4MCS3             0x4D\r
+#define ODM_RATEVHTSS4MCS4             0x4E\r
+#define ODM_RATEVHTSS4MCS5             0x4F\r
+#define ODM_RATEVHTSS4MCS6             0x50\r
+#define ODM_RATEVHTSS4MCS7             0x51\r
+#define ODM_RATEVHTSS4MCS8             0x52\r
+#define ODM_RATEVHTSS4MCS9             0x53\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       #define ODM_NUM_RATE_IDX (ODM_RATEVHTSS4MCS9+1)\r
+#else\r
+       #if (RTL8192E_SUPPORT == 1)\r
+               #define ODM_NUM_RATE_IDX (ODM_RATEMCS15+1)\r
+       #elif (RTL8723B_SUPPORT == 1)|| (RTL8188E_SUPPORT == 1) \r
+               #define ODM_NUM_RATE_IDX (ODM_RATEMCS7+1)\r
+       #elif (RTL8821A_SUPPORT == 1) || (RTL8881A_SUPPORT == 1) \r
+               #define ODM_NUM_RATE_IDX (ODM_RATEVHTSS1MCS9+1)\r
+       #elif (RTL8812A_SUPPORT == 1)\r
+               #define ODM_NUM_RATE_IDX (ODM_RATEVHTSS2MCS9+1)\r
+       #elif(RTL8814A_SUPPORT == 1)\r
+               #define ODM_NUM_RATE_IDX (ODM_RATEVHTSS3MCS9+1)\r
+       #else\r
+               #define ODM_NUM_RATE_IDX (ODM_RATEVHTSS4MCS9+1)\r
+       #endif\r
+#endif\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+#define CONFIG_SFW_SUPPORTED\r
+#endif\r
+\r
+//1 ============================================================\r
+//1  enumeration\r
+//1 ============================================================\r
+\r
+\r
+//     ODM_CMNINFO_INTERFACE\r
+typedef enum tag_ODM_Support_Interface_Definition\r
+{\r
+       ODM_ITRF_PCIE   =       0x1,\r
+       ODM_ITRF_USB    =       0x2,\r
+       ODM_ITRF_SDIO   =       0x4,\r
+       ODM_ITRF_ALL    =       0x7,\r
+}ODM_INTERFACE_E;\r
+\r
+// ODM_CMNINFO_IC_TYPE\r
+typedef enum tag_ODM_Support_IC_Type_Definition\r
+{\r
+       ODM_RTL8192S    =       BIT0,\r
+       ODM_RTL8192C    =       BIT1,\r
+       ODM_RTL8192D    =       BIT2,\r
+       ODM_RTL8723A    =       BIT3,\r
+       ODM_RTL8188E    =       BIT4,\r
+       ODM_RTL8812     =       BIT5,\r
+       ODM_RTL8821     =       BIT6,\r
+       ODM_RTL8192E    =       BIT7,   \r
+       ODM_RTL8723B    =       BIT8,\r
+       ODM_RTL8814A    =       BIT9,   \r
+       ODM_RTL8881A    =       BIT10,\r
+       ODM_RTL8821B    =       BIT11,\r
+       ODM_RTL8822B    =       BIT12,\r
+       ODM_RTL8703B    =       BIT13,\r
+       ODM_RTL8195A    =       BIT14,\r
+       ODM_RTL8188F    =       BIT15\r
+}ODM_IC_TYPE_E;\r
+\r
+\r
+\r
+\r
+#define ODM_IC_11N_SERIES              (ODM_RTL8192S|ODM_RTL8192C|ODM_RTL8192D|ODM_RTL8723A|ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8703B|ODM_RTL8188F)\r
+#define ODM_IC_11AC_SERIES             (ODM_RTL8812|ODM_RTL8821|ODM_RTL8814A|ODM_RTL8881A|ODM_RTL8821B|ODM_RTL8822B)\r
+#define ODM_IC_TXBF_SUPPORT            (ODM_RTL8192E|ODM_RTL8812|ODM_RTL8821|ODM_RTL8814A|ODM_RTL8881A|ODM_RTL8822B)\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
+\r
+#ifdef RTK_AC_SUPPORT\r
+#define ODM_IC_11AC_SERIES_SUPPORT             1\r
+#else\r
+#define ODM_IC_11AC_SERIES_SUPPORT             0\r
+#endif\r
+\r
+#define ODM_IC_11N_SERIES_SUPPORT                      1\r
+#define ODM_CONFIG_BT_COEXIST                          0\r
+\r
+#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+\r
+#define ODM_IC_11AC_SERIES_SUPPORT             1\r
+#define ODM_IC_11N_SERIES_SUPPORT                      1\r
+#define ODM_CONFIG_BT_COEXIST                          1\r
+\r
+#else \r
+\r
+#if((RTL8192C_SUPPORT == 1) || (RTL8192D_SUPPORT == 1) || (RTL8723A_SUPPORT == 1) || (RTL8188E_SUPPORT == 1) ||\\r
+(RTL8723B_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8195A_SUPPORT == 1))\r
+#define ODM_IC_11N_SERIES_SUPPORT                      1\r
+#define ODM_IC_11AC_SERIES_SUPPORT             0\r
+#else\r
+#define ODM_IC_11N_SERIES_SUPPORT                      0\r
+#define ODM_IC_11AC_SERIES_SUPPORT             1\r
+#endif\r
+\r
+#ifdef CONFIG_BT_COEXIST\r
+#define ODM_CONFIG_BT_COEXIST                          1\r
+#else\r
+#define ODM_CONFIG_BT_COEXIST                          0\r
+#endif\r
+\r
+#endif\r
+\r
+\r
+//ODM_CMNINFO_CUT_VER\r
+typedef enum tag_ODM_Cut_Version_Definition\r
+{\r
+       ODM_CUT_A               =       0,\r
+       ODM_CUT_B               =       1,\r
+       ODM_CUT_C               =       2,\r
+       ODM_CUT_D               =       3,\r
+       ODM_CUT_E               =       4,\r
+       ODM_CUT_F               =       5,\r
+\r
+       ODM_CUT_I               =       8,\r
+       ODM_CUT_J               =       9,\r
+       ODM_CUT_K               =       10,     \r
+       ODM_CUT_TEST    =       15,\r
+}ODM_CUT_VERSION_E;\r
+\r
+// ODM_CMNINFO_FAB_VER\r
+typedef enum tag_ODM_Fab_Version_Definition\r
+{\r
+       ODM_TSMC        =       0,\r
+       ODM_UMC         =       1,\r
+}ODM_FAB_E;\r
+\r
+// ODM_CMNINFO_RF_TYPE\r
+//\r
+// For example 1T2R (A+AB = BIT0|BIT4|BIT5)\r
+//\r
+typedef enum tag_ODM_RF_Path_Bit_Definition\r
+{\r
+       ODM_RF_TX_A     =       BIT0,\r
+       ODM_RF_TX_B     =       BIT1,\r
+       ODM_RF_TX_C     =       BIT2,\r
+       ODM_RF_TX_D     =       BIT3,\r
+       ODM_RF_RX_A     =       BIT4,\r
+       ODM_RF_RX_B     =       BIT5,\r
+       ODM_RF_RX_C     =       BIT6,\r
+       ODM_RF_RX_D     =       BIT7,\r
+}ODM_RF_PATH_E;\r
+\r
+typedef enum tag_PHYDM_RF_TX_NUM {\r
+       ODM_1T  =       1,\r
+       ODM_2T  =       2,\r
+       ODM_3T  =       3,\r
+       ODM_4T  =       4,\r
+} ODM_RF_TX_NUM_E;\r
+\r
+typedef enum tag_ODM_RF_Type_Definition {\r
+       ODM_1T1R,\r
+       ODM_1T2R,\r
+       ODM_2T2R,\r
+       ODM_2T2R_GREEN,\r
+       ODM_2T3R,\r
+       ODM_2T4R,\r
+       ODM_3T3R,\r
+       ODM_3T4R,\r
+       ODM_4T4R,\r
+       ODM_XTXR\r
+}ODM_RF_TYPE_E;\r
+\r
+\r
+typedef enum tag_ODM_MAC_PHY_Mode_Definition\r
+{\r
+       ODM_SMSP        = 0,\r
+       ODM_DMSP        = 1,\r
+       ODM_DMDP        = 2,\r
+}ODM_MAC_PHY_MODE_E;\r
+\r
+\r
+typedef enum tag_BT_Coexist_Definition\r
+{      \r
+       ODM_BT_BUSY             = 1,\r
+       ODM_BT_ON                       = 2,\r
+       ODM_BT_OFF              = 3,\r
+       ODM_BT_NONE             = 4,\r
+}ODM_BT_COEXIST_E;\r
+\r
+// ODM_CMNINFO_OP_MODE\r
+typedef enum tag_Operation_Mode_Definition\r
+{\r
+       ODM_NO_LINK             = BIT0,\r
+       ODM_LINK                        = BIT1,\r
+       ODM_SCAN                        = BIT2,\r
+       ODM_POWERSAVE   = BIT3,\r
+       ODM_AP_MODE             = BIT4,\r
+       ODM_CLIENT_MODE = BIT5,\r
+       ODM_AD_HOC              = BIT6,\r
+       ODM_WIFI_DIRECT = BIT7,\r
+       ODM_WIFI_DISPLAY        = BIT8,\r
+}ODM_OPERATION_MODE_E;\r
+\r
+// ODM_CMNINFO_WM_MODE\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_CE))\r
+typedef enum tag_Wireless_Mode_Definition\r
+{\r
+       ODM_WM_UNKNOW   = 0x0,\r
+       ODM_WM_B                        = BIT0,\r
+       ODM_WM_G                        = BIT1,\r
+       ODM_WM_A                        = BIT2,\r
+       ODM_WM_N24G             = BIT3,\r
+       ODM_WM_N5G              = BIT4,\r
+       ODM_WM_AUTO             = BIT5,\r
+       ODM_WM_AC               = BIT6,\r
+}ODM_WIRELESS_MODE_E;\r
+#else\r
+typedef enum tag_Wireless_Mode_Definition\r
+{\r
+       ODM_WM_UNKNOWN  = 0x00,/*0x0*/\r
+       ODM_WM_A                        = BIT0, /* 0x1*/\r
+       ODM_WM_B                        = BIT1, /* 0x2*/\r
+       ODM_WM_G                        = BIT2,/* 0x4*/\r
+       ODM_WM_AUTO             = BIT3,/* 0x8*/\r
+       ODM_WM_N24G             = BIT4,/* 0x10*/\r
+       ODM_WM_N5G              = BIT5,/* 0x20*/\r
+       ODM_WM_AC_5G            = BIT6,/* 0x40*/\r
+       ODM_WM_AC_24G   = BIT7,/* 0x80*/\r
+       ODM_WM_AC_ONLY  = BIT8,/* 0x100*/\r
+       ODM_WM_MAX              = BIT11/* 0x800*/\r
+\r
+}ODM_WIRELESS_MODE_E;\r
+#endif\r
+\r
+// ODM_CMNINFO_BAND\r
+typedef enum tag_Band_Type_Definition\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
+       ODM_BAND_2_4G   = BIT0,\r
+       ODM_BAND_5G             = BIT1,\r
+#else\r
+       ODM_BAND_2_4G = 0,\r
+       ODM_BAND_5G,\r
+       ODM_BAND_ON_BOTH,\r
+       ODM_BANDMAX\r
+#endif\r
+}ODM_BAND_TYPE_E;\r
+\r
+\r
+// ODM_CMNINFO_SEC_CHNL_OFFSET\r
+typedef enum tag_Secondary_Channel_Offset_Definition\r
+{\r
+       ODM_DONT_CARE   = 0,\r
+       ODM_BELOW               = 1,\r
+       ODM_ABOVE                       = 2\r
+}ODM_SEC_CHNL_OFFSET_E;\r
+\r
+// ODM_CMNINFO_SEC_MODE\r
+typedef enum tag_Security_Definition\r
+{\r
+       ODM_SEC_OPEN                    = 0,\r
+       ODM_SEC_WEP40           = 1,\r
+       ODM_SEC_TKIP                    = 2,\r
+       ODM_SEC_RESERVE                 = 3,\r
+       ODM_SEC_AESCCMP                 = 4,\r
+       ODM_SEC_WEP104          = 5,\r
+       ODM_WEP_WPA_MIXED    = 6, // WEP + WPA\r
+       ODM_SEC_SMS4                    = 7,\r
+}ODM_SECURITY_E;\r
+\r
+// ODM_CMNINFO_BW\r
+typedef enum tag_Bandwidth_Definition\r
+{      \r
+       ODM_BW20M               = 0,\r
+       ODM_BW40M               = 1,\r
+       ODM_BW80M               = 2,\r
+       ODM_BW160M              = 3,\r
+       ODM_BW10M               = 4,\r
+}ODM_BW_E;\r
+\r
+// ODM_CMNINFO_CHNL\r
+\r
+// ODM_CMNINFO_BOARD_TYPE\r
+typedef enum tag_Board_Definition\r
+{\r
+    ODM_BOARD_DEFAULT          = 0,      // The DEFAULT case.\r
+    ODM_BOARD_MINICARD  = BIT(0), // 0 = non-mini card, 1= mini card.\r
+    ODM_BOARD_SLIM      = BIT(1), // 0 = non-slim card, 1 = slim card\r
+    ODM_BOARD_BT        = BIT(2), // 0 = without BT card, 1 = with BT\r
+    ODM_BOARD_EXT_PA    = BIT(3), // 0 = no 2G ext-PA, 1 = existing 2G ext-PA\r
+    ODM_BOARD_EXT_LNA   = BIT(4), // 0 = no 2G ext-LNA, 1 = existing 2G ext-LNA\r
+    ODM_BOARD_EXT_TRSW  = BIT(5), // 0 = no ext-TRSW, 1 = existing ext-TRSW\r
+    ODM_BOARD_EXT_PA_5G        = BIT(6), // 0 = no 5G ext-PA, 1 = existing 5G ext-PA\r
+    ODM_BOARD_EXT_LNA_5G= BIT(7), // 0 = no 5G ext-LNA, 1 = existing 5G ext-LNA\r
+}ODM_BOARD_TYPE_E;\r
+\r
+typedef enum tag_ODM_Package_Definition\r
+{\r
+    ODM_PACKAGE_DEFAULT         = 0,     \r
+    ODM_PACKAGE_QFN68        = BIT(0), \r
+    ODM_PACKAGE_TFBGA90      = BIT(1), \r
+    ODM_PACKAGE_TFBGA79      = BIT(2), \r
+}ODM_Package_TYPE_E;\r
+\r
+typedef enum tag_ODM_TYPE_GPA_Definition\r
+{\r
+    TYPE_GPA0 = 0,       \r
+    TYPE_GPA1 = BIT(1)|BIT(0)\r
+}ODM_TYPE_GPA_E;\r
+\r
+typedef enum tag_ODM_TYPE_APA_Definition\r
+{\r
+    TYPE_APA0 = 0,       \r
+    TYPE_APA1 = BIT(1)|BIT(0)\r
+}ODM_TYPE_APA_E;\r
+\r
+typedef enum tag_ODM_TYPE_GLNA_Definition\r
+{\r
+    TYPE_GLNA0 = 0,      \r
+    TYPE_GLNA1 = BIT(2)|BIT(0),\r
+    TYPE_GLNA2 = BIT(3)|BIT(1),\r
+    TYPE_GLNA3 = BIT(3)|BIT(2)|BIT(1)|BIT(0)\r
+}ODM_TYPE_GLNA_E;\r
+\r
+typedef enum tag_ODM_TYPE_ALNA_Definition\r
+{\r
+    TYPE_ALNA0 = 0,      \r
+    TYPE_ALNA1 = BIT(2)|BIT(0),\r
+    TYPE_ALNA2 = BIT(3)|BIT(1),\r
+    TYPE_ALNA3 = BIT(3)|BIT(2)|BIT(1)|BIT(0)\r
+}ODM_TYPE_ALNA_E;\r
+\r
+\r
+typedef enum _ODM_RF_RADIO_PATH {\r
+    ODM_RF_PATH_A = 0,   //Radio Path A\r
+    ODM_RF_PATH_B = 1,   //Radio Path B\r
+    ODM_RF_PATH_C = 2,   //Radio Path C\r
+    ODM_RF_PATH_D = 3,   //Radio Path D\r
+    ODM_RF_PATH_AB,\r
+    ODM_RF_PATH_AC,\r
+    ODM_RF_PATH_AD,\r
+    ODM_RF_PATH_BC,\r
+    ODM_RF_PATH_BD,\r
+    ODM_RF_PATH_CD,\r
+    ODM_RF_PATH_ABC,\r
+    ODM_RF_PATH_ACD,\r
+    ODM_RF_PATH_BCD,\r
+    ODM_RF_PATH_ABCD,\r
+  //  ODM_RF_PATH_MAX,    //Max RF number 90 support\r
+} ODM_RF_RADIO_PATH_E, *PODM_RF_RADIO_PATH_E;\r
+\r
+\r
+\r
+\r
+\r
+\r
+#endif\r
index 5651d7eaa1906c92ce0811d999fa0866e414e906..e832755fd639604eedf1b0ab2c8bc180c69f5e81 100755 (executable)
 \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 #include "Precomp.h"           // We need to include mp_precomp.h due to batch file setting.\r
 \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 #include "Precomp.h"           // We need to include mp_precomp.h due to batch file setting.\r
-\r
 #else\r
 #else\r
-\r
 #define                TEST_FALG___            1\r
 #define                TEST_FALG___            1\r
+#endif\r
 \r
 \r
+#if (DM_ODM_SUPPORT_TYPE ==ODM_CE) \r
+#define        RTL8192CE_SUPPORT                               0\r
+#define        RTL8192CU_SUPPORT                               0\r
+#define        RTL8192C_SUPPORT                                0       \r
+\r
+#define        RTL8192DE_SUPPORT                               0\r
+#define        RTL8192DU_SUPPORT                               0\r
+#define        RTL8192D_SUPPORT                                0       \r
+\r
+#define        RTL8723AU_SUPPORT                               0\r
+#define        RTL8723AS_SUPPORT                               0\r
+#define        RTL8723AE_SUPPORT                               0\r
+#define        RTL8723A_SUPPORT                                0\r
+#define        RTL8723_FPGA_VERIFICATION               0\r
 #endif\r
 \r
 //2 Config Flags and Structs - defined by each ODM Type\r
 #endif\r
 \r
 //2 Config Flags and Structs - defined by each ODM Type\r
        #include "../8192cd_headers.h"\r
        #include "../8192cd_debug.h"            \r
        #endif\r
        #include "../8192cd_headers.h"\r
        #include "../8192cd_debug.h"            \r
        #endif\r
-       \r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)\r
-       // Flags\r
-       #include "../8192cd_cfg.h"              // OUTSRC needs ADSL config flags.\r
-       #include "../odm_inc.h"                 // OUTSRC needs some extra flags.\r
-       // Data Structure\r
-       #include "../common_types.h"    // OUTSRC and rtl8192cd both needs basic type such as UINT8 and BIT0.\r
-       #include "../8192cd.h"                  // OUTSRC needs basic ADSL struct definition.\r
-       #include "../8192cd_util.h"             // OUTSRC needs basic I/O function.\r
-       #ifdef _BIG_ENDIAN_\r
-       #define ODM_ENDIAN_TYPE                         ODM_ENDIAN_BIG\r
-       #else\r
-       #define ODM_ENDIAN_TYPE                         ODM_ENDIAN_LITTLE\r
-       #endif\r
 \r
 \r
-       #ifdef ADSL_AP_BUILD_WORKAROUND\r
-       // NESTED_INC: Functions defined outside should not be included!! Marked by Annie, 2011-10-14.\r
-       #include "../8192cd_headers.h"\r
-       #include "../8192cd_debug.h"    \r
-       #endif  \r
-       \r
 #elif (DM_ODM_SUPPORT_TYPE ==ODM_CE)\r
 #elif (DM_ODM_SUPPORT_TYPE ==ODM_CE)\r
-       //#include <drv_conf.h>\r
-       //#include <basic_types.h>\r
-       //#include <osdep_service.h>\r
-       //#include <drv_types.h>\r
-       //#include <rtw_byteorder.h>\r
-       //#include <hal_intf.h>\r
-#define BEAMFORMING_SUPPORT 0          \r
+       #define BEAMFORMING_SUPPORT 0\r
+       #define __PACK\r
+       #define __WLAN_ATTRIB_PACK__\r
 #elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        #include "Mp_Precomp.h"\r
        #define ODM_ENDIAN_TYPE                         ODM_ENDIAN_LITTLE\r
 #elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
        #include "Mp_Precomp.h"\r
        #define ODM_ENDIAN_TYPE                         ODM_ENDIAN_LITTLE\r
+       #define __PACK\r
+       #define __WLAN_ATTRIB_PACK__\r
 #endif\r
 \r
 #endif\r
 \r
\r
-//2 Hardware Parameter Files\r
-\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-#if (RTL8192C_SUPPORT==1)\r
-       #include "rtl8192c/Hal8192CEFWImg_AP.h"\r
-       #include "rtl8192c/Hal8192CEPHYImg_AP.h"\r
-       #include "rtl8192c/Hal8192CEMACImg_AP.h"\r
-#endif\r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)\r
-       #include "rtl8192c/Hal8192CEFWImg_ADSL.h"\r
-       #include "rtl8192c/Hal8192CEPHYImg_ADSL.h"\r
-       #include "rtl8192c/Hal8192CEMACImg_ADSL.h"\r
-\r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-       #if(RTL8192CE_SUPPORT ==1)\r
-       #include "rtl8192c/Hal8192CEFWImg_CE.h"\r
-       #include "rtl8192c/Hal8192CEPHYImg_CE.h"\r
-       #include "rtl8192c/Hal8192CEMACImg_CE.h"\r
-       #endif\r
-       \r
-       #if(RTL8192CU_SUPPORT ==1)\r
-       #include "rtl8192c/Hal8192CUFWImg_CE.h"\r
-       #include "rtl8192c/Hal8192CUPHYImg_CE.h"\r
-       #include "rtl8192c/Hal8192CUMACImg_CE.h"\r
-       #endif\r
-       \r
-       #if(RTL8192DE_SUPPORT ==1)\r
-       #include "rtl8192d/Hal8192DEFWImg_CE.h"\r
-       #include "rtl8192d/Hal8192DEPHYImg_CE.h"\r
-       #include "rtl8192d/Hal8192DEMACImg_CE.h"        \r
-       #endif\r
-       \r
-       #if(RTL8192DU_SUPPORT ==1)\r
-       #include "rtl8192d/Hal8192DUFWImg_CE.h"\r
-       #include "rtl8192d/Hal8192DUPHYImg_CE.h"\r
-       #include "rtl8192d/Hal8192DUMACImg_CE.h"\r
-       #endif\r
-       \r
-       #if(RTL8723AS_SUPPORT==1)\r
-       #include "rtl8723a/Hal8723SHWImg_CE.h"\r
-       #endif\r
-       \r
-       #if(RTL8723AU_SUPPORT==1)\r
-       #include "rtl8723a/Hal8723UHWImg_CE.h"  \r
-       #endif  \r
-       \r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-\r
-#endif\r
-\r
-\r
 //2 OutSrc Header Files\r
 //2 OutSrc Header Files\r
-#include "phydm.h"\r
\r
+#include "phydm.h" \r
 #include "phydm_HWConfig.h"\r
 #include "phydm_debug.h"\r
 #include "phydm_RegDefine11AC.h"\r
 #include "phydm_RegDefine11N.h"\r
 #include "phydm_HWConfig.h"\r
 #include "phydm_debug.h"\r
 #include "phydm_RegDefine11AC.h"\r
 #include "phydm_RegDefine11N.h"\r
-#include "phydm_AntDiv.h"\r
 #include "phydm_interface.h"\r
 #include "phydm_reg.h"\r
 #include "phydm_interface.h"\r
 #include "phydm_reg.h"\r
+#include "HalPhyRf.h"\r
 \r
 \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-#if (RTL8192C_SUPPORT==1)\r
-       #include "rtl8192c/HalDMOutSrc8192C_AP.h"\r
-#endif\r
-#if (RTL8188E_SUPPORT==1)\r
-               #include "rtl8188e/Hal8188ERateAdaptive.h"//for  RA,Power training\r
-#endif\r
-\r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)\r
-       #include "rtl8192c/HalDMOutSrc8192C_ADSL.h"\r
-\r
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
-       //#include "hal_com.h"\r
-       #include "HalPhyRf.h"\r
-       #if (RTL8192C_SUPPORT==1) \r
-       #ifdef CONFIG_INTEL_PROXIM\r
-       #include "../proxim/intel_proxim.h"     \r
-       #endif\r
-       #include  "rtl8192c/HalDMOutSrc8192C_CE.h"\r
-       #include <rtl8192c_hal.h>\r
-       #endif\r
-       \r
-       #if (RTL8192D_SUPPORT==1)\r
-       #include  "rtl8192d/HalDMOutSrc8192D_CE.h"\r
-       #include  "rtl8192d_hal.h"\r
-       #endif\r
-       \r
-       #if (RTL8723A_SUPPORT==1)\r
-               #include "rtl8192c/HalDMOutSrc8192C_CE.h" //for IQK,LCK,Power-tracking\r
-               #include "rtl8723a_hal.h"\r
-       #endif\r
-       \r
-       #if (RTL8188E_SUPPORT==1)\r
-               #include "rtl8188e/HalPhyRf_8188e.h"//for IQK,LCK,Power-tracking\r
-               #include "rtl8188e/Hal8188ERateAdaptive.h"//for  RA,Power training\r
-               #include "rtl8188e_hal.h"       \r
-       #endif\r
-       \r
-       #if (RTL8192E_SUPPORT==1)\r
-               #include "rtl8192e/HalPhyRf_8192e.h"//for IQK,LCK,Power-tracking                \r
-               #include "rtl8192e_hal.h"                       \r
-       #endif\r
-\r
-       #if (RTL8812A_SUPPORT==1)\r
-               #include "rtl8812a/HalPhyRf_8812A.h"//for IQK,LCK,Power-tracking\r
-               #include "rtl8812a_hal.h"\r
-       #endif\r
-\r
-       #if (RTL8821A_SUPPORT==1)\r
-               #include "rtl8821a/HalPhyRf_8821A.h"//for IQK,LCK,Power-tracking\r
-               #include "rtl8812a/HalPhyRf_8812A.h"//for IQK,LCK,Power-tracking\r
-               #include "rtl8812a_hal.h"\r
-               #include "rtl8821a/PhyDM_IQK_8821A.h"\r
-       #endif\r
-\r
-       #if (RTL8723B_SUPPORT==1)\r
-               #include "rtl8723b/HalPhyRf_8723B.h"//for IQK,LCK,Power-tracking\r
-               #include "rtl8723b_hal.h"\r
-       #endif\r
-#endif\r
-\r
-\r
-#if (RTL8192C_SUPPORT==1) \r
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
-#include "rtl8192c/Hal8192CHWImg_MAC.h"\r
-#include "rtl8192c/Hal8192CHWImg_RF.h"\r
-#include "rtl8192c/Hal8192CHWImg_BB.h"\r
-#include "rtl8192c/Hal8192CHWImg_FW.h"\r
-#endif\r
-#include "rtl8192c/phydm_RTL8192C.h"\r
-#endif\r
-#if (RTL8192D_SUPPORT==1) \r
-#include "rtl8192d/phydm_RTL8192D.h"\r
-#endif\r
-\r
-#if (RTL8723A_SUPPORT==1) \r
-#include "rtl8723a/HalHWImg8723A_MAC.h"\r
-#include "rtl8723a/HalHWImg8723A_RF.h"\r
-#include "rtl8723a/HalHWImg8723A_BB.h"\r
-#include "rtl8723a/HalHWImg8723A_FW.h"\r
-#include "rtl8723a/phydm_RegConfig8723A.h"\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_AP))\r
+#define RTL8821B_SUPPORT               0\r
+#define RTL8822B_SUPPORT               0\r
+#define RTL8703B_SUPPORT               0\r
+#define RTL8188F_SUPPORT               0\r
 #endif\r
 \r
 #if (RTL8188E_SUPPORT==1) \r
 #endif\r
 \r
 #if (RTL8188E_SUPPORT==1) \r
+#include "rtl8188e/Hal8188ERateAdaptive.h"//for  RA,Power training\r
 #include "rtl8188e/HalHWImg8188E_MAC.h"\r
 #include "rtl8188e/HalHWImg8188E_RF.h"\r
 #include "rtl8188e/HalHWImg8188E_BB.h"\r
 #include "rtl8188e/HalHWImg8188E_FW.h"\r
 #include "rtl8188e/HalHWImg8188E_MAC.h"\r
 #include "rtl8188e/HalHWImg8188E_RF.h"\r
 #include "rtl8188e/HalHWImg8188E_BB.h"\r
 #include "rtl8188e/HalHWImg8188E_FW.h"\r
-#include "rtl8188e/Hal8188EReg.h"\r
-\r
-#if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
+#include "rtl8188e/phydm_RegConfig8188E.h"\r
+#include "rtl8188e/phydm_RTL8188E.h"\r
 #include "rtl8188e/HalPhyRf_8188e.h"\r
 #include "rtl8188e/HalPhyRf_8188e.h"\r
+#include "rtl8188e/Hal8188EReg.h"\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+       #include "rtl8188e_hal.h" \r
 #endif\r
 #endif\r
+#endif  //88E END\r
 \r
 \r
-#if (TESTCHIP_SUPPORT == 1) \r
-#include "rtl8188e/HalHWImg8188E_TestChip_MAC.h"\r
-#include "rtl8188e/HalHWImg8188E_TestChip_RF.h"\r
-#include "rtl8188e/HalHWImg8188E_TestChip_BB.h"\r
+#if (RTL8192E_SUPPORT==1) \r
+#include "rtl8192e/HalPhyRf_8192e.h" //FOR_8192E_IQK\r
+#include "rtl8192e/phydm_RTL8192E.h" //FOR_8192E_IQK\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+       #include "rtl8192e/HalHWImg8192E_BB.h"\r
+       #include "rtl8192e/HalHWImg8192E_MAC.h"\r
+       #include "rtl8192e/HalHWImg8192E_RF.h"\r
+       #include "rtl8192e/phydm_RegConfig8192E.h"\r
+       #include "rtl8192e/HalHWImg8192E_FW.h"\r
+       #include "rtl8192e/Hal8192EReg.h"\r
 #endif\r
 #endif\r
-\r
-\r
-#include "rtl8188e/phydm_RegConfig8188E.h"\r
-#include "rtl8188e/phydm_RTL8188E.h"\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+       #include "rtl8192e_hal.h"\r
 #endif\r
 #endif\r
+#endif  //92E END\r
 \r
 \r
-#if (RTL8192E_SUPPORT==1) \r
-#include "rtl8192e/HalHWImg8192E_MAC.h"\r
-#include "rtl8192e/HalHWImg8192E_RF.h"\r
-#include "rtl8192e/HalHWImg8192E_BB.h"\r
-#include "rtl8192e/HalHWImg8192E_FW.h"\r
-#include "rtl8192e/Hal8192EReg.h"\r
-#include "rtl8192e/phydm_RegConfig8192E.h"\r
-#include "rtl8192e/phydm_RTL8192E.h"\r
+#if (RTL8812A_SUPPORT==1) \r
+#include "rtl8812a/HalPhyRf_8812A.h" //FOR_8812_IQK\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+       #include "rtl8812a/HalHWImg8812A_BB.h"\r
+       #include "rtl8812a/HalHWImg8812A_MAC.h"\r
+       #include "rtl8812a/HalHWImg8812A_RF.h"\r
+       #include "rtl8812a/phydm_RegConfig8812A.h"\r
+       #include "rtl8812a/HalHWImg8812A_FW.h"\r
+       #include "rtl8812a/phydm_RTL8812A.h"\r
+#endif\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+       #include "rtl8812a_hal.h"\r
+#endif\r
+#endif //8812 END\r
+\r
+#if (RTL8814A_SUPPORT==1)\r
+#include "rtl8814a/HalPhyRf_8814A.h"\r
+#include "rtl8814a/HalHWImg8814A_MAC.h"\r
+#include "rtl8814a/HalHWImg8814A_RF.h"\r
+#include "rtl8814a/HalHWImg8814A_BB.h"\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+       #include "rtl8814a/HalHWImg8814A_FW.h"\r
+       #include "rtl8814a/phydm_RTL8814A.h"\r
+#endif\r
+       #include "rtl8814a/phydm_RegConfig8814A.h"\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+       #include "rtl8814a_hal.h"\r
+       #include "rtl8814a/PhyDM_IQK_8814A.h"\r
+#endif\r
+#endif //8814 END\r
+\r
+#if (RTL8881A_SUPPORT==1)//FOR_8881_IQK\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+#include "rtl8821a/PhyDM_IQK_8821A_WIN.h"\r
+#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+#include "rtl8821a/PhyDM_IQK_8821A_CE.h"\r
+#else\r
+#include "rtl8821a/PhyDM_IQK_8821A_AP.h"\r
+#endif\r
+//#include "rtl8881a/HalHWImg8881A_BB.h"\r
+//#include "rtl8881a/HalHWImg8881A_MAC.h"\r
+//#include "rtl8881a/HalHWImg8881A_RF.h"\r
+//#include "rtl8881a/odm_RegConfig8881A.h"\r
 #endif\r
 \r
 #if (RTL8723B_SUPPORT==1) \r
 #endif\r
 \r
 #if (RTL8723B_SUPPORT==1) \r
 #include "rtl8723b/HalHWImg8723B_RF.h"\r
 #include "rtl8723b/HalHWImg8723B_BB.h"\r
 #include "rtl8723b/HalHWImg8723B_FW.h"\r
 #include "rtl8723b/HalHWImg8723B_RF.h"\r
 #include "rtl8723b/HalHWImg8723B_BB.h"\r
 #include "rtl8723b/HalHWImg8723B_FW.h"\r
-#include "rtl8723b/HalHWImg8723B_MP.h"\r
-#include "rtl8723b/Hal8723BReg.h"\r
-#include "rtl8723b/phydm_RTL8723B.h"\r
 #include "rtl8723b/phydm_RegConfig8723B.h"\r
 #include "rtl8723b/phydm_RegConfig8723B.h"\r
+#include "rtl8723b/phydm_RTL8723B.h"\r
+#include "rtl8723b/HalPhyRf_8723B.h"\r
+#include "rtl8723b/Hal8723BReg.h"\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+       #include "rtl8723b/HalHWImg8723B_MP.h"\r
+       #include "rtl8723b_hal.h"\r
 #endif\r
 #endif\r
-\r
-#if (RTL8812A_SUPPORT==1) \r
-#include "rtl8812a/HalHWImg8812A_MAC.h"\r
-#include "rtl8812a/HalHWImg8812A_RF.h"\r
-#include "rtl8812a/HalHWImg8812A_BB.h"\r
-#include "rtl8812a/HalHWImg8812A_FW.h"\r
-#include "rtl8812a/phydm_RegConfig8812A.h"\r
-#include "rtl8812a/phydm_RTL8812A.h"\r
 #endif\r
 \r
 #endif\r
 \r
-\r
 #if (RTL8821A_SUPPORT==1) \r
 #include "rtl8821a/HalHWImg8821A_MAC.h"\r
 #include "rtl8821a/HalHWImg8821A_RF.h"\r
 #if (RTL8821A_SUPPORT==1) \r
 #include "rtl8821a/HalHWImg8821A_MAC.h"\r
 #include "rtl8821a/HalHWImg8821A_RF.h"\r
 #include "rtl8821a/HalHWImg8821A_FW.h"\r
 #include "rtl8821a/phydm_RegConfig8821A.h"\r
 #include "rtl8821a/phydm_RTL8821A.h"\r
 #include "rtl8821a/HalHWImg8821A_FW.h"\r
 #include "rtl8821a/phydm_RegConfig8821A.h"\r
 #include "rtl8821a/phydm_RTL8821A.h"\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       #include "rtl8821a/HalPhyRf_8821A_WIN.h"\r
+#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+       #include "rtl8821a/HalPhyRf_8821A_CE.h"\r
+       #include "rtl8821a/PhyDM_IQK_8821A_CE.h"/*for IQK*/\r
+       #include "rtl8812a/HalPhyRf_8812A.h"/*for IQK,LCK,Power-tracking*/\r
+       #include "rtl8812a_hal.h"\r
+#else\r
+#endif\r
+#endif\r
+\r
+#if (RTL8821B_SUPPORT==1) \r
+#include "rtl8821b/HalHWImg8821B_MAC.h"\r
+#include "rtl8821b/HalHWImg8821B_RF.h"\r
+#include "rtl8821b/HalHWImg8821B_BB.h"\r
+#include "rtl8821b/HalHWImg8821B_FW.h"\r
+#include "rtl8821b/phydm_RegConfig8821B.h"\r
+#include "rtl8821b/HalHWImg8821B_TestChip_MAC.h"\r
+#include "rtl8821b/HalHWImg8821B_TestChip_RF.h"\r
+#include "rtl8821b/HalHWImg8821B_TestChip_BB.h"\r
+#include "rtl8821b/HalHWImg8821B_TestChip_FW.h"\r
+#include "rtl8821b/HalPhyRf_8821B.h"\r
+#endif\r
+\r
+#if (RTL8822B_SUPPORT==1) \r
+#include "rtl8822B/HalHWImg8822B_MAC.h"\r
+#include "rtl8822B/HalHWImg8822B_RF.h"\r
+#include "rtl8822B/HalHWImg8822B_BB.h"\r
+#include "rtl8822B/HalHWImg8822B_FW.h"\r
+#include "rtl8822B/phydm_RegConfig8822B.h"\r
+#include "rtl8822B/HalHWImg8822B_TestChip_MAC.h"\r
+#include "rtl8822B/HalHWImg8822B_TestChip_RF.h"\r
+#include "rtl8822B/HalHWImg8822B_TestChip_BB.h"\r
+#include "rtl8822B/HalHWImg8822B_TestChip_FW.h"\r
+#include "rtl8822b/HalPhyRf_8822B.h"\r
+#endif\r
+\r
+#if (RTL8703B_SUPPORT==1) \r
+#include "rtl8703b/phydm_RegConfig8703B.h"\r
+#include "rtl8703b/HalHWImg8703B_TestChip_MAC.h"\r
+#include "rtl8703b/HalHWImg8703B_TestChip_RF.h"\r
+#include "rtl8703b/HalHWImg8703B_TestChip_BB.h"\r
+#include "rtl8703b/HalHWImg8703B_FW.h"\r
+#endif\r
+\r
+#if (RTL8188F_SUPPORT==1) \r
+#include "rtl8188f/phydm_RegConfig8188F.h"\r
+#include "rtl8188f/HalHWImg8188F_TestChip_MAC.h"\r
+#include "rtl8188f/HalHWImg8188F_TestChip_RF.h"\r
+#include "rtl8188f/HalHWImg8188F_TestChip_BB.h"\r
+#include "rtl8188f/HalHWImg8188F_FW.h"\r
 #endif\r
 \r
 #endif // __ODM_PRECOMP_H__\r
 #endif\r
 \r
 #endif // __ODM_PRECOMP_H__\r
index ddeb1a8a8a1facff29f698d2408fd764804cb1b7..c1b93eaa7f4c5898272f6be9f25840cb553ac1da 100755 (executable)
 #ifndef __ODM_TYPES_H__
 #define __ODM_TYPES_H__
 
 #ifndef __ODM_TYPES_H__
 #define __ODM_TYPES_H__
 
-
-
-
-#define ODM_RATEMCS15_SG               0x1c
-#define ODM_RATEMCS32                  0x20
-
-
-// CCK Rates, TxHT = 0
-#define ODM_RATE1M                             0x00
-#define ODM_RATE2M                             0x01
-#define ODM_RATE5_5M                   0x02
-#define ODM_RATE11M                            0x03
-// OFDM Rates, TxHT = 0
-#define ODM_RATE6M                             0x04
-#define ODM_RATE9M                             0x05
-#define ODM_RATE12M                            0x06
-#define ODM_RATE18M                            0x07
-#define ODM_RATE24M                            0x08
-#define ODM_RATE36M                            0x09
-#define ODM_RATE48M                            0x0A
-#define ODM_RATE54M                            0x0B
-// MCS Rates, TxHT = 1
-#define ODM_RATEMCS0                   0x0C
-#define ODM_RATEMCS1                   0x0D
-#define ODM_RATEMCS2                   0x0E
-#define ODM_RATEMCS3                   0x0F
-#define ODM_RATEMCS4                   0x10
-#define ODM_RATEMCS5                   0x11
-#define ODM_RATEMCS6                   0x12
-#define ODM_RATEMCS7                   0x13
-#define ODM_RATEMCS8                   0x14
-#define ODM_RATEMCS9                   0x15
-#define ODM_RATEMCS10                  0x16
-#define ODM_RATEMCS11                  0x17
-#define ODM_RATEMCS12                  0x18
-#define ODM_RATEMCS13                  0x19
-#define ODM_RATEMCS14                  0x1A
-#define ODM_RATEMCS15                  0x1B
-#define ODM_RATEMCS16                  0x1C
-#define ODM_RATEMCS17                  0x1D
-#define ODM_RATEMCS18                  0x1E
-#define ODM_RATEMCS19                  0x1F
-#define ODM_RATEMCS20                  0x20
-#define ODM_RATEMCS21                  0x21
-#define ODM_RATEMCS22                  0x22
-#define ODM_RATEMCS23                  0x23
-#define ODM_RATEMCS24                  0x24
-#define ODM_RATEMCS25                  0x25
-#define ODM_RATEMCS26                  0x26
-#define ODM_RATEMCS27                  0x27
-#define ODM_RATEMCS28                  0x28
-#define ODM_RATEMCS29                  0x29
-#define ODM_RATEMCS30                  0x2A
-#define ODM_RATEMCS31                  0x2B
-#define ODM_RATEVHTSS1MCS0             0x2C
-#define ODM_RATEVHTSS1MCS1             0x2D
-#define ODM_RATEVHTSS1MCS2             0x2E
-#define ODM_RATEVHTSS1MCS3             0x2F
-#define ODM_RATEVHTSS1MCS4             0x30
-#define ODM_RATEVHTSS1MCS5             0x31
-#define ODM_RATEVHTSS1MCS6             0x32
-#define ODM_RATEVHTSS1MCS7             0x33
-#define ODM_RATEVHTSS1MCS8             0x34
-#define ODM_RATEVHTSS1MCS9             0x35
-#define ODM_RATEVHTSS2MCS0             0x36
-#define ODM_RATEVHTSS2MCS1             0x37
-#define ODM_RATEVHTSS2MCS2             0x38
-#define ODM_RATEVHTSS2MCS3             0x39
-#define ODM_RATEVHTSS2MCS4             0x3A
-#define ODM_RATEVHTSS2MCS5             0x3B
-#define ODM_RATEVHTSS2MCS6             0x3C
-#define ODM_RATEVHTSS2MCS7             0x3D
-#define ODM_RATEVHTSS2MCS8             0x3E
-#define ODM_RATEVHTSS2MCS9             0x3F
-#define ODM_RATEVHTSS3MCS0             0x40
-#define ODM_RATEVHTSS3MCS1             0x41
-#define ODM_RATEVHTSS3MCS2             0x42
-#define ODM_RATEVHTSS3MCS3             0x43
-#define ODM_RATEVHTSS3MCS4             0x44
-#define ODM_RATEVHTSS3MCS5             0x45
-#define ODM_RATEVHTSS3MCS6             0x46
-#define ODM_RATEVHTSS3MCS7             0x47
-#define ODM_RATEVHTSS3MCS8             0x48
-#define ODM_RATEVHTSS3MCS9             0x49
-#define ODM_RATEVHTSS4MCS0             0x4A
-#define ODM_RATEVHTSS4MCS1             0x4B
-#define ODM_RATEVHTSS4MCS2             0x4C
-#define ODM_RATEVHTSS4MCS3             0x4D
-#define ODM_RATEVHTSS4MCS4             0x4E
-#define ODM_RATEVHTSS4MCS5             0x4F
-#define ODM_RATEVHTSS4MCS6             0x50
-#define ODM_RATEVHTSS4MCS7             0x51
-#define ODM_RATEVHTSS4MCS8             0x52
-#define ODM_RATEVHTSS4MCS9             0x53
-
 //
 // Define Different SW team support
 //
 //
 // Define Different SW team support
 //
 #define        ODM_CE                  0x04    //BIT2
 #define        ODM_WIN                 0x08    //BIT3
 
 #define        ODM_CE                  0x04    //BIT2
 #define        ODM_WIN                 0x08    //BIT3
 
-#define        DM_ODM_SUPPORT_TYPE                     ODM_CE
+#define        DM_ODM_SUPPORT_TYPE     ODM_CE
 
 // Deifne HW endian support
 #define        ODM_ENDIAN_BIG  0
 
 // Deifne HW endian support
 #define        ODM_ENDIAN_BIG  0
@@ -205,6 +110,7 @@ typedef enum _RT_SPINLOCK_TYPE{
        RT_CHNLLIST_SPINLOCK = 40,      
        RT_INDIC_SPINLOCK = 41, //protect indication    
        RT_RFD_SPINLOCK = 42,
        RT_CHNLLIST_SPINLOCK = 40,      
        RT_INDIC_SPINLOCK = 41, //protect indication    
        RT_RFD_SPINLOCK = 42,
+       RT_SYNC_IO_CNT_SPINLOCK = 43,
        RT_LAST_SPINLOCK,
 }RT_SPINLOCK_TYPE;
 
        RT_LAST_SPINLOCK,
 }RT_SPINLOCK_TYPE;
 
@@ -215,9 +121,12 @@ typedef enum _RT_SPINLOCK_TYPE{
        #define STA_INFO_T                      RT_WLAN_STA
        #define PSTA_INFO_T                     PRT_WLAN_STA
 
        #define STA_INFO_T                      RT_WLAN_STA
        #define PSTA_INFO_T                     PRT_WLAN_STA
 
-//    typedef unsigned long            u4Byte,*pu4Byte;
-#define CONFIG_HW_ANTENNA_DIVERSITY 
-#define CONFIG_SW_ANTENNA_DIVERSITY 
+       #define CONFIG_HW_ANTENNA_DIVERSITY 
+       #define CONFIG_SW_ANTENNA_DIVERSITY 
+       /*#define CONFIG_PATH_DIVERSITY*/
+       /*#define CONFIG_RA_DYNAMIC_RTY_LIMIT*/
+       #define CONFIG_ANT_DETECTION
+       #define CONFIG_RA_DBG_CMD
 
 #elif (DM_ODM_SUPPORT_TYPE == ODM_AP)
 
 
 #elif (DM_ODM_SUPPORT_TYPE == ODM_AP)
 
@@ -225,13 +134,19 @@ typedef enum _RT_SPINLOCK_TYPE{
        #define ADSL_AP_BUILD_WORKAROUND
        #define AP_BUILD_WORKAROUND
        
        #define ADSL_AP_BUILD_WORKAROUND
        #define AP_BUILD_WORKAROUND
        
+       //2 [ Configure RA Debug H2C CMD ]
+       #define CONFIG_RA_DBG_CMD
+       
+       /*#define CONFIG_PATH_DIVERSITY*/
+       /*#define CONFIG_RA_DYNAMIC_RTY_LIMIT*/
+       
        //2 [ Configure Antenna Diversity ]
 #if defined(CONFIG_RTL_8881A_ANT_SWITCH) || defined(CONFIG_SLOT_0_ANT_SWITCH) || defined(CONFIG_SLOT_1_ANT_SWITCH)
        #define CONFIG_HW_ANTENNA_DIVERSITY 
        #define ODM_EVM_ENHANCE_ANTDIV
 
         //----------
        //2 [ Configure Antenna Diversity ]
 #if defined(CONFIG_RTL_8881A_ANT_SWITCH) || defined(CONFIG_SLOT_0_ANT_SWITCH) || defined(CONFIG_SLOT_1_ANT_SWITCH)
        #define CONFIG_HW_ANTENNA_DIVERSITY 
        #define ODM_EVM_ENHANCE_ANTDIV
 
         //----------
-       #if(!defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_2G_CGCS_RX_DIVERSITY) && !defined(CONFIG_2G_CG_TRX_DIVERSITY) && !defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY))
+       #if(!defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_2G5G_CG_TRX_DIVERSITY_8881A) && !defined(CONFIG_2G_CGCS_RX_DIVERSITY) && !defined(CONFIG_2G_CG_TRX_DIVERSITY) && !defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY))
                #define CONFIG_NO_2G_DIVERSITY
        #endif
 
                #define CONFIG_NO_2G_DIVERSITY
        #endif
 
@@ -241,9 +156,10 @@ typedef enum _RT_SPINLOCK_TYPE{
                #define CONFIG_5G_CGCS_RX_DIVERSITY
        #elif  defined(CONFIG_5G_CG_TRX_DIVERSITY_8881A)
                #define CONFIG_5G_CG_TRX_DIVERSITY
                #define CONFIG_5G_CGCS_RX_DIVERSITY
        #elif  defined(CONFIG_5G_CG_TRX_DIVERSITY_8881A)
                #define CONFIG_5G_CG_TRX_DIVERSITY
+       #elif  defined(CONFIG_2G5G_CG_TRX_DIVERSITY_8881A)
+               #define CONFIG_2G5G_CG_TRX_DIVERSITY
        #endif
        #endif
-
-       #if(!defined(CONFIG_NO_5G_DIVERSITY) && !defined(CONFIG_5G_CGCS_RX_DIVERSITY) && !defined(CONFIG_5G_CG_TRX_DIVERSITY) && !defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY))
+       #if(!defined(CONFIG_NO_5G_DIVERSITY) && !defined(CONFIG_5G_CGCS_RX_DIVERSITY) && !defined(CONFIG_5G_CG_TRX_DIVERSITY) && !defined(CONFIG_2G5G_CG_TRX_DIVERSITY) && !defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY))
                #define CONFIG_NO_5G_DIVERSITY
        #endif  
        //----------
                #define CONFIG_NO_5G_DIVERSITY
        #endif  
        //----------
@@ -253,7 +169,7 @@ typedef enum _RT_SPINLOCK_TYPE{
                #define CONFIG_2G_SUPPORT_ANTDIV
        #elif( defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_NO_5G_DIVERSITY) )
                #define CONFIG_5G_SUPPORT_ANTDIV
                #define CONFIG_2G_SUPPORT_ANTDIV
        #elif( defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_NO_5G_DIVERSITY) )
                #define CONFIG_5G_SUPPORT_ANTDIV
-       #elif( !defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_NO_5G_DIVERSITY) )
+       #elif( (!defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_NO_5G_DIVERSITY)) || defined(CONFIG_2G5G_CG_TRX_DIVERSITY) )
                #define CONFIG_2G5G_SUPPORT_ANTDIV 
        #endif
        //----------
                #define CONFIG_2G5G_SUPPORT_ANTDIV 
        #endif
        //----------
@@ -291,42 +207,14 @@ typedef enum _RT_SPINLOCK_TYPE{
        #define _TRUE                           1
        #define _FALSE                          0
        
        #define _TRUE                           1
        #define _FALSE                          0
        
-#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)
-
-       // To let ADSL/AP project compile ok; it should be removed after all conflict are solved. Added by Annie, 2011-10-07.
-       #define ADSL_AP_BUILD_WORKAROUND
-       #define ADSL_BUILD_WORKAROUND
-       //
-
-       typedef unsigned char                   BOOLEAN,*PBOOLEAN;
-       typedef unsigned char                   u1Byte,*pu1Byte;
-       typedef unsigned short                  u2Byte,*pu2Byte;
-       typedef unsigned int                    u4Byte,*pu4Byte;
-       typedef unsigned long long              u8Byte,*pu8Byte;
-#if 1
-/* In ARM platform, system would use the type -- "char" as "unsigned char"
- * And we only use s1Byte/ps1Byte as INT8 now, so changes the type of s1Byte.*/
-    typedef signed char                                s1Byte,*ps1Byte;
-#else
-       typedef char                                    s1Byte,*ps1Byte;
-#endif
-       typedef short                                   s2Byte,*ps2Byte;
-       typedef long                                    s4Byte,*ps4Byte;
-       typedef long long                               s8Byte,*ps8Byte;
-
-       typedef struct rtl8192cd_priv   *prtl8192cd_priv;
-       typedef struct stat_info                STA_INFO_T,*PSTA_INFO_T;
-       typedef struct timer_list               RT_TIMER, *PRT_TIMER;
-       typedef  void *                         RT_TIMER_CALL_BACK;
-       
-       #define DEV_BUS_TYPE            RT_PCI_INTERFACE
-
-       #define _TRUE                           1
-       #define _FALSE                          0
-
 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
        #include <drv_types.h>
 
 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
        #include <drv_types.h>
 
+       /*#define CONFIG_RA_DBG_CMD*/
+       /*#define CONFIG_ANT_DETECTION*/
+       /*#define CONFIG_PATH_DIVERSITY*/
+       /*#define CONFIG_RA_DYNAMIC_RTY_LIMIT*/
+
 #if 0
        typedef u8                                      u1Byte, *pu1Byte;
        typedef u16                                     u2Byte,*pu2Byte;
 #if 0
        typedef u8                                      u1Byte, *pu1Byte;
        typedef u16                                     u2Byte,*pu2Byte;
@@ -396,8 +284,9 @@ typedef enum _RT_SPINLOCK_TYPE{
 
        //define useless flag to avoid compile warning
        #define USE_WORKITEM 0
 
        //define useless flag to avoid compile warning
        #define USE_WORKITEM 0
-       #define         FOR_BRAZIL_PRETEST 0
-       #define   FPGA_TWO_MAC_VERIFICATION     0
+       #define FOR_BRAZIL_PRETEST 0
+       /*#define       BT_30_SUPPORT                   0*/
+       #define FPGA_TWO_MAC_VERIFICATION       0
        #define RTL8881A_SUPPORT        0
 #endif
 
        #define RTL8881A_SUPPORT        0
 #endif
 
index e528518746c19a84a65d78d650f7b4580833432a..8faf1c1f703ef6b3c8047bd064547ba359bcaad9 100755 (executable)
@@ -18,6 +18,7 @@
 * \r
 ******************************************************************************/\r
 \r
 * \r
 ******************************************************************************/\r
 \r
+/*Image2HeaderVersion: 2.9*/\r
 #include "Mp_Precomp.h"\r
 #include "../phydm_precomp.h"\r
 \r
 #include "Mp_Precomp.h"\r
 #include "../phydm_precomp.h"\r
 \r
@@ -36,11 +37,12 @@ CheckPositive(
                            ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  // _BT  \r
 \r
        u4Byte    cond1   = Condition1, cond2 = Condition2;\r
                            ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  // _BT  \r
 \r
        u4Byte    cond1   = Condition1, cond2 = Condition2;\r
-       u4Byte    driver1 = pDM_Odm->CutVersion       << 24 |  \r
-                               pDM_Odm->SupportPlatform  << 16 | \r
-                               pDM_Odm->PackageType      << 12 | \r
-                               pDM_Odm->SupportInterface << 8  |\r
-                               _BoardType;\r
+       u4Byte    driver1 = pDM_Odm->CutVersion       << 24 | \r
+                               (pDM_Odm->SupportInterface & 0xF0) << 16 | \r
+                               pDM_Odm->SupportPlatform  << 16 | \r
+                               pDM_Odm->PackageType      << 12 | \r
+                               (pDM_Odm->SupportInterface & 0x0F) << 8  |\r
+                               _BoardType;\r
 \r
        u4Byte    driver2 = pDM_Odm->TypeGLNA <<  0 |  \r
                                pDM_Odm->TypeGPA  <<  8 | \r
 \r
        u4Byte    driver2 = pDM_Odm->TypeGLNA <<  0 |  \r
                                pDM_Odm->TypeGPA  <<  8 | \r
@@ -58,44 +60,41 @@ CheckPositive(
                 ("     (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));\r
 \r
 \r
                 ("     (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));\r
 \r
 \r
-       //============== Value Defined Check ===============//\r
-       //QFN Type [15:12] and Cut Version [27:24] need to do value check\r
+       /*============== Value Defined Check ===============*/\r
+       /*QFN Type [15:12] and Cut Version [27:24] need to do value check*/\r
        \r
        \r
-       if(((cond1 & 0x0000F000) != 0) &&((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))\r
+       if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))\r
                return FALSE;\r
                return FALSE;\r
-       if(((cond1 & 0x0F000000) != 0) &&((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))\r
-               return FALSE;           \r
-\r
-       //=============== Bit Defined Check ================//\r
-    // We don't care [31:28] and [23:20]\r
-    //\r
-       cond1   &= 0x000F0FFF; \r
-       driver1 &= 0x000F0FFF; \r
-\r
-    if ((cond1 & driver1) == cond1) \r
-    {\r
-        u4Byte bitMask = 0;\r
-        if ((cond1 & 0x0F) == 0) // BoardType is DONTCARE\r
+       if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))\r
+               return FALSE;\r
+\r
+       /*=============== Bit Defined Check ================*/\r
+       /* We don't care [31:28] */\r
+\r
+       cond1   &= 0x00FF0FFF; \r
+       driver1 &= 0x00FF0FFF; \r
+\r
+       if ((cond1 & driver1) == cond1) {\r
+               u4Byte bitMask = 0;\r
+\r
+               if ((cond1 & 0x0F) == 0) /* BoardType is DONTCARE*/\r
             return TRUE;\r
 \r
             return TRUE;\r
 \r
-        if ((cond1 & BIT0) != 0) //GLNA\r
+               if ((cond1 & BIT0) != 0) /*GLNA*/\r
             bitMask |= 0x000000FF;\r
             bitMask |= 0x000000FF;\r
-        if ((cond1 & BIT1) != 0) //GPA\r
+               if ((cond1 & BIT1) != 0) /*GPA*/\r
             bitMask |= 0x0000FF00;\r
             bitMask |= 0x0000FF00;\r
-        if ((cond1 & BIT2) != 0) //ALNA\r
+               if ((cond1 & BIT2) != 0) /*ALNA*/\r
             bitMask |= 0x00FF0000;\r
             bitMask |= 0x00FF0000;\r
-        if ((cond1 & BIT3) != 0) //APA\r
+               if ((cond1 & BIT3) != 0) /*APA*/\r
             bitMask |= 0xFF000000;\r
 \r
             bitMask |= 0xFF000000;\r
 \r
-        if ((cond2 & bitMask) == (driver2 & bitMask)) // BoardType of each RF path is matched\r
+               if ((cond2 & bitMask) == (driver2 & bitMask)) /* BoardType of each RF path is matched*/\r
             return TRUE;\r
             return TRUE;\r
-        else\r
+               else\r
             return FALSE;\r
             return FALSE;\r
-    }\r
-    else \r
-    {\r
+               } else\r
         return FALSE;\r
         return FALSE;\r
-    }\r
 }\r
 static BOOLEAN\r
 CheckNegative(\r
 }\r
 static BOOLEAN\r
 CheckNegative(\r
@@ -254,58 +253,42 @@ ODM_ReadAndConfig_MP_8723B_AGC_TAB(
     u4Byte     i         = 0;\r
     u1Byte     cCond;\r
     BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
     u4Byte     i         = 0;\r
     u1Byte     cCond;\r
     BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
-//ask by Luke.Lee\r
     u4Byte     ArrayLen    = sizeof(Array_MP_8723B_AGC_TAB)/sizeof(u4Byte);\r
     pu4Byte    Array       = Array_MP_8723B_AGC_TAB;\r
        \r
     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_AGC_TAB\n"));\r
 \r
     u4Byte     ArrayLen    = sizeof(Array_MP_8723B_AGC_TAB)/sizeof(u4Byte);\r
     pu4Byte    Array       = Array_MP_8723B_AGC_TAB;\r
        \r
     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_AGC_TAB\n"));\r
 \r
-       while(( i+1) < ArrayLen)\r
-       {\r
+       while ((i + 1) < ArrayLen) {\r
                u4Byte v1 = Array[i];\r
                u4Byte v2 = Array[i+1];\r
 \r
                u4Byte v1 = Array[i];\r
                u4Byte v2 = Array[i+1];\r
 \r
-               if(v1 & (BIT31|BIT30)) //positive & negative condition\r
-               {\r
-                       if(v1 & BIT31) // positive condition\r
-                       {\r
+               if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/\r
+                       if (v1 & BIT31) {/* positive condition*/\r
                                cCond  = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
                                cCond  = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
-                               if(cCond == COND_ENDIF) //end\r
-                               {\r
+                               if (cCond == COND_ENDIF) {/*end*/\r
                                        bMatched = TRUE;\r
                                        bSkipped = FALSE;\r
                                        bMatched = TRUE;\r
                                        bSkipped = FALSE;\r
-                               }\r
-                               else if(cCond == COND_ELSE) //else\r
-                               {\r
+                               } else if (cCond == COND_ELSE) /*else*/\r
                                        bMatched = bSkipped?FALSE:TRUE;\r
                                        bMatched = bSkipped?FALSE:TRUE;\r
-                               }\r
-                               else //if , else if\r
-                               {\r
-                                       if(bSkipped)\r
+                               else {/*if , else if*/\r
+                                       if (bSkipped)\r
                                                bMatched = FALSE;\r
                                                bMatched = FALSE;\r
-                                       else\r
-                                       {\r
-                                               if(CheckPositive(pDM_Odm, v1, v2))\r
-                                               {\r
+                                       else {\r
+                                               if (CheckPositive(pDM_Odm, v1, v2)) {\r
                                                        bMatched = TRUE;\r
                                                        bSkipped = TRUE;\r
                                                        bMatched = TRUE;\r
                                                        bSkipped = TRUE;\r
-                                               }\r
-                                               else\r
-                                               {\r
+                                               } else {\r
                                                        bMatched = FALSE;\r
                                                        bSkipped = FALSE;\r
                                                }\r
                                        }\r
                                }\r
                                                        bMatched = FALSE;\r
                                                        bSkipped = FALSE;\r
                                                }\r
                                        }\r
                                }\r
+                       } else if (v1 & BIT30) { /*negative condition*/\r
+                       /*do nothing*/\r
                        }\r
                        }\r
-                       else if(v1 & BIT30){ //negative condition\r
-                       //do nothing\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if(bMatched)\r
-                       odm_ConfigBB_AGC_8723B(pDM_Odm, v1, bMaskDWord, v2);\r
+               } else {\r
+                       if (bMatched)\r
+                               odm_ConfigBB_AGC_8723B(pDM_Odm, v1, bMaskDWord, v2);\r
                }\r
        i = i + 2;\r
        }\r
                }\r
        i = i + 2;\r
        }\r
@@ -314,7 +297,7 @@ ODM_ReadAndConfig_MP_8723B_AGC_TAB(
 u4Byte\r
 ODM_GetVersion_MP_8723B_AGC_TAB(void)\r
 {\r
 u4Byte\r
 ODM_GetVersion_MP_8723B_AGC_TAB(void)\r
 {\r
-          return 12;\r
+          return 18;\r
 }\r
 \r
 /******************************************************************************\r
 }\r
 \r
 /******************************************************************************\r
@@ -408,7 +391,7 @@ u4Byte Array_MP_8723B_PHY_REG[] = {
                0xC4C, 0x007F037F,\r
                0xC50, 0x69553420,\r
                0xC54, 0x43BC0094,\r
                0xC4C, 0x007F037F,\r
                0xC50, 0x69553420,\r
                0xC54, 0x43BC0094,\r
-               0xC58, 0x00013149,\r
+               0xC58, 0x00013147,\r
                0xC5C, 0x00250492,\r
                0xC60, 0x00000000,\r
                0xC64, 0x7112848B,\r
                0xC5C, 0x00250492,\r
                0xC60, 0x00000000,\r
                0xC64, 0x7112848B,\r
@@ -419,7 +402,7 @@ u4Byte Array_MP_8723B_PHY_REG[] = {
                0xC78, 0x0000001F,\r
                0xC7C, 0x00B91612,\r
                0xC80, 0x390000E4,\r
                0xC78, 0x0000001F,\r
                0xC7C, 0x00B91612,\r
                0xC80, 0x390000E4,\r
-               0xC84, 0x20F60000,\r
+               0xC84, 0x21F60000,\r
                0xC88, 0x40000100,\r
                0xC8C, 0x20200000,\r
                0xC90, 0x00020E1A,\r
                0xC88, 0x40000100,\r
                0xC8C, 0x20200000,\r
                0xC90, 0x00020E1A,\r
@@ -526,58 +509,42 @@ ODM_ReadAndConfig_MP_8723B_PHY_REG(
     u4Byte     i         = 0;\r
     u1Byte     cCond;\r
     BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
     u4Byte     i         = 0;\r
     u1Byte     cCond;\r
     BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
-//ask by Luke.Lee\r
     u4Byte     ArrayLen    = sizeof(Array_MP_8723B_PHY_REG)/sizeof(u4Byte);\r
     pu4Byte    Array       = Array_MP_8723B_PHY_REG;\r
        \r
     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_PHY_REG\n"));\r
 \r
     u4Byte     ArrayLen    = sizeof(Array_MP_8723B_PHY_REG)/sizeof(u4Byte);\r
     pu4Byte    Array       = Array_MP_8723B_PHY_REG;\r
        \r
     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_PHY_REG\n"));\r
 \r
-       while(( i+1) < ArrayLen)\r
-       {\r
+       while ((i + 1) < ArrayLen) {\r
                u4Byte v1 = Array[i];\r
                u4Byte v2 = Array[i+1];\r
 \r
                u4Byte v1 = Array[i];\r
                u4Byte v2 = Array[i+1];\r
 \r
-               if(v1 & (BIT31|BIT30)) //positive & negative condition\r
-               {\r
-                       if(v1 & BIT31) // positive condition\r
-                       {\r
+               if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/\r
+                       if (v1 & BIT31) {/* positive condition*/\r
                                cCond  = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
                                cCond  = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
-                               if(cCond == COND_ENDIF) //end\r
-                               {\r
+                               if (cCond == COND_ENDIF) {/*end*/\r
                                        bMatched = TRUE;\r
                                        bSkipped = FALSE;\r
                                        bMatched = TRUE;\r
                                        bSkipped = FALSE;\r
-                               }\r
-                               else if(cCond == COND_ELSE) //else\r
-                               {\r
+                               } else if (cCond == COND_ELSE) /*else*/\r
                                        bMatched = bSkipped?FALSE:TRUE;\r
                                        bMatched = bSkipped?FALSE:TRUE;\r
-                               }\r
-                               else //if , else if\r
-                               {\r
-                                       if(bSkipped)\r
+                               else {/*if , else if*/\r
+                                       if (bSkipped)\r
                                                bMatched = FALSE;\r
                                                bMatched = FALSE;\r
-                                       else\r
-                                       {\r
-                                               if(CheckPositive(pDM_Odm, v1, v2))\r
-                                               {\r
+                                       else {\r
+                                               if (CheckPositive(pDM_Odm, v1, v2)) {\r
                                                        bMatched = TRUE;\r
                                                        bSkipped = TRUE;\r
                                                        bMatched = TRUE;\r
                                                        bSkipped = TRUE;\r
-                                               }\r
-                                               else\r
-                                               {\r
+                                               } else {\r
                                                        bMatched = FALSE;\r
                                                        bSkipped = FALSE;\r
                                                }\r
                                        }\r
                                }\r
                                                        bMatched = FALSE;\r
                                                        bSkipped = FALSE;\r
                                                }\r
                                        }\r
                                }\r
+                       } else if (v1 & BIT30) { /*negative condition*/\r
+                       /*do nothing*/\r
                        }\r
                        }\r
-                       else if(v1 & BIT30){ //negative condition\r
-                       //do nothing\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if(bMatched)\r
-                       odm_ConfigBB_PHY_8723B(pDM_Odm, v1, bMaskDWord, v2);\r
+               } else {\r
+                       if (bMatched)\r
+                               odm_ConfigBB_PHY_8723B(pDM_Odm, v1, bMaskDWord, v2);\r
                }\r
        i = i + 2;\r
        }\r
                }\r
        i = i + 2;\r
        }\r
@@ -586,7 +553,7 @@ ODM_ReadAndConfig_MP_8723B_PHY_REG(
 u4Byte\r
 ODM_GetVersion_MP_8723B_PHY_REG(void)\r
 {\r
 u4Byte\r
 ODM_GetVersion_MP_8723B_PHY_REG(void)\r
 {\r
-          return 12;\r
+          return 18;\r
 }\r
 \r
 /******************************************************************************\r
 }\r
 \r
 /******************************************************************************\r
@@ -616,14 +583,13 @@ ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(
        pDM_Odm->PhyRegPgVersion = 1;\r
        pDM_Odm->PhyRegPgValueType = PHY_REG_PG_EXACT_VALUE;\r
 \r
        pDM_Odm->PhyRegPgVersion = 1;\r
        pDM_Odm->PhyRegPgValueType = PHY_REG_PG_EXACT_VALUE;\r
 \r
-       for (i = 0; i < ArrayLen; i += 6 )\r
-       {\r
-           u4Byte v1 = Array[i];\r
-           u4Byte v2 = Array[i+1];\r
-           u4Byte v3 = Array[i+2];\r
-           u4Byte v4 = Array[i+3];\r
-           u4Byte v5 = Array[i+4];\r
-           u4Byte v6 = Array[i+5];\r
+       for (i = 0; i < ArrayLen; i += 6) {\r
+               u4Byte v1 = Array[i];\r
+               u4Byte v2 = Array[i+1];\r
+               u4Byte v3 = Array[i+2];\r
+               u4Byte v4 = Array[i+3];\r
+               u4Byte v5 = Array[i+4];\r
+               u4Byte v6 = Array[i+5];\r
 \r
            odm_ConfigBB_PHY_REG_PG_8723B(pDM_Odm, v1, v2, v3, v4, v5, v6);\r
        }\r
 \r
            odm_ConfigBB_PHY_REG_PG_8723B(pDM_Odm, v1, v2, v3, v4, v5, v6);\r
        }\r
@@ -631,5 +597,5 @@ ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(
 \r
 \r
 \r
 \r
 \r
 \r
-#endif // end of HWIMG_SUPPORT\r
+#endif /* end of HWIMG_SUPPORT*/\r
 \r
 \r
index f5b9036249c4a6689288feb52d5a32cf83763875..167e60d6ff27773125f99e1dfbe406c51c68a413 100755 (executable)
@@ -18,6 +18,7 @@
 * \r
 ******************************************************************************/\r
 \r
 * \r
 ******************************************************************************/\r
 \r
+/*Image2HeaderVersion: 2.9*/\r
 #if (RTL8723B_SUPPORT == 1)\r
 #ifndef __INC_MP_BB_HW_IMG_8723B_H\r
 #define __INC_MP_BB_HW_IMG_8723B_H\r
 #if (RTL8723B_SUPPORT == 1)\r
 #ifndef __INC_MP_BB_HW_IMG_8723B_H\r
 #define __INC_MP_BB_HW_IMG_8723B_H\r
@@ -28,7 +29,7 @@
 ******************************************************************************/\r
 \r
 void\r
 ******************************************************************************/\r
 \r
 void\r
-ODM_ReadAndConfig_MP_8723B_AGC_TAB( // TC: Test Chip, MP: MP Chip\r
+ODM_ReadAndConfig_MP_8723B_AGC_TAB(/* TC: Test Chip, MP: MP Chip*/\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_AGC_TAB(void);\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_AGC_TAB(void);\r
@@ -38,7 +39,7 @@ u4Byte ODM_GetVersion_MP_8723B_AGC_TAB(void);
 ******************************************************************************/\r
 \r
 void\r
 ******************************************************************************/\r
 \r
 void\r
-ODM_ReadAndConfig_MP_8723B_PHY_REG( // TC: Test Chip, MP: MP Chip\r
+ODM_ReadAndConfig_MP_8723B_PHY_REG(/* TC: Test Chip, MP: MP Chip*/\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_PHY_REG(void);\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_PHY_REG(void);\r
@@ -48,11 +49,11 @@ u4Byte ODM_GetVersion_MP_8723B_PHY_REG(void);
 ******************************************************************************/\r
 \r
 void\r
 ******************************************************************************/\r
 \r
 void\r
-ODM_ReadAndConfig_MP_8723B_PHY_REG_PG( // TC: Test Chip, MP: MP Chip\r
+ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(/* TC: Test Chip, MP: MP Chip*/\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_PHY_REG_PG(void);\r
 \r
 #endif\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_PHY_REG_PG(void);\r
 \r
 #endif\r
-#endif // end of HWIMG_SUPPORT\r
+#endif /* end of HWIMG_SUPPORT*/\r
 \r
 \r
index d362242109a4b9cdac7b3a8cdbdf60417f8058fa..76d7958bb7784c4ad6fbce66ad9b161646f70d06 100755 (executable)
 #if (RTL8723B_SUPPORT == 1)\r
 #ifdef CONFIG_AP_WOWLAN\r
 u1Byte Array_MP_8723B_FW_AP_WoWLAN[] = {\r
 #if (RTL8723B_SUPPORT == 1)\r
 #ifdef CONFIG_AP_WOWLAN\r
 u1Byte Array_MP_8723B_FW_AP_WoWLAN[] = {\r
-0x01, 0x53, 0x20, 0x00, 0x12, 0x00, 0x02, 0x00, 0x12, 0x02, 0x11, 0x28, 0x4A, 0x3C, 0x00, 0x00, \r
-0x9E, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x02, 0x45, 0x8D, 0x02, 0x53, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x53, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x58, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x01, 0x53, 0x20, 0x00, 0x23, 0x00, 0x00, 0x00, 0x03, 0x26, 0x14, 0x35, 0x76, 0x51, 0x00, 0x00, \r
+0xE5, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x02, 0x45, 0xDB, 0x02, 0x6F, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x02, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x02, 0x70, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x53, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0xE1, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x58, 0x6A, 0x15, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x15, 0xF0, 0x0F, \r
-0x00, 0x00, 0x00, 0x00, 0x05, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x05, 0xF0, 0x0F, 0x00, 0x00, \r
-0x00, 0x00, 0x10, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x10, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, \r
-0xF5, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, \r
-0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x03, 0x03, 0x00, 0x04, 0x09, 0x07, 0x03, 0x03, 0x00, \r
-0x04, 0x08, 0x06, 0x03, 0x02, 0x00, 0x04, 0x08, 0x05, 0x03, 0x01, 0x00, 0x04, 0x0D, 0x0A, 0x07, \r
-0x05, 0x00, 0x08, 0x0C, 0x0A, 0x07, 0x04, 0x00, 0x08, 0x0B, 0x0A, 0x06, 0x05, 0x00, 0x08, 0x0B, \r
-0x0A, 0x05, 0x03, 0x00, 0x08, 0x0B, 0x0A, 0x03, 0x02, 0x00, 0x08, 0x14, 0x12, 0x0C, 0x04, 0x00, \r
-0x10, 0x14, 0x12, 0x09, 0x04, 0x00, 0x10, 0x24, 0x22, 0x1C, 0x12, 0x00, 0x20, 0x24, 0x22, 0x18, \r
-0x0C, 0x00, 0x20, 0x24, 0x22, 0x14, 0x06, 0x00, 0x20, 0x24, 0x22, 0x0F, 0x04, 0x00, 0x20, 0x24, \r
-0x21, 0x0A, 0x04, 0x00, 0x20, 0x23, 0x21, 0x0C, 0x04, 0x00, 0x20, 0x23, 0x1F, 0x0A, 0x04, 0x00, \r
-0x20, 0x22, 0x1F, 0x0F, 0x04, 0x00, 0x20, 0x21, 0x1F, 0x16, 0x0C, 0x00, 0x20, 0x31, 0x2F, 0x20, \r
-0x14, 0x00, 0x30, 0x31, 0x2F, 0x18, 0x10, 0x00, 0x30, 0x31, 0x2C, 0x18, 0x0C, 0x00, 0x30, 0x31, \r
-0x2A, 0x14, 0x0C, 0x00, 0x30, 0x31, 0x28, 0x14, 0x00, 0x00, 0x30, 0x31, 0x24, 0x14, 0x00, 0x00, \r
-0x30, 0x31, 0x1E, 0x14, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, \r
-0x07, 0x08, 0x0A, 0x04, 0x07, 0x0A, 0x0E, 0x11, 0x13, 0x14, 0x15, 0x04, 0x04, 0x04, 0x05, 0x07, \r
-0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x05, 0x06, 0x07, 0x0D, 0x10, 0x11, 0x12, 0x12, 0x00, \r
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x21, \r
-0x25, 0x27, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, \r
-0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x30, 0x00, \r
-0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0xC0, 0x00, \r
-0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x78, 0x00, \r
-0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x90, 0x00, \r
-0x00, 0x01, 0xE0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, \r
-0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x14, 0x00, 0x32, 0x00, \r
-0x3C, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x02, 0x04, 0x06, 0x08, 0x0A, \r
-0x0C, 0x10, 0x18, 0x20, 0x30, 0x40, 0x50, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x03, 0x03, 0x04, \r
-0x04, 0x05, 0x05, 0x02, 0x04, 0x06, 0x07, 0x07, 0x08, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, \r
-0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x19, \r
-0x06, 0x04, 0x02, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0xC2, 0xAF, 0x80, 0xFE, 0x32, 0x12, 0x42, 0x34, 0x85, 0xD0, 0x0B, 0x75, 0xD0, 0x08, 0xAA, 0xE0, \r
+0x00, 0x00, 0x00, 0x02, 0x70, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x77, 0xE6, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x02, 0x7F, 0xE5, 0x00, 0x04, 0x0C, 0x04, 0x08, 0x08, 0x0A, 0x08, 0x03, 0x03, \r
+0x00, 0x04, 0x09, 0x07, 0x03, 0x03, 0x00, 0x04, 0x08, 0x06, 0x03, 0x02, 0x00, 0x04, 0x08, 0x05, \r
+0x03, 0x01, 0x00, 0x04, 0x0D, 0x0A, 0x07, 0x05, 0x00, 0x08, 0x0C, 0x0A, 0x07, 0x04, 0x00, 0x08, \r
+0x0B, 0x0A, 0x06, 0x05, 0x00, 0x08, 0x0B, 0x0A, 0x05, 0x03, 0x00, 0x08, 0x0B, 0x0A, 0x03, 0x02, \r
+0x00, 0x08, 0x14, 0x12, 0x0C, 0x04, 0x00, 0x10, 0x14, 0x12, 0x09, 0x04, 0x00, 0x10, 0x24, 0x22, \r
+0x1C, 0x12, 0x00, 0x20, 0x24, 0x22, 0x18, 0x0C, 0x00, 0x20, 0x24, 0x22, 0x14, 0x06, 0x00, 0x20, \r
+0x24, 0x22, 0x0F, 0x04, 0x00, 0x20, 0x24, 0x21, 0x0A, 0x04, 0x00, 0x20, 0x23, 0x21, 0x0C, 0x04, \r
+0x00, 0x20, 0x23, 0x1F, 0x0A, 0x04, 0x00, 0x20, 0x22, 0x1F, 0x0F, 0x04, 0x00, 0x20, 0x21, 0x1F, \r
+0x16, 0x0C, 0x00, 0x20, 0x31, 0x2F, 0x20, 0x14, 0x00, 0x30, 0x31, 0x2F, 0x18, 0x10, 0x00, 0x30, \r
+0x31, 0x2C, 0x18, 0x0C, 0x00, 0x30, 0x31, 0x2A, 0x14, 0x0C, 0x00, 0x30, 0x31, 0x28, 0x14, 0x00, \r
+0x00, 0x30, 0x31, 0x24, 0x14, 0x00, 0x00, 0x30, 0x31, 0x1E, 0x14, 0x00, 0x00, 0x30, 0x15, 0xF0, \r
+0xFF, 0x0F, 0x00, 0x00, 0x00, 0x15, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x05, 0xF0, 0xFF, 0x0F, \r
+0x00, 0x00, 0x00, 0x05, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x10, 0xF0, 0xFF, 0x0F, 0x00, 0x00, \r
+0x00, 0x10, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, \r
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x21, 0x25, 0x27, \r
+0x28, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, \r
+0x48, 0x00, 0x60, 0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x3C, 0x00, 0x64, 0x00, 0x78, 0x00, \r
+0xA0, 0x00, 0xF0, 0x01, 0x40, 0x01, 0x90, 0x01, 0xE0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, \r
+0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, \r
+0x6C, 0x00, 0x14, 0x00, 0x32, 0x00, 0x3C, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x00, \r
+0xF0, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x10, 0x18, 0x20, 0x30, 0x40, 0x50, 0x01, 0x01, 0x01, \r
+0x02, 0x01, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x02, 0x04, 0x06, 0x07, 0x07, 0x08, 0x08, \r
+0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, \r
+0x04, 0x05, 0x06, 0x07, 0x08, 0x19, 0x06, 0x04, 0x02, 0x00, 0x18, 0x00, 0x04, 0x0C, 0x04, 0x08, \r
+0x08, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x07, 0x0A, \r
+0x0E, 0x11, 0x13, 0x14, 0x15, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, \r
+0x12, 0x05, 0x06, 0x07, 0x0D, 0x10, 0x11, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0xC2, 0xAF, 0x80, 0xFE, 0x32, 0x12, 0x42, 0x94, 0x85, 0xD0, 0x0B, 0x75, 0xD0, 0x08, 0xAA, 0xE0, \r
 0xC2, 0x8C, 0xE5, 0x8A, 0x24, 0x67, 0xF5, 0x8A, 0xE5, 0x8C, 0x34, 0x79, 0xF5, 0x8C, 0xD2, 0x8C, \r
 0xEC, 0x24, 0x87, 0xF8, 0xE6, 0xBC, 0x02, 0x02, 0x74, 0xFF, 0xC3, 0x95, 0x81, 0xB4, 0x40, 0x00, \r
 0x40, 0xCE, 0x79, 0x03, 0x78, 0x80, 0x16, 0xE6, 0x08, 0x70, 0x0B, 0xC2, 0xAF, 0xE6, 0x30, 0xE1, \r
 0xC2, 0x8C, 0xE5, 0x8A, 0x24, 0x67, 0xF5, 0x8A, 0xE5, 0x8C, 0x34, 0x79, 0xF5, 0x8C, 0xD2, 0x8C, \r
 0xEC, 0x24, 0x87, 0xF8, 0xE6, 0xBC, 0x02, 0x02, 0x74, 0xFF, 0xC3, 0x95, 0x81, 0xB4, 0x40, 0x00, \r
 0x40, 0xCE, 0x79, 0x03, 0x78, 0x80, 0x16, 0xE6, 0x08, 0x70, 0x0B, 0xC2, 0xAF, 0xE6, 0x30, 0xE1, \r
@@ -76,7 +82,7 @@ u1Byte Array_MP_8723B_FW_AP_WoWLAN[] = {
 0xE6, 0x30, 0xE0, 0x03, 0x10, 0xE2, 0x0C, 0x7F, 0x00, 0x30, 0xE1, 0x07, 0x30, 0xE3, 0x04, 0x7F, \r
 0x08, 0x54, 0xF4, 0x54, 0x7C, 0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x42, 0x07, 0x22, 0x78, 0x86, 0xA6, \r
 0x81, 0x74, 0x02, 0x60, 0x06, 0xFF, 0x08, 0x76, 0xFF, 0xDF, 0xFB, 0x7F, 0x03, 0xE4, 0x78, 0x80, \r
 0xE6, 0x30, 0xE0, 0x03, 0x10, 0xE2, 0x0C, 0x7F, 0x00, 0x30, 0xE1, 0x07, 0x30, 0xE3, 0x04, 0x7F, \r
 0x08, 0x54, 0xF4, 0x54, 0x7C, 0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x42, 0x07, 0x22, 0x78, 0x86, 0xA6, \r
 0x81, 0x74, 0x02, 0x60, 0x06, 0xFF, 0x08, 0x76, 0xFF, 0xDF, 0xFB, 0x7F, 0x03, 0xE4, 0x78, 0x80, \r
-0xF6, 0x08, 0xF6, 0x08, 0xDF, 0xFA, 0x78, 0x81, 0x76, 0x30, 0x90, 0x46, 0x2B, 0x74, 0x01, 0x93, \r
+0xF6, 0x08, 0xF6, 0x08, 0xDF, 0xFA, 0x78, 0x81, 0x76, 0x30, 0x90, 0x46, 0x7D, 0x74, 0x01, 0x93, \r
 0xC0, 0xE0, 0xE4, 0x93, 0xC0, 0xE0, 0x43, 0x89, 0x01, 0x75, 0x8A, 0x60, 0x75, 0x8C, 0x79, 0xD2, \r
 0x8C, 0xD2, 0xAF, 0x22, 0x02, 0xEF, 0xD3, 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0x74, 0x81, \r
 0x2F, 0x2F, 0xF8, 0xE6, 0x20, 0xE5, 0xF4, 0xC2, 0xAF, 0xE6, 0x44, 0x30, 0xF6, 0xD2, 0xAF, 0xAE, \r
 0xC0, 0xE0, 0xE4, 0x93, 0xC0, 0xE0, 0x43, 0x89, 0x01, 0x75, 0x8A, 0x60, 0x75, 0x8C, 0x79, 0xD2, \r
 0x8C, 0xD2, 0xAF, 0x22, 0x02, 0xEF, 0xD3, 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0x74, 0x81, \r
 0x2F, 0x2F, 0xF8, 0xE6, 0x20, 0xE5, 0xF4, 0xC2, 0xAF, 0xE6, 0x44, 0x30, 0xF6, 0xD2, 0xAF, 0xAE, \r
@@ -86,10 +92,10 @@ u1Byte Array_MP_8723B_FW_AP_WoWLAN[] = {
 0xEE, 0xD3, 0x9F, 0x40, 0x22, 0x74, 0x86, 0x2E, 0xF8, 0x08, 0xE6, 0xF9, 0xEE, 0xB5, 0x0C, 0x02, \r
 0xA9, 0x81, 0x18, 0x06, 0x06, 0xE6, 0xFD, 0xED, 0x69, 0x60, 0x09, 0x19, 0x19, 0xE7, 0x09, 0x09, \r
 0xF7, 0x19, 0x80, 0xF3, 0x1E, 0x80, 0xD9, 0xEF, 0x24, 0x86, 0xF8, 0xE6, 0x04, 0xF8, 0xEF, 0x2F, \r
 0xEE, 0xD3, 0x9F, 0x40, 0x22, 0x74, 0x86, 0x2E, 0xF8, 0x08, 0xE6, 0xF9, 0xEE, 0xB5, 0x0C, 0x02, \r
 0xA9, 0x81, 0x18, 0x06, 0x06, 0xE6, 0xFD, 0xED, 0x69, 0x60, 0x09, 0x19, 0x19, 0xE7, 0x09, 0x09, \r
 0xF7, 0x19, 0x80, 0xF3, 0x1E, 0x80, 0xD9, 0xEF, 0x24, 0x86, 0xF8, 0xE6, 0x04, 0xF8, 0xEF, 0x2F, \r
-0x04, 0x90, 0x46, 0x2B, 0x93, 0xF6, 0x08, 0xEF, 0x2F, 0x93, 0xF6, 0x7F, 0x00, 0x22, 0xEF, 0xD3, \r
+0x04, 0x90, 0x46, 0x7D, 0x93, 0xF6, 0x08, 0xEF, 0x2F, 0x93, 0xF6, 0x7F, 0x00, 0x22, 0xEF, 0xD3, \r
 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0xEF, 0x23, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE5, 0xF4, \r
 0xC2, 0xAF, 0xE6, 0x54, 0x8C, 0xF6, 0xD2, 0xAF, 0xE5, 0x0C, 0xB5, 0x07, 0x0A, 0x74, 0x86, 0x2F, \r
 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0xEF, 0x23, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE5, 0xF4, \r
 0xC2, 0xAF, 0xE6, 0x54, 0x8C, 0xF6, 0xD2, 0xAF, 0xE5, 0x0C, 0xB5, 0x07, 0x0A, 0x74, 0x86, 0x2F, \r
-0xF8, 0xE6, 0xF5, 0x81, 0x02, 0x42, 0x7D, 0x50, 0x2E, 0x74, 0x87, 0x2F, 0xF8, 0xE6, 0xBF, 0x02, \r
+0xF8, 0xE6, 0xF5, 0x81, 0x02, 0x42, 0xDD, 0x50, 0x2E, 0x74, 0x87, 0x2F, 0xF8, 0xE6, 0xBF, 0x02, \r
 0x02, 0x74, 0xFF, 0xFD, 0x18, 0xE6, 0xF9, 0x74, 0x86, 0x2F, 0xF8, 0xFB, 0xE6, 0xFC, 0xE9, 0x6C, \r
 0x60, 0x08, 0xA8, 0x05, 0xE7, 0xF6, 0x1D, 0x19, 0x80, 0xF4, 0xA8, 0x03, 0xA6, 0x05, 0x1F, 0xE5, \r
 0x0C, 0xB5, 0x07, 0xE3, 0x7F, 0x00, 0x22, 0x74, 0x87, 0x2F, 0xF8, 0xE6, 0xFD, 0x18, 0x86, 0x01, \r
 0x02, 0x74, 0xFF, 0xFD, 0x18, 0xE6, 0xF9, 0x74, 0x86, 0x2F, 0xF8, 0xFB, 0xE6, 0xFC, 0xE9, 0x6C, \r
 0x60, 0x08, 0xA8, 0x05, 0xE7, 0xF6, 0x1D, 0x19, 0x80, 0xF4, 0xA8, 0x03, 0xA6, 0x05, 0x1F, 0xE5, \r
 0x0C, 0xB5, 0x07, 0xE3, 0x7F, 0x00, 0x22, 0x74, 0x87, 0x2F, 0xF8, 0xE6, 0xFD, 0x18, 0x86, 0x01, \r
@@ -97,902 +103,1235 @@ u1Byte Array_MP_8723B_FW_AP_WoWLAN[] = {
 0x81, 0xED, 0x6C, 0x60, 0x08, 0x0D, 0x09, 0xA8, 0x05, 0xE6, 0xF7, 0x80, 0xF4, 0xE5, 0x0C, 0xB5, \r
 0x07, 0xDE, 0x89, 0x81, 0x7F, 0x00, 0x22, 0xEF, 0xD3, 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, \r
 0xEF, 0x23, 0x24, 0x81, 0xF8, 0xC2, 0xAF, 0xE6, 0x30, 0xE5, 0x05, 0x30, 0xE0, 0x02, 0xD2, 0xE4, \r
 0x81, 0xED, 0x6C, 0x60, 0x08, 0x0D, 0x09, 0xA8, 0x05, 0xE6, 0xF7, 0x80, 0xF4, 0xE5, 0x0C, 0xB5, \r
 0x07, 0xDE, 0x89, 0x81, 0x7F, 0x00, 0x22, 0xEF, 0xD3, 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, \r
 0xEF, 0x23, 0x24, 0x81, 0xF8, 0xC2, 0xAF, 0xE6, 0x30, 0xE5, 0x05, 0x30, 0xE0, 0x02, 0xD2, 0xE4, \r
-0xD2, 0xE2, 0xC6, 0xD2, 0xAF, 0x7F, 0x00, 0x30, 0xE2, 0x01, 0x0F, 0x02, 0x42, 0x7C, 0x8F, 0xF0, \r
+0xD2, 0xE2, 0xC6, 0xD2, 0xAF, 0x7F, 0x00, 0x30, 0xE2, 0x01, 0x0F, 0x02, 0x42, 0xDC, 0x8F, 0xF0, \r
 0xE4, 0xFF, 0xFE, 0xE5, 0x0C, 0x23, 0x24, 0x80, 0xF8, 0xC2, 0xA9, 0x30, 0xF7, 0x0D, 0x7F, 0x08, \r
 0xE6, 0x60, 0x0B, 0x2D, 0xF6, 0x60, 0x30, 0x50, 0x2E, 0x80, 0x07, 0x30, 0xF1, 0x06, 0xED, 0xF6, \r
 0x60, 0x25, 0x7E, 0x02, 0x08, 0x30, 0xF0, 0x10, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x23, 0x0E, 0x30, \r
 0xE2, 0x0C, 0xD2, 0xAF, 0x7F, 0x04, 0x80, 0x12, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x13, 0x54, 0xEC, \r
 0xE4, 0xFF, 0xFE, 0xE5, 0x0C, 0x23, 0x24, 0x80, 0xF8, 0xC2, 0xA9, 0x30, 0xF7, 0x0D, 0x7F, 0x08, \r
 0xE6, 0x60, 0x0B, 0x2D, 0xF6, 0x60, 0x30, 0x50, 0x2E, 0x80, 0x07, 0x30, 0xF1, 0x06, 0xED, 0xF6, \r
 0x60, 0x25, 0x7E, 0x02, 0x08, 0x30, 0xF0, 0x10, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x23, 0x0E, 0x30, \r
 0xE2, 0x0C, 0xD2, 0xAF, 0x7F, 0x04, 0x80, 0x12, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x13, 0x54, 0xEC, \r
-0x4E, 0xF6, 0xD2, 0xAF, 0x02, 0x42, 0x7D, 0x7F, 0x08, 0x08, 0xEF, 0x44, 0x83, 0xF4, 0xC2, 0xAF, \r
+0x4E, 0xF6, 0xD2, 0xAF, 0x02, 0x42, 0xDD, 0x7F, 0x08, 0x08, 0xEF, 0x44, 0x83, 0xF4, 0xC2, 0xAF, \r
 0x56, 0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x4F, 0xFF, 0x22, 0xEF, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, 0xED, \r
 0x56, 0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x4F, 0xFF, 0x22, 0xEF, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, 0xED, \r
-0x39, 0xFD, 0xEC, 0x38, 0xFC, 0x22, 0xEF, 0x5B, 0xFF, 0xEE, 0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, \r
-0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, \r
-0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8, 0x9C, 0x45, 0xF0, \r
-0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xE4, 0x93, 0xFC, \r
-0x74, 0x01, 0x93, 0xFD, 0x74, 0x02, 0x93, 0xFE, 0x74, 0x03, 0x93, 0xFF, 0x22, 0xE0, 0xF8, 0xA3, \r
-0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xE4, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF9, \r
-0x74, 0x02, 0x93, 0xFA, 0x74, 0x03, 0x93, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5, 0x82, 0xE5, 0xF0, \r
-0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x22, 0xEB, 0xF0, \r
-0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, \r
-0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, \r
-0xE4, 0x73, 0x74, 0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0x02, 0x45, 0xCB, \r
-0x02, 0x43, 0x0D, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, \r
-0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, \r
-0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, \r
-0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x46, 0x10, 0xE4, 0x7E, \r
-0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, \r
-0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, \r
-0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, \r
-0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, \r
-0x00, 0x41, 0xA2, 0xE5, 0x00, 0x41, 0xA2, 0xE6, 0x00, 0x41, 0xA2, 0xF5, 0x00, 0x44, 0xA2, 0xBD, \r
-0x41, 0x4E, 0x59, 0x00, 0x44, 0xA2, 0xB9, 0x61, 0x6E, 0x79, 0x00, 0x50, 0x3F, 0x4A, 0xC2, 0x4B, \r
-0xF5, 0xE4, 0xFD, 0x7F, 0x8D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, \r
-0x00, 0xED, 0xF0, 0x7F, 0x10, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, \r
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xEE, 0xED, 0xF0, 0x90, 0xA2, 0xED, 0xEF, 0xF0, \r
-0xD3, 0x94, 0x07, 0x50, 0x6D, 0x7F, 0x47, 0xF1, 0x4E, 0x90, 0xA2, 0xED, 0xE0, 0xFE, 0x74, 0x01, \r
-0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x47, 0xD1, 0x35, \r
-0x7F, 0x46, 0xF1, 0x4E, 0x90, 0xA2, 0xED, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, \r
-0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0xFD, 0x7F, 0x46, 0xD1, 0x35, 0x90, 0xA2, 0xEE, 0xE0, 0x60, 0x17, \r
-0x7F, 0x45, 0xF1, 0x4E, 0x90, 0xA2, 0xED, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, \r
-0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0x80, 0x16, 0x7F, 0x45, 0xF1, 0x4E, 0x90, 0xA2, 0xED, 0xE0, 0xFE, \r
-0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x45, \r
-0x80, 0x75, 0x90, 0xA2, 0xED, 0xE0, 0x24, 0xF8, 0xF0, 0x7F, 0x63, 0xF1, 0x4E, 0x90, 0xA2, 0xED, \r
-0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0xFD, \r
-0x7F, 0x63, 0xD1, 0x35, 0x7F, 0x62, 0xF1, 0x4E, 0x90, 0xA2, 0xED, 0xE0, 0xFE, 0x74, 0x01, 0xA8, \r
-0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0xFD, 0x7F, 0x62, 0xD1, 0x35, 0x90, 0xA2, \r
-0xEE, 0xE0, 0x60, 0x1A, 0x7F, 0x61, 0xF1, 0x4E, 0x90, 0xA2, 0xED, 0xE0, 0xFE, 0x74, 0x01, 0xA8, \r
-0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0xFD, 0x7F, 0x61, 0x80, 0x19, 0x7F, 0x61, \r
-0xF1, 0x4E, 0x90, 0xA2, 0xED, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, \r
-0xD8, 0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x61, 0xD1, 0x35, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, \r
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xE0, 0x90, 0xA2, 0xF1, 0xF0, 0x7F, \r
-0x10, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x90, 0xA2, 0xF1, 0xE0, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
-0x7F, 0x54, 0xF1, 0x4E, 0xE5, 0x0D, 0x5F, 0xF5, 0x11, 0x7F, 0x55, 0xF1, 0x4E, 0xE5, 0x0E, 0x5F, \r
-0xF5, 0x12, 0x7F, 0x56, 0xF1, 0x4E, 0xE5, 0x0F, 0x5F, 0xF5, 0x13, 0x7F, 0x57, 0xF1, 0x4E, 0xE5, \r
-0x10, 0x5F, 0xF5, 0x14, 0xAD, 0x11, 0x7F, 0x54, 0xD1, 0x35, 0xAD, 0x12, 0x7F, 0x55, 0xD1, 0x35, \r
-0xAD, 0x13, 0x7F, 0x56, 0xD1, 0x35, 0xAD, 0x14, 0x7F, 0x57, 0xD1, 0x35, 0x53, 0x91, 0xEF, 0x22, \r
-0xE4, 0xF5, 0x0D, 0xF5, 0x0E, 0xF5, 0x0F, 0x75, 0x10, 0x80, 0xAD, 0x0D, 0x7F, 0x50, 0xD1, 0x35, \r
-0xAD, 0x0E, 0x7F, 0x51, 0xD1, 0x35, 0xAD, 0x0F, 0x7F, 0x52, 0xD1, 0x35, 0xAD, 0x10, 0x7F, 0x53, \r
-0xC1, 0x35, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3D, 0xC2, 0x7F, 0xF2, 0xF1, 0x4E, 0xEF, 0x20, 0xE6, \r
-0x0C, 0x7F, 0x05, 0xF1, 0x4E, 0xEF, 0x44, 0x80, 0xFD, 0x7F, 0x05, 0xD1, 0x35, 0x22, 0x12, 0x5D, \r
-0x16, 0x12, 0x5D, 0x81, 0x12, 0x5D, 0xB2, 0x12, 0x5D, 0xD1, 0x80, 0xB4, 0xD3, 0x10, 0xAF, 0x01, \r
-0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xC1, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA2, 0xC5, 0xE0, 0xF5, \r
-0x3B, 0xA3, 0xE0, 0xF5, 0x3C, 0x12, 0x36, 0x3E, 0x90, 0xA2, 0xC1, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, \r
-0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0x74, 0x05, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x11, 0x80, \r
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFF, 0x90, 0xA2, 0x94, 0xF0, 0x90, 0x01, 0xC7, \r
-0xE0, 0x64, 0xAD, 0x70, 0x36, 0xF0, 0x90, 0xA2, 0xA1, 0x74, 0x0F, 0xF0, 0x90, 0xA2, 0x93, 0x74, \r
-0x0A, 0xF0, 0xA3, 0xE0, 0x04, 0xF0, 0x90, 0xA2, 0x94, 0xE0, 0x2F, 0xFE, 0x74, 0x95, 0x2F, 0xF5, \r
-0x82, 0xE4, 0x34, 0xA2, 0xF5, 0x83, 0xEE, 0xF0, 0x0F, 0xEF, 0xB4, 0x0F, 0xE9, 0x90, 0x01, 0x3F, \r
-0x74, 0x04, 0xF0, 0x7B, 0x01, 0x7A, 0xA2, 0x79, 0x93, 0x51, 0x4E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x8F, 0x12, 0x47, 0x4E, 0xEF, 0x20, 0xE6, 0x02, \r
-0x21, 0xB9, 0x90, 0x00, 0x8C, 0xE0, 0xF5, 0x26, 0x7F, 0x8D, 0x12, 0x47, 0x4E, 0x90, 0x00, 0x8E, \r
-0xE0, 0xF5, 0x27, 0xEF, 0x24, 0xFC, 0x60, 0x0C, 0x24, 0x03, 0x60, 0x02, 0x21, 0xAD, 0xAF, 0x26, \r
-0x31, 0xEC, 0x21, 0xAD, 0x74, 0x96, 0x25, 0x26, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xE0, \r
-0xFB, 0xE4, 0xFD, 0xFF, 0x31, 0xC4, 0x75, 0xF0, 0x04, 0xE5, 0x26, 0x90, 0x96, 0x19, 0x12, 0x45, \r
-0x49, 0xE0, 0x13, 0x13, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0x31, 0xC4, 0x75, 0xF0, 0x04, 0xE5, \r
-0x26, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0xFB, 0x0D, \r
-0xE4, 0xFF, 0x31, 0xC4, 0x75, 0xF0, 0x04, 0xE5, 0x26, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, \r
-0xC4, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0x31, 0xC4, 0x75, 0xF0, 0x04, 0xE5, 0x26, 0x90, 0x96, \r
-0x16, 0x12, 0x45, 0x49, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x31, 0xC4, 0x75, 0xF0, 0x04, 0xE5, 0x26, \r
-0x90, 0x96, 0x17, 0x31, 0xBE, 0x75, 0xF0, 0x04, 0xE5, 0x26, 0x90, 0x96, 0x18, 0x12, 0x45, 0x49, \r
-0xE0, 0xC4, 0x13, 0x54, 0x01, 0xFB, 0x0D, 0x7F, 0x01, 0x31, 0xC4, 0x75, 0xF0, 0x04, 0xE5, 0x26, \r
-0x90, 0x96, 0x18, 0x12, 0x45, 0x49, 0xE0, 0x54, 0x1F, 0xFB, 0x0D, 0x31, 0xC4, 0x75, 0xF0, 0x08, \r
-0xE5, 0x26, 0x90, 0x89, 0x00, 0x12, 0x45, 0x49, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x31, 0xC4, 0x75, \r
-0xF0, 0x08, 0xE5, 0x26, 0x90, 0x89, 0x01, 0x31, 0xBE, 0x75, 0xF0, 0x08, 0xE5, 0x26, 0x90, 0x89, \r
-0x02, 0x31, 0xBE, 0x75, 0xF0, 0x08, 0xE5, 0x26, 0x90, 0x89, 0x03, 0x31, 0xBE, 0x75, 0xF0, 0x08, \r
-0xE5, 0x26, 0x90, 0x89, 0x04, 0x12, 0x45, 0x49, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x31, 0xC4, 0x75, \r
-0xF0, 0x08, 0xE5, 0x26, 0x90, 0x89, 0x05, 0x31, 0xBE, 0x75, 0xF0, 0x08, 0xE5, 0x26, 0x90, 0x89, \r
-0x06, 0x31, 0xBE, 0x75, 0xF0, 0x08, 0xE5, 0x26, 0x90, 0x89, 0x07, 0x31, 0xBE, 0x7F, 0x8F, 0x12, \r
-0x47, 0x4E, 0xEF, 0x30, 0xE0, 0x03, 0x12, 0x46, 0x31, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x45, \r
-0x49, 0xE0, 0xFB, 0x0D, 0xEF, 0x70, 0x04, 0x74, 0xF0, 0x80, 0x16, 0xEF, 0xB4, 0x01, 0x04, 0x74, \r
-0xF4, 0x80, 0x0E, 0xEF, 0xB4, 0x02, 0x04, 0x74, 0xF8, 0x80, 0x06, 0xEF, 0xB4, 0x03, 0x0C, 0x74, \r
-0xFC, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x02, 0xF5, 0x83, 0xEB, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, \r
-0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xEB, 0xEF, 0xF0, 0x7F, 0x8F, 0x12, 0x47, 0x4E, 0xEF, 0x30, 0xE6, \r
-0x48, 0x7F, 0x8D, 0x12, 0x47, 0x4E, 0xEF, 0x64, 0x01, 0x70, 0x3E, 0x90, 0xA2, 0xEC, 0xF0, 0x90, \r
-0xA2, 0xEC, 0xE0, 0xFD, 0x90, 0xA2, 0xEB, 0xE0, 0x75, 0xF0, 0x10, 0x90, 0x81, 0x00, 0x12, 0x45, \r
-0x49, 0xE5, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, 0xFF, 0x31, \r
-0xC4, 0x90, 0xA2, 0xEC, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x10, 0x40, 0xD2, 0x7F, 0x8F, 0x12, \r
-0x47, 0x4E, 0xEF, 0x30, 0xE0, 0x03, 0x12, 0x46, 0x31, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, \r
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xD4, 0x12, 0x45, 0x5E, 0x7F, 0x96, 0x7E, 0x02, 0x71, \r
-0x44, 0xEF, 0x60, 0x59, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, \r
-0x00, 0xFF, 0xEC, 0x3E, 0xFE, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0xA2, 0xD7, 0xEF, \r
-0xF0, 0xEE, 0xFF, 0x90, 0xFD, 0x11, 0xF0, 0x90, 0xA2, 0xD7, 0xE0, 0xFD, 0x90, 0x02, 0x94, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0x90, 0xA2, 0xD4, 0x12, 0x45, 0x55, 0x90, 0x00, 0x0E, 0x12, 0x06, 0xA2, 0x24, \r
-0x02, 0xFF, 0xE4, 0x33, 0xFE, 0x71, 0x9A, 0x90, 0xA2, 0xD7, 0xE0, 0x24, 0x18, 0xFF, 0x90, 0xA2, \r
-0xD4, 0x12, 0x45, 0x55, 0x12, 0x5C, 0x74, 0x90, 0x02, 0x96, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, \r
-0xAF, 0x22, 0xE4, 0x90, 0xA1, 0x36, 0xF0, 0x90, 0xA1, 0x36, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xC2, \r
-0x90, 0x01, 0xC4, 0xF0, 0x74, 0x4A, 0xA3, 0xF0, 0x12, 0x3E, 0x44, 0xBF, 0x01, 0x03, 0x12, 0x31, \r
-0xFC, 0x90, 0xA1, 0x2E, 0xE0, 0xB4, 0x01, 0x03, 0x12, 0x74, 0x14, 0x11, 0x2E, 0x12, 0x42, 0x7D, \r
-0x80, 0xD5, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFF, 0x90, 0xA0, 0x8C, 0xE0, 0xFE, \r
-0x90, 0xA0, 0x8B, 0xE0, 0xFD, 0xB5, 0x06, 0x04, 0x7E, 0x01, 0x80, 0x02, 0x7E, 0x00, 0xEE, 0x64, \r
-0x01, 0x60, 0x2C, 0xED, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0xF5, 0xF9, 0x74, 0x9F, 0x35, 0xF0, 0xFA, \r
-0x7B, 0x01, 0x51, 0x4E, 0x7F, 0x01, 0xEF, 0x60, 0x16, 0x90, 0xA0, 0x8B, 0xE0, 0x04, 0xF0, 0xE0, \r
-0xB4, 0x0A, 0x02, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0xA0, 0x8B, 0xF0, 0xD0, \r
-0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xCC, 0xEE, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0xA2, 0xCC, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, \r
-0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2D, 0xC3, 0x90, 0xA2, 0xCF, 0xE0, 0x94, 0xE8, 0x90, 0xA2, 0xCE, \r
-0xE0, 0x94, 0x03, 0x40, 0x0B, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x80, 0xF0, 0x7F, 0x00, 0x80, 0x15, \r
-0x90, 0xA2, 0xCE, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x08, 0xD6, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3E, \r
-0x50, 0x80, 0xC5, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFC, 0xED, 0x2C, 0x24, 0x00, \r
-0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE4, 0xF0, 0x0C, 0xEC, 0xB4, 0x18, 0xEE, 0x74, 0x00, \r
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xEF, 0xF0, 0xEE, 0x54, 0x3F, 0xFF, 0x74, 0x01, \r
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4, \r
-0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x03, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, \r
-0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x0B, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, \r
-0xE0, 0x44, 0x10, 0xF0, 0x22, 0xE4, 0xFB, 0xFA, 0xFD, 0x7F, 0x01, 0x12, 0x44, 0x7E, 0x90, 0xA1, \r
-0x3F, 0xEF, 0xF0, 0x60, 0xF0, 0x90, 0x9F, 0x97, 0xE0, 0x60, 0xEA, 0xC2, 0xAF, 0x30, 0xE0, 0x0B, \r
-0x54, 0xFE, 0xF0, 0xE4, 0xFF, 0x12, 0x55, 0xE9, 0x12, 0x60, 0x8E, 0xD2, 0xAF, 0xC2, 0xAF, 0x90, \r
-0x9F, 0x97, 0xE0, 0xFF, 0x30, 0xE1, 0x05, 0x54, 0xFD, 0xF0, 0x91, 0x59, 0xD2, 0xAF, 0xC2, 0xAF, \r
-0x90, 0x9F, 0x97, 0xE0, 0xFF, 0x30, 0xE2, 0x05, 0x54, 0xFB, 0xF0, 0x51, 0xF2, 0xD2, 0xAF, 0xC2, \r
-0xAF, 0x90, 0x9F, 0x97, 0xE0, 0xFF, 0x30, 0xE5, 0x0C, 0x54, 0xDF, 0xF0, 0x12, 0x74, 0xB2, 0xBF, \r
-0x01, 0x03, 0x12, 0x76, 0x62, 0xD2, 0xAF, 0x80, 0xAC, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
-0x90, 0x9F, 0xF4, 0xE0, 0xFF, 0x90, 0x9F, 0xF3, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, \r
-0x7F, 0x00, 0xEF, 0x70, 0x43, 0x90, 0x9F, 0xF3, 0xE0, 0xFE, 0x75, 0xF0, 0x08, 0x90, 0x9F, 0xA3, \r
-0x12, 0x45, 0x49, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0xA4, 0xF9, 0x74, 0x9F, 0x35, \r
-0xF0, 0xFA, 0x7B, 0x01, 0xAF, 0x05, 0x91, 0xBD, 0x90, 0x9F, 0xF3, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, \r
-0x00, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x9F, 0xF3, 0xF0, 0x12, 0x5B, \r
-0x24, 0x90, 0x9F, 0x97, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA1, 0x41, \r
-0x12, 0x45, 0x5E, 0x90, 0xA1, 0x40, 0xEF, 0xF0, 0x12, 0x45, 0x67, 0x4C, 0xF0, 0x00, 0x4C, 0xF9, \r
-0x01, 0x4D, 0x01, 0x08, 0x4D, 0x0A, 0x09, 0x4D, 0x13, 0x0A, 0x4D, 0x1C, 0x12, 0x4D, 0x24, 0x13, \r
-0x4D, 0x2D, 0x40, 0x4D, 0x36, 0x42, 0x4D, 0x3F, 0x43, 0x4D, 0x48, 0x44, 0x00, 0x00, 0x4D, 0x50, \r
-0x90, 0xA1, 0x41, 0x12, 0x45, 0x55, 0x02, 0x5A, 0x0A, 0x90, 0xA1, 0x41, 0x12, 0x45, 0x55, 0x80, \r
-0x72, 0x90, 0xA1, 0x41, 0x12, 0x45, 0x55, 0x02, 0x58, 0xF3, 0x90, 0xA1, 0x41, 0x12, 0x45, 0x55, \r
-0x02, 0x5A, 0x56, 0x90, 0xA1, 0x41, 0x12, 0x45, 0x55, 0x02, 0x5A, 0x86, 0x90, 0xA1, 0x41, 0x12, \r
-0x45, 0x55, 0x80, 0x3C, 0x90, 0xA1, 0x41, 0x12, 0x45, 0x55, 0x02, 0x5A, 0xB6, 0x90, 0xA1, 0x41, \r
-0x12, 0x45, 0x55, 0x02, 0x6F, 0x30, 0x90, 0xA1, 0x41, 0x12, 0x45, 0x55, 0x02, 0x69, 0xB2, 0x90, \r
-0xA1, 0x41, 0x12, 0x45, 0x55, 0x02, 0x70, 0x9C, 0x90, 0xA1, 0x41, 0x12, 0x45, 0x55, 0xC1, 0xB0, \r
-0x90, 0x01, 0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0xA1, 0x40, 0xE0, 0x90, 0x01, 0xC2, 0xF0, 0x22, \r
-0x12, 0x06, 0x89, 0xFF, 0x90, 0xA0, 0xAD, 0xF0, 0xBF, 0x01, 0x07, 0xB1, 0xD5, 0xE4, 0x90, 0xA0, \r
-0xAD, 0xF0, 0x22, 0x8B, 0x51, 0x8A, 0x52, 0x89, 0x53, 0x90, 0x00, 0x01, 0x12, 0x06, 0xA2, 0xFF, \r
-0xF5, 0x55, 0x12, 0x06, 0x89, 0xFE, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x06, \r
-0xA2, 0xF5, 0x56, 0x80, 0x02, 0x8F, 0x56, 0x85, 0x55, 0x54, 0xE5, 0x54, 0xD3, 0x95, 0x56, 0x50, \r
-0x33, 0xAB, 0x51, 0xAA, 0x52, 0xA9, 0x53, 0x12, 0x06, 0x89, 0x54, 0x01, 0xFF, 0x74, 0xAE, 0x25, \r
-0x54, 0xF5, 0x82, 0xE4, 0x34, 0xA0, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0xAE, 0x25, 0x54, 0xF5, 0x82, \r
-0xE4, 0x34, 0xA0, 0xF5, 0x83, 0xE0, 0xAF, 0x54, 0x70, 0x04, 0xF1, 0xDB, 0x80, 0x02, 0xF1, 0xCA, \r
-0x05, 0x54, 0x80, 0xC6, 0x22, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x44, 0x7F, 0xF5, 0x7E, 0x01, 0x12, \r
-0x34, 0xC1, 0xBF, 0x01, 0x06, 0x90, 0xA1, 0x44, 0xE0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, \r
-0x44, 0x7F, 0xF6, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0xA1, 0x44, 0xE0, 0x90, \r
-0xA1, 0x46, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x44, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x34, 0xC1, \r
-0xBF, 0x01, 0x08, 0x90, 0xA1, 0x44, 0xE0, 0x90, 0xA1, 0x47, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, \r
-0x44, 0x7F, 0xF3, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0xA1, 0x44, 0xE0, 0x90, \r
-0xA1, 0x48, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x44, 0x7F, 0xF2, 0x7E, 0x01, 0x12, 0x34, 0xC1, \r
-0xBF, 0x01, 0x08, 0x90, 0xA1, 0x44, 0xE0, 0x90, 0xA1, 0x49, 0xF0, 0x90, 0xA1, 0x45, 0xE0, 0xFF, \r
-0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0xA1, 0x4D, 0xF0, 0x90, 0xA1, 0x49, 0xE0, \r
-0x90, 0xA1, 0x4E, 0xF0, 0x90, 0xA1, 0x4F, 0x74, 0x12, 0xF0, 0x90, 0xA1, 0x5D, 0x74, 0x05, 0xF0, \r
-0x90, 0xA1, 0x51, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0xA1, 0x4D, 0xE0, 0x90, \r
-0xA1, 0x54, 0xF0, 0x90, 0xA1, 0x4E, 0xE0, 0x90, 0xA1, 0x55, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, \r
-0x4F, 0xF1, 0x60, 0x7F, 0x04, 0x90, 0xA2, 0xF2, 0xEF, 0xF0, 0x7F, 0x02, 0x12, 0x44, 0x57, 0x90, \r
-0x9F, 0x97, 0xE0, 0xFF, 0x90, 0xA2, 0xF2, 0xE0, 0xFE, 0xEF, 0x4E, 0x90, 0x9F, 0x97, 0xF0, 0x22, \r
-0x90, 0xA1, 0x44, 0x12, 0x45, 0x5E, 0xE4, 0x90, 0xA1, 0x49, 0xF0, 0xFD, 0x90, 0xA1, 0x44, 0x12, \r
-0x45, 0x55, 0x8D, 0x82, 0x75, 0x83, 0x00, 0x12, 0x06, 0xA2, 0xF4, 0x60, 0x4D, 0x90, 0xA1, 0x49, \r
-0xE0, 0xFF, 0x90, 0xA1, 0x44, 0x12, 0x45, 0x55, 0x8D, 0x82, 0x75, 0x83, 0x00, 0x12, 0x06, 0xA2, \r
-0xFE, 0x75, 0xF0, 0x10, 0x90, 0x81, 0x01, 0x12, 0x45, 0x49, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, \r
-0x01, 0xFC, 0xA8, 0x05, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0x90, 0xA1, 0x49, 0xF0, \r
-0x75, 0xF0, 0x10, 0xEE, 0x90, 0x81, 0x00, 0x12, 0x45, 0x49, 0xE0, 0xFF, 0x74, 0x4A, 0x2D, 0xF5, \r
-0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xEF, 0xF0, 0x80, 0x0D, 0x74, 0x4A, 0x2D, 0xF5, 0x82, 0xE4, \r
-0x34, 0xA1, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x0D, 0xED, 0xB4, 0x07, 0x90, 0x90, 0xA1, 0x47, 0x74, \r
-0x05, 0xF0, 0x90, 0xA1, 0x55, 0x74, 0x08, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x47, 0xF1, 0x60, \r
-0x7F, 0x04, 0xC1, 0x95, 0xE4, 0x90, 0xA2, 0xA4, 0xF0, 0x90, 0xA2, 0xA2, 0x74, 0x14, 0xF0, 0x90, \r
-0xA2, 0xB0, 0x74, 0x01, 0xF0, 0xFB, 0x7A, 0xA2, 0x79, 0xA2, 0xF1, 0x60, 0x7F, 0x04, 0xC1, 0x95, \r
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA0, 0x8B, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, \r
-0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0xA0, 0x8C, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, \r
-0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x35, \r
-0xC0, 0x01, 0x90, 0xA0, 0x8C, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0xF5, 0xF9, 0x74, 0x9F, 0x35, \r
-0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0xD0, 0x01, 0x7E, 0x00, 0x7F, 0x0F, 0x12, 0x06, 0x63, 0x90, \r
-0xA0, 0x8C, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, \r
-0xE4, 0x90, 0xA0, 0x8C, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F, 0x57, 0x75, 0xF0, 0x10, 0xEF, \r
-0x90, 0x81, 0x05, 0x12, 0x45, 0x49, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0x8F, 0x57, 0x75, 0xF0, 0x10, \r
-0xEF, 0x90, 0x81, 0x05, 0x12, 0x45, 0x49, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x7F, 0xF4, 0x12, 0x47, \r
-0x4E, 0xEF, 0x20, 0xE5, 0x0E, 0x7F, 0xF4, 0x12, 0x47, 0x4E, 0xEF, 0x7F, 0x01, 0x20, 0xE4, 0x05, \r
-0x7F, 0x02, 0x22, 0x7F, 0x03, 0x22, 0x12, 0x4F, 0xEC, 0x90, 0x9F, 0x9C, 0xEF, 0xF0, 0x12, 0x47, \r
-0xEE, 0x90, 0x01, 0x64, 0x74, 0x01, 0xF0, 0x90, 0x04, 0x23, 0xE0, 0x44, 0x80, 0xF0, 0x7F, 0x17, \r
-0x12, 0x47, 0x4E, 0xEF, 0x54, 0xFC, 0x44, 0x04, 0xFD, 0x7F, 0x17, 0x12, 0x46, 0x35, 0x7F, 0x38, \r
-0x12, 0x47, 0x4E, 0xEF, 0x44, 0x40, 0xFD, 0x7F, 0x38, 0x12, 0x46, 0x35, 0x02, 0x37, 0x99, 0x7F, \r
-0x81, 0x12, 0x47, 0x4E, 0xEF, 0x54, 0xFE, 0xFD, 0x7F, 0x81, 0x12, 0x46, 0x35, 0x7F, 0x80, 0x12, \r
-0x47, 0x4E, 0xEF, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x12, 0x46, 0x35, 0x31, 0x2C, 0x12, 0x3E, 0x11, \r
-0x31, 0x85, 0x31, 0x47, 0x7F, 0x01, 0x12, 0x43, 0x45, 0x7F, 0x02, 0x12, 0x43, 0x45, 0x11, 0x06, \r
-0x11, 0x9E, 0x7F, 0x80, 0x12, 0x47, 0x4E, 0xEF, 0x44, 0x40, 0xFD, 0x7F, 0x80, 0x12, 0x46, 0x35, \r
-0x75, 0x28, 0xFF, 0x31, 0x1A, 0x11, 0xBA, 0x7F, 0x81, 0x12, 0x47, 0x4E, 0xEF, 0x44, 0x04, 0xFD, \r
-0x7F, 0x81, 0x12, 0x46, 0x35, 0x31, 0x21, 0x31, 0xA8, 0xE4, 0xFF, 0x02, 0x43, 0xCE, 0x31, 0x14, \r
-0x31, 0x39, 0x31, 0xCF, 0x31, 0x55, 0x90, 0xA1, 0x2F, 0xE0, 0x54, 0x7F, 0xF0, 0x54, 0xBF, 0xF0, \r
-0x54, 0xDF, 0xF0, 0x54, 0xF0, 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0xE4, 0x90, 0xA1, 0x34, 0xF0, 0xA3, \r
-0xF0, 0x31, 0x67, 0xEF, 0x64, 0x01, 0x60, 0x45, 0xC3, 0x90, 0xA1, 0x35, 0xE0, 0x94, 0x88, 0x90, \r
-0xA1, 0x34, 0xE0, 0x94, 0x13, 0x40, 0x0F, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x01, \r
-0xC7, 0x74, 0xFD, 0xF0, 0x80, 0x27, 0x90, 0xA1, 0x34, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x08, 0xD6, \r
-0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0xD3, 0x90, 0xA1, 0x35, 0xE0, 0x94, 0x32, 0x90, 0xA1, \r
-0x34, 0xE0, 0x94, 0x00, 0x40, 0xBB, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE3, 0xB4, 0x90, 0x01, 0xC7, \r
-0x74, 0xFE, 0xF0, 0x22, 0xE4, 0x90, 0xA0, 0xAE, 0xF0, 0x22, 0x75, 0xE8, 0x03, 0x75, 0xA8, 0x85, \r
-0x22, 0x90, 0x01, 0xE4, 0x74, 0x12, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x01, 0x94, 0xE0, \r
-0x44, 0x01, 0xF0, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0xA0, 0x8B, 0xF0, 0xA3, 0xF0, \r
-0x90, 0x9F, 0xF3, 0xF0, 0xA3, 0xF0, 0x22, 0xE4, 0x90, 0x9F, 0x97, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, \r
-0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xE4, 0x90, 0xA0, 0x8F, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, \r
-0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x44, 0x0B, 0xF0, \r
-0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xC0, 0x7F, 0x00, 0xB4, \r
-0x40, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9A, 0xE0, \r
-0x54, 0xC0, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x90, 0x01, 0x99, 0xE0, 0x44, 0xC0, \r
-0xF0, 0x90, 0x01, 0x9B, 0x74, 0x80, 0xF0, 0x22, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x34, 0x7F, 0xFB, \r
-0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x16, 0x90, 0xA1, 0x34, 0xE0, 0x54, 0x30, 0xFF, 0xBF, \r
-0x20, 0x07, 0x90, 0xA1, 0x2E, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0xA1, 0x2E, 0xF0, 0x22, 0xE4, \r
-0xFF, 0xE4, 0xFE, 0x74, 0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xE0, 0x54, 0xFE, \r
-0xF0, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x00, 0xBE, 0x03, 0x12, 0x12, 0x45, 0x49, 0xE5, 0x82, \r
-0x2E, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0x74, 0x80, 0xF0, 0x80, 0x0F, 0x12, 0x45, 0x49, \r
-0xE5, 0x82, 0x2E, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE4, 0xF0, 0x75, 0xF0, 0x08, 0xEF, \r
-0x90, 0x89, 0x00, 0x12, 0x45, 0x49, 0xE5, 0x82, 0x2E, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, \r
-0xE4, 0xF0, 0x0E, 0xBE, 0x10, 0xAD, 0x0F, 0xBF, 0x80, 0xA7, 0xE4, 0x90, 0xAD, 0xE2, 0xF0, 0x90, \r
+0x39, 0xFD, 0xEC, 0x38, 0xFC, 0x22, 0xC3, 0xEF, 0x9B, 0xFF, 0xEE, 0x9A, 0xFE, 0xED, 0x99, 0xFD, \r
+0xEC, 0x98, 0xFC, 0x22, 0xEF, 0x5B, 0xFF, 0xEE, 0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, \r
+0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xEB, 0x9F, \r
+0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8, 0x9C, 0x45, 0xF0, 0x22, 0xE0, \r
+0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, \r
+0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, \r
+0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, \r
+0xF0, 0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, \r
+0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, \r
+0x74, 0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0x02, 0x46, 0x19, 0x02, 0x43, \r
+0x6D, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, \r
+0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, \r
+0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, \r
+0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x46, 0x5E, 0xE4, 0x7E, 0x01, 0x93, \r
+0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, \r
+0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, \r
+0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, \r
+0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0x41, 0xA6, \r
+0x13, 0x00, 0x41, 0xA6, 0x14, 0x00, 0x41, 0xA6, 0x29, 0x00, 0x41, 0xA6, 0x2B, 0x00, 0x44, 0xA5, \r
+0xD7, 0x41, 0x4E, 0x59, 0x00, 0x44, 0xA5, 0xD3, 0x61, 0x6E, 0x79, 0x00, 0x00, 0x60, 0x07, 0x67, \r
+0xEF, 0x64, 0xAE, 0x7F, 0x67, 0xF1, 0xAA, 0xEF, 0x44, 0x20, 0xFD, 0x7F, 0x67, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF1, 0xFB, 0xD0, 0xD0, 0x92, 0xAF, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA5, 0xEC, 0xEF, 0xF0, 0x90, 0xA5, 0xEE, \r
+0xEB, 0xF0, 0xED, 0x60, 0x02, 0xE1, 0x53, 0x90, 0x07, 0x6E, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x07, \r
+0x65, 0xE0, 0x54, 0xE7, 0xF0, 0x90, 0xA5, 0xEE, 0xE0, 0x70, 0x3E, 0xD1, 0x83, 0x90, 0xA5, 0xEC, \r
+0xE0, 0x70, 0x30, 0x12, 0x91, 0x53, 0x70, 0x13, 0x12, 0x37, 0x4E, 0xE4, 0xFF, 0x74, 0x02, 0x12, \r
+0x90, 0x73, 0x7F, 0x64, 0xF1, 0xAA, 0xEF, 0x54, 0xFE, 0x80, 0x13, 0x12, 0x37, 0x4E, 0xE4, 0xFE, \r
+0x74, 0x80, 0xFF, 0xE4, 0x12, 0x90, 0x74, 0x7F, 0x64, 0xF1, 0xAA, 0xEF, 0x44, 0x01, 0xFD, 0x7F, \r
+0x64, 0xD1, 0x8D, 0x7F, 0x4E, 0xF1, 0xF5, 0xE1, 0x9C, 0xD1, 0x83, 0x90, 0xA5, 0xEC, 0xE0, 0x70, \r
+0x07, 0x12, 0x91, 0x01, 0xFF, 0x12, 0x90, 0x73, 0x12, 0x91, 0x4A, 0xF1, 0xEA, 0x44, 0x01, 0xFD, \r
+0x7F, 0x4F, 0xD1, 0x8D, 0x7F, 0x30, 0x12, 0x91, 0x03, 0x74, 0x66, 0xFF, 0xEC, 0x12, 0x68, 0xA9, \r
+0x7F, 0x30, 0x7E, 0x09, 0x12, 0x38, 0x45, 0x7F, 0x2C, 0x7E, 0x09, 0x12, 0x37, 0x4E, 0xEF, 0x54, \r
+0xFC, 0xFF, 0xEF, 0x44, 0x01, 0xFF, 0xEC, 0x12, 0x68, 0xA9, 0x7F, 0x2C, 0x7E, 0x09, 0x12, 0x38, \r
+0x45, 0x80, 0x52, 0x90, 0x07, 0x6E, 0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x07, 0x65, 0xE0, 0x44, 0x18, \r
+0xF0, 0x90, 0xA5, 0xEC, 0xE0, 0x70, 0x32, 0x90, 0xA5, 0xEE, 0xE0, 0x60, 0x08, 0xD1, 0x83, 0x12, \r
+0x91, 0x01, 0xFF, 0x80, 0x21, 0x7F, 0x67, 0xF1, 0xAA, 0xEF, 0x54, 0xDF, 0xFD, 0x7F, 0x67, 0xD1, \r
+0x8D, 0x12, 0x91, 0x53, 0x70, 0x0B, 0x12, 0x37, 0x4E, 0xE4, 0x74, 0x80, 0xFF, 0x74, 0x02, 0x80, \r
+0x05, 0x12, 0x37, 0x4E, 0xE4, 0xFF, 0x12, 0x90, 0x73, 0x12, 0x91, 0x4A, 0xF1, 0xEA, 0x54, 0xFE, \r
+0xFD, 0x7F, 0x4F, 0xD1, 0x8D, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
+0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xE0, 0x90, 0xA6, 0x21, 0xF1, 0xFB, 0x90, 0xA6, 0x21, 0xE0, \r
+0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x30, 0xE4, 0x12, 0x58, 0xFA, 0x90, 0x01, 0x38, \r
+0x12, 0x58, 0xFA, 0xFD, 0x7F, 0x50, 0xD1, 0x8D, 0xE4, 0xFD, 0x7F, 0x51, 0xD1, 0x8D, 0xE4, 0xFD, \r
+0x7F, 0x52, 0xD1, 0x8D, 0xE4, 0xFD, 0x7F, 0x53, 0xC1, 0x8D, 0xFD, 0x7F, 0x4E, 0xD1, 0x8D, 0x7F, \r
+0x4F, 0xF1, 0xAA, 0xEF, 0x22, 0xF1, 0xAA, 0xEF, 0x44, 0x80, 0x22, 0xF0, 0x7F, 0x10, 0x7E, 0x00, \r
+0x02, 0x3E, 0x50, 0xF0, 0xE4, 0x90, 0xA5, 0xDF, 0xF0, 0x90, 0xA4, 0x57, 0xE0, 0x90, 0xA5, 0xE0, \r
+0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, \r
+0xA5, 0xDB, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA5, 0xDF, 0xE0, 0xF5, 0x3B, 0xA3, 0xE0, 0xF5, \r
+0x3C, 0x12, 0x36, 0x3E, 0x90, 0xA5, 0xDB, 0x12, 0x91, 0x41, 0xA3, 0xA3, 0xA3, 0x74, 0x05, 0xF0, \r
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xF5, 0x61, 0x90, 0xA3, 0xF9, 0xE0, 0x70, 0x02, 0x21, 0x07, \r
+0xD1, 0x5C, 0x60, 0x02, 0x21, 0x07, 0xD1, 0xFB, 0x12, 0x45, 0x61, 0xC0, 0x04, 0xC0, 0x05, 0xC0, \r
+0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0xF1, 0x14, 0x78, 0x10, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, \r
+0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x61, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, \r
+0xA3, 0xF1, 0x14, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, \r
+0x12, 0x90, 0xA7, 0x44, 0x80, 0xF0, 0x12, 0x77, 0xD6, 0x60, 0x22, 0x24, 0xFE, 0x60, 0x03, 0x04, \r
+0x70, 0x1E, 0x90, 0xA4, 0x00, 0xE0, 0x14, 0xF0, 0xE0, 0xFF, 0x60, 0x06, 0x90, 0xA4, 0x02, 0xE0, \r
+0x60, 0x0E, 0xEF, 0x70, 0x08, 0x90, 0xA3, 0xFF, 0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x75, 0x61, 0x01, \r
+0xE5, 0x61, 0x60, 0x43, 0xF1, 0xED, 0x90, 0xA4, 0x02, 0xE0, 0x60, 0x04, 0x64, 0x01, 0x70, 0x14, \r
+0xE4, 0x90, 0xA5, 0xDF, 0xF0, 0x90, 0xA4, 0x02, 0xE0, 0x12, 0x90, 0x8D, 0x11, 0x0D, 0x90, 0xA4, \r
+0x02, 0xE0, 0x80, 0x13, 0xE4, 0x90, 0xA5, 0xDF, 0x12, 0x90, 0x82, 0x11, 0x0D, 0x90, 0xA4, 0x02, \r
+0xE0, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0x12, 0x90, 0x8D, 0x90, 0xA4, 0x12, 0xF0, 0x90, 0xA3, \r
+0xFC, 0xE0, 0x20, 0xE2, 0x02, 0x31, 0x08, 0x22, 0x7D, 0x01, 0x7F, 0x04, 0xD3, 0x10, 0xAF, 0x01, \r
+0xC3, 0xC0, 0xD0, 0x90, 0xA6, 0x28, 0xED, 0xF0, 0x90, 0xA3, 0xF4, 0xE0, 0xFE, 0xC4, 0x13, 0x13, \r
+0x54, 0x03, 0x30, 0xE0, 0x02, 0x41, 0x4C, 0xEE, 0x12, 0x56, 0xF4, 0x30, 0xE0, 0x02, 0x41, 0x4C, \r
+0x90, 0xA3, 0xFC, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0x41, 0x4C, 0xEF, 0x70, 0x02, 0x21, 0xC8, 0x24, \r
+0xFE, 0x70, 0x02, 0x41, 0x01, 0x24, 0xFE, 0x60, 0x47, 0x24, 0xFC, 0x70, 0x02, 0x41, 0x3B, 0x24, \r
+0xFC, 0x60, 0x02, 0x41, 0x4C, 0xEE, 0xB4, 0x0E, 0x02, 0x51, 0x88, 0x90, 0xA3, 0xFC, 0xE0, 0x70, \r
+0x04, 0x7F, 0x01, 0x51, 0xC4, 0x90, 0xA3, 0xFC, 0xE0, 0xB4, 0x06, 0x02, 0x51, 0xA3, 0x90, 0xA3, \r
+0xFC, 0xE0, 0xB4, 0x04, 0x0D, 0x90, 0xA6, 0x28, 0xE0, 0xFF, 0x60, 0x04, 0xB1, 0xCD, 0x80, 0x02, \r
+0xF1, 0x24, 0x90, 0xA3, 0xFC, 0xE0, 0x64, 0x08, 0x60, 0x02, 0x41, 0x4C, 0x91, 0x6D, 0x41, 0x4C, \r
+0x90, 0xA3, 0xFC, 0xE0, 0x70, 0x04, 0x7F, 0x01, 0x51, 0xC4, 0x90, 0xA3, 0xFC, 0xE0, 0xB4, 0x06, \r
+0x02, 0x51, 0xA3, 0x90, 0xA3, 0xFC, 0xE0, 0xB4, 0x0E, 0x07, 0x51, 0x51, 0xBF, 0x01, 0x02, 0x51, \r
+0x88, 0x90, 0xA3, 0xFC, 0xE0, 0x64, 0x0C, 0x60, 0x02, 0x41, 0x4C, 0x51, 0x51, 0xEF, 0x64, 0x01, \r
+0x60, 0x02, 0x41, 0x4C, 0x71, 0x3E, 0x41, 0x4C, 0x90, 0xA3, 0xFC, 0xE0, 0xB4, 0x0E, 0x07, 0x51, \r
+0x51, 0xBF, 0x01, 0x02, 0x51, 0x88, 0x90, 0xA3, 0xFC, 0xE0, 0xB4, 0x06, 0x02, 0x51, 0xA3, 0x90, \r
+0xA3, 0xFC, 0xE0, 0xB4, 0x0C, 0x07, 0x51, 0x51, 0xBF, 0x01, 0x02, 0x71, 0x3E, 0x90, 0xA3, 0xFC, \r
+0xE0, 0x64, 0x04, 0x70, 0x57, 0x12, 0x8F, 0x1F, 0xEF, 0x64, 0x01, 0x70, 0x4F, 0x91, 0xF0, 0x80, \r
+0x4B, 0x90, 0xA3, 0xFC, 0xE0, 0xB4, 0x0E, 0x07, 0x51, 0x51, 0xBF, 0x01, 0x02, 0x51, 0x88, 0x90, \r
+0xA3, 0xFC, 0xE0, 0xB4, 0x06, 0x02, 0x51, 0xA3, 0x90, 0xA3, 0xFC, 0xE0, 0xB4, 0x0C, 0x07, 0x51, \r
+0x51, 0xBF, 0x01, 0x02, 0x71, 0x3E, 0x90, 0xA3, 0xFC, 0xE0, 0x70, 0x04, 0x7F, 0x01, 0x51, 0xC4, \r
+0x90, 0xA3, 0xFC, 0xE0, 0xB4, 0x04, 0x15, 0xF1, 0xD9, 0x80, 0x11, 0x90, 0xA3, 0xFC, 0xE0, 0xB4, \r
+0x0C, 0x0A, 0x12, 0x75, 0x29, 0x54, 0x3F, 0x30, 0xE0, 0x02, 0x91, 0xAC, 0xD0, 0xD0, 0x92, 0xAF, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x8F, 0x06, 0xEF, 0x64, 0x01, 0x70, 0x21, \r
+0x12, 0x90, 0xDF, 0x20, 0xE0, 0x1B, 0x90, 0xA3, 0xFB, 0xE0, 0xD3, 0x94, 0x04, 0x50, 0x12, 0x90, \r
+0xA4, 0x5D, 0xE0, 0x30, 0xE0, 0x07, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x04, 0x7F, 0x01, 0x80, \r
+0x02, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA3, 0xF5, 0xE0, 0xC3, 0x13, 0x20, 0xE0, \r
+0x04, 0x7D, 0x0C, 0x80, 0x05, 0x12, 0x90, 0xE9, 0x7D, 0x04, 0x7F, 0x01, 0x51, 0xD7, 0xE4, 0xFD, \r
+0xFF, 0x61, 0x6F, 0x90, 0xA3, 0xF5, 0xE0, 0x90, 0x06, 0x04, 0x20, 0xE0, 0x08, 0xE0, 0x44, 0x40, \r
+0xF0, 0x7D, 0x04, 0x80, 0x06, 0xE0, 0x54, 0x7F, 0xF0, 0x7D, 0x0C, 0x7F, 0x01, 0x51, 0xD7, 0xE4, \r
+0xFD, 0xFF, 0x61, 0x6F, 0x90, 0xA6, 0x27, 0xEF, 0xF0, 0x91, 0x75, 0x90, 0xA6, 0x27, 0xE0, 0x60, \r
+0x02, 0x71, 0xC8, 0x7D, 0x04, 0x7F, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA6, \r
+0x26, 0xEF, 0xF0, 0x14, 0x60, 0x15, 0x14, 0x60, 0x19, 0x24, 0x02, 0x70, 0x1A, 0xED, 0x54, 0x01, \r
+0xFF, 0x90, 0xA3, 0xF4, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0x80, 0x0C, 0x90, 0xA3, 0xFC, 0xED, 0xF0, \r
+0x80, 0x05, 0x90, 0xA3, 0xFB, 0xED, 0xF0, 0x12, 0x57, 0xE9, 0x30, 0xE4, 0x2C, 0x90, 0xA6, 0x26, \r
+0xE0, 0x14, 0x60, 0x07, 0x14, 0x60, 0x18, 0x24, 0x02, 0x70, 0x1E, 0x90, 0xA3, 0xF4, 0xE0, 0x12, \r
+0x91, 0x26, 0xFF, 0x90, 0xA3, 0xFC, 0xE0, 0x54, 0x7F, 0x4F, 0xFD, 0x7F, 0x88, 0x80, 0x07, 0x90, \r
+0xA3, 0xFB, 0xE0, 0xFD, 0x7F, 0x89, 0x12, 0x46, 0x8D, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD1, 0x5C, \r
+0x70, 0x23, 0x90, 0xA3, 0xF5, 0xE0, 0x54, 0xFD, 0xF0, 0x7D, 0x2C, 0x7F, 0x6F, 0x71, 0x6F, 0x7D, \r
+0x08, 0x7F, 0x01, 0xB1, 0x82, 0xBF, 0x01, 0x0D, 0x90, 0xA3, 0xF4, 0xE0, 0x44, 0x80, 0xF0, 0x7D, \r
+0x0E, 0x7F, 0x01, 0x51, 0xD7, 0x22, 0xE4, 0xFD, 0x7F, 0x0C, 0x31, 0x0C, 0xE4, 0xFD, 0xFF, 0x90, \r
+0x05, 0x22, 0xEF, 0xF0, 0x90, 0xA2, 0x9A, 0xED, 0xF0, 0x22, 0x90, 0xA4, 0x5D, 0xE0, 0x30, 0xE0, \r
+0x44, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x15, 0x12, 0x91, 0x1D, 0x11, 0x0C, 0x71, 0xC8, 0xF1, \r
+0xF5, 0x30, 0xE0, 0x06, 0x7D, 0x0C, 0x7F, 0x01, 0x51, 0xD7, 0x02, 0x77, 0xC6, 0x90, 0xA4, 0x5D, \r
+0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x1D, 0xE4, 0x90, 0xA5, 0xDF, 0xF0, 0x90, 0xA4, 0x60, \r
+0x11, 0x0C, 0x12, 0x91, 0x5C, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x06, 0x7D, 0x04, 0x7F, 0x01, 0x41, \r
+0xD7, 0x7D, 0x31, 0x91, 0xB6, 0x22, 0x91, 0x75, 0xE4, 0xFD, 0xFF, 0x80, 0xA2, 0x7E, 0x00, 0x7F, \r
+0x62, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA3, 0x79, 0xF4, 0x12, 0x08, 0xAA, 0x90, 0xA3, 0xF8, 0x74, \r
+0x02, 0xF0, 0x90, 0xA3, 0xFF, 0x14, 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x90, 0xA4, 0x05, \r
+0xE4, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x12, 0x90, 0xB5, 0x12, 0x8F, 0xAF, 0xE4, 0xFD, 0xFF, 0x51, \r
+0xD7, 0x7D, 0x0C, 0x7F, 0x02, 0x51, 0xD7, 0x7D, 0x0C, 0x7F, 0x01, 0x51, 0xD7, 0x90, 0xA2, 0x9C, \r
+0xE0, 0xFF, 0xB4, 0x01, 0x08, 0x90, 0xA4, 0x04, 0x74, 0xDD, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0xA4, \r
+0x04, 0xB4, 0x03, 0x05, 0x74, 0xD4, 0xF0, 0x80, 0x03, 0x74, 0x40, 0xF0, 0x7F, 0x79, 0x12, 0x47, \r
+0xAA, 0xEF, 0x54, 0x03, 0xFF, 0xBF, 0x02, 0x0F, 0x7F, 0x28, 0x12, 0x47, 0xAA, 0xEF, 0x30, 0xE2, \r
+0x06, 0x90, 0xA4, 0x16, 0x74, 0x02, 0xF0, 0x12, 0x81, 0xCD, 0x12, 0x90, 0xB5, 0x7F, 0x01, 0x12, \r
+0x7E, 0xFB, 0x7E, 0x00, 0x7F, 0x02, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA4, 0x79, 0x5A, 0x12, 0x08, \r
+0xAA, 0xF1, 0xD1, 0xF1, 0xE5, 0x71, 0xC8, 0xE4, 0x90, 0xA4, 0x5C, 0xF0, 0x22, 0x71, 0xC6, 0x7D, \r
+0x0C, 0x7F, 0x01, 0x41, 0xD7, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0x01, 0xE0, \r
+0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x06, 0xB7, 0x74, 0x09, 0xF0, 0x90, \r
+0x06, 0xB4, 0x74, 0x86, 0xF0, 0x12, 0x90, 0x94, 0xE4, 0xFD, 0x12, 0x46, 0xA1, 0xB1, 0x1D, 0x44, \r
+0x01, 0xFD, 0x7F, 0x02, 0x12, 0x46, 0x8D, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7D, 0x2F, 0x91, 0xB6, \r
+0x7D, 0x08, 0x7F, 0x01, 0x41, 0xD7, 0x7F, 0xFF, 0x71, 0x6F, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
+0xD0, 0x12, 0x90, 0x94, 0x7D, 0x01, 0x12, 0x46, 0xA1, 0xB1, 0x28, 0xB1, 0x1D, 0xB1, 0x07, 0xB1, \r
+0x07, 0x54, 0xFE, 0xFD, 0x7F, 0x02, 0x12, 0x46, 0x8D, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, \r
+0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
+0x7D, 0x2D, 0xB1, 0x24, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0xFD, 0x7F, 0x03, 0xF1, 0xC4, 0x91, \r
+0xBA, 0xE4, 0xFD, 0x7F, 0x01, 0x41, 0xD7, 0x54, 0xFE, 0xFD, 0x7F, 0x02, 0x12, 0x46, 0x8D, 0x7F, \r
+0x02, 0x12, 0x47, 0xAA, 0xEF, 0x44, 0x01, 0xFD, 0x7F, 0x02, 0x12, 0x46, 0x8D, 0x7F, 0x02, 0x12, \r
+0x47, 0xAA, 0xEF, 0x22, 0x7F, 0xFF, 0x71, 0x6F, 0xE4, 0x90, 0xA6, 0x0D, 0xF0, 0xA3, 0xF0, 0x90, \r
+0x05, 0x22, 0xE0, 0x90, 0xA6, 0x0F, 0xF0, 0x7D, 0x47, 0x7F, 0xFF, 0x71, 0x6F, 0x90, 0x05, 0xF8, \r
+0xE0, 0x70, 0x11, 0xA3, 0xE0, 0x70, 0x0D, 0xA3, 0xE0, 0x70, 0x09, 0xA3, 0xE0, 0x70, 0x05, 0xF1, \r
+0x1B, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0xA6, 0x0E, 0xE0, 0x94, 0xE8, 0x90, 0xA6, 0x0D, 0xE0, 0x94, \r
+0x03, 0x40, 0x0C, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x20, 0xF0, 0xF1, 0x1B, 0x7F, 0x00, 0x22, 0x7F, \r
+0x32, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x90, 0xA6, 0x0D, 0x12, 0x62, 0xCC, 0x80, 0xBF, 0x7D, 0x08, \r
+0xE4, 0xFF, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA5, 0xE7, 0xEF, 0xF0, 0xA3, 0xED, \r
+0xF0, 0x90, 0xA2, 0x98, 0xE0, 0x04, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x21, 0x90, 0x05, 0x22, \r
+0xE0, 0x90, 0xA5, 0xEB, 0xF0, 0x7D, 0x26, 0xB1, 0x24, 0xEF, 0x64, 0x01, 0x70, 0x03, 0x12, 0x5E, \r
+0xDE, 0x90, 0xA5, 0xEB, 0xE0, 0xFF, 0x7D, 0x27, 0x71, 0x6F, 0xB1, 0xFB, 0x80, 0x05, 0xB1, 0xFB, \r
+0x12, 0x5E, 0xDE, 0x12, 0x84, 0x61, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x60, 0x2A, \r
+0xD1, 0x5C, 0x70, 0x26, 0x90, 0xA3, 0xF5, 0xE0, 0x54, 0xFE, 0xF0, 0x7D, 0x2B, 0x7F, 0x0F, 0x71, \r
+0x6F, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xB1, 0x7E, 0xBF, 0x01, 0x0D, 0x90, 0xA3, 0xF4, \r
+0xE0, 0x44, 0x40, 0xF0, 0x7D, 0x06, 0x7F, 0x01, 0x51, 0xD7, 0x22, 0x90, 0xA5, 0xE7, 0xE0, 0xFF, \r
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA6, 0x2A, 0xEF, 0xF0, 0x90, 0xA2, 0xCF, 0xE0, \r
+0xFF, 0x90, 0x04, 0x1C, 0xE0, 0x6F, 0x70, 0x3F, 0x90, 0xA3, 0xFC, 0xE0, 0x64, 0x0E, 0x70, 0x17, \r
+0x90, 0xA6, 0x2A, 0xE0, 0x70, 0x31, 0x90, 0xA3, 0xF4, 0xE0, 0x54, 0x7F, 0xF0, 0xF1, 0xD1, 0x7D, \r
+0x0C, 0x7F, 0x01, 0x51, 0xD7, 0x80, 0x1E, 0x90, 0xA3, 0xFC, 0xE0, 0x64, 0x06, 0x70, 0x18, 0x90, \r
+0xA6, 0x2A, 0xE0, 0x60, 0x12, 0x90, 0xA3, 0xF4, 0xE0, 0x54, 0xBF, 0xF0, 0x12, 0x90, 0xE9, 0x90, \r
+0xA3, 0xFC, 0x74, 0x04, 0xF0, 0x71, 0xC8, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFF, 0xD1, 0x64, \r
+0xEF, 0x64, 0x01, 0x22, 0x12, 0x90, 0xF5, 0x12, 0x61, 0x84, 0xE0, 0xFD, 0x7C, 0x00, 0x12, 0x6F, \r
+0xE3, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x12, 0x8D, 0x4E, 0x7F, 0x00, 0x60, \r
+0x02, 0x7F, 0x01, 0x22, 0xE4, 0x90, 0xA5, 0x10, 0xF0, 0x90, 0xA3, 0xF9, 0xE0, 0x60, 0x6A, 0xD1, \r
+0x5C, 0x70, 0x66, 0x12, 0x77, 0xDE, 0xD1, 0xFA, 0x12, 0x45, 0x61, 0xC0, 0x04, 0xC0, 0x05, 0xC0, \r
+0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0xF1, 0x14, 0x78, 0x10, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, \r
+0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x61, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, \r
+0xA3, 0xF1, 0x14, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, \r
+0x12, 0x90, 0xA7, 0x44, 0x80, 0xF0, 0x90, 0xA5, 0x10, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0xA4, 0x00, \r
+0xF0, 0x04, 0x60, 0x15, 0xF1, 0xED, 0xE4, 0x90, 0xA5, 0xDF, 0xF0, 0x90, 0xA4, 0x01, 0x11, 0x0C, \r
+0x90, 0xA3, 0xFC, 0xE0, 0x20, 0xE2, 0x02, 0x31, 0x08, 0x22, 0xF0, 0x90, 0x05, 0x61, 0xE0, 0xFF, \r
+0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x08, 0x12, 0x08, 0x5A, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, \r
+0x07, 0x90, 0x05, 0x60, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x22, 0x90, 0xA6, 0x0F, 0xE0, 0xFF, \r
+0x7D, 0x48, 0x61, 0x6F, 0xF1, 0xD1, 0x71, 0xC8, 0x7D, 0x0C, 0x7F, 0x01, 0x41, 0xD7, 0xEF, 0x70, \r
+0x34, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x74, 0x58, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x74, 0x58, 0x7D, \r
+0xC8, 0x7F, 0x02, 0x12, 0x76, 0xC6, 0x12, 0x77, 0x43, 0xF0, 0xE4, 0xFF, 0xD1, 0x64, 0xEF, 0x70, \r
+0x0A, 0xF1, 0x9E, 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0x80, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0x31, \r
+0x0C, 0xF1, 0xA2, 0xE1, 0xE5, 0x90, 0x01, 0x36, 0x74, 0x78, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, \r
+0x78, 0xFF, 0xF1, 0xC4, 0x7D, 0x02, 0x7F, 0x03, 0xF1, 0xC4, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, \r
+0x12, 0x77, 0x11, 0xE4, 0xFF, 0xD1, 0x64, 0xBF, 0x01, 0x10, 0x12, 0x75, 0xB8, 0x90, 0xA3, 0xFC, \r
+0xE0, 0x20, 0xE2, 0x09, 0x7D, 0x01, 0x7F, 0x04, 0x21, 0x0C, 0x12, 0x77, 0xCE, 0x22, 0x91, 0x75, \r
+0xF1, 0x24, 0x90, 0xA3, 0xF4, 0xE0, 0x54, 0xF7, 0xF0, 0x22, 0x12, 0x6F, 0x0E, 0x90, 0xA3, 0xFC, \r
+0xE0, 0x64, 0x0C, 0x60, 0x04, 0x71, 0x66, 0xB1, 0x7E, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0xF1, 0xC4, \r
+0x7D, 0x02, 0x7F, 0x02, 0x74, 0x15, 0x2F, 0xF8, 0xE6, 0x4D, 0xFE, 0xF6, 0x74, 0x30, 0x02, 0x76, \r
+0xCE, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x22, 0x7D, 0x2E, 0x7F, 0x6F, 0x71, 0x6F, 0x7D, \r
+0x02, 0x7F, 0x01, 0x41, 0xD7, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0xA3, 0xFD, \r
+0xE0, 0x44, 0x10, 0xF0, 0x22, 0x91, 0x75, 0x90, 0xA4, 0x5D, 0xE0, 0xC3, 0x13, 0x22, 0xD3, 0x10, \r
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0xE9, 0x20, 0xE6, 0x02, 0x01, 0xF2, 0x90, 0x00, 0x8C, 0xE0, \r
+0x90, 0xA6, 0x07, 0xF0, 0x7F, 0x8D, 0x12, 0x47, 0xAA, 0x90, 0xA6, 0x08, 0xEF, 0xF0, 0x90, 0x00, \r
+0x8E, 0xE0, 0x90, 0xA6, 0x09, 0xF0, 0x90, 0xA6, 0x08, 0xE0, 0x24, 0xFC, 0x60, 0x10, 0x24, 0x03, \r
+0x60, 0x02, 0x01, 0xEA, 0x90, 0xA6, 0x07, 0xE0, 0xFF, 0x12, 0x8D, 0xAE, 0x01, 0xEA, 0x90, 0xA6, \r
+0x07, 0xE0, 0x24, 0x15, 0xF1, 0xCC, 0xE0, 0xFB, 0xE4, 0xFD, 0xFF, 0x31, 0x21, 0x75, 0xF0, 0x04, \r
+0x31, 0x2E, 0x13, 0x13, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0x31, 0x21, 0x75, 0xF0, 0x04, 0x31, \r
+0x2E, 0xD1, 0xF4, 0xFB, 0x0D, 0xE4, 0xFF, 0x31, 0x21, 0x75, 0xF0, 0x04, 0x31, 0x2E, 0xC4, 0x54, \r
+0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0x31, 0x21, 0x75, 0xF0, 0x04, 0xF1, 0xC1, 0xE0, 0xFB, 0xE4, 0xFD, \r
+0x0F, 0x31, 0x21, 0x75, 0xF0, 0x04, 0x90, 0x96, 0x16, 0x31, 0x1B, 0x75, 0xF0, 0x04, 0xB1, 0xE0, \r
+0xC4, 0x13, 0x54, 0x01, 0xFB, 0x0D, 0x7F, 0x01, 0x31, 0x21, 0x75, 0xF0, 0x04, 0xB1, 0xE0, 0x54, \r
+0x1F, 0x31, 0x1F, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x00, 0x12, 0x91, 0x14, 0x31, 0x21, 0x75, 0xF0, \r
+0x08, 0x90, 0x89, 0x01, 0x31, 0x1B, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x02, 0x31, 0x1B, 0x75, 0xF0, \r
+0x08, 0x90, 0x89, 0x03, 0x31, 0x1B, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x04, 0x12, 0x91, 0x14, 0x31, \r
+0x21, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x05, 0x31, 0x1B, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x06, 0x31, \r
+0x1B, 0x75, 0xF0, 0x08, 0xF1, 0xF6, 0xFB, 0x0D, 0x11, 0xF7, 0xF1, 0xE9, 0x30, 0xE0, 0x03, 0x12, \r
+0x8E, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x70, 0x04, 0x74, 0xF0, 0x80, 0x16, 0xEF, 0xB4, \r
+0x01, 0x04, 0x74, 0xF4, 0x80, 0x0E, 0xEF, 0xB4, 0x02, 0x04, 0x74, 0xF8, 0x80, 0x06, 0xEF, 0xB4, \r
+0x03, 0x08, 0x74, 0xFC, 0x2D, 0x12, 0x82, 0xEE, 0xEB, 0xF0, 0x22, 0x12, 0x45, 0x97, 0xE0, 0xFB, \r
+0x0D, 0x11, 0xF7, 0x90, 0xA6, 0x07, 0xE0, 0x22, 0xFF, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, \r
+0x18, 0x12, 0x45, 0x97, 0xE0, 0x22, 0x12, 0x06, 0x89, 0x54, 0x7F, 0xF5, 0x51, 0x12, 0x6F, 0xC1, \r
+0xFF, 0x54, 0x1F, 0xF5, 0x53, 0xD1, 0xF1, 0xF5, 0x52, 0xF1, 0xB7, 0xFF, 0x54, 0x03, 0xF5, 0x54, \r
+0xEF, 0x54, 0x30, 0xC4, 0x54, 0x0F, 0xF5, 0x57, 0xF1, 0xB7, 0xFF, 0x54, 0x40, 0xC4, 0x13, 0x13, \r
+0x54, 0x03, 0xF5, 0x55, 0xD1, 0xF1, 0xF5, 0x56, 0xF1, 0xB7, 0xFF, 0x54, 0x08, 0xFE, 0x13, 0x13, \r
+0x13, 0x54, 0x1F, 0xF5, 0x59, 0xEF, 0x54, 0x04, 0x13, 0x13, 0x54, 0x3F, 0xF5, 0x5A, 0xE5, 0x56, \r
+0x12, 0x91, 0x26, 0x31, 0x28, 0x54, 0x7F, 0x4F, 0xF0, 0xE5, 0x55, 0x54, 0x01, 0xC4, 0x33, 0x33, \r
+0x54, 0xC0, 0x31, 0x28, 0x54, 0xBF, 0x4F, 0xF0, 0xE5, 0x59, 0x70, 0x62, 0xE5, 0x53, 0x54, 0x1F, \r
+0xB1, 0xDA, 0x54, 0xE0, 0x4F, 0xF0, 0xE5, 0x54, 0x54, 0x03, 0x31, 0x28, 0x54, 0xFC, 0x4F, 0xF0, \r
+0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x31, 0x28, 0x54, 0xF3, 0x4F, 0xF0, 0xE5, 0x52, 0x54, 0x01, 0xC4, \r
+0x33, 0x54, 0xE0, 0xB1, 0xDA, 0x54, 0xDF, 0x4F, 0xF0, 0xE5, 0x57, 0x54, 0x03, 0xC4, 0x54, 0xF0, \r
+0x31, 0x28, 0x54, 0xCF, 0x4F, 0xF0, 0xE4, 0xF5, 0x58, 0x85, 0x58, 0x82, 0x75, 0x83, 0x00, 0xA3, \r
+0xA3, 0xA3, 0x12, 0x06, 0xA2, 0xFF, 0x75, 0xF0, 0x08, 0xE5, 0x51, 0xB1, 0xEF, 0x25, 0x58, 0x91, \r
+0x89, 0xEF, 0xF0, 0x05, 0x58, 0xE5, 0x58, 0xB4, 0x04, 0xDF, 0xAF, 0x51, 0x51, 0xBD, 0x22, 0x90, \r
+0xA4, 0x79, 0x12, 0x45, 0xAC, 0x90, 0xA4, 0x78, 0xEF, 0xF0, 0x12, 0x45, 0xB5, 0x52, 0x4A, 0x00, \r
+0x52, 0x4F, 0x01, 0x52, 0x54, 0x08, 0x52, 0x59, 0x09, 0x52, 0x5E, 0x0A, 0x52, 0x63, 0x12, 0x52, \r
+0x68, 0x13, 0x52, 0x6D, 0x14, 0x52, 0x72, 0x20, 0x52, 0x77, 0x21, 0x52, 0x7C, 0x23, 0x52, 0x81, \r
+0x25, 0x52, 0x86, 0x26, 0x52, 0x8B, 0x40, 0x52, 0x8F, 0x42, 0x52, 0x93, 0x43, 0x52, 0x98, 0x44, \r
+0x52, 0x9D, 0x47, 0x52, 0xA2, 0x49, 0x00, 0x00, 0x52, 0xA7, 0x51, 0xB7, 0x02, 0x7F, 0xE6, 0x51, \r
+0xB7, 0x02, 0x80, 0x30, 0x51, 0xB7, 0x02, 0x7C, 0x9F, 0x51, 0xB7, 0x02, 0x80, 0xDB, 0x51, 0xB7, \r
+0x02, 0x81, 0x00, 0x51, 0xB7, 0x02, 0x7F, 0x56, 0x51, 0xB7, 0x02, 0x81, 0x25, 0x51, 0xB7, 0x02, \r
+0x81, 0x98, 0x51, 0xB7, 0x02, 0x79, 0x4C, 0x51, 0xB7, 0x02, 0x81, 0xA7, 0x51, 0xB7, 0x02, 0x81, \r
+0xE3, 0x51, 0xB7, 0x02, 0x81, 0xEB, 0x51, 0xB7, 0x02, 0x7A, 0x1D, 0x51, 0xB7, 0x21, 0x36, 0x51, \r
+0xB7, 0xE1, 0x13, 0x51, 0xB7, 0x02, 0x6D, 0x0D, 0x51, 0xB7, 0x02, 0x79, 0xA7, 0x51, 0xB7, 0x02, \r
+0x7A, 0xCE, 0x51, 0xB7, 0x02, 0x8D, 0x90, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0xA4, \r
+0x78, 0xE0, 0x90, 0x01, 0xC2, 0xF0, 0x22, 0x90, 0xA4, 0x79, 0x02, 0x45, 0xA3, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA6, 0x10, 0xEF, 0xF0, 0x75, 0xF0, 0x04, 0xB1, 0xE0, 0x54, 0x1F, \r
+0xFB, 0x60, 0x12, 0x64, 0x02, 0x60, 0x0E, 0xEB, 0x64, 0x04, 0x60, 0x09, 0xEB, 0x64, 0x09, 0x60, \r
+0x04, 0xEB, 0xB4, 0x0C, 0x07, 0xF1, 0xDB, 0x74, 0x02, 0xF0, 0x80, 0x05, 0xF1, 0xDB, 0x74, 0x01, \r
+0xF0, 0xE4, 0xF5, 0x69, 0x90, 0xA6, 0x10, 0xE0, 0xFD, 0xB1, 0xEC, 0x25, 0x69, 0x91, 0x89, 0xE0, \r
+0xFE, 0xEB, 0x75, 0xF0, 0x07, 0xA4, 0x24, 0xFE, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE5, \r
+0x82, 0x25, 0x69, 0x91, 0x89, 0xE4, 0x93, 0xFC, 0xEE, 0x5C, 0x90, 0xA6, 0x12, 0xF0, 0x75, 0xF0, \r
+0x04, 0xED, 0x31, 0x2E, 0x54, 0x03, 0xFF, 0xBF, 0x02, 0x0B, 0xE5, 0x69, 0x70, 0x07, 0x90, 0xA6, \r
+0x12, 0xE0, 0x54, 0xF0, 0xF0, 0x90, 0xA6, 0x12, 0xE0, 0xFF, 0xB1, 0xE8, 0x25, 0x69, 0x91, 0x89, \r
+0xEF, 0xF0, 0x05, 0x69, 0xE5, 0x69, 0x64, 0x07, 0x70, 0xAA, 0x90, 0xA6, 0x10, 0xE0, 0x75, 0xF0, \r
+0x04, 0x31, 0x2E, 0xFF, 0xC4, 0x54, 0x03, 0xF9, 0xE4, 0xFD, 0x75, 0x6A, 0x06, 0xE5, 0x6A, 0xB4, \r
+0x06, 0x07, 0x91, 0x78, 0xE0, 0x54, 0x0F, 0x80, 0x07, 0xB1, 0xE8, 0x25, 0x6A, 0x91, 0x89, 0xE0, \r
+0x90, 0xA6, 0x11, 0xF0, 0x90, 0xA6, 0x11, 0xE0, 0x60, 0x30, 0x75, 0x69, 0x07, 0x12, 0x91, 0x64, \r
+0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x12, 0x91, 0x38, 0x60, 0x13, 0x12, 0x91, \r
+0x2F, 0xFD, 0xE9, 0x60, 0x22, 0xED, 0xD3, 0x94, 0x0B, 0x40, 0x1C, 0x74, 0x20, 0x2D, 0xFD, 0x80, \r
+0x16, 0x15, 0x69, 0xE5, 0x69, 0xC3, 0x94, 0x00, 0x50, 0xD3, 0xE5, 0x6A, 0x60, 0x09, 0x15, 0x6A, \r
+0xE5, 0x6A, 0xC3, 0x94, 0x00, 0x50, 0xA6, 0xE4, 0xFC, 0xF5, 0x6A, 0xE5, 0x6A, 0xB4, 0x06, 0x07, \r
+0x91, 0x78, 0xE0, 0x54, 0x0F, 0x80, 0x07, 0xB1, 0xE8, 0x25, 0x6A, 0x91, 0x89, 0xE0, 0x90, 0xA6, \r
+0x11, 0xF0, 0x90, 0xA6, 0x11, 0xE0, 0x60, 0x2E, 0xE4, 0xF5, 0x69, 0x12, 0x91, 0x64, 0x80, 0x05, \r
+0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x12, 0x91, 0x38, 0x60, 0x13, 0x12, 0x91, 0x2F, 0xFC, \r
+0xE9, 0x60, 0x1B, 0xEC, 0xD3, 0x94, 0x0B, 0x40, 0x15, 0x74, 0x20, 0x2C, 0xFC, 0x80, 0x0F, 0x05, \r
+0x69, 0xE5, 0x69, 0xB4, 0x08, 0xD5, 0x05, 0x6A, 0xE5, 0x6A, 0x64, 0x07, 0x70, 0xAD, 0x90, 0xA6, \r
+0x10, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xF1, 0xC1, 0xED, 0xD1, 0xFB, 0xEC, 0xF0, 0x75, 0xF0, 0x10, \r
+0xEF, 0x12, 0x6D, 0x07, 0xE0, 0xFF, 0x54, 0x7F, 0xF5, 0x6B, 0xEF, 0x54, 0x80, 0xFF, 0xE5, 0x6B, \r
+0xD3, 0x9D, 0x40, 0x03, 0xED, 0x80, 0x07, 0xE5, 0x6B, 0xC3, 0x9C, 0x50, 0x04, 0xEC, 0x4F, 0xF5, \r
+0x6B, 0x90, 0xA6, 0x10, 0xE0, 0xFF, 0x24, 0x95, 0xF5, 0x82, 0xE4, 0x34, 0xA0, 0xF5, 0x83, 0xE5, \r
+0x6B, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x31, 0x2E, 0x12, 0x6E, 0xB1, 0x90, 0xA6, 0x10, 0xE0, 0xFF, \r
+0xE4, 0xFB, 0xAD, 0x6B, 0x12, 0x6A, 0xE4, 0x90, 0xA6, 0x10, 0xE0, 0x75, 0xF0, 0x10, 0x12, 0x66, \r
+0x86, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xFF, 0x90, 0xA6, 0x10, 0xE0, 0x75, 0xF0, 0x08, \r
+0x90, 0x89, 0x00, 0x12, 0x45, 0x97, 0xE5, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, \r
+0x22, 0x75, 0x40, 0xFF, 0x75, 0x41, 0x41, 0x75, 0x42, 0xDB, 0x75, 0x43, 0x03, 0x7B, 0x01, 0x7A, \r
+0xA2, 0x79, 0x9F, 0xF1, 0xD4, 0x75, 0x41, 0x41, 0x75, 0x42, 0xDE, 0x75, 0x43, 0x03, 0x7B, 0x01, \r
+0x7A, 0xA2, 0x79, 0xA2, 0xF1, 0xD4, 0x75, 0x41, 0x41, 0x75, 0x42, 0xE1, 0x75, 0x43, 0x14, 0x7B, \r
+0x01, 0x7A, 0xA2, 0x79, 0xA5, 0xF1, 0xD4, 0x75, 0x41, 0x41, 0x75, 0x42, 0xF5, 0x75, 0x43, 0x14, \r
+0x7B, 0x01, 0x7A, 0xA2, 0x79, 0xB9, 0x12, 0x35, 0x26, 0xE4, 0xFF, 0xE4, 0xFE, 0x74, 0x95, 0x2F, \r
+0xF1, 0x0B, 0xE0, 0x54, 0xFE, 0xF0, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x00, 0xBE, 0x03, 0x0D, \r
+0x12, 0x45, 0x97, 0xE5, 0x82, 0x2E, 0x91, 0x89, 0x74, 0x80, 0xF0, 0x80, 0x0A, 0x12, 0x45, 0x97, \r
+0xE5, 0x82, 0x2E, 0x91, 0x89, 0xE4, 0xF0, 0x75, 0xF0, 0x08, 0xEF, 0xB1, 0xEF, 0x2E, 0x91, 0x89, \r
+0xE4, 0xF0, 0x0E, 0xBE, 0x10, 0xC7, 0x0F, 0xBF, 0x80, 0xC1, 0xE4, 0x90, 0xAD, 0xE2, 0xF0, 0x90, \r
 0x94, 0x91, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xE4, 0xFE, 0x75, 0xF0, 0x0A, \r
 0x94, 0x91, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xE4, 0xFE, 0x75, 0xF0, 0x0A, \r
-0xEF, 0x90, 0x8D, 0x01, 0x12, 0x45, 0x49, 0x75, 0xF0, 0x02, 0xEE, 0x12, 0x45, 0x49, 0xE4, 0xF0, \r
-0xA3, 0xF0, 0x0E, 0xBE, 0x05, 0xE7, 0xEF, 0x25, 0xE0, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x92, \r
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x98, 0xF5, 0x83, \r
-0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x16, 0xF5, 0x82, 0xE4, 0x34, 0x9B, 0xF5, 0x83, 0xE4, 0xF0, \r
-0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x16, 0xF5, 0x82, 0xE4, 0x34, 0x9C, 0xF5, 0x83, 0xE4, 0xF0, \r
-0xA3, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x16, 0x12, 0x45, 0x49, 0x74, 0x13, 0xF0, 0x75, \r
-0xF0, 0x04, 0xEF, 0x90, 0x96, 0x17, 0x12, 0x45, 0x49, 0xE4, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, \r
-0x96, 0x18, 0x12, 0x45, 0x49, 0xE0, 0x54, 0xE0, 0x44, 0x09, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, \r
-0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0x54, 0xF3, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x19, \r
-0x12, 0x45, 0x49, 0xE0, 0x54, 0xFC, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x18, 0x12, 0x45, \r
-0x49, 0xE0, 0x44, 0x20, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, \r
-0x54, 0xCF, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0x44, 0x40, \r
-0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0x54, 0x7F, 0xF0, 0x75, \r
-0xF0, 0x04, 0xEF, 0x90, 0x96, 0x17, 0x12, 0x45, 0x49, 0xE0, 0xFE, 0x75, 0xF0, 0x10, 0xEF, 0x90, \r
-0x81, 0x00, 0x12, 0x45, 0x49, 0xEE, 0xF0, 0x74, 0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, \r
-0x83, 0xE4, 0xF0, 0x0F, 0xEF, 0x64, 0x80, 0x60, 0x02, 0x41, 0x3B, 0x74, 0x96, 0x2F, 0xF5, 0x82, \r
-0xE4, 0x34, 0x98, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, \r
-0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0x49, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, \r
-0x53, 0xFF, 0xA3, 0xF0, 0xED, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, \r
-0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, \r
-0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, \r
-0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x7A, 0xF0, 0x74, 0x53, 0xA3, \r
-0xF0, 0x12, 0x47, 0x70, 0xE5, 0x14, 0x30, 0xE7, 0x03, 0x12, 0x47, 0xD2, 0x74, 0x7A, 0x04, 0x90, \r
-0x01, 0xC4, 0xF0, 0x74, 0x53, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, \r
-0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, \r
-0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, \r
-0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, \r
-0x01, 0xC4, 0x74, 0xD2, 0xF0, 0x74, 0x53, 0xA3, 0xF0, 0x12, 0x5D, 0xF0, 0xE5, 0x19, 0x30, 0xE1, \r
-0x02, 0xB1, 0x62, 0xE5, 0x19, 0x30, 0xE3, 0x02, 0xF1, 0x5F, 0xE5, 0x19, 0x30, 0xE4, 0x02, 0xF1, \r
-0x42, 0xE5, 0x19, 0x30, 0xE5, 0x03, 0x12, 0x5D, 0x46, 0xE5, 0x1B, 0x30, 0xE0, 0x02, 0xF1, 0x56, \r
-0xE5, 0x1B, 0x30, 0xE1, 0x02, 0xF1, 0x6A, 0xE5, 0x1B, 0x30, 0xE7, 0x03, 0x12, 0x5E, 0x1D, 0xE5, \r
-0x1C, 0x30, 0xE0, 0x03, 0x12, 0x5E, 0x2F, 0xE5, 0x1C, 0x30, 0xE4, 0x02, 0xB1, 0xE7, 0xE5, 0x1C, \r
-0x30, 0xE5, 0x02, 0x91, 0x6B, 0x74, 0xD2, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x53, 0xA3, 0xF0, \r
-0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, \r
-0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xE4, 0xF5, 0x60, 0x74, 0xAE, \r
-0x25, 0x60, 0xF5, 0x82, 0xE4, 0x34, 0xA0, 0xF5, 0x83, 0xE0, 0x70, 0x02, 0xA1, 0x56, 0xE5, 0x60, \r
-0x13, 0x13, 0x13, 0x54, 0x1F, 0xFF, 0xE5, 0x60, 0x54, 0x07, 0xFE, 0x74, 0x81, 0x2F, 0xF5, 0x82, \r
-0xE4, 0x34, 0x94, 0xF5, 0x83, 0xE0, 0xFD, 0xAF, 0x06, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, \r
-0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0xA1, 0x56, \r
-0x75, 0xF0, 0x10, 0xE5, 0x60, 0x90, 0x81, 0x01, 0x12, 0x45, 0x49, 0xE0, 0x20, 0xE7, 0x02, 0x80, \r
-0x10, 0x75, 0xF0, 0x10, 0xE5, 0x60, 0x90, 0x81, 0x02, 0x12, 0x45, 0x49, 0xE0, 0xFF, 0x20, 0xE7, \r
-0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x20, 0xF0, 0x80, 0x7C, 0xEF, 0x30, 0xE6, 0x21, 0x75, 0xF0, \r
-0x10, 0xE5, 0x60, 0x90, 0x81, 0x00, 0x12, 0x45, 0x49, 0xE0, 0xFD, 0x75, 0xF0, 0x10, 0xE5, 0x60, \r
-0x90, 0x81, 0x05, 0x12, 0x45, 0x49, 0xE0, 0x54, 0x03, 0xF5, 0x67, 0xE4, 0xFB, 0x80, 0x52, 0x74, \r
-0x96, 0x25, 0x60, 0xF5, 0x82, 0xE4, 0x34, 0x9E, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x74, 0x96, 0x25, \r
-0x60, 0xF5, 0x82, 0xE4, 0x34, 0x9E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x03, 0x40, 0x14, 0xAF, 0x60, \r
-0x12, 0x6C, 0x58, 0x74, 0x96, 0x25, 0x60, 0xF5, 0x82, 0xE4, 0x34, 0x9E, 0xF5, 0x83, 0xE4, 0xF0, \r
-0x80, 0x24, 0x75, 0xF0, 0x10, 0xE5, 0x60, 0x90, 0x81, 0x00, 0x12, 0x45, 0x49, 0xE0, 0xFD, 0x75, \r
-0xF0, 0x10, 0xE5, 0x60, 0x90, 0x81, 0x05, 0x12, 0x45, 0x49, 0xE0, 0x54, 0x03, 0xF5, 0x67, 0x7B, \r
-0x01, 0xAF, 0x60, 0x12, 0x66, 0xD1, 0x05, 0x60, 0xE5, 0x60, 0xC3, 0x94, 0x80, 0x50, 0x02, 0x81, \r
-0x6E, 0x22, 0xE4, 0xFF, 0x90, 0xA1, 0xC8, 0xEF, 0xF0, 0x90, 0x04, 0x7E, 0xE0, 0xF5, 0x61, 0xA3, \r
-0xE0, 0xF5, 0x62, 0x65, 0x61, 0x60, 0x6F, 0x90, 0xA1, 0xC9, 0x74, 0x03, 0xF0, 0x90, 0xA1, 0xD7, \r
-0x74, 0x08, 0xF0, 0xE5, 0x62, 0x04, 0x54, 0x0F, 0xF5, 0x63, 0xE4, 0xF5, 0x60, 0xE5, 0x63, 0x75, \r
-0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, 0xE5, 0x82, 0x25, 0x60, \r
-0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0xCB, 0x25, 0x60, 0xF5, 0x82, 0xE4, \r
-0x34, 0xA1, 0xF5, 0x83, 0xEF, 0xF0, 0x05, 0x60, 0xE5, 0x60, 0xB4, 0x08, 0xD0, 0x7B, 0x01, 0x7A, \r
-0xA1, 0x79, 0xC9, 0x12, 0x4F, 0x60, 0xE5, 0x62, 0x04, 0x54, 0x0F, 0xF5, 0x62, 0xB4, 0x0F, 0x03, \r
-0xE4, 0xF5, 0x62, 0x90, 0x04, 0x7F, 0xE5, 0x62, 0xF0, 0x90, 0xA1, 0xC8, 0xE0, 0x7F, 0x04, 0x70, \r
-0x02, 0xE1, 0x47, 0x12, 0x4E, 0x95, 0x22, 0xE4, 0xFF, 0x90, 0xA1, 0xD8, 0xEF, 0xF0, 0xE4, 0xA3, \r
-0xF0, 0x90, 0xA1, 0xD9, 0xE0, 0xFF, 0xC3, 0x94, 0x80, 0x50, 0x48, 0x74, 0xDA, 0x2F, 0xF5, 0x82, \r
-0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE4, 0xF0, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x03, 0x12, 0x45, \r
-0x49, 0xE0, 0x90, 0xA1, 0xD9, 0x30, 0xE7, 0x0E, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x93, \r
-0xF5, 0x83, 0xE4, 0xF0, 0x80, 0x15, 0xE0, 0xFF, 0x12, 0x72, 0x39, 0x90, 0xA1, 0xD9, 0xE0, 0x24, \r
-0xDA, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x90, 0xA1, 0xD9, 0xE0, 0x04, \r
-0xF0, 0x80, 0xAE, 0x7F, 0x0C, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0xE4, 0x90, 0xA1, 0xD9, 0xF0, 0x90, \r
-0xA1, 0xD9, 0xE0, 0xFF, 0xC3, 0x94, 0x80, 0x40, 0x02, 0xE1, 0x41, 0x74, 0xDA, 0x2F, 0xF5, 0x82, \r
-0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE0, 0x70, 0x02, 0xE1, 0x39, 0x90, 0xA1, 0xD9, 0xE0, 0xFF, 0x75, \r
-0xF0, 0x10, 0x90, 0x81, 0x06, 0x12, 0x45, 0x49, 0xE0, 0xFD, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, \r
-0x07, 0x12, 0x45, 0x49, 0xE0, 0xFE, 0xED, 0xFF, 0x90, 0xA1, 0xD9, 0xE0, 0xFC, 0x25, 0xE0, 0x24, \r
-0x01, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x10, \r
-0xEC, 0x90, 0x81, 0x0A, 0x12, 0x45, 0x49, 0xE0, 0xFD, 0x75, 0xF0, 0x10, 0xEC, 0x90, 0x81, 0x0B, \r
-0x12, 0x45, 0x49, 0xE0, 0xFE, 0xED, 0xFF, 0x90, 0xA1, 0xD9, 0xE0, 0x75, 0xF0, 0x0A, 0x90, 0x8D, \r
-0x01, 0x12, 0x45, 0x49, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7F, 0x01, 0x90, 0xA1, 0xD9, 0xE0, 0xFE, \r
-0x75, 0xF0, 0x10, 0x90, 0x81, 0x0B, 0x12, 0x45, 0x49, 0xE5, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x35, \r
-0x83, 0xF5, 0x83, 0xE0, 0xFD, 0x75, 0xF0, 0x0A, 0xEE, 0x90, 0x8D, 0x01, 0x12, 0x45, 0x49, 0x75, \r
-0xF0, 0x02, 0xEF, 0x12, 0x45, 0x49, 0xE4, 0xF0, 0xA3, 0xED, 0xF0, 0x0F, 0xEF, 0xB4, 0x05, 0xCB, \r
-0x90, 0xA1, 0xD9, 0xE0, 0xFF, 0x75, 0xF0, 0x10, 0x90, 0x81, 0x09, 0x12, 0x45, 0x49, 0xE0, 0xFE, \r
-0x74, 0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x98, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0xA1, 0xD9, 0xE0, \r
-0xFF, 0x90, 0xA1, 0xD8, 0xE0, 0xFD, 0x12, 0x68, 0x89, 0x90, 0xA1, 0xD9, 0xE0, 0x24, 0x81, 0xF5, \r
-0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x90, 0xA1, 0xD9, 0xE0, 0x04, 0xF0, 0xC1, \r
-0x4F, 0x22, 0x12, 0x5B, 0x24, 0x7F, 0x02, 0x8F, 0x6B, 0x7F, 0x02, 0x12, 0x44, 0x57, 0x90, 0x9F, \r
-0x97, 0xE0, 0x45, 0x6B, 0xF0, 0x22, 0x90, 0xA0, 0x8F, 0xE0, 0x60, 0x02, 0xF1, 0x85, 0x22, 0x90, \r
-0xA0, 0x8F, 0xE0, 0x60, 0x04, 0x7F, 0x20, 0xF1, 0x47, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, \r
-0xFF, 0xBF, 0x03, 0x0D, 0x90, 0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x90, 0x05, 0x21, 0xE0, 0x44, 0x80, \r
-0xF0, 0x7F, 0x01, 0x80, 0xC2, 0x90, 0xA0, 0x96, 0xE0, 0xFD, 0x7C, 0x00, 0xA3, 0xE0, 0xFE, 0xA3, \r
-0xE0, 0xFF, 0x12, 0x07, 0x15, 0xED, 0x4C, 0x70, 0x05, 0x90, 0xA0, 0xA3, 0x80, 0x2A, 0xED, 0x64, \r
-0x01, 0x4C, 0x70, 0x05, 0x90, 0xA0, 0xA4, 0x80, 0x1F, 0xED, 0x64, 0x02, 0x4C, 0x70, 0x05, 0x90, \r
-0xA0, 0xA5, 0x80, 0x14, 0xED, 0x64, 0x03, 0x4C, 0x70, 0x05, 0x90, 0xA0, 0xA6, 0x80, 0x09, 0xED, \r
-0x64, 0x04, 0x4C, 0x70, 0x11, 0x90, 0xA0, 0xA7, 0xE0, 0xFF, 0xF1, 0xD7, 0x90, 0xA0, 0x97, 0xE4, \r
-0x75, 0xF0, 0x01, 0x12, 0x08, 0xD6, 0x22, 0x90, 0x04, 0x24, 0xEF, 0xF0, 0x90, 0x04, 0x57, 0xF0, \r
-0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, \r
-0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, \r
-0xC4, 0x74, 0xE1, 0xF0, 0x74, 0x57, 0xA3, 0xF0, 0x11, 0x3A, 0xE5, 0x24, 0x30, 0xE1, 0x05, 0x7F, \r
-0x04, 0x12, 0x57, 0x47, 0x74, 0xE1, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x57, 0xA3, 0xF0, 0xD0, \r
-0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, \r
-0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x1D, \r
-0xF5, 0x21, 0xA3, 0xE0, 0x55, 0x1E, 0xF5, 0x22, 0xA3, 0xE0, 0x55, 0x1F, 0xF5, 0x23, 0xA3, 0xE0, \r
-0x55, 0x20, 0xF5, 0x24, 0x90, 0x01, 0x3C, 0xE5, 0x21, 0xF0, 0xA3, 0xE5, 0x22, 0xF0, 0xA3, 0xE5, \r
-0x23, 0xF0, 0xA3, 0xE5, 0x24, 0xF0, 0x53, 0x91, 0xDF, 0x22, 0x32, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, \r
-0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0x6B, 0x90, 0x01, 0xC4, 0xED, \r
-0xF0, 0x74, 0x58, 0xFF, 0xA3, 0xF0, 0xED, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, \r
-0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0x74, 0x15, 0x2F, 0xF8, \r
-0xE6, 0x4D, 0xFE, 0xF6, 0x74, 0x30, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x01, 0xF5, 0x83, 0xEE, 0xF0, \r
-0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, \r
-0x3E, 0x90, 0xA0, 0x8D, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x02, 0x86, 0xE0, 0x44, 0x04, 0xF0, 0x90, \r
-0xA0, 0x8F, 0x74, 0x01, 0xF0, 0x7D, 0x08, 0xE4, 0xFF, 0x11, 0x9C, 0x90, 0x05, 0x52, 0xE0, 0x54, \r
-0x07, 0x04, 0x90, 0xA0, 0x96, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0x22, 0xE0, 0x54, \r
-0xEF, 0xF0, 0x22, 0x90, 0xA1, 0x44, 0x12, 0x45, 0x5E, 0x12, 0x06, 0x89, 0xB4, 0x01, 0x04, 0x11, \r
-0xB1, 0x80, 0x02, 0x31, 0x84, 0x90, 0xA1, 0x44, 0x12, 0x45, 0x55, 0x90, 0x00, 0x01, 0x12, 0x06, \r
-0xA2, 0x90, 0xA0, 0x90, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x06, 0xA2, 0x90, 0xA0, 0x91, 0xF0, 0x90, \r
-0xA0, 0x90, 0xE0, 0x54, 0x01, 0x90, 0xA0, 0x99, 0xF0, 0x90, 0xA0, 0x90, 0xE0, 0x54, 0x02, 0x90, \r
-0xA0, 0x9A, 0xF0, 0x90, 0xA0, 0x90, 0xE0, 0x54, 0x04, 0x90, 0xA0, 0x9B, 0xF0, 0x90, 0xA0, 0x90, \r
-0xE0, 0x54, 0x08, 0x90, 0xA0, 0x9C, 0xF0, 0x90, 0xA0, 0x90, 0xE0, 0x54, 0x10, 0x90, 0xA0, 0x9D, \r
-0xF0, 0x90, 0xA0, 0x91, 0xE0, 0x54, 0x01, 0x90, 0xA0, 0x9E, 0xF0, 0x90, 0xA0, 0x91, 0xE0, 0x54, \r
-0x02, 0x90, 0xA0, 0x9F, 0xF0, 0x90, 0xA0, 0x91, 0xE0, 0x54, 0x04, 0x90, 0xA0, 0xA0, 0xF0, 0x90, \r
-0xA0, 0x91, 0xE0, 0x54, 0x08, 0x90, 0xA0, 0xA1, 0xF0, 0x90, 0xA0, 0x91, 0xE0, 0x54, 0x10, 0x90, \r
-0xA0, 0xA2, 0xF0, 0x22, 0xC2, 0xAF, 0xE4, 0x90, 0xA0, 0x8F, 0xF0, 0x7D, 0x08, 0xFF, 0x31, 0xAA, \r
-0x90, 0x02, 0x09, 0xE0, 0x90, 0x04, 0x24, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0x90, 0x04, 0x25, 0xF0, \r
-0xE4, 0x90, 0xA0, 0x97, 0xF0, 0xA3, 0xF0, 0xD2, 0xAF, 0x22, 0x74, 0x15, 0x2F, 0xF8, 0xE6, 0xFE, \r
-0xED, 0xF4, 0x5E, 0xFE, 0xF6, 0x74, 0x30, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x01, 0xF5, 0x83, 0xEE, \r
-0xF0, 0x22, 0x74, 0x1D, 0x2F, 0xF8, 0xE6, 0x4D, 0xFE, 0xF6, 0x74, 0x38, 0x2F, 0xF5, 0x82, 0xE4, \r
-0x34, 0x01, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0x74, 0x1D, 0x2F, 0xF8, 0xE6, 0xFE, 0xED, 0xF4, 0x5E, \r
-0xFE, 0xF6, 0x74, 0x38, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x01, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0x90, \r
-0xA2, 0xF3, 0xEF, 0xF0, 0x7F, 0x02, 0x12, 0x44, 0x57, 0x90, 0x9F, 0x98, 0xE0, 0xFF, 0x90, 0xA2, \r
-0xF3, 0xE0, 0xFE, 0xEF, 0x4E, 0x90, 0x9F, 0x98, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xF5, 0x51, \r
-0x12, 0x06, 0x89, 0x25, 0x51, 0x90, 0x9F, 0x9D, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x06, 0xA2, 0x25, \r
-0x51, 0x90, 0x9F, 0x9E, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x06, 0xA2, 0x25, 0x51, 0x90, 0x9F, 0x9F, \r
-0xF0, 0x90, 0x00, 0x03, 0x12, 0x06, 0xA2, 0x25, 0x51, 0x90, 0x9F, 0xA0, 0xF0, 0x90, 0x00, 0x04, \r
-0x12, 0x06, 0xA2, 0x25, 0x51, 0x90, 0x9F, 0xA1, 0xF0, 0x90, 0x00, 0x05, 0x12, 0x06, 0xA2, 0x25, \r
-0x51, 0x90, 0x9F, 0xA2, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x90, 0xA0, 0xA3, 0xF0, 0x90, 0x00, 0x01, \r
-0x12, 0x06, 0xA2, 0x90, 0xA0, 0xA4, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x06, 0xA2, 0x90, 0xA0, 0xA5, \r
-0xF0, 0x90, 0x00, 0x03, 0x12, 0x06, 0xA2, 0x90, 0xA0, 0xA6, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x06, \r
-0xA2, 0x90, 0xA0, 0xA7, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x90, 0xA0, 0xA8, 0xF0, 0x90, 0x00, 0x01, \r
-0x12, 0x06, 0xA2, 0x90, 0xA0, 0xA9, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x06, 0xA2, 0x90, 0xA0, 0xAA, \r
-0xF0, 0x90, 0x00, 0x03, 0x12, 0x06, 0xA2, 0x90, 0xA0, 0xAB, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x06, \r
-0xA2, 0x90, 0xA0, 0xAC, 0xF0, 0x22, 0x12, 0x06, 0x89, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0xA1, 0x2F, \r
-0xE0, 0x54, 0x7F, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xEE, 0x54, 0xBF, 0x4F, 0xFF, 0xF0, \r
-0x12, 0x06, 0x89, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90, 0xA1, 0x2F, 0xF0, \r
-0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x06, 0x89, 0x54, 0x0F, 0xFE, \r
-0xEF, 0x54, 0xF0, 0x4E, 0x90, 0xA1, 0x2F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x06, 0xA2, 0x90, 0xA1, \r
-0x30, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x06, 0xA2, 0x90, 0xA1, 0x31, 0xF0, 0x90, 0xA1, 0x2F, 0xE0, \r
-0xFE, 0x54, 0x0F, 0xFF, 0xEE, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x7D, 0x00, 0x20, 0xE0, 0x02, 0x7D, \r
-0x01, 0x02, 0x46, 0x4F, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0xA2, 0xE7, 0xF0, 0x90, 0xA2, \r
-0xE7, 0xE0, 0xFD, 0x70, 0x02, 0x81, 0x73, 0x90, 0x9F, 0xF3, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, \r
-0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x9F, 0xF4, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, \r
-0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, \r
-0xA2, 0xE5, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, \r
-0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0x81, 0x50, 0xE4, 0x90, 0xA2, 0xE8, 0xF0, \r
-0x90, 0xA2, 0xE8, 0xE0, 0xF9, 0xC3, 0x94, 0x04, 0x50, 0x73, 0x90, 0xA2, 0xE5, 0xE0, 0x75, 0xF0, \r
-0x04, 0xA4, 0xFF, 0xE9, 0xFD, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xD0, 0x2F, \r
-0xF5, 0x82, 0x74, 0x01, 0x3E, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x9F, 0xF4, 0xE0, 0x75, 0xF0, 0x08, \r
-0x90, 0x9F, 0xA3, 0x12, 0x45, 0x49, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, \r
-0xEF, 0xF0, 0x90, 0xA2, 0xE5, 0xE0, 0x75, 0xF0, 0x04, 0xA4, 0x2D, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, \r
-0x74, 0xF0, 0x2F, 0xF5, 0x82, 0x74, 0x01, 0x3E, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x9F, 0xF4, 0xE0, \r
-0x75, 0xF0, 0x08, 0x90, 0x9F, 0xA7, 0x12, 0x45, 0x49, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE4, 0x35, \r
-0x83, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0xA2, 0xE8, 0xE0, 0x04, 0xF0, 0x80, 0x83, 0x90, 0xA2, 0xE7, \r
-0xE0, 0xFF, 0x90, 0xA2, 0xE5, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, \r
-0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0xA2, 0xE7, 0xF0, 0x90, 0xA2, 0xE5, 0xE0, 0xFF, 0x74, 0x01, 0xA8, \r
-0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0xA2, 0xE5, 0xE0, \r
-0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x90, 0x9F, 0xF4, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00, 0xB4, \r
-0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x70, 0x02, 0x61, 0x2E, 0xE4, 0x90, 0x9F, 0xF4, 0xF0, 0x61, 0x2E, \r
-0x90, 0x01, 0xC0, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0xA2, 0xE5, 0xE0, 0x44, 0x80, 0x90, 0x00, 0x8A, \r
-0xF0, 0x90, 0xA2, 0xE5, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x45, 0x49, 0xE0, 0x90, \r
-0x01, 0xC3, 0xF0, 0x22, 0x90, 0xA2, 0xD0, 0xEF, 0xF0, 0xA3, 0x12, 0x45, 0x5E, 0x90, 0xA2, 0xE6, \r
-0xE0, 0xFE, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEE, 0x12, 0x06, 0xE1, 0x74, 0x00, 0x2F, 0xF9, 0xE4, \r
-0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0xA2, 0xD1, 0x12, 0x45, \r
-0x55, 0x8B, 0x40, 0x8A, 0x41, 0x89, 0x42, 0x75, 0x43, 0x02, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, \r
-0x12, 0x35, 0x26, 0x90, 0xA2, 0xD0, 0xE0, 0x24, 0x02, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, \r
-0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0xA3, 0x12, 0x45, 0x55, 0xE9, 0x24, 0x02, 0xF9, 0xE4, 0x3A, \r
-0x8B, 0x40, 0xF5, 0x41, 0x89, 0x42, 0x90, 0xA2, 0xD1, 0x12, 0x45, 0x55, 0x90, 0x00, 0x0E, 0x12, \r
-0x06, 0xA2, 0xF5, 0x43, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x02, 0x35, 0x26, 0x90, 0xA2, 0xDC, \r
-0x12, 0x45, 0x5E, 0xE4, 0xFF, 0x90, 0xA2, 0xDC, 0x12, 0x45, 0x55, 0x8F, 0x82, 0x75, 0x83, 0x00, \r
-0x12, 0x06, 0xA2, 0xFE, 0x74, 0xF0, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x02, 0xF5, 0x83, 0xEE, 0xF0, \r
-0x0F, 0xEF, 0xB4, 0x10, 0xE0, 0x22, 0x90, 0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, \r
-0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x12, 0x46, \r
-0x35, 0xE4, 0xFD, 0x7F, 0x51, 0x12, 0x46, 0x35, 0xE4, 0xFD, 0x7F, 0x52, 0x12, 0x46, 0x35, 0xE4, \r
-0xFD, 0x7F, 0x53, 0x02, 0x46, 0x35, 0x90, 0x01, 0xCF, 0xE0, 0x90, 0xA1, 0xC8, 0xF0, 0xE0, 0xFF, \r
-0x30, 0xE0, 0x07, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x30, 0xE5, 0x22, 0x90, 0x01, \r
-0xCF, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0xE4, 0xF5, 0xA8, 0xF5, 0xE8, \r
-0xB1, 0x16, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x03, 0x12, 0x46, 0x35, 0x80, 0xFE, \r
-0x22, 0x90, 0x01, 0x34, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x3C, \r
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x12, 0x46, 0x35, 0x7D, 0xFF, 0x7F, \r
-0x55, 0x12, 0x46, 0x35, 0x7D, 0xFF, 0x7F, 0x56, 0x12, 0x46, 0x35, 0x7D, 0xFF, 0x7F, 0x57, 0x02, \r
-0x46, 0x35, 0x75, 0x15, 0x12, 0xE4, 0xF5, 0x16, 0x75, 0x17, 0x87, 0x75, 0x18, 0x33, 0x90, 0x01, \r
-0x30, 0xE5, 0x15, 0xF0, 0xA3, 0xE5, 0x16, 0xF0, 0xA3, 0xE5, 0x17, 0xF0, 0xA3, 0xE5, 0x18, 0xF0, \r
-0x22, 0x75, 0x1D, 0x06, 0x75, 0x1E, 0x01, 0x75, 0x1F, 0x03, 0x75, 0x20, 0x62, 0x90, 0x01, 0x38, \r
-0xE5, 0x1D, 0xF0, 0xA3, 0xE5, 0x1E, 0xF0, 0xA3, 0xE5, 0x1F, 0xF0, 0xA3, 0xE5, 0x20, 0xF0, 0x22, \r
-0x90, 0x01, 0x34, 0xE0, 0x55, 0x15, 0xF5, 0x19, 0xA3, 0xE0, 0x55, 0x16, 0xF5, 0x1A, 0xA3, 0xE0, \r
-0x55, 0x17, 0xF5, 0x1B, 0xA3, 0xE0, 0x55, 0x18, 0xF5, 0x1C, 0x90, 0x01, 0x34, 0xE5, 0x19, 0xF0, \r
-0xA3, 0xE5, 0x1A, 0xF0, 0xA3, 0xE5, 0x1B, 0xF0, 0xA3, 0xE5, 0x1C, 0xF0, 0x22, 0x90, 0x01, 0x02, \r
-0xE0, 0x54, 0x03, 0xFF, 0xBF, 0x03, 0x07, 0x90, 0x05, 0x21, 0xE0, 0x54, 0x7F, 0xF0, 0x22, 0x90, \r
-0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xBF, 0x03, 0x07, 0x90, 0x05, 0x21, 0xE0, 0x54, 0x7F, 0xF0, \r
-0x22, 0x90, 0xA1, 0x2F, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x0A, 0xEF, \r
-0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x12, 0x4F, 0x44, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
-0xD0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, \r
-0x01, 0xC0, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, \r
-0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, \r
-0xA2, 0xE0, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0xA2, 0xDF, 0xEF, 0xF0, 0xE4, 0xFD, 0xFC, 0x12, \r
-0x75, 0xD1, 0x7C, 0x00, 0xAD, 0x07, 0x90, 0xA2, 0xDF, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90, 0xA2, \r
-0xE0, 0xE0, 0x60, 0x0E, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, \r
+0xEF, 0x12, 0x66, 0x12, 0x75, 0xF0, 0x02, 0xEE, 0x12, 0x66, 0x8C, 0xF0, 0x0E, 0xBE, 0x05, 0xED, \r
+0x74, 0x15, 0x2F, 0xF1, 0xE1, 0xE4, 0x12, 0x66, 0xA5, 0xD1, 0x13, 0x12, 0x66, 0x9A, 0xE4, 0xF0, \r
+0xEF, 0x12, 0x6E, 0xA7, 0xD1, 0x13, 0xEF, 0x12, 0x6E, 0x98, 0xD1, 0x03, 0xEF, 0x12, 0x6F, 0x92, \r
+0xD1, 0x13, 0xF1, 0xBD, 0x74, 0x13, 0xD1, 0xFB, 0xE4, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0xB1, 0xE0, \r
+0x54, 0xE0, 0x44, 0x09, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x31, 0x2E, 0x54, 0xF3, 0xF0, 0x75, 0xF0, \r
+0x04, 0xEF, 0x31, 0x2E, 0x54, 0xFC, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0xB1, 0xE0, 0x44, 0x20, 0xF0, \r
+0x75, 0xF0, 0x04, 0xEF, 0x31, 0x2E, 0x54, 0xCF, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x31, 0x2E, 0x44, \r
+0x40, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x31, 0x2E, 0x54, 0x7F, 0xD1, 0xFB, 0xE0, 0xFE, 0x75, 0xF0, \r
+0x10, 0xEF, 0x12, 0x6D, 0x07, 0xEE, 0xF0, 0x74, 0x95, 0x2F, 0xF1, 0x0B, 0xE4, 0xF0, 0x0F, 0xEF, \r
+0x64, 0x80, 0x60, 0x02, 0xA1, 0x2B, 0x74, 0x15, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, \r
+0x74, 0xFF, 0xF0, 0x90, 0x04, 0x21, 0x74, 0x0F, 0xF0, 0x22, 0xFF, 0x75, 0xF0, 0x04, 0xE5, 0x51, \r
+0x90, 0x96, 0x17, 0x12, 0x45, 0x97, 0xE0, 0x22, 0x90, 0xA6, 0x10, 0xE0, 0x75, 0xF0, 0x08, 0x90, \r
+0x89, 0x00, 0x12, 0x45, 0x97, 0xE5, 0x82, 0x22, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x95, 0xF5, 0x82, \r
+0xE4, 0x34, 0x9F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x15, 0xF5, 0x82, \r
+0xE4, 0x34, 0x9E, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x22, 0x8F, 0x54, 0x90, 0xA4, 0x7C, 0x74, \r
+0x0E, 0xF0, 0xED, 0x24, 0xFE, 0x60, 0x54, 0x04, 0x60, 0x02, 0xC1, 0xE2, 0x12, 0x91, 0x0A, 0x74, \r
+0x0C, 0xF0, 0x74, 0x15, 0x25, 0x54, 0xF1, 0xCC, 0xE0, 0x90, 0xA4, 0x7F, 0xD1, 0xEA, 0x31, 0x2E, \r
+0xFD, 0x13, 0x13, 0x54, 0x03, 0x90, 0xA4, 0x80, 0xF0, 0xED, 0xD1, 0xF4, 0xA3, 0xD1, 0xEA, 0x31, \r
+0x2E, 0xFF, 0xC4, 0x54, 0x03, 0x90, 0xA4, 0x82, 0xD1, 0xEA, 0xF1, 0xC1, 0xE0, 0x90, 0xA4, 0x83, \r
+0xD1, 0xEA, 0xF1, 0x00, 0xE0, 0x90, 0xA4, 0x84, 0xD1, 0xEA, 0xB1, 0xE0, 0xFD, 0xC4, 0x13, 0x54, \r
+0x01, 0x90, 0xA4, 0x85, 0xF0, 0xED, 0x54, 0x1F, 0xA3, 0x80, 0x60, 0x12, 0x91, 0x0A, 0x74, 0x0D, \r
+0xD1, 0xE3, 0x90, 0x89, 0x00, 0x12, 0x45, 0x97, 0xE0, 0x90, 0xA4, 0x7F, 0xD1, 0xE3, 0x90, 0x89, \r
+0x01, 0x12, 0x45, 0x97, 0xE0, 0x90, 0xA4, 0x80, 0xD1, 0xE3, 0x90, 0x89, 0x02, 0x12, 0x45, 0x97, \r
+0xE0, 0x90, 0xA4, 0x81, 0xD1, 0xE3, 0x90, 0x89, 0x03, 0x12, 0x45, 0x97, 0xE0, 0x90, 0xA4, 0x82, \r
+0xD1, 0xE3, 0x90, 0x89, 0x04, 0x12, 0x45, 0x97, 0xE0, 0x90, 0xA4, 0x83, 0xD1, 0xE3, 0x90, 0x89, \r
+0x05, 0x12, 0x45, 0x97, 0xE0, 0x90, 0xA4, 0x84, 0xD1, 0xE3, 0x90, 0x89, 0x06, 0x12, 0x45, 0x97, \r
+0xE0, 0x90, 0xA4, 0x85, 0xD1, 0xE3, 0xF1, 0xF6, 0x90, 0xA4, 0x86, 0xF0, 0x12, 0x7C, 0x98, 0x12, \r
+0x77, 0x82, 0x22, 0xF0, 0x75, 0xF0, 0x08, 0xE5, 0x54, 0x22, 0xF0, 0x75, 0xF0, 0x04, 0xE5, 0x54, \r
+0x22, 0xEF, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x22, 0xF0, 0x75, 0xF0, 0x04, 0xEF, \r
+0x90, 0x96, 0x16, 0x02, 0x45, 0x97, 0xF0, 0x74, 0x95, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x99, \r
+0xF5, 0x83, 0x22, 0xF1, 0xF0, 0x12, 0x06, 0x89, 0xF5, 0x51, 0x24, 0x95, 0xF1, 0x0B, 0xE0, 0x54, \r
+0x9C, 0xF1, 0x06, 0xC0, 0x83, 0xC0, 0x82, 0xF1, 0xA7, 0x54, 0x01, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, \r
+0xD0, 0x83, 0xF1, 0x06, 0xC0, 0x83, 0xC0, 0x82, 0xF1, 0xA7, 0x54, 0x02, 0xFE, 0xEF, 0x4E, 0xD0, \r
+0x82, 0xD0, 0x83, 0xF1, 0x06, 0xC0, 0x83, 0xC0, 0x82, 0xF1, 0xA7, 0x54, 0x04, 0xFE, 0xEF, 0x4E, \r
+0xD0, 0x82, 0xD0, 0x83, 0xF1, 0x06, 0xC0, 0x83, 0xC0, 0x82, 0xF1, 0xA7, 0x54, 0x40, 0xFE, 0xEF, \r
+0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF1, 0x06, 0xC0, 0x83, 0xC0, 0x82, 0xF1, 0xA7, 0x54, 0x20, 0xFE, \r
+0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x51, 0x70, 0x08, 0xF1, 0xAF, 0x54, 0x04, 0x90, \r
+0x04, 0xAB, 0xF0, 0xE5, 0x51, 0xC3, 0x94, 0x80, 0x50, 0x06, 0xF1, 0xB7, 0xF1, 0xC7, 0xEF, 0xF0, \r
+0xF1, 0x07, 0xE0, 0x30, 0xE5, 0x10, 0x31, 0x29, 0x13, 0x13, 0x54, 0x03, 0xFB, 0xF1, 0xC8, 0xE0, \r
+0xFD, 0xAF, 0x51, 0x12, 0x84, 0xE4, 0x22, 0xE0, 0xFF, 0x90, 0xA4, 0x7C, 0x12, 0x45, 0xA3, 0x90, \r
+0x00, 0x03, 0x02, 0x06, 0xA2, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x02, 0x06, 0xA2, 0x75, 0xF0, 0x04, \r
+0xEF, 0x90, 0x96, 0x15, 0x02, 0x45, 0x97, 0xFF, 0x74, 0x15, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, \r
+0x9A, 0xF5, 0x83, 0x22, 0x12, 0x35, 0x26, 0x75, 0x40, 0xFF, 0x22, 0x90, 0xA6, 0x10, 0xE0, 0x24, \r
+0x15, 0xF5, 0x82, 0xE4, 0x34, 0xA2, 0xF5, 0x83, 0x22, 0x7F, 0x8F, 0x12, 0x47, 0xAA, 0xEF, 0x22, \r
+0x90, 0xA4, 0x7C, 0x02, 0x45, 0xAC, 0x90, 0x89, 0x07, 0x12, 0x45, 0x97, 0xE0, 0x22, 0x7F, 0xF4, \r
+0x12, 0x47, 0xAA, 0xEF, 0x20, 0xE5, 0x0E, 0x7F, 0xF4, 0x12, 0x47, 0xAA, 0xEF, 0x7F, 0x01, 0x20, \r
+0xE4, 0x05, 0x7F, 0x02, 0x22, 0x7F, 0x03, 0x22, 0x12, 0x57, 0xFE, 0x90, 0xA2, 0x9C, 0xEF, 0xF0, \r
+0x11, 0x98, 0x90, 0x01, 0x64, 0x74, 0x01, 0xF0, 0x90, 0x04, 0x23, 0xE0, 0x44, 0x80, 0xF0, 0x11, \r
+0x86, 0x44, 0x04, 0xFD, 0x7F, 0x17, 0x12, 0x46, 0x8D, 0x11, 0x8F, 0x44, 0x40, 0xFD, 0x7F, 0x16, \r
+0x12, 0x46, 0x8D, 0x12, 0x90, 0xD2, 0xEF, 0x64, 0x01, 0x70, 0x2E, 0x90, 0xA4, 0x6C, 0xE0, 0x54, \r
+0x07, 0xF0, 0xE0, 0xFF, 0x64, 0x07, 0x60, 0x05, 0xEF, 0x64, 0x04, 0x70, 0x1C, 0x12, 0x82, 0xF6, \r
+0xEF, 0x64, 0x01, 0x70, 0x14, 0x11, 0x8F, 0x44, 0x60, 0xFD, 0x7F, 0x16, 0x12, 0x46, 0x8D, 0x11, \r
+0x86, 0x44, 0x05, 0xFD, 0x7F, 0x17, 0x12, 0x46, 0x8D, 0x7F, 0x38, 0x12, 0x91, 0x6C, 0x7F, 0x38, \r
+0x12, 0x46, 0x8D, 0x02, 0x37, 0x99, 0x7F, 0x17, 0x12, 0x47, 0xAA, 0xEF, 0x54, 0xFC, 0x22, 0x7F, \r
+0x16, 0x12, 0x47, 0xAA, 0xEF, 0x54, 0x0F, 0x22, 0x12, 0x47, 0xC6, 0x11, 0xC9, 0x12, 0x83, 0x01, \r
+0x12, 0x83, 0x20, 0xE4, 0xF5, 0x0D, 0xF5, 0x0E, 0xF5, 0x0F, 0x75, 0x10, 0x80, 0xAD, 0x0D, 0x7F, \r
+0x50, 0x12, 0x46, 0x8D, 0xAD, 0x0E, 0x7F, 0x51, 0x12, 0x46, 0x8D, 0xAD, 0x0F, 0x7F, 0x52, 0x12, \r
+0x46, 0x8D, 0xAD, 0x10, 0x7F, 0x53, 0x02, 0x46, 0x8D, 0x90, 0x01, 0x34, 0x74, 0xFF, 0x11, 0xFA, \r
+0x90, 0x01, 0x3C, 0x11, 0xFA, 0xFD, 0x7F, 0x54, 0x12, 0x46, 0x8D, 0x7D, 0xFF, 0x7F, 0x55, 0x12, \r
+0x46, 0x8D, 0x7D, 0xFF, 0x7F, 0x56, 0x12, 0x46, 0x8D, 0x7D, 0xFF, 0x7F, 0x57, 0x02, 0x46, 0x8D, \r
+0xE4, 0x90, 0xA4, 0x84, 0xF0, 0x90, 0xA4, 0xEF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, \r
+0xF0, 0x22, 0x90, 0xA3, 0xDD, 0xE0, 0x90, 0xA4, 0xDB, 0xF0, 0x90, 0xA3, 0xDE, 0xE0, 0x90, 0xA4, \r
+0xDC, 0xF0, 0x90, 0xA3, 0xDF, 0xE0, 0x90, 0xA4, 0xDD, 0xF0, 0x90, 0xA3, 0xE0, 0xE0, 0x90, 0xA4, \r
+0xDE, 0xF0, 0x90, 0xA3, 0xE1, 0xE0, 0x90, 0xA4, 0xDF, 0xF0, 0x90, 0xA3, 0xCE, 0xE0, 0x90, 0xA4, \r
+0xE0, 0xF0, 0x90, 0xA3, 0xCF, 0xE0, 0x90, 0xA4, 0xE1, 0xF0, 0x90, 0xA3, 0xD0, 0xE0, 0x90, 0xA4, \r
+0xE2, 0xF0, 0x90, 0xA3, 0xD1, 0xE0, 0x90, 0xA4, 0xE3, 0xF0, 0x90, 0xA3, 0xD2, 0xE0, 0x90, 0xA4, \r
+0xE4, 0xF0, 0x90, 0xA3, 0xD3, 0xE0, 0x90, 0xA4, 0xE5, 0xF0, 0x90, 0xA3, 0xD4, 0xE0, 0x90, 0xA4, \r
+0xE6, 0xF0, 0x90, 0xA3, 0xD5, 0xE0, 0x90, 0xA4, 0xE7, 0xF0, 0x90, 0xA3, 0xD6, 0xE0, 0x90, 0xA4, \r
+0xE8, 0xF0, 0x90, 0xA3, 0xD7, 0xE0, 0x90, 0xA4, 0xE9, 0xF0, 0x11, 0xF0, 0x90, 0xA4, 0x83, 0xF0, \r
+0xB1, 0x7B, 0x50, 0x04, 0xB1, 0x88, 0x80, 0xF8, 0x90, 0x01, 0x1F, 0xE0, 0xFE, 0x90, 0x01, 0x1E, \r
+0x12, 0x67, 0x7C, 0x90, 0xA4, 0x78, 0xF0, 0xA3, 0xF1, 0xC2, 0xB1, 0x7B, 0x50, 0x4B, 0xB1, 0xE2, \r
+0x90, 0xA4, 0x83, 0xE0, 0xFE, 0x24, 0xEA, 0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF1, 0xA3, 0xE0, 0x24, \r
+0x4D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, \r
+0x34, 0xA4, 0xF1, 0xA3, 0xE0, 0x24, 0x4E, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0xEE, 0x12, \r
+0x90, 0xC4, 0x12, 0x45, 0xAC, 0xF1, 0xA7, 0xE0, 0x24, 0x38, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0xEE, \r
+0xF1, 0x95, 0x12, 0x45, 0xAC, 0xB1, 0x95, 0x80, 0xB1, 0x90, 0x02, 0x87, 0xE0, 0x70, 0x02, 0xA1, \r
+0x6D, 0x90, 0xA3, 0xC0, 0xE0, 0x20, 0xE0, 0x02, 0xA1, 0x6D, 0xE4, 0x90, 0xA4, 0xF4, 0x11, 0xF8, \r
+0x90, 0xA4, 0x78, 0xE0, 0xFF, 0xA3, 0xE0, 0xA3, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA4, 0x7A, \r
+0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0x90, 0xFD, 0x11, 0xF0, 0x12, 0x82, 0x3E, 0xE0, 0xFE, 0xD1, \r
+0xC8, 0xE0, 0x7A, 0x00, 0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x54, 0x3F, 0x90, 0xA4, 0x7C, 0xF0, 0xA3, \r
+0x12, 0x82, 0x49, 0x54, 0x0F, 0x33, 0x33, 0x33, 0x54, 0xF8, 0x90, 0xA4, 0x7F, 0xF0, 0xFC, 0x74, \r
+0x07, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x90, 0xA4, 0x81, 0xF0, \r
+0xEC, 0x24, 0x18, 0x90, 0xA4, 0x7E, 0xF0, 0xFD, 0x90, 0xA4, 0x7A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, \r
+0xB1, 0xA5, 0xEF, 0x54, 0xFC, 0x90, 0xA4, 0x80, 0xF0, 0x90, 0xA4, 0x7F, 0xE0, 0x24, 0x18, 0xFF, \r
+0xE4, 0x33, 0x90, 0xA4, 0x7C, 0x8F, 0xF0, 0x12, 0x08, 0xD6, 0x90, 0xA4, 0x7C, 0xE0, 0xFE, 0xA3, \r
+0xE0, 0xFF, 0x12, 0x8E, 0xE4, 0x90, 0xA4, 0x78, 0xEE, 0x8F, 0xF0, 0x12, 0x08, 0xD6, 0x90, 0xA3, \r
+0xBE, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0xA4, 0x78, 0x12, 0x8B, 0xD0, 0x40, 0x11, 0x90, 0xA3, \r
+0xBF, 0xF1, 0xF3, 0xED, 0x9F, 0xFF, 0xEC, 0x9E, 0x90, 0xA4, 0x78, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, \r
+0xA4, 0x5D, 0xE0, 0x30, 0xE0, 0x09, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x02, 0xA1, 0x68, 0x90, \r
+0xA4, 0x80, 0xE0, 0x24, 0xC0, 0x60, 0x02, 0x81, 0x93, 0xB1, 0x6E, 0x24, 0x18, 0xFD, 0xB1, 0xA5, \r
+0xEF, 0x60, 0x02, 0x81, 0x88, 0xB1, 0x6E, 0x24, 0x19, 0xFD, 0xB1, 0xA5, 0x90, 0xA4, 0x99, 0xF1, \r
+0xCA, 0x90, 0xA4, 0x99, 0xE0, 0xFF, 0x90, 0xA4, 0x82, 0xE0, 0xFD, 0xC3, 0x9F, 0x50, 0x15, 0xB1, \r
+0x6E, 0x24, 0x1A, 0xD1, 0x8E, 0x90, 0xA4, 0x82, 0xE0, 0x24, 0x9A, 0xF5, 0x82, 0xE4, 0x34, 0xA4, \r
+0xF1, 0x72, 0x80, 0xDD, 0x90, 0xA4, 0x99, 0xE0, 0x70, 0x02, 0x61, 0xCC, 0xE4, 0x90, 0xA4, 0x83, \r
+0xF0, 0xB1, 0x7B, 0x40, 0x02, 0x61, 0xB4, 0xB1, 0xE2, 0x90, 0xA4, 0x83, 0xE0, 0xFF, 0x24, 0x85, \r
+0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF5, 0x83, 0xE0, 0xFE, 0x90, 0xA4, 0x99, 0xE0, 0xFD, 0xEE, 0x6D, \r
+0x70, 0x1E, 0xEF, 0x12, 0x90, 0xC4, 0x12, 0x45, 0xA3, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0xF1, \r
+0xB2, 0xED, 0xF0, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0xD1, 0x9F, 0xEF, 0x60, 0x02, 0x80, 0x47, \r
+0x90, 0xA4, 0x99, 0xE0, 0x64, 0x03, 0x70, 0x4E, 0xF1, 0xB2, 0x74, 0x03, 0xF0, 0x7A, 0xA5, 0x79, \r
+0xD7, 0xD1, 0x9F, 0xEF, 0x70, 0x0E, 0xF1, 0xB2, 0x74, 0x03, 0xF0, 0x7A, 0xA5, 0x79, 0xD3, 0xD1, \r
+0x9F, 0xEF, 0x60, 0x2A, 0x90, 0xA4, 0x83, 0xE0, 0xFF, 0x24, 0xE5, 0xF5, 0x82, 0xE4, 0x34, 0xA4, \r
+0xF5, 0x83, 0xE0, 0x60, 0x02, 0x80, 0x0B, 0x90, 0xA4, 0x83, 0xE0, 0xFF, 0x24, 0xE0, 0xF1, 0xDA, \r
+0x60, 0x05, 0x74, 0xF4, 0x2F, 0x80, 0x15, 0xB1, 0xD4, 0x74, 0x01, 0xF0, 0x80, 0x12, 0x90, 0xA4, \r
+0x83, 0xE0, 0x24, 0xF4, 0x80, 0x06, 0x90, 0xA4, 0x83, 0xE0, 0x24, 0xF4, 0xB1, 0xDA, 0xE4, 0xF0, \r
+0xB1, 0x95, 0x61, 0x11, 0x90, 0xA4, 0xF4, 0xE0, 0x70, 0x4F, 0xA3, 0xE0, 0x70, 0x4B, 0xA3, 0xE0, \r
+0x70, 0x47, 0xA3, 0xE0, 0x70, 0x43, 0xA3, 0xE0, 0x70, 0x3F, 0x81, 0x88, 0xE4, 0x90, 0xA4, 0x83, \r
+0xF0, 0xB1, 0x7B, 0x50, 0x1C, 0x74, 0xE0, 0x2E, 0xF1, 0xDA, 0x60, 0x09, 0x74, 0xF4, 0x2E, 0xB1, \r
+0xDA, 0xE4, 0xF0, 0x80, 0x08, 0x74, 0xF4, 0x2E, 0xB1, 0xDA, 0x74, 0x01, 0xF0, 0xB1, 0x95, 0x80, \r
+0xE0, 0x90, 0xA4, 0xF4, 0xE0, 0x70, 0x12, 0xA3, 0xE0, 0x70, 0x0E, 0xA3, 0xE0, 0x70, 0x0A, 0xA3, \r
+0xE0, 0x70, 0x06, 0xA3, 0xE0, 0x70, 0x02, 0x81, 0x88, 0xE4, 0x90, 0xA4, 0x83, 0xF0, 0xB1, 0x7B, \r
+0x50, 0x76, 0xB1, 0xE2, 0xB1, 0xD4, 0xE0, 0x60, 0x6B, 0xE4, 0xFF, 0xFE, 0x90, 0x04, 0x1D, 0xE0, \r
+0x60, 0x0C, 0x12, 0x8D, 0x46, 0x50, 0x07, 0x0F, 0xBF, 0x00, 0x01, 0x0E, 0x80, 0xEE, 0x90, 0x04, \r
+0x1D, 0xE0, 0x70, 0x50, 0x90, 0xA4, 0x83, 0xE0, 0x24, 0xDB, 0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF5, \r
+0x83, 0xE0, 0xFF, 0x90, 0xA5, 0xFF, 0x74, 0x06, 0xF0, 0x7B, 0x08, 0x7D, 0x01, 0xD1, 0x02, 0x90, \r
+0xA4, 0x7C, 0xEE, 0xF0, 0xA3, 0xF1, 0xCA, 0x90, 0xA4, 0x82, 0xE0, 0xFD, 0xC3, 0x94, 0x06, 0x50, \r
+0x1C, 0xB1, 0x6E, 0x24, 0x0A, 0xD1, 0x8E, 0x90, 0xA4, 0x7C, 0xA3, 0xE0, 0xFE, 0x90, 0xA4, 0x82, \r
+0xE0, 0x2E, 0x24, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF1, 0x72, 0x80, 0xDA, 0x12, 0x84, 0x61, \r
+0x90, 0x06, 0x35, 0xF0, 0xB1, 0x95, 0x80, 0x86, 0x12, 0x8E, 0xCE, 0x90, 0x06, 0x36, 0x74, 0xDD, \r
+0xF0, 0x21, 0xE9, 0x90, 0xA4, 0x81, 0xE0, 0x60, 0x02, 0xA1, 0x68, 0xB1, 0x6E, 0x24, 0x16, 0xFD, \r
+0xB1, 0xA5, 0x90, 0x06, 0x34, 0xEF, 0xF0, 0xB1, 0x6E, 0x24, 0x17, 0xFD, 0xB1, 0xA5, 0x90, 0x06, \r
+0x37, 0xF1, 0xC2, 0xB1, 0x7B, 0x50, 0x67, 0xB1, 0xE2, 0xE4, 0x90, 0xA4, 0x82, 0xF0, 0x90, 0xA4, \r
+0x82, 0xE0, 0xFF, 0xC3, 0x94, 0x06, 0x50, 0x52, 0xEF, 0x60, 0x04, 0x64, 0x01, 0x70, 0x20, 0xB1, \r
+0x6E, 0xB1, 0x9C, 0x90, 0xA4, 0x82, 0xE0, 0xFE, 0x24, 0xA0, 0xF1, 0xE3, 0x90, 0xA4, 0x83, 0xE0, \r
+0xF1, 0x95, 0x12, 0x45, 0xA3, 0x8E, 0x82, 0xD1, 0x99, 0xFF, 0x74, 0xA2, 0x2E, 0xF1, 0xE3, 0xB1, \r
+0x6E, 0xB1, 0x9C, 0x90, 0xA4, 0x83, 0xE0, 0xFE, 0xF1, 0x95, 0x12, 0x45, 0xA3, 0x90, 0xA4, 0x82, \r
+0xE0, 0xF5, 0x82, 0xD1, 0x99, 0x6F, 0x60, 0x0E, 0x74, 0xEF, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA4, \r
+0xF5, 0x83, 0xE4, 0xF0, 0x80, 0x04, 0xF1, 0x76, 0x80, 0xA4, 0xB1, 0x95, 0x80, 0x95, 0x90, 0xA4, \r
+0xEF, 0xE0, 0x64, 0x01, 0x60, 0x17, 0xA3, 0xE0, 0x64, 0x01, 0x60, 0x11, 0xA3, 0xE0, 0x64, 0x01, \r
+0x60, 0x0B, 0xA3, 0xE0, 0x64, 0x01, 0x60, 0x05, 0xA3, 0xE0, 0xB4, 0x01, 0x06, 0x90, 0xA4, 0x84, \r
+0x74, 0x01, 0xF0, 0x90, 0xA4, 0x84, 0xE0, 0xB4, 0x01, 0x10, 0x12, 0x90, 0x37, 0x90, 0x01, 0xC7, \r
+0x74, 0x66, 0xF0, 0xE4, 0xFF, 0x12, 0x8E, 0x93, 0x21, 0xE9, 0x11, 0xF0, 0x90, 0xA4, 0x83, 0xF0, \r
+0xB1, 0x7B, 0x50, 0x04, 0xB1, 0x88, 0x80, 0xF8, 0x12, 0x8E, 0xCE, 0x21, 0xE9, 0x22, 0x90, 0xA4, \r
+0x7A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0xA4, 0x7E, 0xE0, 0x22, 0x90, 0xA3, 0xCB, 0xE0, 0xFF, \r
+0x90, 0xA4, 0x83, 0xE0, 0xFE, 0xC3, 0x9F, 0x22, 0x74, 0xEF, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA4, \r
+0xF5, 0x83, 0x74, 0x01, 0xF0, 0x90, 0xA4, 0x83, 0xE0, 0x04, 0xF0, 0x22, 0x24, 0x04, 0xFD, 0x90, \r
+0xA4, 0x82, 0xE0, 0x2D, 0xFD, 0xAB, 0x07, 0xAA, 0x06, 0xED, 0x2B, 0xFB, 0xE4, 0x3A, 0xFA, 0xC3, \r
+0x90, 0xA3, 0xBF, 0xE0, 0x9B, 0x90, 0xA3, 0xBE, 0xE0, 0x9A, 0x50, 0x09, 0xA3, 0xF1, 0xF3, 0xEB, \r
+0x9F, 0xFB, 0xEA, 0x9E, 0xFA, 0xEA, 0x90, 0xFD, 0x11, 0xF0, 0xAF, 0x03, 0x74, 0x00, 0x2F, 0xD1, \r
+0xCB, 0xE0, 0xFF, 0x22, 0x90, 0xA4, 0x83, 0xE0, 0x24, 0xF4, 0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF5, \r
+0x83, 0x22, 0x74, 0xDB, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF5, 0x83, 0xE0, 0xFF, 0xE4, 0xFE, \r
+0xEF, 0xC3, 0x13, 0xFD, 0xEF, 0x30, 0xE0, 0x02, 0x7E, 0x80, 0x90, 0xFD, 0x10, 0xED, 0xF0, 0xAF, \r
+0x06, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA5, 0xFD, 0xED, 0xF0, 0xA3, 0xEB, \r
+0xF0, 0x90, 0xA5, 0xFC, 0xEF, 0xF0, 0xE4, 0xFD, 0xFC, 0xB1, 0xEE, 0x7C, 0x00, 0xAD, 0x07, 0x90, \r
+0xA5, 0xFC, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90, 0xA5, 0xFD, 0xE0, 0x60, 0x05, 0xF1, 0x89, 0x44, \r
 0x80, 0xF0, 0xAF, 0x05, 0x74, 0x20, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, \r
 0x80, 0xF0, 0xAF, 0x05, 0x74, 0x20, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, \r
-0xC0, 0xF0, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0xF0, \r
-0xAF, 0x05, 0x74, 0x12, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x01, 0xFE, \r
-0x90, 0xA2, 0xE1, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xEE, 0x44, 0x02, 0x4B, 0xFE, 0x74, 0x12, \r
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEE, 0xF0, 0x74, 0x11, 0x2F, 0xF5, 0x82, 0xE4, \r
-0x34, 0xFC, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x74, 0x29, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, \r
-0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, \r
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xC7, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x9F, 0x99, \r
-0xE0, 0x04, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x23, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA2, 0xCB, \r
-0xF0, 0x7D, 0x26, 0x7F, 0xFF, 0xF1, 0x7C, 0xF1, 0xD2, 0xEF, 0x64, 0x01, 0x70, 0x03, 0x12, 0x75, \r
-0x18, 0x90, 0xA2, 0xCB, 0xE0, 0xFF, 0x7D, 0x27, 0xF1, 0x7C, 0x80, 0x03, 0x12, 0x75, 0x18, 0x90, \r
-0x04, 0x1F, 0x74, 0x20, 0xF0, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05, 0x22, 0xEF, \r
-0xF0, 0x90, 0x9F, 0x9B, 0xED, 0xF0, 0x22, 0x74, 0x09, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, \r
-0x83, 0xE0, 0x54, 0x3F, 0xF0, 0xEF, 0x60, 0x1D, 0x74, 0x29, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, \r
-0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x74, 0x09, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, \r
-0xE0, 0x44, 0x80, 0xF0, 0x22, 0x74, 0x29, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, \r
-0x54, 0xEF, 0xF0, 0x74, 0x09, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x40, \r
-0xF0, 0x22, 0xE4, 0x90, 0xA2, 0xE9, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, \r
-0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, \r
-0xA2, 0xEA, 0xE0, 0x94, 0xE8, 0x90, 0xA2, 0xE9, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC0, \r
-0xE0, 0x44, 0x20, 0xF0, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x90, 0xA2, \r
-0xE9, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x08, 0xD6, 0x80, 0xBF, 0x90, 0xA2, 0x5C, 0xEB, 0xF0, 0x70, \r
-0x6C, 0x90, 0xA2, 0x5C, 0xE0, 0xFE, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, 0x98, 0xF5, 0x83, 0xE0, \r
-0xFC, 0x90, 0xA2, 0x5D, 0xE0, 0xFB, 0xEC, 0x6B, 0x60, 0x53, 0x90, 0xA2, 0x61, 0xEB, 0xF0, 0xA3, \r
-0xEE, 0xF0, 0xAE, 0x05, 0xEE, 0x25, 0xE0, 0x4F, 0xFF, 0x90, 0x9F, 0x96, 0xE0, 0xFE, 0x25, 0xE0, \r
-0x25, 0xE0, 0x4F, 0x90, 0xA2, 0x63, 0xF0, 0x90, 0xA2, 0x5E, 0xE0, 0x90, 0xA2, 0x65, 0xF0, 0x90, \r
-0xA2, 0x5F, 0x74, 0x0C, 0xF0, 0x90, 0xA2, 0x6D, 0x74, 0x04, 0xF0, 0x7B, 0x01, 0x7A, 0xA2, 0x79, \r
-0x5F, 0x12, 0x4F, 0x60, 0x7F, 0x04, 0x12, 0x4E, 0x95, 0x90, 0xA2, 0x5D, 0xE0, 0xFF, 0x90, 0xA2, \r
-0x5C, 0xE0, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, 0x98, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0xE4, 0xF5, \r
-0x51, 0x74, 0xAE, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0xA0, 0xF5, 0x83, 0xE0, 0x70, 0x02, 0xA1, \r
-0x44, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0xFF, 0xC4, 0x13, \r
-0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xA1, 0x44, 0xE5, 0x51, 0x25, 0xE0, 0x24, 0x01, 0xF5, \r
-0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEE, 0x94, 0x00, \r
-0x50, 0x02, 0xA1, 0x44, 0xE5, 0x51, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x01, 0xF9, 0x74, 0x8D, 0x35, \r
-0xF0, 0xFA, 0x7B, 0x01, 0x90, 0xA1, 0x43, 0x12, 0x45, 0x5E, 0xE5, 0x51, 0x25, 0xE0, 0x24, 0x01, \r
-0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xF5, 0x56, 0xA3, 0xE0, 0xF5, 0x57, 0x74, 0x16, \r
-0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x98, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0xA1, 0x46, 0xE4, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x07, 0xAB, 0xFF, 0xAE, 0xF0, 0x12, 0x07, 0x80, 0x2F, \r
-0xFF, 0xE5, 0xF0, 0x3E, 0xFE, 0x90, 0x00, 0x04, 0x12, 0x07, 0xAB, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, \r
-0xFE, 0x90, 0x00, 0x06, 0x12, 0x07, 0xAB, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0xFE, 0x90, 0x00, 0x08, \r
-0x12, 0x07, 0xAB, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0xFE, 0x90, 0xA1, 0x48, 0xF0, 0xA3, 0xEF, 0xF0, \r
-0x12, 0x07, 0x80, 0xFD, 0xC3, 0xEF, 0x9D, 0xFF, 0xEE, 0x95, 0xF0, 0x90, 0xA1, 0x4A, 0xF0, 0xA3, \r
-0xEF, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x51, 0x90, 0x81, 0x00, 0x12, 0x45, 0x49, 0xE0, 0xF5, 0x52, \r
-0x54, 0x7F, 0xF5, 0x53, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, 0x16, 0x12, 0x45, 0x49, 0xE0, \r
-0x90, 0xA1, 0x4C, 0xF0, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, \r
-0x13, 0x13, 0x54, 0x03, 0x90, 0xA1, 0x4D, 0xF0, 0x74, 0x96, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, \r
-0x9D, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x02, 0x81, 0x47, 0x90, 0xA1, 0x4C, 0xE0, 0xFF, \r
-0xE5, 0x53, 0x9F, 0x40, 0x08, 0x8F, 0x53, 0x53, 0x52, 0x80, 0xEF, 0x42, 0x52, 0xE5, 0x53, 0x90, \r
-0x41, 0x5F, 0x93, 0xFF, 0x74, 0x96, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xE0, \r
-0xC3, 0x9F, 0xE5, 0x53, 0x40, 0x05, 0x90, 0x41, 0x37, 0x80, 0x03, 0x90, 0x41, 0x4B, 0x93, 0xF5, \r
-0x58, 0xE5, 0x58, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x95, 0xF9, 0x74, 0x40, 0x35, 0xF0, 0xFA, 0x7B, \r
-0xFF, 0x90, 0xA1, 0x40, 0x12, 0x45, 0x5E, 0xE5, 0x52, 0x90, 0x42, 0x0B, 0x93, 0xFF, 0xD3, 0x90, \r
-0xA1, 0x47, 0xE0, 0x9F, 0x90, 0xA1, 0x46, 0xE0, 0x94, 0x00, 0x40, 0x08, 0x7D, 0x01, 0xAF, 0x51, \r
-0xB1, 0x50, 0x81, 0x47, 0xC3, 0xE5, 0x57, 0x94, 0x0F, 0xE5, 0x56, 0x94, 0x00, 0x50, 0x5E, 0x90, \r
-0xA1, 0x43, 0x12, 0x45, 0x55, 0x90, 0x00, 0x06, 0x12, 0x07, 0xAB, 0xFF, 0xAE, 0xF0, 0x90, 0x00, \r
-0x08, 0x12, 0x07, 0xAB, 0x2F, 0xFD, 0xE5, 0xF0, 0x3E, 0xFC, 0xE5, 0x56, 0xC3, 0x13, 0xFE, 0xE5, \r
-0x57, 0x13, 0xFF, 0xD3, 0xED, 0x9F, 0xEC, 0x9E, 0x40, 0x02, 0x81, 0x1C, 0xE5, 0x57, 0xAE, 0x56, \r
-0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0xE5, 0x56, 0xC3, 0x13, \r
-0xFE, 0xE5, 0x57, 0x13, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0x90, 0xA1, 0x43, 0x12, 0x45, 0x55, 0x12, \r
-0x07, 0x80, 0xD3, 0x9F, 0xE5, 0xF0, 0x9E, 0x50, 0x02, 0x81, 0x22, 0x61, 0xFC, 0x90, 0xA1, 0x43, \r
-0x12, 0x45, 0x55, 0x90, 0x00, 0x08, 0x12, 0x07, 0xAB, 0xFD, 0xAC, 0xF0, 0xE5, 0x57, 0xAE, 0x56, \r
-0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFB, 0xAA, 0x06, 0xE5, 0x56, 0xC3, 0x13, \r
-0xFE, 0xE5, 0x57, 0x13, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, 0xD3, 0xED, 0x9F, 0xEC, 0x9E, 0x40, 0x04, \r
-0x7D, 0x04, 0x81, 0x1E, 0xE5, 0x51, 0x64, 0x01, 0x70, 0x50, 0x90, 0xA1, 0x43, 0x12, 0x45, 0x55, \r
-0x90, 0x00, 0x08, 0x12, 0x07, 0xAB, 0xFD, 0xAC, 0xF0, 0xE5, 0x56, 0xC3, 0x13, 0xFE, 0xE5, 0x57, \r
-0x13, 0xFF, 0xC3, 0xED, 0x9F, 0xEC, 0x9E, 0x50, 0x08, 0x90, 0x9F, 0x96, 0x74, 0x01, 0xF0, 0x80, \r
-0x29, 0xE5, 0x57, 0xAE, 0x56, 0x78, 0x03, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFB, 0xAA, \r
-0x06, 0xE5, 0x56, 0xC3, 0x13, 0xFE, 0xE5, 0x57, 0x13, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, 0xD3, 0xED, \r
-0x9F, 0xEC, 0x9E, 0x40, 0x05, 0xE4, 0x90, 0x9F, 0x96, 0xF0, 0xD3, 0xE5, 0x57, 0x94, 0xE8, 0xE5, \r
-0x56, 0x94, 0x03, 0x40, 0x05, 0x75, 0x59, 0x05, 0x80, 0x13, 0xD3, 0xE5, 0x57, 0x94, 0xC8, 0xE5, \r
-0x56, 0x94, 0x00, 0x40, 0x05, 0x75, 0x59, 0x02, 0x80, 0x03, 0xE4, 0xF5, 0x59, 0xE5, 0x51, 0x25, \r
-0xE0, 0x24, 0x95, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0xE0, 0xF5, 0x54, 0xA3, 0xE0, 0xF5, \r
-0x55, 0xE4, 0xF5, 0x5A, 0x90, 0xA1, 0x43, 0x12, 0x45, 0x55, 0x75, 0xF0, 0x02, 0xE5, 0x5A, 0xA4, \r
-0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12, 0x07, 0xAB, 0xAE, 0xF0, 0xA8, 0x59, 0x08, 0x80, 0x05, 0xCE, \r
-0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0xA1, 0x40, 0x12, 0x45, 0x55, 0x85, 0x5A, 0x82, \r
-0x75, 0x83, 0x00, 0x12, 0x06, 0xA2, 0xFD, 0x7C, 0x00, 0x12, 0x07, 0x03, 0xEF, 0x25, 0x55, 0xF5, \r
-0x55, 0xEE, 0x35, 0x54, 0xF5, 0x54, 0x05, 0x5A, 0xE5, 0x5A, 0xB4, 0x05, 0xB7, 0x90, 0xA1, 0x40, \r
-0x12, 0x45, 0x55, 0x90, 0x00, 0x05, 0x12, 0x06, 0xA2, 0xFD, 0x7C, 0x00, 0xE5, 0x57, 0xAE, 0x56, \r
-0xA8, 0x59, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x12, 0x07, 0x03, \r
-0xD3, 0xE5, 0x55, 0x9F, 0xE5, 0x54, 0x9E, 0x40, 0x0C, 0xE5, 0x55, 0x9F, 0xF5, 0x55, 0xE5, 0x54, \r
-0x9E, 0xF5, 0x54, 0x80, 0x05, 0xE4, 0xF5, 0x54, 0xF5, 0x55, 0xE5, 0x51, 0x25, 0xE0, 0x24, 0x95, \r
-0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0xE5, 0x54, 0xF0, 0xA3, 0xE5, 0x55, 0xF0, 0xAE, 0x54, \r
-0xFF, 0xE4, 0xFC, 0xFD, 0xE5, 0x53, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x73, 0xF5, 0x82, 0xE4, 0x34, \r
-0x41, 0xF5, 0x83, 0x12, 0x45, 0x39, 0xC3, 0x12, 0x45, 0x00, 0x50, 0x07, 0xAF, 0x51, 0x12, 0x6A, \r
-0xC4, 0x80, 0x1F, 0xE5, 0x53, 0x25, 0xE0, 0x24, 0xC3, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, \r
-0xD3, 0x74, 0x01, 0x93, 0x95, 0x55, 0xE4, 0x93, 0x95, 0x54, 0x40, 0x06, 0x7D, 0x01, 0xAF, 0x51, \r
-0xB1, 0x50, 0xE5, 0x51, 0x25, 0xE0, 0x24, 0x95, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0xA3, \r
-0xE0, 0x90, 0xA2, 0x5E, 0xF0, 0x90, 0xA2, 0x5D, 0xE5, 0x52, 0xF0, 0xAB, 0x51, 0xE4, 0xFD, 0xFF, \r
-0x11, 0x1A, 0xE4, 0xF5, 0x54, 0xF5, 0x55, 0x74, 0x81, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x93, \r
-0xF5, 0x83, 0xE0, 0x64, 0x01, 0x60, 0x02, 0xA1, 0x3D, 0x90, 0xA1, 0x46, 0xE0, 0xFE, 0xA3, 0xE0, \r
-0xFF, 0xC3, 0x74, 0xFF, 0x9F, 0xFD, 0x74, 0xFF, 0x9E, 0xFC, 0xE5, 0x51, 0x25, 0xE0, 0x24, 0x16, \r
-0xF5, 0x82, 0xE4, 0x34, 0x9B, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xD3, 0x9D, 0xEA, 0x9C, 0xE5, \r
-0x51, 0x50, 0x13, 0x25, 0xE0, 0x24, 0x16, 0xF5, 0x82, 0xE4, 0x34, 0x9B, 0xF5, 0x83, 0xEE, 0x8F, \r
-0xF0, 0x12, 0x08, 0xD6, 0x80, 0x10, 0x25, 0xE0, 0x24, 0x16, 0xF5, 0x82, 0xE4, 0x34, 0x9B, 0xF5, \r
-0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x90, 0xA1, 0x48, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x74, \r
-0xFF, 0x9F, 0xFD, 0x74, 0xFF, 0x9E, 0xFC, 0xE5, 0x51, 0x25, 0xE0, 0x24, 0x16, 0xF5, 0x82, 0xE4, \r
-0x34, 0x9C, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xD3, 0x9D, 0xEA, 0x9C, 0xE5, 0x51, 0x50, 0x13, \r
-0x25, 0xE0, 0x24, 0x16, 0xF5, 0x82, 0xE4, 0x34, 0x9C, 0xF5, 0x83, 0xEE, 0x8F, 0xF0, 0x12, 0x08, \r
-0xD6, 0x80, 0x10, 0x25, 0xE0, 0x24, 0x16, 0xF5, 0x82, 0xE4, 0x34, 0x9C, 0xF5, 0x83, 0x74, 0xFF, \r
-0xF0, 0xA3, 0xF0, 0x90, 0xA1, 0x4A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFB, 0xC3, 0x74, 0xFF, 0x9B, 0xFF, \r
-0x74, 0xFF, 0x9E, 0xFE, 0x74, 0xFF, 0x94, 0x00, 0xFD, 0x74, 0xFF, 0x94, 0x00, 0xFC, 0x90, 0x94, \r
-0x91, 0x12, 0x45, 0x2D, 0xD3, 0x12, 0x45, 0x00, 0x90, 0x94, 0x91, 0x50, 0x19, 0x12, 0x45, 0x2D, \r
-0x90, 0xA1, 0x4A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0x12, 0x44, 0xD9, 0x90, 0x94, \r
-0x91, 0x12, 0x08, 0x6D, 0x80, 0x07, 0x12, 0x08, 0x79, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0xFD, 0xAF, \r
-0x51, 0x12, 0x68, 0x89, 0x05, 0x51, 0xE5, 0x51, 0xC3, 0x94, 0x80, 0x50, 0x02, 0x01, 0x91, 0x22, \r
-0xAA, 0x07, 0xAB, 0x05, 0x75, 0xF0, 0x10, 0xEA, 0x90, 0x81, 0x00, 0x12, 0x45, 0x49, 0xE0, 0xF5, \r
-0x5B, 0x54, 0x7F, 0xF5, 0x5D, 0x75, 0xF0, 0x04, 0xEA, 0x90, 0x96, 0x17, 0x12, 0x45, 0x49, 0xE0, \r
-0x90, 0xA1, 0x51, 0xF0, 0x75, 0xF0, 0x04, 0xEA, 0x90, 0x96, 0x16, 0x12, 0x45, 0x49, 0xE0, 0xFF, \r
-0x75, 0xF0, 0x10, 0xEA, 0x90, 0x81, 0x05, 0x12, 0x45, 0x49, 0xE0, 0x54, 0x03, 0xF5, 0x5C, 0xE5, \r
-0x5D, 0x25, 0xE0, 0x24, 0xC3, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFC, 0x74, \r
-0x01, 0x93, 0xFD, 0xEA, 0x25, 0xE0, 0x24, 0x95, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0xEC, \r
-0xF0, 0xA3, 0xED, 0xF0, 0x75, 0xF0, 0x04, 0xEA, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0xFE, \r
-0xC4, 0x54, 0x03, 0x90, 0xA1, 0x4F, 0xF0, 0x74, 0x16, 0x2A, 0xF5, 0x82, 0xE4, 0x34, 0x9F, 0xF5, \r
-0x83, 0xE5, 0x5D, 0xF0, 0x74, 0x16, 0x2A, 0xF5, 0x82, 0xE4, 0x34, 0x9D, 0xF5, 0x83, 0xE5, 0x5C, \r
-0xF0, 0xE5, 0x5D, 0xD3, 0x9F, 0x40, 0x04, 0x8F, 0x5D, 0x8F, 0x5B, 0xEB, 0x70, 0x02, 0xC1, 0xC8, \r
-0xAF, 0x03, 0x8F, 0x5E, 0xE5, 0x5B, 0x30, 0xE7, 0x05, 0x85, 0x5D, 0x5B, 0x15, 0x5E, 0xE5, 0x5E, \r
-0x70, 0x02, 0xC1, 0xC8, 0xE5, 0x5D, 0x64, 0x2C, 0x70, 0x2A, 0xE5, 0x5C, 0xD3, 0x94, 0x00, 0x40, \r
-0x23, 0xE5, 0x5C, 0xD3, 0x94, 0x02, 0x50, 0x1C, 0x15, 0x5C, 0xE5, 0x5C, 0x54, 0x03, 0x25, 0xE0, \r
-0x25, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xEA, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0x54, 0xF3, \r
-0x4F, 0xF0, 0x15, 0x5E, 0xE5, 0x5E, 0x70, 0x02, 0xC1, 0xC8, 0x90, 0xA1, 0x51, 0xE0, 0xFF, 0xE5, \r
-0x5D, 0xD3, 0x9F, 0x40, 0x7D, 0xE4, 0x90, 0xA1, 0x50, 0xF0, 0x85, 0x5D, 0x5B, 0xAD, 0x5B, 0xE5, \r
-0x5D, 0x14, 0xFC, 0x90, 0xA1, 0x51, 0xE0, 0xFF, 0xEC, 0xC3, 0x9F, 0x40, 0x5F, 0xEC, 0x13, 0x13, \r
-0x13, 0x54, 0x1F, 0xFF, 0x75, 0xF0, 0x08, 0xEA, 0x90, 0x89, 0x00, 0x12, 0x45, 0x49, 0xE5, 0x82, \r
-0x2F, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE0, 0xF5, 0x82, 0x75, 0x83, 0x00, 0xEC, 0x54, \r
-0x07, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, \r
-0xD8, 0xF9, 0xFF, 0xEE, 0x55, 0x83, 0xFE, 0xEF, 0x55, 0x82, 0x4E, 0x60, 0x1C, 0xE5, 0x5D, 0xAD, \r
-0x04, 0xB4, 0x14, 0x02, 0x7D, 0x0C, 0x90, 0xA1, 0x50, 0xE0, 0x04, 0xF0, 0xE0, 0x65, 0x5E, 0x60, \r
-0x0B, 0xA3, 0xE0, 0xFF, 0xED, 0xD3, 0x9F, 0x40, 0x03, 0x1C, 0x80, 0x97, 0xAF, 0x05, 0x8F, 0x5B, \r
-0x80, 0x06, 0x90, 0xA1, 0x51, 0xE0, 0xF5, 0x5B, 0xAF, 0x02, 0x85, 0x5C, 0x67, 0xE4, 0xFB, 0xAD, \r
-0x5B, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x64, 0x8D, 0x65, 0x8B, 0x66, 0xE4, 0x90, \r
-0xA2, 0xB6, 0xF0, 0xE5, 0x64, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0xA2, 0xB1, 0xF0, 0xE5, 0x64, \r
-0x54, 0x07, 0x90, 0xA2, 0xB3, 0xF0, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x01, 0x12, 0x45, 0x49, \r
-0xE0, 0x90, 0xA2, 0xB4, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x16, 0x12, 0x45, 0x49, 0xE0, \r
-0x54, 0x7F, 0x90, 0xA2, 0xB7, 0xF0, 0x75, 0xF0, 0x04, 0xE5, 0x64, 0x90, 0x96, 0x17, 0x12, 0x45, \r
-0x49, 0xE0, 0x90, 0xA2, 0xB8, 0xF0, 0xE5, 0x65, 0x54, 0x7F, 0x90, 0xA2, 0xB2, 0xF0, 0xE5, 0x66, \r
-0x70, 0x42, 0xE0, 0xFB, 0x25, 0xE0, 0x24, 0xC3, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, \r
-0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xE4, 0xFC, 0xFD, 0xEB, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x73, \r
-0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x12, 0x45, 0x39, 0x12, 0x44, 0xD9, 0x78, 0x01, 0x12, \r
-0x08, 0x47, 0xE5, 0x64, 0x25, 0xE0, 0x24, 0x95, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0xEE, \r
-0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA2, 0xB7, 0xE0, 0xFF, 0x90, 0xA2, 0xB2, 0xE0, 0xFE, 0xD3, 0x9F, \r
-0x40, 0x0B, 0xE5, 0x65, 0x54, 0x80, 0xFD, 0xEF, 0x4D, 0xF5, 0x65, 0x80, 0x0C, 0x90, 0xA2, 0xB8, \r
-0xE0, 0xFF, 0xEE, 0xC3, 0x9F, 0x50, 0x02, 0x8F, 0x65, 0xE5, 0x65, 0x54, 0x7F, 0x90, 0xA2, 0xB2, \r
-0xF0, 0xE5, 0x65, 0x54, 0x80, 0x90, 0xA2, 0xB5, 0xF0, 0xE5, 0x66, 0x70, 0x33, 0x90, 0xA2, 0xB1, \r
-0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, \r
-0x90, 0xA2, 0xB3, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, \r
-0xF4, 0x5F, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x90, 0xA2, 0xB4, 0xE0, 0x54, 0x7F, 0xF0, 0x80, 0x52, \r
-0x90, 0xA2, 0xB1, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0xC0, 0x83, 0xC0, \r
-0x82, 0xE0, 0xFF, 0x90, 0xA2, 0xB3, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, \r
-0x33, 0xD8, 0xFC, 0x4F, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x64, 0x90, 0x81, \r
-0x01, 0x12, 0x45, 0x49, 0xE0, 0x54, 0x07, 0xFF, 0x90, 0xA2, 0xB4, 0xF0, 0x90, 0xA2, 0xB2, 0xE0, \r
-0x90, 0x41, 0xF7, 0x93, 0xFE, 0x33, 0x33, 0x33, 0x54, 0xF8, 0x4F, 0x90, 0xA2, 0xB4, 0xF0, 0x44, \r
-0x80, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x64, 0x90, 0x81, 0x00, 0x12, 0x45, 0x49, 0xE5, 0x65, 0xF0, \r
-0xE5, 0x64, 0x70, 0x06, 0x90, 0x01, 0xC8, 0xE5, 0x65, 0xF0, 0x90, 0xA2, 0xB4, 0xE0, 0xFF, 0x75, \r
-0xF0, 0x10, 0xE5, 0x64, 0x90, 0x81, 0x01, 0x12, 0x45, 0x49, 0xEF, 0xF0, 0x75, 0xF0, 0x10, 0xE5, \r
-0x64, 0x90, 0x81, 0x05, 0x12, 0x45, 0x49, 0xE0, 0x54, 0xFC, 0xFF, 0xE5, 0x67, 0x54, 0x03, 0x4F, \r
-0xFF, 0x75, 0xF0, 0x10, 0xE5, 0x64, 0x90, 0x81, 0x05, 0x12, 0x45, 0x49, 0xEF, 0xF0, 0x7D, 0x01, \r
-0xAF, 0x64, 0x11, 0x89, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
-0xED, 0x60, 0x62, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x8D, 0x01, 0x12, 0x45, 0x49, 0xE4, 0xF0, 0xA3, \r
-0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x8D, 0x03, 0x12, 0x45, 0x49, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, \r
-0xF0, 0x0A, 0xEF, 0x90, 0x8D, 0x05, 0x12, 0x45, 0x49, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, \r
-0xEF, 0x90, 0x8D, 0x07, 0x12, 0x45, 0x49, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, \r
-0x8D, 0x09, 0x12, 0x45, 0x49, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x01, 0xF5, 0x82, \r
-0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34, \r
-0x98, 0xF5, 0x83, 0xE4, 0xF0, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x03, 0x12, 0x45, 0x49, 0xE0, \r
-0x54, 0xBF, 0x44, 0x80, 0xFE, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x03, 0x12, 0x45, 0x49, 0xEE, \r
-0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xF5, 0x6C, 0x74, 0x96, 0x2F, 0xF5, 0x82, 0xE4, 0x34, \r
-0x95, 0xF5, 0x83, 0xE0, 0xFE, 0xB4, 0x02, 0x08, 0xED, 0xC3, 0x94, 0x11, 0x40, 0x29, 0x80, 0x1F, \r
-0xEE, 0xB4, 0x01, 0x08, 0xED, 0xC3, 0x94, 0x0A, 0x40, 0x1D, 0x80, 0x13, 0x74, 0x96, 0x2F, 0xF5, \r
-0x82, 0xE4, 0x34, 0x95, 0xF5, 0x83, 0xE0, 0x70, 0x0B, 0xED, 0xC3, 0x94, 0x03, 0x40, 0x08, 0x75, \r
-0x6C, 0x01, 0x80, 0x03, 0xE4, 0xF5, 0x6C, 0xAF, 0x6C, 0x22, 0x8F, 0x52, 0x8D, 0x53, 0x8B, 0x54, \r
-0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x17, 0x12, 0x45, 0x49, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xE5, \r
-0x52, 0x90, 0x96, 0x16, 0x12, 0x45, 0x49, 0xE0, 0xFD, 0x2F, 0xFF, 0xE4, 0x33, 0xA2, 0xE7, 0x13, \r
-0xEF, 0x13, 0x90, 0xA1, 0x47, 0xF0, 0xE5, 0x53, 0xD3, 0x94, 0x2D, 0x40, 0x02, 0x80, 0x19, 0xE5, \r
-0x53, 0xD3, 0x94, 0x19, 0x40, 0x05, 0x90, 0xA1, 0x47, 0x80, 0x0B, 0x75, 0xF0, 0x04, 0xE5, 0x52, \r
-0x90, 0x96, 0x17, 0x12, 0x45, 0x49, 0xE0, 0xFD, 0x85, 0x54, 0x67, 0xE4, 0xFB, 0xAF, 0x52, 0x02, \r
-0x66, 0xD1, 0x90, 0xA1, 0x44, 0x12, 0x45, 0x5E, 0x12, 0x06, 0x89, 0xF5, 0x51, 0x24, 0x16, 0xF5, \r
-0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xE0, 0x54, 0x9C, 0xF0, 0x74, 0x16, 0x25, 0x51, 0xF5, 0x82, \r
-0xE4, 0x34, 0x99, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, 0xA1, 0x44, 0x12, 0x45, \r
-0x55, 0x90, 0x00, 0x03, 0x12, 0x06, 0xA2, 0x54, 0x01, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83, \r
-0xF0, 0x74, 0x16, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, \r
-0xE0, 0xFF, 0x90, 0xA1, 0x44, 0x12, 0x45, 0x55, 0x90, 0x00, 0x03, 0x12, 0x06, 0xA2, 0x54, 0x02, \r
-0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x74, 0x16, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, \r
-0x99, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, 0xA1, 0x44, 0x12, 0x45, 0x55, 0x90, \r
-0x00, 0x03, 0x12, 0x06, 0xA2, 0x54, 0x40, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x74, \r
-0x16, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, \r
-0x90, 0xA1, 0x44, 0x12, 0x45, 0x55, 0x90, 0x00, 0x03, 0x12, 0x06, 0xA2, 0x54, 0x20, 0xFE, 0xEF, \r
-0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x51, 0xC3, 0x94, 0x80, 0x50, 0x16, 0x90, 0x00, 0x02, \r
-0x12, 0x06, 0xA2, 0xFF, 0x74, 0x96, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xEF, \r
-0xF0, 0x80, 0x0F, 0xE5, 0x51, 0xB4, 0x80, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x06, 0xA2, 0x90, 0x95, \r
-0x95, 0xF0, 0x74, 0x16, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xE0, 0x30, 0xE5, \r
-0x22, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0x13, 0x13, 0x54, \r
-0x03, 0xFB, 0x74, 0x96, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xE0, 0xFD, 0xAF, \r
-0x51, 0x31, 0x5A, 0x22, 0xAB, 0x07, 0x75, 0xF0, 0x10, 0xEB, 0x90, 0x81, 0x00, 0x12, 0x45, 0x49, \r
-0xE0, 0xF5, 0x5B, 0xE4, 0xF5, 0x5F, 0xE5, 0x5B, 0x54, 0x7F, 0xF9, 0xE5, 0x5B, 0x54, 0x80, 0xFA, \r
-0x75, 0xF0, 0x04, 0xEB, 0x90, 0x96, 0x16, 0x12, 0x45, 0x49, 0xE0, 0xF5, 0x5D, 0x75, 0xF0, 0x04, \r
-0xEB, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0xFF, 0xC4, 0x54, 0x03, 0xF5, 0x5E, 0xE9, 0x25, \r
-0xE0, 0x25, 0xE0, 0x24, 0x73, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x12, 0x45, 0x1D, 0xEB, \r
-0x25, 0xE0, 0x24, 0x95, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, \r
-0xE5, 0x5B, 0x4A, 0xFF, 0x74, 0x16, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0x9F, 0xF5, 0x83, 0xEF, 0xF0, \r
-0x75, 0xF0, 0x10, 0xEB, 0x90, 0x81, 0x05, 0x12, 0x45, 0x49, 0xE0, 0x54, 0x03, 0xF5, 0x5C, 0x74, \r
-0x16, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0x9D, 0xF5, 0x83, 0xE5, 0x5C, 0xF0, 0xE9, 0x64, 0x2C, 0x70, \r
-0x33, 0x75, 0xF0, 0x04, 0xEB, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0xFF, 0x54, 0x03, 0xFE, \r
-0xE5, 0x5C, 0xC3, 0x9E, 0x50, 0x1E, 0x05, 0x5C, 0xE5, 0x5C, 0x54, 0x03, 0x25, 0xE0, 0x25, 0xE0, \r
-0xFE, 0x75, 0xF0, 0x04, 0xEB, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xEF, 0x54, 0xF3, 0x4E, 0xF0, \r
-0x89, 0x5B, 0x81, 0x4C, 0xE9, 0xC3, 0x95, 0x5D, 0x50, 0x6B, 0xE9, 0x04, 0xFD, 0xED, 0xD3, 0x95, \r
-0x5D, 0x40, 0x02, 0x81, 0x4C, 0xED, 0x13, 0x13, 0x13, 0x54, 0x1F, 0xFF, 0x75, 0xF0, 0x08, 0xEB, \r
-0x90, 0x89, 0x00, 0x12, 0x45, 0x49, 0xE5, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, \r
-0xE0, 0xF5, 0x82, 0x75, 0x83, 0x00, 0xED, 0x54, 0x07, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, \r
-0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x55, 0x83, 0xFE, 0xEF, \r
-0x55, 0x82, 0x4E, 0x60, 0x1D, 0xB9, 0x13, 0x14, 0x79, 0x18, 0x89, 0x5B, 0x74, 0x16, 0x2B, 0xF5, \r
-0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x60, 0xA9, 0x05, 0x89, 0x5B, \r
-0x80, 0x5A, 0x0D, 0x80, 0x98, 0xE9, 0x65, 0x5D, 0x70, 0x43, 0x75, 0xF0, 0x04, 0xEB, 0x90, 0x96, \r
-0x18, 0x12, 0x45, 0x49, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0C, 0xE5, 0x5B, 0x20, \r
-0xE7, 0x07, 0xE9, 0x44, 0x80, 0xF5, 0x5B, 0x80, 0x33, 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x73, \r
-0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x12, 0x45, 0x1D, 0xEB, 0x25, 0xE0, 0x24, 0x95, 0xF5, \r
-0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x74, 0x16, 0x2B, \r
-0xF5, 0x82, 0xE4, 0x34, 0x9F, 0xF5, 0x83, 0xE5, 0x5D, 0xF0, 0xF5, 0x5B, 0xAF, 0x03, 0x85, 0x5C, \r
-0x67, 0x7B, 0x01, 0xAD, 0x5B, 0x02, 0x66, 0xD1, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x05, 0x12, \r
-0x45, 0x49, 0xE0, 0x54, 0x03, 0xFE, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x16, 0x12, 0x45, 0x49, \r
-0xE0, 0xFC, 0x74, 0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x9F, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0xFD, \r
-0x64, 0x2C, 0x70, 0x2F, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0xF9, \r
-0x54, 0x03, 0xFB, 0xEE, 0xD3, 0x9B, 0x50, 0x1B, 0xEE, 0x60, 0x18, 0x1E, 0xEE, 0x54, 0x03, 0x25, \r
-0xE0, 0x25, 0xE0, 0xFB, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE9, 0x54, \r
-0xF3, 0x4B, 0xF0, 0xED, 0xD3, 0x9C, 0x40, 0x02, 0xAD, 0x04, 0x74, 0x16, 0x2F, 0xF5, 0x82, 0xE4, \r
-0x34, 0x9F, 0xF5, 0x83, 0xE0, 0x54, 0x80, 0x42, 0x05, 0x8E, 0x67, 0xE4, 0xFB, 0x02, 0x66, 0xD1, \r
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xE2, 0xEF, 0xF0, 0x75, 0xF0, 0x04, 0x90, \r
-0x96, 0x18, 0x12, 0x45, 0x49, 0xE0, 0x54, 0x1F, 0xFB, 0x24, 0xF1, 0x50, 0x02, 0xA1, 0x72, 0xE4, \r
-0xF5, 0x68, 0x90, 0xA2, 0xE2, 0xE0, 0xFD, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x00, 0x12, 0x45, 0x49, \r
-0xE5, 0x82, 0x25, 0x68, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE0, 0xFE, 0xEB, 0x75, 0xF0, \r
-0x07, 0xA4, 0x24, 0x56, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE5, 0x82, 0x25, 0x68, 0xF5, \r
-0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE4, 0x93, 0xFC, 0xEE, 0x5C, 0x90, 0xA2, 0xE4, 0xF0, 0x75, \r
-0xF0, 0x04, 0xED, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0x54, 0x03, 0xFF, 0xBF, 0x02, 0x0B, \r
-0xE5, 0x68, 0x70, 0x07, 0x90, 0xA2, 0xE4, 0xE0, 0x54, 0xF0, 0xF0, 0x90, 0xA2, 0xE4, 0xE0, 0xFF, \r
-0x90, 0xA2, 0xE2, 0xE0, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x00, 0x12, 0x45, 0x49, 0xE5, 0x82, 0x25, \r
-0x68, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xEF, 0xF0, 0x05, 0x68, 0xE5, 0x68, 0x64, 0x07, \r
-0x70, 0x80, 0x90, 0xA2, 0xE2, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, \r
-0xFF, 0xC4, 0x54, 0x03, 0xF9, 0xE4, 0xFD, 0x75, 0x69, 0x06, 0xE5, 0x69, 0xB4, 0x06, 0x1D, 0xFF, \r
-0x90, 0xA2, 0xE2, 0xE0, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x00, 0x12, 0x45, 0x49, 0xE5, 0x82, 0x2F, \r
-0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE0, 0x54, 0x0F, 0x80, 0x19, 0x90, 0xA2, 0xE2, 0xE0, \r
-0x75, 0xF0, 0x08, 0x90, 0x89, 0x00, 0x12, 0x45, 0x49, 0xE5, 0x82, 0x25, 0x69, 0xF5, 0x82, 0xE4, \r
-0x35, 0x83, 0xF5, 0x83, 0xE0, 0x90, 0xA2, 0xE3, 0xF0, 0x90, 0xA2, 0xE3, 0xE0, 0x60, 0x3E, 0x75, \r
-0x68, 0x07, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x68, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, \r
-0xD8, 0xF9, 0xFF, 0x90, 0xA2, 0xE3, 0xE0, 0xFB, 0xEF, 0x5B, 0x60, 0x18, 0xE5, 0x69, 0x75, 0xF0, \r
-0x08, 0xA4, 0x25, 0x68, 0xFD, 0xE9, 0x60, 0x24, 0xED, 0xD3, 0x94, 0x0B, 0x40, 0x1E, 0x74, 0x20, \r
-0x2D, 0xFD, 0x80, 0x18, 0x15, 0x68, 0xE5, 0x68, 0xC3, 0x94, 0x00, 0x50, 0xC5, 0xE5, 0x69, 0x60, \r
-0x0B, 0x15, 0x69, 0xE5, 0x69, 0xC3, 0x94, 0x00, 0x40, 0x02, 0xA1, 0x8A, 0xE4, 0xFC, 0xF5, 0x69, \r
-0xE5, 0x69, 0xB4, 0x06, 0x1D, 0xFF, 0x90, 0xA2, 0xE2, 0xE0, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x00, \r
-0x12, 0x45, 0x49, 0xE5, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE0, 0x54, 0x0F, \r
-0x80, 0x19, 0x90, 0xA2, 0xE2, 0xE0, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x00, 0x12, 0x45, 0x49, 0xE5, \r
-0x82, 0x25, 0x69, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE0, 0x90, 0xA2, 0xE3, 0xF0, 0x90, \r
-0xA2, 0xE3, 0xE0, 0x60, 0x3C, 0xE4, 0xF5, 0x68, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x68, 0x08, 0x80, \r
-0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0xA2, 0xE3, 0xE0, 0xFB, 0xEF, 0x5B, \r
-0x60, 0x18, 0xE5, 0x69, 0x75, 0xF0, 0x08, 0xA4, 0x25, 0x68, 0xFC, 0xE9, 0x60, 0x1D, 0xEC, 0xD3, \r
-0x94, 0x0B, 0x40, 0x17, 0x74, 0x20, 0x2C, 0xFC, 0x80, 0x11, 0x05, 0x68, 0xE5, 0x68, 0xB4, 0x08, \r
-0xC7, 0x05, 0x69, 0xE5, 0x69, 0x64, 0x07, 0x60, 0x02, 0xC1, 0x20, 0x90, 0xA2, 0xE2, 0xE0, 0xFF, \r
-0x75, 0xF0, 0x04, 0x90, 0x96, 0x16, 0x12, 0x45, 0x49, 0xED, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, \r
-0x96, 0x17, 0x12, 0x45, 0x49, 0xEC, 0xF0, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x00, 0x12, 0x45, \r
-0x49, 0xE0, 0xFF, 0x54, 0x7F, 0xF5, 0x6A, 0xEF, 0x54, 0x80, 0xFF, 0xE5, 0x6A, 0xD3, 0x9D, 0x40, \r
-0x03, 0xED, 0x80, 0x07, 0xE5, 0x6A, 0xC3, 0x9C, 0x50, 0x04, 0xEC, 0x4F, 0xF5, 0x6A, 0x90, 0xA2, \r
-0xE2, 0xE0, 0xFF, 0x24, 0x16, 0xF5, 0x82, 0xE4, 0x34, 0x9E, 0xF5, 0x83, 0xE5, 0x6A, 0xF0, 0x75, \r
-0xF0, 0x04, 0xEF, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0x13, 0x13, 0x54, 0x03, 0xF5, 0x67, \r
-0x90, 0xA2, 0xE2, 0xE0, 0xFF, 0xE4, 0xFB, 0xAD, 0x6A, 0x12, 0x66, 0xD1, 0x90, 0xA2, 0xE2, 0xE0, \r
-0x75, 0xF0, 0x10, 0x90, 0x81, 0x03, 0x12, 0x45, 0x49, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
-0x12, 0x06, 0x89, 0x54, 0x7F, 0xF5, 0x51, 0x90, 0x00, 0x01, 0x12, 0x06, 0xA2, 0xFF, 0x54, 0x1F, \r
-0xF5, 0x53, 0xEF, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0xF5, 0x52, 0x90, 0x00, 0x02, \r
-0x12, 0x06, 0xA2, 0xFF, 0x54, 0x03, 0xF5, 0x54, 0xEF, 0x54, 0x30, 0xC4, 0x54, 0x0F, 0xF5, 0x57, \r
-0x90, 0x00, 0x02, 0x12, 0x06, 0xA2, 0xFF, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0xF5, 0x55, \r
-0xEF, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0xF5, 0x56, 0x90, 0x00, 0x02, 0x12, 0x06, \r
-0xA2, 0xFF, 0x54, 0x08, 0x13, 0x13, 0x13, 0x54, 0x1F, 0xF5, 0x59, 0xEF, 0x54, 0x04, 0x13, 0x13, \r
-0x54, 0x3F, 0xF5, 0x5A, 0xE5, 0x56, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x33, 0x54, 0x80, 0xFF, 0x75, \r
-0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0xE5, \r
-0x55, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x54, 0xC0, 0xFF, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, \r
-0x19, 0x12, 0x45, 0x49, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0xE5, 0x59, 0x60, 0x03, 0x02, 0x70, 0x9B, \r
-0xE5, 0x53, 0x54, 0x1F, 0xFF, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, 0x18, 0x12, 0x45, 0x49, \r
-0xE0, 0x54, 0xE0, 0x4F, 0xF0, 0xE5, 0x54, 0x54, 0x03, 0xFF, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, \r
-0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0x54, 0xFC, 0x4F, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0xFF, \r
-0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0x54, 0xF3, 0x4F, 0xF0, \r
-0xE5, 0x52, 0x54, 0x01, 0xC4, 0x33, 0x54, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, \r
-0x18, 0x12, 0x45, 0x49, 0xE0, 0x54, 0xDF, 0x4F, 0xF0, 0xE5, 0x57, 0x54, 0x03, 0xC4, 0x54, 0xF0, \r
-0xFF, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, 0x19, 0x12, 0x45, 0x49, 0xE0, 0x54, 0xCF, 0x4F, \r
-0xF0, 0x74, 0x16, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, \r
-0x74, 0x16, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0xE0, 0xFF, 0xE5, 0x5A, 0x25, \r
-0xE0, 0x25, 0xE0, 0xFE, 0xEF, 0x4E, 0xF0, 0xE4, 0xF5, 0x58, 0x85, 0x58, 0x82, 0x75, 0x83, 0x00, \r
-0xA3, 0xA3, 0xA3, 0x12, 0x06, 0xA2, 0xFF, 0x75, 0xF0, 0x08, 0xE5, 0x51, 0x90, 0x89, 0x00, 0x12, \r
-0x45, 0x49, 0xE5, 0x82, 0x25, 0x58, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xEF, 0xF0, 0x05, \r
-0x58, 0xE5, 0x58, 0xB4, 0x04, 0xD4, 0xAF, 0x51, 0x12, 0x6C, 0xD0, 0x22, 0x12, 0x06, 0x89, 0x90, \r
-0xA1, 0x44, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x06, 0xA2, 0x90, 0xA1, 0x45, 0xF0, 0x90, 0x00, 0x02, \r
-0x12, 0x06, 0xA2, 0x54, 0x01, 0xFF, 0x60, 0x68, 0x90, 0xA1, 0x44, 0xE0, 0xD3, 0x94, 0x80, 0x40, \r
-0x5F, 0xA3, 0xE0, 0xD3, 0x94, 0x80, 0x40, 0x58, 0x90, 0xA1, 0x48, 0xEF, 0xF0, 0x90, 0x94, 0x91, \r
-0x12, 0x45, 0x11, 0x90, 0xA1, 0x49, 0xEF, 0xF0, 0x90, 0x94, 0x91, 0x12, 0x45, 0x11, 0x78, 0x08, \r
-0x12, 0x08, 0x47, 0x90, 0xA1, 0x4A, 0xEF, 0xF0, 0x90, 0x94, 0x91, 0x12, 0x45, 0x11, 0x78, 0x10, \r
-0x12, 0x08, 0x47, 0x90, 0xA1, 0x4B, 0xEF, 0xF0, 0x90, 0x94, 0x91, 0x12, 0x45, 0x11, 0x78, 0x18, \r
-0x12, 0x08, 0x47, 0x90, 0xA1, 0x4C, 0xEF, 0xF0, 0x90, 0xA1, 0x46, 0x74, 0x0D, 0xF0, 0x90, 0xA1, \r
-0x54, 0x74, 0x05, 0xF0, 0x90, 0x94, 0x91, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0x41, 0x2B, \r
-0xEF, 0x60, 0x02, 0x41, 0x2B, 0x90, 0xA1, 0x44, 0xE0, 0xFF, 0xD3, 0x94, 0x80, 0x50, 0x47, 0x90, \r
-0xA1, 0x48, 0xEF, 0xF0, 0x25, 0xE0, 0x24, 0x16, 0xF5, 0x82, 0xE4, 0x34, 0x9C, 0xF5, 0x83, 0xE0, \r
-0xFE, 0xA3, 0xE0, 0x90, 0xA1, 0x49, 0xF0, 0xEE, 0xA3, 0xF0, 0x90, 0xA1, 0x44, 0xE0, 0xFD, 0x25, \r
-0xE0, 0x24, 0x16, 0xF5, 0x82, 0xE4, 0x34, 0x9B, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0xA1, \r
-0x4B, 0xF0, 0xEE, 0xA3, 0xF0, 0x75, 0xF0, 0x10, 0xED, 0x90, 0x81, 0x00, 0x12, 0x45, 0x49, 0xE0, \r
-0x90, 0xA1, 0x4D, 0xF0, 0x80, 0x08, 0x90, 0xA1, 0x44, 0xE0, 0x90, 0xA1, 0x48, 0xF0, 0x90, 0xA1, \r
-0x45, 0xE0, 0xFF, 0xD3, 0x94, 0x80, 0x50, 0x47, 0x90, 0xA1, 0x4E, 0xEF, 0xF0, 0x25, 0xE0, 0x24, \r
-0x16, 0xF5, 0x82, 0xE4, 0x34, 0x9C, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0xA1, 0x4F, 0xF0, \r
-0xEE, 0xA3, 0xF0, 0x90, 0xA1, 0x45, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x16, 0xF5, 0x82, 0xE4, 0x34, \r
-0x9B, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0xA1, 0x51, 0xF0, 0xEE, 0xA3, 0xF0, 0x75, 0xF0, \r
-0x10, 0xED, 0x90, 0x81, 0x00, 0x12, 0x45, 0x49, 0xE0, 0x90, 0xA1, 0x53, 0xF0, 0x80, 0x08, 0x90, \r
-0xA1, 0x45, 0xE0, 0x90, 0xA1, 0x4E, 0xF0, 0x90, 0xA1, 0x46, 0x74, 0x04, 0xF0, 0x90, 0xA1, 0x54, \r
-0x74, 0x0C, 0xF0, 0x90, 0xA1, 0x44, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x16, 0xF5, 0x82, 0xE4, 0x34, \r
-0x9C, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0xA1, 0x45, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x16, \r
-0xF5, 0x82, 0xE4, 0x34, 0x9C, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x16, \r
-0xF5, 0x82, 0xE4, 0x34, 0x9B, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEE, 0x25, 0xE0, 0x24, 0x16, \r
-0xF5, 0x82, 0xE4, 0x34, 0x9B, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, \r
-0x46, 0x12, 0x4F, 0x60, 0x7F, 0x04, 0x02, 0x4E, 0x95, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x03, \r
-0x12, 0x45, 0x49, 0xE0, 0x44, 0x40, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, \r
-0xA2, 0x81, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x37, 0x4E, 0x90, 0xA2, 0x8B, 0x12, 0x08, 0x6D, \r
-0x90, 0xA2, 0x83, 0x12, 0x45, 0x11, 0x12, 0x08, 0x3A, 0x90, 0xA2, 0x8B, 0x12, 0x45, 0x2D, 0x12, \r
-0x44, 0xE6, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0xA2, 0x83, 0x12, 0x45, 0x11, \r
-0x90, 0xA2, 0x87, 0x12, 0x45, 0x2D, 0x12, 0x44, 0xE6, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, \r
-0x00, 0x12, 0x44, 0xF3, 0x90, 0xA2, 0x8F, 0x12, 0x08, 0x6D, 0x90, 0xA2, 0x8F, 0x12, 0x45, 0x11, \r
-0x90, 0xAA, 0xB9, 0x12, 0x08, 0x6D, 0x90, 0xA2, 0x81, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x38, \r
-0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x6F, \r
-0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0xA2, 0x6E, 0xEF, 0xF0, 0xA3, 0xA3, 0xE0, 0xFD, 0x12, 0x3E, \r
-0x02, 0x90, 0xA2, 0x79, 0x12, 0x08, 0x6D, 0x90, 0xA2, 0x71, 0x12, 0x45, 0x11, 0x12, 0x08, 0x3A, \r
-0x90, 0xA2, 0x79, 0x12, 0x45, 0x2D, 0x12, 0x44, 0xE6, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, \r
-0x07, 0x90, 0xA2, 0x71, 0x12, 0x45, 0x11, 0x90, 0xA2, 0x75, 0x12, 0x45, 0x2D, 0x12, 0x44, 0xE6, \r
-0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x44, 0xF3, 0x90, 0xA2, 0x7D, 0x12, 0x08, \r
-0x6D, 0x90, 0xA2, 0x6F, 0xA3, 0xE0, 0xFD, 0xC0, 0x05, 0x90, 0xA2, 0x7D, 0x12, 0x45, 0x11, 0x90, \r
-0xAA, 0x96, 0x12, 0x08, 0x6D, 0x90, 0xA2, 0x6E, 0xE0, 0xFF, 0xD0, 0x05, 0x12, 0x3D, 0x09, 0xD0, \r
-0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0x90, 0xA1, 0x30, 0xE0, 0x75, 0xF0, 0x20, 0xA4, 0xFF, 0x90, \r
-0xA2, 0xD8, 0xE5, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA1, 0x31, 0xE0, 0x75, 0xF0, 0x08, 0xA4, \r
-0xAE, 0xF0, 0x90, 0xA2, 0xDA, 0xF0, 0xEE, 0xA3, 0xF0, 0xED, 0x64, 0x01, 0x70, 0x02, 0x61, 0xE6, \r
-0x90, 0xA1, 0x2F, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x78, 0xEE, 0x54, \r
-0x0F, 0xFF, 0xEE, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x7D, 0x00, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x12, \r
-0x46, 0x4F, 0x90, 0xA1, 0x2F, 0xE0, 0xFE, 0x54, 0x0F, 0xFF, 0xEE, 0xC4, 0x13, 0x13, 0x54, 0x01, \r
-0xFD, 0x12, 0x46, 0x4F, 0x90, 0xA1, 0x2F, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x23, 0x90, \r
-0xA2, 0xD8, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x3E, 0x50, 0x90, 0xA1, 0x2F, 0xE0, 0xFE, 0x54, \r
-0x0F, 0xFF, 0xEE, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x7D, 0x00, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x12, \r
-0x46, 0x4F, 0x90, 0xA1, 0x2F, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0xA2, 0xDB, 0xE0, \r
-0x90, 0xA2, 0xC5, 0xF0, 0x90, 0xA2, 0xDA, 0xE0, 0x90, 0xA2, 0xC6, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, \r
-0x58, 0x7E, 0x01, 0x12, 0x47, 0xFC, 0x22, 0x90, 0xA2, 0xF4, 0xEF, 0xF0, 0x90, 0x9F, 0x9C, 0xE0, \r
-0xB4, 0x02, 0x12, 0x90, 0xA2, 0xF4, 0xE0, 0xFF, 0x64, 0x01, 0x60, 0x17, 0x90, 0x01, 0x4D, 0xE0, \r
-0x64, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0xA2, 0xF4, 0xE0, \r
-0xFF, 0x71, 0x34, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x00, 0x7E, 0x08, 0x12, \r
-0x37, 0x4E, 0x90, 0xA1, 0x37, 0x12, 0x08, 0x6D, 0x7F, 0x00, 0x7E, 0x09, 0x12, 0x37, 0x4E, 0x90, \r
-0xA1, 0x3B, 0x12, 0x08, 0x6D, 0x90, 0xA1, 0x37, 0x12, 0x45, 0x11, 0xEF, 0x54, 0x01, 0xFF, 0xE4, \r
-0xFE, 0xFD, 0xFC, 0xEF, 0x60, 0x24, 0x90, 0xA1, 0x37, 0x12, 0x45, 0x11, 0xEF, 0x54, 0xFE, 0xFF, \r
-0xEC, 0x90, 0xA1, 0x37, 0x12, 0x08, 0x6D, 0x90, 0xA1, 0x37, 0x12, 0x45, 0x11, 0x90, 0xAA, 0xB9, \r
-0x12, 0x08, 0x6D, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x38, 0x45, 0x90, 0xA1, 0x3B, 0x12, 0x45, 0x11, \r
-0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0xEF, 0x60, 0x24, 0x90, 0xA1, 0x3B, 0x12, 0x45, \r
-0x11, 0xEF, 0x54, 0xFE, 0xFF, 0xEC, 0x90, 0xA1, 0x3B, 0x12, 0x08, 0x6D, 0x90, 0xA1, 0x3B, 0x12, \r
-0x45, 0x11, 0x90, 0xAA, 0xB9, 0x12, 0x08, 0x6D, 0x7F, 0x00, 0x7E, 0x09, 0x12, 0x38, 0x45, 0xD0, \r
-0xD0, 0x92, 0xAF, 0x22, 0x90, 0x02, 0x84, 0xEF, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xE0, 0x44, 0x01, \r
-0xF0, 0x22, 0xE4, 0x90, 0xA2, 0xEF, 0xF0, 0xA3, 0xF0, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x2C, \r
-0xC3, 0x90, 0xA2, 0xF0, 0xE0, 0x94, 0xD0, 0x90, 0xA2, 0xEF, 0xE0, 0x94, 0x07, 0x40, 0x0A, 0x90, \r
-0x01, 0xC1, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0xA2, 0xEF, 0xE4, 0x75, 0xF0, 0x01, \r
-0x12, 0x08, 0xD6, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x80, 0xCD, 0x7F, 0x01, 0x22, 0x7D, \r
-0x07, 0xEF, 0x5D, 0xC3, 0x60, 0x14, 0x74, 0xFF, 0x9D, 0xFD, 0x74, 0xFF, 0x94, 0x00, 0x5E, 0xFE, \r
-0xED, 0x5F, 0x24, 0x08, 0xFF, 0xE4, 0x3E, 0xFE, 0x80, 0x0D, 0x74, 0xFF, 0x9D, 0xFD, 0x74, 0xFF, \r
-0x94, 0x00, 0x5E, 0xFE, 0xED, 0x5F, 0xFF, 0x22, 0x90, 0x9F, 0x9F, 0xE0, 0xFF, 0x90, 0xA2, 0xC8, \r
-0xE0, 0xFB, 0x7D, 0x01, 0x12, 0x5E, 0x88, 0x90, 0xA2, 0xC9, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, \r
-0xFD, 0x90, 0xA2, 0xC7, 0xE0, 0xFF, 0x12, 0x5F, 0x87, 0x90, 0xA2, 0xC9, 0xE0, 0xFE, 0xA3, 0xE0, \r
-0xFF, 0x90, 0x81, 0x00, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x0D, 0x2C, 0xF5, 0x82, 0xE4, \r
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01, 0xF0, 0x74, 0x0D, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, \r
-0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x12, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, \r
-0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, \r
-0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, \r
-0xE0, 0x44, 0x0E, 0xF0, 0x90, 0x04, 0xA7, 0xE4, 0xF0, 0x90, 0x04, 0xA6, 0xF0, 0x90, 0x04, 0xA5, \r
-0x74, 0xFF, 0xF0, 0x90, 0x04, 0xA4, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, \r
-0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, \r
-0xF5, 0x83, 0xED, 0xF0, 0x22, 0x74, 0xA3, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE0, \r
-0xFF, 0xE4, 0xFE, 0xEF, 0xC3, 0x13, 0xFD, 0xEF, 0x30, 0xE0, 0x02, 0x7E, 0x80, 0x90, 0xFD, 0x10, \r
-0xED, 0xF0, 0xAF, 0x06, 0x22, 0xFC, 0xED, 0x2C, 0xFD, 0xAB, 0x07, 0xAA, 0x06, 0xED, 0x2B, 0xFB, \r
-0xE4, 0x3A, 0xFA, 0xC3, 0x90, 0xA0, 0x8E, 0xE0, 0x9B, 0x90, 0xA0, 0x8D, 0xE0, 0x9A, 0x50, 0x13, \r
-0xA3, 0xE0, 0x24, 0x01, 0xFF, 0x90, 0xA0, 0x8D, 0xE0, 0x34, 0x00, 0xFE, 0xC3, 0xEB, 0x9F, 0xFB, \r
-0xEA, 0x9E, 0xFA, 0xEA, 0x90, 0xFD, 0x11, 0xF0, 0xAF, 0x03, 0x74, 0x00, 0x2F, 0xF5, 0x82, 0xE4, \r
-0x34, 0xFB, 0xF5, 0x83, 0xE0, 0xFF, 0x22, 0x90, 0xA1, 0xC1, 0x12, 0x45, 0x5E, 0xE4, 0xFF, 0x90, \r
-0xA1, 0xC7, 0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x26, 0x90, 0xA1, 0xC4, 0x12, 0x45, 0x55, 0x8F, \r
-0x82, 0x75, 0x83, 0x00, 0x12, 0x06, 0xA2, 0xFE, 0x90, 0xA1, 0xC1, 0x12, 0x45, 0x55, 0x8F, 0x82, \r
-0x75, 0x83, 0x00, 0x12, 0x06, 0xA2, 0x6E, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x0F, 0x80, 0xD0, 0x7F, \r
-0x01, 0x22, 0x90, 0xA0, 0xA8, 0xE0, 0x90, 0xA1, 0xA3, 0xF0, 0x90, 0xA0, 0xA9, 0xE0, 0x90, 0xA1, \r
-0xA4, 0xF0, 0x90, 0xA0, 0xAA, 0xE0, 0x90, 0xA1, 0xA5, 0xF0, 0x90, 0xA0, 0xAB, 0xE0, 0x90, 0xA1, \r
-0xA6, 0xF0, 0x90, 0xA0, 0xAC, 0xE0, 0x90, 0xA1, 0xA7, 0xF0, 0x90, 0xA0, 0x99, 0xE0, 0x90, 0xA1, \r
-0xA8, 0xF0, 0x90, 0xA0, 0x9A, 0xE0, 0x90, 0xA1, 0xA9, 0xF0, 0x90, 0xA0, 0x9B, 0xE0, 0x90, 0xA1, \r
-0xAA, 0xF0, 0x90, 0xA0, 0x9C, 0xE0, 0x90, 0xA1, 0xAB, 0xF0, 0x90, 0xA0, 0x9D, 0xE0, 0x90, 0xA1, \r
-0xAC, 0xF0, 0x90, 0xA0, 0x9E, 0xE0, 0x90, 0xA1, 0xAD, 0xF0, 0x90, 0xA0, 0x9F, 0xE0, 0x90, 0xA1, \r
-0xAE, 0xF0, 0x90, 0xA0, 0xA0, 0xE0, 0x90, 0xA1, 0xAF, 0xF0, 0x90, 0xA0, 0xA1, 0xE0, 0x90, 0xA1, \r
-0xB0, 0xF0, 0x90, 0xA0, 0xA2, 0xE0, 0x90, 0xA1, 0xB1, 0xF0, 0xE4, 0x90, 0xA1, 0x4C, 0xF0, 0x90, \r
-0xA1, 0xB7, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0xA1, 0x4B, 0xF0, 0x90, \r
-0xA0, 0x96, 0xE0, 0xFF, 0x90, 0xA1, 0x4B, 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x15, 0x74, 0xB7, 0x2E, \r
-0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x90, 0xA1, 0x4B, 0xE0, 0x04, 0xF0, \r
-0x80, 0xDD, 0x90, 0x01, 0x1F, 0xE0, 0xFE, 0x90, 0x01, 0x1E, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, \r
-0xEC, 0x3E, 0x90, 0xA1, 0x40, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0xA1, 0x4B, 0xF0, 0x90, 0xA0, \r
-0x96, 0xE0, 0xFF, 0x90, 0xA1, 0x4B, 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x02, 0xE1, 0xC2, 0xB1, 0xC5, \r
-0x90, 0xA1, 0x4B, 0xE0, 0xFE, 0x24, 0xB2, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xEF, 0xF0, \r
-0x74, 0xB2, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE0, 0x24, 0x4D, 0xF5, 0x82, 0xE4, \r
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x4D, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, \r
-0xEF, 0xF0, 0x74, 0xB2, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE0, 0x24, 0x4E, 0xF9, \r
-0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x52, 0xF5, 0x82, 0xE4, \r
-0x34, 0xA1, 0xF5, 0x83, 0x12, 0x45, 0x5E, 0x74, 0xB2, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, \r
-0x83, 0xE0, 0x24, 0x38, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x94, \r
-0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0x12, 0x45, 0x5E, 0x90, 0xA1, 0x4B, 0xE0, 0x04, 0xF0, \r
-0xE1, 0x2E, 0x90, 0x02, 0x87, 0xE0, 0x70, 0x03, 0x02, 0x7C, 0x47, 0x90, 0xA0, 0x8F, 0xE0, 0x64, \r
-0x01, 0x60, 0x03, 0x02, 0x7C, 0x47, 0x90, 0xA1, 0xBC, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, \r
-0xA3, 0xF0, 0x90, 0xA1, 0x40, 0xE0, 0xFF, 0xA3, 0xE0, 0xA3, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, \r
-0xA1, 0x42, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0x90, 0xFD, 0x11, 0xF0, 0x74, 0x01, 0x2D, 0xF5, \r
-0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x00, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, \r
-0xF5, 0x83, 0xE0, 0x7A, 0x00, 0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x54, 0x3F, 0x90, 0xA1, 0x44, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x54, 0x0F, \r
-0x33, 0x33, 0x33, 0x54, 0xF8, 0x90, 0xA1, 0x47, 0xF0, 0xFC, 0x74, 0x07, 0x2D, 0xF5, 0x82, 0xE4, \r
-0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x90, 0xA1, 0x49, 0xF0, 0xEC, 0x24, 0x18, 0x90, 0xA1, \r
-0x46, 0xF0, 0xFD, 0x90, 0xA1, 0x42, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x75, 0xE9, 0xEF, 0x54, \r
-0xFC, 0x90, 0xA1, 0x48, 0xF0, 0x90, 0xA1, 0x47, 0xE0, 0x24, 0x18, 0xFF, 0xE4, 0x33, 0x90, 0xA1, \r
-0x44, 0x8F, 0xF0, 0x12, 0x08, 0xD6, 0x90, 0xA1, 0x44, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x74, \r
-0xEF, 0x90, 0xA1, 0x40, 0xEE, 0x8F, 0xF0, 0x12, 0x08, 0xD6, 0x90, 0xA0, 0x8D, 0xE0, 0xFE, 0xA3, \r
-0xE0, 0xFF, 0x90, 0xA1, 0x40, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x9F, 0xEC, 0x9E, 0x40, 0x1B, \r
-0x90, 0xA0, 0x8E, 0xE0, 0x24, 0x01, 0xFF, 0x90, 0xA0, 0x8D, 0xE0, 0x34, 0x00, 0xFE, 0xC3, 0xED, \r
-0x9F, 0xFF, 0xEC, 0x9E, 0x90, 0xA1, 0x40, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA1, 0x48, 0xE0, 0x24, \r
-0xC0, 0x60, 0x02, 0x61, 0x44, 0x90, 0xA1, 0x42, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0xA1, 0x46, \r
-0xE0, 0x24, 0x18, 0xFD, 0x12, 0x75, 0xE9, 0xEF, 0x60, 0x02, 0x81, 0x39, 0x90, 0xA1, 0x42, 0xE0, \r
-0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0xA1, 0x46, 0xE0, 0x24, 0x19, 0xFD, 0x12, 0x75, 0xE9, 0x90, 0xA1, \r
-0x61, 0xEF, 0xF0, 0xE4, 0x90, 0xA1, 0x4A, 0xF0, 0x90, 0xA1, 0x61, 0xE0, 0xFF, 0x90, 0xA1, 0x4A, \r
-0xE0, 0xFD, 0xC3, 0x9F, 0x50, 0x28, 0x90, 0xA1, 0x42, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0xA1, \r
-0x46, 0xE0, 0x24, 0x1A, 0x12, 0x75, 0xE5, 0x90, 0xA1, 0x4A, 0xE0, 0x24, 0x62, 0xF5, 0x82, 0xE4, \r
-0x34, 0xA1, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0xA1, 0x4A, 0xE0, 0x04, 0xF0, 0x80, 0xCA, 0x90, 0xA1, \r
-0x61, 0xE0, 0x70, 0x02, 0x41, 0x4F, 0xE4, 0x90, 0xA1, 0x4B, 0xF0, 0x90, 0xA0, 0x96, 0xE0, 0xFF, \r
-0x90, 0xA1, 0x4B, 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x02, 0x41, 0x37, 0x12, 0x75, 0xC5, 0x90, 0xA1, \r
-0x4B, 0xE0, 0xFF, 0x24, 0x4D, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE0, 0xFE, 0x90, 0xA1, \r
-0x61, 0xE0, 0xFD, 0xEE, 0x6D, 0x70, 0x36, 0xEF, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x52, 0xF5, 0x82, \r
-0xE4, 0x34, 0xA1, 0xF5, 0x83, 0x12, 0x45, 0x55, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x7B, 0x01, \r
-0x7A, 0xA1, 0x79, 0x62, 0x90, 0xA1, 0xC4, 0x12, 0x45, 0x5E, 0x90, 0xA1, 0xC7, 0xED, 0xF0, 0xD0, \r
-0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x76, 0x27, 0xEF, 0x60, 0x02, 0x80, 0x69, 0x90, 0xA1, 0x61, \r
-0xE0, 0x64, 0x03, 0x70, 0x7B, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x62, 0x90, 0xA1, 0xC4, 0x12, 0x45, \r
-0x5E, 0x90, 0xA1, 0xC7, 0x74, 0x03, 0xF0, 0x7A, 0xA2, 0x79, 0xBD, 0x12, 0x76, 0x27, 0xEF, 0x70, \r
-0x1C, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x62, 0x90, 0xA1, 0xC4, 0x12, 0x45, 0x5E, 0x90, 0xA1, 0xC7, \r
-0x74, 0x03, 0xF0, 0x7A, 0xA2, 0x79, 0xB9, 0x12, 0x76, 0x27, 0xEF, 0x60, 0x3B, 0x90, 0xA1, 0x4B, \r
-0xE0, 0xFF, 0x24, 0xAD, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE0, 0x60, 0x02, 0x80, 0x11, \r
-0x90, 0xA1, 0x4B, 0xE0, 0xFF, 0x24, 0xA8, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE0, 0x60, \r
-0x05, 0x74, 0xBC, 0x2F, 0x80, 0x20, 0x90, 0xA1, 0x4B, 0xE0, 0x24, 0xBC, 0xF5, 0x82, 0xE4, 0x34, \r
-0xA1, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x80, 0x17, 0x90, 0xA1, 0x4B, 0xE0, 0x24, 0xBC, 0x80, 0x06, \r
-0x90, 0xA1, 0x4B, 0xE0, 0x24, 0xBC, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE4, 0xF0, 0x90, \r
-0xA1, 0x4B, 0xE0, 0x04, 0xF0, 0x21, 0x3B, 0x90, 0xA1, 0xBC, 0xE0, 0x70, 0x6D, 0xA3, 0xE0, 0x70, \r
-0x69, 0xA3, 0xE0, 0x70, 0x65, 0xA3, 0xE0, 0x70, 0x61, 0xA3, 0xE0, 0x70, 0x5D, 0x81, 0x39, 0xE4, \r
-0x90, 0xA1, 0x4B, 0xF0, 0x90, 0xA0, 0x96, 0xE0, 0xFF, 0x90, 0xA1, 0x4B, 0xE0, 0xFE, 0xC3, 0x9F, \r
-0x50, 0x30, 0x74, 0xA8, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE0, 0x60, 0x0E, 0x74, \r
-0xBC, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE4, 0xF0, 0x80, 0x0D, 0x74, 0xBC, 0x2E, \r
-0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x90, 0xA1, 0x4B, 0xE0, 0x04, 0xF0, \r
-0x80, 0xC2, 0x90, 0xA1, 0xBC, 0xE0, 0x70, 0x12, 0xA3, 0xE0, 0x70, 0x0E, 0xA3, 0xE0, 0x70, 0x0A, \r
-0xA3, 0xE0, 0x70, 0x06, 0xA3, 0xE0, 0x70, 0x02, 0x81, 0x39, 0xE4, 0x90, 0xA1, 0x4B, 0xF0, 0x90, \r
-0xA0, 0x96, 0xE0, 0xFF, 0x90, 0xA1, 0x4B, 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x02, 0x81, 0x39, 0x12, \r
-0x75, 0xC5, 0x90, 0xA1, 0x4B, 0xE0, 0x24, 0xBC, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE0, \r
-0x60, 0x6A, 0x12, 0x5E, 0x5A, 0xEF, 0x64, 0x01, 0x70, 0x62, 0x90, 0xA1, 0x4B, 0xE0, 0x24, 0xA3, \r
-0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xE0, 0xFF, 0x7B, 0x08, 0x7D, 0x01, 0x12, 0x5E, 0x88, \r
-0x90, 0xA1, 0x44, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0xA1, 0x4A, 0xF0, 0x90, 0xA1, 0x4A, \r
-0xE0, 0xFD, 0xC3, 0x94, 0x06, 0x50, 0x2F, 0x90, 0xA1, 0x42, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, \r
-0xA1, 0x46, 0xE0, 0x24, 0x0A, 0x12, 0x75, 0xE5, 0x90, 0xA1, 0x44, 0xA3, 0xE0, 0xFE, 0x90, 0xA1, \r
-0x4A, 0xE0, 0x2E, 0x24, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0xA1, \r
-0x4A, 0xE0, 0x04, 0xF0, 0x80, 0xC7, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x90, 0xA1, 0x4B, 0xE0, \r
-0x04, 0xF0, 0x41, 0xAF, 0x90, 0xA1, 0x49, 0xE0, 0x60, 0x02, 0x81, 0x39, 0xE4, 0x90, 0xA1, 0x4B, \r
-0xF0, 0x90, 0xA0, 0x96, 0xE0, 0xFF, 0x90, 0xA1, 0x4B, 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x65, 0x12, \r
-0x75, 0xC5, 0xE4, 0x90, 0xA1, 0x4A, 0xF0, 0x90, 0xA1, 0x4A, 0xE0, 0xFD, 0xC3, 0x94, 0x06, 0x50, \r
-0x4B, 0x90, 0xA1, 0x42, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0xA1, 0x46, 0xE0, 0x24, 0x04, 0x12, \r
-0x75, 0xE5, 0x90, 0xA1, 0x4B, 0xE0, 0xFE, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x94, 0xF5, 0x82, 0xE4, \r
-0x34, 0xA1, 0xF5, 0x83, 0x12, 0x45, 0x55, 0x90, 0xA1, 0x4A, 0xE0, 0xF5, 0x82, 0x75, 0x83, 0x00, \r
-0x12, 0x06, 0xA2, 0x6F, 0x60, 0x0E, 0x74, 0xB7, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, \r
-0xE4, 0xF0, 0x80, 0x08, 0x90, 0xA1, 0x4A, 0xE0, 0x04, 0xF0, 0x80, 0xAB, 0x90, 0xA1, 0x4B, 0xE0, \r
-0x04, 0xF0, 0x80, 0x8D, 0x90, 0xA1, 0xB7, 0xE0, 0x64, 0x01, 0x60, 0x17, 0xA3, 0xE0, 0x64, 0x01, \r
-0x60, 0x11, 0xA3, 0xE0, 0x64, 0x01, 0x60, 0x0B, 0xA3, 0xE0, 0x64, 0x01, 0x60, 0x05, 0xA3, 0xE0, \r
-0xB4, 0x01, 0x06, 0x90, 0xA1, 0x4C, 0x74, 0x01, 0xF0, 0x90, 0xA1, 0x4C, 0xE0, 0xB4, 0x01, 0x11, \r
-0x12, 0x59, 0x84, 0x90, 0x01, 0xC7, 0x74, 0x66, 0xF0, 0xE4, 0xFF, 0x12, 0x73, 0xE7, 0x02, 0x77, \r
-0xC2, 0xE4, 0x90, 0xA1, 0x4C, 0xF0, 0x90, 0xA1, 0xB7, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, \r
-0xA3, 0xF0, 0x90, 0xA1, 0x4B, 0xF0, 0x90, 0xA0, 0x96, 0xE0, 0xFF, 0x90, 0xA1, 0x4B, 0xE0, 0xFE, \r
-0xC3, 0x9F, 0x50, 0x15, 0x74, 0xB7, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0x74, 0x01, \r
-0xF0, 0x90, 0xA1, 0x4B, 0xE0, 0x04, 0xF0, 0x80, 0xDD, 0x90, 0xA1, 0x40, 0xE0, 0xFE, 0xA3, 0xE0, \r
-0xFF, 0x12, 0x74, 0xA4, 0x02, 0x77, 0xC2, 0x22, 0x12, 0xEC, \r
+0xC0, 0xF0, 0xF1, 0x89, 0x54, 0xC0, 0xF0, 0x90, 0xA5, 0xFF, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x18, \r
+0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0xD1, 0xD3, 0xE0, 0x54, 0x01, 0xFF, \r
+0x90, 0xA5, 0xFE, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFE, 0xEF, 0x44, 0x02, 0x4E, 0xFF, 0xAE, 0x05, \r
+0xD1, 0xD3, 0xEF, 0xF0, 0x74, 0x11, 0x2E, 0xF1, 0xD2, 0x74, 0xFF, 0xF0, 0x74, 0x29, 0x2E, 0x12, \r
+0x90, 0x2E, 0x54, 0xF7, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xFC, 0xED, \r
+0x2C, 0xFD, 0xA1, 0xA5, 0x12, 0x45, 0xA3, 0x8F, 0x82, 0x75, 0x83, 0x00, 0x02, 0x06, 0xA2, 0x90, \r
+0xA4, 0xF9, 0x12, 0x45, 0xAC, 0xE4, 0xFF, 0x90, 0xA4, 0xFF, 0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, \r
+0x14, 0x90, 0xA4, 0xFC, 0xD1, 0x94, 0xFE, 0x90, 0xA4, 0xF9, 0xD1, 0x94, 0x6E, 0x60, 0x03, 0x7F, \r
+0x00, 0x22, 0x0F, 0x80, 0xE2, 0x7F, 0x01, 0x22, 0x74, 0x00, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, \r
+0xF5, 0x83, 0x22, 0x74, 0x12, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0x90, 0xA2, \r
+0xCF, 0xE0, 0xFF, 0x90, 0xA5, 0xE8, 0xE0, 0xFB, 0x90, 0xA5, 0xFF, 0x74, 0x0A, 0xF0, 0x7D, 0x01, \r
+0xD1, 0x02, 0x90, 0xA5, 0xE9, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0xA5, 0xE7, 0xE0, \r
+0xFF, 0x12, 0x90, 0x02, 0x90, 0xA5, 0xE9, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x81, 0x00, 0xE0, \r
+0x54, 0x0F, 0xFD, 0xAC, 0x07, 0xF1, 0x7D, 0x44, 0x01, 0xF0, 0xF1, 0x7D, 0x54, 0xFB, 0xF0, 0xAC, \r
+0x07, 0x74, 0x12, 0x2C, 0xD1, 0xD6, 0xE0, 0x44, 0xFA, 0xF0, 0x74, 0x11, 0x2C, 0xF1, 0xD2, 0xE0, \r
+0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, \r
+0x44, 0x0E, 0xF0, 0x90, 0x04, 0xA7, 0xE4, 0xF0, 0x90, 0x04, 0xA6, 0xF0, 0x90, 0x04, 0xA5, 0x74, \r
+0xFF, 0xF0, 0x90, 0x04, 0xA4, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF1, 0x6A, 0xE0, 0x54, 0xC0, \r
+0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF1, 0x6A, 0xED, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, \r
+0x83, 0x22, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0xA4, 0x82, 0xE0, 0x04, 0xF0, 0x22, 0x74, 0x0D, 0x2C, \r
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, \r
+0xFC, 0xF5, 0x83, 0xE0, 0x22, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xCC, 0xF5, 0x82, 0xE4, 0x34, 0xA4, \r
+0xF5, 0x83, 0x22, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0xEA, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF5, \r
+0x83, 0x22, 0x7B, 0x01, 0x7A, 0xA4, 0x79, 0x9A, 0x90, 0xA4, 0xFC, 0x12, 0x45, 0xAC, 0x90, 0xA4, \r
+0xFF, 0x22, 0xEF, 0xF0, 0xE4, 0x90, 0xA4, 0x83, 0xF0, 0x22, 0xEF, 0xF0, 0xE4, 0x90, 0xA4, 0x82, \r
+0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF5, \r
+0x83, 0xE0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0xE4, 0x90, 0xA2, \r
+0x96, 0x01, 0xF8, 0xE0, 0x24, 0x01, 0xFF, 0x90, 0xA3, 0xBE, 0xE0, 0x34, 0x00, 0xFE, 0xC3, 0x22, \r
+0x75, 0xE8, 0x03, 0x75, 0xA8, 0x85, 0x22, 0x7F, 0x81, 0x12, 0x47, 0xAA, 0xEF, 0x54, 0xFE, 0xFD, \r
+0x7F, 0x81, 0x12, 0x46, 0x8D, 0x7F, 0x80, 0x12, 0x47, 0xF5, 0xFD, 0x7F, 0x80, 0x12, 0x46, 0x8D, \r
+0x12, 0x83, 0x3F, 0x12, 0x3E, 0x11, 0x51, 0x0C, 0x12, 0x5F, 0xED, 0x7F, 0x01, 0x12, 0x43, 0xA5, \r
+0x90, 0xA4, 0x64, 0x74, 0x02, 0xF0, 0xFF, 0x12, 0x43, 0xA5, 0x90, 0xA4, 0x64, 0xE0, 0x04, 0xF0, \r
+0x12, 0x58, 0x18, 0x11, 0x6E, 0x7F, 0x80, 0x12, 0x91, 0x6C, 0x7F, 0x80, 0x12, 0x46, 0x8D, 0x75, \r
+0x28, 0xFF, 0x11, 0x00, 0x51, 0x29, 0x7F, 0x81, 0x12, 0x47, 0xAA, 0xEF, 0x44, 0x04, 0xFD, 0x7F, \r
+0x81, 0x12, 0x46, 0x8D, 0x12, 0x83, 0x80, 0x31, 0xEF, 0xE4, 0xFF, 0x02, 0x44, 0x2E, 0x31, 0x45, \r
+0x12, 0x81, 0xF3, 0x12, 0x54, 0x91, 0x12, 0x4B, 0xCD, 0x11, 0x9A, 0x31, 0xE1, 0x90, 0xA4, 0x66, \r
+0xE0, 0x54, 0x7F, 0xF0, 0x54, 0xBF, 0xF0, 0x54, 0xDF, 0xF0, 0x54, 0xF0, 0xF0, 0xE4, 0x90, 0xA4, \r
+0x68, 0xF0, 0x90, 0xA4, 0x66, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90, 0xA4, 0x5D, 0xE0, 0x54, 0xFE, \r
+0xF0, 0x54, 0xFD, 0xF0, 0xE4, 0xA3, 0xF0, 0x12, 0x91, 0x5C, 0x44, 0x10, 0xF0, 0x90, 0xA2, 0x9C, \r
+0xE0, 0xFF, 0x64, 0x02, 0x70, 0x29, 0x31, 0x3E, 0x30, 0xE0, 0x02, 0x7E, 0x01, 0x90, 0xA4, 0x63, \r
+0x31, 0x3C, 0x30, 0xE1, 0x02, 0x7E, 0x01, 0x90, 0xA4, 0x61, 0x31, 0x3C, 0x30, 0xE2, 0x02, 0x7E, \r
+0x01, 0x90, 0xA4, 0x62, 0xEE, 0xF0, 0x90, 0xFD, 0x80, 0xE0, 0x90, 0x02, 0xFB, 0xF0, 0x22, 0xEF, \r
+0x64, 0x01, 0x70, 0x1D, 0x31, 0x35, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90, 0xA4, 0x63, 0x31, 0x33, \r
+0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0xA4, 0x61, 0x31, 0x33, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x80, \r
+0x23, 0x90, 0xA2, 0x9C, 0xE0, 0x64, 0x03, 0x70, 0x20, 0x31, 0x2C, 0x30, 0xE0, 0x02, 0x7F, 0x01, \r
+0x90, 0xA4, 0x63, 0x31, 0x2A, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0xA4, 0x61, 0x31, 0x2A, 0x30, \r
+0xE2, 0x02, 0x7F, 0x01, 0x90, 0xA4, 0x62, 0xEF, 0xF0, 0x22, 0xEF, 0xF0, 0x90, 0xFD, 0x78, 0xE0, \r
+0x7F, 0x00, 0x22, 0xEF, 0xF0, 0x90, 0xFD, 0x70, 0xE0, 0x7F, 0x00, 0x22, 0xEE, 0xF0, 0x90, 0xFD, \r
+0x80, 0xE0, 0x7E, 0x00, 0x22, 0xE4, 0xFD, 0xFF, 0x12, 0x90, 0xF5, 0xED, 0x70, 0x12, 0x31, 0x84, \r
+0xC0, 0x83, 0xC0, 0x82, 0x31, 0x7C, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5E, 0x80, 0x0F, \r
+0x31, 0x84, 0xC0, 0x83, 0xC0, 0x82, 0x31, 0x7C, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4E, 0xD0, \r
+0x82, 0xD0, 0x83, 0xF0, 0x31, 0x8F, 0x90, 0xA3, 0xF3, 0xEF, 0xF0, 0x22, 0xE0, 0xFE, 0x74, 0x01, \r
+0xA8, 0x07, 0x08, 0x22, 0x74, 0xE3, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xA3, 0xF5, 0x83, 0x22, 0xD3, \r
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7D, 0x10, 0xED, 0x14, 0xF9, 0x24, 0xE3, 0x31, 0x87, 0xE0, \r
+0x60, 0x36, 0x7C, 0x08, 0xEC, 0x14, 0x90, 0xA6, 0x23, 0xF0, 0x74, 0xE3, 0x29, 0x31, 0x87, 0xE0, \r
+0xFB, 0x7A, 0x00, 0x90, 0xA6, 0x23, 0x12, 0x6F, 0xE1, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, \r
+0xD8, 0xF9, 0x12, 0x86, 0x46, 0x60, 0x0F, 0xE9, 0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x90, 0xA6, 0x23, \r
+0xE0, 0x2F, 0x04, 0xFF, 0x80, 0x06, 0xDC, 0xCC, 0xDD, 0xBE, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, \r
+0x22, 0x90, 0xA3, 0xC0, 0xE0, 0x54, 0xFE, 0x71, 0x16, 0x90, 0xA3, 0xC7, 0x02, 0x58, 0xFA, 0x12, \r
+0x90, 0xD2, 0xBF, 0x01, 0x16, 0x90, 0xA4, 0x6C, 0xE0, 0x54, 0x30, 0xFF, 0xBF, 0x20, 0x07, 0x90, \r
+0xA4, 0x65, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0xA4, 0x65, 0xF0, 0x22, 0x90, 0x01, 0x01, 0xE0, \r
+0x44, 0x04, 0xF0, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x51, 0x91, 0x90, 0x01, 0x99, 0xE0, 0x44, \r
+0xC0, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x80, 0xF0, 0x22, 0xE4, 0x90, 0xA4, 0x6C, 0xF0, 0xA3, 0xF0, \r
+0x51, 0x79, 0xEF, 0x64, 0x01, 0x60, 0x3B, 0xC3, 0x90, 0xA4, 0x6D, 0xE0, 0x94, 0x88, 0x90, 0xA4, \r
+0x6C, 0xE0, 0x94, 0x13, 0x40, 0x0F, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x01, 0xC7, \r
+0x74, 0xFD, 0xF0, 0x80, 0x1D, 0x90, 0xA4, 0x6C, 0x51, 0xCC, 0x71, 0x69, 0xD3, 0x90, 0xA4, 0x6D, \r
+0xE0, 0x94, 0x32, 0x90, 0xA4, 0x6C, 0xE0, 0x94, 0x00, 0x40, 0xC5, 0x90, 0x01, 0xC6, 0xE0, 0x30, \r
+0xE3, 0xBE, 0x90, 0x01, 0xC7, 0x74, 0xFE, 0xF0, 0x22, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x44, \r
+0x0B, 0x51, 0x91, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xC0, 0x7F, 0x00, 0xB4, 0x40, 0x02, 0x7F, 0x01, \r
+0x22, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0xE4, 0x90, 0xA6, 0x1D, 0xF0, 0xA3, 0xF0, \r
+0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x22, 0xC3, 0x90, 0xA6, 0x1E, 0xE0, 0x94, 0xD0, 0x90, 0xA6, \r
+0x1D, 0xE0, 0x94, 0x07, 0x40, 0x0A, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x00, 0x22, \r
+0x90, 0xA6, 0x1D, 0x51, 0xCC, 0x51, 0x92, 0x80, 0xD7, 0x7F, 0x01, 0x22, 0xE4, 0x75, 0xF0, 0x01, \r
+0x02, 0x08, 0xD6, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA5, 0xF0, 0xEE, 0xF0, 0xA3, \r
+0x71, 0x15, 0x90, 0xA5, 0xF0, 0x12, 0x91, 0x41, 0xE0, 0x60, 0x23, 0xC3, 0x90, 0xA5, 0xF3, 0xE0, \r
+0x94, 0xE8, 0x90, 0xA5, 0xF2, 0xE0, 0x94, 0x03, 0x40, 0x0B, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x80, \r
+0xF0, 0x7F, 0x00, 0x80, 0x0B, 0x90, 0xA5, 0xF2, 0x51, 0xCC, 0x51, 0x92, 0x80, 0xD4, 0x7F, 0x01, \r
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0xA6, 0x0A, \r
+0x71, 0x15, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x90, 0xA6, 0x0A, \r
+0xE0, 0x6F, 0x60, 0x34, 0xC3, 0x90, 0xA6, 0x0C, 0xE0, 0x94, 0x88, 0x90, 0xA6, 0x0B, 0xE0, 0x94, \r
+0x13, 0x40, 0x08, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x90, 0xA6, 0x0B, 0x51, 0xCC, \r
+0x71, 0x69, 0xD3, 0x90, 0xA6, 0x0C, 0xE0, 0x94, 0x32, 0x90, 0xA6, 0x0B, 0xE0, 0x94, 0x00, 0x40, \r
+0xC1, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE0, 0xBA, 0x22, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x3E, 0x50, \r
+0x12, 0x84, 0xC5, 0x7F, 0x08, 0x12, 0x47, 0xAA, 0xEF, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x46, \r
+0x8D, 0xE4, 0xFF, 0x71, 0x1D, 0x90, 0xA3, 0xF5, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x91, 0x5E, 0x71, 0x70, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA3, 0xFC, \r
+0xE0, 0xFF, 0x60, 0x03, 0xB4, 0x08, 0x08, 0x12, 0x8F, 0x7C, 0xBF, 0x01, 0x02, 0x71, 0x8D, 0x22, \r
+0xF1, 0x74, 0x90, 0xA3, 0xBE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x02, 0x86, 0xE0, 0x44, 0x04, 0xF0, \r
+0x90, 0xA3, 0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x7D, 0x08, 0xE4, 0xFF, 0x12, 0x4F, 0xC4, 0x90, 0x05, \r
+0x52, 0xE0, 0x54, 0x07, 0x04, 0x90, 0xA3, 0xCB, 0x71, 0x16, 0x90, 0x04, 0x22, 0xE0, 0x54, 0xEF, \r
+0xF0, 0x22, 0x90, 0xA3, 0xCB, 0xE0, 0xFD, 0x7C, 0x00, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, \r
+0x07, 0x15, 0xED, 0x4C, 0x70, 0x05, 0x90, 0xA3, 0xD8, 0x80, 0x2A, 0xED, 0x64, 0x01, 0x4C, 0x70, \r
+0x05, 0x90, 0xA3, 0xD9, 0x80, 0x1F, 0xED, 0x64, 0x02, 0x4C, 0x70, 0x05, 0x90, 0xA3, 0xDA, 0x80, \r
+0x14, 0xED, 0x64, 0x03, 0x4C, 0x70, 0x05, 0x90, 0xA3, 0xDB, 0x80, 0x09, 0xED, 0x64, 0x04, 0x4C, \r
+0x70, 0x0D, 0x90, 0xA3, 0xDC, 0xE0, 0xFF, 0x12, 0x90, 0x69, 0x90, 0xA3, 0xCC, 0x51, 0xCC, 0x22, \r
+0x12, 0x48, 0x45, 0x90, 0xA3, 0xC0, 0xE0, 0x30, 0xE0, 0x02, 0x71, 0xE2, 0x90, 0xA4, 0x5D, 0xE0, \r
+0x30, 0xE0, 0x1A, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0xFD, 0xFF, 0x12, 0x4B, 0x6F, 0x12, 0x4F, 0xF5, \r
+0x30, 0xE0, 0x07, 0x7D, 0x0C, 0x7F, 0x01, 0x12, 0x4A, 0xD7, 0x12, 0x77, 0xC6, 0x22, 0x90, 0xA3, \r
+0xF5, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0xA4, 0x04, 0xE0, 0xFD, 0x7F, 0x93, 0x12, 0x46, 0x8D, 0x90, \r
+0xA3, 0xFA, 0xE0, 0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x05, 0x74, 0x10, 0xF0, 0x80, \r
+0x06, 0x90, 0x01, 0x2F, 0x74, 0x90, 0xF0, 0x7F, 0x08, 0x12, 0x47, 0xAA, 0xEF, 0x44, 0x10, 0xFD, \r
+0x7F, 0x08, 0x12, 0x46, 0x8D, 0x7F, 0x01, 0x71, 0x1D, 0x7F, 0x90, 0x12, 0x47, 0xAA, 0xEF, 0x44, \r
+0x01, 0xFD, 0x7F, 0x90, 0x12, 0x46, 0x8D, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0xE4, 0xFB, \r
+0xFA, 0xFD, 0x7F, 0x01, 0x12, 0x44, 0xDE, 0x90, 0xA4, 0x77, 0xEF, 0xF0, 0x60, 0xF0, 0x90, 0xA2, \r
+0x96, 0xE0, 0xFF, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0xE5, 0xC2, 0xAF, 0xEF, 0x30, 0xE0, 0x0E, 0x90, \r
+0xA2, 0x96, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0xFF, 0xB1, 0x0F, 0x12, 0x87, 0xD8, 0xB1, 0x05, 0x30, \r
+0xE1, 0x05, 0x54, 0xFD, 0xF0, 0xD1, 0xB1, 0xB1, 0x05, 0x30, 0xE2, 0x05, 0x54, 0xFB, 0xF0, 0xF1, \r
+0x85, 0xB1, 0x05, 0x30, 0xE5, 0x0B, 0x54, 0xDF, 0xF0, 0x51, 0x99, 0xBF, 0x01, 0x03, 0x12, 0x59, \r
+0x02, 0xD2, 0xAF, 0x80, 0xB9, 0xD2, 0xAF, 0xC2, 0xAF, 0x90, 0xA2, 0x96, 0xE0, 0xFF, 0x22, 0x90, \r
+0xA5, 0x1F, 0xEF, 0xF0, 0x90, 0xA3, 0xF3, 0xE0, 0x90, 0xA5, 0xA1, 0xF0, 0xE4, 0x90, 0xA5, 0x20, \r
+0xF0, 0x90, 0xA5, 0xA1, 0xE0, 0xFE, 0x90, 0xA5, 0x20, 0xE0, 0xFF, 0xC3, 0x9E, 0x50, 0x2C, 0xE0, \r
+0xFE, 0xD1, 0x08, 0xE4, 0xF0, 0x75, 0xF0, 0x10, 0xEE, 0xD1, 0x86, 0xE0, 0x30, 0xE7, 0x09, 0x74, \r
+0x81, 0x2F, 0xD1, 0x18, 0xE4, 0xF0, 0x80, 0x0B, 0xD1, 0x93, 0x90, 0xA5, 0x20, 0xE0, 0xD1, 0x08, \r
+0x74, 0x01, 0xF0, 0x90, 0xA5, 0x20, 0xE0, 0x04, 0xF0, 0x80, 0xC6, 0x7F, 0x0C, 0x7E, 0x00, 0x12, \r
+0x3E, 0x50, 0xE4, 0x90, 0xA5, 0x20, 0xF0, 0x90, 0xA5, 0xA1, 0xE0, 0xFF, 0x90, 0xA5, 0x20, 0xE0, \r
+0xFE, 0xC3, 0x9F, 0x40, 0x02, 0xC1, 0x07, 0x74, 0x21, 0x2E, 0xD1, 0x0A, 0xE0, 0x70, 0x02, 0xA1, \r
+0xFF, 0x75, 0xF0, 0x10, 0xEE, 0x90, 0x81, 0x06, 0xD1, 0x20, 0xEE, 0x90, 0x81, 0x07, 0xD1, 0x29, \r
+0xFC, 0xD1, 0xA7, 0x12, 0x87, 0xD0, 0x75, 0xF0, 0x10, 0xEC, 0x90, 0x81, 0x0A, 0xD1, 0x20, 0xEC, \r
+0x90, 0x81, 0x0B, 0xD1, 0x29, 0x75, 0xF0, 0x0A, 0xD1, 0x12, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7F, \r
+0x01, 0x90, 0xA5, 0x20, 0xE0, 0xFE, 0x75, 0xF0, 0x10, 0x90, 0x81, 0x0B, 0x12, 0x54, 0x83, 0xE0, \r
+0xFD, 0x75, 0xF0, 0x0A, 0xEE, 0xD1, 0x12, 0x75, 0xF0, 0x02, 0xEF, 0xD1, 0x8C, 0xED, 0xF0, 0x0F, \r
+0xEF, 0xB4, 0x05, 0xDD, 0x90, 0xA5, 0x20, 0xE0, 0xFF, 0x75, 0xF0, 0x10, 0x90, 0x81, 0x09, 0x12, \r
+0x45, 0x97, 0xE0, 0xFE, 0xD1, 0x9A, 0xEE, 0xF0, 0x90, 0xA5, 0x20, 0xE0, 0xFF, 0x90, 0xA5, 0x1F, \r
+0xE0, 0xFD, 0xD1, 0x35, 0x90, 0xA5, 0x20, 0xE0, 0x24, 0x81, 0xD1, 0x18, 0x74, 0x01, 0xF0, 0x90, \r
+0xA5, 0x20, 0xE0, 0x04, 0xF0, 0xA1, 0x67, 0x22, 0x24, 0x21, 0xF5, 0x82, 0xE4, 0x34, 0xA5, 0xF5, \r
+0x83, 0x22, 0x90, 0x8D, 0x01, 0x02, 0x45, 0x97, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0x22, \r
+0x12, 0x45, 0x97, 0xE0, 0xFD, 0x75, 0xF0, 0x10, 0x22, 0x12, 0x45, 0x97, 0xE0, 0xFE, 0xED, 0xFF, \r
+0x90, 0xA5, 0x20, 0xE0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xED, 0x60, 0x26, 0x75, \r
+0xF0, 0x0A, 0xEF, 0x90, 0x8D, 0x01, 0xD1, 0x76, 0x90, 0x8D, 0x03, 0xD1, 0x76, 0x90, 0x8D, 0x05, \r
+0xD1, 0x76, 0x90, 0x8D, 0x07, 0xD1, 0x76, 0x90, 0x8D, 0x09, 0xD1, 0x8C, 0xD1, 0xA5, 0x12, 0x56, \r
+0x13, 0xD1, 0x9A, 0xE4, 0xF0, 0xD1, 0x82, 0xE0, 0x54, 0xBF, 0x44, 0x80, 0xFE, 0xD1, 0x82, 0xEE, \r
+0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x45, 0x97, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, \r
+0xEF, 0x22, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x03, 0x02, 0x45, 0x97, 0x12, 0x45, 0x97, 0xE4, \r
+0xF0, 0xA3, 0x22, 0xD1, 0x82, 0xE0, 0x44, 0x40, 0xF0, 0x22, 0x74, 0x95, 0x2F, 0xF5, 0x82, 0xE4, \r
+0x34, 0x98, 0xF5, 0x83, 0x22, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x92, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA3, 0x25, 0xE0, 0xFF, 0x90, 0xA3, 0x24, \r
+0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x41, 0x90, 0xA3, 0x24, \r
+0xE0, 0xFE, 0x75, 0xF0, 0x08, 0x90, 0xA2, 0xD4, 0x12, 0x45, 0x97, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, \r
+0x08, 0xA4, 0x24, 0xD5, 0xF9, 0x74, 0xA2, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xAF, 0x05, 0x12, 0x51, \r
+0xFF, 0x90, 0xA3, 0x24, 0x12, 0x77, 0xBF, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, \r
+0x90, 0xA3, 0x24, 0xF0, 0x12, 0x73, 0x28, 0x90, 0xA2, 0x96, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, \r
+0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA5, 0xF8, 0x12, 0x45, 0xAC, \r
+0x7F, 0x96, 0x7E, 0x02, 0x51, 0xD3, 0xEF, 0x60, 0x46, 0xF1, 0x74, 0xFE, 0xEF, 0x24, 0x01, 0xFF, \r
+0xE4, 0x3E, 0xFE, 0x90, 0xA5, 0xFB, 0xEF, 0xF0, 0xEE, 0xFF, 0x90, 0xFD, 0x11, 0xF0, 0x90, 0xA5, \r
+0xFB, 0xE0, 0xFD, 0x90, 0x02, 0x94, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA5, 0xF8, 0x12, 0x82, 0xC9, \r
+0x24, 0x02, 0xFF, 0xE4, 0x33, 0xFE, 0x12, 0x82, 0x01, 0x90, 0xA5, 0xFB, 0xE0, 0x24, 0x18, 0xFF, \r
+0x90, 0xA5, 0xF8, 0x12, 0x45, 0xA3, 0x12, 0x82, 0x57, 0x90, 0x02, 0x96, 0x74, 0x01, 0xF0, 0xD0, \r
+0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, \r
+0x00, 0xFF, 0xEC, 0x3E, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFF, 0x90, 0xA3, \r
+0xBD, 0xE0, 0xFE, 0x90, 0xA3, 0xBC, 0xE0, 0xFD, 0xB5, 0x06, 0x04, 0x7E, 0x01, 0x80, 0x02, 0x7E, \r
+0x00, 0xEE, 0x64, 0x01, 0x60, 0x40, 0xED, 0x12, 0x7F, 0x4A, 0xFA, 0x7B, 0x01, 0xF1, 0x13, 0x7F, \r
+0x01, 0xEF, 0x60, 0x32, 0x90, 0xA3, 0xBC, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0x80, 0x02, \r
+0x7F, 0x00, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0xA3, 0xBC, 0xF0, 0x90, 0xA3, 0xBD, 0xE0, 0xFF, 0x90, \r
+0xA3, 0xBC, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x07, 0x90, \r
+0xA2, 0x96, 0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFF, 0xA1, 0x0F, 0xE4, \r
+0x90, 0xA4, 0x6E, 0xF0, 0x90, 0xA4, 0x6E, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xEF, 0x90, 0x01, 0xC4, \r
+0xF0, 0x74, 0x67, 0xA3, 0xF0, 0x12, 0x3E, 0x44, 0xBF, 0x01, 0x03, 0x12, 0x31, 0xFC, 0xC2, 0xAF, \r
+0x90, 0xA3, 0xF9, 0xE0, 0x60, 0x0E, 0x90, 0xA3, 0xFC, 0xE0, 0xFF, 0x90, 0xA3, 0xFB, 0xE0, 0x6F, \r
+0x60, 0x02, 0x11, 0xC5, 0xC2, 0xAF, 0x12, 0x83, 0x4C, 0xBF, 0x01, 0x03, 0x12, 0x8F, 0xA4, 0xD2, \r
+0xAF, 0xD2, 0xAF, 0x90, 0xA4, 0x65, 0xE0, 0xB4, 0x01, 0x02, 0x11, 0x44, 0x12, 0x4F, 0xFE, 0x12, \r
+0x42, 0xDD, 0x80, 0xB0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x00, 0x7E, 0x08, 0x12, \r
+0x37, 0x4E, 0x90, 0xA4, 0x6F, 0x12, 0x08, 0x6D, 0x7F, 0x00, 0x7E, 0x09, 0x12, 0x37, 0x4E, 0x90, \r
+0xA4, 0x73, 0x12, 0x08, 0x6D, 0x90, 0xA4, 0x6F, 0x11, 0xB8, 0x60, 0x17, 0x90, 0xA4, 0x6F, 0x11, \r
+0xAF, 0x90, 0xA4, 0x6F, 0x12, 0x08, 0x6D, 0x90, 0xA4, 0x6F, 0x11, 0xA6, 0x7F, 0x00, 0x7E, 0x08, \r
+0x12, 0x38, 0x45, 0x90, 0xA4, 0x73, 0x11, 0xB8, 0x60, 0x17, 0x90, 0xA4, 0x73, 0x11, 0xAF, 0x90, \r
+0xA4, 0x73, 0x12, 0x08, 0x6D, 0x90, 0xA4, 0x73, 0x11, 0xA6, 0x7F, 0x00, 0x7E, 0x09, 0x12, 0x38, \r
+0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x45, 0x7F, 0x90, 0xAA, 0xB9, 0x02, 0x08, 0x6D, 0x12, \r
+0x45, 0x7F, 0xEF, 0x54, 0xFE, 0xFF, 0xEC, 0x22, 0x12, 0x45, 0x7F, 0xEF, 0x54, 0x01, 0xFF, 0xE4, \r
+0xFE, 0xFD, 0xFC, 0xEF, 0x22, 0x90, 0xA3, 0xFB, 0xE0, 0xFF, 0x7D, 0x01, 0x02, 0x49, 0x0C, 0xE4, \r
+0xFF, 0x12, 0x4E, 0x64, 0xBF, 0x01, 0x0E, 0x90, 0xA3, 0xF9, 0xE0, 0x60, 0x08, 0x11, 0xE6, 0x54, \r
+0x07, 0x70, 0x02, 0x11, 0xC5, 0x22, 0x90, 0xA3, 0xFD, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xE4, 0xF5, \r
+0x61, 0x90, 0x06, 0xA9, 0xE0, 0xF5, 0x61, 0x54, 0xC0, 0x70, 0x07, 0x11, 0xE6, 0x54, 0xFD, 0xF0, \r
+0x80, 0xC3, 0xE5, 0x61, 0x30, 0xE6, 0x1F, 0x90, 0xA3, 0xF9, 0xE0, 0x64, 0x01, 0x70, 0x19, 0x90, \r
+0xA3, 0xFD, 0xE0, 0x44, 0x01, 0xF0, 0xF1, 0xB7, 0x64, 0x02, 0x60, 0x05, 0x12, 0x84, 0x3E, 0x80, \r
+0x07, 0x12, 0x4F, 0xAA, 0x80, 0x02, 0x11, 0xE6, 0xE5, 0x61, 0x90, 0xA3, 0xFD, 0x30, 0xE7, 0x0E, \r
+0xE0, 0x44, 0x02, 0x12, 0x48, 0x03, 0x90, 0xA3, 0xF4, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0xE0, 0x54, \r
+0xFD, 0xF0, 0x22, 0x90, 0xA3, 0xF9, 0xE0, 0x60, 0x10, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x04, \r
+0xF1, 0x0E, 0x80, 0x05, 0x12, 0x4F, 0xA2, 0x11, 0xC5, 0x90, 0xA4, 0x66, 0xE0, 0xFF, 0x12, 0x56, \r
+0xF4, 0x30, 0xE0, 0x1A, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x12, 0x77, 0xA2, 0x90, 0xA4, \r
+0x67, 0xE0, 0x30, 0xE0, 0x09, 0x51, 0xD3, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x31, 0x7F, 0x22, 0xD3, \r
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA6, 0x1C, 0xED, 0xF0, 0x90, 0xA6, 0x1B, 0xEF, 0xF0, \r
+0xD3, 0x94, 0x07, 0x50, 0x42, 0x7F, 0x47, 0x51, 0x27, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, \r
+0x5F, 0xFD, 0x7F, 0x47, 0x12, 0x46, 0x8D, 0x7F, 0x46, 0x51, 0x27, 0x80, 0x02, 0xC3, 0x33, 0xD8, \r
+0xFC, 0x4F, 0xFD, 0x7F, 0x46, 0xD1, 0xC8, 0x60, 0x0D, 0x7F, 0x45, 0x51, 0x27, 0x80, 0x02, 0xC3, \r
+0x33, 0xD8, 0xFC, 0x4F, 0x80, 0x0C, 0x7F, 0x45, 0x51, 0x27, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, \r
+0xF4, 0x5F, 0xFD, 0x7F, 0x45, 0x80, 0x46, 0x90, 0xA6, 0x1B, 0xE0, 0x24, 0xF8, 0xF0, 0x7F, 0x63, \r
+0x51, 0x27, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x63, 0x12, 0x46, 0x8D, \r
+0x7F, 0x62, 0x51, 0x27, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0xFD, 0x7F, 0x62, 0xD1, 0xC8, \r
+0x60, 0x0E, 0x51, 0x25, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0xFD, 0x7F, 0x61, 0x80, 0x0D, \r
+0x51, 0x25, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x61, 0x12, 0x46, 0x8D, \r
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x61, 0x12, 0x47, 0xAA, 0x90, 0xA6, 0x1B, 0xE0, 0xFE, 0x74, \r
+0x01, 0xA8, 0x06, 0x08, 0x22, 0xAD, 0x07, 0x90, 0xA4, 0x68, 0xE0, 0x75, 0xF0, 0x20, 0xA4, 0xFF, \r
+0x90, 0xA5, 0xE1, 0xE5, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA4, 0x69, 0xE0, 0x75, 0xF0, 0x08, \r
+0xA4, 0xAE, 0xF0, 0x90, 0xA5, 0xE3, 0xF0, 0xEE, 0xA3, 0xF0, 0xD1, 0xC0, 0x90, 0xA5, 0xE5, 0xF0, \r
+0xEE, 0xA3, 0xF0, 0xED, 0x64, 0x01, 0x60, 0x63, 0x90, 0xA4, 0x66, 0xE0, 0xFE, 0x12, 0x56, 0xF4, \r
+0x30, 0xE0, 0x58, 0xEE, 0x51, 0xD8, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x51, 0xCC, 0xFE, 0x54, 0x0F, \r
+0xFF, 0xEE, 0xC4, 0x13, 0x13, 0x54, 0x01, 0xFD, 0x51, 0xCC, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, \r
+0x23, 0xA3, 0xE0, 0x30, 0xE0, 0x0F, 0x90, 0xA5, 0xE6, 0xE0, 0x90, 0xA5, 0xDF, 0xF0, 0x90, 0xA5, \r
+0xE5, 0xD1, 0xFF, 0x80, 0x0F, 0xD1, 0xC0, 0xFF, 0x12, 0x3E, 0x50, 0x51, 0xD3, 0x20, 0xE0, 0x02, \r
+0x7D, 0x01, 0x31, 0x7F, 0x90, 0xA4, 0x66, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0x90, 0xA5, \r
+0xE4, 0xE0, 0x90, 0xA5, 0xDF, 0xF0, 0x90, 0xA5, 0xE3, 0xD1, 0xFF, 0x22, 0x31, 0x7F, 0x90, 0xA4, \r
+0x66, 0xE0, 0x22, 0x90, 0xA4, 0x66, 0xE0, 0xFE, 0x54, 0x0F, 0xFF, 0xEE, 0xC4, 0x13, 0x13, 0x54, \r
+0x03, 0x7D, 0x00, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x65, 0x8D, 0x66, 0x8B, \r
+0x67, 0xE4, 0x90, 0xA5, 0xD0, 0xF0, 0xE5, 0x65, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0xA5, 0xCB, \r
+0xF0, 0xE5, 0x65, 0x54, 0x07, 0x90, 0xA5, 0xCD, 0xF0, 0x75, 0xF0, 0x10, 0xEF, 0x91, 0x2E, 0xE0, \r
+0x90, 0xA5, 0xCE, 0xF0, 0x12, 0x57, 0xBD, 0xE0, 0x54, 0x7F, 0x90, 0xA5, 0xD1, 0xF0, 0x75, 0xF0, \r
+0x04, 0xE5, 0x65, 0x12, 0x57, 0x00, 0xE0, 0x90, 0xA5, 0xD2, 0xF0, 0xD1, 0xE1, 0xE5, 0x67, 0x70, \r
+0x26, 0xAF, 0x65, 0x12, 0x7F, 0x8F, 0x90, 0xA5, 0xCC, 0xE0, 0xFF, 0x12, 0x87, 0xBB, 0xF1, 0xC7, \r
+0xEF, 0x12, 0x87, 0xAD, 0x74, 0x01, 0x93, 0x2D, 0xFF, 0xE4, 0x93, 0x3C, 0xC3, 0x13, 0xFE, 0xEF, \r
+0x13, 0xFF, 0xE5, 0x65, 0x12, 0x87, 0xC7, 0x90, 0xA5, 0xD1, 0xE0, 0xFF, 0x90, 0xA5, 0xCC, 0xE0, \r
+0xFE, 0xD3, 0x9F, 0x40, 0x0B, 0xE5, 0x66, 0x54, 0x80, 0xFD, 0xEF, 0x4D, 0xF5, 0x66, 0x80, 0x0C, \r
+0x90, 0xA5, 0xD2, 0xE0, 0xFF, 0xEE, 0xC3, 0x9F, 0x50, 0x02, 0x8F, 0x66, 0xD1, 0xE1, 0xE5, 0x66, \r
+0x54, 0x80, 0x90, 0xA5, 0xCF, 0xF0, 0xE5, 0x67, 0x70, 0x23, 0x91, 0xF0, 0xC0, 0x83, 0xC0, 0x82, \r
+0xE0, 0xFF, 0x90, 0xA5, 0xCD, 0x51, 0x2D, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0xD0, \r
+0x82, 0xD0, 0x83, 0xF0, 0x90, 0xA5, 0xCE, 0xE0, 0x54, 0x7F, 0xF0, 0x80, 0x39, 0x91, 0xF0, 0xC0, \r
+0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, 0xA5, 0xCD, 0x51, 0x2D, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, \r
+0x4F, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x91, 0x29, 0xE0, 0x54, 0x07, 0xFF, 0x90, 0xA5, 0xCE, 0xF0, \r
+0x90, 0xA5, 0xCC, 0xE0, 0x90, 0x41, 0xAD, 0x93, 0xFE, 0x33, 0x33, 0x33, 0x54, 0xF8, 0x4F, 0x90, \r
+0xA5, 0xCE, 0xF0, 0x44, 0x80, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x65, 0xB1, 0x07, 0xE5, 0x66, 0xF0, \r
+0xE5, 0x65, 0x70, 0x06, 0x90, 0x01, 0xC8, 0xE5, 0x66, 0xF0, 0x90, 0xA5, 0xCE, 0xE0, 0xFF, 0x91, \r
+0x29, 0xEF, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x65, 0xD1, 0xF9, 0xE0, 0x54, 0xFC, 0xFF, 0xE5, 0x68, \r
+0x54, 0x03, 0x4F, 0xFF, 0x75, 0xF0, 0x10, 0xE5, 0x65, 0xD1, 0xF9, 0xEF, 0xF0, 0x7D, 0x01, 0xAF, \r
+0x65, 0x12, 0x66, 0x35, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0xF0, 0x10, 0xE5, 0x65, 0x90, 0x81, \r
+0x01, 0x02, 0x45, 0x97, 0xE4, 0xF5, 0x61, 0x90, 0xA3, 0xF3, 0xE0, 0xFF, 0xE5, 0x61, 0xC3, 0x9F, \r
+0x40, 0x02, 0x81, 0xE5, 0xAF, 0x61, 0x12, 0x4E, 0x64, 0xEF, 0x70, 0x02, 0x81, 0xE1, 0xE5, 0x61, \r
+0x13, 0x13, 0x13, 0x54, 0x1F, 0xFF, 0xE5, 0x61, 0x54, 0x07, 0xFE, 0x74, 0x81, 0x2F, 0x91, 0xF6, \r
+0xE0, 0xFD, 0xAF, 0x06, 0xF1, 0xE3, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, \r
+0xEF, 0x5D, 0x60, 0x6D, 0x75, 0xF0, 0x10, 0xE5, 0x61, 0x91, 0x2E, 0xE0, 0x20, 0xE7, 0x02, 0x80, \r
+0x10, 0x75, 0xF0, 0x10, 0xE5, 0x61, 0x90, 0x81, 0x02, 0x12, 0x45, 0x97, 0xE0, 0xFF, 0x20, 0xE7, \r
+0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x20, 0xF0, 0x80, 0x47, 0xEF, 0x30, 0xE6, 0x12, 0x75, 0xF0, \r
+0x10, 0xE5, 0x61, 0xB1, 0x07, 0xD1, 0xB8, 0x12, 0x51, 0x2E, 0xD1, 0xB1, 0xE4, 0xFB, 0x80, 0x2D, \r
+0x91, 0xE6, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x91, 0xE6, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x01, 0x40, \r
+0x0C, 0xAF, 0x61, 0xF1, 0x3C, 0x91, 0xE6, 0xF5, 0x83, 0xE4, 0xF0, 0x80, 0x14, 0x75, 0xF0, 0x10, \r
+0xE5, 0x61, 0xB1, 0x07, 0xD1, 0xB8, 0x12, 0x51, 0x2E, 0xD1, 0xB1, 0x7B, 0x01, 0xAF, 0x61, 0x51, \r
+0xE4, 0x05, 0x61, 0x81, 0x37, 0x22, 0x74, 0x15, 0x25, 0x61, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0x22, \r
+0x90, 0xA5, 0xCB, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0x90, 0xA4, \r
+0x87, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x51, 0x90, 0x81, 0x00, 0x02, 0x45, 0x97, 0x12, 0x06, 0x89, \r
+0x90, 0xA4, 0x7C, 0xF1, 0xC0, 0x90, 0xA4, 0x7D, 0x12, 0x57, 0xB6, 0xFD, 0xE4, 0xFF, 0x74, 0x80, \r
+0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF5, 0x83, 0xE4, 0xF0, 0x0F, 0xEF, 0xB4, 0x0C, 0xEF, 0xED, \r
+0x30, 0xE0, 0x46, 0xD1, 0xD0, 0x40, 0x42, 0xA3, 0xE0, 0xD3, 0x94, 0x80, 0x40, 0x3B, 0x90, 0xA4, \r
+0x80, 0x74, 0x01, 0xD1, 0x8F, 0x90, 0xA4, 0x81, 0xD1, 0x8E, 0x78, 0x08, 0x12, 0x08, 0x47, 0x90, \r
+0xA4, 0x82, 0xD1, 0x8E, 0x78, 0x10, 0x12, 0x08, 0x47, 0x90, 0xA4, 0x83, 0xD1, 0x8E, 0x78, 0x18, \r
+0x12, 0x08, 0x47, 0x90, 0xA4, 0x84, 0xEF, 0xF0, 0xD1, 0xEA, 0x74, 0x05, 0xF0, 0x90, 0x94, 0x91, \r
+0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x6B, 0xED, 0x30, 0xE1, 0x5A, 0x90, 0xA4, 0x80, \r
+0x74, 0x02, 0xF0, 0xD1, 0xD0, 0x50, 0x1A, 0xE0, 0xFC, 0xF1, 0x92, 0xD1, 0x87, 0x90, 0xA4, 0x81, \r
+0xD1, 0x79, 0x90, 0xA4, 0x83, 0xF0, 0xEE, 0xA3, 0xF0, 0x90, 0xA4, 0x7C, 0x12, 0x55, 0xF8, 0x80, \r
+0x06, 0x90, 0xA4, 0x81, 0x74, 0xEA, 0xF0, 0x90, 0xA4, 0x7D, 0xE0, 0xD3, 0x94, 0x80, 0x50, 0x1A, \r
+0xE0, 0xFC, 0xF1, 0x92, 0xD1, 0x87, 0x90, 0xA4, 0x85, 0xD1, 0x79, 0x90, 0xA4, 0x87, 0xF0, 0xEE, \r
+0xA3, 0xF0, 0x90, 0xA4, 0x7D, 0x12, 0x55, 0xF8, 0x80, 0x06, 0x90, 0xA4, 0x85, 0x74, 0xEA, 0xF0, \r
+0xD1, 0xEA, 0x74, 0x09, 0xF0, 0xC1, 0x6B, 0xED, 0x60, 0x02, 0xC1, 0x60, 0x90, 0xA4, 0x7C, 0xE0, \r
+0xFD, 0xD3, 0x94, 0x80, 0x50, 0x2C, 0xE0, 0x90, 0xA4, 0x80, 0xF0, 0xD1, 0x98, 0xD1, 0x87, 0x90, \r
+0xA4, 0x81, 0xD1, 0xA2, 0xD1, 0x87, 0x90, 0xA4, 0x83, 0xD1, 0xD8, 0xB1, 0x07, 0xE0, 0x90, 0xA4, \r
+0x85, 0xF0, 0x90, 0xA4, 0x7C, 0xD1, 0x96, 0x12, 0x56, 0x13, 0xEF, 0xD1, 0xA7, 0x12, 0x56, 0x13, \r
+0x80, 0x02, 0xF1, 0xCF, 0x90, 0xA4, 0x7D, 0xE0, 0xFD, 0xD3, 0x94, 0x80, 0x50, 0x2C, 0xE0, 0x90, \r
+0xA4, 0x86, 0xF0, 0xD1, 0x98, 0xD1, 0x87, 0x90, 0xA4, 0x87, 0xD1, 0xA2, 0xD1, 0x87, 0x90, 0xA4, \r
+0x89, 0xD1, 0xD8, 0xB1, 0x07, 0xE0, 0x90, 0xA4, 0x8B, 0xF0, 0x90, 0xA4, 0x7D, 0xD1, 0x96, 0x12, \r
+0x56, 0x13, 0xEF, 0xD1, 0xA7, 0x12, 0x56, 0x13, 0x80, 0x08, 0x90, 0xA4, 0x7D, 0xE0, 0x90, 0xA4, \r
+0x86, 0xF0, 0x90, 0xA4, 0x7E, 0x74, 0x04, 0xF0, 0x90, 0xA4, 0x8C, 0x74, 0x0C, 0xF0, 0x80, 0x0B, \r
+0x90, 0xA4, 0x7E, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0xA4, 0x8C, 0xF0, 0x7B, 0x01, 0x7A, 0xA4, 0x79, \r
+0x7E, 0x12, 0x7B, 0x0D, 0x7F, 0x04, 0x02, 0x77, 0x87, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, \r
+0x24, 0x15, 0xF5, 0x82, 0xE4, 0x34, 0x9E, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x22, 0xEF, 0xF0, \r
+0x90, 0x94, 0x91, 0x02, 0x45, 0x7F, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x95, 0xF5, 0x82, 0xE4, 0x34, \r
+0x9C, 0x22, 0xF0, 0xEE, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x95, 0xF5, 0x82, 0xE4, 0x34, 0x9B, \r
+0x22, 0x13, 0x13, 0x54, 0x03, 0xF5, 0x68, 0x22, 0xE0, 0xFD, 0x75, 0xF0, 0x04, 0xE5, 0x61, 0x22, \r
+0x90, 0xA5, 0xE1, 0xE0, 0xFE, 0xA3, 0xE0, 0x22, 0x12, 0x46, 0x8D, 0x90, 0xA6, 0x1C, 0xE0, 0x22, \r
+0x90, 0xA4, 0x7C, 0xE0, 0xD3, 0x94, 0x80, 0x22, 0xF0, 0xEE, 0xA3, 0xF0, 0x75, 0xF0, 0x10, 0xED, \r
+0x22, 0xE5, 0x66, 0x54, 0x7F, 0x90, 0xA5, 0xCC, 0xF0, 0x22, 0x90, 0xA4, 0x7E, 0x74, 0x0D, 0xF0, \r
+0x90, 0xA4, 0x8C, 0x22, 0x75, 0xF0, 0x10, 0xE5, 0x51, 0x90, 0x81, 0x05, 0x02, 0x45, 0x97, 0xE0, \r
+0x90, 0xA5, 0xE0, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x02, 0x48, 0x18, 0x12, 0x90, \r
+0xDF, 0x30, 0xE0, 0x05, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, \r
+0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0xA5, 0xDF, 0xF0, 0x90, 0xA4, 0x58, 0xE0, 0xC3, 0x13, \r
+0x54, 0x7F, 0xF1, 0x00, 0x90, 0xA3, 0xF4, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x75, 0xF0, 0x04, 0xEF, \r
+0x12, 0x51, 0x2E, 0xFE, 0x13, 0x13, 0x54, 0x03, 0xFC, 0x12, 0x57, 0xBD, 0xE0, 0xFB, 0xF1, 0x85, \r
+0xE0, 0x54, 0x7F, 0xFD, 0x64, 0x2C, 0x70, 0x19, 0xEE, 0x54, 0x03, 0xFE, 0xEC, 0xD3, 0x9E, 0x50, \r
+0x10, 0xEC, 0x60, 0x0D, 0x1C, 0xEC, 0x12, 0x87, 0x93, 0xEF, 0x12, 0x51, 0x2E, 0x54, 0xF3, 0x4E, \r
+0xF0, 0xED, 0xD3, 0x9B, 0x40, 0x02, 0xAD, 0x03, 0xF1, 0x85, 0xE0, 0x54, 0x80, 0x42, 0x05, 0x8C, \r
+0x68, 0xE4, 0xFB, 0x41, 0xE4, 0x74, 0x95, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0x22, \r
+0xE5, 0x51, 0x25, 0xE0, 0x24, 0x95, 0xF5, 0x82, 0xE4, 0x34, 0x9F, 0x22, 0x90, 0xA3, 0xF9, 0xE0, \r
+0x64, 0x01, 0x70, 0x12, 0xF1, 0xB7, 0x60, 0x05, 0x12, 0x4B, 0x66, 0xE1, 0x0E, 0x90, 0xA3, 0xFC, \r
+0xE0, 0x70, 0x03, 0x12, 0x49, 0x08, 0x22, 0x90, 0xA3, 0xF7, 0xE0, 0x54, 0x0F, 0x22, 0x81, 0x34, \r
+0xF0, 0x90, 0x00, 0x01, 0x02, 0x06, 0xA2, 0xE4, 0x93, 0xFC, 0x74, 0x01, 0x93, 0xFD, 0x22, 0x90, \r
+0xA4, 0x7C, 0xE0, 0x90, 0xA4, 0x80, 0xF0, 0x22, 0x90, 0xA3, 0xF9, 0xE0, 0x60, 0x02, 0xF1, 0x9C, \r
+0x22, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, \r
+0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0xEB, 0x90, 0x01, 0xC4, 0xED, \r
+0xF0, 0x74, 0x6F, 0x11, 0x12, 0xD0, 0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, \r
+0xE0, 0x32, 0xFF, 0xA3, 0xF0, 0xED, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xC0, \r
+0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0x1F, \r
+0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x70, 0x11, 0x12, 0xD0, 0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, \r
+0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, \r
+0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, \r
+0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x46, 0xF0, 0x74, 0x70, 0xA3, 0xF0, 0x11, 0xB8, 0xE5, \r
+0x14, 0x30, 0xE7, 0x02, 0x11, 0x9C, 0x74, 0x46, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x70, 0xA3, \r
+0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, \r
+0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x7F, 0x01, 0x7E, 0x00, \r
+0x12, 0x3D, 0xC2, 0x7F, 0xF2, 0x12, 0x47, 0xAA, 0xEF, 0x20, 0xE6, 0x0B, 0x7F, 0x05, 0x12, 0x47, \r
+0xF5, 0xFD, 0x7F, 0x05, 0x12, 0x46, 0x8D, 0x22, 0x7F, 0x54, 0x12, 0x47, 0xAA, 0xE5, 0x0D, 0x5F, \r
+0xF5, 0x11, 0x7F, 0x55, 0x12, 0x47, 0xAA, 0xE5, 0x0E, 0x5F, 0xF5, 0x12, 0x7F, 0x56, 0x12, 0x47, \r
+0xAA, 0xE5, 0x0F, 0x5F, 0xF5, 0x13, 0x7F, 0x57, 0x12, 0x47, 0xAA, 0xE5, 0x10, 0x5F, 0xF5, 0x14, \r
+0xAD, 0x11, 0x7F, 0x54, 0x12, 0x46, 0x8D, 0xAD, 0x12, 0x7F, 0x55, 0x12, 0x46, 0x8D, 0xAD, 0x13, \r
+0x7F, 0x56, 0x12, 0x46, 0x8D, 0xAD, 0x14, 0x7F, 0x57, 0x12, 0x46, 0x8D, 0x53, 0x91, 0xEF, 0x22, \r
+0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, \r
+0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, \r
+0x74, 0x00, 0xF0, 0x74, 0x71, 0xA3, 0xF0, 0x12, 0x83, 0x8A, 0xE5, 0x19, 0x30, 0xE1, 0x02, 0x31, \r
+0xC7, 0xE5, 0x19, 0x30, 0xE3, 0x02, 0xF1, 0x65, 0xE5, 0x19, 0x30, 0xE4, 0x02, 0x51, 0x47, 0xE5, \r
+0x19, 0x30, 0xE5, 0x03, 0x12, 0x83, 0xE7, 0xE5, 0x1B, 0x30, 0xE0, 0x03, 0x12, 0x64, 0x30, 0xE5, \r
+0x1B, 0x30, 0xE1, 0x02, 0x51, 0x5A, 0xE5, 0x1B, 0x30, 0xE2, 0x02, 0xF1, 0x4E, 0xE5, 0x1B, 0x30, \r
+0xE3, 0x02, 0xF1, 0x71, 0xE5, 0x1B, 0x30, 0xE4, 0x02, 0xF1, 0x27, 0xE5, 0x1B, 0x30, 0xE5, 0x03, \r
+0x12, 0x84, 0x23, 0xE5, 0x1B, 0x30, 0xE6, 0x03, 0x12, 0x68, 0xCF, 0xE5, 0x1B, 0x30, 0xE7, 0x02, \r
+0xD1, 0xF1, 0xE5, 0x1C, 0x30, 0xE0, 0x02, 0xF1, 0x01, 0xE5, 0x1C, 0x30, 0xE1, 0x03, 0x12, 0x6F, \r
+0xD8, 0xE5, 0x1C, 0x30, 0xE4, 0x03, 0x12, 0x67, 0xEB, 0xE5, 0x1C, 0x30, 0xE5, 0x03, 0x12, 0x6F, \r
+0xBE, 0x74, 0x00, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x71, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, \r
+0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, \r
+0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xE4, 0xFF, 0x90, 0xA5, 0x00, 0xEF, 0xF0, 0x90, 0x04, \r
+0x7E, 0xE0, 0xF5, 0x62, 0xA3, 0xE0, 0xF5, 0x63, 0x65, 0x62, 0x60, 0x6A, 0x90, 0xA5, 0x01, 0x74, \r
+0x03, 0xF0, 0x90, 0xA5, 0x0F, 0x74, 0x08, 0xF0, 0xE5, 0x63, 0x04, 0x54, 0x0F, 0xF5, 0x64, 0xE4, \r
+0xF5, 0x61, 0xE5, 0x64, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, \r
+0x83, 0xE5, 0x82, 0x25, 0x61, 0x12, 0x54, 0x89, 0xE0, 0xFF, 0x74, 0x03, 0x25, 0x61, 0xF5, 0x82, \r
+0xE4, 0x34, 0xA5, 0xF5, 0x83, 0xEF, 0xF0, 0x05, 0x61, 0xE5, 0x61, 0xB4, 0x08, 0xD4, 0x7B, 0x01, \r
+0x7A, 0xA5, 0x79, 0x01, 0x12, 0x7B, 0x0D, 0xE5, 0x63, 0x04, 0x54, 0x0F, 0xF5, 0x63, 0xB4, 0x0F, \r
+0x03, 0xE4, 0xF5, 0x63, 0x90, 0x04, 0x7F, 0xE5, 0x63, 0xF0, 0x90, 0xA5, 0x00, 0xE0, 0x7F, 0x04, \r
+0x70, 0x02, 0x80, 0x07, 0xF1, 0x87, 0x22, 0x71, 0x28, 0x7F, 0x02, 0x8F, 0x6C, 0x7F, 0x02, 0x12, \r
+0x44, 0xB7, 0x90, 0xA2, 0x96, 0xE0, 0x45, 0x6C, 0xF0, 0x22, 0x90, 0xA3, 0xF9, 0xE0, 0x70, 0x02, \r
+0x41, 0xEA, 0x90, 0xA4, 0x10, 0xE0, 0x04, 0x12, 0x4E, 0xFA, 0x12, 0x45, 0x61, 0xC0, 0x04, 0xC0, \r
+0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0x12, 0x4F, 0x14, 0x78, 0x10, 0x12, 0x08, 0x5A, \r
+0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x61, 0xC0, 0x04, 0xC0, 0x05, 0xC0, \r
+0x06, 0xC0, 0x07, 0xA3, 0x12, 0x4F, 0x14, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, \r
+0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x61, 0x90, 0xA4, 0x44, 0x12, 0x90, 0xAD, 0x54, 0x7F, 0xF0, \r
+0xA3, 0xE0, 0x30, 0xE0, 0x0A, 0x12, 0x79, 0x0A, 0x74, 0x05, 0xF0, 0xB1, 0xF5, 0xD1, 0xD9, 0x90, \r
+0xA3, 0xF5, 0x12, 0x90, 0xE2, 0x30, 0xE0, 0x0B, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x04, 0x91, \r
+0x54, 0x91, 0x4E, 0x90, 0xA6, 0x24, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x80, 0x40, 0x0B, 0x90, \r
+0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xD1, 0xF9, 0xBF, 0x03, 0x0D, 0x90, \r
+0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x90, 0x05, 0x21, 0xE0, 0x44, 0x80, 0xF0, 0x7F, 0x01, 0x51, 0x4B, \r
+0x90, 0xA4, 0x5D, 0xE0, 0x30, 0xE0, 0x08, 0x12, 0x91, 0x1D, 0x12, 0x48, 0x0C, 0xF1, 0xC6, 0x90, \r
+0xA2, 0x9C, 0xE0, 0xB4, 0x01, 0x11, 0x12, 0x7F, 0x41, 0x20, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x54, \r
+0x07, 0x20, 0xE0, 0x03, 0x12, 0x8F, 0xC6, 0x22, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0xA6, \r
+0x17, 0xF0, 0x90, 0xA6, 0x17, 0xE0, 0xFD, 0x70, 0x02, 0x81, 0x32, 0x90, 0xA3, 0x24, 0xE0, 0xFF, \r
+0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0xA3, 0x25, 0xE0, 0xB5, \r
+0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1, 0xE0, 0x44, \r
+0x01, 0xF0, 0x22, 0x90, 0xA6, 0x13, 0x12, 0x6F, 0xE1, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, \r
+0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0x81, 0x15, 0xE4, 0x90, 0xA6, 0x18, 0xF0, 0x90, 0xA6, \r
+0x18, 0xE0, 0xF9, 0xC3, 0x94, 0x04, 0x50, 0x42, 0x91, 0x34, 0xA4, 0xFF, 0xE9, 0xFD, 0x7C, 0x00, \r
+0x2F, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xD0, 0x91, 0x3C, 0x90, 0xA2, 0xD4, 0x12, 0x45, 0x97, \r
+0xE5, 0x82, 0x29, 0x12, 0x54, 0x89, 0xEF, 0x91, 0x33, 0xA4, 0x2D, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, \r
+0x74, 0xF0, 0x91, 0x3C, 0x90, 0xA2, 0xD8, 0x12, 0x45, 0x97, 0xE5, 0x82, 0x29, 0x12, 0x54, 0x89, \r
+0xEF, 0xF0, 0x90, 0xA6, 0x18, 0xE0, 0x04, 0xF0, 0x80, 0xB4, 0x90, 0xA6, 0x17, 0xE0, 0xFF, 0x90, \r
+0xA6, 0x13, 0x12, 0x6A, 0x2D, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0xA6, 0x17, \r
+0xF0, 0x90, 0xA6, 0x13, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, \r
+0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0xA6, 0x13, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x90, \r
+0xA3, 0x25, 0xF1, 0xBF, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x70, 0x02, 0x61, 0x32, 0xE4, 0x90, \r
+0xA3, 0x25, 0xF0, 0x61, 0x32, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0xA6, 0x13, 0xE0, \r
+0x44, 0x80, 0x90, 0x00, 0x8A, 0x91, 0x33, 0x90, 0x01, 0xD0, 0x12, 0x45, 0x97, 0xE0, 0x90, 0x01, \r
+0xC3, 0xF0, 0x22, 0xF0, 0x90, 0xA6, 0x13, 0xE0, 0x75, 0xF0, 0x04, 0x22, 0x2F, 0xF5, 0x82, 0x74, \r
+0x01, 0x3E, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0xA3, 0x25, 0xE0, 0x75, 0xF0, 0x08, 0x22, 0x7D, 0x01, \r
+0x7F, 0x02, 0x80, 0x04, 0x7D, 0x02, 0x7F, 0x02, 0x74, 0x15, 0xD1, 0xE1, 0xFE, 0xF6, 0x74, 0x30, \r
+0xC1, 0xCE, 0x90, 0x05, 0x62, 0xE0, 0xFE, 0x90, 0x05, 0x61, 0xE0, 0xFD, 0xED, 0x78, 0x02, 0xCE, \r
+0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0xA5, 0x00, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, \r
+0x4E, 0x5C, 0x60, 0x02, 0xA1, 0x28, 0x90, 0xA3, 0xF9, 0xE0, 0x70, 0x02, 0xA1, 0x28, 0xB1, 0x39, \r
+0x64, 0x01, 0x70, 0x22, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0xA4, 0x00, 0xF0, 0x90, 0x06, 0xAA, 0xE0, \r
+0x90, 0xA3, 0xFF, 0xF0, 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0xA3, 0xFF, 0xE0, 0xFE, 0xFF, 0x80, \r
+0x00, 0x90, 0xA4, 0x00, 0xEF, 0xF0, 0x12, 0x7D, 0x32, 0xE4, 0x90, 0xA4, 0x02, 0xF1, 0x11, 0xF1, \r
+0x43, 0xF1, 0x1E, 0x54, 0xEF, 0xF0, 0xB1, 0x39, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x68, \r
+0xEE, 0xB1, 0x29, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x4D, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, \r
+0xE0, 0x1E, 0xB1, 0x31, 0x6F, 0x70, 0x3F, 0x90, 0xA3, 0xF5, 0xE0, 0x44, 0x40, 0xF0, 0xF1, 0xDE, \r
+0xB1, 0x42, 0xD1, 0xE9, 0x91, 0x4E, 0x91, 0x54, 0x90, 0xA4, 0x00, 0xE0, 0x14, 0xF0, 0x80, 0x26, \r
+0xF1, 0xD6, 0x64, 0x01, 0x70, 0x20, 0xB1, 0x31, 0xFE, 0x6F, 0x60, 0x1A, 0x90, 0x05, 0x73, 0xE0, \r
+0xFF, 0xEE, 0x6F, 0x60, 0x11, 0xB1, 0x29, 0x54, 0x3F, 0x30, 0xE0, 0x0A, 0xEF, 0x54, 0xBF, 0xB1, \r
+0x42, 0xD1, 0xC6, 0x12, 0x4F, 0xBA, 0xF1, 0xCE, 0x22, 0x90, 0xA3, 0xF5, 0xE0, 0xFF, 0x13, 0x13, \r
+0x22, 0x90, 0xA3, 0xFF, 0xE0, 0xFF, 0xA3, 0xE0, 0x22, 0x90, 0xA3, 0xF7, 0xE0, 0xFF, 0xC4, 0x54, \r
+0x0F, 0x22, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x22, 0xB1, 0x29, 0x13, \r
+0x54, 0x1F, 0x30, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x02, 0x91, 0x54, \r
+0x90, 0xA3, 0xF4, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x09, 0xEF, 0xF1, 0x1C, 0x54, \r
+0x07, 0x70, 0x44, 0x80, 0x3F, 0x90, 0xA4, 0x02, 0xE0, 0x04, 0xF0, 0x90, 0xA3, 0xFD, 0xE0, 0x54, \r
+0xEF, 0xF0, 0xF1, 0x59, 0x40, 0x2E, 0x12, 0x4E, 0x5C, 0x70, 0x2C, 0x12, 0x6F, 0xB7, 0x70, 0x04, \r
+0xB1, 0xC0, 0x80, 0x24, 0xB1, 0xC0, 0x90, 0xA4, 0x03, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94, 0x02, \r
+0x40, 0x09, 0xB1, 0xB8, 0xE4, 0x90, 0xA4, 0x03, 0xF0, 0x80, 0x03, 0x12, 0x4F, 0xAA, 0xE4, 0x90, \r
+0xA4, 0x02, 0xF0, 0x22, 0x12, 0x68, 0xC5, 0x22, 0x90, 0xA3, 0xF5, 0xE0, 0x54, 0xFB, 0xF0, 0x22, \r
+0xF1, 0x59, 0x40, 0x30, 0x90, 0xA4, 0x13, 0xE0, 0x04, 0xF0, 0x90, 0xA4, 0x55, 0xE0, 0xFF, 0x90, \r
+0xA4, 0x13, 0xE0, 0xD3, 0x9F, 0x50, 0x1D, 0x90, 0xA4, 0x0B, 0xE0, 0x04, 0x12, 0x90, 0x82, 0x90, \r
+0xA4, 0x12, 0xF0, 0xFB, 0x90, 0xA4, 0x0B, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x90, 0xA6, 0x03, 0x74, \r
+0x04, 0xF0, 0xB1, 0xF5, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xAC, 0x07, 0x90, 0xA3, \r
+0xF5, 0xE0, 0x12, 0x56, 0xF4, 0x30, 0xE0, 0x02, 0xC1, 0xAF, 0x90, 0xA3, 0xF4, 0xE0, 0x30, 0xE0, \r
+0x16, 0x90, 0xA4, 0x16, 0xE0, 0x24, 0x04, 0x90, 0xA4, 0x0E, 0xF0, 0x90, 0xA4, 0x16, 0xE0, 0x24, \r
+0x03, 0x90, 0xA4, 0x0D, 0xF0, 0x80, 0x0D, 0x90, 0xA4, 0x0E, 0x74, 0x02, 0xF0, 0x90, 0xA4, 0x0D, \r
+0x14, 0xF0, 0x0B, 0x0B, 0x90, 0xA4, 0x0D, 0xE0, 0xFA, 0x90, 0xA4, 0x0C, 0xE0, 0xD3, 0x9A, 0x50, \r
+0x0E, 0x90, 0xA4, 0x01, 0xEB, 0xF0, 0x90, 0xA4, 0x0E, 0xE0, 0xC3, 0x9D, 0x2C, 0x80, 0x11, 0xC3, \r
+0xED, 0x9A, 0x2B, 0x90, 0xA4, 0x01, 0xF0, 0x90, 0xA4, 0x0D, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F, \r
+0x90, 0xA4, 0x11, 0xF0, 0x90, 0xA4, 0x0E, 0xE0, 0xFF, 0x24, 0x0A, 0xFD, 0xE4, 0x33, 0xFC, 0x90, \r
+0xA4, 0x11, 0xD1, 0xBB, 0x40, 0x04, 0xEF, 0x24, 0x0A, 0xF0, 0x90, 0xA4, 0x11, 0xE0, 0xFF, 0x24, \r
+0x23, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0xA4, 0x01, 0xD1, 0xBB, 0x40, 0x04, 0xEF, 0x24, 0x23, 0xF0, \r
+0x90, 0xA4, 0x11, 0xE0, 0xFF, 0x7E, 0x00, 0x90, 0xA4, 0x05, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, \r
+0x05, 0x58, 0xE0, 0x6F, 0x70, 0x01, 0xE4, 0x60, 0x02, 0xF1, 0x12, 0xD1, 0xD9, 0x80, 0x07, 0x90, \r
+0xA3, 0xF6, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, 0xD3, 0x9D, 0xEC, 0x64, \r
+0x80, 0xF8, 0x74, 0x80, 0x98, 0x22, 0x74, 0x1D, 0xD1, 0xE1, 0xFE, 0xF6, 0x74, 0x38, 0x2F, 0xF5, \r
+0x82, 0xE4, 0x34, 0x01, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0x90, 0xA3, 0xF6, 0xE0, 0x54, 0xFE, 0xF0, \r
+0x22, 0x2F, 0xF8, 0xE6, 0xFE, 0xED, 0xF4, 0x5E, 0x22, 0x74, 0x1D, 0x2F, 0xF8, 0xE6, 0x4D, 0x80, \r
+0xD9, 0xD1, 0xF9, 0xBF, 0x03, 0x02, 0xF1, 0x09, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, \r
+0x22, 0xD1, 0xF9, 0xBF, 0x03, 0x02, 0xF1, 0x09, 0x22, 0x90, 0x05, 0x21, 0xE0, 0x54, 0x7F, 0xF0, \r
+0x22, 0xF0, 0x90, 0xA4, 0x05, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x54, 0xFB, 0xF0, 0x90, \r
+0xA3, 0xFD, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x12, 0x4E, 0x5C, 0x70, 0x16, 0x90, 0xA3, 0xF9, 0xE0, \r
+0x60, 0x10, 0xF1, 0x43, 0xF0, 0x90, 0xA3, 0xF4, 0xE0, 0xF1, 0x1C, 0x54, 0x07, 0x70, 0x03, 0x12, \r
+0x68, 0xC5, 0x22, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0x22, 0x90, 0xA3, \r
+0xFC, 0xE0, 0x64, 0x02, 0x60, 0x02, 0x91, 0x62, 0x22, 0x90, 0xA4, 0x56, 0xE0, 0xFF, 0x90, 0xA4, \r
+0x02, 0xE0, 0xD3, 0x9F, 0x22, 0x90, 0xA3, 0xC0, 0xE0, 0x30, 0xE0, 0x04, 0x7F, 0x20, 0x51, 0x4B, \r
+0x22, 0x12, 0x4E, 0x5C, 0x70, 0x0B, 0x90, 0xA3, 0xF9, 0xE0, 0x60, 0x05, 0xF1, 0x43, 0x12, 0x48, \r
+0x03, 0x22, 0x12, 0x7B, 0x0D, 0x7F, 0x04, 0x90, 0xA6, 0x22, 0xEF, 0xF0, 0x7F, 0x02, 0x12, 0x44, \r
+0xB7, 0x90, 0xA2, 0x96, 0xE0, 0xFF, 0x90, 0xA6, 0x22, 0xE0, 0xFE, 0xEF, 0x4E, 0x90, 0xA2, 0x96, \r
+0xF0, 0x22, 0xE4, 0x90, 0xA5, 0x12, 0xF0, 0x90, 0xA5, 0x10, 0x74, 0x14, 0xF0, 0x90, 0xA5, 0x1E, \r
+0x74, 0x01, 0xF0, 0xFB, 0x7A, 0xA5, 0x79, 0x10, 0x12, 0x7B, 0x0D, 0x7F, 0x04, 0x80, 0xC8, 0xE0, \r
+0x04, 0xF0, 0xE0, 0x7F, 0x00, 0x22, 0x90, 0xA4, 0x5D, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x90, 0xA3, \r
+0xF5, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x90, 0xA3, 0xF7, 0xE0, 0xC4, 0x54, 0x0F, 0x22, 0x90, 0xA3, \r
+0xFF, 0xE0, 0x90, 0x05, 0x73, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, \r
+0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, \r
+0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0xE6, 0xF0, 0x74, 0x77, 0xA3, 0xF0, 0x12, 0x83, 0xB7, \r
+0xE5, 0x21, 0x30, 0xE1, 0x02, 0x11, 0xFE, 0xE5, 0x21, 0x30, 0xE2, 0x03, 0x12, 0x69, 0x43, 0xE5, \r
+0x22, 0x30, 0xE0, 0x02, 0x11, 0xBE, 0xE5, 0x24, 0x30, 0xE1, 0x05, 0x7F, 0x04, 0x12, 0x72, 0x4B, \r
+0xE5, 0x24, 0x30, 0xE4, 0x02, 0x11, 0xF4, 0xE5, 0x24, 0x30, 0xE5, 0x02, 0x11, 0x6B, 0xE5, 0x24, \r
+0x30, 0xE6, 0x02, 0x11, 0x8E, 0x74, 0xE6, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x77, 0xA3, 0xF0, \r
+0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, \r
+0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0xA3, 0xF4, 0xE0, 0xFF, \r
+0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x15, 0xEF, 0x54, 0xBF, 0x11, 0xB5, 0x30, 0xE0, 0x06, \r
+0xE0, 0x44, 0x01, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0xFE, 0xF0, 0x12, 0x68, 0xC5, 0x22, 0x90, 0xA3, \r
+0xF4, 0xE0, 0xFF, 0x12, 0x56, 0xF4, 0x30, 0xE0, 0x1B, 0xEF, 0x54, 0x7F, 0x11, 0xB5, 0x30, 0xE1, \r
+0x06, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0xA3, 0xF9, 0xE0, 0x60, \r
+0x03, 0x12, 0x68, 0xC5, 0x22, 0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x90, 0xA3, 0xF5, 0x22, 0x12, 0x84, \r
+0x7E, 0x90, 0xA5, 0x10, 0xEF, 0xF0, 0x30, 0xE0, 0x05, 0x7D, 0x01, 0xE4, 0x80, 0x02, 0xE4, 0xFD, \r
+0xFF, 0x12, 0x4A, 0xD7, 0x90, 0xA5, 0x10, 0xE0, 0x30, 0xE6, 0x11, 0x90, 0x01, 0x2F, 0xE0, 0x30, \r
+0xE7, 0x04, 0xE4, 0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x80, 0xF0, 0x31, 0x0A, 0x74, 0x02, \r
+0xF0, 0x02, 0x75, 0xF5, 0x12, 0x4E, 0x84, 0x7D, 0x02, 0x7F, 0x02, 0x02, 0x4F, 0xC4, 0x90, 0xA3, \r
+0xF9, 0xE0, 0x60, 0x03, 0x12, 0x75, 0x4D, 0x02, 0x4B, 0x7A, 0x90, 0xA4, 0x0B, 0xE0, 0xFF, 0xA3, \r
+0xE0, 0xFD, 0x90, 0xA4, 0x12, 0xE0, 0xFB, 0x90, 0xA6, 0x03, 0x22, 0x90, 0xA4, 0x7F, 0x12, 0x45, \r
+0xAC, 0xF1, 0x69, 0x90, 0xA3, 0xF9, 0xE0, 0xFF, 0x12, 0x4F, 0x2E, 0x90, 0xA3, 0xF9, 0xE0, 0x60, \r
+0x1A, 0x90, 0xA4, 0x7F, 0x12, 0x45, 0xA3, 0x12, 0x6F, 0xC1, 0x54, 0x0F, 0xFF, 0x12, 0x57, 0xB7, \r
+0xFD, 0xF1, 0xB8, 0x31, 0x0A, 0x74, 0x01, 0xF0, 0x12, 0x75, 0xF5, 0x22, 0x12, 0x57, 0xF0, 0x12, \r
+0x06, 0x89, 0xFF, 0x54, 0x7F, 0x90, 0xA3, 0xF9, 0xF0, 0xEF, 0x12, 0x56, 0xF4, 0xA3, 0x12, 0x6F, \r
+0xC0, 0xFF, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFE, 0x90, 0xA3, 0xF7, 0xE0, 0x54, 0xF0, 0x4E, 0xF0, \r
+0x12, 0x57, 0xAF, 0x54, 0x01, 0x25, 0xE0, 0xFE, 0x90, 0xA3, 0xF4, 0xE0, 0x54, 0xFD, 0x4E, 0xF0, \r
+0xEF, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x12, 0x6F, 0xB7, 0x12, 0x57, 0xB5, 0x90, 0xA3, 0xF8, \r
+0xF0, 0x90, 0x00, 0x04, 0x12, 0x06, 0xA2, 0xFD, 0x7F, 0x02, 0x12, 0x4A, 0xD7, 0x31, 0xA1, 0x21, \r
+0x1B, 0x90, 0xA4, 0x7C, 0x02, 0x45, 0xA3, 0x12, 0x57, 0xF0, 0xE4, 0x90, 0xA4, 0x81, 0xF0, 0xFD, \r
+0x31, 0xA1, 0x8D, 0x82, 0x12, 0x5E, 0x99, 0xF4, 0x60, 0x35, 0x90, 0xA4, 0x81, 0xE0, 0xFF, 0x31, \r
+0xA1, 0x8D, 0x82, 0x12, 0x5E, 0x99, 0xFE, 0x75, 0xF0, 0x10, 0x12, 0x6C, 0x2E, 0xE0, 0x12, 0x56, \r
+0xF4, 0xFC, 0xA8, 0x05, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0x90, 0xA4, 0x81, 0xF0, \r
+0x75, 0xF0, 0x10, 0xEE, 0x12, 0x6D, 0x07, 0xE0, 0xFF, 0x51, 0x12, 0xEF, 0xF0, 0x80, 0x05, 0x51, \r
+0x12, 0x74, 0xFF, 0xF0, 0x0D, 0xED, 0xB4, 0x07, 0xB7, 0x90, 0xA4, 0x7F, 0x74, 0x05, 0xF0, 0x90, \r
+0xA4, 0x8D, 0x74, 0x08, 0xF0, 0x7B, 0x01, 0x7A, 0xA4, 0x79, 0x7F, 0x71, 0x0D, 0x7F, 0x04, 0x02, \r
+0x77, 0x87, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF5, 0x83, 0x22, 0x12, 0x57, 0xF0, \r
+0x31, 0xA1, 0x12, 0x06, 0x89, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0xA4, 0x5D, 0xE0, 0x54, 0xFE, 0x4E, \r
+0xFE, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0xF1, 0x30, 0x54, 0x04, 0x25, 0xE0, 0xFD, \r
+0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0xA4, 0x5D, 0xF0, 0xEE, 0x54, 0x08, 0x25, 0xE0, 0xFE, 0xEF, \r
+0x54, 0xEF, 0x4E, 0x12, 0x6F, 0xC0, 0xFB, 0xFF, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x9F, 0xFF, 0xE4, \r
+0x94, 0x00, 0xFE, 0x7C, 0x00, 0x7D, 0x05, 0x12, 0x07, 0x15, 0x90, 0xA4, 0x5F, 0xEF, 0xF0, 0xEB, \r
+0x75, 0xF0, 0x05, 0x84, 0xA3, 0xF0, 0x31, 0xA1, 0x12, 0x06, 0x89, 0x20, 0xE0, 0x0A, 0x12, 0x4B, \r
+0xC6, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x80, 0x0A, 0x7D, 0x0C, 0x7F, 0x01, 0x12, 0x4A, 0xD7, 0x12, \r
+0x77, 0xC6, 0xF1, 0x41, 0x20, 0xE0, 0x04, 0xEF, 0x54, 0xDF, 0xF0, 0x12, 0x4F, 0xF7, 0x30, 0xE0, \r
+0x15, 0x90, 0xA3, 0xF9, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0xA3, 0xFB, 0xF0, 0x12, 0x77, 0xCE, 0x90, \r
+0x05, 0x58, 0x74, 0x05, 0xF0, 0x22, 0xE4, 0x90, 0xA3, 0xF9, 0xF0, 0x90, 0xA3, 0xFB, 0x74, 0x0C, \r
+0xF0, 0x90, 0xA3, 0xF4, 0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0x12, 0x57, \r
+0xF0, 0xF1, 0x2A, 0x30, 0xE1, 0x02, 0x61, 0x6B, 0x31, 0xA1, 0x12, 0x06, 0x89, 0x90, 0xA4, 0x7F, \r
+0x12, 0x6F, 0xC0, 0x90, 0xA4, 0x80, 0x12, 0x57, 0xB6, 0x90, 0xA4, 0x81, 0xF0, 0x90, 0x00, 0x04, \r
+0x12, 0x06, 0xA2, 0x75, 0xF0, 0x10, 0xA4, 0xFF, 0x12, 0x57, 0xAF, 0xFD, 0xEF, 0x4D, 0xFF, 0x90, \r
+0xA4, 0x80, 0xE0, 0xB4, 0x01, 0x06, 0xA3, 0xE0, 0x71, 0xE8, 0xEF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA3, 0xBC, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, \r
+0x0A, 0xEF, 0x14, 0xFF, 0x90, 0xA3, 0xBD, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, \r
+0x00, 0xEF, 0x60, 0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x29, 0xC0, 0x01, 0x90, \r
+0xA3, 0xBD, 0xE0, 0xF1, 0x4A, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0xD0, 0x01, 0x7E, 0x00, 0x7F, 0x0F, \r
+0x12, 0x06, 0x63, 0x90, 0xA3, 0xBD, 0x12, 0x77, 0xBF, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, \r
+0x05, 0xE4, 0x90, 0xA3, 0xBD, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0xA4, 0x91, 0xF0, \r
+0x90, 0xA4, 0x91, 0xE0, 0xFF, 0xC3, 0x94, 0x03, 0x50, 0x5E, 0x74, 0xA2, 0x2F, 0xF5, 0x82, 0xE4, \r
+0x34, 0xA2, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x0A, 0x50, 0x02, 0x80, 0x02, 0x7F, 0x0A, 0xAE, \r
+0x07, 0xEF, 0x24, 0x02, 0x90, 0xA4, 0x90, 0xF0, 0x90, 0xA4, 0x82, 0x74, 0x0E, 0xF0, 0x90, 0xA4, \r
+0x84, 0x74, 0x01, 0xF0, 0x71, 0xD9, 0x90, 0xA4, 0x85, 0xF0, 0xE4, 0xFF, 0xEF, 0xC3, 0x9E, 0x50, \r
+0x16, 0x71, 0xD9, 0x2F, 0x71, 0xE8, 0xE0, 0xFD, 0x74, 0x86, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xA4, \r
+0xF5, 0x83, 0xED, 0xF0, 0x0F, 0x80, 0xE5, 0x7B, 0x01, 0x7A, 0xA4, 0x79, 0x82, 0x12, 0x77, 0x82, \r
+0x90, 0xA4, 0x91, 0xE0, 0x04, 0xF0, 0x80, 0x98, 0x22, 0x90, 0xA4, 0x91, 0xE0, 0x24, 0x9F, 0xF5, \r
+0x82, 0xE4, 0x34, 0xA2, 0xF5, 0x83, 0xE0, 0x22, 0x24, 0xB9, 0xF5, 0x82, 0xE4, 0x34, 0xA2, 0xF5, \r
+0x83, 0x22, 0x90, 0xA4, 0x87, 0x74, 0x12, 0xF0, 0x90, 0xA4, 0x95, 0x74, 0x05, 0xF0, 0x90, 0xA4, \r
+0x89, 0xF1, 0x38, 0x90, 0xA4, 0x85, 0xE0, 0x90, 0xA4, 0x8C, 0xF0, 0x90, 0xA4, 0x86, 0xE0, 0x90, \r
+0xA4, 0x8D, 0xF0, 0x7B, 0x01, 0x7A, 0xA4, 0x79, 0x87, 0x71, 0x0D, 0x7F, 0x04, 0x02, 0x77, 0x87, \r
+0x91, 0x98, 0x7F, 0xF5, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x06, 0x90, 0xA4, 0x7C, 0xE0, \r
+0xA3, 0xF0, 0x91, 0x98, 0x7F, 0xF6, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0xA4, \r
+0x7C, 0xE0, 0x90, 0xA4, 0x7E, 0xF0, 0x91, 0x98, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, \r
+0x01, 0x08, 0x90, 0xA4, 0x7C, 0xE0, 0x90, 0xA4, 0x7F, 0xF0, 0x91, 0x98, 0x7F, 0xF3, 0x7E, 0x01, \r
+0x12, 0x34, 0xC1, 0xBF, 0x01, 0x03, 0x12, 0x6F, 0xCF, 0x91, 0x98, 0x7F, 0xF2, 0x7E, 0x01, 0x12, \r
+0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0xA4, 0x7C, 0xE0, 0x90, 0xA4, 0x81, 0xF0, 0x90, 0xA4, 0x7D, \r
+0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0xA4, 0x85, 0xF0, 0x90, 0xA4, \r
+0x81, 0xE0, 0x90, 0xA4, 0x86, 0xF0, 0x61, 0xF2, 0x7B, 0x01, 0x7A, 0xA4, 0x79, 0x7C, 0x22, 0x12, \r
+0x57, 0xF0, 0x12, 0x06, 0x89, 0x30, 0xE0, 0x13, 0x12, 0x63, 0xB0, 0x90, 0xA2, 0x9C, 0xE0, 0xB4, \r
+0x01, 0x0C, 0x90, 0xFE, 0x10, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x03, 0x12, 0x90, 0x37, 0x31, 0xA1, \r
+0x12, 0x6F, 0xC1, 0x90, 0xA3, 0xC1, 0x12, 0x57, 0xB6, 0x90, 0xA3, 0xC2, 0xF0, 0x90, 0xA3, 0xC1, \r
+0xE0, 0x54, 0x01, 0x90, 0xA3, 0xCE, 0xF0, 0x90, 0xA3, 0xC1, 0xE0, 0x54, 0x02, 0x90, 0xA3, 0xCF, \r
+0xF0, 0x90, 0xA3, 0xC1, 0xE0, 0x54, 0x04, 0x90, 0xA3, 0xD0, 0xF0, 0x90, 0xA3, 0xC1, 0xE0, 0x54, \r
+0x08, 0x90, 0xA3, 0xD1, 0xF0, 0x90, 0xA3, 0xC1, 0xE0, 0x54, 0x10, 0x90, 0xA3, 0xD2, 0xF0, 0x90, \r
+0xA3, 0xC2, 0xE0, 0x54, 0x01, 0x90, 0xA3, 0xD3, 0xF0, 0x90, 0xA3, 0xC2, 0xE0, 0x54, 0x02, 0x90, \r
+0xA3, 0xD4, 0xF0, 0x90, 0xA3, 0xC2, 0xE0, 0x54, 0x04, 0x90, 0xA3, 0xD5, 0xF0, 0x90, 0xA3, 0xC2, \r
+0xE0, 0x54, 0x08, 0x90, 0xA3, 0xD6, 0xF0, 0x90, 0xA3, 0xC2, 0xE0, 0x54, 0x10, 0x90, 0xA3, 0xD7, \r
+0xF0, 0x22, 0xE4, 0x90, 0xA5, 0x02, 0xF0, 0xA3, 0xF0, 0xA3, 0x12, 0x4E, 0xFA, 0x12, 0x45, 0x61, \r
+0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0x12, 0x4F, 0x14, 0x78, 0x10, \r
+0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x61, 0xC0, 0x04, \r
+0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0x12, 0x4F, 0x14, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, \r
+0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x61, 0x90, 0xA4, 0x48, 0x12, 0x08, 0x6D, \r
+0x90, 0xA4, 0x4C, 0x12, 0x45, 0x7F, 0x90, 0xA4, 0x48, 0x12, 0x45, 0x8B, 0xC3, 0x12, 0x45, 0x6E, \r
+0x40, 0x3F, 0x90, 0xA3, 0xF4, 0xE0, 0x90, 0xA4, 0x4C, 0x30, 0xE0, 0x0F, 0xD1, 0xDE, 0x90, 0xA4, \r
+0x16, 0xE0, 0x24, 0x04, 0x2F, 0xFF, 0x90, 0xA4, 0x50, 0x80, 0x05, 0xD1, 0xDE, 0x90, 0xA4, 0x51, \r
+0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0x90, 0xA5, 0x03, 0xF0, 0x90, 0xA5, 0x03, 0xE0, 0xFF, 0xC3, 0x94, \r
+0x2D, 0x50, 0x0E, 0x74, 0x17, 0x2F, 0xF1, 0x22, 0xE0, 0x04, 0xF0, 0x90, 0xA4, 0x0F, 0xE0, 0x04, \r
+0xF0, 0x90, 0xA4, 0x0F, 0xE0, 0xFF, 0xD3, 0x90, 0xA4, 0x53, 0xE0, 0x9F, 0x90, 0xA4, 0x52, 0xE0, \r
+0x94, 0x00, 0x40, 0x02, 0xC1, 0xAA, 0xD1, 0xBC, 0xD1, 0xB3, 0x50, 0x1C, 0xD1, 0xC6, 0x90, 0xA5, \r
+0x04, 0xE0, 0xD3, 0x9F, 0x40, 0x0A, 0x90, 0xA5, 0x02, 0xE0, 0x90, 0xA5, 0x05, 0xF0, 0x80, 0x08, \r
+0x90, 0xA5, 0x02, 0xE0, 0x04, 0xF0, 0x80, 0xE0, 0xD1, 0xBC, 0xD1, 0xB3, 0x50, 0x2C, 0xD1, 0xC6, \r
+0xC3, 0x90, 0xA4, 0x53, 0xE0, 0x9F, 0xFF, 0x90, 0xA4, 0x52, 0xE0, 0x94, 0x00, 0xFE, 0x90, 0xA5, \r
+0x04, 0xE0, 0xD3, 0x9F, 0xE4, 0x9E, 0x40, 0x0A, 0x90, 0xA5, 0x02, 0xE0, 0x90, 0xA5, 0x06, 0xF0, \r
+0x80, 0x08, 0x90, 0xA5, 0x02, 0xE0, 0x04, 0xF0, 0x80, 0xD0, 0x90, 0xA5, 0x05, 0xE0, 0x90, 0xA4, \r
+0x14, 0xF0, 0x90, 0xA5, 0x06, 0xE0, 0x90, 0xA4, 0x15, 0xD1, 0xAB, 0x94, 0x0A, 0x40, 0x0A, 0xEF, \r
+0x24, 0xF6, 0x90, 0xA4, 0x0C, 0xF0, 0xE4, 0x80, 0x09, 0xE4, 0x90, 0xA4, 0x0C, 0xD1, 0xAB, 0x74, \r
+0x0A, 0x9F, 0x90, 0xA4, 0x0B, 0xF0, 0x90, 0xA4, 0x14, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F, 0x90, \r
+0xA4, 0x12, 0xF0, 0x90, 0xA3, 0xF4, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0xA4, 0x50, 0x80, 0x03, 0x90, \r
+0xA4, 0x51, 0xE0, 0xFF, 0x90, 0xA4, 0x12, 0xE0, 0x2F, 0x04, 0xF0, 0x90, 0xA4, 0x12, 0xE0, 0xC3, \r
+0x94, 0x0A, 0x50, 0x03, 0x74, 0x0A, 0xF0, 0x90, 0xA4, 0x12, 0xE0, 0x24, 0x02, 0xF0, 0x31, 0x0A, \r
+0x74, 0x03, 0xF0, 0x12, 0x75, 0xF5, 0xE4, 0xFF, 0xD1, 0xFB, 0x22, 0xF0, 0x90, 0xA4, 0x14, 0xE0, \r
+0xFF, 0xC3, 0x22, 0x90, 0xA5, 0x02, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x22, 0xE4, 0x90, 0xA5, 0x04, \r
+0xF0, 0x90, 0xA5, 0x02, 0xF0, 0x22, 0x74, 0x17, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF5, 0x83, \r
+0xE0, 0xFF, 0x90, 0xA5, 0x04, 0xE0, 0x2F, 0xF0, 0x90, 0xA4, 0x54, 0xE0, 0xFF, 0x22, 0x12, 0x45, \r
+0x8B, 0x90, 0xA4, 0x48, 0x12, 0x45, 0x7F, 0x12, 0x45, 0x46, 0x78, 0x0A, 0x12, 0x08, 0x47, 0x90, \r
+0xA4, 0x11, 0xE0, 0xFE, 0xC3, 0x74, 0x0A, 0x9E, 0x2F, 0xFF, 0x22, 0xE4, 0xFE, 0x74, 0x17, 0x2E, \r
+0xF1, 0x22, 0xE4, 0xF0, 0x0E, 0xEE, 0xB4, 0x2D, 0xF4, 0xE4, 0x90, 0xA4, 0x10, 0xF0, 0x90, 0xA4, \r
+0x0F, 0xF0, 0x90, 0xA4, 0x13, 0xF0, 0xEF, 0xB4, 0x01, 0x07, 0xA3, 0x74, 0x2D, 0xF0, 0xE4, 0xA3, \r
+0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF5, 0x83, 0x22, 0x90, 0x00, 0x05, 0x02, 0x06, 0xA2, \r
+0x4F, 0xFF, 0xF0, 0x12, 0x06, 0x89, 0xFE, 0x22, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, \r
+0x22, 0x90, 0xA4, 0x5D, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x22, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x26, \r
+0xF9, 0x74, 0xA3, 0x35, 0xF0, 0x22, 0x12, 0x06, 0x89, 0xFF, 0x90, 0xA3, 0xE2, 0xF0, 0xBF, 0x01, \r
+0x07, 0x91, 0x20, 0xE4, 0x90, 0xA3, 0xE2, 0xF0, 0x22, 0x90, 0xA3, 0xF4, 0xE0, 0x54, 0xFB, 0xF0, \r
+0xE4, 0x90, 0xA4, 0x02, 0xF0, 0xA3, 0xF0, 0x90, 0xA3, 0xFD, 0xF0, 0x90, 0xA3, 0xF5, 0xE0, 0x54, \r
+0xF7, 0xF0, 0x54, 0xBF, 0xF0, 0x12, 0x4F, 0xBA, 0x7D, 0x10, 0x7F, 0x03, 0x02, 0x76, 0xC6, 0xD3, \r
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA5, 0xB6, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA5, \r
+0xB4, 0x74, 0x0C, 0xF0, 0x90, 0xA5, 0xC2, 0x74, 0x02, 0xF0, 0x7B, 0x01, 0x7A, 0xA5, 0x79, 0xB4, \r
+0x12, 0x77, 0x82, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x24, 0xFE, 0x60, 0x0B, 0x04, 0x70, 0x24, \r
+0x90, 0xA3, 0xFF, 0x74, 0x02, 0xF0, 0x80, 0x13, 0xED, 0x70, 0x06, 0x90, 0xA4, 0x59, 0xE0, 0x80, \r
+0x02, 0xED, 0x14, 0x90, 0xA3, 0xFF, 0xF0, 0x90, 0xA3, 0xFF, 0xE0, 0xA3, 0xF0, 0x90, 0xA3, 0xF5, \r
+0xE0, 0x44, 0x08, 0xF0, 0x22, 0x32, 0x90, 0x02, 0x09, 0xE0, 0xF5, 0x51, 0x12, 0x06, 0x89, 0x25, \r
+0x51, 0x90, 0xA2, 0xCD, 0x12, 0x6F, 0xC0, 0x25, 0x51, 0x90, 0xA2, 0xCE, 0x12, 0x57, 0xB6, 0x25, \r
+0x51, 0x90, 0xA2, 0xCF, 0xF0, 0x12, 0x57, 0xAF, 0x25, 0x51, 0x90, 0xA2, 0xD0, 0xF0, 0x90, 0x00, \r
+0x04, 0x12, 0x06, 0xA2, 0x25, 0x51, 0x90, 0xA2, 0xD1, 0xF0, 0x12, 0x7F, 0x2A, 0x25, 0x51, 0x90, \r
+0xA2, 0xD2, 0xF0, 0x90, 0x00, 0x06, 0x12, 0x06, 0xA2, 0x25, 0x51, 0x90, 0xA2, 0xD3, 0xF0, 0x22, \r
+0x8B, 0x51, 0x8A, 0x52, 0x89, 0x53, 0x12, 0x6F, 0xC1, 0xFF, 0xF5, 0x55, 0x12, 0x06, 0x89, 0xFE, \r
+0xC3, 0x13, 0x30, 0xE0, 0x07, 0x12, 0x57, 0xB7, 0xF5, 0x56, 0x80, 0x02, 0x8F, 0x56, 0x85, 0x55, \r
+0x54, 0xE5, 0x54, 0xD3, 0x95, 0x56, 0x50, 0x25, 0xAB, 0x51, 0xAA, 0x52, 0xA9, 0x53, 0x12, 0x06, \r
+0x89, 0x54, 0x01, 0xFD, 0xAF, 0x54, 0x12, 0x61, 0x48, 0xAF, 0x54, 0x12, 0x4E, 0x64, 0xEF, 0xAF, \r
+0x54, 0x70, 0x04, 0x11, 0xD7, 0x80, 0x02, 0x11, 0x92, 0x05, 0x54, 0x80, 0xD4, 0xE5, 0x55, 0x70, \r
+0x10, 0xFF, 0x12, 0x4E, 0x64, 0xEF, 0x70, 0x09, 0x12, 0x4F, 0x9E, 0x54, 0xBF, 0xF0, 0x54, 0x7F, \r
+0xF0, 0x22, 0xE4, 0xFD, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA6, 0x15, 0xEF, 0xF0, \r
+0xA3, 0xED, 0xF0, 0x7D, 0x44, 0x7F, 0x6F, 0x12, 0x4B, 0x6F, 0x12, 0x4D, 0x28, 0x90, 0xA6, 0x16, \r
+0xE0, 0x90, 0xA6, 0x15, 0xB4, 0x01, 0x0D, 0xE0, 0x75, 0xF0, 0x10, 0x12, 0x6E, 0xF9, 0xE0, 0x44, \r
+0x04, 0xF0, 0x80, 0x0B, 0xE0, 0x75, 0xF0, 0x10, 0x12, 0x6E, 0xF9, 0xE0, 0x54, 0xFB, 0xF0, 0x12, \r
+0x4B, 0xC8, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7D, 0x01, 0x80, 0xB9, 0x12, 0x06, 0x89, 0x90, 0xA3, \r
+0xD8, 0x12, 0x6F, 0xC0, 0x90, 0xA3, 0xD9, 0x12, 0x57, 0xB6, 0x90, 0xA3, 0xDA, 0xF0, 0x12, 0x57, \r
+0xAF, 0x90, 0xA3, 0xDB, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x06, 0xA2, 0x90, 0xA3, 0xDC, 0xF0, 0x22, \r
+0x12, 0x06, 0x89, 0x90, 0xA3, 0xDD, 0x12, 0x6F, 0xC0, 0x90, 0xA3, 0xDE, 0x12, 0x57, 0xB6, 0x90, \r
+0xA3, 0xDF, 0xF0, 0x12, 0x57, 0xAF, 0x90, 0xA3, 0xE0, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x06, 0xA2, \r
+0x90, 0xA3, 0xE1, 0xF0, 0x22, 0x12, 0x06, 0x89, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0xA4, 0x66, 0xE0, \r
+0x54, 0x7F, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xEE, 0x54, 0xBF, 0x12, 0x7F, 0x30, 0x54, \r
+0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90, 0xA4, 0x66, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, \r
+0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x06, 0x89, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xF0, 0x4E, 0x90, \r
+0xA4, 0x66, 0x12, 0x6F, 0xC0, 0xFF, 0x54, 0x7F, 0x90, 0xA4, 0x68, 0xF0, 0x12, 0x56, 0xF1, 0xFF, \r
+0x90, 0xA4, 0x67, 0xE0, 0x54, 0xFE, 0x12, 0x57, 0xB5, 0x90, 0xA4, 0x69, 0xF0, 0x12, 0x57, 0xAF, \r
+0x54, 0x01, 0x25, 0xE0, 0xFF, 0x90, 0xA4, 0x67, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x6A, 0xD3, \r
+0x20, 0xE0, 0x02, 0x7D, 0x01, 0x02, 0x69, 0x7F, 0x12, 0x06, 0x89, 0x54, 0x01, 0xFF, 0x90, 0xA4, \r
+0x6B, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0x22, 0x12, 0x57, 0xB7, 0xFF, 0x30, 0xE0, 0x1F, 0x12, 0x06, \r
+0x89, 0x90, 0xA4, 0x56, 0x12, 0x6F, 0xC0, 0x90, 0xA4, 0x57, 0xF0, 0xEF, 0x54, 0xFE, 0xFF, 0xA3, \r
+0xE0, 0x54, 0x01, 0x4F, 0xF0, 0x12, 0x57, 0xAF, 0x90, 0xA4, 0x59, 0xF0, 0x22, 0x90, 0xA4, 0x56, \r
+0x74, 0x02, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE0, 0x54, 0x01, 0x44, 0x28, 0xF0, 0xA3, 0x74, \r
+0x07, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x90, 0xA4, 0x04, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x90, 0xA4, \r
+0x5C, 0xF0, 0x22, 0xE4, 0x90, 0xA3, 0xBC, 0xF0, 0xA3, 0xF0, 0x90, 0xA3, 0x24, 0xF0, 0xA3, 0xF0, \r
+0x22, 0xE4, 0xFC, 0xED, 0x2C, 0x24, 0x00, 0x12, 0x5E, 0xCB, 0xE4, 0xF0, 0x0C, 0xEC, 0xB4, 0x18, \r
+0xF2, 0x12, 0x5E, 0xC8, 0xEF, 0xF0, 0xEE, 0x54, 0x3F, 0xFF, 0x51, 0x3E, 0x51, 0x49, 0x54, 0xF0, \r
+0xF0, 0x74, 0x03, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, \r
+0x0B, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x74, 0x01, \r
+0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0x22, 0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, \r
+0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x22, 0x90, 0xA5, 0xF4, 0xEF, 0xF0, 0xA3, 0x12, 0x45, 0xAC, \r
+0x90, 0xA6, 0x14, 0xE0, 0xFE, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEE, 0x12, 0x06, 0xE1, 0x74, 0x00, \r
+0x2F, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0xA5, \r
+0xF5, 0x12, 0x45, 0xA3, 0x8B, 0x40, 0x8A, 0x41, 0x89, 0x42, 0x75, 0x43, 0x02, 0xD0, 0x01, 0xD0, \r
+0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x90, 0xA5, 0xF4, 0xE0, 0x24, 0x02, 0xF9, 0xE4, 0x34, 0xFB, \r
+0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0xA3, 0x12, 0x45, 0xA3, 0xE9, 0x24, 0x02, \r
+0xF9, 0xE4, 0x3A, 0x8B, 0x40, 0xF5, 0x41, 0x89, 0x42, 0x90, 0xA5, 0xF5, 0x51, 0xC9, 0xF5, 0x43, \r
+0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x02, 0x35, 0x26, 0x12, 0x45, 0xA3, 0x90, 0x00, 0x0E, 0x02, \r
+0x06, 0xA2, 0x90, 0xA6, 0x04, 0x12, 0x45, 0xAC, 0xE4, 0xFF, 0x90, 0xA6, 0x04, 0x12, 0x5E, 0x94, \r
+0xFE, 0x74, 0xF0, 0x2F, 0x51, 0xEE, 0xEE, 0xF0, 0x0F, 0xEF, 0xB4, 0x10, 0xED, 0x22, 0xF5, 0x82, \r
+0xE4, 0x34, 0x02, 0xF5, 0x83, 0x22, 0x90, 0x00, 0xF1, 0xE0, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFF, \r
+0x22, 0x75, 0x15, 0x12, 0xE4, 0xF5, 0x16, 0x75, 0x17, 0x87, 0x75, 0x18, 0x33, 0x90, 0x01, 0x30, \r
+0xE5, 0x15, 0xF0, 0xA3, 0xE5, 0x16, 0xF0, 0xA3, 0xE5, 0x17, 0xF0, 0xA3, 0xE5, 0x18, 0xF0, 0x22, \r
+0x75, 0x1D, 0x06, 0x75, 0x1E, 0x01, 0x75, 0x1F, 0x03, 0x75, 0x20, 0x62, 0x90, 0x01, 0x38, 0xE5, \r
+0x1D, 0xF0, 0xA3, 0xE5, 0x1E, 0xF0, 0xA3, 0xE5, 0x1F, 0xF0, 0xA3, 0xE5, 0x20, 0xF0, 0x22, 0x90, \r
+0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x22, 0x7D, 0x02, 0x90, 0x01, \r
+0xC4, 0x74, 0x4C, 0xF0, 0x74, 0x83, 0xA3, 0xF0, 0x90, 0xA4, 0x64, 0xE0, 0xFF, 0xED, 0xC3, 0x9F, \r
+0x50, 0x10, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE4, 0x03, 0x7F, 0x00, 0x22, 0x0D, \r
+0x80, 0xE6, 0x74, 0x4C, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x83, 0xA3, 0xF0, 0x7F, 0x01, 0x22, \r
+0x90, 0x01, 0xE4, 0x74, 0x23, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x15, \r
+0xF5, 0x19, 0xA3, 0xE0, 0x55, 0x16, 0xF5, 0x1A, 0xA3, 0xE0, 0x55, 0x17, 0xF5, 0x1B, 0xA3, 0xE0, \r
+0x55, 0x18, 0xF5, 0x1C, 0x90, 0x01, 0x34, 0xE5, 0x19, 0xF0, 0xA3, 0xE5, 0x1A, 0xF0, 0xA3, 0xE5, \r
+0x1B, 0xF0, 0xA3, 0xE5, 0x1C, 0xF0, 0x22, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x1D, 0xF5, 0x21, 0xA3, \r
+0xE0, 0x55, 0x1E, 0xF5, 0x22, 0xA3, 0xE0, 0x55, 0x1F, 0xF5, 0x23, 0xA3, 0xE0, 0x55, 0x20, 0xF5, \r
+0x24, 0x90, 0x01, 0x3C, 0xE5, 0x21, 0xF0, 0xA3, 0xE5, 0x22, 0xF0, 0xA3, 0xE5, 0x23, 0xF0, 0xA3, \r
+0xE5, 0x24, 0xF0, 0x53, 0x91, 0xDF, 0x22, 0x90, 0x01, 0xCF, 0xE0, 0x90, 0xA5, 0x00, 0xF0, 0xE0, \r
+0xFF, 0x30, 0xE0, 0x07, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x30, 0xE5, 0x23, 0x90, \r
+0x01, 0xCF, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0xE4, 0xF5, 0xA8, 0xF5, \r
+0xE8, 0x12, 0x47, 0xC6, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x03, 0x12, 0x46, 0x8D, \r
+0x80, 0xFE, 0x22, 0xE4, 0xFF, 0x12, 0x4E, 0x64, 0xBF, 0x01, 0x12, 0x90, 0xA3, 0xF9, 0xE0, 0x60, \r
+0x0C, 0x12, 0x6F, 0xB7, 0x64, 0x02, 0x60, 0x02, 0x80, 0x04, 0x12, 0x4F, 0xAA, 0x22, 0x90, 0x04, \r
+0x1D, 0xE0, 0x70, 0x1C, 0x90, 0xA2, 0xCE, 0xE0, 0xFF, 0x90, 0xA5, 0xFF, 0x74, 0x09, 0xF0, 0x7B, \r
+0x18, 0xE4, 0xFD, 0x12, 0x5E, 0x02, 0x90, 0xA6, 0x1F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x91, 0x61, \r
+0x22, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0xEF, 0x90, 0x02, 0x86, 0x60, 0x06, 0xE0, 0x44, \r
+0x04, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0xA2, 0x9B, 0xED, 0xF0, 0x22, 0xE4, 0x90, \r
+0xA5, 0x11, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7F, 0x83, 0x12, 0x47, 0xAA, 0x90, 0xA5, 0x11, 0xEF, \r
+0xF0, 0x7F, 0x83, 0x12, 0x47, 0xAA, 0xAE, 0x07, 0x90, 0xA5, 0x11, 0xE0, 0xFF, 0xB5, 0x06, 0x01, \r
+0x22, 0xC3, 0x90, 0xA5, 0x13, 0xE0, 0x94, 0x64, 0x90, 0xA5, 0x12, 0xE0, 0x94, 0x00, 0x40, 0x0D, \r
+0x90, 0x01, 0xC0, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0xA5, 0x11, 0xE0, 0xFF, 0x22, 0x90, 0xA5, 0x12, \r
+0x12, 0x62, 0xCC, 0x80, 0xC2, 0x90, 0x01, 0xC4, 0x74, 0xC5, 0xF0, 0x74, 0x84, 0xA3, 0xF0, 0x7F, \r
+0x90, 0x12, 0x47, 0xAA, 0xEF, 0x20, 0xE0, 0xF7, 0x74, 0xC5, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, \r
+0x84, 0xA3, 0xF0, 0x22, 0x8F, 0x52, 0x8D, 0x53, 0x8B, 0x54, 0x75, 0xF0, 0x04, 0xEF, 0x12, 0x51, \r
+0x2E, 0xC4, 0x54, 0x03, 0x90, 0xA4, 0x81, 0xF0, 0x90, 0xA4, 0x7F, 0x60, 0x09, 0x74, 0x32, 0xF0, \r
+0xA3, 0x74, 0x2F, 0xF0, 0x80, 0x07, 0x74, 0x11, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xE5, 0x53, 0xD3, \r
+0x94, 0x2D, 0x40, 0x0A, 0x75, 0xF0, 0x04, 0xE5, 0x52, 0x12, 0x57, 0xC1, 0x80, 0x20, 0xE5, 0x53, \r
+0xD3, 0x94, 0x1E, 0x40, 0x05, 0x90, 0xA4, 0x7F, 0x80, 0x14, 0xE5, 0x53, 0xD3, 0x94, 0x14, 0x40, \r
+0x05, 0x90, 0xA4, 0x80, 0x80, 0x08, 0x75, 0xF0, 0x04, 0xE5, 0x52, 0x12, 0x57, 0x00, 0xE0, 0xFD, \r
+0x85, 0x54, 0x68, 0xE4, 0xFB, 0xAF, 0x52, 0x02, 0x6A, 0xE4, 0x8D, 0x5B, 0xAC, 0x07, 0x75, 0xF0, \r
+0x10, 0xEC, 0x12, 0x6D, 0x07, 0xE0, 0xF5, 0x5C, 0x54, 0x7F, 0xF9, 0xE5, 0x5C, 0x54, 0x80, 0xF5, \r
+0x5D, 0x75, 0xF0, 0x04, 0xEC, 0x12, 0x57, 0xC1, 0xE0, 0xF5, 0x5F, 0x75, 0xF0, 0x04, 0xEC, 0x12, \r
+0x51, 0x2E, 0xC4, 0x54, 0x03, 0xF5, 0x60, 0xE9, 0xF1, 0xAD, 0xD1, 0x36, 0xEC, 0xF1, 0xC7, 0x74, \r
+0x95, 0x2C, 0x12, 0x6F, 0x88, 0xE5, 0x5C, 0xF0, 0x75, 0xF0, 0x04, 0xEC, 0x12, 0x51, 0x2E, 0x13, \r
+0x13, 0x54, 0x03, 0xF5, 0x5E, 0x74, 0x95, 0x2C, 0xD1, 0x3E, 0xE5, 0x5E, 0xF0, 0xE9, 0x64, 0x2C, \r
+0x70, 0x27, 0x75, 0xF0, 0x04, 0xEC, 0x12, 0x51, 0x2E, 0xFF, 0x54, 0x03, 0xFE, 0xE5, 0x5E, 0xC3, \r
+0x9E, 0x50, 0x16, 0x05, 0x5E, 0xE5, 0x5E, 0xF1, 0x93, 0xEC, 0x90, 0x96, 0x18, 0x12, 0x45, 0x97, \r
+0xEF, 0x54, 0xF3, 0x4E, 0xF0, 0x89, 0x5C, 0x80, 0x60, 0xE9, 0xC3, 0x95, 0x5F, 0x50, 0x30, 0xE9, \r
+0x04, 0xFD, 0xED, 0xD3, 0x95, 0x5F, 0x50, 0x51, 0xED, 0xD1, 0x4E, 0xEC, 0x12, 0x54, 0x80, 0xE0, \r
+0xFB, 0x7A, 0x00, 0xED, 0x54, 0x07, 0x12, 0x6F, 0xE2, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, \r
+0xD8, 0xF9, 0xD1, 0x46, 0x60, 0x06, 0xA9, 0x05, 0x89, 0x5C, 0x80, 0x2D, 0x0D, 0x80, 0xD3, 0xE9, \r
+0x65, 0x5F, 0x70, 0x1A, 0x75, 0xF0, 0x04, 0xEC, 0x12, 0x55, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, \r
+0xE0, 0x23, 0xE5, 0x5C, 0x20, 0xE7, 0x1E, 0xE9, 0x44, 0x80, 0xF5, 0x5C, 0x80, 0x0B, 0x74, 0x95, \r
+0x2C, 0x12, 0x6F, 0x88, 0xE5, 0x5F, 0xF0, 0xF5, 0x5C, 0xAF, 0x04, 0x85, 0x5E, 0x68, 0xAB, 0x5B, \r
+0xAD, 0x5C, 0x12, 0x6A, 0xE4, 0x22, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0x22, 0xF5, 0x82, \r
+0xE4, 0x34, 0x9D, 0xF5, 0x83, 0x22, 0xFF, 0xEE, 0x5A, 0xFE, 0xEF, 0x5B, 0x4E, 0x22, 0x13, 0x13, \r
+0x13, 0x54, 0x1F, 0xFF, 0x75, 0xF0, 0x08, 0x22, 0x7D, 0x01, 0xAF, 0x51, 0xAA, 0x07, 0xAB, 0x05, \r
+0x75, 0xF0, 0x10, 0xEA, 0x12, 0x6D, 0x07, 0xE0, 0xF5, 0x5B, 0x54, 0x7F, 0xF5, 0x5D, 0x75, 0xF0, \r
+0x04, 0xEA, 0x12, 0x57, 0x00, 0xE0, 0x90, 0xA4, 0x8C, 0xF0, 0x75, 0xF0, 0x04, 0xEA, 0x12, 0x57, \r
+0xC1, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xEA, 0x12, 0x51, 0x2E, 0x13, 0x13, 0x54, 0x03, 0xF5, 0x5C, \r
+0xE5, 0x5D, 0xF1, 0xBB, 0x12, 0x6F, 0xC7, 0xEA, 0xF1, 0x9F, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x75, \r
+0xF0, 0x04, 0xEA, 0x12, 0x51, 0x2E, 0xFE, 0xC4, 0x54, 0x03, 0x90, 0xA4, 0x8A, 0xF0, 0x74, 0x95, \r
+0x2A, 0x12, 0x6F, 0x88, 0xE5, 0x5D, 0xF0, 0x74, 0x95, 0x2A, 0xD1, 0x3E, 0xE5, 0x5C, 0xF0, 0xE5, \r
+0x5D, 0xD3, 0x9F, 0x40, 0x04, 0x8F, 0x5D, 0x8F, 0x5B, 0xEB, 0x70, 0x02, 0xE1, 0x87, 0xAF, 0x03, \r
+0x8F, 0x5E, 0xE5, 0x5B, 0x30, 0xE7, 0x05, 0x85, 0x5D, 0x5B, 0x15, 0x5E, 0xE5, 0x5E, 0x70, 0x02, \r
+0xE1, 0x87, 0xE5, 0x5D, 0x64, 0x2C, 0x70, 0x26, 0xE5, 0x5C, 0xD3, 0x94, 0x00, 0x40, 0x1F, 0xE5, \r
+0x5C, 0xD3, 0x94, 0x02, 0x50, 0x18, 0x15, 0x5C, 0xE5, 0x5C, 0x54, 0x03, 0x25, 0xE0, 0x25, 0xE0, \r
+0xFF, 0x75, 0xF0, 0x04, 0xEA, 0x12, 0x51, 0x2E, 0x54, 0xF3, 0x4F, 0xF0, 0x15, 0x5E, 0xE5, 0x5E, \r
+0x60, 0x75, 0x90, 0xA4, 0x8C, 0xE0, 0xFF, 0xE5, 0x5D, 0xD3, 0x9F, 0x40, 0x64, 0xE4, 0x90, 0xA4, \r
+0x8B, 0xF0, 0x85, 0x5D, 0x5B, 0xAD, 0x5B, 0xE5, 0x5D, 0x14, 0xFC, 0x90, 0xA4, 0x8C, 0xE0, 0xFF, \r
+0xEC, 0xC3, 0x9F, 0x40, 0x46, 0xEC, 0xD1, 0x4E, 0xEA, 0x12, 0x54, 0x80, 0xE0, 0xF5, 0x82, 0x75, \r
+0x83, 0x00, 0xEC, 0x54, 0x07, 0x12, 0x6F, 0xE2, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, \r
+0xF9, 0xFF, 0xEE, 0x55, 0x83, 0xFE, 0xEF, 0x55, 0x82, 0x4E, 0x60, 0x1C, 0xE5, 0x5D, 0xAD, 0x04, \r
+0xB4, 0x14, 0x02, 0x7D, 0x0C, 0x90, 0xA4, 0x8B, 0xE0, 0x04, 0xF0, 0xE0, 0x65, 0x5E, 0x60, 0x0B, \r
+0xA3, 0xE0, 0xFF, 0xED, 0xD3, 0x9F, 0x40, 0x03, 0x1C, 0x80, 0xB0, 0xAF, 0x05, 0x8F, 0x5B, 0x80, \r
+0x06, 0x90, 0xA4, 0x8C, 0xE0, 0xF5, 0x5B, 0xAF, 0x02, 0x85, 0x5C, 0x68, 0xE4, 0xFB, 0xAD, 0x5B, \r
+0x02, 0x6A, 0xE4, 0x54, 0x03, 0x25, 0xE0, 0x25, 0xE0, 0xFE, 0x75, 0xF0, 0x04, 0x22, 0xE0, 0x25, \r
+0xE0, 0x24, 0x95, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0xE5, 0x53, 0x25, 0xE0, 0x24, \r
+0x51, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x22, 0xE5, 0x53, 0x25, 0xE0, 0x24, 0x79, 0xF5, \r
+0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x22, 0x25, 0xE0, 0x24, 0x95, 0xF5, 0x82, 0xE4, 0x34, 0x94, \r
+0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xE4, 0xF5, 0x51, 0x90, 0xA3, 0xF3, 0xE0, 0xFF, \r
+0xE5, 0x51, 0xC3, 0x9F, 0x40, 0x03, 0x02, 0x8B, 0xC1, 0xE5, 0x51, 0x13, 0x13, 0x13, 0x54, 0x1F, \r
+0x90, 0xA4, 0x88, 0xF0, 0xE5, 0x51, 0x54, 0x07, 0xA3, 0xF0, 0x90, 0x04, 0xA0, 0xE0, 0xFF, 0xA3, \r
+0xE0, 0xFE, 0xEF, 0x64, 0x01, 0x70, 0x27, 0xE5, 0x51, 0x6E, 0x70, 0x22, 0xA3, 0xE0, 0xF5, 0x52, \r
+0xA3, 0xE0, 0x12, 0x6C, 0xFE, 0xE5, 0x52, 0xF0, 0x12, 0x6E, 0xF4, 0xE0, 0x54, 0xFC, 0xFF, 0x90, \r
+0xA4, 0x87, 0xE0, 0x54, 0x03, 0x4F, 0xFF, 0x12, 0x6E, 0xF4, 0xEF, 0xF0, 0x61, 0xBC, 0xAF, 0x51, \r
+0x12, 0x4E, 0x64, 0xEF, 0x70, 0x02, 0x61, 0xBC, 0x12, 0x51, 0x29, 0x12, 0x56, 0xF4, 0x30, 0xE0, \r
+0x02, 0x61, 0xBC, 0x90, 0xA4, 0x88, 0x12, 0x6C, 0xF3, 0xE0, 0xFD, 0x7C, 0x00, 0x90, 0xA4, 0x89, \r
+0x12, 0x6F, 0xE1, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xB1, 0x4E, 0x60, 0x02, \r
+0x61, 0xBC, 0xE5, 0x51, 0x12, 0x66, 0xA7, 0x12, 0x6E, 0x87, 0x4E, 0x70, 0x0C, 0x74, 0x95, 0x25, \r
+0x51, 0x12, 0x66, 0x9D, 0xE0, 0x70, 0x02, 0x61, 0xBC, 0xE5, 0x51, 0xB1, 0x22, 0x90, 0xA4, 0x7B, \r
+0x12, 0x45, 0xAC, 0xE5, 0x51, 0x12, 0x66, 0xA7, 0xF5, 0x83, 0xE0, 0xF5, 0x56, 0xA3, 0xE0, 0xF5, \r
+0x57, 0x74, 0x95, 0x25, 0x51, 0x12, 0x66, 0x9D, 0xE0, 0xFF, 0x90, 0xA4, 0x7E, 0xE4, 0xF0, 0xA3, \r
+0xEF, 0xF0, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x12, 0x57, 0xC1, 0xE0, 0x90, 0xA4, 0x86, 0xF0, 0xFD, \r
+0x12, 0x51, 0x29, 0xFE, 0x13, 0x13, 0x54, 0x03, 0x12, 0x6C, 0xFE, 0xE0, 0xF5, 0x52, 0x54, 0x7F, \r
+0xF5, 0x53, 0xD3, 0x9D, 0x40, 0x16, 0x90, 0xA4, 0x86, 0xE0, 0xF5, 0x53, 0xE5, 0x52, 0x30, 0xE7, \r
+0x07, 0xE5, 0x53, 0x44, 0x80, 0xFF, 0x80, 0x02, 0xAF, 0x53, 0x8F, 0x52, 0xE5, 0x53, 0x90, 0x41, \r
+0x3D, 0x93, 0x12, 0x57, 0xC7, 0xE0, 0xC3, 0x9F, 0x40, 0x0B, 0x74, 0xA5, 0x25, 0x53, 0xF5, 0x82, \r
+0xE4, 0x34, 0xA2, 0x80, 0x09, 0x74, 0xB9, 0x25, 0x53, 0xF5, 0x82, 0xE4, 0x34, 0xA2, 0xF5, 0x83, \r
+0xE0, 0xFF, 0x91, 0x3F, 0x90, 0xA4, 0x78, 0x12, 0x45, 0xAC, 0x74, 0x15, 0x25, 0x51, 0xF5, 0x82, \r
+0xE4, 0x34, 0x9F, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x02, 0x41, 0x5B, 0xE5, 0x52, 0x30, \r
+0xE7, 0x04, 0x05, 0x58, 0x05, 0x58, 0xE5, 0x58, 0xD3, 0x94, 0x1A, 0xAF, 0x58, 0x40, 0x02, 0x7F, \r
+0x1A, 0x91, 0x3F, 0x90, 0xA4, 0x78, 0x12, 0x45, 0xAC, 0xC3, 0xE5, 0x57, 0x94, 0x0F, 0xE5, 0x56, \r
+0x94, 0x00, 0x50, 0x68, 0x71, 0xC2, 0xFF, 0x90, 0xA4, 0x7F, 0xE0, 0x2F, 0xFF, 0x90, 0xA4, 0x7E, \r
+0xE0, 0x71, 0xF8, 0x71, 0xE6, 0x2F, 0xFD, 0xEE, 0x35, 0xF0, 0x91, 0x34, 0xD3, 0xED, 0x9F, 0xEC, \r
+0x9E, 0x40, 0x05, 0x12, 0x86, 0x58, 0x41, 0x56, 0x90, 0xA4, 0x7B, 0x12, 0x45, 0xA3, 0x12, 0x07, \r
+0x80, 0x65, 0x57, 0x70, 0x04, 0xE5, 0xF0, 0x65, 0x56, 0x75, 0xF0, 0x04, 0x70, 0x26, 0x12, 0x55, \r
+0xDE, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0xFE, 0xEF, 0x54, 0x3F, 0xFF, 0xEE, 0x04, 0x54, 0x03, \r
+0xFE, 0xC4, 0x33, 0x33, 0x54, 0xC0, 0x4F, 0xF0, 0xE4, 0xFD, 0xAF, 0x51, 0x12, 0x85, 0x4A, 0x75, \r
+0xF0, 0x04, 0x80, 0x00, 0x12, 0x55, 0xDE, 0x54, 0x3F, 0xF0, 0x41, 0x56, 0xE5, 0x51, 0x64, 0x01, \r
+0x70, 0x47, 0x71, 0xC2, 0xFF, 0xAE, 0xF0, 0x90, 0x00, 0x06, 0x12, 0x07, 0xAB, 0x2F, 0xFD, 0xE5, \r
+0xF0, 0x3E, 0x91, 0x34, 0xC3, 0xED, 0x9F, 0xEC, 0x9E, 0x50, 0x08, 0x90, 0xA2, 0x95, 0x74, 0x01, \r
+0xF0, 0x80, 0x26, 0x71, 0xC2, 0xFB, 0xAA, 0xF0, 0xE5, 0x57, 0xAE, 0x56, 0x78, 0x03, 0xCE, 0xC3, \r
+0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x7C, 0x00, 0x7D, 0x05, 0x12, 0x07, 0x03, 0xD3, 0xEB, 0x9F, \r
+0xEA, 0x9E, 0x40, 0x05, 0xE4, 0x90, 0xA2, 0x95, 0xF0, 0xAB, 0x58, 0xAD, 0x51, 0xAF, 0x57, 0xAE, \r
+0x56, 0x91, 0x51, 0x8E, 0x54, 0x8F, 0x55, 0x12, 0x87, 0xAB, 0xC3, 0x91, 0x2A, 0x50, 0x09, 0x7D, \r
+0x01, 0xAF, 0x51, 0x12, 0x85, 0x4A, 0x80, 0x0B, 0x12, 0x87, 0xB9, 0xD3, 0x91, 0x2A, 0x40, 0x09, \r
+0x12, 0x86, 0x58, 0x71, 0xDA, 0xE4, 0xF0, 0x80, 0x2D, 0x71, 0xDA, 0xE0, 0x04, 0xF0, 0x71, 0xDA, \r
+0xE0, 0xC3, 0x94, 0x05, 0x40, 0x20, 0x71, 0xDA, 0xE4, 0xF0, 0x12, 0x87, 0xB9, 0x12, 0x86, 0x36, \r
+0x12, 0x87, 0xAB, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, \r
+0xFF, 0xE5, 0x51, 0x12, 0x87, 0xC7, 0xE4, 0xF5, 0x54, 0xF5, 0x55, 0x75, 0x5A, 0x01, 0x74, 0x81, \r
+0x25, 0x51, 0x12, 0x66, 0x18, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x61, 0xB5, 0x90, 0xA4, 0x7B, 0x12, \r
+0x45, 0xA3, 0x90, 0x00, 0x02, 0x12, 0x07, 0xAB, 0xFF, 0xAE, 0xF0, 0x12, 0x07, 0x80, 0x2F, 0xFF, \r
+0xE5, 0xF0, 0x3E, 0x71, 0xE6, 0x2F, 0xFF, 0xEE, 0x71, 0xF8, 0xFE, 0x71, 0xC8, 0x2F, 0xFF, 0xEE, \r
+0x35, 0xF0, 0x90, 0xA4, 0x80, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x07, 0x80, 0xFF, 0xC3, 0x90, 0xA4, \r
+0x81, 0xE0, 0x9F, 0xFE, 0x90, 0xA4, 0x80, 0xE0, 0x95, 0xF0, 0x90, 0xA4, 0x82, 0xF0, 0xA3, 0xCE, \r
+0xF0, 0x90, 0x00, 0x06, 0x12, 0x07, 0xAB, 0xFD, 0xAC, 0xF0, 0x25, 0xE0, 0xFF, 0xEC, 0x33, 0xFE, \r
+0xEF, 0x2D, 0xFD, 0xEE, 0x3C, 0xFC, 0x71, 0xE7, 0x25, 0xE0, 0xFF, 0xE5, 0xF0, 0x33, 0xFE, 0x90, \r
+0x00, 0x02, 0x71, 0xFE, 0xCF, 0x2D, 0xFD, 0xEF, 0x3C, 0xFC, 0x71, 0xC2, 0xAE, 0xF0, 0x78, 0x02, \r
+0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x2D, 0xFF, 0xEC, 0x3E, 0x90, 0xA4, 0x84, 0xF0, 0xA3, \r
+0xEF, 0xF0, 0x90, 0xA4, 0x7E, 0x91, 0x07, 0x12, 0x6E, 0xA7, 0x71, 0xCE, 0x50, 0x08, 0x90, 0xA4, \r
+0x7E, 0x71, 0xED, 0xFE, 0x80, 0x04, 0x7E, 0xFF, 0x7F, 0xFF, 0xE5, 0x51, 0x12, 0x6E, 0xA7, 0x12, \r
+0x87, 0xD0, 0x90, 0xA4, 0x80, 0x91, 0x07, 0x12, 0x6E, 0x98, 0x71, 0xCE, 0x50, 0x08, 0x90, 0xA4, \r
+0x80, 0x71, 0xED, 0xFE, 0x80, 0x04, 0x7E, 0xFF, 0x7F, 0xFF, 0xE5, 0x51, 0x12, 0x6E, 0x98, 0x12, \r
+0x87, 0xD0, 0x90, 0xA4, 0x84, 0x91, 0x07, 0x91, 0x20, 0x71, 0xCE, 0x50, 0x08, 0x90, 0xA4, 0x84, \r
+0x71, 0xED, 0xFE, 0x80, 0x04, 0x7E, 0xFF, 0x7F, 0xFF, 0xE5, 0x51, 0x91, 0x20, 0x12, 0x87, 0xD0, \r
+0xC3, 0x74, 0xFF, 0x95, 0x57, 0xFF, 0x74, 0xFF, 0x95, 0x56, 0xFE, 0x12, 0x6F, 0x90, 0x71, 0xCE, \r
+0x50, 0x0A, 0xE5, 0x57, 0x2D, 0xFF, 0xE5, 0x56, 0x3C, 0xFE, 0x80, 0x04, 0x7E, 0xFF, 0x7F, 0xFF, \r
+0x12, 0x6F, 0x90, 0x12, 0x87, 0xD0, 0x91, 0x18, 0xFB, 0xC3, 0x74, 0xFF, 0x9B, 0xFF, 0x74, 0xFF, \r
+0x9E, 0xFE, 0x74, 0xFF, 0x94, 0x00, 0xFD, 0x74, 0xFF, 0x94, 0x00, 0xFC, 0x90, 0x94, 0x91, 0x12, \r
+0x45, 0x8B, 0xD3, 0x12, 0x45, 0x6E, 0x50, 0x11, 0x91, 0x18, 0xFF, 0xE4, 0xFC, 0xFD, 0x90, 0x94, \r
+0x91, 0x12, 0x45, 0x8B, 0x12, 0x45, 0x39, 0x80, 0x06, 0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, \r
+0x94, 0x91, 0x12, 0x08, 0x6D, 0x7D, 0x01, 0xAF, 0x51, 0x12, 0x66, 0x35, 0x05, 0x51, 0x02, 0x87, \r
+0xDB, 0x22, 0x90, 0xA4, 0x7B, 0x12, 0x45, 0xA3, 0x90, 0x00, 0x08, 0x02, 0x07, 0xAB, 0xF5, 0x83, \r
+0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x9F, 0xEC, 0x9E, 0x22, 0x74, 0x15, 0x25, 0x51, 0xF5, 0x82, \r
+0xE4, 0x34, 0x98, 0xF5, 0x83, 0x22, 0xFE, 0x90, 0x00, 0x04, 0x02, 0x07, 0xAB, 0xE0, 0xFE, 0xA3, \r
+0xE0, 0xFF, 0xED, 0x2F, 0xFF, 0xEC, 0x3E, 0x22, 0x35, 0xF0, 0xFE, 0x90, 0x00, 0x06, 0x12, 0x07, \r
+0xAB, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x74, 0xFF, 0x9F, \r
+0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0xE5, 0x51, 0x22, 0x90, 0xA4, 0x82, 0xE0, 0xFE, 0xA3, 0xE0, 0x22, \r
+0x25, 0xE0, 0x24, 0x15, 0xF5, 0x82, 0xE4, 0x34, 0x9E, 0x22, 0x74, 0x01, 0x93, 0x95, 0x55, 0xE4, \r
+0x93, 0x95, 0x54, 0x22, 0xFC, 0xE5, 0x56, 0xC3, 0x13, 0xFE, 0xE5, 0x57, 0x13, 0xFF, 0x22, 0x8F, \r
+0x58, 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x5C, 0xF9, 0x74, 0x40, 0x35, 0xF0, 0xFA, 0x7B, 0xFF, \r
+0x22, 0x90, 0xA4, 0x8A, 0xEE, 0xF0, 0xA3, 0x12, 0x7F, 0x38, 0x90, 0xA4, 0x8C, 0xE0, 0xB1, 0x22, \r
+0x90, 0xA4, 0x91, 0x12, 0x45, 0xAC, 0x90, 0xA4, 0x8D, 0xE0, 0x91, 0x42, 0xA3, 0x12, 0x45, 0xAC, \r
+0xB1, 0x1A, 0xFF, 0xB1, 0x31, 0x8F, 0x5F, 0xA3, 0x12, 0x87, 0x9E, 0xE0, 0xF5, 0x5B, 0xA3, 0xE0, \r
+0xF5, 0x5C, 0xE4, 0xF5, 0x60, 0x90, 0xA4, 0x91, 0x12, 0x45, 0xA3, 0x75, 0xF0, 0x02, 0xE5, 0x60, \r
+0xA4, 0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12, 0x07, 0xAB, 0xAE, 0xF0, 0xA8, 0x5F, 0x08, 0x80, 0x05, \r
+0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0xA4, 0x8E, 0x12, 0x45, 0xA3, 0x85, 0x60, \r
+0x82, 0x12, 0x5E, 0x99, 0xFD, 0x7C, 0x00, 0x12, 0x07, 0x03, 0xEF, 0x25, 0x5C, 0xF5, 0x5C, 0xEE, \r
+0x35, 0x5B, 0xF5, 0x5B, 0x05, 0x60, 0xE5, 0x60, 0xB4, 0x05, 0xBA, 0x90, 0xA4, 0x8E, 0x12, 0x45, \r
+0xA3, 0x12, 0x7F, 0x2A, 0xFD, 0x7C, 0x00, 0xB1, 0x1A, 0xA8, 0x5F, 0x08, 0x80, 0x05, 0xCE, 0xC3, \r
+0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x12, 0x07, 0x03, 0x8E, 0x5D, 0x8F, 0x5E, 0xD3, 0xE5, 0x5C, \r
+0x95, 0x5E, 0xE5, 0x5B, 0x95, 0x5D, 0x40, 0x0C, 0xE5, 0x5C, 0x95, 0x5E, 0xFF, 0xE5, 0x5B, 0x95, \r
+0x5D, 0xFE, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x00, 0x8E, 0x5B, 0x8F, 0x5C, 0x90, 0xA4, 0x8C, 0x12, \r
+0x87, 0x9E, 0xE5, 0x5B, 0xF0, 0xA3, 0xE5, 0x5C, 0xF0, 0x22, 0x90, 0xA4, 0x8A, 0xE0, 0xFE, 0xA3, \r
+0xE0, 0x22, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x01, 0xF9, 0x74, 0x8D, 0x35, 0xF0, 0xFA, 0x7B, 0x01, \r
+0x22, 0xB1, 0x46, 0x40, 0x03, 0x7F, 0x05, 0x22, 0xD3, 0xEF, 0x94, 0xC8, 0xEE, 0x94, 0x00, 0x7F, \r
+0x00, 0x40, 0x02, 0x7F, 0x02, 0x22, 0xD3, 0xEF, 0x94, 0xE8, 0xEE, 0x94, 0x03, 0x22, 0xFF, 0xEE, \r
+0x5C, 0xFE, 0xEF, 0x5D, 0x4E, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x04, 0x30, \r
+0x12, 0x7F, 0x38, 0x90, 0xA5, 0xC6, 0xE0, 0x90, 0x04, 0x33, 0xF0, 0x90, 0xA5, 0xC7, 0xE0, 0x90, \r
+0x04, 0x34, 0xF0, 0x90, 0xA5, 0xC8, 0xE0, 0x90, 0x04, 0x35, 0xF0, 0x90, 0xA5, 0xC9, 0xE0, 0x90, \r
+0x04, 0x36, 0xF0, 0x90, 0xA5, 0xCA, 0xE0, 0x90, 0x04, 0x37, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
+0x12, 0x6F, 0xC1, 0xF5, 0x51, 0x12, 0x57, 0xB7, 0xF5, 0x52, 0x12, 0x06, 0x89, 0xF5, 0x53, 0x90, \r
+0xA2, 0x9D, 0xF0, 0xE5, 0x51, 0x60, 0x06, 0xFD, 0xAF, 0x52, 0x12, 0x56, 0x1A, 0x22, 0xD3, 0x10, \r
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA6, 0x19, 0xEF, 0xF0, 0x12, 0x57, 0xE9, 0x30, 0xE6, 0x3E, \r
+0x7F, 0x8D, 0x12, 0x47, 0xAA, 0xEF, 0x64, 0x01, 0x70, 0x34, 0x90, 0xA6, 0x1A, 0xF0, 0x90, 0xA6, \r
+0x1A, 0xE0, 0xFD, 0x90, 0xA6, 0x19, 0xE0, 0x75, 0xF0, 0x10, 0x12, 0x6D, 0x07, 0xE5, 0x82, 0x2D, \r
+0x12, 0x54, 0x89, 0xE0, 0xFB, 0xE4, 0xFF, 0x12, 0x50, 0xF7, 0x90, 0xA6, 0x1A, 0xE0, 0x04, 0xF0, \r
+0xE0, 0xC3, 0x94, 0x10, 0x40, 0xD8, 0x12, 0x57, 0xE9, 0x30, 0xE0, 0x02, 0xD1, 0x03, 0xD0, 0xD0, \r
+0x92, 0xAF, 0x22, 0xE4, 0xFD, 0x7F, 0x8D, 0x02, 0x46, 0x8D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
+0xD0, 0x90, 0xA5, 0xA2, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x37, 0x4E, 0x90, 0xA5, 0xAC, 0x12, \r
+0x08, 0x6D, 0x90, 0xA5, 0xA4, 0x12, 0x45, 0x7F, 0x12, 0x08, 0x3A, 0x90, 0xA5, 0xAC, 0x12, 0x45, \r
+0x8B, 0x12, 0x45, 0x54, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0xA5, 0xA4, 0x12, \r
+0x45, 0x7F, 0x90, 0xA5, 0xA8, 0x12, 0x45, 0x8B, 0x12, 0x45, 0x54, 0xD0, 0x03, 0xD0, 0x02, 0xD0, \r
+0x01, 0xD0, 0x00, 0x12, 0x45, 0x61, 0x90, 0xA5, 0xB0, 0x12, 0x08, 0x6D, 0x90, 0xA5, 0xB0, 0x12, \r
+0x68, 0xA6, 0x90, 0xA5, 0xA2, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x38, 0x45, 0xD0, 0xD0, 0x92, \r
+0xAF, 0x22, 0x8E, 0x26, 0x8F, 0x27, 0xBD, 0x01, 0x13, 0xE5, 0x27, 0x78, 0x03, 0xCE, 0xC3, 0x13, \r
+0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xEE, 0x54, 0x1F, 0xFE, 0x02, 0x3D, 0xC2, 0xAF, 0x27, 0xAE, 0x26, \r
+0x02, 0x3E, 0x50, 0x90, 0xA6, 0x25, 0xEF, 0xF0, 0x90, 0xA2, 0x9C, 0xE0, 0xB4, 0x02, 0x12, 0x90, \r
+0xA6, 0x25, 0xE0, 0xFF, 0x64, 0x01, 0x60, 0x25, 0x90, 0x01, 0x4D, 0xE0, 0x64, 0x80, 0xF0, 0x80, \r
+0x19, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x90, 0x06, \r
+0x90, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0xA6, 0x25, 0xE0, 0xFF, 0x12, 0x6A, 0x35, 0x22, 0x90, 0xA4, \r
+0x78, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x02, 0x84, 0xEF, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xE0, \r
+0x44, 0x01, 0xF0, 0x22, 0x7D, 0x07, 0xEF, 0x5D, 0xC3, 0x60, 0x0A, 0xD1, 0xF9, 0x24, 0x08, 0xFF, \r
+0xE4, 0x3E, 0xFE, 0x80, 0x03, 0xD1, 0xF9, 0xFF, 0x22, 0x74, 0xFF, 0x9D, 0xFD, 0x74, 0xFF, 0x94, \r
+0x00, 0x5E, 0xFE, 0xED, 0x5F, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4, 0x60, 0x03, 0x7F, 0x00, 0x22, \r
+0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0xD3, \r
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0x06, 0xEF, 0x64, 0x01, 0x70, 0x48, 0x90, 0xA3, 0xFD, \r
+0xE0, 0xFF, 0x54, 0x03, 0x70, 0x3F, 0x90, 0xA3, 0xFB, 0xE0, 0xFE, 0xE4, 0xC3, 0x9E, 0x40, 0x35, \r
+0xEF, 0x20, 0xE2, 0x31, 0x90, 0xA3, 0xFD, 0xE0, 0x20, 0xE4, 0x2A, 0x90, 0xA3, 0xF5, 0xE0, 0x13, \r
+0x13, 0x54, 0x3F, 0x30, 0xE0, 0x1F, 0x90, 0xA4, 0x5C, 0xE0, 0x70, 0x19, 0x90, 0x06, 0x62, 0xE0, \r
+0x20, 0xE1, 0x12, 0x90, 0x06, 0x62, 0xE0, 0x30, 0xE0, 0x07, 0xE0, 0x54, 0xFC, 0x64, 0x80, 0x60, \r
+0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x02, 0x87, 0xE0, \r
+0x70, 0x1F, 0x90, 0x01, 0x00, 0xE0, 0x64, 0x3F, 0x70, 0x17, 0x90, 0x02, 0x96, 0xE0, 0x70, 0x11, \r
+0x90, 0x02, 0x86, 0xE0, 0x30, 0xE1, 0x0A, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE3, 0x03, 0x7F, 0x01, \r
+0x22, 0x7F, 0x00, 0x22, 0x90, 0xA3, 0xF4, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x63, 0x9D, 0x22, 0x90, \r
+0xA4, 0x50, 0x74, 0x04, 0xF0, 0xA3, 0x14, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x64, 0xF0, 0xA3, \r
+0x74, 0x05, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0xA4, 0x5D, 0xE0, 0x30, 0xE0, 0x34, 0xC4, 0x13, 0x54, \r
+0x07, 0x20, 0xE0, 0x2D, 0x90, 0xA6, 0x29, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x21, \r
+0x90, 0xA4, 0x5D, 0xE0, 0x44, 0x20, 0xF0, 0xE4, 0x90, 0xA6, 0x29, 0xF0, 0x90, 0xA4, 0x5D, 0xE0, \r
+0x13, 0x30, 0xE0, 0x0D, 0x90, 0xA3, 0xF4, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0xA4, 0x04, 0x74, 0xD0, \r
+0xF0, 0x22, 0x11, 0x1F, 0x54, 0x3F, 0xF0, 0xEF, 0x60, 0x0A, 0x11, 0x2B, 0x44, 0x10, 0x11, 0x1E, \r
+0x44, 0x80, 0xF0, 0x22, 0x11, 0x2B, 0x54, 0xEF, 0x11, 0x1E, 0x44, 0x40, 0xF0, 0x22, 0xF0, 0x74, \r
+0x09, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0x74, 0x29, 0x2D, 0xF5, 0x82, \r
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xC2, 0xAF, 0x90, 0xA3, 0xC0, 0xE0, 0x54, 0xFE, 0xF0, \r
+0x7D, 0x08, 0xE4, 0xFF, 0x12, 0x74, 0x58, 0x90, 0x02, 0x09, 0xE0, 0x90, 0x04, 0x24, 0xF0, 0x90, \r
+0x02, 0x09, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90, 0x02, 0x29, 0xE0, 0x90, 0x04, 0x57, 0xF0, 0xE4, \r
+0x90, 0xA3, 0xCC, 0xF0, 0xA3, 0xF0, 0xD2, 0xAF, 0x22, 0x90, 0x04, 0x24, 0xEF, 0xF0, 0x90, 0x04, \r
+0x57, 0xF0, 0x22, 0xFE, 0xEC, 0x90, 0xAA, 0xB9, 0x12, 0x08, 0x6D, 0x7F, 0x48, 0x7E, 0x09, 0x02, \r
+0x38, 0x45, 0xF0, 0x90, 0xA4, 0x02, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0xFF, 0x90, 0xA4, \r
+0x01, 0xE0, 0x2F, 0x22, 0x90, 0xA4, 0x62, 0xE0, 0xFF, 0x90, 0xA4, 0x61, 0xE0, 0xFB, 0x90, 0xA4, \r
+0x63, 0xE0, 0x90, 0xA5, 0xEF, 0xF0, 0x22, 0x12, 0x45, 0x61, 0x90, 0xA4, 0x4C, 0x12, 0x08, 0x6D, \r
+0x90, 0xA3, 0xF5, 0xE0, 0x22, 0x90, 0xA4, 0x16, 0xE0, 0x24, 0x04, 0x90, 0xA4, 0x11, 0xF0, 0xA3, \r
+0x74, 0x0A, 0xF0, 0x22, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x8A, 0xF5, 0x82, 0xE4, 0x34, 0xA4, 0xF5, \r
+0x83, 0x22, 0x7B, 0x01, 0x7A, 0xA4, 0x79, 0x6C, 0x7F, 0xFB, 0x7E, 0x01, 0x02, 0x34, 0xC1, 0x90, \r
+0xA3, 0xF4, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, \r
+0xE0, 0x44, 0x80, 0xF0, 0x22, 0xEF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x07, 0xFF, \r
+0x22, 0x7F, 0x48, 0x7E, 0x09, 0x12, 0x37, 0x4E, 0xE4, 0x22, 0x90, 0xA4, 0x8A, 0x74, 0x09, 0xF0, \r
+0x90, 0xA4, 0x7E, 0x22, 0x12, 0x45, 0x97, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x22, 0xE4, 0x90, 0xA5, \r
+0xDF, 0xF0, 0x90, 0xA4, 0x5F, 0x22, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x33, 0x54, 0x80, 0x22, 0xE5, \r
+0x6A, 0x75, 0xF0, 0x08, 0xA4, 0x25, 0x69, 0x22, 0xFF, 0x90, 0xA6, 0x11, 0xE0, 0xFB, 0xEF, 0x5B, \r
+0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0x22, 0x7F, 0x4E, 0x12, 0x47, 0xAA, 0xEF, \r
+0x54, 0x7F, 0x22, 0x90, 0xA5, 0xEF, 0xE0, 0x7F, 0x48, 0x7E, 0x09, 0x22, 0x90, 0xA4, 0x5D, 0xE0, \r
+0x54, 0xFB, 0xF0, 0x22, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x69, 0x08, 0x22, 0x12, 0x47, 0xAA, 0xEF, \r
+0x44, 0x40, 0xFD, 0x22, 0xBC, 0xFE, \r
 };\r
 };\r
-u4Byte ArrayLength_MP_8723B_FW_AP_WoWLAN = 15466;\r
+u4Byte ArrayLength_MP_8723B_FW_AP_WoWLAN = 20886;\r
 \r
 void\r
 ODM_ReadFirmware_MP_8723B_FW_AP_WoWLAN(\r
 \r
 void\r
 ODM_ReadFirmware_MP_8723B_FW_AP_WoWLAN(\r
@@ -1604,45 +1943,45 @@ ODM_ReadFirmware_MP_8723B_FW_BT(
 }\r
 \r
 \r
 }\r
 \r
 \r
-// v31.00 20140813 by Isaachsu <isaachsu@realtek.com>\r
+/* v35.00 20150326 by IsaacHsu <isaachsu@realtek.com> */\r
 u1Byte Array_MP_8723B_FW_NIC[] = {\r
 u1Byte Array_MP_8723B_FW_NIC[] = {\r
-0x01, 0x53, 0x10, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x08, 0x13, 0x23, 0x37, 0x44, 0x6D, 0x00, 0x00, \r
-0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x02, 0x45, 0xED, 0x02, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x80, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x80, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x01, 0x53, 0x10, 0x00, 0x23, 0x00, 0x00, 0x00, 0x03, 0x26, 0x14, 0x35, 0x4C, 0x7D, 0x00, 0x00, \r
+0xE5, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x02, 0x45, 0xCE, 0x02, 0x77, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x02, 0x79, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x02, 0x78, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x02, 0x78, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x7F, 0xE7, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x02, 0x87, 0xDF, 0x00, 0x04, 0x0C, 0x04, 0x08, 0x08, 0x0A, 0x08, 0x03, 0x03, \r
+0x00, 0x04, 0x09, 0x07, 0x03, 0x03, 0x00, 0x04, 0x08, 0x06, 0x03, 0x02, 0x00, 0x04, 0x08, 0x05, \r
+0x03, 0x01, 0x00, 0x04, 0x0D, 0x0A, 0x07, 0x05, 0x00, 0x08, 0x0C, 0x0A, 0x07, 0x04, 0x00, 0x08, \r
+0x0B, 0x0A, 0x06, 0x05, 0x00, 0x08, 0x0B, 0x0A, 0x05, 0x03, 0x00, 0x08, 0x0B, 0x0A, 0x03, 0x02, \r
+0x00, 0x08, 0x14, 0x12, 0x0C, 0x04, 0x00, 0x10, 0x14, 0x12, 0x09, 0x04, 0x00, 0x10, 0x24, 0x22, \r
+0x1C, 0x12, 0x00, 0x20, 0x24, 0x22, 0x18, 0x0C, 0x00, 0x20, 0x24, 0x22, 0x14, 0x06, 0x00, 0x20, \r
+0x24, 0x22, 0x0F, 0x04, 0x00, 0x20, 0x24, 0x21, 0x0A, 0x04, 0x00, 0x20, 0x23, 0x21, 0x0C, 0x04, \r
+0x00, 0x20, 0x23, 0x1F, 0x0A, 0x04, 0x00, 0x20, 0x22, 0x1F, 0x0F, 0x04, 0x00, 0x20, 0x21, 0x1F, \r
+0x16, 0x0C, 0x00, 0x20, 0x31, 0x2F, 0x20, 0x14, 0x00, 0x30, 0x31, 0x2F, 0x18, 0x10, 0x00, 0x30, \r
+0x31, 0x2C, 0x18, 0x0C, 0x00, 0x30, 0x31, 0x2A, 0x14, 0x0C, 0x00, 0x30, 0x31, 0x28, 0x14, 0x00, \r
+0x00, 0x30, 0x31, 0x24, 0x14, 0x00, 0x00, 0x30, 0x31, 0x1E, 0x14, 0x00, 0x00, 0x30, 0x15, 0xF0, \r
+0xFF, 0x0F, 0x00, 0x00, 0x00, 0x15, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x05, 0xF0, 0xFF, 0x0F, \r
+0x00, 0x00, 0x00, 0x05, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x10, 0xF0, 0xFF, 0x0F, 0x00, 0x00, \r
+0x00, 0x10, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, \r
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x21, 0x25, 0x27, \r
+0x28, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, \r
+0x48, 0x00, 0x60, 0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x3C, 0x00, 0x64, 0x00, 0x78, 0x00, \r
+0xA0, 0x00, 0xF0, 0x01, 0x40, 0x01, 0x90, 0x01, 0xE0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, \r
+0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, \r
+0x6C, 0x00, 0x14, 0x00, 0x32, 0x00, 0x3C, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x00, \r
+0xF0, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x10, 0x18, 0x20, 0x30, 0x40, 0x50, 0x01, 0x01, 0x01, \r
+0x02, 0x01, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x02, 0x04, 0x06, 0x07, 0x07, 0x08, 0x08, \r
+0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, \r
+0x04, 0x05, 0x06, 0x07, 0x08, 0x19, 0x06, 0x04, 0x02, 0x00, 0x18, 0x00, 0x04, 0x0C, 0x04, 0x08, \r
+0x08, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x07, 0x0A, \r
+0x0E, 0x11, 0x13, 0x14, 0x15, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, \r
+0x12, 0x05, 0x06, 0x07, 0x0D, 0x10, 0x11, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x80, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x87, 0xDE, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x8F, 0xD1, 0x15, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x15, 0xF0, 0x0F, \r
-0x00, 0x00, 0x00, 0x00, 0x05, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x05, 0xF0, 0x0F, 0x00, 0x00, \r
-0x00, 0x00, 0x10, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x10, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, \r
-0xF5, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, \r
-0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x03, 0x03, 0x00, 0x04, 0x09, 0x07, 0x03, 0x03, 0x00, \r
-0x04, 0x08, 0x06, 0x03, 0x02, 0x00, 0x04, 0x08, 0x05, 0x03, 0x01, 0x00, 0x04, 0x0D, 0x0A, 0x07, \r
-0x05, 0x00, 0x08, 0x0C, 0x0A, 0x07, 0x04, 0x00, 0x08, 0x0B, 0x0A, 0x06, 0x05, 0x00, 0x08, 0x0B, \r
-0x0A, 0x05, 0x03, 0x00, 0x08, 0x0B, 0x0A, 0x03, 0x02, 0x00, 0x08, 0x14, 0x12, 0x0C, 0x04, 0x00, \r
-0x10, 0x14, 0x12, 0x09, 0x04, 0x00, 0x10, 0x24, 0x22, 0x1C, 0x12, 0x00, 0x20, 0x24, 0x22, 0x18, \r
-0x0C, 0x00, 0x20, 0x24, 0x22, 0x14, 0x06, 0x00, 0x20, 0x24, 0x22, 0x0F, 0x04, 0x00, 0x20, 0x24, \r
-0x21, 0x0A, 0x04, 0x00, 0x20, 0x23, 0x21, 0x0C, 0x04, 0x00, 0x20, 0x23, 0x1F, 0x0A, 0x04, 0x00, \r
-0x20, 0x22, 0x1F, 0x0F, 0x04, 0x00, 0x20, 0x21, 0x1F, 0x16, 0x0C, 0x00, 0x20, 0x31, 0x2F, 0x20, \r
-0x14, 0x00, 0x30, 0x31, 0x2F, 0x18, 0x10, 0x00, 0x30, 0x31, 0x2C, 0x18, 0x0C, 0x00, 0x30, 0x31, \r
-0x2A, 0x14, 0x0C, 0x00, 0x30, 0x31, 0x28, 0x14, 0x00, 0x00, 0x30, 0x31, 0x24, 0x14, 0x00, 0x00, \r
-0x30, 0x31, 0x1E, 0x14, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, \r
-0x07, 0x08, 0x0A, 0x04, 0x07, 0x0A, 0x0E, 0x11, 0x13, 0x14, 0x15, 0x04, 0x04, 0x04, 0x05, 0x07, \r
-0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x05, 0x06, 0x07, 0x0D, 0x10, 0x11, 0x12, 0x12, 0x00, \r
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x21, \r
-0x25, 0x27, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, \r
-0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x30, 0x00, \r
-0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0xC0, 0x00, \r
-0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x78, 0x00, \r
-0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x90, 0x00, \r
-0x00, 0x01, 0xE0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, \r
-0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x14, 0x00, 0x32, 0x00, \r
-0x3C, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x02, 0x04, 0x06, 0x08, 0x0A, \r
-0x0C, 0x10, 0x18, 0x20, 0x30, 0x40, 0x50, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x03, 0x03, 0x04, \r
-0x04, 0x05, 0x05, 0x02, 0x04, 0x06, 0x07, 0x07, 0x08, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, \r
-0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x19, \r
-0x06, 0x04, 0x02, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
@@ -1664,7 +2003,7 @@ u1Byte Array_MP_8723B_FW_NIC[] = {
 0xE6, 0x30, 0xE0, 0x03, 0x10, 0xE2, 0x0C, 0x7F, 0x00, 0x30, 0xE1, 0x07, 0x30, 0xE3, 0x04, 0x7F, \r
 0x08, 0x54, 0xF4, 0x54, 0x7C, 0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x42, 0x07, 0x22, 0x78, 0x86, 0xA6, \r
 0x81, 0x74, 0x02, 0x60, 0x06, 0xFF, 0x08, 0x76, 0xFF, 0xDF, 0xFB, 0x7F, 0x03, 0xE4, 0x78, 0x80, \r
 0xE6, 0x30, 0xE0, 0x03, 0x10, 0xE2, 0x0C, 0x7F, 0x00, 0x30, 0xE1, 0x07, 0x30, 0xE3, 0x04, 0x7F, \r
 0x08, 0x54, 0xF4, 0x54, 0x7C, 0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x42, 0x07, 0x22, 0x78, 0x86, 0xA6, \r
 0x81, 0x74, 0x02, 0x60, 0x06, 0xFF, 0x08, 0x76, 0xFF, 0xDF, 0xFB, 0x7F, 0x03, 0xE4, 0x78, 0x80, \r
-0xF6, 0x08, 0xF6, 0x08, 0xDF, 0xFA, 0x78, 0x81, 0x76, 0x30, 0x90, 0x46, 0x90, 0x74, 0x01, 0x93, \r
+0xF6, 0x08, 0xF6, 0x08, 0xDF, 0xFA, 0x78, 0x81, 0x76, 0x30, 0x90, 0x46, 0x71, 0x74, 0x01, 0x93, \r
 0xC0, 0xE0, 0xE4, 0x93, 0xC0, 0xE0, 0x43, 0x89, 0x01, 0x75, 0x8A, 0x60, 0x75, 0x8C, 0x79, 0xD2, \r
 0x8C, 0xD2, 0xAF, 0x22, 0x02, 0xEF, 0xD3, 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0x74, 0x81, \r
 0x2F, 0x2F, 0xF8, 0xE6, 0x20, 0xE5, 0xF4, 0xC2, 0xAF, 0xE6, 0x44, 0x30, 0xF6, 0xD2, 0xAF, 0xAE, \r
 0xC0, 0xE0, 0xE4, 0x93, 0xC0, 0xE0, 0x43, 0x89, 0x01, 0x75, 0x8A, 0x60, 0x75, 0x8C, 0x79, 0xD2, \r
 0x8C, 0xD2, 0xAF, 0x22, 0x02, 0xEF, 0xD3, 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0x74, 0x81, \r
 0x2F, 0x2F, 0xF8, 0xE6, 0x20, 0xE5, 0xF4, 0xC2, 0xAF, 0xE6, 0x44, 0x30, 0xF6, 0xD2, 0xAF, 0xAE, \r
@@ -1674,7 +2013,7 @@ u1Byte Array_MP_8723B_FW_NIC[] = {
 0xEE, 0xD3, 0x9F, 0x40, 0x22, 0x74, 0x86, 0x2E, 0xF8, 0x08, 0xE6, 0xF9, 0xEE, 0xB5, 0x0C, 0x02, \r
 0xA9, 0x81, 0x18, 0x06, 0x06, 0xE6, 0xFD, 0xED, 0x69, 0x60, 0x09, 0x19, 0x19, 0xE7, 0x09, 0x09, \r
 0xF7, 0x19, 0x80, 0xF3, 0x1E, 0x80, 0xD9, 0xEF, 0x24, 0x86, 0xF8, 0xE6, 0x04, 0xF8, 0xEF, 0x2F, \r
 0xEE, 0xD3, 0x9F, 0x40, 0x22, 0x74, 0x86, 0x2E, 0xF8, 0x08, 0xE6, 0xF9, 0xEE, 0xB5, 0x0C, 0x02, \r
 0xA9, 0x81, 0x18, 0x06, 0x06, 0xE6, 0xFD, 0xED, 0x69, 0x60, 0x09, 0x19, 0x19, 0xE7, 0x09, 0x09, \r
 0xF7, 0x19, 0x80, 0xF3, 0x1E, 0x80, 0xD9, 0xEF, 0x24, 0x86, 0xF8, 0xE6, 0x04, 0xF8, 0xEF, 0x2F, \r
-0x04, 0x90, 0x46, 0x90, 0x93, 0xF6, 0x08, 0xEF, 0x2F, 0x93, 0xF6, 0x7F, 0x00, 0x22, 0xEF, 0xD3, \r
+0x04, 0x90, 0x46, 0x71, 0x93, 0xF6, 0x08, 0xEF, 0x2F, 0x93, 0xF6, 0x7F, 0x00, 0x22, 0xEF, 0xD3, \r
 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0xEF, 0x23, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE5, 0xF4, \r
 0xC2, 0xAF, 0xE6, 0x54, 0x8C, 0xF6, 0xD2, 0xAF, 0xE5, 0x0C, 0xB5, 0x07, 0x0A, 0x74, 0x86, 0x2F, \r
 0xF8, 0xE6, 0xF5, 0x81, 0x02, 0x42, 0xDD, 0x50, 0x2E, 0x74, 0x87, 0x2F, 0xF8, 0xE6, 0xBF, 0x02, \r
 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0xEF, 0x23, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE5, 0xF4, \r
 0xC2, 0xAF, 0xE6, 0x54, 0x8C, 0xF6, 0xD2, 0xAF, 0xE5, 0x0C, 0xB5, 0x07, 0x0A, 0x74, 0x86, 0x2F, \r
 0xF8, 0xE6, 0xF5, 0x81, 0x02, 0x42, 0xDD, 0x50, 0x2E, 0x74, 0x87, 0x2F, 0xF8, 0xE6, 0xBF, 0x02, \r
@@ -1691,1675 +2030,1930 @@ u1Byte Array_MP_8723B_FW_NIC[] = {
 0x60, 0x25, 0x7E, 0x02, 0x08, 0x30, 0xF0, 0x10, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x23, 0x0E, 0x30, \r
 0xE2, 0x0C, 0xD2, 0xAF, 0x7F, 0x04, 0x80, 0x12, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x13, 0x54, 0xEC, \r
 0x4E, 0xF6, 0xD2, 0xAF, 0x02, 0x42, 0xDD, 0x7F, 0x08, 0x08, 0xEF, 0x44, 0x83, 0xF4, 0xC2, 0xAF, \r
 0x60, 0x25, 0x7E, 0x02, 0x08, 0x30, 0xF0, 0x10, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x23, 0x0E, 0x30, \r
 0xE2, 0x0C, 0xD2, 0xAF, 0x7F, 0x04, 0x80, 0x12, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x13, 0x54, 0xEC, \r
 0x4E, 0xF6, 0xD2, 0xAF, 0x02, 0x42, 0xDD, 0x7F, 0x08, 0x08, 0xEF, 0x44, 0x83, 0xF4, 0xC2, 0xAF, \r
-0x56, 0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x4F, 0xFF, 0x22, 0xEF, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, 0xED, \r
-0x39, 0xFD, 0xEC, 0x38, 0xFC, 0x22, 0xEF, 0x5B, 0xFF, 0xEE, 0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, \r
-0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, \r
-0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8, 0x9C, 0x45, 0xF0, \r
-0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xE4, 0x93, 0xFC, \r
-0x74, 0x01, 0x93, 0xFD, 0x74, 0x02, 0x93, 0xFE, 0x74, 0x03, 0x93, 0xFF, 0x22, 0xE0, 0xF8, 0xA3, \r
-0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xE4, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF9, \r
-0x74, 0x02, 0x93, 0xFA, 0x74, 0x03, 0x93, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5, 0x82, 0xE5, 0xF0, \r
-0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x22, 0xEB, 0xF0, \r
-0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, \r
-0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, \r
-0xE4, 0x73, 0x74, 0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0x02, 0x46, 0x2B, \r
-0x02, 0x43, 0x6D, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, \r
-0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, \r
-0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, \r
-0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x46, 0x70, 0xE4, 0x7E, \r
-0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, \r
-0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, \r
-0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, \r
-0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, \r
-0x41, 0xA2, 0x14, 0x00, 0x41, 0xA2, 0x15, 0x00, 0x41, 0xA2, 0x16, 0x00, 0x41, 0xA2, 0x1A, 0x00, \r
-0x01, 0x70, 0x00, 0x41, 0xA2, 0x1B, 0x00, 0x41, 0xA2, 0x1C, 0x00, 0x41, 0xA2, 0x3D, 0x00, 0x00, \r
-0x5F, 0xFB, 0x67, 0xEE, 0x70, 0x07, 0x7F, 0x67, 0xF1, 0xAF, 0xEF, 0x44, 0x20, 0xFD, 0x7F, 0x67, \r
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF1, 0xFD, 0xD0, \r
-0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA1, 0xF4, 0xEF, 0xF0, \r
-0x90, 0xA1, 0xF6, 0xEB, 0xF0, 0xED, 0x60, 0x02, 0xE1, 0x5A, 0x90, 0x07, 0x6E, 0xE0, 0x44, 0x08, \r
-0xF0, 0x12, 0x9F, 0xA2, 0x90, 0xA1, 0xF6, 0xE0, 0x70, 0x43, 0xD1, 0x96, 0x90, 0xA1, 0xF4, 0xE0, \r
-0x70, 0x35, 0x12, 0xAC, 0xE0, 0x70, 0x16, 0x12, 0x37, 0x4E, 0xE4, 0xFF, 0x74, 0x02, 0xFE, 0xEC, \r
-0xF1, 0xD0, 0xF1, 0xD6, 0x7F, 0x64, 0xF1, 0xAF, 0xEF, 0x54, 0xFE, 0x80, 0x15, 0x12, 0x37, 0x4E, \r
-0xE4, 0xFE, 0x74, 0x80, 0xFF, 0xE4, 0xEC, 0xF1, 0xD0, 0xF1, 0xD6, 0x7F, 0x64, 0xF1, 0xAF, 0xEF, \r
-0x44, 0x01, 0xFD, 0x7F, 0x64, 0xD1, 0xA0, 0x7F, 0x4E, 0xF1, 0xF7, 0xE1, 0xA1, 0xD1, 0x96, 0x90, \r
-0xA1, 0xF4, 0xE0, 0x70, 0x0A, 0xF1, 0xF0, 0xE4, 0xFF, 0xFE, 0xEC, 0xF1, 0xD0, 0xF1, 0xD6, 0xF1, \r
-0xE8, 0xF1, 0xDD, 0x44, 0x01, 0xFD, 0x7F, 0x4F, 0xD1, 0xA0, 0x12, 0x97, 0x6E, 0xE4, 0x74, 0x66, \r
-0xFF, 0xEC, 0xF1, 0xD0, 0x7F, 0x30, 0x7E, 0x09, 0x12, 0x38, 0x45, 0x12, 0xAB, 0x8D, 0xEF, 0x44, \r
-0x01, 0xFF, 0xEC, 0xF1, 0xD0, 0x12, 0x67, 0xD1, 0x80, 0x50, 0x90, 0x07, 0x6E, 0xE0, 0x54, 0xF7, \r
-0xF0, 0x12, 0x9F, 0xAA, 0x90, 0xA1, 0xF4, 0xE0, 0x70, 0x35, 0x90, 0xA1, 0xF6, 0xE0, 0x60, 0x08, \r
-0xD1, 0x96, 0xF1, 0xF0, 0xE4, 0xFF, 0x80, 0x21, 0x7F, 0x67, 0xF1, 0xAF, 0xEF, 0x54, 0xDF, 0xFD, \r
-0x7F, 0x67, 0xD1, 0xA0, 0x12, 0xAC, 0xE0, 0x70, 0x0B, 0x12, 0x37, 0x4E, 0xE4, 0x74, 0x80, 0xFF, \r
-0x74, 0x02, 0x80, 0x05, 0x12, 0x37, 0x4E, 0xE4, 0xFF, 0xFE, 0xEC, 0xF1, 0xD0, 0xF1, 0xD6, 0xF1, \r
-0xE8, 0xF1, 0xDD, 0x54, 0xFE, 0xFD, 0x7F, 0x4F, 0xD1, 0xA0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, \r
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xE0, 0x90, 0xA2, 0x32, 0xF1, \r
-0xFD, 0x90, 0xA2, 0x32, 0xE0, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA1, 0xC5, 0xB1, 0x71, \r
-0x90, 0xAA, 0xB9, 0x02, 0x08, 0x6D, 0x7F, 0x48, 0x7E, 0x09, 0x02, 0x38, 0x45, 0xFD, 0x7F, 0x4E, \r
-0xD1, 0xA0, 0x7F, 0x4F, 0xF1, 0xAF, 0xEF, 0x22, 0x7F, 0x4E, 0xF1, 0xAF, 0xEF, 0x54, 0x7F, 0x22, \r
-0x7F, 0x48, 0x7E, 0x09, 0x02, 0x37, 0x4E, 0xF1, 0xAF, 0xEF, 0x44, 0x80, 0x22, 0xF0, 0x7F, 0x10, \r
-0x7E, 0x00, 0x02, 0x3E, 0x50, 0x90, 0xA0, 0xC1, 0xE0, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0x75, 0xF0, \r
-0x0E, 0x90, 0xA0, 0xCE, 0x12, 0x45, 0xA9, 0xE0, 0xFE, 0x75, 0xF0, 0x0E, 0xEF, 0x90, 0xA0, 0xCD, \r
-0x12, 0x45, 0xA9, 0xE0, 0x90, 0xA1, 0xDA, 0xF0, 0x90, 0xA1, 0xD9, 0xEE, 0xF0, 0xE4, 0xFB, 0xFD, \r
-0x7F, 0x54, 0x7E, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA1, 0xD5, 0xEE, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0x90, 0xA1, 0xD9, 0xE0, 0xF5, 0x3B, 0xA3, 0xE0, 0xF5, 0x3C, 0x12, 0x36, 0x3E, \r
-0x90, 0xA1, 0xD5, 0x12, 0x97, 0x97, 0xA3, 0xA3, 0xA3, 0x74, 0x05, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, \r
-0x22, 0x90, 0xA0, 0xC1, 0xE0, 0x30, 0xE0, 0x5D, 0x90, 0xA0, 0xC3, 0xE0, 0x70, 0x2A, 0x7D, 0x16, \r
-0x7F, 0x6F, 0x31, 0x22, 0x91, 0x22, 0x51, 0x4C, 0x54, 0x07, 0x75, 0xF0, 0x0E, 0x11, 0xC6, 0x51, \r
-0x4C, 0x54, 0x07, 0x12, 0xA4, 0xFC, 0xE0, 0x44, 0x01, 0x12, 0xA9, 0x18, 0xA3, 0x74, 0x03, 0x11, \r
-0x2C, 0x90, 0xA0, 0xC3, 0x74, 0x01, 0xF0, 0x22, 0x90, 0xA0, 0xC3, 0xE0, 0x64, 0x01, 0x70, 0x23, \r
-0x90, 0xA0, 0xC1, 0xE0, 0x12, 0xA4, 0xF7, 0xE0, 0x30, 0xE0, 0x18, 0x75, 0xF0, 0x0E, 0xEF, 0x11, \r
-0xC6, 0xE4, 0x90, 0xA1, 0xD9, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, \r
-0x01, 0x01, 0x34, 0x31, 0x2D, 0x22, 0x90, 0xA0, 0xD0, 0x12, 0x45, 0xA9, 0xE0, 0xFF, 0x7E, 0x00, \r
-0x7D, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA1, 0xDB, 0xEE, 0xF0, 0xA3, 0xEF, \r
-0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1C, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA1, \r
-0xE0, 0xF0, 0x7D, 0x13, 0x91, 0x1E, 0xBF, 0x01, 0x02, 0x91, 0xFF, 0x90, 0xA1, 0xE0, 0xE0, 0xFF, \r
-0x7D, 0x15, 0x31, 0x22, 0x80, 0x02, 0x91, 0xFF, 0xF1, 0x09, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, \r
-0x22, 0x90, 0xA0, 0xD0, 0x12, 0x45, 0xA9, 0xE0, 0xFF, 0x7E, 0x00, 0xE4, 0xFD, 0x11, 0xD2, 0xE4, \r
-0xFD, 0xFF, 0x90, 0x05, 0x22, 0xEF, 0xF0, 0x90, 0x9E, 0x96, 0xED, 0xF0, 0x22, 0x90, 0xA0, 0xC1, \r
-0xE0, 0xFF, 0xC3, 0x13, 0xFE, 0xEF, 0x54, 0xF1, 0xFF, 0xEE, 0x04, 0x54, 0x07, 0x25, 0xE0, 0x4F, \r
-0xF0, 0xA3, 0xE0, 0xFF, 0x12, 0xAC, 0x6F, 0xB5, 0x07, 0x04, 0xEE, 0x54, 0xF1, 0xF0, 0x11, 0x05, \r
-0xE4, 0x90, 0xA0, 0xC3, 0xF0, 0x91, 0x22, 0x12, 0xAC, 0x6F, 0x12, 0xAB, 0xD9, 0xE0, 0xFA, 0x75, \r
-0xF0, 0x0E, 0xED, 0xF1, 0xB7, 0xFC, 0x54, 0x03, 0xFD, 0xEC, 0x13, 0x13, 0x54, 0x07, 0xFB, 0xEE, \r
-0x12, 0xAC, 0xF1, 0xAF, 0x02, 0x12, 0xA6, 0x91, 0x51, 0x4C, 0x54, 0x07, 0x75, 0xF0, 0x0E, 0xF1, \r
-0xB7, 0x12, 0xAC, 0x65, 0xFD, 0x51, 0x53, 0x51, 0x4C, 0x54, 0x07, 0xFF, 0x75, 0xF0, 0x0E, 0x90, \r
-0xA0, 0xCF, 0x12, 0x45, 0xA9, 0xE0, 0x04, 0xF0, 0x75, 0xF0, 0x0E, 0xEF, 0x31, 0x11, 0x51, 0x4C, \r
-0x54, 0x07, 0xFD, 0xE4, 0xFF, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x0C, 0xEF, \r
-0xF0, 0xA3, 0xED, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0xA2, 0x0E, 0xE0, 0xFF, 0xC3, 0x94, 0x02, 0x40, \r
-0x02, 0x41, 0x47, 0x90, 0xA2, 0x0D, 0xE0, 0xFE, 0x12, 0xA8, 0x09, 0x75, 0xF0, 0x03, 0xEF, 0x12, \r
-0xAC, 0x02, 0xE0, 0x90, 0xA2, 0x0F, 0xF0, 0x90, 0xA2, 0x0C, 0xE0, 0x60, 0x24, 0x90, 0xA2, 0x0F, \r
-0xE0, 0xFF, 0x75, 0xF0, 0x0E, 0xEE, 0x12, 0xA7, 0x8B, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0xA2, 0x0E, \r
-0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x12, 0x78, 0xEE, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0x80, \r
-0x20, 0x12, 0xAC, 0x79, 0x75, 0xF0, 0x0E, 0x12, 0xA7, 0x8B, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0xA2, \r
-0x0E, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x12, 0x78, 0xEE, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, \r
-0x5F, 0x90, 0xA2, 0x0F, 0xF0, 0x12, 0xAC, 0x79, 0x12, 0xA8, 0x09, 0xC0, 0x83, 0xC0, 0x82, 0x90, \r
-0xA2, 0x0E, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x03, 0x12, 0xAC, 0x02, 0xEF, 0xF0, 0x90, \r
-0xA2, 0x0E, 0xE0, 0x04, 0xF0, 0x21, 0xB7, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA0, 0xC1, 0xE0, \r
-0xC3, 0x13, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x36, 0xED, 0xF0, 0xEF, \r
-0x14, 0x60, 0x02, 0x61, 0x10, 0x90, 0x06, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0xA2, 0x36, 0xE0, \r
-0xC4, 0x33, 0x54, 0xE0, 0xFF, 0x90, 0x04, 0x42, 0xE0, 0x54, 0x9F, 0x4F, 0xFF, 0xF0, 0x90, 0xA1, \r
-0x88, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0xA1, 0x8C, 0x12, 0x08, 0x79, 0x00, 0x00, \r
-0x00, 0x01, 0x71, 0xD6, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0xA1, 0x8C, 0x12, 0x08, \r
-0x79, 0x00, 0x00, 0x00, 0x01, 0x7F, 0x00, 0x7E, 0x09, 0x71, 0xDA, 0x12, 0x08, 0x79, 0x00, 0x00, \r
-0x00, 0x10, 0x12, 0xAB, 0x52, 0x78, 0x01, 0x12, 0x08, 0x47, 0x78, 0x04, 0xF1, 0xC7, 0x7F, 0x00, \r
-0x7E, 0x0A, 0x71, 0xDA, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x12, 0xAB, 0x52, 0x78, 0x0A, \r
-0xF1, 0xC7, 0x7F, 0x00, 0x7E, 0x0D, 0x71, 0xDA, 0x12, 0x08, 0x79, 0x0C, 0x00, 0x00, 0x00, 0x12, \r
-0xAB, 0x52, 0x78, 0x1A, 0xF1, 0xC7, 0x7F, 0x18, 0x71, 0xD8, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, \r
-0x00, 0x90, 0xA1, 0x8C, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xDA, 0x12, 0x08, 0x79, \r
-0x00, 0x00, 0x0C, 0x00, 0x90, 0xA1, 0x7A, 0x12, 0x08, 0x79, 0x00, 0x00, 0x04, 0x00, 0x80, 0x58, \r
-0x90, 0x06, 0x03, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0xA1, 0x88, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, \r
-0x01, 0x90, 0xA1, 0x8C, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0x71, 0xD6, 0x12, 0x08, 0x79, \r
-0x00, 0x00, 0x00, 0x01, 0x90, 0xA1, 0x8C, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, \r
-0x7E, 0x09, 0x71, 0xDA, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x90, 0xA1, 0x8C, 0x12, 0x08, \r
-0x79, 0x00, 0x00, 0x0C, 0x00, 0xF1, 0xDA, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x90, 0xA1, \r
-0x7A, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x7D, 0x18, 0x7C, 0x00, 0xE4, 0xFF, 0x12, 0xA6, \r
-0x19, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA1, 0x86, \r
-0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x37, 0x4E, 0x90, 0xA1, 0x90, 0x12, 0x08, 0x6D, 0x90, 0xA1, \r
-0x88, 0x12, 0x45, 0x71, 0x12, 0x08, 0x3A, 0x90, 0xA1, 0x90, 0xF1, 0xF0, 0xC0, 0x04, 0xC0, 0x05, \r
-0xC0, 0x06, 0xC0, 0x07, 0x90, 0xA1, 0x88, 0x12, 0x45, 0x71, 0x90, 0xA1, 0x8C, 0xF1, 0xF0, 0xD0, \r
-0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x53, 0x90, 0xA1, 0x94, 0x12, 0x08, 0x6D, \r
-0x90, 0xA1, 0x94, 0x12, 0x47, 0xCE, 0x90, 0xA1, 0x86, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x38, \r
-0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x00, 0x7E, 0x08, 0x71, 0x76, 0x90, 0xA1, 0x88, 0x22, \r
-0x8F, 0x54, 0x7D, 0x17, 0x91, 0x1E, 0x75, 0xF0, 0x0E, 0xE5, 0x54, 0x12, 0xAB, 0xDD, 0xE0, 0xFC, \r
-0xF1, 0xB2, 0xFE, 0x54, 0x03, 0xFD, 0xEE, 0x13, 0x13, 0x54, 0x07, 0xFB, 0x90, 0xA0, 0xC1, 0xE0, \r
-0xFE, 0x12, 0xAC, 0xF1, 0xAF, 0x04, 0x12, 0xA6, 0x91, 0xF1, 0xB2, 0x12, 0xAC, 0x65, 0xFD, 0x51, \r
-0x53, 0x75, 0xF0, 0x0E, 0xE5, 0x54, 0x31, 0x11, 0xAD, 0x54, 0xE4, 0xFF, 0x21, 0xA5, 0x7F, 0xFF, \r
-0x31, 0x22, 0xE4, 0x90, 0xA2, 0x2C, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, \r
-0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xF1, 0xD0, \r
-0x30, 0xE0, 0x15, 0xD3, 0x90, 0xA2, 0x2D, 0xE0, 0x94, 0x03, 0x90, 0xA2, 0x2C, 0xE0, 0x94, 0x00, \r
-0x40, 0x02, 0x80, 0x13, 0x7F, 0x01, 0x80, 0x1B, 0xD3, 0x90, 0xA2, 0x2D, 0xE0, 0x94, 0xE8, 0x90, \r
-0xA2, 0x2C, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x20, 0xF0, 0x7F, 0x00, \r
-0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x90, 0xA2, 0x2C, 0x12, 0x96, 0x39, 0x80, 0xA9, \r
-0x90, 0xA0, 0x66, 0xE0, 0x44, 0x02, 0xF0, 0x7D, 0x08, 0x7F, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, \r
-0xC0, 0xD0, 0x90, 0xA1, 0xE6, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x9E, 0x94, 0xE0, 0x04, 0xF0, \r
-0x90, 0x04, 0x1D, 0xE0, 0x60, 0x33, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA1, 0xEA, 0xF0, 0x7D, 0x26, \r
-0x91, 0x1E, 0xEF, 0x64, 0x01, 0x70, 0x07, 0xD1, 0xB9, 0x20, 0xE0, 0x0F, 0x80, 0x0A, 0xF1, 0xD0, \r
-0x30, 0xE0, 0x08, 0xD1, 0xB9, 0x20, 0xE0, 0x03, 0x12, 0xA9, 0xC1, 0x90, 0xA1, 0xEA, 0xE0, 0xFF, \r
-0x7D, 0x27, 0x31, 0x22, 0x12, 0xAA, 0x45, 0x80, 0x0B, 0x12, 0xAA, 0x45, 0xD1, 0xB9, 0x20, 0xE0, \r
-0x03, 0x12, 0xA9, 0xC1, 0x90, 0xA0, 0x5F, 0xE0, 0x30, 0xE0, 0x0B, 0xF1, 0xD0, 0x30, 0xE0, 0x06, \r
-0xF1, 0xF6, 0x7D, 0x28, 0x31, 0x22, 0xF1, 0x09, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, \r
-0xA1, 0xDB, 0xA3, 0xE0, 0xFF, 0x7B, 0x08, 0x7D, 0x01, 0xB1, 0x59, 0x90, 0xA1, 0xDE, 0xEE, 0xF0, \r
-0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0xA1, 0xDD, 0xE0, 0xFF, 0xF1, 0xA6, 0x54, 0x3F, 0xF0, 0xEF, \r
-0x60, 0x2C, 0xF1, 0xE4, 0x44, 0x10, 0xF0, 0xF1, 0xA6, 0x44, 0x80, 0xF0, 0x12, 0x9B, 0xBB, 0x30, \r
-0xE0, 0x26, 0x12, 0x86, 0xCA, 0x50, 0x0E, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x74, 0x2B, 0x2D, \r
-0xF1, 0x92, 0xEF, 0xF0, 0x22, 0x74, 0x2B, 0x2D, 0xF1, 0x92, 0x74, 0x7F, 0xF0, 0x22, 0xF1, 0xE4, \r
-0x54, 0xEF, 0xF0, 0xF1, 0xA6, 0x44, 0x40, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
-0x90, 0xA2, 0x21, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0xA2, 0x20, 0xEF, 0xF0, 0xE4, 0xFD, 0xFC, \r
-0x12, 0xAA, 0xF9, 0x7C, 0x00, 0xAD, 0x07, 0x90, 0xA2, 0x20, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90, \r
-0xA2, 0x21, 0xE0, 0x60, 0x06, 0x12, 0xAC, 0x32, 0x44, 0x80, 0xF0, 0xAF, 0x05, 0x74, 0x20, 0x2F, \r
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0xF0, 0x12, 0xAC, 0x32, 0x54, 0xC0, \r
-0xF0, 0xAF, 0x05, 0xF1, 0x9B, 0xE0, 0x54, 0x01, 0xFE, 0x90, 0xA2, 0x22, 0xE0, 0x25, 0xE0, 0x25, \r
-0xE0, 0xFB, 0xEE, 0x44, 0x02, 0x4B, 0xFE, 0xF1, 0x9B, 0xEE, 0xF0, 0x74, 0x11, 0x2F, 0x12, 0xAA, \r
-0x3D, 0x74, 0xFF, 0xF0, 0x74, 0x29, 0x2F, 0xF1, 0xE7, 0x54, 0xF7, 0xF0, 0xAE, 0x04, 0xAF, 0x05, \r
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x10, 0xEF, \r
-0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1F, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA2, 0x13, 0xF0, 0x7D, \r
-0x29, 0x91, 0x1E, 0xBF, 0x01, 0x05, 0x12, 0xAB, 0x1B, 0xB1, 0x1A, 0x90, 0xA2, 0x13, 0xE0, 0xFF, \r
-0x7D, 0x2A, 0x31, 0x22, 0x80, 0x05, 0x12, 0xAB, 0x1B, 0xB1, 0x1A, 0xF1, 0x09, 0xD0, 0xD0, 0x92, \r
-0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA1, 0xEB, 0xEE, 0xF0, 0xA3, 0xEF, \r
-0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1D, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA1, 0xEF, 0xF0, 0x7D, \r
-0x36, 0x91, 0x1E, 0xBF, 0x01, 0x03, 0x12, 0xAA, 0xB0, 0x90, 0xA1, 0xEF, 0xE0, 0xFF, 0x7D, 0x37, \r
-0x31, 0x22, 0x80, 0x03, 0x12, 0xAA, 0xB0, 0xF1, 0xF6, 0x7D, 0x38, 0x31, 0x22, 0xF1, 0x09, 0xD0, \r
-0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA1, 0x2B, 0xEF, 0xF1, 0xBF, 0x12, 0xAD, 0x19, 0x54, 0x1F, 0x20, \r
-0xE0, 0x0D, 0x90, 0xA1, 0x2C, 0xE0, 0xB4, 0x01, 0x06, 0x7D, 0x36, 0x7F, 0x6F, 0x31, 0x22, 0x90, \r
-0xA1, 0x2B, 0xE0, 0x70, 0x0B, 0x90, 0xA1, 0x2D, 0xE0, 0xFF, 0x7D, 0x05, 0x91, 0x8B, 0x80, 0x26, \r
-0x90, 0xA1, 0x2B, 0xE0, 0xB4, 0x01, 0x09, 0x90, 0xA1, 0x2D, 0xE0, 0xFF, 0xB1, 0xD5, 0x80, 0x16, \r
-0x90, 0xA1, 0x2B, 0xE0, 0xB4, 0x02, 0x0F, 0xA3, 0xE0, 0xB4, 0x01, 0x0A, 0x90, 0xA0, 0xBB, 0xE0, \r
-0xFE, 0xA3, 0xE0, 0xFF, 0xD1, 0x12, 0x12, 0xAD, 0x19, 0x54, 0x1F, 0x20, 0xE0, 0x0A, 0x90, 0xA1, \r
-0x2C, 0xE0, 0x70, 0x04, 0xFD, 0xFF, 0x31, 0x22, 0x22, 0x90, 0x9E, 0x9A, 0xE0, 0xFF, 0x90, 0xA1, \r
-0xE7, 0xE0, 0xFB, 0x7D, 0x01, 0xB1, 0x59, 0x90, 0xA1, 0xE8, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, \r
-0xFD, 0x90, 0xA1, 0xE6, 0xE0, 0xFF, 0xB1, 0x1A, 0x90, 0xA0, 0xC1, 0xE0, 0x22, 0x90, 0xA1, 0x2C, \r
-0xEF, 0xF1, 0xBF, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1E, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA1, 0x31, \r
-0xF0, 0x7D, 0x01, 0x91, 0x1E, 0xEF, 0x64, 0x01, 0x70, 0x02, 0xF1, 0x10, 0x90, 0xA1, 0x31, 0xE0, \r
-0xFF, 0x7D, 0x02, 0x31, 0x22, 0x80, 0x02, 0xF1, 0x10, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, \r
-0x90, 0x9E, 0x9C, 0xE0, 0xFF, 0x7B, 0x08, 0x7D, 0x01, 0xB1, 0x59, 0x90, 0xA1, 0x2F, 0xEE, 0xF0, \r
-0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0xA1, 0x2C, 0xE0, 0xFF, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, \r
-0xA1, 0x36, 0xF0, 0x90, 0xA1, 0x33, 0xEC, 0xF1, 0xBF, 0x90, 0xA1, 0x33, 0xE0, 0xFC, 0xA3, 0xE0, \r
-0xFD, 0xB1, 0x1A, 0x90, 0xA1, 0x33, 0xA3, 0xE0, 0xFF, 0xFD, 0x24, 0x0D, 0x12, 0xAA, 0x35, 0xE0, \r
-0x44, 0x80, 0xF0, 0x74, 0x0D, 0x2D, 0x12, 0xAA, 0x35, 0xE0, 0x54, 0xEF, 0xF1, 0x9A, 0xE0, 0x44, \r
-0x02, 0xF1, 0x9A, 0xE0, 0x54, 0x03, 0xF0, 0x90, 0xA1, 0x35, 0xE0, 0xFF, 0x90, 0xA1, 0x33, 0xA3, \r
-0xE0, 0xFE, 0x24, 0x2A, 0x12, 0xAA, 0xEF, 0x90, 0xA1, 0x36, 0xE0, 0xFF, 0xF1, 0x8F, 0xEF, 0xF0, \r
-0x74, 0x2C, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x24, 0x02, 0xF0, 0x22, 0x74, \r
-0x2B, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF0, 0x74, 0x12, 0x2F, 0xF5, 0x82, \r
-0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0x74, 0x09, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, \r
-0xE0, 0x22, 0x75, 0xF0, 0x0E, 0xE5, 0x54, 0x90, 0xA0, 0xC5, 0x12, 0x45, 0xA9, 0xE0, 0x22, 0xF0, \r
-0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x22, 0x12, 0x08, 0x5A, 0x90, 0xA1, 0x8C, 0x02, 0x08, 0x6D, \r
-0x90, 0xA0, 0x63, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x22, 0x7F, 0x84, 0x7E, 0x08, 0x71, 0x76, \r
-0x90, 0xA1, 0x76, 0x22, 0x74, 0x29, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, \r
-0x12, 0x45, 0x8D, 0x02, 0x45, 0x46, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x6F, 0xFF, 0x22, 0xD3, 0x10, \r
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7E, 0xE8, 0x20, 0xE6, 0x02, 0x01, 0xDB, 0x90, 0x00, 0x8C, \r
-0xE0, 0xF5, 0x6E, 0x7F, 0x8D, 0x12, 0x47, 0xAF, 0x90, 0x00, 0x8E, 0xE0, 0xF5, 0x6F, 0xEF, 0x24, \r
-0xFC, 0x60, 0x0D, 0x24, 0x03, 0x60, 0x02, 0x01, 0xD2, 0xAF, 0x6E, 0x12, 0x7E, 0x96, 0x01, 0xD2, \r
-0x74, 0x11, 0x25, 0x6E, 0x12, 0x76, 0x3C, 0xE0, 0xFB, 0xE4, 0xFD, 0x31, 0x0A, 0x31, 0x19, 0x13, \r
-0x13, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0x31, 0x0A, 0x31, 0x19, 0xD1, 0xE5, 0xFB, 0x0D, 0xE4, 0x31, \r
-0x0A, 0x31, 0x19, 0xC4, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0x31, 0x0A, 0xF1, 0xEF, 0xE0, 0xFB, 0xE4, \r
-0xFD, 0x0F, 0x31, 0x0B, 0x90, 0x96, 0x12, 0x11, 0xE0, 0x75, 0xF0, 0x04, 0xE5, 0x6E, 0xD1, 0x3C, \r
-0xC4, 0x13, 0x54, 0x01, 0xFB, 0x0D, 0x7F, 0x01, 0x31, 0x0B, 0xD1, 0x3C, 0x54, 0x1F, 0xFB, 0x0D, \r
-0x11, 0xE6, 0x75, 0xF0, 0x08, 0xE5, 0x6E, 0x90, 0x89, 0x00, 0xD1, 0xF7, 0x75, 0xF0, 0x08, 0xE5, \r
-0x6E, 0x90, 0x89, 0x01, 0x11, 0xE0, 0x75, 0xF0, 0x08, 0xE5, 0x6E, 0x90, 0x89, 0x02, 0x11, 0xE0, \r
-0x75, 0xF0, 0x08, 0xE5, 0x6E, 0x90, 0x89, 0x03, 0x11, 0xE0, 0x75, 0xF0, 0x08, 0xE5, 0x6E, 0x90, \r
-0x89, 0x04, 0xD1, 0xF7, 0x75, 0xF0, 0x08, 0xE5, 0x6E, 0x90, 0x89, 0x05, 0x11, 0xE0, 0x75, 0xF0, \r
-0x08, 0xE5, 0x6E, 0x90, 0x89, 0x06, 0x11, 0xE0, 0x75, 0xF0, 0x08, 0xE5, 0x6E, 0x90, 0x89, 0x07, \r
-0x11, 0xE0, 0x12, 0x7E, 0xE8, 0x30, 0xE0, 0x03, 0x12, 0x7F, 0x58, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
-0x12, 0x45, 0xA9, 0xE0, 0xFB, 0x0D, 0xEF, 0x70, 0x04, 0x74, 0xF0, 0x80, 0x16, 0xEF, 0xB4, 0x01, \r
-0x04, 0x74, 0xF4, 0x80, 0x0E, 0xEF, 0xB4, 0x02, 0x04, 0x74, 0xF8, 0x80, 0x06, 0xEF, 0xB4, 0x03, \r
-0x08, 0x74, 0xFC, 0x2D, 0x12, 0xA1, 0x89, 0xEB, 0xF0, 0x22, 0xFF, 0x11, 0xE6, 0x75, 0xF0, 0x04, \r
-0xE5, 0x6E, 0x22, 0xFF, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, 0x14, 0x12, 0x45, 0xA9, 0xE0, \r
-0x22, 0x12, 0x06, 0x89, 0x54, 0x7F, 0xF5, 0x51, 0x12, 0x6A, 0x87, 0xFF, 0x54, 0x1F, 0xF5, 0x53, \r
-0xEF, 0x54, 0x80, 0xD1, 0xE5, 0xF5, 0x52, 0xD1, 0xDE, 0xFF, 0x54, 0x03, 0xF5, 0x54, 0xEF, 0x54, \r
-0x30, 0xC4, 0x54, 0x0F, 0xF5, 0x57, 0xD1, 0xDE, 0xFF, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, \r
-0xF5, 0x55, 0xEF, 0x54, 0x80, 0xD1, 0xE5, 0xF5, 0x56, 0xD1, 0xDE, 0xFF, 0x54, 0x08, 0x13, 0x13, \r
-0x13, 0x54, 0x1F, 0xF5, 0x59, 0xEF, 0x54, 0x04, 0x13, 0x13, 0x54, 0x3F, 0xF5, 0x5A, 0xE5, 0x56, \r
-0x12, 0xAC, 0xB3, 0x31, 0x13, 0x54, 0x7F, 0x4F, 0xF0, 0xE5, 0x55, 0x12, 0x61, 0xC8, 0x31, 0x13, \r
-0x54, 0xBF, 0x4F, 0xF0, 0xE5, 0x59, 0x70, 0x74, 0xE5, 0x53, 0x54, 0x1F, 0xD1, 0x36, 0x54, 0xE0, \r
-0x4F, 0xF0, 0xE5, 0x54, 0x54, 0x03, 0x31, 0x13, 0x54, 0xFC, 0x4F, 0xF0, 0xEF, 0x25, 0xE0, 0x25, \r
-0xE0, 0x31, 0x13, 0x54, 0xF3, 0x4F, 0xF0, 0xE5, 0x52, 0x54, 0x01, 0xC4, 0x33, 0x54, 0xE0, 0xD1, \r
-0x36, 0x54, 0xDF, 0x4F, 0xF0, 0xE5, 0x57, 0x54, 0x03, 0xC4, 0x54, 0xF0, 0x31, 0x13, 0x54, 0xCF, \r
-0x4F, 0xD1, 0x54, 0xE0, 0x54, 0xFB, 0xD1, 0x54, 0xE0, 0xFF, 0xE5, 0x5A, 0x25, 0xE0, 0x25, 0xE0, \r
-0xFE, 0xEF, 0x4E, 0xF0, 0xE4, 0xF5, 0x58, 0x85, 0x58, 0x82, 0x75, 0x83, 0x00, 0xA3, 0xA3, 0xA3, \r
-0x12, 0x06, 0xA2, 0xFF, 0x75, 0xF0, 0x08, 0xE5, 0x51, 0xD1, 0x4B, 0x25, 0x58, 0xB1, 0x36, 0xEF, \r
-0xF0, 0x05, 0x58, 0xE5, 0x58, 0xB4, 0x04, 0xDF, 0xAF, 0x51, 0x71, 0x22, 0x22, 0x90, 0xA0, 0xFE, \r
-0x12, 0x45, 0xBE, 0x90, 0xA0, 0xFD, 0xEF, 0xF0, 0x12, 0x45, 0xC7, 0x52, 0x6F, 0x00, 0x52, 0x74, \r
-0x01, 0x52, 0x79, 0x02, 0x52, 0x7E, 0x10, 0x52, 0x83, 0x11, 0x52, 0x87, 0x12, 0x52, 0x8C, 0x14, \r
-0x52, 0x91, 0x20, 0x52, 0x96, 0x21, 0x52, 0x9B, 0x23, 0x52, 0xA0, 0x24, 0x52, 0xA5, 0x25, 0x52, \r
-0xAA, 0x27, 0x52, 0xAF, 0x28, 0x52, 0xB4, 0x40, 0x52, 0xB8, 0x42, 0x52, 0xBC, 0x60, 0x52, 0xC1, \r
-0x61, 0x52, 0xC6, 0x62, 0x52, 0xCB, 0x63, 0x52, 0xD0, 0x64, 0x52, 0xD5, 0x65, 0x52, 0xDA, 0x66, \r
-0x52, 0xDF, 0x67, 0x52, 0xE4, 0x68, 0x52, 0xE9, 0x69, 0x52, 0xEE, 0x6B, 0x52, 0xF3, 0x6C, 0x52, \r
-0xF8, 0x6D, 0x52, 0xFD, 0x6E, 0x53, 0x02, 0x6F, 0x53, 0x07, 0x70, 0x00, 0x00, 0x53, 0x0C, 0x71, \r
-0x1C, 0x02, 0x6D, 0x37, 0x71, 0x1C, 0x02, 0x7F, 0x6D, 0x71, 0x1C, 0x02, 0x9C, 0x55, 0x71, 0x1C, \r
-0x02, 0x9C, 0x93, 0x71, 0x1C, 0xE1, 0x0F, 0x71, 0x1C, 0x02, 0x9A, 0x35, 0x71, 0x1C, 0x02, 0x9C, \r
-0xB6, 0x71, 0x1C, 0x02, 0x69, 0x41, 0x71, 0x1C, 0x02, 0x9C, 0xC5, 0x71, 0x1C, 0x02, 0x9D, 0x04, \r
-0x71, 0x1C, 0x02, 0x5C, 0xDE, 0x71, 0x1C, 0x02, 0x9D, 0x0C, 0x71, 0x1C, 0x02, 0x89, 0x61, 0x71, \r
-0x1C, 0x02, 0x9D, 0x4F, 0x71, 0x1C, 0x21, 0x21, 0x71, 0x1C, 0xC1, 0x61, 0x71, 0x1C, 0x02, 0x6A, \r
-0x8D, 0x71, 0x1C, 0x02, 0x93, 0x0A, 0x71, 0x1C, 0x02, 0x6F, 0xCB, 0x71, 0x1C, 0x02, 0x9D, 0xFC, \r
-0x71, 0x1C, 0x02, 0x9E, 0x29, 0x71, 0x1C, 0x02, 0x9E, 0x87, 0x71, 0x1C, 0x02, 0x6E, 0x45, 0x71, \r
-0x1C, 0x02, 0x98, 0x97, 0x71, 0x1C, 0x02, 0x9E, 0x10, 0x71, 0x1C, 0x02, 0x6D, 0x70, 0x71, 0x1C, \r
-0x02, 0x9E, 0x95, 0x71, 0x1C, 0x02, 0x6F, 0x00, 0x71, 0x1C, 0x02, 0x92, 0xBB, 0x71, 0x1C, 0x02, \r
-0x9F, 0x80, 0x71, 0x1C, 0x02, 0x9D, 0x78, 0x71, 0x1C, 0x02, 0x9F, 0xB2, 0x90, 0x01, 0xC0, 0xE0, \r
-0x44, 0x01, 0xF0, 0x90, 0xA0, 0xFD, 0xE0, 0x90, 0x01, 0xC2, 0xF0, 0x22, 0x90, 0xA0, 0xFE, 0x02, \r
-0x45, 0xB5, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x04, 0xEF, 0xF0, 0x75, 0xF0, \r
-0x04, 0xD1, 0x3C, 0x54, 0x1F, 0xFB, 0x60, 0x12, 0x64, 0x02, 0x60, 0x0E, 0xEB, 0x64, 0x04, 0x60, \r
-0x09, 0xEB, 0x64, 0x09, 0x60, 0x04, 0xEB, 0xB4, 0x0C, 0x0A, 0x12, 0xAC, 0x0E, 0xF5, 0x83, 0x74, \r
-0x02, 0xF0, 0x80, 0x08, 0x12, 0xAC, 0x0E, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xE4, 0xF5, 0x6B, 0x90, \r
-0xA2, 0x04, 0xE0, 0xFD, 0xD1, 0x48, 0x25, 0x6B, 0xB1, 0x36, 0xE0, 0xFE, 0xEB, 0x75, 0xF0, 0x07, \r
-0xA4, 0x24, 0x56, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE5, 0x82, 0x25, 0x6B, 0xB1, 0x36, \r
-0xE4, 0x93, 0xFC, 0xEE, 0x5C, 0x90, 0xA2, 0x07, 0xF0, 0x75, 0xF0, 0x04, 0xED, 0x31, 0x19, 0x54, \r
-0x03, 0xFF, 0xBF, 0x02, 0x0B, 0xE5, 0x6B, 0x70, 0x07, 0x90, 0xA2, 0x07, 0xE0, 0x54, 0xF0, 0xF0, \r
-0x90, 0xA2, 0x07, 0xE0, 0xFF, 0xD1, 0x44, 0x25, 0x6B, 0xB1, 0x36, 0xEF, 0xF0, 0x05, 0x6B, 0xE5, \r
-0x6B, 0x64, 0x07, 0x70, 0xAA, 0x90, 0xA2, 0x04, 0xE0, 0x75, 0xF0, 0x04, 0x31, 0x19, 0xFF, 0xC4, \r
-0x54, 0x03, 0xFD, 0xE4, 0x90, 0xA2, 0x05, 0xF0, 0x75, 0x6C, 0x06, 0xE5, 0x6C, 0xB4, 0x06, 0x07, \r
-0xB1, 0x25, 0xE0, 0x54, 0x0F, 0x80, 0x07, 0xD1, 0x44, 0x25, 0x6C, 0xB1, 0x36, 0xE0, 0x90, 0xA2, \r
-0x06, 0xF0, 0x90, 0xA2, 0x06, 0xE0, 0x60, 0x33, 0x75, 0x6B, 0x07, 0x12, 0xAC, 0xF9, 0x80, 0x05, \r
-0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x12, 0xAC, 0xC5, 0x60, 0x16, 0x12, 0xAC, 0xBC, 0x90, \r
-0xA2, 0x05, 0xF0, 0xED, 0x60, 0x22, 0xE0, 0xD3, 0x94, 0x0B, 0x40, 0x1C, 0xE0, 0x24, 0x20, 0xF0, \r
-0x80, 0x16, 0x15, 0x6B, 0xE5, 0x6B, 0xC3, 0x94, 0x00, 0x50, 0xD0, 0xE5, 0x6C, 0x60, 0x09, 0x15, \r
-0x6C, 0xE5, 0x6C, 0xC3, 0x94, 0x00, 0x50, 0xA3, 0xE4, 0xFC, 0xF5, 0x6C, 0xE5, 0x6C, 0xB4, 0x06, \r
-0x07, 0xB1, 0x25, 0xE0, 0x54, 0x0F, 0x80, 0x07, 0xD1, 0x44, 0x25, 0x6C, 0xB1, 0x36, 0xE0, 0x90, \r
-0xA2, 0x06, 0xF0, 0x90, 0xA2, 0x06, 0xE0, 0x60, 0x2E, 0xE4, 0xF5, 0x6B, 0x12, 0xAC, 0xF9, 0x80, \r
-0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x12, 0xAC, 0xC5, 0x60, 0x13, 0x12, 0xAC, 0xBC, \r
-0xFC, 0xED, 0x60, 0x1B, 0xEC, 0xD3, 0x94, 0x0B, 0x40, 0x15, 0x74, 0x20, 0x2C, 0xFC, 0x80, 0x0F, \r
-0x05, 0x6B, 0xE5, 0x6B, 0xB4, 0x08, 0xD5, 0x05, 0x6C, 0xE5, 0x6C, 0x64, 0x07, 0x70, 0xAD, 0x90, \r
-0xA2, 0x05, 0xE0, 0xFF, 0x90, 0xA2, 0x04, 0xE0, 0xFE, 0x75, 0xF0, 0x04, 0xF1, 0xEF, 0xEF, 0xF0, \r
-0x75, 0xF0, 0x04, 0xEE, 0xD1, 0xF1, 0xEC, 0xF0, 0x75, 0xF0, 0x10, 0xEE, 0x12, 0x7B, 0x91, 0xE0, \r
-0xFE, 0x54, 0x7F, 0xF5, 0x6D, 0xEE, 0x54, 0x80, 0xFE, 0xE5, 0x6D, 0xD3, 0x9F, 0x40, 0x09, 0x90, \r
-0xA2, 0x05, 0xE0, 0x4E, 0xF5, 0x6D, 0x80, 0x0C, 0xE5, 0x6D, 0xC3, 0x9C, 0x50, 0x06, 0xAF, 0x06, \r
-0xEC, 0x4F, 0xF5, 0x6D, 0x90, 0xA2, 0x04, 0xE0, 0xFF, 0x24, 0x91, 0x12, 0xAB, 0x85, 0xE5, 0x6D, \r
-0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x31, 0x19, 0x12, 0x7B, 0xA3, 0x90, 0xA2, 0x04, 0xE0, 0xFF, 0xE4, \r
-0xFB, 0xAD, 0x6D, 0x12, 0x77, 0x89, 0x90, 0xA2, 0x04, 0xE0, 0xFF, 0x75, 0xF0, 0x10, 0x12, 0x79, \r
-0x4E, 0xE4, 0xF0, 0x90, 0xA2, 0x05, 0xE0, 0xFE, 0xC3, 0x94, 0x0C, 0x40, 0x08, 0x12, 0xA5, 0xA8, \r
-0x74, 0x02, 0xF0, 0x80, 0x1B, 0xEE, 0xC3, 0x94, 0x04, 0x90, 0xA2, 0x04, 0xE0, 0x40, 0x0A, 0x24, \r
-0x91, 0x12, 0xA5, 0xAB, 0x74, 0x01, 0xF0, 0x80, 0x07, 0x24, 0x91, 0x12, 0xA5, 0xAB, 0xE4, 0xF0, \r
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xFF, 0x90, 0xA2, 0x04, 0xE0, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x00, \r
-0x12, 0x45, 0xA9, 0xE5, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE4, 0xFF, \r
-0xE4, 0xFE, 0x74, 0x91, 0x2F, 0xD1, 0x59, 0xE0, 0x54, 0xFE, 0xF0, 0x75, 0xF0, 0x10, 0xEF, 0x90, \r
-0x81, 0x00, 0xBE, 0x03, 0x0D, 0x12, 0x45, 0xA9, 0xE5, 0x82, 0x2E, 0xB1, 0x36, 0x74, 0x80, 0xF0, \r
-0x80, 0x0A, 0x12, 0x45, 0xA9, 0xE5, 0x82, 0x2E, 0xB1, 0x36, 0xE4, 0xF0, 0x75, 0xF0, 0x08, 0xEF, \r
-0xD1, 0x4B, 0x2E, 0xB1, 0x36, 0xE4, 0xF0, 0x0E, 0xBE, 0x10, 0xC7, 0x0F, 0xBF, 0x80, 0xC1, 0xE4, \r
-0x90, 0xAD, 0xE2, 0xF0, 0xFF, 0xE4, 0xFE, 0x75, 0xF0, 0x0A, 0xEF, 0x12, 0x7A, 0x8A, 0x75, 0xF0, \r
-0x02, 0xEE, 0x12, 0x45, 0xA9, 0xE4, 0xF0, 0xA3, 0xF0, 0x0E, 0xBE, 0x05, 0xEA, 0x74, 0x91, 0x2F, \r
-0x12, 0xAB, 0x85, 0x74, 0x13, 0xF0, 0x74, 0x11, 0x2F, 0x12, 0xAB, 0x65, 0xE4, 0xF0, 0x74, 0x01, \r
-0x2F, 0x12, 0x76, 0x14, 0x74, 0xC0, 0xF0, 0x74, 0x11, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x9E, 0xF5, \r
-0x83, 0xE4, 0x12, 0x7A, 0xC0, 0x12, 0xAB, 0xAA, 0xF1, 0xEA, 0x74, 0x13, 0xD1, 0xEC, 0xE4, 0xF0, \r
-0x75, 0xF0, 0x04, 0xEF, 0xD1, 0x3C, 0x54, 0xE0, 0x44, 0x09, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x31, \r
-0x19, 0x54, 0xF3, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x31, 0x19, 0x54, 0xFC, 0xF0, 0x75, 0xF0, 0x04, \r
-0xEF, 0xD1, 0x3C, 0x44, 0x20, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x31, 0x19, 0x54, 0xCF, 0xF0, 0x75, \r
-0xF0, 0x04, 0xEF, 0x31, 0x19, 0x44, 0x40, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x31, 0x19, 0x54, 0x7F, \r
-0xD1, 0xEC, 0xE0, 0xFE, 0x75, 0xF0, 0x10, 0xEF, 0x12, 0x7B, 0x91, 0xEE, 0xF0, 0x74, 0x91, 0x2F, \r
-0xD1, 0x59, 0xE4, 0xF0, 0x0F, 0xEF, 0x64, 0x80, 0x60, 0x02, 0xA1, 0x85, 0x74, 0x11, 0x2F, 0x12, \r
-0x98, 0x8F, 0x74, 0xFF, 0xF0, 0x22, 0xFF, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, 0x13, 0x12, \r
-0x45, 0xA9, 0xE0, 0x22, 0x90, 0xA2, 0x04, 0xE0, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x00, 0x12, 0x45, \r
-0xA9, 0xE5, 0x82, 0x22, 0xF0, 0x74, 0x91, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, \r
-0x22, 0x12, 0x6F, 0x66, 0x12, 0x06, 0x89, 0xF5, 0x51, 0x24, 0x91, 0xD1, 0x59, 0xE0, 0x54, 0x9C, \r
-0xD1, 0x54, 0xC0, 0x83, 0xC0, 0x82, 0xF1, 0x01, 0x54, 0x01, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, \r
-0x83, 0xD1, 0x54, 0xC0, 0x83, 0xC0, 0x82, 0xF1, 0x01, 0x54, 0x02, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, \r
-0xD0, 0x83, 0xD1, 0x54, 0xC0, 0x83, 0xC0, 0x82, 0xF1, 0x01, 0x54, 0x40, 0xFE, 0xEF, 0x4E, 0xD0, \r
-0x82, 0xD0, 0x83, 0xD1, 0x54, 0xC0, 0x83, 0xC0, 0x82, 0xF1, 0x01, 0x54, 0x20, 0xFE, 0xEF, 0x4E, \r
-0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x51, 0xC3, 0x94, 0x80, 0x50, 0x08, 0xD1, 0xDE, 0xFF, 0x12, \r
-0x76, 0x38, 0xEF, 0xF0, 0xD1, 0x55, 0xE0, 0x30, 0xE5, 0x11, 0x31, 0x14, 0x13, 0x13, 0x54, 0x03, \r
-0xFB, 0x12, 0x76, 0x38, 0xE0, 0xFD, 0xAF, 0x51, 0x12, 0xA5, 0xB3, 0x22, 0x4F, 0xF0, 0x90, 0x00, \r
-0x02, 0x02, 0x06, 0xA2, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x22, 0xF0, 0x75, 0xF0, 0x04, \r
-0xEF, 0x90, 0x96, 0x12, 0x02, 0x45, 0xA9, 0x12, 0x45, 0xA9, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x01, \r
-0xE6, 0xE0, 0xFF, 0x90, 0xA1, 0x01, 0x12, 0x45, 0xB5, 0x90, 0x00, 0x03, 0x02, 0x06, 0xA2, 0x12, \r
-0x7F, 0xC2, 0x12, 0x06, 0x89, 0xC4, 0x54, 0x0F, 0xFF, 0xBF, 0x0F, 0x18, 0x90, 0xA0, 0xC1, 0xE0, \r
-0x54, 0xFE, 0xF0, 0x12, 0x88, 0xA9, 0xF1, 0xE3, 0x12, 0x06, 0x89, 0x54, 0x0F, 0xFF, 0x12, 0x4B, \r
-0xE0, 0x02, 0xA7, 0x11, 0xF1, 0xE3, 0x12, 0x6A, 0x87, 0xFF, 0x12, 0x06, 0x89, 0xFE, 0x54, 0x0F, \r
-0x12, 0xAB, 0xD9, 0xEF, 0xD1, 0xDD, 0x54, 0x03, 0xFF, 0x75, 0xF0, 0x0E, 0xED, 0x12, 0x4F, 0xB7, \r
-0x54, 0xFC, 0xD1, 0xDC, 0x54, 0x1C, 0xFF, 0xEE, 0x54, 0x0F, 0xFE, 0x75, 0xF0, 0x0E, 0x12, 0x4F, \r
-0xB7, 0x54, 0xE3, 0xD1, 0xDC, 0x54, 0xE0, 0xFF, 0x75, 0xF0, 0x0E, 0xEE, 0x12, 0x4F, 0xB7, 0x54, \r
-0x1F, 0x4F, 0x12, 0x6D, 0x27, 0x12, 0xAC, 0xE9, 0xE4, 0xFB, 0x12, 0xA7, 0x9B, 0xF1, 0xE3, 0x12, \r
-0x6A, 0x7A, 0x12, 0xAC, 0xE9, 0x7B, 0x01, 0x12, 0xA7, 0x9B, 0xF1, 0xE3, 0xF1, 0x09, 0x12, 0x9D, \r
-0x71, 0x12, 0x06, 0x89, 0xFE, 0x54, 0x0F, 0xFD, 0x75, 0xF0, 0x0E, 0x90, 0xA0, 0xCD, 0x12, 0x45, \r
-0xA9, 0xEF, 0xF0, 0xF1, 0x09, 0xC4, 0x13, 0x54, 0x07, 0xFF, 0x75, 0xF0, 0x0E, 0xED, 0x90, 0xA0, \r
-0xCE, 0x12, 0x45, 0xA9, 0xEF, 0xF0, 0xEE, 0xC4, 0x54, 0x0F, 0xFF, 0x14, 0x6D, 0x70, 0x23, 0x90, \r
-0xA0, 0xC2, 0xEF, 0xF0, 0x12, 0x6A, 0x80, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0xA0, 0xC1, \r
-0xE0, 0x54, 0x0F, 0x4F, 0xF0, 0x54, 0xF1, 0xF0, 0x44, 0x01, 0xF0, 0x7D, 0x20, 0xE4, 0xFF, 0x12, \r
-0x88, 0xD0, 0x22, 0xAB, 0x51, 0xAA, 0x52, 0xA9, 0x53, 0x22, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, \r
-0x96, 0x11, 0x02, 0x45, 0xA9, 0x7F, 0xF4, 0x12, 0x47, 0xAF, 0xEF, 0x20, 0xE5, 0x0E, 0x7F, 0xF4, \r
-0x12, 0x47, 0xAF, 0xEF, 0x7F, 0x01, 0x20, 0xE4, 0x05, 0x7F, 0x02, 0x22, 0x7F, 0x03, 0x22, 0x12, \r
-0x57, 0xF5, 0x90, 0x9E, 0x97, 0xEF, 0xF0, 0x11, 0x4E, 0x90, 0x01, 0x64, 0x74, 0x01, 0xF0, 0x90, \r
-0x04, 0x23, 0xE0, 0x44, 0x80, 0xF0, 0x7F, 0x17, 0x12, 0x47, 0xAF, 0xEF, 0x54, 0xFC, 0x44, 0x04, \r
-0xFD, 0x7F, 0x17, 0x12, 0x46, 0xA0, 0x12, 0xAC, 0xA1, 0x44, 0x40, 0xFD, 0x7F, 0x16, 0x12, 0x46, \r
-0xA0, 0x7F, 0x38, 0x12, 0xAD, 0x39, 0x7F, 0x38, 0x12, 0x46, 0xA0, 0x02, 0x37, 0x99, 0x11, 0x7E, \r
-0x11, 0xAC, 0x12, 0xA1, 0x9C, 0x12, 0xA1, 0xBB, 0xE4, 0xF5, 0x0D, 0xF5, 0x0E, 0xF5, 0x0F, 0x75, \r
-0x10, 0x80, 0xAD, 0x0D, 0x7F, 0x50, 0x12, 0x46, 0xA0, 0xAD, 0x0E, 0x7F, 0x51, 0x12, 0x46, 0xA0, \r
-0xAD, 0x0F, 0x7F, 0x52, 0x12, 0x46, 0xA0, 0xAD, 0x10, 0x7F, 0x53, 0x02, 0x46, 0xA0, 0x90, 0x01, \r
-0x30, 0xE4, 0x11, 0xA4, 0x90, 0x01, 0x38, 0x11, 0xA4, 0xFD, 0x7F, 0x50, 0x12, 0x46, 0xA0, 0xE4, \r
-0xFD, 0x7F, 0x51, 0x12, 0x46, 0xA0, 0xE4, 0xFD, 0x7F, 0x52, 0x12, 0x46, 0xA0, 0xE4, 0xFD, 0x7F, \r
-0x53, 0x02, 0x46, 0xA0, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x01, 0x34, 0x74, \r
-0xFF, 0x11, 0xA4, 0x90, 0x01, 0x3C, 0x11, 0xA4, 0xFD, 0x7F, 0x54, 0x12, 0x46, 0xA0, 0x7D, 0xFF, \r
-0x7F, 0x55, 0x12, 0x46, 0xA0, 0x7D, 0xFF, 0x7F, 0x56, 0x12, 0x46, 0xA0, 0x7D, 0xFF, 0x7F, 0x57, \r
-0x02, 0x46, 0xA0, 0xEF, 0x64, 0x01, 0x70, 0x20, 0x91, 0xA7, 0x90, 0x01, 0x38, 0xE4, 0x11, 0xA4, \r
-0x90, 0x01, 0x30, 0x11, 0xA4, 0x90, 0x01, 0x30, 0x74, 0x10, 0xF0, 0x90, 0x01, 0x39, 0x74, 0x01, \r
-0xF0, 0x90, 0x00, 0x53, 0x74, 0x80, 0xF0, 0x22, 0x12, 0x97, 0xAD, 0x90, 0xA0, 0x5C, 0xE0, 0x90, \r
-0x01, 0x31, 0xF0, 0x90, 0xA0, 0x5D, 0xE0, 0x90, 0x01, 0x32, 0xF0, 0x90, 0xA0, 0x5E, 0xE0, 0x90, \r
-0x01, 0x33, 0xF0, 0x90, 0xA0, 0x57, 0xE0, 0x90, 0x01, 0x38, 0xF0, 0x90, 0xA0, 0x5A, 0xE0, 0x90, \r
-0x01, 0x3B, 0x91, 0xC6, 0x7F, 0x01, 0x51, 0x85, 0x7E, 0x00, 0x7F, 0xA8, 0x7D, 0x00, 0x7B, 0x01, \r
-0x7A, 0x9F, 0x79, 0xA3, 0x12, 0x08, 0xAA, 0x12, 0xAB, 0xE3, 0x12, 0x08, 0xAA, 0x90, 0x9F, 0xA6, \r
-0x74, 0x02, 0xF0, 0x90, 0x9F, 0xAD, 0x14, 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0x90, 0x9F, \r
-0xB3, 0xE4, 0xF0, 0xA3, 0x74, 0x02, 0x12, 0xAB, 0xBA, 0xE4, 0xFD, 0xFF, 0x51, 0x1E, 0x7D, 0x0C, \r
-0x7F, 0x02, 0x51, 0x1E, 0x51, 0x1A, 0x90, 0x9E, 0x97, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x9F, 0xB2, \r
-0x74, 0xDD, 0xF0, 0x80, 0x12, 0x90, 0x9E, 0x97, 0xE0, 0x90, 0x9F, 0xB2, 0xB4, 0x03, 0x05, 0x74, \r
-0xD4, 0xF0, 0x80, 0x03, 0x74, 0x40, 0xF0, 0x7F, 0x79, 0x12, 0x47, 0xAF, 0xEF, 0x54, 0x03, 0xFF, \r
-0xBF, 0x02, 0x0F, 0x7F, 0x28, 0x12, 0x47, 0xAF, 0xEF, 0x30, 0xE2, 0x06, 0x90, 0x9F, 0xDD, 0x74, \r
-0x02, 0xF0, 0x12, 0x9C, 0xF1, 0x74, 0x05, 0x12, 0xAB, 0xBA, 0x90, 0xA0, 0x56, 0xE0, 0x54, 0xFE, \r
-0xF0, 0x90, 0x01, 0x38, 0xE0, 0x90, 0xA0, 0x57, 0xF0, 0x90, 0x01, 0x39, 0xE0, 0x90, 0xA0, 0x58, \r
-0xF0, 0x90, 0x01, 0x3A, 0xE0, 0x90, 0xA0, 0x59, 0xF0, 0x90, 0x01, 0x3B, 0xE0, 0x90, 0xA0, 0x5A, \r
-0xF0, 0x90, 0x01, 0x30, 0xE0, 0x90, 0xA0, 0x5B, 0xF0, 0x90, 0x01, 0x31, 0xE0, 0x90, 0xA0, 0x5C, \r
-0xF0, 0x90, 0x01, 0x32, 0xE0, 0x90, 0xA0, 0x5D, 0xF0, 0x90, 0x01, 0x33, 0xE0, 0x90, 0xA0, 0x5E, \r
-0xF0, 0x7F, 0x01, 0x12, 0x8F, 0x8A, 0x7E, 0x00, 0x7F, 0x02, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA0, \r
-0x79, 0x4F, 0x12, 0x08, 0xAA, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0x12, 0xAC, 0xAA, 0x91, 0x93, \r
-0xE4, 0x90, 0xA0, 0x51, 0xF0, 0x22, 0xE0, 0x54, 0x7F, 0xF0, 0x7D, 0x0C, 0x7F, 0x01, 0xD3, 0x10, \r
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x38, 0xEF, 0xF0, 0x14, 0x60, 0x15, 0x14, 0x60, 0x19, \r
-0x24, 0x02, 0x70, 0x1A, 0xED, 0x54, 0x01, 0xFF, 0x90, 0x9F, 0xA3, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, \r
-0x80, 0x0C, 0x90, 0x9F, 0xAA, 0xED, 0xF0, 0x80, 0x05, 0x90, 0x9F, 0xA9, 0xED, 0xF0, 0x12, 0x7E, \r
-0xE8, 0x30, 0xE4, 0x2C, 0x90, 0xA2, 0x38, 0xE0, 0x14, 0x60, 0x07, 0x14, 0x60, 0x18, 0x24, 0x02, \r
-0x70, 0x1E, 0x90, 0x9F, 0xA3, 0xE0, 0x12, 0xAC, 0xB3, 0xFF, 0x90, 0x9F, 0xAA, 0xE0, 0x54, 0x7F, \r
-0x4F, 0xFD, 0x7F, 0x88, 0x80, 0x07, 0x90, 0x9F, 0xA9, 0xE0, 0xFD, 0x7F, 0x89, 0x12, 0x46, 0xA0, \r
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA2, 0x39, 0xEF, 0xF0, 0x12, 0x64, 0xAA, 0x90, 0xA2, 0x39, \r
-0xE0, 0x60, 0x02, 0x91, 0x93, 0x7D, 0x04, 0xD1, 0xE8, 0x74, 0x04, 0xF0, 0x22, 0x7D, 0x01, 0x7F, \r
-0x04, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x3A, 0xED, 0xF0, 0x90, 0x9F, 0xA3, \r
-0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x02, 0x61, 0xE3, 0xEE, 0x12, 0x56, 0xE5, \r
-0x30, 0xE0, 0x02, 0x61, 0xE3, 0x90, 0x9F, 0xAA, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0x61, 0xE3, 0xEF, \r
-0x70, 0x02, 0x61, 0x5D, 0x24, 0xFE, 0x70, 0x02, 0x61, 0x96, 0x24, 0xFE, 0x60, 0x47, 0x24, 0xFC, \r
-0x70, 0x02, 0x61, 0xD1, 0x24, 0xFC, 0x60, 0x02, 0x61, 0xE3, 0xEE, 0xB4, 0x0E, 0x02, 0x91, 0x19, \r
-0x90, 0x9F, 0xAA, 0xE0, 0x70, 0x04, 0x7F, 0x01, 0x51, 0x85, 0x90, 0x9F, 0xAA, 0xE0, 0xB4, 0x06, \r
-0x02, 0x91, 0x3E, 0x90, 0x9F, 0xAA, 0xE0, 0xB4, 0x04, 0x0D, 0x90, 0xA2, 0x3A, 0xE0, 0xFF, 0x60, \r
-0x04, 0xD1, 0xFD, 0x80, 0x02, 0xF1, 0x92, 0x90, 0x9F, 0xAA, 0xE0, 0x64, 0x08, 0x60, 0x02, 0x61, \r
-0xE3, 0x91, 0x99, 0x61, 0xE3, 0x90, 0x9F, 0xAA, 0xE0, 0x70, 0x04, 0x7F, 0x01, 0x51, 0x85, 0x90, \r
-0x9F, 0xAA, 0xE0, 0xB4, 0x06, 0x02, 0x91, 0x3E, 0x90, 0x9F, 0xAA, 0xE0, 0xB4, 0x0E, 0x07, 0x71, \r
-0xE8, 0xBF, 0x01, 0x02, 0x91, 0x19, 0x90, 0x9F, 0xAA, 0xE0, 0x64, 0x0C, 0x60, 0x02, 0x61, 0xE3, \r
-0x71, 0xE8, 0xEF, 0x64, 0x01, 0x60, 0x02, 0x61, 0xE3, 0x91, 0x64, 0x61, 0xE3, 0x90, 0x9F, 0xAA, \r
-0xE0, 0xB4, 0x0E, 0x07, 0x71, 0xE8, 0xBF, 0x01, 0x02, 0x91, 0x19, 0x90, 0x9F, 0xAA, 0xE0, 0xB4, \r
-0x06, 0x02, 0x91, 0x3E, 0x90, 0x9F, 0xAA, 0xE0, 0xB4, 0x0C, 0x07, 0x71, 0xE8, 0xBF, 0x01, 0x02, \r
-0x91, 0x64, 0x90, 0x9F, 0xAA, 0xE0, 0x64, 0x04, 0x70, 0x59, 0x12, 0xA3, 0x9E, 0xEF, 0x64, 0x01, \r
-0x70, 0x51, 0x91, 0xA7, 0x80, 0x4D, 0x90, 0x9F, 0xAA, 0xE0, 0xB4, 0x0E, 0x07, 0x71, 0xE8, 0xBF, \r
-0x01, 0x02, 0x91, 0x19, 0x90, 0x9F, 0xAA, 0xE0, 0xB4, 0x06, 0x02, 0x91, 0x3E, 0x90, 0x9F, 0xAA, \r
-0xE0, 0xB4, 0x0C, 0x07, 0x71, 0xE8, 0xBF, 0x01, 0x02, 0x91, 0x64, 0x90, 0x9F, 0xAA, 0xE0, 0x70, \r
-0x04, 0x7F, 0x01, 0x51, 0x85, 0x90, 0x9F, 0xAA, 0xE0, 0xB4, 0x04, 0x17, 0x12, 0xA9, 0xA2, 0x80, \r
-0x12, 0x90, 0x9F, 0xAA, 0xE0, 0xB4, 0x0C, 0x0B, 0x90, 0x9F, 0xA4, 0x12, 0x8D, 0x05, 0x30, 0xE0, \r
-0x02, 0xD1, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA0, 0x5F, 0xE0, 0x30, 0xE0, 0x0D, 0x90, \r
-0xA0, 0x65, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x80, 0x1A, 0x12, 0xA3, 0x35, 0xBF, \r
-0x01, 0x14, 0x12, 0xA9, 0x1F, 0x54, 0x1F, 0x20, 0xE0, 0x0C, 0x90, 0x9F, 0xA9, 0xE0, 0xD3, 0x94, \r
-0x04, 0x50, 0x03, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x9F, 0xA4, 0xE0, 0xC3, 0x13, 0x20, \r
-0xE0, 0x04, 0x51, 0x1A, 0x80, 0x12, 0x12, 0xAA, 0xA5, 0xD1, 0xD4, 0x90, 0x05, 0x27, 0xE0, 0x44, \r
-0x80, 0xF0, 0x90, 0x9F, 0xA2, 0x74, 0x04, 0xF0, 0xE4, 0xFD, 0xFF, 0x02, 0x49, 0x22, 0x90, 0x9F, \r
-0xA4, 0xE0, 0x90, 0x06, 0x04, 0x20, 0xE0, 0x07, 0xE0, 0x44, 0x40, 0xD1, 0xD4, 0x80, 0x0F, 0x51, \r
-0x16, 0x90, 0x05, 0x27, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x9F, 0xA2, 0x74, 0x0C, 0xF0, 0xE4, 0xFD, \r
-0xFF, 0x02, 0x49, 0x22, 0xF1, 0x8C, 0x64, 0x01, 0x70, 0x22, 0x90, 0x9F, 0xA4, 0xE0, 0x54, 0xFD, \r
-0xF0, 0x7D, 0x2C, 0x7F, 0x6F, 0x12, 0x49, 0x22, 0x12, 0x4C, 0x80, 0xBF, 0x01, 0x0E, 0x90, 0x9F, \r
-0xA3, 0xE0, 0x44, 0x80, 0xF0, 0x7D, 0x0E, 0xD1, 0xE8, 0x74, 0x0E, 0xF0, 0x22, 0xE4, 0xFD, 0x7F, \r
-0x0C, 0x51, 0xA1, 0xE4, 0xFD, 0xFF, 0x02, 0x49, 0x22, 0x12, 0x64, 0xAA, 0x91, 0x93, 0x51, 0x1A, \r
-0x90, 0x9F, 0xA2, 0x74, 0x0C, 0xF0, 0x22, 0x7D, 0x2D, 0x12, 0x4C, 0x1E, 0x90, 0x01, 0x37, 0x74, \r
-0x02, 0xF0, 0xFD, 0x7F, 0x03, 0x91, 0xD1, 0x12, 0x63, 0x05, 0xE4, 0xFD, 0x7F, 0x01, 0x51, 0x1E, \r
-0xE4, 0x90, 0x9F, 0xA2, 0xF0, 0x22, 0xF0, 0x7D, 0x01, 0x7F, 0x02, 0x91, 0xD1, 0x7D, 0x02, 0x7F, \r
-0x02, 0x74, 0x15, 0x2F, 0xF8, 0xE6, 0x4D, 0xFE, 0xF6, 0x74, 0x30, 0x02, 0x88, 0xB6, 0xD3, 0x10, \r
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7F, 0xC2, 0x90, 0x05, 0x27, 0xE0, 0xF5, 0x54, 0x12, 0x8F, \r
-0xC9, 0x90, 0x9F, 0x9E, 0x12, 0x6F, 0x44, 0xFF, 0xF0, 0x12, 0x06, 0x89, 0x12, 0x6D, 0x2E, 0xFF, \r
-0x90, 0x9F, 0x9E, 0x12, 0x6F, 0x7C, 0x12, 0x6F, 0xB4, 0x12, 0x6F, 0x8D, 0x90, 0x9F, 0x9E, 0x12, \r
-0x9F, 0x77, 0x12, 0x6F, 0xB4, 0xFE, 0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0x4D, 0x90, 0x9F, 0x9E, \r
-0xF0, 0xEE, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0xA1, 0xB3, 0xE0, 0x30, 0xE0, 0x74, 0x12, 0x88, 0xCC, \r
-0x75, 0x54, 0x21, 0x12, 0xAC, 0xD7, 0x30, 0xE0, 0x04, 0xD1, 0x60, 0x80, 0x0C, 0xE4, 0x90, 0x9F, \r
-0x9F, 0xF0, 0xA3, 0xF0, 0x7D, 0x40, 0xFF, 0xF1, 0xAB, 0x90, 0x9F, 0x9E, 0xE0, 0xD1, 0xCD, 0x30, \r
-0xE0, 0x03, 0x43, 0x54, 0x12, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x43, 0x54, 0x14, 0x90, \r
-0x9F, 0x9E, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x03, 0x43, 0x54, 0x80, 0x90, 0x9F, 0x9E, \r
-0x12, 0x4F, 0xD3, 0x20, 0xE0, 0x03, 0x43, 0x54, 0x40, 0xD1, 0x59, 0x90, 0x9F, 0xA1, 0xE0, 0x70, \r
-0x05, 0x7F, 0x01, 0x12, 0x84, 0x59, 0x12, 0x6F, 0xA1, 0x30, 0xE0, 0x04, 0x7F, 0x04, 0x80, 0x0C, \r
-0x12, 0x82, 0xF0, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0x84, 0x59, 0xC1, \r
-0x22, 0xD1, 0x56, 0x90, 0x9F, 0xA1, 0xE0, 0x64, 0x04, 0x60, 0x02, 0xC1, 0x51, 0xFF, 0x12, 0x84, \r
-0x59, 0xC1, 0x51, 0x90, 0x9F, 0x9E, 0xE0, 0x30, 0xE0, 0x70, 0x12, 0x88, 0xCC, 0x43, 0x54, 0x31, \r
-0x12, 0xAC, 0xD7, 0x30, 0xE0, 0x04, 0xD1, 0x60, 0x80, 0x06, 0x7D, 0x40, 0xE4, 0xFF, 0xF1, 0xAB, \r
-0x90, 0x9F, 0x9E, 0xE0, 0xD1, 0xCD, 0x30, 0xE0, 0x03, 0x43, 0x54, 0x02, 0xEF, 0xC4, 0x54, 0x0F, \r
-0x30, 0xE0, 0x03, 0x43, 0x54, 0x04, 0xD1, 0x59, 0x12, 0x6F, 0xA1, 0x30, 0xE0, 0x0B, 0x12, 0xA2, \r
-0xFD, 0x60, 0x2F, 0xE4, 0xFD, 0x7F, 0x02, 0x80, 0x1D, 0xF1, 0xD6, 0x90, 0x9F, 0xA2, 0xE0, 0xB4, \r
-0x02, 0x18, 0xD1, 0xDB, 0x12, 0x82, 0xF0, 0xBF, 0x01, 0x09, 0x90, 0x9F, 0xA9, 0xE0, 0xFF, 0x7D, \r
-0x01, 0x80, 0x03, 0xE4, 0xFD, 0xFF, 0x51, 0xA1, 0x80, 0x08, 0x90, 0x9F, 0xAA, 0xE0, 0x90, 0x9F, \r
-0xA2, 0xF0, 0x90, 0x05, 0x40, 0x74, 0x22, 0xF0, 0x80, 0x27, 0xD1, 0x56, 0x90, 0x9F, 0xA2, 0xE0, \r
-0xB4, 0x02, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x0B, 0x90, 0x9F, 0xA2, 0xE0, 0xB4, 0x08, 0x06, \r
-0x7D, 0x01, 0x7F, 0x0C, 0x51, 0xA1, 0x12, 0xA3, 0x4E, 0x90, 0x9F, 0xA9, 0xF1, 0xEE, 0x12, 0xA8, \r
-0x8C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x54, 0x01, 0x90, 0x05, 0x27, 0xE5, 0x54, 0xF0, 0x22, \r
-0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x91, 0xD1, 0x43, 0x54, 0x08, 0x22, 0x90, \r
-0xA0, 0x5F, 0xE0, 0x20, 0xE0, 0x1D, 0x90, 0x9F, 0xA7, 0xE0, 0x64, 0x01, 0x70, 0x15, 0x12, 0x84, \r
-0x33, 0x12, 0x69, 0x3A, 0x60, 0x05, 0x91, 0x8D, 0x02, 0xA8, 0xE1, 0x90, 0x9F, 0xAA, 0xE0, 0x70, \r
-0x02, 0x51, 0x9D, 0x22, 0x90, 0x01, 0x36, 0x74, 0x78, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x78, \r
-0xFF, 0x91, 0xD1, 0x7D, 0x02, 0x7F, 0x03, 0x91, 0xD1, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0x12, \r
-0xAC, 0x3E, 0xE4, 0xFF, 0xF1, 0x2F, 0xBF, 0x01, 0x10, 0x12, 0x8C, 0xF1, 0x90, 0x9F, 0xAA, 0xE0, \r
-0x20, 0xE2, 0x09, 0x7D, 0x01, 0x7F, 0x04, 0x41, 0xA1, 0x12, 0xAB, 0xFA, 0x22, 0xFF, 0x13, 0x13, \r
-0x13, 0x54, 0x1F, 0x22, 0xF0, 0x7D, 0x04, 0x7F, 0x01, 0x41, 0x1E, 0x91, 0x93, 0xD1, 0xD5, 0xF1, \r
-0xD6, 0x90, 0x9F, 0xA2, 0x74, 0x04, 0xF0, 0x22, 0x7F, 0x01, 0x51, 0x1E, 0x90, 0x9F, 0xA2, 0x22, \r
-0x7D, 0x2F, 0x12, 0x63, 0x00, 0x7D, 0x08, 0xD1, 0xE8, 0x74, 0x08, 0xF0, 0x22, 0xEF, 0x60, 0x2E, \r
-0xF1, 0x8C, 0x64, 0x01, 0x70, 0x28, 0x90, 0x9F, 0xA4, 0xE0, 0x54, 0xFE, 0xF0, 0x7D, 0x2B, 0x7F, \r
-0x0F, 0x12, 0x49, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xF1, 0xE5, 0xBF, 0x01, 0x0E, \r
-0x90, 0x9F, 0xA3, 0xE0, 0x44, 0x40, 0xF0, 0x7D, 0x06, 0xD1, 0xE8, 0x74, 0x06, 0xF0, 0x22, 0x12, \r
-0x86, 0xD3, 0xFE, 0xEF, 0x54, 0x07, 0xFF, 0x12, 0x62, 0x14, 0xE0, 0xFD, 0x7C, 0x00, 0x12, 0x7C, \r
-0xC7, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5C, 0xFE, 0xEF, \r
-0x5D, 0x4E, 0x7F, 0x00, 0x60, 0x02, 0x7F, 0x01, 0x22, 0xEF, 0x70, 0x2E, 0x7D, 0x78, 0x7F, 0x02, \r
-0xF1, 0xAB, 0x7D, 0x02, 0x7F, 0x03, 0xF1, 0xAB, 0x7D, 0xC8, 0x7F, 0x02, 0x12, 0x88, 0xAD, 0x12, \r
-0x82, 0xC4, 0xF1, 0x8C, 0x70, 0x05, 0x12, 0xAB, 0x6D, 0x80, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0x51, \r
-0xA1, 0x90, 0x9F, 0xA3, 0xE0, 0x54, 0xF7, 0x02, 0xAC, 0xAA, 0xC1, 0x94, 0xE4, 0xFF, 0xF1, 0x2F, \r
-0xEF, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x91, 0x93, 0x7D, 0x0C, 0x7F, 0x01, 0x41, \r
-0x1E, 0x7D, 0x02, 0x7F, 0x02, 0xF1, 0xAB, 0x7D, 0x01, 0x7F, 0x02, 0x74, 0x15, 0x12, 0xAD, 0x31, \r
-0xFE, 0xF6, 0x74, 0x30, 0x02, 0x88, 0xB6, 0x12, 0xA8, 0xE1, 0x90, 0x9F, 0xAA, 0xE0, 0x64, 0x0C, \r
-0x60, 0x04, 0x91, 0x8D, 0xF1, 0xE5, 0x22, 0x91, 0x93, 0x90, 0x9F, 0xA1, 0x74, 0x01, 0xF0, 0x22, \r
-0x91, 0x93, 0xF1, 0xD6, 0x80, 0xF3, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x22, 0x12, 0x64, \r
-0xAA, 0x91, 0x93, 0x80, 0xE4, 0x7D, 0x08, 0xE4, 0xFF, 0x02, 0x4C, 0x8B, 0x80, 0xDB, 0xE0, 0xFF, \r
-0x7D, 0x01, 0x41, 0xA1, 0x75, 0xE8, 0x07, 0x75, 0xA8, 0x85, 0x22, 0x7F, 0x81, 0x12, 0x47, 0xAF, \r
-0xEF, 0x54, 0xFE, 0xFD, 0x7F, 0x81, 0x12, 0x46, 0xA0, 0x7F, 0x80, 0x12, 0x47, 0xF7, 0xFD, 0x7F, \r
-0x80, 0x12, 0x46, 0xA0, 0x12, 0xA1, 0xE0, 0x12, 0x3E, 0x11, 0x51, 0x7C, 0x12, 0xA2, 0x21, 0x7F, \r
-0x01, 0x12, 0x43, 0xA5, 0x90, 0xA0, 0xC0, 0x74, 0x02, 0xF0, 0xFF, 0x12, 0x43, 0xA5, 0x90, 0xA0, \r
-0xC0, 0xE0, 0x04, 0xF0, 0x12, 0x58, 0x0F, 0x11, 0x93, 0x7F, 0x80, 0x12, 0xAD, 0x39, 0x7F, 0x80, \r
-0x12, 0x46, 0xA0, 0x75, 0x28, 0xFF, 0x12, 0x5F, 0xF4, 0x12, 0x96, 0x89, 0x7B, 0x01, 0x7A, 0xA0, \r
-0x79, 0xF0, 0x51, 0xBC, 0xEF, 0x64, 0x01, 0x70, 0x22, 0x90, 0xA0, 0xF0, 0xE0, 0x54, 0x07, 0xF0, \r
-0xE0, 0xFF, 0x64, 0x07, 0x60, 0x04, 0xEF, 0xB4, 0x04, 0x11, 0x12, 0xA1, 0x91, 0xBF, 0x01, 0x0B, \r
-0x12, 0xAC, 0xA1, 0x44, 0x60, 0xFD, 0x7F, 0x16, 0x12, 0x46, 0xA0, 0x7F, 0x81, 0x12, 0x47, 0xAF, \r
-0xEF, 0x44, 0x04, 0xFD, 0x7F, 0x81, 0x12, 0x46, 0xA0, 0x12, 0xA2, 0x2B, 0x51, 0x9A, 0xE4, 0xFF, \r
-0x02, 0x44, 0x2E, 0x31, 0xD0, 0x12, 0xA0, 0x19, 0x12, 0x55, 0x3E, 0x12, 0xA8, 0x8C, 0x12, 0x59, \r
-0x28, 0x51, 0x76, 0x12, 0xA7, 0x11, 0x7E, 0x00, 0x7F, 0x19, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA0, \r
-0x79, 0x91, 0x12, 0x08, 0xAA, 0x12, 0x9E, 0x7A, 0x90, 0xA0, 0x98, 0x12, 0x45, 0x71, 0x90, 0xA0, \r
-0x94, 0x12, 0x08, 0x6D, 0x90, 0x9E, 0x97, 0xE0, 0xFF, 0x64, 0x02, 0x70, 0x22, 0x31, 0xC1, 0x30, \r
-0xE0, 0x02, 0x7E, 0x01, 0x90, 0xA0, 0xA0, 0xEE, 0xF0, 0x31, 0xC1, 0x30, 0xE1, 0x02, 0x7E, 0x01, \r
-0x90, 0xA0, 0xA1, 0xEE, 0xF0, 0x90, 0xFD, 0x80, 0xE0, 0x90, 0x02, 0xFB, 0xF0, 0x80, 0x3A, 0xEF, \r
-0x64, 0x01, 0x70, 0x15, 0x31, 0x5A, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90, 0xA0, 0xA0, 0xEF, 0xF0, \r
-0x31, 0x5A, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x80, 0x1B, 0x90, 0x9E, 0x97, 0xE0, 0x64, 0x03, 0x70, \r
-0x18, 0x31, 0x53, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90, 0xA0, 0xA0, 0xEF, 0xF0, 0x31, 0x53, 0x30, \r
-0xE1, 0x02, 0x7F, 0x01, 0x90, 0xA0, 0xA1, 0xEF, 0xF0, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x02, 0xF0, \r
-0x7F, 0x01, 0x51, 0xC3, 0x31, 0x61, 0x12, 0x9B, 0xD6, 0x90, 0xA0, 0x78, 0x74, 0x01, 0xF0, 0x90, \r
-0xA0, 0xAD, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x04, 0x8F, 0xE4, 0xF0, 0x90, 0xA0, 0xBF, 0xE0, 0x54, \r
-0xFE, 0xF0, 0x22, 0x90, 0xFD, 0x78, 0xE0, 0x7F, 0x00, 0x22, 0x90, 0xFD, 0x70, 0xE0, 0x7F, 0x00, \r
-0x22, 0x7E, 0x00, 0x7F, 0x32, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA0, 0x79, 0x5F, 0x12, 0x08, 0xAA, \r
-0x90, 0xA0, 0x60, 0x74, 0x0B, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0x90, 0x9E, 0x97, 0xE0, 0xFC, 0x64, \r
-0x02, 0x70, 0x14, 0x31, 0xC1, 0x30, 0xE2, 0x02, 0x7E, 0x01, 0xEE, 0x31, 0xC8, 0xFE, 0x90, 0xA0, \r
-0x62, 0xE0, 0x54, 0xBF, 0x4E, 0xF0, 0x22, 0xEC, 0x64, 0x01, 0x70, 0x09, 0x31, 0x5A, 0x30, 0xE2, \r
-0x02, 0x7F, 0x01, 0x80, 0x0F, 0x90, 0x9E, 0x97, 0xE0, 0x64, 0x03, 0x70, 0x13, 0x31, 0x53, 0x30, \r
-0xE2, 0x02, 0x7F, 0x01, 0xEF, 0x31, 0xC8, 0xFF, 0x90, 0xA0, 0x62, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, \r
-0x22, 0x90, 0xFD, 0x80, 0xE0, 0x7E, 0x00, 0x22, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x54, 0xC0, 0x22, \r
-0xE4, 0xFD, 0xFF, 0x12, 0x86, 0xD3, 0xFE, 0xEF, 0x54, 0x07, 0xFF, 0xED, 0x70, 0x12, 0x51, 0x14, \r
-0xC0, 0x83, 0xC0, 0x82, 0x51, 0x0C, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5E, 0x80, 0x0F, \r
-0x51, 0x14, 0xC0, 0x83, 0xC0, 0x82, 0x51, 0x0C, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4E, 0xD0, \r
-0x82, 0xD0, 0x83, 0xF0, 0x51, 0x1F, 0x90, 0x9F, 0x9C, 0xEF, 0xF0, 0x22, 0xE0, 0xFE, 0x74, 0x01, \r
-0xA8, 0x07, 0x08, 0x22, 0x74, 0x8C, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x9F, 0xF5, 0x83, 0x22, 0xD3, \r
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7D, 0x10, 0xED, 0x14, 0xF9, 0x24, 0x8C, 0x51, 0x17, 0xE0, \r
-0x60, 0x3B, 0x7C, 0x08, 0xEC, 0x14, 0x90, 0xA2, 0x34, 0xF0, 0x74, 0x8C, 0x29, 0x51, 0x17, 0xE0, \r
-0xFB, 0x7A, 0x00, 0x90, 0xA2, 0x34, 0x12, 0x7C, 0xC5, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, \r
-0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5A, 0xFE, 0xEF, 0x5B, 0x4E, 0x60, 0x0F, 0xE9, 0x75, 0xF0, 0x08, \r
-0xA4, 0xFF, 0x90, 0xA2, 0x34, 0xE0, 0x2F, 0x04, 0xFF, 0x80, 0x06, 0xDC, 0xC7, 0xDD, 0xB9, 0x7F, \r
-0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0xAB, 0xE3, 0x02, 0x08, 0xAA, 0x90, 0x01, 0x01, 0xE0, \r
-0x44, 0x04, 0xF0, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x12, 0x96, 0xF8, 0x90, 0x01, 0x99, 0xE0, \r
-0x44, 0xC0, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x80, 0xF0, 0x22, 0x7B, 0x01, 0x7A, 0xA0, 0x79, 0xF1, \r
-0x51, 0xBC, 0xBF, 0x01, 0x16, 0x90, 0xA0, 0xF1, 0xE0, 0x54, 0x30, 0xFF, 0xBF, 0x20, 0x07, 0x90, \r
-0xA0, 0xEE, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0xA0, 0xEE, 0xF0, 0x22, 0x7F, 0xFB, 0x7E, 0x01, \r
-0x02, 0x34, 0xC1, 0x90, 0xA0, 0x84, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, \r
-0x07, 0x78, 0x74, 0x09, 0xF0, 0x22, 0x90, 0xA0, 0xBF, 0xE0, 0x30, 0xE0, 0x1D, 0xEF, 0x24, 0xFD, \r
-0x60, 0x0E, 0x24, 0xFA, 0x60, 0x0E, 0x24, 0xFC, 0x60, 0x0E, 0x24, 0x0C, 0x7F, 0x02, 0x80, 0x0A, \r
-0x7F, 0x03, 0x80, 0x06, 0x7F, 0x0B, 0x80, 0x02, 0x7F, 0x0E, 0x90, 0x07, 0x78, 0xEF, 0xF0, 0x22, \r
-0x7F, 0xFF, 0x12, 0x49, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x4C, 0x22, 0x91, \r
-0xA3, 0x91, 0x8D, 0x91, 0x8D, 0x54, 0xFE, 0xFD, 0x7F, 0x02, 0x12, 0x46, 0xA0, 0x90, 0x01, 0x00, \r
-0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0x12, 0x9D, \r
-0x47, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x04, 0x7F, 0x01, 0x51, 0xC3, 0x12, 0x9D, 0x3F, 0x30, 0xE0, \r
-0x31, 0x90, 0xA0, 0xA0, 0xE0, 0x60, 0x08, 0x90, 0xA2, 0x2A, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, \r
-0x90, 0xA2, 0x2A, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0xE4, 0x90, 0xA2, 0x2B, \r
-0xF0, 0x80, 0x06, 0x90, 0xA2, 0x2B, 0x74, 0x02, 0xF0, 0x90, 0xA2, 0x2A, 0x71, 0x7F, 0x7F, 0x01, \r
-0x51, 0xC3, 0x90, 0xA0, 0x4F, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, \r
-0xFF, 0xA3, 0xE0, 0xFD, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x26, 0x8D, 0x27, 0x90, \r
-0xA0, 0x62, 0x12, 0x4F, 0xD3, 0x30, 0xE0, 0x02, 0x81, 0x74, 0x90, 0xA0, 0xA1, 0xE0, 0x70, 0x57, \r
-0xE5, 0x26, 0x64, 0x02, 0x60, 0x23, 0xE5, 0x27, 0x70, 0x1F, 0x91, 0x79, 0xE5, 0x26, 0x90, 0xA1, \r
-0xC5, 0xB4, 0x01, 0x05, 0x12, 0x45, 0x71, 0x80, 0x08, 0x12, 0xAD, 0x29, 0xEE, 0x44, 0x02, 0xFE, \r
-0xEC, 0x91, 0x87, 0x12, 0x47, 0xCB, 0x12, 0x47, 0xD6, 0xE5, 0x27, 0x64, 0x02, 0x70, 0x02, 0x81, \r
-0x74, 0xE5, 0x27, 0x70, 0x02, 0x81, 0x74, 0x91, 0x79, 0x90, 0xA0, 0xA0, 0xE0, 0x90, 0xA1, 0xC5, \r
-0x60, 0x05, 0x12, 0xAD, 0x29, 0x80, 0x07, 0x12, 0x45, 0x71, 0xEE, 0x44, 0x02, 0xFE, 0x91, 0x86, \r
-0x12, 0x47, 0xCB, 0x7F, 0x48, 0x80, 0x78, 0xE5, 0x26, 0x64, 0x02, 0x60, 0x23, 0x12, 0xAB, 0x8D, \r
-0x91, 0x86, 0xE5, 0x26, 0x90, 0xA1, 0xC5, 0xB4, 0x01, 0x08, 0x12, 0x45, 0x71, 0xEF, 0x44, 0x01, \r
-0x80, 0x06, 0x12, 0x45, 0x71, 0xEF, 0x44, 0x02, 0xFF, 0x91, 0x86, 0x12, 0x47, 0xCB, 0xF1, 0xD1, \r
-0xE5, 0x27, 0x64, 0x02, 0x60, 0x4E, 0x12, 0x97, 0x6E, 0xE4, 0xFF, 0x91, 0x86, 0xE5, 0x27, 0x70, \r
-0x0A, 0x12, 0xAD, 0x21, 0x44, 0x77, 0xFF, 0x91, 0x86, 0x80, 0x2F, 0x12, 0xAD, 0x21, 0x44, 0x66, \r
-0xFF, 0x91, 0x86, 0x12, 0xAB, 0x8D, 0xF1, 0xD8, 0x90, 0xA0, 0xA0, 0xE0, 0x90, 0xA1, 0xC9, 0x60, \r
-0x08, 0x12, 0x45, 0x71, 0xEF, 0x44, 0x02, 0x80, 0x06, 0x12, 0x45, 0x71, 0xEF, 0x44, 0x01, 0xFF, \r
-0xF1, 0xD8, 0x90, 0xA1, 0xC9, 0x12, 0x47, 0xCE, 0xF1, 0xD1, 0x12, 0x47, 0xCB, 0x7F, 0x30, 0x7E, \r
-0x09, 0x12, 0x38, 0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x48, 0x7E, 0x09, 0x12, 0x37, 0x4E, \r
-0xE4, 0xFF, 0xEE, 0x54, 0xF0, 0xFE, 0xEC, 0x90, 0xA1, 0xC5, 0x02, 0x08, 0x6D, 0x54, 0xFE, 0xFD, \r
-0x7F, 0x02, 0x12, 0x46, 0xA0, 0x7F, 0x02, 0x12, 0x47, 0xAF, 0xEF, 0x44, 0x01, 0xFD, 0x7F, 0x02, \r
-0x12, 0x46, 0xA0, 0x7F, 0x02, 0x12, 0x47, 0xAF, 0xEF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
-0xD0, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x06, \r
-0xB7, 0x74, 0x09, 0xF0, 0x90, 0x06, 0xB4, 0x74, 0x86, 0x12, 0x9D, 0x47, 0x13, 0x54, 0x1F, 0x30, \r
-0xE0, 0x04, 0x7F, 0x03, 0x51, 0xC3, 0x90, 0xA0, 0x7A, 0xE0, 0x20, 0xE0, 0x31, 0x12, 0x9D, 0x3F, \r
-0x30, 0xE0, 0x2B, 0x90, 0xA0, 0xA0, 0xE0, 0x60, 0x07, 0xE4, 0x90, 0xA2, 0x28, 0xF0, 0x80, 0x06, \r
-0x90, 0xA2, 0x28, 0x74, 0x01, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x07, 0x90, 0xA2, 0x29, 0x30, 0xE0, \r
-0x05, 0x74, 0x01, 0xF0, 0x80, 0x03, 0x74, 0x02, 0xF0, 0x90, 0xA2, 0x28, 0x71, 0x7F, 0x91, 0xA3, \r
-0x44, 0x01, 0xFD, 0x7F, 0x02, 0x12, 0x46, 0xA0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, \r
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA1, 0xF0, 0xEF, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0xE4, 0xFF, 0x12, \r
-0x8A, 0x84, 0x90, 0xA0, 0x63, 0x12, 0x8D, 0x05, 0x30, 0xE0, 0x02, 0x91, 0xAA, 0x90, 0xA0, 0x63, \r
-0xE0, 0x30, 0xE0, 0x04, 0x7F, 0x01, 0x80, 0x37, 0x90, 0xA0, 0x5F, 0x12, 0x4F, 0xD3, 0x30, 0xE0, \r
-0x04, 0x7F, 0x0D, 0x80, 0x2A, 0x90, 0xA0, 0x62, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x10, \r
-0xEF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x04, 0x7F, 0x09, 0x80, 0x13, 0x7F, 0x03, 0x80, 0x0F, \r
-0x90, 0xA0, 0x62, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x02, 0x7F, 0x09, 0x51, \r
-0xC3, 0x90, 0xA1, 0xF0, 0xE0, 0x64, 0x03, 0x70, 0x6B, 0x12, 0x4F, 0xD0, 0x30, 0xE0, 0x60, 0x90, \r
-0xA0, 0x69, 0xE0, 0xFF, 0x90, 0xA0, 0x74, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x37, 0xEE, 0x75, 0xF0, \r
-0x03, 0xA4, 0xFF, 0x90, 0xA0, 0x6B, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0xFF, 0x24, 0x03, 0xFD, 0xE4, \r
-0x33, 0xFC, 0x90, 0xA0, 0x61, 0xE0, 0xFE, 0xD3, 0x9D, 0xEC, 0x12, 0xAB, 0xF3, 0x40, 0x08, 0xEE, \r
-0x9F, 0x90, 0xA1, 0xF3, 0xF0, 0x80, 0x06, 0x90, 0xA1, 0xF3, 0x74, 0x03, 0xF0, 0x90, 0xA1, 0xF3, \r
-0xF1, 0x98, 0x80, 0x14, 0x90, 0xA0, 0x6C, 0xE0, 0xFF, 0xD1, 0xEC, 0x90, 0xA0, 0x67, 0x74, 0x04, \r
-0xF0, 0xE4, 0x90, 0xA0, 0x72, 0x12, 0x8E, 0xBF, 0xE4, 0x90, 0xA0, 0x74, 0xF0, 0x80, 0x05, 0x90, \r
-0xA0, 0x61, 0xF1, 0x98, 0x90, 0xA0, 0x5F, 0x12, 0x56, 0xE4, 0x30, 0xE0, 0x07, 0xE4, 0x90, 0xA1, \r
-0xF2, 0xF0, 0x80, 0x06, 0x90, 0xA1, 0xF2, 0x74, 0x01, 0xF0, 0x12, 0x9B, 0xCD, 0x20, 0xE0, 0x13, \r
-0x90, 0xA0, 0xA0, 0xE0, 0x60, 0x07, 0xE4, 0x90, 0xA1, 0xF1, 0xF0, 0x80, 0x06, 0x90, 0xA1, 0xF1, \r
-0x74, 0x01, 0xF0, 0x90, 0xA1, 0xF1, 0x71, 0x7F, 0x90, 0xA0, 0x71, 0x74, 0x01, 0xF0, 0x12, 0x9B, \r
-0xC4, 0x30, 0xE0, 0x0D, 0x90, 0xA1, 0xF0, 0xE0, 0x70, 0x3B, 0xFD, 0xFF, 0x12, 0x49, 0x22, 0x80, \r
-0x34, 0x12, 0x9B, 0xB3, 0x30, 0xE0, 0x1A, 0x90, 0xA0, 0x65, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0xA0, \r
-0x51, 0xE0, 0x60, 0x04, 0x7D, 0x01, 0x80, 0x18, 0x12, 0x5C, 0x93, 0x7D, 0x01, 0x7F, 0x0C, 0x80, \r
-0x11, 0x90, 0xA1, 0xF0, 0xE0, 0xB4, 0x03, 0x0D, 0x90, 0x9F, 0xA7, 0xE0, 0x60, 0x07, 0xE4, 0xFD, \r
-0x7F, 0x04, 0x12, 0x5A, 0xA1, 0x90, 0xA0, 0x51, 0xE0, 0x60, 0x18, 0x90, 0xA1, 0xF0, 0xE0, 0x70, \r
-0x04, 0x7D, 0x04, 0x80, 0x0A, 0x90, 0xA1, 0xF0, 0xE0, 0x64, 0x03, 0x70, 0x31, 0x7D, 0x0B, 0x7F, \r
-0x6F, 0x80, 0x28, 0x90, 0xA1, 0xF0, 0xE0, 0x70, 0x04, 0xFD, 0xFF, 0x80, 0x1E, 0x90, 0xA1, 0xF0, \r
-0xE0, 0xB4, 0x03, 0x1A, 0x90, 0xA0, 0x5F, 0x12, 0x8F, 0xB4, 0x20, 0xE0, 0x0B, 0xEF, 0x13, 0x13, \r
-0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x6F, 0xDF, 0xE4, 0xFD, 0xFF, 0x12, 0x49, 0x22, 0x90, 0xA0, \r
-0x62, 0x12, 0x56, 0xE4, 0x30, 0xE0, 0x05, 0x7F, 0x01, 0x12, 0x97, 0xC6, 0x90, 0xA0, 0x63, 0xE0, \r
-0xC3, 0x13, 0x30, 0xE0, 0x0E, 0x90, 0x06, 0xCD, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x06, 0xCF, 0xE0, \r
-0x44, 0x10, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, 0xC3, 0x9F, 0xFF, 0xE4, 0x90, 0xA1, 0xD9, \r
-0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x6C, 0x7E, 0x01, 0x02, 0x48, 0x34, 0xAD, 0x07, \r
-0xED, 0x70, 0x19, 0xF1, 0x87, 0x70, 0x02, 0x80, 0x17, 0xBC, 0x01, 0x02, 0x80, 0x19, 0xF1, 0x87, \r
-0xBC, 0x02, 0x02, 0x80, 0x1B, 0xEC, 0x64, 0x03, 0x70, 0x21, 0x80, 0x1B, 0xF1, 0x8F, 0x70, 0x04, \r
-0x7F, 0x01, 0x80, 0x15, 0xBC, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x0E, 0xF1, 0x8F, 0xBC, 0x02, 0x04, \r
-0x7F, 0x09, 0x80, 0x05, 0xBC, 0x03, 0x04, 0x7F, 0x0D, 0x51, 0xC3, 0x90, 0xA0, 0xAD, 0xE0, 0xC4, \r
-0x13, 0x54, 0x07, 0x30, 0xE0, 0x39, 0xED, 0x70, 0x1B, 0xA3, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, \r
-0xE0, 0x07, 0xE4, 0x90, 0xA1, 0x2B, 0xF0, 0x80, 0x02, 0xF1, 0x80, 0x90, 0xA1, 0x2B, 0xE0, 0xFD, \r
-0xE4, 0xFF, 0x80, 0x19, 0x90, 0xA0, 0xAE, 0x12, 0x4F, 0xD3, 0x30, 0xE0, 0x07, 0xE4, 0x90, 0xA1, \r
-0x2B, 0xF0, 0x80, 0x02, 0xF1, 0x80, 0x90, 0xA1, 0x2B, 0xE0, 0xFD, 0x7F, 0x01, 0x71, 0x84, 0x22, \r
-0x90, 0xA1, 0x2B, 0x74, 0x01, 0xF0, 0x22, 0x90, 0xA0, 0xAE, 0xE0, 0x54, 0x03, 0xFC, 0x22, 0x90, \r
-0xA0, 0xAE, 0xE0, 0xC4, 0x54, 0x03, 0xFC, 0x22, 0xE0, 0xFF, 0xD1, 0xEC, 0x90, 0xA0, 0x72, 0xE0, \r
-0x04, 0xF0, 0x22, 0x7D, 0x12, 0x7F, 0xFF, 0x12, 0x49, 0x22, 0x7F, 0x01, 0x51, 0xC3, 0x12, 0x97, \r
-0x7D, 0x61, 0x84, 0x90, 0xA0, 0x7A, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xE1, 0xF0, 0x90, 0xA0, 0x7F, \r
-0xE0, 0xFF, 0x51, 0xC3, 0x90, 0xA0, 0x80, 0x71, 0x7F, 0x91, 0xAA, 0xE4, 0xFD, 0xFF, 0x02, 0x49, \r
-0x22, 0x7F, 0x2C, 0x7E, 0x09, 0x02, 0x38, 0x45, 0xEC, 0x90, 0xA1, 0xC9, 0x02, 0x08, 0x6D, 0x7D, \r
-0x20, 0x71, 0x00, 0x90, 0x9F, 0xA1, 0x74, 0x02, 0xF0, 0x22, 0x71, 0x05, 0x80, 0xF5, 0xE4, 0x90, \r
-0xA0, 0xF3, 0xF0, 0x90, 0xA0, 0xF3, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xEE, 0x90, 0x01, 0xC4, 0xF0, \r
-0x74, 0x67, 0xA3, 0xF0, 0x12, 0x3E, 0x44, 0xBF, 0x01, 0x03, 0x12, 0x31, 0xFC, 0xC2, 0xAF, 0x90, \r
-0x9F, 0xA7, 0xE0, 0x60, 0x0E, 0x90, 0x9F, 0xAA, 0xE0, 0xFF, 0x90, 0x9F, 0xA9, 0xE0, 0x6F, 0x60, \r
-0x02, 0x11, 0x44, 0xC2, 0xAF, 0x12, 0xA1, 0xED, 0xBF, 0x01, 0x03, 0x12, 0x95, 0x3F, 0xD2, 0xAF, \r
-0xD2, 0xAF, 0x90, 0xA0, 0xEE, 0xE0, 0xB4, 0x01, 0x03, 0x12, 0xA8, 0x12, 0x12, 0x4F, 0xFE, 0x12, \r
-0x42, 0xDD, 0x80, 0xAF, 0x90, 0x9F, 0x9E, 0xE0, 0x90, 0x9F, 0xA9, 0x30, 0xE0, 0x05, 0xE0, 0xFF, \r
-0x02, 0xA8, 0xC3, 0x02, 0x5F, 0xEE, 0xE4, 0xFF, 0x12, 0x5F, 0x2F, 0xBF, 0x01, 0x0E, 0x90, 0x9F, \r
-0xA7, 0xE0, 0x60, 0x08, 0x11, 0x6D, 0x54, 0x07, 0x70, 0x02, 0x11, 0x44, 0x22, 0x90, 0x9F, 0xAB, \r
-0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xE4, 0xF5, 0x63, 0x90, 0x06, 0xA9, 0xE0, 0xF5, 0x63, 0x54, 0xC0, \r
-0x70, 0x07, 0x11, 0x6D, 0x54, 0xFD, 0xF0, 0x80, 0xBB, 0xE5, 0x63, 0x30, 0xE6, 0x17, 0x90, 0x9F, \r
-0xA7, 0xE0, 0x64, 0x01, 0x70, 0x11, 0x31, 0x33, 0x64, 0x02, 0x60, 0x04, 0xF1, 0xDF, 0x80, 0x07, \r
-0x12, 0x5F, 0xB7, 0x80, 0x02, 0x11, 0x6D, 0xE5, 0x63, 0x90, 0x9F, 0xAB, 0x30, 0xE7, 0x0D, 0xF1, \r
-0xBA, 0x12, 0x48, 0x2C, 0x90, 0x9F, 0xA3, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0xE0, 0x54, 0xFD, 0xF0, \r
-0x22, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0xA1, 0x1D, 0xF0, 0xE0, 0xFD, 0x54, 0xC0, 0x70, 0x04, 0x11, \r
-0x6D, 0x80, 0x5C, 0xED, 0x30, 0xE6, 0x3E, 0x90, 0x9F, 0xA7, 0xE0, 0x64, 0x02, 0x70, 0x27, 0x90, \r
-0x9F, 0xA3, 0xE0, 0xFF, 0xC3, 0x13, 0x20, 0xE0, 0x09, 0x90, 0x9F, 0xAB, 0xE0, 0x44, 0x01, 0xF0, \r
-0x80, 0x1A, 0x31, 0x3A, 0x64, 0x01, 0x70, 0x1F, 0x90, 0x9F, 0xAB, 0xE0, 0x44, 0x04, 0xF0, 0x7F, \r
-0x01, 0x12, 0x4D, 0xD5, 0x80, 0x11, 0x31, 0x33, 0x64, 0x02, 0x60, 0x04, 0xF1, 0xDF, 0x80, 0x07, \r
-0x12, 0x5F, 0xB7, 0x80, 0x02, 0x11, 0x6D, 0x90, 0xA1, 0x1D, 0xE0, 0x90, 0x9F, 0xAB, 0x30, 0xE7, \r
-0x0D, 0xF1, 0xBA, 0x12, 0x48, 0x2C, 0x90, 0x9F, 0xA3, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0xE0, 0x54, \r
-0xFD, 0xF0, 0x22, 0x90, 0x9F, 0xAB, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x9F, 0xA5, 0xE0, 0x54, 0x0F, \r
-0x22, 0xF1, 0x66, 0x12, 0x06, 0x89, 0xFF, 0x54, 0x7F, 0x90, 0x9F, 0xA7, 0xF0, 0xEF, 0x12, 0x56, \r
-0xE5, 0xA3, 0x51, 0x86, 0xFF, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFE, 0x90, 0x9F, 0xA5, 0xE0, 0x54, \r
-0xF0, 0x4E, 0xF0, 0x12, 0x57, 0x09, 0x54, 0x01, 0x25, 0xE0, 0xFE, 0x90, 0x9F, 0xA3, 0xE0, 0x54, \r
-0xFD, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x31, 0x3A, 0x12, 0x56, 0xDC, 0x90, \r
-0x9F, 0xA6, 0xF0, 0x51, 0x80, 0x30, 0xE0, 0x52, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0xC3, 0x94, 0x04, \r
-0x90, 0x9F, 0xBA, 0x50, 0x04, 0xEF, 0xF0, 0x80, 0x2A, 0x74, 0x03, 0xF0, 0x51, 0x73, 0xE9, 0x24, \r
-0x06, 0xF9, 0xE4, 0x3A, 0xFA, 0x12, 0x06, 0x89, 0xFF, 0x74, 0x03, 0x24, 0xFD, 0xFE, 0xEF, 0xC4, \r
-0x54, 0x0F, 0xFD, 0xEF, 0x54, 0x0F, 0xFF, 0xED, 0x2E, 0x54, 0x0F, 0xFE, 0xC4, 0x54, 0xF0, 0x4F, \r
-0x12, 0x06, 0xCF, 0x51, 0x73, 0x51, 0x80, 0xC4, 0x54, 0x0F, 0xFF, 0xC3, 0x94, 0x04, 0x90, 0x9F, \r
-0xAF, 0x50, 0x05, 0x74, 0x04, 0xF0, 0x80, 0x02, 0xEF, 0xF0, 0x51, 0x73, 0xB1, 0x28, 0xFD, 0x7F, \r
-0x02, 0x12, 0x5A, 0x1E, 0x51, 0x73, 0x51, 0x7A, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0xA0, 0x50, 0xF1, \r
-0x44, 0xFF, 0x51, 0x79, 0xB1, 0x2E, 0xFF, 0x90, 0xA0, 0x50, 0xF1, 0x7C, 0x4E, 0xFF, 0x51, 0x79, \r
-0xF1, 0x8D, 0x90, 0xA0, 0x50, 0x12, 0x9F, 0x77, 0x4E, 0xFF, 0x51, 0x79, 0xF1, 0x3D, 0x4E, 0x90, \r
-0xA0, 0x50, 0xF0, 0xF1, 0xA4, 0x20, 0xE0, 0x29, 0xEF, 0xC3, 0x13, 0x20, 0xE0, 0x0B, 0x75, 0x52, \r
-0x01, 0x90, 0xA0, 0xA0, 0xE0, 0x60, 0x0B, 0x80, 0x0E, 0xE4, 0xF5, 0x52, 0x90, 0xA0, 0xA0, 0xE0, \r
-0x60, 0x05, 0xE4, 0xF5, 0x51, 0x80, 0x03, 0x75, 0x51, 0x01, 0xAD, 0x52, 0xAF, 0x51, 0x12, 0x63, \r
-0x84, 0x51, 0x73, 0x90, 0xA1, 0x04, 0x12, 0x45, 0xBE, 0x12, 0xA9, 0x27, 0x90, 0x9F, 0xA7, 0xE0, \r
-0xFF, 0x12, 0x5F, 0x59, 0x90, 0x9F, 0xA7, 0xE0, 0x60, 0x12, 0x90, 0xA1, 0x04, 0x12, 0x45, 0xB5, \r
-0x51, 0x87, 0x54, 0x0F, 0xFF, 0x12, 0x56, 0xDE, 0xFD, 0x12, 0xA9, 0x4C, 0x22, 0x90, 0xA1, 0x01, \r
-0x12, 0x45, 0xBE, 0x90, 0xA1, 0x01, 0x02, 0x45, 0xB5, 0xF0, 0x90, 0x00, 0x05, 0x02, 0x06, 0xA2, \r
-0x90, 0x00, 0x06, 0x02, 0x06, 0xA2, 0xF0, 0x90, 0x00, 0x01, 0x02, 0x06, 0xA2, 0xD3, 0x10, 0xAF, \r
-0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0x66, 0x12, 0x8F, 0xC9, 0x90, 0xA0, 0x5F, 0xF1, 0x44, 0xFF, 0xF0, \r
-0x12, 0x06, 0x89, 0xB1, 0x2E, 0xFF, 0x90, 0xA0, 0x5F, 0xF1, 0xAC, 0xF1, 0x97, 0x90, 0xA0, 0x5F, \r
-0xF1, 0x3B, 0xF1, 0xB4, 0xF1, 0x74, 0x90, 0xA0, 0x5F, 0xF0, 0x12, 0x57, 0x09, 0xFF, 0x54, 0x01, \r
-0xFE, 0x90, 0xA0, 0x62, 0xF1, 0x44, 0xFF, 0xF0, 0x12, 0x57, 0x09, 0xB1, 0x2E, 0xFF, 0x90, 0xA0, \r
-0x62, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x57, 0x09, 0xF1, \r
-0x97, 0x90, 0xA0, 0x62, 0xF1, 0x3B, 0x4E, 0xFF, 0xF0, 0x12, 0x57, 0x09, 0xF1, 0x74, 0x90, 0xA0, \r
-0x62, 0xB1, 0x27, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0xA0, 0x63, 0xE0, 0x54, 0xDF, 0x4E, 0xFE, 0xF0, \r
-0xEF, 0x54, 0x40, 0xFF, 0xEE, 0x54, 0xBF, 0x4F, 0xB1, 0x26, 0xFE, 0x54, 0x80, 0xFD, 0xEF, 0x54, \r
-0x7F, 0x4D, 0xFF, 0x90, 0xA0, 0x63, 0xF0, 0xEE, 0x54, 0x01, 0xFE, 0xEF, 0x54, 0xFE, 0x4E, 0xB1, \r
-0x26, 0xB1, 0x2E, 0xFF, 0x90, 0xA0, 0x63, 0xF0, 0xEE, 0x54, 0x02, 0xFE, 0xEF, 0x54, 0xFD, 0x4E, \r
-0xB1, 0x26, 0xF1, 0x8D, 0x90, 0xA0, 0x63, 0xF1, 0x7C, 0x4E, 0xF0, 0x12, 0x8D, 0x05, 0x20, 0xE0, \r
-0x06, 0x12, 0x64, 0xAA, 0x12, 0x5C, 0x93, 0x51, 0x73, 0x12, 0x06, 0x89, 0x20, 0xE0, 0x02, 0x81, \r
-0x93, 0x90, 0x05, 0x54, 0xE0, 0x90, 0xA0, 0x70, 0xF0, 0xE0, 0xC3, 0x13, 0x90, 0xA0, 0x6F, 0x12, \r
-0x85, 0xA7, 0x30, 0xE0, 0x0E, 0x51, 0x87, 0x90, 0xA0, 0x60, 0x12, 0x56, 0xDD, 0x90, 0xA0, 0x61, \r
-0xF0, 0x80, 0x41, 0x51, 0x87, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, 0x90, \r
-0xA0, 0x60, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0xA0, 0x60, \r
-0x74, 0x2A, 0xF0, 0x12, 0x56, 0xDE, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, \r
-0x90, 0xA0, 0x61, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0xA0, \r
-0x61, 0x74, 0x2A, 0xF0, 0x12, 0x4F, 0xD0, 0x30, 0xE0, 0x3D, 0x90, 0xA0, 0x60, 0xE0, 0x75, 0xF0, \r
-0x03, 0x84, 0x90, 0xA0, 0x68, 0xF0, 0xE0, 0xC3, 0x13, 0xA3, 0xF0, 0x90, 0xA0, 0x61, 0xE0, 0x75, \r
-0xF0, 0x03, 0x84, 0x90, 0xA0, 0x6A, 0xF0, 0x90, 0xA0, 0x60, 0xE0, 0xC3, 0x13, 0x90, 0xA0, 0x6B, \r
-0xF0, 0x90, 0xA0, 0x61, 0xE0, 0xC3, 0x13, 0x90, 0xA0, 0x6C, 0xF0, 0x90, 0x01, 0x3E, 0x74, 0x08, \r
-0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x88, 0xD0, 0xE4, 0x90, 0xA0, 0x9E, 0xF0, 0x12, 0x57, 0x03, 0xC4, \r
-0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x39, 0x90, 0xA0, 0x5F, 0xE0, 0xFF, 0xC3, 0x13, 0x20, 0xE0, \r
-0x07, 0xEF, 0x12, 0x56, 0xE5, 0x30, 0xE0, 0x28, 0x12, 0x06, 0x89, 0x13, 0x13, 0x13, 0x54, 0x1F, \r
-0x30, 0xE0, 0x08, 0x90, 0xA0, 0xA0, 0xE0, 0x60, 0x08, 0x80, 0x0B, 0x90, 0xA0, 0xA0, 0xE0, 0x60, \r
-0x05, 0x75, 0x51, 0x01, 0x80, 0x03, 0xE4, 0xF5, 0x51, 0x7D, 0x02, 0xAF, 0x51, 0x12, 0x63, 0x84, \r
-0x12, 0x9B, 0xB3, 0x30, 0xE0, 0x12, 0x12, 0x9B, 0xBB, 0x30, 0xE0, 0x07, 0x7D, 0x04, 0x7F, 0x02, \r
-0x12, 0x5A, 0x1E, 0xF1, 0x6C, 0x74, 0x11, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x02, 0xF0, 0x90, 0xA0, \r
-0x67, 0xE0, 0xFF, 0xB4, 0x01, 0x08, 0x90, 0xA0, 0x72, 0x74, 0x01, 0xF0, 0x80, 0x1E, 0xEF, 0xB4, \r
-0x04, 0x08, 0x90, 0xA0, 0x72, 0x74, 0x04, 0xF0, 0x80, 0x12, 0xEF, 0xB4, 0x06, 0x08, 0x90, 0xA0, \r
-0x72, 0x74, 0x02, 0xF0, 0x80, 0x06, 0xEF, 0xB4, 0x07, 0x02, 0xF1, 0xD1, 0xE4, 0x90, 0xA0, 0x67, \r
-0xF0, 0x80, 0x56, 0x12, 0x57, 0x03, 0xF1, 0xA5, 0x30, 0xE0, 0x05, 0x75, 0x52, 0x02, 0x80, 0x11, \r
-0x12, 0x06, 0x89, 0x12, 0x5E, 0xCD, 0x30, 0xE0, 0x05, 0x75, 0x52, 0x01, 0x80, 0x03, 0xE4, 0xF5, \r
-0x52, 0x12, 0x9B, 0xD6, 0x90, 0xA0, 0xBF, 0xE0, 0x30, 0xE0, 0x04, 0x7D, 0xAC, 0x80, 0x02, 0x7D, \r
-0x2C, 0x7F, 0x40, 0x12, 0x46, 0xA0, 0x12, 0x57, 0x03, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, \r
-0x04, 0x7F, 0x03, 0x80, 0x02, 0x7F, 0x01, 0x12, 0x62, 0xC3, 0xAD, 0x52, 0x7F, 0x02, 0x12, 0x63, \r
-0x84, 0x12, 0x5C, 0x93, 0xF1, 0x6C, 0x74, 0x43, 0xF0, 0x12, 0xAC, 0xCE, 0x90, 0xA0, 0x71, 0xF0, \r
-0x90, 0xA0, 0x62, 0x12, 0x56, 0xE4, 0x30, 0xE0, 0x09, 0x90, 0xA0, 0x91, 0xE0, 0x44, 0x02, 0xF0, \r
-0x80, 0x0C, 0x7F, 0x01, 0x12, 0x97, 0xC6, 0x90, 0xA0, 0x91, 0xE0, 0x54, 0xFD, 0xF0, 0x7F, 0x03, \r
-0x12, 0x8A, 0x84, 0x90, 0xA0, 0x5F, 0xE0, 0x20, 0xE0, 0x07, 0x90, 0xA0, 0x63, 0xE0, 0x54, 0xBF, \r
-0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xFF, 0xF0, 0x90, 0x00, 0x04, 0x02, 0x06, 0xA2, 0xFE, 0x54, \r
-0x04, 0xFD, 0xEF, 0x54, 0xFB, 0x4D, 0x22, 0x90, 0x02, 0x09, 0x12, 0x9C, 0xAD, 0x90, 0x9E, 0x98, \r
-0x51, 0x86, 0x25, 0x51, 0x90, 0x9E, 0x99, 0x12, 0x56, 0xDD, 0x25, 0x51, 0x90, 0x9E, 0x9A, 0xF0, \r
-0x12, 0x57, 0x09, 0x25, 0x51, 0x90, 0x9E, 0x9B, 0xB1, 0x27, 0x25, 0x51, 0x90, 0x9E, 0x9C, 0x51, \r
-0x79, 0x25, 0x51, 0x90, 0x9E, 0x9D, 0xF0, 0x51, 0x80, 0x25, 0x51, 0x90, 0x9E, 0x9E, 0xF0, 0x22, \r
-0x12, 0x06, 0x89, 0xF5, 0x51, 0x51, 0x87, 0xF5, 0x54, 0x12, 0x56, 0xDE, 0xF5, 0x55, 0x12, 0x57, \r
-0x09, 0xF5, 0x56, 0xB1, 0x28, 0xF5, 0x57, 0x51, 0x7A, 0xF5, 0x58, 0x51, 0x80, 0xF5, 0x59, 0xE5, \r
-0x51, 0x12, 0x45, 0xC7, 0x6D, 0xAD, 0x00, 0x6D, 0xB5, 0x01, 0x6D, 0xBD, 0x02, 0x6D, 0xC5, 0x03, \r
-0x6D, 0xCD, 0x04, 0x6D, 0xD5, 0x05, 0x6D, 0xDD, 0x06, 0x00, 0x00, 0x6D, 0xF0, 0x75, 0x52, 0x02, \r
-0x75, 0x53, 0x29, 0x80, 0x41, 0x75, 0x52, 0x06, 0x75, 0x53, 0x2A, 0x80, 0x39, 0x75, 0x52, 0x01, \r
-0x75, 0x53, 0x31, 0x80, 0x31, 0x75, 0x52, 0x01, 0x75, 0x53, 0x32, 0x80, 0x29, 0x75, 0x52, 0x06, \r
-0x75, 0x53, 0x33, 0x80, 0x21, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x54, 0xC1, 0x6D, 0x90, 0xA0, 0xA2, \r
-0x12, 0xAD, 0x09, 0xA3, 0xE5, 0x56, 0xF0, 0xA3, 0xE5, 0x57, 0xF0, 0xA3, 0xE5, 0x58, 0xF0, 0x22, \r
-0x75, 0x52, 0x01, 0x75, 0x53, 0xFF, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x54, 0xAD, 0x52, 0xAF, 0x53, \r
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA1, 0xE1, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, \r
-0x12, 0x45, 0xBE, 0x12, 0xAB, 0x37, 0x70, 0x22, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x13, 0x90, \r
-0xA1, 0xE1, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xA3, 0x12, 0x45, 0xB5, 0x12, 0x9D, 0x9A, 0x7F, 0x01, \r
-0x80, 0x0E, 0x7F, 0x01, 0xF1, 0x53, 0x7F, 0x02, 0x80, 0x06, 0x7F, 0x02, 0xF1, 0x53, 0x7F, 0x03, \r
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x51, 0x6D, 0x12, 0x06, 0x89, 0x90, 0xA0, 0xAA, 0x51, 0x86, 0x90, \r
-0xA0, 0xAB, 0x12, 0x56, 0xDD, 0x90, 0xA0, 0xAC, 0xF0, 0x90, 0xA0, 0x87, 0xE0, 0x44, 0x01, 0xF0, \r
-0x51, 0x73, 0xF1, 0x85, 0xB4, 0x02, 0x05, 0x7F, 0x40, 0x12, 0x98, 0x0D, 0x22, 0x90, 0xA1, 0x01, \r
-0x74, 0x0A, 0xF0, 0x90, 0xA1, 0x0F, 0x74, 0x06, 0xF0, 0x12, 0x06, 0x89, 0x90, 0xA1, 0x03, 0x51, \r
-0x86, 0x90, 0xA1, 0x04, 0x12, 0x56, 0xDD, 0x90, 0xA1, 0x05, 0xF0, 0x12, 0x57, 0x09, 0x90, 0xA1, \r
-0x06, 0xB1, 0x27, 0x90, 0xA1, 0x07, 0x51, 0x79, 0x90, 0xA1, 0x08, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, \r
-0x79, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x9F, 0x87, 0xE0, 0xFF, 0x70, 0x06, \r
-0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x9F, 0x88, 0xE0, 0xB5, 0x07, 0x04, \r
-0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x02, 0xF0, \r
-0x80, 0x29, 0xC0, 0x01, 0x90, 0x9F, 0x88, 0xE0, 0x12, 0xA1, 0x59, 0xA8, 0x01, 0xFC, 0x7D, 0x01, \r
-0xD0, 0x01, 0x7E, 0x00, 0x7F, 0x0F, 0x12, 0x06, 0x63, 0x90, 0x9F, 0x88, 0xF1, 0xD8, 0xB4, 0x0A, \r
-0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x9F, 0x88, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
-0x51, 0x6D, 0x12, 0x06, 0x89, 0x90, 0xA0, 0xBD, 0x51, 0x86, 0x90, 0xA0, 0xBE, 0xF0, 0x51, 0x73, \r
-0x7D, 0x02, 0x7F, 0x38, 0xC1, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA1, 0xB6, \r
-0x74, 0x15, 0xF0, 0x90, 0xA1, 0xC4, 0x74, 0x01, 0xF0, 0x90, 0xA1, 0xB8, 0xEF, 0xF0, 0x7B, 0x01, \r
-0x7A, 0xA1, 0x79, 0xB6, 0xD1, 0xA2, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF0, 0xEE, 0x54, 0x40, 0xFE, \r
-0xEF, 0x54, 0xBF, 0x22, 0xE0, 0x54, 0xFE, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xEE, 0x54, \r
-0xFD, 0x4F, 0x22, 0xF1, 0x16, 0x7F, 0x04, 0x8F, 0x71, 0x7F, 0x02, 0x12, 0x44, 0xB7, 0x90, 0x9E, \r
-0x92, 0xE0, 0x45, 0x71, 0xF0, 0x22, 0x90, 0xA1, 0x01, 0x02, 0x45, 0xBE, 0x90, 0x05, 0x00, 0x74, \r
-0x1C, 0xF0, 0xA3, 0x22, 0x54, 0x80, 0xFE, 0xEF, 0x54, 0x7F, 0x4E, 0x22, 0xF0, 0xEE, 0x54, 0x08, \r
-0xFE, 0xEF, 0x54, 0xF7, 0x22, 0x7D, 0x03, 0x7F, 0x11, 0xD1, 0x00, 0xEF, 0x22, 0xFE, 0x54, 0x10, \r
-0xFD, 0xEF, 0x54, 0xEF, 0x4D, 0xFF, 0x22, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, \r
-0x22, 0x90, 0x9F, 0x9E, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x22, 0xF0, 0xEE, 0x54, 0x10, \r
-0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x02, 0x06, 0x89, 0xE0, 0x44, 0x02, 0xF0, 0xE4, 0x90, \r
-0xA1, 0xD9, 0xF0, 0x90, 0xA0, 0x4C, 0xE0, 0x90, 0xA1, 0xDA, 0x22, 0x7D, 0x01, 0x7F, 0x17, 0xC1, \r
-0x00, 0x90, 0xA0, 0x72, 0x74, 0x05, 0xF0, 0x22, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00, 0x22, 0x90, \r
-0xA0, 0x50, 0xE0, 0xC4, 0x54, 0x0F, 0x20, 0xE0, 0x1D, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x17, 0x90, \r
-0x9E, 0x99, 0xE0, 0xFF, 0x7B, 0x18, 0xE4, 0xFD, 0x12, 0x4D, 0x59, 0x90, 0xA2, 0x30, 0xEE, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0x12, 0x4F, 0x09, 0x22, 0xE4, 0xFB, 0xFA, 0xFD, 0x7F, 0x01, 0x12, 0x44, 0xDE, \r
-0x90, 0xA0, 0xFC, 0xEF, 0xF0, 0x60, 0xF0, 0x90, 0x9E, 0x92, 0xE0, 0xFF, 0x70, 0x04, 0xA3, 0xE0, \r
-0x60, 0xE5, 0xC2, 0xAF, 0xEF, 0x30, 0xE0, 0x0E, 0x90, 0x9E, 0x92, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, \r
-0xFF, 0x12, 0x79, 0x54, 0x11, 0x5B, 0xD1, 0x2E, 0x30, 0xE1, 0x06, 0x54, 0xFD, 0xF0, 0x12, 0x7E, \r
-0xEF, 0xD1, 0x2E, 0x30, 0xE2, 0x06, 0x54, 0xFB, 0xF0, 0x12, 0xA0, 0xF3, 0xD1, 0x2E, 0x30, 0xE6, \r
-0x06, 0x54, 0xBF, 0xF0, 0x12, 0x97, 0xE7, 0xD2, 0xAF, 0x80, 0xBC, 0xE4, 0xF5, 0x51, 0x90, 0x9F, \r
-0x9C, 0xE0, 0xFF, 0xE5, 0x51, 0xC3, 0x9F, 0x40, 0x02, 0xA1, 0xFB, 0xAF, 0x51, 0x12, 0x5F, 0x2F, \r
-0xEF, 0x70, 0x02, 0xA1, 0xF7, 0x12, 0x51, 0x14, 0x12, 0x56, 0xE5, 0x30, 0xE0, 0x02, 0xA1, 0xF7, \r
-0x90, 0x04, 0xA0, 0xE0, 0xFF, 0xA3, 0xE0, 0xFE, 0xEF, 0x64, 0x01, 0x70, 0x2D, 0xE5, 0x51, 0x6E, \r
-0x70, 0x28, 0xA3, 0xE0, 0xF5, 0x52, 0xA3, 0xE0, 0x90, 0xA1, 0x0C, 0x12, 0x7B, 0x8B, 0xE5, 0x52, \r
-0xF0, 0x75, 0xF0, 0x10, 0x12, 0x78, 0xE8, 0xE0, 0x54, 0xFC, 0xFF, 0x90, 0xA1, 0x0C, 0xE0, 0x12, \r
-0xAD, 0x11, 0xE5, 0x51, 0x12, 0x78, 0xE8, 0xEF, 0xF0, 0x22, 0xE5, 0x51, 0x12, 0x7A, 0xC2, 0xE0, \r
-0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEE, 0x94, 0x00, 0x50, 0x02, 0xA1, 0xF7, 0xE5, 0x51, 0x75, \r
-0xF0, 0x0A, 0xA4, 0x24, 0x01, 0xF9, 0x74, 0x8D, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0x90, 0xA1, 0x00, \r
-0x12, 0x45, 0xBE, 0xE5, 0x51, 0x12, 0x7A, 0xC2, 0xE0, 0xF5, 0x56, 0xA3, 0xE0, 0xF5, 0x57, 0x74, \r
-0x91, 0x25, 0x51, 0x12, 0x7F, 0xD8, 0xE0, 0xFF, 0x90, 0xA1, 0x03, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, \r
-0x90, 0x00, 0x02, 0x12, 0x07, 0xAB, 0xFF, 0xAE, 0xF0, 0x12, 0x07, 0x80, 0x2F, 0xFF, 0xE5, 0xF0, \r
-0x3E, 0xFE, 0x90, 0x00, 0x04, 0xD1, 0x25, 0xFE, 0x90, 0x00, 0x06, 0xD1, 0x25, 0xFE, 0x90, 0x00, \r
-0x08, 0xD1, 0x25, 0x90, 0xA1, 0x05, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x07, 0x80, 0xFF, 0xC3, 0x90, \r
-0xA1, 0x06, 0xE0, 0x9F, 0xFE, 0x90, 0xA1, 0x05, 0xE0, 0x95, 0xF0, 0x90, 0xA1, 0x07, 0xF0, 0xA3, \r
-0xCE, 0xF0, 0x90, 0x00, 0x06, 0x12, 0x07, 0xAB, 0xFD, 0xAC, 0xF0, 0x25, 0xE0, 0xFF, 0xEC, 0x33, \r
-0xFE, 0xEF, 0x2D, 0xFD, 0xEE, 0x3C, 0xFC, 0x90, 0x00, 0x04, 0x12, 0x07, 0xAB, 0x25, 0xE0, 0xFF, \r
-0xE5, 0xF0, 0x33, 0xFE, 0x90, 0x00, 0x02, 0xD1, 0x25, 0xCF, 0x2D, 0xFD, 0xEF, 0x3C, 0xFC, 0xD1, \r
-0x0A, 0x12, 0xAC, 0x5F, 0xAE, 0xF0, 0x78, 0x02, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x2D, \r
-0xFF, 0xEC, 0x3E, 0x90, 0xA1, 0x09, 0xF0, 0xA3, 0xEF, 0x12, 0x7B, 0x8B, 0xE0, 0xF5, 0x52, 0x54, \r
-0x7F, 0xF5, 0x53, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x12, 0x57, 0xEF, 0xE0, 0x90, 0xA1, 0x0B, 0xF0, \r
-0x12, 0x51, 0x14, 0xFF, 0x13, 0x13, 0x54, 0x03, 0x90, 0xA1, 0x0C, 0xF0, 0xB1, 0xFE, 0xE0, 0xC3, \r
-0x94, 0x05, 0x40, 0x02, 0x81, 0x1C, 0x90, 0xA1, 0x0B, 0xE0, 0xFF, 0xE5, 0x53, 0x9F, 0x40, 0x08, \r
-0x8F, 0x53, 0x53, 0x52, 0x80, 0xEF, 0x42, 0x52, 0xE5, 0x53, 0x90, 0x41, 0x5F, 0x93, 0xFF, 0xD1, \r
-0x38, 0xE0, 0xC3, 0x9F, 0xE5, 0x53, 0x40, 0x05, 0x90, 0x41, 0x37, 0x80, 0x03, 0x90, 0x41, 0x4B, \r
-0x93, 0xF5, 0x58, 0x90, 0xA0, 0xA2, 0xE0, 0x60, 0x7D, 0xE5, 0x53, 0x64, 0x13, 0x60, 0x05, 0xE5, \r
-0x53, 0xB4, 0x0B, 0x05, 0x90, 0xA0, 0xA4, 0x80, 0x23, 0xE5, 0x53, 0x64, 0x12, 0x60, 0x05, 0xE5, \r
-0x53, 0xB4, 0x0A, 0x05, 0x90, 0xA0, 0xA5, 0x80, 0x13, 0xE5, 0x53, 0x64, 0x11, 0x60, 0x05, 0xE5, \r
-0x53, 0xB4, 0x09, 0x05, 0x90, 0xA0, 0xA6, 0x80, 0x03, 0x90, 0xA0, 0xA3, 0xE0, 0xF5, 0x5C, 0xE5, \r
-0x5C, 0xC3, 0x94, 0x80, 0x50, 0x28, 0xE5, 0x5C, 0x94, 0x1B, 0x40, 0x02, 0x80, 0x13, 0xE5, 0x58, \r
-0x25, 0x5C, 0xFF, 0xE4, 0x33, 0xFE, 0xD3, 0xEF, 0x94, 0x1B, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x40, \r
-0x05, 0x75, 0x58, 0x1B, 0x80, 0x20, 0xE5, 0x5C, 0x25, 0x58, 0xF5, 0x58, 0x80, 0x18, 0xC3, 0xE4, \r
-0x95, 0x5C, 0xF5, 0x5C, 0xE5, 0x58, 0xD3, 0x95, 0x5C, 0x40, 0x08, 0xE5, 0x58, 0x95, 0x5C, 0xF5, \r
-0x58, 0x80, 0x03, 0xE4, 0xF5, 0x58, 0xE5, 0x58, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x95, 0xF9, 0x74, \r
-0x40, 0x35, 0xF0, 0xFA, 0x7B, 0xFF, 0x90, 0xA0, 0xFD, 0x12, 0x45, 0xBE, 0xC3, 0xE5, 0x57, 0x94, \r
-0x0F, 0xE5, 0x56, 0x94, 0x00, 0x50, 0x4E, 0xD1, 0x0A, 0x90, 0x00, 0x06, 0x12, 0x07, 0xAB, 0xFF, \r
-0xAE, 0xF0, 0x12, 0xAC, 0x5F, 0x2F, 0xFD, 0xE5, 0xF0, 0x3E, 0xFC, 0xD1, 0x1C, 0xFF, 0xD3, 0xED, \r
-0x9F, 0xEC, 0x9E, 0x40, 0x05, 0x12, 0x7D, 0x5B, 0x61, 0xFD, 0xE5, 0x57, 0xAE, 0x56, 0x78, 0x02, \r
-0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0xD1, 0x1C, 0x2D, 0xFF, 0xEE, 0x3C, \r
-0xFE, 0xD1, 0x0A, 0x12, 0x07, 0x80, 0xD3, 0x9F, 0xE5, 0xF0, 0x9E, 0x50, 0x02, 0x61, 0xFD, 0xAF, \r
-0x51, 0xD1, 0x7A, 0x61, 0xFD, 0xE5, 0x51, 0x70, 0x3D, 0xD1, 0x0A, 0x12, 0xAC, 0x5F, 0xFD, 0xAC, \r
-0xF0, 0xD1, 0x1C, 0xFF, 0xC3, 0xED, 0x9F, 0xEC, 0x9E, 0x50, 0x08, 0x90, 0x9E, 0x91, 0x74, 0x01, \r
-0xF0, 0x80, 0x23, 0xE5, 0x57, 0xAE, 0x56, 0x78, 0x03, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, \r
-0xFB, 0xAA, 0x06, 0xD1, 0x1C, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, 0xD3, 0xED, 0x9F, 0xEC, 0x9E, 0x40, \r
-0x05, 0xE4, 0x90, 0x9E, 0x91, 0xF0, 0x12, 0xAC, 0x83, 0x40, 0x05, 0x75, 0x59, 0x05, 0x80, 0x13, \r
-0xD3, 0xE5, 0x57, 0x94, 0xC8, 0xE5, 0x56, 0x94, 0x00, 0x40, 0x05, 0x75, 0x59, 0x02, 0x80, 0x03, \r
-0xE4, 0xF5, 0x59, 0xE5, 0x51, 0xD1, 0x6E, 0xE0, 0xF5, 0x54, 0xA3, 0xE0, 0xF5, 0x55, 0xE4, 0xF5, \r
-0x5D, 0xD1, 0x0A, 0x75, 0xF0, 0x02, 0xE5, 0x5D, 0x12, 0xAB, 0xCA, 0x80, 0x05, 0xCE, 0xC3, 0x13, \r
-0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0xA0, 0xFD, 0x12, 0x45, 0xB5, 0x85, 0x5D, 0x82, 0x75, 0x83, \r
-0x00, 0x12, 0x06, 0xA2, 0x12, 0xAB, 0x99, 0x05, 0x5D, 0xE5, 0x5D, 0xB4, 0x05, 0xD3, 0x90, 0xA0, \r
-0xFD, 0x12, 0x45, 0xB5, 0x12, 0x6A, 0x7A, 0xFD, 0x7C, 0x00, 0x12, 0xAD, 0x01, 0x80, 0x05, 0xCE, \r
-0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x12, 0x07, 0x03, 0xD3, 0xE5, 0x55, 0x9F, 0xE5, 0x54, \r
-0x9E, 0x40, 0x0C, 0xE5, 0x55, 0x9F, 0xF5, 0x55, 0xE5, 0x54, 0x9E, 0xF5, 0x54, 0x80, 0x05, 0xE4, \r
-0xF5, 0x54, 0xF5, 0x55, 0xE5, 0x51, 0xD1, 0x6E, 0x12, 0xAD, 0x09, 0xAE, 0x54, 0x12, 0x7C, 0xED, \r
-0xC3, 0x12, 0x45, 0x60, 0x50, 0x06, 0xAF, 0x51, 0xD1, 0x7A, 0x80, 0x12, 0x12, 0xAB, 0x0D, 0xD3, \r
-0x74, 0x01, 0x93, 0x95, 0x55, 0xE4, 0x93, 0x95, 0x54, 0x40, 0x09, 0x12, 0x7D, 0x5B, 0xD1, 0x50, \r
-0xE4, 0xF0, 0x80, 0x29, 0xD1, 0x50, 0xE0, 0x04, 0xF0, 0xD1, 0x50, 0xE0, 0xC3, 0x94, 0x05, 0x40, \r
-0x1C, 0xD1, 0x50, 0xE4, 0xF0, 0x12, 0xAB, 0x0D, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0x12, 0x7C, \r
-0xED, 0x12, 0x7F, 0xD0, 0xE5, 0x51, 0xD1, 0x6E, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x51, 0xD1, \r
-0x6E, 0xA3, 0xE0, 0x90, 0xA1, 0x63, 0xF0, 0x90, 0xA1, 0x62, 0xE5, 0x52, 0xF0, 0xAB, 0x51, 0xE4, \r
-0xFD, 0xFF, 0x12, 0x98, 0x28, 0xE4, 0xF5, 0x54, 0xF5, 0x55, 0xA1, 0xDB, 0xB1, 0xFE, 0xE0, 0xFC, \r
-0x64, 0x05, 0x60, 0x02, 0x81, 0xE3, 0xAD, 0x53, 0xAF, 0x51, 0x12, 0xA5, 0x74, 0x12, 0xAC, 0x26, \r
-0xEF, 0xD1, 0x44, 0xE0, 0x54, 0x07, 0xF5, 0x5B, 0xD1, 0x38, 0xE0, 0xFF, 0xC3, 0x94, 0x30, 0x50, \r
-0x06, 0xE4, 0xB1, 0xFC, 0xE4, 0x80, 0x56, 0x12, 0xAC, 0x26, 0xE0, 0x64, 0x01, 0x70, 0x66, 0x12, \r
-0xAB, 0x61, 0xE0, 0x64, 0x0A, 0x60, 0x28, 0xEF, 0x24, 0x05, 0xFF, 0xE4, 0x33, 0xFE, 0x12, 0xAC, \r
-0x1A, 0xE0, 0xFD, 0x12, 0xAB, 0xF0, 0x50, 0x17, 0xED, 0x24, 0x05, 0xFF, 0xE4, 0x33, 0xFE, 0xD1, \r
-0x38, 0xE0, 0x12, 0xAB, 0xF0, 0x50, 0x08, 0x12, 0xAB, 0x81, 0xE0, 0x65, 0x53, 0x60, 0x2A, 0xE5, \r
-0x5B, 0x70, 0x05, 0x75, 0x5B, 0x01, 0x80, 0x0D, 0xE5, 0x5B, 0xB4, 0x01, 0x05, 0x75, 0x5B, 0x03, \r
-0x80, 0x03, 0x75, 0x5B, 0x05, 0xD1, 0x38, 0xE0, 0xFF, 0x12, 0xAC, 0x1A, 0xEF, 0xF0, 0x74, 0x11, \r
-0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x9B, 0x80, 0x18, 0xB1, 0xFE, 0xE4, 0xF0, 0x12, 0xAB, 0x61, \r
-0xE0, 0x04, 0xF0, 0x80, 0x10, 0xE4, 0xF5, 0x5B, 0x74, 0x11, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, \r
-0x9C, 0xF5, 0x83, 0xE4, 0xF0, 0x12, 0xAB, 0x81, 0xE5, 0x53, 0xF0, 0x12, 0x51, 0x14, 0xC4, 0x13, \r
-0x13, 0x54, 0x03, 0x20, 0xE0, 0x02, 0xA1, 0xCB, 0x12, 0xAB, 0x61, 0xE4, 0xF0, 0xB1, 0xFC, 0xE4, \r
-0xF0, 0xA1, 0xCB, 0xEC, 0x64, 0x06, 0x60, 0x02, 0xA1, 0xDB, 0xF5, 0x54, 0xF5, 0x55, 0xD1, 0x45, \r
-0xE0, 0x54, 0x07, 0xF5, 0x5B, 0x12, 0xAC, 0x83, 0x40, 0x05, 0x75, 0x59, 0x05, 0x80, 0x13, 0xD3, \r
-0xE5, 0x57, 0x94, 0xFA, 0xE5, 0x56, 0x94, 0x00, 0x40, 0x05, 0x75, 0x59, 0x02, 0x80, 0x03, 0xE4, \r
-0xF5, 0x59, 0x12, 0xAD, 0x01, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, \r
-0x42, 0x24, 0xE4, 0x93, 0xFD, 0x7C, 0x00, 0x12, 0x07, 0x03, 0x90, 0xA1, 0x0E, 0xEE, 0xF0, 0xA3, \r
-0xEF, 0xF0, 0xE4, 0xF5, 0x5A, 0xD1, 0x0A, 0x75, 0xF0, 0x02, 0xE5, 0x5A, 0x12, 0xAB, 0xCA, 0x80, \r
-0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xE5, 0x5A, 0x90, 0x42, 0x1F, 0x93, 0x12, \r
-0xAB, 0x99, 0xC3, 0x90, 0xA1, 0x0F, 0xE0, 0x95, 0x55, 0x90, 0xA1, 0x0E, 0xE0, 0x95, 0x54, 0x40, \r
-0x07, 0x05, 0x5A, 0xE5, 0x5A, 0xB4, 0x05, 0xCD, 0xE5, 0x5A, 0xC3, 0x13, 0xF5, 0x5A, 0xE5, 0x5B, \r
-0x24, 0x01, 0xFF, 0xE4, 0x33, 0xA2, 0xE7, 0x13, 0xEF, 0x13, 0xFF, 0xD3, 0x95, 0x5A, 0x40, 0x06, \r
-0xEF, 0x95, 0x5A, 0xFF, 0x80, 0x02, 0xE4, 0xFF, 0xD1, 0x10, 0xE0, 0xC3, 0x13, 0xFE, 0xEF, 0xC4, \r
-0x33, 0x54, 0xE0, 0x2E, 0x04, 0xFE, 0xD1, 0x10, 0xEE, 0xF0, 0xD1, 0x10, 0xE0, 0xC3, 0x94, 0xC0, \r
-0x40, 0x05, 0xD1, 0x10, 0x74, 0xC0, 0xF0, 0xD1, 0x10, 0x12, 0x4F, 0xD3, 0x25, 0xE0, 0xFF, 0x70, \r
-0x04, 0xF5, 0x5B, 0x80, 0x04, 0xEF, 0x14, 0xF5, 0x5B, 0xD3, 0x90, 0xA1, 0x04, 0xE0, 0x94, 0x03, \r
-0x90, 0xA1, 0x03, 0xE0, 0x94, 0x00, 0x40, 0x03, 0xE4, 0xF5, 0x5B, 0xD1, 0x45, 0xE0, 0x54, 0xF8, \r
-0x90, 0xA1, 0x10, 0xF0, 0x45, 0x5B, 0xFF, 0xD1, 0x44, 0xEF, 0xF0, 0xB1, 0xFE, 0xE0, 0xD3, 0x94, \r
-0x05, 0x74, 0x11, 0x50, 0x07, 0xD1, 0x00, 0xE0, 0x04, 0xF0, 0x80, 0x04, 0xD1, 0x00, 0xE4, 0xF0, \r
-0xE4, 0xFD, 0xAF, 0x51, 0x12, 0x78, 0xFC, 0x05, 0x51, 0x01, 0x5E, 0x22, 0xF5, 0x5B, 0x74, 0x11, \r
-0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x9C, 0xF5, 0x83, 0x22, 0x90, 0xA1, 0x00, 0x02, 0x45, 0xB5, \r
-0x74, 0x01, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0x22, 0xE5, 0x56, 0xC3, 0x13, \r
-0xFE, 0xE5, 0x57, 0x13, 0x22, 0x12, 0x07, 0xAB, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0x22, 0xD2, 0xAF, \r
-0xC2, 0xAF, 0x90, 0x9E, 0x92, 0xE0, 0xFF, 0x22, 0x74, 0x11, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, \r
-0x9A, 0xF5, 0x83, 0x22, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x51, 0x90, 0x81, 0x01, 0x02, 0x45, 0xA9, \r
-0x74, 0x11, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x98, 0xF5, 0x83, 0x22, 0xE9, 0x25, 0xE0, 0x25, \r
-0xE0, 0x24, 0x73, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x12, 0x45, 0x7D, 0xEB, 0x25, 0xE0, \r
-0x24, 0x91, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0xAB, 0x07, 0x75, 0xF0, 0x10, 0xEB, \r
-0x12, 0x7B, 0x91, 0xE0, 0xF5, 0x5E, 0xE4, 0xF5, 0x62, 0xE5, 0x5E, 0x54, 0x7F, 0xF9, 0xE5, 0x5E, \r
-0x54, 0x80, 0xFA, 0x75, 0xF0, 0x04, 0xEB, 0x12, 0x57, 0xEF, 0xE0, 0xF5, 0x60, 0x75, 0xF0, 0x04, \r
-0xEB, 0x12, 0x51, 0x19, 0xFF, 0xC4, 0x54, 0x03, 0xF5, 0x61, 0xD1, 0x5C, 0xEE, 0xF0, 0xA3, 0xEF, \r
-0xF0, 0xE5, 0x5E, 0x4A, 0xFF, 0x74, 0x91, 0x2B, 0x12, 0x7D, 0x53, 0xEF, 0xF0, 0x75, 0xF0, 0x04, \r
-0xEB, 0x12, 0x51, 0x19, 0x13, 0x13, 0x54, 0x03, 0xF5, 0x5F, 0x74, 0x91, 0x2B, 0x12, 0xAC, 0x54, \r
-0xE9, 0x64, 0x2C, 0x70, 0x2A, 0x75, 0xF0, 0x04, 0xEB, 0x12, 0x51, 0x19, 0xFF, 0x54, 0x03, 0xFE, \r
-0xE5, 0x5F, 0xC3, 0x9E, 0x50, 0x19, 0x05, 0x5F, 0x12, 0x7E, 0x8D, 0xFE, 0x75, 0xF0, 0x04, 0xEB, \r
-0x90, 0x96, 0x14, 0x12, 0x45, 0xA9, 0xEF, 0x54, 0xF3, 0x4E, 0xF0, 0x89, 0x5E, 0xE1, 0x80, 0xE9, \r
-0xC3, 0x95, 0x60, 0x50, 0x48, 0xE9, 0x04, 0xFD, 0xED, 0xD3, 0x95, 0x60, 0x50, 0x72, 0xED, 0x12, \r
-0xAC, 0x97, 0xEB, 0x12, 0x55, 0x2D, 0xE0, 0xF5, 0x82, 0x75, 0x83, 0x00, 0xED, 0x54, 0x07, 0x12, \r
-0x7C, 0xC6, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x12, 0xAC, 0x8D, 0x60, \r
-0x19, 0xB9, 0x13, 0x10, 0x79, 0x18, 0x89, 0x5E, 0x74, 0x91, 0x2B, 0x12, 0x56, 0x59, 0xE0, 0x44, \r
-0x04, 0xF0, 0x80, 0x3C, 0xA9, 0x05, 0x89, 0x5E, 0x80, 0x36, 0x0D, 0x80, 0xBB, 0xE9, 0x65, 0x60, \r
-0x70, 0x23, 0x75, 0xF0, 0x04, 0xEB, 0x12, 0x56, 0x3C, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, \r
-0x0C, 0xE5, 0x5E, 0x20, 0xE7, 0x07, 0xE9, 0x44, 0x80, 0xF5, 0x5E, 0x80, 0x13, 0xD1, 0x5C, 0xEE, \r
-0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x74, 0x91, 0x2B, 0x12, 0x7D, 0x53, 0xE5, 0x60, 0xF0, 0xF5, 0x5E, \r
-0xAF, 0x03, 0x85, 0x5F, 0x6A, 0x7B, 0x01, 0xAD, 0x5E, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
-0x8F, 0x67, 0x8D, 0x68, 0x8B, 0x69, 0xE4, 0x90, 0xA1, 0xD2, 0xF0, 0xE5, 0x67, 0x13, 0x13, 0x13, \r
-0x54, 0x1F, 0x90, 0xA1, 0xCD, 0xF0, 0xE5, 0x67, 0x54, 0x07, 0x90, 0xA1, 0xCF, 0xF0, 0x75, 0xF0, \r
-0x10, 0xEF, 0xD1, 0x4A, 0xE0, 0x90, 0xA1, 0xD0, 0x12, 0x57, 0xEA, 0xE0, 0x54, 0x7F, 0x90, 0xA1, \r
-0xD3, 0xF0, 0x75, 0xF0, 0x04, 0xE5, 0x67, 0x12, 0x56, 0xF1, 0xE0, 0x90, 0xA1, 0xD4, 0xF0, 0x12, \r
-0x7C, 0xE4, 0xE5, 0x69, 0x70, 0x1F, 0xE0, 0xFB, 0x12, 0xAB, 0x0F, 0xE4, 0x93, 0xFE, 0x74, 0x01, \r
-0x93, 0xFF, 0xE4, 0xFC, 0xFD, 0xEB, 0x12, 0x7C, 0xF3, 0x12, 0x7F, 0xD0, 0xE5, 0x67, 0xD1, 0x6E, \r
-0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA1, 0xD3, 0xE0, 0xFF, 0x90, 0xA1, 0xCE, 0xE0, 0xFE, 0xD3, \r
-0x9F, 0x40, 0x0B, 0xE5, 0x68, 0x54, 0x80, 0xFD, 0xEF, 0x4D, 0xF5, 0x68, 0x80, 0x0C, 0x90, 0xA1, \r
-0xD4, 0xE0, 0xFF, 0xEE, 0xC3, 0x9F, 0x50, 0x02, 0x8F, 0x68, 0x91, 0xE4, 0xE5, 0x68, 0x54, 0x80, \r
-0x90, 0xA1, 0xD1, 0xF0, 0xE5, 0x69, 0x70, 0x29, 0x90, 0xA1, 0xCD, 0xE0, 0x24, 0x81, 0x11, 0xDA, \r
-0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, 0xA1, 0xCF, 0x11, 0xF4, 0x80, 0x02, 0xC3, 0x33, 0xD8, \r
-0xFC, 0xF4, 0x5F, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x90, 0xA1, 0xD0, 0xE0, 0x54, 0x7F, 0xF0, 0x80, \r
-0x45, 0x90, 0xA1, 0xCD, 0xE0, 0x24, 0x81, 0x11, 0xDA, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, \r
-0xA1, 0xCF, 0x11, 0xF4, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0xD0, 0x82, 0xD0, 0x83, 0xF0, \r
-0x75, 0xF0, 0x10, 0xE5, 0x67, 0x12, 0x76, 0x4A, 0xE0, 0x54, 0x07, 0xFF, 0x90, 0xA1, 0xD0, 0xF0, \r
-0x90, 0xA1, 0xCE, 0xE0, 0x90, 0x41, 0xF7, 0x93, 0xFE, 0x33, 0x33, 0x33, 0x54, 0xF8, 0x4F, 0x90, \r
-0xA1, 0xD0, 0xF0, 0x44, 0x80, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x67, 0x71, 0x91, 0xE5, 0x68, 0xF0, \r
-0xE5, 0x67, 0x70, 0x06, 0x90, 0x01, 0xC8, 0xE5, 0x68, 0xF0, 0x90, 0xA1, 0xD0, 0xE0, 0xFF, 0x75, \r
-0xF0, 0x10, 0xE5, 0x67, 0x12, 0x76, 0x4A, 0xEF, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x67, 0x11, 0xE8, \r
-0xE0, 0x54, 0xFC, 0xFF, 0xE5, 0x6A, 0x12, 0xAD, 0x11, 0xE5, 0x67, 0x11, 0xE8, 0xEF, 0xF0, 0x7D, \r
-0x01, 0xAF, 0x67, 0x11, 0xFC, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, \r
-0x83, 0x22, 0x8F, 0x57, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x05, 0x02, 0x45, 0xA9, 0x75, 0xF0, \r
-0x03, 0x12, 0x45, 0xA9, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x22, 0xD3, 0x10, 0xAF, 0x01, \r
-0xC3, 0xC0, 0xD0, 0xED, 0x60, 0x27, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x8D, 0x01, 0x31, 0x3E, 0x90, \r
-0x8D, 0x03, 0x31, 0x3E, 0x90, 0x8D, 0x05, 0x31, 0x3E, 0x90, 0x8D, 0x07, 0x31, 0x3E, 0x90, 0x8D, \r
-0x09, 0x12, 0x45, 0xA9, 0xE4, 0xF0, 0xA3, 0x51, 0xC0, 0x12, 0xAB, 0xAA, 0xF0, 0x31, 0x4A, 0xE0, \r
-0x54, 0xBF, 0x44, 0x80, 0xFE, 0x31, 0x4A, 0xEE, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x45, \r
-0xA9, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x22, 0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, \r
-0x03, 0x02, 0x45, 0xA9, 0x90, 0xA1, 0x4A, 0xEF, 0xF0, 0x7E, 0x00, 0x7F, 0x10, 0x7D, 0x00, 0x7B, \r
-0x01, 0x7A, 0xA1, 0x79, 0x4C, 0x12, 0x08, 0xAA, 0x90, 0x9F, 0x9C, 0xE0, 0x90, 0xA1, 0x5E, 0xF0, \r
-0xE4, 0x90, 0xA1, 0x4B, 0xF0, 0x90, 0xA1, 0x5E, 0xE0, 0xFE, 0x90, 0xA1, 0x4B, 0xE0, 0xFD, 0xC3, \r
-0x9E, 0x50, 0x40, 0xED, 0x51, 0xAA, 0xED, 0x54, 0x07, 0xA3, 0xF0, 0x75, 0xF0, 0x10, 0xED, 0x31, \r
-0x4E, 0xE0, 0x30, 0xE7, 0x09, 0x74, 0x81, 0x2D, 0x51, 0x90, 0xE4, 0xF0, 0x80, 0x1D, 0xAF, 0x05, \r
-0x91, 0xDD, 0x51, 0xCE, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, 0xA1, 0x5D, 0x11, 0xF4, 0x80, \r
-0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x90, 0xA1, 0x4B, 0xE0, 0x04, \r
-0xF0, 0x80, 0xB2, 0x7F, 0x0C, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0xE4, 0x90, 0xA1, 0x4B, 0xF0, 0x90, \r
-0xA1, 0x5E, 0xE0, 0xFF, 0x90, 0xA1, 0x4B, 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x02, 0x41, 0x89, 0xEE, \r
-0x51, 0xAA, 0xEE, 0x54, 0x07, 0xA3, 0xF0, 0x91, 0xC5, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, \r
-0xCE, 0xD8, 0xF9, 0x4E, 0x7F, 0x00, 0x70, 0x02, 0x7F, 0x01, 0x51, 0xCE, 0xE0, 0x5F, 0x60, 0x02, \r
-0x41, 0x81, 0x51, 0x98, 0x90, 0x81, 0x06, 0x51, 0xA1, 0xEF, 0x90, 0x81, 0x07, 0x51, 0xB4, 0xFC, \r
-0x51, 0xC2, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x10, 0xEC, 0x90, 0x81, 0x0A, 0x51, 0xA1, \r
-0xEC, 0x90, 0x81, 0x0B, 0x51, 0xB4, 0x75, 0xF0, 0x0A, 0x51, 0x8A, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, \r
-0x7F, 0x01, 0x90, 0xA1, 0x4B, 0xE0, 0xFE, 0x75, 0xF0, 0x10, 0x90, 0x81, 0x0B, 0x12, 0x55, 0x30, \r
-0xE0, 0xFD, 0x75, 0xF0, 0x0A, 0xEE, 0x51, 0x8A, 0x75, 0xF0, 0x02, 0xEF, 0x12, 0x45, 0xA9, 0xE4, \r
-0xF0, 0xA3, 0xED, 0xF0, 0x0F, 0xEF, 0xB4, 0x05, 0xD9, 0x51, 0x98, 0x90, 0x81, 0x09, 0x12, 0x45, \r
-0xA9, 0xE0, 0xFE, 0x74, 0x91, 0x2F, 0xF1, 0xD8, 0xEE, 0xF0, 0x90, 0xA1, 0x4B, 0xE0, 0xFF, 0x90, \r
-0xA1, 0x4A, 0xE0, 0xFD, 0x11, 0xFC, 0x90, 0xA1, 0x4B, 0xE0, 0x24, 0x81, 0x51, 0x90, 0x74, 0x01, \r
-0xF0, 0x90, 0xA1, 0x4B, 0xE0, 0x04, 0xF0, 0x21, 0xCF, 0x22, 0x90, 0x8D, 0x01, 0x02, 0x45, 0xA9, \r
-0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0x22, 0x90, 0xA1, 0x4B, 0xE0, 0xFF, 0x75, 0xF0, 0x10, \r
-0x22, 0x12, 0x45, 0xA9, 0xE0, 0xFD, 0x75, 0xF0, 0x10, 0x22, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, \r
-0xA1, 0x5C, 0xF0, 0x22, 0x12, 0x45, 0xA9, 0xE0, 0xFE, 0xED, 0xFF, 0x90, 0xA1, 0x4B, 0xE0, 0x22, \r
-0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0x90, 0xA1, \r
-0x5C, 0xE0, 0x24, 0x4C, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0x22, 0xE4, 0xF5, 0x63, 0x90, \r
-0x9F, 0x9C, 0xE0, 0xFF, 0xE5, 0x63, 0xC3, 0x9F, 0x40, 0x02, 0x61, 0x8A, 0xAF, 0x63, 0x12, 0x5F, \r
-0x2F, 0xEF, 0x70, 0x02, 0x61, 0x86, 0xE5, 0x63, 0x13, 0x13, 0x13, 0x54, 0x1F, 0xFF, 0xE5, 0x63, \r
-0x54, 0x07, 0xFE, 0x74, 0x81, 0x2F, 0x11, 0xDA, 0xE0, 0xFD, 0xAF, 0x06, 0x91, 0xC7, 0x08, 0x80, \r
-0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x60, 0x69, 0x75, 0xF0, 0x10, \r
-0xE5, 0x63, 0x12, 0x76, 0x4A, 0xE0, 0x20, 0xE7, 0x02, 0x80, 0x10, 0x75, 0xF0, 0x10, 0xE5, 0x63, \r
-0x90, 0x81, 0x02, 0x12, 0x45, 0xA9, 0xE0, 0xFF, 0x20, 0xE7, 0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, \r
-0x20, 0xF0, 0x80, 0x42, 0xEF, 0x30, 0xE6, 0x12, 0x75, 0xF0, 0x10, 0xE5, 0x63, 0x71, 0x91, 0x71, \r
-0xAA, 0x12, 0x51, 0x19, 0x71, 0xA3, 0xE4, 0xFB, 0x80, 0x27, 0x71, 0x97, 0xE0, 0x04, 0xF0, 0x71, \r
-0x97, 0xE0, 0xD3, 0x94, 0x01, 0x40, 0x0A, 0xAF, 0x63, 0xB1, 0x03, 0x71, 0x97, 0xE4, 0xF0, 0x80, \r
-0x15, 0x75, 0xF0, 0x10, 0xE5, 0x63, 0x71, 0x91, 0x71, 0xAA, 0x12, 0x51, 0x19, 0x71, 0xA3, 0x7B, \r
-0x01, 0xAF, 0x63, 0x12, 0x77, 0x89, 0x05, 0x63, 0x41, 0xDF, 0x22, 0xF0, 0x75, 0xF0, 0x10, 0xE5, \r
-0x51, 0x90, 0x81, 0x00, 0x02, 0x45, 0xA9, 0x74, 0x11, 0x25, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x9D, \r
-0xF5, 0x83, 0x22, 0x13, 0x13, 0x54, 0x03, 0xF5, 0x6A, 0x22, 0xE0, 0xFD, 0x75, 0xF0, 0x04, 0xE5, \r
-0x63, 0x22, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0xA2, 0x26, 0xF0, 0x90, 0xA2, 0x26, 0xE0, \r
-0xFD, 0x70, 0x02, 0x81, 0xBB, 0x90, 0x9E, 0xEF, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, \r
-0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x9E, 0xF0, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, \r
-0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0xA2, 0x1B, \r
-0x91, 0xC5, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, \r
-0x02, 0x81, 0x9E, 0xE4, 0x90, 0xA2, 0x27, 0xF0, 0x90, 0xA2, 0x27, 0xE0, 0xF9, 0xC3, 0x94, 0x04, \r
-0x50, 0x41, 0x91, 0xBD, 0xA4, 0xFF, 0xE9, 0xFD, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, \r
-0x74, 0xD0, 0x91, 0xCE, 0xF1, 0x49, 0xE5, 0x82, 0x29, 0x12, 0x55, 0x36, 0xEF, 0x91, 0xBC, 0xA4, \r
-0x2D, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xF0, 0x91, 0xCE, 0x75, 0xF0, 0x08, 0x90, 0x9E, 0xA3, \r
-0x12, 0x45, 0xA9, 0xE5, 0x82, 0x29, 0x12, 0x55, 0x36, 0xEF, 0xF0, 0x90, 0xA2, 0x27, 0xE0, 0x04, \r
-0xF0, 0x80, 0xB5, 0x90, 0xA2, 0x26, 0xE0, 0xFF, 0x90, 0xA2, 0x1B, 0x11, 0xF4, 0x80, 0x02, 0xC3, \r
-0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0xA2, 0x26, 0xF0, 0x90, 0xA2, 0x1B, 0xE0, 0xFF, 0x74, 0x01, \r
-0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0xA2, 0x1B, \r
-0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x90, 0x9E, 0xF0, 0x12, 0x6F, 0xD8, 0xB4, 0x0A, 0x02, \r
-0x7F, 0x01, 0xEF, 0x70, 0x02, 0x61, 0xBC, 0xE4, 0x90, 0x9E, 0xF0, 0xF0, 0x61, 0xBC, 0x90, 0x01, \r
-0xC0, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0xA2, 0x1B, 0xE0, 0x44, 0x80, 0x90, 0x00, 0x8A, 0x91, 0xBC, \r
-0x90, 0x01, 0xD0, 0x12, 0x45, 0xA9, 0xE0, 0x90, 0x01, 0xC3, 0xF0, 0x22, 0xF0, 0x90, 0xA2, 0x1B, \r
-0xE0, 0x75, 0xF0, 0x04, 0x22, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x22, 0x2F, 0xF5, \r
-0x82, 0x74, 0x01, 0x3E, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x9E, 0xF0, 0xE0, 0x22, 0x31, 0x4A, 0xE0, \r
-0x44, 0x40, 0xF0, 0x22, 0xE5, 0x68, 0x54, 0x7F, 0x90, 0xA1, 0xCE, 0xF0, 0x22, 0xFF, 0xE4, 0xFC, \r
-0xFD, 0xE5, 0x53, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x73, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, \r
-0x02, 0x45, 0x99, 0x75, 0xF0, 0x04, 0xEF, 0x12, 0x51, 0x19, 0xFE, 0x13, 0x13, 0x54, 0x03, 0xFC, \r
-0x12, 0x57, 0xEB, 0xE0, 0xFB, 0xB1, 0x50, 0xE0, 0x54, 0x7F, 0xFD, 0x64, 0x2C, 0x70, 0x1C, 0xEE, \r
-0x54, 0x03, 0xFE, 0xEC, 0xD3, 0x9E, 0x50, 0x13, 0xEC, 0x60, 0x10, 0x1C, 0xEC, 0xD1, 0x8F, 0xFE, \r
-0x75, 0xF0, 0x04, 0xEF, 0x12, 0x51, 0x19, 0x54, 0xF3, 0x4E, 0xF0, 0xED, 0xD3, 0x9B, 0x40, 0x02, \r
-0xAD, 0x03, 0xB1, 0x50, 0xE0, 0x54, 0x80, 0x42, 0x05, 0x8C, 0x6A, 0xE4, 0xFB, 0x02, 0x77, 0x89, \r
-0x74, 0x91, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x9D, 0xF5, 0x83, 0x22, 0x7D, 0x01, 0xAF, 0x51, 0xAA, \r
-0x07, 0xAB, 0x05, 0x75, 0xF0, 0x10, 0xEA, 0x71, 0x91, 0xE0, 0xF5, 0x5E, 0x54, 0x7F, 0xF5, 0x60, \r
-0x75, 0xF0, 0x04, 0xEA, 0x12, 0x56, 0xF1, 0xE0, 0x90, 0xA1, 0x13, 0xF0, 0x75, 0xF0, 0x04, 0xEA, \r
-0x12, 0x57, 0xEF, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xEA, 0x12, 0x51, 0x19, 0x13, 0x13, 0x54, 0x03, \r
-0xF5, 0x5F, 0xE5, 0x60, 0x12, 0xAB, 0x0F, 0xE4, 0x93, 0xFC, 0x74, 0x01, 0x93, 0xFD, 0xEA, 0x12, \r
-0x76, 0x6E, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x75, 0xF0, 0x04, 0xEA, 0x12, 0x51, 0x19, 0xFE, 0xC4, \r
-0x54, 0x03, 0x90, 0xA1, 0x11, 0xF0, 0x74, 0x91, 0x2A, 0xB1, 0x53, 0xE5, 0x60, 0xF0, 0x74, 0x91, \r
-0x2A, 0x12, 0xAC, 0x54, 0xE5, 0x60, 0xD3, 0x9F, 0x40, 0x04, 0x8F, 0x60, 0x8F, 0x5E, 0xEB, 0x70, \r
-0x02, 0xC1, 0x81, 0xAF, 0x03, 0x8F, 0x61, 0xE5, 0x5E, 0x30, 0xE7, 0x05, 0x85, 0x60, 0x5E, 0x15, \r
-0x61, 0xE5, 0x61, 0x70, 0x02, 0xC1, 0x81, 0xE5, 0x60, 0x64, 0x2C, 0x70, 0x20, 0xE5, 0x5F, 0xD3, \r
-0x94, 0x00, 0x40, 0x19, 0xE5, 0x5F, 0xD3, 0x94, 0x02, 0x50, 0x12, 0x15, 0x5F, 0xD1, 0x8D, 0xFF, \r
-0x75, 0xF0, 0x04, 0xEA, 0x12, 0x51, 0x19, 0x54, 0xF3, 0x4F, 0xF0, 0x15, 0x61, 0xE5, 0x61, 0x60, \r
-0x70, 0x90, 0xA1, 0x13, 0xE0, 0xFF, 0xE5, 0x60, 0xD3, 0x9F, 0x40, 0x5F, 0xE4, 0x90, 0xA1, 0x12, \r
-0xF0, 0x85, 0x60, 0x5E, 0xAD, 0x5E, 0xE5, 0x60, 0x14, 0xFC, 0x90, 0xA1, 0x13, 0xE0, 0xFF, 0xEC, \r
-0xC3, 0x9F, 0x40, 0x41, 0xEC, 0x12, 0xAC, 0x97, 0xEA, 0x12, 0x55, 0x2D, 0xE0, 0xF5, 0x82, 0x75, \r
-0x83, 0x00, 0xEC, 0x54, 0x07, 0x91, 0xC6, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, \r
-0xF9, 0x12, 0xAC, 0x8D, 0x60, 0x1C, 0xE5, 0x60, 0xAD, 0x04, 0xB4, 0x14, 0x02, 0x7D, 0x0C, 0x90, \r
-0xA1, 0x12, 0xE0, 0x04, 0xF0, 0xE0, 0x65, 0x61, 0x60, 0x0B, 0xA3, 0xE0, 0xFF, 0xED, 0xD3, 0x9F, \r
-0x40, 0x03, 0x1C, 0x80, 0xB5, 0xAF, 0x05, 0x8F, 0x5E, 0x80, 0x06, 0x90, 0xA1, 0x13, 0xE0, 0xF5, \r
-0x5E, 0xAF, 0x02, 0x85, 0x5F, 0x6A, 0xE4, 0xFB, 0xAD, 0x5E, 0x02, 0x77, 0x89, 0xE5, 0x5F, 0x54, \r
-0x03, 0x25, 0xE0, 0x25, 0xE0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x2E, \r
-0xEF, 0xF0, 0xD1, 0xE8, 0x30, 0xE6, 0x3C, 0x7F, 0x8D, 0x12, 0x47, 0xAF, 0xEF, 0x64, 0x01, 0x70, \r
-0x32, 0x90, 0xA2, 0x2F, 0xF0, 0x90, 0xA2, 0x2F, 0xE0, 0xFD, 0x90, 0xA2, 0x2E, 0xE0, 0x75, 0xF0, \r
-0x10, 0x71, 0x91, 0xE5, 0x82, 0x2D, 0x12, 0x55, 0x36, 0xE0, 0xFB, 0xE4, 0xFF, 0x12, 0x50, 0xE6, \r
-0x90, 0xA2, 0x2F, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x10, 0x40, 0xD9, 0xD1, 0xE8, 0x30, 0xE0, \r
-0x02, 0xF1, 0x58, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x8F, 0x12, 0x47, 0xAF, 0xEF, 0x22, 0xD3, \r
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x9E, 0xF0, 0xE0, 0xFF, 0x90, 0x9E, 0xEF, 0xE0, 0xB5, \r
-0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x39, 0x90, 0x9E, 0xEF, 0xE0, 0xFE, \r
-0xF1, 0x49, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0xA0, 0xF9, 0x74, 0x9E, 0x35, 0xF0, \r
-0xFA, 0x7B, 0x01, 0xAF, 0x05, 0x12, 0x51, 0xFD, 0x90, 0x9E, 0xEF, 0x12, 0x6F, 0xD8, 0xB4, 0x0A, \r
-0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x9E, 0xEF, 0xF0, 0x71, 0xB2, 0x90, 0x9E, 0x92, \r
-0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0xF0, 0x08, 0x90, 0x9E, 0x9F, 0x02, \r
-0x45, 0xA9, 0x41, 0xDC, 0xE4, 0xFF, 0x21, 0x54, 0xE4, 0xFD, 0x7F, 0x8D, 0x02, 0x46, 0xA0, 0x11, \r
-0xE2, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0x11, 0xE2, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0xF1, 0xC2, 0x12, \r
-0x6A, 0x87, 0xFF, 0xF5, 0x55, 0x12, 0x06, 0x89, 0xFE, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0x12, 0x56, \r
-0xDE, 0xF5, 0x56, 0x80, 0x02, 0x8F, 0x56, 0x85, 0x55, 0x54, 0xE5, 0x54, 0xD3, 0x95, 0x56, 0x50, \r
-0x22, 0x12, 0x57, 0xE3, 0x12, 0x06, 0x89, 0x54, 0x01, 0xFD, 0xAF, 0x54, 0x12, 0x61, 0xD3, 0xAF, \r
-0x54, 0x12, 0x5F, 0x2F, 0xEF, 0xAF, 0x54, 0x70, 0x04, 0xF1, 0x66, 0x80, 0x02, 0xF1, 0x5F, 0x05, \r
-0x54, 0x80, 0xD7, 0xE5, 0x55, 0x70, 0x0A, 0xFF, 0x12, 0x5F, 0x2F, 0xEF, 0x70, 0x03, 0x12, 0xAB, \r
-0x6D, 0x22, 0x8B, 0x51, 0x8A, 0x52, 0x89, 0x53, 0x22, 0x71, 0xB2, 0x7F, 0x02, 0x02, 0x6F, 0x57, \r
-0x12, 0x45, 0x39, 0x78, 0x01, 0x02, 0x08, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x98, 0xF5, 0x83, 0x22, \r
-0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, \r
-0xE0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x7F, 0x12, 0x80, 0x08, 0xD0, 0x07, 0xD0, 0x05, 0xD0, \r
-0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xFF, 0xA3, 0xF0, 0xED, 0x04, 0x90, 0x01, 0xC4, \r
-0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, \r
-0xC0, 0x05, 0xC0, 0x07, 0x7D, 0x15, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x80, 0x11, 0x08, 0xD0, \r
-0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, \r
-0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, \r
-0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x3C, 0xF0, 0x74, \r
-0x80, 0xA3, 0xF0, 0x11, 0xAE, 0xE5, 0x14, 0x30, 0xE7, 0x02, 0x11, 0x92, 0x74, 0x3C, 0x04, 0x90, \r
-0x01, 0xC4, 0xF0, 0x74, 0x80, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, \r
-0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, \r
-0xE0, 0x32, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3D, 0xC2, 0x7F, 0xF2, 0x12, 0x47, 0xAF, 0xEF, 0x20, \r
-0xE6, 0x0B, 0x7F, 0x05, 0x12, 0x47, 0xF7, 0xFD, 0x7F, 0x05, 0x12, 0x46, 0xA0, 0x22, 0x7F, 0x54, \r
-0x12, 0x47, 0xAF, 0xE5, 0x0D, 0x5F, 0xF5, 0x11, 0x7F, 0x55, 0x12, 0x47, 0xAF, 0xE5, 0x0E, 0x5F, \r
-0xF5, 0x12, 0x7F, 0x56, 0x12, 0x47, 0xAF, 0xE5, 0x0F, 0x5F, 0xF5, 0x13, 0x7F, 0x57, 0x12, 0x47, \r
-0xAF, 0xE5, 0x10, 0x5F, 0xF5, 0x14, 0xAD, 0x11, 0x7F, 0x54, 0x12, 0x46, 0xA0, 0xAD, 0x12, 0x7F, \r
-0x55, 0x12, 0x46, 0xA0, 0xAD, 0x13, 0x7F, 0x56, 0x12, 0x46, 0xA0, 0xAD, 0x14, 0x7F, 0x57, 0x12, \r
-0x46, 0xA0, 0x53, 0x91, 0xEF, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, \r
+0x56, 0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x4F, 0xFF, 0x22, 0xC3, 0xEF, 0x9B, 0xFF, 0xEE, 0x9A, 0xFE, \r
+0xED, 0x99, 0xFD, 0xEC, 0x98, 0xFC, 0x22, 0xEF, 0x5B, 0xFF, 0xEE, 0x5A, 0xFE, 0xED, 0x59, 0xFD, \r
+0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC, 0x48, 0xFC, \r
+0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8, 0x9C, 0x45, \r
+0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xE0, 0xF8, \r
+0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5, 0x82, 0xE5, \r
+0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x22, 0xEB, \r
+0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, \r
+0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, \r
+0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0x02, 0x46, \r
+0x0C, 0x02, 0x43, 0x6D, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, \r
+0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, \r
+0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, \r
+0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x46, 0x51, 0xE4, \r
+0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, \r
+0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, \r
+0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, \r
+0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, \r
+0xBE, 0x41, 0xA2, 0xEC, 0x00, 0x41, 0xA2, 0xED, 0x00, 0x41, 0xA2, 0xEE, 0x00, 0x41, 0xA2, 0xF2, \r
+0x00, 0x01, 0x6E, 0x00, 0x41, 0xA2, 0xF3, 0x00, 0x41, 0xA2, 0xF4, 0x00, 0x41, 0xA3, 0x1A, 0x00, \r
+0x00, 0x5F, 0xFE, 0x67, 0xF4, 0x6F, 0xF1, 0x7F, 0x02, 0xD1, 0xAB, 0xEF, 0x44, 0x01, 0xFD, 0x7F, \r
+0x02, 0xD1, 0x8D, 0x7F, 0x02, 0xD1, 0xAB, 0xEF, 0x54, 0xFE, 0xFD, 0x7F, 0x02, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0x12, 0xBC, 0xBB, 0xD0, 0xD0, 0x92, \r
+0xAF, 0x22, 0x7F, 0x48, 0x7E, 0x09, 0x12, 0x38, 0x45, 0x7F, 0x64, 0xD3, 0x10, 0xAF, 0x01, 0xC3, \r
+0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xE0, 0x90, 0xA3, 0x0F, 0x12, 0xBC, 0xBB, 0x90, 0xA3, \r
+0x0F, 0xE0, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, \r
+0xA2, 0xC0, 0xEF, 0xF0, 0x90, 0xA2, 0xC2, 0xEB, 0xF0, 0xED, 0x60, 0x02, 0xE1, 0x70, 0x90, 0x07, \r
+0x6E, 0xE0, 0x44, 0x08, 0xF0, 0x12, 0xAE, 0xD3, 0x90, 0xA2, 0xC2, 0xE0, 0x70, 0x3C, 0xF1, 0xD4, \r
+0x90, 0xA2, 0xC0, 0xE0, 0x70, 0x2D, 0x12, 0xBC, 0xA9, 0x70, 0x12, 0x12, 0x37, 0x4E, 0xE4, 0xFF, \r
+0x74, 0x02, 0xFE, 0xEC, 0xF1, 0xCE, 0xD1, 0xA2, 0xEF, 0x54, 0xFE, 0x80, 0x11, 0x12, 0x37, 0x4E, \r
+0xE4, 0xFE, 0x74, 0x80, 0xFF, 0xE4, 0xEC, 0xF1, 0xCE, 0xD1, 0xA2, 0xEF, 0x44, 0x01, 0xFD, 0x7F, \r
+0x64, 0xD1, 0x8D, 0x7F, 0x4E, 0x12, 0x78, 0xB7, 0xE1, 0xBB, 0xF1, 0xD4, 0x90, 0xA2, 0xC0, 0xE0, \r
+0x70, 0x10, 0x12, 0x5A, 0xE3, 0xE4, 0xFF, 0xFE, 0xEC, 0xF1, 0xCE, 0x7F, 0x48, 0x7E, 0x09, 0x12, \r
+0x38, 0x45, 0x12, 0xBC, 0xA0, 0xF1, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x4F, 0xD1, 0x8D, 0x12, 0xBC, \r
+0x3D, 0x74, 0x66, 0xFF, 0xEC, 0xF1, 0xCE, 0x7F, 0x30, 0x7E, 0x09, 0x12, 0x38, 0x45, 0x12, 0xA8, \r
+0xAB, 0x54, 0xFC, 0xFF, 0xEF, 0x44, 0x01, 0xFF, 0xEC, 0xF1, 0xCE, 0x12, 0x4F, 0xE7, 0x80, 0x54, \r
+0x90, 0x07, 0x6E, 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0xAE, 0xDB, 0x90, 0xA2, 0xC0, 0xE0, 0x70, 0x38, \r
+0x90, 0xA2, 0xC2, 0xE0, 0x60, 0x09, 0xF1, 0xD4, 0x12, 0x5A, 0xE3, 0xE4, 0xFF, 0x80, 0x1E, 0x7F, \r
+0x67, 0xD1, 0xAB, 0xEF, 0x54, 0xDF, 0xF1, 0xDB, 0x12, 0xBC, 0xA9, 0x70, 0x0B, 0x12, 0x37, 0x4E, \r
+0xE4, 0x74, 0x80, 0xFF, 0x74, 0x02, 0x80, 0x05, 0x12, 0x37, 0x4E, 0xE4, 0xFF, 0xFE, 0xEC, 0xF1, \r
+0xCE, 0x7F, 0x48, 0x7E, 0x09, 0x12, 0x38, 0x45, 0x12, 0xBC, 0xA0, 0xF1, 0xE0, 0x54, 0xFE, 0xFD, \r
+0x7F, 0x4F, 0xD1, 0x8D, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA2, 0x88, 0xB1, 0x72, 0x90, 0xAA, \r
+0xB9, 0x02, 0x08, 0x6D, 0x7F, 0x67, 0xD1, 0xAB, 0xEF, 0x44, 0x20, 0xFD, 0x7F, 0x67, 0xC1, 0x8D, \r
+0xFD, 0x7F, 0x4E, 0xD1, 0x8D, 0x7F, 0x4F, 0xD1, 0xAB, 0xEF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, \r
+0xC0, 0xD0, 0x12, 0x57, 0x55, 0xD1, 0x83, 0xD1, 0x77, 0xD1, 0x77, 0x90, 0x01, 0x00, 0x74, 0x3F, \r
+0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0x12, 0x89, 0xD6, 0x30, \r
+0xE0, 0x05, 0x7F, 0x01, 0x12, 0x88, 0x32, 0x12, 0x8F, 0xD6, 0x13, 0x30, 0xE0, 0x37, 0x90, 0xA0, \r
+0x8C, 0xE0, 0x60, 0x08, 0x90, 0xA3, 0x07, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0xA3, 0x07, \r
+0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0xE4, 0x90, 0xA3, 0x08, 0xF0, 0x80, 0x06, \r
+0x90, 0xA3, 0x08, 0x74, 0x02, 0xF0, 0x90, 0xA3, 0x07, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x11, 0x62, \r
+0x7F, 0x01, 0x12, 0x88, 0x32, 0x90, 0xA0, 0x3A, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, \r
+0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x26, 0x8D, 0x27, 0x90, 0xA0, 0x4D, \r
+0x12, 0x5F, 0xDF, 0x30, 0xE0, 0x02, 0x21, 0x59, 0x90, 0xA0, 0x8D, 0xE0, 0x70, 0x5B, 0xE5, 0x26, \r
+0x64, 0x02, 0x60, 0x27, 0xE5, 0x27, 0x70, 0x23, 0x31, 0x5E, 0xE5, 0x26, 0x90, 0xA2, 0x88, 0xB4, \r
+0x01, 0x05, 0x12, 0x45, 0x72, 0x80, 0x08, 0x12, 0xBD, 0x32, 0xEE, 0x44, 0x02, 0xFE, 0xEC, 0x31, \r
+0x6C, 0x12, 0x47, 0xC9, 0x7F, 0x48, 0x7E, 0x09, 0x12, 0x38, 0x45, 0xE5, 0x27, 0x64, 0x02, 0x70, \r
+0x02, 0x21, 0x59, 0xE5, 0x27, 0x70, 0x02, 0x21, 0x59, 0x31, 0x5E, 0x90, 0xA0, 0x8C, 0xE0, 0x90, \r
+0xA2, 0x88, 0x60, 0x05, 0x12, 0xBD, 0x32, 0x80, 0x07, 0x12, 0x45, 0x72, 0xEE, 0x44, 0x02, 0xFE, \r
+0x31, 0x6B, 0x12, 0x47, 0xC9, 0x7F, 0x48, 0x80, 0x7B, 0xE5, 0x26, 0x64, 0x02, 0x60, 0x26, 0x12, \r
+0xA8, 0xAB, 0x54, 0xFC, 0xFF, 0x31, 0x6B, 0xE5, 0x26, 0x90, 0xA2, 0x88, 0xB4, 0x01, 0x08, 0x12, \r
+0x45, 0x72, 0xEF, 0x44, 0x01, 0x80, 0x06, 0x12, 0x45, 0x72, 0xEF, 0x44, 0x02, 0xFF, 0x31, 0x6B, \r
+0x12, 0x47, 0xC9, 0xF1, 0xE7, 0xE5, 0x27, 0x64, 0x02, 0x60, 0x4E, 0x12, 0xBC, 0x3D, 0xFF, 0x31, \r
+0x6B, 0xE5, 0x27, 0x70, 0x0A, 0x12, 0xBD, 0x2A, 0x44, 0x77, 0xFF, 0x31, 0x6B, 0x80, 0x30, 0x12, \r
+0xBD, 0x2A, 0x44, 0x66, 0xFF, 0x31, 0x6B, 0x12, 0xA8, 0xAB, 0x54, 0xFC, 0xF1, 0xEE, 0x90, 0xA0, \r
+0x8C, 0xE0, 0x90, 0xA2, 0x8C, 0x60, 0x08, 0x12, 0x45, 0x72, 0xEF, 0x44, 0x02, 0x80, 0x06, 0x12, \r
+0x45, 0x72, 0xEF, 0x44, 0x01, 0xF1, 0xEE, 0x90, 0xA2, 0x8C, 0x12, 0x47, 0xCC, 0xF1, 0xE7, 0x12, \r
+0x47, 0xC9, 0x7F, 0x30, 0x7E, 0x09, 0x12, 0x38, 0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x48, \r
+0x7E, 0x09, 0x12, 0x37, 0x4E, 0xE4, 0xFF, 0xEE, 0x54, 0xF0, 0xFE, 0xEC, 0x90, 0xA2, 0x88, 0x02, \r
+0x08, 0x6D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA1, 0xCF, 0x12, 0x45, 0x9F, 0x12, \r
+0x9E, 0x4D, 0x90, 0xA0, 0x4A, 0x12, 0x6D, 0x6E, 0xF1, 0xD9, 0xFF, 0x90, 0xA0, 0x4A, 0x12, 0x6B, \r
+0x35, 0x12, 0xBC, 0x2A, 0x90, 0xA0, 0x4A, 0x12, 0x9A, 0xD8, 0x12, 0x6B, 0x3D, 0x12, 0xBD, 0x22, \r
+0x90, 0xA0, 0x4A, 0xF0, 0x91, 0x34, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0xA0, 0x4D, 0x12, 0x6D, 0x6E, \r
+0xFF, 0xF0, 0x91, 0x34, 0xF1, 0xDE, 0xFF, 0x90, 0xA0, 0x4D, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, \r
+0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x91, 0x34, 0x12, 0xBC, 0x2A, 0x90, 0xA0, 0x4D, 0x12, 0x9A, 0xD8, \r
+0x4E, 0xFF, 0xF0, 0x91, 0x34, 0x12, 0xBD, 0x22, 0x90, 0xA0, 0x4D, 0x91, 0xE1, 0xFF, 0x54, 0x20, \r
+0xFE, 0x90, 0xA0, 0x4E, 0xE0, 0x54, 0xDF, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xEE, 0x54, \r
+0xBF, 0x4F, 0x91, 0xE0, 0xFE, 0x54, 0x80, 0xFD, 0xEF, 0x54, 0x7F, 0x4D, 0xFF, 0x90, 0xA0, 0x4E, \r
+0xF0, 0xEE, 0x54, 0x01, 0xFE, 0xEF, 0x54, 0xFE, 0x91, 0xDF, 0xF1, 0xDE, 0xFF, 0x90, 0xA0, 0x4E, \r
+0xF0, 0xEE, 0x54, 0x02, 0xFE, 0xEF, 0x54, 0xFD, 0x91, 0xDF, 0x12, 0x6F, 0xE8, 0xFF, 0x90, 0xA0, \r
+0x4E, 0x12, 0xBB, 0x9A, 0x4E, 0xF0, 0x90, 0x9F, 0xD9, 0xE0, 0x70, 0x10, 0x90, 0xA0, 0x3D, 0xE0, \r
+0x20, 0xE0, 0x09, 0x12, 0x84, 0xC6, 0x20, 0xE0, 0x03, 0x12, 0x66, 0x38, 0x12, 0x6D, 0x5A, 0x12, \r
+0x06, 0x89, 0x20, 0xE0, 0x02, 0x61, 0x9E, 0x90, 0x05, 0x54, 0xE0, 0x90, 0xA0, 0x5B, 0xF0, 0xE0, \r
+0xC3, 0x13, 0x90, 0xA0, 0x5A, 0xF0, 0x12, 0x87, 0xAE, 0x30, 0xE0, 0x13, 0xF1, 0x8F, 0x90, 0xA0, \r
+0x4B, 0xF0, 0x24, 0x0A, 0x90, 0xA0, 0x7C, 0xF1, 0xA4, 0x90, 0xA0, 0x4C, 0xF0, 0x80, 0x48, 0xF1, \r
+0x8F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x14, 0xEF, 0xC3, 0x94, 0x03, 0x50, 0x07, 0x90, 0xA0, 0x4B, \r
+0x74, 0x03, 0x80, 0x0C, 0xF1, 0x8F, 0x90, 0xA0, 0x4B, 0x80, 0x05, 0x90, 0xA0, 0x4B, 0x74, 0x2A, \r
+0xF0, 0x24, 0x0A, 0x90, 0xA0, 0x7C, 0xF0, 0xF1, 0xA5, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, \r
+0xC3, 0x94, 0x03, 0x90, 0xA0, 0x4C, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, \r
+0x06, 0x90, 0xA0, 0x4C, 0x74, 0x2A, 0xF0, 0x12, 0x5F, 0xDC, 0x30, 0xE0, 0x3D, 0x90, 0xA0, 0x4B, \r
+0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0xA0, 0x53, 0xF0, 0xE0, 0xC3, 0x13, 0xA3, 0xF0, 0x90, 0xA0, \r
+0x4C, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0xA0, 0x55, 0xF0, 0x90, 0xA0, 0x4B, 0xE0, 0xC3, 0x13, \r
+0x90, 0xA0, 0x56, 0xF0, 0x90, 0xA0, 0x4C, 0xE0, 0xC3, 0x13, 0x90, 0xA0, 0x57, 0xF0, 0x90, 0x01, \r
+0x3E, 0x74, 0x08, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x66, 0x25, 0xE4, 0x90, 0xA0, 0x8A, 0xF0, 0x91, \r
+0x2E, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x35, 0x90, 0xA0, 0x4A, 0xE0, 0xC3, 0x13, 0x20, \r
+0xE0, 0x05, 0xF1, 0xD1, 0x30, 0xE0, 0x27, 0x12, 0x06, 0x89, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, \r
+0xE0, 0x08, 0x90, 0xA0, 0x8C, 0xE0, 0x60, 0x08, 0x80, 0x0B, 0x90, 0xA0, 0x8C, 0xE0, 0x60, 0x05, \r
+0x75, 0x51, 0x01, 0x80, 0x03, 0xE4, 0xF5, 0x51, 0x7D, 0x02, 0xAF, 0x51, 0x11, 0x62, 0x90, 0xA0, \r
+0x4A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x15, 0x12, 0x87, 0xD8, 0x54, 0x07, 0x30, 0xE0, 0x07, \r
+0x7D, 0x04, 0x7F, 0x02, 0x12, 0x61, 0xC6, 0x12, 0xBD, 0x1A, 0x74, 0x11, 0xF0, 0x12, 0xBC, 0x0F, \r
+0x90, 0xA0, 0x52, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0xA0, 0x5D, 0x74, 0x01, 0xF0, 0x80, 0x28, 0x90, \r
+0xA0, 0x52, 0xE0, 0xB4, 0x04, 0x08, 0x90, 0xA0, 0x5D, 0x74, 0x04, 0xF0, 0x80, 0x19, 0x90, 0xA0, \r
+0x52, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0xA0, 0x5D, 0x74, 0x02, 0xF0, 0x80, 0x0A, 0x90, 0xA0, 0x52, \r
+0xE0, 0xB4, 0x07, 0x03, 0x12, 0x84, 0xBC, 0xE4, 0x90, 0xA0, 0x52, 0xF0, 0x80, 0x55, 0x91, 0x2E, \r
+0x12, 0x6B, 0x0B, 0x30, 0xE0, 0x05, 0x75, 0x52, 0x02, 0x80, 0x11, 0x12, 0x06, 0x89, 0x12, 0x6B, \r
+0x16, 0x30, 0xE0, 0x05, 0x75, 0x52, 0x01, 0x80, 0x03, 0xE4, 0xF5, 0x52, 0x12, 0xA0, 0xB4, 0x90, \r
+0xA0, 0xAB, 0xE0, 0x30, 0xE0, 0x04, 0x7D, 0xAC, 0x80, 0x02, 0x7D, 0x2C, 0x7F, 0x40, 0x12, 0x46, \r
+0x8D, 0x91, 0x2E, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x02, 0x7F, \r
+0x01, 0x12, 0x88, 0x32, 0xAD, 0x52, 0x7F, 0x02, 0x11, 0x62, 0x12, 0x66, 0x3A, 0x12, 0xBD, 0x1A, \r
+0x74, 0x43, 0xF0, 0x12, 0xBC, 0x97, 0x90, 0xA0, 0x5C, 0xF0, 0xF1, 0xCE, 0x30, 0xE0, 0x09, 0x90, \r
+0xA0, 0x7D, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0C, 0x7F, 0x01, 0x12, 0x8F, 0xDD, 0x90, 0xA0, 0x7D, \r
+0xE0, 0x54, 0xFD, 0xF0, 0x7F, 0x03, 0x12, 0x8A, 0x12, 0x90, 0xA0, 0x4A, 0xE0, 0x20, 0xE0, 0x07, \r
+0x90, 0xA0, 0x4E, 0xE0, 0x54, 0xBF, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, 0xFF, 0x90, 0xA1, \r
+0xCF, 0x12, 0x45, 0x96, 0x90, 0x00, 0x03, 0x02, 0x06, 0xA2, 0x90, 0xA1, 0xCF, 0x12, 0x45, 0x9F, \r
+0x12, 0x06, 0x89, 0xF5, 0x51, 0x24, 0x91, 0x91, 0xD7, 0xE0, 0x54, 0x9C, 0x91, 0xD2, 0xC0, 0x83, \r
+0xC0, 0x82, 0x91, 0x2C, 0x54, 0x01, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0x91, 0xD2, 0xC0, \r
+0x83, 0xC0, 0x82, 0x91, 0x2C, 0x54, 0x02, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0x91, 0xD2, \r
+0xC0, 0x83, 0xC0, 0x82, 0x91, 0x2C, 0x54, 0x04, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0x91, \r
+0xD2, 0xC0, 0x83, 0xC0, 0x82, 0x91, 0x2C, 0x54, 0x40, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83, \r
+0x91, 0xD2, 0xC0, 0x83, 0xC0, 0x82, 0x91, 0x2C, 0x54, 0x20, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, \r
+0x83, 0xF0, 0xE5, 0x51, 0x70, 0x08, 0x91, 0x34, 0x54, 0x04, 0x90, 0x04, 0xAB, 0xF0, 0xE5, 0x51, \r
+0xC3, 0x94, 0x80, 0x50, 0x06, 0xF1, 0xA5, 0x91, 0xE8, 0xEF, 0xF0, 0x91, 0xD3, 0xE0, 0x30, 0xE5, \r
+0x10, 0xD1, 0x29, 0x13, 0x13, 0x54, 0x03, 0xFB, 0x91, 0xE9, 0xE0, 0xFD, 0xAF, 0x51, 0x12, 0xB2, \r
+0x7F, 0x22, 0xF0, 0x74, 0x91, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0x22, 0x4E, \r
+0xFF, 0xF0, 0x90, 0x00, 0x04, 0x02, 0x06, 0xA2, 0xFF, 0x74, 0x11, 0x25, 0x51, 0xF5, 0x82, 0xE4, \r
+0x34, 0x9A, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x8F, 0x12, 0x46, \r
+0xAB, 0xEF, 0x20, 0xE6, 0x02, 0xA1, 0xF2, 0x90, 0x00, 0x8C, 0xE0, 0x90, 0xA2, 0xD0, 0xF0, 0x7F, \r
+0x8D, 0x12, 0x46, 0xAB, 0x90, 0xA2, 0xD1, 0xEF, 0xF0, 0x90, 0x00, 0x8E, 0xE0, 0x90, 0xA2, 0xD2, \r
+0xF0, 0x90, 0xA2, 0xD1, 0xE0, 0x24, 0xFC, 0x60, 0x10, 0x24, 0x03, 0x60, 0x02, 0xA1, 0xE6, 0x90, \r
+0xA2, 0xD0, 0xE0, 0xFF, 0x12, 0xB4, 0xFC, 0xA1, 0xE6, 0x90, 0xA2, 0xD0, 0xE0, 0x24, 0x11, 0x91, \r
+0xED, 0xE0, 0xFB, 0xE4, 0xFD, 0xFF, 0xD1, 0x21, 0x75, 0xF0, 0x04, 0xD1, 0x2E, 0x13, 0x13, 0x54, \r
+0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0xD1, 0x21, 0x75, 0xF0, 0x04, 0xD1, 0x2E, 0xF1, 0xD2, 0xFB, 0x0D, \r
+0xE4, 0xFF, 0xD1, 0x21, 0x75, 0xF0, 0x04, 0xD1, 0x2E, 0xC4, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0xFF, \r
+0xD1, 0x21, 0x75, 0xF0, 0x04, 0xF1, 0xFD, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0xD1, 0x21, 0x75, 0xF0, \r
+0x04, 0x90, 0x96, 0x12, 0xD1, 0x1B, 0x75, 0xF0, 0x04, 0xF1, 0x86, 0xC4, 0x13, 0x54, 0x01, 0xFB, \r
+0x0D, 0x7F, 0x01, 0xD1, 0x21, 0x75, 0xF0, 0x04, 0xF1, 0x86, 0x54, 0x1F, 0xD1, 0x1F, 0x75, 0xF0, \r
+0x08, 0x90, 0x89, 0x00, 0x12, 0xBC, 0x34, 0xD1, 0x21, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x01, 0xD1, \r
+0x1B, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x02, 0xD1, 0x1B, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x03, 0xD1, \r
+0x1B, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x04, 0x12, 0xBC, 0x34, 0xD1, 0x21, 0x75, 0xF0, 0x08, 0x90, \r
+0x89, 0x05, 0xD1, 0x1B, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x06, 0xD1, 0x1B, 0x75, 0xF0, 0x08, 0x12, \r
+0xBC, 0xFA, 0xFB, 0x0D, 0xB1, 0xF7, 0x7F, 0x8F, 0x12, 0x46, 0xAB, 0xEF, 0x30, 0xE0, 0x03, 0x12, \r
+0xB5, 0x57, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x70, 0x04, 0x74, 0xF0, 0x80, 0x16, 0xEF, 0xB4, \r
+0x01, 0x04, 0x74, 0xF4, 0x80, 0x0E, 0xEF, 0xB4, 0x02, 0x04, 0x74, 0xF8, 0x80, 0x06, 0xEF, 0xB4, \r
+0x03, 0x08, 0x74, 0xFC, 0x2D, 0x12, 0xB0, 0x2B, 0xEB, 0xF0, 0x22, 0x12, 0x45, 0x8A, 0xE0, 0xFB, \r
+0x0D, 0xB1, 0xF7, 0x90, 0xA2, 0xD0, 0xE0, 0x22, 0xFF, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, \r
+0x14, 0x12, 0x45, 0x8A, 0xE0, 0x22, 0x75, 0x40, 0xFF, 0x75, 0x41, 0x41, 0x75, 0x42, 0xDB, 0x75, \r
+0x43, 0x03, 0x7B, 0x01, 0x7A, 0x9E, 0x79, 0x9B, 0xF1, 0x9C, 0x75, 0x41, 0x41, 0x75, 0x42, 0xDE, \r
+0x75, 0x43, 0x03, 0x7B, 0x01, 0x7A, 0x9E, 0x79, 0x9E, 0xF1, 0x9C, 0x75, 0x41, 0x41, 0x75, 0x42, \r
+0xE1, 0x75, 0x43, 0x14, 0x7B, 0x01, 0x7A, 0x9E, 0x79, 0xA1, 0xF1, 0x9C, 0x75, 0x41, 0x41, 0x75, \r
+0x42, 0xF5, 0x75, 0x43, 0x14, 0x7B, 0x01, 0x7A, 0x9E, 0x79, 0xB5, 0x12, 0x35, 0x26, 0xE4, 0xFF, \r
+0xE4, 0xFE, 0x74, 0x91, 0x2F, 0x91, 0xD7, 0xE0, 0x54, 0xFE, 0xF0, 0x75, 0xF0, 0x10, 0xEF, 0x90, \r
+0x81, 0x00, 0xBE, 0x03, 0x0E, 0x12, 0x45, 0x8A, 0xE5, 0x82, 0x2E, 0x12, 0x7A, 0x55, 0x74, 0x80, \r
+0xF0, 0x80, 0x0B, 0x12, 0x45, 0x8A, 0xE5, 0x82, 0x2E, 0x12, 0x7A, 0x55, 0xE4, 0xF0, 0x75, 0xF0, \r
+0x08, 0xEF, 0x12, 0x7C, 0x60, 0x2E, 0x12, 0x7A, 0x55, 0xE4, 0xF0, 0x0E, 0xBE, 0x10, 0xC3, 0x0F, \r
+0xBF, 0x80, 0xBD, 0xE4, 0x90, 0xAD, 0xE2, 0xF0, 0xFF, 0xE4, 0xFE, 0x75, 0xF0, 0x0A, 0xEF, 0x12, \r
+0x7F, 0xA8, 0x75, 0xF0, 0x02, 0xEE, 0xF1, 0x95, 0xF0, 0x0E, 0xBE, 0x05, 0xEE, 0x74, 0x91, 0x2F, \r
+0x12, 0xBB, 0x51, 0x74, 0x13, 0xF0, 0x74, 0x11, 0x2F, 0x12, 0x75, 0x45, 0xE4, 0xF0, 0x74, 0x01, \r
+0x2F, 0x12, 0x75, 0x2D, 0x74, 0xC0, 0xF0, 0x74, 0x11, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x9E, 0xF5, \r
+0x83, 0xE4, 0x12, 0xB4, 0xE0, 0xE4, 0xF1, 0xF8, 0x74, 0x13, 0x12, 0x95, 0x54, 0xE4, 0xF0, 0x75, \r
+0xF0, 0x04, 0xEF, 0xF1, 0x86, 0x54, 0xE0, 0x44, 0x09, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0xD1, 0x2E, \r
+0x54, 0xF3, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0xD1, 0x2E, 0x54, 0xFC, 0xF0, 0x75, 0xF0, 0x04, 0xEF, \r
+0xF1, 0x86, 0x44, 0x20, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0xD1, 0x2E, 0x54, 0xCF, 0xF0, 0x75, 0xF0, \r
+0x04, 0xEF, 0xD1, 0x2E, 0x44, 0x40, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0xD1, 0x2E, 0x54, 0x7F, 0x12, \r
+0x95, 0x54, 0xE0, 0xFE, 0x75, 0xF0, 0x10, 0xEF, 0x12, 0x75, 0x8E, 0xEE, 0xF0, 0x74, 0x91, 0x2F, \r
+0x91, 0xD7, 0xE4, 0xF0, 0x0F, 0xEF, 0x64, 0x80, 0x60, 0x02, 0xC1, 0xC9, 0x74, 0x11, 0x2F, 0xF5, \r
+0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x90, 0x04, 0x21, 0x74, 0x0F, 0xF0, 0x22, \r
+0xFF, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x90, 0x96, 0x13, 0x12, 0x45, 0x8A, 0xE0, 0x22, 0xF0, 0x90, \r
+0x00, 0x01, 0x02, 0x06, 0xA2, 0x12, 0x45, 0x8A, 0xE4, 0xF0, 0xA3, 0x22, 0x12, 0x35, 0x26, 0x75, \r
+0x40, 0xFF, 0x22, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x02, 0x06, 0xA2, 0x12, 0xA5, 0x19, 0x90, 0xA0, \r
+0xE0, 0xF1, 0x8E, 0x90, 0xA0, 0xE1, 0xF1, 0xA4, 0x90, 0xA0, 0xEB, 0xF0, 0x91, 0x34, 0x90, 0xA0, \r
+0xEC, 0x91, 0xE1, 0x90, 0xA0, 0xF6, 0x12, 0x6D, 0x4D, 0x90, 0xA0, 0xF7, 0xF0, 0x22, 0x90, 0xA0, \r
+0x4D, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x22, 0xFF, 0xF0, 0x12, 0x06, 0x89, 0xFE, 0x54, \r
+0x04, 0xFD, 0xEF, 0x54, 0xFB, 0x4D, 0x22, 0x7F, 0x2C, 0x7E, 0x09, 0x02, 0x38, 0x45, 0xFF, 0xEC, \r
+0x90, 0xA2, 0x8C, 0x02, 0x08, 0x6D, 0x81, 0xF5, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x11, \r
+0x02, 0x45, 0x8A, 0xE0, 0x44, 0x02, 0xF0, 0xE4, 0x90, 0xA2, 0xAB, 0xF0, 0x90, 0xA0, 0x37, 0xE0, \r
+0x90, 0xA2, 0xAC, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, \r
+0xC0, 0xD0, 0x90, 0xA2, 0xA7, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA2, 0xAB, 0xE0, 0xF5, 0x3B, \r
+0xA3, 0xE0, 0xF5, 0x3C, 0x12, 0x36, 0x3E, 0x90, 0xA2, 0xA7, 0x12, 0x9E, 0xB8, 0xA3, 0xA3, 0xA3, \r
+0x74, 0x05, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0xA1, 0xFC, 0xF0, 0x90, 0xA0, 0xAE, \r
+0xE0, 0x20, 0xE0, 0x02, 0x21, 0x7B, 0x90, 0xA0, 0xB0, 0xE0, 0xB4, 0x14, 0x0B, 0x7F, 0x01, 0x51, \r
+0x1A, 0xEF, 0x60, 0x02, 0x21, 0x7B, 0x21, 0x76, 0x31, 0x83, 0x12, 0x77, 0xD5, 0x90, 0xA1, 0xFA, \r
+0xF0, 0x60, 0x07, 0xE0, 0x64, 0x02, 0x60, 0x02, 0x21, 0x3D, 0x90, 0xA0, 0xB0, 0xE0, 0x70, 0x34, \r
+0xF1, 0xE3, 0x54, 0x07, 0x30, 0xE0, 0x02, 0x21, 0x2D, 0x12, 0xBC, 0x61, 0x7D, 0x4E, 0x7F, 0x6F, \r
+0x91, 0xC6, 0x31, 0x83, 0xF1, 0x1C, 0x7B, 0x04, 0x7D, 0x01, 0x91, 0x71, 0xBF, 0x01, 0x0E, 0x31, \r
+0x83, 0x51, 0x0F, 0x44, 0x01, 0xF0, 0x90, 0xA0, 0xB0, 0x74, 0x01, 0xF0, 0x22, 0x12, 0xBB, 0xB0, \r
+0x7D, 0x4F, 0x80, 0x6C, 0x90, 0xA0, 0xB0, 0xE0, 0x64, 0x01, 0x70, 0x71, 0x31, 0x83, 0x51, 0x0F, \r
+0xFF, 0x30, 0xE0, 0x08, 0x90, 0xA1, 0xFC, 0x74, 0x01, 0xF0, 0x80, 0x15, 0xEF, 0xC3, 0x13, 0x20, \r
+0xE0, 0x0F, 0x90, 0xA1, 0xFC, 0x74, 0x01, 0xF0, 0x12, 0xBC, 0x61, 0x7D, 0x50, 0x7F, 0x6F, 0x91, \r
+0xC6, 0x90, 0xA1, 0xFC, 0xE0, 0x60, 0x46, 0x90, 0xA1, 0x39, 0xE0, 0x64, 0x06, 0x60, 0x33, 0xE0, \r
+0x04, 0xF0, 0xE0, 0xD3, 0x94, 0x01, 0x40, 0x08, 0x90, 0xA1, 0xFD, 0x74, 0x04, 0xF0, 0x80, 0x05, \r
+0xE4, 0x90, 0xA1, 0xFD, 0xF0, 0x31, 0x83, 0xF1, 0x1C, 0x90, 0xA1, 0xFD, 0xE0, 0x91, 0x6E, 0xBF, \r
+0x01, 0x09, 0xF1, 0xD5, 0x74, 0x03, 0x12, 0xA3, 0x78, 0x01, 0x1B, 0x12, 0xBB, 0xB0, 0x7D, 0x51, \r
+0x81, 0xC6, 0xE4, 0x90, 0xA1, 0x39, 0x31, 0x7C, 0x51, 0x0F, 0x54, 0xFB, 0xF0, 0x90, 0xA0, 0xB0, \r
+0xE0, 0x64, 0x05, 0x70, 0x46, 0xFF, 0x51, 0x1A, 0xEF, 0x70, 0x40, 0x80, 0x39, 0x90, 0xA1, 0xFA, \r
+0xE0, 0x64, 0x03, 0x70, 0x36, 0x90, 0xA0, 0xB0, 0xE0, 0x64, 0x05, 0x70, 0x2E, 0xF1, 0xE3, 0x54, \r
+0x07, 0x20, 0xE0, 0x14, 0x31, 0x83, 0x04, 0xFF, 0xA3, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xFF, 0x75, \r
+0xF0, 0x0B, 0xEF, 0xF1, 0xCB, 0xEF, 0x11, 0x13, 0x31, 0x83, 0xFD, 0x7F, 0x02, 0x91, 0xD1, 0xE4, \r
+0xFF, 0x51, 0x1A, 0xEF, 0x70, 0x05, 0x7F, 0x06, 0x12, 0x9F, 0x71, 0x22, 0xF0, 0x90, 0xA0, 0xB0, \r
+0x74, 0x05, 0xF0, 0x90, 0xA0, 0xAE, 0xE0, 0xC3, 0x13, 0x54, 0x07, 0x22, 0xE4, 0x90, 0xA1, 0xF9, \r
+0xF0, 0x90, 0xA0, 0xAE, 0xE0, 0xFF, 0x30, 0xE0, 0x75, 0xF1, 0xE3, 0x54, 0x07, 0x20, 0xE0, 0x6E, \r
+0xEF, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0x51, 0x0F, 0xFE, 0x30, 0xE0, 0x62, 0x75, 0xF0, 0x0B, 0xEF, \r
+0x90, 0xA0, 0xE2, 0x12, 0x45, 0x8A, 0xEE, 0x54, 0xFE, 0xF0, 0x75, 0xF0, 0x0B, 0xEF, 0x51, 0x12, \r
+0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0F, 0x90, 0xA1, 0x02, 0xF1, 0xDC, 0x31, 0x83, 0x51, 0x0F, \r
+0x54, 0xFB, 0xF0, 0x12, 0x88, 0xEE, 0x90, 0x04, 0xE0, 0xE0, 0x30, 0xE1, 0x22, 0x31, 0x7D, 0x51, \r
+0x0F, 0x44, 0x02, 0xF0, 0x90, 0xA1, 0x39, 0x74, 0x01, 0x31, 0x82, 0xFD, 0x7F, 0x02, 0x91, 0xD1, \r
+0x90, 0xA1, 0xF9, 0xE0, 0x60, 0x18, 0xE4, 0x90, 0xA1, 0x00, 0xF0, 0xA3, 0xF0, 0x01, 0x48, 0x90, \r
+0xA1, 0x00, 0xF1, 0xDC, 0x31, 0x83, 0x51, 0x0F, 0x54, 0xFD, 0xF0, 0x12, 0x66, 0x3A, 0x22, 0x75, \r
+0xF0, 0x0B, 0x90, 0xA0, 0xE2, 0x12, 0x45, 0x8A, 0xE0, 0x22, 0x90, 0xA1, 0xFE, 0xEF, 0xF0, 0xF1, \r
+0x55, 0xEF, 0x70, 0x02, 0xFF, 0x22, 0x31, 0x83, 0x90, 0xA0, 0xFC, 0xF0, 0x12, 0xBA, 0xAB, 0xB5, \r
+0x07, 0x04, 0xEE, 0x54, 0xF1, 0xF0, 0x31, 0x83, 0x90, 0xA1, 0xFF, 0xF0, 0x90, 0xA1, 0xFE, 0xE0, \r
+0x90, 0xA0, 0xB0, 0x70, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x14, 0xF0, 0x12, 0xBC, 0x6A, 0x12, 0xBC, \r
+0xF2, 0x30, 0xE0, 0x42, 0x12, 0xBB, 0x59, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, \r
+0xE0, 0xFE, 0x75, 0xF0, 0x0B, 0xEF, 0x90, 0xA0, 0xDB, 0x12, 0x45, 0x8A, 0xEE, 0xF0, 0x90, 0xA1, \r
+0xFF, 0xE0, 0xFF, 0x24, 0x28, 0x12, 0xBB, 0x5C, 0x04, 0xF0, 0x12, 0xBB, 0x59, 0xFF, 0x90, 0xA1, \r
+0x04, 0xE0, 0xFE, 0xEF, 0xB5, 0x06, 0x0F, 0x90, 0xA1, 0xFF, 0xE0, 0x24, 0x28, 0xF5, 0x82, 0xE4, \r
+0x34, 0xA1, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0xA1, 0xFF, 0x12, 0x9F, 0xD1, 0xFC, 0x90, 0xA0, 0xFC, \r
+0x12, 0x9F, 0xD1, 0x6C, 0x60, 0x13, 0x90, 0xA1, 0xFF, 0xE0, 0x75, 0xF0, 0x0B, 0x12, 0xB5, 0xD4, \r
+0x90, 0xA1, 0xFF, 0xE0, 0x75, 0xF0, 0x0B, 0xB1, 0x49, 0x12, 0xBC, 0x6A, 0x90, 0xA0, 0xE3, 0x12, \r
+0x45, 0x8A, 0xE0, 0x04, 0xF0, 0x90, 0xA1, 0xFE, 0xE0, 0x70, 0x24, 0x90, 0xA0, 0xFE, 0xE0, 0xFE, \r
+0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x18, 0x75, 0xF0, 0x0B, 0xEF, 0x12, 0x77, 0xD8, 0xFF, 0x60, \r
+0x03, 0xBF, 0x02, 0x0B, 0x90, 0xA1, 0xFF, 0xE0, 0xF1, 0x1C, 0xE4, 0xFB, 0xFD, 0x91, 0x71, 0x90, \r
+0xA1, 0xFF, 0xE0, 0xFD, 0x7F, 0x01, 0x91, 0xD1, 0x90, 0xA0, 0xFE, 0x12, 0x89, 0xE4, 0xBF, 0x02, \r
+0x05, 0xE4, 0xFF, 0x12, 0x9F, 0x71, 0x7F, 0x01, 0x22, 0x12, 0xBA, 0xAB, 0xB5, 0x07, 0x04, 0xEE, \r
+0x54, 0xF1, 0xF0, 0x31, 0x83, 0x12, 0xBA, 0xCC, 0x11, 0x13, 0xE4, 0x90, 0xA0, 0xB0, 0xF0, 0xF1, \r
+0x55, 0x12, 0xBA, 0xC2, 0xF1, 0xF9, 0xE0, 0xFA, 0x12, 0xA6, 0xD9, 0xFC, 0x54, 0x03, 0xFD, 0xEC, \r
+0x13, 0x13, 0x54, 0x07, 0xFB, 0xEE, 0xC4, 0x54, 0x0F, 0x90, 0xA2, 0xDF, 0xF0, 0xAF, 0x02, 0x12, \r
+0xB5, 0xF3, 0x31, 0x83, 0x75, 0xF0, 0x0E, 0x90, 0xA0, 0xB2, 0xB1, 0x4C, 0x31, 0x83, 0xFF, 0x75, \r
+0xF0, 0x0E, 0x90, 0xA0, 0xBC, 0x12, 0x45, 0x8A, 0xE0, 0x04, 0xF0, 0x75, 0xF0, 0x0E, 0xEF, 0x91, \r
+0xB4, 0x31, 0x83, 0xFD, 0x7F, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xE0, \r
+0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0xA2, 0xE2, 0xE0, 0xFF, 0xC3, 0x94, 0x03, \r
+0x40, 0x02, 0x81, 0x08, 0x90, 0xA2, 0xE1, 0xE0, 0xFE, 0x12, 0xA6, 0xF7, 0x75, 0xF0, 0x03, 0xEF, \r
+0x12, 0xBB, 0xBD, 0xE0, 0x90, 0xA2, 0xE3, 0xF0, 0x90, 0xA2, 0xE0, 0xE0, 0x60, 0x24, 0x90, 0xA2, \r
+0xE3, 0xE0, 0xFF, 0x75, 0xF0, 0x0E, 0xEE, 0x12, 0xA6, 0xF1, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0xA2, \r
+0xE2, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x12, 0xBB, 0x31, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, \r
+0x80, 0x20, 0x12, 0xBC, 0x16, 0x75, 0xF0, 0x0E, 0x12, 0xA6, 0xF1, 0xC0, 0x83, 0xC0, 0x82, 0x90, \r
+0xA2, 0xE2, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x12, 0xBB, 0x31, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, \r
+0xF4, 0x5F, 0x90, 0xA2, 0xE3, 0xF0, 0x12, 0xBC, 0x16, 0x12, 0xA6, 0xF7, 0xC0, 0x83, 0xC0, 0x82, \r
+0x90, 0xA2, 0xE2, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x03, 0x12, 0xBB, 0xBD, 0xEF, 0xF0, \r
+0x90, 0xA2, 0xE2, 0xE0, 0x04, 0xF0, 0x61, 0x78, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA0, 0xAD, \r
+0xE0, 0x30, 0xE0, 0x59, 0x90, 0xA0, 0xB0, 0xE0, 0x70, 0x29, 0x7D, 0x16, 0xF1, 0xC5, 0x31, 0x83, \r
+0x75, 0xF0, 0x0E, 0x90, 0xA0, 0xBD, 0xF1, 0x22, 0xE4, 0x91, 0x6E, 0x31, 0x83, 0x75, 0xF0, 0x0E, \r
+0xF1, 0xF3, 0xE0, 0x44, 0x01, 0xF0, 0xF1, 0xD5, 0x74, 0x03, 0x11, 0x13, 0x90, 0xA0, 0xB0, 0x74, \r
+0x01, 0xF0, 0x22, 0x90, 0xA0, 0xB0, 0xE0, 0x64, 0x01, 0x70, 0x20, 0x31, 0x83, 0xFF, 0x75, 0xF0, \r
+0x0E, 0xF1, 0xF3, 0xE0, 0x30, 0xE0, 0x14, 0x12, 0x97, 0xD4, 0xF1, 0x22, 0xE4, 0xFB, 0x7D, 0x01, \r
+0x91, 0x71, 0xF1, 0xD5, 0x74, 0x03, 0x12, 0xA7, 0x0F, 0x01, 0x1B, 0x71, 0x09, 0x22, 0xFB, 0x7D, \r
+0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xA0, 0x12, 0x97, 0xC0, 0x90, 0x04, \r
+0x1D, 0xE0, 0x60, 0x25, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA2, 0xA6, 0xF0, 0x7D, 0x14, 0xF1, 0x51, \r
+0xEF, 0x64, 0x01, 0x70, 0x05, 0x12, 0x84, 0xFC, 0x80, 0x04, 0x7F, 0x00, 0x80, 0x11, 0x90, 0xA2, \r
+0xA6, 0xE0, 0xFF, 0x7D, 0x15, 0x91, 0xC6, 0x80, 0x03, 0x12, 0x84, 0xFC, 0x12, 0xBC, 0x46, 0xD0, \r
+0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA0, 0xBD, 0x12, 0x45, 0x8A, 0xE0, 0xFF, 0x7E, 0x00, 0xE4, 0xFB, \r
+0xFD, 0x91, 0x71, 0xE4, 0xFD, 0xFF, 0x90, 0x05, 0x22, 0xEF, 0xF0, 0x90, 0x9E, 0x96, 0xED, 0xF0, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xFF, 0xED, 0xF0, 0x90, 0xA2, 0xFE, \r
+0xEF, 0xF0, 0x64, 0x02, 0x70, 0x23, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA3, 0x00, 0xF0, 0x7D, 0x4A, \r
+0xF1, 0xC5, 0xBF, 0x01, 0x07, 0x90, 0x04, 0xD4, 0x74, 0xFF, 0x80, 0x43, 0x90, 0xA3, 0x00, 0xE0, \r
+0xFF, 0x7D, 0x46, 0x91, 0xC6, 0x7F, 0x00, 0x80, 0x3B, 0x90, 0xA2, 0xFE, 0xE0, 0x64, 0x01, 0x70, \r
+0x2A, 0xFD, 0xFF, 0x91, 0xC6, 0x90, 0xA2, 0xFF, 0xE0, 0xFF, 0x75, 0xF0, 0x0B, 0x90, 0xA0, 0xE0, \r
+0x12, 0x45, 0x8A, 0xE0, 0xF4, 0x90, 0x04, 0xD4, 0xF0, 0x75, 0xF0, 0x0B, 0xEF, 0x90, 0xA0, 0xE1, \r
+0x12, 0x45, 0x8A, 0xE0, 0xF4, 0x90, 0x04, 0xD5, 0xF0, 0x80, 0x07, 0x90, 0x04, 0xD4, 0xE4, 0xF0, \r
+0xA3, 0xF0, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA0, 0xDC, 0x12, 0x45, 0x8A, 0xE0, \r
+0xFE, 0x54, 0x03, 0xFF, 0xEE, 0x13, 0x13, 0x54, 0x07, 0xFD, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
+0xD0, 0x90, 0xA3, 0x0B, 0xED, 0xF0, 0xE4, 0xA3, 0xF0, 0xEF, 0x14, 0x60, 0x02, 0xC1, 0x49, 0x90, \r
+0x06, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0xA3, 0x0B, 0xE0, 0xFB, 0xC4, 0x33, 0x54, 0xE0, 0xFE, \r
+0x90, 0x04, 0x42, 0xE0, 0x54, 0x9F, 0x4E, 0xFE, 0xF0, 0xE4, 0xFD, 0x12, 0xB6, 0xDF, 0x90, 0xA3, \r
+0x0C, 0xEF, 0xF0, 0x90, 0x04, 0x83, 0xF0, 0x90, 0xA2, 0x2D, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, \r
+0x01, 0x90, 0xA2, 0x31, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x7F, 0x00, 0x7E, 0x08, 0xF1, \r
+0x16, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0xA2, 0x31, 0x12, 0x08, 0x79, 0x00, 0x00, \r
+0x00, 0x01, 0xF1, 0x12, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x10, 0x90, 0xA3, 0x0B, 0x12, 0x5D, \r
+0x41, 0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78, 0x01, 0x12, 0x08, 0x47, 0x78, 0x04, 0x12, 0xBB, 0xC9, \r
+0x7E, 0x0A, 0xF1, 0x16, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x90, 0xA3, 0x0B, 0x12, 0x5D, \r
+0x41, 0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78, 0x0A, 0x12, 0xBB, 0xC9, 0x7E, 0x0D, 0xF1, 0x16, 0x12, \r
+0x08, 0x79, 0x0C, 0x00, 0x00, 0x00, 0x90, 0xA3, 0x0C, 0x12, 0x5D, 0x41, 0xEF, 0x54, 0x03, 0xFF, \r
+0xE4, 0x78, 0x1A, 0x12, 0x08, 0x5A, 0x90, 0xA2, 0x31, 0x12, 0x08, 0x6D, 0x7F, 0x18, 0x7E, 0x08, \r
+0xF1, 0x16, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x90, 0xA2, 0x31, 0x12, 0x08, 0x79, 0x00, \r
+0x00, 0x00, 0x00, 0x12, 0xBB, 0xF9, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x90, 0xA2, 0x1F, \r
+0x12, 0x08, 0x79, 0x00, 0x00, 0x04, 0x00, 0x80, 0x59, 0x90, 0x06, 0x03, 0xE0, 0x44, 0x04, 0xF0, \r
+0x90, 0xA2, 0x2D, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0xA2, 0x31, 0x12, 0x08, 0x79, \r
+0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x7E, 0x08, 0xF1, 0x16, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, \r
+0x01, 0x90, 0xA2, 0x31, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x12, 0x12, 0x08, 0x79, \r
+0x00, 0x00, 0x0C, 0x00, 0x90, 0xA2, 0x31, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x12, 0xBB, \r
+0xF9, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x90, 0xA2, 0x1F, 0x12, 0x08, 0x79, 0x00, 0x00, \r
+0x0C, 0x00, 0x7D, 0x18, 0x7C, 0x00, 0xE4, 0xFF, 0x12, 0xB5, 0x5E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x2B, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, \r
+0x37, 0x4E, 0x90, 0xA2, 0x35, 0x12, 0x08, 0x6D, 0x90, 0xA2, 0x2D, 0x12, 0x45, 0x72, 0x12, 0x08, \r
+0x3A, 0x90, 0xA2, 0x35, 0x12, 0xB6, 0x74, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, \r
+0xA2, 0x2D, 0x12, 0x45, 0x72, 0x90, 0xA2, 0x31, 0x12, 0xB6, 0x74, 0xD0, 0x03, 0xD0, 0x02, 0xD0, \r
+0x01, 0xD0, 0x00, 0x12, 0x45, 0x54, 0x90, 0xA2, 0x39, 0x12, 0x08, 0x6D, 0x90, 0xA2, 0x39, 0x12, \r
+0x47, 0xCC, 0x90, 0xA2, 0x2B, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x38, 0x45, 0xD0, 0xD0, 0x92, \r
+0xAF, 0x22, 0x7F, 0x00, 0x7E, 0x09, 0xD1, 0xB0, 0x90, 0xA2, 0x2D, 0x22, 0x75, 0xF0, 0x0B, 0x90, \r
+0xA0, 0xE4, 0x12, 0x45, 0x8A, 0xE0, 0xFF, 0x7E, 0x00, 0x22, 0x8F, 0x54, 0xF1, 0x4F, 0x75, 0xF0, \r
+0x0E, 0xE5, 0x54, 0xF1, 0xFD, 0xE0, 0xFC, 0x12, 0xBC, 0x73, 0x12, 0xB5, 0xD7, 0x12, 0xBC, 0x73, \r
+0xB1, 0x4C, 0x75, 0xF0, 0x0E, 0xE5, 0x54, 0x91, 0xB4, 0xAD, 0x54, 0x7F, 0x01, 0x61, 0x66, 0x7D, \r
+0x17, 0x7F, 0xFF, 0x91, 0xC6, 0xE4, 0x90, 0xA2, 0xFB, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0x22, 0xE0, \r
+0x90, 0xA2, 0xFD, 0xF0, 0x7D, 0x47, 0x7F, 0xFF, 0x91, 0xC6, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x11, \r
+0xA3, 0xE0, 0x70, 0x0D, 0xA3, 0xE0, 0x70, 0x09, 0xA3, 0xE0, 0x70, 0x05, 0xF1, 0xEA, 0x7F, 0x01, \r
+0x22, 0x12, 0x5F, 0xDC, 0x30, 0xE0, 0x15, 0xD3, 0x90, 0xA2, 0xFC, 0xE0, 0x94, 0x03, 0x90, 0xA2, \r
+0xFB, 0xE0, 0x94, 0x00, 0x40, 0x02, 0x80, 0x13, 0x7F, 0x01, 0x80, 0x1D, 0xD3, 0x90, 0xA2, 0xFC, \r
+0xE0, 0x94, 0xE8, 0x90, 0xA2, 0xFB, 0xE0, 0x94, 0x03, 0x40, 0x0C, 0x90, 0x01, 0xC0, 0xE0, 0x44, \r
+0x20, 0xF0, 0xF1, 0xEA, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x90, 0xA2, \r
+0xFB, 0xF1, 0xDC, 0x80, 0xA5, 0x7F, 0x6F, 0x91, 0xC6, 0x80, 0x8A, 0x90, 0xA0, 0xDD, 0x12, 0x45, \r
+0x8A, 0xE0, 0x24, 0xF6, 0xFF, 0xE4, 0x90, 0xA2, 0xAB, 0xF0, 0xA3, 0x22, 0xE4, 0x75, 0xF0, 0x01, \r
+0x02, 0x08, 0xD6, 0x90, 0xA0, 0xFE, 0xE0, 0xC4, 0x13, 0x22, 0x90, 0xA2, 0xFD, 0xE0, 0xFF, 0x7D, \r
+0x48, 0x81, 0xC6, 0x90, 0xA0, 0xB9, 0x02, 0x45, 0x8A, 0xFD, 0x75, 0xF0, 0x0E, 0x90, 0xA0, 0xB1, \r
+0x02, 0x45, 0x8A, 0x7F, 0xF4, 0x12, 0x46, 0xAB, 0xEF, 0x20, 0xE5, 0x0E, 0x7F, 0xF4, 0x12, 0x46, \r
+0xAB, 0xEF, 0x7F, 0x01, 0x20, 0xE4, 0x05, 0x7F, 0x02, 0x22, 0x7F, 0x03, 0x22, 0x11, 0x03, 0x90, \r
+0x9E, 0x98, 0xEF, 0xF0, 0x12, 0xB0, 0x65, 0x90, 0x01, 0x64, 0x74, 0x01, 0xF0, 0x90, 0x04, 0x23, \r
+0xE0, 0x44, 0x80, 0xF0, 0x11, 0x8F, 0x44, 0x04, 0xFD, 0x7F, 0x17, 0x12, 0x46, 0x8D, 0x7F, 0x16, \r
+0x11, 0xAA, 0x44, 0x40, 0xFD, 0x7F, 0x16, 0x12, 0x46, 0x8D, 0x12, 0xB7, 0x93, 0xEF, 0x64, 0x01, \r
+0x70, 0x30, 0x90, 0xA1, 0xBF, 0xE0, 0x54, 0x07, 0xF0, 0xE0, 0xFF, 0x64, 0x07, 0x60, 0x05, 0xEF, \r
+0x64, 0x04, 0x70, 0x1E, 0x12, 0xB0, 0x33, 0xEF, 0x64, 0x01, 0x70, 0x16, 0x7F, 0x16, 0x11, 0xAA, \r
+0x44, 0x60, 0xFD, 0x7F, 0x16, 0x12, 0x46, 0x8D, 0x11, 0x8F, 0x44, 0x05, 0xFD, 0x7F, 0x17, 0x12, \r
+0x46, 0x8D, 0x7F, 0x38, 0x12, 0xBD, 0x42, 0x7F, 0x38, 0x12, 0x46, 0x8D, 0x02, 0x37, 0x99, 0x7F, \r
+0x17, 0x12, 0x46, 0xAB, 0xEF, 0x54, 0xFC, 0x22, 0x7F, 0xA3, 0x12, 0x46, 0xAB, 0xEF, 0x54, 0xF8, \r
+0x44, 0x05, 0xFD, 0x7F, 0xA3, 0x12, 0x46, 0x8D, 0x7F, 0xA0, 0x12, 0x46, 0xAB, 0xEF, 0x54, 0x0F, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xAD, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, \r
+0xA3, 0x12, 0x45, 0x9F, 0x11, 0x98, 0x64, 0x04, 0x70, 0x22, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, \r
+0x13, 0x90, 0xA2, 0xAD, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xA3, 0x12, 0x45, 0x96, 0x12, 0x95, 0x78, \r
+0x7F, 0x01, 0x80, 0x0E, 0x7F, 0x01, 0x51, 0xD0, 0x7F, 0x02, 0x80, 0x06, 0x7F, 0x02, 0x51, 0xD0, \r
+0x7F, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xFD, 0x68, 0xE0, 0xFF, 0x90, 0xFD, 0x60, 0xE0, \r
+0x90, 0xA2, 0x08, 0xF0, 0xEF, 0x20, 0xE0, 0x02, 0x41, 0xCF, 0x90, 0xA2, 0xEE, 0xE0, 0x70, 0x1A, \r
+0x7F, 0x2E, 0x12, 0x46, 0xAB, 0x90, 0xA0, 0x88, 0xEF, 0xF0, 0x7F, 0x2D, 0x12, 0x46, 0xAB, 0x90, \r
+0xA0, 0x89, 0xEF, 0xF0, 0x90, 0xA2, 0xEE, 0x74, 0x01, 0xF0, 0x90, 0xA2, 0x08, 0xE0, 0x64, 0x15, \r
+0x70, 0x58, 0x90, 0xFD, 0x62, 0xE0, 0xFF, 0x30, 0xE6, 0x11, 0xF4, 0x54, 0x3F, 0x04, 0xFE, 0x91, \r
+0x02, 0xC3, 0x9E, 0x71, 0xFA, 0x40, 0x12, 0xE4, 0xF0, 0x80, 0x0E, 0x91, 0x02, 0xFE, 0xEF, 0x54, \r
+0x3F, 0x2E, 0x71, 0xFA, 0x40, 0x03, 0x74, 0x3F, 0xF0, 0x90, 0xA2, 0x07, 0xE0, 0xFF, 0x54, 0x30, \r
+0xC4, 0x54, 0x0F, 0xFE, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x4E, 0x90, 0xA2, 0x05, 0xF0, 0xE0, 0xFD, \r
+0x7F, 0x2E, 0x12, 0x46, 0x8D, 0x90, 0xA2, 0x07, 0xE0, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0xA0, 0x89, \r
+0xE0, 0x54, 0x0F, 0x4F, 0xFD, 0x7F, 0x2D, 0x12, 0x46, 0x8D, 0x90, 0xA2, 0x08, 0xE0, 0xB4, 0x21, \r
+0x0C, 0x90, 0xFD, 0x62, 0xE0, 0xFF, 0x12, 0x98, 0x2B, 0x7F, 0x04, 0x51, 0xD4, 0x90, 0xA2, 0x08, \r
+0xE0, 0xB4, 0x23, 0x04, 0x7F, 0x01, 0x51, 0xEA, 0x90, 0xA2, 0x08, 0xE0, 0xB4, 0x27, 0x04, 0x7F, \r
+0x02, 0x51, 0xEA, 0x90, 0xA2, 0x08, 0xE0, 0xB4, 0x30, 0x0C, 0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0x12, \r
+0x99, 0x17, 0x7F, 0x04, 0x51, 0xD4, 0x90, 0xA2, 0x08, 0xE0, 0x64, 0x34, 0x60, 0x02, 0x41, 0x6E, \r
+0x90, 0xFD, 0x62, 0xE0, 0x30, 0xE0, 0x5A, 0x90, 0xA0, 0x6F, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, \r
+0x02, 0x41, 0x6E, 0x90, 0xA0, 0x4D, 0xF1, 0xDF, 0x30, 0xE0, 0x1A, 0x51, 0xE3, 0x90, 0xA0, 0x70, \r
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x51, 0xE3, 0xE4, 0xFF, 0xFE, 0xEC, 0x12, 0x47, 0xCE, 0x7F, 0x48, \r
+0x7E, 0x09, 0x12, 0x38, 0x45, 0x91, 0x0B, 0x7D, 0x01, 0x12, 0x46, 0xC8, 0x90, 0xA2, 0x05, 0x74, \r
+0x01, 0xF0, 0xFB, 0x7A, 0xA2, 0x79, 0x05, 0xFD, 0x7F, 0x34, 0x11, 0xB1, 0x90, 0xA0, 0x93, 0xE0, \r
+0x44, 0x01, 0xF0, 0x90, 0x04, 0x9D, 0xE4, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x12, 0xAE, 0xA2, 0x80, \r
+0x3D, 0x91, 0x0B, 0xE4, 0xFD, 0x12, 0x46, 0xC8, 0x90, 0xA0, 0x4D, 0x12, 0x6B, 0x0A, 0x30, 0xE0, \r
+0x21, 0x51, 0xE3, 0xE4, 0xFB, 0xFA, 0xED, 0xF9, 0xEC, 0xF8, 0x90, 0xA0, 0x70, 0xE0, 0xFE, 0xA3, \r
+0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0x12, 0x45, 0x54, 0x12, 0x47, 0xCE, 0x7F, 0x48, 0x7E, 0x09, 0x12, \r
+0x38, 0x45, 0xF1, 0xE6, 0x90, 0x04, 0x9D, 0xE0, 0x54, 0xFE, 0xF0, 0x12, 0xAE, 0xE3, 0x90, 0xA2, \r
+0x08, 0xE0, 0xFD, 0xB4, 0x35, 0x07, 0x90, 0xA0, 0x51, 0xE0, 0x44, 0x01, 0xF0, 0xED, 0xB4, 0x36, \r
+0x22, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0xA2, 0x05, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0xA2, 0x06, \r
+0xF0, 0x90, 0xA2, 0x08, 0xE0, 0xFF, 0x90, 0xA2, 0x05, 0xE0, 0xFD, 0x7B, 0x01, 0x7A, 0xA2, 0x79, \r
+0x06, 0x11, 0xB1, 0x90, 0xA2, 0x08, 0xE0, 0xB4, 0x37, 0x03, 0x12, 0xAC, 0x33, 0x90, 0xA2, 0x08, \r
+0xE0, 0xB4, 0x40, 0x14, 0x90, 0xFD, 0x62, 0xE0, 0x30, 0xE0, 0x08, 0x90, 0xA0, 0x6D, 0x74, 0x01, \r
+0xF0, 0x80, 0x05, 0xE4, 0x90, 0xA0, 0x6D, 0xF0, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x01, 0xF0, 0x22, \r
+0x51, 0xF0, 0x7F, 0x04, 0x8F, 0x6F, 0x7F, 0x02, 0x12, 0x44, 0xB7, 0x90, 0x9E, 0x92, 0xE0, 0x45, \r
+0x6F, 0xF0, 0x22, 0x7F, 0x48, 0x7E, 0x09, 0x02, 0x37, 0x4E, 0x71, 0x15, 0x7F, 0x04, 0x80, 0xE4, \r
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x5B, 0x74, 0x15, 0xF0, 0x90, 0xA2, 0x69, \r
+0x74, 0x01, 0xF0, 0x90, 0xA2, 0x5D, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0xA2, 0x79, 0x5B, 0x71, 0x9B, \r
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA2, 0x3D, 0x74, 0x09, 0xF0, 0x90, 0xA2, 0x4B, 0x74, 0x07, \r
+0xF0, 0x90, 0xA2, 0x3F, 0xEF, 0xF0, 0x70, 0x31, 0x90, 0xA0, 0x63, 0xE0, 0x60, 0x1A, 0xA3, 0xE0, \r
+0x60, 0x02, 0x80, 0x0C, 0x90, 0x07, 0x70, 0xE0, 0x70, 0x06, 0x90, 0x07, 0x74, 0xE0, 0x60, 0x08, \r
+0x90, 0xA2, 0x40, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0xA2, 0x40, 0xF0, 0xE4, 0x90, 0xA2, \r
+0x41, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x80, 0x39, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0xA2, 0x40, \r
+0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0xA2, 0x41, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0xA2, 0x42, \r
+0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0xA2, 0x43, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0xA2, 0x44, \r
+0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0xA2, 0x45, 0xF0, 0x90, 0xA2, 0x40, 0xE0, 0x54, 0x01, 0x90, \r
+0xA0, 0x63, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0xA2, 0x79, 0x3D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, \r
+0xC0, 0xD0, 0x90, 0x9F, 0xB8, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, \r
+0x14, 0xFF, 0x90, 0x9F, 0xB9, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, \r
+0x60, 0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x2A, 0xC0, 0x01, 0x90, 0x9F, 0xB9, \r
+0xE0, 0x12, 0x9E, 0xCB, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0xD0, 0x01, 0x7E, 0x00, 0x7F, 0x0F, 0x12, \r
+0x06, 0x63, 0x90, 0x9F, 0xB9, 0x12, 0x7F, 0xE0, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, \r
+0xE4, 0x90, 0x9F, 0xB9, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA2, 0x07, 0xF0, 0xD3, 0x94, \r
+0x3F, 0x22, 0x90, 0xA0, 0x88, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x22, 0x90, 0xA0, 0x4D, 0xE0, 0xC4, \r
+0x13, 0x13, 0x54, 0x01, 0xFF, 0x90, 0xA0, 0x8D, 0xE0, 0xFB, 0x90, 0xA0, 0x8C, 0xE0, 0x90, 0xA2, \r
+0xC3, 0xF0, 0x22, 0x90, 0xA0, 0x65, 0xE0, 0x30, 0xE0, 0x05, 0x12, 0xAC, 0x89, 0x80, 0x03, 0x12, \r
+0xA0, 0xCA, 0x90, 0xA0, 0x93, 0xE0, 0x30, 0xE0, 0x04, 0xA3, 0xE0, 0x04, 0xF0, 0x90, 0xA0, 0x94, \r
+0xE0, 0x64, 0x08, 0x70, 0x17, 0x90, 0xA0, 0x93, 0xE0, 0x30, 0xE0, 0x0B, 0x91, 0x0B, 0xE4, 0xFD, \r
+0x12, 0x46, 0xC8, 0xF1, 0xE6, 0x80, 0x05, 0xE4, 0x90, 0xA0, 0x94, 0xF0, 0xF1, 0xDC, 0x30, 0xE0, \r
+0x13, 0x90, 0xA0, 0x95, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x14, 0x09, 0x90, 0x04, 0x9C, 0xE4, 0xF0, \r
+0x90, 0xA0, 0x95, 0xF0, 0x90, 0x9F, 0xCF, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x9F, 0xD1, 0x74, 0x01, \r
+0xF0, 0x90, 0x9F, 0xD9, 0xE0, 0x70, 0x02, 0xA1, 0x12, 0x90, 0x9F, 0xF0, 0xE0, 0x04, 0xB1, 0x27, \r
+0x12, 0x45, 0x54, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0xB1, 0x41, \r
+0x78, 0x10, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x54, \r
+0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0xB1, 0x41, 0x78, 0x18, 0x12, 0x08, 0x5A, \r
+0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x54, 0x90, 0xA0, 0x24, 0x12, 0x08, \r
+0x6D, 0x90, 0x9F, 0xD5, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0xE0, 0x30, 0xE0, 0x0C, 0x12, 0xAB, 0xC0, \r
+0x74, 0x05, 0xF0, 0x12, 0xAA, 0xBC, 0x12, 0xAB, 0xD1, 0x90, 0x9F, 0xD5, 0x12, 0x89, 0xDA, 0x30, \r
+0xE0, 0x09, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x02, 0xF1, 0xAF, 0x90, 0xA3, 0x12, 0xE0, 0x04, \r
+0xF0, 0xE0, 0xC3, 0x94, 0x80, 0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, \r
+0x01, 0xF0, 0x7F, 0x01, 0x51, 0xD4, 0x90, 0xA0, 0x3D, 0xE0, 0x30, 0xE0, 0x09, 0x90, 0x01, 0x3B, \r
+0xE0, 0x30, 0xE4, 0x02, 0xF1, 0xAF, 0x22, 0xF0, 0x90, 0x05, 0x61, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, \r
+0xFE, 0x78, 0x08, 0x12, 0x08, 0x5A, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x05, \r
+0x60, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x22, 0x12, 0xA5, 0x19, 0xFF, 0x54, 0x0F, 0xF5, 0x54, \r
+0xEF, 0xC4, 0x54, 0x0F, 0x64, 0x0F, 0x70, 0x39, 0x90, 0xA0, 0xAE, 0xE0, 0x54, 0xFE, 0xFF, 0xF0, \r
+0xE5, 0x54, 0x54, 0x07, 0x25, 0xE0, 0xFE, 0xEF, 0x54, 0xF1, 0x4E, 0xF1, 0xD4, 0xFF, 0xBF, 0x03, \r
+0x09, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xED, 0xF0, 0x80, 0x03, 0x12, 0x66, 0x09, 0xAF, 0x54, 0x12, \r
+0xB6, 0x7A, 0xBF, 0x01, 0x08, 0xE4, 0xFD, 0xFF, 0x12, 0x54, 0xD1, 0x80, 0x00, 0x7F, 0x02, 0x80, \r
+0x72, 0xE5, 0x54, 0x75, 0xF0, 0x0B, 0xA4, 0x24, 0xDB, 0xF9, 0x74, 0xA0, 0x35, 0xF0, 0xFA, 0x7B, \r
+0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE5, 0x53, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x52, 0x85, 0x51, 0x40, \r
+0xF5, 0x41, 0x89, 0x42, 0x75, 0x43, 0x04, 0xD0, 0x01, 0xD0, 0x02, 0x12, 0x35, 0x26, 0xAB, 0x51, \r
+0xAA, 0x52, 0xA9, 0x53, 0xF1, 0xC6, 0x54, 0x80, 0x12, 0x4F, 0xD2, 0xFF, 0x75, 0xF0, 0x0B, 0xE5, \r
+0x54, 0x12, 0xBC, 0xF2, 0x54, 0xFE, 0x4F, 0xF0, 0x75, 0xF0, 0x0B, 0xE5, 0x54, 0x90, 0xA0, 0xDE, \r
+0x12, 0x45, 0x8A, 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x06, 0x89, 0xC4, 0x54, 0x0F, 0x14, 0x65, 0x54, \r
+0x60, 0x02, 0xE1, 0xAE, 0x90, 0x9F, 0xD9, 0xE0, 0x70, 0x07, 0x90, 0x9F, 0xCF, 0xE0, 0x30, 0xE0, \r
+0x05, 0x7F, 0x05, 0x02, 0x9F, 0x71, 0xAB, 0x51, 0xAA, 0x52, 0xA9, 0x53, 0x12, 0x06, 0x89, 0xC4, \r
+0x54, 0x0F, 0x90, 0xA0, 0xAF, 0xF1, 0xC5, 0xFF, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFE, 0x90, 0xA0, \r
+0xAE, 0xE0, 0x54, 0x0F, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0x25, 0xE0, 0xFF, 0x90, 0xA0, 0xFE, 0xE0, \r
+0x54, 0xDF, 0x4F, 0xFF, 0xF1, 0xC5, 0x54, 0x60, 0xC4, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xF9, 0x4E, \r
+0x90, 0xA0, 0xFE, 0xF0, 0x90, 0xA0, 0xAE, 0xE0, 0x54, 0xF1, 0xF0, 0x12, 0xBC, 0x0F, 0x90, 0xA0, \r
+0xAE, 0xE0, 0x44, 0x01, 0xF1, 0xD4, 0x64, 0x03, 0x70, 0x49, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x12, \r
+0xF0, 0xE4, 0x90, 0xA1, 0xCF, 0xF0, 0x90, 0xA1, 0xCF, 0xE0, 0xFF, 0xFD, 0xC3, 0x74, 0xEB, 0x9D, \r
+0xFD, 0x74, 0x05, 0x94, 0x00, 0x8D, 0x82, 0xF5, 0x83, 0xE0, 0xFE, 0xEF, 0xFD, 0x7C, 0x00, 0xC3, \r
+0x74, 0x03, 0x9D, 0xFB, 0xE4, 0x9C, 0x12, 0xBB, 0x74, 0x74, 0x07, 0x9D, 0xFF, 0xE4, 0x9C, 0xFE, \r
+0x74, 0xD0, 0x2F, 0xF5, 0x82, 0x74, 0xA1, 0x3E, 0xF5, 0x83, 0xE4, 0xF1, 0xCC, 0xE0, 0xB4, 0x04, \r
+0xC5, 0x80, 0x58, 0x12, 0xA7, 0x00, 0xE4, 0x90, 0xA1, 0xCF, 0xF0, 0x90, 0xA1, 0xCF, 0xE0, 0xF9, \r
+0xC3, 0x94, 0x04, 0x50, 0x46, 0xE0, 0xFF, 0xFD, 0x7C, 0x00, 0xC3, 0x74, 0x87, 0x9D, 0xFB, 0x74, \r
+0x05, 0x9C, 0x8B, 0x82, 0xF5, 0x83, 0xE0, 0xFE, 0xEF, 0xFB, 0xC3, 0x74, 0x03, 0x9B, 0xFB, 0xE4, \r
+0x94, 0x00, 0x12, 0xBB, 0x74, 0x74, 0x8B, 0x9D, 0xFF, 0x74, 0x05, 0x9C, 0x8F, 0x82, 0xF5, 0x83, \r
+0xE0, 0xFF, 0xE9, 0xFD, 0xC3, 0x74, 0x07, 0x9D, 0xFD, 0xE4, 0x9C, 0xFC, 0x74, 0xD0, 0x2D, 0xF5, \r
+0x82, 0x74, 0xA1, 0x3C, 0xF5, 0x83, 0xEF, 0xF1, 0xCC, 0x80, 0xB0, 0x7F, 0x03, 0x12, 0x9F, 0x71, \r
+0x90, 0xA0, 0xDD, 0xE0, 0x90, 0xA1, 0x33, 0xB4, 0x64, 0x05, 0x74, 0xC8, 0xF0, 0x80, 0x03, 0x74, \r
+0x64, 0xF0, 0x90, 0xA1, 0xD1, 0xB1, 0x41, 0x12, 0xBB, 0x8C, 0x90, 0xA1, 0xD0, 0xB1, 0x41, 0x12, \r
+0x45, 0x54, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0xA1, 0xD2, 0xB1, 0x41, 0x78, \r
+0x10, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x54, 0xC0, \r
+0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0xB1, 0x41, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, \r
+0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x54, 0x90, 0xA1, 0x2B, 0x12, 0x08, 0x6D, \r
+0x90, 0xA1, 0xD5, 0xB1, 0x41, 0x12, 0xBB, 0x8C, 0x90, 0xA1, 0xD4, 0xB1, 0x41, 0x12, 0x45, 0x54, \r
+0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0xA1, 0xD6, 0xB1, 0x41, 0x78, 0x10, 0x12, \r
+0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x54, 0xC0, 0x04, 0xC0, \r
+0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0xB1, 0x41, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, \r
+0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x54, 0x90, 0xA1, 0x2F, 0x12, 0x08, 0x6D, 0x22, 0x7D, \r
+0x02, 0x7F, 0x02, 0xF1, 0xB9, 0x7D, 0x01, 0x7F, 0x02, 0x74, 0x15, 0x12, 0xBD, 0x3A, 0xFE, 0xF6, \r
+0x74, 0x30, 0x02, 0x66, 0x16, 0xF0, 0x90, 0x00, 0x06, 0x02, 0x06, 0xA2, 0xF0, 0x90, 0xA1, 0xCF, \r
+0xE0, 0x04, 0xF0, 0x22, 0xF0, 0x90, 0xA0, 0xDE, 0xE0, 0x54, 0x07, 0x22, 0x90, 0xA0, 0x4E, 0xE0, \r
+0xC4, 0x13, 0x13, 0x54, 0x03, 0x22, 0x90, 0xA0, 0x93, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0xA3, 0xF0, \r
+0x22, 0x7D, 0x01, 0x7F, 0x17, 0x01, 0xB1, 0x75, 0xE8, 0x07, 0x75, 0xA8, 0x85, 0x22, 0x7F, 0x81, \r
+0x12, 0x46, 0xAB, 0xEF, 0x54, 0xFE, 0xFD, 0x7F, 0x81, 0x12, 0x46, 0x8D, 0x7F, 0x80, 0x12, 0x78, \r
+0xB7, 0xFD, 0x7F, 0x80, 0x12, 0x46, 0x8D, 0x12, 0xB1, 0x3B, 0x12, 0x3E, 0x11, 0x12, 0x9E, 0xFD, \r
+0x11, 0x69, 0x7F, 0x01, 0x12, 0x43, 0xA5, 0x90, 0xA0, 0xAC, 0x74, 0x02, 0xF0, 0xFF, 0x12, 0x43, \r
+0xA5, 0x90, 0xA0, 0xAC, 0xE0, 0x04, 0xF0, 0x12, 0x58, 0x1D, 0x12, 0x91, 0x29, 0x7F, 0x80, 0x12, \r
+0xBD, 0x42, 0x7F, 0x80, 0x12, 0x46, 0x8D, 0x75, 0x28, 0xFF, 0x12, 0x5F, 0xF7, 0x12, 0x9D, 0xDC, \r
+0x7F, 0x81, 0x12, 0x46, 0xAB, 0xEF, 0x44, 0x04, 0xFD, 0x7F, 0x81, 0x12, 0x46, 0x8D, 0x12, 0xB1, \r
+0x7C, 0x12, 0xB7, 0x77, 0xE4, 0xFF, 0x02, 0x44, 0x2E, 0xE4, 0x90, 0x9E, 0x92, 0x11, 0x73, 0xA3, \r
+0xF0, 0x22, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xEF, 0x64, 0x01, 0x70, 0x1F, \r
+0x91, 0x5A, 0x90, 0x01, 0x38, 0x11, 0x72, 0x90, 0x01, 0x30, 0x11, 0x73, 0x90, 0x01, 0x30, 0x74, \r
+0x10, 0xF0, 0x90, 0x01, 0x39, 0x74, 0x01, 0xF0, 0x90, 0x00, 0x53, 0x74, 0x80, 0xF0, 0x22, 0x12, \r
+0x9E, 0xE4, 0x90, 0xA0, 0x47, 0xE0, 0x90, 0x01, 0x31, 0xF0, 0x90, 0xA0, 0x48, 0xE0, 0x90, 0x01, \r
+0x32, 0xF0, 0x90, 0xA0, 0x49, 0xE0, 0x90, 0x01, 0x33, 0xF0, 0x90, 0xA0, 0x42, 0xE0, 0x90, 0x01, \r
+0x38, 0xF0, 0x90, 0xA0, 0x45, 0xE0, 0x90, 0x01, 0x3B, 0x91, 0x79, 0x7F, 0x01, 0x51, 0x3E, 0x7E, \r
+0x00, 0x7F, 0x62, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x9F, 0x79, 0xD4, 0x12, 0x08, 0xAA, 0x12, 0xBB, \r
+0xA3, 0x12, 0x08, 0xAA, 0x90, 0x9F, 0xD8, 0x74, 0x02, 0xF0, 0x90, 0x9F, 0xDF, 0x14, 0xF0, 0xA3, \r
+0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x90, 0x9F, 0xE5, 0xE4, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x51, 0x30, \r
+0xF0, 0x12, 0xB9, 0xBB, 0xE4, 0xFD, 0xFF, 0x31, 0xC6, 0x7D, 0x0C, 0x7F, 0x02, 0x31, 0xC6, 0x31, \r
+0xC2, 0x90, 0x9E, 0x98, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x9F, 0xE4, 0x74, 0xDD, 0xF0, 0x80, 0x12, \r
+0x90, 0x9E, 0x98, 0xE0, 0x90, 0x9F, 0xE4, 0xB4, 0x03, 0x05, 0x74, 0xD4, 0xF0, 0x80, 0x03, 0x74, \r
+0x40, 0xF0, 0x7F, 0x79, 0x12, 0x46, 0xAB, 0xEF, 0x54, 0x03, 0xFF, 0xBF, 0x02, 0x0F, 0x7F, 0x28, \r
+0x12, 0x46, 0xAB, 0xEF, 0x30, 0xE2, 0x06, 0x90, 0x9F, 0xF6, 0x74, 0x02, 0xF0, 0x12, 0xAD, 0x42, \r
+0x51, 0x30, 0xF0, 0x90, 0xA0, 0x41, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x01, 0x38, 0xE0, 0x90, 0xA0, \r
+0x42, 0xF0, 0x90, 0x01, 0x39, 0xE0, 0x90, 0xA0, 0x43, 0xF0, 0x90, 0x01, 0x3A, 0xE0, 0x90, 0xA0, \r
+0x44, 0xF0, 0x90, 0x01, 0x3B, 0xE0, 0x90, 0xA0, 0x45, 0xF0, 0x90, 0x01, 0x30, 0xE0, 0x90, 0xA0, \r
+0x46, 0xF0, 0x90, 0x01, 0x31, 0xE0, 0x90, 0xA0, 0x47, 0xF0, 0x90, 0x01, 0x32, 0xE0, 0x90, 0xA0, \r
+0x48, 0xF0, 0x90, 0x01, 0x33, 0xE0, 0x90, 0xA0, 0x49, 0xF0, 0x7F, 0x01, 0x12, 0xAA, 0x8D, 0x12, \r
+0xBC, 0x0F, 0x7E, 0x00, 0xFF, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA0, 0x79, 0x3A, 0x12, 0x08, 0xAA, \r
+0x12, 0xBC, 0xCB, 0x12, 0xBC, 0xC3, 0xD1, 0x3A, 0xE4, 0x90, 0xA0, 0x3C, 0xF0, 0x22, 0xE0, 0x54, \r
+0x7F, 0xF0, 0x7D, 0x0C, 0x7F, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA3, 0x15, \r
+0xEF, 0xF0, 0x14, 0x60, 0x15, 0x14, 0x60, 0x19, 0x24, 0x02, 0x70, 0x1A, 0xED, 0x54, 0x01, 0xFF, \r
+0x90, 0x9F, 0xD4, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0x80, 0x0C, 0x90, 0x9F, 0xDC, 0xED, 0xF0, 0x80, \r
+0x05, 0x90, 0x9F, 0xDB, 0xED, 0xF0, 0x7F, 0x8F, 0x12, 0x46, 0xAB, 0xEF, 0x30, 0xE4, 0x2C, 0x90, \r
+0xA3, 0x15, 0xE0, 0x14, 0x60, 0x07, 0x14, 0x60, 0x18, 0x24, 0x02, 0x70, 0x1E, 0x90, 0x9F, 0xD4, \r
+0xE0, 0x12, 0xBC, 0x58, 0xFF, 0x90, 0x9F, 0xDC, 0xE0, 0x54, 0x7F, 0x4F, 0xFD, 0x7F, 0x88, 0x80, \r
+0x07, 0x90, 0x9F, 0xDB, 0xE0, 0xFD, 0x7F, 0x89, 0x12, 0x46, 0x8D, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
+0x90, 0x9F, 0xF6, 0xE0, 0x24, 0x04, 0x90, 0x9F, 0xF1, 0xF0, 0xA3, 0x74, 0x0A, 0x22, 0x90, 0xA3, \r
+0x16, 0xEF, 0xF0, 0xD1, 0xB8, 0x90, 0xA3, 0x16, 0xE0, 0x60, 0x02, 0xD1, 0x3A, 0x91, 0x54, 0x90, \r
+0x9F, 0xD3, 0x74, 0x04, 0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x04, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
+0xD0, 0x90, 0xA3, 0x17, 0xED, 0xF0, 0x90, 0x9F, 0xD4, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x54, 0x03, \r
+0x30, 0xE0, 0x02, 0x61, 0x9D, 0xEE, 0x12, 0x4F, 0xD2, 0x30, 0xE0, 0x02, 0x61, 0x9D, 0x90, 0x9F, \r
+0xDC, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0x61, 0x9D, 0xEF, 0x70, 0x02, 0x61, 0x16, 0x24, 0xFE, 0x70, \r
+0x02, 0x61, 0x4F, 0x24, 0xFE, 0x60, 0x47, 0x24, 0xFC, 0x70, 0x02, 0x61, 0x8A, 0x24, 0xFC, 0x60, \r
+0x02, 0x61, 0x9D, 0xEE, 0xB4, 0x0E, 0x02, 0x71, 0xE0, 0x90, 0x9F, 0xDC, 0xE0, 0x70, 0x04, 0x7F, \r
+0x01, 0x51, 0x3E, 0x90, 0x9F, 0xDC, 0xE0, 0xB4, 0x06, 0x02, 0x91, 0x01, 0x90, 0x9F, 0xDC, 0xE0, \r
+0xB4, 0x04, 0x0D, 0x90, 0xA3, 0x17, 0xE0, 0xFF, 0x60, 0x04, 0xF1, 0xB0, 0x80, 0x02, 0xD1, 0x48, \r
+0x90, 0x9F, 0xDC, 0xE0, 0x64, 0x08, 0x60, 0x02, 0x61, 0x9D, 0xD1, 0x2D, 0x61, 0x9D, 0x90, 0x9F, \r
+0xDC, 0xE0, 0x70, 0x04, 0x7F, 0x01, 0x51, 0x3E, 0x90, 0x9F, 0xDC, 0xE0, 0xB4, 0x06, 0x02, 0x91, \r
+0x01, 0x90, 0x9F, 0xDC, 0xE0, 0xB4, 0x0E, 0x07, 0x71, 0xA2, 0xBF, 0x01, 0x02, 0x71, 0xE0, 0x90, \r
+0x9F, 0xDC, 0xE0, 0x64, 0x0C, 0x60, 0x02, 0x61, 0x9D, 0x71, 0xA2, 0xEF, 0x64, 0x01, 0x60, 0x02, \r
+0x61, 0x9D, 0x91, 0x27, 0x61, 0x9D, 0x90, 0x9F, 0xDC, 0xE0, 0xB4, 0x0E, 0x07, 0x71, 0xA2, 0xBF, \r
+0x01, 0x02, 0x71, 0xE0, 0x90, 0x9F, 0xDC, 0xE0, 0xB4, 0x06, 0x02, 0x91, 0x01, 0x90, 0x9F, 0xDC, \r
+0xE0, 0xB4, 0x0C, 0x07, 0x71, 0xA2, 0xBF, 0x01, 0x02, 0x91, 0x27, 0x90, 0x9F, 0xDC, 0xE0, 0x64, \r
+0x04, 0x70, 0x5A, 0x12, 0xB9, 0x3F, 0xEF, 0x64, 0x01, 0x70, 0x52, 0x91, 0x5A, 0x80, 0x4E, 0x90, \r
+0x9F, 0xDC, 0xE0, 0xB4, 0x0E, 0x07, 0x71, 0xA2, 0xBF, 0x01, 0x02, 0x71, 0xE0, 0x90, 0x9F, 0xDC, \r
+0xE0, 0xB4, 0x06, 0x02, 0x91, 0x01, 0x90, 0x9F, 0xDC, 0xE0, 0xB4, 0x0C, 0x07, 0x71, 0xA2, 0xBF, \r
+0x01, 0x02, 0x91, 0x27, 0x90, 0x9F, 0xDC, 0xE0, 0x70, 0x04, 0x7F, 0x01, 0x51, 0x3E, 0x90, 0x9F, \r
+0xDC, 0xE0, 0xB4, 0x04, 0x18, 0x12, 0xB8, 0x5C, 0x80, 0x13, 0x90, 0x9F, 0xDC, 0xE0, 0xB4, 0x0C, \r
+0x0C, 0x90, 0x9F, 0xD5, 0x12, 0x84, 0xC9, 0x30, 0xE0, 0x03, 0x12, 0xB9, 0xD2, 0xD0, 0xD0, 0x92, \r
+0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA0, 0x4A, 0xE0, 0x30, 0xE0, 0x0D, \r
+0x90, 0xA0, 0x50, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x80, 0x1C, 0x12, 0xA2, 0xB7, \r
+0xBF, 0x01, 0x16, 0x90, 0x9F, 0xD4, 0x12, 0x89, 0xDA, 0x20, 0xE0, 0x0D, 0x90, 0x9F, 0xDB, 0xE0, \r
+0xD3, 0x94, 0x04, 0x50, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
+0x90, 0x9F, 0xD5, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x04, 0x31, 0xC2, 0x80, 0x0E, 0x12, 0xBA, 0x4D, \r
+0x91, 0x53, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x80, 0xF0, 0x51, 0x4F, 0xE4, 0xFD, 0xFF, 0x02, 0x54, \r
+0xC6, 0x90, 0x9F, 0xD5, 0xE0, 0x90, 0x06, 0x04, 0x20, 0xE0, 0x07, 0xE0, 0x44, 0x40, 0x91, 0x53, \r
+0x80, 0x0F, 0x31, 0xBE, 0x90, 0x05, 0x27, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x9F, 0xD3, 0x74, 0x0C, \r
+0xF0, 0xE4, 0xFD, 0xFF, 0x02, 0x54, 0xC6, 0xF1, 0xA8, 0x70, 0x27, 0x90, 0x9F, 0xD5, 0xE0, 0x54, \r
+0xFD, 0xF0, 0x7D, 0x2C, 0x7F, 0x6F, 0x12, 0x54, 0xC6, 0x12, 0x85, 0x71, 0xBF, 0x01, 0x13, 0x90, \r
+0x9F, 0xD4, 0xE0, 0x44, 0x80, 0xF0, 0x7D, 0x0E, 0x7F, 0x01, 0x31, 0xC6, 0x90, 0x9F, 0xD3, 0x74, \r
+0x0E, 0xF0, 0x22, 0xF0, 0x7D, 0x04, 0x7F, 0x01, 0x21, 0xC6, 0x7D, 0x2D, 0x12, 0x57, 0x51, 0x90, \r
+0x01, 0x37, 0x74, 0x02, 0xF0, 0xFD, 0x7F, 0x03, 0x91, 0x84, 0x12, 0x47, 0xEB, 0xE4, 0xFD, 0x7F, \r
+0x01, 0x31, 0xC6, 0xE4, 0x90, 0x9F, 0xD3, 0xF0, 0x22, 0xF0, 0x7D, 0x01, 0x7F, 0x02, 0x91, 0x84, \r
+0x7D, 0x02, 0x7F, 0x02, 0x74, 0x15, 0x2F, 0xF8, 0xE6, 0x4D, 0xFE, 0xF6, 0x74, 0x30, 0xC1, 0x16, \r
+0x90, 0x01, 0x36, 0x74, 0x78, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x78, 0xFF, 0x91, 0x84, 0x7D, \r
+0x02, 0x7F, 0x03, 0x91, 0x84, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0x12, 0xAB, 0xE1, 0xE4, 0xFF, \r
+0xD1, 0x8C, 0xBF, 0x01, 0x11, 0x12, 0x6C, 0x2D, 0xF0, 0x90, 0x9F, 0xDC, 0xE0, 0x20, 0xE2, 0x08, \r
+0x7D, 0x01, 0x7F, 0x04, 0x41, 0x5A, 0xD1, 0x01, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
+0xEF, 0x64, 0x01, 0x70, 0x19, 0xF1, 0x9A, 0x60, 0x09, 0xB1, 0x0F, 0xD1, 0x25, 0x12, 0xBC, 0x4F, \r
+0x80, 0x07, 0xB1, 0x0F, 0xD1, 0x0D, 0x12, 0x5F, 0xAF, 0x12, 0xB9, 0xD2, 0x80, 0x18, 0xF1, 0x9A, \r
+0x60, 0x06, 0xB1, 0x0F, 0xD1, 0x25, 0x80, 0x04, 0xB1, 0x0F, 0xD1, 0x0D, 0x91, 0x80, 0x7D, 0x01, \r
+0x7F, 0x02, 0x91, 0x84, 0xD1, 0x2D, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF0, 0x90, 0x01, 0x3F, 0x74, \r
+0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x22, 0x90, 0x05, 0x62, 0xE0, 0xFE, 0x90, 0x05, 0x61, 0xE0, 0xFD, \r
+0xED, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0xA1, 0xE9, 0xEE, 0xF0, \r
+0xA3, 0xEF, 0xF0, 0xF1, 0xA8, 0x60, 0x02, 0xA1, 0xF5, 0x90, 0x9F, 0xD9, 0xE0, 0x70, 0x02, 0xA1, \r
+0xF5, 0x12, 0xBB, 0x83, 0x64, 0x01, 0x70, 0x22, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x9F, 0xE0, 0xF0, \r
+0x90, 0x06, 0xAA, 0xE0, 0x90, 0x9F, 0xDF, 0xF0, 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x9F, 0xDF, \r
+0xE0, 0xFE, 0xFF, 0x80, 0x00, 0x90, 0x9F, 0xE0, 0xEF, 0xF0, 0x12, 0xA8, 0xCA, 0xE4, 0x90, 0x9F, \r
+0xE2, 0x12, 0xAB, 0xE1, 0x12, 0xA7, 0x18, 0x12, 0xA7, 0x42, 0x54, 0xEF, 0xF0, 0x12, 0xBB, 0x83, \r
+0x24, 0xFD, 0x50, 0x02, 0x80, 0x0F, 0x90, 0x9F, 0xCF, 0xE0, 0x30, 0xE0, 0x05, 0x12, 0xA1, 0xC1, \r
+0x80, 0x03, 0x12, 0xA1, 0x74, 0x12, 0x6B, 0x12, 0x30, 0xE0, 0x58, 0xEF, 0xC4, 0x13, 0x13, 0x54, \r
+0x03, 0x20, 0xE0, 0x22, 0x12, 0xBC, 0xE2, 0x6F, 0x70, 0x49, 0x90, 0x9F, 0xD5, 0xE0, 0x44, 0x40, \r
+0xF0, 0x12, 0xBC, 0xEA, 0xB1, 0x0B, 0xD1, 0x25, 0x12, 0x5F, 0xB5, 0x12, 0xBC, 0xD3, 0x90, 0x9F, \r
+0xE0, 0xE0, 0x14, 0xF0, 0x80, 0x2D, 0x90, 0x9F, 0xD7, 0xE0, 0xC4, 0x54, 0x0F, 0x64, 0x01, 0x70, \r
+0x22, 0x12, 0xBC, 0xE2, 0xFE, 0x6F, 0x60, 0x1B, 0x90, 0x05, 0x73, 0xE0, 0xFF, 0xEE, 0x6F, 0x60, \r
+0x12, 0x90, 0x9F, 0xD5, 0x12, 0x84, 0xC9, 0x30, 0xE0, 0x09, 0xEF, 0x54, 0xBF, 0xB1, 0x0B, 0xD1, \r
+0x0D, 0x91, 0x7A, 0xD1, 0x01, 0x90, 0x9F, 0xCF, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0xD1, 0x01, \r
+0x22, 0x90, 0x9F, 0xD5, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x7D, 0x20, 0xE4, 0xFF, 0x74, 0x1D, 0x12, \r
+0xBD, 0x3A, 0xFE, 0xF6, 0x74, 0x38, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x01, 0xF5, 0x83, 0xEE, 0xF0, \r
+0x22, 0x7D, 0x03, 0x7F, 0x02, 0x74, 0x1D, 0x2F, 0xF8, 0xE6, 0x4D, 0x80, 0xE5, 0xD1, 0x38, 0x31, \r
+0xC2, 0x90, 0x9F, 0xD3, 0x74, 0x0C, 0xF0, 0x22, 0xD1, 0xB8, 0xE4, 0xFD, 0xFF, 0x02, 0x54, 0xC6, \r
+0xD1, 0x3A, 0x91, 0x54, 0xF1, 0xEC, 0x41, 0x4F, 0x12, 0xBC, 0xCB, 0xD1, 0x3A, 0x7D, 0x0C, 0x7F, \r
+0x01, 0x21, 0xC6, 0xEF, 0x70, 0x34, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x5F, 0xB9, 0x7D, 0x02, 0x7F, \r
+0x03, 0x12, 0x5F, 0xB9, 0x7D, 0xC8, 0x7F, 0x02, 0xD1, 0x0D, 0x12, 0xA7, 0x18, 0xF0, 0xE4, 0xFF, \r
+0xD1, 0x8C, 0xEF, 0x70, 0x0A, 0xD1, 0xAC, 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0x80, 0x06, 0x7D, \r
+0x01, 0x7F, 0x0C, 0x51, 0x5A, 0xD1, 0xB0, 0x02, 0xBC, 0xC3, 0x81, 0x90, 0x12, 0xBB, 0xED, 0x12, \r
+0x91, 0x7E, 0xE0, 0xFD, 0x7C, 0x00, 0x12, 0x93, 0x2B, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, \r
+0xD8, 0xF9, 0x12, 0xBD, 0x12, 0x7F, 0x00, 0x60, 0x02, 0x7F, 0x01, 0x22, 0xD1, 0xB8, 0xD1, 0x48, \r
+0x90, 0x9F, 0xD4, 0xE0, 0x54, 0xF7, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, \r
+0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x06, 0xB7, 0x74, \r
+0x09, 0xF0, 0x90, 0x06, 0xB4, 0x74, 0x86, 0x12, 0x89, 0xD6, 0x30, 0xE0, 0x05, 0x7F, 0x03, 0x12, \r
+0x88, 0x32, 0x90, 0xA0, 0x65, 0xE0, 0x20, 0xE0, 0x38, 0x12, 0x8F, 0xD6, 0x13, 0x30, 0xE0, 0x31, \r
+0x90, 0xA0, 0x8C, 0xE0, 0x60, 0x07, 0xE4, 0x90, 0xA3, 0x05, 0xF0, 0x80, 0x06, 0x90, 0xA3, 0x05, \r
+0x74, 0x01, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x07, 0x90, 0xA3, 0x06, 0x30, 0xE0, 0x05, 0x74, 0x01, \r
+0xF0, 0x80, 0x03, 0x74, 0x02, 0xF0, 0x90, 0xA3, 0x05, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x12, 0x48, \r
+0x62, 0x7F, 0x02, 0x12, 0x9E, 0x9E, 0x7F, 0x02, 0x12, 0x46, 0x8D, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
+0x8B, 0x51, 0x8A, 0x52, 0x89, 0x53, 0x12, 0x4F, 0x8F, 0xFF, 0xF5, 0x55, 0x12, 0x06, 0x89, 0xFE, \r
+0xC3, 0x13, 0x30, 0xE0, 0x07, 0x12, 0x4F, 0xA5, 0xF5, 0x56, 0x80, 0x02, 0x8F, 0x56, 0x85, 0x55, \r
+0x54, 0xE5, 0x54, 0xD3, 0x95, 0x56, 0x50, 0x26, 0xAB, 0x51, 0xAA, 0x52, 0xA9, 0x53, 0x12, 0x06, \r
+0x89, 0x54, 0x01, 0xFD, 0xAF, 0x54, 0x12, 0x91, 0x42, 0xAF, 0x54, 0xD1, 0x8C, 0xEF, 0xAF, 0x54, \r
+0x70, 0x05, 0x12, 0xB0, 0x06, 0x80, 0x03, 0x12, 0xB0, 0x02, 0x05, 0x54, 0x80, 0xD3, 0xE5, 0x55, \r
+0x70, 0x0E, 0xFF, 0xD1, 0x8C, 0xEF, 0x70, 0x08, 0xD1, 0xAC, 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, \r
+0x22, 0xD1, 0x38, 0x90, 0x9F, 0xD2, 0x74, 0x01, 0xF0, 0x22, 0x90, 0xA0, 0x3F, 0xE0, 0x90, 0x01, \r
+0x3F, 0x22, 0xD1, 0x3A, 0xF1, 0xEC, 0x80, 0xEB, 0xE4, 0xFF, 0xD1, 0x8C, 0xEF, 0x64, 0x01, 0x22, \r
+0xEF, 0x60, 0x32, 0xF1, 0xA8, 0x70, 0x2E, 0x90, 0x9F, 0xD5, 0xE0, 0x54, 0xFE, 0xF0, 0x7D, 0x2B, \r
+0x7F, 0x0F, 0x12, 0x54, 0xC6, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0x12, 0xA3, 0x71, 0xBF, \r
+0x01, 0x13, 0x90, 0x9F, 0xD4, 0xE0, 0x44, 0x40, 0xF0, 0x7D, 0x06, 0x7F, 0x01, 0x31, 0xC6, 0x90, \r
+0x9F, 0xD3, 0x74, 0x06, 0xF0, 0x22, 0xD1, 0x3A, 0x80, 0xA9, 0x80, 0xA7, 0x90, 0x05, 0x27, 0xE0, \r
+0x44, 0x40, 0xF0, 0x22, 0xE4, 0x90, 0xA1, 0xC1, 0xF0, 0x90, 0xA1, 0xC1, 0xE0, 0x64, 0x01, 0xF0, \r
+0x24, 0xF4, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x67, 0xA3, 0xF0, 0x12, 0x3E, 0x44, 0xBF, 0x01, 0x03, \r
+0x12, 0x31, 0xFC, 0xC2, 0xAF, 0x90, 0x9F, 0xD9, 0xE0, 0x60, 0x0E, 0x90, 0x9F, 0xDC, 0xE0, 0xFF, \r
+0x90, 0x9F, 0xDB, 0xE0, 0x6F, 0x60, 0x02, 0x11, 0x4A, 0xC2, 0xAF, 0x12, 0xB1, 0x48, 0xBF, 0x01, \r
+0x03, 0x12, 0x9C, 0x16, 0xD2, 0xAF, 0xD2, 0xAF, 0x90, 0xA1, 0x3A, 0xE0, 0xB4, 0x01, 0x03, 0x12, \r
+0xB7, 0xA0, 0x12, 0x4F, 0xF6, 0x12, 0x42, 0xDD, 0x80, 0xAF, 0x90, 0x9F, 0xCF, 0xE0, 0x90, 0x9F, \r
+0xDB, 0x30, 0xE0, 0x05, 0xE0, 0xFF, 0x02, 0xB8, 0xCF, 0xE0, 0xFF, 0x7D, 0x01, 0x02, 0x62, 0x5A, \r
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x51, 0x8A, 0x52, 0x89, 0x53, 0x90, 0x05, 0x27, \r
+0xE0, 0xF5, 0x54, 0x12, 0x9E, 0x4D, 0x90, 0x9F, 0xCF, 0xB1, 0x6E, 0x12, 0x4F, 0xD9, 0xFF, 0x90, \r
+0x9F, 0xCF, 0x12, 0xBB, 0x9A, 0x71, 0x3D, 0xF1, 0xE8, 0xFF, 0x90, 0x9F, 0xCF, 0x12, 0x9E, 0xA6, \r
+0x71, 0x3D, 0xFE, 0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0x4D, 0x90, 0x9F, 0xCF, 0xF0, 0xEE, 0xC3, \r
+0x13, 0x20, 0xE0, 0x02, 0x21, 0x30, 0xE0, 0x30, 0xE0, 0x72, 0x12, 0x66, 0x21, 0x75, 0x54, 0x21, \r
+0x51, 0xFE, 0x30, 0xE0, 0x07, 0x71, 0x29, 0x43, 0x54, 0x08, 0x80, 0x0D, 0xE4, 0x90, 0x9F, 0xD0, \r
+0xF0, 0xA3, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x5F, 0xB9, 0x90, 0x9F, 0xCF, 0x71, 0x15, 0x30, 0xE0, \r
+0x03, 0x43, 0x54, 0x12, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x43, 0x54, 0x14, 0x90, 0x9F, \r
+0xCF, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x03, 0x43, 0x54, 0x80, 0x90, 0x9F, 0xCF, 0x12, \r
+0x5F, 0xDF, 0x20, 0xE0, 0x03, 0x43, 0x54, 0x40, 0x31, 0xDA, 0x90, 0x9F, 0xD2, 0xE0, 0x70, 0x04, \r
+0x7F, 0x01, 0x31, 0xE1, 0x71, 0x07, 0x30, 0xE0, 0x04, 0x7F, 0x04, 0x80, 0x0B, 0x71, 0x1D, 0xEF, \r
+0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x31, 0xE1, 0x21, 0xA2, 0x75, 0x54, 0x01, 0x31, \r
+0xDA, 0x90, 0x9F, 0xD2, 0xE0, 0x64, 0x04, 0x60, 0x02, 0x21, 0xD5, 0xFF, 0x31, 0xE1, 0x21, 0xD5, \r
+0x90, 0x9F, 0xCF, 0xE0, 0x30, 0xE0, 0x73, 0x12, 0x66, 0x21, 0x43, 0x54, 0x31, 0x51, 0xFE, 0x30, \r
+0xE0, 0x07, 0x71, 0x29, 0x43, 0x54, 0x08, 0x80, 0x07, 0x7D, 0x40, 0xE4, 0xFF, 0x12, 0x5F, 0xB9, \r
+0x90, 0x9F, 0xCF, 0x71, 0x15, 0x30, 0xE0, 0x03, 0x43, 0x54, 0x02, 0xEF, 0xC4, 0x54, 0x0F, 0x30, \r
+0xE0, 0x03, 0x43, 0x54, 0x04, 0x31, 0xDA, 0x71, 0x07, 0x30, 0xE0, 0x0B, 0x12, 0xA2, 0xE8, 0x60, \r
+0x31, 0xE4, 0xFD, 0x7F, 0x02, 0x80, 0x1E, 0x12, 0x67, 0xEC, 0x90, 0x9F, 0xD3, 0xE0, 0xB4, 0x02, \r
+0x19, 0x12, 0x66, 0x40, 0x71, 0x1D, 0xBF, 0x01, 0x09, 0x90, 0x9F, 0xDB, 0xE0, 0xFF, 0x7D, 0x01, \r
+0x80, 0x03, 0xE4, 0xFD, 0xFF, 0x12, 0x62, 0x5A, 0x80, 0x08, 0x90, 0x9F, 0xDC, 0xE0, 0x90, 0x9F, \r
+0xD3, 0xF0, 0x90, 0x05, 0x40, 0x74, 0x22, 0xF0, 0x80, 0x2B, 0x75, 0x54, 0x01, 0x31, 0xDA, 0x90, \r
+0x9F, 0xD3, 0xE0, 0xB4, 0x02, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x0B, 0x90, 0x9F, 0xD3, 0xE0, \r
+0xB4, 0x08, 0x07, 0x7D, 0x01, 0x7F, 0x0C, 0x12, 0x62, 0x5A, 0x12, 0xA2, 0x9A, 0x90, 0x9F, 0xDB, \r
+0x11, 0x59, 0x12, 0xB8, 0x1E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05, 0x27, 0xE5, 0x54, 0xF0, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x9F, 0xD2, 0xE0, 0x90, 0xA3, 0x14, 0xF0, \r
+0x6F, 0x70, 0x02, 0x41, 0xF9, 0xEF, 0x14, 0x60, 0x46, 0x14, 0x60, 0x74, 0x14, 0x70, 0x02, 0x41, \r
+0x9F, 0x14, 0x70, 0x02, 0x41, 0xCE, 0x24, 0x04, 0x60, 0x02, 0x41, 0xF9, 0x90, 0xA3, 0x14, 0xE0, \r
+0xB4, 0x04, 0x05, 0x12, 0xB8, 0x45, 0x41, 0xF9, 0x90, 0xA3, 0x14, 0xE0, 0xB4, 0x02, 0x05, 0x12, \r
+0xB8, 0x4A, 0x41, 0xF9, 0x90, 0xA3, 0x14, 0xE0, 0xB4, 0x03, 0x05, 0x12, 0xB8, 0x4F, 0x41, 0xF9, \r
+0x90, 0xA3, 0x14, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x41, 0xF9, 0x12, 0xB8, 0x3D, 0x41, 0xF9, 0x90, \r
+0xA3, 0x14, 0xE0, 0xB4, 0x04, 0x05, 0x12, 0x67, 0xA2, 0x41, 0xF9, 0x90, 0xA3, 0x14, 0xE0, 0xB4, \r
+0x02, 0x05, 0x12, 0x67, 0x91, 0x41, 0xF9, 0x90, 0xA3, 0x14, 0xE0, 0xB4, 0x03, 0x05, 0x12, 0x67, \r
+0xE6, 0x41, 0xF9, 0x90, 0xA3, 0x14, 0xE0, 0x60, 0x02, 0x41, 0xF9, 0x12, 0x67, 0xEA, 0x41, 0xF9, \r
+0x90, 0xA3, 0x14, 0xE0, 0xB4, 0x04, 0x05, 0x12, 0xB8, 0x92, 0x80, 0x7D, 0x90, 0xA3, 0x14, 0xE0, \r
+0xB4, 0x01, 0x05, 0x12, 0xB8, 0x73, 0x80, 0x71, 0x90, 0xA3, 0x14, 0xE0, 0xB4, 0x03, 0x05, 0x12, \r
+0xB8, 0x8C, 0x80, 0x65, 0x90, 0xA3, 0x14, 0xE0, 0x70, 0x5F, 0x12, 0xB8, 0x7B, 0x80, 0x5A, 0x90, \r
+0xA3, 0x14, 0xE0, 0xB4, 0x04, 0x05, 0x12, 0xB8, 0xB5, 0x80, 0x4E, 0x90, 0xA3, 0x14, 0xE0, 0xB4, \r
+0x01, 0x05, 0x12, 0xB8, 0x9D, 0x80, 0x42, 0x90, 0xA3, 0x14, 0xE0, 0xB4, 0x02, 0x05, 0x12, 0xB8, \r
+0xB0, 0x80, 0x36, 0x90, 0xA3, 0x14, 0xE0, 0x70, 0x30, 0x12, 0xB8, 0xAB, 0x80, 0x2B, 0x90, 0xA3, \r
+0x14, 0xE0, 0xB4, 0x03, 0x04, 0xF1, 0xE4, 0x80, 0x20, 0x90, 0xA3, 0x14, 0xE0, 0xB4, 0x01, 0x04, \r
+0xF1, 0xCF, 0x80, 0x15, 0x90, 0xA3, 0x14, 0xE0, 0xB4, 0x02, 0x05, 0x12, 0xB8, 0xC7, 0x80, 0x09, \r
+0x90, 0xA3, 0x14, 0xE0, 0x70, 0x03, 0x12, 0xB8, 0xC1, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x9F, \r
+0xCF, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x22, 0x90, 0x9F, 0xCF, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, \r
+0x03, 0x22, 0x90, 0x9F, 0xD5, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x22, 0x90, 0x05, 0x43, \r
+0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, \r
+0xE4, 0xFF, 0x02, 0x64, 0x84, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, \r
+0x02, 0x06, 0x89, 0x90, 0x9F, 0xD4, 0x71, 0x0A, 0x30, 0xE0, 0x28, 0xEF, 0x54, 0xBF, 0x12, 0xBC, \r
+0x8E, 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0xA0, \r
+0x50, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0x7D, 0x01, 0x7F, 0x0C, 0x02, 0x62, \r
+0x5A, 0x11, 0x4A, 0x22, 0x90, 0x9F, 0xD4, 0xE0, 0xFF, 0x12, 0x4F, 0xD2, 0x30, 0xE0, 0x1B, 0xEF, \r
+0x54, 0x7F, 0x12, 0xBC, 0x8E, 0x30, 0xE1, 0x06, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x04, 0xE0, 0x54, \r
+0xFD, 0xF0, 0x90, 0x9F, 0xD9, 0xE0, 0x60, 0x02, 0x11, 0x4A, 0x90, 0xA0, 0x4E, 0x71, 0x0A, 0x30, \r
+0xE0, 0x22, 0x90, 0xA0, 0x51, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x18, 0xEF, 0x54, 0xFD, 0xF0, \r
+0x90, 0x04, 0xE0, 0xE0, 0x90, 0xA0, 0x51, 0x30, 0xE1, 0x06, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x04, \r
+0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x30, 0xE1, 0x06, 0x12, 0xA7, 0xA1, 0x12, 0x51, \r
+0x8C, 0x22, 0x71, 0x12, 0x30, 0xE0, 0x0C, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x03, \r
+0x12, 0xBC, 0xD3, 0x90, 0x9F, 0xD4, 0x12, 0x84, 0xC9, 0x30, 0xE0, 0x09, 0x12, 0xA7, 0x3F, 0x54, \r
+0x07, 0x70, 0x39, 0x80, 0x35, 0x12, 0xA7, 0x6B, 0x40, 0x30, 0x12, 0x67, 0xA8, 0x70, 0x2D, 0xB1, \r
+0x67, 0x70, 0x06, 0x91, 0x34, 0x91, 0x2D, 0xF0, 0x22, 0x91, 0x34, 0x90, 0x9F, 0xE3, 0xE0, 0x04, \r
+0xF0, 0xE0, 0xD3, 0x94, 0x02, 0x40, 0x0A, 0x91, 0x2D, 0xF0, 0xE4, 0x90, 0x9F, 0xE3, 0xF0, 0x80, \r
+0x03, 0x12, 0xA1, 0x62, 0xE4, 0x90, 0x9F, 0xE2, 0xF0, 0x22, 0x11, 0x4A, 0x22, 0x90, 0x9F, 0xD5, \r
+0xE0, 0x54, 0xFB, 0x22, 0x12, 0xA7, 0x78, 0x40, 0x31, 0x90, 0x9F, 0xF3, 0xE0, 0x04, 0xF0, 0x90, \r
+0xA0, 0x35, 0xE0, 0xFF, 0x90, 0x9F, 0xF3, 0xE0, 0xD3, 0x9F, 0x50, 0x1E, 0x90, 0x9F, 0xEB, 0xE0, \r
+0x04, 0x12, 0x8F, 0xAB, 0x90, 0x9F, 0xF2, 0xF0, 0xFB, 0x90, 0x9F, 0xEB, 0xE0, 0xFF, 0xA3, 0xE0, \r
+0xFD, 0x90, 0xA2, 0xE7, 0x74, 0x04, 0xF0, 0x12, 0xAA, 0xBC, 0x22, 0xB1, 0x54, 0x12, 0x06, 0x89, \r
+0xFF, 0x54, 0x7F, 0x90, 0x9F, 0xD9, 0xF0, 0xEF, 0x12, 0x4F, 0xD2, 0xA3, 0x12, 0x4F, 0x8E, 0xFF, \r
+0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFE, 0x90, 0x9F, 0xD7, 0xE0, 0x54, 0xF0, 0x4E, 0xF0, 0x12, 0x4C, \r
+0x34, 0x54, 0x01, 0x25, 0xE0, 0xFE, 0x90, 0x9F, 0xD4, 0xE0, 0x54, 0xFD, 0x4E, 0xF0, 0xEF, 0x54, \r
+0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0xB1, 0x67, 0x12, 0x4F, 0xA3, 0x90, 0x9F, 0xD8, 0x12, 0x4C, 0xE1, \r
+0xFD, 0x7F, 0x02, 0x12, 0x61, 0xC6, 0xB1, 0x5A, 0xB1, 0x4E, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0xA0, \r
+0x3B, 0xB1, 0x6E, 0xFF, 0xB1, 0x4D, 0x12, 0x4F, 0xDE, 0xFF, 0x90, 0xA0, 0x3B, 0x12, 0xBB, 0x9A, \r
+0x4E, 0xFF, 0xB1, 0x4D, 0xF1, 0xE8, 0xFF, 0x90, 0xA0, 0x3B, 0x12, 0x9E, 0xA6, 0x4E, 0xFF, 0xB1, \r
+0x4D, 0x12, 0x9A, 0xDA, 0x4E, 0x90, 0xA0, 0x3B, 0xF0, 0x71, 0x0A, 0x20, 0xE0, 0x29, 0xEF, 0xC3, \r
+0x13, 0x20, 0xE0, 0x0B, 0x75, 0x52, 0x01, 0x90, 0xA0, 0x8C, 0xE0, 0x60, 0x0B, 0x80, 0x0E, 0xE4, \r
+0xF5, 0x52, 0x90, 0xA0, 0x8C, 0xE0, 0x60, 0x05, 0xE4, 0xF5, 0x51, 0x80, 0x03, 0x75, 0x51, 0x01, \r
+0xAD, 0x52, 0xAF, 0x51, 0x12, 0x48, 0x62, 0xB1, 0x5A, 0x90, 0xA1, 0xD2, 0x12, 0x45, 0x9F, 0x12, \r
+0xB8, 0xED, 0x90, 0x9F, 0xD9, 0xE0, 0xFF, 0x12, 0x66, 0x53, 0x90, 0x9F, 0xD9, 0xE0, 0x60, 0x1C, \r
+0x90, 0xA1, 0xD2, 0x12, 0x45, 0x96, 0x12, 0x4F, 0x8F, 0x54, 0x0F, 0xFF, 0x12, 0x4F, 0xA5, 0xFD, \r
+0x12, 0xB9, 0x12, 0x12, 0xAB, 0xC0, 0x74, 0x01, 0xF0, 0x12, 0xAA, 0xBC, 0x22, 0xF0, 0x90, 0x00, \r
+0x05, 0x02, 0x06, 0xA2, 0x90, 0xA1, 0xCF, 0x12, 0x45, 0x9F, 0x90, 0xA1, 0xCF, 0x02, 0x45, 0x96, \r
+0x90, 0x9F, 0xDD, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x9F, 0xD7, 0xE0, 0x54, 0x0F, 0x22, 0xE0, 0x54, \r
+0xFE, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x4F, 0x22, 0xB1, 0x54, 0x12, \r
+0x06, 0x89, 0x90, 0xA0, 0x96, 0x12, 0x4F, 0x8E, 0x90, 0xA0, 0x97, 0x12, 0x4F, 0xA4, 0x90, 0xA0, \r
+0x98, 0xF0, 0x90, 0xA0, 0x72, 0xE0, 0x44, 0x01, 0xF0, 0xB1, 0x5A, 0x12, 0x98, 0x22, 0xB4, 0x02, \r
+0x05, 0x7F, 0x40, 0x12, 0x97, 0xE1, 0x22, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x9F, 0x90, 0xA1, 0xCB, \r
+0xEF, 0xF0, 0x12, 0x45, 0xA8, 0x6E, 0x28, 0x00, 0x6E, 0x31, 0x01, 0x6E, 0x3A, 0x02, 0x6E, 0x43, \r
+0x10, 0x6E, 0x4C, 0x11, 0x6E, 0x55, 0x12, 0x6E, 0x5E, 0x14, 0x6F, 0x76, 0x15, 0x6E, 0x67, 0x16, \r
+0x6E, 0x70, 0x18, 0x6E, 0x79, 0x20, 0x6E, 0x81, 0x21, 0x6E, 0x8A, 0x23, 0x6E, 0x93, 0x24, 0x6E, \r
+0x9B, 0x25, 0x6E, 0xA4, 0x27, 0x6E, 0xAD, 0x28, 0x6E, 0xB6, 0x40, 0x6E, 0xBF, 0x42, 0x6E, 0xC8, \r
+0x47, 0x6E, 0xD0, 0x49, 0x6E, 0xD9, 0x60, 0x6E, 0xE2, 0x61, 0x6E, 0xEB, 0x62, 0x6E, 0xF4, 0x63, \r
+0x6E, 0xFD, 0x64, 0x6F, 0x06, 0x65, 0x6F, 0x0F, 0x66, 0x6F, 0x17, 0x67, 0x6F, 0x20, 0x68, 0x6F, \r
+0x29, 0x69, 0x6F, 0x32, 0x6B, 0x6F, 0x3B, 0x6C, 0x6F, 0x43, 0x6D, 0x6F, 0x4C, 0x6E, 0x6F, 0x55, \r
+0x6F, 0x6F, 0x5E, 0x70, 0x00, 0x00, 0x6F, 0x67, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0xAC, \r
+0xB8, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0x67, 0x30, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, \r
+0x02, 0xA4, 0x22, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0x95, 0xCE, 0x90, 0xA1, 0xCC, 0x12, \r
+0x45, 0x96, 0x02, 0xA5, 0x22, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0xAC, 0xF9, 0x90, 0xA1, \r
+0xCC, 0x12, 0x45, 0x96, 0x02, 0xAD, 0x0D, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0x4F, 0xAB, \r
+0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0x5D, 0x48, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x81, \r
+0x6B, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0xAD, 0x1C, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, \r
+0x02, 0xAD, 0x58, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x01, 0x60, 0x90, 0xA1, 0xCC, 0x12, 0x45, \r
+0x96, 0x02, 0xAD, 0x60, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0x9E, 0x55, 0x90, 0xA1, 0xCC, \r
+0x12, 0x45, 0x96, 0x02, 0x9E, 0x76, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0x7C, 0x74, 0x90, \r
+0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0x4C, 0x3A, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0xE1, 0x8F, \r
+0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0xB4, 0x42, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, \r
+0x49, 0x72, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0xAD, 0x9F, 0x90, 0xA1, 0xCC, 0x12, 0x45, \r
+0x96, 0x02, 0x5F, 0xF1, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0xAD, 0xBF, 0x90, 0xA1, 0xCC, \r
+0x12, 0x45, 0x96, 0x02, 0xAD, 0xEC, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0xAE, 0x4D, 0x90, \r
+0xA1, 0xCC, 0x12, 0x45, 0x96, 0xA1, 0x7D, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0x99, 0x72, \r
+0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0xAD, 0xD3, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, \r
+0x98, 0x7C, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0x99, 0xF9, 0x90, 0xA1, 0xCC, 0x12, 0x45, \r
+0x96, 0x80, 0x34, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0xAE, 0x5B, 0x90, 0xA1, 0xCC, 0x12, \r
+0x45, 0x96, 0x02, 0xAE, 0xB2, 0x90, 0xA1, 0xCC, 0x12, 0x45, 0x96, 0x02, 0x8D, 0xEC, 0x90, 0xA1, \r
+0xCC, 0x12, 0x45, 0x96, 0x02, 0xAE, 0xEB, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0xA1, \r
+0xCB, 0xE0, 0x90, 0x01, 0xC2, 0xF0, 0x22, 0xB1, 0x54, 0x12, 0x06, 0x89, 0x90, 0xA0, 0xA9, 0x12, \r
+0x4F, 0x8E, 0x90, 0xA0, 0xAA, 0xF0, 0xB1, 0x5A, 0x7D, 0x02, 0x7F, 0x38, 0x02, 0x58, 0xB1, 0x90, \r
+0xA1, 0xCF, 0x12, 0x45, 0x9F, 0xB1, 0x4E, 0x30, 0xE1, 0x03, 0x02, 0xB3, 0xBB, 0xB1, 0x5A, 0x12, \r
+0x06, 0x89, 0x90, 0xA1, 0xD2, 0x12, 0x4F, 0x8E, 0x90, 0xA1, 0xD3, 0x12, 0x4F, 0xA4, 0x90, 0xA1, \r
+0xD4, 0x12, 0x4C, 0xE1, 0x75, 0xF0, 0x10, 0xA4, 0xFF, 0x12, 0x4C, 0x34, 0xFD, 0xEF, 0x4D, 0xFF, \r
+0x90, 0xA1, 0xD3, 0xE0, 0xB4, 0x01, 0x07, 0xA3, 0xE0, 0x12, 0xB4, 0x38, 0xEF, 0xF0, 0x22, 0x7D, \r
+0x1F, 0x7F, 0x6F, 0x12, 0x54, 0xC6, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x9F, 0xD2, \r
+0x74, 0x04, 0xF0, 0x22, 0x7D, 0x25, 0x80, 0xE9, 0xFE, 0x54, 0x10, 0xFD, 0xEF, 0x54, 0xEF, 0x4D, \r
+0x22, 0xE4, 0xFB, 0xFA, 0xFD, 0x7F, 0x01, 0x12, 0x44, 0xDE, 0x90, 0xA1, 0xCA, 0xEF, 0xF0, 0x60, \r
+0xF0, 0x90, 0x9E, 0x92, 0xE0, 0xFF, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0xE5, 0xC2, 0xAF, 0xEF, 0x30, \r
+0xE0, 0x0E, 0x90, 0x9E, 0x92, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0xFF, 0x12, 0x7E, 0x92, 0x11, 0x48, \r
+0xB1, 0x4D, 0xFF, 0x30, 0xE1, 0x06, 0x54, 0xFD, 0xF0, 0x12, 0xAF, 0x52, 0xB1, 0x4D, 0xFF, 0x30, \r
+0xE2, 0x06, 0x54, 0xFB, 0xF0, 0x12, 0x9C, 0xF5, 0xB1, 0x4D, 0xFF, 0x30, 0xE6, 0x06, 0x54, 0xBF, \r
+0xF0, 0x12, 0x97, 0xFC, 0xD2, 0xAF, 0x80, 0xB9, 0xE4, 0xF5, 0x51, 0x90, 0x9F, 0xCD, 0xE0, 0xFF, \r
+0xE5, 0x51, 0xC3, 0x9F, 0x40, 0x02, 0xA1, 0x1C, 0xE5, 0x51, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, \r
+0xA1, 0xD8, 0xF0, 0xE5, 0x51, 0x54, 0x07, 0xA3, 0xF0, 0x90, 0x04, 0xA0, 0xE0, 0xFF, 0xA3, 0xE0, \r
+0xFE, 0xEF, 0x64, 0x01, 0x70, 0x24, 0xE5, 0x51, 0x6E, 0x70, 0x1F, 0xA3, 0xE0, 0xF5, 0x52, 0xA3, \r
+0xE0, 0xB1, 0x85, 0xE5, 0x52, 0xF0, 0xB1, 0x62, 0xE0, 0x54, 0xFC, 0xFF, 0x90, 0xA1, 0xD4, 0xE0, \r
+0x54, 0x03, 0x4F, 0xFF, 0xB1, 0x62, 0xEF, 0xF0, 0xA1, 0x18, 0xAF, 0x51, 0x12, 0x66, 0x8C, 0xEF, \r
+0x70, 0x02, 0xA1, 0x18, 0x12, 0x4E, 0x29, 0x12, 0x4F, 0xD2, 0x30, 0xE0, 0x02, 0xA1, 0x18, 0x90, \r
+0xA1, 0xD8, 0xF1, 0xC2, 0xE0, 0xFD, 0x7C, 0x00, 0x90, 0xA1, 0xD9, 0x12, 0x93, 0x29, 0x80, 0x05, \r
+0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x12, 0xBD, 0x12, 0x60, 0x02, 0xA1, 0x18, 0x12, 0xBB, \r
+0x3F, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x70, 0x0C, 0x74, 0x91, 0x25, 0x51, 0x12, 0xB4, 0xF4, 0xE0, \r
+0x70, 0x02, 0xA1, 0x18, 0xE5, 0x51, 0x12, 0xBB, 0x65, 0x90, 0xA1, 0xCE, 0x12, 0x45, 0x9F, 0x12, \r
+0xBB, 0x3F, 0xE0, 0xF5, 0x56, 0xA3, 0xE0, 0xF5, 0x57, 0x74, 0x91, 0x25, 0x51, 0x12, 0xB4, 0xF4, \r
+0xE0, 0xFF, 0x90, 0xA1, 0xD1, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x04, 0xE5, 0x51, 0x12, \r
+0x4F, 0xFD, 0xE0, 0x90, 0xA1, 0xD3, 0xF0, 0xFD, 0x12, 0x4E, 0x29, 0xFE, 0x13, 0x13, 0x54, 0x03, \r
+0xB1, 0x85, 0xE0, 0xF5, 0x52, 0x54, 0x7F, 0xF5, 0x53, 0xD3, 0x9D, 0x40, 0x16, 0x90, 0xA1, 0xD3, \r
+0xE0, 0xF5, 0x53, 0xE5, 0x52, 0x30, 0xE7, 0x07, 0xE5, 0x53, 0x44, 0x80, 0xFF, 0x80, 0x02, 0xAF, \r
+0x53, 0x8F, 0x52, 0xE5, 0x53, 0x90, 0x41, 0x3D, 0x93, 0x12, 0x4C, 0xE8, 0xE0, 0xC3, 0x9F, 0x40, \r
+0x0B, 0x74, 0xA1, 0x25, 0x53, 0xF5, 0x82, 0xE4, 0x34, 0x9E, 0x80, 0x09, 0x74, 0xB5, 0x25, 0x53, \r
+0xF5, 0x82, 0xE4, 0x34, 0x9E, 0xF5, 0x83, 0xE0, 0xFF, 0x12, 0xBB, 0x1F, 0x90, 0xA1, 0xCB, 0x12, \r
+0x45, 0x9F, 0xB1, 0x1D, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x02, 0x41, 0xDA, 0xAD, 0x58, 0xAF, 0x53, \r
+0x12, 0xB3, 0x18, 0x8F, 0x58, 0xE5, 0x52, 0x30, 0xE7, 0x04, 0x05, 0x58, 0x05, 0x58, 0xE5, 0x58, \r
+0xD3, 0x94, 0x1A, 0xAF, 0x58, 0x40, 0x02, 0x7F, 0x1A, 0x12, 0xBB, 0x1F, 0x90, 0xA1, 0xCB, 0x12, \r
+0x45, 0x9F, 0xC3, 0xE5, 0x57, 0x94, 0x0F, 0xE5, 0x56, 0x94, 0x00, 0x50, 0x73, 0xB1, 0x56, 0xFF, \r
+0x90, 0xA1, 0xD2, 0xE0, 0x2F, 0xFF, 0x90, 0xA1, 0xD1, 0xE0, 0x35, 0xF0, 0xFE, 0x12, 0xBD, 0x0A, \r
+0xFF, 0xEE, 0x35, 0xF0, 0xFE, 0x90, 0x00, 0x04, 0x12, 0x07, 0xAB, 0x2F, 0xFD, 0xEE, 0x35, 0xF0, \r
+0x12, 0xBC, 0x04, 0xD3, 0xED, 0x9F, 0xEC, 0x9E, 0x40, 0x05, 0x12, 0x93, 0x33, 0x41, 0xD3, 0x90, \r
+0xA1, 0xCE, 0x12, 0x45, 0x96, 0x12, 0x07, 0x80, 0x65, 0x57, 0x70, 0x04, 0xE5, 0xF0, 0x65, 0x56, \r
+0x75, 0xF0, 0x04, 0x70, 0x23, 0x12, 0x4F, 0x84, 0x12, 0x6B, 0x0B, 0xFE, 0xEF, 0x54, 0x3F, 0xFF, \r
+0xEE, 0x04, 0x54, 0x03, 0xFE, 0xC4, 0x33, 0x33, 0x54, 0xC0, 0x4F, 0xF0, 0xE4, 0xFD, 0xAF, 0x51, \r
+0x12, 0x91, 0xE7, 0x75, 0xF0, 0x04, 0x80, 0x00, 0x12, 0x4F, 0x84, 0x54, 0x3F, 0xF0, 0x41, 0xD3, \r
+0xE5, 0x51, 0x70, 0x44, 0xB1, 0x56, 0xFF, 0xAE, 0xF0, 0x12, 0xBD, 0x0A, 0xFD, 0xE5, 0xF0, 0x3E, \r
+0x12, 0xBC, 0x04, 0xC3, 0xED, 0x9F, 0xEC, 0x9E, 0x50, 0x08, 0x90, 0x9E, 0x91, 0x74, 0x01, 0xF0, \r
+0x80, 0x26, 0xB1, 0x56, 0xFB, 0xAA, 0xF0, 0xE5, 0x57, 0xAE, 0x56, 0x78, 0x03, 0xCE, 0xC3, 0x13, \r
+0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x7C, 0x00, 0x7D, 0x05, 0x12, 0x07, 0x03, 0xD3, 0xEB, 0x9F, 0xEA, \r
+0x9E, 0x40, 0x05, 0xE4, 0x90, 0x9E, 0x91, 0xF0, 0xAB, 0x58, 0xAD, 0x51, 0xAF, 0x57, 0xAE, 0x56, \r
+0x12, 0x94, 0x7D, 0x8E, 0x54, 0x8F, 0x55, 0x12, 0xBB, 0x03, 0xC3, 0x12, 0xBC, 0x20, 0x50, 0x09, \r
+0x7D, 0x01, 0xAF, 0x51, 0x12, 0x91, 0xE7, 0x80, 0x0C, 0x12, 0xBB, 0x11, 0xD3, 0x12, 0xBC, 0x20, \r
+0x40, 0x0B, 0x12, 0x93, 0x33, 0xB1, 0x35, 0xF5, 0x83, 0xE4, 0xF0, 0x80, 0x36, 0xB1, 0x35, 0xF5, \r
+0x83, 0xE0, 0x04, 0xF0, 0xB1, 0x35, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x25, 0xB1, 0x35, \r
+0xF5, 0x83, 0xE4, 0xF0, 0x12, 0xBB, 0x11, 0x12, 0x97, 0xCC, 0x12, 0xBB, 0x03, 0x74, 0x01, 0x93, \r
+0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xE5, 0x51, 0x12, 0x94, 0x73, \r
+0xF1, 0xE4, 0xF0, 0xE4, 0xF5, 0x54, 0xF5, 0x55, 0x81, 0xF9, 0xB1, 0x1D, 0xE0, 0xF9, 0x64, 0x05, \r
+0x60, 0x02, 0x61, 0x9B, 0x75, 0xF0, 0x10, 0xE5, 0x51, 0x90, 0x81, 0x01, 0xF1, 0xDB, 0xF5, 0x5B, \r
+0x12, 0x4C, 0xE9, 0xE0, 0xC3, 0x94, 0x30, 0x40, 0x12, 0x12, 0x4C, 0xD3, 0xE0, 0x20, 0xE2, 0x0B, \r
+0x12, 0x4E, 0x29, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0F, 0xE4, 0xF5, 0x5B, 0xB1, 0x1D, \r
+0xB1, 0x3F, 0xE4, 0xF0, 0xB1, 0x79, 0xE4, 0xF0, 0x80, 0x0B, 0xAD, 0x53, 0xAF, 0x51, 0x12, 0xB2, \r
+0x49, 0xB1, 0x79, 0xEF, 0xF0, 0xB1, 0x79, 0xE0, 0x64, 0x01, 0x70, 0x67, 0xB1, 0x6D, 0xE0, 0xFF, \r
+0x24, 0x05, 0xFD, 0xE4, 0x33, 0xFC, 0x12, 0x4C, 0xE9, 0xE0, 0xFE, 0xC3, 0x12, 0xAB, 0x83, 0x50, \r
+0x0B, 0x12, 0xBB, 0x4D, 0xE0, 0xFD, 0xE5, 0x53, 0xC3, 0x9D, 0x40, 0x1B, 0xE5, 0x5B, 0x70, 0x05, \r
+0x75, 0x5B, 0x01, 0x80, 0x0D, 0xE5, 0x5B, 0xB4, 0x01, 0x05, 0x75, 0x5B, 0x03, 0x80, 0x03, 0x75, \r
+0x5B, 0x05, 0xB1, 0x6D, 0xEE, 0x80, 0x1F, 0x12, 0x4C, 0xE9, 0xE0, 0x24, 0x05, 0xFD, 0xE4, 0x33, \r
+0xFC, 0xC3, 0xEF, 0x12, 0xAB, 0x83, 0x50, 0x06, 0xB1, 0x41, 0xE0, 0xB4, 0x0A, 0x0E, 0x12, 0x4C, \r
+0xE9, 0xE0, 0xFF, 0xB1, 0x6D, 0xEF, 0xB1, 0x40, 0xE4, 0xF0, 0x80, 0x07, 0xB1, 0x1D, 0xB1, 0x3F, \r
+0xE0, 0x04, 0xF0, 0x12, 0xBB, 0x4D, 0xE5, 0x53, 0xF0, 0x81, 0xE0, 0xE9, 0x64, 0x06, 0x60, 0x02, \r
+0x81, 0xF9, 0xF5, 0x54, 0xF5, 0x55, 0x75, 0xF0, 0x10, 0xE5, 0x51, 0x90, 0x81, 0x01, 0xF1, 0xDB, \r
+0xF5, 0x5B, 0xAF, 0x57, 0xAE, 0x56, 0x12, 0xB3, 0xA1, 0x8F, 0x59, 0xE5, 0x58, 0xD3, 0x94, 0x13, \r
+0x40, 0x1F, 0x90, 0xA1, 0xCB, 0x12, 0x45, 0x96, 0x12, 0x6D, 0x4E, 0xFD, 0x7C, 0x00, 0xE5, 0x57, \r
+0xAE, 0x56, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x80, \r
+0x19, 0xE5, 0x57, 0xAE, 0x56, 0xA8, 0x59, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, \r
+0xF9, 0xFF, 0x90, 0x41, 0xDA, 0xE4, 0x93, 0xFD, 0x7C, 0x00, 0x12, 0x07, 0x03, 0x90, 0xA1, 0xD5, \r
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x5A, 0xE5, 0x58, 0xD3, 0x94, 0x13, 0x40, 0x1E, 0x12, \r
+0xBA, 0xEC, 0xA8, 0x59, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, \r
+0xA1, 0xCB, 0x12, 0x45, 0x96, 0x85, 0x5A, 0x82, 0x12, 0x95, 0x72, 0x80, 0x16, 0x12, 0xBA, 0xEC, \r
+0xA8, 0x59, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xE5, 0x5A, 0x90, \r
+0x41, 0xD5, 0x93, 0x12, 0xBD, 0x02, 0x25, 0x55, 0xF5, 0x55, 0xEE, 0x35, 0x54, 0xF5, 0x54, 0xC3, \r
+0x90, 0xA1, 0xD6, 0xE0, 0x95, 0x55, 0x90, 0xA1, 0xD5, 0xE0, 0x95, 0x54, 0x40, 0x08, 0x05, 0x5A, \r
+0xE5, 0x5A, 0x64, 0x05, 0x70, 0xA2, 0xE5, 0x5A, 0xC3, 0x13, 0xF5, 0x5A, 0xE5, 0x5B, 0x24, 0x01, \r
+0xFF, 0xE4, 0x33, 0xA2, 0xE7, 0x13, 0xEF, 0x13, 0xFF, 0xD3, 0x95, 0x5A, 0x40, 0x06, 0xEF, 0x95, \r
+0x5A, 0xFF, 0x80, 0x02, 0xE4, 0xFF, 0xB1, 0x29, 0xE0, 0xC3, 0x13, 0xFE, 0xEF, 0xC4, 0x33, 0x54, \r
+0xE0, 0x2E, 0xFE, 0xB1, 0x29, 0xEE, 0xF0, 0xB1, 0x29, 0xE0, 0xC3, 0x94, 0xC0, 0x40, 0x05, 0xB1, \r
+0x29, 0x74, 0xC0, 0xF0, 0xB1, 0x29, 0xE0, 0x24, 0x1F, 0xFF, 0xE4, 0x33, 0xFE, 0xEF, 0x78, 0x06, \r
+0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0x25, 0xE0, 0xFF, 0x70, 0x04, 0xF5, 0x5B, 0x80, \r
+0x04, 0xEF, 0x14, 0xF5, 0x5B, 0xD3, 0x90, 0xA1, 0xD2, 0xE0, 0x94, 0x03, 0x90, 0xA1, 0xD1, 0xE0, \r
+0x94, 0x00, 0x50, 0x09, 0x12, 0x4C, 0xE9, 0xE0, 0xC3, 0x94, 0x30, 0x50, 0x03, 0xE4, 0xF5, 0x5B, \r
+0x75, 0xF0, 0x10, 0xE5, 0x51, 0xF1, 0xCD, 0x54, 0xF8, 0x90, 0xA1, 0xD7, 0xF0, 0x45, 0x5B, 0xFF, \r
+0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x51, 0x12, 0xBC, 0x7C, 0xB1, 0x1D, 0xE0, 0xD3, 0x94, 0x05, 0x74, \r
+0x11, 0x50, 0x07, 0xB1, 0x1F, 0xE0, 0x04, 0xF0, 0x80, 0x04, 0xB1, 0x1F, 0xE4, 0xF0, 0x75, 0x5C, \r
+0x01, 0x7D, 0x01, 0xAF, 0x51, 0x12, 0xB4, 0x89, 0x05, 0x51, 0x01, 0x4B, 0x22, 0x74, 0x11, 0x25, \r
+0x51, 0xF5, 0x82, 0xE4, 0x34, 0x9C, 0xF5, 0x83, 0x22, 0x74, 0x01, 0x25, 0x51, 0xF5, 0x82, 0xE4, \r
+0x34, 0x93, 0xF5, 0x83, 0x22, 0x74, 0x11, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x98, 0x22, 0xE4, \r
+0xF0, 0x74, 0x11, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x9B, 0xF5, 0x83, 0x22, 0xD2, 0xAF, 0xC2, \r
+0xAF, 0x90, 0x9E, 0x92, 0xE0, 0x22, 0x90, 0xA1, 0xCE, 0x12, 0x45, 0x96, 0x90, 0x00, 0x08, 0x02, \r
+0x07, 0xAB, 0x75, 0xF0, 0x10, 0xE5, 0x51, 0x90, 0x81, 0x05, 0x02, 0x45, 0x8A, 0x74, 0x01, 0x25, \r
+0x51, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0x74, 0x91, 0x25, 0x51, 0xF5, 0x82, 0xE4, \r
+0x34, 0x9A, 0xF5, 0x83, 0x22, 0x90, 0xA1, 0xD4, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x51, 0x90, 0x81, \r
+0x00, 0x02, 0x45, 0x8A, 0xE4, 0xF5, 0x63, 0x90, 0x9F, 0xCD, 0xE0, 0xFF, 0xE5, 0x63, 0xC3, 0x9F, \r
+0x40, 0x02, 0xC1, 0x4C, 0xAF, 0x63, 0x12, 0x66, 0x8C, 0xEF, 0x70, 0x02, 0xC1, 0x48, 0xE5, 0x63, \r
+0x13, 0x13, 0x13, 0x54, 0x1F, 0xFF, 0xE5, 0x63, 0x54, 0x07, 0xFE, 0x74, 0x81, 0x2F, 0xF1, 0xC5, \r
+0xE0, 0xFD, 0xAF, 0x06, 0x12, 0x93, 0x2B, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, \r
+0xFF, 0xEF, 0x5D, 0x60, 0x73, 0x75, 0xF0, 0x10, 0xE5, 0x63, 0xF1, 0xCD, 0x20, 0xE7, 0x02, 0x80, \r
+0x10, 0x75, 0xF0, 0x10, 0xE5, 0x63, 0x90, 0x81, 0x02, 0x12, 0x45, 0x8A, 0xE0, 0xFF, 0x20, 0xE7, \r
+0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x20, 0xF0, 0x80, 0x4E, 0xEF, 0x30, 0xE6, 0x18, 0x75, 0xF0, \r
+0x10, 0xE5, 0x63, 0xB1, 0x8E, 0xE0, 0xFD, 0x75, 0xF0, 0x04, 0xE5, 0x63, 0x12, 0x4E, 0x2E, 0x12, \r
+0x7F, 0xD9, 0xE4, 0xFB, 0x80, 0x2E, 0xD1, 0x4D, 0xE0, 0x04, 0xF0, 0xD1, 0x4D, 0xE0, 0xD3, 0x94, \r
+0x01, 0x40, 0x0B, 0xAF, 0x63, 0x12, 0x92, 0xE0, 0xD1, 0x4D, 0xE4, 0xF0, 0x80, 0x1A, 0x75, 0xF0, \r
+0x10, 0xE5, 0x63, 0xB1, 0x8E, 0xE0, 0xFD, 0x75, 0xF0, 0x04, 0xE5, 0x63, 0x12, 0x4E, 0x2E, 0x12, \r
+0x7F, 0xD9, 0x7B, 0x01, 0xAF, 0x63, 0xD1, 0x59, 0x05, 0x63, 0xA1, 0x97, 0x22, 0x74, 0x11, 0x25, \r
+0x63, 0xF5, 0x82, 0xE4, 0x34, 0x9D, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
+0x8F, 0x67, 0x8D, 0x68, 0x8B, 0x69, 0xE4, 0x90, 0xA2, 0x9D, 0xF0, 0xE5, 0x67, 0x13, 0x13, 0x13, \r
+0x54, 0x1F, 0x90, 0xA2, 0x98, 0xF0, 0xE5, 0x67, 0x54, 0x07, 0x90, 0xA2, 0x9A, 0xF0, 0x75, 0xF0, \r
+0x10, 0xEF, 0xF1, 0xCD, 0x90, 0xA2, 0x9B, 0x12, 0x4F, 0xF8, 0xE0, 0x54, 0x7F, 0x90, 0xA2, 0x9E, \r
+0xF0, 0x75, 0xF0, 0x04, 0xE5, 0x67, 0x12, 0x95, 0x59, 0xE0, 0x90, 0xA2, 0x9F, 0xF0, 0x12, 0xBC, \r
+0x85, 0xE5, 0x69, 0x70, 0x39, 0xE5, 0x67, 0x60, 0x05, 0xC3, 0x94, 0x04, 0x40, 0x07, 0xAD, 0x68, \r
+0xAF, 0x67, 0x12, 0xB4, 0x60, 0x90, 0xA2, 0x99, 0xE0, 0xFF, 0x12, 0xBB, 0x13, 0xE4, 0x93, 0xFC, \r
+0x74, 0x01, 0x93, 0xFD, 0xEF, 0x12, 0xBB, 0x05, 0x74, 0x01, 0x93, 0x2D, 0xFF, 0xE4, 0x93, 0x3C, \r
+0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xE5, 0x67, 0x12, 0x94, 0x73, 0xF1, 0xE4, 0xF0, 0x90, 0xA2, \r
+0x9E, 0xE0, 0xFF, 0x90, 0xA2, 0x99, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x0B, 0xE5, 0x68, 0x54, 0x80, \r
+0xFD, 0xEF, 0x4D, 0xF5, 0x68, 0x80, 0x0C, 0x90, 0xA2, 0x9F, 0xE0, 0xFF, 0xEE, 0xC3, 0x9F, 0x50, \r
+0x02, 0x8F, 0x68, 0x12, 0xBC, 0x85, 0xE5, 0x68, 0x54, 0x80, 0x90, 0xA2, 0x9C, 0xF0, 0xE5, 0x69, \r
+0x70, 0x27, 0x90, 0xA2, 0x98, 0xF1, 0xC2, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, 0xA2, 0x9A, \r
+0x12, 0xBB, 0x37, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0xD0, 0x82, 0xD0, 0x83, 0xF0, \r
+0x90, 0xA2, 0x9B, 0xE0, 0x54, 0x7F, 0xF0, 0x80, 0x42, 0x90, 0xA2, 0x98, 0xF1, 0xC2, 0xC0, 0x83, \r
+0xC0, 0x82, 0xE0, 0xFF, 0x90, 0xA2, 0x9A, 0x12, 0xBB, 0x37, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, \r
+0x4F, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x67, 0x90, 0x81, 0x01, 0xF1, 0xDB, \r
+0xFF, 0x90, 0xA2, 0x9B, 0xF0, 0x90, 0xA2, 0x99, 0xE0, 0x90, 0x41, 0xAD, 0x93, 0xFE, 0x33, 0x33, \r
+0x33, 0x54, 0xF8, 0x4F, 0x90, 0xA2, 0x9B, 0xF0, 0x44, 0x80, 0xF0, 0x75, 0xF0, 0x10, 0xE5, 0x67, \r
+0xB1, 0x8E, 0xE5, 0x68, 0xF0, 0xE5, 0x67, 0x70, 0x06, 0x90, 0x01, 0xC8, 0xE5, 0x68, 0xF0, 0x90, \r
+0xA2, 0x9B, 0xE0, 0xFF, 0x75, 0xF0, 0x10, 0xE5, 0x67, 0x12, 0xBC, 0x7C, 0x75, 0xF0, 0x10, 0xE5, \r
+0x67, 0xB1, 0x67, 0xE0, 0x54, 0xFC, 0xFF, 0xE5, 0x6A, 0x54, 0x03, 0x4F, 0xFF, 0x75, 0xF0, 0x10, \r
+0xE5, 0x67, 0xB1, 0x67, 0xEF, 0xF0, 0x7D, 0x01, 0xAF, 0x67, 0x12, 0xB4, 0x89, 0xD0, 0xD0, 0x92, \r
+0xAF, 0x22, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0x90, 0x81, 0x01, \r
+0x12, 0x45, 0x8A, 0xE0, 0x22, 0x75, 0xF0, 0x0B, 0x90, 0xA0, 0xDE, 0x12, 0x45, 0x8A, 0xE0, 0x54, \r
+0x07, 0x22, 0xA1, 0x94, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, \r
+0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0xEB, 0x90, 0x01, 0xC4, 0xED, \r
+0xF0, 0x74, 0x77, 0x11, 0x12, 0xD0, 0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, \r
+0xE0, 0x32, 0xFF, 0xA3, 0xF0, 0xED, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xC0, \r
+0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0x1F, \r
+0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x78, 0x11, 0x12, 0xD0, 0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, \r
+0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, \r
 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, \r
 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, \r
-0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0xF6, 0xF0, 0x74, 0x80, 0xA3, 0xF0, 0x12, 0xA2, 0x35, \r
-0xE5, 0x19, 0x30, 0xE1, 0x02, 0x31, 0xB1, 0xE5, 0x19, 0x30, 0xE4, 0x03, 0x12, 0x7F, 0xC9, 0xE5, \r
-0x19, 0x30, 0xE5, 0x03, 0x12, 0xA2, 0x92, 0xE5, 0x19, 0x30, 0xE6, 0x03, 0x12, 0xA2, 0xCE, 0xE5, \r
-0x1B, 0x30, 0xE0, 0x02, 0x51, 0x49, 0xE5, 0x1B, 0x30, 0xE1, 0x03, 0x12, 0x95, 0x5F, 0xE5, 0x1B, \r
-0x30, 0xE2, 0x03, 0x12, 0xA2, 0xDB, 0xE5, 0x1B, 0x30, 0xE3, 0x02, 0x51, 0x33, 0xE5, 0x1B, 0x30, \r
-0xE4, 0x02, 0x51, 0xA6, 0xE5, 0x1B, 0x30, 0xE5, 0x03, 0x12, 0xA4, 0x0D, 0xE5, 0x1B, 0x30, 0xE6, \r
-0x03, 0x12, 0x68, 0x56, 0xE5, 0x1C, 0x30, 0xE1, 0x02, 0x51, 0xD0, 0xE5, 0x1C, 0x30, 0xE4, 0x03, \r
-0x12, 0x7F, 0x54, 0xE5, 0x1C, 0x30, 0xE5, 0x03, 0x12, 0x7F, 0x52, 0x74, 0xF6, 0x04, 0x90, 0x01, \r
-0xC4, 0xF0, 0x74, 0x80, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, \r
-0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, \r
-0x32, 0xE4, 0xFF, 0x90, 0xA1, 0x1B, 0xEF, 0xF0, 0x90, 0x04, 0x7E, 0xE0, 0xF5, 0x64, 0xA3, 0xE0, \r
-0xF5, 0x65, 0x65, 0x64, 0x60, 0x6C, 0x90, 0xA1, 0x1C, 0x74, 0x03, 0xF0, 0x90, 0xA1, 0x2A, 0x74, \r
-0x08, 0xF0, 0xE5, 0x65, 0x04, 0x54, 0x0F, 0xF5, 0x66, 0xE4, 0xF5, 0x63, 0xE5, 0x66, 0x75, 0xF0, \r
-0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, 0xE5, 0x82, 0x25, 0x63, 0x12, \r
-0x55, 0x36, 0xE0, 0xFF, 0x74, 0x1E, 0x25, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, 0xEF, \r
-0xF0, 0x05, 0x63, 0xE5, 0x63, 0xB4, 0x08, 0xD4, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x1C, 0x12, 0x6E, \r
-0xA2, 0xE5, 0x65, 0x04, 0x54, 0x0F, 0xF5, 0x65, 0xB4, 0x0F, 0x03, 0xE4, 0xF5, 0x65, 0x90, 0x04, \r
-0x7F, 0xE5, 0x65, 0xF0, 0x90, 0xA1, 0x1B, 0xE0, 0x7F, 0x04, 0x70, 0x03, 0x02, 0x6F, 0x57, 0x12, \r
-0x98, 0x0D, 0x22, 0x12, 0x5F, 0x8C, 0x64, 0x01, 0x70, 0x0E, 0x90, 0x9F, 0xA7, 0xE0, 0x60, 0x08, \r
-0x51, 0xC4, 0x12, 0x6F, 0xBE, 0x12, 0x48, 0x2C, 0x22, 0x90, 0x9F, 0x9E, 0xE0, 0x30, 0xE0, 0x10, \r
-0xA3, 0x74, 0x01, 0xF0, 0x90, 0x9F, 0x9E, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x51, 0xFC, \r
-0x71, 0x8D, 0x90, 0xA0, 0x5F, 0xE0, 0x30, 0xE0, 0x05, 0xE4, 0xFF, 0x12, 0x65, 0x1D, 0x22, 0x71, \r
-0x20, 0x12, 0x5C, 0xCD, 0x51, 0x62, 0x90, 0xA0, 0x52, 0xE0, 0x30, 0xE0, 0x28, 0x12, 0x97, 0x85, \r
-0x90, 0xA0, 0x55, 0xE0, 0x60, 0x05, 0x14, 0xF0, 0x02, 0x5E, 0xF0, 0x90, 0xA0, 0x53, 0xE0, 0x14, \r
-0x90, 0xA0, 0x55, 0xF0, 0x90, 0x05, 0x73, 0x74, 0x01, 0xF0, 0xE4, 0xFF, 0x12, 0x88, 0xD8, 0x12, \r
-0x5C, 0xCD, 0x12, 0x8F, 0xC2, 0x22, 0x12, 0x5F, 0x8C, 0x64, 0x01, 0x70, 0x16, 0x90, 0x9F, 0xA7, \r
-0xE0, 0x60, 0x10, 0x51, 0xC4, 0x90, 0x9F, 0xA3, 0xE0, 0x12, 0x8F, 0x7F, 0x54, 0x07, 0x70, 0x03, \r
-0x12, 0x68, 0x44, 0x22, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x22, \r
-0x90, 0x9F, 0xA7, 0xE0, 0x70, 0x07, 0x90, 0x9F, 0x9E, 0xE0, 0x30, 0xE0, 0x12, 0x90, 0x9F, 0x9E, \r
-0xE0, 0x30, 0xE0, 0x08, 0x51, 0xF0, 0xBF, 0x01, 0x06, 0x02, 0xA3, 0x1C, 0x12, 0x5E, 0x6F, 0x22, \r
-0x90, 0x05, 0x43, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0xD3, 0x10, 0xAF, 0x01, \r
-0xC3, 0xC0, 0xD0, 0x90, 0x9F, 0x9D, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x04, 0x80, 0x0B, 0x51, 0xF0, \r
-0xBF, 0x01, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x91, 0x59, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
-0xE4, 0x90, 0xA1, 0x2B, 0xF0, 0x90, 0x9F, 0xA7, 0xE0, 0x60, 0x61, 0x12, 0x5F, 0x8C, 0x64, 0x01, \r
-0x70, 0x5A, 0xF1, 0xD6, 0xF1, 0xC3, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x12, \r
-0xAC, 0x49, 0xF0, 0x12, 0x67, 0x80, 0xE4, 0x90, 0x9F, 0xAE, 0xF0, 0x90, 0x9F, 0x9E, 0xE0, 0x30, \r
-0xE0, 0x15, 0x90, 0x9F, 0xA2, 0xE0, 0xB4, 0x02, 0x05, 0xE4, 0x90, 0xA1, 0x2B, 0xF0, 0x51, 0xF0, \r
-0xEF, 0x70, 0x04, 0x90, 0xA1, 0x2B, 0xF0, 0x90, 0xA1, 0x2B, 0xE0, 0x60, 0x1F, 0x90, 0x9F, 0xAB, \r
-0xE0, 0x44, 0x10, 0x12, 0xA9, 0x18, 0x90, 0x9F, 0xAF, 0xE0, 0x90, 0xA1, 0xDA, 0x12, 0x48, 0x2C, \r
-0x90, 0x9F, 0xAA, 0xE0, 0x20, 0xE2, 0x03, 0x12, 0x5A, 0x9D, 0x91, 0x33, 0x22, 0xE4, 0xF5, 0x63, \r
-0x90, 0x9F, 0xA7, 0xE0, 0x70, 0x02, 0x81, 0x28, 0x12, 0x5F, 0x8C, 0x64, 0x01, 0x60, 0x02, 0x81, \r
-0x28, 0xF1, 0xC4, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x12, 0xAC, 0x49, 0xD1, \r
-0xF5, 0x60, 0x22, 0x24, 0xFE, 0x60, 0x03, 0x04, 0x70, 0x1E, 0x90, 0x9F, 0xAE, 0xE0, 0x14, 0xF0, \r
-0xE0, 0xFF, 0x60, 0x06, 0x90, 0x9F, 0xB0, 0xE0, 0x60, 0x0E, 0xEF, 0x70, 0x08, 0x90, 0x9F, 0xAD, \r
-0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x75, 0x63, 0x01, 0x90, 0x9F, 0x9E, 0xE0, 0x30, 0xE0, 0x11, 0x90, \r
-0x9F, 0xA2, 0xE0, 0xB4, 0x02, 0x03, 0xE4, 0xF5, 0x63, 0x51, 0xF0, 0xEF, 0x70, 0x02, 0xF5, 0x63, \r
-0xE5, 0x63, 0x60, 0x34, 0x90, 0x9F, 0xAB, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x9F, 0xB0, 0xE0, 0x60, \r
-0x03, 0xB4, 0x01, 0x04, 0x91, 0x29, 0x80, 0x08, 0x91, 0x29, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, \r
-0xFF, 0x90, 0x9F, 0xAF, 0xE0, 0x2F, 0x90, 0xA1, 0xDA, 0x12, 0x48, 0x2C, 0x90, 0x9F, 0xAA, 0xE0, \r
-0x20, 0xE2, 0x03, 0x12, 0x5A, 0x9D, 0x91, 0x33, 0x22, 0xE4, 0x90, 0xA1, 0xD9, 0xF0, 0x90, 0x9F, \r
-0xB0, 0xE0, 0x22, 0x12, 0x9D, 0x3F, 0x30, 0xE0, 0x1F, 0xD1, 0xD3, 0x20, 0xE0, 0x1A, 0xB1, 0xA8, \r
-0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x0E, 0x12, 0x9D, 0x48, 0x54, 0x3F, 0x30, 0xE0, 0x04, 0x7F, \r
-0x0D, 0x80, 0x02, 0x7F, 0x09, 0x12, 0x62, 0xC3, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
-0x90, 0x9F, 0xA1, 0xE0, 0x90, 0xA2, 0x37, 0xF0, 0x6F, 0x70, 0x02, 0xA1, 0x67, 0xEF, 0x14, 0x60, \r
-0x42, 0x14, 0x60, 0x70, 0x14, 0x70, 0x02, 0xA1, 0x12, 0x14, 0x70, 0x02, 0xA1, 0x3E, 0x24, 0x04, \r
-0x60, 0x02, 0xA1, 0x67, 0x90, 0xA2, 0x37, 0xE0, 0xB4, 0x04, 0x04, 0xB1, 0x86, 0xA1, 0x67, 0x90, \r
-0xA2, 0x37, 0xE0, 0xB4, 0x02, 0x04, 0xB1, 0x92, 0xA1, 0x67, 0x90, 0xA2, 0x37, 0xE0, 0xB4, 0x03, \r
-0x04, 0xB1, 0x9C, 0xA1, 0x67, 0x90, 0xA2, 0x37, 0xE0, 0x64, 0x01, 0x60, 0x02, 0xA1, 0x67, 0xB1, \r
-0x89, 0xA1, 0x67, 0x90, 0xA2, 0x37, 0xE0, 0xB4, 0x04, 0x05, 0x12, 0x5F, 0xD0, 0xA1, 0x67, 0x90, \r
-0xA2, 0x37, 0xE0, 0xB4, 0x02, 0x05, 0x12, 0x5F, 0xDE, 0xA1, 0x67, 0x90, 0xA2, 0x37, 0xE0, 0xB4, \r
-0x03, 0x05, 0x12, 0x5F, 0xC7, 0xA1, 0x67, 0x90, 0xA2, 0x37, 0xE0, 0x60, 0x02, 0xA1, 0x67, 0x12, \r
-0x5F, 0xEC, 0xA1, 0x67, 0x90, 0xA2, 0x37, 0xE0, 0xB4, 0x04, 0x05, 0x12, 0xA8, 0xB8, 0x80, 0x77, \r
-0x90, 0xA2, 0x37, 0xE0, 0xB4, 0x01, 0x05, 0x12, 0x67, 0xDF, 0x80, 0x6B, 0x90, 0xA2, 0x37, 0xE0, \r
-0xB4, 0x03, 0x05, 0x12, 0x67, 0xEA, 0x80, 0x5F, 0x90, 0xA2, 0x37, 0xE0, 0x70, 0x59, 0xF1, 0xD0, \r
-0x80, 0x55, 0x90, 0xA2, 0x37, 0xE0, 0xB4, 0x04, 0x05, 0x12, 0xA8, 0xAB, 0x80, 0x49, 0x90, 0xA2, \r
-0x37, 0xE0, 0xB4, 0x01, 0x04, 0xB1, 0x78, 0x80, 0x3E, 0x90, 0xA2, 0x37, 0xE0, 0xB4, 0x02, 0x04, \r
-0xB1, 0x97, 0x80, 0x33, 0x90, 0xA2, 0x37, 0xE0, 0x70, 0x2D, 0xB1, 0x75, 0x80, 0x29, 0x90, 0xA2, \r
-0x37, 0xE0, 0xB4, 0x03, 0x04, 0xB1, 0xA1, 0x80, 0x1E, 0x90, 0xA2, 0x37, 0xE0, 0xB4, 0x01, 0x04, \r
-0xB1, 0x6F, 0x80, 0x13, 0x90, 0xA2, 0x37, 0xE0, 0xB4, 0x02, 0x04, 0xD1, 0xDA, 0x80, 0x08, 0x90, \r
-0xA2, 0x37, 0xE0, 0x70, 0x02, 0xB1, 0x6C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x5F, 0xEC, 0x7D, \r
-0x1F, 0xD1, 0xE3, 0xF0, 0x22, 0x12, 0x5F, 0xEC, 0x7D, 0x21, 0x7F, 0xFF, 0x12, 0x49, 0x22, 0x90, \r
-0x9F, 0xA1, 0x74, 0x03, 0xF0, 0x22, 0x12, 0x5F, 0xD0, 0x12, 0xA9, 0xB9, 0xE4, 0x90, 0x9F, 0xA1, \r
-0xF0, 0x22, 0x12, 0x5F, 0xDE, 0x80, 0xF2, 0x12, 0x64, 0xAA, 0x80, 0xE3, 0x12, 0x5F, 0xC7, 0x80, \r
-0xE8, 0x7D, 0x25, 0xD1, 0xE3, 0xF0, 0x22, 0xF0, 0x90, 0xA0, 0x62, 0xE0, 0xC4, 0x54, 0x0F, 0x22, \r
-0x90, 0xA1, 0x2B, 0xEF, 0xF0, 0x7F, 0x03, 0x12, 0x66, 0xEC, 0xB1, 0xA8, 0x90, 0xA0, 0x72, 0x30, \r
-0xE0, 0x05, 0x74, 0x05, 0xF0, 0x80, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0xA0, 0x63, 0x12, 0x8F, 0xB4, \r
-0x20, 0xE0, 0x05, 0xD1, 0xD3, 0x30, 0xE0, 0x37, 0xB1, 0xA8, 0x30, 0xE0, 0x0A, 0x90, 0xA0, 0x60, \r
-0xE0, 0xFF, 0x90, 0xA0, 0x70, 0x80, 0x21, 0x90, 0xA1, 0x2B, 0xE0, 0xFC, 0xB4, 0x01, 0x0D, 0x90, \r
-0xA0, 0x60, 0xE0, 0xFE, 0x90, 0xA0, 0x6F, 0xE0, 0xC3, 0x9E, 0x80, 0x0F, 0xEC, 0xB4, 0x04, 0x0F, \r
-0x90, 0xA0, 0x61, 0xE0, 0xFF, 0x90, 0xA0, 0x6F, 0xE0, 0xC3, 0x9F, 0x90, 0xA0, 0x76, 0xF0, 0x12, \r
-0x9B, 0xC4, 0x30, 0xE0, 0x21, 0x12, 0x9B, 0xBB, 0x20, 0xE0, 0x02, 0xC1, 0x9E, 0xD1, 0xCA, 0x50, \r
-0x0A, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, \r
-0xFF, 0x12, 0x4E, 0xDD, 0x80, 0x68, 0x12, 0x9B, 0xB3, 0x30, 0xE0, 0x49, 0x12, 0xAC, 0xCE, 0xFD, \r
-0x7F, 0x04, 0x12, 0x5A, 0xA1, 0x12, 0x4F, 0xD0, 0x30, 0xE0, 0x3A, 0x90, 0xA0, 0x66, 0xE0, 0x44, \r
-0x02, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0xA0, 0x75, 0xF0, 0x90, 0xA0, 0x72, 0xF0, 0x90, 0xA1, \r
-0x2B, 0xE0, 0xFF, 0xB4, 0x01, 0x08, 0x90, 0xA0, 0x67, 0x74, 0x06, 0xF0, 0x80, 0x0A, 0xEF, 0xB4, \r
-0x04, 0x06, 0x90, 0xA0, 0x67, 0x74, 0x07, 0xF0, 0x90, 0xA0, 0x51, 0xE0, 0x60, 0x07, 0x90, 0xA0, \r
-0x66, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0xA1, 0x2B, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x06, 0x80, 0x09, \r
-0x90, 0xA1, 0x2B, 0xE0, 0xB4, 0x04, 0x07, 0x7D, 0x0C, 0x7F, 0x6F, 0x12, 0x49, 0x22, 0x90, 0xA0, \r
-0x63, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x15, 0xD1, 0xCA, 0x50, 0x0A, 0xEF, 0x7F, \r
-0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFE, 0x80, 0x04, 0x7F, 0xFF, 0x7E, 0x7F, 0x12, 0x4E, 0x12, 0x90, \r
-0xA0, 0x62, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x5C, 0x93, 0x22, 0x90, 0xA0, 0x76, 0xE0, 0xFF, 0xC3, \r
-0x94, 0x20, 0x22, 0xEF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x22, 0x12, 0x64, 0xAA, 0x7D, 0x24, 0xD1, \r
-0xE3, 0xF0, 0x22, 0x7F, 0x6F, 0x12, 0x49, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0x90, \r
-0x9F, 0xA1, 0x74, 0x04, 0x22, 0xF0, 0x90, 0x9F, 0xA5, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x22, 0xF1, \r
-0xC4, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0xA1, 0x1B, 0xEE, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0x12, 0x5F, 0x8C, 0x64, 0x01, 0x60, 0x02, 0xE1, 0xB6, 0x90, 0x9F, 0xA7, 0xE0, \r
-0x70, 0x02, 0xE1, 0xB6, 0xD1, 0xF6, 0x64, 0x01, 0x70, 0x22, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x9F, \r
-0xAE, 0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x9F, 0xAD, 0xF0, 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, \r
-0x9F, 0xAD, 0xE0, 0xFE, 0xFF, 0x80, 0x00, 0x90, 0x9F, 0xAE, 0xEF, 0xF0, 0x12, 0x8B, 0x78, 0x12, \r
-0xAB, 0xFA, 0xE4, 0x90, 0x9F, 0xB0, 0x12, 0xAC, 0x3E, 0x51, 0xC4, 0x12, 0x8F, 0x82, 0x54, 0xEF, \r
-0xD1, 0xF5, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x0F, 0x90, 0x9F, 0x9E, 0xE0, 0x30, 0xE0, 0x05, 0x12, \r
-0x68, 0xC1, 0x80, 0x03, 0x12, 0x68, 0x75, 0x90, 0x9F, 0xA4, 0xE0, 0x12, 0x5E, 0xCD, 0x30, 0xE0, \r
-0x35, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x2C, 0x90, 0x9F, 0xAD, 0xE0, 0xFF, 0xA3, \r
-0xE0, 0x6F, 0x70, 0x22, 0x90, 0x9F, 0xA4, 0xE0, 0x44, 0x40, 0xF0, 0xF1, 0xD6, 0xF0, 0x90, 0x01, \r
-0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x88, 0xD0, 0x12, 0x5F, 0xA7, 0x12, 0x8F, 0xBB, \r
-0x90, 0x9F, 0xAE, 0xE0, 0x14, 0xF0, 0x90, 0x9F, 0x9E, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x03, 0x12, \r
-0xAB, 0xFA, 0x22, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0xFE, 0x90, 0x05, 0x61, 0xE0, 0xFD, 0xED, 0x22, \r
-0x12, 0x5F, 0xEC, 0x02, 0x67, 0xDF, 0x90, 0x9F, 0xAD, 0xE0, 0x90, 0x05, 0x73, 0x22, 0xC0, 0xE0, \r
-0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, \r
-0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0xDE, \r
-0xF0, 0x74, 0x87, 0xA3, 0xF0, 0x12, 0xA2, 0x62, 0xE5, 0x21, 0x30, 0xE1, 0x02, 0x11, 0xC1, 0xE5, \r
-0x21, 0x30, 0xE2, 0x02, 0x31, 0x46, 0xE5, 0x21, 0x30, 0xE5, 0x02, 0x11, 0x97, 0xE5, 0x22, 0x30, \r
-0xE0, 0x02, 0x51, 0xD8, 0xE5, 0x23, 0x30, 0xE1, 0x03, 0x12, 0xA4, 0x29, 0xE5, 0x23, 0x30, 0xE0, \r
-0x03, 0x12, 0xA3, 0x57, 0xE5, 0x23, 0x30, 0xE3, 0x02, 0xF1, 0xB3, 0xE5, 0x23, 0x30, 0xE2, 0x09, \r
-0x31, 0xB6, 0x90, 0x07, 0x8F, 0xE0, 0x44, 0x10, 0xF0, 0xE5, 0x24, 0x30, 0xE1, 0x05, 0x7F, 0x04, \r
-0x12, 0x6F, 0x57, 0xE5, 0x24, 0x30, 0xE4, 0x03, 0x12, 0x82, 0x6F, 0xE5, 0x24, 0x30, 0xE5, 0x02, \r
-0x31, 0x87, 0xE5, 0x24, 0x30, 0xE6, 0x03, 0x12, 0xA4, 0x72, 0xE5, 0x24, 0x30, 0xE7, 0x02, 0x31, \r
-0x2E, 0x74, 0xDE, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x87, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, \r
-0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, \r
-0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0xA0, 0xC1, 0xE0, 0x30, 0xE0, 0x0A, 0x11, 0xA9, \r
-0xE4, 0x90, 0xA0, 0xC3, 0xF0, 0x12, 0x48, 0x05, 0x22, 0x7D, 0x20, 0xE4, 0xFF, 0x74, 0x1D, 0x12, \r
-0xAD, 0x31, 0xFE, 0xF6, 0x74, 0x38, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x01, 0xF5, 0x83, 0xEE, 0xF0, \r
-0x22, 0x90, 0x9F, 0xA7, 0xE0, 0x60, 0x02, 0x91, 0x97, 0x02, 0x48, 0x61, 0x7D, 0x03, 0x7F, 0x02, \r
-0x74, 0x1D, 0x2F, 0xF8, 0xE6, 0x4D, 0x80, 0xDA, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xAC, \r
-0x07, 0xEF, 0x54, 0x01, 0xFE, 0x90, 0xA0, 0x52, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x64, 0x01, \r
-0x70, 0x21, 0x90, 0x01, 0x53, 0xF0, 0x90, 0xA0, 0x54, 0xE0, 0x60, 0x0B, 0x7D, 0x10, 0x7F, 0x03, \r
-0x11, 0xD0, 0x12, 0x97, 0x85, 0x80, 0x18, 0x31, 0x24, 0x11, 0xAD, 0x12, 0x5F, 0xA1, 0x12, 0x5E, \r
-0xF0, 0x80, 0x0C, 0x31, 0x24, 0x11, 0xD0, 0x12, 0x5C, 0xCD, 0xF1, 0xC2, 0x12, 0x5C, 0x99, 0xD0, \r
-0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x53, 0x74, 0x03, 0xF0, 0x7D, 0x10, 0xFF, 0x22, 0x90, 0xA0, \r
-0x7A, 0xE0, 0x30, 0xE0, 0x05, 0x12, 0x67, 0xA3, 0x80, 0x02, 0xF1, 0x3F, 0x90, 0xA0, 0xAD, 0xE0, \r
-0x30, 0xE0, 0x02, 0x31, 0xE8, 0x22, 0x90, 0x9F, 0xA7, 0xE0, 0x60, 0x14, 0x90, 0x06, 0x92, 0xE0, \r
-0x30, 0xE1, 0x03, 0x02, 0xA8, 0xE1, 0x90, 0x9F, 0xA3, 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x68, 0x44, \r
-0x22, 0xF1, 0xC9, 0x90, 0xA0, 0x52, 0x12, 0x6F, 0x44, 0x12, 0x6A, 0x86, 0x90, 0xA0, 0x53, 0x12, \r
-0x56, 0xDD, 0x90, 0xA0, 0x54, 0xF0, 0x90, 0xA0, 0x53, 0xE0, 0x90, 0xA0, 0x55, 0xF0, 0x90, 0xA0, \r
-0x52, 0xE0, 0x54, 0x01, 0xFF, 0x01, 0xD8, 0x90, 0x9F, 0xA3, 0x12, 0x6F, 0xA4, 0x30, 0xE0, 0x25, \r
-0xEF, 0x54, 0xBF, 0x12, 0xA5, 0x05, 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x04, 0xE0, \r
-0x54, 0xFE, 0xF0, 0x90, 0xA0, 0x65, 0xF1, 0xB4, 0x30, 0xE0, 0x07, 0x7D, 0x01, 0x7F, 0x0C, 0x02, \r
-0x5A, 0xA1, 0x12, 0x68, 0x44, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA0, 0xAD, \r
-0xE0, 0x30, 0xE0, 0x1F, 0x90, 0xA0, 0xB2, 0xE0, 0xB4, 0x01, 0x0C, 0xA3, 0xE0, 0xB4, 0x01, 0x13, \r
-0x74, 0x02, 0xF0, 0x51, 0x53, 0x80, 0x0C, 0x90, 0xA0, 0xB2, 0xE0, 0xB4, 0x02, 0x05, 0x74, 0x03, \r
-0xF0, 0x31, 0xE8, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, \r
-0xA0, 0xB4, 0xE0, 0xB4, 0x01, 0x02, 0x80, 0x43, 0x90, 0xA0, 0xB4, 0xE0, 0xB4, 0x02, 0x11, 0x51, \r
-0x53, 0x7F, 0x01, 0x51, 0x84, 0x12, 0x66, 0xFE, 0x90, 0xA0, 0xB4, 0x74, 0x03, 0xF0, 0x80, 0x3E, \r
-0x90, 0xA0, 0xB4, 0xE0, 0x64, 0x03, 0x70, 0x1C, 0x90, 0xA0, 0xB7, 0x51, 0x56, 0xE4, 0xFF, 0x51, \r
-0x84, 0x12, 0x66, 0xFE, 0x51, 0x7A, 0xE4, 0xFB, 0xFD, 0x12, 0x4E, 0x54, 0x90, 0xA0, 0xB4, 0x74, \r
-0x04, 0xF0, 0x80, 0x1A, 0x90, 0xA0, 0xB4, 0xE0, 0xB4, 0x04, 0x13, 0x51, 0x7A, 0x7B, 0x01, 0x7D, \r
-0x01, 0x12, 0x4E, 0x54, 0x90, 0xA0, 0xB4, 0x74, 0x02, 0xF0, 0x90, 0xA0, 0xB2, 0xF0, 0xD0, 0xD0, \r
-0x92, 0xAF, 0x22, 0x90, 0xA0, 0xB9, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xAD, 0x07, 0xEE, 0xFF, 0x90, \r
-0x01, 0x6F, 0xE4, 0xF0, 0x8F, 0x35, 0xAF, 0x05, 0x8F, 0x36, 0xFB, 0xFD, 0x7F, 0x6C, 0x7E, 0x01, \r
-0x12, 0x3C, 0xB1, 0x90, 0x01, 0x6F, 0x74, 0x05, 0xF0, 0x22, 0x90, 0xA0, 0xAD, 0xE0, 0xC3, 0x13, \r
-0x54, 0x03, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xB4, 0x03, 0x10, 0x90, \r
-0xA0, 0x62, 0x12, 0x4F, 0xD3, 0x90, 0x06, 0xCC, 0x30, 0xE0, 0x35, 0xE4, 0xF0, 0x80, 0x34, 0x90, \r
-0xA0, 0x63, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0C, 0xEF, 0x90, 0x06, 0xCC, 0x70, 0x03, 0xF0, \r
-0x80, 0x03, 0x74, 0x03, 0xF0, 0x90, 0xA0, 0xAD, 0xE0, 0x30, 0xE0, 0x17, 0xC4, 0x54, 0x0F, 0x30, \r
-0xE0, 0x0B, 0xEF, 0x90, 0x06, 0xCC, 0x70, 0x03, 0xF0, 0x80, 0x08, 0x80, 0x03, 0x90, 0x06, 0xCC, \r
-0x74, 0x03, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0xA5, 0x0E, 0x90, 0xA1, 0x2B, 0xEF, 0xF0, \r
-0x30, 0xE0, 0x05, 0x7D, 0x01, 0xE4, 0x80, 0x02, 0xE4, 0xFD, 0xFF, 0x12, 0x5A, 0x1E, 0x90, 0xA1, \r
-0x2B, 0xE0, 0x30, 0xE6, 0x11, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x04, 0xE4, 0xF0, 0x80, 0x06, \r
-0x90, 0x01, 0x2F, 0x74, 0x80, 0xF0, 0x91, 0xF9, 0x90, 0x9F, 0xC0, 0xE0, 0xFB, 0xAC, 0x07, 0x90, \r
-0x9F, 0xA3, 0xE0, 0x30, 0xE0, 0x16, 0x90, 0x9F, 0xDD, 0xE0, 0x24, 0x04, 0x90, 0x9F, 0xBC, 0xF0, \r
-0x90, 0x9F, 0xDD, 0xE0, 0x24, 0x03, 0x90, 0x9F, 0xBB, 0xF0, 0x80, 0x0B, 0x90, 0x9F, 0xBC, 0x74, \r
-0x02, 0xF0, 0x90, 0x9F, 0xBB, 0x14, 0xF0, 0x90, 0x9F, 0xBB, 0xE0, 0xFA, 0x90, 0x9F, 0xBA, 0xE0, \r
-0xD3, 0x9A, 0x50, 0x09, 0x90, 0x9F, 0xAF, 0xEB, 0x71, 0x70, 0x2C, 0x80, 0x0B, 0xAD, 0x02, 0xC3, \r
-0xED, 0x9D, 0x2B, 0x90, 0x9F, 0xAF, 0x71, 0x70, 0x90, 0x9F, 0xBF, 0xF0, 0x90, 0x9F, 0xBF, 0xE0, \r
-0xFF, 0x7E, 0x00, 0x90, 0x9F, 0xB3, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x05, 0x58, 0xF0, 0x22, \r
-0xF0, 0x90, 0x9F, 0xBC, 0xE0, 0xC3, 0x9D, 0x22, 0xE4, 0xFD, 0xF9, 0xFC, 0x90, 0x05, 0x62, 0xE0, \r
-0xFE, 0x90, 0x05, 0x61, 0xE0, 0xFB, 0xEB, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, \r
-0xFF, 0xEE, 0x54, 0x3F, 0x90, 0x9F, 0xE0, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, \r
-0xFF, 0x90, 0x9F, 0xE0, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xC3, 0x9F, 0xEA, 0x9E, 0x40, 0x21, 0xEB, \r
-0x9F, 0xFF, 0x90, 0x9F, 0xBF, 0xE0, 0xFE, 0xC3, 0x74, 0x0A, 0x9E, 0x2F, 0xF9, 0xC3, 0x94, 0x19, \r
-0x50, 0x0E, 0x74, 0xC4, 0x29, 0x91, 0x64, 0xE0, 0x04, 0xF0, 0x90, 0x9F, 0xBD, 0xE0, 0x04, 0xF0, \r
-0x90, 0x9F, 0xBD, 0xE0, 0xC3, 0x94, 0x64, 0x50, 0x02, 0x81, 0x60, 0xE4, 0xFC, 0xFD, 0x91, 0x61, \r
-0xE0, 0x2C, 0xFC, 0xD3, 0x94, 0x05, 0x40, 0x07, 0x90, 0xA1, 0x1D, 0xED, 0xF0, 0x80, 0x05, 0x0D, \r
-0xED, 0xB4, 0x19, 0xEA, 0xE4, 0xFC, 0xFD, 0x91, 0x61, 0xE0, 0x2C, 0xFC, 0xD3, 0x94, 0x5F, 0x40, \r
-0x07, 0x90, 0xA1, 0x1E, 0xED, 0xF0, 0x80, 0x05, 0x0D, 0xED, 0xB4, 0x19, 0xEA, 0x90, 0xA1, 0x1D, \r
-0xE0, 0x90, 0x9F, 0xC2, 0xF0, 0x90, 0xA1, 0x1E, 0xE0, 0x90, 0x9F, 0xC3, 0x91, 0x6C, 0x94, 0x0B, \r
-0x40, 0x0A, 0xEF, 0x24, 0xF6, 0x90, 0x9F, 0xBA, 0xF0, 0xE4, 0x80, 0x09, 0xE4, 0x90, 0x9F, 0xBA, \r
-0x91, 0x6C, 0x74, 0x0A, 0x9F, 0x90, 0x9F, 0xB9, 0xF0, 0x90, 0x9F, 0xC2, 0xE0, 0xFF, 0xA3, 0xE0, \r
-0xC3, 0x9F, 0x90, 0x9F, 0xC0, 0xF0, 0xC3, 0x94, 0x08, 0x50, 0x03, 0x74, 0x08, 0xF0, 0x90, 0x9F, \r
-0xBA, 0xE0, 0xFD, 0x90, 0x9F, 0xC0, 0xE0, 0xFB, 0xE4, 0xFF, 0x71, 0x0D, 0xE4, 0xFF, 0xF1, 0x8A, \r
-0x22, 0x74, 0xC4, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x9F, 0xF5, 0x83, 0x22, 0xF0, 0x90, 0x9F, 0xC2, \r
-0xE0, 0xFF, 0xC3, 0x22, 0xF1, 0x0B, 0x40, 0x1E, 0x90, 0x9F, 0xC1, 0xE0, 0x04, 0xF0, 0xE0, 0xFF, \r
-0x94, 0x04, 0x50, 0x12, 0x90, 0x9F, 0xB9, 0xEF, 0xF0, 0x25, 0xE0, 0x24, 0x08, 0x90, 0x9F, 0xC0, \r
-0xF0, 0xFB, 0x91, 0xF9, 0x71, 0x0D, 0x22, 0x90, 0x9F, 0xA4, 0xE0, 0x12, 0x5E, 0xCD, 0x30, 0xE0, \r
-0x0B, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x02, 0xF1, 0xBB, 0xB1, 0x02, 0x30, 0xE0, \r
-0x08, 0xF1, 0x7E, 0x54, 0x07, 0x70, 0x39, 0x80, 0x34, 0xD1, 0xFE, 0x40, 0x30, 0x12, 0x5F, 0x8C, \r
-0x64, 0x01, 0x70, 0x2C, 0x12, 0x69, 0x3A, 0x70, 0x04, 0x91, 0x74, 0x80, 0x24, 0x91, 0x74, 0x90, \r
-0x9F, 0xB1, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94, 0x02, 0x40, 0x09, 0x91, 0xF1, 0xE4, 0x90, 0x9F, \r
-0xB1, 0xF0, 0x80, 0x03, 0x12, 0x5F, 0xB7, 0xE4, 0x90, 0x9F, 0xB0, 0xF0, 0x22, 0x12, 0x68, 0x44, \r
-0x22, 0x90, 0x9F, 0xA4, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0x90, 0x9F, 0xB9, 0xE0, 0xFF, 0xA3, 0xE0, \r
-0xFD, 0x22, 0x90, 0x9F, 0xA3, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x22, 0x12, 0x4F, 0xD0, 0x20, \r
-0xE0, 0x02, 0xC1, 0xB9, 0x90, 0xA0, 0x67, 0xE0, 0x64, 0x01, 0x70, 0x2A, 0x90, 0x06, 0x92, 0xE0, \r
-0x20, 0xE2, 0x06, 0x90, 0x04, 0xE3, 0xE0, 0x60, 0x18, 0xD1, 0xC0, 0xD1, 0xC7, 0x90, 0xA0, 0x6B, \r
-0xE0, 0x75, 0xF0, 0x03, 0x84, 0xFF, 0x90, 0xA0, 0x74, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xC1, \r
-0xA3, 0xD1, 0xD6, 0x04, 0xF0, 0x22, 0x90, 0xA0, 0x67, 0xE0, 0x64, 0x04, 0x70, 0x27, 0x90, 0x06, \r
-0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x04, 0xE3, 0xE0, 0x60, 0x14, 0xD1, 0xC0, 0xD1, 0xC7, 0x90, \r
-0xA0, 0x6A, 0xE0, 0xFF, 0x90, 0xA0, 0x74, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xC1, 0xA3, 0xD1, \r
-0xD6, 0x74, 0x04, 0xF0, 0x22, 0x90, 0xA0, 0x67, 0xE0, 0x64, 0x06, 0x60, 0x02, 0xC1, 0x22, 0xF1, \r
-0x17, 0x50, 0x08, 0x90, 0xA0, 0x75, 0xE0, 0x94, 0x03, 0x40, 0x1B, 0x12, 0x85, 0xA8, 0x90, 0xA0, \r
-0x72, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0, 0x80, 0x03, 0x74, 0x02, 0xF0, 0xE4, 0x90, 0xA0, 0x67, \r
-0xF0, 0x90, 0xA0, 0x75, 0xF0, 0x22, 0x90, 0xA0, 0x66, 0xB1, 0x05, 0x30, 0xE0, 0x40, 0xEF, 0x54, \r
-0xFB, 0xF0, 0xE4, 0xA3, 0x12, 0x85, 0xA7, 0x30, 0xE0, 0x0B, 0x90, 0xA0, 0x84, 0xE0, 0x20, 0xE0, \r
-0x02, 0xC1, 0x59, 0xC1, 0x4C, 0xF1, 0x17, 0x40, 0x0B, 0x90, 0xA0, 0x84, 0xE0, 0x30, 0xE0, 0x02, \r
-0x80, 0x7A, 0xC1, 0x59, 0x90, 0xA0, 0x84, 0xE0, 0x30, 0xE0, 0x0C, 0xD1, 0xBA, 0xE4, 0x90, 0xA0, \r
-0x74, 0xF0, 0x90, 0xA2, 0x15, 0x80, 0x7D, 0x90, 0xA0, 0x72, 0x74, 0x02, 0xF0, 0x22, 0x12, 0x4C, \r
-0x80, 0x90, 0xA0, 0x75, 0xE0, 0x04, 0xF0, 0x7F, 0x03, 0x12, 0x66, 0xEC, 0xF1, 0x17, 0x50, 0x0A, \r
-0x90, 0xA0, 0x75, 0xE0, 0x94, 0x03, 0x50, 0x02, 0xC1, 0xB9, 0x7F, 0x03, 0x12, 0x62, 0xC3, 0x90, \r
-0x05, 0x22, 0xE0, 0x44, 0x10, 0xFF, 0x7D, 0x03, 0x12, 0x49, 0x22, 0x90, 0x04, 0x9C, 0xE0, 0x04, \r
-0xF0, 0x22, 0x90, 0xA0, 0x67, 0xE0, 0x64, 0x07, 0x70, 0x3D, 0x90, 0xA0, 0x75, 0xE0, 0xB4, 0x04, \r
-0x05, 0x12, 0x6F, 0xD1, 0x80, 0x67, 0x90, 0xA0, 0x66, 0xB1, 0x05, 0x30, 0xE0, 0x1E, 0xEF, 0x54, \r
-0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0xA0, 0x84, 0xE0, 0x30, 0xE0, 0x0D, 0xD1, 0xBA, 0xE4, 0x90, \r
-0xA0, 0x74, 0xF0, 0x90, 0xA2, 0x15, 0x04, 0x80, 0x0B, 0x02, 0x6F, 0xD1, 0x12, 0x4C, 0x80, 0x90, \r
-0xA0, 0x75, 0xE0, 0x04, 0xF0, 0x80, 0x3C, 0x90, 0xA0, 0x67, 0xE0, 0x64, 0x09, 0x70, 0x4A, 0x90, \r
-0xA0, 0x66, 0xE0, 0x30, 0xE0, 0x0B, 0x12, 0x6F, 0xD1, 0x90, 0xA0, 0x66, 0xE0, 0x54, 0xFE, 0xF0, \r
-0x22, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE2, 0x20, 0x74, 0x04, 0xF0, 0xD1, 0xC7, 0xE0, 0xB4, 0x02, \r
-0x12, 0xD1, 0xCE, 0x60, 0x05, 0x74, 0x05, 0xF0, 0x80, 0x03, 0x74, 0x02, 0xF0, 0xE4, 0x90, 0xA0, \r
-0x67, 0xF0, 0x22, 0x7F, 0x03, 0x02, 0x66, 0xEC, 0xD1, 0xCE, 0x60, 0x05, 0x74, 0x05, 0xF0, 0x80, \r
-0x03, 0x74, 0x02, 0xF0, 0xE4, 0x90, 0xA0, 0x67, 0xF0, 0x22, 0x90, 0xA0, 0x67, 0x74, 0x09, 0xF0, \r
-0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x22, 0x90, 0xA0, 0x74, 0xE0, 0x04, 0xF0, 0x22, 0x90, 0xA2, \r
-0x15, 0xE0, 0x90, 0xA0, 0x72, 0x22, 0xE4, 0x90, 0xA0, 0x67, 0xF0, 0x90, 0xA0, 0x72, 0x22, 0x90, \r
-0x01, 0x57, 0xE0, 0x60, 0x18, 0x12, 0x82, 0xC7, 0xB1, 0x02, 0x30, 0xE0, 0x02, 0xE1, 0x7E, 0xD1, \r
-0xFE, 0x40, 0x0A, 0xE4, 0xFF, 0x12, 0x5F, 0x2F, 0xBF, 0x01, 0x02, 0x91, 0xF1, 0x22, 0x90, 0x9F, \r
-0xB0, 0xE0, 0x04, 0xF0, 0x90, 0x9F, 0xAB, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0xA0, 0x4B, 0xE0, 0xFF, \r
-0x90, 0x9F, 0xB0, 0xE0, 0xD3, 0x9F, 0x22, 0x90, 0xA0, 0x75, 0xE0, 0xFF, 0x90, 0xA0, 0x74, 0xE0, \r
-0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x07, 0x03, 0x90, 0xA0, 0x6B, 0xE0, \r
-0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x41, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x22, 0x90, \r
-0xA0, 0x5F, 0xE0, 0x30, 0xE0, 0x37, 0xB1, 0x0C, 0x90, 0xA0, 0x72, 0xE0, 0xFF, 0xB4, 0x01, 0x02, \r
-0x80, 0x1D, 0x90, 0xA0, 0x72, 0xE0, 0xFF, 0xB4, 0x02, 0x02, 0x80, 0x1E, 0x90, 0xA0, 0x72, 0xE0, \r
-0xFF, 0xB4, 0x03, 0x03, 0x02, 0x65, 0x1D, 0x90, 0xA0, 0x72, 0xE0, 0xFF, 0xB4, 0x04, 0x03, 0x02, \r
-0x85, 0xB0, 0x90, 0xA0, 0x72, 0xE0, 0xFF, 0xB4, 0x05, 0x03, 0x12, 0x9A, 0x62, 0x22, 0xEF, 0x54, \r
-0xFB, 0xF0, 0x90, 0x9F, 0xAB, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0xE4, 0xFE, 0x74, 0xC4, 0x2E, 0x91, \r
-0x64, 0xE4, 0xF0, 0x0E, 0xEE, 0xB4, 0x19, 0xF4, 0xE4, 0x90, 0x9F, 0xBD, 0xF0, 0x90, 0x9F, 0xC1, \r
-0xF0, 0x90, 0x9F, 0xB9, 0xF0, 0xEF, 0xB4, 0x01, 0x09, 0x90, 0x9F, 0xC2, 0x74, 0x19, 0xF0, 0xE4, \r
-0xA3, 0xF0, 0x22, 0x22, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x02, \r
-0x5F, 0xAB, 0x7D, 0x01, 0x7F, 0x02, 0x02, 0x5C, 0xD1, 0x12, 0x06, 0x89, 0xFF, 0x54, 0x01, 0xFE, \r
-0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, \r
-0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, \r
-0xC4, 0x74, 0xD1, 0xF0, 0x74, 0x8F, 0xA3, 0xF0, 0x12, 0x90, 0x24, 0x53, 0x91, 0xBF, 0x74, 0xD1, \r
-0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x8F, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, \r
-0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, \r
-0xF0, 0xD0, 0xE0, 0x32, 0x90, 0xFD, 0x68, 0xE0, 0xFF, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0xA1, 0x3A, \r
-0xF0, 0xEF, 0x20, 0xE0, 0x02, 0x21, 0xF9, 0x90, 0xA2, 0x16, 0xE0, 0x70, 0x1A, 0x7F, 0x2E, 0x12, \r
-0x47, 0xAF, 0x90, 0xA0, 0x9C, 0xEF, 0xF0, 0x7F, 0x2D, 0x12, 0x47, 0xAF, 0x90, 0xA0, 0x9D, 0xEF, \r
-0xF0, 0x90, 0xA2, 0x16, 0x74, 0x01, 0xF0, 0x90, 0xA1, 0x3A, 0xE0, 0x64, 0x15, 0x70, 0x58, 0x90, \r
-0xFD, 0x62, 0xE0, 0xFF, 0x30, 0xE6, 0x11, 0xF4, 0x54, 0x3F, 0x04, 0xFE, 0x51, 0x92, 0xC3, 0x9E, \r
-0x51, 0x8A, 0x40, 0x12, 0xE4, 0xF0, 0x80, 0x0E, 0x51, 0x92, 0xFE, 0xEF, 0x54, 0x3F, 0x2E, 0x51, \r
-0x8A, 0x40, 0x03, 0x74, 0x3F, 0xF0, 0x90, 0xA1, 0x39, 0xE0, 0xFF, 0x54, 0x30, 0xC4, 0x54, 0x0F, \r
-0xFE, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x4E, 0x90, 0xA1, 0x37, 0xF0, 0xE0, 0xFD, 0x7F, 0x2E, 0x12, \r
-0x46, 0xA0, 0x90, 0xA1, 0x39, 0xE0, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0xA0, 0x9D, 0xE0, 0x54, 0x0F, \r
-0x4F, 0xFD, 0x7F, 0x2D, 0x12, 0x46, 0xA0, 0x90, 0xA1, 0x3A, 0xE0, 0xB4, 0x21, 0x0D, 0x90, 0xFD, \r
-0x62, 0xE0, 0xFF, 0x12, 0x9A, 0x48, 0x7F, 0x04, 0x12, 0x6F, 0x57, 0x90, 0xA1, 0x3A, 0xE0, 0xB4, \r
-0x23, 0x04, 0x7F, 0x01, 0x31, 0xFA, 0x90, 0xA1, 0x3A, 0xE0, 0xB4, 0x27, 0x04, 0x7F, 0x02, 0x31, \r
-0xFA, 0x90, 0xA1, 0x3A, 0xE0, 0xB4, 0x30, 0x0D, 0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0x12, 0x99, 0x49, \r
-0x7F, 0x04, 0x12, 0x6F, 0x57, 0x90, 0xA1, 0x3A, 0xE0, 0x64, 0x34, 0x60, 0x02, 0x21, 0x98, 0x90, \r
-0xFD, 0x62, 0xE0, 0x30, 0xE0, 0x59, 0x90, 0xA0, 0x84, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x02, \r
-0x21, 0x98, 0x90, 0xA0, 0x62, 0x12, 0x4F, 0xD3, 0x30, 0xE0, 0x18, 0x12, 0x47, 0xF0, 0x90, 0xA0, \r
-0x85, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x47, 0xF0, 0xE4, 0xFF, 0xFE, 0xEC, 0x12, 0x47, 0xD0, \r
-0x12, 0x47, 0xD6, 0x51, 0x9B, 0x7D, 0x01, 0x12, 0x46, 0xB4, 0x90, 0xA1, 0x37, 0x74, 0x01, 0xF0, \r
-0xFB, 0x7A, 0xA1, 0x79, 0x37, 0xFD, 0x7F, 0x34, 0x12, 0x6E, 0x00, 0x90, 0xA0, 0xA7, 0xE0, 0x44, \r
-0x01, 0xF0, 0x90, 0x04, 0x9D, 0xE4, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x51, 0xB3, 0x80, 0x39, 0x51, \r
-0x9B, 0xE4, 0xFD, 0x12, 0x46, 0xB4, 0x90, 0xA0, 0x62, 0x12, 0x6F, 0xA4, 0x30, 0xE0, 0x1E, 0x12, \r
-0x47, 0xF0, 0xE4, 0xFB, 0xFA, 0xED, 0xF9, 0xEC, 0xF8, 0x90, 0xA0, 0x85, 0xE0, 0xFE, 0xA3, 0xE0, \r
-0xFF, 0xE4, 0xFC, 0xFD, 0x12, 0x45, 0x53, 0x12, 0x47, 0xD0, 0x12, 0x47, 0xD6, 0xD1, 0x2E, 0x90, \r
-0x04, 0x9D, 0xE0, 0x54, 0xFE, 0xF0, 0x71, 0x02, 0x90, 0xA1, 0x3A, 0xE0, 0xFD, 0xB4, 0x35, 0x07, \r
-0x90, 0xA0, 0x66, 0xE0, 0x44, 0x01, 0xF0, 0xED, 0xB4, 0x36, 0x23, 0x90, 0xFD, 0x61, 0xE0, 0x90, \r
-0xA1, 0x37, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0xA1, 0x38, 0xF0, 0x90, 0xA1, 0x3A, 0xE0, 0xFF, \r
-0x90, 0xA1, 0x37, 0xE0, 0xFD, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x38, 0x12, 0x6E, 0x00, 0x90, 0xA1, \r
-0x3A, 0xE0, 0xB4, 0x37, 0x02, 0x71, 0x29, 0x90, 0xA1, 0x3A, 0xE0, 0xB4, 0x40, 0x14, 0x90, 0xFD, \r
-0x62, 0xE0, 0x30, 0xE0, 0x08, 0x90, 0xA0, 0x82, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0xA0, \r
-0x82, 0xF0, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x51, 0x01, 0x7F, 0x04, 0x02, 0x6F, \r
-0x57, 0x90, 0xA1, 0x98, 0x74, 0x09, 0xF0, 0x90, 0xA1, 0xA6, 0x74, 0x07, 0xF0, 0x90, 0xA1, 0x9A, \r
-0xEF, 0xF0, 0x70, 0x31, 0x90, 0xA0, 0x78, 0xE0, 0x60, 0x1A, 0xA3, 0xE0, 0x60, 0x02, 0x80, 0x0C, \r
-0x90, 0x07, 0x70, 0xE0, 0x70, 0x06, 0x90, 0x07, 0x74, 0xE0, 0x60, 0x08, 0x90, 0xA1, 0x9B, 0x74, \r
-0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0xA1, 0x9B, 0xF0, 0xE4, 0x90, 0xA1, 0x9C, 0xF0, 0xA3, 0xF0, \r
-0xA3, 0xF0, 0xA3, 0x80, 0x39, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0xA1, 0x9B, 0xF0, 0x90, 0xFD, 0x63, \r
-0xE0, 0x90, 0xA1, 0x9C, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0xA1, 0x9D, 0xF0, 0x90, 0xFD, 0x65, \r
-0xE0, 0x90, 0xA1, 0x9E, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0xA1, 0x9F, 0xF0, 0x90, 0xFD, 0x67, \r
-0xE0, 0x90, 0xA1, 0xA0, 0xF0, 0x90, 0xA1, 0x9B, 0xE0, 0x54, 0x01, 0x90, 0xA0, 0x78, 0xF0, 0xA3, \r
-0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x98, 0x02, 0x6E, 0xA2, 0x90, 0xA1, 0x39, 0xF0, 0xD3, 0x94, \r
-0x3F, 0x22, 0x90, 0xA0, 0x9C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x22, 0x90, 0xA0, 0x62, 0xE0, 0xC4, \r
-0x13, 0x13, 0x54, 0x01, 0xFF, 0x90, 0xA0, 0xA1, 0xE0, 0xFB, 0x90, 0xA0, 0xA0, 0xE0, 0x90, 0xA1, \r
-0xF7, 0xF0, 0x22, 0x90, 0x01, 0xE7, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x54, 0x01, \r
-0xF1, 0x75, 0x54, 0xFD, 0x4F, 0xF0, 0xE0, 0xC3, 0x13, 0xFF, 0x54, 0x01, 0x90, 0x01, 0xE6, 0xF0, \r
-0xA3, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x30, 0xE0, 0x27, 0x12, 0xAB, 0x37, 0x70, 0x20, 0x90, 0xA0, \r
-0xA7, 0xE0, 0x30, 0xE0, 0x02, 0x80, 0x19, 0x90, 0xFD, 0x62, 0xE0, 0xB4, 0xAD, 0x0E, 0xA3, 0xE0, \r
-0xB4, 0x35, 0x09, 0x51, 0xB3, 0x90, 0x01, 0xE5, 0x74, 0xDF, 0xF0, 0x22, 0x80, 0x00, 0x80, 0x02, \r
-0x80, 0xB1, 0x90, 0x01, 0xE7, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0xA0, 0x87, 0xE0, 0x44, 0x04, \r
-0xF0, 0x7D, 0x01, 0x7F, 0x23, 0x12, 0x6E, 0x00, 0x8F, 0x51, 0xE5, 0x51, 0xB4, 0x03, 0x09, 0xE4, \r
-0xFF, 0x51, 0x01, 0x7F, 0x04, 0x12, 0x98, 0x0D, 0x22, 0x90, 0xA0, 0x62, 0x12, 0x4F, 0xD3, 0x20, \r
-0xE0, 0x1D, 0x90, 0xFD, 0x62, 0xE0, 0x30, 0xE0, 0x16, 0xE0, 0x90, 0xA1, 0x3B, 0x30, 0xE1, 0x05, \r
-0x74, 0x01, 0xF0, 0x80, 0x03, 0x74, 0x02, 0xF0, 0x90, 0xA1, 0x3B, 0xE0, 0xFF, 0x71, 0x50, 0x22, \r
-0x90, 0xA1, 0x3C, 0xEF, 0xF0, 0x90, 0xA0, 0xA1, 0xE0, 0x70, 0x4D, 0x12, 0x47, 0xF0, 0xEE, 0x54, \r
-0x0F, 0xFE, 0xE4, 0xFD, 0xFC, 0x90, 0xA1, 0x3D, 0x12, 0x08, 0x6D, 0xE4, 0x7F, 0x80, 0x91, 0x1F, \r
-0x70, 0x05, 0x90, 0xA0, 0x80, 0x80, 0x1B, 0xE4, 0xFF, 0xFE, 0x91, 0x21, 0x70, 0x0A, 0x90, 0xA0, \r
-0x80, 0x04, 0xF0, 0xE4, 0xA3, 0xF0, 0x80, 0x55, 0xE4, 0xFF, 0x91, 0x1F, 0x70, 0x09, 0x90, 0xA0, \r
-0x80, 0x04, 0xF0, 0xA3, 0xF0, 0x80, 0x46, 0xE4, 0x7F, 0x80, 0xFE, 0x91, 0x21, 0x70, 0x3E, 0x90, \r
-0xA0, 0x80, 0xF0, 0xA3, 0x04, 0xF0, 0x80, 0x35, 0x7F, 0x2C, 0x7E, 0x09, 0x12, 0x37, 0x4E, 0xEF, \r
-0x54, 0x02, 0x91, 0x34, 0x4E, 0x4F, 0x60, 0x08, 0x90, 0xA0, 0x80, 0x74, 0x01, 0xF0, 0x80, 0x05, \r
-0xE4, 0x90, 0xA0, 0x80, 0xF0, 0xF1, 0x6E, 0xEF, 0x54, 0x01, 0x91, 0x34, 0x4E, 0x4F, 0x60, 0x07, \r
-0xE4, 0x90, 0xA0, 0x81, 0xF0, 0x80, 0x06, 0x90, 0xA0, 0x81, 0x74, 0x01, 0xF0, 0x90, 0xA0, 0x7A, \r
-0xE0, 0x44, 0x01, 0xF0, 0x7D, 0x11, 0x12, 0x63, 0x00, 0x90, 0x07, 0x78, 0xE0, 0x90, 0xA0, 0x7F, \r
-0xF0, 0xF1, 0x7D, 0x12, 0x63, 0x84, 0x90, 0xA1, 0x3C, 0xE0, 0xFD, 0x70, 0x02, 0x80, 0x1C, 0xED, \r
-0xB4, 0x01, 0x06, 0x91, 0x2D, 0x44, 0x20, 0xF0, 0x22, 0x90, 0xA1, 0x3C, 0xE0, 0xFD, 0xB4, 0x02, \r
-0x06, 0x91, 0x2D, 0x44, 0x60, 0xF0, 0x22, 0xED, 0xB4, 0x03, 0x03, 0x91, 0x2D, 0xF0, 0x22, 0x7E, \r
-0x02, 0xFD, 0xFC, 0x90, 0xA1, 0x3D, 0x12, 0x45, 0x8D, 0xC3, 0x02, 0x45, 0x60, 0x90, 0xA0, 0x7A, \r
-0xE0, 0x54, 0x1F, 0x22, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x90, 0xA1, 0x3D, 0x12, 0x08, 0x6D, 0x90, \r
-0xA1, 0x3D, 0x12, 0x45, 0x71, 0xEC, 0x4D, 0x22, 0x12, 0xA5, 0x55, 0x7F, 0x08, 0x12, 0x47, 0xAF, \r
-0xEF, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x46, 0xA0, 0xE4, 0xFF, 0x91, 0xE0, 0x51, 0x9B, 0xE4, \r
-0xFD, 0x12, 0x46, 0xB4, 0x90, 0x9F, 0xA3, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x02, 0xF1, \r
-0xAD, 0x90, 0x9F, 0xA4, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
-0x91, 0x89, 0x91, 0x48, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x9F, 0xA4, 0xE0, 0x44, 0x10, 0xF0, \r
-0x51, 0x9B, 0x7D, 0x01, 0x12, 0x46, 0xB4, 0x90, 0x9F, 0xB2, 0xE0, 0xFD, 0x7F, 0x93, 0x12, 0x46, \r
-0xA0, 0x90, 0x9F, 0xA8, 0xE0, 0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x05, 0x74, 0x10, \r
-0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x90, 0xF0, 0x7F, 0x08, 0x12, 0x47, 0xAF, 0xEF, 0x44, \r
-0x10, 0xFD, 0x7F, 0x08, 0x12, 0x46, 0xA0, 0x7F, 0x01, 0x91, 0xE0, 0x7F, 0x90, 0x12, 0x47, 0xAF, \r
-0xEF, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x46, 0xA0, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x3E, 0x50, \r
-0x90, 0xA2, 0x23, 0xD1, 0x81, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, \r
-0x90, 0xA2, 0x23, 0xE0, 0x6F, 0x60, 0x34, 0xC3, 0x90, 0xA2, 0x25, 0xE0, 0x94, 0x88, 0x90, 0xA2, \r
-0x24, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x90, 0xA2, \r
-0x24, 0xD1, 0x39, 0xD1, 0xD9, 0xD3, 0x90, 0xA2, 0x25, 0xE0, 0x94, 0x32, 0x90, 0xA2, 0x24, 0xE0, \r
-0x94, 0x00, 0x40, 0xC1, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE0, 0xBA, 0x22, 0x90, 0x9F, 0xAA, 0xE0, \r
-0xFF, 0x60, 0x03, 0xB4, 0x08, 0x08, 0x12, 0xA9, 0x79, 0xBF, 0x01, 0x02, 0x91, 0x79, 0x22, 0x90, \r
-0x9F, 0xA3, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x9F, 0x9E, 0xE0, 0xFF, 0x30, 0xE0, 0x0E, 0xC3, 0x13, \r
-0x30, 0xE0, 0x07, 0xF1, 0xA0, 0xBF, 0x01, 0x06, 0x80, 0x02, 0x80, 0x00, 0xB1, 0x2C, 0x22, 0x90, \r
-0xA0, 0x7A, 0xE0, 0x30, 0xE0, 0x05, 0x12, 0x9C, 0x28, 0x80, 0x03, 0x12, 0x9B, 0xEC, 0x90, 0xA0, \r
-0xA7, 0xE0, 0x30, 0xE0, 0x04, 0xA3, 0xE0, 0x04, 0xF0, 0x90, 0xA0, 0xA8, 0xE0, 0x64, 0x08, 0x70, \r
-0x17, 0x90, 0xA0, 0xA7, 0xE0, 0x30, 0xE0, 0x0B, 0x51, 0x9B, 0xE4, 0xFD, 0x12, 0x46, 0xB4, 0xD1, \r
-0x2E, 0x80, 0x05, 0xE4, 0x90, 0xA0, 0xA8, 0xF0, 0x90, 0xA0, 0x63, 0x12, 0x6F, 0xA4, 0x30, 0xE0, \r
-0x13, 0x90, 0xA0, 0xA9, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x14, 0x09, 0x90, 0x04, 0x9C, 0xE4, 0xF0, \r
-0x90, 0xA0, 0xA9, 0xF0, 0x90, 0x9F, 0x9E, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x9F, 0xA0, 0x74, 0x01, \r
-0xF0, 0x90, 0x9F, 0xA7, 0xE0, 0x60, 0x4E, 0x90, 0x9F, 0xA3, 0xE0, 0x30, 0xE0, 0x1A, 0x90, 0x9F, \r
-0xBE, 0xE0, 0x04, 0x12, 0x87, 0xC3, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, \r
-0x90, 0x9F, 0xDE, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x9F, 0xA4, 0xE0, 0x13, 0x13, 0x13, 0x54, \r
-0x1F, 0x30, 0xE0, 0x0A, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x03, 0x12, 0x5F, 0xA1, 0x90, 0xA2, \r
-0x35, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x80, 0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, \r
-0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x7F, 0x01, 0x12, 0x6F, 0x57, 0x90, 0xA0, 0x52, 0xE0, 0x30, 0xE0, \r
-0x0C, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x05, 0x12, 0x5F, 0xA1, 0xF1, 0x85, 0x22, 0x90, 0xA0, \r
-0xA7, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0xE4, 0x75, 0xF0, 0x01, 0x02, 0x08, 0xD6, \r
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA1, 0xF8, 0xEE, 0xF0, 0xA3, 0xD1, 0x81, 0x90, \r
-0xA1, 0xF8, 0xF1, 0x97, 0xE0, 0x60, 0x23, 0xC3, 0x90, 0xA1, 0xFB, 0xE0, 0x94, 0xE8, 0x90, 0xA1, \r
-0xFA, 0xE0, 0x94, 0x03, 0x40, 0x0B, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x80, 0xF0, 0x7F, 0x00, 0x80, \r
-0x0B, 0x90, 0xA1, 0xFA, 0xD1, 0x39, 0xD1, 0xF9, 0x80, 0xD5, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, \r
-0x22, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xE4, 0x90, 0xA0, 0xF1, 0xF0, 0xA3, 0xF0, \r
-0xD1, 0xE0, 0xEF, 0x64, 0x01, 0x60, 0x3B, 0xC3, 0x90, 0xA0, 0xF2, 0xE0, 0x94, 0x88, 0x90, 0xA0, \r
-0xF1, 0xE0, 0x94, 0x13, 0x40, 0x0F, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x01, 0xC7, \r
-0x74, 0xFD, 0xF0, 0x80, 0x1D, 0x90, 0xA0, 0xF1, 0xD1, 0x39, 0xD1, 0xD9, 0xD3, 0x90, 0xA0, 0xF2, \r
-0xE0, 0x94, 0x32, 0x90, 0xA0, 0xF1, 0xE0, 0x94, 0x00, 0x40, 0xC5, 0x90, 0x01, 0xC6, 0xE0, 0x30, \r
-0xE3, 0xBE, 0x90, 0x01, 0xC7, 0x74, 0xFE, 0xF0, 0x22, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x3E, 0x50, \r
-0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x44, 0x0B, 0xD1, 0xF8, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xC0, \r
-0x7F, 0x00, 0xB4, 0x40, 0x02, 0x7F, 0x01, 0x22, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x02, 0x3E, 0x50, \r
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x00, 0x12, 0x45, 0xBE, 0x7F, 0x96, 0x7E, \r
-0x02, 0xD1, 0x40, 0xEF, 0x60, 0x53, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, \r
-0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0xFE, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0xA2, \r
-0x03, 0xEF, 0xF0, 0xEE, 0xFF, 0x90, 0xFD, 0x11, 0xF0, 0x90, 0xA2, 0x03, 0xE0, 0xFD, 0x90, 0x02, \r
-0x94, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA2, 0x00, 0xF1, 0x8E, 0x24, 0x02, 0xFF, 0xE4, 0x33, 0xFE, \r
-0x12, 0xA0, 0x27, 0x90, 0xA2, 0x03, 0xE0, 0x24, 0x18, 0xFF, 0x90, 0xA2, 0x00, 0x12, 0x45, 0xB5, \r
-0x12, 0xA0, 0x80, 0x90, 0x02, 0x96, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x30, \r
-0x7E, 0x09, 0x02, 0x37, 0x4E, 0x25, 0xE0, 0xFF, 0x90, 0xA0, 0x84, 0xE0, 0x22, 0x90, 0xA0, 0xA0, \r
-0xE0, 0xFF, 0xE4, 0xFD, 0x22, 0x90, 0xA0, 0x54, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x22, 0x12, 0x45, \r
-0xB5, 0x90, 0x00, 0x0E, 0x02, 0x06, 0xA2, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0x22, \r
-0x90, 0x9F, 0xA1, 0xE0, 0x64, 0x02, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0xA0, 0x5B, \r
-0xE0, 0x90, 0x01, 0x30, 0xF0, 0x90, 0xA0, 0x58, 0xE0, 0x90, 0x01, 0x39, 0xF0, 0x90, 0xA0, 0x59, \r
-0xE0, 0x90, 0x01, 0x3A, 0xF0, 0x22, 0x90, 0xA0, 0x91, 0xE0, 0xFE, 0xC3, 0x13, 0x30, 0xE0, 0x16, \r
-0xEF, 0xB4, 0x01, 0x05, 0x90, 0xA0, 0x98, 0x80, 0x03, 0x90, 0xA0, 0x94, 0x12, 0x47, 0xCE, 0x7F, \r
-0x80, 0x7E, 0x08, 0x12, 0x38, 0x45, 0x22, 0xE4, 0x7B, 0x01, 0x7A, 0xA0, 0x79, 0xAA, 0x12, 0x6F, \r
-0x85, 0xB4, 0x02, 0x18, 0x90, 0xA2, 0x14, 0xE0, 0x64, 0x04, 0x60, 0x0B, 0x7F, 0x40, 0x11, 0x0D, \r
-0x90, 0xA2, 0x14, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0xA2, 0x14, 0xF0, 0x22, 0x90, 0xA2, 0x33, \r
-0xEF, 0xF0, 0x7F, 0x02, 0x12, 0x44, 0xB7, 0x90, 0x9E, 0x92, 0xE0, 0xFF, 0x90, 0xA2, 0x33, 0xE0, \r
-0xFE, 0xEF, 0x4E, 0x90, 0x9E, 0x92, 0xF0, 0x22, 0x90, 0xA1, 0x61, 0xEB, 0xF0, 0x70, 0x5D, 0x90, \r
-0xA1, 0x61, 0xE0, 0xFE, 0x11, 0x8D, 0xE0, 0xFC, 0x90, 0xA1, 0x62, 0xE0, 0xFB, 0xEC, 0x6B, 0x60, \r
-0x4B, 0x90, 0xA1, 0x66, 0xEB, 0xF0, 0xA3, 0xEE, 0xF0, 0xAE, 0x05, 0xEE, 0x25, 0xE0, 0x4F, 0xFF, \r
-0x90, 0x9E, 0x91, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x4F, 0x90, 0xA1, 0x68, 0xF0, 0x90, 0xA1, \r
-0x63, 0xE0, 0x90, 0xA1, 0x6A, 0xF0, 0x90, 0xA1, 0x64, 0x74, 0x0C, 0xF0, 0x90, 0xA1, 0x72, 0x74, \r
-0x04, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x64, 0x12, 0x6E, 0xA2, 0x7F, 0x04, 0x11, 0x0D, 0x90, \r
-0xA1, 0x62, 0xE0, 0xFF, 0x90, 0xA1, 0x61, 0xE0, 0x11, 0x8D, 0xEF, 0xF0, 0x22, 0x24, 0x11, 0xF5, \r
-0x82, 0xE4, 0x34, 0x99, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x06, \r
-0x89, 0x90, 0xA1, 0x01, 0x12, 0x6A, 0x86, 0x90, 0xA1, 0x02, 0x12, 0x56, 0xDD, 0x90, 0xA1, 0x03, \r
-0xF0, 0x12, 0x57, 0x09, 0x90, 0xA1, 0x04, 0x12, 0x6D, 0x27, 0x90, 0xA1, 0x05, 0x12, 0x96, 0x82, \r
-0x90, 0xA0, 0x87, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0xA1, 0x02, 0xE0, 0xB4, 0x0C, 0x06, 0xE5, 0x70, \r
-0x70, 0x11, 0x80, 0x00, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x01, 0x7D, 0x07, 0x7F, 0x30, 0x12, 0x6E, \r
-0x00, 0x8F, 0x51, 0x90, 0xA1, 0x02, 0xE0, 0xB4, 0x0D, 0x0E, 0xE5, 0x51, 0x64, 0x01, 0x60, 0x05, \r
-0x75, 0x70, 0x01, 0x80, 0x03, 0xE4, 0xF5, 0x70, 0xE5, 0x51, 0xB4, 0x01, 0x05, 0x75, 0x52, 0x01, \r
-0x80, 0x03, 0xE4, 0xF5, 0x52, 0x90, 0xA1, 0x01, 0xE0, 0xFB, 0xAD, 0x52, 0xE4, 0xFF, 0x31, 0x49, \r
-0x7F, 0x04, 0x11, 0x0D, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA1, 0x0C, 0x74, 0x12, 0xF0, 0x90, \r
-0xA1, 0x1A, 0x74, 0x05, 0xF0, 0x90, 0xA1, 0x0E, 0xEF, 0x12, 0x4F, 0xBF, 0x90, 0xA1, 0x0A, 0xE0, \r
-0x90, 0xA1, 0x11, 0xF0, 0x90, 0xA1, 0x0B, 0xE0, 0x90, 0xA1, 0x12, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, \r
-0x79, 0x0C, 0x12, 0x6E, 0xA2, 0x7F, 0x04, 0x01, 0x0D, 0x90, 0xA1, 0xA7, 0x74, 0x0B, 0xF0, 0x90, \r
-0xA1, 0xB5, 0x74, 0x07, 0xF0, 0x90, 0xA1, 0xA9, 0xEF, 0xF0, 0x60, 0x32, 0x90, 0xFD, 0x63, 0xE0, \r
-0x90, 0xA1, 0xAA, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0xA1, 0xAB, 0xF0, 0x90, 0xFD, 0x64, 0xE0, \r
-0x90, 0xA1, 0xAC, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0xA1, 0xAD, 0xF0, 0x90, 0xFD, 0x66, 0xE0, \r
-0x90, 0xA1, 0xAE, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0xA1, 0xAF, 0xF0, 0x80, 0x0D, 0x90, 0xA1, \r
-0xAA, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0x12, 0x58, 0xA4, 0x7B, 0x01, 0x7A, 0xA1, 0x79, \r
-0xA7, 0x02, 0x6E, 0xA2, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x01, 0x7F, 0xF5, 0x7E, 0x01, 0x12, 0x34, \r
-0xC1, 0xBF, 0x01, 0x06, 0x90, 0xA1, 0x01, 0xE0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x01, \r
-0x7F, 0xF6, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0xA1, 0x01, 0xE0, 0x90, 0xA1, \r
-0x03, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x01, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, \r
-0x01, 0x08, 0x90, 0xA1, 0x01, 0xE0, 0x90, 0xA1, 0x04, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x01, \r
-0x7F, 0xF3, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0xA1, 0x01, 0xE0, 0x90, 0xA1, \r
-0x05, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x01, 0x7F, 0xF2, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, \r
-0x01, 0x08, 0x90, 0xA1, 0x01, 0xE0, 0x90, 0xA1, 0x06, 0xF0, 0x90, 0xA1, 0x02, 0xE0, 0xFF, 0xA3, \r
-0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0xA1, 0x0A, 0xF0, 0x90, 0xA1, 0x06, 0xE0, 0x90, \r
-0xA1, 0x0B, 0xF0, 0x21, 0x19, 0x12, 0x06, 0x89, 0xFF, 0x90, 0x9F, 0x8B, 0xF0, 0xBF, 0x01, 0x07, \r
-0x31, 0xA4, 0xE4, 0x90, 0x9F, 0x8B, 0xF0, 0x22, 0x90, 0xA1, 0x3B, 0x74, 0x08, 0xF0, 0x90, 0xA1, \r
-0x49, 0x74, 0x01, 0xF0, 0x90, 0xA1, 0x3D, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0x3B, 0x02, \r
-0x6E, 0xA2, 0x90, 0xA1, 0x2B, 0xEF, 0xF0, 0x90, 0xA1, 0x2D, 0x74, 0x02, 0xF0, 0x7F, 0x01, 0x12, \r
-0x8A, 0x84, 0x90, 0xA0, 0x63, 0x12, 0x8D, 0x05, 0x30, 0xE0, 0x22, 0x90, 0xA1, 0x2B, 0xE0, 0xB4, \r
-0x02, 0x04, 0x7D, 0x07, 0x80, 0x09, 0x90, 0xA1, 0x2B, 0xE0, 0xB4, 0x05, 0x07, 0x7D, 0x0D, 0x7F, \r
-0xFF, 0x12, 0x49, 0x22, 0x12, 0x4C, 0x22, 0xBF, 0x01, 0x03, 0x12, 0x63, 0x05, 0x90, 0xA0, 0x63, \r
-0x12, 0x56, 0xE4, 0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x02, 0x7F, 0x01, 0x12, 0x62, 0xC3, 0x90, \r
-0xA1, 0x2B, 0xE0, 0xB4, 0x02, 0x0D, 0x90, 0xA0, 0x60, 0xE0, 0x24, 0x03, 0xFF, 0x90, 0xA0, 0x6F, \r
-0x12, 0x66, 0xE8, 0x90, 0xA0, 0x5F, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0xE4, 0x90, 0xA1, 0x2C, \r
-0xF0, 0x80, 0x06, 0x90, 0xA1, 0x2C, 0x74, 0x01, 0xF0, 0x71, 0xCD, 0x20, 0xE0, 0x13, 0x90, 0xA0, \r
-0xA0, 0xE0, 0x60, 0x08, 0x90, 0xA1, 0x2D, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0xA1, 0x2D, \r
-0xF0, 0x90, 0xA1, 0x2D, 0xE0, 0xFF, 0x90, 0xA1, 0x2C, 0xE0, 0xFD, 0x12, 0x63, 0x84, 0xE4, 0x90, \r
-0xA0, 0x71, 0xF0, 0x90, 0xA1, 0x2B, 0xE0, 0xFF, 0xB4, 0x02, 0x05, 0x12, 0x67, 0x9C, 0x80, 0x09, \r
-0xEF, 0xB4, 0x05, 0x05, 0xE4, 0x90, 0xA0, 0x72, 0xF0, 0x71, 0xC4, 0x30, 0xE0, 0x17, 0x90, 0xA1, \r
-0x2B, 0xE0, 0xB4, 0x02, 0x04, 0x7D, 0x08, 0x80, 0x4B, 0x90, 0xA1, 0x2B, 0xE0, 0x64, 0x05, 0x70, \r
-0x48, 0x7D, 0x0E, 0x80, 0x3F, 0x71, 0xB3, 0x30, 0xE0, 0x1E, 0x71, 0xBB, 0x20, 0xE0, 0x02, 0x71, \r
-0xA9, 0x90, 0xA1, 0x2B, 0xE0, 0xB4, 0x02, 0x04, 0x7D, 0x09, 0x80, 0x28, 0x90, 0xA1, 0x2B, 0xE0, \r
-0x64, 0x05, 0x70, 0x25, 0x7D, 0x0F, 0x80, 0x1C, 0x90, 0x9F, 0xA7, 0xE0, 0x60, 0x1B, 0x71, 0xA9, \r
-0x90, 0xA1, 0x2B, 0xE0, 0xB4, 0x02, 0x04, 0x7D, 0x0A, 0x80, 0x09, 0x90, 0xA1, 0x2B, 0xE0, 0xB4, \r
-0x05, 0x07, 0x7D, 0x10, 0x7F, 0x6F, 0x12, 0x49, 0x22, 0x90, 0xA0, 0x62, 0xE0, 0x30, 0xE0, 0x03, \r
-0x12, 0x5C, 0x93, 0x90, 0xA0, 0x62, 0x12, 0x56, 0xE4, 0x30, 0xE0, 0x05, 0xE4, 0xFF, 0x12, 0x97, \r
-0xC6, 0x90, 0xA0, 0x63, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x0E, 0x90, 0x06, 0xCD, 0xE0, 0x54, 0xEF, \r
-0xF0, 0x90, 0x06, 0xCF, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90, 0x9F, 0xA9, 0xE0, 0xFF, 0xE4, 0xFD, \r
-0x02, 0x5A, 0xA1, 0x90, 0xA0, 0x5F, 0xE0, 0xC4, 0x54, 0x0F, 0x22, 0x90, 0xA0, 0x63, 0xE0, 0xC4, \r
-0x13, 0x54, 0x07, 0x22, 0x90, 0xA0, 0x5F, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x22, 0x90, 0xA0, 0x62, \r
-0xE0, 0xC4, 0x13, 0x54, 0x07, 0x22, 0x7E, 0x00, 0x7F, 0x0A, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA0, \r
-0x79, 0x87, 0x12, 0x08, 0xAA, 0x90, 0xA0, 0x73, 0x74, 0x02, 0xF0, 0x22, 0xE4, 0xFF, 0x90, 0xA0, \r
-0x5F, 0xE0, 0x30, 0xE0, 0x32, 0xA3, 0x12, 0x66, 0xE8, 0x90, 0xA0, 0x72, 0x74, 0x01, 0xF0, 0x90, \r
-0xA0, 0x71, 0xF0, 0x90, 0xA0, 0x51, 0xE0, 0x60, 0x07, 0x7D, 0x05, 0x7F, 0x6F, 0x02, 0x49, 0x22, \r
-0x12, 0x5C, 0x93, 0x90, 0xA0, 0x5F, 0x12, 0x8F, 0xB4, 0x20, 0xE0, 0x0B, 0xEF, 0x13, 0x13, 0x54, \r
-0x3F, 0x30, 0xE0, 0x03, 0x12, 0x6F, 0xDF, 0x22, 0x12, 0x67, 0xA3, 0x90, 0xA0, 0x7A, 0x12, 0x8F, \r
-0xB4, 0xFE, 0xEF, 0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9E, 0x40, 0x03, 0x02, 0x67, 0xB3, 0x90, 0xA0, \r
-0x7A, 0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, 0x04, 0x54, 0x0F, \r
-0x25, 0xE0, 0x4F, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7F, 0xC2, 0x12, \r
-0x06, 0x89, 0xFF, 0x90, 0x9F, 0x9D, 0xF0, 0xBF, 0x01, 0x09, 0x12, 0x6A, 0x87, 0x64, 0x01, 0x60, \r
-0x1D, 0x80, 0x18, 0x12, 0x57, 0xE3, 0x12, 0x6A, 0x87, 0x64, 0x01, 0x60, 0x11, 0x90, 0x9F, 0x9E, \r
-0xE0, 0x20, 0xE0, 0x07, 0xE4, 0xFF, 0x12, 0x84, 0x59, 0x80, 0x03, 0x12, 0x82, 0xFC, 0xD0, 0xD0, \r
-0x92, 0xAF, 0x22, 0x90, 0x04, 0x24, 0x91, 0xAD, 0x90, 0xA0, 0xD0, 0x12, 0x6A, 0x86, 0x25, 0x51, \r
-0x90, 0xA0, 0xDE, 0x12, 0x56, 0xDD, 0x25, 0x51, 0x90, 0xA0, 0xEC, 0xF0, 0x22, 0xE0, 0xF5, 0x51, \r
-0x12, 0x06, 0x89, 0x25, 0x51, 0x22, 0x12, 0x06, 0x89, 0x54, 0x01, 0xFF, 0x90, 0xA0, 0xEF, 0xE0, \r
-0x54, 0xFE, 0x4F, 0xF0, 0x22, 0x12, 0x56, 0xDE, 0xFF, 0x30, 0xE0, 0x1F, 0x12, 0x06, 0x89, 0x90, \r
-0xA0, 0x4B, 0x12, 0x6A, 0x86, 0x90, 0xA0, 0x4C, 0xF0, 0xEF, 0x54, 0xFE, 0xFF, 0xA3, 0xE0, 0x54, \r
-0x01, 0x4F, 0xF0, 0x12, 0x57, 0x09, 0x90, 0xA0, 0x4E, 0xF0, 0x22, 0x91, 0xF1, 0x74, 0x05, 0xF0, \r
-0x22, 0x90, 0xA0, 0x4B, 0x74, 0x02, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0xA3, 0xE0, 0x54, 0x01, 0x44, \r
-0x1E, 0xF0, 0xA3, 0x22, 0x12, 0x06, 0x89, 0x90, 0x9F, 0xB2, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x90, \r
-0xA0, 0x51, 0xF0, 0x60, 0x29, 0x90, 0xA0, 0x5F, 0xE0, 0x20, 0xE0, 0x22, 0xE4, 0xFD, 0x7F, 0x04, \r
-0x12, 0x5A, 0xA1, 0xB1, 0x3F, 0x30, 0xE0, 0x16, 0x12, 0x86, 0xD3, 0x20, 0xE0, 0x10, 0xB1, 0x48, \r
-0x54, 0x3F, 0x30, 0xE0, 0x04, 0x7F, 0x0D, 0x80, 0x02, 0x7F, 0x09, 0x12, 0x62, 0xC3, 0x22, 0x90, \r
-0xA0, 0x50, 0xE0, 0xFF, 0xC3, 0x13, 0x22, 0xF0, 0x90, 0xA0, 0x50, 0xE0, 0x13, 0x13, 0x22, 0x12, \r
-0x8F, 0xC9, 0x90, 0xA0, 0x56, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xB1, 0x71, 0x90, \r
-0x9F, 0xA3, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0xA0, 0x56, 0xE0, 0x54, 0x01, 0xFF, 0x02, 0x58, \r
-0xD3, 0x33, 0x33, 0x33, 0x54, 0xF8, 0xFF, 0x22, 0x12, 0x06, 0x89, 0x54, 0x01, 0xB1, 0x71, 0x90, \r
-0xA0, 0x84, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0x07, 0x65, \r
-0x30, 0xE0, 0x04, 0x74, 0x18, 0xF0, 0x22, 0xE4, 0xF0, 0x22, 0x90, 0xA2, 0x17, 0x12, 0x45, 0xBE, \r
-0xE4, 0xFE, 0x90, 0xFD, 0x50, 0xEF, 0xF0, 0x64, 0x30, 0x60, 0x1E, 0xA3, 0xED, 0xF0, 0xEE, 0xC3, \r
-0x9D, 0x50, 0x09, 0xB1, 0xEC, 0xB1, 0xE1, 0xEF, 0xF0, 0x0E, 0x80, 0xF2, 0xEE, 0xC3, 0x94, 0x06, \r
-0x50, 0x18, 0xB1, 0xE1, 0xE4, 0xF0, 0x0E, 0x80, 0xF3, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x0B, 0xB1, \r
-0xEC, 0x74, 0x51, 0xB1, 0xE3, 0xEF, 0xF0, 0x0E, 0x80, 0xEF, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, \r
-0x22, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0x22, 0x90, 0xA2, 0x17, 0x12, \r
-0x45, 0xB5, 0x8E, 0x82, 0x75, 0x83, 0x00, 0x12, 0x06, 0xA2, 0xFF, 0x22, 0x90, 0xA0, 0x87, 0xE0, \r
-0x44, 0x10, 0xF0, 0x7D, 0x01, 0x7F, 0x1B, 0x12, 0x6E, 0x00, 0x90, 0xA1, 0x01, 0xEF, 0xF0, 0x22, \r
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA0, 0x88, 0xE0, 0x44, 0x01, 0xF0, 0x7D, 0x01, \r
-0x7F, 0x28, 0xD1, 0x07, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x6F, 0x66, 0x90, 0xA2, 0x1A, 0xE0, \r
-0x70, 0x08, 0xD1, 0x7A, 0x90, 0xA2, 0x1A, 0x74, 0x01, 0xF0, 0x12, 0x6A, 0x73, 0x12, 0x06, 0x89, \r
-0xFF, 0xE4, 0x8F, 0x54, 0xF5, 0x53, 0xF5, 0x52, 0xF5, 0x51, 0x90, 0xA0, 0x98, 0x12, 0x45, 0x71, \r
-0xEC, 0x54, 0xC1, 0xFC, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xAF, 0x54, 0xAE, 0x53, \r
-0xAD, 0x52, 0xAC, 0x51, 0x78, 0x19, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, \r
-0x00, 0x12, 0x45, 0x53, 0x90, 0xA0, 0x94, 0x02, 0x08, 0x6D, 0x7F, 0x80, 0x7E, 0x08, 0x12, 0x37, \r
-0x4E, 0x90, 0xA0, 0x98, 0x02, 0x08, 0x6D, 0x12, 0x06, 0x89, 0x90, 0xA0, 0xA0, 0x12, 0x6A, 0x86, \r
-0x90, 0xA0, 0xA1, 0xF0, 0x22, 0x12, 0x8F, 0xC9, 0x90, 0xA0, 0xAD, 0xE0, 0x54, 0xFE, 0x4E, 0xFE, \r
-0xF0, 0xEF, 0x54, 0x06, 0xFF, 0xEE, 0x54, 0xF9, 0x4F, 0xFF, 0xF0, 0x12, 0x06, 0x89, 0xFE, 0x54, \r
-0x08, 0xFD, 0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0xA0, 0xAD, 0x12, 0x6F, 0xAC, 0xF1, 0x79, 0x4E, \r
-0x90, 0xA0, 0xAD, 0x12, 0x6A, 0x86, 0xFF, 0x54, 0x03, 0xFE, 0x90, 0xA0, 0xAE, 0xE0, 0x54, 0xFC, \r
-0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x04, 0xFF, 0xEE, 0x54, 0xFB, 0x4F, 0xFF, 0x12, 0x6A, 0x86, 0xFE, \r
-0x54, 0x30, 0xFD, 0xEF, 0x54, 0xCF, 0x4D, 0xFF, 0x90, 0xA0, 0xAE, 0x12, 0x6F, 0x3B, 0x4E, 0x12, \r
-0x56, 0xDD, 0x90, 0xA0, 0xAF, 0xF0, 0x12, 0x57, 0x09, 0x90, 0xA0, 0xB0, 0x12, 0x6D, 0x27, 0x90, \r
-0xA0, 0xB1, 0xF0, 0x90, 0xA0, 0xAF, 0xF1, 0x6C, 0xEF, 0x78, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, \r
-0xD8, 0xF9, 0xFF, 0x90, 0xA0, 0xB7, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA0, 0xB0, 0xF1, 0x6C, \r
-0xEF, 0x78, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0xA0, 0xB9, 0xEE, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0x90, 0xA0, 0xB1, 0xF1, 0x6C, 0x90, 0xA0, 0xBB, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, \r
-0x90, 0xA0, 0xAD, 0xE0, 0x30, 0xE0, 0x14, 0x90, 0xA0, 0xB2, 0x74, 0x01, 0xF0, 0xA3, 0xF0, 0xA3, \r
-0x12, 0x96, 0x82, 0x90, 0x07, 0x83, 0xE0, 0x44, 0x20, 0xF0, 0x22, 0xE4, 0x90, 0xA0, 0xB2, 0x12, \r
-0x58, 0xA4, 0xA3, 0xF0, 0x90, 0x07, 0x83, 0xE0, 0x54, 0xDF, 0xF0, 0x22, 0xE0, 0xFF, 0x7E, 0x00, \r
-0x7C, 0x01, 0x7D, 0x40, 0x02, 0x07, 0x03, 0xF0, 0xEE, 0x54, 0x20, 0xFE, 0xEF, 0x54, 0xDF, 0x22, \r
-0x12, 0x06, 0x89, 0x54, 0x01, 0x25, 0xE0, 0x12, 0x97, 0x75, 0x54, 0xFB, 0x4F, 0xF0, 0xE0, 0x13, \r
-0x13, 0x54, 0x3F, 0x30, 0xE0, 0x02, 0x80, 0x12, 0x90, 0xA0, 0xA7, 0xE0, 0x20, 0xE0, 0x02, 0xF1, \r
-0xA2, 0x22, 0x90, 0x07, 0x65, 0xE0, 0x54, 0xE7, 0xF0, 0x22, 0x90, 0x07, 0x65, 0xE0, 0x44, 0x18, \r
-0xF0, 0x22, 0x12, 0x06, 0x89, 0x54, 0x01, 0xFF, 0x90, 0xA0, 0xBF, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, \r
-0x30, 0xE0, 0x55, 0x90, 0x00, 0x40, 0xE0, 0x54, 0xBF, 0x44, 0xA0, 0xFD, 0x7F, 0x40, 0x12, 0x46, \r
-0xA0, 0x90, 0x00, 0x41, 0xE0, 0x44, 0x04, 0xFD, 0x7F, 0x41, 0x12, 0x46, 0xA0, 0x90, 0x00, 0x6A, \r
-0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x6A, 0x12, 0x46, 0xA0, 0x90, 0x07, 0x6E, 0x74, 0x55, 0xF0, 0xA3, \r
-0x74, 0x12, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xF2, 0x44, 0x02, 0xF0, 0x90, 0x06, 0xCC, 0xE0, \r
-0x44, 0x03, 0xF0, 0x90, 0x07, 0x65, 0xE0, 0x54, 0xF5, 0xF0, 0x90, 0x05, 0x23, 0xE0, 0x54, 0x7F, \r
-0xF0, 0xE4, 0xFD, 0x7F, 0x66, 0x12, 0x46, 0xA0, 0x22, 0xE4, 0x90, 0x9F, 0x87, 0xF0, 0xA3, 0xF0, \r
-0x90, 0x9E, 0xEF, 0xF0, 0xA3, 0xF0, 0x22, 0xE4, 0xFC, 0xED, 0x2C, 0x24, 0x00, 0x11, 0x78, 0xE4, \r
-0xF0, 0x0C, 0xEC, 0xB4, 0x18, 0xF3, 0x74, 0x00, 0x2D, 0x11, 0x78, 0xEF, 0xF0, 0xEE, 0x54, 0x3F, \r
-0xFF, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x02, 0x2D, \r
-0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x03, 0x2D, 0xF5, 0x82, \r
-0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x0B, 0x2D, 0xF5, 0x82, 0xE4, 0x34, \r
-0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0x22, \r
-0x90, 0xA1, 0xFC, 0xEF, 0xF0, 0xA3, 0x12, 0x45, 0xBE, 0x90, 0xA2, 0x1C, 0xE0, 0xFE, 0x04, 0xF0, \r
-0x90, 0x00, 0x01, 0xEE, 0x12, 0x06, 0xE1, 0x74, 0x00, 0x2F, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, \r
-0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0xA1, 0xFD, 0x12, 0x45, 0xB5, 0x8B, 0x40, 0x8A, \r
-0x41, 0x89, 0x42, 0x75, 0x43, 0x02, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x90, \r
-0xA1, 0xFC, 0xE0, 0x24, 0x02, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, \r
-0xC0, 0x01, 0xA3, 0x12, 0x45, 0xB5, 0xE9, 0x24, 0x02, 0xF9, 0xE4, 0x3A, 0x8B, 0x40, 0xF5, 0x41, \r
-0x89, 0x42, 0x90, 0xA1, 0xFD, 0x12, 0x97, 0x8E, 0xF5, 0x43, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, \r
-0x02, 0x35, 0x26, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFF, 0x90, 0x9F, 0x88, 0xE0, \r
-0xFE, 0x90, 0x9F, 0x87, 0xE0, 0xFD, 0xB5, 0x06, 0x04, 0x7E, 0x01, 0x80, 0x02, 0x7E, 0x00, 0xEE, \r
-0x64, 0x01, 0x60, 0x40, 0xED, 0x31, 0x59, 0xFA, 0x7B, 0x01, 0x12, 0x97, 0x00, 0x7F, 0x01, 0xEF, \r
-0x60, 0x32, 0x90, 0x9F, 0x87, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0x80, 0x02, 0x7F, 0x00, \r
-0xEF, 0x60, 0x05, 0xE4, 0x90, 0x9F, 0x87, 0xF0, 0x90, 0x9F, 0x88, 0xE0, 0xFF, 0x90, 0x9F, 0x87, \r
-0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x07, 0x90, 0x9E, 0x92, \r
-0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0xF1, 0xF9, \r
-0x74, 0x9E, 0x35, 0xF0, 0x22, 0x90, 0xA2, 0x1D, 0x12, 0x45, 0xBE, 0xE4, 0xFF, 0x90, 0xA2, 0x1D, \r
-0x12, 0x45, 0xB5, 0x8F, 0x82, 0x75, 0x83, 0x00, 0x12, 0x06, 0xA2, 0xFE, 0x74, 0xF0, 0x2F, 0x31, \r
-0x89, 0xEE, 0xF0, 0x0F, 0xEF, 0xB4, 0x10, 0xE5, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x02, 0xF5, 0x83, \r
-0x22, 0x90, 0x00, 0xF1, 0xE0, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFF, 0x22, 0x75, 0x15, 0x12, 0xE4, \r
-0xF5, 0x16, 0x75, 0x17, 0x07, 0x75, 0x18, 0x32, 0x90, 0x01, 0x30, 0xE5, 0x15, 0xF0, 0xA3, 0xE5, \r
-0x16, 0xF0, 0xA3, 0xE5, 0x17, 0xF0, 0xA3, 0xE5, 0x18, 0xF0, 0x22, 0x75, 0x1D, 0x06, 0x75, 0x1E, \r
-0x01, 0x75, 0x1F, 0x03, 0x75, 0x20, 0x62, 0x43, 0x20, 0x80, 0x43, 0x1F, 0x04, 0x90, 0x01, 0x38, \r
-0xE5, 0x1D, 0xF0, 0xA3, 0xE5, 0x1E, 0xF0, 0xA3, 0xE5, 0x1F, 0xF0, 0xA3, 0xE5, 0x20, 0xF0, 0x22, \r
-0x90, 0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x22, 0x7D, 0x02, 0x90, \r
-0x01, 0xC4, 0x74, 0xED, 0xF0, 0x74, 0xA1, 0xA3, 0xF0, 0x90, 0xA0, 0xC0, 0xE0, 0xFF, 0xED, 0xC3, \r
-0x9F, 0x50, 0x10, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE4, 0x03, 0x7F, 0x00, 0x22, \r
-0x0D, 0x80, 0xE6, 0x74, 0xED, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xA1, 0xA3, 0xF0, 0x7F, 0x01, \r
-0x22, 0xE4, 0x90, 0x9E, 0x92, 0x12, 0x58, 0xA4, 0xA3, 0xF0, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x1F, \r
-0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x15, 0xF5, 0x19, 0xA3, 0xE0, 0x55, \r
-0x16, 0xF5, 0x1A, 0xA3, 0xE0, 0x55, 0x17, 0xF5, 0x1B, 0xA3, 0xE0, 0x55, 0x18, 0xF5, 0x1C, 0x90, \r
-0x01, 0x34, 0xE5, 0x19, 0xF0, 0xA3, 0xE5, 0x1A, 0xF0, 0xA3, 0xE5, 0x1B, 0xF0, 0xA3, 0xE5, 0x1C, \r
-0xF0, 0x22, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x1D, 0xF5, 0x21, 0xA3, 0xE0, 0x55, 0x1E, 0xF5, 0x22, \r
-0xA3, 0xE0, 0x55, 0x1F, 0xF5, 0x23, 0xA3, 0xE0, 0x55, 0x20, 0xF5, 0x24, 0x90, 0x01, 0x3C, 0xE5, \r
-0x21, 0xF0, 0xA3, 0xE5, 0x22, 0xF0, 0xA3, 0xE5, 0x23, 0xF0, 0xA3, 0xE5, 0x24, 0xF0, 0x53, 0x91, \r
-0xDF, 0x22, 0x90, 0x01, 0xCF, 0xE0, 0x90, 0xA1, 0x1B, 0xF0, 0xE0, 0xFF, 0x30, 0xE0, 0x07, 0x90, \r
-0x01, 0xCF, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x30, 0xE5, 0x23, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xDF, \r
-0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0xE4, 0xF5, 0xA8, 0xF5, 0xE8, 0x12, 0x58, 0x7E, 0x90, \r
-0x00, 0x03, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x03, 0x12, 0x46, 0xA0, 0x80, 0xFE, 0x22, 0x90, 0x9F, \r
-0x9E, 0xE0, 0x30, 0xE0, 0x05, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x9F, 0x9E, 0xE0, 0xFF, \r
-0x30, 0xE0, 0x04, 0x51, 0xFD, 0x60, 0x15, 0x90, 0x9F, 0xA7, 0xE0, 0x70, 0x04, 0xEF, 0x30, 0xE0, \r
-0x0B, 0x90, 0x9F, 0xAA, 0xE0, 0x64, 0x02, 0x60, 0x03, 0x12, 0x86, 0xFF, 0x22, 0x90, 0x9F, 0xA2, \r
-0xE0, 0x64, 0x02, 0x22, 0x12, 0x6F, 0xA1, 0x30, 0xE0, 0x0B, 0x51, 0xFD, 0x60, 0x07, 0x7D, 0x01, \r
-0x7F, 0x02, 0x12, 0x5A, 0xA1, 0x51, 0xFD, 0x60, 0x02, 0x71, 0x1C, 0x22, 0x90, 0x9F, 0xA7, 0xE0, \r
-0x64, 0x02, 0x60, 0x10, 0x12, 0x69, 0x3A, 0x60, 0x0B, 0x71, 0x35, 0xEF, 0x70, 0x06, 0xFD, 0x7F, \r
-0x0C, 0x12, 0x5A, 0xA1, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, \r
-0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x71, 0x35, \r
-0xEF, 0x70, 0x03, 0x12, 0x5E, 0x6F, 0x22, 0x90, 0x9F, 0x9E, 0xE0, 0xFF, 0x30, 0xE0, 0x3E, 0x90, \r
-0x9F, 0xA2, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02, 0x7E, 0x01, 0x90, 0x9F, 0xA1, 0xE0, 0x7D, 0x00, \r
-0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70, 0x24, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x03, 0x02, \r
-0x82, 0xFC, 0x71, 0x04, 0x90, 0x9F, 0xA2, 0xE0, 0xB4, 0x08, 0x06, 0xE4, 0xFD, 0x7F, 0x0C, 0x80, \r
-0x09, 0x90, 0x9F, 0xA2, 0xE0, 0x70, 0x06, 0xFD, 0x7F, 0x04, 0x12, 0x5A, 0xA1, 0x22, 0x90, 0xA0, \r
-0x5F, 0xE0, 0x30, 0xE0, 0x17, 0x90, 0xA0, 0x71, 0xE0, 0x70, 0x5F, 0x90, 0x9F, 0xA9, 0xE0, 0xD3, \r
-0x94, 0x00, 0x50, 0x56, 0x90, 0xA0, 0x51, 0xE0, 0x60, 0x4D, 0x80, 0x4E, 0x71, 0x35, 0xEF, 0x64, \r
-0x01, 0x70, 0x47, 0x90, 0x9F, 0xAB, 0xE0, 0xFF, 0x54, 0x03, 0x70, 0x3E, 0x90, 0x9F, 0xA9, 0xE0, \r
-0xFE, 0xE4, 0xC3, 0x9E, 0x40, 0x34, 0xEF, 0x20, 0xE2, 0x30, 0x90, 0x9F, 0xAB, 0xE0, 0x20, 0xE4, \r
-0x29, 0x90, 0x9F, 0xA4, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x1E, 0x90, 0xA0, 0x51, 0xE0, \r
-0x70, 0x18, 0x90, 0x06, 0x62, 0xE0, 0x20, 0xE1, 0x11, 0x90, 0x06, 0x62, 0xE0, 0x30, 0xE0, 0x07, \r
-0xE0, 0x54, 0xFC, 0x64, 0x80, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xE4, 0xFF, 0x12, \r
-0x5F, 0x2F, 0xBF, 0x01, 0x13, 0x90, 0x9F, 0xA7, 0xE0, 0x60, 0x0D, 0x12, 0x69, 0x3A, 0x64, 0x02, \r
-0x60, 0x03, 0x02, 0x6F, 0xDF, 0x12, 0x5F, 0xB7, 0x22, 0x90, 0x9F, 0x9E, 0xE0, 0xFF, 0x30, 0xE0, \r
-0x40, 0x90, 0x9F, 0xA2, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02, 0x7E, 0x01, 0x90, 0x9F, 0xA1, 0xE0, \r
-0x7D, 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70, 0x26, 0xEF, 0xC3, 0x13, 0x30, 0xE0, \r
-0x03, 0x02, 0x82, 0xFC, 0x12, 0x8E, 0xDF, 0x90, 0x9F, 0xA2, 0xE0, 0xB4, 0x0C, 0x06, 0xE4, 0xFD, \r
-0x7F, 0x08, 0x80, 0x0A, 0x90, 0x9F, 0xA2, 0xE0, 0xB4, 0x04, 0x06, 0xE4, 0xFD, 0xFF, 0x12, 0x5A, \r
-0xA1, 0x22, 0x90, 0x9F, 0xA3, 0xE0, 0xFF, 0x12, 0x56, 0xE5, 0x30, 0xE0, 0x1B, 0xEF, 0x54, 0x7F, \r
-0xB1, 0x05, 0x30, 0xE1, 0x06, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x90, \r
-0x9F, 0xA7, 0xE0, 0x60, 0x03, 0x12, 0x68, 0x44, 0x90, 0xA0, 0x63, 0x12, 0x6F, 0xA4, 0x30, 0xE0, \r
-0x22, 0x90, 0xA0, 0x66, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x18, 0xEF, 0x54, 0xFD, 0xF0, 0x90, \r
-0x04, 0xE0, 0xE0, 0x90, 0xA0, 0x66, 0x30, 0xE1, 0x06, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x04, 0xE0, \r
-0x54, 0xFB, 0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x30, 0xE1, 0x02, 0x91, 0xCD, 0x22, 0x90, 0xA0, 0xC1, \r
-0xE0, 0x30, 0xE0, 0x22, 0x91, 0xF7, 0xE0, 0xFE, 0x30, 0xE0, 0x1B, 0x75, 0xF0, 0x0E, 0xEF, 0x91, \r
-0xFF, 0xEE, 0x54, 0xFE, 0xF0, 0x90, 0xA0, 0xC3, 0x74, 0x05, 0xF0, 0x12, 0x4A, 0x4C, 0x54, 0x07, \r
-0xFD, 0x7F, 0x01, 0x12, 0x49, 0xA5, 0x22, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0x75, 0xF0, 0x0E, 0x90, \r
-0xA0, 0xCC, 0x02, 0x45, 0xA9, 0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x90, 0x9F, 0xA4, 0x22, 0xE4, 0x90, \r
-0xA1, 0x2C, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7F, 0x83, 0x12, 0x47, 0xAF, 0x90, 0xA1, 0x2C, 0xEF, \r
-0xF0, 0x7F, 0x83, 0x12, 0x47, 0xAF, 0xAE, 0x07, 0x90, 0xA1, 0x2C, 0xE0, 0xFF, 0xB5, 0x06, 0x01, \r
-0x22, 0xC3, 0x90, 0xA1, 0x2E, 0xE0, 0x94, 0x64, 0x90, 0xA1, 0x2D, 0xE0, 0x94, 0x00, 0x40, 0x0D, \r
-0x90, 0x01, 0xC0, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0xA1, 0x2C, 0xE0, 0xFF, 0x22, 0x90, 0xA1, 0x2D, \r
-0x12, 0x96, 0x39, 0x80, 0xC2, 0x90, 0x01, 0xC4, 0x74, 0x55, 0xF0, 0x74, 0xA5, 0xA3, 0xF0, 0x7F, \r
-0x90, 0x12, 0x47, 0xAF, 0xEF, 0x20, 0xE0, 0xF7, 0x74, 0x55, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, \r
-0xA5, 0xA3, 0xF0, 0x22, 0xE4, 0xF5, 0x5E, 0xB1, 0xA8, 0xE0, 0xFE, 0xB4, 0x02, 0x08, 0xED, 0xC3, \r
-0x94, 0x11, 0x40, 0x21, 0x80, 0x17, 0xEE, 0xB4, 0x01, 0x08, 0xED, 0xC3, 0x94, 0x0A, 0x40, 0x15, \r
-0x80, 0x0B, 0xB1, 0xA8, 0xE0, 0x70, 0x0B, 0xED, 0xC3, 0x94, 0x03, 0x40, 0x08, 0x75, 0x5E, 0x01, \r
-0x80, 0x03, 0xE4, 0xF5, 0x5E, 0xAF, 0x5E, 0x22, 0x74, 0x91, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x95, \r
-0xF5, 0x83, 0x22, 0x8F, 0x52, 0x8D, 0x53, 0x8B, 0x54, 0x75, 0xF0, 0x04, 0xEF, 0x12, 0x51, 0x19, \r
-0xC4, 0x54, 0x03, 0x90, 0xA1, 0x06, 0xF0, 0x90, 0xA1, 0x04, 0x60, 0x09, 0x74, 0x32, 0xF0, 0xA3, \r
-0x74, 0x2F, 0xF0, 0x80, 0x07, 0x74, 0x11, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xE5, 0x53, 0xD3, 0x94, \r
-0x2D, 0x40, 0x0A, 0x75, 0xF0, 0x04, 0xE5, 0x52, 0x12, 0x57, 0xEF, 0x80, 0x20, 0xE5, 0x53, 0xD3, \r
-0x94, 0x1E, 0x40, 0x05, 0x90, 0xA1, 0x04, 0x80, 0x14, 0xE5, 0x53, 0xD3, 0x94, 0x14, 0x40, 0x05, \r
-0x90, 0xA1, 0x05, 0x80, 0x08, 0x75, 0xF0, 0x04, 0xE5, 0x52, 0x12, 0x56, 0xF1, 0xE0, 0xFD, 0x85, \r
-0x54, 0x6A, 0xE4, 0xFB, 0xAF, 0x52, 0x02, 0x77, 0x89, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
-0x90, 0xA1, 0x74, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0xA1, 0x73, 0xEF, 0xF0, 0xA3, 0xA3, 0xE0, \r
-0xFD, 0x12, 0x3E, 0x02, 0x90, 0xA1, 0x7E, 0x12, 0x08, 0x6D, 0x90, 0xA1, 0x76, 0x12, 0x45, 0x71, \r
-0x12, 0x08, 0x3A, 0x90, 0xA1, 0x7E, 0x12, 0x4F, 0xF0, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, \r
-0x07, 0x90, 0xA1, 0x76, 0x12, 0x45, 0x71, 0x90, 0xA1, 0x7A, 0x12, 0x4F, 0xF0, 0xD0, 0x03, 0xD0, \r
-0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x53, 0x90, 0xA1, 0x82, 0x12, 0x08, 0x6D, 0x90, 0xA1, \r
-0x74, 0xA3, 0xE0, 0xFD, 0xC0, 0x05, 0x90, 0xA1, 0x82, 0x12, 0x45, 0x71, 0x90, 0xAA, 0x96, 0x12, \r
-0x08, 0x6D, 0x90, 0xA1, 0x73, 0xE0, 0xFF, 0xD0, 0x05, 0x12, 0x3D, 0x09, 0xD0, 0xD0, 0x92, 0xAF, \r
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x08, 0xEF, 0xF0, 0xED, 0x64, 0x01, \r
-0x70, 0x2E, 0xEB, 0xB4, 0x01, 0x07, 0xE0, 0x24, 0x02, 0xF5, 0x72, 0x80, 0x08, 0x90, 0xA2, 0x08, \r
-0xE0, 0x24, 0xFE, 0xF5, 0x72, 0x90, 0xA1, 0x76, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0xAF, \r
-0x72, 0xF1, 0x02, 0xD1, 0xFA, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0xAF, 0x72, 0x80, 0x1F, \r
-0x90, 0xA1, 0x76, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0x90, 0xA2, 0x08, 0xE0, 0xFF, 0xF1, \r
-0x02, 0xD1, 0xFA, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0x90, 0xA2, 0x08, 0xE0, 0xFF, 0xF1, \r
-0x02, 0x7F, 0x01, 0xD1, 0x19, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFF, 0xD1, 0x19, 0x90, 0xA1, \r
-0x76, 0x22, 0xE4, 0xFC, 0xFD, 0xFE, 0x90, 0xA1, 0x7A, 0x12, 0x08, 0x6D, 0x7D, 0x18, 0x7C, 0x00, \r
-0x22, 0x7E, 0x00, 0x7F, 0x2D, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA0, 0x79, 0xC1, 0x02, 0x08, 0xAA, \r
-0xC3, 0xEF, 0x9D, 0xF5, 0x56, 0xC3, 0x94, 0x08, 0x50, 0x1C, 0xE4, 0xF5, 0x57, 0xF1, 0x87, 0xC0, \r
-0x83, 0xC0, 0x82, 0x90, 0xA1, 0x05, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x03, 0x12, 0x45, \r
-0xA9, 0xE5, 0x56, 0xF0, 0x80, 0x3E, 0xE5, 0x56, 0xC3, 0x94, 0x10, 0x50, 0x09, 0x75, 0x57, 0x01, \r
-0xE5, 0x56, 0x24, 0xF8, 0x80, 0x17, 0xE5, 0x56, 0xC3, 0x94, 0x18, 0x50, 0x09, 0x75, 0x57, 0x02, \r
-0xE5, 0x56, 0x24, 0xF0, 0x80, 0x07, 0x75, 0x57, 0x03, 0xE5, 0x56, 0x24, 0xE8, 0xFF, 0xF1, 0x87, \r
-0xC0, 0x83, 0xC0, 0x82, 0x90, 0xA1, 0x05, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x03, 0x12, \r
-0x45, 0xA9, 0xEF, 0xF0, 0xAF, 0x57, 0x22, 0x75, 0xF0, 0x0E, 0xEB, 0x90, 0xA0, 0xC8, 0x02, 0x45, \r
-0xA9, 0xAF, 0x54, 0xF1, 0x20, 0x90, 0xA1, 0x01, 0xEF, 0xF0, 0x22, 0x8F, 0x54, 0x8D, 0x55, 0xAE, \r
-0x03, 0x74, 0x1F, 0xC3, 0x95, 0x54, 0x40, 0x0B, 0x12, 0xA8, 0x01, 0xE4, 0xFD, 0xF1, 0x93, 0x24, \r
-0xD4, 0x80, 0x34, 0x74, 0x3F, 0xC3, 0x95, 0x54, 0x40, 0x0B, 0x12, 0xA8, 0x01, 0x7D, 0x20, 0xF1, \r
-0x91, 0x24, 0x88, 0x80, 0x22, 0x74, 0x5F, 0xC3, 0x95, 0x54, 0x40, 0x0B, 0x12, 0xA8, 0x01, 0x7D, \r
-0x40, 0xF1, 0x91, 0x24, 0xD0, 0x80, 0x10, 0x74, 0x7F, 0xC3, 0x95, 0x54, 0x40, 0x22, 0x12, 0xA8, \r
-0x01, 0x7D, 0x60, 0xF1, 0x91, 0x24, 0x84, 0xFD, 0xE4, 0x34, 0x04, 0xFC, 0x75, 0xF0, 0x0E, 0xE5, \r
-0x55, 0x12, 0xA8, 0x0C, 0x75, 0xF0, 0x03, 0xEE, 0x12, 0x45, 0xA9, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, \r
-0x22, 0x90, 0xA1, 0x05, 0xEE, 0xF0, 0xAB, 0x55, 0x22, 0x75, 0xF0, 0x0E, 0x90, 0xA0, 0xC6, 0x02, \r
-0x45, 0xA9, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x37, 0x4E, \r
-0x90, 0xA0, 0xF4, 0x12, 0x08, 0x6D, 0x7F, 0x00, 0x7E, 0x09, 0x12, 0x37, 0x4E, 0x90, 0xA0, 0xF8, \r
-0x12, 0x08, 0x6D, 0x90, 0xA0, 0xF4, 0x11, 0x7F, 0x60, 0x18, 0x90, 0xA0, 0xF4, 0x11, 0x76, 0x90, \r
-0xA0, 0xF4, 0x12, 0x08, 0x6D, 0x90, 0xA0, 0xF4, 0x12, 0x47, 0xCE, 0x7F, 0x00, 0x7E, 0x08, 0x12, \r
-0x38, 0x45, 0x90, 0xA0, 0xF8, 0x11, 0x7F, 0x60, 0x18, 0x90, 0xA0, 0xF8, 0x11, 0x76, 0x90, 0xA0, \r
-0xF8, 0x12, 0x08, 0x6D, 0x90, 0xA0, 0xF8, 0x12, 0x47, 0xCE, 0x7F, 0x00, 0x7E, 0x09, 0x12, 0x38, \r
-0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x45, 0x71, 0xEF, 0x54, 0xFE, 0xFF, 0xEC, 0x22, 0x12, \r
-0x45, 0x71, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0xEF, 0x22, 0x7E, 0x00, 0x7F, 0x01, \r
-0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x9F, 0x79, 0x9E, 0x12, 0x08, 0xAA, 0x90, 0x9F, 0x9E, 0xE0, 0x54, \r
-0xFD, 0xF0, 0xE4, 0x12, 0x58, 0xA5, 0xA3, 0x74, 0x0C, 0xF0, 0x22, 0x7D, 0x22, 0x7F, 0xFF, 0x12, \r
-0x49, 0x22, 0x12, 0x5F, 0xD6, 0x02, 0x85, 0x7F, 0x12, 0x5F, 0xD6, 0x7D, 0x23, 0x12, 0x63, 0x00, \r
-0x02, 0x67, 0xE3, 0xAE, 0x07, 0x12, 0x82, 0xF0, 0xBF, 0x01, 0x13, 0x90, 0x9F, 0x9E, 0x12, 0x4F, \r
-0xD3, 0x20, 0xE0, 0x0A, 0xAF, 0x06, 0x7D, 0x01, 0x12, 0x5A, 0xA1, 0x7F, 0x01, 0x22, 0x7F, 0x00, \r
-0x22, 0x31, 0x1F, 0x54, 0x1F, 0x30, 0xE0, 0x05, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x06, 0x92, \r
-0x74, 0x02, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0x31, 0x18, 0x90, 0xA0, 0x4D, 0xE0, 0xC3, 0x13, \r
-0x54, 0x7F, 0x90, 0xA1, 0xDA, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x48, 0x34, \r
-0x90, 0x9F, 0xA3, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0xF0, 0xE4, 0x90, 0xA1, 0xD9, 0xF0, 0x22, 0x90, \r
-0x9F, 0xA3, 0xE0, 0x13, 0x13, 0x13, 0x22, 0x90, 0x9F, 0xA3, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, \r
-0x9F, 0xB0, 0xF0, 0xA3, 0xF0, 0x90, 0x9F, 0xAB, 0xF0, 0x90, 0x9F, 0xA4, 0xE0, 0x54, 0xF7, 0xF0, \r
-0x54, 0xBF, 0x12, 0x5C, 0xC6, 0x7D, 0x10, 0x7F, 0x03, 0x02, 0x88, 0xAD, 0xEF, 0x24, 0xFE, 0x60, \r
-0x0B, 0x04, 0x70, 0x24, 0x90, 0x9F, 0xAD, 0x74, 0x02, 0xF0, 0x80, 0x13, 0xED, 0x70, 0x06, 0x90, \r
-0xA0, 0x4E, 0xE0, 0x80, 0x02, 0xED, 0x14, 0x90, 0x9F, 0xAD, 0xF0, 0x90, 0x9F, 0xAD, 0xE0, 0xA3, \r
-0xF0, 0x90, 0x9F, 0xA4, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0xA0, 0x52, 0xE0, 0xC3, 0x13, 0x20, \r
-0xE0, 0x13, 0x90, 0x02, 0x87, 0xE0, 0x70, 0x17, 0x90, 0x02, 0x96, 0xE0, 0x70, 0x11, 0x90, 0x02, \r
-0x86, 0xE0, 0x30, 0xE1, 0x0A, 0x90, 0xA0, 0xA7, 0xE0, 0x20, 0xE0, 0x03, 0x7F, 0x01, 0x22, 0x7F, \r
-0x00, 0x22, 0x7D, 0x2E, 0x7F, 0x6F, 0x12, 0x49, 0x22, 0x7D, 0x02, 0x7F, 0x01, 0x12, 0x5A, 0x1E, \r
-0x31, 0xB9, 0x90, 0x9F, 0xA2, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, \r
-0x22, 0x90, 0xA1, 0xE8, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x81, 0x00, 0xE0, 0x54, 0x0F, 0xFD, \r
-0xAC, 0x07, 0x51, 0x32, 0xE0, 0x44, 0x01, 0xF0, 0x51, 0x32, 0xE0, 0x54, 0xFB, 0xF0, 0xAC, 0x07, \r
-0x74, 0x12, 0x2C, 0x12, 0x4F, 0x9E, 0xE0, 0x44, 0xFA, 0xF0, 0x74, 0x11, 0x2C, 0x51, 0x3D, 0xE0, \r
-0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, \r
-0x44, 0x0E, 0xF0, 0x90, 0x04, 0xA7, 0xE4, 0xF0, 0x90, 0x04, 0xA6, 0xF0, 0x90, 0x04, 0xA5, 0x74, \r
-0xFF, 0xF0, 0x90, 0x04, 0xA4, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0x51, 0x2A, 0xE0, 0x54, 0xC0, \r
-0x4D, 0xFD, 0x74, 0x14, 0x2F, 0x51, 0x2A, 0xED, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, \r
-0x83, 0x22, 0x74, 0x0D, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82, 0xE4, \r
-0x34, 0xFC, 0xF5, 0x83, 0x22, 0x90, 0xA1, 0xE6, 0xE0, 0xFF, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
-0xD0, 0x90, 0xA2, 0x3B, 0xEF, 0xF0, 0x90, 0x9E, 0x9A, 0xE0, 0xFF, 0x90, 0x04, 0x1C, 0xE0, 0x6F, \r
-0x70, 0x3E, 0x90, 0x9F, 0xAA, 0xE0, 0x64, 0x0E, 0x70, 0x15, 0x90, 0xA2, 0x3B, 0xE0, 0x70, 0x30, \r
-0x90, 0x9F, 0xA3, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06, 0x04, 0x12, 0x5A, 0x16, 0x80, 0x1E, 0x90, \r
-0x9F, 0xAA, 0xE0, 0x64, 0x06, 0x70, 0x19, 0x90, 0xA2, 0x3B, 0xE0, 0x60, 0x13, 0x90, 0x9F, 0xA3, \r
-0xE0, 0x54, 0xBF, 0xF0, 0x51, 0xA5, 0xF0, 0x90, 0x9F, 0xAA, 0x74, 0x04, 0xF0, 0x12, 0x5C, 0x93, \r
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE0, 0x44, 0x80, 0x22, \r
-0x90, 0x9E, 0x9D, 0xE0, 0xFF, 0xE4, 0xFB, 0x7D, 0x01, 0x12, 0x4D, 0x59, 0x90, 0xA1, 0xED, 0xEE, \r
-0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA1, 0xEB, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x10, 0xAF, 0x01, \r
-0xC3, 0xC0, 0xD0, 0xAB, 0x07, 0x90, 0xA2, 0x3C, 0xED, 0xF0, 0xEC, 0xF9, 0xE0, 0xFF, 0xAE, 0x03, \r
-0x74, 0x2A, 0x2E, 0x51, 0xEF, 0x12, 0x4F, 0x8F, 0xE9, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF5, \r
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0xE4, 0xFE, 0xEF, 0xC3, 0x13, 0xFD, 0xEF, \r
-0x30, 0xE0, 0x02, 0x7E, 0x80, 0x90, 0xFD, 0x10, 0xED, 0xF0, 0xAF, 0x06, 0x22, 0xE5, 0x53, 0x25, \r
-0xE0, 0x24, 0xC3, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x22, 0x90, 0x9E, 0x9B, 0xE0, 0xFF, \r
-0x7B, 0x08, 0x7D, 0x01, 0x12, 0x4D, 0x59, 0x90, 0xA2, 0x11, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, \r
-0xFD, 0x90, 0xA2, 0x10, 0xE0, 0xFF, 0x22, 0x7F, 0xA3, 0x12, 0x47, 0xAF, 0xEF, 0x54, 0xF8, 0x44, \r
-0x05, 0xFD, 0x7F, 0xA3, 0x12, 0x46, 0xA0, 0x7F, 0xA0, 0x12, 0x47, 0xAF, 0xEF, 0x54, 0x0F, 0x64, \r
-0x04, 0x22, 0x90, 0xA2, 0x36, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0xEF, 0x54, 0x03, 0xFF, 0xE4, \r
-0x22, 0x74, 0x11, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x9B, 0xF5, 0x83, 0x22, 0x12, 0x64, 0xAA, \r
-0x12, 0x5F, 0x92, 0x90, 0x9F, 0xA3, 0xE0, 0x54, 0xF7, 0xF0, 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, \r
-0x22, 0x74, 0x91, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x9C, 0xF5, 0x83, 0x22, 0x7F, 0x2C, 0x7E, \r
-0x09, 0x12, 0x37, 0x4E, 0xEF, 0x54, 0xFC, 0xFF, 0x22, 0xFD, 0x7C, 0x00, 0x12, 0x07, 0x03, 0xEF, \r
-0x25, 0x55, 0xF5, 0x55, 0xEE, 0x35, 0x54, 0xF5, 0x54, 0x22, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x91, \r
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x98, 0xF5, 0x83, 0xE4, 0x22, 0xF0, 0x90, 0x9F, 0xDD, 0xE0, 0x24, \r
-0x04, 0x90, 0x9F, 0xBF, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0x22, 0xA4, 0xF5, 0x82, 0x85, 0xF0, 0x83, \r
-0x12, 0x07, 0xAB, 0xAE, 0xF0, 0xA8, 0x59, 0x08, 0x22, 0xFD, 0x75, 0xF0, 0x0E, 0x90, 0xA0, 0xC4, \r
-0x02, 0x45, 0xA9, 0x7E, 0x00, 0x7F, 0x04, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA0, 0x79, 0x52, 0x22, \r
-0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x22, 0x90, 0x9F, 0xA4, 0xE0, 0x44, 0x04, \r
-0xF0, 0x22, 0x12, 0x45, 0xA9, 0xE0, 0xFC, 0xA3, 0xE0, 0xF5, 0x82, 0x8C, 0x83, 0x22, 0x90, 0xA2, \r
-0x04, 0xE0, 0x24, 0x11, 0xF5, 0x82, 0xE4, 0x34, 0x9E, 0x22, 0x74, 0x01, 0x25, 0x51, 0xF5, 0x82, \r
-0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0x74, 0x91, 0x25, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x9A, 0xF5, \r
-0x83, 0x22, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xF0, 0x90, \r
-0x9F, 0xB3, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0xFF, 0xEE, 0x54, 0x3F, 0x90, 0x9F, 0xE2, \r
-0xF0, 0xA3, 0xEF, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x9B, 0xF5, 0x83, 0xE5, 0x5F, 0xF0, 0x22, 0x90, \r
-0x00, 0x08, 0x02, 0x07, 0xAB, 0xFE, 0x54, 0x03, 0xFF, 0xEE, 0x13, 0x13, 0x54, 0x07, 0x22, 0x90, \r
-0xA0, 0xC1, 0xE0, 0xFE, 0xC3, 0x13, 0x54, 0x07, 0x22, 0x90, 0xA2, 0x0F, 0xE0, 0xFF, 0x90, 0xA2, \r
-0x0D, 0xE0, 0x22, 0xD3, 0xE5, 0x57, 0x94, 0xE8, 0xE5, 0x56, 0x94, 0x03, 0x22, 0xFF, 0xEE, 0x55, \r
-0x83, 0xFE, 0xEF, 0x55, 0x82, 0x4E, 0x22, 0x13, 0x13, 0x13, 0x54, 0x1F, 0xFF, 0x75, 0xF0, 0x08, \r
-0x22, 0x7F, 0x16, 0x12, 0x47, 0xAF, 0xEF, 0x54, 0x0F, 0x22, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, \r
-0xF8, 0xF0, 0x22, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x33, 0x54, 0x80, 0x22, 0xE5, 0x6C, 0x75, 0xF0, \r
-0x08, 0xA4, 0x25, 0x6B, 0x22, 0xFF, 0x90, 0xA2, 0x06, 0xE0, 0xFB, 0xEF, 0x5B, 0x22, 0x90, 0xA0, \r
-0x65, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0x22, 0x90, 0x9F, 0x9E, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x22, \r
-0x90, 0xA1, 0xF7, 0xE0, 0x7F, 0x48, 0x7E, 0x09, 0x22, 0xFF, 0x12, 0x06, 0x89, 0x54, 0x0F, 0xFD, \r
-0x22, 0xC4, 0x54, 0x0F, 0x90, 0xA2, 0x0B, 0xF0, 0x22, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x6B, 0x08, \r
-0x22, 0xE5, 0x57, 0xAE, 0x56, 0xA8, 0x59, 0x08, 0x22, 0xE5, 0x54, 0xF0, 0xA3, 0xE5, 0x55, 0xF0, \r
-0x22, 0x54, 0x03, 0x4F, 0xFF, 0x75, 0xF0, 0x10, 0x22, 0x90, 0xA0, 0xAD, 0xE0, 0x13, 0x13, 0x13, \r
-0x22, 0x90, 0xA1, 0xC5, 0x12, 0x45, 0x71, 0xEF, 0x22, 0x12, 0x45, 0x71, 0xEF, 0x44, 0x80, 0xFF, \r
-0x22, 0x2F, 0xF8, 0xE6, 0xFE, 0xED, 0xF4, 0x5E, 0x22, 0x12, 0x47, 0xAF, 0xEF, 0x44, 0x40, 0xFD, \r
-0x22, 0x00, 0x36, 0x6E \r
+0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x46, 0xF0, 0x74, 0x78, 0xA3, 0xF0, 0x11, 0xBE, 0xE5, \r
+0x14, 0x30, 0xE7, 0x02, 0x11, 0x9C, 0x74, 0x46, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x78, 0xA3, \r
+0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, \r
+0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x7F, 0x01, 0x7E, 0x00, \r
+0x12, 0x3D, 0xC2, 0x7F, 0xF2, 0x12, 0x46, 0xAB, 0xEF, 0x20, 0xE6, 0x0A, 0x7F, 0x05, 0x11, 0xB7, \r
+0xFD, 0x7F, 0x05, 0x12, 0x46, 0x8D, 0x22, 0x12, 0x46, 0xAB, 0xEF, 0x44, 0x80, 0x22, 0x7F, 0x54, \r
+0x12, 0x46, 0xAB, 0xE5, 0x0D, 0x5F, 0xF5, 0x11, 0x7F, 0x55, 0x12, 0x46, 0xAB, 0xE5, 0x0E, 0x5F, \r
+0xF5, 0x12, 0x7F, 0x56, 0x12, 0x46, 0xAB, 0xE5, 0x0F, 0x5F, 0xF5, 0x13, 0x7F, 0x57, 0x12, 0x46, \r
+0xAB, 0xE5, 0x10, 0x5F, 0xF5, 0x14, 0xAD, 0x11, 0x7F, 0x54, 0x12, 0x46, 0x8D, 0xAD, 0x12, 0x7F, \r
+0x55, 0x12, 0x46, 0x8D, 0xAD, 0x13, 0x7F, 0x56, 0x12, 0x46, 0x8D, 0xAD, 0x14, 0x7F, 0x57, 0x12, \r
+0x46, 0x8D, 0x53, 0x91, 0xEF, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, \r
+0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, \r
+0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x06, 0xF0, 0x74, 0x79, 0xA3, 0xF0, 0x12, 0xB1, 0x86, \r
+0xE5, 0x19, 0x30, 0xE1, 0x02, 0x31, 0xC3, 0xE5, 0x19, 0x30, 0xE4, 0x02, 0xF1, 0xAE, 0xE5, 0x19, \r
+0x30, 0xE5, 0x03, 0x12, 0xB1, 0x00, 0xE5, 0x19, 0x30, 0xE6, 0x03, 0x12, 0xB1, 0xE3, 0xE5, 0x1B, \r
+0x30, 0xE0, 0x03, 0x12, 0xA7, 0x84, 0xE5, 0x1B, 0x30, 0xE1, 0x03, 0x12, 0x5C, 0x23, 0xE5, 0x1B, \r
+0x30, 0xE2, 0x03, 0x12, 0xA3, 0xB8, 0xE5, 0x1B, 0x30, 0xE3, 0x03, 0x12, 0xA7, 0x5A, 0xE5, 0x1B, \r
+0x30, 0xE4, 0x03, 0x12, 0xA7, 0x23, 0xE5, 0x1B, 0x30, 0xE5, 0x03, 0x12, 0xA1, 0x48, 0xE5, 0x1B, \r
+0x30, 0xE6, 0x03, 0x12, 0xA3, 0x81, 0xE5, 0x1C, 0x30, 0xE1, 0x03, 0x12, 0xA2, 0xEF, 0xE5, 0x1C, \r
+0x30, 0xE4, 0x02, 0xF1, 0xA4, 0xE5, 0x1C, 0x30, 0xE5, 0x03, 0x12, 0x77, 0xE2, 0x74, 0x06, 0x04, \r
+0x90, 0x01, 0xC4, 0xF0, 0x74, 0x79, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, \r
+0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, \r
+0xD0, 0xE0, 0x32, 0xE4, 0xFF, 0x90, 0xA1, 0xE9, 0xEF, 0xF0, 0x90, 0x04, 0x7E, 0xE0, 0xF5, 0x64, \r
+0xA3, 0xE0, 0xF5, 0x65, 0x65, 0x64, 0x60, 0x6B, 0x90, 0xA1, 0xEA, 0x74, 0x03, 0xF0, 0x90, 0xA1, \r
+0xF8, 0x74, 0x08, 0xF0, 0xE5, 0x65, 0x04, 0x54, 0x0F, 0xF5, 0x66, 0xE4, 0xF5, 0x63, 0xE5, 0x66, \r
+0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, 0xE5, 0x82, 0x25, \r
+0x63, 0x51, 0x55, 0xE0, 0xFF, 0x74, 0xEC, 0x25, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0xA1, 0xF5, 0x83, \r
+0xEF, 0xF0, 0x05, 0x63, 0xE5, 0x63, 0xB4, 0x08, 0xD5, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0xEA, 0x12, \r
+0x5B, 0x9B, 0xE5, 0x65, 0x04, 0x54, 0x0F, 0xF5, 0x65, 0xB4, 0x0F, 0x03, 0xE4, 0xF5, 0x65, 0x90, \r
+0x04, 0x7F, 0xE5, 0x65, 0xF0, 0x90, 0xA1, 0xE9, 0xE0, 0x7F, 0x04, 0x70, 0x03, 0x02, 0x5A, 0xD4, \r
+0x12, 0x97, 0xE1, 0x22, 0xFF, 0x90, 0xA2, 0xD8, 0xE0, 0x75, 0xF0, 0x08, 0x90, 0x89, 0x00, 0x12, \r
+0x45, 0x8A, 0xE5, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xD8, 0xEF, 0xF0, 0x75, 0xF0, 0x04, 0x12, 0x4F, 0x86, 0x54, \r
+0x1F, 0xFB, 0x60, 0x12, 0x64, 0x02, 0x60, 0x0E, 0xEB, 0x64, 0x04, 0x60, 0x09, 0xEB, 0x64, 0x09, \r
+0x60, 0x04, 0xEB, 0xB4, 0x0C, 0x09, 0xD1, 0x77, 0xF5, 0x83, 0x74, 0x02, 0xF0, 0x80, 0x07, 0xD1, \r
+0x77, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xE4, 0xF5, 0x6B, 0x90, 0xA2, 0xD8, 0xE0, 0xFD, 0x91, 0x5D, \r
+0x25, 0x6B, 0x51, 0x55, 0xE0, 0xFE, 0xEB, 0x75, 0xF0, 0x07, 0xA4, 0x24, 0xFE, 0xF5, 0x82, 0xE4, \r
+0x34, 0x40, 0xF5, 0x83, 0xE5, 0x82, 0x25, 0x6B, 0x51, 0x55, 0xE4, 0x93, 0xFC, 0xEE, 0x5C, 0x90, \r
+0xA2, 0xDB, 0xF0, 0x75, 0xF0, 0x04, 0xED, 0x12, 0x4E, 0x2E, 0x54, 0x03, 0xFF, 0xBF, 0x02, 0x0B, \r
+0xE5, 0x6B, 0x70, 0x07, 0x90, 0xA2, 0xDB, 0xE0, 0x54, 0xF0, 0xF0, 0x90, 0xA2, 0xDB, 0xE0, 0xFF, \r
+0x91, 0x59, 0x25, 0x6B, 0x51, 0x55, 0xEF, 0xF0, 0x05, 0x6B, 0xE5, 0x6B, 0x64, 0x07, 0x70, 0xA9, \r
+0x90, 0xA2, 0xD8, 0xE0, 0x75, 0xF0, 0x04, 0x12, 0x4E, 0x2E, 0xFF, 0xC4, 0x54, 0x03, 0xFD, 0xE4, \r
+0x90, 0xA2, 0xD9, 0xF0, 0x75, 0x6C, 0x06, 0xE5, 0x6C, 0xB4, 0x06, 0x07, 0x51, 0x44, 0xE0, 0x54, \r
+0x0F, 0x80, 0x07, 0x91, 0x59, 0x25, 0x6C, 0x51, 0x55, 0xE0, 0x90, 0xA2, 0xDA, 0xF0, 0x90, 0xA2, \r
+0xDA, 0xE0, 0x60, 0x30, 0x75, 0x6B, 0x07, 0xD1, 0x5D, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, \r
+0xD8, 0xF9, 0xD1, 0x6E, 0x60, 0x15, 0xD1, 0x65, 0x90, 0xA2, 0xD9, 0xF0, 0xED, 0x60, 0x22, 0xE0, \r
+0xD3, 0x94, 0x0B, 0x40, 0x1C, 0xE0, 0x24, 0x20, 0xF0, 0x80, 0x16, 0x15, 0x6B, 0xE5, 0x6B, 0xC3, \r
+0x94, 0x00, 0x50, 0xD3, 0xE5, 0x6C, 0x60, 0x09, 0x15, 0x6C, 0xE5, 0x6C, 0xC3, 0x94, 0x00, 0x50, \r
+0xA6, 0xE4, 0xFC, 0xF5, 0x6C, 0xE5, 0x6C, 0xB4, 0x06, 0x07, 0x51, 0x44, 0xE0, 0x54, 0x0F, 0x80, \r
+0x07, 0x91, 0x59, 0x25, 0x6C, 0x51, 0x55, 0xE0, 0x90, 0xA2, 0xDA, 0xF0, 0x90, 0xA2, 0xDA, 0xE0, \r
+0x60, 0x2B, 0xE4, 0xF5, 0x6B, 0xD1, 0x5D, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, \r
+0xD1, 0x6E, 0x60, 0x12, 0xD1, 0x65, 0xFC, 0xED, 0x60, 0x1B, 0xEC, 0xD3, 0x94, 0x0B, 0x40, 0x15, \r
+0x74, 0x20, 0x2C, 0xFC, 0x80, 0x0F, 0x05, 0x6B, 0xE5, 0x6B, 0xB4, 0x08, 0xD8, 0x05, 0x6C, 0xE5, \r
+0x6C, 0x64, 0x07, 0x70, 0xB0, 0x90, 0xA2, 0xD9, 0xE0, 0xFF, 0x90, 0xA2, 0xD8, 0xE0, 0xFE, 0x75, \r
+0xF0, 0x04, 0x12, 0x4F, 0xFD, 0xEF, 0xF0, 0x75, 0xF0, 0x04, 0xEE, 0x12, 0x95, 0x59, 0xEC, 0xF0, \r
+0x75, 0xF0, 0x10, 0xEE, 0x12, 0x75, 0x8E, 0xE0, 0xFE, 0x54, 0x7F, 0xF5, 0x6D, 0xEE, 0x54, 0x80, \r
+0xFE, 0xE5, 0x6D, 0xD3, 0x9F, 0x40, 0x09, 0x90, 0xA2, 0xD9, 0xE0, 0x4E, 0xF5, 0x6D, 0x80, 0x0C, \r
+0xE5, 0x6D, 0xC3, 0x9C, 0x50, 0x06, 0xAF, 0x06, 0xEC, 0x4F, 0xF5, 0x6D, 0x90, 0xA2, 0xD8, 0xE0, \r
+0xFF, 0x24, 0x91, 0x12, 0xBB, 0x51, 0xE5, 0x6D, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x12, 0x4E, 0x2E, \r
+0xF1, 0xD9, 0x90, 0xA2, 0xD8, 0xE0, 0xFF, 0xE4, 0xFB, 0xAD, 0x6D, 0x12, 0x76, 0x59, 0x90, 0xA2, \r
+0xD8, 0xE0, 0xFF, 0x75, 0xF0, 0x10, 0xF1, 0x94, 0xE4, 0xF0, 0x90, 0xA2, 0xD9, 0xE0, 0xFE, 0xC3, \r
+0x94, 0x0C, 0x40, 0x07, 0x91, 0x69, 0x74, 0x02, 0xF0, 0x80, 0x19, 0xEE, 0xC3, 0x94, 0x04, 0x90, \r
+0xA2, 0xD8, 0xE0, 0x40, 0x09, 0x24, 0x91, 0x91, 0x6C, 0x74, 0x01, 0xF0, 0x80, 0x06, 0x24, 0x91, \r
+0x91, 0x6C, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA2, 0xD8, 0xE0, 0x75, 0xF0, 0x08, \r
+0x90, 0x89, 0x00, 0x12, 0x45, 0x8A, 0xE5, 0x82, 0x22, 0x74, 0x91, 0x2F, 0xF5, 0x82, 0xE4, 0x34, \r
+0x95, 0xF5, 0x83, 0x22, 0x12, 0x06, 0x89, 0x54, 0x7F, 0xF5, 0x51, 0x12, 0x4F, 0x8F, 0xFF, 0x54, \r
+0x1F, 0xF5, 0x53, 0xEF, 0x54, 0x80, 0x12, 0x4F, 0xD2, 0xF5, 0x52, 0x12, 0x4F, 0xA5, 0xFF, 0x54, \r
+0x03, 0xF5, 0x54, 0xEF, 0x54, 0x30, 0xC4, 0x54, 0x0F, 0xF5, 0x57, 0x12, 0x4F, 0xA5, 0xFF, 0x54, \r
+0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0xF5, 0x55, 0xEF, 0x54, 0x80, 0x12, 0x4F, 0xD2, 0xF5, 0x56, \r
+0x12, 0x4F, 0xA5, 0xFF, 0x54, 0x08, 0xFE, 0x13, 0x13, 0x13, 0x54, 0x1F, 0xF5, 0x59, 0xEF, 0x54, \r
+0x04, 0x13, 0x13, 0x54, 0x3F, 0xF5, 0x5A, 0xE5, 0x56, 0x12, 0xBC, 0x58, 0x12, 0x4E, 0x28, 0x54, \r
+0x7F, 0x4F, 0xF0, 0xE5, 0x55, 0x12, 0x91, 0x21, 0x12, 0x4E, 0x28, 0x54, 0xBF, 0x4F, 0xF0, 0xE5, \r
+0x59, 0x70, 0x67, 0xE5, 0x53, 0x54, 0x1F, 0x12, 0x4F, 0x80, 0x54, 0xE0, 0x4F, 0xF0, 0xE5, 0x54, \r
+0x54, 0x03, 0x12, 0x4E, 0x28, 0x54, 0xFC, 0x4F, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x12, 0x4E, \r
+0x28, 0x54, 0xF3, 0x4F, 0xF0, 0xE5, 0x52, 0x54, 0x01, 0xC4, 0x33, 0x54, 0xE0, 0x12, 0x4F, 0x80, \r
+0x54, 0xDF, 0x4F, 0xF0, 0xE5, 0x57, 0x54, 0x03, 0xC4, 0x54, 0xF0, 0x12, 0x4E, 0x28, 0x54, 0xCF, \r
+0x4F, 0xF0, 0xE4, 0xF5, 0x58, 0x85, 0x58, 0x82, 0x75, 0x83, 0x00, 0xA3, 0xA3, 0xA3, 0x12, 0x06, \r
+0xA2, 0xFF, 0x75, 0xF0, 0x08, 0xE5, 0x51, 0x91, 0x60, 0x25, 0x58, 0x51, 0x55, 0xEF, 0xF0, 0x05, \r
+0x58, 0xE5, 0x58, 0xB4, 0x04, 0xDF, 0xAF, 0x51, 0x51, 0x5D, 0x22, 0x90, 0x01, 0xCC, 0xE0, 0x54, \r
+0x0F, 0x90, 0xA3, 0x03, 0xF0, 0x90, 0xA3, 0x03, 0xE0, 0xFD, 0x70, 0x02, 0xC1, 0x53, 0x90, 0x9F, \r
+0x20, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x9F, \r
+0x21, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, \r
+0xC1, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0xA2, 0xF3, 0x12, 0x93, 0x29, 0x80, 0x05, 0xC3, 0x33, \r
+0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0xC1, 0x36, 0xE4, 0x90, 0xA3, 0x04, \r
+0xF0, 0x90, 0xA3, 0x04, 0xE0, 0xF9, 0xC3, 0x94, 0x04, 0x50, 0x40, 0xD1, 0x55, 0xA4, 0xFF, 0xE9, \r
+0xFD, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xD0, 0xD1, 0x83, 0x12, 0xAF, 0xAD, \r
+0xE5, 0x82, 0x29, 0x51, 0x55, 0xEF, 0xD1, 0x54, 0xA4, 0x2D, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, \r
+0xF0, 0xD1, 0x83, 0x75, 0xF0, 0x08, 0x90, 0x9E, 0xD4, 0x12, 0x45, 0x8A, 0xE5, 0x82, 0x29, 0x51, \r
+0x55, 0xEF, 0xF0, 0x90, 0xA3, 0x04, 0xE0, 0x04, 0xF0, 0x80, 0xB6, 0x90, 0xA3, 0x03, 0xE0, 0xFF, \r
+0x90, 0xA2, 0xF3, 0x12, 0xBB, 0x37, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0xA3, \r
+0x03, 0xF0, 0x90, 0xA2, 0xF3, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, \r
+0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0xA2, 0xF3, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, \r
+0x90, 0x9F, 0x21, 0xF1, 0xE0, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x70, 0x02, 0xA1, 0x55, 0xE4, \r
+0x90, 0x9F, 0x21, 0xF0, 0xA1, 0x55, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0xA2, 0xF3, \r
+0xE0, 0x44, 0x80, 0x90, 0x00, 0x8A, 0xD1, 0x54, 0x90, 0x01, 0xD0, 0x12, 0x45, 0x8A, 0xE0, 0x90, \r
+0x01, 0xC3, 0xF0, 0x22, 0xF0, 0x90, 0xA2, 0xF3, 0xE0, 0x75, 0xF0, 0x04, 0x22, 0x74, 0x01, 0x7E, \r
+0x00, 0xA8, 0x6B, 0x08, 0x22, 0xE5, 0x6C, 0x75, 0xF0, 0x08, 0xA4, 0x25, 0x6B, 0x22, 0xFF, 0x90, \r
+0xA2, 0xDA, 0xE0, 0xFB, 0xEF, 0x5B, 0x22, 0x90, 0xA2, 0xD8, 0xE0, 0x24, 0x11, 0xF5, 0x82, 0xE4, \r
+0x34, 0x9E, 0x22, 0x2F, 0xF5, 0x82, 0x74, 0x01, 0x3E, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x9F, 0x21, \r
+0xE0, 0x22, 0x90, 0xA1, 0x3C, 0xEF, 0xF0, 0x90, 0x9F, 0xCD, 0xE0, 0x90, 0xA1, 0xBE, 0xF0, 0xE4, \r
+0x90, 0xA1, 0x3D, 0xF0, 0x90, 0xA1, 0xBE, 0xE0, 0xFE, 0x90, 0xA1, 0x3D, 0xE0, 0xFF, 0xC3, 0x9E, \r
+0x50, 0x2C, 0xE0, 0xFE, 0xF1, 0x9A, 0xE4, 0xF0, 0x75, 0xF0, 0x10, 0xEE, 0xF1, 0x94, 0xE0, 0x30, \r
+0xE7, 0x09, 0x74, 0x81, 0x2F, 0xF1, 0xBC, 0xE4, 0xF0, 0x80, 0x0B, 0xF1, 0xB5, 0x90, 0xA1, 0x3D, \r
+0xE0, 0xF1, 0x9A, 0x74, 0x01, 0xF0, 0x90, 0xA1, 0x3D, 0xE0, 0x04, 0xF0, 0x80, 0xC6, 0x7F, 0x0C, \r
+0x7E, 0x00, 0x12, 0x3E, 0x50, 0xE4, 0x90, 0xA1, 0x3D, 0xF0, 0x90, 0xA1, 0xBE, 0xE0, 0xFF, 0x90, \r
+0xA1, 0x3D, 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x02, 0xE1, 0x8F, 0x74, 0x3E, 0x2E, 0xF1, 0x9C, 0xE0, \r
+0x70, 0x02, 0xE1, 0x87, 0x75, 0xF0, 0x10, 0xEE, 0x90, 0x81, 0x06, 0xF1, 0xC4, 0xEE, 0x90, 0x81, \r
+0x07, 0xF1, 0xCD, 0xFC, 0x12, 0xBB, 0x41, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x10, 0xEC, \r
+0x90, 0x81, 0x0A, 0xF1, 0xC4, 0xEC, 0x90, 0x81, 0x0B, 0xF1, 0xCD, 0x75, 0xF0, 0x0A, 0xF1, 0xA8, \r
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7F, 0x01, 0x90, 0xA1, 0x3D, 0xE0, 0xFE, 0x75, 0xF0, 0x10, 0x90, \r
+0x81, 0x0B, 0x51, 0x4F, 0xE0, 0xFD, 0x75, 0xF0, 0x0A, 0xEE, 0xF1, 0xA8, 0x75, 0xF0, 0x02, 0xEF, \r
+0x12, 0x4F, 0x95, 0xED, 0xF0, 0x0F, 0xEF, 0xB4, 0x05, 0xDD, 0x90, 0xA1, 0x3D, 0xE0, 0xFF, 0x75, \r
+0xF0, 0x10, 0x90, 0x81, 0x09, 0x12, 0x45, 0x8A, 0xE0, 0xFE, 0x12, 0xB4, 0xF1, 0xEE, 0xF0, 0x90, \r
+0xA1, 0x3D, 0xE0, 0xFF, 0x90, 0xA1, 0x3C, 0xE0, 0xFD, 0x12, 0xB4, 0x89, 0x90, 0xA1, 0x3D, 0xE0, \r
+0x24, 0x81, 0xF1, 0xBC, 0x74, 0x01, 0xF0, 0x90, 0xA1, 0x3D, 0xE0, 0x04, 0xF0, 0xC1, 0xEA, 0x22, \r
+0x75, 0xF0, 0x10, 0xEF, 0x90, 0x81, 0x03, 0x02, 0x45, 0x8A, 0x24, 0x3E, 0xF5, 0x82, 0xE4, 0x34, \r
+0xA1, 0xF5, 0x83, 0x22, 0xE4, 0xFF, 0xC1, 0x92, 0x90, 0x8D, 0x01, 0x02, 0x45, 0x8A, 0xB1, 0x4B, \r
+0x7F, 0x02, 0x02, 0x5A, 0xD4, 0xF1, 0x90, 0xE0, 0x44, 0x40, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, \r
+0x93, 0xF5, 0x83, 0x22, 0x12, 0x45, 0x8A, 0xE0, 0xFD, 0x75, 0xF0, 0x10, 0x22, 0x12, 0x45, 0x8A, \r
+0xE0, 0xFE, 0xED, 0xFF, 0x90, 0xA1, 0x3D, 0xE0, 0x22, 0x13, 0x13, 0x54, 0x03, 0xF5, 0x6A, 0x22, \r
+0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, \r
+0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, \r
+0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0xE7, 0xF0, 0x74, 0x7F, 0xA3, 0xF0, 0x12, 0xB1, \r
+0xB3, 0xE5, 0x21, 0x30, 0xE1, 0x03, 0x12, 0xB1, 0xF0, 0xE5, 0x21, 0x30, 0xE2, 0x03, 0x12, 0xA3, \r
+0xDA, 0xE5, 0x21, 0x30, 0xE5, 0x02, 0x11, 0xA5, 0xE5, 0x22, 0x30, 0xE0, 0x03, 0x12, 0xAB, 0x8C, \r
+0xE5, 0x23, 0x30, 0xE1, 0x03, 0x12, 0xA4, 0x5E, 0xE5, 0x23, 0x30, 0xE0, 0x03, 0x12, 0xA3, 0x0E, \r
+0xE5, 0x23, 0x30, 0xE4, 0x02, 0xF1, 0xD7, 0xE5, 0x23, 0x30, 0xE2, 0x0A, 0x12, 0xB1, 0xFF, 0x90, \r
+0x07, 0x8F, 0xE0, 0x44, 0x10, 0xF0, 0xE5, 0x24, 0x30, 0xE1, 0x05, 0x7F, 0x04, 0x12, 0x5A, 0xD4, \r
+0xE5, 0x24, 0x30, 0xE4, 0x02, 0x11, 0xBD, 0xE5, 0x24, 0x30, 0xE5, 0x03, 0x12, 0x6B, 0x43, 0xE5, \r
+0x24, 0x30, 0xE6, 0x03, 0x12, 0x6B, 0x74, 0xE5, 0x24, 0x30, 0xE7, 0x03, 0x12, 0x8B, 0xCD, 0x74, \r
+0xE7, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x7F, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, \r
+0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, \r
+0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0xA0, 0xAD, 0xE0, 0x30, 0xE0, 0x10, 0x12, 0x66, 0x09, 0xE4, \r
+0x90, 0xA0, 0xB0, 0x12, 0x51, 0x82, 0x12, 0xBA, 0xCC, 0x12, 0x50, 0x13, 0x22, 0x12, 0x8E, 0x33, \r
+0x12, 0x64, 0x80, 0x11, 0xE3, 0x90, 0xA0, 0x3D, 0xE0, 0x30, 0xE0, 0x16, 0x12, 0xBC, 0x4F, 0x90, \r
+0xA0, 0x40, 0xE0, 0x60, 0x05, 0x14, 0xF0, 0x02, 0xB9, 0xD2, 0x12, 0x9E, 0xC1, 0xE4, 0xFF, 0x12, \r
+0x64, 0xC9, 0x22, 0x90, 0xA0, 0x4A, 0xE0, 0x30, 0xE0, 0x04, 0xE4, 0xFF, 0x11, 0xEF, 0x22, 0xD3, \r
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xBC, 0xEF, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0xE4, \r
+0xFF, 0x91, 0xC3, 0x30, 0xE0, 0x03, 0x12, 0x66, 0xB8, 0x90, 0xA0, 0x4E, 0xE0, 0x30, 0xE0, 0x04, \r
+0x7F, 0x01, 0x80, 0x37, 0x90, 0xA0, 0x4A, 0x12, 0x5F, 0xDF, 0x30, 0xE0, 0x04, 0x7F, 0x0D, 0x80, \r
+0x2A, 0x90, 0xA0, 0x4D, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x10, 0xEF, 0x13, 0x13, 0x54, \r
+0x3F, 0x30, 0xE0, 0x04, 0x7F, 0x09, 0x80, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0xA0, 0x4D, 0xE0, \r
+0xC3, 0x13, 0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x02, 0x7F, 0x09, 0x12, 0x88, 0x32, 0x90, 0xA2, \r
+0xBC, 0xE0, 0x64, 0x03, 0x70, 0x67, 0x12, 0x5F, 0xDC, 0x30, 0xE0, 0x5C, 0x90, 0xA0, 0x54, 0xE0, \r
+0xFF, 0x90, 0xA0, 0x5F, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x34, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0xFF, \r
+0x90, 0xA0, 0x56, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0xFF, 0x24, 0x03, 0xFD, 0xE4, 0x33, 0xFC, 0x90, \r
+0xA0, 0x4C, 0xE0, 0xFE, 0x12, 0xAB, 0x82, 0x40, 0x08, 0xEE, 0x9F, 0x90, 0xA2, 0xBF, 0xF0, 0x80, \r
+0x06, 0x90, 0xA2, 0xBF, 0x74, 0x03, 0xF0, 0x90, 0xA2, 0xBF, 0x51, 0xCA, 0x80, 0x13, 0x90, 0xA0, \r
+0x57, 0xE0, 0xFF, 0x51, 0xBB, 0x90, 0xA0, 0x52, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0xA0, 0x5D, 0x91, \r
+0xB4, 0xE4, 0x90, 0xA0, 0x5F, 0xF0, 0x80, 0x05, 0x90, 0xA0, 0x4C, 0x51, 0xCA, 0x90, 0xA0, 0x4A, \r
+0x12, 0x4F, 0xD1, 0x30, 0xE0, 0x07, 0xE4, 0x90, 0xA2, 0xBE, 0xF0, 0x80, 0x06, 0x90, 0xA2, 0xBE, \r
+0x74, 0x01, 0xF0, 0x12, 0xBC, 0xB2, 0x20, 0xE0, 0x13, 0x90, 0xA0, 0x8C, 0xE0, 0x60, 0x07, 0xE4, \r
+0x90, 0xA2, 0xBD, 0xF0, 0x80, 0x06, 0x90, 0xA2, 0xBD, 0x74, 0x01, 0xF0, 0x90, 0xA2, 0xBD, 0xE0, \r
+0xFF, 0xA3, 0xE0, 0xFD, 0x12, 0x48, 0x62, 0x90, 0xA0, 0x5C, 0x74, 0x01, 0xF0, 0x12, 0x8D, 0xE3, \r
+0x30, 0xE0, 0x0D, 0x90, 0xA2, 0xBC, 0xE0, 0x70, 0x3F, 0xFD, 0xFF, 0x12, 0x54, 0xC6, 0x80, 0x38, \r
+0x90, 0xA0, 0x4A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0xA0, 0x50, 0xE0, 0x44, 0x20, \r
+0xF0, 0x90, 0xA0, 0x3C, 0xE0, 0x60, 0x04, 0x7D, 0x01, 0x80, 0x18, 0x12, 0x66, 0x3A, 0x7D, 0x01, \r
+0x7F, 0x0C, 0x80, 0x11, 0x90, 0xA2, 0xBC, 0xE0, 0xB4, 0x03, 0x0D, 0x90, 0x9F, 0xD9, 0xE0, 0x60, \r
+0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x62, 0x5A, 0x90, 0xA0, 0x3C, 0xE0, 0x60, 0x18, 0x90, 0xA2, \r
+0xBC, 0xE0, 0x70, 0x04, 0x7D, 0x04, 0x80, 0x0A, 0x90, 0xA2, 0xBC, 0xE0, 0x64, 0x03, 0x70, 0x30, \r
+0x7D, 0x0B, 0x7F, 0x6F, 0x80, 0x27, 0x90, 0xA2, 0xBC, 0xE0, 0x70, 0x04, 0xFD, 0xFF, 0x80, 0x1D, \r
+0x90, 0xA2, 0xBC, 0xE0, 0xB4, 0x03, 0x19, 0x12, 0xA1, 0x0F, 0x54, 0x07, 0x20, 0xE0, 0x0B, 0xEF, \r
+0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0xA1, 0x17, 0xE4, 0xFD, 0xFF, 0x12, 0x54, 0xC6, \r
+0x12, 0x4F, 0xCE, 0x30, 0xE0, 0x05, 0x7F, 0x01, 0x12, 0x8F, 0xDD, 0x90, 0xA0, 0x4E, 0xE0, 0xC3, \r
+0x13, 0x30, 0xE0, 0x0E, 0x90, 0x06, 0xCD, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x06, 0xCF, 0xE0, 0x44, \r
+0x10, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, 0xC3, 0x9F, 0xFF, 0x12, 0x57, 0xD5, 0xEF, 0xF0, \r
+0xE4, 0xFB, 0xFD, 0x7F, 0x6C, 0x7E, 0x01, 0x02, 0x50, 0x1B, 0xE0, 0xFF, 0x51, 0xBB, 0x90, 0xA0, \r
+0x5D, 0xE0, 0x04, 0xF0, 0x22, 0x12, 0x5F, 0xDC, 0x20, 0xE0, 0x02, 0x81, 0xAE, 0x90, 0xA0, 0x52, \r
+0xE0, 0x64, 0x01, 0x70, 0x2E, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x04, 0xE3, 0xE0, \r
+0x60, 0x1C, 0x91, 0xB5, 0x90, 0xA0, 0x5F, 0xE0, 0x04, 0xF0, 0x90, 0xA0, 0x56, 0xE0, 0x75, 0xF0, \r
+0x03, 0x84, 0xFF, 0x90, 0xA0, 0x5F, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0x81, 0x99, 0xF1, 0xCE, \r
+0x04, 0xF0, 0x22, 0x90, 0xA0, 0x52, 0xE0, 0x64, 0x04, 0x70, 0x2B, 0x90, 0x06, 0x92, 0xE0, 0x20, \r
+0xE2, 0x06, 0x90, 0x04, 0xE3, 0xE0, 0x60, 0x18, 0x91, 0xB5, 0x90, 0xA0, 0x5F, 0xE0, 0x04, 0xF0, \r
+0x90, 0xA0, 0x55, 0xE0, 0xFF, 0x90, 0xA0, 0x5F, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0x81, 0x99, \r
+0xF1, 0xCE, 0x74, 0x04, 0xF0, 0x22, 0x90, 0xA0, 0x52, 0xE0, 0x64, 0x06, 0x60, 0x02, 0x81, 0x1D, \r
+0x91, 0xD0, 0x50, 0x08, 0x90, 0xA0, 0x60, 0xE0, 0x94, 0x03, 0x40, 0x1A, 0xF1, 0xAE, 0x90, 0xA0, \r
+0x5D, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0, 0x80, 0x03, 0x74, 0x02, 0xF0, 0xE4, 0x90, 0xA0, 0x52, \r
+0xF0, 0x90, 0xA0, 0x60, 0xF0, 0x22, 0x90, 0xA0, 0x51, 0x91, 0xC9, 0x30, 0xE0, 0x3B, 0xF1, 0xC6, \r
+0xF1, 0xAE, 0x30, 0xE0, 0x0B, 0x90, 0xA0, 0x6F, 0xE0, 0x20, 0xE0, 0x02, 0x81, 0x4E, 0x81, 0x41, \r
+0x91, 0xD0, 0x40, 0x0B, 0x90, 0xA0, 0x6F, 0xE0, 0x30, 0xE0, 0x02, 0x81, 0x41, 0x81, 0x4E, 0x90, \r
+0xA0, 0x6F, 0xE0, 0x30, 0xE0, 0x0C, 0x91, 0xAF, 0xE4, 0x90, 0xA0, 0x5F, 0xF0, 0x90, 0xA2, 0xED, \r
+0x81, 0x57, 0x90, 0xA0, 0x5D, 0x74, 0x02, 0xF0, 0x22, 0x90, 0xA0, 0x51, 0xE0, 0x44, 0x02, 0xF0, \r
+0x90, 0xA0, 0x60, 0xE0, 0x04, 0xF0, 0x7F, 0x03, 0x51, 0xBB, 0x91, 0xD0, 0x50, 0x0A, 0x90, 0xA0, \r
+0x60, 0xE0, 0x94, 0x03, 0x50, 0x02, 0x81, 0xAE, 0x90, 0x9E, 0xCB, 0xE0, 0xFF, 0x90, 0xA2, 0xD7, \r
+0x74, 0x0A, 0xF0, 0x7B, 0x01, 0x7D, 0x01, 0xD1, 0x16, 0xAD, 0x07, 0xAC, 0x06, 0xE4, 0xFF, 0xB1, \r
+0x2E, 0x12, 0xBA, 0x45, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0xA0, 0x51, 0xE0, 0x54, 0xFD, 0xF0, \r
+0x54, 0xFB, 0x12, 0x64, 0x53, 0x7F, 0x03, 0x12, 0x88, 0x32, 0x90, 0x05, 0x22, 0xE0, 0x44, 0x10, \r
+0xFF, 0x7D, 0x03, 0x12, 0x54, 0xC6, 0x90, 0x04, 0x9C, 0xE0, 0x04, 0xF0, 0x22, 0x90, 0xA0, 0x52, \r
+0xE0, 0x64, 0x07, 0x70, 0x35, 0x90, 0xA0, 0x60, 0xE0, 0xB4, 0x04, 0x04, 0x91, 0xBC, 0x80, 0x63, \r
+0x90, 0xA0, 0x51, 0x91, 0xC9, 0x30, 0xE0, 0x18, 0xF1, 0xC6, 0x90, 0xA0, 0x6F, 0xE0, 0x30, 0xE0, \r
+0x0D, 0x91, 0xAF, 0xE4, 0x90, 0xA0, 0x5F, 0xF0, 0x90, 0xA2, 0xED, 0x04, 0x80, 0x09, 0x80, 0x6C, \r
+0xB1, 0x71, 0x90, 0xA0, 0x60, 0xE0, 0x04, 0xF0, 0x80, 0x3F, 0x90, 0xA0, 0x52, 0xE0, 0x64, 0x09, \r
+0x70, 0x4C, 0x90, 0xA0, 0x51, 0xE0, 0x30, 0xE0, 0x0A, 0x91, 0xBC, 0x90, 0xA0, 0x51, 0xE0, 0x54, \r
+0xFE, 0xF0, 0x22, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE2, 0x23, 0x74, 0x04, 0xF0, 0x90, 0xA0, 0x5F, \r
+0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x02, 0x12, 0xF1, 0xBE, 0x60, 0x05, 0x74, 0x05, 0xF0, 0x80, 0x03, \r
+0x74, 0x02, 0xF0, 0xE4, 0x90, 0xA0, 0x52, 0xF0, 0x22, 0x7F, 0x03, 0x41, 0xBB, 0xF1, 0xBE, 0x60, \r
+0x05, 0x74, 0x05, 0xF0, 0x80, 0x03, 0x74, 0x02, 0xF0, 0xE4, 0x90, 0xA0, 0x52, 0xF0, 0x22, 0x90, \r
+0xA0, 0x52, 0x74, 0x09, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x22, 0x90, 0xA0, 0x5D, 0x74, \r
+0x05, 0xF0, 0x22, 0x12, 0x8A, 0x12, 0x90, 0xA0, 0x4E, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x22, \r
+0x90, 0xA0, 0x60, 0xE0, 0xFF, 0x90, 0xA0, 0x5F, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, \r
+0x7D, 0x03, 0x12, 0x07, 0x03, 0x90, 0xA0, 0x4B, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0x90, 0xA0, \r
+0x7C, 0xE0, 0xFD, 0xC3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x22, 0x90, 0xA2, 0xA0, 0xA3, \r
+0xE0, 0xFF, 0x90, 0xA2, 0xD7, 0x74, 0x03, 0xF0, 0x7B, 0x06, 0x7D, 0x01, 0xD1, 0x16, 0x90, 0xA2, \r
+0xA4, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0xA2, 0xA3, 0xE0, 0xFF, 0x74, 0x10, 0x2D, \r
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0xA2, 0xA2, 0xE0, 0xFF, 0xD1, 0xEE, \r
+0x54, 0x3F, 0xF0, 0xEF, 0x60, 0x30, 0xD1, 0xFA, 0x44, 0x10, 0xF0, 0xD1, 0xEE, 0x44, 0x80, 0xF0, \r
+0xF1, 0xD8, 0x54, 0x07, 0x30, 0xE0, 0x29, 0x12, 0x8D, 0x45, 0x50, 0x0C, 0xEF, 0x25, 0xE0, 0x25, \r
+0xE0, 0xFF, 0x74, 0x2B, 0x2D, 0x02, 0xA0, 0x45, 0x74, 0x2B, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, \r
+0xF5, 0x83, 0x74, 0x7F, 0xF0, 0x22, 0xD1, 0xFA, 0x54, 0xEF, 0xF0, 0xD1, 0xEE, 0x44, 0x40, 0xF0, \r
+0x22, 0x90, 0xA0, 0x51, 0xE0, 0x44, 0x02, 0xF0, 0x7D, 0x08, 0x7F, 0x01, 0xD3, 0x10, 0xAF, 0x01, \r
+0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xB2, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x9E, 0x94, 0xE0, 0x04, \r
+0xF0, 0x90, 0xA0, 0x4A, 0xE0, 0x30, 0xE0, 0x07, 0x90, 0x05, 0x10, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, \r
+0x04, 0x1D, 0xE0, 0x60, 0x43, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA2, 0xB6, 0xF0, 0x7D, 0x26, 0x12, \r
+0x57, 0x51, 0xEF, 0x64, 0x01, 0x70, 0x0E, 0xD1, 0xC4, 0x20, 0xE0, 0x1D, 0x90, 0xA0, 0xAD, 0xE0, \r
+0x20, 0xE0, 0x16, 0x80, 0x12, 0x12, 0x5F, 0xDC, 0x30, 0xE0, 0x0E, 0xD1, 0xC4, 0x20, 0xE0, 0x09, \r
+0x90, 0xA0, 0xAD, 0xE0, 0x20, 0xE0, 0x02, 0xF1, 0x06, 0x90, 0xA2, 0xB6, 0xE0, 0xFF, 0x7D, 0x27, \r
+0x12, 0x54, 0xC6, 0x12, 0xB9, 0xEA, 0x80, 0x11, 0x12, 0xB9, 0xEA, 0xD1, 0xC4, 0x20, 0xE0, 0x09, \r
+0x90, 0xA0, 0xAD, 0xE0, 0x20, 0xE0, 0x02, 0xF1, 0x06, 0x90, 0xA0, 0x4A, 0xE0, 0x30, 0xE0, 0x0E, \r
+0x12, 0x5F, 0xDC, 0x30, 0xE0, 0x08, 0x12, 0xBC, 0xDA, 0x7D, 0x28, 0x12, 0x54, 0xC6, 0x12, 0xBC, \r
+0x46, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xD5, \r
+0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0xA2, 0xD4, 0xEF, 0xF0, 0xE4, 0xFD, 0xFC, 0x12, 0xBA, 0x97, \r
+0x7C, 0x00, 0xAD, 0x07, 0x90, 0xA2, 0xD4, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90, 0xA2, 0xD5, 0xE0, \r
+0x60, 0x06, 0x12, 0xBB, 0xE1, 0x44, 0x80, 0xF0, 0xAF, 0x05, 0x74, 0x20, 0x2F, 0xF5, 0x82, 0xE4, \r
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0xF0, 0x12, 0xBB, 0xE1, 0x54, 0xC0, 0xF0, 0x90, 0xA2, \r
+0xD7, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x18, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, \r
+0xF0, 0x74, 0x12, 0x2E, 0xF1, 0x70, 0xE0, 0x54, 0x01, 0xFF, 0x90, 0xA2, 0xD6, 0xE0, 0x25, 0xE0, \r
+0x25, 0xE0, 0xFE, 0xEF, 0x44, 0x02, 0x4E, 0xFF, 0xAE, 0x05, 0x74, 0x12, 0x2E, 0xF1, 0x70, 0xEF, \r
+0xF0, 0x74, 0x11, 0x2E, 0xF1, 0xB6, 0x74, 0xFF, 0xF0, 0x74, 0x29, 0x2E, 0xD1, 0xFD, 0x54, 0xF7, \r
+0xF0, 0x90, 0xA0, 0x4A, 0xE0, 0x30, 0xE0, 0x0D, 0x12, 0xBB, 0xD5, 0x44, 0x80, 0xF0, 0x90, 0x05, \r
+0x12, 0xE4, 0xF0, 0x80, 0x06, 0x12, 0xBB, 0xD5, 0x54, 0x7F, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, \r
+0xD0, 0x92, 0xAF, 0x22, 0x90, 0x9E, 0xCB, 0xE0, 0xFF, 0x90, 0xA2, 0xB3, 0xE0, 0xFB, 0x90, 0xA2, \r
+0xD7, 0x74, 0x0A, 0xF0, 0x7D, 0x01, 0xD1, 0x16, 0x90, 0xA2, 0xB4, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, \r
+0xF0, 0xFD, 0x90, 0xA2, 0xB2, 0xE0, 0xFF, 0xB1, 0x2E, 0x90, 0xA0, 0xAE, 0xE0, 0x22, 0x74, 0x09, \r
+0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0x74, 0x29, 0x2D, 0xF5, 0x82, 0xE4, \r
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0x90, 0xA2, 0xB4, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x81, \r
+0x00, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0xF1, 0x80, 0x44, 0x01, 0xF0, 0xF1, 0x80, 0x54, 0xFB, \r
+0xF0, 0xAC, 0x07, 0x74, 0x12, 0x2C, 0xF1, 0x70, 0xE0, 0x44, 0xFA, 0xF0, 0x74, 0x11, 0x2C, 0xF1, \r
+0xB6, 0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, \r
+0x83, 0xE0, 0x44, 0x0E, 0xF0, 0x90, 0x04, 0xA7, 0xE4, 0xF0, 0x90, 0x04, 0xA6, 0xF0, 0x90, 0x04, \r
+0xA5, 0x74, 0xFF, 0xF0, 0x90, 0x04, 0xA4, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF1, 0x78, 0xE0, \r
+0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF1, 0x78, 0xED, 0xF0, 0x22, 0xF0, 0x74, 0x12, 0x2F, \r
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, \r
+0x74, 0x0D, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0x90, 0x9E, 0xCC, 0xE0, \r
+0xFF, 0x90, 0xA2, 0xD7, 0x74, 0x0B, 0xF0, 0x7B, 0x08, 0x7D, 0x01, 0xD1, 0x16, 0x90, 0xA2, 0xE9, \r
+0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0xA2, 0xE8, 0xE0, 0xFF, 0xA1, 0x2E, 0x90, 0xA0, \r
+0x4D, 0xE0, 0xC4, 0x54, 0x0F, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0x90, 0xA2, \r
+0xED, 0xE0, 0x90, 0xA0, 0x5D, 0x22, 0xEF, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0xE4, 0x90, \r
+0xA0, 0x52, 0xF0, 0x90, 0xA0, 0x5D, 0x22, 0x22, 0x90, 0xA0, 0x4E, 0xE0, 0xC4, 0x13, 0x22, 0xC0, \r
+0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, \r
+0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, \r
+0xDF, 0xF0, 0x74, 0x87, 0xA3, 0xF0, 0x12, 0x58, 0xF7, 0x53, 0x91, 0xBF, 0x74, 0xDF, 0x04, 0x90, \r
+0x01, 0xC4, 0xF0, 0x74, 0x87, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, \r
+0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, \r
+0xE0, 0x32, 0x90, 0xA0, 0x6F, 0x31, 0xDA, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74, 0x09, 0xF0, \r
+0x22, 0x90, 0xA0, 0xAB, 0xE0, 0x30, 0xE0, 0x1D, 0xEF, 0x24, 0xFD, 0x60, 0x0E, 0x24, 0xFA, 0x60, \r
+0x0E, 0x24, 0xFC, 0x60, 0x0E, 0x24, 0x0C, 0x7F, 0x02, 0x80, 0x0A, 0x7F, 0x03, 0x80, 0x06, 0x7F, \r
+0x0B, 0x80, 0x02, 0x7F, 0x0E, 0x90, 0x07, 0x78, 0xEF, 0xF0, 0x22, 0xAD, 0x07, 0xED, 0x70, 0x19, \r
+0x11, 0xF5, 0x70, 0x02, 0x80, 0x17, 0xBC, 0x01, 0x02, 0x80, 0x19, 0x11, 0xF5, 0xBC, 0x02, 0x02, \r
+0x80, 0x1B, 0xEC, 0x64, 0x03, 0x70, 0x21, 0x80, 0x1B, 0x11, 0xFD, 0x70, 0x04, 0x7F, 0x01, 0x80, \r
+0x15, 0xBC, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x0E, 0x11, 0xFD, 0xBC, 0x02, 0x04, 0x7F, 0x09, 0x80, \r
+0x05, 0xBC, 0x03, 0x04, 0x7F, 0x0D, 0x11, 0x32, 0x90, 0xA0, 0x99, 0xE0, 0xC4, 0x13, 0x54, 0x07, \r
+0x30, 0xE0, 0x3A, 0xED, 0x70, 0x1B, 0xA3, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x07, 0xE4, \r
+0x90, 0xA1, 0xF9, 0xF0, 0x80, 0x02, 0x11, 0xEE, 0x90, 0xA1, 0xF9, 0xE0, 0xFD, 0xE4, 0xFF, 0x80, \r
+0x19, 0x90, 0xA0, 0x9A, 0x12, 0x5F, 0xDF, 0x30, 0xE0, 0x07, 0xE4, 0x90, 0xA1, 0xF9, 0xF0, 0x80, \r
+0x02, 0x11, 0xEE, 0x90, 0xA1, 0xF9, 0xE0, 0xFD, 0x7F, 0x01, 0x12, 0x48, 0x62, 0x22, 0x90, 0xA1, \r
+0xF9, 0x74, 0x01, 0xF0, 0x22, 0x90, 0xA0, 0x9A, 0xE0, 0x54, 0x03, 0xFC, 0x22, 0x90, 0xA0, 0x9A, \r
+0xE0, 0xC4, 0x54, 0x03, 0xFC, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA0, 0xA0, \r
+0xE0, 0xB4, 0x01, 0x02, 0x80, 0x40, 0x90, 0xA0, 0xA0, 0xE0, 0xB4, 0x02, 0x10, 0x31, 0xEB, 0x7F, \r
+0x01, 0x51, 0x12, 0x11, 0x6B, 0x90, 0xA0, 0xA0, 0x74, 0x03, 0xF0, 0x80, 0x3B, 0x90, 0xA0, 0xA0, \r
+0xE0, 0x64, 0x03, 0x70, 0x1A, 0x90, 0xA0, 0xA3, 0x31, 0xEE, 0xE4, 0xFF, 0x51, 0x12, 0x11, 0x6B, \r
+0x31, 0xE1, 0xE4, 0xFB, 0xFD, 0x31, 0x6D, 0x90, 0xA0, 0xA0, 0x74, 0x04, 0xF0, 0x80, 0x19, 0x90, \r
+0xA0, 0xA0, 0xE0, 0xB4, 0x04, 0x12, 0x31, 0xE1, 0x7B, 0x01, 0x7D, 0x01, 0x31, 0x6D, 0x90, 0xA0, \r
+0xA0, 0x74, 0x02, 0xF0, 0x90, 0xA0, 0x9E, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA1, 0xF9, \r
+0x12, 0x97, 0xC3, 0x90, 0xA0, 0x99, 0x31, 0xDA, 0x20, 0xE0, 0x0E, 0x90, 0xA1, 0xFA, 0xE0, 0xB4, \r
+0x01, 0x07, 0x7D, 0x36, 0x7F, 0x6F, 0x12, 0x54, 0xC6, 0x90, 0xA1, 0xF9, 0xE0, 0x70, 0x0C, 0x90, \r
+0xA1, 0xFB, 0xE0, 0xFF, 0x7D, 0x05, 0x12, 0x85, 0x7C, 0x80, 0x27, 0x90, 0xA1, 0xF9, 0xE0, 0xB4, \r
+0x01, 0x0A, 0x90, 0xA1, 0xFB, 0xE0, 0xFF, 0x12, 0xBA, 0x58, 0x80, 0x16, 0x90, 0xA1, 0xF9, 0xE0, \r
+0xB4, 0x02, 0x0F, 0xA3, 0xE0, 0xB4, 0x01, 0x0A, 0x90, 0xA0, 0xA7, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, \r
+0xB1, 0x4E, 0x90, 0xA0, 0x99, 0x31, 0xDA, 0x20, 0xE0, 0x0B, 0x90, 0xA1, 0xFA, 0xE0, 0x70, 0x05, \r
+0xFD, 0xFF, 0x12, 0x54, 0xC6, 0x22, 0xF0, 0x90, 0xA0, 0x3B, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, \r
+0x22, 0x90, 0xA0, 0x99, 0xE0, 0xC3, 0x13, 0x54, 0x03, 0xFF, 0x22, 0x90, 0xA0, 0xA5, 0xE0, 0xFE, \r
+0xA3, 0xE0, 0xFF, 0xAD, 0x07, 0xEE, 0xFF, 0x90, 0x01, 0x6F, 0xE4, 0xF0, 0x8F, 0x35, 0xAF, 0x05, \r
+0x8F, 0x36, 0xFB, 0xFD, 0x7F, 0x6C, 0x7E, 0x01, 0x12, 0x3C, 0xB1, 0x90, 0x01, 0x6F, 0x74, 0x05, \r
+0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x64, 0x03, 0x70, 0x0E, 0x90, 0xA0, \r
+0x4D, 0x12, 0x5F, 0xDF, 0x90, 0x06, 0xCC, 0x30, 0xE0, 0x3A, 0x80, 0x2D, 0x90, 0xA0, 0x4E, 0xE0, \r
+0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x10, 0xEF, 0x90, 0x06, 0xCC, 0x70, 0x06, 0xE0, 0x54, 0xFC, 0xF0, \r
+0x80, 0x04, 0xE0, 0x44, 0x03, 0xF0, 0x90, 0xA0, 0x99, 0xE0, 0x30, 0xE0, 0x1B, 0xC4, 0x54, 0x0F, \r
+0x30, 0xE0, 0x0E, 0xEF, 0x90, 0x06, 0xCC, 0x70, 0x06, 0xE0, 0x54, 0xFC, 0xF0, 0x80, 0x09, 0x80, \r
+0x03, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x03, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA1, 0xF9, \r
+0xEF, 0xF0, 0x90, 0xA1, 0xFB, 0x74, 0x02, 0xF0, 0x7F, 0x01, 0x12, 0x84, 0xC3, 0x30, 0xE0, 0x22, \r
+0x90, 0xA1, 0xF9, 0xE0, 0xB4, 0x02, 0x04, 0x7D, 0x07, 0x80, 0x09, 0x90, 0xA1, 0xF9, 0xE0, 0xB4, \r
+0x05, 0x07, 0x7D, 0x0D, 0x7F, 0xFF, 0x12, 0x54, 0xC6, 0x12, 0x57, 0x55, 0xBF, 0x01, 0x03, 0x12, \r
+0x47, 0xEB, 0x90, 0xA0, 0x4E, 0x12, 0x4F, 0xD1, 0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x02, 0x7F, \r
+0x01, 0x11, 0x32, 0x90, 0xA1, 0xF9, 0xE0, 0xB4, 0x02, 0x0D, 0x90, 0xA0, 0x4B, 0xE0, 0x24, 0x03, \r
+0xFF, 0x90, 0xA0, 0x5A, 0x12, 0x82, 0xB7, 0x90, 0xA0, 0x4A, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x07, \r
+0xE4, 0x90, 0xA1, 0xFA, 0xF0, 0x80, 0x06, 0x90, 0xA1, 0xFA, 0x74, 0x01, 0xF0, 0x12, 0xBC, 0xB2, \r
+0x20, 0xE0, 0x13, 0x90, 0xA0, 0x8C, 0xE0, 0x60, 0x08, 0x90, 0xA1, 0xFB, 0x74, 0x01, 0xF0, 0x80, \r
+0x05, 0xE4, 0x90, 0xA1, 0xFB, 0xF0, 0x90, 0xA1, 0xFB, 0xE0, 0xFF, 0x90, 0xA1, 0xFA, 0xE0, 0xFD, \r
+0x12, 0x48, 0x62, 0xE4, 0x90, 0xA0, 0x5C, 0xF0, 0x90, 0xA1, 0xF9, 0xE0, 0xFF, 0xB4, 0x02, 0x05, \r
+0x12, 0x82, 0xCE, 0x80, 0x09, 0xEF, 0xB4, 0x05, 0x05, 0xE4, 0x90, 0xA0, 0x5D, 0xF0, 0xB1, 0xE3, \r
+0x30, 0xE0, 0x17, 0x90, 0xA1, 0xF9, 0xE0, 0xB4, 0x02, 0x04, 0x7D, 0x08, 0x80, 0x53, 0x90, 0xA1, \r
+0xF9, 0xE0, 0x64, 0x05, 0x70, 0x50, 0x7D, 0x0E, 0x80, 0x47, 0x90, 0xA0, 0x4A, 0xE0, 0xC4, 0x54, \r
+0x0F, 0x30, 0xE0, 0x21, 0x12, 0x87, 0xD8, 0x54, 0x07, 0x20, 0xE0, 0x02, 0x71, 0xB2, 0x90, 0xA1, \r
+0xF9, 0xE0, 0xB4, 0x02, 0x04, 0x7D, 0x09, 0x80, 0x28, 0x90, 0xA1, 0xF9, 0xE0, 0x64, 0x05, 0x70, \r
+0x25, 0x7D, 0x0F, 0x80, 0x1C, 0x90, 0x9F, 0xD9, 0xE0, 0x60, 0x1B, 0x71, 0xB2, 0x90, 0xA1, 0xF9, \r
+0xE0, 0xB4, 0x02, 0x04, 0x7D, 0x0A, 0x80, 0x09, 0x90, 0xA1, 0xF9, 0xE0, 0xB4, 0x05, 0x07, 0x7D, \r
+0x10, 0x7F, 0x6F, 0x12, 0x54, 0xC6, 0x90, 0xA0, 0x4D, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x66, 0x3A, \r
+0x12, 0x4F, 0xCE, 0x30, 0xE0, 0x04, 0xE4, 0xFF, 0xF1, 0xDD, 0x90, 0xA0, 0x4E, 0xE0, 0xC3, 0x13, \r
+0x30, 0xE0, 0x0E, 0x90, 0x06, 0xCD, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x06, 0xCF, 0xE0, 0x54, 0xEF, \r
+0xF0, 0x22, 0x90, 0x9F, 0xDB, 0xE0, 0xFF, 0xE4, 0xFD, 0x02, 0x62, 0x5A, 0x7D, 0x12, 0x7F, 0xFF, \r
+0x12, 0x54, 0xC6, 0x7F, 0x01, 0x11, 0x32, 0x12, 0xAB, 0xD9, 0x02, 0x48, 0x62, 0x90, 0xA0, 0x65, \r
+0xE0, 0x30, 0xE0, 0x04, 0x71, 0xBC, 0x80, 0x02, 0x71, 0xE4, 0x90, 0xA0, 0x99, 0xE0, 0x30, 0xE0, \r
+0x02, 0x31, 0x06, 0x22, 0x90, 0xA0, 0x4A, 0xE0, 0x30, 0xE0, 0x36, 0x12, 0x82, 0xD5, 0x90, 0xA0, \r
+0x5D, 0xE0, 0xFF, 0xB4, 0x01, 0x02, 0x80, 0x1D, 0x90, 0xA0, 0x5D, 0xE0, 0xFF, 0xB4, 0x02, 0x02, \r
+0x80, 0x1D, 0x90, 0xA0, 0x5D, 0xE0, 0xFF, 0xB4, 0x03, 0x03, 0x02, 0x80, 0xEF, 0x90, 0xA0, 0x5D, \r
+0xE0, 0xFF, 0xB4, 0x04, 0x02, 0x80, 0x0B, 0x90, 0xA0, 0x5D, 0xE0, 0xFF, 0xB4, 0x05, 0x02, 0x51, \r
+0x6D, 0x22, 0x90, 0xA1, 0xF9, 0xEF, 0xF0, 0x7F, 0x03, 0x12, 0x82, 0xBB, 0x12, 0x87, 0xAE, 0x90, \r
+0xA0, 0x5D, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0, 0x80, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0xA0, 0x4E, \r
+0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x09, 0xEF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, \r
+0xE0, 0x38, 0x12, 0x87, 0xAE, 0x30, 0xE0, 0x0A, 0x90, 0xA0, 0x4B, 0xE0, 0xFF, 0x90, 0xA0, 0x5B, \r
+0x80, 0x21, 0x90, 0xA1, 0xF9, 0xE0, 0xFC, 0xB4, 0x01, 0x0D, 0x90, 0xA0, 0x4B, 0xE0, 0xFE, 0x90, \r
+0xA0, 0x5A, 0xE0, 0xC3, 0x9E, 0x80, 0x0F, 0xEC, 0xB4, 0x04, 0x0F, 0x90, 0xA0, 0x4C, 0xE0, 0xFF, \r
+0x90, 0xA0, 0x5A, 0xE0, 0xC3, 0x9F, 0x90, 0xA0, 0x61, 0xF0, 0xB1, 0xE3, 0x30, 0xE0, 0x23, 0x12, \r
+0x87, 0xD8, 0x54, 0x07, 0x20, 0xE0, 0x02, 0xA1, 0x1E, 0xB1, 0x45, 0x50, 0x0A, 0xEF, 0x25, 0xE0, \r
+0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x12, 0xA0, 0x4F, \r
+0x80, 0x6C, 0x90, 0xA0, 0x4A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x49, 0x12, 0xBC, 0x97, 0xFD, \r
+0x7F, 0x04, 0x12, 0x62, 0x5A, 0x12, 0x5F, 0xDC, 0x30, 0xE0, 0x3A, 0x90, 0xA0, 0x51, 0xE0, 0x44, \r
+0x02, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0xA0, 0x60, 0xF0, 0x90, 0xA0, 0x5D, 0xF0, 0x90, 0xA1, \r
+0xF9, 0xE0, 0xFF, 0xB4, 0x01, 0x08, 0x90, 0xA0, 0x52, 0x74, 0x06, 0xF0, 0x80, 0x0A, 0xEF, 0xB4, \r
+0x04, 0x06, 0x90, 0xA0, 0x52, 0x74, 0x07, 0xF0, 0x90, 0xA0, 0x3C, 0xE0, 0x60, 0x07, 0x90, 0xA0, \r
+0x51, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0xA1, 0xF9, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x06, 0x80, 0x09, \r
+0x90, 0xA1, 0xF9, 0xE0, 0xB4, 0x04, 0x07, 0x7D, 0x0C, 0x7F, 0x6F, 0x12, 0x54, 0xC6, 0x90, 0xA0, \r
+0x4E, 0x31, 0xDA, 0x30, 0xE0, 0x14, 0xB1, 0x45, 0x50, 0x0A, 0xEF, 0x7F, 0x00, 0x25, 0xE0, 0x25, \r
+0xE0, 0xFE, 0x80, 0x04, 0x7F, 0xFF, 0x7E, 0x7F, 0xB1, 0x4E, 0x90, 0xA0, 0x4D, 0xE0, 0x30, 0xE0, \r
+0x03, 0x12, 0x66, 0x3A, 0x22, 0x90, 0xA0, 0x61, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x22, 0xD3, 0x10, \r
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xB7, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x04, 0x1D, \r
+0xE0, 0x60, 0x1E, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA2, 0xBB, 0xF0, 0x7D, 0x36, 0x12, 0x57, 0x51, \r
+0xBF, 0x01, 0x02, 0xB1, 0x96, 0x90, 0xA2, 0xBB, 0xE0, 0xFF, 0x7D, 0x37, 0x12, 0x54, 0xC6, 0x80, \r
+0x02, 0xB1, 0x96, 0x12, 0xBC, 0xDA, 0x7D, 0x38, 0x12, 0x54, 0xC6, 0x90, 0x04, 0x1F, 0x74, 0x20, \r
+0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x9E, 0xCE, 0xE0, 0xFF, 0x90, 0xA2, 0xD7, 0x74, 0x0C, \r
+0xF0, 0xE4, 0xFB, 0x7D, 0x01, 0x12, 0x86, 0x16, 0x90, 0xA2, 0xB9, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, \r
+0x90, 0xA2, 0xB7, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xAB, \r
+0x07, 0x90, 0xA3, 0x19, 0xED, 0xF0, 0xEC, 0xF9, 0xE0, 0xFF, 0xAE, 0x03, 0x74, 0x2A, 0x2E, 0x12, \r
+0xA0, 0x3B, 0x74, 0x2B, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE9, 0xF0, 0xD0, 0xD0, \r
+0x92, 0xAF, 0x22, 0x90, 0xA0, 0x4A, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x22, 0x12, 0x06, 0x89, 0x54, \r
+0x01, 0x12, 0x9E, 0x97, 0x90, 0xA0, 0x6F, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0x31, 0xDA, 0x90, 0x07, \r
+0x65, 0x30, 0xE0, 0x04, 0x74, 0x18, 0xF0, 0x22, 0xE4, 0xF0, 0x22, 0xF1, 0xD6, 0x13, 0x30, 0xE0, \r
+0x21, 0xEF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x20, 0xE0, 0x18, 0x12, 0x87, 0xAE, 0x30, 0xE0, 0x04, \r
+0x7F, 0x03, 0x80, 0x0C, 0x12, 0xAD, 0x96, 0x30, 0xE0, 0x04, 0x7F, 0x0D, 0x80, 0x02, 0x7F, 0x09, \r
+0x11, 0x32, 0x22, 0xE4, 0x90, 0xA1, 0xF9, 0xF0, 0x90, 0x9F, 0xD9, 0xE0, 0x70, 0x02, 0xC1, 0xCC, \r
+0x12, 0x67, 0xA8, 0x60, 0x02, 0xC1, 0xCC, 0x12, 0xBC, 0xEA, 0x12, 0x5D, 0x27, 0x12, 0x45, 0x54, \r
+0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0x12, 0x5D, 0x41, 0x78, 0x10, \r
+0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x54, 0xC0, 0x04, \r
+0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0x12, 0x5D, 0x41, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, \r
+0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xF1, 0xC5, 0x11, 0xEE, 0xE4, 0x90, 0x9F, 0xE0, 0xF0, \r
+0x90, 0x9F, 0xCF, 0xE0, 0x30, 0xE0, 0x16, 0x90, 0x9F, 0xD3, 0xE0, 0xB4, 0x02, 0x05, 0xE4, 0x90, \r
+0xA1, 0xF9, 0xF0, 0x12, 0x6B, 0x1D, 0xEF, 0x70, 0x04, 0x90, 0xA1, 0xF9, 0xF0, 0x90, 0xA1, 0xF9, \r
+0xE0, 0x60, 0x19, 0xF1, 0xBD, 0xE4, 0x90, 0xA2, 0xAB, 0xF0, 0x90, 0x9F, 0xE1, 0x12, 0x50, 0x0F, \r
+0x90, 0x9F, 0xDC, 0xE0, 0x20, 0xE2, 0x03, 0x12, 0x62, 0x56, 0xD1, 0x0B, 0x22, 0xE4, 0xF5, 0x63, \r
+0x90, 0x9F, 0xD9, 0xE0, 0x70, 0x02, 0xE1, 0xAA, 0x12, 0x67, 0xA8, 0x60, 0x02, 0xE1, 0xAA, 0x12, \r
+0x5D, 0x28, 0x12, 0x45, 0x54, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, \r
+0x12, 0x5D, 0x41, 0x78, 0x10, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, \r
+0x12, 0x45, 0x54, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0x12, 0x5D, 0x41, 0x78, \r
+0x18, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xF1, 0xC5, 0x12, 0xBB, \r
+0x83, 0x60, 0x22, 0x24, 0xFE, 0x60, 0x03, 0x04, 0x70, 0x1E, 0x90, 0x9F, 0xE0, 0xE0, 0x14, 0xF0, \r
+0xE0, 0xFF, 0x60, 0x06, 0x90, 0x9F, 0xE2, 0xE0, 0x60, 0x0E, 0xEF, 0x70, 0x08, 0x90, 0x9F, 0xDF, \r
+0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x75, 0x63, 0x01, 0x90, 0x9F, 0xCF, 0xE0, 0x30, 0xE0, 0x12, 0x90, \r
+0x9F, 0xD3, 0xE0, 0xB4, 0x02, 0x03, 0xE4, 0xF5, 0x63, 0x12, 0x6B, 0x1D, 0xEF, 0x70, 0x02, 0xF5, \r
+0x63, 0xE5, 0x63, 0x60, 0x45, 0xF1, 0xBD, 0x90, 0x9F, 0xE2, 0xE0, 0x60, 0x04, 0x64, 0x01, 0x70, \r
+0x14, 0xE4, 0x90, 0xA2, 0xAB, 0xF0, 0x90, 0x9F, 0xE2, 0xE0, 0xF1, 0xB6, 0x12, 0x50, 0x10, 0x90, \r
+0x9F, 0xE2, 0xE0, 0x80, 0x13, 0xE4, 0x90, 0xA2, 0xAB, 0xF1, 0xAB, 0x12, 0x50, 0x10, 0x90, 0x9F, \r
+0xE2, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0xF1, 0xB6, 0x90, 0x9F, 0xF2, 0xF0, 0x90, 0x9F, \r
+0xDC, 0xE0, 0x20, 0xE2, 0x03, 0x12, 0x62, 0x56, 0xD1, 0x0B, 0x22, 0xF0, 0x90, 0x9F, 0xE2, 0xE0, \r
+0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0xFF, 0x90, 0x9F, 0xE1, 0xE0, 0x2F, 0x22, 0x90, 0x9F, 0xDD, \r
+0xE0, 0x44, 0x10, 0xF0, 0x22, 0x12, 0x45, 0x54, 0x90, 0xA0, 0x2C, 0x12, 0x08, 0x6D, 0x90, 0x9F, \r
+0xD5, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0xA0, 0x3B, 0xE0, 0xFF, 0xC3, 0x22, 0x90, 0xA0, 0x7D, \r
+0xE0, 0xFE, 0xC3, 0x13, 0x30, 0xE0, 0x16, 0xEF, 0xB4, 0x01, 0x05, 0x90, 0xA0, 0x84, 0x80, 0x03, \r
+0x90, 0xA0, 0x80, 0x12, 0x47, 0xCC, 0x7F, 0x80, 0x7E, 0x08, 0x12, 0x38, 0x45, 0x22, 0x7E, 0x00, \r
+0x7F, 0x19, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA0, 0x79, 0x7D, 0x12, 0x08, 0xAA, 0x12, 0xAE, 0x40, \r
+0x90, 0xA0, 0x84, 0x12, 0x45, 0x72, 0x90, 0xA0, 0x80, 0x12, 0x08, 0x6D, 0x90, 0x9E, 0x98, 0xE0, \r
+0xFF, 0x64, 0x02, 0x70, 0x22, 0x31, 0x1A, 0x30, 0xE0, 0x02, 0x7E, 0x01, 0x90, 0xA0, 0x8C, 0xEE, \r
+0xF0, 0x31, 0x1A, 0x30, 0xE1, 0x02, 0x7E, 0x01, 0x90, 0xA0, 0x8D, 0xEE, 0xF0, 0x90, 0xFD, 0x80, \r
+0xE0, 0x90, 0x02, 0xFB, 0xF0, 0x80, 0x3A, 0xEF, 0x64, 0x01, 0x70, 0x15, 0x11, 0xB3, 0x30, 0xE0, \r
+0x02, 0x7F, 0x01, 0x90, 0xA0, 0x8C, 0xEF, 0xF0, 0x11, 0xB3, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x80, \r
+0x1B, 0x90, 0x9E, 0x98, 0xE0, 0x64, 0x03, 0x70, 0x18, 0x11, 0xAC, 0x30, 0xE0, 0x02, 0x7F, 0x01, \r
+0x90, 0xA0, 0x8C, 0xEF, 0xF0, 0x11, 0xAC, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0xA0, 0x8D, 0xEF, \r
+0xF0, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x02, 0xF0, 0x7F, 0x01, 0x12, 0x88, 0x32, 0x11, 0xBA, 0x12, \r
+0xA0, 0xB4, 0x90, 0xA0, 0x63, 0x74, 0x01, 0xF0, 0x90, 0xA0, 0x99, 0xE0, 0x54, 0xFE, 0xF0, 0x90, \r
+0x04, 0x8F, 0xE4, 0xF0, 0x90, 0xA0, 0xAB, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0x90, 0xFD, 0x78, 0xE0, \r
+0x7F, 0x00, 0x22, 0x90, 0xFD, 0x70, 0xE0, 0x7F, 0x00, 0x22, 0x7E, 0x00, 0x7F, 0x33, 0x7D, 0x00, \r
+0x7B, 0x01, 0x7A, 0xA0, 0x79, 0x4A, 0x12, 0x08, 0xAA, 0x90, 0xA0, 0x4B, 0x74, 0x0B, 0xF0, 0xA3, \r
+0x74, 0x08, 0xF0, 0x90, 0x9E, 0x98, 0xE0, 0xFC, 0x64, 0x02, 0x70, 0x14, 0x31, 0x1A, 0x30, 0xE2, \r
+0x02, 0x7E, 0x01, 0xEE, 0x31, 0x21, 0xFE, 0x90, 0xA0, 0x4D, 0xE0, 0x54, 0xBF, 0x4E, 0xF0, 0x22, \r
+0xEC, 0x64, 0x01, 0x70, 0x09, 0x11, 0xB3, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x80, 0x0F, 0x90, 0x9E, \r
+0x98, 0xE0, 0x64, 0x03, 0x70, 0x13, 0x11, 0xAC, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0xEF, 0x31, 0x21, \r
+0xFF, 0x90, 0xA0, 0x4D, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x22, 0x90, 0xFD, 0x80, 0xE0, 0x7E, 0x00, \r
+0x22, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x54, 0xC0, 0x22, 0x31, 0x3F, 0x12, 0xAF, 0xB6, 0x12, 0x4E, \r
+0x36, 0x12, 0xB8, 0x1E, 0x12, 0x60, 0xCF, 0x31, 0xD9, 0x12, 0xA7, 0x4B, 0x02, 0x8F, 0xFE, 0xE4, \r
+0xFD, 0xFF, 0x12, 0xBB, 0xED, 0xED, 0x70, 0x12, 0x31, 0x7E, 0xC0, 0x83, 0xC0, 0x82, 0x31, 0x76, \r
+0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5E, 0x80, 0x0F, 0x31, 0x7E, 0xC0, 0x83, 0xC0, 0x82, \r
+0x31, 0x76, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x31, 0x89, \r
+0x90, 0x9F, 0xCD, 0xEF, 0xF0, 0x22, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x22, 0x74, 0xBD, \r
+0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x9F, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
+0x7D, 0x10, 0xED, 0x14, 0xF9, 0x24, 0xBD, 0x31, 0x81, 0xE0, 0x60, 0x34, 0x7C, 0x08, 0xEC, 0x14, \r
+0x90, 0xA3, 0x11, 0xF0, 0x74, 0xBD, 0x29, 0x31, 0x81, 0xE0, 0xFB, 0x7A, 0x00, 0x90, 0xA3, 0x11, \r
+0x71, 0x29, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x31, 0xDF, 0x60, 0x0F, 0xE9, \r
+0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x90, 0xA3, 0x11, 0xE0, 0x2F, 0x04, 0xFF, 0x80, 0x06, 0xDC, 0xCE, \r
+0xDD, 0xC0, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0xBB, 0xA3, 0x02, 0x08, 0xAA, 0xFF, \r
+0xEE, 0x5A, 0xFE, 0xEF, 0x5B, 0x4E, 0x22, 0x8D, 0x5D, 0xAC, 0x07, 0x75, 0xF0, 0x10, 0xEC, 0x12, \r
+0x75, 0x8E, 0xE0, 0xF5, 0x5E, 0x54, 0x7F, 0xF9, 0xE5, 0x5E, 0x54, 0x80, 0xF5, 0x5F, 0x75, 0xF0, \r
+0x04, 0xEC, 0x12, 0x4F, 0xFD, 0xE0, 0xF5, 0x61, 0x75, 0xF0, 0x04, 0xEC, 0x12, 0x4E, 0x2E, 0xC4, \r
+0x54, 0x03, 0xF5, 0x62, 0xE9, 0x12, 0xBB, 0x05, 0xF1, 0xCC, 0xEC, 0x91, 0x73, 0x12, 0x77, 0xE4, \r
+0xF0, 0x74, 0x91, 0x2C, 0x51, 0xD8, 0xE5, 0x5E, 0xF0, 0x75, 0xF0, 0x04, 0xEC, 0x12, 0x4E, 0x2E, \r
+0x13, 0x13, 0x54, 0x03, 0xF5, 0x60, 0x74, 0x91, 0x2C, 0xB1, 0x42, 0xE5, 0x60, 0xF0, 0xE9, 0x64, \r
+0x2C, 0x70, 0x27, 0x75, 0xF0, 0x04, 0xEC, 0x12, 0x4E, 0x2E, 0xFF, 0x54, 0x03, 0xFE, 0xE5, 0x60, \r
+0xC3, 0x9E, 0x50, 0x16, 0x05, 0x60, 0xE5, 0x60, 0xB1, 0x5F, 0xEC, 0x90, 0x96, 0x14, 0x12, 0x45, \r
+0x8A, 0xEF, 0x54, 0xF3, 0x4E, 0xF0, 0x89, 0x5E, 0x80, 0x5E, 0xE9, 0xC3, 0x95, 0x61, 0x50, 0x2F, \r
+0xE9, 0x04, 0xFD, 0xED, 0xD3, 0x95, 0x61, 0x50, 0x4F, 0xED, 0xB1, 0x4A, 0xEC, 0x12, 0x7A, 0x4C, \r
+0xE0, 0xFB, 0x7A, 0x00, 0xED, 0x54, 0x07, 0x71, 0x2A, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, \r
+0xD8, 0xF9, 0x31, 0xDF, 0x60, 0x06, 0xA9, 0x05, 0x89, 0x5E, 0x80, 0x2C, 0x0D, 0x80, 0xD4, 0xE9, \r
+0x65, 0x61, 0x70, 0x1A, 0x75, 0xF0, 0x04, 0xEC, 0x12, 0x4F, 0x86, 0xC4, 0x13, 0x54, 0x07, 0x30, \r
+0xE0, 0x22, 0xE5, 0x5E, 0x20, 0xE7, 0x1D, 0xE9, 0x44, 0x80, 0xF5, 0x5E, 0x80, 0x0A, 0x74, 0x91, \r
+0x2C, 0x51, 0xD8, 0xE5, 0x61, 0xF0, 0xF5, 0x5E, 0xAF, 0x04, 0x85, 0x60, 0x6A, 0xAB, 0x5D, 0xAD, \r
+0x5E, 0x12, 0x76, 0x59, 0x22, 0x74, 0x91, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x9D, 0xF5, 0x83, 0x22, \r
+0x75, 0xF0, 0x04, 0xEF, 0x12, 0x4E, 0x2E, 0xFE, 0x13, 0x13, 0x54, 0x03, 0xFC, 0x12, 0x4F, 0xF9, \r
+0xE0, 0xFB, 0x51, 0xD5, 0xE0, 0x54, 0x7F, 0xFD, 0x64, 0x2C, 0x70, 0x18, 0xEE, 0x54, 0x03, 0xFE, \r
+0xEC, 0xD3, 0x9E, 0x50, 0x0F, 0xEC, 0x60, 0x0C, 0x1C, 0xEC, 0xB1, 0x5F, 0xEF, 0x12, 0x4E, 0x2E, \r
+0x54, 0xF3, 0x4E, 0xF0, 0xED, 0xD3, 0x9B, 0x40, 0x02, 0xAD, 0x03, 0x51, 0xD5, 0xE0, 0x54, 0x80, \r
+0x42, 0x05, 0x8C, 0x6A, 0xE4, 0xFB, 0x02, 0x76, 0x59, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, \r
+0x07, 0x08, 0x22, 0x7D, 0x01, 0xAF, 0x51, 0xAA, 0x07, 0xAB, 0x05, 0x75, 0xF0, 0x10, 0xEA, 0x12, \r
+0x75, 0x8E, 0xE0, 0xF5, 0x5D, 0x54, 0x7F, 0xF5, 0x5F, 0x75, 0xF0, 0x04, 0xEA, 0xB1, 0x59, 0xE0, \r
+0x90, 0xA1, 0xDC, 0xF0, 0x75, 0xF0, 0x04, 0xEA, 0x12, 0x4F, 0xFD, 0xE0, 0xFF, 0x75, 0xF0, 0x04, \r
+0xEA, 0x12, 0x4E, 0x2E, 0x13, 0x13, 0x54, 0x03, 0xF5, 0x5E, 0xE5, 0x5F, 0x12, 0xBB, 0x13, 0xE4, \r
+0x93, 0xFC, 0x74, 0x01, 0x93, 0xFD, 0xEA, 0x91, 0x73, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, \r
+0x75, 0xF0, 0x04, 0xEA, 0x12, 0x4E, 0x2E, 0xFE, 0xC4, 0x54, 0x03, 0x90, 0xA1, 0xDA, 0xF0, 0x74, \r
+0x91, 0x2A, 0x51, 0xD8, 0xE5, 0x5F, 0xF0, 0x74, 0x91, 0x2A, 0xB1, 0x42, 0xE5, 0x5E, 0xF0, 0xE5, \r
+0x5F, 0xD3, 0x9F, 0x40, 0x04, 0x8F, 0x5F, 0x8F, 0x5D, 0xEB, 0x70, 0x02, 0x81, 0x66, 0xAF, 0x03, \r
+0x8F, 0x60, 0xE5, 0x5D, 0x30, 0xE7, 0x05, 0x85, 0x5F, 0x5D, 0x15, 0x60, 0xE5, 0x60, 0x70, 0x02, \r
+0x81, 0x66, 0xE5, 0x5F, 0x64, 0x2C, 0x70, 0x26, 0xE5, 0x5E, 0xD3, 0x94, 0x00, 0x40, 0x1F, 0xE5, \r
+0x5E, 0xD3, 0x94, 0x02, 0x50, 0x18, 0x15, 0x5E, 0xE5, 0x5E, 0x54, 0x03, 0x25, 0xE0, 0x25, 0xE0, \r
+0xFF, 0x75, 0xF0, 0x04, 0xEA, 0x12, 0x4E, 0x2E, 0x54, 0xF3, 0x4F, 0xF0, 0x15, 0x60, 0xE5, 0x60, \r
+0x60, 0x74, 0x90, 0xA1, 0xDC, 0xE0, 0xFF, 0xE5, 0x5F, 0xD3, 0x9F, 0x40, 0x63, 0xE4, 0x90, 0xA1, \r
+0xDB, 0xF0, 0x85, 0x5F, 0x5D, 0xAD, 0x5D, 0xE5, 0x5F, 0x14, 0xFC, 0x90, 0xA1, 0xDC, 0xE0, 0xFF, \r
+0xEC, 0xC3, 0x9F, 0x40, 0x45, 0xEC, 0xB1, 0x4A, 0xEA, 0x12, 0x7A, 0x4C, 0xE0, 0xF5, 0x82, 0x75, \r
+0x83, 0x00, 0xEC, 0x54, 0x07, 0x71, 0x2A, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, \r
+0xFF, 0xEE, 0x55, 0x83, 0xFE, 0xEF, 0x55, 0x82, 0x4E, 0x60, 0x1C, 0xE5, 0x5F, 0xAD, 0x04, 0xB4, \r
+0x14, 0x02, 0x7D, 0x0C, 0x90, 0xA1, 0xDB, 0xE0, 0x04, 0xF0, 0xE0, 0x65, 0x60, 0x60, 0x0B, 0xA3, \r
+0xE0, 0xFF, 0xED, 0xD3, 0x9F, 0x40, 0x03, 0x1C, 0x80, 0xB1, 0xAF, 0x05, 0x8F, 0x5D, 0x80, 0x06, \r
+0x90, 0xA1, 0xDC, 0xE0, 0xF5, 0x5D, 0xAF, 0x02, 0x85, 0x5E, 0x6A, 0xE4, 0xFB, 0xAD, 0x5D, 0x02, \r
+0x76, 0x59, 0xE0, 0x25, 0xE0, 0x24, 0x91, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0x22, 0x90, 0xA1, 0xDA, \r
+0xF1, 0xC0, 0x90, 0xA1, 0xDC, 0xE0, 0x12, 0xBB, 0x65, 0x90, 0xA1, 0xE1, 0x12, 0x45, 0x9F, 0x90, \r
+0xA1, 0xDD, 0xE0, 0x12, 0xBB, 0x22, 0xA3, 0x12, 0x45, 0x9F, 0xB1, 0x3A, 0xFF, 0x12, 0xB3, 0xA1, \r
+0x8F, 0x61, 0xA3, 0x91, 0x72, 0xF5, 0x83, 0xE0, 0xF5, 0x5D, 0xA3, 0xE0, 0xF5, 0x5E, 0xE4, 0xF5, \r
+0x62, 0x90, 0xA1, 0xE1, 0x12, 0x45, 0x96, 0x75, 0xF0, 0x02, 0xE5, 0x62, 0x12, 0xBA, 0xF7, 0xA8, \r
+0x61, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0xA1, 0xDE, 0x12, \r
+0x45, 0x96, 0x85, 0x62, 0x82, 0xB1, 0x72, 0x12, 0xBD, 0x02, 0x25, 0x5E, 0xF5, 0x5E, 0xEE, 0x35, \r
+0x5D, 0xF5, 0x5D, 0x05, 0x62, 0xE5, 0x62, 0xB4, 0x05, 0xC7, 0x90, 0xA1, 0xDE, 0x12, 0x45, 0x96, \r
+0x12, 0x6D, 0x4E, 0xFD, 0x7C, 0x00, 0xB1, 0x3A, 0xA8, 0x61, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, \r
+0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x12, 0x07, 0x03, 0x8E, 0x5F, 0x8F, 0x60, 0xD3, 0xE5, 0x5E, 0x95, \r
+0x60, 0xE5, 0x5D, 0x95, 0x5F, 0x40, 0x0C, 0xE5, 0x5E, 0x95, 0x60, 0xFF, 0xE5, 0x5D, 0x95, 0x5F, \r
+0xFE, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x00, 0x8E, 0x5D, 0x8F, 0x5E, 0x90, 0xA1, 0xDC, 0x91, 0x72, \r
+0xF5, 0x83, 0xE5, 0x5D, 0xF0, 0xA3, 0xE5, 0x5E, 0xF0, 0x22, 0x90, 0xA1, 0xDA, 0xE0, 0xFE, 0xA3, \r
+0xE0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x9B, 0xF5, 0x83, 0x22, 0x13, 0x13, 0x13, 0x54, 0x1F, 0xFF, \r
+0x75, 0xF0, 0x08, 0x22, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0x90, 0x96, 0x12, 0x02, 0x45, 0x8A, 0x54, \r
+0x03, 0x25, 0xE0, 0x25, 0xE0, 0xFE, 0x75, 0xF0, 0x04, 0x22, 0x90, 0xA2, 0xEF, 0x12, 0x45, 0x96, \r
+0x8E, 0x82, 0x75, 0x83, 0x00, 0x02, 0x06, 0xA2, 0x90, 0xA2, 0xEF, 0x12, 0x45, 0x9F, 0xE4, 0xFE, \r
+0x90, 0xFD, 0x50, 0xEF, 0xF0, 0x64, 0x30, 0x60, 0x23, 0xA3, 0xED, 0xF0, 0xEE, 0xC3, 0x9D, 0x50, \r
+0x0C, 0xB1, 0x6A, 0xFF, 0x74, 0x52, 0xB1, 0xC5, 0xEF, 0xF0, 0x0E, 0x80, 0xEF, 0xEE, 0xC3, 0x94, \r
+0x06, 0x50, 0x1B, 0x74, 0x52, 0xB1, 0xC5, 0xE4, 0xF0, 0x0E, 0x80, 0xF1, 0xEE, 0xC3, 0x94, 0x07, \r
+0x50, 0x0C, 0xB1, 0x6A, 0xFF, 0x74, 0x51, 0xB1, 0xC5, 0xEF, 0xF0, 0x0E, 0x80, 0xEE, 0x90, 0xFD, \r
+0x58, 0x74, 0x01, 0xF0, 0x22, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0x22, 0x90, 0xA1, \r
+0xCF, 0x12, 0x45, 0x9F, 0x90, 0x04, 0x24, 0xE0, 0xF5, 0x51, 0xE4, 0xFF, 0x12, 0x6D, 0x5A, 0x8F, \r
+0x82, 0xB1, 0x72, 0x25, 0x51, 0xFE, 0xF1, 0xD4, 0x12, 0x45, 0x8A, 0xEE, 0xF0, 0x8F, 0x82, 0xB1, \r
+0x72, 0x25, 0x51, 0xFE, 0x75, 0xF0, 0x0B, 0xEF, 0x90, 0xA0, 0xE4, 0x12, 0x45, 0x8A, 0xEE, 0xF0, \r
+0x0F, 0xEF, 0xB4, 0x03, 0xD7, 0x22, 0x8F, 0x54, 0x90, 0xA1, 0xCF, 0x74, 0x0E, 0xF0, 0xED, 0x24, \r
+0xFE, 0x60, 0x6D, 0x04, 0x60, 0x02, 0xE1, 0x04, 0xF1, 0xB6, 0x74, 0x0C, 0xF0, 0x74, 0x11, 0x25, \r
+0x54, 0x12, 0x4C, 0xED, 0xE0, 0x90, 0xA1, 0xD2, 0xF0, 0x75, 0xF0, 0x04, 0xE5, 0x54, 0x12, 0x4E, \r
+0x2E, 0xFD, 0x13, 0x13, 0x54, 0x03, 0x90, 0xA1, 0xD3, 0xF0, 0xED, 0x12, 0x4F, 0xD2, 0xA3, 0xF0, \r
+0x75, 0xF0, 0x04, 0xE5, 0x54, 0x12, 0x4E, 0x2E, 0xFF, 0xC4, 0x54, 0x03, 0x90, 0xA1, 0xD5, 0xF0, \r
+0x75, 0xF0, 0x04, 0xE5, 0x54, 0x12, 0x4F, 0xFD, 0xE0, 0x90, 0xA1, 0xD6, 0xF0, 0x75, 0xF0, 0x04, \r
+0xE5, 0x54, 0xB1, 0x59, 0xE0, 0x90, 0xA1, 0xD7, 0xF0, 0x75, 0xF0, 0x04, 0xE5, 0x54, 0x12, 0x4F, \r
+0x86, 0xFD, 0xC4, 0x13, 0x54, 0x01, 0x90, 0xA1, 0xD8, 0xF0, 0xED, 0x54, 0x1F, 0xA3, 0xE1, 0x00, \r
+0xF1, 0xB6, 0x74, 0x0D, 0xF0, 0x75, 0xF0, 0x08, 0xE5, 0x54, 0x90, 0x89, 0x00, 0x12, 0x45, 0x8A, \r
+0xE0, 0x90, 0xA1, 0xD2, 0xF0, 0x75, 0xF0, 0x08, 0xE5, 0x54, 0x90, 0x89, 0x01, 0x12, 0x45, 0x8A, \r
+0xE0, 0x90, 0xA1, 0xD3, 0xF0, 0x75, 0xF0, 0x08, 0xE5, 0x54, 0x90, 0x89, 0x02, 0x12, 0x45, 0x8A, \r
+0xE0, 0x90, 0xA1, 0xD4, 0xF0, 0x75, 0xF0, 0x08, 0xE5, 0x54, 0x90, 0x89, 0x03, 0x12, 0x45, 0x8A, \r
+0xE0, 0x90, 0xA1, 0xD5, 0xF0, 0x75, 0xF0, 0x08, 0xE5, 0x54, 0x90, 0x89, 0x04, 0x12, 0x45, 0x8A, \r
+0xE0, 0x90, 0xA1, 0xD6, 0xF0, 0x75, 0xF0, 0x08, 0xE5, 0x54, 0x90, 0x89, 0x05, 0x12, 0x45, 0x8A, \r
+0xE0, 0x90, 0xA1, 0xD7, 0xF0, 0x75, 0xF0, 0x08, 0xE5, 0x54, 0x90, 0x89, 0x06, 0x12, 0x45, 0x8A, \r
+0xE0, 0x90, 0xA1, 0xD8, 0xF0, 0x75, 0xF0, 0x08, 0xE5, 0x54, 0x12, 0xBC, 0xFA, 0x90, 0xA1, 0xD9, \r
+0xF1, 0x05, 0xF1, 0xDC, 0x22, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0xCF, 0x22, 0xF1, 0x06, 0x7F, \r
+0xF5, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x06, 0x90, 0xA1, 0xCF, 0xE0, 0xA3, 0xF0, 0xF1, \r
+0x06, 0x7F, 0xF6, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0xA1, 0xCF, 0xE0, 0x90, \r
+0xA1, 0xD1, 0xF0, 0xF1, 0x06, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, \r
+0xA1, 0xCF, 0xE0, 0x90, 0xA1, 0xD2, 0xF0, 0xF1, 0x06, 0x7F, 0xF3, 0x7E, 0x01, 0x12, 0x34, 0xC1, \r
+0xBF, 0x01, 0x08, 0x90, 0xA1, 0xCF, 0xE0, 0x90, 0xA1, 0xD3, 0xF0, 0xF1, 0x06, 0x7F, 0xF2, 0x7E, \r
+0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0xA1, 0xCF, 0xE0, 0x90, 0xA1, 0xD4, 0xF0, 0x90, \r
+0xA1, 0xD0, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0xA1, 0xD8, 0xF0, \r
+0x90, 0xA1, 0xD4, 0xE0, 0x90, 0xA1, 0xD9, 0xF0, 0x90, 0xA1, 0xDA, 0x74, 0x12, 0xF0, 0x90, 0xA1, \r
+0xE8, 0x74, 0x05, 0xF0, 0x90, 0xA1, 0xDC, 0xF1, 0xC3, 0x90, 0xA1, 0xD8, 0xE0, 0x90, 0xA1, 0xDF, \r
+0xF0, 0x90, 0xA1, 0xD9, 0xE0, 0x90, 0xA1, 0xE0, 0xF0, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0xDA, 0x12, \r
+0x5B, 0x9B, 0x7F, 0x04, 0x80, 0x2B, 0x90, 0xA1, 0xDD, 0x74, 0x09, 0xF0, 0x90, 0xA1, 0xD1, 0x22, \r
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x22, 0xE4, 0x93, 0xFE, 0x74, \r
+0x01, 0x93, 0xFF, 0x22, 0x75, 0xF0, 0x0E, 0xEF, 0x90, 0xA0, 0xBD, 0x22, 0x12, 0x5B, 0x9B, 0x7F, \r
+0x04, 0x90, 0xA3, 0x10, 0xEF, 0xF0, 0x7F, 0x02, 0x12, 0x44, 0xB7, 0x90, 0x9E, 0x92, 0xE0, 0xFF, \r
+0x90, 0xA3, 0x10, 0xE0, 0xFE, 0xEF, 0x4E, 0x90, 0x9E, 0x92, 0xF0, 0x22, 0xE4, 0x7B, 0x01, 0x7A, \r
+0xA0, 0x79, 0x96, 0x11, 0x22, 0xB4, 0x02, 0x19, 0x90, 0xA2, 0xEC, 0xE0, 0x64, 0x04, 0x60, 0x0C, \r
+0x7F, 0x40, 0x12, 0x97, 0xE1, 0x90, 0xA2, 0xEC, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0xA2, 0xEC, \r
+0xF0, 0x22, 0x7D, 0x03, 0x7F, 0x11, 0x12, 0x58, 0xB1, 0xEF, 0x22, 0x90, 0xA2, 0x09, 0x74, 0x08, \r
+0xF0, 0x90, 0xA2, 0x17, 0x74, 0x01, 0xF0, 0x90, 0xA2, 0x0B, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0xA2, \r
+0x79, 0x09, 0x02, 0x5B, 0x9B, 0x90, 0xA1, 0xCF, 0x74, 0x0A, 0xF0, 0x90, 0xA1, 0xDD, 0x74, 0x06, \r
+0xF0, 0x12, 0x06, 0x89, 0x90, 0xA1, 0xD1, 0x12, 0x4F, 0x8E, 0x90, 0xA1, 0xD2, 0x12, 0x4F, 0xA4, \r
+0x90, 0xA1, 0xD3, 0xF0, 0x12, 0x4C, 0x34, 0x90, 0xA1, 0xD4, 0x12, 0x4C, 0xE1, 0x90, 0xA1, 0xD5, \r
+0x12, 0x6D, 0x4D, 0x90, 0xA1, 0xD6, 0x12, 0x97, 0x05, 0x02, 0x5B, 0x9B, 0x12, 0x06, 0x89, 0xF5, \r
+0x51, 0x12, 0x4F, 0x8F, 0xF5, 0x54, 0x12, 0x4F, 0xA5, 0xF5, 0x55, 0x12, 0x4C, 0x34, 0xF5, 0x56, \r
+0x12, 0x4C, 0xE2, 0xF5, 0x57, 0x12, 0x6D, 0x4E, 0xF5, 0x58, 0x12, 0x5F, 0xC6, 0xF5, 0x59, 0xE5, \r
+0x51, 0x12, 0x45, 0xA8, 0x98, 0xBD, 0x00, 0x98, 0xC5, 0x01, 0x98, 0xCD, 0x02, 0x98, 0xD5, 0x03, \r
+0x98, 0xDD, 0x04, 0x98, 0xE5, 0x05, 0x98, 0xED, 0x06, 0x00, 0x00, 0x99, 0x04, 0x75, 0x52, 0x02, \r
+0x75, 0x53, 0x29, 0x80, 0x45, 0x75, 0x52, 0x06, 0x75, 0x53, 0x2A, 0x80, 0x3D, 0x75, 0x52, 0x01, \r
+0x75, 0x53, 0x31, 0x80, 0x35, 0x75, 0x52, 0x01, 0x75, 0x53, 0x32, 0x80, 0x2D, 0x75, 0x52, 0x06, \r
+0x75, 0x53, 0x33, 0x80, 0x25, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x54, 0x01, 0x45, 0x90, 0xA0, 0x8E, \r
+0xE5, 0x54, 0xF0, 0xA3, 0xE5, 0x55, 0xF0, 0xA3, 0xE5, 0x56, 0xF0, 0xA3, 0xE5, 0x57, 0xF0, 0xA3, \r
+0xE5, 0x58, 0xF0, 0x22, 0x75, 0x52, 0x01, 0x75, 0x53, 0xFF, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x54, \r
+0xAD, 0x52, 0xAF, 0x53, 0x02, 0x58, 0xB1, 0x90, 0xA2, 0x4C, 0x74, 0x0B, 0xF0, 0x90, 0xA2, 0x5A, \r
+0x74, 0x07, 0xF0, 0x90, 0xA2, 0x4E, 0xEF, 0xF0, 0x60, 0x32, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0xA2, \r
+0x4F, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0xA2, 0x50, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0xA2, \r
+0x51, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0xA2, 0x52, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0xA2, \r
+0x53, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0xA2, 0x54, 0xF0, 0x80, 0x0D, 0x90, 0xA2, 0x4F, 0xED, \r
+0xF0, 0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0x12, 0x60, 0x73, 0x7B, 0x01, 0x7A, 0xA2, 0x79, 0x4C, 0x02, \r
+0x5B, 0x9B, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x06, 0x89, 0x90, 0xA1, 0xCF, 0x12, \r
+0x4F, 0x8E, 0x90, 0xA1, 0xD0, 0x12, 0x4F, 0xA4, 0x90, 0xA1, 0xD1, 0xF0, 0x12, 0x4C, 0x34, 0x90, \r
+0xA1, 0xD2, 0x12, 0x4C, 0xE1, 0x90, 0xA1, 0xD3, 0x31, 0xF2, 0x90, 0xA0, 0x72, 0xE0, 0x44, 0x40, \r
+0xF0, 0x90, 0xA1, 0xD0, 0xE0, 0xB4, 0x0C, 0x06, 0xE5, 0x6E, 0x70, 0x0E, 0x80, 0x00, 0x12, 0x97, \r
+0x06, 0x7D, 0x07, 0x7F, 0x30, 0x12, 0x58, 0xB1, 0x8F, 0x51, 0x90, 0xA1, 0xD0, 0xE0, 0xB4, 0x0D, \r
+0x0E, 0xE5, 0x51, 0x64, 0x01, 0x60, 0x05, 0x75, 0x6E, 0x01, 0x80, 0x03, 0xE4, 0xF5, 0x6E, 0xE5, \r
+0x51, 0xB4, 0x01, 0x05, 0x75, 0x52, 0x01, 0x80, 0x03, 0xE4, 0xF5, 0x52, 0x90, 0xA1, 0xCF, 0xE0, \r
+0xFB, 0xAD, 0x52, 0xE4, 0xFF, 0x31, 0x17, 0x7F, 0x04, 0x12, 0x97, 0xE1, 0xD0, 0xD0, 0x92, 0xAF, \r
+0x22, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xD1, 0x4D, 0x90, 0xA0, 0x99, 0xE0, 0x54, \r
+0xFE, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x06, 0xFF, 0xEE, 0x54, 0xF9, 0x4F, 0xFF, 0xF0, 0x12, 0x06, \r
+0x89, 0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0xA0, 0x99, 0x12, 0x6B, 0x35, \r
+0xD1, 0xA8, 0x4E, 0x90, 0xA0, 0x99, 0x12, 0x4F, 0x8E, 0xFF, 0x54, 0x03, 0xFE, 0x90, 0xA0, 0x9A, \r
+0xE0, 0x54, 0xFC, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x04, 0xFF, 0xEE, 0x54, 0xFB, 0x4F, 0xFF, 0x12, \r
+0x4F, 0x8E, 0xFE, 0x54, 0x30, 0xFD, 0xEF, 0x54, 0xCF, 0x4D, 0xFF, 0x90, 0xA0, 0x9A, 0x51, 0xD8, \r
+0x4E, 0x12, 0x4F, 0xA4, 0x90, 0xA0, 0x9B, 0xF0, 0x12, 0x4C, 0x34, 0x90, 0xA0, 0x9C, 0x12, 0x4C, \r
+0xE1, 0x90, 0xA0, 0x9D, 0xF0, 0x90, 0xA0, 0x9B, 0x51, 0xCD, 0xEF, 0x78, 0x05, 0xCE, 0xC3, 0x13, \r
+0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0xA0, 0xA3, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA0, 0x9C, \r
+0x51, 0xCD, 0xEF, 0x78, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0xA0, 0xA5, \r
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA0, 0x9D, 0x51, 0xCD, 0x90, 0xA0, 0xA7, 0xEE, 0xF0, 0xA3, \r
+0xEF, 0xF0, 0x90, 0xA0, 0x99, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0xA0, 0x9E, 0x74, 0x01, 0xF0, 0xA3, \r
+0xF0, 0xA3, 0x31, 0xF2, 0x90, 0x07, 0x83, 0xE0, 0x44, 0x20, 0xF0, 0x22, 0xE4, 0x90, 0xA0, 0x9E, \r
+0x12, 0x60, 0x73, 0xA3, 0xF0, 0x90, 0x07, 0x83, 0xE0, 0x54, 0xDF, 0xF0, 0x22, 0xE0, 0xFF, 0x7E, \r
+0x00, 0x7C, 0x01, 0x7D, 0x40, 0x02, 0x07, 0x03, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0xEF, 0x54, 0xBF, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xC4, 0xEE, 0xF0, 0xA3, 0x31, 0xF1, \r
+0x90, 0xA2, 0xC4, 0xD1, 0xB8, 0xE0, 0x60, 0x24, 0xC3, 0x90, 0xA2, 0xC7, 0xE0, 0x94, 0xE8, 0x90, \r
+0xA2, 0xC6, 0xE0, 0x94, 0x03, 0x40, 0x0B, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x80, 0xF0, 0x7F, 0x00, \r
+0x80, 0x0C, 0x90, 0xA2, 0xC6, 0x12, 0x57, 0xDC, 0xD1, 0x46, 0x80, 0xD4, 0x7F, 0x01, 0xD0, 0xD0, \r
+0x92, 0xAF, 0x22, 0x90, 0xA2, 0xF8, 0x31, 0xF1, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, \r
+0x02, 0x7F, 0x01, 0x90, 0xA2, 0xF8, 0xE0, 0x6F, 0x60, 0x35, 0xC3, 0x90, 0xA2, 0xFA, 0xE0, 0x94, \r
+0x88, 0x90, 0xA2, 0xF9, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x10, 0xF0, \r
+0x22, 0x90, 0xA2, 0xF9, 0x12, 0x57, 0xDC, 0xB1, 0xD5, 0xD3, 0x90, 0xA2, 0xFA, 0xE0, 0x94, 0x32, \r
+0x90, 0xA2, 0xF9, 0xE0, 0x94, 0x00, 0x40, 0xC0, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE0, 0xB9, 0x22, \r
+0xF1, 0x1A, 0x7F, 0x08, 0x12, 0x46, 0xAB, 0xEF, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x46, 0x8D, \r
+0xE4, 0xFF, 0x71, 0x23, 0x12, 0x5C, 0x0B, 0xE4, 0xFD, 0x12, 0x46, 0xC8, 0x90, 0x9F, 0xD4, 0xE0, \r
+0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x02, 0xD1, 0xE4, 0x90, 0x9F, 0xD5, 0xE0, 0x54, 0xEF, 0xF0, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x71, 0xB1, 0x71, 0x70, 0xD0, 0xD0, 0x92, 0xAF, \r
+0x22, 0x90, 0x9F, 0xD5, 0xE0, 0x44, 0x10, 0xF0, 0x12, 0x5C, 0x0B, 0x7D, 0x01, 0x12, 0x46, 0xC8, \r
+0x90, 0x9F, 0xE4, 0xE0, 0xFD, 0x7F, 0x93, 0x12, 0x46, 0x8D, 0x90, 0x9F, 0xDA, 0xE0, 0x60, 0x12, \r
+0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x05, 0x74, 0x10, 0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, \r
+0x90, 0xF0, 0x7F, 0x08, 0x12, 0x46, 0xAB, 0xEF, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12, 0x46, 0x8D, \r
+0x7F, 0x01, 0x71, 0x23, 0x7F, 0x90, 0xD1, 0x9E, 0x7F, 0x90, 0x12, 0x46, 0x8D, 0x7F, 0x14, 0x7E, \r
+0x00, 0x02, 0x3E, 0x50, 0x90, 0x9F, 0xDC, 0xE0, 0xFF, 0x60, 0x03, 0xB4, 0x08, 0x07, 0xF1, 0x39, \r
+0xBF, 0x01, 0x02, 0x71, 0xA1, 0x22, 0x90, 0x9F, 0xD4, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x9F, 0xCF, \r
+0xE0, 0xFF, 0x30, 0xE0, 0x0E, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0xD1, 0xD7, 0xBF, 0x01, 0x06, 0x80, \r
+0x02, 0x80, 0x00, 0x91, 0x04, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xCC, \r
+0x12, 0x45, 0x9F, 0x7F, 0x96, 0x7E, 0x02, 0x51, 0xE1, 0xEF, 0x60, 0x4B, 0x90, 0x01, 0x17, 0xE0, \r
+0xFE, 0x90, 0x01, 0x16, 0xD1, 0xAF, 0xFE, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0xA2, \r
+0xCF, 0xEF, 0xF0, 0xEE, 0xFF, 0x90, 0xFD, 0x11, 0xF0, 0x90, 0xA2, 0xCF, 0xE0, 0xFD, 0x90, 0x02, \r
+0x94, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xA2, 0xCC, 0xB1, 0xCC, 0x24, 0x02, 0xFF, 0xE4, 0x33, 0xFE, \r
+0x91, 0x9C, 0x90, 0xA2, 0xCF, 0xE0, 0x24, 0x18, 0xFF, 0x90, 0xA2, 0xCC, 0x12, 0x45, 0x96, 0xB1, \r
+0x5A, 0x90, 0x02, 0x96, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFC, 0xED, 0x2C, \r
+0x24, 0x00, 0x91, 0xED, 0xE4, 0xF0, 0x0C, 0xEC, 0xB4, 0x18, 0xF3, 0x74, 0x00, 0x2D, 0x91, 0xED, \r
+0xEF, 0xF0, 0xEE, 0x54, 0x3F, 0xFF, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, \r
+0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, \r
+0x74, 0x03, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x0B, \r
+0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0xF5, 0x82, 0xE4, \r
+0x34, 0xFB, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFF, 0x90, 0x9F, \r
+0xB9, 0xE0, 0xFE, 0x90, 0x9F, 0xB8, 0xE0, 0xFD, 0xB5, 0x06, 0x04, 0x7E, 0x01, 0x80, 0x02, 0x7E, \r
+0x00, 0xEE, 0x64, 0x01, 0x60, 0x3F, 0xED, 0xD1, 0xCB, 0xFA, 0x7B, 0x01, 0x91, 0x36, 0x7F, 0x01, \r
+0xEF, 0x60, 0x32, 0x90, 0x9F, 0xB8, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0x80, 0x02, 0x7F, \r
+0x00, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x9F, 0xB8, 0xF0, 0x90, 0x9F, 0xB9, 0xE0, 0xFF, 0x90, 0x9F, \r
+0xB8, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x07, 0x90, 0x9E, \r
+0x92, 0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA2, 0xC8, 0xEF, 0xF0, 0xA3, \r
+0x12, 0x45, 0x9F, 0x90, 0xA2, 0xF4, 0xE0, 0xFE, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEE, 0x12, 0x06, \r
+0xE1, 0x74, 0x00, 0x2F, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, \r
+0x01, 0x90, 0xA2, 0xC9, 0x12, 0x45, 0x96, 0x8B, 0x40, 0x8A, 0x41, 0x89, 0x42, 0x75, 0x43, 0x02, \r
+0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x90, 0xA2, 0xC8, 0xE0, 0x24, 0x02, 0xF9, \r
+0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0xA3, 0x12, 0x45, 0x96, \r
+0xE9, 0x24, 0x02, 0xF9, 0xE4, 0x3A, 0x8B, 0x40, 0xF5, 0x41, 0x89, 0x42, 0x90, 0xA2, 0xC9, 0xB1, \r
+0xCC, 0xF5, 0x43, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x02, 0x35, 0x26, 0x12, 0x45, 0x96, 0x90, \r
+0x00, 0x0E, 0x02, 0x06, 0xA2, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0xE4, 0x90, 0xA1, 0xBF, \r
+0xF0, 0xA3, 0xF0, 0xD1, 0x2D, 0xEF, 0x64, 0x01, 0x60, 0x3C, 0xC3, 0x90, 0xA1, 0xC0, 0xE0, 0x94, \r
+0x88, 0x90, 0xA1, 0xBF, 0xE0, 0x94, 0x13, 0x40, 0x0F, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x10, 0xF0, \r
+0x90, 0x01, 0xC7, 0x74, 0xFD, 0xF0, 0x80, 0x1E, 0x90, 0xA1, 0xBF, 0x12, 0x57, 0xDC, 0xB1, 0xD5, \r
+0xD3, 0x90, 0xA1, 0xC0, 0xE0, 0x94, 0x32, 0x90, 0xA1, 0xBF, 0xE0, 0x94, 0x00, 0x40, 0xC4, 0x90, \r
+0x01, 0xC6, 0xE0, 0x30, 0xE3, 0xBD, 0x90, 0x01, 0xC7, 0x74, 0xFE, 0xF0, 0x22, 0x90, 0x01, 0x9A, \r
+0xE0, 0x54, 0xC0, 0x44, 0x0B, 0xD1, 0x45, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xC0, 0x7F, 0x00, 0xB4, \r
+0x40, 0x02, 0x7F, 0x01, 0x22, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0x12, 0x06, 0x89, \r
+0xFF, 0x54, 0x01, 0xFE, 0x22, 0xD1, 0x4D, 0x90, 0xA0, 0x3D, 0x12, 0x6D, 0x6E, 0x12, 0x4F, 0x8E, \r
+0x90, 0xA0, 0x3E, 0x12, 0x4F, 0xA4, 0x90, 0xA0, 0x3F, 0xF0, 0xD1, 0xC1, 0x90, 0xA0, 0x3D, 0xE0, \r
+0x54, 0x01, 0xFF, 0x02, 0x64, 0xC9, 0xD1, 0x4D, 0x90, 0xA0, 0x41, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, \r
+0xEF, 0x54, 0x02, 0xD1, 0x97, 0x90, 0x9F, 0xD4, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0xA0, 0x41, \r
+0xE0, 0x54, 0x01, 0xFF, 0x02, 0x60, 0x7B, 0x33, 0x33, 0x33, 0x54, 0xF8, 0xFF, 0x22, 0x12, 0x46, \r
+0xAB, 0xEF, 0x44, 0x01, 0xFD, 0x22, 0xF0, 0xEE, 0x54, 0x20, 0xFE, 0xEF, 0x54, 0xDF, 0x22, 0xE0, \r
+0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, \r
+0x22, 0x90, 0xA0, 0x3E, 0xE0, 0x14, 0x90, 0xA0, 0x40, 0xF0, 0x22, 0x75, 0xF0, 0x0F, 0xA4, 0x24, \r
+0x22, 0xF9, 0x74, 0x9F, 0x35, 0xF0, 0x22, 0x90, 0x9F, 0xD2, 0xE0, 0x64, 0x02, 0x7F, 0x01, 0x60, \r
+0x02, 0x7F, 0x00, 0x22, 0x90, 0xA0, 0x46, 0xE0, 0x90, 0x01, 0x30, 0xF0, 0x90, 0xA0, 0x43, 0xE0, \r
+0x90, 0x01, 0x39, 0xF0, 0x90, 0xA0, 0x44, 0xE0, 0x90, 0x01, 0x3A, 0xF0, 0x22, 0x90, 0x01, 0x01, \r
+0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0xD1, 0x45, 0x90, 0x01, 0x99, 0xE0, \r
+0x44, 0xC0, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x80, 0xF0, 0x22, 0x90, 0x01, 0xC4, 0x74, 0x1A, 0xF0, \r
+0x74, 0x9F, 0xA3, 0xF0, 0x7F, 0x90, 0x12, 0x46, 0xAB, 0xEF, 0x20, 0xE0, 0xF7, 0x74, 0x1A, 0x04, \r
+0x90, 0x01, 0xC4, 0xF0, 0x74, 0x9F, 0xA3, 0xF0, 0x22, 0x90, 0xA0, 0x3D, 0xE0, 0xC3, 0x13, 0x20, \r
+0xE0, 0x22, 0x90, 0x02, 0x87, 0xE0, 0x70, 0x26, 0x90, 0x01, 0x00, 0xE0, 0x64, 0x3F, 0x70, 0x1E, \r
+0x90, 0x02, 0x96, 0xE0, 0x70, 0x18, 0x90, 0x02, 0x86, 0xE0, 0x30, 0xE1, 0x11, 0x90, 0x02, 0x86, \r
+0xE0, 0x20, 0xE3, 0x0A, 0x90, 0xA0, 0x93, 0xE0, 0x20, 0xE0, 0x03, 0x7F, 0x01, 0x22, 0x7F, 0x00, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xA9, 0x07, 0x90, 0x05, 0x63, 0xE0, 0xFE, 0x90, \r
+0x05, 0x62, 0xD1, 0xAF, 0xAD, 0x07, 0xFC, 0x90, 0x05, 0x61, 0xE0, 0xFE, 0x90, 0x05, 0x60, 0xE0, \r
+0x7A, 0x00, 0x24, 0x00, 0xFF, 0xEA, 0x3E, 0xFE, 0x90, 0xA2, 0x79, 0x74, 0x17, 0xF0, 0x90, 0xA2, \r
+0x87, 0x74, 0x06, 0xF0, 0x90, 0xA2, 0x7B, 0xE9, 0x12, 0x51, 0x82, 0xF1, 0xD2, 0x90, 0xA2, 0x7C, \r
+0xF0, 0xAB, 0x07, 0xA3, 0xEB, 0xF0, 0xEE, 0xA3, 0xF0, 0xAF, 0x05, 0xA3, 0xEF, 0xF0, 0xAE, 0x04, \r
+0xEE, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0xA2, 0x79, 0x79, 0x12, 0x5B, 0x9B, 0xD0, 0xD0, 0x92, 0xAF, \r
+0x22, 0xE0, 0x75, 0xF0, 0x0B, 0x90, 0xA0, 0xDB, 0x12, 0x45, 0x8A, 0xE0, 0x22, 0x90, 0xA2, 0x01, \r
+0xEC, 0x12, 0x97, 0xC4, 0x90, 0xA2, 0x01, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x85, 0x2E, 0x90, \r
+0xA2, 0x01, 0xA3, 0xE0, 0xFF, 0xFD, 0x24, 0x0D, 0x12, 0x87, 0x83, 0x44, 0x80, 0xF0, 0x74, 0x0D, \r
+0x2D, 0x12, 0x87, 0x83, 0x54, 0xEF, 0x12, 0x87, 0x6C, 0xE0, 0x44, 0x02, 0x12, 0x87, 0x6C, 0xE0, \r
+0x54, 0x03, 0xF0, 0x90, 0xA2, 0x03, 0xE0, 0xFF, 0x90, 0xA2, 0x01, 0xA3, 0xE0, 0xFE, 0x24, 0x2A, \r
+0x11, 0x3B, 0x90, 0xA2, 0x04, 0xE0, 0xFF, 0x74, 0x2B, 0x2E, 0x11, 0x45, 0x74, 0x2C, 0x2E, 0xF5, \r
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x24, 0x02, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, \r
+0xF5, 0x83, 0xEF, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x90, \r
+0xA1, 0xFA, 0x12, 0x97, 0xC3, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x23, 0x90, 0x05, 0x22, 0xE0, 0x90, \r
+0xA1, 0xFF, 0xF0, 0x7D, 0x01, 0x12, 0x57, 0x51, 0xEF, 0x64, 0x01, 0x70, 0x05, 0x11, 0x8A, 0x12, \r
+0x9F, 0xDD, 0x90, 0xA1, 0xFF, 0xE0, 0xFF, 0x7D, 0x02, 0x12, 0x54, 0xC6, 0x80, 0x05, 0x11, 0x8A, \r
+0x12, 0x9F, 0xDD, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x9E, 0xCD, 0xE0, 0xFF, 0x90, \r
+0xA2, 0xD7, 0x74, 0x01, 0xF0, 0x7B, 0x08, 0xFD, 0x12, 0x86, 0x16, 0x90, 0xA1, 0xFD, 0xEE, 0xF0, \r
+0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0xA1, 0xFA, 0xE0, 0xFF, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, \r
+0xA2, 0x04, 0xF0, 0x22, 0x7E, 0x00, 0x7F, 0x0A, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA0, 0x79, 0x72, \r
+0x12, 0x08, 0xAA, 0x90, 0xA0, 0x5E, 0x74, 0x02, 0xF0, 0x22, 0xE4, 0xFF, 0x90, 0xA0, 0x4A, 0xE0, \r
+0x30, 0xE0, 0x3B, 0xA3, 0x12, 0x82, 0xB7, 0x90, 0xA0, 0x5D, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0xA0, \r
+0x52, 0xF0, 0x90, 0xA0, 0x5F, 0xF0, 0xA3, 0xF0, 0x90, 0xA0, 0x5C, 0x04, 0xF0, 0x90, 0xA0, 0x3C, \r
+0xE0, 0x60, 0x07, 0x7D, 0x05, 0x7F, 0x6F, 0x02, 0x54, 0xC6, 0x12, 0x66, 0x3A, 0x31, 0x0F, 0x54, \r
+0x07, 0x20, 0xE0, 0x0A, 0xEF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x02, 0x31, 0x17, 0x22, 0x90, \r
+0xA0, 0x4A, 0xE0, 0xFF, 0xC4, 0x13, 0x22, 0x90, 0xA0, 0x3B, 0xE0, 0xC4, 0x54, 0x0F, 0x20, 0xE0, \r
+0x26, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x20, 0x90, 0x9E, 0xCA, 0xE0, 0xFF, 0x90, 0xA2, 0xD7, 0x74, \r
+0x09, 0xF0, 0x7B, 0x18, 0xE4, 0xFD, 0x12, 0x86, 0x16, 0x90, 0xA3, 0x0D, 0xEE, 0xF0, 0xA3, 0xEF, \r
+0xF0, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0xE4, 0xFF, 0x12, 0x66, 0x8C, 0xBF, 0x01, 0x11, \r
+0x90, 0x9F, 0xD9, 0xE0, 0x60, 0x0B, 0x12, 0x6D, 0x67, 0x64, 0x02, 0x60, 0x02, 0x80, 0xB8, 0x31, \r
+0x62, 0x22, 0x51, 0x34, 0x90, 0x9F, 0xDC, 0xE0, 0x64, 0x0C, 0x60, 0x07, 0x51, 0x93, 0x12, 0x66, \r
+0x3A, 0x71, 0x71, 0x22, 0xE4, 0xF5, 0x63, 0x90, 0x06, 0xA9, 0xE0, 0xF5, 0x63, 0x54, 0xC0, 0x70, \r
+0x08, 0x31, 0xB9, 0x54, 0xFD, 0xF0, 0x02, 0x68, 0x4A, 0xE5, 0x63, 0x30, 0xE6, 0x17, 0x90, 0x9F, \r
+0xD9, 0xE0, 0x64, 0x01, 0x70, 0x11, 0x12, 0x6D, 0x60, 0x64, 0x02, 0x60, 0x04, 0x31, 0x17, 0x80, \r
+0x06, 0x31, 0x62, 0x80, 0x02, 0x31, 0xB9, 0xE5, 0x63, 0x90, 0x9F, 0xDD, 0x30, 0xE7, 0x05, 0x12, \r
+0x50, 0x03, 0x80, 0x78, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x9F, 0xDD, 0xE0, 0x54, 0xFE, 0xF0, \r
+0x22, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0xA1, 0xEB, 0xF0, 0xE0, 0xFD, 0x54, 0xC0, 0x70, 0x04, 0x31, \r
+0xB9, 0x80, 0x55, 0xED, 0x30, 0xE6, 0x3F, 0x90, 0x9F, 0xD9, 0xE0, 0x64, 0x02, 0x70, 0x28, 0x90, \r
+0x9F, 0xD4, 0xE0, 0xFF, 0xC3, 0x13, 0x20, 0xE0, 0x09, 0x90, 0x9F, 0xDD, 0xE0, 0x44, 0x01, 0xF0, \r
+0x80, 0x1C, 0x12, 0x6D, 0x67, 0x64, 0x01, 0x70, 0x1F, 0x90, 0x9F, 0xDD, 0xE0, 0x44, 0x04, 0xF0, \r
+0x7F, 0x01, 0x12, 0xBA, 0x58, 0x80, 0x11, 0x12, 0x6D, 0x60, 0x64, 0x02, 0x60, 0x04, 0x31, 0x17, \r
+0x80, 0x06, 0x31, 0x62, 0x80, 0x02, 0x31, 0xB9, 0x90, 0xA1, 0xEB, 0xE0, 0x90, 0x9F, 0xDD, 0x30, \r
+0xE7, 0x05, 0x12, 0x50, 0x03, 0x80, 0x05, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x9F, 0xD4, 0xE0, \r
+0x44, 0x04, 0xF0, 0x22, 0x90, 0x9F, 0xD4, 0x12, 0x89, 0xDA, 0x30, 0xE0, 0x05, 0x90, 0x01, 0x5B, \r
+0xE4, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE4, 0x90, \r
+0xA2, 0xAB, 0xF0, 0x90, 0xA0, 0x38, 0xE0, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0xA2, 0xAC, 0x71, 0x78, \r
+0x12, 0x50, 0x1B, 0x90, 0x9F, 0xD4, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0xA0, 0x4A, 0xE0, 0x20, \r
+0xE0, 0x20, 0x90, 0x9F, 0xD9, 0xE0, 0x64, 0x01, 0x70, 0x18, 0x12, 0x8E, 0x0B, 0x12, 0x6D, 0x67, \r
+0x60, 0x07, 0x51, 0x93, 0x12, 0x66, 0x3A, 0x80, 0xAB, 0x90, 0x9F, 0xDC, 0xE0, 0x70, 0x03, 0x12, \r
+0x62, 0x56, 0x22, 0xE4, 0xFD, 0x7F, 0x0C, 0x02, 0x62, 0x5A, 0x51, 0xB7, 0xEF, 0x70, 0x02, 0x51, \r
+0x6B, 0x22, 0x90, 0x9F, 0xD9, 0xE0, 0x64, 0x02, 0x60, 0x0C, 0x12, 0x6D, 0x67, 0x60, 0x07, 0x51, \r
+0xB7, 0xEF, 0x70, 0x02, 0x51, 0x94, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4, 0x60, 0x03, 0x7F, 0x00, \r
+0x22, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, \r
+0x12, 0x6B, 0x07, 0x30, 0xE0, 0x0B, 0x51, 0xE8, 0x60, 0x07, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x62, \r
+0x5A, 0x51, 0xE8, 0x60, 0x02, 0x51, 0xA2, 0x22, 0x90, 0x9F, 0xD3, 0xE0, 0x64, 0x02, 0x22, 0x90, \r
+0x9F, 0xD9, 0xE0, 0x70, 0x07, 0x90, 0x9F, 0xCF, 0xE0, 0x30, 0xE0, 0x11, 0x90, 0x9F, 0xCF, 0xE0, \r
+0x30, 0xE0, 0x08, 0x12, 0x6B, 0x1D, 0xBF, 0x01, 0x04, 0x80, 0x97, 0x51, 0x6B, 0x22, 0x90, 0x9F, \r
+0xCF, 0xE0, 0xFF, 0x30, 0xE0, 0x3F, 0x90, 0x9F, 0xD3, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02, 0x7E, \r
+0x01, 0x90, 0x9F, 0xD2, 0xE0, 0x7D, 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70, 0x25, \r
+0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x04, 0x71, 0xFC, 0x80, 0x1B, 0x51, 0xD0, 0x90, 0x9F, 0xD3, 0xE0, \r
+0xB4, 0x08, 0x06, 0xE4, 0xFD, 0x7F, 0x0C, 0x80, 0x09, 0x90, 0x9F, 0xD3, 0xE0, 0x70, 0x06, 0xFD, \r
+0x7F, 0x04, 0x12, 0x62, 0x5A, 0x90, 0xA0, 0xAE, 0xE0, 0xFF, 0x30, 0xE0, 0x13, 0xC3, 0x13, 0x54, \r
+0x07, 0x12, 0x77, 0xD5, 0xFE, 0x71, 0x99, 0xEE, 0x60, 0x03, 0xB4, 0x02, 0x03, 0x12, 0x50, 0x48, \r
+0x22, 0x7D, 0x08, 0xE4, 0xFF, 0x02, 0x85, 0x7C, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, \r
+0x22, 0xE4, 0xFF, 0x12, 0x66, 0x8C, 0xBF, 0x01, 0x0F, 0x90, 0x9F, 0xD9, 0xE0, 0x60, 0x09, 0x31, \r
+0xB9, 0x54, 0x07, 0x70, 0x03, 0x12, 0x68, 0x4A, 0x22, 0x12, 0x51, 0x83, 0x12, 0x52, 0x0F, 0x20, \r
+0xE0, 0x0C, 0xC3, 0x13, 0x30, 0xE0, 0x10, 0x90, 0xA0, 0xB0, 0x74, 0x05, 0xF0, 0x22, 0x12, 0x51, \r
+0x83, 0x12, 0x52, 0x0F, 0x44, 0x04, 0xF0, 0x22, 0x90, 0x9F, 0xCF, 0xE0, 0xFF, 0x30, 0xE0, 0x04, \r
+0x51, 0xE8, 0x60, 0x15, 0x90, 0x9F, 0xD9, 0xE0, 0x70, 0x04, 0xEF, 0x30, 0xE0, 0x0B, 0x90, 0x9F, \r
+0xDC, 0xE0, 0x64, 0x02, 0x60, 0x03, 0x12, 0x65, 0x16, 0x22, 0x90, 0x9F, 0xD9, 0xE0, 0x60, 0x11, \r
+0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x04, 0x51, 0x34, 0x80, 0x06, 0x12, 0x66, 0xB0, 0x12, 0x68, \r
+0x4A, 0x90, 0xA0, 0xB0, 0xE0, 0xB4, 0x01, 0x03, 0x12, 0x50, 0x48, 0x22, 0xD3, 0x10, 0xAF, 0x01, \r
+0xC3, 0xC0, 0xD0, 0x90, 0x9F, 0xCE, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x04, 0x80, 0x0C, 0x12, 0x6B, \r
+0x1D, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0x69, 0xE1, 0xD0, 0xD0, 0x92, \r
+0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xB1, 0x19, 0xFF, 0x90, 0x9F, 0xCE, 0xF0, \r
+0xBF, 0x01, 0x09, 0x12, 0x4F, 0x8F, 0x64, 0x01, 0x60, 0x1F, 0x80, 0x1B, 0xAB, 0x51, 0xAA, 0x52, \r
+0xA9, 0x53, 0x12, 0x4F, 0x8F, 0x64, 0x01, 0x60, 0x10, 0x90, 0x9F, 0xCF, 0xE0, 0x20, 0xE0, 0x07, \r
+0xE4, 0xFF, 0x12, 0x69, 0xE1, 0x80, 0x02, 0x71, 0xFC, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x9F, \r
+0xCF, 0xE0, 0xFF, 0x30, 0xE0, 0x40, 0x90, 0x9F, 0xD3, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02, 0x7E, \r
+0x01, 0x90, 0x9F, 0xD2, 0xE0, 0x7D, 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70, 0x26, \r
+0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x04, 0x71, 0xFC, 0x80, 0x1C, 0x91, 0xF4, 0x90, 0x9F, 0xD3, 0xE0, \r
+0xB4, 0x0C, 0x06, 0xE4, 0xFD, 0x7F, 0x08, 0x80, 0x0A, 0x90, 0x9F, 0xD3, 0xE0, 0xB4, 0x04, 0x06, \r
+0xE4, 0xFD, 0xFF, 0x12, 0x62, 0x5A, 0x90, 0xA0, 0xAE, 0xE0, 0x30, 0xE0, 0x46, 0x90, 0xA1, 0x34, \r
+0x12, 0x57, 0xDC, 0x12, 0x51, 0x83, 0x12, 0x77, 0xD5, 0x90, 0xA1, 0xF9, 0xF0, 0x90, 0xA0, 0xFE, \r
+0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1B, 0xEF, 0x54, 0xEF, 0xF0, 0xE0, 0xC4, 0x13, 0x54, \r
+0x07, 0x20, 0xE0, 0x1F, 0x12, 0x51, 0x83, 0x75, 0xF0, 0x0B, 0x12, 0x57, 0xCB, 0xEF, 0xF1, 0x0F, \r
+0x02, 0x50, 0x1B, 0x90, 0xA1, 0xF9, 0xE0, 0xB4, 0x03, 0x09, 0x90, 0xA0, 0xB0, 0x74, 0x05, 0xF0, \r
+0x12, 0x50, 0x48, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60, 0x1E, 0xF1, 0x1B, 0xF0, 0x90, 0x9F, 0xD4, \r
+0x12, 0x84, 0xC9, 0x30, 0xE0, 0x02, 0xE1, 0x3F, 0xF1, 0x6B, 0x40, 0x0C, 0xE4, 0xFF, 0x12, 0x66, \r
+0x8C, 0xBF, 0x01, 0x04, 0x12, 0x6C, 0x2D, 0xF0, 0x22, 0x8B, 0x51, 0x8A, 0x52, 0x89, 0x53, 0x02, \r
+0x06, 0x89, 0xB1, 0x19, 0xC4, 0x54, 0x0F, 0xFF, 0xBF, 0x0F, 0x1B, 0x90, 0xA0, 0xAD, 0xE0, 0x54, \r
+0xFE, 0xF0, 0x12, 0x66, 0x09, 0xAB, 0x51, 0xAA, 0x52, 0xA9, 0x53, 0x12, 0x06, 0x89, 0x54, 0x0F, \r
+0xFF, 0x12, 0x57, 0x2A, 0xE1, 0x4B, 0xAB, 0x51, 0xAA, 0x52, 0xA9, 0x53, 0x12, 0x4F, 0x8F, 0xFF, \r
+0x12, 0x06, 0x89, 0xFE, 0x54, 0x0F, 0x12, 0x57, 0xF9, 0xEF, 0x12, 0x4F, 0xA4, 0x54, 0x03, 0xFF, \r
+0xD1, 0xD9, 0x54, 0xFC, 0x12, 0x4F, 0xA3, 0x54, 0x1C, 0xFF, 0xEE, 0x54, 0x0F, 0xFE, 0x75, 0xF0, \r
+0x0E, 0xD1, 0xDD, 0x54, 0xE3, 0x12, 0x4F, 0xA3, 0x54, 0xE0, 0xFF, 0x75, 0xF0, 0x0E, 0xEE, 0xD1, \r
+0xDD, 0x54, 0x1F, 0x4F, 0x12, 0x4C, 0xE1, 0xD1, 0xE5, 0xE4, 0xFB, 0xD1, 0xD2, 0xA9, 0x53, 0x12, \r
+0x6D, 0x4E, 0xD1, 0xE5, 0x7B, 0x01, 0xD1, 0xD2, 0xA9, 0x53, 0x12, 0x4C, 0x34, 0x12, 0x9E, 0x97, \r
+0x12, 0x06, 0x89, 0xFE, 0x54, 0x0F, 0xFD, 0x75, 0xF0, 0x0E, 0x90, 0xA0, 0xBA, 0x12, 0x45, 0x8A, \r
+0xEF, 0xF0, 0x12, 0x4C, 0x34, 0xC4, 0xF1, 0x07, 0xED, 0x90, 0xA0, 0xBB, 0x12, 0x45, 0x8A, 0xEF, \r
+0xF0, 0xEE, 0xC4, 0x54, 0x0F, 0xFF, 0x14, 0x6D, 0x70, 0x21, 0x90, 0xA0, 0xAF, 0xEF, 0x12, 0x5F, \r
+0xC5, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0xA0, 0xAE, 0xE0, 0x54, 0x0F, 0x4F, 0xF0, 0x54, \r
+0xF1, 0xF0, 0x90, 0xA0, 0xAD, 0xE0, 0x44, 0x01, 0xF0, 0xF1, 0x00, 0x22, 0x8F, 0x54, 0x8D, 0x55, \r
+0xAE, 0x03, 0x74, 0x1F, 0xC3, 0x95, 0x54, 0x40, 0x0F, 0x90, 0xA1, 0xD3, 0xEE, 0xF0, 0xAB, 0x55, \r
+0xE4, 0xFD, 0xD1, 0xCA, 0x24, 0xD4, 0x80, 0x40, 0x74, 0x3F, 0xC3, 0x95, 0x54, 0x40, 0x0F, 0x90, \r
+0xA1, 0xD3, 0xEE, 0xF0, 0xAB, 0x55, 0x7D, 0x20, 0xD1, 0xC8, 0x24, 0x88, 0x80, 0x2A, 0x74, 0x5F, \r
+0xC3, 0x95, 0x54, 0x40, 0x0F, 0x90, 0xA1, 0xD3, 0xEE, 0xF0, 0xAB, 0x55, 0x7D, 0x40, 0xD1, 0xC8, \r
+0x24, 0xD0, 0x80, 0x14, 0x74, 0x7F, 0xC3, 0x95, 0x54, 0x40, 0x25, 0x90, 0xA1, 0xD3, 0xEE, 0xF0, \r
+0xAB, 0x55, 0x7D, 0x60, 0xD1, 0xC8, 0x24, 0x84, 0xFD, 0xE4, 0x34, 0x04, 0xFC, 0x75, 0xF0, 0x0E, \r
+0xE5, 0x55, 0xD1, 0xFA, 0x75, 0xF0, 0x03, 0xEE, 0x12, 0x45, 0x8A, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, \r
+0x22, 0xC3, 0xEF, 0x9D, 0xF5, 0x56, 0xC3, 0x94, 0x08, 0x50, 0x1C, 0xE4, 0xF5, 0x57, 0xD1, 0xED, \r
+0xC0, 0x83, 0xC0, 0x82, 0x90, 0xA1, 0xD3, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x03, 0x12, \r
+0x45, 0x8A, 0xE5, 0x56, 0xF0, 0x80, 0x3E, 0xE5, 0x56, 0xC3, 0x94, 0x10, 0x50, 0x09, 0x75, 0x57, \r
+0x01, 0xE5, 0x56, 0x24, 0xF8, 0x80, 0x17, 0xE5, 0x56, 0xC3, 0x94, 0x18, 0x50, 0x09, 0x75, 0x57, \r
+0x02, 0xE5, 0x56, 0x24, 0xF0, 0x80, 0x07, 0x75, 0x57, 0x03, 0xE5, 0x56, 0x24, 0xE8, 0xFF, 0xD1, \r
+0xED, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0xA1, 0xD3, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x03, \r
+0x12, 0x45, 0x8A, 0xEF, 0xF0, 0xAF, 0x57, 0x22, 0xAF, 0x54, 0xD1, 0x61, 0x90, 0xA1, 0xCF, 0xEF, \r
+0xF0, 0x22, 0xB1, 0xEC, 0xAB, 0x51, 0xAA, 0x52, 0x22, 0x75, 0xF0, 0x0E, 0xED, 0x90, 0xA0, 0xB2, \r
+0x12, 0x45, 0x8A, 0xE0, 0x22, 0xFF, 0x12, 0x06, 0x89, 0x54, 0x0F, 0xFD, 0x22, 0x75, 0xF0, 0x0E, \r
+0xEB, 0x90, 0xA0, 0xB5, 0x02, 0x45, 0x8A, 0x75, 0xF0, 0x0E, 0x90, 0xA0, 0xB3, 0x02, 0x45, 0x8A, \r
+0x7D, 0x20, 0xE4, 0xFF, 0x02, 0x66, 0x25, 0x13, 0x54, 0x07, 0xFF, 0x75, 0xF0, 0x0E, 0x22, 0xF0, \r
+0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x22, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, \r
+0x74, 0x02, 0x22, 0x12, 0x67, 0xA8, 0x70, 0x16, 0x90, 0x9F, 0xD9, 0xE0, 0x60, 0x10, 0xF1, 0x18, \r
+0xF0, 0x90, 0x9F, 0xD4, 0xE0, 0xF1, 0x40, 0x54, 0x07, 0x70, 0x03, 0x12, 0x68, 0x4A, 0x22, 0xEF, \r
+0x54, 0xFB, 0xF0, 0x90, 0x9F, 0xDD, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x7E, 0x00, 0x7F, 0x8D, 0x7D, \r
+0x00, 0x7B, 0x01, 0x7A, 0xA0, 0x79, 0xAD, 0x02, 0x08, 0xAA, 0x12, 0x67, 0xA8, 0x70, 0x0B, 0x90, \r
+0x9F, 0xD9, 0xE0, 0x60, 0x05, 0xF1, 0x18, 0x12, 0x50, 0x06, 0x22, 0x90, 0x9F, 0xE2, 0xE0, 0x04, \r
+0xF0, 0x90, 0x9F, 0xDD, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0xA0, 0x36, 0xE0, 0xFF, 0x90, 0x9F, 0xE2, \r
+0xE0, 0xD3, 0x9F, 0x22, 0x90, 0x9F, 0xCF, 0xE0, 0x30, 0xE0, 0x10, 0xA3, 0x74, 0x01, 0xF0, 0x90, \r
+0x9F, 0xCF, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x71, 0xFC, 0x12, 0x8E, 0xCD, 0x02, 0x80, \r
+0xE3, 0x90, 0xA0, 0xAD, 0xE0, 0x30, 0xE0, 0x20, 0xA3, 0xE0, 0xC3, 0xF1, 0x07, 0x12, 0x57, 0xF3, \r
+0xE0, 0xFE, 0x30, 0xE0, 0x13, 0x75, 0xF0, 0x0E, 0xEF, 0x12, 0x57, 0xF3, 0xEE, 0x54, 0xFE, 0x12, \r
+0x51, 0x7C, 0xFD, 0x7F, 0x02, 0x12, 0x53, 0x66, 0x22, 0x90, 0xA2, 0x0A, 0xEF, 0xF0, 0x90, 0xA0, \r
+0x8D, 0xE0, 0x70, 0x4F, 0x12, 0x5A, 0xE3, 0xEE, 0x54, 0x0F, 0xFE, 0xE4, 0xFD, 0xFC, 0x90, 0xA2, \r
+0x0B, 0x12, 0x08, 0x6D, 0xE4, 0x7F, 0x80, 0x12, 0xA8, 0x96, 0x70, 0x05, 0x90, 0xA0, 0x6B, 0x80, \r
+0x1C, 0xE4, 0xFF, 0xFE, 0x12, 0xA8, 0x98, 0x70, 0x0A, 0x90, 0xA0, 0x6B, 0x04, 0xF0, 0xE4, 0xA3, \r
+0xF0, 0x80, 0x4C, 0xE4, 0xFF, 0x11, 0x96, 0x70, 0x09, 0x90, 0xA0, 0x6B, 0x04, 0xF0, 0xA3, 0xF0, \r
+0x80, 0x3D, 0xE4, 0x7F, 0x80, 0xFE, 0x11, 0x98, 0x70, 0x35, 0x90, 0xA0, 0x6B, 0xF0, 0xA3, 0x04, \r
+0xF0, 0x80, 0x2C, 0x11, 0xAB, 0x54, 0x02, 0x11, 0xB4, 0x60, 0x08, 0x90, 0xA0, 0x6B, 0x74, 0x01, \r
+0xF0, 0x80, 0x05, 0xE4, 0x90, 0xA0, 0x6B, 0xF0, 0x7F, 0x30, 0x11, 0xAD, 0x54, 0x01, 0x11, 0xB4, \r
+0x60, 0x07, 0xE4, 0x90, 0xA0, 0x6C, 0xF0, 0x80, 0x06, 0x90, 0xA0, 0x6C, 0x74, 0x01, 0xF0, 0x90, \r
+0xA0, 0x65, 0xE0, 0x44, 0x01, 0xF0, 0x7D, 0x11, 0x7F, 0xFF, 0x12, 0x54, 0xC6, 0x12, 0x47, 0xEB, \r
+0x90, 0x07, 0x78, 0xE0, 0x90, 0xA0, 0x6A, 0xF0, 0x71, 0xD9, 0x12, 0x48, 0x62, 0x90, 0xA2, 0x0A, \r
+0xE0, 0xFD, 0x70, 0x02, 0x80, 0x1C, 0xED, 0xB4, 0x01, 0x06, 0x11, 0xA4, 0x44, 0x20, 0xF0, 0x22, \r
+0x90, 0xA2, 0x0A, 0xE0, 0xFD, 0xB4, 0x02, 0x06, 0x11, 0xA4, 0x44, 0x60, 0xF0, 0x22, 0xED, 0xB4, \r
+0x03, 0x03, 0x11, 0xA4, 0xF0, 0x22, 0x7E, 0x02, 0xFD, 0xFC, 0x90, 0xA2, 0x0B, 0x12, 0x45, 0x7E, \r
+0xC3, 0x02, 0x45, 0x61, 0x90, 0xA0, 0x65, 0xE0, 0x54, 0x1F, 0x22, 0x7F, 0x2C, 0x7E, 0x09, 0x12, \r
+0x37, 0x4E, 0xEF, 0x22, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x90, 0xA2, 0x0B, 0x12, 0x08, 0x6D, 0x90, \r
+0xA2, 0x0B, 0x12, 0x45, 0x72, 0xEC, 0x4D, 0x4E, 0x4F, 0x22, 0xE4, 0x90, 0xA1, 0xEB, 0xF0, 0xA3, \r
+0xF0, 0xA3, 0x12, 0x5D, 0x27, 0x12, 0x45, 0x54, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, \r
+0x90, 0x05, 0x62, 0x12, 0x5D, 0x41, 0x78, 0x10, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, \r
+0x01, 0xD0, 0x00, 0x12, 0x45, 0x54, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0x12, \r
+0x5D, 0x41, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, \r
+0x45, 0x54, 0x90, 0xA0, 0x28, 0x12, 0x08, 0x6D, 0x90, 0xA0, 0x2C, 0x12, 0x45, 0x72, 0x90, 0xA0, \r
+0x28, 0x11, 0x9D, 0x40, 0x3F, 0x90, 0x9F, 0xD4, 0xE0, 0x90, 0xA0, 0x2C, 0x30, 0xE0, 0x0F, 0x51, \r
+0x70, 0x90, 0x9F, 0xF6, 0xE0, 0x24, 0x04, 0x2F, 0xFF, 0x90, 0xA0, 0x30, 0x80, 0x05, 0x51, 0x70, \r
+0x90, 0xA0, 0x31, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0x90, 0xA1, 0xEC, 0xF0, 0x90, 0xA1, 0xEC, 0xE0, \r
+0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x0E, 0x74, 0xF7, 0x2F, 0x51, 0xB4, 0xE0, 0x04, 0xF0, 0x90, 0x9F, \r
+0xEF, 0xE0, 0x04, 0xF0, 0x90, 0x9F, 0xEF, 0xE0, 0xFF, 0xD3, 0x90, 0xA0, 0x33, 0xE0, 0x9F, 0x90, \r
+0xA0, 0x32, 0xE0, 0x94, 0x00, 0x40, 0x02, 0x41, 0x3C, 0x51, 0x4E, 0x51, 0x45, 0x50, 0x1C, 0x51, \r
+0x58, 0x90, 0xA1, 0xED, 0xE0, 0xD3, 0x9F, 0x40, 0x0A, 0x90, 0xA1, 0xEB, 0xE0, 0x90, 0xA1, 0xEE, \r
+0xF0, 0x80, 0x08, 0x90, 0xA1, 0xEB, 0xE0, 0x04, 0xF0, 0x80, 0xE0, 0x51, 0x4E, 0x51, 0x45, 0x50, \r
+0x2C, 0x51, 0x58, 0xC3, 0x90, 0xA0, 0x33, 0xE0, 0x9F, 0xFF, 0x90, 0xA0, 0x32, 0xE0, 0x94, 0x00, \r
+0xFE, 0x90, 0xA1, 0xED, 0xE0, 0xD3, 0x9F, 0xE4, 0x9E, 0x40, 0x0A, 0x90, 0xA1, 0xEB, 0xE0, 0x90, \r
+0xA1, 0xEF, 0xF0, 0x80, 0x08, 0x90, 0xA1, 0xEB, 0xE0, 0x04, 0xF0, 0x80, 0xD0, 0x90, 0xA1, 0xEE, \r
+0xE0, 0x90, 0x9F, 0xF4, 0xF0, 0x90, 0xA1, 0xEF, 0xE0, 0x90, 0x9F, 0xF5, 0x51, 0x3D, 0x94, 0x0A, \r
+0x40, 0x0A, 0xEF, 0x24, 0xF6, 0x90, 0x9F, 0xEC, 0xF0, 0xE4, 0x80, 0x09, 0xE4, 0x90, 0x9F, 0xEC, \r
+0x51, 0x3D, 0x74, 0x0A, 0x9F, 0x90, 0x9F, 0xEB, 0xF0, 0x90, 0x9F, 0xF4, 0xE0, 0xFF, 0xA3, 0xE0, \r
+0xC3, 0x9F, 0x90, 0x9F, 0xF2, 0xF0, 0x90, 0x9F, 0xD4, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0xA0, 0x30, \r
+0x80, 0x03, 0x90, 0xA0, 0x31, 0xE0, 0xFF, 0x90, 0x9F, 0xF2, 0xE0, 0x2F, 0x04, 0xF0, 0x90, 0x9F, \r
+0xF2, 0xE0, 0xC3, 0x94, 0x0A, 0x50, 0x03, 0x74, 0x0A, 0xF0, 0x90, 0x9F, 0xF2, 0xE0, 0x24, 0x02, \r
+0xF0, 0x71, 0xC0, 0x74, 0x03, 0xF0, 0x51, 0xBC, 0xE4, 0xFF, 0x51, 0x8D, 0x22, 0xF0, 0x90, 0x9F, \r
+0xF4, 0xE0, 0xFF, 0xC3, 0x22, 0x90, 0xA1, 0xEB, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x22, 0xE4, 0x90, \r
+0xA1, 0xED, 0xF0, 0x90, 0xA1, 0xEB, 0xF0, 0x22, 0x74, 0xF7, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x9F, \r
+0xF5, 0x83, 0xE0, 0xFF, 0x90, 0xA1, 0xED, 0xE0, 0x2F, 0xF0, 0x90, 0xA0, 0x34, 0xE0, 0xFF, 0x22, \r
+0x12, 0x45, 0x7E, 0x90, 0xA0, 0x28, 0x12, 0x45, 0x72, 0x12, 0x45, 0x39, 0x78, 0x0A, 0x12, 0x08, \r
+0x47, 0x90, 0x9F, 0xF1, 0xE0, 0xFE, 0xC3, 0x74, 0x0A, 0x9E, 0x2F, 0xFF, 0x22, 0xE4, 0xFE, 0x74, \r
+0xF7, 0x2E, 0x51, 0xB4, 0xE4, 0xF0, 0x0E, 0xEE, 0xB4, 0x2D, 0xF4, 0xE4, 0x90, 0x9F, 0xF0, 0xF0, \r
+0x90, 0x9F, 0xEF, 0xF0, 0x90, 0x9F, 0xF3, 0xF0, 0xEF, 0xB4, 0x01, 0x07, 0xA3, 0x74, 0x2D, 0xF0, \r
+0xE4, 0xA3, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x9F, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, \r
+0xC3, 0xC0, 0xD0, 0xAC, 0x07, 0x90, 0x9F, 0xD5, 0x12, 0x4F, 0xD1, 0x30, 0xE0, 0x02, 0x61, 0x75, \r
+0x90, 0x9F, 0xD4, 0xE0, 0x30, 0xE0, 0x16, 0x90, 0x9F, 0xF6, 0xE0, 0x24, 0x04, 0x90, 0x9F, 0xEE, \r
+0xF0, 0x90, 0x9F, 0xF6, 0xE0, 0x24, 0x03, 0x90, 0x9F, 0xED, 0xF0, 0x80, 0x0D, 0x90, 0x9F, 0xEE, \r
+0x74, 0x02, 0xF0, 0x90, 0x9F, 0xED, 0x14, 0xF0, 0x0B, 0x0B, 0x90, 0x9F, 0xED, 0xE0, 0xFA, 0x90, \r
+0x9F, 0xEC, 0xE0, 0xD3, 0x9A, 0x50, 0x0E, 0x90, 0x9F, 0xE1, 0xEB, 0xF0, 0x90, 0x9F, 0xEE, 0xE0, \r
+0xC3, 0x9D, 0x2C, 0x80, 0x11, 0xC3, 0xED, 0x9A, 0x2B, 0x90, 0x9F, 0xE1, 0xF0, 0x90, 0x9F, 0xED, \r
+0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F, 0x90, 0x9F, 0xF1, 0xF0, 0x90, 0x9F, 0xEE, 0xE0, 0xFF, 0x24, \r
+0x0A, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x9F, 0xF1, 0x71, 0x81, 0x40, 0x04, 0xEF, 0x24, 0x0A, 0xF0, \r
+0x90, 0x9F, 0xF1, 0xE0, 0xFF, 0x24, 0x23, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x9F, 0xE1, 0x71, 0x81, \r
+0x40, 0x04, 0xEF, 0x24, 0x23, 0xF0, 0x90, 0x9F, 0xF1, 0xE0, 0xFF, 0x7E, 0x00, 0x90, 0x9F, 0xE5, \r
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x05, 0x58, 0xE0, 0x6F, 0x70, 0x01, 0xE4, 0x60, 0x02, 0x71, \r
+0xE2, 0x71, 0xD1, 0x80, 0x07, 0x90, 0x9F, 0xD6, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, \r
+0x22, 0xE0, 0xD3, 0x9D, 0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x22, 0x71, 0xEC, 0x90, 0xA1, \r
+0xF9, 0xEF, 0xF0, 0x30, 0xE0, 0x05, 0x7D, 0x01, 0xE4, 0x80, 0x02, 0xE4, 0xFD, 0xFF, 0x12, 0x61, \r
+0xC6, 0x90, 0xA1, 0xF9, 0xE0, 0x30, 0xE6, 0x11, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x04, 0xE4, \r
+0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x80, 0xF0, 0x71, 0xC0, 0x74, 0x02, 0xF0, 0x41, 0xBC, \r
+0x90, 0x9F, 0xEB, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x90, 0x9F, 0xF2, 0xE0, 0xFB, 0x90, 0xA2, 0xE7, \r
+0x22, 0x90, 0x9F, 0xD6, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0x90, 0xA0, 0x8C, 0xE0, 0xFF, 0xE4, 0xFD, \r
+0x22, 0xF0, 0x90, 0x9F, 0xE5, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0xE4, 0x90, 0xA1, 0xFA, \r
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7F, 0x83, 0x12, 0x46, 0xAB, 0x90, 0xA1, 0xFA, 0xEF, 0xF0, 0x7F, \r
+0x83, 0x12, 0x46, 0xAB, 0xAE, 0x07, 0x90, 0xA1, 0xFA, 0xE0, 0xFF, 0xB5, 0x06, 0x01, 0x22, 0xC3, \r
+0x90, 0xA1, 0xFC, 0xE0, 0x94, 0x64, 0x90, 0xA1, 0xFB, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x01, \r
+0xC0, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0xA1, 0xFA, 0xE0, 0xFF, 0x22, 0x90, 0xA1, 0xFB, 0x12, 0x57, \r
+0xDC, 0x80, 0xC2, 0x90, 0xA0, 0x4D, 0x12, 0x5F, 0xDF, 0x20, 0xE0, 0x1E, 0x90, 0xFD, 0x62, 0xE0, \r
+0x30, 0xE0, 0x17, 0xE0, 0x90, 0xA2, 0x09, 0x30, 0xE1, 0x05, 0x74, 0x01, 0xF0, 0x80, 0x03, 0x74, \r
+0x02, 0xF0, 0x90, 0xA2, 0x09, 0xE0, 0xFF, 0x12, 0xA7, 0xC9, 0x22, 0x90, 0xA0, 0x65, 0xE0, 0x54, \r
+0xFE, 0xF0, 0x54, 0xE1, 0xF0, 0x90, 0xA0, 0x6A, 0xE0, 0xFF, 0x12, 0x88, 0x32, 0x90, 0xA0, 0x6B, \r
+0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x12, 0x48, 0x62, 0x90, 0x9F, 0xD9, 0xE0, 0x70, 0x0A, 0x90, 0xA0, \r
+0x3D, 0xE0, 0x20, 0xE0, 0x03, 0x12, 0x66, 0x38, 0x22, 0x12, 0x8B, 0xBC, 0x90, 0xA0, 0x65, 0xE0, \r
+0xFF, 0xC4, 0x13, 0x54, 0x07, 0xFE, 0xEF, 0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9E, 0x40, 0x02, 0x80, \r
+0xBA, 0x90, 0xA0, 0x65, 0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, \r
+0x04, 0x54, 0x0F, 0x25, 0xE0, 0x4F, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xF5, 0x51, 0x12, 0x06, \r
+0x89, 0x25, 0x51, 0x90, 0x9E, 0xC9, 0x12, 0x4F, 0x8E, 0x25, 0x51, 0x90, 0x9E, 0xCA, 0x12, 0x4F, \r
+0xA4, 0x25, 0x51, 0x90, 0x9E, 0xCB, 0xF0, 0x12, 0x4C, 0x34, 0x25, 0x51, 0x90, 0x9E, 0xCC, 0x12, \r
+0x4C, 0xE1, 0x25, 0x51, 0x90, 0x9E, 0xCD, 0x12, 0x6D, 0x4D, 0x25, 0x51, 0x90, 0x9E, 0xCE, 0x12, \r
+0x5F, 0xC5, 0x25, 0x51, 0x90, 0x9E, 0xCF, 0xF0, 0x22, 0x12, 0x06, 0x89, 0xFF, 0x90, 0x9F, 0xBC, \r
+0xF0, 0xBF, 0x01, 0x08, 0x12, 0x97, 0x0D, 0xE4, 0x90, 0x9F, 0xBC, 0xF0, 0x22, 0x12, 0x06, 0x89, \r
+0x54, 0x01, 0xFF, 0x90, 0xA1, 0x3B, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0x22, 0x12, 0x4F, 0xA5, 0xFF, \r
+0x30, 0xE0, 0x1F, 0x12, 0x06, 0x89, 0x90, 0xA0, 0x36, 0x12, 0x4F, 0x8E, 0x90, 0xA0, 0x37, 0xF0, \r
+0xEF, 0x54, 0xFE, 0xFF, 0xA3, 0xE0, 0x54, 0x01, 0x4F, 0xF0, 0x12, 0x4C, 0x34, 0x90, 0xA0, 0x39, \r
+0xF0, 0x22, 0x90, 0xA0, 0x36, 0x74, 0x02, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE0, 0x54, 0x01, \r
+0x44, 0x28, 0xF0, 0xA3, 0x74, 0x07, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x90, 0x9F, 0xE4, 0xF0, 0x22, \r
+0x12, 0x06, 0x89, 0x90, 0xA0, 0x3C, 0xF0, 0x60, 0x2C, 0x90, 0xA0, 0x4A, 0xE0, 0x20, 0xE0, 0x25, \r
+0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x62, 0x5A, 0x12, 0x8F, 0xD6, 0x13, 0x30, 0xE0, 0x17, 0xEF, 0x13, \r
+0x13, 0x13, 0x54, 0x1F, 0x20, 0xE0, 0x0E, 0xB1, 0x96, 0x30, 0xE0, 0x04, 0x7F, 0x0D, 0x80, 0x02, \r
+0x7F, 0x09, 0x12, 0x88, 0x32, 0x22, 0x90, 0xA0, 0x3B, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x22, 0x90, \r
+0xA0, 0x72, 0xE0, 0x44, 0x04, 0xF0, 0x7D, 0x01, 0x7F, 0x23, 0x12, 0x58, 0xB1, 0x8F, 0x51, 0xE5, \r
+0x51, 0xB4, 0x03, 0x0A, 0xE4, 0xFF, 0x12, 0x5B, 0x15, 0x7F, 0x04, 0x12, 0x97, 0xE1, 0x22, 0x90, \r
+0xA0, 0x72, 0xE0, 0x44, 0x10, 0xF0, 0x7D, 0x01, 0x7F, 0x1B, 0x12, 0x58, 0xB1, 0x90, 0xA1, 0xCF, \r
+0xEF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA0, 0x73, 0xE0, 0x44, 0x01, \r
+0xF0, 0x7D, 0x01, 0x7F, 0x28, 0xB1, 0xCA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA1, 0xCF, 0x12, \r
+0x45, 0x9F, 0x90, 0xA2, 0xF2, 0xE0, 0x70, 0x08, 0xD1, 0x40, 0x90, 0xA2, 0xF2, 0x74, 0x01, 0xF0, \r
+0x12, 0x6D, 0x5A, 0x12, 0x06, 0x89, 0xFF, 0xE4, 0x8F, 0x54, 0xF5, 0x53, 0xF5, 0x52, 0xF5, 0x51, \r
+0x90, 0xA0, 0x84, 0x12, 0x45, 0x72, 0xEC, 0x54, 0xC1, 0xFC, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, \r
+0xC0, 0x07, 0xAF, 0x54, 0xAE, 0x53, 0xAD, 0x52, 0xAC, 0x51, 0x78, 0x19, 0x12, 0x08, 0x5A, 0xD0, \r
+0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x54, 0x90, 0xA0, 0x80, 0x02, 0x08, 0x6D, \r
+0x7F, 0x80, 0x7E, 0x08, 0x12, 0x37, 0x4E, 0x90, 0xA0, 0x84, 0x02, 0x08, 0x6D, 0x12, 0x06, 0x89, \r
+0x90, 0xA0, 0x8C, 0x12, 0x4F, 0x8E, 0x90, 0xA0, 0x8D, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x54, 0x01, \r
+0xD1, 0xAA, 0x54, 0xFD, 0x4F, 0xF0, 0xE0, 0xC3, 0x13, 0xFF, 0x54, 0x01, 0x90, 0x01, 0xE6, 0xF0, \r
+0xA3, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x30, 0xE0, 0x29, 0x12, 0x58, 0x98, 0x64, 0x04, 0x70, 0x20, \r
+0x90, 0xA0, 0x93, 0xE0, 0x30, 0xE0, 0x02, 0x80, 0x19, 0x90, 0xFD, 0x62, 0xE0, 0xB4, 0xAD, 0x0E, \r
+0xA3, 0xE0, 0xB4, 0x35, 0x09, 0xD1, 0xA2, 0x90, 0x01, 0xE5, 0x74, 0xDF, 0xF0, 0x22, 0x80, 0x00, \r
+0x80, 0x41, 0x90, 0x01, 0xE7, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0x25, 0xE0, 0xFF, 0x90, 0xA0, 0x6F, \r
+0xE0, 0x22, 0x12, 0x06, 0x89, 0x54, 0x01, 0x25, 0xE0, 0xD1, 0xAA, 0x54, 0xFB, 0x4F, 0xF0, 0xE0, \r
+0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x02, 0x80, 0x12, 0x90, 0xA0, 0x93, 0xE0, 0x20, 0xE0, 0x02, \r
+0xD1, 0xD3, 0x22, 0x90, 0x07, 0x65, 0xE0, 0x54, 0xE7, 0xF0, 0x22, 0x90, 0x07, 0x65, 0xE0, 0x44, \r
+0x18, 0xF0, 0x22, 0x90, 0x01, 0xE7, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x54, 0x01, \r
+0xFF, 0x90, 0xA0, 0xAB, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0x30, 0xE0, 0x55, 0x90, 0x00, 0x40, 0xE0, \r
+0x54, 0xBF, 0x44, 0xA0, 0xFD, 0x7F, 0x40, 0x12, 0x46, 0x8D, 0x90, 0x00, 0x41, 0xE0, 0x44, 0x04, \r
+0xFD, 0x7F, 0x41, 0x12, 0x46, 0x8D, 0x90, 0x00, 0x6A, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x6A, 0x12, \r
+0x46, 0x8D, 0x90, 0x07, 0x6E, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0x12, 0xF0, 0x90, 0x07, 0x78, 0xE0, \r
+0x54, 0xF2, 0x44, 0x02, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x03, 0xF0, 0x90, 0x07, 0x65, 0xE0, \r
+0x54, 0xF5, 0xF0, 0x90, 0x05, 0x23, 0xE0, 0x54, 0x7F, 0xF0, 0xE4, 0xFD, 0x7F, 0x66, 0x12, 0x46, \r
+0x8D, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x9F, 0x21, 0xE0, 0xFF, 0x90, 0x9F, \r
+0x20, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x3A, 0x90, 0x9F, \r
+0x20, 0xE0, 0xFE, 0xF1, 0xAD, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0xD1, 0xF9, 0x74, \r
+0x9E, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xAF, 0x05, 0x12, 0x6D, 0xA7, 0x90, 0x9F, 0x20, 0x12, 0x7F, \r
+0xE0, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x9F, 0x20, 0xF0, 0x12, 0x7D, \r
+0x4B, 0x90, 0x9E, 0x92, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0xF0, 0x08, \r
+0x90, 0x9E, 0xD0, 0x02, 0x45, 0x8A, 0xE4, 0x90, 0x9F, 0xB8, 0xF0, 0xA3, 0xF0, 0x90, 0x9F, 0x20, \r
+0xF0, 0xA3, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA3, 0x01, 0xEF, 0xF0, \r
+0xA3, 0xED, 0xF0, 0x7D, 0x44, 0x12, 0x57, 0xC5, 0x90, 0xA3, 0x02, 0xE0, 0x90, 0xA3, 0x01, 0xB4, \r
+0x01, 0x0D, 0xE0, 0x75, 0xF0, 0x10, 0x12, 0x75, 0x67, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x0B, 0xE0, \r
+0x75, 0xF0, 0x10, 0x12, 0x75, 0x67, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x66, 0x3A, 0xD0, 0xD0, 0x92, \r
+0xAF, 0x22, 0xE4, 0xFD, 0x80, 0xBE, 0x7D, 0x01, 0x80, 0xBA, 0x90, 0xA2, 0xF5, 0x12, 0x45, 0x9F, \r
+0xE4, 0xFF, 0x90, 0xA2, 0xF5, 0x12, 0x45, 0x96, 0x8F, 0x82, 0x12, 0x95, 0x72, 0xFE, 0x74, 0xF0, \r
+0x2F, 0x11, 0x2B, 0xEE, 0xF0, 0x0F, 0xEF, 0xB4, 0x10, 0xE8, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x02, \r
+0xF5, 0x83, 0x22, 0x90, 0x00, 0xF1, 0xE0, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFF, 0x22, 0x90, 0x01, \r
+0x30, 0x12, 0x60, 0x72, 0x90, 0x01, 0x38, 0x12, 0x60, 0x73, 0xFD, 0x7F, 0x50, 0x12, 0x46, 0x8D, \r
+0xE4, 0xFD, 0x7F, 0x51, 0x12, 0x46, 0x8D, 0xE4, 0xFD, 0x7F, 0x52, 0x12, 0x46, 0x8D, 0xE4, 0xFD, \r
+0x7F, 0x53, 0x02, 0x46, 0x8D, 0x11, 0x3E, 0x11, 0xD7, 0x11, 0x93, 0x11, 0xB2, 0xE4, 0xF5, 0x0D, \r
+0xF5, 0x0E, 0xF5, 0x0F, 0x75, 0x10, 0x80, 0xAD, 0x0D, 0x7F, 0x50, 0x12, 0x46, 0x8D, 0xAD, 0x0E, \r
+0x7F, 0x51, 0x12, 0x46, 0x8D, 0xAD, 0x0F, 0x7F, 0x52, 0x12, 0x46, 0x8D, 0xAD, 0x10, 0x7F, 0x53, \r
+0x02, 0x46, 0x8D, 0x75, 0x15, 0x12, 0xE4, 0xF5, 0x16, 0x75, 0x17, 0x07, 0x75, 0x18, 0x32, 0x90, \r
+0x01, 0x30, 0xE5, 0x15, 0xF0, 0xA3, 0xE5, 0x16, 0xF0, 0xA3, 0xE5, 0x17, 0xF0, 0xA3, 0xE5, 0x18, \r
+0xF0, 0x22, 0x75, 0x1D, 0x06, 0x75, 0x1E, 0x01, 0x75, 0x1F, 0x03, 0x75, 0x20, 0x62, 0x43, 0x20, \r
+0x80, 0x43, 0x1F, 0x04, 0x90, 0x01, 0x38, 0xE5, 0x1D, 0xF0, 0xA3, 0xE5, 0x1E, 0xF0, 0xA3, 0xE5, \r
+0x1F, 0xF0, 0xA3, 0xE5, 0x20, 0xF0, 0x22, 0x90, 0x01, 0x34, 0x74, 0xFF, 0x12, 0x60, 0x73, 0x90, \r
+0x01, 0x3C, 0x12, 0x60, 0x73, 0xFD, 0x7F, 0x54, 0x12, 0x46, 0x8D, 0x7D, 0xFF, 0x7F, 0x55, 0x12, \r
+0x46, 0x8D, 0x7D, 0xFF, 0x7F, 0x56, 0x12, 0x46, 0x8D, 0x7D, 0xFF, 0x7F, 0x57, 0x02, 0x46, 0x8D, \r
+0x90, 0x01, 0xCF, 0xE0, 0x90, 0xA1, 0xE9, 0xF0, 0xE0, 0xFF, 0x30, 0xE0, 0x07, 0x90, 0x01, 0xCF, \r
+0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x30, 0xE5, 0x22, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xDF, 0xF0, 0x90, \r
+0x01, 0x34, 0x74, 0x20, 0xF0, 0xE4, 0xF5, 0xA8, 0xF5, 0xE8, 0x11, 0x3E, 0x90, 0x00, 0x03, 0xE0, \r
+0x54, 0xFB, 0xFD, 0x7F, 0x03, 0x12, 0x46, 0x8D, 0x80, 0xFE, 0x22, 0x90, 0x01, 0x94, 0xE0, 0x44, \r
+0x01, 0xF0, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x22, 0x7D, 0x02, 0x90, 0x01, 0xC4, 0x74, 0x48, 0xF0, \r
+0x74, 0xB1, 0xA3, 0xF0, 0x90, 0xA0, 0xAC, 0xE0, 0xFF, 0xED, 0xC3, 0x9F, 0x50, 0x10, 0xED, 0x25, \r
+0xE0, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE4, 0x03, 0x7F, 0x00, 0x22, 0x0D, 0x80, 0xE6, 0x74, 0x48, \r
+0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xB1, 0xA3, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xE4, 0x74, \r
+0x23, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x15, 0xF5, 0x19, 0xA3, 0xE0, \r
+0x55, 0x16, 0xF5, 0x1A, 0xA3, 0xE0, 0x55, 0x17, 0xF5, 0x1B, 0xA3, 0xE0, 0x55, 0x18, 0xF5, 0x1C, \r
+0x90, 0x01, 0x34, 0xE5, 0x19, 0xF0, 0xA3, 0xE5, 0x1A, 0xF0, 0xA3, 0xE5, 0x1B, 0xF0, 0xA3, 0xE5, \r
+0x1C, 0xF0, 0x22, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x1D, 0xF5, 0x21, 0xA3, 0xE0, 0x55, 0x1E, 0xF5, \r
+0x22, 0xA3, 0xE0, 0x55, 0x1F, 0xF5, 0x23, 0xA3, 0xE0, 0x55, 0x20, 0xF5, 0x24, 0x90, 0x01, 0x3C, \r
+0xE5, 0x21, 0xF0, 0xA3, 0xE5, 0x22, 0xF0, 0xA3, 0xE5, 0x23, 0xF0, 0xA3, 0xE5, 0x24, 0xF0, 0x53, \r
+0x91, 0xDF, 0x22, 0x90, 0x9F, 0xCF, 0xE0, 0x30, 0xE0, 0x05, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, \r
+0x90, 0x9F, 0xD9, 0xE0, 0x60, 0x03, 0x12, 0x6B, 0xD2, 0x12, 0x54, 0x0D, 0x02, 0x50, 0x48, 0xD3, \r
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA0, 0x99, 0xE0, 0x30, 0xE0, 0x21, 0x90, 0xA0, 0x9E, \r
+0xE0, 0xB4, 0x01, 0x0D, 0xA3, 0xE0, 0xB4, 0x01, 0x15, 0x74, 0x02, 0xF0, 0x12, 0x89, 0xEB, 0x80, \r
+0x0D, 0x90, 0xA0, 0x9E, 0xE0, 0xB4, 0x02, 0x06, 0x74, 0x03, 0xF0, 0x12, 0x89, 0x06, 0xD0, 0xD0, \r
+0x92, 0xAF, 0x22, 0xEF, 0x90, 0x02, 0x86, 0x60, 0x06, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x04, 0xE0, \r
+0x54, 0xFB, 0xF0, 0x90, 0x9E, 0x97, 0xED, 0xF0, 0x22, 0xE4, 0xF5, 0x5D, 0x12, 0x7C, 0x69, 0xE0, \r
+0xFE, 0xB4, 0x02, 0x08, 0xED, 0xC3, 0x94, 0x11, 0x40, 0x22, 0x80, 0x18, 0xEE, 0xB4, 0x01, 0x08, \r
+0xED, 0xC3, 0x94, 0x0A, 0x40, 0x16, 0x80, 0x0C, 0x12, 0x7C, 0x69, 0xE0, 0x70, 0x0B, 0xED, 0xC3, \r
+0x94, 0x03, 0x40, 0x08, 0x75, 0x5D, 0x01, 0x80, 0x03, 0xE4, 0xF5, 0x5D, 0xAF, 0x5D, 0x22, 0x8F, \r
+0x52, 0x8D, 0x53, 0x8B, 0x54, 0x75, 0xF0, 0x04, 0xEF, 0x12, 0x4E, 0x2E, 0xC4, 0x54, 0x03, 0x90, \r
+0xA1, 0xD4, 0xF0, 0x90, 0xA1, 0xD2, 0x60, 0x09, 0x74, 0x32, 0xF0, 0xA3, 0x74, 0x2F, 0xF0, 0x80, \r
+0x07, 0x74, 0x11, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xE5, 0x53, 0xD3, 0x94, 0x2D, 0x40, 0x0A, 0x75, \r
+0xF0, 0x04, 0xE5, 0x52, 0x12, 0x4F, 0xFD, 0x80, 0x20, 0xE5, 0x53, 0xD3, 0x94, 0x1E, 0x40, 0x05, \r
+0x90, 0xA1, 0xD2, 0x80, 0x14, 0xE5, 0x53, 0xD3, 0x94, 0x14, 0x40, 0x05, 0x90, 0xA1, 0xD3, 0x80, \r
+0x08, 0x75, 0xF0, 0x04, 0xE5, 0x52, 0x12, 0x95, 0x59, 0xE0, 0xFD, 0x85, 0x54, 0x6A, 0xE4, 0xFB, \r
+0xAF, 0x52, 0x02, 0x76, 0x59, 0xEF, 0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x0B, 0x05, 0x90, 0xA0, \r
+0x90, 0x80, 0x1F, 0xEF, 0x64, 0x12, 0x60, 0x04, 0xEF, 0xB4, 0x0A, 0x05, 0x90, 0xA0, 0x91, 0x80, \r
+0x11, 0xEF, 0x64, 0x11, 0x60, 0x04, 0xEF, 0xB4, 0x09, 0x05, 0x90, 0xA0, 0x92, 0x80, 0x03, 0x90, \r
+0xA0, 0x8F, 0xE0, 0xF5, 0x5F, 0xAF, 0x5F, 0x22, 0x8D, 0x5D, 0x90, 0xA0, 0x8E, 0xE0, 0x60, 0x44, \r
+0x51, 0xE5, 0x8F, 0x5E, 0xE5, 0x5E, 0xC3, 0x94, 0x80, 0x50, 0x27, 0xE5, 0x5E, 0x94, 0x1B, 0x40, \r
+0x02, 0x80, 0x12, 0xED, 0x25, 0x5E, 0xFF, 0xE4, 0x33, 0xFE, 0xD3, 0xEF, 0x94, 0x1B, 0xEE, 0x64, \r
+0x80, 0x94, 0x80, 0x40, 0x05, 0x75, 0x5D, 0x1B, 0x80, 0x1A, 0xE5, 0x5E, 0x25, 0x5D, 0xF5, 0x5D, \r
+0x80, 0x12, 0xC3, 0xE4, 0x95, 0x5E, 0xF5, 0x5E, 0xED, 0xD3, 0x95, 0x5E, 0x40, 0x06, 0xE5, 0x5D, \r
+0x95, 0x5E, 0xF5, 0x5D, 0xAF, 0x5D, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x04, \r
+0x30, 0x12, 0x97, 0xC3, 0x90, 0xA2, 0x93, 0xE0, 0x90, 0x04, 0x33, 0xF0, 0x90, 0xA2, 0x94, 0xE0, \r
+0x90, 0x04, 0x34, 0xF0, 0x90, 0xA2, 0x95, 0xE0, 0x90, 0x04, 0x35, 0xF0, 0x90, 0xA2, 0x96, 0xE0, \r
+0x90, 0x04, 0x36, 0xF0, 0x90, 0xA2, 0x97, 0xE0, 0x90, 0x04, 0x37, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, \r
+0x22, 0xD3, 0xEF, 0x94, 0xE8, 0xEE, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x05, 0x22, 0xD3, 0xEF, 0x94, \r
+0xC8, 0xEE, 0x94, 0x00, 0x7F, 0x00, 0x40, 0x02, 0x7F, 0x02, 0x22, 0xE4, 0x90, 0xA1, 0xE4, 0xF0, \r
+0x90, 0xA1, 0xE4, 0xE0, 0xFF, 0xC3, 0x94, 0x03, 0x50, 0x5E, 0x74, 0x9E, 0x2F, 0xF5, 0x82, 0xE4, \r
+0x34, 0x9E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x0A, 0x50, 0x02, 0x80, 0x02, 0x7F, 0x0A, 0xAE, \r
+0x07, 0xEF, 0x24, 0x02, 0x90, 0xA1, 0xE3, 0xF0, 0x90, 0xA1, 0xD5, 0x74, 0x0E, 0xF0, 0x90, 0xA1, \r
+0xD7, 0x74, 0x01, 0xF0, 0x91, 0x29, 0x90, 0xA1, 0xD8, 0xF0, 0xE4, 0xFF, 0xEF, 0xC3, 0x9E, 0x50, \r
+0x16, 0x91, 0x29, 0x2F, 0x91, 0x38, 0xE0, 0xFD, 0x74, 0xD9, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xA1, \r
+0xF5, 0x83, 0xED, 0xF0, 0x0F, 0x80, 0xE5, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0xD5, 0x12, 0x97, 0xDC, \r
+0x90, 0xA1, 0xE4, 0xE0, 0x04, 0xF0, 0x80, 0x98, 0x22, 0x90, 0xA1, 0xE4, 0xE0, 0x24, 0x9B, 0xF5, \r
+0x82, 0xE4, 0x34, 0x9E, 0xF5, 0x83, 0xE0, 0x22, 0x24, 0xB5, 0xF5, 0x82, 0xE4, 0x34, 0x9E, 0xF5, \r
+0x83, 0x22, 0x12, 0x4F, 0x8F, 0xF5, 0x51, 0x12, 0x4F, 0xA5, 0xF5, 0x52, 0x12, 0x06, 0x89, 0xF5, \r
+0x53, 0x90, 0x9E, 0x99, 0xF0, 0xE5, 0x51, 0x60, 0x06, 0xFD, 0xAF, 0x52, 0x12, 0x96, 0x06, 0x22, \r
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x6C, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, \r
+0xA2, 0x6A, 0x74, 0x0C, 0xF0, 0x90, 0xA2, 0x78, 0x74, 0x02, 0xF0, 0x7B, 0x01, 0x7A, 0xA2, 0x79, \r
+0x6A, 0x12, 0x97, 0xDC, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
+0xED, 0x60, 0x3A, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x8D, 0x01, 0x12, 0x4F, 0x95, 0xF0, 0x75, 0xF0, \r
+0x0A, 0xEF, 0x90, 0x8D, 0x03, 0x12, 0x4F, 0x95, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x8D, 0x05, \r
+0x12, 0x4F, 0x95, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x8D, 0x07, 0x12, 0x4F, 0x95, 0xF0, 0x75, \r
+0xF0, 0x0A, 0xEF, 0x90, 0x8D, 0x09, 0x12, 0x4F, 0x95, 0x91, 0xE0, 0xE4, 0xF0, 0x12, 0x7F, 0x90, \r
+0xE0, 0x54, 0xBF, 0x44, 0x80, 0xFE, 0x12, 0x7F, 0x90, 0xEE, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
+0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, \r
+0xF0, 0x74, 0x91, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x98, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, \r
+0xC3, 0xC0, 0xD0, 0x90, 0xA3, 0x09, 0xEF, 0xF0, 0x7F, 0x8F, 0x12, 0x46, 0xAB, 0xEF, 0x30, 0xE6, \r
+0x41, 0x7F, 0x8D, 0x12, 0x46, 0xAB, 0xEF, 0x64, 0x01, 0x70, 0x37, 0x90, 0xA3, 0x0A, 0xF0, 0x90, \r
+0xA3, 0x0A, 0xE0, 0xFD, 0x90, 0xA3, 0x09, 0xE0, 0x75, 0xF0, 0x10, 0x12, 0x75, 0x8E, 0xE5, 0x82, \r
+0x2D, 0x12, 0x7A, 0x55, 0xE0, 0xFB, 0xE4, 0xFF, 0x12, 0x4D, 0xF7, 0x90, 0xA3, 0x0A, 0xE0, 0x04, \r
+0xF0, 0xE0, 0xC3, 0x94, 0x10, 0x40, 0xD8, 0x7F, 0x8F, 0x12, 0x46, 0xAB, 0xEF, 0x30, 0xE0, 0x02, \r
+0xB1, 0x57, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFD, 0x7F, 0x8D, 0x02, 0x46, 0x8D, 0xD3, 0x10, \r
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0x19, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0xA2, 0x18, \r
+0xEF, 0xF0, 0xA3, 0xA3, 0xE0, 0xFD, 0x12, 0x3E, 0x02, 0x90, 0xA2, 0x23, 0x12, 0x08, 0x6D, 0x90, \r
+0xA2, 0x1B, 0x12, 0x45, 0x72, 0x12, 0x08, 0x3A, 0x90, 0xA2, 0x23, 0xD1, 0x74, 0xC0, 0x04, 0xC0, \r
+0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0xA2, 0x1B, 0x12, 0x45, 0x72, 0x90, 0xA2, 0x1F, 0xD1, 0x74, \r
+0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x45, 0x54, 0x90, 0xA2, 0x27, 0x12, 0x08, \r
+0x6D, 0x90, 0xA2, 0x19, 0xA3, 0xE0, 0xFD, 0xC0, 0x05, 0x90, 0xA2, 0x27, 0x12, 0x45, 0x72, 0x90, \r
+0xAA, 0x96, 0x12, 0x08, 0x6D, 0x90, 0xA2, 0x18, 0xE0, 0xFF, 0xD0, 0x05, 0x12, 0x3D, 0x09, 0xD0, \r
+0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA0, 0xDC, 0x12, 0x45, 0x8A, 0xE0, 0xFE, 0x54, 0x03, 0xFD, 0xEE, \r
+0x13, 0x13, 0x54, 0x07, 0xFB, 0x90, 0xA0, 0xAE, 0xE0, 0xFE, 0xC4, 0x54, 0x0F, 0x90, 0xA2, 0xDF, \r
+0xF0, 0xAF, 0x04, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA2, 0xDC, 0xEF, 0xF0, 0xED, \r
+0x64, 0x01, 0x70, 0x2E, 0xEB, 0xB4, 0x01, 0x07, 0xE0, 0x24, 0x02, 0xF5, 0x70, 0x80, 0x08, 0x90, \r
+0xA2, 0xDC, 0xE0, 0x24, 0xFE, 0xF5, 0x70, 0x90, 0xA2, 0x1B, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, \r
+0xFF, 0xAF, 0x70, 0xD1, 0x65, 0xD1, 0x5D, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0xAF, 0x70, \r
+0x80, 0x20, 0x90, 0xA2, 0x1B, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0x90, 0xA2, 0xDC, 0x12, \r
+0x5D, 0x41, 0xD1, 0x69, 0xD1, 0x5D, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0x90, 0xA2, 0xDC, \r
+0xE0, 0xFF, 0xD1, 0x65, 0x7F, 0x01, 0xB1, 0x5E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFF, 0xB1, \r
+0x5E, 0x90, 0xA2, 0x1B, 0x22, 0xE4, 0xFC, 0xFD, 0xFE, 0x90, 0xA2, 0x1F, 0x12, 0x08, 0x6D, 0x7D, \r
+0x18, 0x7C, 0x00, 0x22, 0x12, 0x45, 0x7E, 0x02, 0x45, 0x47, 0x8F, 0x55, 0x90, 0x05, 0x22, 0xE0, \r
+0x90, 0xA1, 0xD8, 0xF0, 0x12, 0x57, 0x4F, 0xEF, 0x64, 0x01, 0x70, 0x46, 0x75, 0xF0, 0x0B, 0xE5, \r
+0x55, 0x12, 0x9F, 0xD5, 0xFC, 0x75, 0xF0, 0x0B, 0xE5, 0x55, 0xB1, 0xD4, 0x75, 0xF0, 0x0B, 0xE5, \r
+0x55, 0x12, 0x55, 0x49, 0x12, 0x57, 0xE3, 0x54, 0x07, 0x20, 0xE0, 0x1C, 0x75, 0xF0, 0x0B, 0xE5, \r
+0x55, 0x12, 0x77, 0xD8, 0xFF, 0x60, 0x03, 0xBF, 0x02, 0x0E, 0x75, 0xF0, 0x0B, 0xE5, 0x55, 0x12, \r
+0x57, 0x1F, 0xE4, 0xFB, 0xFD, 0x12, 0x54, 0x71, 0xAD, 0x55, 0x7F, 0x01, 0x12, 0x54, 0xD1, 0x7F, \r
+0x01, 0x22, 0x90, 0xA1, 0xD8, 0xE0, 0xFF, 0x7D, 0x49, 0x12, 0x54, 0xC6, 0x7F, 0x00, 0x22, 0xD3, \r
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA3, 0x13, 0xED, 0xF0, 0xE4, 0xFE, 0xFD, 0xEF, 0xB4, \r
+0x01, 0x0D, 0xEB, 0xB4, 0x02, 0x03, 0x0D, 0x80, 0x06, 0xEB, 0xB4, 0x01, 0x02, 0x7D, 0x02, 0xAF, \r
+0x06, 0xEF, 0xC4, 0x54, 0xF0, 0x4D, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFE, 0xEF, 0x54, \r
+0xE0, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xEF, 0x54, 0x1F, 0xFF, 0xED, 0x60, 0x2C, 0x14, 0x60, 0x1E, \r
+0x24, 0xFD, 0x60, 0x0F, 0x24, 0xFE, 0x70, 0x2A, 0xEF, 0x25, 0xE0, 0xFF, 0xC3, 0x74, 0xDE, 0x9F, \r
+0xFE, 0x80, 0x1F, 0xEF, 0x25, 0xE0, 0xFF, 0xC3, 0x74, 0xF2, 0x9F, 0xFE, 0x80, 0x14, 0xEF, 0x25, \r
+0xE0, 0xFF, 0xC3, 0x74, 0x06, 0x9F, 0xFE, 0x80, 0x09, 0xEF, 0x25, 0xE0, 0xFF, 0xC3, 0x74, 0x10, \r
+0x9F, 0xFE, 0xAF, 0x06, 0x22, 0xD3, 0xEF, 0x64, 0x80, 0x94, 0x1C, 0x40, 0x07, 0xEF, 0x64, 0x80, \r
+0x94, 0x94, 0x40, 0x03, 0x7F, 0x00, 0x22, 0xC3, 0xEF, 0x64, 0x80, 0x94, 0x80, 0x40, 0x03, 0x7F, \r
+0x64, 0x22, 0xEF, 0x24, 0x64, 0xFF, 0x22, 0xF1, 0x93, 0xBF, 0x01, 0x16, 0x90, 0xA1, 0xBF, 0xE0, \r
+0x54, 0x30, 0xFF, 0xBF, 0x20, 0x07, 0x90, 0xA1, 0x3A, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0xA1, \r
+0x3A, 0xF0, 0x22, 0x7B, 0x01, 0x7A, 0xA1, 0x79, 0xBF, 0x7F, 0xFB, 0x7E, 0x01, 0x02, 0x34, 0xC1, \r
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x37, 0x4E, 0x90, 0xA1, \r
+0xC2, 0x12, 0x08, 0x6D, 0x7F, 0x00, 0x7E, 0x09, 0x12, 0x37, 0x4E, 0x90, 0xA1, 0xC6, 0x12, 0x08, \r
+0x6D, 0x90, 0xA1, 0xC2, 0x12, 0xB8, 0x11, 0x60, 0x19, 0x90, 0xA1, 0xC2, 0x12, 0xB8, 0x08, 0x90, \r
+0xA1, 0xC2, 0x12, 0x08, 0x6D, 0x90, 0xA1, 0xC2, 0x12, 0x47, 0xCC, 0x7F, 0x00, 0x7E, 0x08, 0x12, \r
+0x38, 0x45, 0x90, 0xA1, 0xC6, 0x12, 0xB8, 0x11, 0x60, 0x19, 0x90, 0xA1, 0xC6, 0x12, 0xB8, 0x08, \r
+0x90, 0xA1, 0xC6, 0x12, 0x08, 0x6D, 0x90, 0xA1, 0xC6, 0x12, 0x47, 0xCC, 0x7F, 0x00, 0x7E, 0x09, \r
+0x12, 0x38, 0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x45, 0x72, 0xEF, 0x54, 0xFE, 0xFF, 0xEC, \r
+0x22, 0x12, 0x45, 0x72, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0xEF, 0x22, 0x7E, 0x00, \r
+0x7F, 0x01, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x9F, 0x79, 0xCF, 0x12, 0x08, 0xAA, 0x90, 0x9F, 0xCF, \r
+0xE0, 0x54, 0xFD, 0xF0, 0xE4, 0x12, 0x60, 0x74, 0xA3, 0x74, 0x0C, 0xF0, 0x22, 0x11, 0x54, 0xE4, \r
+0x90, 0x9F, 0xD2, 0xF0, 0x22, 0x12, 0x67, 0xA2, 0x80, 0xF3, 0x12, 0x67, 0x91, 0x80, 0xEE, 0x12, \r
+0x67, 0xE6, 0x80, 0xE9, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0x22, 0x7D, 0x2E, 0x7F, 0x6F, \r
+0x12, 0x54, 0xC6, 0x7D, 0x02, 0x7F, 0x01, 0x12, 0x61, 0xC6, 0x11, 0x54, 0x90, 0x9F, 0xD3, 0x74, \r
+0x02, 0xF0, 0x22, 0x7D, 0x20, 0x11, 0x80, 0x74, 0x02, 0xF0, 0x22, 0x12, 0x67, 0xEA, 0x80, 0xF3, \r
+0x7F, 0xFF, 0x12, 0x54, 0xC6, 0x12, 0x47, 0xEB, 0x90, 0x9F, 0xD2, 0x22, 0x11, 0x85, 0x74, 0x02, \r
+0xF0, 0x22, 0x12, 0x67, 0xEC, 0x7D, 0x23, 0x11, 0x80, 0x74, 0x02, 0xF0, 0x22, 0x7D, 0x21, 0x7F, \r
+0xFF, 0x12, 0x54, 0xC6, 0x90, 0x9F, 0xD2, 0x74, 0x03, 0xF0, 0x22, 0x12, 0x67, 0xEA, 0x80, 0xED, \r
+0x12, 0x66, 0xB8, 0x80, 0xEF, 0x7D, 0x22, 0x7F, 0xFF, 0x12, 0x54, 0xC6, 0x12, 0x67, 0xEC, 0x80, \r
+0xE3, 0x12, 0x67, 0xEA, 0x02, 0x6F, 0xCF, 0x12, 0x66, 0xB8, 0x7D, 0x24, 0x02, 0x6F, 0xD1, 0xAE, \r
+0x07, 0x12, 0x6B, 0x1D, 0xBF, 0x01, 0x13, 0x90, 0x9F, 0xCF, 0x12, 0x5F, 0xDF, 0x20, 0xE0, 0x0A, \r
+0xAF, 0x06, 0x7D, 0x01, 0x12, 0x62, 0x5A, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x9F, 0xD4, \r
+0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x9F, 0xE2, 0xF0, 0xA3, 0xF0, 0x90, 0x9F, 0xDD, 0xF0, 0x90, \r
+0x9F, 0xD5, 0xE0, 0x54, 0xF7, 0xF0, 0x54, 0xBF, 0x12, 0x64, 0x79, 0x7D, 0x10, 0x7F, 0x03, 0x02, \r
+0x66, 0x0D, 0xEF, 0x24, 0xFE, 0x60, 0x0B, 0x04, 0x70, 0x24, 0x90, 0x9F, 0xDF, 0x74, 0x02, 0xF0, \r
+0x80, 0x13, 0xED, 0x70, 0x06, 0x90, 0xA0, 0x39, 0xE0, 0x80, 0x02, 0xED, 0x14, 0x90, 0x9F, 0xDF, \r
+0xF0, 0x90, 0x9F, 0xDF, 0xE0, 0xA3, 0xF0, 0x90, 0x9F, 0xD5, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0xD3, \r
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA0, 0x4A, 0xE0, 0x30, 0xE0, 0x17, 0x90, 0xA0, 0x5C, \r
+0xE0, 0x70, 0x61, 0x90, 0x9F, 0xDB, 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x58, 0x90, 0xA0, 0x3C, 0xE0, \r
+0x60, 0x4E, 0x80, 0x50, 0x12, 0xA2, 0xB7, 0xEF, 0x64, 0x01, 0x70, 0x48, 0x90, 0x9F, 0xDD, 0xE0, \r
+0xFF, 0x54, 0x03, 0x70, 0x3F, 0x90, 0x9F, 0xDB, 0xE0, 0xFE, 0xE4, 0xC3, 0x9E, 0x40, 0x35, 0xEF, \r
+0x20, 0xE2, 0x31, 0x90, 0x9F, 0xDD, 0xE0, 0x20, 0xE4, 0x2A, 0x90, 0x9F, 0xD5, 0xE0, 0x13, 0x13, \r
+0x54, 0x3F, 0x30, 0xE0, 0x1F, 0x90, 0xA0, 0x3C, 0xE0, 0x70, 0x19, 0x90, 0x06, 0x62, 0xE0, 0x20, \r
+0xE1, 0x12, 0x90, 0x06, 0x62, 0xE0, 0x30, 0xE0, 0x07, 0xE0, 0x54, 0xFC, 0x64, 0x80, 0x60, 0x04, \r
+0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xA0, 0x30, 0x74, 0x04, \r
+0xF0, 0xA3, 0x14, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x64, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0xA3, \r
+0xF0, 0x22, 0x7D, 0x2F, 0x7F, 0xFF, 0x12, 0x54, 0xC6, 0x12, 0x47, 0xEB, 0x7D, 0x08, 0x7F, 0x01, \r
+0x12, 0x61, 0xC6, 0x90, 0x9F, 0xD3, 0x74, 0x08, 0xF0, 0x22, 0x90, 0xA2, 0xB2, 0xE0, 0xFF, 0xD3, \r
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0xA3, 0x18, 0xEF, 0xF0, 0x90, 0x9E, 0xCB, 0xE0, 0xFF, \r
+0x90, 0x04, 0x1C, 0xE0, 0x6F, 0x70, 0x39, 0x90, 0x9F, 0xDC, 0xE0, 0x64, 0x0E, 0x70, 0x10, 0x90, \r
+0xA3, 0x18, 0xE0, 0x70, 0x2B, 0x51, 0x45, 0x90, 0x06, 0x04, 0x12, 0x61, 0xBE, 0x80, 0x1E, 0x90, \r
+0x9F, 0xDC, 0xE0, 0x64, 0x06, 0x70, 0x19, 0x90, 0xA3, 0x18, 0xE0, 0x60, 0x13, 0x90, 0x9F, 0xD4, \r
+0xE0, 0x54, 0xBF, 0xF0, 0x51, 0x4D, 0xF0, 0x90, 0x9F, 0xDC, 0x74, 0x04, 0xF0, 0x12, 0x66, 0x3A, \r
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x9F, 0xD4, 0xE0, 0x54, 0x7F, 0xF0, 0x22, 0x90, 0x06, 0x04, \r
+0xE0, 0x44, 0x40, 0xF0, 0xE0, 0x44, 0x80, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, \r
+0xA2, 0xE8, 0xEF, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1F, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA2, \r
+0xEB, 0xF0, 0x7D, 0x29, 0x12, 0x57, 0x51, 0xBF, 0x01, 0x03, 0x12, 0x87, 0x8C, 0x90, 0xA2, 0xEB, \r
+0xE0, 0xFF, 0x7D, 0x2A, 0x12, 0x54, 0xC6, 0x80, 0x03, 0x12, 0x87, 0x8C, 0x90, 0x04, 0x1F, 0x74, \r
+0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFE, 0xEF, 0xC3, 0x13, 0xFD, 0xEF, 0x30, 0xE0, \r
+0x02, 0x7E, 0x80, 0x90, 0xFD, 0x10, 0xED, 0xF0, 0xAF, 0x06, 0x22, 0x90, 0xA0, 0xAE, 0xE0, 0xFF, \r
+0xC3, 0x13, 0xFE, 0xEF, 0x54, 0xF1, 0xFF, 0xEE, 0x04, 0x54, 0x07, 0x25, 0xE0, 0x4F, 0xF0, 0xA3, \r
+0xE0, 0xFF, 0x90, 0xA0, 0xAE, 0xE0, 0xFE, 0xC3, 0x13, 0x54, 0x07, 0x22, 0xFF, 0x75, 0xF0, 0x0E, \r
+0x90, 0xA0, 0xBB, 0x12, 0x45, 0x8A, 0xE0, 0xFE, 0x75, 0xF0, 0x0E, 0xEF, 0x90, 0xA0, 0xBA, 0x12, \r
+0x45, 0x8A, 0xE0, 0x90, 0xA2, 0xAC, 0xF0, 0x90, 0xA2, 0xAB, 0xEE, 0x22, 0x90, 0xA1, 0xCE, 0x12, \r
+0x45, 0x96, 0x75, 0xF0, 0x02, 0xE5, 0x5A, 0xA4, 0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12, 0x07, 0xAB, \r
+0xAE, 0xF0, 0x22, 0xE5, 0x53, 0x25, 0xE0, 0x24, 0x51, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, \r
+0x22, 0xE5, 0x53, 0x25, 0xE0, 0x24, 0x79, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x22, 0x8F, \r
+0x58, 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x5C, 0xF9, 0x74, 0x40, 0x35, 0xF0, 0xFA, 0x7B, 0xFF, \r
+0x22, 0x75, 0xF0, 0x03, 0x12, 0x45, 0x8A, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x22, 0xE5, \r
+0x51, 0x25, 0xE0, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0x74, 0x91, 0x25, \r
+0x51, 0xF5, 0x82, 0xE4, 0x34, 0x9C, 0xF5, 0x83, 0x22, 0x74, 0x28, 0x2F, 0xF5, 0x82, 0xE4, 0x34, \r
+0xA1, 0xF5, 0x83, 0xE0, 0x22, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x01, 0xF9, 0x74, 0x8D, 0x35, 0xF0, \r
+0xFA, 0x7B, 0x01, 0x22, 0xFA, 0x74, 0xD0, 0x2B, 0xF5, 0x82, 0x74, 0xA1, 0x3A, 0xF5, 0x83, 0xEE, \r
+0xF0, 0xC3, 0x22, 0x90, 0x9F, 0xD7, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x22, 0x78, 0x08, 0x12, 0x08, \r
+0x5A, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x22, 0xF0, 0xEE, 0x54, 0x08, 0xFE, 0xEF, \r
+0x54, 0xF7, 0x22, 0x7E, 0x00, 0x7F, 0x04, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0xA0, 0x79, 0x3D, 0x22, \r
+0x90, 0xA0, 0xFE, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0xA1, 0xFB, 0xE0, 0xFF, 0x22, 0x12, 0x45, 0x8A, \r
+0xE0, 0xFC, 0xA3, 0xE0, 0xF5, 0x82, 0x8C, 0x83, 0x22, 0x12, 0x08, 0x5A, 0x90, 0xA2, 0x31, 0x12, \r
+0x08, 0x6D, 0x7F, 0x00, 0x22, 0x74, 0x05, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, \r
+0x22, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xEF, 0x13, 0x13, \r
+0x13, 0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x07, 0xFF, 0x22, 0x7F, 0x84, 0x7E, 0x08, 0x12, 0x56, 0xB0, \r
+0x90, 0xA2, 0x1B, 0x22, 0xFC, 0xE5, 0x56, 0xC3, 0x13, 0xFE, 0xE5, 0x57, 0x13, 0xFF, 0x22, 0x90, \r
+0x05, 0x58, 0x74, 0x02, 0xF0, 0x22, 0x90, 0xA2, 0xE3, 0xE0, 0xFF, 0x90, 0xA2, 0xE1, 0xE0, 0x22, \r
+0x74, 0x01, 0x93, 0x95, 0x55, 0xE4, 0x93, 0x95, 0x54, 0x22, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, \r
+0xDF, 0x4D, 0xFF, 0x22, 0x12, 0x45, 0x8A, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x22, 0x7F, 0x30, 0x7E, \r
+0x09, 0x12, 0x37, 0x4E, 0xE4, 0x22, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x7F, 0x01, 0x22, 0x90, \r
+0xA0, 0x3F, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x22, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x33, 0x54, 0x80, \r
+0x22, 0x90, 0x05, 0x22, 0xE0, 0x90, 0xA1, 0xFB, 0xF0, 0x22, 0x90, 0xA1, 0xFF, 0xE0, 0xFF, 0x75, \r
+0xF0, 0x0B, 0x22, 0x75, 0xF0, 0x0E, 0xE5, 0x54, 0x90, 0xA0, 0xB2, 0x22, 0x90, 0x81, 0x01, 0x12, \r
+0x45, 0x8A, 0xEF, 0xF0, 0x22, 0xE5, 0x68, 0x54, 0x7F, 0x90, 0xA2, 0x99, 0xF0, 0x22, 0xF0, 0x90, \r
+0x04, 0xE0, 0xE0, 0x90, 0x9F, 0xD5, 0x22, 0x90, 0xA0, 0x50, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0x22, \r
+0x7F, 0x4E, 0x12, 0x46, 0xAB, 0xEF, 0x54, 0x7F, 0x22, 0x90, 0xA2, 0xC3, 0xE0, 0x7F, 0x48, 0x7E, \r
+0x09, 0x22, 0x90, 0xA0, 0x4D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x22, 0xF0, 0x7F, 0x10, 0x7E, 0x00, \r
+0x02, 0x3E, 0x50, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, \r
+0x7F, 0xF0, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x02, 0x5F, 0xB9, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x6F, \r
+0xFF, 0x22, 0x90, 0x9F, 0xDF, 0xE0, 0xFF, 0xA3, 0xE0, 0x22, 0x90, 0x9F, 0xDF, 0xE0, 0x90, 0x05, \r
+0x73, 0x22, 0x90, 0xA0, 0xDF, 0x12, 0x45, 0x8A, 0xE0, 0x22, 0x90, 0x89, 0x07, 0x12, 0x45, 0x8A, \r
+0xE0, 0x22, 0xFD, 0x7C, 0x00, 0x12, 0x07, 0x03, 0xEF, 0x22, 0x90, 0x00, 0x06, 0x12, 0x07, 0xAB, \r
+0x2F, 0x22, 0xFF, 0xEE, 0x5C, 0xFE, 0xEF, 0x5D, 0x4E, 0x22, 0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, \r
+0xA3, 0x22, 0x54, 0x80, 0xFE, 0xEF, 0x54, 0x7F, 0x4E, 0x22, 0x90, 0xA2, 0x88, 0x12, 0x45, 0x72, \r
+0xEF, 0x22, 0x12, 0x45, 0x72, 0xEF, 0x44, 0x80, 0xFF, 0x22, 0x2F, 0xF8, 0xE6, 0xFE, 0xED, 0xF4, \r
+0x5E, 0x22, 0x12, 0x46, 0xAB, 0xEF, 0x44, 0x40, 0xFD, 0x22, 0x44, 0xC7, \r
 };\r
 };\r
-u4Byte ArrayLength_MP_8723B_FW_NIC = 28004;\r
-\r
+u4Byte ArrayLength_MP_8723B_FW_NIC = 32108;\r
 \r
 \r
 void\r
 \r
 \r
 void\r
@@ -3377,16 +3971,16 @@ ODM_ReadFirmware_MP_8723B_FW_NIC(
        *pFirmwareSize = ArrayLength_MP_8723B_FW_NIC;\r
 }\r
 \r
        *pFirmwareSize = ArrayLength_MP_8723B_FW_NIC;\r
 }\r
 \r
-// v31.00 20140813 by Isaachsu <isaachsu@realtek.com>\r
+/* v35.00 20150326 by IsaacHsu <isaachsu@realtek.com> */\r
 u1Byte Array_MP_8723B_FW_WoWLAN[] = {\r
 u1Byte Array_MP_8723B_FW_WoWLAN[] = {\r
-0x01, 0x53, 0x30, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x08, 0x13, 0x23, 0x38, 0xAA, 0x61, 0x00, 0x00, \r
-0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x02, 0x48, 0x94, 0x02, 0x70, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x70, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x70, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x01, 0x53, 0x30, 0x00, 0x23, 0x00, 0x00, 0x00, 0x03, 0x26, 0x14, 0x35, 0xFE, 0x66, 0x00, 0x00, \r
+0xE5, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x02, 0x48, 0xA2, 0x02, 0x67, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x02, 0x68, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x02, 0x68, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x70, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x77, 0xFC, 0x00, 0x00, \r
-0x00, 0x00, 0x00, 0x02, 0x7F, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x02, 0x68, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x6F, 0xFB, 0x00, 0x00, \r
+0x00, 0x00, 0x00, 0x02, 0x77, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
@@ -3422,1530 +4016,1615 @@ u1Byte Array_MP_8723B_FW_WoWLAN[] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r
-0xEF, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, 0xED, 0x39, 0xFD, 0xEC, 0x38, 0xFC, 0x22, 0xE8, 0x8F, 0xF0, \r
-0xA4, 0xCC, 0x8B, 0xF0, 0xA4, 0x2C, 0xFC, 0xE9, 0x8E, 0xF0, 0xA4, 0x2C, 0xFC, 0x8A, 0xF0, 0xED, \r
-0xA4, 0x2C, 0xFC, 0xEA, 0x8E, 0xF0, 0xA4, 0xCD, 0xA8, 0xF0, 0x8B, 0xF0, 0xA4, 0x2D, 0xCC, 0x38, \r
-0x25, 0xF0, 0xFD, 0xE9, 0x8F, 0xF0, 0xA4, 0x2C, 0xCD, 0x35, 0xF0, 0xFC, 0xEB, 0x8E, 0xF0, 0xA4, \r
-0xFE, 0xA9, 0xF0, 0xEB, 0x8F, 0xF0, 0xA4, 0xCF, 0xC5, 0xF0, 0x2E, 0xCD, 0x39, 0xFE, 0xE4, 0x3C, \r
-0xFC, 0xEA, 0xA4, 0x2D, 0xCE, 0x35, 0xF0, 0xFD, 0xE4, 0x3C, 0xFC, 0x22, 0x75, 0xF0, 0x08, 0x75, \r
-0x82, 0x00, 0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xCD, 0x33, 0xCD, 0xCC, 0x33, 0xCC, 0xC5, 0x82, \r
-0x33, 0xC5, 0x82, 0x9B, 0xED, 0x9A, 0xEC, 0x99, 0xE5, 0x82, 0x98, 0x40, 0x0C, 0xF5, 0x82, 0xEE, \r
-0x9B, 0xFE, 0xED, 0x9A, 0xFD, 0xEC, 0x99, 0xFC, 0x0F, 0xD5, 0xF0, 0xD6, 0xE4, 0xCE, 0xFB, 0xE4, \r
-0xCD, 0xFA, 0xE4, 0xCC, 0xF9, 0xA8, 0x82, 0x22, 0xB8, 0x00, 0xC1, 0xB9, 0x00, 0x59, 0xBA, 0x00, \r
-0x2D, 0xEC, 0x8B, 0xF0, 0x84, 0xCF, 0xCE, 0xCD, 0xFC, 0xE5, 0xF0, 0xCB, 0xF9, 0x78, 0x18, 0xEF, \r
-0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xED, 0x33, 0xFD, 0xEC, 0x33, 0xFC, 0xEB, 0x33, 0xFB, 0x10, 0xD7, \r
-0x03, 0x99, 0x40, 0x04, 0xEB, 0x99, 0xFB, 0x0F, 0xD8, 0xE5, 0xE4, 0xF9, 0xFA, 0x22, 0x78, 0x18, \r
-0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xED, 0x33, 0xFD, 0xEC, 0x33, 0xFC, 0xC9, 0x33, 0xC9, 0x10, \r
-0xD7, 0x05, 0x9B, 0xE9, 0x9A, 0x40, 0x07, 0xEC, 0x9B, 0xFC, 0xE9, 0x9A, 0xF9, 0x0F, 0xD8, 0xE0, \r
-0xE4, 0xC9, 0xFA, 0xE4, 0xCC, 0xFB, 0x22, 0x75, 0xF0, 0x10, 0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE, \r
-0xED, 0x33, 0xFD, 0xCC, 0x33, 0xCC, 0xC8, 0x33, 0xC8, 0x10, 0xD7, 0x07, 0x9B, 0xEC, 0x9A, 0xE8, \r
-0x99, 0x40, 0x0A, 0xED, 0x9B, 0xFD, 0xEC, 0x9A, 0xFC, 0xE8, 0x99, 0xF8, 0x0F, 0xD5, 0xF0, 0xDA, \r
-0xE4, 0xCD, 0xFB, 0xE4, 0xCC, 0xFA, 0xE4, 0xC8, 0xF9, 0x22, 0xEF, 0x5B, 0xFF, 0xEE, 0x5A, 0xFE, \r
-0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, \r
-0xEC, 0x48, 0xFC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, \r
-0xE8, 0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, \r
-0x22, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, \r
-0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, \r
-0xF9, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, \r
-0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, \r
-0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, \r
-0xDF, 0xE3, 0xF5, 0xF0, 0x09, 0xE2, 0x08, 0xB5, 0xF0, 0x6B, 0xDF, 0xF5, 0x80, 0x67, 0xE3, 0xF5, \r
-0xF0, 0x09, 0xE6, 0x08, 0xB5, 0xF0, 0x5E, 0xDF, 0xF5, 0x80, 0x5A, 0x87, 0xF0, 0x09, 0xE6, 0x08, \r
-0xB5, 0xF0, 0x52, 0xDF, 0xF6, 0x80, 0x4E, 0x87, 0xF0, 0x09, 0xE2, 0x08, 0xB5, 0xF0, 0x46, 0xDF, \r
-0xF6, 0x80, 0x42, 0x88, 0x82, 0x8C, 0x83, 0x87, 0xF0, 0x09, 0xE0, 0xA3, 0xB5, 0xF0, 0x36, 0xDF, \r
-0xF6, 0x80, 0x32, 0x88, 0x82, 0x8C, 0x83, 0x87, 0xF0, 0x09, 0xE4, 0x93, 0xA3, 0xB5, 0xF0, 0x25, \r
-0xDF, 0xF5, 0x80, 0x21, 0x88, 0x82, 0x8C, 0x83, 0xE3, 0xF5, 0xF0, 0x09, 0xE0, 0xA3, 0xB5, 0xF0, \r
-0x14, 0xDF, 0xF5, 0x80, 0x10, 0x88, 0x82, 0x8C, 0x83, 0xE3, 0xF5, 0xF0, 0x09, 0xE4, 0x93, 0xA3, \r
-0xB5, 0xF0, 0x02, 0xDF, 0xF4, 0x02, 0x45, 0x70, 0x80, 0x87, 0x80, 0xE9, 0x80, 0x90, 0x80, 0xD4, \r
-0x80, 0x3E, 0x80, 0x15, 0x80, 0x6E, 0x80, 0x7E, 0x80, 0x9D, 0x80, 0xB7, 0x80, 0x8D, 0x80, 0xA3, \r
-0x80, 0x51, 0x80, 0x74, 0x80, 0x3C, 0x02, 0x45, 0x7C, 0x89, 0x82, 0x8A, 0x83, 0xEC, 0xFA, 0xE4, \r
-0x93, 0xF5, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xE4, 0x93, 0xA3, 0xC8, \r
-0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xB5, 0xF0, 0x76, 0xDF, 0xE3, 0xDE, 0xE1, 0x80, 0x70, \r
-0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, 0xF5, 0xF0, 0xA3, 0xE2, 0x08, 0xB5, 0xF0, 0x62, 0xDF, 0xF4, \r
-0x80, 0x5E, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE6, 0x08, 0xB5, 0xF0, 0x51, 0xDF, \r
-0xF5, 0x80, 0x4D, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE2, 0x08, 0xB5, 0xF0, 0x40, \r
-0xDF, 0xF5, 0x80, 0x3C, 0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, 0xF5, 0xF0, 0xA3, 0xE6, 0x08, 0xB5, \r
-0xF0, 0x2E, 0xDF, 0xF4, 0x80, 0x2A, 0x80, 0x02, 0x80, 0x57, 0x89, 0x82, 0x8A, 0x83, 0xEC, 0xFA, \r
-0xE4, 0x93, 0xF5, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xE0, 0xA3, 0xC8, \r
-0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xB5, 0xF0, 0x06, 0xDF, 0xE4, 0xDE, 0xE2, 0x80, 0x00, \r
-0x7F, 0xFF, 0xB5, 0xF0, 0x02, 0x0F, 0x22, 0x40, 0x02, 0x7F, 0x01, 0x22, 0x89, 0x82, 0x8A, 0x83, \r
-0xEC, 0xFA, 0xE0, 0xF5, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xE0, 0xA3, \r
-0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xB5, 0xF0, 0xD5, 0xDF, 0xE5, 0xDE, 0xE3, 0x80, \r
-0xCF, 0x89, 0x82, 0x8A, 0x83, 0xEC, 0xFA, 0xE0, 0xF5, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, \r
-0xC5, 0x83, 0xCC, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xB5, 0xF0, \r
-0xAF, 0xDF, 0xE4, 0xDE, 0xE2, 0x80, 0xA9, 0x88, 0xF0, 0xEF, 0x60, 0x01, 0x0E, 0x4E, 0x60, 0xAB, \r
-0xED, 0x24, 0x02, 0xB4, 0x04, 0x00, 0x50, 0x98, 0xF5, 0x82, 0xEB, 0x24, 0x02, 0xB4, 0x04, 0x00, \r
-0x50, 0x8E, 0x23, 0x23, 0x45, 0x82, 0x23, 0x90, 0x44, 0xB8, 0x73, 0xC2, 0xAF, 0x80, 0xFE, 0x32, \r
-0x12, 0x45, 0xEF, 0x85, 0xD0, 0x0B, 0x75, 0xD0, 0x08, 0xAA, 0xE0, 0xC2, 0x8C, 0xE5, 0x8A, 0x24, \r
-0x67, 0xF5, 0x8A, 0xE5, 0x8C, 0x34, 0x79, 0xF5, 0x8C, 0xD2, 0x8C, 0xEC, 0x24, 0x87, 0xF8, 0xE6, \r
-0xBC, 0x02, 0x02, 0x74, 0xFF, 0xC3, 0x95, 0x81, 0xB4, 0x40, 0x00, 0x40, 0xCE, 0x79, 0x03, 0x78, \r
-0x80, 0x16, 0xE6, 0x08, 0x70, 0x0B, 0xC2, 0xAF, 0xE6, 0x30, 0xE1, 0x03, 0x44, 0x18, 0xF6, 0xD2, \r
-0xAF, 0x08, 0xD9, 0xED, 0xEA, 0x8B, 0xD0, 0x22, 0xE5, 0x0C, 0xFF, 0x23, 0x24, 0x81, 0xF8, 0x0F, \r
-0x08, 0x08, 0xBF, 0x03, 0x04, 0x7F, 0x00, 0x78, 0x81, 0xE6, 0x30, 0xE4, 0xF2, 0x00, 0xE5, 0x0C, \r
-0xC3, 0x9F, 0x50, 0x20, 0x05, 0x0C, 0x74, 0x86, 0x25, 0x0C, 0xF8, 0xE6, 0xFD, 0xA6, 0x81, 0x08, \r
-0xE6, 0xAE, 0x0C, 0xBE, 0x02, 0x02, 0x74, 0xFF, 0xCD, 0xF8, 0xE8, 0x6D, 0x60, 0xE0, 0x08, 0xE6, \r
-0xC0, 0xE0, 0x80, 0xF6, 0xE5, 0x0C, 0xD3, 0x9F, 0x40, 0x27, 0xE5, 0x0C, 0x24, 0x87, 0xF8, 0xE6, \r
-0xAE, 0x0C, 0xBE, 0x02, 0x02, 0x74, 0xFF, 0xFD, 0x18, 0xE6, 0xCD, 0xF8, 0xE5, 0x81, 0x6D, 0x60, \r
-0x06, 0xD0, 0xE0, 0xF6, 0x18, 0x80, 0xF5, 0xE5, 0x0C, 0x24, 0x86, 0xC8, 0xF6, 0x15, 0x0C, 0x80, \r
-0xD3, 0xE5, 0x0C, 0x23, 0x24, 0x81, 0xF8, 0x7F, 0x04, 0xC2, 0xAF, 0xE6, 0x30, 0xE0, 0x03, 0x10, \r
-0xE2, 0x0C, 0x7F, 0x00, 0x30, 0xE1, 0x07, 0x30, 0xE3, 0x04, 0x7F, 0x08, 0x54, 0xF4, 0x54, 0x7C, \r
-0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x42, 0x07, 0x22, 0x78, 0x86, 0xA6, 0x81, 0x74, 0x02, 0x60, 0x06, \r
-0xFF, 0x08, 0x76, 0xFF, 0xDF, 0xFB, 0x7F, 0x03, 0xE4, 0x78, 0x80, 0xF6, 0x08, 0xF6, 0x08, 0xDF, \r
-0xFA, 0x78, 0x81, 0x76, 0x30, 0x90, 0x49, 0x33, 0x74, 0x01, 0x93, 0xC0, 0xE0, 0xE4, 0x93, 0xC0, \r
-0xE0, 0x43, 0x89, 0x01, 0x75, 0x8A, 0x60, 0x75, 0x8C, 0x79, 0xD2, 0x8C, 0xD2, 0xAF, 0x22, 0x02, \r
-0xEF, 0xD3, 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0x74, 0x81, 0x2F, 0x2F, 0xF8, 0xE6, 0x20, \r
-0xE5, 0xF4, 0xC2, 0xAF, 0xE6, 0x44, 0x30, 0xF6, 0xD2, 0xAF, 0xAE, 0x0C, 0xEE, 0xC3, 0x9F, 0x50, \r
-0x21, 0x0E, 0x74, 0x86, 0x2E, 0xF8, 0xE6, 0xF9, 0x08, 0xE6, 0x18, 0xBE, 0x02, 0x02, 0x74, 0xFF, \r
-0xFD, 0xED, 0x69, 0x60, 0x09, 0x09, 0xE7, 0x19, 0x19, 0xF7, 0x09, 0x09, 0x80, 0xF3, 0x16, 0x16, \r
-0x80, 0xDA, 0xEE, 0xD3, 0x9F, 0x40, 0x04, 0x05, 0x81, 0x05, 0x81, 0xEE, 0xD3, 0x9F, 0x40, 0x22, \r
-0x74, 0x86, 0x2E, 0xF8, 0x08, 0xE6, 0xF9, 0xEE, 0xB5, 0x0C, 0x02, 0xA9, 0x81, 0x18, 0x06, 0x06, \r
-0xE6, 0xFD, 0xED, 0x69, 0x60, 0x09, 0x19, 0x19, 0xE7, 0x09, 0x09, 0xF7, 0x19, 0x80, 0xF3, 0x1E, \r
-0x80, 0xD9, 0xEF, 0x24, 0x86, 0xF8, 0xE6, 0x04, 0xF8, 0xEF, 0x2F, 0x04, 0x90, 0x49, 0x33, 0x93, \r
-0xF6, 0x08, 0xEF, 0x2F, 0x93, 0xF6, 0x7F, 0x00, 0x22, 0xEF, 0xD3, 0x94, 0x02, 0x40, 0x03, 0x7F, \r
-0xFF, 0x22, 0xEF, 0x23, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE5, 0xF4, 0xC2, 0xAF, 0xE6, 0x54, 0x8C, \r
-0xF6, 0xD2, 0xAF, 0xE5, 0x0C, 0xB5, 0x07, 0x0A, 0x74, 0x86, 0x2F, 0xF8, 0xE6, 0xF5, 0x81, 0x02, \r
-0x46, 0x38, 0x50, 0x2E, 0x74, 0x87, 0x2F, 0xF8, 0xE6, 0xBF, 0x02, 0x02, 0x74, 0xFF, 0xFD, 0x18, \r
-0xE6, 0xF9, 0x74, 0x86, 0x2F, 0xF8, 0xFB, 0xE6, 0xFC, 0xE9, 0x6C, 0x60, 0x08, 0xA8, 0x05, 0xE7, \r
-0xF6, 0x1D, 0x19, 0x80, 0xF4, 0xA8, 0x03, 0xA6, 0x05, 0x1F, 0xE5, 0x0C, 0xB5, 0x07, 0xE3, 0x7F, \r
-0x00, 0x22, 0x74, 0x87, 0x2F, 0xF8, 0xE6, 0xFD, 0x18, 0x86, 0x01, 0x0F, 0x74, 0x86, 0x2F, 0xF8, \r
-0xA6, 0x01, 0x08, 0x86, 0x04, 0xE5, 0x0C, 0xB5, 0x07, 0x02, 0xAC, 0x81, 0xED, 0x6C, 0x60, 0x08, \r
-0x0D, 0x09, 0xA8, 0x05, 0xE6, 0xF7, 0x80, 0xF4, 0xE5, 0x0C, 0xB5, 0x07, 0xDE, 0x89, 0x81, 0x7F, \r
-0x00, 0x22, 0xEF, 0xD3, 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0xEF, 0x23, 0x24, 0x81, 0xF8, \r
-0xC2, 0xAF, 0xE6, 0x30, 0xE5, 0x05, 0x30, 0xE0, 0x02, 0xD2, 0xE4, 0xD2, 0xE2, 0xC6, 0xD2, 0xAF, \r
-0x7F, 0x00, 0x30, 0xE2, 0x01, 0x0F, 0x02, 0x46, 0x37, 0x8F, 0xF0, 0xE4, 0xFF, 0xFE, 0xE5, 0x0C, \r
-0x23, 0x24, 0x80, 0xF8, 0xC2, 0xA9, 0x30, 0xF7, 0x0D, 0x7F, 0x08, 0xE6, 0x60, 0x0B, 0x2D, 0xF6, \r
-0x60, 0x30, 0x50, 0x2E, 0x80, 0x07, 0x30, 0xF1, 0x06, 0xED, 0xF6, 0x60, 0x25, 0x7E, 0x02, 0x08, \r
-0x30, 0xF0, 0x10, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x23, 0x0E, 0x30, 0xE2, 0x0C, 0xD2, 0xAF, 0x7F, \r
-0x04, 0x80, 0x12, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x13, 0x54, 0xEC, 0x4E, 0xF6, 0xD2, 0xAF, 0x02, \r
-0x46, 0x38, 0x7F, 0x08, 0x08, 0xEF, 0x44, 0x83, 0xF4, 0xC2, 0xAF, 0x56, 0xC6, 0xD2, 0xAF, 0x54, \r
-0x80, 0x4F, 0xFF, 0x22, 0x02, 0x48, 0xD2, 0x02, 0x46, 0xC8, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, \r
-0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, \r
-0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, \r
-0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, \r
-0x40, 0x80, 0x90, 0x49, 0x17, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, \r
-0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, \r
-0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, \r
-0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, \r
-0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0x41, 0x95, 0x1A, 0x00, 0x41, 0x95, 0x1B, 0x00, 0x41, \r
-0x95, 0x2C, 0x00, 0x41, 0x94, 0x6F, 0x00, 0x41, 0x94, 0x51, 0x00, 0x44, 0x95, 0x0D, 0x00, 0x50, \r
-0xF2, 0x01, 0x00, 0x4B, 0xAE, 0x60, 0x04, 0x67, 0xFC, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
-0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF1, 0xDF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, \r
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0xF5, 0xEF, 0xF0, 0x90, 0x94, 0xF7, 0xEB, 0xF0, 0xED, 0x60, \r
-0x02, 0x21, 0xF7, 0x90, 0x07, 0x6E, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x07, 0x65, 0xE0, 0x54, 0xE7, \r
-0xF0, 0x90, 0x94, 0xF7, 0xE0, 0x70, 0x3B, 0xB1, 0x58, 0xD1, 0x21, 0x70, 0x2F, 0x12, 0xA1, 0x20, \r
-0x70, 0x13, 0x12, 0x37, 0x4E, 0xE4, 0xFF, 0x74, 0x02, 0xFE, 0x91, 0xFE, 0x7F, 0x64, 0x51, 0x4E, \r
-0xEF, 0x54, 0xFE, 0x80, 0x12, 0x12, 0x37, 0x4E, 0xE4, 0xFE, 0x74, 0x80, 0xFF, 0xE4, 0x91, 0xFE, \r
-0x7F, 0x64, 0x51, 0x4E, 0xEF, 0x44, 0x01, 0xFD, 0x7F, 0x64, 0x31, 0x39, 0x7F, 0x4E, 0xD1, 0x81, \r
-0x41, 0x40, 0xB1, 0x58, 0xD1, 0x21, 0x70, 0x06, 0xD1, 0x2F, 0xFF, 0xFE, 0x91, 0xFE, 0xD1, 0x38, \r
-0xB1, 0x63, 0x44, 0x01, 0xFD, 0x7F, 0x4F, 0x31, 0x39, 0x7F, 0x30, 0xD1, 0x31, 0x74, 0x66, 0xFF, \r
-0xEC, 0x12, 0x61, 0x5B, 0x7F, 0x30, 0x7E, 0x09, 0x12, 0x38, 0x45, 0x7F, 0x2C, 0x7E, 0x09, 0x12, \r
-0x37, 0x4E, 0xEF, 0x54, 0xFC, 0xFF, 0xEF, 0x44, 0x01, 0xFF, 0xEC, 0x12, 0x61, 0x5B, 0x7F, 0x2C, \r
-0x7E, 0x09, 0x12, 0x38, 0x45, 0x80, 0x52, 0x90, 0x07, 0x6E, 0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x07, \r
-0x65, 0xE0, 0x44, 0x18, 0xF0, 0x90, 0x94, 0xF5, 0xE0, 0x70, 0x33, 0x90, 0x94, 0xF7, 0xE0, 0x60, \r
-0x09, 0xB1, 0x58, 0x31, 0x39, 0xD1, 0x2F, 0xFF, 0x80, 0x21, 0x7F, 0x67, 0x51, 0x4E, 0xEF, 0x54, \r
-0xDF, 0xFD, 0x7F, 0x67, 0x31, 0x39, 0x12, 0xA1, 0x20, 0x70, 0x0B, 0x12, 0x37, 0x4E, 0xE4, 0x74, \r
-0x80, 0xFF, 0x74, 0x02, 0x80, 0x05, 0x12, 0x37, 0x4E, 0xE4, 0xFF, 0xFE, 0x91, 0xFE, 0xD1, 0x38, \r
-0xB1, 0x63, 0x54, 0xFE, 0xFD, 0x7F, 0x4F, 0x31, 0x39, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, \r
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xE0, 0x90, 0x95, 0x26, 0xF1, 0xDF, \r
-0x90, 0x95, 0x26, 0xE0, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
-0xD0, 0x90, 0x95, 0x21, 0xED, 0xF0, 0x90, 0x95, 0x20, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x41, \r
-0x7F, 0x47, 0x71, 0x0F, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x47, 0x31, \r
-0x39, 0x7F, 0x46, 0x71, 0x0F, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0xFD, 0x7F, 0x46, 0xD1, \r
-0x28, 0x60, 0x0D, 0x7F, 0x45, 0x71, 0x0F, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0x80, 0x0C, \r
-0x7F, 0x45, 0x71, 0x0F, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x45, 0x80, \r
-0x45, 0x90, 0x95, 0x20, 0xE0, 0x24, 0xF8, 0xF0, 0x7F, 0x63, 0x71, 0x0F, 0x80, 0x02, 0xC3, 0x33, \r
-0xD8, 0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x63, 0x31, 0x39, 0x7F, 0x62, 0x71, 0x0F, 0x80, 0x02, 0xC3, \r
-0x33, 0xD8, 0xFC, 0x4F, 0xFD, 0x7F, 0x62, 0xD1, 0x28, 0x60, 0x0E, 0x71, 0x0D, 0x80, 0x02, 0xC3, \r
-0x33, 0xD8, 0xFC, 0x4F, 0xFD, 0x7F, 0x61, 0x80, 0x0D, 0x71, 0x0D, 0x80, 0x02, 0xC3, 0x33, 0xD8, \r
-0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x61, 0x31, 0x39, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x61, 0x51, \r
-0x4E, 0x90, 0x95, 0x20, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x22, 0x7F, 0xFF, 0x12, 0x53, \r
-0xD9, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0xFA, 0x7D, 0x01, 0x31, 0x4D, 0x12, 0x8F, \r
-0xD0, 0x71, 0x68, 0x71, 0x55, 0x71, 0x55, 0x54, 0xFE, 0xFD, 0x7F, 0x02, 0x31, 0x39, 0x90, 0x01, \r
-0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, \r
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x54, 0xFE, 0xFD, 0x7F, 0x02, 0x31, 0x39, 0x7F, 0x02, 0x51, 0x4E, \r
-0xEF, 0x44, 0x01, 0xFD, 0x7F, 0x02, 0x31, 0x39, 0x7F, 0x02, 0x51, 0x4E, 0xEF, 0x22, 0x7F, 0x54, \r
-0x51, 0x4E, 0xE5, 0x0D, 0x5F, 0xF5, 0x11, 0x7F, 0x55, 0x51, 0x4E, 0xE5, 0x0E, 0x5F, 0xF5, 0x12, \r
-0x7F, 0x56, 0x51, 0x4E, 0xE5, 0x0F, 0x5F, 0xF5, 0x13, 0x7F, 0x57, 0x51, 0x4E, 0xE5, 0x10, 0x5F, \r
-0xF5, 0x14, 0xAD, 0x11, 0x7F, 0x54, 0x31, 0x39, 0xAD, 0x12, 0x7F, 0x55, 0x31, 0x39, 0xAD, 0x13, \r
-0x7F, 0x56, 0x31, 0x39, 0xAD, 0x14, 0x7F, 0x57, 0x31, 0x39, 0x53, 0x91, 0xEF, 0x22, 0x7F, 0x81, \r
-0x51, 0x4E, 0xEF, 0x54, 0xFE, 0xFD, 0x7F, 0x81, 0x31, 0x39, 0x7F, 0x80, 0xD1, 0x81, 0xFD, 0x7F, \r
-0x80, 0x31, 0x39, 0x12, 0x8B, 0xA5, 0x12, 0x3E, 0x11, 0xF1, 0xF7, 0x12, 0x8C, 0x07, 0x7F, 0x01, \r
-0x12, 0x47, 0x00, 0x90, 0x93, 0x27, 0x74, 0x02, 0xF0, 0xFF, 0x12, 0x47, 0x00, 0x90, 0x93, 0x27, \r
-0xE0, 0x04, 0xF0, 0x91, 0x13, 0x12, 0x88, 0xCC, 0x7F, 0x80, 0xF1, 0xBA, 0x7F, 0x80, 0x31, 0x39, \r
-0x75, 0x28, 0xFF, 0x12, 0x5F, 0xFD, 0x12, 0x8B, 0xCC, 0x12, 0x90, 0x33, 0x7F, 0x81, 0x51, 0x4E, \r
-0xEF, 0x44, 0x04, 0xFD, 0x7F, 0x81, 0x31, 0x39, 0x12, 0x8C, 0x11, 0x12, 0x90, 0x5E, 0xE4, 0xFF, \r
-0x02, 0x47, 0x89, 0xF1, 0xC1, 0x90, 0x8D, 0x06, 0xEF, 0xF0, 0xD1, 0x40, 0x90, 0x01, 0x64, 0x74, \r
-0x01, 0xF0, 0x90, 0x04, 0x23, 0xE0, 0x44, 0x80, 0xF0, 0x7F, 0x17, 0x51, 0x4E, 0xEF, 0x54, 0xFC, \r
-0x44, 0x04, 0xFD, 0x7F, 0x17, 0x31, 0x39, 0x7F, 0x16, 0x51, 0x4E, 0xEF, 0x54, 0x0F, 0x44, 0x40, \r
-0xFD, 0x7F, 0x16, 0x31, 0x39, 0x7F, 0x38, 0xF1, 0xBA, 0x7F, 0x38, 0x31, 0x39, 0x02, 0x37, 0x99, \r
-0xAD, 0x07, 0x90, 0x8E, 0xC9, 0xE0, 0x75, 0xF0, 0x40, 0xA4, 0xFF, 0x90, 0x95, 0x09, 0xE5, 0xF0, \r
-0x12, 0xA1, 0x31, 0x90, 0x8E, 0xCA, 0xE0, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x95, 0x0C, 0xF0, 0xED, \r
-0x64, 0x01, 0x70, 0x70, 0x90, 0x95, 0x09, 0xE0, 0x70, 0x02, 0xA3, 0xE0, 0x60, 0x0B, 0x90, 0x95, \r
-0x09, 0x74, 0xFF, 0x75, 0xF0, 0xD0, 0x12, 0x08, 0xD6, 0x91, 0xF0, 0x13, 0x54, 0x07, 0x7D, 0x00, \r
-0x20, 0xE0, 0x02, 0x7D, 0x01, 0x51, 0x6A, 0x91, 0xF0, 0x13, 0x54, 0x01, 0xFD, 0x51, 0x6A, 0x90, \r
-0x8E, 0xCA, 0xE0, 0x30, 0xE0, 0x3E, 0x91, 0xE5, 0x13, 0x54, 0x07, 0x7D, 0x00, 0x20, 0xE0, 0x02, \r
-0x7D, 0x01, 0x51, 0x6A, 0xE4, 0x90, 0x95, 0x0B, 0xF0, 0x90, 0x95, 0x0C, 0xE0, 0xFF, 0x90, 0x95, \r
-0x0B, 0xE0, 0xC3, 0x9F, 0x50, 0x1E, 0x91, 0xE5, 0x13, 0x54, 0x01, 0xFD, 0x51, 0x6A, 0x91, 0xE5, \r
-0x13, 0x54, 0x07, 0x7D, 0x00, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x51, 0x6A, 0x90, 0x95, 0x0B, 0xE0, \r
-0x04, 0xF0, 0x80, 0xD5, 0x22, 0x90, 0x95, 0x09, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x3E, 0x50, \r
-0x90, 0x8E, 0xC8, 0xE0, 0x54, 0x7F, 0xFF, 0x90, 0x8E, 0xC7, 0xE0, 0xFE, 0xC4, 0x22, 0xEC, 0x90, \r
-0xAA, 0xB9, 0x12, 0x08, 0x6D, 0x7F, 0x48, 0x7E, 0x09, 0x02, 0x38, 0x45, 0x90, 0x8E, 0x12, 0xE0, \r
-0x44, 0x10, 0xF0, 0x90, 0x8E, 0x20, 0xE0, 0xFD, 0x7F, 0x93, 0x31, 0x39, 0x90, 0x8E, 0x16, 0xE0, \r
+0xEF, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, 0xED, 0x39, 0xFD, 0xEC, 0x38, 0xFC, 0x22, 0xC3, 0xEF, 0x9B, \r
+0xFF, 0xEE, 0x9A, 0xFE, 0xED, 0x99, 0xFD, 0xEC, 0x98, 0xFC, 0x22, 0xE8, 0x8F, 0xF0, 0xA4, 0xCC, \r
+0x8B, 0xF0, 0xA4, 0x2C, 0xFC, 0xE9, 0x8E, 0xF0, 0xA4, 0x2C, 0xFC, 0x8A, 0xF0, 0xED, 0xA4, 0x2C, \r
+0xFC, 0xEA, 0x8E, 0xF0, 0xA4, 0xCD, 0xA8, 0xF0, 0x8B, 0xF0, 0xA4, 0x2D, 0xCC, 0x38, 0x25, 0xF0, \r
+0xFD, 0xE9, 0x8F, 0xF0, 0xA4, 0x2C, 0xCD, 0x35, 0xF0, 0xFC, 0xEB, 0x8E, 0xF0, 0xA4, 0xFE, 0xA9, \r
+0xF0, 0xEB, 0x8F, 0xF0, 0xA4, 0xCF, 0xC5, 0xF0, 0x2E, 0xCD, 0x39, 0xFE, 0xE4, 0x3C, 0xFC, 0xEA, \r
+0xA4, 0x2D, 0xCE, 0x35, 0xF0, 0xFD, 0xE4, 0x3C, 0xFC, 0x22, 0x75, 0xF0, 0x08, 0x75, 0x82, 0x00, \r
+0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xCD, 0x33, 0xCD, 0xCC, 0x33, 0xCC, 0xC5, 0x82, 0x33, 0xC5, \r
+0x82, 0x9B, 0xED, 0x9A, 0xEC, 0x99, 0xE5, 0x82, 0x98, 0x40, 0x0C, 0xF5, 0x82, 0xEE, 0x9B, 0xFE, \r
+0xED, 0x9A, 0xFD, 0xEC, 0x99, 0xFC, 0x0F, 0xD5, 0xF0, 0xD6, 0xE4, 0xCE, 0xFB, 0xE4, 0xCD, 0xFA, \r
+0xE4, 0xCC, 0xF9, 0xA8, 0x82, 0x22, 0xB8, 0x00, 0xC1, 0xB9, 0x00, 0x59, 0xBA, 0x00, 0x2D, 0xEC, \r
+0x8B, 0xF0, 0x84, 0xCF, 0xCE, 0xCD, 0xFC, 0xE5, 0xF0, 0xCB, 0xF9, 0x78, 0x18, 0xEF, 0x2F, 0xFF, \r
+0xEE, 0x33, 0xFE, 0xED, 0x33, 0xFD, 0xEC, 0x33, 0xFC, 0xEB, 0x33, 0xFB, 0x10, 0xD7, 0x03, 0x99, \r
+0x40, 0x04, 0xEB, 0x99, 0xFB, 0x0F, 0xD8, 0xE5, 0xE4, 0xF9, 0xFA, 0x22, 0x78, 0x18, 0xEF, 0x2F, \r
+0xFF, 0xEE, 0x33, 0xFE, 0xED, 0x33, 0xFD, 0xEC, 0x33, 0xFC, 0xC9, 0x33, 0xC9, 0x10, 0xD7, 0x05, \r
+0x9B, 0xE9, 0x9A, 0x40, 0x07, 0xEC, 0x9B, 0xFC, 0xE9, 0x9A, 0xF9, 0x0F, 0xD8, 0xE0, 0xE4, 0xC9, \r
+0xFA, 0xE4, 0xCC, 0xFB, 0x22, 0x75, 0xF0, 0x10, 0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xED, 0x33, \r
+0xFD, 0xCC, 0x33, 0xCC, 0xC8, 0x33, 0xC8, 0x10, 0xD7, 0x07, 0x9B, 0xEC, 0x9A, 0xE8, 0x99, 0x40, \r
+0x0A, 0xED, 0x9B, 0xFD, 0xEC, 0x9A, 0xFC, 0xE8, 0x99, 0xF8, 0x0F, 0xD5, 0xF0, 0xDA, 0xE4, 0xCD, \r
+0xFB, 0xE4, 0xCC, 0xFA, 0xE4, 0xC8, 0xF9, 0x22, 0xEF, 0x5B, 0xFF, 0xEE, 0x5A, 0xFE, 0xED, 0x59, \r
+0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC, 0x48, \r
+0xFC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8, 0x9C, \r
+0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xE0, \r
+0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5, 0x82, \r
+0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x22, \r
+0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, \r
+0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, \r
+0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xE3, \r
+0xF5, 0xF0, 0x09, 0xE2, 0x08, 0xB5, 0xF0, 0x6B, 0xDF, 0xF5, 0x80, 0x67, 0xE3, 0xF5, 0xF0, 0x09, \r
+0xE6, 0x08, 0xB5, 0xF0, 0x5E, 0xDF, 0xF5, 0x80, 0x5A, 0x87, 0xF0, 0x09, 0xE6, 0x08, 0xB5, 0xF0, \r
+0x52, 0xDF, 0xF6, 0x80, 0x4E, 0x87, 0xF0, 0x09, 0xE2, 0x08, 0xB5, 0xF0, 0x46, 0xDF, 0xF6, 0x80, \r
+0x42, 0x88, 0x82, 0x8C, 0x83, 0x87, 0xF0, 0x09, 0xE0, 0xA3, 0xB5, 0xF0, 0x36, 0xDF, 0xF6, 0x80, \r
+0x32, 0x88, 0x82, 0x8C, 0x83, 0x87, 0xF0, 0x09, 0xE4, 0x93, 0xA3, 0xB5, 0xF0, 0x25, 0xDF, 0xF5, \r
+0x80, 0x21, 0x88, 0x82, 0x8C, 0x83, 0xE3, 0xF5, 0xF0, 0x09, 0xE0, 0xA3, 0xB5, 0xF0, 0x14, 0xDF, \r
+0xF5, 0x80, 0x10, 0x88, 0x82, 0x8C, 0x83, 0xE3, 0xF5, 0xF0, 0x09, 0xE4, 0x93, 0xA3, 0xB5, 0xF0, \r
+0x02, 0xDF, 0xF4, 0x02, 0x45, 0x7E, 0x80, 0x87, 0x80, 0xE9, 0x80, 0x90, 0x80, 0xD4, 0x80, 0x3E, \r
+0x80, 0x15, 0x80, 0x6E, 0x80, 0x7E, 0x80, 0x9D, 0x80, 0xB7, 0x80, 0x8D, 0x80, 0xA3, 0x80, 0x51, \r
+0x80, 0x74, 0x80, 0x3C, 0x02, 0x45, 0x8A, 0x89, 0x82, 0x8A, 0x83, 0xEC, 0xFA, 0xE4, 0x93, 0xF5, \r
+0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, \r
+0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xB5, 0xF0, 0x76, 0xDF, 0xE3, 0xDE, 0xE1, 0x80, 0x70, 0x89, 0x82, \r
+0x8A, 0x83, 0xE4, 0x93, 0xF5, 0xF0, 0xA3, 0xE2, 0x08, 0xB5, 0xF0, 0x62, 0xDF, 0xF4, 0x80, 0x5E, \r
+0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE6, 0x08, 0xB5, 0xF0, 0x51, 0xDF, 0xF5, 0x80, \r
+0x4D, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE2, 0x08, 0xB5, 0xF0, 0x40, 0xDF, 0xF5, \r
+0x80, 0x3C, 0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, 0xF5, 0xF0, 0xA3, 0xE6, 0x08, 0xB5, 0xF0, 0x2E, \r
+0xDF, 0xF4, 0x80, 0x2A, 0x80, 0x02, 0x80, 0x57, 0x89, 0x82, 0x8A, 0x83, 0xEC, 0xFA, 0xE4, 0x93, \r
+0xF5, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xE0, 0xA3, 0xC8, 0xC5, 0x82, \r
+0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xB5, 0xF0, 0x06, 0xDF, 0xE4, 0xDE, 0xE2, 0x80, 0x00, 0x7F, 0xFF, \r
+0xB5, 0xF0, 0x02, 0x0F, 0x22, 0x40, 0x02, 0x7F, 0x01, 0x22, 0x89, 0x82, 0x8A, 0x83, 0xEC, 0xFA, \r
+0xE0, 0xF5, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xE0, 0xA3, 0xC8, 0xC5, \r
+0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xB5, 0xF0, 0xD5, 0xDF, 0xE5, 0xDE, 0xE3, 0x80, 0xCF, 0x89, \r
+0x82, 0x8A, 0x83, 0xEC, 0xFA, 0xE0, 0xF5, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, \r
+0xCC, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xB5, 0xF0, 0xAF, 0xDF, \r
+0xE4, 0xDE, 0xE2, 0x80, 0xA9, 0x88, 0xF0, 0xEF, 0x60, 0x01, 0x0E, 0x4E, 0x60, 0xAB, 0xED, 0x24, \r
+0x02, 0xB4, 0x04, 0x00, 0x50, 0x98, 0xF5, 0x82, 0xEB, 0x24, 0x02, 0xB4, 0x04, 0x00, 0x50, 0x8E, \r
+0x23, 0x23, 0x45, 0x82, 0x23, 0x90, 0x44, 0xC6, 0x73, 0xC2, 0xAF, 0x80, 0xFE, 0x32, 0x12, 0x45, \r
+0xFD, 0x85, 0xD0, 0x0B, 0x75, 0xD0, 0x08, 0xAA, 0xE0, 0xC2, 0x8C, 0xE5, 0x8A, 0x24, 0x67, 0xF5, \r
+0x8A, 0xE5, 0x8C, 0x34, 0x79, 0xF5, 0x8C, 0xD2, 0x8C, 0xEC, 0x24, 0x87, 0xF8, 0xE6, 0xBC, 0x02, \r
+0x02, 0x74, 0xFF, 0xC3, 0x95, 0x81, 0xB4, 0x40, 0x00, 0x40, 0xCE, 0x79, 0x03, 0x78, 0x80, 0x16, \r
+0xE6, 0x08, 0x70, 0x0B, 0xC2, 0xAF, 0xE6, 0x30, 0xE1, 0x03, 0x44, 0x18, 0xF6, 0xD2, 0xAF, 0x08, \r
+0xD9, 0xED, 0xEA, 0x8B, 0xD0, 0x22, 0xE5, 0x0C, 0xFF, 0x23, 0x24, 0x81, 0xF8, 0x0F, 0x08, 0x08, \r
+0xBF, 0x03, 0x04, 0x7F, 0x00, 0x78, 0x81, 0xE6, 0x30, 0xE4, 0xF2, 0x00, 0xE5, 0x0C, 0xC3, 0x9F, \r
+0x50, 0x20, 0x05, 0x0C, 0x74, 0x86, 0x25, 0x0C, 0xF8, 0xE6, 0xFD, 0xA6, 0x81, 0x08, 0xE6, 0xAE, \r
+0x0C, 0xBE, 0x02, 0x02, 0x74, 0xFF, 0xCD, 0xF8, 0xE8, 0x6D, 0x60, 0xE0, 0x08, 0xE6, 0xC0, 0xE0, \r
+0x80, 0xF6, 0xE5, 0x0C, 0xD3, 0x9F, 0x40, 0x27, 0xE5, 0x0C, 0x24, 0x87, 0xF8, 0xE6, 0xAE, 0x0C, \r
+0xBE, 0x02, 0x02, 0x74, 0xFF, 0xFD, 0x18, 0xE6, 0xCD, 0xF8, 0xE5, 0x81, 0x6D, 0x60, 0x06, 0xD0, \r
+0xE0, 0xF6, 0x18, 0x80, 0xF5, 0xE5, 0x0C, 0x24, 0x86, 0xC8, 0xF6, 0x15, 0x0C, 0x80, 0xD3, 0xE5, \r
+0x0C, 0x23, 0x24, 0x81, 0xF8, 0x7F, 0x04, 0xC2, 0xAF, 0xE6, 0x30, 0xE0, 0x03, 0x10, 0xE2, 0x0C, \r
+0x7F, 0x00, 0x30, 0xE1, 0x07, 0x30, 0xE3, 0x04, 0x7F, 0x08, 0x54, 0xF4, 0x54, 0x7C, 0xC6, 0xD2, \r
+0xAF, 0x54, 0x80, 0x42, 0x07, 0x22, 0x78, 0x86, 0xA6, 0x81, 0x74, 0x02, 0x60, 0x06, 0xFF, 0x08, \r
+0x76, 0xFF, 0xDF, 0xFB, 0x7F, 0x03, 0xE4, 0x78, 0x80, 0xF6, 0x08, 0xF6, 0x08, 0xDF, 0xFA, 0x78, \r
+0x81, 0x76, 0x30, 0x90, 0x49, 0x41, 0x74, 0x01, 0x93, 0xC0, 0xE0, 0xE4, 0x93, 0xC0, 0xE0, 0x43, \r
+0x89, 0x01, 0x75, 0x8A, 0x60, 0x75, 0x8C, 0x79, 0xD2, 0x8C, 0xD2, 0xAF, 0x22, 0x02, 0xEF, 0xD3, \r
+0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0x74, 0x81, 0x2F, 0x2F, 0xF8, 0xE6, 0x20, 0xE5, 0xF4, \r
+0xC2, 0xAF, 0xE6, 0x44, 0x30, 0xF6, 0xD2, 0xAF, 0xAE, 0x0C, 0xEE, 0xC3, 0x9F, 0x50, 0x21, 0x0E, \r
+0x74, 0x86, 0x2E, 0xF8, 0xE6, 0xF9, 0x08, 0xE6, 0x18, 0xBE, 0x02, 0x02, 0x74, 0xFF, 0xFD, 0xED, \r
+0x69, 0x60, 0x09, 0x09, 0xE7, 0x19, 0x19, 0xF7, 0x09, 0x09, 0x80, 0xF3, 0x16, 0x16, 0x80, 0xDA, \r
+0xEE, 0xD3, 0x9F, 0x40, 0x04, 0x05, 0x81, 0x05, 0x81, 0xEE, 0xD3, 0x9F, 0x40, 0x22, 0x74, 0x86, \r
+0x2E, 0xF8, 0x08, 0xE6, 0xF9, 0xEE, 0xB5, 0x0C, 0x02, 0xA9, 0x81, 0x18, 0x06, 0x06, 0xE6, 0xFD, \r
+0xED, 0x69, 0x60, 0x09, 0x19, 0x19, 0xE7, 0x09, 0x09, 0xF7, 0x19, 0x80, 0xF3, 0x1E, 0x80, 0xD9, \r
+0xEF, 0x24, 0x86, 0xF8, 0xE6, 0x04, 0xF8, 0xEF, 0x2F, 0x04, 0x90, 0x49, 0x41, 0x93, 0xF6, 0x08, \r
+0xEF, 0x2F, 0x93, 0xF6, 0x7F, 0x00, 0x22, 0xEF, 0xD3, 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, \r
+0xEF, 0x23, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE5, 0xF4, 0xC2, 0xAF, 0xE6, 0x54, 0x8C, 0xF6, 0xD2, \r
+0xAF, 0xE5, 0x0C, 0xB5, 0x07, 0x0A, 0x74, 0x86, 0x2F, 0xF8, 0xE6, 0xF5, 0x81, 0x02, 0x46, 0x46, \r
+0x50, 0x2E, 0x74, 0x87, 0x2F, 0xF8, 0xE6, 0xBF, 0x02, 0x02, 0x74, 0xFF, 0xFD, 0x18, 0xE6, 0xF9, \r
+0x74, 0x86, 0x2F, 0xF8, 0xFB, 0xE6, 0xFC, 0xE9, 0x6C, 0x60, 0x08, 0xA8, 0x05, 0xE7, 0xF6, 0x1D, \r
+0x19, 0x80, 0xF4, 0xA8, 0x03, 0xA6, 0x05, 0x1F, 0xE5, 0x0C, 0xB5, 0x07, 0xE3, 0x7F, 0x00, 0x22, \r
+0x74, 0x87, 0x2F, 0xF8, 0xE6, 0xFD, 0x18, 0x86, 0x01, 0x0F, 0x74, 0x86, 0x2F, 0xF8, 0xA6, 0x01, \r
+0x08, 0x86, 0x04, 0xE5, 0x0C, 0xB5, 0x07, 0x02, 0xAC, 0x81, 0xED, 0x6C, 0x60, 0x08, 0x0D, 0x09, \r
+0xA8, 0x05, 0xE6, 0xF7, 0x80, 0xF4, 0xE5, 0x0C, 0xB5, 0x07, 0xDE, 0x89, 0x81, 0x7F, 0x00, 0x22, \r
+0xEF, 0xD3, 0x94, 0x02, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0xEF, 0x23, 0x24, 0x81, 0xF8, 0xC2, 0xAF, \r
+0xE6, 0x30, 0xE5, 0x05, 0x30, 0xE0, 0x02, 0xD2, 0xE4, 0xD2, 0xE2, 0xC6, 0xD2, 0xAF, 0x7F, 0x00, \r
+0x30, 0xE2, 0x01, 0x0F, 0x02, 0x46, 0x45, 0x8F, 0xF0, 0xE4, 0xFF, 0xFE, 0xE5, 0x0C, 0x23, 0x24, \r
+0x80, 0xF8, 0xC2, 0xA9, 0x30, 0xF7, 0x0D, 0x7F, 0x08, 0xE6, 0x60, 0x0B, 0x2D, 0xF6, 0x60, 0x30, \r
+0x50, 0x2E, 0x80, 0x07, 0x30, 0xF1, 0x06, 0xED, 0xF6, 0x60, 0x25, 0x7E, 0x02, 0x08, 0x30, 0xF0, \r
+0x10, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x23, 0x0E, 0x30, 0xE2, 0x0C, 0xD2, 0xAF, 0x7F, 0x04, 0x80, \r
+0x12, 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x13, 0x54, 0xEC, 0x4E, 0xF6, 0xD2, 0xAF, 0x02, 0x46, 0x46, \r
+0x7F, 0x08, 0x08, 0xEF, 0x44, 0x83, 0xF4, 0xC2, 0xAF, 0x56, 0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x4F, \r
+0xFF, 0x22, 0x02, 0x48, 0xE0, 0x02, 0x46, 0xD6, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, \r
+0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, \r
+0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, \r
+0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, \r
+0x90, 0x49, 0x25, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, \r
+0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, \r
+0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, \r
+0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, \r
+0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0x41, 0x95, 0x42, 0x00, 0x41, 0x95, 0x43, 0x00, 0x41, 0x95, 0x56, \r
+0x00, 0x41, 0x94, 0x8B, 0x00, 0x41, 0x94, 0x6D, 0x00, 0x44, 0x95, 0x32, 0x00, 0x50, 0xF2, 0x01, \r
+0x00, 0x4B, 0xBD, 0x58, 0x02, 0x60, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, \r
+0x75, 0x83, 0x00, 0xED, 0xF1, 0xEE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, \r
+0xC0, 0xD0, 0x90, 0x95, 0x16, 0xEF, 0xF0, 0x90, 0x95, 0x18, 0xEB, 0xF0, 0xED, 0x60, 0x02, 0x21, \r
+0xFF, 0x90, 0x07, 0x6E, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x07, 0x65, 0xE0, 0x54, 0xE7, 0xF0, 0x90, \r
+0x95, 0x18, 0xE0, 0x70, 0x38, 0xB1, 0x83, 0x70, 0x2E, 0x12, 0xA6, 0x94, 0x70, 0x12, 0x12, 0x37, \r
+0x4E, 0xE4, 0xFF, 0x74, 0x02, 0xB1, 0x1D, 0x7F, 0x64, 0x51, 0x5D, 0xEF, 0x54, 0xFE, 0x80, 0x12, \r
+0x12, 0x37, 0x4E, 0xE4, 0xFE, 0x74, 0x80, 0xFF, 0xE4, 0xB1, 0x1E, 0x7F, 0x64, 0x51, 0x5D, 0xEF, \r
+0x44, 0x01, 0xFD, 0x7F, 0x64, 0x31, 0x47, 0x7F, 0x4E, 0xD1, 0xCE, 0x41, 0x4F, 0xB1, 0x83, 0x70, \r
+0x05, 0xD1, 0x7C, 0xFF, 0xB1, 0x1D, 0xD1, 0x85, 0xB1, 0x78, 0x44, 0x01, 0xFD, 0x7F, 0x4F, 0x31, \r
+0x47, 0x7F, 0x30, 0xD1, 0x7E, 0x74, 0x66, 0xFF, 0xEC, 0x12, 0x9E, 0x99, 0x7F, 0x30, 0x7E, 0x09, \r
+0x12, 0x38, 0x45, 0x7F, 0x2C, 0x7E, 0x09, 0x12, 0x37, 0x4E, 0xEF, 0x54, 0xFC, 0xFF, 0xEF, 0x44, \r
+0x01, 0xFF, 0xEC, 0x12, 0x9E, 0x99, 0x7F, 0x2C, 0x7E, 0x09, 0x12, 0x38, 0x45, 0x80, 0x59, 0x90, \r
+0x07, 0x6E, 0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x07, 0x65, 0xE0, 0x44, 0x18, 0xF0, 0x90, 0x95, 0x16, \r
+0xE0, 0x70, 0x3A, 0x90, 0x95, 0x18, 0xE0, 0x60, 0x11, 0x7F, 0x67, 0x51, 0x5D, 0xEF, 0x44, 0x20, \r
+0xFD, 0x7F, 0x67, 0x31, 0x47, 0xD1, 0x7C, 0xFF, 0x80, 0x21, 0x7F, 0x67, 0x51, 0x5D, 0xEF, 0x54, \r
+0xDF, 0xFD, 0x7F, 0x67, 0x31, 0x47, 0x12, 0xA6, 0x94, 0x70, 0x0B, 0x12, 0x37, 0x4E, 0xE4, 0x74, \r
+0x80, 0xFF, 0x74, 0x02, 0x80, 0x05, 0x12, 0x37, 0x4E, 0xE4, 0xFF, 0xB1, 0x1D, 0xD1, 0x85, 0xB1, \r
+0x78, 0x54, 0xFE, 0xFD, 0x7F, 0x4F, 0x31, 0x47, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xE0, 0x90, 0x95, 0x50, 0xF1, 0xEE, 0x90, \r
+0x95, 0x50, 0xE0, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
+0x90, 0x95, 0x4B, 0xED, 0xF0, 0x90, 0x95, 0x4A, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x41, 0x7F, \r
+0x47, 0x71, 0x1E, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x47, 0x31, 0x47, \r
+0x7F, 0x46, 0x71, 0x1E, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0xFD, 0x7F, 0x46, 0xD1, 0x75, \r
+0x60, 0x0D, 0x7F, 0x45, 0x71, 0x1E, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4F, 0x80, 0x0C, 0x7F, \r
+0x45, 0x71, 0x1E, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x45, 0x80, 0x45, \r
+0x90, 0x95, 0x4A, 0xE0, 0x24, 0xF8, 0xF0, 0x7F, 0x63, 0x71, 0x1E, 0x80, 0x02, 0xC3, 0x33, 0xD8, \r
+0xFC, 0xF4, 0x5F, 0xFD, 0x7F, 0x63, 0x31, 0x47, 0x7F, 0x62, 0x71, 0x1E, 0x80, 0x02, 0xC3, 0x33, \r
+0xD8, 0xFC, 0x4F, 0xFD, 0x7F, 0x62, 0xD1, 0x75, 0x60, 0x0E, 0x71, 0x1C, 0x80, 0x02, 0xC3, 0x33, \r
+0xD8, 0xFC, 0x4F, 0xFD, 0x7F, 0x61, 0x80, 0x0D, 0x71, 0x1C, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, \r
+0xF4, 0x5F, 0xFD, 0x7F, 0x61, 0x31, 0x47, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x61, 0x51, 0x5D, \r
+0x90, 0x95, 0x4A, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x22, 0x7F, 0xFF, 0x12, 0x5A, 0x57, \r
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0xF8, 0x7D, 0x01, 0x31, 0x5B, 0x12, 0x5D, 0x30, \r
+0x71, 0x77, 0x71, 0x64, 0x71, 0x64, 0x54, 0xFE, 0xFD, 0x7F, 0x02, 0x31, 0x47, 0x90, 0x01, 0x00, \r
+0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0xD0, \r
+0xD0, 0x92, 0xAF, 0x22, 0x54, 0xFE, 0xFD, 0x7F, 0x02, 0x31, 0x47, 0x7F, 0x02, 0x51, 0x5D, 0xEF, \r
+0x44, 0x01, 0xFD, 0x7F, 0x02, 0x31, 0x47, 0x7F, 0x02, 0x51, 0x5D, 0xEF, 0x22, 0x7F, 0x54, 0x51, \r
+0x5D, 0xE5, 0x0D, 0x5F, 0xF5, 0x11, 0x7F, 0x55, 0x51, 0x5D, 0xE5, 0x0E, 0x5F, 0xF5, 0x12, 0x7F, \r
+0x56, 0x51, 0x5D, 0xE5, 0x0F, 0x5F, 0xF5, 0x13, 0x7F, 0x57, 0x51, 0x5D, 0xE5, 0x10, 0x5F, 0xF5, \r
+0x14, 0xAD, 0x11, 0x7F, 0x54, 0x31, 0x47, 0xAD, 0x12, 0x7F, 0x55, 0x31, 0x47, 0xAD, 0x13, 0x7F, \r
+0x56, 0x31, 0x47, 0xAD, 0x14, 0x7F, 0x57, 0x31, 0x47, 0x53, 0x91, 0xEF, 0x22, 0x7F, 0x81, 0x51, \r
+0x5D, 0xEF, 0x54, 0xFE, 0xFD, 0x7F, 0x81, 0x31, 0x47, 0x7F, 0x80, 0xD1, 0xCE, 0xFD, 0x7F, 0x80, \r
+0x31, 0x47, 0x12, 0x96, 0x3C, 0x12, 0x3E, 0x11, 0x12, 0x94, 0xAB, 0x12, 0x96, 0x7D, 0x7F, 0x01, \r
+0x12, 0x47, 0x0E, 0x90, 0x93, 0x40, 0x74, 0x02, 0xF0, 0xFF, 0x12, 0x47, 0x0E, 0x90, 0x93, 0x40, \r
+0xE0, 0x04, 0xF0, 0x91, 0x23, 0x12, 0x88, 0x8D, 0x7F, 0x80, 0xF1, 0xB3, 0x7F, 0x80, 0x31, 0x47, \r
+0x75, 0x28, 0xFF, 0x12, 0x57, 0xFB, 0x12, 0x94, 0x4F, 0x12, 0x9D, 0x5C, 0x7F, 0x81, 0x51, 0x5D, \r
+0xEF, 0x44, 0x04, 0xFD, 0x7F, 0x81, 0x31, 0x47, 0x12, 0x96, 0x87, 0x12, 0x9E, 0x0D, 0xE4, 0xFF, \r
+0x02, 0x47, 0x97, 0xF1, 0xBA, 0x90, 0x8D, 0x07, 0xEF, 0xF0, 0xD1, 0x8D, 0x90, 0x01, 0x64, 0x74, \r
+0x01, 0xF0, 0x90, 0x04, 0x23, 0xE0, 0x44, 0x80, 0xF0, 0x7F, 0x17, 0x51, 0x5D, 0xEF, 0x54, 0xFC, \r
+0x44, 0x04, 0xFD, 0x7F, 0x17, 0x31, 0x47, 0x7F, 0x16, 0x51, 0x5D, 0xEF, 0x54, 0x0F, 0x44, 0x40, \r
+0xFD, 0x7F, 0x16, 0x31, 0x47, 0x7F, 0x38, 0xF1, 0xB3, 0x7F, 0x38, 0x31, 0x47, 0x02, 0x37, 0x99, \r
+0xAD, 0x07, 0x90, 0x8E, 0xB4, 0xE0, 0x75, 0xF0, 0x40, 0xA4, 0xFF, 0x90, 0x95, 0x0C, 0xE5, 0xF0, \r
+0x12, 0xA6, 0x9D, 0x90, 0x8E, 0xB5, 0xE0, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x95, 0x0F, 0xF0, 0x90, \r
+0x8E, 0xB6, 0xE0, 0x13, 0x13, 0x54, 0x01, 0x90, 0x95, 0x10, 0xF0, 0xED, 0x64, 0x01, 0x70, 0x6E, \r
+0xE0, 0x70, 0x15, 0x90, 0x95, 0x0C, 0xE0, 0x70, 0x02, 0xA3, 0xE0, 0x60, 0x0B, 0x90, 0x95, 0x0C, \r
+0x74, 0xFF, 0x75, 0xF0, 0xD0, 0x12, 0x08, 0xD6, 0xB1, 0x0E, 0x54, 0x07, 0x7D, 0x00, 0x20, 0xE0, \r
+0x02, 0x7D, 0x01, 0x51, 0x79, 0xB1, 0x0E, 0x54, 0x01, 0xFD, 0x51, 0x79, 0x90, 0x8E, 0xB5, 0xE0, \r
+0x30, 0xE0, 0x3B, 0x91, 0xFF, 0x54, 0x07, 0x7D, 0x00, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x51, 0x79, \r
+0xE4, 0x90, 0x95, 0x0E, 0xF0, 0x90, 0x95, 0x0F, 0xE0, 0xFF, 0x90, 0x95, 0x0E, 0xE0, 0xC3, 0x9F, \r
+0x50, 0x1C, 0x91, 0xFF, 0x54, 0x01, 0xFD, 0x51, 0x79, 0x91, 0xFF, 0x54, 0x07, 0x7D, 0x00, 0x20, \r
+0xE0, 0x02, 0x7D, 0x01, 0x51, 0x79, 0x90, 0x95, 0x0E, 0xE0, 0x04, 0xF0, 0x80, 0xD7, 0x22, 0x90, \r
+0x95, 0x0C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x95, 0x10, 0xE0, 0xFD, 0xB1, 0x94, 0x90, 0x8E, \r
+0xB3, 0xE0, 0x54, 0x7F, 0xFF, 0x90, 0x8E, 0xB2, 0xE0, 0xFE, 0xC4, 0x13, 0x22, 0xFE, 0xEC, 0x90, \r
+0xAA, 0xB9, 0x12, 0x08, 0x6D, 0x7F, 0x48, 0x7E, 0x09, 0x02, 0x38, 0x45, 0x90, 0x8E, 0x43, 0xE0, \r
+0x44, 0x10, 0xF0, 0x90, 0x8E, 0x52, 0xE0, 0xFD, 0x7F, 0x93, 0x31, 0x47, 0x90, 0x8E, 0x48, 0xE0, \r
 0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x05, 0x74, 0x10, 0xF0, 0x80, 0x06, 0x90, 0x01, \r
 0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x05, 0x74, 0x10, 0xF0, 0x80, 0x06, 0x90, 0x01, \r
-0x2F, 0x74, 0x90, 0xF0, 0x7F, 0x08, 0x51, 0x4E, 0xEF, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x31, 0x39, \r
-0x7F, 0x01, 0x12, 0x60, 0xA4, 0x7F, 0x90, 0x51, 0x4E, 0xEF, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x31, \r
-0x39, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0x7F, 0x67, 0x51, 0x4E, 0xEF, 0x44, 0x20, 0xFD, \r
-0x7F, 0x67, 0x22, 0xFD, 0x7F, 0x4E, 0x31, 0x39, 0x7F, 0x4F, 0x51, 0x4E, 0xEF, 0x22, 0x90, 0x01, \r
-0x30, 0xE4, 0xB1, 0xB3, 0x90, 0x01, 0x38, 0xB1, 0xB3, 0xFD, 0x7F, 0x50, 0x31, 0x39, 0xE4, 0xFD, \r
-0x7F, 0x51, 0x31, 0x39, 0xE4, 0xFD, 0x7F, 0x52, 0x31, 0x39, 0xE4, 0xFD, 0x7F, 0x53, 0x21, 0x39, \r
-0x90, 0x01, 0x34, 0x74, 0xFF, 0xB1, 0xB3, 0x90, 0x01, 0x3C, 0xB1, 0xB3, 0xFD, 0x7F, 0x54, 0x31, \r
-0x39, 0x7D, 0xFF, 0x7F, 0x55, 0x31, 0x39, 0x7D, 0xFF, 0x7F, 0x56, 0x31, 0x39, 0x7D, 0xFF, 0x7F, \r
-0x57, 0x21, 0x39, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, \r
-0xC0, 0xD0, 0xD1, 0x1B, 0x30, 0xE6, 0x1B, 0x90, 0x00, 0x8C, 0xE0, 0xF5, 0x26, 0x7F, 0x8D, 0x51, \r
-0x4E, 0x90, 0x00, 0x8E, 0xE0, 0xF5, 0x27, 0xD1, 0x1B, 0x30, 0xE0, 0x06, 0xE4, 0xFD, 0x7F, 0x8D, \r
-0x31, 0x39, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, \r
-0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x06, 0xB7, 0x74, 0x09, \r
-0xF0, 0x90, 0x06, 0xB4, 0x74, 0x86, 0xF0, 0xF1, 0xFA, 0xE4, 0xFD, 0x31, 0x4D, 0x71, 0x68, 0x44, \r
-0x01, 0xFD, 0x7F, 0x02, 0x31, 0x39, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x8F, 0x51, 0x4E, 0xEF, \r
-0x22, 0x31, 0x39, 0x90, 0x94, 0xF5, 0xE0, 0x22, 0x31, 0x39, 0x90, 0x95, 0x21, 0xE0, 0x22, 0x7F, \r
-0x48, 0x7E, 0x09, 0x12, 0x37, 0x4E, 0xE4, 0x22, 0x7F, 0x4E, 0x51, 0x4E, 0xEF, 0x54, 0x7F, 0x22, \r
-0xB1, 0x6E, 0xB1, 0x90, 0x12, 0x8B, 0x67, 0x12, 0x8B, 0x86, 0xE4, 0xF5, 0x0D, 0xF5, 0x0E, 0xF5, \r
-0x0F, 0x75, 0x10, 0x80, 0xAD, 0x0D, 0x7F, 0x50, 0x31, 0x39, 0xAD, 0x0E, 0x7F, 0x51, 0x31, 0x39, \r
-0xAD, 0x0F, 0x7F, 0x52, 0x31, 0x39, 0xAD, 0x10, 0x7F, 0x53, 0x21, 0x39, 0x12, 0xA1, 0x39, 0x7F, \r
-0xF2, 0x51, 0x4E, 0xEF, 0x20, 0xE6, 0x09, 0x7F, 0x05, 0xD1, 0x81, 0xFD, 0x7F, 0x05, 0x31, 0x39, \r
-0x22, 0x51, 0x4E, 0xEF, 0x44, 0x80, 0x22, 0x12, 0x79, 0x62, 0xE4, 0x90, 0x93, 0x22, 0xB1, 0xB3, \r
-0x90, 0x90, 0x74, 0xB1, 0xB3, 0xA3, 0xB1, 0xB3, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x90, 0x86, 0xF0, \r
-0xA3, 0xF0, 0x90, 0x90, 0xC8, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x8E, 0x17, 0xE0, 0x90, 0x94, 0x6B, \r
-0xF0, 0x7D, 0x02, 0x7F, 0x02, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x2D, 0xEF, \r
-0xF0, 0x14, 0x60, 0x15, 0x14, 0x60, 0x19, 0x24, 0x02, 0x70, 0x1A, 0xED, 0x54, 0x01, 0xFF, 0x90, \r
-0x8E, 0x11, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0x80, 0x0C, 0x90, 0x8E, 0x18, 0xED, 0xF0, 0x80, 0x05, \r
-0x90, 0x8E, 0x17, 0xED, 0xF0, 0xD1, 0x1B, 0x30, 0xE4, 0x30, 0x90, 0x95, 0x2D, 0xE0, 0x14, 0x60, \r
-0x07, 0x14, 0x60, 0x1D, 0x24, 0x02, 0x70, 0x22, 0x90, 0x8E, 0x11, 0xE0, 0x54, 0x01, 0xC4, 0x33, \r
-0x33, 0x33, 0x54, 0x80, 0xFF, 0x90, 0x8E, 0x18, 0xE0, 0x54, 0x7F, 0x4F, 0xFD, 0x7F, 0x88, 0x80, \r
-0x07, 0x90, 0x8E, 0x17, 0xE0, 0xFD, 0x7F, 0x89, 0x31, 0x39, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7E, \r
-0x00, 0x7F, 0xA8, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0x11, 0x12, 0x08, 0xAA, 0x12, 0x89, \r
-0xB2, 0x12, 0x08, 0xAA, 0x90, 0x8E, 0x14, 0x74, 0x02, 0xF0, 0x90, 0x8E, 0x1B, 0x14, 0x12, 0xA1, \r
-0x80, 0x90, 0x8E, 0x21, 0xE4, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x12, 0xA0, 0x26, 0xE4, 0xFD, 0xFF, \r
-0xD1, 0xB5, 0x7D, 0x0C, 0x7F, 0x02, 0xD1, 0xB5, 0xF1, 0xD9, 0x90, 0x8D, 0x06, 0xE0, 0xFF, 0xB4, \r
-0x01, 0x08, 0x90, 0x8E, 0x20, 0x74, 0xDD, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x8E, 0x20, 0xB4, 0x03, \r
-0x05, 0x74, 0xD4, 0xF0, 0x80, 0x03, 0x74, 0x40, 0xF0, 0x7F, 0x79, 0x51, 0x4E, 0xEF, 0x54, 0x03, \r
-0xFF, 0xBF, 0x02, 0x0E, 0x7F, 0x28, 0x51, 0x4E, 0xEF, 0x30, 0xE2, 0x06, 0x90, 0x8E, 0x4B, 0x74, \r
-0x02, 0xF0, 0x12, 0x7F, 0x83, 0x12, 0xA0, 0x26, 0x7F, 0x01, 0x12, 0x9D, 0x05, 0x7E, 0x00, 0x7F, \r
-0x02, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xBD, 0x12, 0x08, 0xAA, 0x12, 0x67, 0xF4, 0x12, \r
-0xA1, 0x29, 0xF1, 0xE9, 0xE4, 0x90, 0x8E, 0xBF, 0xF0, 0x22, 0x51, 0x4E, 0xEF, 0x44, 0x40, 0xFD, \r
-0x22, 0x7F, 0xF4, 0x51, 0x4E, 0xEF, 0x20, 0xE5, 0x0D, 0x7F, 0xF4, 0x51, 0x4E, 0xEF, 0x7F, 0x01, \r
-0x20, 0xE4, 0x05, 0x7F, 0x02, 0x22, 0x7F, 0x03, 0x22, 0x7D, 0x0C, 0x7F, 0x01, 0xC1, 0xB5, 0xF0, \r
-0x7F, 0x10, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0xB1, 0xE7, 0xE4, 0xFD, 0xFF, 0x02, 0x53, 0xD9, 0xF1, \r
-0xE7, 0x7D, 0x0C, 0x7F, 0x01, 0xC1, 0xB5, 0x22, 0xA1, 0xBB, 0x90, 0x8E, 0xE2, 0xE0, 0xFF, 0x90, \r
-0x8E, 0xE1, 0xE0, 0xFB, 0x90, 0x8E, 0xE3, 0xE0, 0x90, 0x94, 0xF8, 0xF0, 0x22, 0x90, 0x94, 0xE3, \r
-0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, \r
-0x94, 0xDE, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x94, 0xE2, 0xE0, 0xF5, 0x3B, 0xA3, 0xE0, 0xF5, \r
-0x3C, 0x12, 0x36, 0x3E, 0x90, 0x94, 0xDE, 0x12, 0xA1, 0x17, 0xA3, 0xA3, 0xA3, 0x74, 0x05, 0xF0, \r
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x94, 0xE9, 0xF0, 0x7F, 0x03, 0xD3, 0x10, 0xAF, 0x01, \r
-0xC3, 0xC0, 0xD0, 0x90, 0x94, 0xE4, 0xEF, 0xF0, 0x12, 0x90, 0x4C, 0x90, 0x94, 0xE4, 0xE0, 0xFF, \r
-0x31, 0x5B, 0x74, 0x01, 0xF0, 0x90, 0x94, 0xE9, 0xE0, 0xFE, 0xEF, 0x31, 0x69, 0xEE, 0xF0, 0x90, \r
-0x94, 0xE4, 0xE0, 0x11, 0xB0, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x11, 0xA5, 0x78, 0x10, \r
-0x12, 0x08, 0x47, 0xAB, 0x07, 0x11, 0xA5, 0x78, 0x08, 0x12, 0x08, 0x47, 0x90, 0x94, 0xE2, 0xEF, \r
-0xF0, 0x11, 0xA5, 0x90, 0x94, 0xE3, 0xEF, 0xF0, 0x7D, 0x01, 0x7F, 0x50, 0x7E, 0x01, 0x11, 0x18, \r
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x94, 0xE5, 0x02, 0x43, 0xE5, 0x90, 0x93, 0x46, 0xE0, 0xFB, \r
-0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0xE4, 0x90, \r
-0x93, 0x46, 0xF0, 0x90, 0x93, 0x46, 0xE0, 0xFF, 0xC3, 0x94, 0x08, 0x40, 0x02, 0x21, 0x53, 0xEF, \r
-0x31, 0x5B, 0xE0, 0x64, 0x01, 0x70, 0x74, 0x90, 0x93, 0x46, 0xE0, 0x11, 0xB0, 0x12, 0x43, 0xE5, \r
-0xE4, 0x7B, 0x01, 0x31, 0x54, 0x70, 0x3A, 0x90, 0x93, 0x46, 0xE0, 0xFB, 0x31, 0x69, 0xE0, 0x60, \r
-0x21, 0x14, 0x70, 0x57, 0xEB, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x94, \r
-0xF5, 0x83, 0x12, 0x43, 0xE5, 0xEB, 0x11, 0xB0, 0x12, 0x08, 0x6D, 0x90, 0x93, 0x46, 0xE0, 0xFF, \r
-0x80, 0x0B, 0x11, 0xAB, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0xAF, 0x03, 0x31, 0x77, 0x80, \r
-0x2A, 0x90, 0x93, 0x46, 0xE0, 0x11, 0xB0, 0x12, 0x43, 0xE5, 0xE4, 0xFB, 0x31, 0x54, 0x50, 0x1B, \r
-0x11, 0xAB, 0x12, 0x43, 0xE5, 0xEF, 0x24, 0xFF, 0xFF, 0xEE, 0x34, 0xFF, 0xFE, 0xED, 0x34, 0xFF, \r
-0xFD, 0xEC, 0x34, 0xFF, 0xFC, 0xEB, 0x11, 0xB0, 0x12, 0x08, 0x6D, 0x90, 0x93, 0x46, 0xE0, 0x04, \r
-0xF0, 0x01, 0xC3, 0x22, 0xFA, 0xF9, 0xF8, 0xC3, 0x02, 0x43, 0xD4, 0x75, 0xF0, 0x0A, 0xA4, 0x24, \r
-0x0A, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x09, 0xF5, \r
-0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0xEF, 0x24, 0xFC, 0x60, 0x05, 0x04, 0x70, 0x05, 0x80, \r
-0x04, 0x12, 0x81, 0x22, 0x22, 0xE4, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x94, 0x6F, 0x04, 0xF0, 0x90, \r
-0x06, 0x32, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x93, 0x12, 0x12, 0x43, 0xE5, 0x12, 0xA1, 0x40, 0xE4, \r
-0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93, 0x12, 0x12, 0x08, 0x6D, 0x12, 0x9E, 0xFB, 0xE4, 0x90, \r
-0x94, 0x53, 0xF0, 0xFF, 0x12, 0x9F, 0x6D, 0x12, 0x73, 0x13, 0x70, 0x28, 0x31, 0xF3, 0x7F, 0x05, \r
-0x7E, 0x00, 0x12, 0x3D, 0xC2, 0x12, 0x4E, 0xA9, 0x90, 0x8E, 0x18, 0xE0, 0x64, 0x02, 0x60, 0x14, \r
-0x90, 0x93, 0x47, 0xE0, 0x04, 0xF0, 0x12, 0xA1, 0x39, 0x31, 0xF3, 0x90, 0x93, 0x47, 0xE0, 0xD3, \r
-0x94, 0x0A, 0x40, 0xE4, 0x90, 0x94, 0xE5, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x0A, 0x12, 0x83, \r
-0x95, 0x01, 0x4C, 0x7D, 0x01, 0x7F, 0x02, 0x80, 0x04, 0x7D, 0x01, 0x7F, 0x04, 0xD3, 0x10, 0xAF, \r
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x2F, 0xED, 0xF0, 0x90, 0x8E, 0x11, 0xE0, 0xFE, 0xC4, 0x13, \r
-0x13, 0x54, 0x03, 0x30, 0xE0, 0x02, 0x61, 0x47, 0xEE, 0x12, 0x79, 0x1A, 0x30, 0xE0, 0x02, 0x61, \r
-0x47, 0x90, 0x8E, 0x18, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0x61, 0x47, 0xEF, 0x70, 0x02, 0x41, 0xBE, \r
-0x24, 0xFE, 0x70, 0x02, 0x41, 0xF8, 0x24, 0xFE, 0x60, 0x4B, 0x24, 0xFC, 0x70, 0x02, 0x61, 0x34, \r
-0x24, 0xFC, 0x60, 0x02, 0x61, 0x47, 0xEE, 0xB4, 0x0E, 0x02, 0x71, 0x67, 0x90, 0x8E, 0x18, 0xE0, \r
-0x70, 0x05, 0x7F, 0x01, 0x12, 0x9B, 0x6C, 0x90, 0x8E, 0x18, 0xE0, 0xB4, 0x06, 0x02, 0x71, 0x83, \r
-0x90, 0x8E, 0x18, 0xE0, 0xB4, 0x04, 0x0F, 0x90, 0x95, 0x2F, 0xE0, 0xFF, 0x60, 0x05, 0x12, 0x9B, \r
-0x11, 0x80, 0x03, 0x12, 0x77, 0x5E, 0x90, 0x8E, 0x18, 0xE0, 0x64, 0x08, 0x60, 0x02, 0x61, 0x47, \r
-0x12, 0x4F, 0xEF, 0x61, 0x47, 0x90, 0x8E, 0x18, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x9B, 0x6C, \r
-0x90, 0x8E, 0x18, 0xE0, 0xB4, 0x06, 0x02, 0x71, 0x83, 0x90, 0x8E, 0x18, 0xE0, 0xB4, 0x0E, 0x07, \r
-0x71, 0x4C, 0xBF, 0x01, 0x02, 0x71, 0x67, 0x90, 0x8E, 0x18, 0xE0, 0x64, 0x0C, 0x60, 0x02, 0x61, \r
-0x47, 0x71, 0x4C, 0xEF, 0x64, 0x01, 0x60, 0x02, 0x61, 0x47, 0x71, 0xA5, 0x61, 0x47, 0x90, 0x8E, \r
-0x18, 0xE0, 0xB4, 0x0E, 0x07, 0x71, 0x4C, 0xBF, 0x01, 0x02, 0x71, 0x67, 0x90, 0x8E, 0x18, 0xE0, \r
-0xB4, 0x06, 0x02, 0x71, 0x83, 0x90, 0x8E, 0x18, 0xE0, 0xB4, 0x0C, 0x07, 0x71, 0x4C, 0xBF, 0x01, \r
-0x02, 0x71, 0xA5, 0x90, 0x8E, 0x18, 0xE0, 0x64, 0x04, 0x70, 0x5C, 0x12, 0x9A, 0x5D, 0xEF, 0x64, \r
-0x01, 0x70, 0x54, 0x12, 0x9B, 0x43, 0x80, 0x4F, 0x90, 0x8E, 0x18, 0xE0, 0xB4, 0x0E, 0x07, 0x71, \r
-0x4C, 0xBF, 0x01, 0x02, 0x71, 0x67, 0x90, 0x8E, 0x18, 0xE0, 0xB4, 0x06, 0x02, 0x71, 0x83, 0x90, \r
-0x8E, 0x18, 0xE0, 0xB4, 0x0C, 0x07, 0x71, 0x4C, 0xBF, 0x01, 0x02, 0x71, 0xA5, 0x90, 0x8E, 0x18, \r
-0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x9B, 0x6C, 0x90, 0x8E, 0x18, 0xE0, 0xB4, 0x04, 0x18, 0x12, \r
-0x9B, 0x5E, 0x80, 0x13, 0x90, 0x8E, 0x18, 0xE0, 0xB4, 0x0C, 0x0C, 0x90, 0x8E, 0x12, 0x12, 0x67, \r
-0xED, 0x30, 0xE0, 0x03, 0x12, 0x9D, 0x2E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x9A, 0x44, 0xBF, \r
-0x01, 0x12, 0x12, 0xA0, 0x70, 0x20, 0xE0, 0x0C, 0x90, 0x8E, 0x17, 0xE0, 0xD3, 0x94, 0x04, 0x50, \r
-0x03, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x8E, 0x12, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x04, \r
-0x7D, 0x0C, 0x80, 0x05, 0x12, 0xA0, 0x87, 0x7D, 0x04, 0x7F, 0x01, 0x12, 0x4E, 0xB5, 0xE4, 0xFD, \r
-0xFF, 0x80, 0x56, 0x90, 0x8E, 0x12, 0xE0, 0x90, 0x06, 0x04, 0x20, 0xE0, 0x08, 0xE0, 0x44, 0x40, \r
-0xF0, 0x7D, 0x04, 0x80, 0x06, 0xE0, 0x54, 0x7F, 0xF0, 0x7D, 0x0C, 0x7F, 0x01, 0x12, 0x4E, 0xB5, \r
-0xE4, 0xFD, 0xFF, 0x80, 0x34, 0x12, 0x73, 0x13, 0x70, 0x25, 0x90, 0x8E, 0x12, 0xE0, 0x54, 0xFD, \r
-0xF0, 0x7D, 0x2C, 0x7F, 0x6F, 0x71, 0xD9, 0x7D, 0x08, 0x7F, 0x01, 0x12, 0x65, 0x59, 0xBF, 0x01, \r
-0x0E, 0x90, 0x8E, 0x11, 0xE0, 0x44, 0x80, 0xF0, 0x7D, 0x0E, 0x7F, 0x01, 0x12, 0x4E, 0xB5, 0x22, \r
-0xE4, 0xFD, 0x7F, 0x0C, 0x31, 0xFD, 0xE4, 0xFD, 0xFF, 0x90, 0x05, 0x22, 0xEF, 0xF0, 0x90, 0x8D, \r
-0x05, 0xED, 0xF0, 0x22, 0x90, 0x93, 0x73, 0x12, 0x44, 0x12, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, \r
-0x84, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x0A, 0x7D, 0x39, 0x12, 0x8F, 0xCB, 0xBF, 0x01, 0x10, \r
-0x80, 0x00, 0x90, 0x93, 0x1A, 0x12, 0x64, 0x32, 0x90, 0x93, 0x81, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, \r
-0x90, 0x93, 0x81, 0x12, 0x97, 0xC4, 0x90, 0x93, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x81, 0x12, 0x9F, \r
-0xF1, 0x90, 0x93, 0x7F, 0xE0, 0xFD, 0x12, 0x98, 0x0A, 0x90, 0x93, 0x80, 0xE0, 0x60, 0x02, 0x81, \r
-0xBF, 0xD1, 0x8B, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x93, 0x76, 0xD1, 0x7A, 0x75, 0x43, \r
-0x06, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0xB1, 0x5D, 0x12, 0x9F, 0xFD, 0xC0, \r
-0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x93, 0x73, 0xD1, 0x7A, 0x75, 0x43, 0x10, 0xD0, 0x01, 0xD0, \r
-0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0xB1, 0x5D, 0xD1, 0x8E, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, \r
-0xD1, 0x77, 0x75, 0x43, 0x10, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0xB1, 0x5D, \r
-0x24, 0x60, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0xD1, \r
-0x77, 0x75, 0x43, 0x10, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0xB1, 0x5D, 0x24, \r
-0x72, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x93, \r
-0x7C, 0xD1, 0x7A, 0x75, 0x43, 0x06, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x90, \r
-0x93, 0x79, 0x12, 0x44, 0x09, 0x90, 0x93, 0xB0, 0x12, 0x44, 0x12, 0x90, 0x93, 0xB3, 0x12, 0x08, \r
-0x79, 0x00, 0x00, 0x00, 0x20, 0x90, 0x93, 0xB7, 0x74, 0x3A, 0xF0, 0x90, 0x93, 0x73, 0x12, 0x44, \r
-0x09, 0x12, 0x99, 0x40, 0xB1, 0x5D, 0x24, 0x30, 0xF9, 0xE4, 0x34, 0xFC, 0xF1, 0x04, 0x75, 0x43, \r
-0x28, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x85, 0x12, 0x35, 0x26, 0xB1, 0x5D, 0x12, 0xA0, 0xCB, 0xC0, \r
-0x03, 0x8B, 0x40, 0x75, 0x41, 0x8F, 0x75, 0x42, 0x68, 0x75, 0x43, 0x28, 0xD0, 0x03, 0x12, 0x35, \r
-0x26, 0x90, 0x93, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x82, 0xE0, 0x2F, 0xFF, 0x90, 0x93, 0x81, 0xE0, \r
-0x34, 0x00, 0xCF, 0x24, 0x30, 0xFD, 0xE4, 0x3F, 0xFC, 0x90, 0x93, 0x1A, 0xE0, 0xFB, 0x7F, 0x3A, \r
-0x12, 0x62, 0x1B, 0xB1, 0x5D, 0x12, 0xA0, 0xCB, 0xC0, 0x03, 0x8B, 0x40, 0x75, 0x41, 0x93, 0x75, \r
-0x42, 0x85, 0x75, 0x43, 0x28, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x90, 0x06, 0x33, 0xE0, 0x44, 0x02, \r
-0xF0, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0x7D, 0x3A, 0x71, 0xD9, 0x02, 0x58, 0x01, 0x90, 0x93, 0x81, \r
-0xA3, 0xE0, 0xFF, 0xA3, 0xE0, 0x2F, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, \r
-0xA9, 0x12, 0x44, 0x12, 0x78, 0xB5, 0x7C, 0x94, 0x7D, 0x01, 0x7B, 0xFF, 0x7A, 0x40, 0x79, 0x64, \r
-0xF1, 0xF5, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x94, 0xB4, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x0A, \r
-0x7D, 0x33, 0x12, 0x8F, 0xCB, 0xBF, 0x01, 0x10, 0x80, 0x00, 0x90, 0x93, 0x19, 0x12, 0x64, 0x32, \r
-0x90, 0x94, 0xB1, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x94, 0xB1, 0x12, 0x97, 0xC4, 0x90, 0x94, \r
-0xB3, 0xEF, 0xF0, 0x90, 0x94, 0xB1, 0x12, 0x9F, 0xF1, 0x90, 0x94, 0xAF, 0xE0, 0xFD, 0x12, 0x98, \r
-0x0A, 0x90, 0x94, 0xB0, 0xE0, 0x70, 0x4E, 0xD1, 0x8B, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, \r
-0x94, 0xAC, 0xD1, 0x7A, 0x75, 0x43, 0x06, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0xD1, 0x84, 0xB1, \r
-0x60, 0xF1, 0xEE, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0xAC, 0xD1, \r
-0x7A, 0x75, 0x43, 0x06, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0xD1, 0x84, 0xB1, 0x60, 0x12, 0x9F, \r
-0xFD, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0xA9, 0xD1, 0x7A, 0x75, 0x43, 0x04, 0xD0, \r
-0x01, 0xD0, 0x02, 0x80, 0x45, 0x90, 0x94, 0xB0, 0xE0, 0x64, 0x01, 0x70, 0x42, 0xD1, 0x8B, 0xC0, \r
-0x03, 0x8B, 0x40, 0x75, 0x41, 0x8E, 0x75, 0x42, 0xE4, 0x75, 0x43, 0x06, 0xD0, 0x03, 0xD1, 0x84, \r
-0xB1, 0x60, 0xF1, 0xEE, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0x8B, 0x40, 0x75, 0x41, 0x8E, 0x75, 0x42, \r
-0xEE, 0x75, 0x43, 0x06, 0xD0, 0x03, 0xD1, 0x84, 0xB1, 0x60, 0x12, 0x9F, 0xFD, 0xC0, 0x03, 0x8B, \r
-0x40, 0x75, 0x41, 0x8E, 0x75, 0x42, 0xF4, 0x75, 0x43, 0x04, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x90, \r
-0x06, 0x30, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x94, 0xB4, 0xE0, 0xFF, 0x7D, 0x34, 0x71, 0xD9, 0x12, \r
-0x58, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x79, 0x12, 0x44, 0x09, 0x8B, 0x40, 0x8A, \r
-0x41, 0x89, 0x42, 0x22, 0x12, 0x35, 0x26, 0x90, 0x94, 0xB1, 0x22, 0xA3, 0xA3, 0xE0, 0x24, 0x38, \r
-0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0x22, 0xF1, 0xC8, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, \r
-0x93, 0x4A, 0x12, 0x97, 0xC4, 0x90, 0x93, 0x4C, 0xEF, 0xF0, 0x90, 0x93, 0x4A, 0xA3, 0xE0, 0x24, \r
-0x38, 0xF9, 0xE4, 0x34, 0xFC, 0xF1, 0x04, 0x75, 0x43, 0x06, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xE4, \r
-0xF1, 0xE7, 0xB1, 0x60, 0x24, 0x3E, 0xF9, 0xE4, 0x34, 0xFC, 0xF1, 0x04, 0x75, 0x43, 0x04, 0x7B, \r
-0x01, 0x7A, 0x8E, 0x79, 0xEA, 0xF1, 0xE7, 0xB1, 0x60, 0xF1, 0xEE, 0xF1, 0x04, 0x75, 0x43, 0x06, \r
-0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xEE, 0xF1, 0xE7, 0xB1, 0x60, 0x24, 0x48, 0xF9, 0xE4, 0x34, 0xFC, \r
-0xF1, 0x04, 0x75, 0x43, 0x04, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xF4, 0x02, 0x35, 0x26, 0x24, 0x00, \r
-0xF9, 0xE4, 0x34, 0xFC, 0x75, 0x40, 0x01, 0xF5, 0x41, 0x89, 0x42, 0x22, 0x90, 0x93, 0x23, 0xF1, \r
-0xC6, 0xEF, 0xF0, 0xE0, 0xFE, 0x24, 0x28, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFF, \r
-0x74, 0x29, 0x2E, 0x12, 0x65, 0xC6, 0xFD, 0x90, 0x93, 0x4A, 0xE0, 0x24, 0x2C, 0x12, 0x97, 0xE1, \r
-0x90, 0x93, 0x4A, 0xE0, 0x2F, 0x24, 0x30, 0xA3, 0xF0, 0xE0, 0xFD, 0x24, 0x04, 0x12, 0x66, 0xE7, \r
-0xE0, 0xFE, 0x74, 0x05, 0x2D, 0x12, 0x66, 0xDB, 0x12, 0x84, 0xA3, 0x90, 0x90, 0x7E, 0xF0, 0xA3, \r
-0xEF, 0xF0, 0x90, 0x93, 0x4B, 0xE0, 0x24, 0x0C, 0xF9, 0xE4, 0x34, 0xFC, 0xF1, 0x04, 0x75, 0x43, \r
-0x04, 0x7B, 0x01, 0x7A, 0x90, 0x79, 0x80, 0x12, 0x35, 0x26, 0x90, 0x93, 0x4B, 0xE0, 0x24, 0x14, \r
-0xF0, 0xE0, 0xFD, 0x24, 0x01, 0x12, 0x63, 0xE8, 0xE0, 0xFE, 0x74, 0x00, 0x2D, 0x12, 0x5A, 0xFC, \r
-0x12, 0x84, 0xA3, 0x90, 0x90, 0x84, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x24, 0xF1, 0xC6, 0xEF, \r
-0xF0, 0x90, 0x90, 0x7A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x4E, 0x60, 0x11, 0x90, 0x93, 0x4A, 0xE0, \r
-0xD1, 0xFE, 0x8F, 0x43, 0x7B, 0x01, 0x7A, 0x90, 0x79, 0x88, 0x12, 0x35, 0x26, 0x90, 0x93, 0x25, \r
-0xF1, 0xC6, 0xEF, 0xF0, 0xD1, 0xFE, 0x90, 0x90, 0x7C, 0xA3, 0xE0, 0xF5, 0x43, 0x7B, 0x01, 0x7A, \r
-0x90, 0x79, 0xA8, 0x02, 0x35, 0x26, 0xE0, 0xFF, 0xF1, 0xD3, 0x90, 0x93, 0x4A, 0x22, 0x90, 0x8D, \r
-0xFD, 0xE0, 0xFF, 0xE4, 0xFE, 0xEF, 0xC3, 0x13, 0xFD, 0xEF, 0x30, 0xE0, 0x02, 0x7E, 0x80, 0x90, \r
-0xFD, 0x10, 0xED, 0xF0, 0xAF, 0x06, 0x22, 0x12, 0x35, 0x26, 0x90, 0x93, 0x4A, 0x22, 0x24, 0x42, \r
-0xF9, 0xE4, 0x34, 0xFC, 0x22, 0x7E, 0x00, 0x7F, 0x06, 0x02, 0x06, 0x63, 0xEE, 0xF0, 0xA3, 0xEF, \r
-0xF0, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, \r
-0x93, 0x54, 0x12, 0x96, 0x66, 0x90, 0x93, 0x6C, 0x74, 0x18, 0xF0, 0x7E, 0x00, 0x7F, 0x80, 0x7D, \r
-0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x74, 0x12, 0x08, 0xAA, 0x90, 0x01, 0xC4, 0x74, 0x08, 0xF0, \r
-0x74, 0x58, 0xA3, 0xF0, 0x90, 0x93, 0x1B, 0xE0, 0xFF, 0x12, 0x57, 0xD3, 0x90, 0x93, 0x6B, 0xEF, \r
-0xF0, 0xF9, 0xE0, 0xFE, 0x24, 0x29, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0x41, 0xF0, \r
-0xEE, 0x24, 0x28, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x93, 0x6C, 0xE0, 0x7A, 0x00, 0x2D, 0xFE, 0xEA, \r
-0x3C, 0x90, 0x93, 0x70, 0xF0, 0xA3, 0xCE, 0xF0, 0x74, 0x28, 0x29, 0x12, 0x9F, 0xF5, 0x90, 0x93, \r
-0x56, 0xE0, 0xFD, 0x12, 0x98, 0x0A, 0x12, 0x9F, 0xDD, 0x90, 0x93, 0x70, 0xE0, 0xFF, 0xA3, 0xE0, \r
-0x90, 0x93, 0x6E, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x74, 0x74, 0x01, 0xF0, 0xA3, 0x74, \r
-0x03, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0x74, 0x5F, 0xF0, 0x90, 0x93, 0x70, 0x12, 0x94, 0x41, 0x90, \r
-0x8F, 0xDE, 0xE0, 0xFF, 0x7E, 0x02, 0xB4, 0xFE, 0x02, 0x7E, 0xFE, 0x90, 0x93, 0x70, 0xA3, 0xE0, \r
-0xFD, 0x51, 0xFA, 0xEE, 0xF0, 0x74, 0x00, 0x2D, 0x51, 0xFC, 0xE0, 0x90, 0x93, 0x78, 0xF0, 0x90, \r
-0x93, 0x70, 0x12, 0x61, 0x77, 0x90, 0x90, 0x73, 0xE0, 0x90, 0x93, 0x54, 0xB4, 0x01, 0x0B, 0xE0, \r
-0x44, 0x03, 0xFC, 0xA3, 0xE0, 0x44, 0x10, 0xFD, 0x80, 0x09, 0xE0, 0x44, 0x03, 0xFC, 0xA3, 0xE0, \r
-0x44, 0x20, 0xFD, 0x90, 0x93, 0x72, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x93, 0x79, 0x74, 0x03, \r
-0xF0, 0xA3, 0x74, 0x12, 0xF0, 0x12, 0xA0, 0xB6, 0xEF, 0x64, 0xFE, 0x70, 0x27, 0x90, 0x93, 0x70, \r
-0xA3, 0xE0, 0x24, 0x00, 0x12, 0x9A, 0x24, 0xC0, 0x03, 0x8B, 0x40, 0x12, 0xA0, 0xD5, 0xD0, 0x03, \r
-0x12, 0x35, 0x26, 0x75, 0x40, 0x01, 0x12, 0xA0, 0xD5, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x7B, 0x12, \r
-0x35, 0x26, 0x80, 0x58, 0x90, 0x93, 0x16, 0xE0, 0xFF, 0xB4, 0x02, 0x27, 0x90, 0x93, 0x70, 0xE0, \r
-0xFC, 0xA3, 0xE0, 0xFD, 0x24, 0x00, 0xF5, 0x82, 0x74, 0xFC, 0x3C, 0xF5, 0x83, 0xE4, 0xF0, 0x74, \r
-0x01, 0x2D, 0xF5, 0x82, 0x74, 0xFC, 0x3C, 0xF5, 0x83, 0x74, 0x20, 0x12, 0xA1, 0x58, 0x74, 0x20, \r
-0xF0, 0x80, 0x29, 0xEF, 0xB4, 0x04, 0x25, 0x90, 0x93, 0x70, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x24, \r
-0x00, 0xF5, 0x82, 0x74, 0xFC, 0x3E, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, 0x74, \r
-0xFC, 0x3E, 0xF5, 0x83, 0x74, 0x10, 0x12, 0xA1, 0x58, 0x74, 0x10, 0xF0, 0x12, 0xA0, 0xB6, 0xE4, \r
-0x90, 0x93, 0x6D, 0xF0, 0x12, 0xA0, 0x07, 0xFE, 0x90, 0x93, 0x70, 0xA3, 0xE0, 0xFD, 0xEF, 0x2D, \r
-0x51, 0xFA, 0xEE, 0xF0, 0x12, 0xA0, 0x07, 0xFE, 0x74, 0x7D, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x93, \r
-0xF5, 0x83, 0xEE, 0xF1, 0xBF, 0xE0, 0xB4, 0x08, 0xDB, 0x12, 0x9F, 0xE7, 0x90, 0x93, 0x70, 0xF1, \r
-0xF6, 0x90, 0x93, 0x70, 0xE4, 0x75, 0xF0, 0x10, 0x12, 0x08, 0xD6, 0x12, 0x9F, 0xDD, 0xE4, 0x90, \r
-0x93, 0xF7, 0xF0, 0xE4, 0x90, 0x93, 0x6D, 0xF0, 0x12, 0xA0, 0xFC, 0x50, 0x0A, 0x12, 0x8F, 0xAA, \r
-0x51, 0xF9, 0xE4, 0xF1, 0xBF, 0x80, 0xF1, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x90, 0x06, \r
-0x31, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0xFD, 0x12, 0x9A, 0x18, 0xCE, 0xC3, 0x13, \r
-0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0xAC, 0x7B, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0xFF, 0x90, \r
-0x93, 0x1B, 0xE0, 0xC3, 0x9F, 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0xEF, 0x78, 0x07, 0xC3, 0x33, 0xCE, \r
-0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x6C, 0xE0, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x3E, 0xCF, \r
-0x24, 0x38, 0xCF, 0x34, 0x00, 0xFE, 0x90, 0xAC, 0x7A, 0x74, 0x10, 0xF0, 0x7B, 0x63, 0xE4, 0xFD, \r
-0x12, 0x39, 0x9C, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x74, 0x90, 0xAC, 0xA0, 0x12, 0x44, 0x12, 0x7A, \r
-0x93, 0x79, 0x57, 0x90, 0xAC, 0xA3, 0x12, 0x44, 0x12, 0x90, 0xAC, 0xA6, 0x74, 0x10, 0xF0, 0x7A, \r
-0x8F, 0x79, 0x9A, 0x12, 0x35, 0x86, 0x90, 0x93, 0xF7, 0xE0, 0x04, 0xF0, 0x90, 0x06, 0x31, 0xE0, \r
-0x30, 0xE2, 0x07, 0x12, 0xA1, 0x50, 0x50, 0x02, 0x21, 0xC3, 0x12, 0xA1, 0x50, 0x40, 0x0A, 0x90, \r
-0x06, 0x35, 0xE0, 0x44, 0x20, 0x90, 0x06, 0x34, 0xF0, 0xE4, 0x90, 0x93, 0x6D, 0xF0, 0x12, 0xA0, \r
-0xFC, 0x50, 0x1C, 0x12, 0x8F, 0xAA, 0x90, 0x93, 0x6D, 0xE0, 0x24, 0x57, 0xF5, 0x82, 0xE4, 0x34, \r
-0x93, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x6B, 0x51, 0xF9, 0xEF, 0xF1, 0xBF, 0x80, 0xDF, 0x90, \r
-0x04, 0x1D, 0xE0, 0x60, 0x22, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0xF6, 0xF0, 0x7D, 0x1D, 0x12, \r
-0x8F, 0xCB, 0xBF, 0x01, 0x06, 0x12, 0x64, 0x2F, 0x12, 0xA0, 0x3E, 0x90, 0x93, 0xF6, 0xE0, 0xFF, \r
-0x7D, 0x1E, 0x12, 0x53, 0xD9, 0x80, 0x06, 0x12, 0x64, 0x2F, 0x12, 0xA0, 0x3E, 0x11, 0x01, 0x90, \r
-0x8E, 0x18, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x9B, 0x6C, 0x74, 0x08, 0x04, 0x90, 0x01, 0xC4, \r
-0xF0, 0x74, 0x58, 0xA3, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x42, 0x90, 0xA8, 0x04, 0xA9, \r
-0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x93, 0x4A, 0xA3, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, \r
-0xFC, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x93, 0x4A, 0xF0, \r
-0xA3, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0x12, \r
-0x57, 0xD3, 0x7E, 0x00, 0x90, 0x93, 0x4A, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x51, 0xFA, 0xE0, 0x90, \r
-0x90, 0xCA, 0xF0, 0x74, 0x01, 0x2F, 0x12, 0x63, 0xE8, 0xE0, 0x90, 0x90, 0xCB, 0xF0, 0x90, 0x01, \r
-0xA0, 0xF0, 0x90, 0x93, 0x4A, 0x12, 0x94, 0x41, 0x90, 0x93, 0x4A, 0xA3, 0xE0, 0x24, 0x02, 0x12, \r
-0x67, 0x56, 0xFF, 0xE4, 0xFC, 0xFD, 0x78, 0x10, 0x12, 0x08, 0x5A, 0xC0, 0x04, 0xC0, 0x05, 0xC0, \r
-0x06, 0xC0, 0x07, 0xF1, 0xE9, 0xB1, 0x7E, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, \r
-0xD0, 0x01, 0xD0, 0x00, 0x12, 0x42, 0x90, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xF1, \r
-0xDC, 0xB1, 0x7E, 0x78, 0x08, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, \r
-0x51, 0xEA, 0xB1, 0x80, 0x12, 0x42, 0x90, 0x90, 0x90, 0xCE, 0xB1, 0x65, 0x78, 0x10, 0x12, 0x08, \r
-0x5A, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xF1, 0xE9, 0xB1, 0x7E, 0x78, 0x18, 0x12, \r
-0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x42, 0x90, 0xC0, 0x04, 0xC0, \r
-0x05, 0xC0, 0x06, 0xC0, 0x07, 0xF1, 0xDC, 0xB1, 0x7E, 0x78, 0x08, 0x12, 0x08, 0x5A, 0xD0, 0x03, \r
-0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x51, 0xEA, 0xB1, 0x80, 0x12, 0x42, 0x90, 0x90, 0x90, 0xD2, \r
-0xB1, 0x65, 0x78, 0x10, 0x12, 0x08, 0x5A, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xF1, \r
-0xE9, 0xB1, 0x7E, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, \r
-0x12, 0x42, 0x90, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xF1, 0xDC, 0xB1, 0x7E, 0x78, \r
-0x08, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x51, 0xEA, 0xB1, 0x80, \r
-0x12, 0x42, 0x90, 0x90, 0x90, 0xD6, 0x12, 0x08, 0x6D, 0x90, 0x93, 0x4A, 0xE4, 0x75, 0xF0, 0x04, \r
-0xF1, 0xB6, 0xF1, 0xC7, 0x51, 0xFA, 0xE0, 0xFF, 0x12, 0x96, 0x84, 0xB1, 0x87, 0xE0, 0xB4, 0x10, \r
-0xF1, 0xF1, 0xAF, 0xF1, 0xC7, 0x51, 0xFA, 0xE0, 0xFF, 0x74, 0xEA, 0x2E, 0xF5, 0x82, 0xE4, 0x34, \r
-0x90, 0xB1, 0x87, 0xE0, 0xB4, 0x10, 0xEC, 0xF1, 0xAF, 0xF1, 0xC7, 0x51, 0xFA, 0xE0, 0xFF, 0x74, \r
-0xFA, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xB1, 0x87, 0xE0, 0xB4, 0x10, 0xEC, 0xF1, 0xAF, 0x90, \r
-0x93, 0x4C, 0xE0, 0xFF, 0xC3, 0x94, 0x08, 0x50, 0x1F, 0x90, 0x93, 0x4A, 0xA3, 0xE0, 0xFE, 0xEF, \r
-0x2E, 0x51, 0xFA, 0xE0, 0xFE, 0x90, 0x93, 0x4F, 0xE0, 0xFD, 0xEE, 0x2D, 0xFE, 0x74, 0x0A, 0x2F, \r
-0x12, 0x83, 0x8D, 0xEE, 0xB1, 0x8A, 0x80, 0xD7, 0x90, 0x91, 0x0A, 0xE0, 0x90, 0x01, 0xA1, 0xF0, \r
-0x90, 0x91, 0x0B, 0xE0, 0x90, 0x01, 0xA2, 0xF0, 0x90, 0x91, 0x0C, 0xE0, 0x90, 0x01, 0xA3, 0xF0, \r
-0x90, 0x91, 0x0D, 0xE0, 0x90, 0x01, 0xA4, 0xF0, 0x90, 0x91, 0x0E, 0xE0, 0x90, 0x01, 0xA5, 0xF0, \r
-0x90, 0x93, 0x26, 0xE0, 0x04, 0x90, 0x93, 0x4E, 0xF0, 0xE4, 0x90, 0x93, 0x4D, 0xF0, 0x90, 0x90, \r
-0xCA, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x24, 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x4D, 0xE0, \r
-0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x63, 0xA3, 0x12, 0x57, 0xC6, 0xE4, \r
-0x12, 0xA1, 0x31, 0x90, 0x93, 0x4C, 0xE0, 0xFD, 0xC3, 0x94, 0x04, 0x50, 0x46, 0xA3, 0xE0, 0x75, \r
-0xF0, 0x04, 0xA4, 0x7C, 0x00, 0x2D, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0xEF, 0x78, 0x05, 0xC3, 0x33, \r
-0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x24, 0x12, 0xF9, 0x74, 0x91, 0x3E, 0xFA, 0x7B, 0x01, 0xC0, 0x03, \r
-0xC0, 0x01, 0x90, 0x93, 0x4A, 0xA3, 0xE0, 0x24, 0x00, 0xF9, 0xE4, 0x34, 0xFC, 0x8B, 0x40, 0xF5, \r
-0x41, 0x89, 0x42, 0x75, 0x43, 0x20, 0xD0, 0x01, 0xD0, 0x03, 0x12, 0x57, 0xE7, 0xF1, 0xF6, 0xB1, \r
-0x8B, 0x80, 0xB0, 0x12, 0xA0, 0x50, 0x90, 0x93, 0x4D, 0xE0, 0x04, 0xF0, 0x80, 0x80, 0xE4, 0x90, \r
-0x93, 0x4C, 0xF0, 0xE4, 0xFF, 0x0F, 0xEF, 0xB4, 0x20, 0xFB, 0xB1, 0x8B, 0xE0, 0xB4, 0x10, 0xF3, \r
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x08, 0x6D, 0x90, 0x93, 0x4A, 0xE4, 0x75, 0xF0, 0x04, 0x12, \r
-0x08, 0xD6, 0x90, 0x93, 0x4A, 0xA3, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, \r
-0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x22, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x04, \r
-0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x2A, 0xED, 0xF0, 0xEF, 0x14, \r
-0x60, 0x02, 0xC1, 0x64, 0x90, 0x06, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x95, 0x2A, 0xE0, 0xC4, \r
-0x33, 0x54, 0xE0, 0xFF, 0x90, 0x04, 0x42, 0xE0, 0x54, 0x9F, 0x4F, 0xFF, 0xF0, 0x90, 0x94, 0x99, \r
-0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0x94, 0x9D, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, \r
-0x01, 0xF1, 0x30, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0x94, 0x9D, 0x12, 0x08, 0x79, \r
-0x00, 0x00, 0x00, 0x01, 0x7F, 0x00, 0x7E, 0x09, 0xF1, 0x34, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, \r
-0x10, 0x90, 0x95, 0x2A, 0xB1, 0x80, 0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78, 0x01, 0x12, 0x08, 0x47, \r
-0x78, 0x04, 0xF1, 0xA6, 0x7F, 0x00, 0x7E, 0x0A, 0xF1, 0x34, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, \r
-0x00, 0x90, 0x95, 0x2A, 0xB1, 0x80, 0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78, 0x0A, 0xF1, 0xA6, 0x7F, \r
-0x00, 0x7E, 0x0D, 0xF1, 0x34, 0x12, 0x08, 0x79, 0x0C, 0x00, 0x00, 0x00, 0x90, 0x95, 0x2A, 0xB1, \r
-0x80, 0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78, 0x1A, 0xF1, 0xA6, 0x7F, 0x18, 0xF1, 0x32, 0x12, 0x08, \r
-0x79, 0x00, 0x00, 0x0C, 0x00, 0x90, 0x94, 0x9D, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0xF1, \r
-0xD2, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x90, 0x94, 0x8B, 0x12, 0x08, 0x79, 0x00, 0x00, \r
-0x04, 0x00, 0x80, 0x58, 0x90, 0x06, 0x03, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x94, 0x99, 0x12, 0x08, \r
-0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0x94, 0x9D, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0xF1, \r
-0x30, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0x94, 0x9D, 0x12, 0x08, 0x79, 0x00, 0x00, \r
-0x00, 0x00, 0x7F, 0x00, 0x7E, 0x09, 0xF1, 0x34, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x90, \r
-0x94, 0x9D, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0xF1, 0xD2, 0x12, 0x08, 0x79, 0x00, 0x00, \r
-0x0C, 0x00, 0x90, 0x94, 0x8B, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x7D, 0x18, 0x7C, 0x00, \r
-0xE4, 0xFF, 0x12, 0x82, 0xBE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x58, 0x7E, 0x0C, 0xD3, 0x10, \r
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x97, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x37, 0x4E, \r
-0x90, 0x94, 0xA1, 0x12, 0x08, 0x6D, 0x90, 0x94, 0x99, 0x12, 0x43, 0xE5, 0x12, 0x08, 0x3A, 0x90, \r
-0x94, 0xA1, 0x12, 0x83, 0x43, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x94, 0x99, \r
-0x12, 0x43, 0xE5, 0x90, 0x94, 0x9D, 0x12, 0x83, 0x43, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, \r
-0x00, 0x12, 0x43, 0xC7, 0x90, 0x94, 0xA5, 0x12, 0x08, 0x6D, 0x90, 0x94, 0xA5, 0x12, 0x61, 0x58, \r
-0x90, 0x94, 0x97, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x38, 0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
-0x7F, 0x00, 0x7E, 0x08, 0xD1, 0xCE, 0x90, 0x94, 0x99, 0x22, 0x90, 0x8D, 0xFB, 0x12, 0x67, 0xED, \r
-0x30, 0xE0, 0x08, 0x12, 0xA1, 0x48, 0xE4, 0x90, 0x94, 0x6E, 0xF0, 0x90, 0x94, 0x99, 0x12, 0x08, \r
-0x79, 0x00, 0x00, 0x00, 0x7F, 0x90, 0x94, 0x54, 0xB1, 0x80, 0xF1, 0xA9, 0x7F, 0x50, 0x7E, 0x0C, \r
-0xF1, 0x34, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x7F, 0x90, 0x94, 0x55, 0xB1, 0x80, 0xF1, 0xA9, \r
-0xD1, 0xCA, 0x90, 0x94, 0x6A, 0xE0, 0x90, 0x06, 0x08, 0xF0, 0x90, 0x94, 0x6C, 0xA3, 0xE0, 0x90, \r
-0x06, 0xA0, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x94, 0x58, 0xE0, 0xFF, 0x60, 0x05, 0xA3, 0xE0, 0xFD, \r
-0xB1, 0x92, 0x90, 0x94, 0x57, 0xE0, 0xFF, 0x60, 0x0C, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0x12, \r
-0x83, 0xA5, 0x12, 0x82, 0x4A, 0x22, 0x12, 0x08, 0x5A, 0x90, 0x94, 0x9D, 0x02, 0x08, 0x6D, 0x90, \r
-0x93, 0x4A, 0xE4, 0x75, 0xF0, 0x10, 0x12, 0x08, 0xD6, 0xE4, 0x90, 0x93, 0x4C, 0xF0, 0x22, 0xF0, \r
-0x90, 0x93, 0x6D, 0xE0, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x4A, 0xA3, 0xE0, 0xFF, 0xA3, 0xE0, 0xFE, \r
-0x2F, 0x22, 0x7F, 0x84, 0x7E, 0x08, 0xD1, 0xCE, 0x90, 0x94, 0x87, 0x22, 0x90, 0x93, 0x4A, 0xA3, \r
-0xE0, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0x22, 0x90, 0x93, 0x4A, 0xA3, 0xE0, 0x24, 0x03, \r
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0x22, 0xE4, 0x75, 0xF0, 0x20, 0x02, 0x08, 0xD6, 0x75, 0xE8, 0x03, \r
-0x75, 0xA8, 0x85, 0x22, 0xE4, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x93, 0x3C, 0xE0, 0x64, 0x01, 0xF0, \r
-0x24, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0x12, 0x3E, 0x44, 0xBF, 0x01, 0x03, \r
-0x12, 0x31, 0xFC, 0xC2, 0xAF, 0x90, 0x8E, 0x15, 0xE0, 0x60, 0x0F, 0x90, 0x8E, 0x18, 0xE0, 0xFF, \r
-0x90, 0x8E, 0x17, 0xE0, 0x6F, 0x60, 0x03, 0x12, 0x74, 0xB2, 0xC2, 0xAF, 0x12, 0x8B, 0xD3, 0xBF, \r
-0x01, 0x02, 0x11, 0x59, 0xD2, 0xAF, 0xD2, 0xAF, 0x90, 0x93, 0x34, 0xE0, 0xB4, 0x01, 0x02, 0x11, \r
-0xF6, 0x12, 0x4F, 0xF8, 0x12, 0x46, 0x38, 0x80, 0xB0, 0x90, 0x8E, 0x11, 0xE0, 0x30, 0xE0, 0x02, \r
-0x11, 0x63, 0x22, 0x90, 0x8E, 0x18, 0xE0, 0xFF, 0x60, 0x03, 0xB4, 0x08, 0x08, 0x12, 0x9A, 0xDB, \r
-0xBF, 0x01, 0x02, 0x11, 0x76, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x4D, 0x0C, \r
-0x11, 0x87, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x90, 0x14, 0x7F, 0x08, 0x12, 0x4A, 0x4E, 0xEF, \r
-0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x49, 0x39, 0xE4, 0xFF, 0x11, 0xA4, 0x90, 0x8E, 0x12, 0xE0, \r
-0x54, 0xEF, 0xF0, 0x22, 0x90, 0x95, 0x17, 0xEF, 0xF1, 0xE6, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00, \r
-0x30, 0xE7, 0x02, 0x7F, 0x01, 0x90, 0x95, 0x17, 0xE0, 0x6F, 0x60, 0x39, 0xC3, 0x90, 0x95, 0x19, \r
-0xE0, 0x94, 0x88, 0x90, 0x95, 0x18, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC0, 0xE0, 0x44, \r
-0x10, 0xF0, 0x22, 0x90, 0x95, 0x18, 0x31, 0x77, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0xD3, \r
-0x90, 0x95, 0x19, 0xE0, 0x94, 0x32, 0x90, 0x95, 0x18, 0xE0, 0x94, 0x00, 0x40, 0xBC, 0x90, 0x01, \r
-0xC6, 0xE0, 0x30, 0xE0, 0xB5, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x00, 0x7E, \r
-0x08, 0x12, 0x37, 0x4E, 0x90, 0x93, 0x3D, 0x12, 0x08, 0x6D, 0x7F, 0x00, 0x7E, 0x09, 0x12, 0x37, \r
-0x4E, 0x90, 0x93, 0x41, 0x12, 0x08, 0x6D, 0x90, 0x93, 0x3D, 0x31, 0x6A, 0x60, 0x17, 0x90, 0x93, \r
-0x3D, 0x31, 0x61, 0x90, 0x93, 0x3D, 0x12, 0x08, 0x6D, 0x90, 0x93, 0x3D, 0x31, 0x58, 0x7F, 0x00, \r
-0x7E, 0x08, 0x12, 0x38, 0x45, 0x90, 0x93, 0x41, 0x31, 0x6A, 0x60, 0x17, 0x90, 0x93, 0x41, 0x31, \r
-0x61, 0x90, 0x93, 0x41, 0x12, 0x08, 0x6D, 0x90, 0x93, 0x41, 0x31, 0x58, 0x7F, 0x00, 0x7E, 0x09, \r
-0x12, 0x38, 0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x43, 0xE5, 0x90, 0xAA, 0xB9, 0x02, 0x08, \r
-0x6D, 0x12, 0x43, 0xE5, 0xEF, 0x54, 0xFE, 0xFF, 0xEC, 0x22, 0x12, 0x43, 0xE5, 0xEF, 0x54, 0x01, \r
-0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0xEF, 0x22, 0xE4, 0x75, 0xF0, 0x01, 0x02, 0x08, 0xD6, 0xAD, 0x07, \r
-0x90, 0x90, 0x7E, 0x31, 0x77, 0x90, 0x90, 0x7E, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x04, 0x2E, 0xD1, \r
-0xE7, 0xEF, 0xF0, 0x90, 0x90, 0x7E, 0xA3, 0xE0, 0xFF, 0x74, 0x05, 0x2E, 0xD1, 0xDB, 0xEF, 0xF0, \r
-0x22, 0xE4, 0x90, 0x93, 0xFB, 0xF0, 0xA3, 0xF0, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x20, 0xF0, 0x12, \r
-0x8F, 0x6B, 0xEF, 0x64, 0x01, 0x70, 0x63, 0x90, 0x93, 0x23, 0xE0, 0xFF, 0x7B, 0x08, 0x7D, 0x01, \r
-0x91, 0x38, 0x12, 0xA0, 0xF3, 0x90, 0x93, 0xF8, 0x12, 0x97, 0xC4, 0x90, 0x93, 0xFA, 0xEF, 0xF0, \r
-0x90, 0x93, 0xF8, 0x12, 0x9F, 0xF1, 0xE4, 0xFD, 0x12, 0x98, 0x0A, 0x90, 0x93, 0xFA, 0xE0, 0xFF, \r
-0x90, 0x93, 0xF9, 0xE0, 0x2F, 0xFF, 0x90, 0x93, 0xF8, 0xE0, 0x34, 0x00, 0xCF, 0x24, 0x30, 0xCF, \r
-0x34, 0x00, 0xFE, 0x90, 0x93, 0xFB, 0xF0, 0xA3, 0xEF, 0xF0, 0x31, 0x7E, 0x91, 0x1B, 0x90, 0x93, \r
-0x23, 0xE0, 0xFB, 0xE4, 0xFF, 0x51, 0x1B, 0x91, 0x1B, 0x90, 0x93, 0x1F, 0xE0, 0xFB, 0x7F, 0x11, \r
-0x51, 0x1B, 0x12, 0x58, 0x01, 0x90, 0x90, 0x86, 0x31, 0x77, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, \r
-0xC0, 0xD0, 0x90, 0x94, 0xC9, 0xEC, 0x12, 0x83, 0x9D, 0xAA, 0x07, 0x90, 0x94, 0xD0, 0x12, 0x08, \r
-0x79, 0x00, 0x00, 0x00, 0x00, 0x91, 0x24, 0xEA, 0x24, 0xEF, 0x60, 0x3C, 0x24, 0xD7, 0x70, 0x02, \r
-0x61, 0x7A, 0x24, 0x3A, 0x60, 0x02, 0x61, 0xB3, 0x71, 0xF0, 0x24, 0x0A, 0x71, 0xFF, 0xED, 0xF0, \r
-0xFE, 0x12, 0x5A, 0xFA, 0x71, 0xE3, 0xE4, 0xF0, 0xFE, 0x74, 0x00, 0x2F, 0x91, 0x13, 0x7D, 0x14, \r
-0x71, 0xCC, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x00, 0x71, 0xD7, 0x90, 0xAC, 0x6A, 0x12, 0x08, 0x6D, \r
-0x7D, 0x14, 0x7C, 0x00, 0xE4, 0xFF, 0x61, 0x75, 0x90, 0x94, 0xC9, 0xE4, 0x75, 0xF0, 0x14, 0x12, \r
-0x08, 0xD6, 0x90, 0x94, 0xC9, 0xA3, 0xE0, 0xFB, 0xFF, 0x24, 0x06, 0xFC, 0x91, 0x00, 0xCC, 0xF0, \r
-0x90, 0x94, 0xD4, 0xA3, 0xE0, 0xFE, 0x12, 0x5A, 0xFA, 0x71, 0xE3, 0xE4, 0xD1, 0xE3, 0xE0, 0xFE, \r
-0xA9, 0x03, 0x74, 0x05, 0x29, 0xD1, 0xDB, 0x12, 0x84, 0xA3, 0xFE, 0x90, 0x94, 0xCE, 0xF0, 0xA3, \r
-0xEF, 0xF0, 0x90, 0x94, 0xC9, 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xD3, 0xEF, \r
-0x94, 0x00, 0xEE, 0x94, 0x01, 0x90, 0x94, 0xC9, 0x40, 0x69, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xE9, \r
-0x7C, 0x00, 0x24, 0x00, 0xF9, 0xEC, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0xC3, 0xE4, 0x9F, 0xFD, 0x74, \r
-0x01, 0x9E, 0xFC, 0x71, 0xCE, 0x90, 0x94, 0xCB, 0xE0, 0x24, 0x01, 0xFF, 0xE4, 0x33, 0xA2, 0xE7, \r
-0x13, 0xEF, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x91, 0x0D, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, \r
-0x03, 0x7B, 0x01, 0x7A, 0xFC, 0x79, 0x00, 0x90, 0x94, 0xC9, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, \r
-0xE4, 0x9F, 0xFF, 0x74, 0x01, 0x9E, 0xFE, 0x71, 0xF7, 0xC3, 0x9F, 0xFD, 0xEC, 0x9E, 0xFC, 0x12, \r
-0x26, 0x4E, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x42, 0x90, 0x71, 0xD1, 0x91, \r
-0x24, 0x80, 0x0D, 0xA3, 0xE0, 0x7E, 0x00, 0x24, 0x00, 0x91, 0x13, 0x71, 0xF7, 0xFD, 0x71, 0xCE, \r
-0x90, 0x94, 0xC9, 0x74, 0xFF, 0x75, 0xF0, 0xEC, 0x12, 0x08, 0xD6, 0x71, 0xF0, 0x7E, 0x00, 0x24, \r
+0x2F, 0x74, 0x90, 0xF0, 0x7F, 0x08, 0x51, 0x5D, 0xEF, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x31, 0x47, \r
+0x7F, 0x01, 0x12, 0x8B, 0xAB, 0x7F, 0x90, 0x51, 0x5D, 0xEF, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x31, \r
+0x47, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0xFD, 0x7F, 0x4E, 0x31, 0x47, 0x7F, 0x4F, 0x51, \r
+0x5D, 0xEF, 0x22, 0x7F, 0x67, 0x51, 0x5D, 0xEF, 0x44, 0x20, 0xFD, 0x7F, 0x67, 0x31, 0x47, 0x90, \r
+0x95, 0x16, 0xE0, 0x22, 0x8E, 0x59, 0x8F, 0x5A, 0xBD, 0x01, 0x13, 0xE5, 0x5A, 0x78, 0x03, 0xCE, \r
+0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xEE, 0x54, 0x1F, 0xFE, 0x02, 0x3D, 0xC2, 0xAF, 0x5A, \r
+0xAE, 0x59, 0x02, 0x3E, 0x50, 0x90, 0x01, 0x30, 0xE4, 0xB1, 0xFA, 0x90, 0x01, 0x38, 0xB1, 0xFA, \r
+0xFD, 0x7F, 0x50, 0x31, 0x47, 0xE4, 0xFD, 0x7F, 0x51, 0x31, 0x47, 0xE4, 0xFD, 0x7F, 0x52, 0x31, \r
+0x47, 0xE4, 0xFD, 0x7F, 0x53, 0x21, 0x47, 0x90, 0x01, 0x34, 0x74, 0xFF, 0xB1, 0xFA, 0x90, 0x01, \r
+0x3C, 0xB1, 0xFA, 0xFD, 0x7F, 0x54, 0x31, 0x47, 0x7D, 0xFF, 0x7F, 0x55, 0x31, 0x47, 0x7D, 0xFF, \r
+0x7F, 0x56, 0x31, 0x47, 0x7D, 0xFF, 0x7F, 0x57, 0x21, 0x47, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, \r
+0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, \r
+0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x06, 0xB7, 0x74, 0x09, 0xF0, 0x90, 0x06, 0xB4, 0x74, \r
+0x86, 0xF0, 0xF1, 0xF8, 0xE4, 0xFD, 0x31, 0x5B, 0x71, 0x77, 0x44, 0x01, 0xFD, 0x7F, 0x02, 0x31, \r
+0x47, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xD1, 0x6F, 0x30, \r
+0xE6, 0x28, 0x90, 0x00, 0x8C, 0xE0, 0x90, 0x95, 0x39, 0xF0, 0x7F, 0x8D, 0x51, 0x5D, 0x90, 0x95, \r
+0x3A, 0xEF, 0xF0, 0x90, 0x00, 0x8E, 0xE0, 0x90, 0x95, 0x3B, 0xF0, 0x90, 0x95, 0x3A, 0xE0, 0xD1, \r
+0x6F, 0x30, 0xE0, 0x06, 0xE4, 0xFD, 0x7F, 0x8D, 0x31, 0x47, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, \r
+0x8F, 0x51, 0x5D, 0xEF, 0x22, 0x31, 0x47, 0x90, 0x95, 0x4B, 0xE0, 0x22, 0x7F, 0x48, 0x7E, 0x09, \r
+0x12, 0x37, 0x4E, 0xE4, 0x22, 0x7F, 0x4E, 0x51, 0x5D, 0xEF, 0x54, 0x7F, 0x22, 0xB1, 0xB5, 0xB1, \r
+0xD7, 0x12, 0x95, 0xFE, 0x12, 0x96, 0x1D, 0xE4, 0xF5, 0x0D, 0xF5, 0x0E, 0xF5, 0x0F, 0x75, 0x10, \r
+0x80, 0xAD, 0x0D, 0x7F, 0x50, 0x31, 0x47, 0xAD, 0x0E, 0x7F, 0x51, 0x31, 0x47, 0xAD, 0x0F, 0x7F, \r
+0x52, 0x31, 0x47, 0xAD, 0x10, 0x7F, 0x53, 0x21, 0x47, 0x12, 0xA6, 0xAD, 0x7F, 0xF2, 0x51, 0x5D, \r
+0xEF, 0x20, 0xE6, 0x09, 0x7F, 0x05, 0xD1, 0xCE, 0xFD, 0x7F, 0x05, 0x31, 0x47, 0x22, 0x51, 0x5D, \r
+0xEF, 0x44, 0x80, 0x22, 0x12, 0x67, 0xF4, 0xE4, 0x90, 0x93, 0x3A, 0xB1, 0xFA, 0x90, 0x90, 0x8C, \r
+0xB1, 0xFA, 0xA3, 0xB1, 0xFA, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x90, 0x9E, 0xF0, 0xA3, 0xF0, 0x90, \r
+0x90, 0xE0, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x93, 0xC3, 0xEF, 0xF0, 0xA3, 0x12, 0x44, 0x20, 0x90, \r
+0x93, 0xC4, 0x12, 0x5D, 0x0E, 0xF1, 0x96, 0x24, 0x02, 0xF1, 0x57, 0xF1, 0xAB, 0x24, 0x04, 0xF1, \r
+0x8D, 0x24, 0x03, 0xF1, 0x57, 0xF1, 0xAB, 0x24, 0x08, 0xF1, 0x8D, 0x24, 0x04, 0xF1, 0x57, 0xF1, \r
+0xAB, 0x24, 0x0C, 0xF1, 0x8D, 0x24, 0x05, 0xF1, 0x57, 0x90, 0x93, 0xC3, 0xE0, 0xFE, 0x44, 0x50, \r
+0x90, 0x93, 0xC7, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xEE, 0x75, \r
+0xF0, 0x08, 0xA4, 0xF1, 0x57, 0x90, 0x93, 0xC7, 0x74, 0xFF, 0xB1, 0xFA, 0xF1, 0xA2, 0x04, 0xF1, \r
+0x57, 0x90, 0x06, 0x72, 0xE4, 0xF0, 0x22, 0xFF, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xC7, 0x12, 0x06, \r
+0x89, 0x90, 0x06, 0x74, 0x12, 0x7A, 0x97, 0x90, 0x06, 0x75, 0x12, 0x79, 0xA0, 0x90, 0x06, 0x76, \r
+0x12, 0x7B, 0xEF, 0x90, 0x06, 0x77, 0xF0, 0x90, 0x06, 0x70, 0xEF, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, \r
+0x04, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x7F, 0x01, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0xF9, 0xE4, 0x3A, \r
+0x8B, 0x40, 0xF5, 0x41, 0x89, 0x42, 0x75, 0x43, 0x04, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xC7, 0x12, \r
+0x35, 0x26, 0x90, 0x93, 0xC3, 0xE0, 0x75, 0xF0, 0x08, 0xA4, 0x22, 0x90, 0x93, 0xC4, 0x12, 0x44, \r
+0x17, 0xE9, 0x22, 0x51, 0x5D, 0xEF, 0x44, 0x40, 0xFD, 0x22, 0x7F, 0xF4, 0x51, 0x5D, 0xEF, 0x20, \r
+0xE5, 0x0D, 0x7F, 0xF4, 0x51, 0x5D, 0xEF, 0x7F, 0x01, 0x20, 0xE4, 0x05, 0x7F, 0x02, 0x22, 0x7F, \r
+0x03, 0x22, 0x12, 0x9D, 0x3D, 0x7F, 0x08, 0x51, 0x5D, 0xEF, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x31, \r
+0x47, 0xE4, 0xFF, 0x12, 0x8B, 0xAB, 0x90, 0x8E, 0x43, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0xF0, 0x7F, \r
+0x10, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0xC1, 0x36, 0x90, 0x8E, 0xCD, 0xE0, 0xFF, 0x90, 0x8E, 0xCC, \r
+0xE0, 0xFB, 0x90, 0x8E, 0xCE, 0xE0, 0x90, 0x95, 0x19, 0xF0, 0x22, 0xF0, 0xE4, 0x90, 0x94, 0xFE, \r
+0xF0, 0x90, 0x8E, 0xA5, 0xE0, 0x90, 0x94, 0xFF, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, \r
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0xFA, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, \r
+0x94, 0xFE, 0xE0, 0xF5, 0x3B, 0xA3, 0xE0, 0xF5, 0x3C, 0x12, 0x36, 0x3E, 0x90, 0x94, 0xFA, 0x12, \r
+0x90, 0x23, 0xA3, 0xA3, 0xA3, 0x74, 0x05, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xF5, 0x57, \r
+0x90, 0x8E, 0x47, 0xE0, 0x70, 0x02, 0x21, 0x0B, 0x12, 0x6A, 0xB6, 0x60, 0x02, 0x21, 0x0B, 0x31, \r
+0x0D, 0x12, 0x43, 0xD5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0x31, \r
+0x26, 0x78, 0x10, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, \r
+0xD5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0x31, 0x26, 0x78, 0x18, 0x12, 0x08, \r
+0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0xA2, 0x36, 0x44, 0x80, 0xF0, 0x12, \r
+0xA6, 0xCC, 0x60, 0x22, 0x24, 0xFE, 0x60, 0x03, 0x04, 0x70, 0x1E, 0x90, 0x8E, 0x4E, 0xE0, 0x14, \r
+0xF0, 0xE0, 0xFF, 0x60, 0x06, 0x90, 0x8E, 0x50, 0xE0, 0x60, 0x0E, 0xEF, 0x70, 0x08, 0x90, 0x8E, \r
+0x4D, 0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x75, 0x57, 0x01, 0xE5, 0x57, 0x60, 0x3E, 0x12, 0xA2, 0x2E, \r
+0x90, 0x8E, 0x50, 0xE0, 0x60, 0x04, 0x64, 0x01, 0x70, 0x13, 0xE4, 0x90, 0x94, 0xFE, 0xF0, 0x90, \r
+0x8E, 0x50, 0xE0, 0xF1, 0xBE, 0x11, 0x15, 0x90, 0x8E, 0x50, 0xE0, 0x80, 0x0E, 0xE4, 0x90, 0x94, \r
+0xFE, 0x12, 0x99, 0x2A, 0xF1, 0xBE, 0x11, 0x15, 0x12, 0x99, 0x2B, 0xF1, 0xBE, 0x90, 0x8E, 0x60, \r
+0xF0, 0x90, 0x8E, 0x4A, 0xE0, 0x20, 0xE2, 0x03, 0x12, 0x58, 0x61, 0x22, 0xF0, 0x90, 0x05, 0x61, \r
+0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x08, 0x12, 0x08, 0x5A, 0xA8, 0x04, 0xA9, 0x05, 0xAA, \r
+0x06, 0xAB, 0x07, 0x90, 0x05, 0x60, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x22, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x93, 0x64, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x69, 0xF0, 0x90, \r
+0x02, 0x09, 0xE0, 0x90, 0x93, 0x6A, 0xF0, 0x90, 0x93, 0x3E, 0x12, 0x8F, 0xC1, 0x90, 0x93, 0x64, \r
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x71, 0x7B, 0xE0, 0x90, 0x90, 0xE2, 0xF0, 0x74, 0x01, 0x2F, 0xF1, \r
+0x1A, 0xE0, 0x90, 0x90, 0xE3, 0xF0, 0x12, 0xA4, 0x70, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0x78, 0x10, \r
+0x12, 0x08, 0x5A, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x12, 0xA4, 0x5E, 0x31, 0x26, \r
+0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x42, 0x90, \r
+0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xF1, 0x13, 0x31, 0x26, 0x78, 0x08, 0x12, 0x08, \r
+0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x71, 0x6B, 0x31, 0x26, 0x12, 0x42, 0x90, \r
+0x90, 0x90, 0xE6, 0x12, 0xA4, 0x6D, 0x31, 0x26, 0x78, 0x10, 0x12, 0x08, 0x5A, 0xC0, 0x04, 0xC0, \r
+0x05, 0xC0, 0x06, 0xC0, 0x07, 0x12, 0xA4, 0x5E, 0x31, 0x26, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, \r
+0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x42, 0x90, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, \r
+0xC0, 0x07, 0xF1, 0x13, 0x31, 0x26, 0x78, 0x08, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, \r
+0x01, 0xD0, 0x00, 0x71, 0x6B, 0x31, 0x26, 0x12, 0x42, 0x90, 0x90, 0x90, 0xEA, 0x12, 0xA4, 0x6D, \r
+0x31, 0x26, 0x78, 0x10, 0x12, 0x08, 0x5A, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x12, \r
+0xA4, 0x5E, 0x31, 0x26, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, \r
+0x00, 0x12, 0x42, 0x90, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xF1, 0x13, 0x31, 0x26, \r
+0x78, 0x08, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x71, 0x6B, 0x31, \r
+0x26, 0x12, 0x42, 0x90, 0x90, 0x90, 0xEE, 0x12, 0x08, 0x6D, 0x90, 0x93, 0x64, 0xE4, 0x75, 0xF0, \r
+0x04, 0xF1, 0xB5, 0xF1, 0xDD, 0x71, 0x7B, 0xE0, 0xFF, 0x12, 0xA6, 0x55, 0x71, 0x85, 0xE0, 0xB4, \r
+0x10, 0xF1, 0xF1, 0xAE, 0xF1, 0xDD, 0x71, 0x7B, 0xE0, 0xFF, 0x74, 0x02, 0x2E, 0xF5, 0x82, 0xE4, \r
+0x34, 0x91, 0x71, 0x85, 0xE0, 0xB4, 0x10, 0xEC, 0xF1, 0xAE, 0xF1, 0xDD, 0x71, 0x7B, 0xE0, 0xFF, \r
+0x74, 0x12, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0x71, 0x85, 0xE0, 0xB4, 0x10, 0xEC, 0xF1, 0xAE, \r
+0x90, 0x93, 0x66, 0xE0, 0xFF, 0xC3, 0x94, 0x08, 0x50, 0x1F, 0x90, 0x93, 0x64, 0xA3, 0xE0, 0xFE, \r
+0xEF, 0x2E, 0x71, 0x7B, 0xE0, 0xFE, 0x90, 0x93, 0x6A, 0xE0, 0xFD, 0xEE, 0x2D, 0xFE, 0x74, 0x22, \r
+0x2F, 0x12, 0xA6, 0xA5, 0xEE, 0x71, 0x88, 0x80, 0xD7, 0x90, 0x93, 0x3E, 0xE0, 0x04, 0x90, 0x93, \r
+0x68, 0xF0, 0xE4, 0x90, 0x93, 0x67, 0xF0, 0x90, 0x90, 0xE2, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x24, \r
+0x01, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x67, 0xE0, 0xC3, 0x9F, 0xEE, 0x12, 0x98, 0xEC, 0x50, \r
+0x73, 0xA3, 0x12, 0x82, 0xB9, 0xE4, 0x12, 0xA6, 0x9D, 0x90, 0x93, 0x66, 0xE0, 0xFD, 0xC3, 0x94, \r
+0x04, 0x50, 0x56, 0xA3, 0xE0, 0x75, 0xF0, 0x04, 0xA4, 0x7C, 0x00, 0x2D, 0xFF, 0xEC, 0x35, 0xF0, \r
+0xFE, 0x90, 0x90, 0xE2, 0xE0, 0xFD, 0xC3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x50, 0x39, \r
+0xEF, 0x78, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x24, 0x2A, 0xF9, 0x74, 0x91, 0x3E, \r
+0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x01, 0x90, 0x93, 0x64, 0xA3, 0xE0, 0x24, 0x00, 0xF9, 0xE4, \r
+0x34, 0xFC, 0x8B, 0x40, 0xF5, 0x41, 0x89, 0x42, 0x75, 0x43, 0x20, 0xD0, 0x01, 0xD0, 0x03, 0x12, \r
+0x5F, 0x6E, 0x12, 0x87, 0xDF, 0x71, 0x89, 0x80, 0xA0, 0x12, 0xA5, 0xD7, 0x90, 0x93, 0x67, 0xE0, \r
+0x04, 0xF0, 0x41, 0xC7, 0xE4, 0x90, 0x93, 0x66, 0xF0, 0xE4, 0xFF, 0x0F, 0xEF, 0xB4, 0x20, 0xFB, \r
+0x71, 0x89, 0xE0, 0xB4, 0x10, 0xF3, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x42, 0x90, 0xA8, 0x04, \r
+0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x93, 0x64, 0xA3, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, \r
+0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x66, 0xE0, 0x04, 0xF0, 0x22, \r
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x48, 0xED, 0xF0, 0xE4, 0xA3, 0xF0, 0xEF, \r
+0x14, 0x60, 0x02, 0x81, 0x75, 0x90, 0x06, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x95, 0x48, 0xE0, \r
+0xFB, 0xC4, 0x33, 0x54, 0xE0, 0xFE, 0x90, 0x04, 0x42, 0xE0, 0x54, 0x9F, 0x4E, 0xFE, 0xF0, 0xE4, \r
+0xFD, 0x12, 0x9D, 0x75, 0x90, 0x95, 0x49, 0xEF, 0xF0, 0x90, 0x04, 0x83, 0xF0, 0x90, 0x94, 0xB5, \r
+0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0x94, 0xB9, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, \r
+0x01, 0xB1, 0x40, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0x94, 0xB9, 0x12, 0x08, 0x79, \r
+0x00, 0x00, 0x00, 0x01, 0x7F, 0x00, 0x7E, 0x09, 0xB1, 0x44, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, \r
+0x10, 0x90, 0x95, 0x48, 0x31, 0x26, 0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78, 0x01, 0x12, 0x08, 0x47, \r
+0x78, 0x04, 0xF1, 0x99, 0x7F, 0x00, 0x7E, 0x0A, 0xB1, 0x44, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, \r
+0x00, 0x90, 0x95, 0x48, 0x31, 0x26, 0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78, 0x0A, 0xF1, 0x99, 0x7F, \r
+0x00, 0x7E, 0x0D, 0xB1, 0x44, 0x12, 0x08, 0x79, 0x0C, 0x00, 0x00, 0x00, 0x90, 0x95, 0x49, 0x31, \r
+0x26, 0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78, 0x1A, 0xF1, 0x99, 0x7F, 0x18, 0xB1, 0x42, 0x12, 0x08, \r
+0x79, 0x00, 0x00, 0x0C, 0x00, 0x90, 0x94, 0xB9, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0x12, \r
+0xA6, 0x36, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x90, 0x94, 0xA7, 0x12, 0x08, 0x79, 0x00, \r
+0x00, 0x04, 0x00, 0x80, 0x59, 0x90, 0x06, 0x03, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x94, 0xB5, 0x12, \r
+0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0x94, 0xB9, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, \r
+0xB1, 0x40, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x90, 0x94, 0xB9, 0x12, 0x08, 0x79, 0x00, \r
+0x00, 0x00, 0x00, 0x7F, 0x00, 0x7E, 0x09, 0xB1, 0x44, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, \r
+0x90, 0x94, 0xB9, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x12, 0xA6, 0x36, 0x12, 0x08, 0x79, \r
+0x00, 0x00, 0x0C, 0x00, 0x90, 0x94, 0xA7, 0x12, 0x08, 0x79, 0x00, 0x00, 0x0C, 0x00, 0x7D, 0x18, \r
+0x7C, 0x00, 0xE4, 0xFF, 0x12, 0x74, 0x9D, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x58, 0x7E, 0x0C, \r
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0xB3, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, \r
+0x37, 0x4E, 0x90, 0x94, 0xBD, 0x12, 0x08, 0x6D, 0x90, 0x94, 0xB5, 0x12, 0x43, 0xF3, 0x12, 0x08, \r
+0x3A, 0x90, 0x94, 0xBD, 0xF1, 0xF3, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x94, \r
+0xB5, 0x12, 0x43, 0xF3, 0x90, 0x94, 0xB9, 0xF1, 0xF3, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, \r
+0x00, 0x12, 0x43, 0xD5, 0x90, 0x94, 0xC1, 0x12, 0x08, 0x6D, 0x90, 0x94, 0xC1, 0x12, 0x9E, 0x96, \r
+0x90, 0x94, 0xB3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x38, 0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
+0x7F, 0x00, 0x7E, 0x08, 0x91, 0xE0, 0x90, 0x94, 0xB5, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
+0xD0, 0x90, 0x94, 0xE5, 0xEC, 0x12, 0x81, 0x15, 0xAA, 0x07, 0x90, 0x94, 0xEC, 0x12, 0x08, 0x79, \r
+0x00, 0x00, 0x00, 0x00, 0x12, 0xA6, 0x2B, 0xEA, 0x24, 0xEF, 0x60, 0x41, 0x24, 0xD7, 0x70, 0x02, \r
+0xC1, 0xBA, 0x24, 0x3A, 0x60, 0x02, 0xC1, 0xF7, 0xF1, 0xC5, 0x24, 0x0A, 0xF1, 0xD4, 0xED, 0xF0, \r
+0xFE, 0x71, 0x7B, 0xE4, 0xF0, 0x74, 0x01, 0x2E, 0xF1, 0x1A, 0xE4, 0xF0, 0xFE, 0x74, 0x00, 0x2F, \r
+0x12, 0xA6, 0xEC, 0x7D, 0x14, 0xF1, 0x22, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x00, 0xF1, 0xA2, 0x90, \r
+0xAC, 0x6A, 0x12, 0x08, 0x6D, 0x7D, 0x14, 0x7C, 0x00, 0xE4, 0xFF, 0xC1, 0xB5, 0x90, 0x94, 0xE5, \r
+0xE4, 0x75, 0xF0, 0x14, 0x12, 0x08, 0xD6, 0x90, 0x94, 0xE5, 0xA3, 0xE0, 0xFB, 0xFF, 0x24, 0x06, \r
+0xFC, 0xF1, 0xD5, 0xCC, 0xF0, 0x90, 0x94, 0xF0, 0xA3, 0xE0, 0xFE, 0x71, 0x7B, 0xE4, 0xF0, 0x74, \r
+0x01, 0x2E, 0xF1, 0x1A, 0xE4, 0x12, 0x87, 0xA9, 0xFE, 0xA9, 0x03, 0x74, 0x05, 0x29, 0xF5, 0x82, \r
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x12, 0x81, 0xF5, 0xFE, 0x90, 0x94, 0xEA, 0xF0, 0xA3, 0xEF, 0xF0, \r
+0x90, 0x94, 0xE5, 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xD3, 0xEF, 0x94, 0x00, \r
+0xEE, 0x94, 0x01, 0x90, 0x94, 0xE5, 0x40, 0x6A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xE9, 0x7C, 0x00, \r
+0x24, 0x00, 0xF9, 0xEC, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0xC3, 0xE4, 0x9F, 0xFD, 0x74, 0x01, 0x9E, \r
+0xFC, 0xF1, 0x24, 0x90, 0x94, 0xE7, 0xE0, 0x24, 0x01, 0xFF, 0xE4, 0x33, 0xA2, 0xE7, 0x13, 0xEF, \r
+0x13, 0x90, 0xFD, 0x10, 0xF0, 0xF1, 0xED, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0x7B, \r
+0x01, 0x7A, 0xFC, 0x79, 0x00, 0x90, 0x94, 0xE5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0xE4, 0x9F, \r
+0xFF, 0x74, 0x01, 0x9E, 0xFE, 0xF1, 0xCC, 0xC3, 0x9F, 0xFD, 0xEC, 0x9E, 0xFC, 0x12, 0x26, 0x4E, \r
+0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x42, 0x90, 0xF1, 0x27, 0x12, 0xA6, 0x2B, \r
+0x80, 0x0E, 0xA3, 0xE0, 0x7E, 0x00, 0x24, 0x00, 0x12, 0xA6, 0xEC, 0xF1, 0xCC, 0xFD, 0xF1, 0x24, \r
+0x90, 0x94, 0xE5, 0x74, 0xFF, 0x75, 0xF0, 0xEC, 0x12, 0x08, 0xD6, 0xF1, 0xC5, 0x7E, 0x00, 0x24, \r
 0x0C, 0xF9, 0xEE, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0xC0, 0x02, 0xC0, 0x01, 0x74, 0x10, 0x2F, 0xF9, \r
 0x0C, 0xF9, 0xEE, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0xC0, 0x02, 0xC0, 0x01, 0x74, 0x10, 0x2F, 0xF9, \r
-0xEE, 0x34, 0xFC, 0xFA, 0x71, 0xD7, 0x90, 0xAC, 0x6A, 0x12, 0x08, 0x6D, 0x71, 0xF7, 0xFD, 0xD0, \r
-0x01, 0xD0, 0x02, 0x7F, 0x11, 0x12, 0x1B, 0xAC, 0x80, 0x31, 0x71, 0xF0, 0x24, 0x2A, 0x71, 0xFF, \r
-0xED, 0xF0, 0xFE, 0x12, 0x5A, 0xFA, 0x71, 0xE3, 0xE4, 0xF0, 0x12, 0x9A, 0x21, 0x7D, 0x48, 0x71, \r
-0xCC, 0x71, 0xDD, 0x91, 0x08, 0x12, 0x42, 0x90, 0xE4, 0xFD, 0xFC, 0x71, 0xD1, 0x71, 0xDD, 0x91, \r
-0x08, 0x12, 0x42, 0x90, 0x71, 0xD1, 0x71, 0xDD, 0x12, 0x08, 0x3A, 0x90, 0x94, 0xCC, 0xEE, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0x90, 0x94, 0xCC, 0x12, 0xA1, 0x98, 0x90, 0x94, 0xD4, 0xA3, 0xE0, 0xFE, 0x12, \r
-0x5A, 0xFA, 0xEF, 0x71, 0xE4, 0xED, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7C, 0x00, 0x12, 0x26, \r
-0x4E, 0x90, 0x94, 0xD0, 0x02, 0x08, 0x6D, 0x90, 0xAC, 0x67, 0x12, 0x44, 0x12, 0x90, 0x94, 0xD0, \r
-0x02, 0x43, 0xE5, 0xE4, 0xF0, 0x74, 0x01, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, \r
-0x90, 0x94, 0xC9, 0xA3, 0xE0, 0xFF, 0x22, 0x90, 0x94, 0xCE, 0xE0, 0xFC, 0xA3, 0xE0, 0x22, 0xFD, \r
-0xE4, 0x33, 0x90, 0x94, 0xD4, 0xF0, 0xA3, 0x22, 0x78, 0x10, 0x12, 0x08, 0x47, 0x90, 0x94, 0xD0, \r
-0x02, 0x43, 0xF1, 0xF9, 0xEE, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0x22, 0x90, 0x93, 0xFB, 0xE0, 0xFC, \r
-0xA3, 0xE0, 0xFD, 0x22, 0x90, 0x94, 0xCB, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x22, 0x90, \r
-0x93, 0x1B, 0xE0, 0xFF, 0x7B, 0x18, 0x7D, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, \r
-0x95, 0x15, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x95, 0x14, 0xEF, 0xF0, 0xE4, 0xFD, 0xFC, 0xF1, \r
-0x7C, 0x90, 0x95, 0x14, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90, 0x95, 0x15, 0xE0, 0x60, 0x05, 0xB1, \r
-0xF0, 0x44, 0x80, 0xF0, 0xAF, 0x05, 0x74, 0x20, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, \r
-0xE0, 0x54, 0xC0, 0xF0, 0xB1, 0xF0, 0x54, 0xC0, 0xF0, 0x90, 0x00, 0x8B, 0xE0, 0xD3, 0x94, 0x03, \r
-0x74, 0x10, 0x40, 0x07, 0x91, 0xC2, 0x74, 0x04, 0xF0, 0x80, 0x04, 0x91, 0xC2, 0xE4, 0xF0, 0xAF, \r
-0x05, 0x91, 0xCB, 0xE0, 0x54, 0x01, 0xFE, 0x90, 0x95, 0x16, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, \r
-0xEE, 0x44, 0x02, 0x4B, 0xFE, 0x91, 0xCB, 0xEE, 0xF0, 0x74, 0x11, 0x2F, 0xF1, 0x4E, 0x74, 0xFF, \r
-0xF0, 0x74, 0x29, 0x2F, 0xB1, 0xC6, 0x54, 0xF7, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, \r
-0xAF, 0x22, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0x74, 0x12, 0x2F, 0xF5, 0x82, \r
-0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0x90, 0x8D, 0x09, 0xE0, 0xFF, 0x90, 0x94, 0xF1, 0xE0, 0xFB, \r
-0x7D, 0x01, 0x91, 0x38, 0x90, 0x94, 0xF2, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0x94, \r
-0xF0, 0xE0, 0xFF, 0xB1, 0xA4, 0x90, 0x94, 0xF2, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x81, 0x00, \r
-0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0xB1, 0xE4, 0x44, 0x01, 0xF0, 0xB1, 0xE4, 0x54, 0xFB, 0xF0, \r
-0xAC, 0x07, 0x74, 0x12, 0x2C, 0x91, 0xCE, 0xE0, 0x44, 0xFA, 0xF0, 0x74, 0x11, 0x2C, 0xF1, 0x4E, \r
-0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF1, 0x45, 0x44, 0x0E, 0xF0, 0x90, 0x04, \r
-0xA7, 0xE4, 0xF0, 0x90, 0x04, 0xA6, 0xF0, 0x90, 0x04, 0xA5, 0x74, 0xFF, 0xF0, 0x90, 0x04, 0xA4, \r
-0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xB1, 0xDC, 0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, \r
-0xB1, 0xDC, 0xED, 0xF0, 0x22, 0x7D, 0x08, 0xE4, 0xFF, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
-0x90, 0x94, 0xF0, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x8D, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x04, \r
-0x1D, 0xE0, 0x60, 0x22, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x94, 0xF4, 0xF0, 0x7D, 0x26, 0x12, 0x8F, \r
-0xCB, 0xEF, 0x64, 0x01, 0x70, 0x02, 0x91, 0xD6, 0x90, 0x94, 0xF4, 0xE0, 0xFF, 0x7D, 0x27, 0x12, \r
-0x53, 0xD9, 0xB1, 0xFC, 0x80, 0x04, 0xB1, 0xFC, 0x91, 0xD6, 0x12, 0x58, 0x01, 0x7F, 0x01, 0xD0, \r
-0xD0, 0x92, 0xAF, 0x22, 0xB1, 0xD0, 0x54, 0x3F, 0xF0, 0xEF, 0x60, 0x0D, 0x74, 0x29, 0x2D, 0xB1, \r
-0xC6, 0x44, 0x10, 0xB1, 0xCF, 0x44, 0x80, 0xF0, 0x22, 0x74, 0x29, 0x2D, 0xB1, 0xC6, 0x54, 0xEF, \r
-0xB1, 0xCF, 0x44, 0x40, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xF0, \r
-0x74, 0x09, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xF5, 0x82, 0xE4, 0x34, \r
-0xFC, 0xF5, 0x83, 0x22, 0x74, 0x0D, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, \r
-0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0x90, 0x94, 0xF0, 0xE0, \r
-0xFF, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x31, 0xEF, 0xF0, 0x90, 0x8D, 0x09, \r
-0xE0, 0xFF, 0x90, 0x04, 0x1C, 0xE0, 0x6F, 0x70, 0x3D, 0x90, 0x8E, 0x18, 0xE0, 0x64, 0x0E, 0x70, \r
-0x14, 0x90, 0x95, 0x31, 0xE0, 0x70, 0x2F, 0x90, 0x8E, 0x11, 0xE0, 0x54, 0x7F, 0xF0, 0xF1, 0xF4, \r
-0x12, 0x4F, 0xD9, 0x80, 0x1E, 0x90, 0x8E, 0x18, 0xE0, 0x64, 0x06, 0x70, 0x19, 0x90, 0x95, 0x31, \r
-0xE0, 0x60, 0x13, 0x90, 0x8E, 0x11, 0xE0, 0x54, 0xBF, 0xF0, 0x12, 0xA0, 0x87, 0x90, 0x8E, 0x18, \r
-0x74, 0x04, 0xF0, 0x12, 0x4F, 0xE9, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFD, 0xFC, 0x90, 0x93, \r
-0x22, 0xF1, 0x7A, 0xAB, 0x05, 0x74, 0x01, 0x2B, 0x71, 0xE8, 0xE0, 0xFE, 0x74, 0x00, 0x2B, 0x12, \r
-0x5A, 0xFC, 0x12, 0xA0, 0x35, 0x90, 0x90, 0x74, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x03, 0x2B, 0xF1, \r
-0x5F, 0xFE, 0x74, 0x02, 0x2B, 0xF1, 0x56, 0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x90, 0x90, 0x76, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0x74, 0x05, 0x2B, 0xD1, 0xDB, 0xE0, 0xFE, 0x74, 0x04, 0x2B, 0xD1, 0xE7, 0xE0, \r
-0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x90, 0x90, 0x78, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x07, 0x2B, 0xF1, \r
-0x71, 0xFE, 0x74, 0x06, 0x2B, 0xF1, 0x45, 0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x90, 0x90, 0x7A, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0x74, 0x09, 0x2B, 0xB1, 0xD3, 0xFE, 0x74, 0x08, 0x2B, 0xF1, 0x68, 0x24, 0x00, \r
-0xFF, 0xEC, 0x3E, 0x90, 0x90, 0x7C, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, \r
-0xF5, 0x83, 0x22, 0xF0, 0x74, 0x04, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0x12, \r
-0x57, 0xCE, 0x74, 0x00, 0x2F, 0x12, 0x5A, 0xFC, 0xE0, 0x90, 0x94, 0x56, 0xF0, 0x74, 0x01, 0x2F, \r
-0x71, 0xE8, 0xE0, 0x90, 0x94, 0x57, 0xF0, 0x74, 0x02, 0x2F, 0xF1, 0x56, 0x90, 0x94, 0x58, 0xF0, \r
-0x74, 0x03, 0x2F, 0xF1, 0x5F, 0x90, 0x94, 0x59, 0xD1, 0xE3, 0xE0, 0x90, 0x94, 0x5A, 0xF0, 0x74, \r
-0x05, 0x2F, 0xD1, 0xDB, 0xE0, 0x90, 0x94, 0x5B, 0xF0, 0x74, 0x06, 0x2F, 0xF1, 0x45, 0x90, 0x94, \r
-0x5C, 0xF0, 0x74, 0x07, 0x2F, 0xF1, 0x71, 0x90, 0x94, 0x5D, 0xF0, 0x74, 0x08, 0x2F, 0xF1, 0x68, \r
-0x90, 0x94, 0x5E, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xF5, 0x82, \r
-0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xF5, \r
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, \r
-0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xE0, 0xFF, 0x12, 0x57, 0xD3, 0x7C, \r
-0x00, 0xAD, 0x07, 0x22, 0xF1, 0xAC, 0x90, 0x8E, 0x18, 0xE0, 0x64, 0x0C, 0x60, 0x05, 0x12, 0x53, \r
-0xD0, 0xB1, 0x55, 0x22, 0x90, 0x93, 0x28, 0xF1, 0xED, 0x30, 0xE0, 0x0E, 0x7B, 0x00, 0x7A, 0x00, \r
-0x79, 0x00, 0x12, 0xA0, 0x7A, 0x04, 0xF0, 0x02, 0x55, 0x67, 0xA1, 0x55, 0x12, 0xA0, 0x70, 0x30, \r
-0xE0, 0x05, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x01, 0x3C, \r
-0x74, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0xE2, 0xF0, 0x90, 0x8E, 0xBB, 0xE0, 0xC3, 0x13, 0x54, 0x7F, \r
-0x90, 0x94, 0xE3, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x50, 0x18, 0x90, 0x8E, \r
-0x11, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xE0, 0xFF, 0x13, \r
-0x13, 0x54, 0x3F, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x22, 0xE4, 0xFB, 0xFA, 0xFD, \r
-0x7F, 0x01, 0x12, 0x48, 0x39, 0x90, 0x93, 0x45, 0xEF, 0xF0, 0x60, 0xF0, 0x90, 0x8D, 0x01, 0xE0, \r
-0xFF, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0xE5, 0xC2, 0xAF, 0xEF, 0x30, 0xE1, 0x0A, 0x90, 0x8D, 0x01, \r
-0xE0, 0x54, 0xFD, 0xF0, 0x12, 0x88, 0x5C, 0xF1, 0xA9, 0x30, 0xE2, 0x06, 0x54, 0xFB, 0xF0, 0x12, \r
-0x83, 0xD9, 0xF1, 0xA9, 0x30, 0xE4, 0x0B, 0x54, 0xEF, 0xF0, 0x12, 0x90, 0xB9, 0xBF, 0x01, 0x02, \r
-0x11, 0x51, 0xF1, 0xA9, 0x30, 0xE7, 0x06, 0x54, 0x7F, 0xF0, 0x12, 0x50, 0xBE, 0xD2, 0xAF, 0x80, \r
-0xBB, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x94, 0x79, 0x12, 0xA1, 0x80, 0xA3, \r
-0x12, 0x67, 0xE6, 0x90, 0x94, 0x81, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xC4, 0x74, 0x51, \r
-0xF0, 0x74, 0x68, 0xA3, 0xF0, 0x12, 0xA1, 0x0E, 0x12, 0x84, 0xA3, 0x90, 0x94, 0x70, 0xF0, 0xA3, \r
-0xEF, 0xF0, 0x90, 0x02, 0x82, 0xE0, 0x90, 0x94, 0x78, 0xF0, 0x90, 0x8E, 0xC4, 0xE0, 0x20, 0xE0, \r
-0x02, 0x61, 0x3B, 0xE4, 0x90, 0x94, 0x77, 0xF0, 0x90, 0x94, 0x78, 0xE0, 0xFF, 0x90, 0x94, 0x77, \r
-0xE0, 0xC3, 0x9F, 0x40, 0x02, 0x61, 0x3B, 0x90, 0x94, 0x70, 0x12, 0xA1, 0x98, 0x90, 0xFD, 0x11, \r
-0xF0, 0x90, 0x94, 0x81, 0xEF, 0xF0, 0x12, 0x85, 0x37, 0x12, 0xA0, 0x35, 0x54, 0x3F, 0xFE, 0x90, \r
-0x94, 0x72, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x94, 0x7D, 0xEE, 0x12, 0x86, 0x01, 0xE0, 0x54, 0x03, \r
-0xFE, 0xEF, 0x24, 0x18, 0x2E, 0xFF, 0x90, 0x94, 0x82, 0xF0, 0x90, 0x94, 0x71, 0xE0, 0x2F, 0xFF, \r
-0x90, 0x94, 0x70, 0xE0, 0x34, 0x00, 0xFE, 0x90, 0x94, 0x74, 0xF1, 0xEB, 0xC0, 0x07, 0x71, 0x4C, \r
-0x7D, 0x01, 0x71, 0x77, 0xC0, 0x07, 0x71, 0x4C, 0x7D, 0x04, 0x71, 0x77, 0xAB, 0x07, 0xD0, 0x05, \r
-0xD0, 0x07, 0x12, 0x97, 0xEA, 0x90, 0x94, 0x79, 0xEF, 0x71, 0x4B, 0xE4, 0xFD, 0x71, 0x77, 0xEF, \r
-0x54, 0xFC, 0x90, 0x94, 0x76, 0xF0, 0x90, 0x94, 0x82, 0xE0, 0xFF, 0x90, 0x94, 0x72, 0xE4, 0x8F, \r
-0xF0, 0x12, 0x08, 0xD6, 0x90, 0x94, 0x72, 0x12, 0x85, 0xDA, 0x90, 0x94, 0x72, 0xEE, 0xF0, 0xA3, \r
-0xEF, 0xF0, 0x90, 0x94, 0x70, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7D, 0x0F, 0x71, 0x77, 0x90, 0x94, \r
-0x72, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, 0x94, 0x70, 0xEC, 0x8D, 0xF0, 0x12, 0xA1, 0x90, 0xFC, \r
-0xA3, 0xE0, 0xFD, 0xD3, 0x90, 0x94, 0x71, 0xE0, 0x9D, 0x90, 0x94, 0x70, 0xE0, 0x9C, 0x40, 0x18, \r
-0x90, 0x8D, 0xF9, 0xE0, 0x24, 0x01, 0xFD, 0x12, 0xA0, 0x5B, 0xFC, 0xC3, 0x90, 0x94, 0x71, 0xE0, \r
-0x9D, 0xF0, 0x90, 0x94, 0x70, 0xE0, 0x9C, 0xF0, 0xEF, 0x30, 0xE6, 0x06, 0x90, 0x01, 0xC7, 0x74, \r
-0x22, 0xF0, 0xEF, 0x30, 0xE7, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x21, 0xF0, 0xEF, 0x30, 0xE5, 0x06, \r
-0x90, 0x01, 0xC7, 0x74, 0x23, 0xF0, 0x90, 0x94, 0x6F, 0xE0, 0x60, 0x3B, 0x90, 0x94, 0x76, 0xE0, \r
-0x24, 0xB0, 0x60, 0x16, 0x24, 0xD0, 0x60, 0x02, 0x41, 0xD7, 0x12, 0xA1, 0x88, 0x20, 0xE0, 0x18, \r
-0x12, 0x89, 0xA1, 0x20, 0xE0, 0x02, 0x41, 0xD7, 0x80, 0x0E, 0x12, 0xA1, 0x88, 0x20, 0xE0, 0x08, \r
-0x12, 0x89, 0xA1, 0x20, 0xE0, 0x02, 0x41, 0xD7, 0x71, 0x4C, 0x90, 0x94, 0x7D, 0xE0, 0xFC, 0xA3, \r
-0xE0, 0xFD, 0x12, 0x94, 0x48, 0x41, 0xD7, 0x90, 0x94, 0x76, 0xE0, 0x24, 0x40, 0x60, 0x04, 0x24, \r
-0x20, 0x70, 0x2A, 0x90, 0x8E, 0xC7, 0x12, 0x79, 0x18, 0x20, 0xE0, 0x02, 0x41, 0xD7, 0x90, 0x8E, \r
-0xDA, 0xE0, 0x04, 0x71, 0x4B, 0x12, 0x91, 0x3C, 0xEF, 0x70, 0x02, 0x41, 0xD7, 0x90, 0x94, 0x76, \r
-0xE0, 0xFF, 0x12, 0x91, 0x2A, 0x90, 0x8E, 0xDB, 0xE0, 0x04, 0xF0, 0x41, 0xD7, 0xF1, 0xFA, 0x30, \r
-0xE0, 0x59, 0x90, 0x94, 0x79, 0xE0, 0xFF, 0x90, 0x94, 0x75, 0xE0, 0x2F, 0xFF, 0x90, 0x94, 0x74, \r
-0xE0, 0x34, 0x00, 0xCF, 0x24, 0x08, 0xCF, 0x34, 0x00, 0xFE, 0x90, 0x94, 0x7F, 0xF1, 0xEB, 0xEF, \r
-0x64, 0x45, 0x70, 0x37, 0xB1, 0x58, 0x12, 0x96, 0xB5, 0xEF, 0x64, 0x01, 0x70, 0x2D, 0xB1, 0x58, \r
-0xF1, 0xB3, 0xEF, 0x64, 0x01, 0x70, 0x24, 0x90, 0x94, 0x83, 0x04, 0xB1, 0x57, 0xA3, 0xE0, 0xFD, \r
-0x12, 0x97, 0x33, 0xEF, 0x70, 0x0D, 0x90, 0x94, 0x81, 0xE0, 0xFD, 0x90, 0xFD, 0x11, 0xB1, 0x57, \r
-0x12, 0x96, 0xEF, 0x90, 0x94, 0x81, 0xE0, 0x90, 0xFD, 0x11, 0xF0, 0x71, 0x4C, 0x12, 0x91, 0x3C, \r
-0xEF, 0x60, 0x1F, 0x71, 0x4C, 0x90, 0x94, 0x79, 0xE0, 0xFD, 0x90, 0x94, 0x7C, 0xE0, 0xFB, 0x90, \r
-0x94, 0x81, 0xE0, 0x90, 0x93, 0x4A, 0xF0, 0x71, 0xA6, 0xEF, 0x60, 0x06, 0x90, 0x94, 0x83, 0x74, \r
-0x01, 0xF0, 0x90, 0x8E, 0xC4, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x12, 0x71, 0x4C, 0x90, 0x94, 0x79, \r
-0xE0, 0xFD, 0x91, 0x2B, 0xEF, 0x60, 0x06, 0x90, 0x94, 0x83, 0x74, 0x01, 0xF0, 0x12, 0x7F, 0x44, \r
-0x54, 0x3F, 0x30, 0xE0, 0x0A, 0x71, 0x4C, 0x90, 0x94, 0x79, 0xE0, 0xFD, 0x12, 0x94, 0x97, 0x90, \r
-0x8E, 0xC4, 0x12, 0x79, 0x18, 0x30, 0xE0, 0x0F, 0x90, 0x94, 0x83, 0xE0, 0x70, 0x09, 0x71, 0x4C, \r
-0x90, 0x94, 0x79, 0xE0, 0xFD, 0xD1, 0xEE, 0x12, 0x99, 0x7F, 0xEF, 0x64, 0x01, 0x60, 0x07, 0x90, \r
-0x01, 0x3F, 0xE0, 0x30, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x21, 0x12, 0x91, 0x04, 0xEF, 0x64, \r
-0x01, 0x70, 0x37, 0x90, 0x8E, 0xDC, 0xE0, 0x04, 0xF0, 0x12, 0x90, 0xEE, 0xAD, 0x07, 0xEF, 0x64, \r
-0x01, 0x60, 0x1F, 0xF1, 0x98, 0xED, 0xB4, 0x02, 0x08, 0x90, 0x01, 0xC7, 0x74, 0x42, 0xF0, 0x80, \r
-0x0A, 0xED, 0xB4, 0x04, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x43, 0xF0, 0x7F, 0x01, 0x12, 0x79, 0x21, \r
-0x80, 0x19, 0x90, 0x94, 0x70, 0x12, 0x90, 0xA6, 0x80, 0x09, 0x90, 0x8E, 0xC4, 0xE0, 0x54, 0xFE, \r
-0xF0, 0x80, 0x08, 0x90, 0x94, 0x77, 0xE0, 0x04, 0xF0, 0x01, 0x98, 0x74, 0x51, 0x04, 0x90, 0x01, \r
-0xC4, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF0, 0x90, 0x94, 0x74, 0xE0, \r
-0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0x90, 0x93, 0x48, 0xE0, 0xFD, 0x90, 0x93, 0x47, 0xE0, 0x2D, 0xFD, \r
-0x90, 0x93, 0x46, 0xE0, 0x34, 0x00, 0xCD, 0x24, 0x10, 0xCD, 0x34, 0x00, 0xFC, 0x7E, 0x00, 0xED, \r
-0x2F, 0xFF, 0xEE, 0x3C, 0xFE, 0xE4, 0xFD, 0xAB, 0x07, 0xAA, 0x06, 0xED, 0x2B, 0xFB, 0xE4, 0x3A, \r
-0xFA, 0xC3, 0x90, 0x8D, 0xF9, 0xE0, 0x9B, 0x90, 0x8D, 0xF8, 0xE0, 0x9A, 0x50, 0x0C, 0xA3, 0x12, \r
-0xA0, 0x57, 0xFE, 0xC3, 0xEB, 0x9F, 0xFB, 0xEA, 0x9E, 0xFA, 0x12, 0xA1, 0x60, 0x74, 0x00, 0x2F, \r
-0x12, 0x85, 0x46, 0xE0, 0xFF, 0x22, 0x90, 0x93, 0x48, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x12, 0x91, \r
-0x95, 0x90, 0x93, 0x4B, 0xF0, 0xFD, 0x71, 0x77, 0xEF, 0x54, 0x0C, 0x64, 0x08, 0x70, 0x5C, 0x91, \r
-0x22, 0xA3, 0xE0, 0xF1, 0x90, 0x64, 0x88, 0x70, 0x52, 0x91, 0x22, 0xA3, 0xE0, 0x24, 0x07, 0xFD, \r
-0x71, 0x77, 0xEF, 0x64, 0x8E, 0x70, 0x44, 0x90, 0x93, 0x4B, 0x04, 0x91, 0x21, 0x12, 0xA0, 0xAB, \r
-0x04, 0xFD, 0x71, 0x77, 0xEF, 0x64, 0x03, 0x70, 0x32, 0x91, 0x22, 0x12, 0xA0, 0xAB, 0xF1, 0x90, \r
-0x30, 0xE3, 0x07, 0x90, 0x01, 0xC7, 0x74, 0x01, 0x80, 0x1F, 0x90, 0x8E, 0xC4, 0x12, 0xA0, 0x73, \r
-0x30, 0xE0, 0x09, 0x91, 0x22, 0xA3, 0xE0, 0xFD, 0xB1, 0x78, 0x80, 0x0F, 0x90, 0x8E, 0xC7, 0xF1, \r
-0xFD, 0x30, 0xE0, 0x07, 0x90, 0x01, 0xC7, 0x74, 0x02, 0xF1, 0x97, 0x90, 0x93, 0x4B, 0xE0, 0xFF, \r
-0x22, 0xF0, 0x90, 0x93, 0x46, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0x12, 0x96, 0x63, 0x12, 0x96, \r
-0x9F, 0x7A, 0x40, 0x79, 0x56, 0x12, 0x57, 0xF5, 0x78, 0x55, 0x7C, 0x93, 0x7D, 0x01, 0x7B, 0xFF, \r
-0x7A, 0x40, 0x79, 0x5C, 0xF1, 0xE4, 0x78, 0x59, 0x7C, 0x93, 0x7D, 0x01, 0x7B, 0xFF, 0x7A, 0x40, \r
-0x79, 0x60, 0xF1, 0xE4, 0xE4, 0x90, 0x93, 0x5E, 0xF0, 0xD1, 0xA4, 0xCF, 0x24, 0x06, 0xCF, 0xB1, \r
-0x71, 0xEF, 0x64, 0x08, 0x60, 0x02, 0xA1, 0x4A, 0xD1, 0xA4, 0xCF, 0x24, 0x07, 0xCF, 0xB1, 0x71, \r
-0xEF, 0x64, 0x06, 0x60, 0x02, 0xA1, 0x4A, 0x90, 0x93, 0x5E, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x5D, \r
-0xF0, 0xB1, 0x50, 0x94, 0x06, 0x50, 0x17, 0x90, 0x93, 0x47, 0xE0, 0x24, 0x0A, 0xFD, 0x90, 0x93, \r
-0x46, 0xE0, 0x71, 0x6A, 0x90, 0x93, 0x5D, 0x12, 0x96, 0x96, 0xB1, 0x61, 0x80, 0xE3, 0xF1, 0xF3, \r
-0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xD4, 0x12, 0x91, 0x8C, 0x60, 0x02, 0xA1, 0x4A, 0x90, 0x93, 0x5D, \r
-0xF0, 0xB1, 0x50, 0x94, 0x04, 0x50, 0x19, 0x12, 0x96, 0x6F, 0xD1, 0xAF, 0xCD, 0x24, 0x20, 0x71, \r
-0x69, 0x90, 0x93, 0x5D, 0xE0, 0x24, 0x59, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xB1, 0x61, 0x80, 0xE1, \r
-0x78, 0x59, 0x7C, 0x93, 0x12, 0xA0, 0x17, 0xEF, 0x70, 0x67, 0x90, 0x06, 0x30, 0xE0, 0x44, 0x01, \r
-0x54, 0xDF, 0xF0, 0x90, 0x8E, 0xC6, 0xE0, 0x30, 0xE0, 0x09, 0x90, 0x01, 0xC7, 0x74, 0x09, 0xF1, \r
-0x97, 0x80, 0x57, 0xE4, 0x90, 0x93, 0x5D, 0xF0, 0xB1, 0x50, 0x94, 0x06, 0x50, 0x0C, 0x71, 0x55, \r
-0x90, 0x93, 0x5D, 0x12, 0x96, 0x8D, 0xB1, 0x61, 0x80, 0xEE, 0xE4, 0x90, 0x93, 0x5D, 0xF0, 0xB1, \r
-0x50, 0x94, 0x04, 0x50, 0x19, 0x12, 0x96, 0x6F, 0xD1, 0xAF, 0xCD, 0x24, 0x16, 0x71, 0x69, 0x90, \r
-0x93, 0x5D, 0xE0, 0x24, 0x55, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xB1, 0x61, 0x80, 0xE1, 0x7B, 0x01, \r
-0x7A, 0x93, 0x79, 0x4F, 0x12, 0xA0, 0x7A, 0xF0, 0x7A, 0x93, 0x79, 0x55, 0x12, 0x55, 0x67, 0x80, \r
-0x09, 0x90, 0x06, 0x30, 0xE0, 0x44, 0x21, 0x54, 0xEF, 0xF0, 0x90, 0x93, 0x5E, 0xE0, 0xFF, 0x22, \r
-0x90, 0x93, 0x5D, 0xE0, 0xFF, 0xC3, 0x22, 0xF0, 0x90, 0x94, 0x7F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, \r
-0x22, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x5D, 0xE0, 0x04, 0xF0, 0x22, 0xFF, 0x90, 0x93, 0x4F, \r
-0xE0, 0x34, 0x00, 0xFE, 0xE4, 0xFD, 0x61, 0x77, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, \r
-0x06, 0x31, 0xE0, 0x54, 0xEF, 0x44, 0x08, 0xF0, 0xED, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x7C, 0x00, \r
-0xEF, 0x24, 0x08, 0xFF, 0xEC, 0x3E, 0x90, 0x93, 0x4F, 0xF0, 0xA3, 0xEF, 0xF0, 0x7E, 0x00, 0x7F, \r
-0x83, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x8F, 0x79, 0xDA, 0x12, 0x08, 0xAA, 0x90, 0x93, 0x50, 0xE0, \r
-0x24, 0x01, 0xB1, 0x6C, 0x90, 0x8F, 0xDB, 0xD1, 0x9D, 0x24, 0x04, 0xB1, 0x6C, 0x90, 0x8F, 0xDE, \r
-0xD1, 0x9D, 0x24, 0x05, 0xB1, 0x6C, 0x90, 0x8F, 0xDF, 0xD1, 0x9D, 0x24, 0x06, 0xB1, 0x6C, 0x90, \r
-0x8F, 0xE0, 0xD1, 0x9D, 0x24, 0x07, 0xB1, 0x6C, 0x90, 0x8F, 0xE1, 0xD1, 0x9D, 0x24, 0x08, 0xB1, \r
-0x6C, 0x90, 0x8F, 0xE2, 0xEF, 0xF0, 0xE4, 0x90, 0x93, 0x4E, 0xF0, 0x90, 0x93, 0x4E, 0xE0, 0xFF, \r
-0xC3, 0x94, 0x08, 0x50, 0x1D, 0x90, 0x93, 0x50, 0xE0, 0x24, 0x09, 0xFD, 0x90, 0x93, 0x4F, 0xE0, \r
-0x71, 0x6A, 0x90, 0x93, 0x4E, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x12, 0xA0, 0x4C, \r
-0x80, 0xD9, 0xE4, 0x90, 0x93, 0x4E, 0xF0, 0x90, 0x93, 0x4E, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50, \r
-0x1D, 0x90, 0x93, 0x50, 0xE0, 0x24, 0x63, 0xFD, 0x90, 0x93, 0x4F, 0xE0, 0x71, 0x6A, 0x90, 0x93, \r
-0x4E, 0xE0, 0x24, 0x3D, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0x12, 0xA0, 0x4C, 0x80, 0xD9, 0x90, 0x8F, \r
-0xDF, 0x12, 0x9E, 0x47, 0x12, 0xA1, 0x05, 0x30, 0xE3, 0x0D, 0x7F, 0x01, 0x12, 0x79, 0x21, 0x90, \r
-0x01, 0xC7, 0x74, 0x03, 0xF0, 0x80, 0x3F, 0x90, 0x93, 0x4C, 0xA3, 0xE0, 0xFF, 0x7C, 0x00, 0x54, \r
-0x07, 0xFD, 0x64, 0x01, 0x60, 0x05, 0xED, 0x64, 0x02, 0x70, 0x2B, 0xED, 0x64, 0x02, 0x4C, 0x70, \r
-0x25, 0xEF, 0x54, 0x30, 0xFF, 0xE4, 0xC4, 0xF8, 0x54, 0xF0, 0xC8, 0xEF, 0xC4, 0x54, 0x0F, 0x48, \r
-0x90, 0x90, 0x73, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xE4, 0xFD, 0x12, 0x9D, 0x3A, 0x90, 0x06, 0x31, \r
-0xE0, 0x54, 0xF7, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0xF0, 0x90, \r
-0x93, 0x50, 0xE0, 0x22, 0x90, 0x93, 0x48, 0xE0, 0xFF, 0x90, 0x93, 0x47, 0xE0, 0x2F, 0xFF, 0x90, \r
-0x93, 0x46, 0xE0, 0x34, 0x00, 0x22, 0x90, 0x93, 0x56, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7D, 0x09, \r
-0x71, 0x77, 0xEF, 0x64, 0x06, 0x70, 0x24, 0xF1, 0xA0, 0x7D, 0x14, 0x71, 0x77, 0xEF, 0x70, 0x1B, \r
-0xF1, 0xA0, 0x7D, 0x15, 0x71, 0x77, 0xEF, 0x64, 0x50, 0x70, 0x10, 0xF1, 0xA0, 0x7D, 0x21, 0x71, \r
-0x77, 0xEF, 0x20, 0xE0, 0x03, 0x30, 0xE2, 0x03, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x12, 0x96, \r
-0x63, 0xF1, 0xF3, 0x7B, 0xFF, 0x7A, 0x40, 0x79, 0x90, 0x12, 0x57, 0xF5, 0x78, 0x50, 0x7C, 0x93, \r
-0x7D, 0x01, 0x7B, 0xFF, 0x7A, 0x40, 0x79, 0x96, 0xF1, 0xE4, 0x91, 0x22, 0x12, 0x91, 0x3C, 0xEF, \r
-0x60, 0x7D, 0xD1, 0xA4, 0xFE, 0x90, 0x93, 0x54, 0xF0, 0xA3, 0xEF, 0xF0, 0x24, 0x06, 0xFF, 0xE4, \r
-0x3E, 0xB1, 0x73, 0xEF, 0x64, 0x08, 0x70, 0x67, 0x90, 0x93, 0x55, 0xE0, 0x24, 0x07, 0xFF, 0x90, \r
-0x93, 0x54, 0xB1, 0x70, 0xEF, 0x70, 0x58, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x93, 0x4F, 0xE0, 0xFF, \r
-0xC3, 0x94, 0x04, 0x50, 0x24, 0x90, 0x93, 0x55, 0xE0, 0x24, 0x18, 0xFD, 0x90, 0x93, 0x54, 0xE0, \r
-0x71, 0x6A, 0x90, 0x93, 0x4F, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0xEF, \r
-0xF0, 0x90, 0x93, 0x4F, 0xE0, 0x04, 0xF0, 0x80, 0xD2, 0x78, 0x50, 0x7C, 0x93, 0x12, 0xA0, 0x17, \r
-0xEF, 0x70, 0x1C, 0x90, 0x93, 0x55, 0xE0, 0x24, 0x08, 0xFF, 0x90, 0x93, 0x54, 0xE0, 0x34, 0x00, \r
-0xFE, 0xD1, 0xB6, 0xEF, 0x64, 0x01, 0x60, 0x07, 0x90, 0x01, 0xC7, 0x74, 0x22, 0xF1, 0x97, 0x22, \r
-0x24, 0x06, 0xFD, 0x71, 0x77, 0xEF, 0x22, 0xF0, 0x90, 0x8E, 0xCD, 0xE0, 0x44, 0x01, 0xF0, 0x22, \r
-0x90, 0x93, 0x56, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xD2, 0xAF, 0xC2, 0xAF, 0x90, 0x8D, 0x01, \r
-0xE0, 0xFF, 0x22, 0x12, 0x96, 0x7B, 0x24, 0x16, 0xFF, 0xE4, 0x3E, 0xB1, 0x73, 0x90, 0x90, 0x84, \r
-0xA3, 0xE0, 0xB5, 0x07, 0x19, 0x90, 0x93, 0x47, 0xE0, 0x24, 0x16, 0xD1, 0xAE, 0xFE, 0x7D, 0x01, \r
-0x71, 0x77, 0xEF, 0xFD, 0x90, 0x90, 0x84, 0xE0, 0x6D, 0x70, 0x01, 0xE4, 0x60, 0x03, 0x7F, 0x00, \r
-0x22, 0x7F, 0x01, 0x22, 0x7E, 0x00, 0x7F, 0x04, 0x02, 0x06, 0x63, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, \r
-0xFD, 0x61, 0x77, 0x78, 0x49, 0x7C, 0x93, 0x7D, 0x01, 0x22, 0x90, 0x8E, 0xC4, 0xE0, 0xC4, 0x13, \r
-0x13, 0x54, 0x03, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, \r
-0x05, 0xC0, 0x07, 0x7D, 0x04, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x70, 0x11, 0x2B, 0xD0, 0x07, \r
-0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xFF, 0xA3, 0xF0, 0xED, 0x04, \r
-0x90, 0x01, 0xC4, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, \r
-0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0x38, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x70, \r
-0x11, 0x2B, 0xD0, 0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, \r
+0xEE, 0x34, 0xFC, 0xFA, 0xF1, 0xA2, 0x90, 0xAC, 0x6A, 0x12, 0x08, 0x6D, 0xF1, 0xCC, 0xFD, 0xD0, \r
+0x01, 0xD0, 0x02, 0x7F, 0x11, 0x12, 0x1B, 0xAC, 0x80, 0x35, 0xF1, 0xC5, 0x24, 0x2A, 0xF1, 0xD4, \r
+0xED, 0xF0, 0xFE, 0x71, 0x7B, 0xE4, 0xF0, 0x74, 0x01, 0x2E, 0xF1, 0x1A, 0xE4, 0xF0, 0x12, 0xA5, \r
+0x8E, 0x7D, 0x48, 0xF1, 0x22, 0xF1, 0xA8, 0xF1, 0xE8, 0x12, 0x42, 0x90, 0xE4, 0xFD, 0xFC, 0xF1, \r
+0x27, 0xF1, 0xA8, 0xF1, 0xE8, 0x12, 0x42, 0x90, 0xF1, 0x27, 0xF1, 0xA8, 0x12, 0x08, 0x3A, 0x90, \r
+0x94, 0xE8, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x94, 0xE8, 0x12, 0xA6, 0xE4, 0x90, 0x94, 0xF0, \r
+0xA3, 0xE0, 0xFE, 0x71, 0x7B, 0xEF, 0xF0, 0x74, 0x01, 0x2E, 0xF1, 0x1A, 0xED, 0xF0, 0xD0, 0xD0, \r
+0x92, 0xAF, 0x22, 0x90, 0x93, 0x64, 0xA3, 0xE0, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, \r
+0x83, 0x22, 0x7C, 0x00, 0x12, 0x26, 0x4E, 0x90, 0x94, 0xEC, 0x02, 0x08, 0x6D, 0x90, 0x8E, 0x2C, \r
+0x12, 0x9E, 0xD0, 0x30, 0xE0, 0x08, 0x12, 0x8F, 0xC9, 0xE4, 0x90, 0x94, 0x8A, 0xF0, 0x90, 0x94, \r
+0xB5, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x7F, 0x90, 0x94, 0x70, 0x31, 0x26, 0xF1, 0x9C, 0x7F, \r
+0x50, 0x7E, 0x0C, 0xB1, 0x44, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x7F, 0x90, 0x94, 0x71, 0x31, \r
+0x26, 0xF1, 0x9C, 0x91, 0xDC, 0x90, 0x94, 0x86, 0xE0, 0x90, 0x06, 0x08, 0xF0, 0x90, 0x94, 0x88, \r
+0xA3, 0xE0, 0x90, 0x06, 0xA0, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x94, 0x74, 0xE0, 0xFF, 0x60, 0x05, \r
+0xA3, 0xE0, 0xFD, 0x71, 0x90, 0x90, 0x94, 0x73, 0xE0, 0xFF, 0x60, 0x0C, 0xA3, 0xE0, 0xFD, 0xA3, \r
+0xE0, 0xFB, 0x12, 0xA6, 0x5E, 0x12, 0x74, 0x24, 0x22, 0x12, 0x08, 0x5A, 0x90, 0x94, 0xB9, 0x02, \r
+0x08, 0x6D, 0x90, 0xAC, 0x67, 0x12, 0x44, 0x20, 0x90, 0x94, 0xEC, 0x02, 0x43, 0xF3, 0x90, 0x93, \r
+0x64, 0xE4, 0x75, 0xF0, 0x10, 0x12, 0x08, 0xD6, 0xE4, 0x90, 0x93, 0x66, 0xF0, 0x22, 0xFF, 0x90, \r
+0x8E, 0x4F, 0xE0, 0x2F, 0x22, 0x90, 0x94, 0xE5, 0xA3, 0xE0, 0xFF, 0x22, 0x90, 0x94, 0xEA, 0xE0, \r
+0xFC, 0xA3, 0xE0, 0x22, 0xFD, 0xE4, 0x33, 0x90, 0x94, 0xF0, 0xF0, 0xA3, 0x22, 0x90, 0x93, 0x64, \r
+0xA3, 0xE0, 0xFF, 0xA3, 0xE0, 0xFE, 0x2F, 0x22, 0x78, 0x10, 0x12, 0x08, 0x47, 0x90, 0x94, 0xEC, \r
+0x02, 0x43, 0xFF, 0x12, 0x43, 0xFF, 0x02, 0x43, 0xC8, 0x01, 0x4D, 0x75, 0xE8, 0x03, 0x75, 0xA8, \r
+0x85, 0x22, 0xE4, 0x90, 0x93, 0x56, 0xF0, 0x90, 0x93, 0x56, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0x02, \r
+0x90, 0x01, 0xC4, 0xF0, 0x74, 0x58, 0xA3, 0xF0, 0x12, 0x3E, 0x44, 0xBF, 0x01, 0x03, 0x12, 0x31, \r
+0xFC, 0xC2, 0xAF, 0x90, 0x8E, 0x47, 0xE0, 0x60, 0x0E, 0x90, 0x8E, 0x4A, 0xE0, 0xFF, 0x90, 0x8E, \r
+0x49, 0xE0, 0x6F, 0x60, 0x02, 0x11, 0x58, 0xC2, 0xAF, 0x12, 0x96, 0x49, 0xBF, 0x01, 0x03, 0x12, \r
+0xA1, 0x5E, 0xD2, 0xAF, 0xD2, 0xAF, 0x90, 0x93, 0x4D, 0xE0, 0xB4, 0x01, 0x03, 0x12, 0x9E, 0x34, \r
+0x12, 0x4F, 0xF6, 0x12, 0x46, 0x46, 0x80, 0xAF, 0x90, 0x8E, 0x49, 0xE0, 0xFF, 0x7D, 0x01, 0x80, \r
+0x04, 0x7D, 0x01, 0x7F, 0x04, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x59, 0xED, \r
+0xF0, 0x90, 0x8E, 0x42, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x02, 0x21, 0xA6, \r
+0xEE, 0x12, 0x7F, 0xA5, 0x30, 0xE0, 0x02, 0x21, 0xA6, 0x90, 0x8E, 0x4A, 0xE0, 0xFE, 0x6F, 0x70, \r
+0x02, 0x21, 0xA6, 0xEF, 0x70, 0x02, 0x21, 0x24, 0x24, 0xFE, 0x70, 0x02, 0x21, 0x5D, 0x24, 0xFE, \r
+0x60, 0x4A, 0x24, 0xFC, 0x70, 0x02, 0x21, 0x97, 0x24, 0xFC, 0x60, 0x02, 0x21, 0xA6, 0xEE, 0xB4, \r
+0x0E, 0x02, 0x31, 0xD2, 0x90, 0x8E, 0x4A, 0xE0, 0x70, 0x04, 0x7F, 0x01, 0x51, 0x0E, 0x90, 0x8E, \r
+0x4A, 0xE0, 0xB4, 0x06, 0x02, 0x31, 0xED, 0x90, 0x8E, 0x4A, 0xE0, 0xB4, 0x04, 0x0F, 0x90, 0x95, \r
+0x59, 0xE0, 0xFF, 0x60, 0x05, 0x12, 0xA1, 0x7A, 0x80, 0x03, 0x12, 0x6F, 0x66, 0x90, 0x8E, 0x4A, \r
+0xE0, 0x64, 0x08, 0x60, 0x02, 0x21, 0xA6, 0x12, 0xA2, 0x5B, 0x21, 0xA6, 0x90, 0x8E, 0x4A, 0xE0, \r
+0x70, 0x04, 0x7F, 0x01, 0x51, 0x0E, 0x90, 0x8E, 0x4A, 0xE0, 0xB4, 0x06, 0x02, 0x31, 0xED, 0x90, \r
+0x8E, 0x4A, 0xE0, 0xB4, 0x0E, 0x07, 0x31, 0xAB, 0xBF, 0x01, 0x02, 0x31, 0xD2, 0x90, 0x8E, 0x4A, \r
+0xE0, 0x64, 0x0C, 0x60, 0x02, 0x21, 0xA6, 0x31, 0xAB, 0xEF, 0x64, 0x01, 0x60, 0x02, 0x21, 0xA6, \r
+0x51, 0x25, 0x21, 0xA6, 0x90, 0x8E, 0x4A, 0xE0, 0xB4, 0x0E, 0x07, 0x31, 0xAB, 0xBF, 0x01, 0x02, \r
+0x31, 0xD2, 0x90, 0x8E, 0x4A, 0xE0, 0xB4, 0x06, 0x02, 0x31, 0xED, 0x90, 0x8E, 0x4A, 0xE0, 0xB4, \r
+0x0C, 0x07, 0x31, 0xAB, 0xBF, 0x01, 0x02, 0x51, 0x25, 0x90, 0x8E, 0x4A, 0xE0, 0x64, 0x04, 0x70, \r
+0x55, 0x12, 0xA0, 0x7D, 0xEF, 0x64, 0x01, 0x70, 0x4D, 0xF1, 0x8E, 0x80, 0x49, 0x90, 0x8E, 0x4A, \r
+0xE0, 0xB4, 0x0E, 0x07, 0x31, 0xAB, 0xBF, 0x01, 0x02, 0x31, 0xD2, 0x90, 0x8E, 0x4A, 0xE0, 0xB4, \r
+0x06, 0x02, 0x31, 0xED, 0x90, 0x8E, 0x4A, 0xE0, 0xB4, 0x0C, 0x07, 0x31, 0xAB, 0xBF, 0x01, 0x02, \r
+0x51, 0x25, 0x90, 0x8E, 0x4A, 0xE0, 0x70, 0x04, 0x7F, 0x01, 0x51, 0x0E, 0x90, 0x8E, 0x4A, 0xE0, \r
+0xB4, 0x04, 0x13, 0xF1, 0xEA, 0x80, 0x0F, 0x90, 0x8E, 0x4A, 0xE0, 0xB4, 0x0C, 0x08, 0x12, 0x9E, \r
+0xCD, 0x30, 0xE0, 0x02, 0xF1, 0xD3, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, \r
+0xC0, 0xD0, 0x12, 0xA0, 0x64, 0xBF, 0x01, 0x13, 0x12, 0xA0, 0x5A, 0x20, 0xE0, 0x0D, 0x90, 0x8E, \r
+0x49, 0xE0, 0xD3, 0x94, 0x04, 0x50, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xD0, 0xD0, 0x92, \r
+0xAF, 0x22, 0x90, 0x8E, 0x43, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x04, 0x7D, 0x0C, 0x80, 0x05, 0x12, \r
+0xA2, 0xC4, 0x7D, 0x04, 0x7F, 0x01, 0xF1, 0x02, 0xE4, 0xFD, 0xFF, 0x80, 0x6A, 0x90, 0x8E, 0x43, \r
+0xE0, 0x90, 0x06, 0x04, 0x20, 0xE0, 0x08, 0xE0, 0x44, 0x40, 0xF0, 0x7D, 0x04, 0x80, 0x06, 0xE0, \r
+0x54, 0x7F, 0xF0, 0x7D, 0x0C, 0x7F, 0x01, 0xF1, 0x02, 0xE4, 0xFD, 0xFF, 0x80, 0x49, 0x90, 0x95, \r
+0x58, 0xEF, 0xF0, 0x12, 0x4E, 0x02, 0x90, 0x95, 0x58, 0xE0, 0x60, 0x03, 0x12, 0x8F, 0x77, 0x7D, \r
+0x04, 0x7F, 0x01, 0xE1, 0x02, 0x12, 0x6A, 0xB6, 0x70, 0x23, 0x90, 0x8E, 0x43, 0xE0, 0x54, 0xFD, \r
+0xF0, 0x7D, 0x2C, 0x7F, 0x6F, 0x51, 0x57, 0x7D, 0x08, 0x7F, 0x01, 0xB1, 0x8E, 0xBF, 0x01, 0x0D, \r
+0x90, 0x8E, 0x42, 0xE0, 0x44, 0x80, 0xF0, 0x7D, 0x0E, 0x7F, 0x01, 0xF1, 0x02, 0x22, 0xE4, 0xFD, \r
+0x7F, 0x0C, 0x11, 0x65, 0xE4, 0xFD, 0xFF, 0x90, 0x05, 0x22, 0xEF, 0xF0, 0x90, 0x8D, 0x05, 0xED, \r
+0xF0, 0x22, 0x90, 0x93, 0x8D, 0x12, 0x44, 0x20, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0x9E, 0xF0, \r
+0x90, 0x04, 0x1D, 0xE0, 0x60, 0x0B, 0x7D, 0x39, 0xB1, 0x2C, 0xEF, 0x64, 0x01, 0x70, 0x1B, 0x80, \r
+0x00, 0x90, 0x93, 0x32, 0xE0, 0xFF, 0x90, 0x95, 0x29, 0x74, 0x11, 0xF0, 0x7B, 0x18, 0x7D, 0x01, \r
+0xB1, 0xDA, 0x90, 0x93, 0x9B, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x9B, 0x12, 0x9C, 0x67, \r
+0x90, 0x93, 0x9D, 0xEF, 0xF0, 0x90, 0x93, 0x9B, 0xF1, 0xF6, 0x7B, 0x01, 0x90, 0x93, 0x99, 0xE0, \r
+0xFD, 0x12, 0x7D, 0xC6, 0x90, 0x93, 0x9A, 0xE0, 0x60, 0x02, 0x61, 0x49, 0xB1, 0x1F, 0xC0, 0x03, \r
+0xC0, 0x02, 0xC0, 0x01, 0x90, 0x93, 0x90, 0xB1, 0x0E, 0x75, 0x43, 0x06, 0xD0, 0x01, 0xD0, 0x02, \r
+0xD0, 0x03, 0x12, 0x35, 0x26, 0x71, 0xE6, 0xF1, 0xC9, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, \r
+0x93, 0x8D, 0xB1, 0x0E, 0x75, 0x43, 0x10, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, \r
+0x71, 0xE6, 0xB1, 0x22, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0xB1, 0x0B, 0x75, 0x43, 0x10, 0xD0, \r
+0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x71, 0xE6, 0x24, 0x60, 0xF9, 0xE4, 0x34, 0xFC, \r
+0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0xB1, 0x0B, 0x75, 0x43, 0x10, 0xD0, 0x01, \r
+0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x71, 0xE6, 0x24, 0x72, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, \r
+0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x93, 0x96, 0xB1, 0x0E, 0x75, 0x43, 0x06, \r
+0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x90, 0x93, 0x93, 0x12, 0x44, 0x17, 0x90, \r
+0x93, 0xCA, 0x12, 0x44, 0x20, 0x90, 0x93, 0xCD, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x20, 0x90, \r
+0x93, 0xD1, 0x74, 0x3A, 0xF0, 0x90, 0x93, 0x8D, 0x12, 0x44, 0x17, 0x12, 0x9F, 0x4A, 0x71, 0xE6, \r
+0x24, 0x30, 0xF9, 0xE4, 0x34, 0xFC, 0xD1, 0xEE, 0x75, 0x43, 0x28, 0x7B, 0x01, 0x7A, 0x93, 0x79, \r
+0x9F, 0x12, 0x35, 0x26, 0x71, 0xE6, 0x12, 0xA6, 0x41, 0xC0, 0x03, 0x8B, 0x40, 0x75, 0x41, 0x8F, \r
+0x75, 0x42, 0x58, 0x75, 0x43, 0x28, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x90, 0x93, 0x9D, 0xE0, 0xFF, \r
+0x90, 0x93, 0x9C, 0xE0, 0x2F, 0xFF, 0x90, 0x93, 0x9B, 0xE0, 0x34, 0x00, 0xCF, 0x24, 0x30, 0xFD, \r
+0xE4, 0x3F, 0xFC, 0x90, 0x93, 0x32, 0xE0, 0xFB, 0x7F, 0x3A, 0x12, 0x55, 0x4A, 0x71, 0xE6, 0x12, \r
+0xA6, 0x41, 0xC0, 0x03, 0x8B, 0x40, 0x75, 0x41, 0x93, 0x75, 0x42, 0x9F, 0x75, 0x43, 0x28, 0xD0, \r
+0x03, 0x12, 0x35, 0x26, 0x90, 0x06, 0x33, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0xFF, \r
+0x7D, 0x3A, 0x51, 0x57, 0xE1, 0xE3, 0x90, 0x93, 0x9B, 0xA3, 0xE0, 0xFF, 0xA3, 0xE0, 0x2F, 0x22, \r
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0xC5, 0x12, 0x44, 0x20, 0x78, 0xD1, 0x7C, \r
+0x94, 0x7D, 0x01, 0x7B, 0xFF, 0x7A, 0x40, 0x79, 0x64, 0x12, 0x91, 0x2E, 0x90, 0x05, 0x22, 0xE0, \r
+0x90, 0x94, 0xD0, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x0B, 0x7D, 0x33, 0xB1, 0x2C, 0xEF, 0x64, \r
+0x01, 0x70, 0x1B, 0x80, 0x00, 0x90, 0x93, 0x31, 0xE0, 0xFF, 0x90, 0x95, 0x29, 0x74, 0x10, 0xF0, \r
+0x7B, 0x18, 0x7D, 0x01, 0xB1, 0xDA, 0x90, 0x94, 0xCD, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x94, \r
+0xCD, 0x12, 0x9C, 0x67, 0x90, 0x94, 0xCF, 0xEF, 0xF0, 0x90, 0x94, 0xCD, 0xF1, 0xF6, 0x7B, 0x01, \r
+0x90, 0x94, 0xCB, 0xE0, 0xFD, 0x12, 0x7D, 0xC6, 0x90, 0x94, 0xCC, 0xE0, 0x70, 0x4D, 0xB1, 0x1F, \r
+0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0xC8, 0xB1, 0x0E, 0x75, 0x43, 0x06, 0xD0, 0x01, \r
+0xD0, 0x02, 0xD0, 0x03, 0xB1, 0x18, 0x71, 0xE9, 0xF1, 0xC2, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, \r
+0x02, 0xC0, 0x01, 0x90, 0x94, 0xC8, 0xB1, 0x0E, 0x75, 0x43, 0x06, 0xD0, 0x01, 0xD0, 0x02, 0xD0, \r
+0x03, 0xB1, 0x18, 0x71, 0xE9, 0xF1, 0xC9, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0xC5, \r
+0xB1, 0x0E, 0x75, 0x43, 0x04, 0xD0, 0x01, 0xD0, 0x02, 0x80, 0x44, 0x90, 0x94, 0xCC, 0xE0, 0x64, \r
+0x01, 0x70, 0x41, 0xB1, 0x1F, 0xC0, 0x03, 0x8B, 0x40, 0x75, 0x41, 0x8E, 0x75, 0x42, 0xD4, 0x75, \r
+0x43, 0x06, 0xD0, 0x03, 0xB1, 0x18, 0x71, 0xE9, 0xF1, 0xC2, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0x8B, \r
+0x40, 0x75, 0x41, 0x8E, 0x75, 0x42, 0xDE, 0x75, 0x43, 0x06, 0xD0, 0x03, 0xB1, 0x18, 0x71, 0xE9, \r
+0xF1, 0xC9, 0xC0, 0x03, 0x8B, 0x40, 0x75, 0x41, 0x8E, 0x75, 0x42, 0xE4, 0x75, 0x43, 0x04, 0xD0, \r
+0x03, 0x12, 0x35, 0x26, 0x90, 0x06, 0x30, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x94, 0xD0, 0xE0, 0xFF, \r
+0x7D, 0x34, 0x51, 0x57, 0xF1, 0xE3, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x93, 0x12, 0x44, \r
+0x17, 0x8B, 0x40, 0x8A, 0x41, 0x89, 0x42, 0x22, 0x12, 0x35, 0x26, 0x90, 0x94, 0xCD, 0x22, 0xA3, \r
+0xA3, 0xE0, 0x24, 0x38, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0x22, 0x7F, 0xFF, 0x51, 0x57, \r
+0xE4, 0x90, 0x95, 0x3F, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x95, 0x41, 0xF0, 0x7D, \r
+0x47, 0x7F, 0xFF, 0x51, 0x57, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x11, 0xA3, 0xE0, 0x70, 0x0D, 0xA3, \r
+0xE0, 0x70, 0x09, 0xA3, 0xE0, 0x70, 0x05, 0xF1, 0x75, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x95, 0x40, \r
+0xE0, 0x94, 0xE8, 0x90, 0x95, 0x3F, 0xE0, 0x94, 0x03, 0x40, 0x0C, 0x90, 0x01, 0xC0, 0xE0, 0x44, \r
+0x20, 0xF0, 0xF1, 0x75, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x90, 0x95, \r
+0x3F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x08, 0xD6, 0x80, 0xBB, 0x7D, 0x08, 0xE4, 0xFF, 0xD3, 0x10, \r
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x11, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x8D, 0x03, \r
+0xE0, 0x04, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x22, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x95, 0x15, \r
+0xF0, 0x7D, 0x26, 0xB1, 0x2C, 0xEF, 0x64, 0x01, 0x70, 0x03, 0x12, 0x86, 0xF3, 0x90, 0x95, 0x15, \r
+0xE0, 0xFF, 0x7D, 0x27, 0x51, 0x57, 0x12, 0xA2, 0x65, 0x80, 0x06, 0x12, 0xA2, 0x65, 0x12, 0x86, \r
+0xF3, 0xF1, 0xE3, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
+0xD0, 0x90, 0x95, 0x27, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x95, 0x26, 0xEF, 0xF0, 0xE4, 0xFD, \r
+0xFC, 0x12, 0x87, 0xA2, 0x90, 0x95, 0x26, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90, 0x95, 0x27, 0xE0, \r
+0x60, 0x06, 0x12, 0xA5, 0xF3, 0x44, 0x80, 0xF0, 0xAF, 0x05, 0x74, 0x20, 0x2F, 0xF5, 0x82, 0xE4, \r
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0xF0, 0x12, 0xA5, 0xF3, 0x54, 0xC0, 0xF0, 0x90, 0x95, \r
+0x29, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x18, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, \r
+0xF0, 0x90, 0x00, 0x8B, 0xE0, 0xD3, 0x94, 0x03, 0x74, 0x10, 0x40, 0x08, 0x12, 0xA6, 0x8B, 0x74, \r
+0x04, 0xF0, 0x80, 0x05, 0x12, 0xA6, 0x8B, 0xE4, 0xF0, 0xAF, 0x05, 0x12, 0xA5, 0xBF, 0xE0, 0x54, \r
+0x01, 0xFE, 0x90, 0x95, 0x28, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xEE, 0x44, 0x02, 0x4B, 0xFE, \r
+0x12, 0xA5, 0xBF, 0xEE, 0xF0, 0x74, 0x11, 0x2F, 0x12, 0xA6, 0xBC, 0x74, 0xFF, 0xF0, 0x74, 0x29, \r
+0x2F, 0x12, 0x86, 0x3A, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, \r
+0x22, 0x12, 0x82, 0xBB, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x64, 0x12, 0x9C, 0x67, 0x90, \r
+0x93, 0x66, 0xEF, 0xF0, 0x90, 0x93, 0x64, 0xA3, 0xE0, 0x24, 0x38, 0xF9, 0xE4, 0x34, 0xFC, 0xD1, \r
+0xEE, 0x75, 0x43, 0x06, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xD4, 0xF1, 0x6E, 0x71, 0xE9, 0x24, 0x3E, \r
+0xF9, 0xE4, 0x34, 0xFC, 0xD1, 0xEE, 0x75, 0x43, 0x04, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xDA, 0xF1, \r
+0x6E, 0x71, 0xE9, 0xF1, 0xC2, 0xD1, 0xEE, 0x75, 0x43, 0x06, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xDE, \r
+0xF1, 0x6E, 0x71, 0xE9, 0x24, 0x48, 0xF9, 0xE4, 0x34, 0xFC, 0xD1, 0xEE, 0x75, 0x43, 0x04, 0x7B, \r
+0x01, 0x7A, 0x8E, 0x79, 0xE4, 0x02, 0x35, 0x26, 0x24, 0x00, 0xF9, 0xE4, 0x34, 0xFC, 0x75, 0x40, \r
+0x01, 0xF5, 0x41, 0x89, 0x42, 0x22, 0x90, 0x8E, 0x49, 0xE0, 0x90, 0x94, 0x87, 0xF0, 0x7D, 0x02, \r
+0x7F, 0x02, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x57, 0xEF, 0xF0, 0x14, 0x60, \r
+0x15, 0x14, 0x60, 0x19, 0x24, 0x02, 0x70, 0x1A, 0xED, 0x54, 0x01, 0xFF, 0x90, 0x8E, 0x42, 0xE0, \r
+0x54, 0xFE, 0x4F, 0xF0, 0x80, 0x0C, 0x90, 0x8E, 0x4A, 0xED, 0xF0, 0x80, 0x05, 0x90, 0x8E, 0x49, \r
+0xED, 0xF0, 0x12, 0x4E, 0x6F, 0x30, 0xE4, 0x31, 0x90, 0x95, 0x57, 0xE0, 0x14, 0x60, 0x07, 0x14, \r
+0x60, 0x1D, 0x24, 0x02, 0x70, 0x23, 0x90, 0x8E, 0x42, 0xE0, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x33, \r
+0x54, 0x80, 0xFF, 0x90, 0x8E, 0x4A, 0xE0, 0x54, 0x7F, 0x4F, 0xFD, 0x7F, 0x88, 0x80, 0x07, 0x90, \r
+0x8E, 0x49, 0xE0, 0xFD, 0x7F, 0x89, 0x12, 0x49, 0x47, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x35, \r
+0x26, 0x90, 0x93, 0x64, 0x22, 0x90, 0x95, 0x41, 0xE0, 0xFF, 0x7D, 0x48, 0x41, 0x57, 0x12, 0xA0, \r
+0x21, 0x90, 0x8E, 0x4A, 0xE0, 0x64, 0x0C, 0x60, 0x04, 0x51, 0x4E, 0xB1, 0x8A, 0x22, 0x7D, 0x2D, \r
+0xB1, 0x2C, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x6C, 0x7E, 0x12, 0x4B, \r
+0x30, 0xE4, 0xFD, 0x7F, 0x01, 0xE1, 0x02, 0x90, 0x8E, 0x47, 0xE0, 0x64, 0x01, 0x70, 0x12, 0x12, \r
+0x7F, 0xDE, 0x60, 0x05, 0x51, 0x4E, 0x02, 0xA0, 0x21, 0x90, 0x8E, 0x4A, 0xE0, 0x70, 0x02, 0x11, \r
+0x61, 0x22, 0x24, 0x42, 0xF9, 0xE4, 0x34, 0xFC, 0x22, 0x24, 0x48, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, \r
+0x7B, 0x01, 0x22, 0x7D, 0x2F, 0x12, 0x4B, 0x2B, 0x7D, 0x08, 0x7F, 0x01, 0xE1, 0x02, 0xEE, 0xF0, \r
+0xA3, 0xEF, 0xF0, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x7D, 0x2E, 0x7F, 0x6F, 0x51, 0x57, \r
+0x7D, 0x02, 0x7F, 0x01, 0xE1, 0x02, 0xA3, 0xE0, 0x24, 0x28, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x22, \r
+0xE4, 0xFB, 0xFA, 0xFD, 0x7F, 0x01, 0x12, 0x48, 0x47, 0x90, 0x93, 0x5F, 0xEF, 0xF0, 0x60, 0xF0, \r
+0x90, 0x8D, 0x01, 0xE0, 0xFF, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0xE5, 0xC2, 0xAF, 0xEF, 0x30, 0xE1, \r
+0x0A, 0x90, 0x8D, 0x01, 0xE0, 0x54, 0xFD, 0xF0, 0x12, 0x88, 0x1D, 0xF1, 0x4F, 0x30, 0xE2, 0x06, \r
+0x54, 0xFB, 0xF0, 0x12, 0x81, 0x29, 0xF1, 0x4F, 0x30, 0xE4, 0x0B, 0x54, 0xEF, 0xF0, 0x12, 0x94, \r
+0xC9, 0xBF, 0x01, 0x02, 0x11, 0x55, 0xF1, 0x4F, 0x30, 0xE7, 0x06, 0x54, 0x7F, 0xF0, 0x12, 0x71, \r
+0x44, 0xD2, 0xAF, 0x80, 0xBB, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x94, 0x95, \r
+0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0x12, 0x8B, 0x50, 0x90, 0x94, 0x9D, 0xF0, 0xA3, \r
+0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xC4, 0x74, 0x55, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0x12, 0xA6, 0x82, \r
+0x12, 0x81, 0xF5, 0x90, 0x94, 0x8C, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x02, 0x82, 0xE0, 0x90, 0x94, \r
+0x94, 0xF0, 0x90, 0x8E, 0xAF, 0xE0, 0x20, 0xE0, 0x02, 0x61, 0x5D, 0xE4, 0x90, 0x94, 0x93, 0xF0, \r
+0x90, 0x94, 0x94, 0xE0, 0xFF, 0x90, 0x94, 0x93, 0xE0, 0xC3, 0x9F, 0x40, 0x02, 0x61, 0x5D, 0x90, \r
+0x94, 0x8C, 0x12, 0xA6, 0xE4, 0x90, 0xFD, 0x11, 0xF0, 0x90, 0x94, 0x9D, 0xEF, 0xF0, 0x12, 0x8E, \r
+0x28, 0x12, 0xA5, 0xCA, 0x54, 0x3F, 0xFE, 0x90, 0x94, 0x8E, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x94, \r
+0x99, 0xEE, 0x12, 0x8E, 0xAC, 0xE0, 0x54, 0x03, 0xFE, 0xEF, 0x24, 0x18, 0x2E, 0xFF, 0x90, 0x94, \r
+0x9E, 0xF0, 0x90, 0x94, 0x8D, 0xE0, 0x2F, 0xFF, 0x90, 0x94, 0x8C, 0xE0, 0x34, 0x00, 0xFE, 0x90, \r
+0x94, 0x90, 0x12, 0xA5, 0xAC, 0xC0, 0x07, 0x71, 0x6E, 0x7D, 0x01, 0x71, 0x99, 0xC0, 0x07, 0x71, \r
+0x6E, 0x7D, 0x04, 0x71, 0x99, 0xAB, 0x07, 0xD0, 0x05, 0xD0, 0x07, 0x12, 0x9C, 0x8D, 0x90, 0x94, \r
+0x95, 0xEF, 0x71, 0x6D, 0xE4, 0xFD, 0x71, 0x99, 0xEF, 0x54, 0xFC, 0x90, 0x94, 0x92, 0xF0, 0x90, \r
+0x94, 0x9E, 0xE0, 0xFF, 0x90, 0x94, 0x8E, 0xE4, 0x8F, 0xF0, 0x12, 0x08, 0xD6, 0x90, 0x94, 0x8E, \r
+0x12, 0x8E, 0x85, 0x90, 0x94, 0x8E, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x94, 0x8C, 0xE0, 0xFE, \r
+0xA3, 0xE0, 0xFF, 0x7D, 0x0F, 0x71, 0x99, 0x90, 0x94, 0x8E, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, \r
+0x94, 0x8C, 0xEC, 0x8D, 0xF0, 0x12, 0xA6, 0xDC, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x90, 0x94, 0x8D, \r
+0xE0, 0x9D, 0x90, 0x94, 0x8C, 0xE0, 0x9C, 0x40, 0x18, 0x90, 0x8E, 0x2A, 0xE0, 0x24, 0x01, 0xFD, \r
+0x12, 0xA5, 0xE2, 0xFC, 0xC3, 0x90, 0x94, 0x8D, 0xE0, 0x9D, 0xF0, 0x90, 0x94, 0x8C, 0xE0, 0x9C, \r
+0xF0, 0xEF, 0x30, 0xE6, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x22, 0xF0, 0xEF, 0x30, 0xE7, 0x06, 0x90, \r
+0x01, 0xC7, 0x74, 0x21, 0xF0, 0xEF, 0x30, 0xE5, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x23, 0xF0, 0x90, \r
+0x94, 0x8B, 0xE0, 0x60, 0x3B, 0x90, 0x94, 0x92, 0xE0, 0x24, 0xB0, 0x60, 0x16, 0x24, 0xD0, 0x60, \r
+0x02, 0x41, 0xE9, 0x12, 0xA6, 0xD4, 0x20, 0xE0, 0x18, 0x12, 0x8A, 0x4B, 0x20, 0xE0, 0x02, 0x41, \r
+0xE9, 0x80, 0x0E, 0x12, 0xA6, 0xD4, 0x20, 0xE0, 0x08, 0x12, 0x8A, 0x4B, 0x20, 0xE0, 0x02, 0x41, \r
+0xE9, 0x71, 0x6E, 0x90, 0x94, 0x99, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0xA5, 0x4A, 0x41, 0xE9, \r
+0x90, 0x94, 0x92, 0xE0, 0x24, 0x40, 0x60, 0x04, 0x24, 0x20, 0x70, 0x2C, 0x90, 0x8E, 0xB2, 0xE0, \r
+0xFF, 0x12, 0x7F, 0xA5, 0x20, 0xE0, 0x02, 0x41, 0xE9, 0x90, 0x8E, 0xC5, 0xE0, 0x04, 0x71, 0x6D, \r
+0x12, 0x90, 0x36, 0xEF, 0x70, 0x02, 0x41, 0xE9, 0x90, 0x94, 0x92, 0xE0, 0xFF, 0x12, 0x9F, 0x38, \r
+0x90, 0x8E, 0xC6, 0xE0, 0x04, 0xF0, 0x41, 0xE9, 0x12, 0xA5, 0xE9, 0x30, 0xE0, 0x5C, 0x90, 0x94, \r
+0x95, 0xE0, 0xFF, 0x90, 0x94, 0x91, 0xE0, 0x2F, 0xFF, 0x90, 0x94, 0x90, 0xE0, 0x34, 0x00, 0xCF, \r
+0x24, 0x08, 0xCF, 0x34, 0x00, 0xFE, 0x90, 0x94, 0x9B, 0x12, 0xA5, 0xAC, 0xEF, 0x64, 0x45, 0x70, \r
+0x39, 0xB1, 0xF4, 0x12, 0x94, 0xFA, 0xEF, 0x64, 0x01, 0x70, 0x2F, 0xB1, 0xF4, 0xF1, 0x6B, 0xEF, \r
+0x64, 0x01, 0x70, 0x26, 0x90, 0x94, 0x9F, 0x04, 0xF0, 0xB1, 0xF4, 0xA3, 0xE0, 0xFD, 0x12, 0x93, \r
+0x89, 0xEF, 0x70, 0x0E, 0x90, 0x94, 0x9D, 0xE0, 0xFD, 0x90, 0xFD, 0x11, 0xF0, 0xB1, 0xF4, 0x12, \r
+0x93, 0x4D, 0x90, 0x94, 0x9D, 0xE0, 0x90, 0xFD, 0x11, 0xF0, 0x71, 0x6E, 0x12, 0x90, 0x36, 0xEF, \r
+0x60, 0x1F, 0x71, 0x6E, 0x90, 0x94, 0x95, 0xE0, 0xFD, 0x90, 0x94, 0x98, 0xE0, 0xFB, 0x90, 0x94, \r
+0x9D, 0xE0, 0x90, 0x93, 0x64, 0xF0, 0x91, 0x3F, 0xEF, 0x60, 0x06, 0x90, 0x94, 0x9F, 0x74, 0x01, \r
+0xF0, 0x90, 0x8E, 0xAF, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x12, 0x71, 0x6E, 0x90, 0x94, 0x95, 0xE0, \r
+0xFD, 0x91, 0xC5, 0xEF, 0x60, 0x06, 0x90, 0x94, 0x9F, 0x74, 0x01, 0xF0, 0x12, 0x7E, 0xF3, 0x54, \r
+0x3F, 0x30, 0xE0, 0x0A, 0x71, 0x6E, 0x90, 0x94, 0x95, 0xE0, 0xFD, 0x12, 0x91, 0x35, 0x90, 0x8E, \r
+0xAF, 0xE0, 0xFF, 0x12, 0x7F, 0xA5, 0x30, 0xE0, 0x10, 0x90, 0x94, 0x9F, 0xE0, 0x70, 0x0A, 0x71, \r
+0x6E, 0x90, 0x94, 0x95, 0xE0, 0xFD, 0x12, 0x90, 0x80, 0x12, 0x9F, 0x89, 0xEF, 0x64, 0x01, 0x60, \r
+0x07, 0x90, 0x01, 0x3F, 0xE0, 0x30, 0xE2, 0x10, 0x12, 0xA6, 0x79, 0x30, 0xE0, 0x06, 0x90, 0x01, \r
+0x3F, 0x74, 0x04, 0xF0, 0x7F, 0x01, 0xF1, 0xAD, 0x12, 0x9F, 0x0D, 0xEF, 0x64, 0x01, 0x70, 0x36, \r
+0x90, 0x8E, 0xC7, 0xE0, 0x04, 0xF0, 0x12, 0x9E, 0xF7, 0xAD, 0x07, 0xEF, 0x64, 0x01, 0x60, 0x1E, \r
+0xF1, 0x9D, 0xED, 0xB4, 0x02, 0x08, 0x90, 0x01, 0xC7, 0x74, 0x42, 0xF0, 0x80, 0x0A, 0xED, 0xB4, \r
+0x04, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x43, 0xF0, 0x7F, 0x01, 0xF1, 0xAD, 0x80, 0x1F, 0x90, 0x94, \r
+0x8C, 0x12, 0x9E, 0xE4, 0x80, 0x0F, 0x12, 0xA6, 0x79, 0x20, 0xE0, 0x11, 0x90, 0x8E, 0xAF, 0xE0, \r
+0x54, 0xFE, 0xF0, 0x80, 0x08, 0x90, 0x94, 0x93, 0xE0, 0x04, 0xF0, 0x01, 0xA0, 0x74, 0x55, 0x04, \r
+0x90, 0x01, 0xC4, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF0, 0x90, 0x94, \r
+0x90, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0x90, 0x93, 0x62, 0xE0, 0xFD, 0x90, 0x93, 0x61, 0xE0, \r
+0x2D, 0xFD, 0x90, 0x93, 0x60, 0xE0, 0x34, 0x00, 0xCD, 0x24, 0x10, 0xCD, 0x34, 0x00, 0xFC, 0x7E, \r
+0x00, 0xED, 0x2F, 0xFF, 0xEE, 0x3C, 0xFE, 0xE4, 0xFD, 0xAB, 0x07, 0xAA, 0x06, 0xED, 0x2B, 0xFB, \r
+0xE4, 0x3A, 0xFA, 0xC3, 0x90, 0x8E, 0x2A, 0xE0, 0x9B, 0x90, 0x8E, 0x29, 0xE0, 0x9A, 0x50, 0x0C, \r
+0xA3, 0x12, 0xA5, 0xDE, 0xFE, 0xC3, 0xEB, 0x9F, 0xFB, 0xEA, 0x9E, 0xFA, 0x12, 0x8F, 0xD9, 0x74, \r
+0x00, 0x2F, 0x12, 0x8E, 0x37, 0xE0, 0xFF, 0x22, 0x90, 0x93, 0x70, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, \r
+0x7D, 0x09, 0x71, 0x99, 0xEF, 0x64, 0x06, 0x70, 0x24, 0xB1, 0xFD, 0x7D, 0x14, 0x71, 0x99, 0xEF, \r
+0x70, 0x1B, 0xB1, 0xFD, 0x7D, 0x15, 0x71, 0x99, 0xEF, 0x64, 0x50, 0x70, 0x10, 0xB1, 0xFD, 0x7D, \r
+0x21, 0x71, 0x99, 0xEF, 0x20, 0xE0, 0x03, 0x30, 0xE2, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8E, 0xB0, \r
+0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x34, 0xB1, 0xFD, 0x7D, 0x09, 0x71, 0x99, 0xEF, 0x64, \r
+0x11, 0x70, 0x29, 0x90, 0x93, 0x71, 0xE0, 0x24, 0x14, 0x12, 0x93, 0xEC, 0x90, 0x93, 0x72, 0xF0, \r
+0xA3, 0xEF, 0xF0, 0x7D, 0x02, 0x71, 0x99, 0xEF, 0x70, 0x12, 0x90, 0x93, 0x72, 0xE0, 0xFE, 0xA3, \r
+0xE0, 0xFF, 0x7D, 0x03, 0x71, 0x99, 0xBF, 0x89, 0x03, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, \r
+0x93, 0x62, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x12, 0x90, 0x2C, 0x90, 0x93, 0x65, 0xF0, 0xFD, 0x71, \r
+0x99, 0xEF, 0x54, 0x0C, 0x64, 0x08, 0x70, 0x5D, 0x91, 0xBC, 0xA3, 0xE0, 0xF1, 0x48, 0x64, 0x88, \r
+0x70, 0x53, 0x91, 0xBC, 0xA3, 0xE0, 0x24, 0x07, 0xFD, 0x71, 0x99, 0xEF, 0x64, 0x8E, 0x70, 0x45, \r
+0x90, 0x93, 0x65, 0x04, 0x91, 0xBB, 0x12, 0xA6, 0x0B, 0x04, 0xFD, 0x71, 0x99, 0xEF, 0x64, 0x03, \r
+0x70, 0x33, 0x91, 0xBC, 0x12, 0xA6, 0x0B, 0xF1, 0x48, 0x30, 0xE3, 0x07, 0x90, 0x01, 0xC7, 0x74, \r
+0x01, 0x80, 0x20, 0x90, 0x8E, 0xAF, 0x12, 0xA0, 0x5D, 0x30, 0xE0, 0x09, 0x91, 0xBC, 0xA3, 0xE0, \r
+0xFD, 0xD1, 0x1D, 0x80, 0x10, 0x90, 0x8E, 0xB2, 0x12, 0xA5, 0xEC, 0x30, 0xE0, 0x07, 0x90, 0x01, \r
+0xC7, 0x74, 0x02, 0xF1, 0x9C, 0x90, 0x93, 0x65, 0xE0, 0xFF, 0x22, 0xF0, 0x90, 0x93, 0x60, 0xE0, \r
+0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0x12, 0x93, 0x12, 0x12, 0x94, 0x07, 0x7A, 0x40, 0x79, 0x56, 0x12, \r
+0x91, 0x2E, 0x78, 0x6F, 0x7C, 0x93, 0x7D, 0x01, 0x7B, 0xFF, 0x7A, 0x40, 0x79, 0x5C, 0x12, 0x91, \r
+0x27, 0x78, 0x73, 0x7C, 0x93, 0x7D, 0x01, 0x7B, 0xFF, 0x7A, 0x40, 0x79, 0x60, 0x12, 0x91, 0x27, \r
+0xE4, 0x90, 0x93, 0x78, 0xF0, 0xF1, 0x59, 0xCF, 0x24, 0x06, 0xCF, 0xD1, 0x16, 0xEF, 0x64, 0x08, \r
+0x60, 0x02, 0xA1, 0xE7, 0xF1, 0x59, 0xCF, 0x24, 0x07, 0xCF, 0xD1, 0x16, 0xEF, 0x64, 0x06, 0x60, \r
+0x02, 0xA1, 0xE7, 0x90, 0x93, 0x78, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x77, 0xF0, 0xB1, 0xED, 0x94, \r
+0x06, 0x50, 0x17, 0x90, 0x93, 0x61, 0xE0, 0x24, 0x0A, 0xFD, 0x90, 0x93, 0x60, 0xE0, 0x71, 0x8C, \r
+0x90, 0x93, 0x77, 0x12, 0x93, 0xFE, 0xD1, 0x06, 0x80, 0xE3, 0x12, 0x93, 0x0B, 0x7B, 0x01, 0x7A, \r
+0x8E, 0x79, 0xBF, 0x12, 0x94, 0x10, 0x60, 0x02, 0xA1, 0xE7, 0x90, 0x93, 0x77, 0xF0, 0xB1, 0xED, \r
+0x94, 0x04, 0x50, 0x19, 0x12, 0x92, 0xFF, 0xF1, 0x64, 0xCD, 0x24, 0x20, 0x71, 0x8B, 0x90, 0x93, \r
+0x77, 0xE0, 0x24, 0x73, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xD1, 0x06, 0x80, 0xE1, 0x78, 0x73, 0x7C, \r
+0x93, 0x12, 0x94, 0x27, 0xEF, 0x70, 0x67, 0x90, 0x06, 0x30, 0xE0, 0x44, 0x01, 0x54, 0xDF, 0xF0, \r
+0x90, 0x8E, 0xB1, 0xE0, 0x30, 0xE0, 0x09, 0x90, 0x01, 0xC7, 0x74, 0x09, 0xF1, 0x9C, 0x80, 0x57, \r
+0xE4, 0x90, 0x93, 0x77, 0xF0, 0xB1, 0xED, 0x94, 0x06, 0x50, 0x0C, 0x71, 0x77, 0x90, 0x93, 0x77, \r
+0x12, 0x93, 0xF5, 0xD1, 0x06, 0x80, 0xEE, 0xE4, 0x90, 0x93, 0x77, 0xF0, 0xB1, 0xED, 0x94, 0x04, \r
+0x50, 0x19, 0x12, 0x92, 0xFF, 0xF1, 0x64, 0xCD, 0x24, 0x16, 0x71, 0x8B, 0x90, 0x93, 0x77, 0xE0, \r
+0x24, 0x6F, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xD1, 0x06, 0x80, 0xE1, 0x7B, 0x01, 0x7A, 0x93, 0x79, \r
+0x69, 0x12, 0x9E, 0xD7, 0xF0, 0x7A, 0x93, 0x79, 0x6F, 0x12, 0x5B, 0xF0, 0x80, 0x09, 0x90, 0x06, \r
+0x30, 0xE0, 0x44, 0x21, 0x54, 0xEF, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x22, 0x90, 0x93, 0x77, \r
+0xE0, 0xFF, 0xC3, 0x22, 0x90, 0x94, 0x9B, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0x90, 0x93, 0x70, \r
+0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x77, 0xE0, 0x04, 0xF0, \r
+0x22, 0xFF, 0x90, 0x93, 0x69, 0xE0, 0x34, 0x00, 0xFE, 0xE4, 0xFD, 0x61, 0x99, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x06, 0x31, 0xE0, 0x54, 0xEF, 0x44, 0x08, 0xF0, 0xED, 0x2F, 0xFF, \r
+0xE4, 0x3E, 0xFE, 0x7C, 0x00, 0xEF, 0x24, 0x08, 0xFF, 0xEC, 0x3E, 0x90, 0x93, 0x69, 0xF0, 0xA3, \r
+0xEF, 0xF0, 0x7E, 0x00, 0x7F, 0x83, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x8F, 0x79, 0xC0, 0x12, 0x08, \r
+0xAA, 0x90, 0x93, 0x6A, 0xE0, 0x24, 0x01, 0xD1, 0x11, 0x90, 0x8F, 0xC1, 0xF1, 0x41, 0x24, 0x04, \r
+0xD1, 0x11, 0x90, 0x8F, 0xC4, 0xF1, 0x41, 0x24, 0x05, 0xD1, 0x11, 0x90, 0x8F, 0xC5, 0xF1, 0x41, \r
+0x24, 0x06, 0xD1, 0x11, 0x90, 0x8F, 0xC6, 0xF1, 0x41, 0x24, 0x07, 0xD1, 0x11, 0x90, 0x8F, 0xC7, \r
+0xF1, 0x41, 0x24, 0x08, 0xD1, 0x11, 0x90, 0x8F, 0xC8, 0xEF, 0xF0, 0xE4, 0x90, 0x93, 0x68, 0xF0, \r
+0x90, 0x93, 0x68, 0xE0, 0xFF, 0xC3, 0x94, 0x08, 0x50, 0x1D, 0x90, 0x93, 0x6A, 0xE0, 0x24, 0x09, \r
+0xFD, 0x90, 0x93, 0x69, 0xE0, 0x71, 0x8C, 0x90, 0x93, 0x68, 0xE0, 0x24, 0xC9, 0xF5, 0x82, 0xE4, \r
+0x34, 0x8F, 0x12, 0xA5, 0xD3, 0x80, 0xD9, 0xE4, 0x90, 0x93, 0x68, 0xF0, 0x90, 0x93, 0x68, 0xE0, \r
+0xFF, 0xC3, 0x94, 0x20, 0x50, 0x1D, 0x90, 0x93, 0x6A, 0xE0, 0x24, 0x63, 0xFD, 0x90, 0x93, 0x69, \r
+0xE0, 0x71, 0x8C, 0x90, 0x93, 0x68, 0xE0, 0x24, 0x23, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0x12, 0xA5, \r
+0xD3, 0x80, 0xD9, 0x90, 0x8F, 0xC5, 0x12, 0xA3, 0xFD, 0x12, 0xA6, 0x67, 0x30, 0xE3, 0x0C, 0x7F, \r
+0x01, 0xF1, 0xAD, 0x90, 0x01, 0xC7, 0x74, 0x03, 0xF0, 0x80, 0x3F, 0x90, 0x93, 0x66, 0xA3, 0xE0, \r
+0xFF, 0x7C, 0x00, 0x54, 0x07, 0xFD, 0x64, 0x01, 0x60, 0x05, 0xED, 0x64, 0x02, 0x70, 0x2B, 0xED, \r
+0x64, 0x02, 0x4C, 0x70, 0x25, 0xEF, 0x54, 0x30, 0xFF, 0xE4, 0xC4, 0xF8, 0x54, 0xF0, 0xC8, 0xEF, \r
+0xC4, 0x54, 0x0F, 0x48, 0x90, 0x90, 0x59, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xE4, 0xFD, 0x12, 0xA2, \r
+0xD0, 0x90, 0x06, 0x31, 0xE0, 0x54, 0xF7, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, \r
+0x22, 0xEF, 0xF0, 0x90, 0x93, 0x6A, 0xE0, 0x22, 0x24, 0x06, 0xFD, 0x71, 0x99, 0xEF, 0x22, 0xD2, \r
+0xAF, 0xC2, 0xAF, 0x90, 0x8D, 0x01, 0xE0, 0xFF, 0x22, 0x90, 0x93, 0x62, 0xE0, 0xFF, 0x90, 0x93, \r
+0x61, 0xE0, 0x2F, 0xFF, 0x90, 0x93, 0x60, 0xE0, 0x34, 0x00, 0x22, 0x12, 0xA5, 0x63, 0x24, 0x16, \r
+0xFF, 0xE4, 0x3E, 0xD1, 0x18, 0x90, 0x90, 0x9C, 0xA3, 0xE0, 0xB5, 0x07, 0x19, 0x90, 0x93, 0x61, \r
+0xE0, 0x24, 0x16, 0xF1, 0x63, 0xFE, 0x7D, 0x01, 0x71, 0x99, 0xEF, 0xFD, 0x90, 0x90, 0x9C, 0xE0, \r
+0x6D, 0x70, 0x01, 0xE4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x01, 0x22, 0xF0, 0x90, 0x8E, 0xB8, \r
+0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x01, 0xC7, 0x74, 0x10, 0xF0, 0x7F, 0x01, 0x90, 0x95, 0x55, \r
+0xEF, 0xF0, 0x90, 0x8D, 0x07, 0xE0, 0x64, 0x02, 0x70, 0x1E, 0x90, 0x95, 0x55, 0xE0, 0xFD, 0x64, \r
+0x01, 0x70, 0x2D, 0xF1, 0x9D, 0x12, 0x7F, 0xA1, 0x30, 0xE0, 0x09, 0x90, 0x01, 0x4D, 0xE0, 0x64, \r
+0x80, 0xF0, 0x80, 0x1C, 0xAF, 0x05, 0x80, 0x15, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x12, 0x87, \r
+0xE6, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x95, 0x55, 0xE0, 0xFF, 0x12, 0x4C, 0x60, \r
+0x12, 0x7F, 0x79, 0xF0, 0x90, 0x8E, 0xAF, 0xE0, 0x54, 0xBF, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, \r
+0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0xFC, 0x90, 0x01, 0xC4, \r
+0xED, 0xF0, 0x74, 0x67, 0x11, 0x23, 0xD0, 0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, \r
+0xD0, 0xE0, 0x32, 0xFF, 0xA3, 0xF0, 0xED, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, \r
+0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, \r
+0x30, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x68, 0x11, 0x23, 0xD0, 0x07, 0xD0, 0x05, 0xD0, 0xD0, \r
+0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, \r
+0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, \r
+0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x57, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0x12, 0x4B, \r
+0x7D, 0xE5, 0x14, 0x30, 0xE7, 0x03, 0x12, 0x4E, 0xB9, 0x74, 0x57, 0x04, 0x90, 0x01, 0xC4, 0xF0, \r
+0x74, 0x68, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, \r
+0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xC0, \r
 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, \r
 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, \r
 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, \r
 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, \r
-0x5F, 0xF0, 0x74, 0x70, 0xA3, 0xF0, 0x12, 0x4B, 0x6E, 0xE5, 0x14, 0x30, 0xE7, 0x03, 0x12, 0x4E, \r
-0x6C, 0x74, 0x5F, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x70, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, \r
-0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, \r
-0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, \r
-0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, \r
-0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0xB7, 0xF0, 0x74, 0x70, 0xA3, 0xF0, 0x12, 0x8C, \r
-0x1B, 0xE5, 0x19, 0x30, 0xE3, 0x03, 0x12, 0x8C, 0x78, 0xE5, 0x19, 0x30, 0xE4, 0x02, 0x31, 0xDA, \r
-0xE5, 0x19, 0x30, 0xE5, 0x03, 0x12, 0x8C, 0x85, 0xE5, 0x1B, 0x30, 0xE0, 0x02, 0x31, 0x59, 0xE5, \r
-0x1B, 0x30, 0xE1, 0x03, 0x12, 0x8C, 0xC1, 0xE5, 0x1B, 0x30, 0xE2, 0x03, 0x12, 0x8E, 0x23, 0xE5, \r
-0x1B, 0x30, 0xE3, 0x02, 0x71, 0x1B, 0xE5, 0x1B, 0x30, 0xE4, 0x02, 0x71, 0x57, 0xE5, 0x1B, 0x30, \r
-0xE5, 0x02, 0x71, 0x87, 0xE5, 0x1B, 0x30, 0xE6, 0x02, 0x71, 0x70, 0xE5, 0x1C, 0x30, 0xE1, 0x03, \r
-0x12, 0x8E, 0x35, 0x74, 0xB7, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x70, 0xA3, 0xF0, 0xD0, 0x07, \r
-0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, \r
-0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xE4, 0xF5, 0x58, 0x90, 0x8E, 0x15, 0xE0, \r
-0x60, 0x6D, 0x71, 0x13, 0x70, 0x69, 0xF1, 0x6C, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x12, \r
-0xA0, 0x9F, 0x90, 0x8E, 0x13, 0xE0, 0xC4, 0x54, 0x0F, 0x60, 0x22, 0x24, 0xFE, 0x60, 0x03, 0x04, \r
-0x70, 0x1E, 0x90, 0x8E, 0x1C, 0xE0, 0x14, 0xF0, 0xE0, 0xFF, 0x60, 0x06, 0x90, 0x8E, 0x1E, 0xE0, \r
-0x60, 0x0E, 0xEF, 0x70, 0x08, 0x90, 0x8E, 0x1B, 0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x75, 0x58, 0x01, \r
-0xE5, 0x58, 0x60, 0x2B, 0x12, 0xA1, 0x78, 0x90, 0x8E, 0x1E, 0xE0, 0x60, 0x03, 0xB4, 0x01, 0x04, \r
-0x31, 0xD0, 0x80, 0x08, 0x31, 0xD0, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0xFF, 0x90, 0x8E, 0x1D, \r
-0xE0, 0x2F, 0x12, 0x50, 0x0D, 0x90, 0x8E, 0x18, 0xE0, 0x20, 0xE2, 0x03, 0x12, 0x51, 0xF9, 0x22, \r
-0xE4, 0x90, 0x94, 0xE2, 0xF0, 0x90, 0x8E, 0x1E, 0xE0, 0x22, 0x31, 0xED, 0x7F, 0x02, 0x8F, 0x59, \r
-0x7F, 0x02, 0x12, 0x48, 0x12, 0x90, 0x8D, 0x01, 0xE0, 0x45, 0x59, 0xF0, 0x22, 0x90, 0x01, 0xCC, \r
-0xE0, 0x54, 0x0F, 0x90, 0x95, 0x1C, 0xF0, 0x90, 0x95, 0x1C, 0xE0, 0xFD, 0x70, 0x02, 0x41, 0xE8, \r
-0x90, 0x8D, 0x5E, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, \r
-0x90, 0x8D, 0x5F, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, \r
-0x90, 0x01, 0xC1, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x95, 0x1A, 0x12, 0x89, 0xA8, 0x80, 0x05, \r
-0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0x41, 0xCA, 0xE4, 0x90, \r
-0x95, 0x1D, 0xF0, 0x90, 0x95, 0x1D, 0xE0, 0xF9, 0xC3, 0x94, 0x04, 0x50, 0x31, 0x51, 0xE9, 0xA4, \r
-0xFF, 0xE9, 0xFD, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xD0, 0x71, 0x01, 0x90, \r
-0x8D, 0x0E, 0x51, 0xF1, 0x51, 0xE9, 0xA4, 0x2D, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xF0, 0x71, \r
-0x01, 0x90, 0x8D, 0x12, 0x51, 0xF1, 0x90, 0x95, 0x1D, 0xE0, 0x04, 0xF0, 0x80, 0xC5, 0x90, 0x95, \r
-0x1C, 0xE0, 0xFF, 0x90, 0x95, 0x1A, 0x12, 0x4B, 0x14, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, \r
-0x5F, 0x90, 0x95, 0x1C, 0xF0, 0x90, 0x95, 0x1A, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, \r
-0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x95, 0x1A, 0xE0, 0x04, 0xF0, 0xE0, \r
-0x54, 0x03, 0xF0, 0x90, 0x8D, 0x5F, 0x12, 0x83, 0x7E, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x70, \r
-0x02, 0x21, 0xF7, 0xE4, 0x90, 0x8D, 0x5F, 0xF0, 0x21, 0xF7, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x02, \r
-0xF0, 0x90, 0x95, 0x1A, 0xE0, 0x44, 0x80, 0x90, 0x00, 0x8A, 0xF0, 0x51, 0xE9, 0x90, 0x01, 0xD0, \r
-0x12, 0x43, 0xFD, 0xE0, 0x90, 0x01, 0xC3, 0xF0, 0x22, 0x90, 0x95, 0x1A, 0xE0, 0x75, 0xF0, 0x04, \r
-0x22, 0x12, 0x43, 0xFD, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xEF, 0xF0, \r
-0x22, 0x2F, 0xF5, 0x82, 0x74, 0x01, 0x3E, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x8D, 0x5F, 0xE0, 0x75, \r
-0xF0, 0x08, 0x22, 0xE4, 0xFF, 0x71, 0x2E, 0xEF, 0x64, 0x01, 0x22, 0x71, 0x13, 0x70, 0x0E, 0x90, \r
-0x8E, 0x15, 0xE0, 0x60, 0x08, 0xB1, 0x76, 0x12, 0x9B, 0xE5, 0x12, 0x50, 0x0D, 0x22, 0x12, 0x89, \r
-0xA1, 0xFE, 0xEF, 0x54, 0x07, 0xFF, 0x12, 0x89, 0x3C, 0xE0, 0xFD, 0x7C, 0x00, 0x12, 0x89, 0xAA, \r
-0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5C, 0xFE, 0xEF, 0x5D, 0x4E, \r
-0x7F, 0x00, 0x60, 0x02, 0x7F, 0x01, 0x22, 0x71, 0x13, 0x70, 0x14, 0x90, 0x8E, 0x15, 0xE0, 0x60, \r
-0x0E, 0xB1, 0x76, 0x90, 0x8E, 0x11, 0xE0, 0xF1, 0x53, 0x54, 0x07, 0x70, 0x02, 0x91, 0xB2, 0x22, \r
-0xE4, 0xFF, 0x71, 0x2E, 0xBF, 0x01, 0x0F, 0x90, 0x8E, 0x15, 0xE0, 0x60, 0x09, 0x12, 0x9B, 0xDD, \r
-0x54, 0x07, 0x70, 0x02, 0x91, 0xB2, 0x22, 0xE4, 0xFF, 0x71, 0x2E, 0xBF, 0x01, 0x12, 0x90, 0x8E, \r
-0x15, 0xE0, 0x60, 0x0C, 0xF1, 0xF5, 0x64, 0x02, 0x60, 0x03, 0x02, 0x9B, 0xEF, 0x12, 0x67, 0x84, \r
-0x22, 0xE4, 0x90, 0x93, 0xFD, 0xF0, 0x90, 0x8E, 0x15, 0xE0, 0x60, 0x3A, 0x71, 0x13, 0x70, 0x36, \r
-0x12, 0xA1, 0x68, 0xF1, 0x6B, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x12, 0xA0, 0x9F, 0x90, \r
-0x93, 0xFD, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x8E, 0x1C, 0xF0, 0x04, 0x60, 0x19, 0x12, 0xA1, 0x78, \r
-0xE4, 0x90, 0x94, 0xE2, 0xF0, 0x90, 0x8E, 0x1D, 0xE0, 0x12, 0x50, 0x0D, 0x90, 0x8E, 0x18, 0xE0, \r
-0x20, 0xE2, 0x03, 0x12, 0x51, 0xF9, 0x22, 0x8B, 0x51, 0x8A, 0x52, 0x89, 0x53, 0xF1, 0xC3, 0xFF, \r
-0xF5, 0x55, 0x12, 0x06, 0x89, 0xFE, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0x12, 0x7D, 0xB4, 0xF5, 0x56, \r
-0x80, 0x02, 0x8F, 0x56, 0x85, 0x55, 0x54, 0xE5, 0x54, 0xD3, 0x95, 0x56, 0x50, 0x26, 0xAB, 0x51, \r
-0xAA, 0x52, 0xA9, 0x53, 0x12, 0x06, 0x89, 0x54, 0x01, 0xFD, 0xAF, 0x54, 0x12, 0x88, 0xFC, 0xAF, \r
-0x54, 0x71, 0x2E, 0xEF, 0xAF, 0x54, 0x70, 0x05, 0x12, 0x8A, 0x77, 0x80, 0x03, 0x12, 0x8A, 0x63, \r
-0x05, 0x54, 0x80, 0xD3, 0xE5, 0x55, 0x70, 0x0E, 0xFF, 0x71, 0x2E, 0xEF, 0x70, 0x08, 0xB1, 0x69, \r
-0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0x22, 0xF1, 0x48, 0x30, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x13, \r
-0x54, 0x03, 0x30, 0xE0, 0x02, 0xF1, 0x12, 0x90, 0x8E, 0x11, 0x12, 0x67, 0xED, 0x30, 0xE0, 0x09, \r
-0xEF, 0xF1, 0x53, 0x54, 0x07, 0x70, 0x42, 0x80, 0x3E, 0x90, 0x8E, 0x1E, 0xE0, 0x04, 0xF0, 0x90, \r
-0x8E, 0x19, 0xE0, 0x54, 0xEF, 0xF0, 0x12, 0xA0, 0x93, 0x40, 0x2C, 0x71, 0x13, 0x70, 0x2A, 0xF1, \r
-0xF5, 0x70, 0x04, 0x91, 0xBC, 0x80, 0x23, 0x91, 0xBC, 0x90, 0x8E, 0x1F, 0xE0, 0x04, 0xF0, 0xE0, \r
-0xD3, 0x94, 0x02, 0x40, 0x09, 0x91, 0xAA, 0xE4, 0x90, 0x8E, 0x1F, 0xF0, 0x80, 0x03, 0x12, 0x67, \r
-0x84, 0xE4, 0x90, 0x8E, 0x1E, 0xF0, 0x22, 0x91, 0xB2, 0x22, 0x90, 0x8E, 0x12, 0xE0, 0x54, 0xFB, \r
-0xF0, 0x22, 0x90, 0x8E, 0x17, 0xE0, 0xFF, 0x7D, 0x01, 0x02, 0x51, 0xFD, 0x12, 0xA0, 0x93, 0x40, \r
-0x20, 0x90, 0x8E, 0x2F, 0xE0, 0x04, 0xF0, 0xE0, 0xFF, 0x94, 0x04, 0x50, 0x14, 0x90, 0x8E, 0x27, \r
-0xEF, 0xF0, 0x25, 0xE0, 0x24, 0x08, 0x90, 0x8E, 0x2E, 0xF0, 0xFB, 0x12, 0x8F, 0x1B, 0x12, 0x8E, \r
-0xB0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x78, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x78, 0xFF, 0xB1, \r
-0x25, 0x7D, 0x02, 0x7F, 0x03, 0xB1, 0x25, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0x12, 0xA0, 0xC0, \r
-0xE4, 0xFF, 0x71, 0x2E, 0xBF, 0x01, 0x10, 0x91, 0xAA, 0x90, 0x8E, 0x18, 0xE0, 0x20, 0xE2, 0x0A, \r
-0x7D, 0x01, 0x7F, 0x04, 0x02, 0x51, 0xFD, 0x12, 0xA1, 0x70, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0xB1, \r
-0x25, 0x7D, 0x01, 0x7F, 0x02, 0x74, 0x15, 0x2F, 0xF8, 0xE6, 0x4D, 0xFE, 0xF6, 0x74, 0x30, 0xF1, \r
-0x34, 0xF0, 0x22, 0xEF, 0x70, 0x31, 0x7D, 0x78, 0x7F, 0x02, 0xD1, 0x27, 0x7D, 0x02, 0x7F, 0x03, \r
-0xD1, 0x27, 0x7D, 0xC8, 0x7F, 0x02, 0xF1, 0x27, 0xB1, 0x76, 0xE4, 0xFF, 0x71, 0x2E, 0xEF, 0x70, \r
-0x0A, 0xB1, 0x69, 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0x80, 0x07, 0x7D, 0x01, 0x7F, 0x0C, 0x12, \r
-0x51, 0xFD, 0xB1, 0x6E, 0x02, 0xA1, 0x29, 0x81, 0xE2, 0x12, 0x4D, 0xE7, 0xF1, 0x5E, 0x90, 0x8E, \r
-0x11, 0xE0, 0x54, 0xF7, 0xF0, 0x22, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, \r
-0xF0, 0x22, 0xF1, 0x6C, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x12, 0xA0, 0xF3, 0x71, \r
-0x13, 0x60, 0x02, 0xC1, 0x1C, 0x90, 0x8E, 0x15, 0xE0, 0x70, 0x02, 0xC1, 0x1C, 0xF1, 0x1E, 0x64, \r
-0x01, 0x70, 0x22, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x8E, 0x1C, 0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, \r
-0x8E, 0x1B, 0xF0, 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x8E, 0x1B, 0xE0, 0xFE, 0xFF, 0x80, 0x00, \r
-0x90, 0x8E, 0x1C, 0xEF, 0xF0, 0x12, 0x9C, 0x08, 0x12, 0xA1, 0x70, 0xE4, 0x90, 0x8E, 0x1E, 0x12, \r
-0xA0, 0xC0, 0xB1, 0x76, 0xF1, 0x56, 0x54, 0xEF, 0xF0, 0xF1, 0x1E, 0x24, 0xFD, 0x50, 0x02, 0x80, \r
-0x03, 0x12, 0x9B, 0x84, 0xF1, 0x48, 0x30, 0xE0, 0x33, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, \r
-0xE0, 0x2A, 0x90, 0x8E, 0x1B, 0xE0, 0xFF, 0xA3, 0xE0, 0x6F, 0x70, 0x20, 0x90, 0x8E, 0x12, 0xE0, \r
-0x44, 0x40, 0xF0, 0x12, 0xA1, 0x68, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, \r
-0xD1, 0xC1, 0xD1, 0x23, 0xF1, 0x12, 0x90, 0x8E, 0x1C, 0xE0, 0x14, 0xF0, 0x22, 0x7D, 0x02, 0x7F, \r
-0x02, 0xD1, 0x27, 0x7D, 0x01, 0x7F, 0x02, 0x74, 0x15, 0x12, 0xA1, 0xA0, 0xFE, 0xF6, 0x74, 0x30, \r
-0xF1, 0x34, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x30, 0xEF, 0xF0, \r
-0x54, 0x01, 0xFF, 0x90, 0x8E, 0xC0, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0x90, 0x8D, 0xFB, 0xF1, 0x4B, \r
-0x30, 0xE0, 0x39, 0x12, 0x83, 0xC2, 0x60, 0x10, 0x12, 0x83, 0xB8, 0x40, 0x0B, 0xE4, 0x7F, 0x0A, \r
-0xFE, 0xFD, 0xFC, 0x90, 0x90, 0xD6, 0x80, 0x09, 0xE4, 0x7F, 0x0A, 0xFE, 0xFD, 0xFC, 0x90, 0x90, \r
-0xCE, 0x12, 0x43, 0xF1, 0x12, 0x42, 0x9D, 0xC0, 0x07, 0x90, 0x8E, 0xC2, 0xE0, 0xFB, 0xE4, 0xFA, \r
-0xF9, 0xF8, 0xD0, 0x07, 0x12, 0x43, 0x28, 0x90, 0x8E, 0xC3, 0xEF, 0xF0, 0x90, 0x95, 0x30, 0xE0, \r
-0x64, 0x01, 0x70, 0x1F, 0x90, 0x01, 0x53, 0xF0, 0x90, 0x8E, 0xC2, 0xE0, 0x60, 0x0A, 0x7D, 0x10, \r
-0x7F, 0x03, 0xD1, 0xC1, 0xF1, 0x8D, 0x80, 0x14, 0xF1, 0x3E, 0xF1, 0x27, 0xD1, 0x1D, 0x12, 0x9D, \r
-0x2E, 0x80, 0x09, 0xF1, 0x3E, 0xD1, 0xC1, 0xB1, 0x1B, 0x12, 0x4F, 0xEF, 0xD0, 0xD0, 0x92, 0xAF, \r
-0x22, 0x74, 0x1D, 0x2F, 0xF8, 0xE6, 0x4D, 0xF1, 0x30, 0xF0, 0x22, 0x90, 0x8E, 0xC0, 0xE0, 0x30, \r
-0xE0, 0x3F, 0xF1, 0x8D, 0x90, 0x8E, 0xC3, 0xE0, 0x60, 0x05, 0x14, 0xF0, 0x02, 0x9D, 0x2E, 0x90, \r
-0x8E, 0xC1, 0xE0, 0x14, 0x90, 0x8E, 0xC3, 0xF0, 0x90, 0x05, 0x73, 0x74, 0x01, 0xF0, 0xE4, 0xFF, \r
-0xD1, 0x34, 0xB1, 0x1B, 0x90, 0x8D, 0xFB, 0xE0, 0xFF, 0x20, 0xE0, 0x08, 0x13, 0x13, 0x13, 0x54, \r
-0x1F, 0x30, 0xE0, 0x0D, 0x90, 0x94, 0xE5, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x12, 0x50, \r
-0x45, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0xC1, 0x27, 0x71, 0xA1, 0xF1, 0xBC, 0x80, 0xAD, 0x90, 0x8E, \r
-0x13, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x22, 0x74, 0x1D, 0x12, 0xA1, 0xA0, 0xF1, 0x30, 0xF0, 0x22, \r
-0xFE, 0xF6, 0x74, 0x38, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x01, 0xF5, 0x83, 0xEE, 0x22, 0x90, 0x01, \r
-0x53, 0x74, 0x03, 0xF0, 0x7D, 0x10, 0xFF, 0x22, 0x90, 0x8E, 0x12, 0xE0, 0xFF, 0x13, 0x13, 0x13, \r
-0x54, 0x1F, 0x22, 0x54, 0xFB, 0xF0, 0x90, 0x8E, 0x19, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x12, 0x67, \r
-0xF4, 0x12, 0x4F, 0xE9, 0x7D, 0x0C, 0x7F, 0x01, 0x02, 0x4E, 0xB5, 0xF0, 0x90, 0x05, 0x62, 0xE0, \r
-0xFE, 0x90, 0x05, 0x61, 0xE0, 0xFD, 0xED, 0x78, 0x02, 0x22, 0x90, 0x8E, 0xC0, 0xE0, 0x30, 0xE0, \r
-0x0B, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x04, 0xD1, 0x1D, 0xF1, 0x8D, 0x22, 0x90, 0x8E, 0xC2, \r
-0xE0, 0x90, 0x05, 0x73, 0xF0, 0x22, 0x90, 0x8E, 0x11, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x8E, \r
-0x1E, 0xF0, 0xA3, 0xF0, 0x90, 0x8E, 0x19, 0xF0, 0x90, 0x8E, 0x12, 0xE0, 0x54, 0xF7, 0xF0, 0x54, \r
-0xBF, 0xF0, 0xB1, 0x21, 0xF1, 0xBC, 0x7D, 0x10, 0x7F, 0x03, 0xE1, 0x27, 0x7D, 0x02, 0x7F, 0x02, \r
-0xA1, 0x25, 0xF0, 0x90, 0x00, 0x01, 0x02, 0x06, 0xA2, 0x90, 0x93, 0x4D, 0x12, 0x44, 0x12, 0xF1, \r
-0x96, 0x90, 0x8E, 0x15, 0xE0, 0xFF, 0xB1, 0x33, 0x90, 0x8E, 0x15, 0xE0, 0x60, 0x12, 0x90, 0x93, \r
-0x4D, 0x12, 0x44, 0x09, 0xF1, 0xC3, 0x54, 0x0F, 0xFF, 0x12, 0x7D, 0xB4, 0xFD, 0x12, 0x9A, 0xAE, \r
-0x22, 0x7F, 0x80, 0x21, 0xDE, 0x90, 0x8E, 0x13, 0xE0, 0x54, 0x0F, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, \r
-0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, \r
-0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0xFC, 0xF0, 0x74, \r
-0x77, 0xA3, 0xF0, 0x12, 0x8C, 0x48, 0xE5, 0x21, 0x30, 0xE0, 0x03, 0x12, 0x77, 0xF1, 0xE5, 0x21, \r
-0x30, 0xE1, 0x03, 0x12, 0x8E, 0x5B, 0xE5, 0x21, 0x30, 0xE2, 0x03, 0x12, 0x8E, 0x65, 0xE5, 0x22, \r
-0x30, 0xE0, 0x03, 0x12, 0x8E, 0x7C, 0xE5, 0x24, 0x30, 0xE1, 0x05, 0x7F, 0x04, 0x12, 0x71, 0xDE, \r
-0xE5, 0x24, 0x30, 0xE4, 0x03, 0x12, 0x77, 0x18, 0xE5, 0x24, 0x30, 0xE5, 0x02, 0x11, 0x8C, 0xE5, \r
-0x24, 0x30, 0xE6, 0x02, 0x11, 0xF1, 0x74, 0xFC, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x77, 0xA3, \r
-0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, \r
-0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x8E, 0x11, 0x12, \r
-0x9F, 0xD5, 0x30, 0xE0, 0x15, 0xEF, 0x54, 0xBF, 0xF1, 0xEE, 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x01, \r
-0xF0, 0x80, 0x04, 0xE0, 0x54, 0xFE, 0xF0, 0x12, 0x74, 0xB2, 0xE4, 0xFF, 0x90, 0x93, 0x2C, 0xE0, \r
-0x30, 0xE0, 0x3D, 0x90, 0x93, 0x31, 0xE0, 0xFD, 0x60, 0x36, 0x12, 0x89, 0xAA, 0x80, 0x05, 0xC3, \r
-0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x04, 0xE0, 0xE0, 0xFB, 0xEF, 0x5B, 0x60, 0x0B, \r
-0xE4, 0x90, 0x93, 0x31, 0xF0, 0x90, 0x93, 0x33, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x2E, 0xE0, 0xD3, \r
-0x9D, 0x50, 0x04, 0x31, 0x6A, 0xF0, 0x22, 0x12, 0x65, 0x55, 0x90, 0x93, 0x31, 0xE0, 0x04, 0xF0, \r
-0x22, 0x90, 0x8E, 0x11, 0x31, 0x18, 0x30, 0xE0, 0x1B, 0xEF, 0x54, 0x7F, 0xF1, 0xEE, 0x30, 0xE1, \r
-0x06, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x8E, 0x15, 0xE0, 0x60, \r
-0x03, 0x12, 0x74, 0xB2, 0x7F, 0x01, 0x80, 0x94, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, \r
-0x22, 0x90, 0x95, 0x2B, 0xEF, 0xF0, 0x90, 0x8D, 0x06, 0xE0, 0x64, 0x02, 0x70, 0x22, 0x90, 0x95, \r
-0x2B, 0xE0, 0xFD, 0x64, 0x01, 0x70, 0x28, 0x12, 0x6F, 0x98, 0x90, 0x8E, 0xC8, 0xE0, 0x31, 0x1A, \r
-0x30, 0xE0, 0x09, 0x90, 0x01, 0x4D, 0xE0, 0x64, 0x80, 0xF0, 0x80, 0x13, 0xAF, 0x05, 0x80, 0x0C, \r
-0x90, 0x06, 0x90, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x95, 0x2B, 0xE0, 0xFF, 0x12, 0x4C, 0x50, 0x31, \r
-0x74, 0xF0, 0x90, 0x8E, 0xC4, 0xE0, 0x54, 0xBF, 0xF0, 0x22, 0x90, 0x01, 0xC7, 0x74, 0x10, 0xF0, \r
-0x7F, 0x01, 0x31, 0x21, 0x90, 0x93, 0x2C, 0xE0, 0x54, 0xFE, 0x22, 0xF1, 0x3E, 0x12, 0x06, 0x89, \r
-0xFF, 0x54, 0x7F, 0x90, 0x8E, 0x15, 0xF0, 0xEF, 0x31, 0x1A, 0xA3, 0x12, 0x77, 0xC2, 0xFF, 0x54, \r
-0xF0, 0xC4, 0x54, 0x0F, 0xFE, 0x90, 0x8E, 0x13, 0xE0, 0x54, 0xF0, 0x4E, 0xB1, 0xF7, 0x54, 0x01, \r
-0x25, 0xE0, 0xFE, 0x90, 0x8E, 0x11, 0xE0, 0x54, 0xFD, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xC4, 0x54, \r
-0xF0, 0xFF, 0x12, 0x77, 0xF5, 0xB1, 0xB2, 0x90, 0x8E, 0x14, 0xF0, 0x91, 0x93, 0x30, 0xE0, 0x4D, \r
-0xC3, 0x13, 0x54, 0x07, 0xFF, 0xC3, 0x94, 0x04, 0x90, 0x8E, 0x28, 0x50, 0x04, 0xEF, 0xF0, 0x80, \r
-0x25, 0x74, 0x03, 0xF0, 0x51, 0x25, 0xE9, 0x24, 0x06, 0xF1, 0xC5, 0xFF, 0x74, 0x03, 0x24, 0xFD, \r
-0xFE, 0xEF, 0xC4, 0x54, 0x0F, 0xFD, 0xEF, 0x54, 0x0F, 0xFF, 0xED, 0x2E, 0x54, 0x0F, 0xFE, 0xC4, \r
-0x54, 0xF0, 0x4F, 0x12, 0x06, 0xCF, 0x51, 0x25, 0x91, 0x93, 0xC4, 0x54, 0x0F, 0xFF, 0xC3, 0x94, \r
-0x04, 0x90, 0x8E, 0x1D, 0x50, 0x05, 0x74, 0x04, 0xF0, 0x80, 0x02, 0xEF, 0xF0, 0x51, 0x25, 0xB1, \r
-0x70, 0xFD, 0x7F, 0x02, 0x12, 0x4E, 0xB5, 0x90, 0x94, 0x6F, 0xE0, 0x60, 0x03, 0x12, 0x4E, 0xA9, \r
-0x51, 0x25, 0x02, 0x77, 0xC9, 0x90, 0x93, 0x4A, 0x02, 0x44, 0x09, 0xD3, 0x10, 0xAF, 0x01, 0xC3, \r
-0xC0, 0xD0, 0xF1, 0x3E, 0x12, 0x06, 0x89, 0x20, 0xE0, 0x05, 0x12, 0x8B, 0x24, 0x41, 0xEE, 0x90, \r
-0x8F, 0x98, 0x74, 0x05, 0xF0, 0xF1, 0x53, 0x90, 0x8E, 0xC7, 0x51, 0xF3, 0xF1, 0xD4, 0xFF, 0x90, \r
-0x8E, 0xC7, 0x12, 0x9E, 0xF1, 0x71, 0x01, 0xF1, 0xDC, 0x90, 0x8E, 0xC7, 0x12, 0xA0, 0xE9, 0x71, \r
-0x01, 0xF1, 0xE5, 0x90, 0x8E, 0xC7, 0x12, 0xA0, 0xDF, 0x12, 0x77, 0xC2, 0x54, 0x80, 0xFF, 0x90, \r
-0x8E, 0xC8, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x12, 0x06, 0x89, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, \r
-0x07, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x04, 0xF0, 0x51, 0x25, 0x12, 0x06, 0x89, 0x13, 0x13, 0x13, \r
-0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x8D, 0x06, 0xE0, \r
-0xB4, 0x02, 0x09, 0x90, 0x8E, 0xC8, 0xE0, 0x31, 0x1A, 0x20, 0xE0, 0x34, 0x12, 0x77, 0xC3, 0x54, \r
-0x7F, 0xFF, 0x90, 0x8E, 0xC8, 0xE0, 0x54, 0x80, 0xB1, 0xB2, 0x90, 0x8E, 0xC9, 0xB1, 0xF7, 0xFF, \r
-0x54, 0x01, 0xFE, 0x90, 0x8E, 0xCA, 0xF1, 0xCC, 0x54, 0xFE, 0xFF, 0xEE, 0x54, 0x01, 0x4F, 0xF0, \r
-0x12, 0x4C, 0xF0, 0x13, 0x54, 0x07, 0x7D, 0x00, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x12, 0x4A, 0x6A, \r
-0x90, 0x8D, 0x06, 0xE0, 0xB4, 0x01, 0x07, 0x90, 0xFE, 0x10, 0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, \r
-0x92, 0xAF, 0x22, 0xE0, 0x54, 0xFE, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, \r
-0x4F, 0xFF, 0xF0, 0x12, 0x06, 0x89, 0xFE, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, \r
-0x59, 0x90, 0x8E, 0xC4, 0x51, 0xF3, 0xF1, 0xD4, 0xFF, 0x90, 0x8E, 0xC4, 0x12, 0x9E, 0xF1, 0x71, \r
-0x01, 0xF1, 0xDC, 0x90, 0x8E, 0xC4, 0x12, 0xA0, 0xE9, 0x71, 0x01, 0xF1, 0xE5, 0x90, 0x8E, 0xC4, \r
-0x12, 0xA0, 0xDF, 0xB1, 0xB3, 0x54, 0x01, 0xFF, 0x90, 0x8E, 0xC6, 0xE0, 0x54, 0xFE, 0x4F, 0x12, \r
-0x77, 0xC2, 0x54, 0x01, 0xFF, 0x90, 0x8E, 0xC5, 0xE0, 0x54, 0xFE, 0x4F, 0x12, 0x84, 0x9A, 0x12, \r
-0x87, 0xE4, 0x90, 0x8E, 0xC4, 0xE0, 0xC3, 0x13, 0x54, 0x01, 0xFF, 0x12, 0x99, 0xC9, 0xF1, 0x44, \r
-0x54, 0x01, 0xFF, 0x12, 0x99, 0x35, 0xF1, 0x44, 0x13, 0x54, 0x01, 0xFF, 0x12, 0x99, 0xD5, 0x90, \r
-0x8E, 0xC4, 0xE0, 0xC4, 0x54, 0x01, 0xFF, 0x12, 0x9A, 0x2C, 0x90, 0x8E, 0xC4, 0xE0, 0xC4, 0x13, \r
-0x13, 0x54, 0x01, 0xFF, 0x12, 0x9A, 0x3A, 0x90, 0x8E, 0xC4, 0xE0, 0x54, 0x01, 0xFF, 0x12, 0x86, \r
-0x70, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x47, 0x12, 0x44, 0x12, 0x90, 0x93, 0x46, 0xEF, \r
-0xF0, 0x12, 0x44, 0x1B, 0x7B, 0xE1, 0x00, 0x7B, 0xE9, 0x01, 0x7B, 0xF2, 0x02, 0x7B, 0xFB, 0x03, \r
-0x7C, 0x04, 0x04, 0x7C, 0x0C, 0x12, 0x7C, 0x15, 0x14, 0x7C, 0x1E, 0x20, 0x7C, 0x26, 0x21, 0x7C, \r
-0x2E, 0x23, 0x7C, 0x37, 0x25, 0x7C, 0x40, 0x27, 0x7C, 0x50, 0x80, 0x7C, 0x48, 0x81, 0x7C, 0x58, \r
-0x82, 0x7C, 0x61, 0x83, 0x7C, 0x69, 0x84, 0x7C, 0x7A, 0x86, 0x7C, 0x71, 0x88, 0x00, 0x00, 0x7C, \r
-0x83, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0xA1, 0x76, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0x02, \r
-0x73, 0xE7, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0x02, 0x87, 0xEC, 0x90, 0x93, 0x47, 0x12, 0x44, \r
-0x09, 0x02, 0x90, 0x85, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0xE1, 0x07, 0x90, 0x93, 0x47, 0x12, \r
-0x44, 0x09, 0x02, 0x88, 0x29, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0x02, 0x88, 0x3D, 0x90, 0x93, \r
-0x47, 0x12, 0x44, 0x09, 0x21, 0x7B, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0xE1, 0x61, 0x90, 0x93, \r
-0x47, 0x12, 0x44, 0x09, 0x02, 0x88, 0x4C, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0x02, 0x88, 0x54, \r
-0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0xE1, 0x99, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0x61, 0x08, \r
-0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0x41, 0x2B, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0x02, 0x99, \r
-0xA3, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0xA1, 0xBA, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0xA1, \r
-0xFE, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, 0x02, 0x99, 0xB9, 0x90, 0x93, 0x47, 0x12, 0x44, 0x09, \r
-0x02, 0x9E, 0x4F, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x93, 0x46, 0xE0, 0x90, 0x01, \r
-0xC2, 0xF0, 0x22, 0x90, 0x00, 0x06, 0x02, 0x06, 0xA2, 0x90, 0x94, 0xBB, 0x12, 0x44, 0x12, 0x12, \r
-0x06, 0x89, 0x90, 0x94, 0xC0, 0x12, 0x77, 0xC2, 0x90, 0x94, 0xC1, 0xB1, 0x6F, 0x90, 0x94, 0xC2, \r
-0xF1, 0x37, 0x90, 0x94, 0xC3, 0xF0, 0x91, 0x93, 0x90, 0x94, 0xC4, 0xF0, 0x90, 0x00, 0x07, 0x12, \r
-0x06, 0xA2, 0x90, 0x94, 0xC5, 0xB1, 0xF7, 0x90, 0x94, 0xC8, 0xF0, 0xED, 0x70, 0x19, 0xFF, 0xB1, \r
-0x64, 0xE0, 0xB4, 0xFF, 0x06, 0xB1, 0x64, 0xE4, 0xF0, 0x80, 0x07, 0xB1, 0x64, 0xE0, 0x04, 0xF0, \r
-0x80, 0x05, 0x0F, 0xEF, 0xB4, 0x06, 0xE8, 0x90, 0x94, 0xBF, 0xE0, 0xFF, 0xB4, 0x04, 0x14, 0xA3, \r
-0xE0, 0xFE, 0xB1, 0x5E, 0xEE, 0xF1, 0x4B, 0xFE, 0xB1, 0x5E, 0x12, 0x8A, 0x53, 0x90, 0x00, 0x02, \r
-0xE4, 0x80, 0x20, 0xEF, 0xB4, 0x02, 0x1F, 0x90, 0x94, 0xC1, 0xB1, 0x5C, 0xEF, 0xF1, 0x4B, 0x44, \r
-0x20, 0x54, 0x7F, 0xB1, 0x5D, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x06, 0xE1, 0x90, 0x94, 0xC0, 0xE0, \r
-0x90, 0x00, 0x02, 0x12, 0x06, 0xE1, 0xB1, 0x5E, 0xE9, 0x24, 0x03, 0xF1, 0xC5, 0x44, 0x20, 0x12, \r
-0x06, 0xCF, 0x90, 0x94, 0xC2, 0xB1, 0x5C, 0x90, 0x00, 0x04, 0xEF, 0x12, 0x06, 0xE1, 0x90, 0x94, \r
-0xC3, 0xE0, 0x90, 0x00, 0x05, 0x12, 0x06, 0xE1, 0x90, 0x94, 0xC4, 0xE0, 0x90, 0x00, 0x06, 0x12, \r
-0x06, 0xE1, 0x90, 0x94, 0xC5, 0xE0, 0x90, 0x00, 0x07, 0x02, 0x06, 0xE1, 0xE0, 0xFF, 0x90, 0x94, \r
-0xBB, 0x02, 0x44, 0x09, 0x74, 0xC0, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0xF0, \r
-0x90, 0x00, 0x04, 0x02, 0x06, 0xA2, 0x90, 0x02, 0x09, 0xE0, 0xF5, 0x51, 0x12, 0x06, 0x89, 0x25, \r
-0x51, 0x90, 0x8D, 0x07, 0x12, 0x77, 0xC2, 0x25, 0x51, 0x90, 0x8D, 0x08, 0xB1, 0xB3, 0x25, 0x51, \r
-0x90, 0x8D, 0x09, 0xB1, 0xF7, 0x25, 0x51, 0x90, 0x8D, 0x0A, 0xB1, 0x6F, 0x25, 0x51, 0x90, 0x8D, \r
-0x0B, 0xF1, 0x37, 0x25, 0x51, 0x90, 0x8D, 0x0C, 0xF0, 0x91, 0x93, 0x25, 0x51, 0x90, 0x8D, 0x0D, \r
-0xF0, 0x22, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x02, 0x06, 0xA2, 0x12, 0xA0, 0x62, 0x90, 0x93, 0x18, \r
-0x12, 0x77, 0xC2, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x19, 0xB1, 0xB3, 0xFF, 0xED, 0x2F, 0x90, 0x93, \r
-0x1A, 0xB1, 0xF7, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x1B, 0xB1, 0x6F, 0xFF, 0xED, 0x2F, 0x90, 0x93, \r
-0x1C, 0xF1, 0x37, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x1D, 0xF0, 0x91, 0x93, 0xFF, 0xAE, 0x05, 0xED, \r
-0x2F, 0x90, 0x93, 0x1E, 0xF0, 0x22, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x02, 0x06, 0xA2, 0x12, 0xA0, \r
-0x62, 0x90, 0x93, 0x1F, 0x12, 0x77, 0xC2, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x20, 0xB1, 0xB3, 0xFF, \r
-0xED, 0x2F, 0x90, 0x93, 0x21, 0xB1, 0xF7, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x22, 0xB1, 0x6F, 0xFF, \r
-0xED, 0x2F, 0x90, 0x93, 0x23, 0xF1, 0x37, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x24, 0xF0, 0x91, 0x93, \r
-0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x93, 0x25, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x90, 0x06, 0x74, \r
-0x12, 0x77, 0xC2, 0x90, 0x06, 0x75, 0xB1, 0xB3, 0x90, 0x06, 0x76, 0xB1, 0xF7, 0x90, 0x06, 0x77, \r
-0xF0, 0x90, 0x06, 0x70, 0xEF, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0x04, 0xF0, 0xA3, 0x74, 0x80, 0xF0, \r
-0x7F, 0x01, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0x90, 0x93, 0xA8, 0xEF, 0xF0, 0xA3, 0x12, 0x44, 0x12, \r
-0x90, 0x93, 0xA9, 0x12, 0x56, 0x7A, 0xD1, 0xE1, 0x24, 0x02, 0xD1, 0xF6, 0x24, 0x04, 0xD1, 0xD8, \r
-0x24, 0x03, 0xD1, 0xF6, 0x24, 0x08, 0xD1, 0xD8, 0x24, 0x04, 0xD1, 0xF6, 0x24, 0x0C, 0xD1, 0xD8, \r
-0x24, 0x05, 0xFF, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xAC, 0xD1, 0x3A, 0x90, 0x93, 0xA8, 0xE0, 0xFE, \r
-0x44, 0x10, 0x90, 0x93, 0xAC, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, \r
-0xEE, 0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xAC, 0xD1, 0x3A, 0x90, 0x93, \r
-0xAC, 0x74, 0xFF, 0x12, 0x4D, 0xB3, 0xD1, 0xED, 0x04, 0xFF, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xAC, \r
-0xD1, 0x3A, 0x90, 0x06, 0x72, 0xE4, 0xF0, 0x22, 0xF9, 0xE4, 0x3A, 0x8B, 0x40, 0xF5, 0x41, 0x89, \r
-0x42, 0x75, 0x43, 0x04, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xAC, 0x12, 0x35, 0x26, 0x90, 0x93, 0xA8, \r
-0xE0, 0x75, 0xF0, 0x08, 0xA4, 0x22, 0xFF, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xAC, 0xD1, 0x3A, 0x90, \r
-0x93, 0xA9, 0x12, 0x44, 0x09, 0xE9, 0x22, 0xF1, 0x3E, 0x12, 0x89, 0xD2, 0xF1, 0x53, 0x31, 0x74, \r
-0x4E, 0xF0, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x1E, 0x12, 0x77, 0xC3, 0x90, 0x93, 0x2D, 0xB1, 0xB3, \r
-0x90, 0x93, 0x2E, 0xF0, 0x12, 0x06, 0x89, 0x54, 0x04, 0xFF, 0x90, 0x93, 0x2C, 0xE0, 0x54, 0xFB, \r
-0xB1, 0xF6, 0x90, 0x93, 0x2F, 0xF0, 0x22, 0xF0, 0x90, 0x00, 0x05, 0x02, 0x06, 0xA2, 0x90, 0x93, \r
-0x4A, 0x02, 0x44, 0x12, 0x90, 0x8E, 0xC4, 0xE0, 0x13, 0x13, 0x22, 0x12, 0x06, 0xCF, 0x90, 0x94, \r
-0xC1, 0xE0, 0x22, 0x90, 0x93, 0x4A, 0x12, 0x44, 0x09, 0x12, 0x06, 0x89, 0xFF, 0x54, 0x01, 0xFE, \r
-0x22, 0xB1, 0xB4, 0xFF, 0x30, 0xE0, 0x1C, 0x12, 0x06, 0x89, 0x90, 0x8E, 0xB9, 0x12, 0x77, 0xC2, \r
-0x90, 0x8E, 0xBA, 0xF0, 0xEF, 0x54, 0xFE, 0xFF, 0xA3, 0xE0, 0x54, 0x01, 0xB1, 0xF6, 0x90, 0x8E, \r
-0xBC, 0xF0, 0x22, 0x90, 0x8E, 0xB9, 0x74, 0x05, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0xA3, 0xE0, 0x54, \r
-0x01, 0x44, 0x1E, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xF1, 0x59, 0x90, 0x8E, 0xC0, 0xF1, 0xCC, \r
-0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x4F, 0x12, 0x77, 0xC2, 0x90, 0x8E, 0xC1, 0xB1, 0xB3, 0x90, \r
-0x8E, 0xC2, 0xF0, 0x90, 0x8E, 0xC1, 0xE0, 0x90, 0x8E, 0xC3, 0xF0, 0x90, 0x8E, 0xC0, 0xE0, 0x54, \r
-0x01, 0xFF, 0x02, 0x76, 0x34, 0xF9, 0xE4, 0x3A, 0xFA, 0x02, 0x06, 0x89, 0xE0, 0x54, 0xFE, 0x4E, \r
-0xFE, 0xF0, 0xEF, 0x22, 0x54, 0x04, 0xFD, 0xEF, 0x54, 0xFB, 0x4D, 0x22, 0x54, 0x10, 0xFD, 0xEF, \r
-0x54, 0xEF, 0x4D, 0xFF, 0x22, 0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0x4D, 0xFF, 0x22, 0xF0, 0x90, \r
-0x04, 0xE0, 0xE0, 0x90, 0x8E, 0x12, 0x22, 0x32, 0x90, 0x95, 0x27, 0xEF, 0xF0, 0x7F, 0x02, 0x12, \r
-0x48, 0x12, 0x90, 0x8D, 0x01, 0xE0, 0xFF, 0x90, 0x95, 0x27, 0xE0, 0xFE, 0xEF, 0x4E, 0x90, 0x8D, \r
-0x01, 0xF0, 0x22, 0x90, 0x93, 0x55, 0x74, 0x12, 0xF0, 0x90, 0x93, 0x63, 0x74, 0x05, 0xF0, 0x90, \r
-0x93, 0x57, 0xEF, 0x71, 0x9D, 0x90, 0x93, 0x53, 0xE0, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x93, 0x54, \r
-0xE0, 0x90, 0x93, 0x5B, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x55, 0x11, 0xC5, 0x7F, 0x04, 0x80, \r
-0xB7, 0x11, 0xBE, 0x7F, 0xF5, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x06, 0x90, 0x93, 0x4A, \r
-0xE0, 0xA3, 0xF0, 0x11, 0xBE, 0x7F, 0xF6, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, \r
-0x93, 0x4A, 0xE0, 0x90, 0x93, 0x4C, 0xF0, 0x11, 0xBE, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x34, 0xC1, \r
-0xBF, 0x01, 0x08, 0x90, 0x93, 0x4A, 0xE0, 0x90, 0x93, 0x4D, 0xF0, 0x11, 0xBE, 0x7F, 0xF3, 0x7E, \r
-0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x4A, 0xE0, 0x90, 0x93, 0x4E, 0xF0, 0x11, \r
-0xBE, 0x7F, 0xF2, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x4A, 0xE0, 0x90, \r
-0x93, 0x4F, 0xF0, 0x90, 0x93, 0x4B, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, \r
-0x90, 0x93, 0x53, 0xF0, 0x90, 0x93, 0x4F, 0xE0, 0x90, 0x93, 0x54, 0xF0, 0x01, 0x13, 0x7B, 0x01, \r
-0x7A, 0x93, 0x79, 0x4A, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8D, 0xF6, 0xE0, \r
-0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x8D, 0xF7, 0xE0, \r
-0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x09, 0x90, 0x01, 0xC1, 0xE0, \r
-0x44, 0x02, 0xF0, 0x80, 0x28, 0xC0, 0x01, 0x90, 0x8D, 0xF7, 0xE0, 0x71, 0xCD, 0xA8, 0x01, 0xFC, \r
-0x7D, 0x01, 0xD0, 0x01, 0x7E, 0x00, 0x7F, 0x0F, 0x12, 0x06, 0x63, 0x90, 0x8D, 0xF7, 0x71, 0x7E, \r
-0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x8D, 0xF7, 0xF0, 0xD0, 0xD0, 0x92, \r
-0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x66, 0xE0, 0xFF, 0x12, 0x9F, \r
-0x9E, 0xEF, 0x70, 0x02, 0x21, 0xDB, 0x90, 0x94, 0x67, 0xE0, 0xFB, 0xD3, 0x94, 0x00, 0x40, 0x1A, \r
-0x90, 0x94, 0x99, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x0F, 0xAF, 0x03, 0xE4, 0xFC, 0xFD, 0xFE, \r
-0x12, 0x5F, 0xA9, 0x7F, 0x08, 0x7E, 0x0E, 0x12, 0x5E, 0xCE, 0x90, 0x94, 0x66, 0xE0, 0xFF, 0x90, \r
-0x06, 0x33, 0xF0, 0x71, 0xA5, 0xE4, 0xFB, 0xFD, 0x51, 0x4A, 0x90, 0x94, 0x69, 0xE0, 0x60, 0x07, \r
-0x90, 0x8D, 0xFC, 0xE0, 0xFF, 0x51, 0x20, 0x71, 0x85, 0x30, 0xE0, 0x39, 0x90, 0x90, 0xCB, 0xE0, \r
-0x60, 0x33, 0xE4, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x90, 0xCB, 0xE0, 0xFF, 0x90, 0x93, 0x48, 0xE0, \r
-0xC3, 0x9F, 0x50, 0x21, 0x7F, 0x03, 0x7E, 0x00, 0x12, 0x3D, 0xC2, 0x90, 0x93, 0x48, 0xE0, 0x24, \r
-0x0A, 0x71, 0x8D, 0xE0, 0xFF, 0x51, 0x20, 0x90, 0x01, 0xA6, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x48, \r
-0xE0, 0x04, 0xF0, 0x80, 0xD2, 0x90, 0x94, 0x68, 0xE0, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x94, 0x53, \r
-0xE0, 0x04, 0xF0, 0xE0, 0xFF, 0x12, 0x9F, 0x6D, 0x90, 0x93, 0x47, 0x12, 0x5D, 0x80, 0x90, 0x94, \r
-0xE5, 0x12, 0x08, 0x6D, 0x71, 0x95, 0x12, 0x50, 0x4C, 0x80, 0x40, 0xE4, 0x90, 0x94, 0x53, 0xF0, \r
-0x90, 0x94, 0x6F, 0xF0, 0x90, 0x06, 0x32, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x5F, 0x3A, 0xE4, 0xFF, \r
-0x12, 0x73, 0x2E, 0xBF, 0x01, 0x0C, 0x90, 0x94, 0x6B, 0xE0, 0xFD, 0x7F, 0x02, 0x12, 0x4E, 0xB5, \r
-0x71, 0xAE, 0x90, 0x93, 0x49, 0x74, 0x07, 0xF0, 0x90, 0x93, 0x57, 0xF0, 0x7B, 0x01, 0x7A, 0x93, \r
-0x79, 0x49, 0x11, 0xC5, 0x7F, 0x04, 0x12, 0x7F, 0xF8, 0x71, 0x49, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x58, 0xEF, 0xF0, 0x12, 0x8F, 0x6B, 0xBF, \r
-0x01, 0x13, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x93, 0x58, 0x12, 0x64, 0x32, 0x90, \r
-0x93, 0x59, 0x12, 0x57, 0xFC, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
-0xD0, 0x90, 0x95, 0x05, 0xEF, 0xF0, 0xED, 0x64, 0x01, 0x70, 0x33, 0xEB, 0xB4, 0x01, 0x07, 0xE0, \r
-0x24, 0x02, 0xF5, 0x5A, 0x80, 0x08, 0x90, 0x95, 0x05, 0xE0, 0x24, 0xFE, 0xF5, 0x5A, 0x90, 0x94, \r
-0x87, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0xAF, 0x5A, 0x71, 0x34, 0xE4, 0xFF, 0x51, 0xBE, \r
-0x90, 0x94, 0x87, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0xAF, 0x5A, 0x80, 0x25, 0x90, 0x94, \r
-0x87, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0x90, 0x95, 0x05, 0x12, 0x5D, 0x80, 0x71, 0x38, \r
-0xE4, 0xFF, 0x51, 0xBE, 0x90, 0x94, 0x87, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0x90, 0x95, \r
-0x05, 0xE0, 0xFF, 0x71, 0x34, 0x7F, 0x01, 0x51, 0xBE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, \r
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x85, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x94, 0x84, \r
-0xEF, 0xF0, 0xA3, 0xA3, 0xE0, 0xFD, 0x12, 0x3E, 0x02, 0x90, 0x94, 0x8F, 0x12, 0x08, 0x6D, 0x90, \r
-0x94, 0x87, 0x12, 0x43, 0xE5, 0x12, 0x08, 0x3A, 0x90, 0x94, 0x8F, 0x71, 0x43, 0xC0, 0x04, 0xC0, \r
-0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x94, 0x87, 0x12, 0x43, 0xE5, 0x90, 0x94, 0x8B, 0x71, 0x43, \r
-0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0xC7, 0x90, 0x94, 0x93, 0x12, 0x08, \r
-0x6D, 0x90, 0x94, 0x85, 0xA3, 0xE0, 0xFD, 0xC0, 0x05, 0x90, 0x94, 0x93, 0x12, 0x43, 0xE5, 0x90, \r
-0xAA, 0x96, 0x12, 0x08, 0x6D, 0x90, 0x94, 0x84, 0xE0, 0xFF, 0xD0, 0x05, 0x12, 0x3D, 0x09, 0xD0, \r
-0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFC, 0xFD, 0xFE, 0x90, 0x94, 0x8B, 0x12, 0x08, 0x6D, 0x7D, 0x18, \r
-0x7C, 0x00, 0x22, 0x12, 0x43, 0xF1, 0x02, 0x43, 0xBA, 0x90, 0x8D, 0xFB, 0x12, 0x77, 0x4B, 0x30, \r
-0xE0, 0x23, 0x71, 0xC2, 0x60, 0x0B, 0x71, 0xB8, 0x40, 0x07, 0x71, 0x76, 0x90, 0x90, 0xD6, 0x80, \r
-0x05, 0x71, 0x76, 0x90, 0x90, 0xCE, 0x12, 0x43, 0xF1, 0x12, 0x42, 0x9D, 0x90, 0x94, 0xE5, 0x12, \r
-0x08, 0x6D, 0x12, 0x50, 0x45, 0x22, 0xE4, 0x7F, 0xE8, 0x7E, 0x03, 0xFD, 0xFC, 0x22, 0xE0, 0x04, \r
-0xF0, 0xE0, 0x7F, 0x00, 0x22, 0x90, 0x8E, 0xC4, 0xE0, 0xC4, 0x54, 0x0F, 0x22, 0xF5, 0x82, 0xE4, \r
-0x34, 0x91, 0xF5, 0x83, 0x22, 0xE4, 0x90, 0x94, 0xE9, 0xF0, 0x7F, 0x04, 0x22, 0xF0, 0xA3, 0xED, \r
-0xF0, 0xA3, 0xEB, 0xF0, 0x22, 0x90, 0x94, 0x5E, 0xE0, 0x90, 0x95, 0x08, 0xF0, 0x22, 0x12, 0x4F, \r
-0xE9, 0x7D, 0x04, 0x7F, 0x01, 0x02, 0x4E, 0xB5, 0x90, 0x93, 0x12, 0x12, 0x43, 0xF1, 0xD3, 0x02, \r
-0x43, 0xD4, 0x90, 0x90, 0xD2, 0x12, 0x43, 0xE5, 0xEC, 0x4D, 0x4E, 0x4F, 0x22, 0x75, 0xF0, 0x0F, \r
-0xA4, 0x24, 0x60, 0xF9, 0x74, 0x8D, 0x35, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
-0xE4, 0xFF, 0x90, 0x8D, 0xF7, 0xE0, 0xFE, 0x90, 0x8D, 0xF6, 0xE0, 0xFD, 0xB5, 0x06, 0x04, 0x7E, \r
-0x01, 0x80, 0x02, 0x7E, 0x00, 0xEE, 0x64, 0x01, 0x60, 0x3F, 0xED, 0x71, 0xCD, 0xFA, 0x7B, 0x01, \r
-0x91, 0x3E, 0x7F, 0x01, 0xEF, 0x60, 0x32, 0x90, 0x8D, 0xF6, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, \r
-0x02, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x8D, 0xF6, 0xF0, 0x90, 0x8D, 0xF7, \r
-0xE0, 0xFF, 0x90, 0x8D, 0xF6, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, \r
+0xAF, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0x12, 0x96, 0x91, 0xE5, 0x19, 0x30, 0xE3, 0x02, 0x51, 0x89, \r
+0xE5, 0x19, 0x30, 0xE4, 0x02, 0x31, 0x50, 0xE5, 0x19, 0x30, 0xE5, 0x03, 0x12, 0x96, 0xEE, 0xE5, \r
+0x1B, 0x30, 0xE0, 0x03, 0x12, 0x57, 0xF9, 0xE5, 0x1B, 0x30, 0xE1, 0x02, 0xB1, 0x9A, 0xE5, 0x1B, \r
+0x30, 0xE2, 0x02, 0x51, 0x95, 0xE5, 0x1B, 0x30, 0xE3, 0x02, 0x51, 0xA6, 0xE5, 0x1B, 0x30, 0xE4, \r
+0x02, 0x51, 0xBE, 0xE5, 0x1B, 0x30, 0xE5, 0x03, 0x12, 0x97, 0x2A, 0xE5, 0x1B, 0x30, 0xE6, 0x02, \r
+0xF1, 0x84, 0xE5, 0x1C, 0x30, 0xE1, 0x03, 0x12, 0x97, 0xC2, 0x74, 0xAF, 0x04, 0x90, 0x01, 0xC4, \r
+0xF0, 0x74, 0x68, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, \r
+0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, \r
+0x31, 0x63, 0x7F, 0x02, 0x8F, 0x26, 0x7F, 0x02, 0x12, 0x48, 0x20, 0x90, 0x8D, 0x01, 0xE0, 0x45, \r
+0x26, 0xF0, 0x22, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x95, 0x46, 0xF0, 0x90, 0x95, 0x46, \r
+0xE0, 0xFD, 0x70, 0x02, 0x41, 0x5E, 0x90, 0x8D, 0x8F, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, \r
+0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x8D, 0x90, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, \r
+0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x95, \r
+0x42, 0x12, 0x8B, 0x36, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, \r
+0x70, 0x02, 0x41, 0x40, 0xE4, 0x90, 0x95, 0x47, 0xF0, 0x90, 0x95, 0x47, 0xE0, 0xF9, 0xC3, 0x94, \r
+0x04, 0x50, 0x31, 0x51, 0x5F, 0xA4, 0xFF, 0xE9, 0xFD, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35, 0xF0, \r
+0xFE, 0x74, 0xD0, 0x51, 0x77, 0x90, 0x8D, 0x3F, 0x51, 0x67, 0x51, 0x5F, 0xA4, 0x2D, 0xFF, 0xEC, \r
+0x35, 0xF0, 0xFE, 0x74, 0xF0, 0x51, 0x77, 0x90, 0x8D, 0x43, 0x51, 0x67, 0x90, 0x95, 0x47, 0xE0, \r
+0x04, 0xF0, 0x80, 0xC5, 0x90, 0x95, 0x46, 0xE0, 0xFF, 0x90, 0x95, 0x42, 0x12, 0x4B, 0x23, 0x80, \r
+0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x95, 0x46, 0xF0, 0x90, 0x95, 0x42, 0xE0, 0xFF, \r
+0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, \r
+0x95, 0x42, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x90, 0x8D, 0x90, 0x12, 0x81, 0x0E, 0xB4, \r
+0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x70, 0x02, 0x21, 0x6D, 0xE4, 0x90, 0x8D, 0x90, 0xF0, 0x21, 0x6D, \r
+0x90, 0x01, 0xC0, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x95, 0x42, 0xE0, 0x44, 0x80, 0x90, 0x00, 0x8A, \r
+0xF0, 0x51, 0x5F, 0x90, 0x01, 0xD0, 0x12, 0x44, 0x0B, 0xE0, 0x90, 0x01, 0xC3, 0xF0, 0x22, 0x90, \r
+0x95, 0x42, 0xE0, 0x75, 0xF0, 0x04, 0x22, 0x12, 0x44, 0x0B, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE4, \r
+0x35, 0x83, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x2F, 0xF5, 0x82, 0x74, 0x01, 0x3E, 0xF5, 0x83, 0xE0, \r
+0xFF, 0x90, 0x8D, 0x90, 0xE0, 0x75, 0xF0, 0x08, 0x22, 0x90, 0x8E, 0xAF, 0xE0, 0x30, 0xE0, 0x04, \r
+0x7F, 0x10, 0x31, 0x54, 0x22, 0x90, 0x93, 0x4B, 0xE0, 0x04, 0xF0, 0x90, 0x8E, 0x4A, 0xE0, 0x64, \r
+0x02, 0x60, 0x02, 0x71, 0x02, 0x22, 0x51, 0xB6, 0x70, 0x0B, 0x90, 0x8E, 0x47, 0xE0, 0x60, 0x05, \r
+0xB1, 0x0E, 0x12, 0x50, 0x0B, 0x22, 0xE4, 0xFF, 0x51, 0xD9, 0xEF, 0x64, 0x01, 0x22, 0x51, 0xB6, \r
+0x70, 0x16, 0x90, 0x8E, 0x47, 0xE0, 0x60, 0x10, 0xB1, 0x0E, 0xF0, 0x90, 0x8E, 0x42, 0xE0, 0xD1, \r
+0xEE, 0x54, 0x07, 0x70, 0x03, 0x12, 0x58, 0x58, 0x22, 0x12, 0x8A, 0x4B, 0xFE, 0xEF, 0x54, 0x07, \r
+0xFF, 0x12, 0x89, 0xE6, 0xE0, 0xFD, 0x7C, 0x00, 0x12, 0x8B, 0x38, 0x80, 0x05, 0xC3, 0x33, 0xCE, \r
+0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5C, 0xFE, 0xEF, 0x5D, 0x4E, 0x7F, 0x00, 0x60, 0x02, 0x7F, \r
+0x01, 0x22, 0x90, 0x05, 0x62, 0xE0, 0xFE, 0x90, 0x05, 0x61, 0xE0, 0xFD, 0xED, 0x78, 0x02, 0xCE, \r
+0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x12, 0x9C, 0xAD, 0x51, 0xB6, 0x60, 0x02, 0x61, 0xC6, \r
+0x90, 0x8E, 0x47, 0xE0, 0x70, 0x02, 0x61, 0xC6, 0xD1, 0xE5, 0x64, 0x01, 0x70, 0x22, 0x90, 0x06, \r
+0xAB, 0xE0, 0x90, 0x8E, 0x4E, 0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x8E, 0x4D, 0xF0, 0xA3, 0xE0, \r
+0xFF, 0x70, 0x08, 0x90, 0x8E, 0x4D, 0xE0, 0xFE, 0xFF, 0x80, 0x00, 0x90, 0x8E, 0x4E, 0xEF, 0xF0, \r
+0x12, 0x99, 0x36, 0xE4, 0x90, 0x8E, 0x50, 0xF0, 0x12, 0x9B, 0x48, 0xB1, 0x0E, 0xD1, 0xF0, 0x54, \r
+0xEF, 0xF0, 0xD1, 0xE5, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x97, 0x64, 0xD1, 0x8E, 0x30, \r
+0xE0, 0x51, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x23, 0xD1, 0xDD, 0x6F, 0x70, 0x43, \r
+0x90, 0x8E, 0x43, 0xE0, 0x44, 0x40, 0xF0, 0x12, 0xA2, 0x26, 0x71, 0xC7, 0xB1, 0x04, 0x91, 0x63, \r
+0x7D, 0x02, 0x7F, 0x02, 0x91, 0x67, 0x90, 0x8E, 0x4E, 0xE0, 0x14, 0xF0, 0x80, 0x25, 0x12, 0xA6, \r
+0xCC, 0x64, 0x01, 0x70, 0x1E, 0xD1, 0xDD, 0xFE, 0x6F, 0x60, 0x18, 0x90, 0x05, 0x73, 0xE0, 0xFF, \r
+0xEE, 0x6F, 0x60, 0x0F, 0x12, 0x9E, 0xCD, 0x30, 0xE0, 0x09, 0xEF, 0x54, 0xBF, 0x71, 0xC7, 0x91, \r
+0x8C, 0x91, 0x74, 0x12, 0xA6, 0xC4, 0x22, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, \r
+0x03, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x5A, 0xEF, 0xF0, 0x90, 0x8E, \r
+0x2C, 0xD1, 0x91, 0x30, 0xE0, 0x39, 0x12, 0xA6, 0x20, 0x60, 0x10, 0x12, 0xA6, 0x16, 0x40, 0x0B, \r
+0xE4, 0x7F, 0x0A, 0xFE, 0xFD, 0xFC, 0x90, 0x90, 0xEE, 0x80, 0x09, 0xE4, 0x7F, 0x0A, 0xFE, 0xFD, \r
+0xFC, 0x90, 0x90, 0xE6, 0x12, 0x43, 0xFF, 0x12, 0x42, 0xAB, 0xC0, 0x07, 0x90, 0x8E, 0xAD, 0xE0, \r
+0xFB, 0xE4, 0xFA, 0xF9, 0xF8, 0xD0, 0x07, 0x12, 0x43, 0x36, 0x90, 0x8E, 0xAE, 0xEF, 0xF0, 0x90, \r
+0x95, 0x5A, 0xE0, 0x64, 0x01, 0x70, 0x18, 0xD1, 0xD5, 0x60, 0x09, 0x71, 0xCB, 0xB1, 0x04, 0x12, \r
+0xA6, 0x70, 0x80, 0x06, 0x71, 0xCB, 0x91, 0x8C, 0x91, 0x5D, 0x12, 0x5F, 0xD3, 0x80, 0x19, 0xD1, \r
+0xD5, 0x60, 0x06, 0x71, 0xCB, 0xB1, 0x04, 0x80, 0x04, 0x71, 0xCB, 0x91, 0x8C, 0x91, 0x7A, 0x7D, \r
+0x01, 0x7F, 0x02, 0x91, 0x7E, 0x12, 0xA2, 0x5B, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7D, 0x02, 0x7F, \r
+0x02, 0x91, 0x67, 0x7D, 0x01, 0x7F, 0x02, 0x74, 0x15, 0x12, 0xA6, 0xF4, 0xFE, 0xF6, 0x74, 0x30, \r
+0xB1, 0x1D, 0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x91, 0x7E, 0x7D, 0x02, 0x7F, 0x02, 0x74, 0x15, \r
+0x2F, 0xF8, 0xE6, 0x4D, 0xFE, 0xF6, 0x74, 0x30, 0xB1, 0x1D, 0xF0, 0x22, 0x74, 0x1D, 0x12, 0xA6, \r
+0xF4, 0xB1, 0x19, 0xF0, 0x22, 0xEF, 0x70, 0x32, 0x7D, 0x78, 0x7F, 0x02, 0x91, 0x67, 0x7D, 0x02, \r
+0x7F, 0x03, 0x91, 0x67, 0x7D, 0xC8, 0x7F, 0x02, 0x91, 0x8C, 0xB1, 0x0E, 0xF0, 0xE4, 0xFF, 0x51, \r
+0xD9, 0xEF, 0x70, 0x0A, 0xD1, 0xF9, 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0x80, 0x07, 0x7D, 0x01, \r
+0x7F, 0x0C, 0x12, 0x58, 0x65, 0xD1, 0xFE, 0x02, 0x8F, 0xA9, 0x90, 0x01, 0x36, 0x74, 0x78, 0xF0, \r
+0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x78, 0xFF, 0x91, 0x7E, 0x7D, 0x02, 0x7F, 0x03, 0x91, 0x7E, 0x90, \r
+0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x9B, 0x48, 0xE4, 0xFF, 0x51, 0xD9, 0xBF, 0x01, 0x10, \r
+0xB1, 0x92, 0x90, 0x8E, 0x4A, 0xE0, 0x20, 0xE2, 0x0A, 0x7D, 0x01, 0x7F, 0x04, 0x02, 0x58, 0x65, \r
+0x12, 0xA6, 0xC4, 0x22, 0x74, 0x1D, 0x2F, 0xF8, 0xE6, 0x4D, 0xB1, 0x19, 0xF0, 0x22, 0x90, 0x01, \r
+0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0x22, 0xFE, 0xF6, 0x74, 0x38, 0x2F, 0xF5, 0x82, \r
+0xE4, 0x34, 0x01, 0xF5, 0x83, 0xEE, 0x22, 0xD1, 0x8E, 0x30, 0xE0, 0x0F, 0xEF, 0xC4, 0x13, 0x13, \r
+0x54, 0x03, 0x30, 0xE0, 0x06, 0x7D, 0x02, 0x7F, 0x02, 0x91, 0x67, 0x90, 0x8E, 0x42, 0x12, 0x9E, \r
+0xD0, 0x30, 0xE0, 0x09, 0xEF, 0xD1, 0xEE, 0x54, 0x07, 0x70, 0x46, 0x80, 0x41, 0x90, 0x8E, 0x50, \r
+0xE0, 0x04, 0xF0, 0x90, 0x8E, 0x4B, 0xE0, 0x54, 0xEF, 0xF0, 0x12, 0x9B, 0x52, 0x40, 0x2F, 0x51, \r
+0xB6, 0x70, 0x2E, 0x12, 0x7F, 0xDE, 0x70, 0x05, 0x12, 0x98, 0xF3, 0x80, 0x25, 0x12, 0x98, 0xF3, \r
+0x90, 0x8E, 0x51, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94, 0x02, 0x40, 0x09, 0xB1, 0x92, 0xE4, 0x90, \r
+0x8E, 0x51, 0xF0, 0x80, 0x03, 0x12, 0x5F, 0x7E, 0xE4, 0x90, 0x8E, 0x50, 0xF0, 0x22, 0x12, 0x58, \r
+0x58, 0x22, 0x90, 0x8E, 0x43, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0x90, 0x8E, 0x47, 0xE0, 0x70, 0x02, \r
+0xC1, 0x29, 0x90, 0x8E, 0x5E, 0xE0, 0x04, 0x12, 0x51, 0x0C, 0x12, 0x43, 0xD5, 0xC0, 0x04, 0xC0, \r
+0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0x12, 0x51, 0x26, 0x78, 0x10, 0x12, 0x08, 0x5A, \r
+0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0xD5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, \r
+0x06, 0xC0, 0x07, 0xA3, 0x12, 0x51, 0x26, 0x78, 0x18, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, \r
+0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0xD5, 0x90, 0x8E, 0x92, 0x12, 0xA2, 0x3C, 0x54, 0x7F, 0xF0, \r
+0xA3, 0xE0, 0x30, 0xE0, 0x0F, 0x12, 0x9B, 0x03, 0x90, 0x95, 0x31, 0x74, 0x05, 0xF0, 0x12, 0x98, \r
+0x23, 0x12, 0x9B, 0x40, 0xD1, 0x8E, 0x30, 0xE0, 0x09, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x02, \r
+0x91, 0x5D, 0x90, 0x95, 0x53, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x80, 0x40, 0x0B, 0x90, 0x01, \r
+0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x12, 0x8A, 0x52, 0xD1, 0x99, 0xE4, 0x90, \r
+0x93, 0x44, 0xF0, 0xF1, 0x73, 0x12, 0xA5, 0xE9, 0x30, 0xE0, 0x52, 0x90, 0x90, 0x8C, 0xE0, 0xFE, \r
+0xA3, 0xE0, 0xFF, 0x7C, 0x00, 0x7D, 0x64, 0x12, 0x07, 0x15, 0x90, 0x90, 0xE0, 0xE0, 0x6E, 0x70, \r
+0x03, 0xA3, 0xE0, 0x6F, 0x60, 0x0A, 0x90, 0x90, 0xE0, 0xE4, 0x75, 0xF0, 0x01, 0x02, 0x08, 0xD6, \r
+0x90, 0x90, 0x90, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x90, 0x9E, 0xE0, 0xB5, 0x06, 0x14, 0xA3, \r
+0xE0, 0xB5, 0x07, 0x0F, 0xEF, 0x4E, 0x60, 0x0B, 0x90, 0x01, 0xC7, 0x74, 0x31, 0xF0, 0x7F, 0x01, \r
+0x02, 0x67, 0xAD, 0x12, 0x9B, 0xD7, 0xE4, 0x90, 0x90, 0xE0, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x8E, \r
+0x43, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x22, 0x90, 0x93, 0x41, 0xE0, 0x30, 0xE0, 0x34, \r
+0x51, 0xB6, 0x70, 0x30, 0x90, 0x95, 0x56, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x93, \r
+0x43, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x95, 0x56, 0xF0, 0x90, 0x93, 0x43, 0xE0, 0xFF, 0x90, 0x93, \r
+0x42, 0xE0, 0xD3, 0x9F, 0x50, 0x0E, 0x90, 0x93, 0x44, 0xE0, 0x70, 0x08, 0xE4, 0x90, 0x93, 0x43, \r
+0xF0, 0x12, 0x9E, 0xB5, 0x22, 0x90, 0x8E, 0xAD, 0xE0, 0x90, 0x01, 0x3F, 0x22, 0x90, 0x8E, 0x4D, \r
+0xE0, 0xFF, 0xA3, 0xE0, 0x22, 0x90, 0x8E, 0x45, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x22, 0x54, 0xFB, \r
+0xF0, 0x90, 0x8E, 0x4B, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x12, 0x4E, 0x02, 0xF1, 0x66, 0x90, 0x8E, \r
+0x42, 0xE0, 0x54, 0xF7, 0xF0, 0x22, 0x8B, 0x51, 0x8A, 0x52, 0x89, 0x53, 0x12, 0x7A, 0x98, 0xFF, \r
+0xF5, 0x55, 0x12, 0x06, 0x89, 0xFE, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0x12, 0x79, 0xA1, 0xF5, 0x56, \r
+0x80, 0x02, 0x8F, 0x56, 0x85, 0x55, 0x54, 0xE5, 0x54, 0xD3, 0x95, 0x56, 0x50, 0x25, 0xAB, 0x51, \r
+0xAA, 0x52, 0xA9, 0x53, 0x12, 0x06, 0x89, 0x54, 0x01, 0xFD, 0xAF, 0x54, 0x12, 0x89, 0xA6, 0xAF, \r
+0x54, 0x51, 0xD9, 0xEF, 0xAF, 0x54, 0x70, 0x05, 0x12, 0x8A, 0xDB, 0x80, 0x02, 0xF1, 0xC0, 0x05, \r
+0x54, 0x80, 0xD4, 0xE5, 0x55, 0x70, 0x0E, 0xFF, 0x51, 0xD9, 0xEF, 0x70, 0x08, 0xD1, 0xF9, 0x54, \r
+0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0x22, 0x12, 0x8F, 0xA1, 0x12, 0x8F, 0x77, 0x7D, 0x0C, 0x7F, 0x01, \r
+0x02, 0x5F, 0x02, 0x90, 0x8E, 0xAB, 0xE0, 0x30, 0xE0, 0x09, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, \r
+0x02, 0x91, 0x5D, 0x22, 0xE4, 0xFF, 0x51, 0xD9, 0xBF, 0x01, 0x10, 0x90, 0x8E, 0x47, 0xE0, 0x60, \r
+0x0A, 0x12, 0x97, 0xBA, 0x54, 0x07, 0x70, 0x03, 0x12, 0x58, 0x58, 0x22, 0x90, 0x8E, 0x42, 0xE0, \r
+0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x8E, 0x50, 0xF0, 0xA3, 0xF0, 0x90, 0x8E, 0x4B, 0xF0, 0x90, 0x8E, \r
+0x43, 0xE0, 0x54, 0xF7, 0xF0, 0x54, 0xBF, 0xF0, 0x91, 0x74, 0x7D, 0x10, 0x7F, 0x03, 0x81, 0x8C, \r
+0xE4, 0xFD, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x44, 0xEF, 0xF0, 0xA3, 0xED, \r
+0xF0, 0x7D, 0x44, 0x7F, 0x6F, 0x12, 0x5A, 0x57, 0x12, 0x5D, 0x30, 0x90, 0x95, 0x45, 0xE0, 0x90, \r
+0x95, 0x44, 0xB4, 0x01, 0x08, 0x12, 0xA5, 0xFF, 0x44, 0x04, 0xF0, 0x80, 0x06, 0x12, 0xA5, 0xFF, \r
+0x54, 0xFB, 0xF0, 0x12, 0x8F, 0x77, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, \r
+0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, \r
+0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0xFB, 0xF0, 0x74, 0x6F, \r
+0xA3, 0xF0, 0x12, 0x96, 0xBE, 0xE5, 0x21, 0x30, 0xE0, 0x02, 0xF1, 0xE9, 0xE5, 0x21, 0x30, 0xE1, \r
+0x03, 0x12, 0x97, 0xCC, 0xE5, 0x21, 0x30, 0xE2, 0x03, 0x12, 0x97, 0xD6, 0xE5, 0x22, 0x30, 0xE0, \r
+0x03, 0x12, 0x97, 0xED, 0xE5, 0x24, 0x30, 0xE1, 0x05, 0x7F, 0x04, 0x12, 0x69, 0x54, 0xE5, 0x24, \r
+0x30, 0xE4, 0x02, 0x11, 0x8B, 0xE5, 0x24, 0x30, 0xE5, 0x03, 0x12, 0x8B, 0x57, 0xE5, 0x24, 0x30, \r
+0xE6, 0x03, 0x12, 0x8B, 0x78, 0x74, 0xFB, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x6F, 0xA3, 0xF0, \r
+0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, \r
+0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x12, 0xA1, 0xAC, 0x12, 0x6C, \r
+0x7A, 0x90, 0x8E, 0xAB, 0xE0, 0x30, 0xE0, 0x32, 0x12, 0xA6, 0x70, 0x90, 0x8E, 0xAE, 0xE0, 0x60, \r
+0x05, 0x14, 0xF0, 0x02, 0x5F, 0xD3, 0x12, 0xA6, 0x4B, 0xE4, 0xFF, 0x12, 0x6B, 0xD2, 0x90, 0x8E, \r
+0x2C, 0xE0, 0xFF, 0x20, 0xE0, 0x08, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x0C, 0x90, 0x95, \r
+0x01, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x01, 0x11, 0xCB, 0x22, 0xE4, 0x90, 0x95, 0x05, 0xF0, \r
+0x7F, 0x03, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x00, 0xEF, 0xF0, 0xB1, 0x33, \r
+0x90, 0x95, 0x00, 0xE0, 0xFF, 0x31, 0xE1, 0x74, 0x01, 0xF0, 0x90, 0x95, 0x05, 0xE0, 0xFE, 0xEF, \r
+0x31, 0xEF, 0xEE, 0xF0, 0x90, 0x95, 0x00, 0xE0, 0x31, 0x36, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, \r
+0x01, 0x31, 0x2B, 0x78, 0x10, 0x12, 0x08, 0x47, 0xAB, 0x07, 0x31, 0x2B, 0x78, 0x08, 0x12, 0x08, \r
+0x47, 0x90, 0x94, 0xFE, 0xEF, 0xF0, 0x31, 0x2B, 0x90, 0x94, 0xFF, 0xEF, 0xF0, 0x7D, 0x01, 0x7F, \r
+0x50, 0x7E, 0x01, 0x12, 0x50, 0x20, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x95, 0x01, 0x02, 0x43, \r
+0xF3, 0x90, 0x93, 0x60, 0xE0, 0xFB, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x1D, 0xF5, 0x82, 0xE4, 0x34, \r
+0x94, 0xF5, 0x83, 0x22, 0xE4, 0x90, 0x93, 0x60, 0xF0, 0x90, 0x93, 0x60, 0xE0, 0xFF, 0xC3, 0x94, \r
+0x08, 0x40, 0x02, 0x21, 0xD9, 0xEF, 0x31, 0xE1, 0xE0, 0x64, 0x01, 0x70, 0x74, 0x90, 0x93, 0x60, \r
+0xE0, 0x31, 0x36, 0x12, 0x43, 0xF3, 0xE4, 0x7B, 0x01, 0x31, 0xDA, 0x70, 0x3A, 0x90, 0x93, 0x60, \r
+0xE0, 0xFB, 0x31, 0xEF, 0xE0, 0x60, 0x21, 0x14, 0x70, 0x57, 0xEB, 0x75, 0xF0, 0x0A, 0xA4, 0x24, \r
+0x21, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x12, 0x43, 0xF3, 0xEB, 0x31, 0x36, 0x12, 0x08, \r
+0x6D, 0x90, 0x93, 0x60, 0xE0, 0xFF, 0x80, 0x0B, 0x31, 0x31, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, \r
+0x00, 0xAF, 0x03, 0x31, 0xFD, 0x80, 0x2A, 0x90, 0x93, 0x60, 0xE0, 0x31, 0x36, 0x12, 0x43, 0xF3, \r
+0xE4, 0xFB, 0x31, 0xDA, 0x50, 0x1B, 0x31, 0x31, 0x12, 0x43, 0xF3, 0xEF, 0x24, 0xFF, 0xFF, 0xEE, \r
+0x34, 0xFF, 0xFE, 0xED, 0x34, 0xFF, 0xFD, 0xEC, 0x34, 0xFF, 0xFC, 0xEB, 0x31, 0x36, 0x12, 0x08, \r
+0x6D, 0x90, 0x93, 0x60, 0xE0, 0x04, 0xF0, 0x21, 0x49, 0x22, 0xFA, 0xF9, 0xF8, 0xC3, 0x02, 0x43, \r
+0xE2, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x26, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0x75, \r
+0xF0, 0x0A, 0xA4, 0x24, 0x25, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0xEF, 0x24, 0xFC, \r
+0x60, 0x05, 0x04, 0x70, 0x04, 0x80, 0x03, 0x51, 0x82, 0x22, 0xE4, 0x90, 0x93, 0x61, 0xF0, 0x90, \r
+0x94, 0x8B, 0x04, 0xF0, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x93, 0x2A, 0x12, 0x43, \r
+0xF3, 0x12, 0xA6, 0xB4, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93, 0x2A, 0x12, 0x08, 0x6D, \r
+0x12, 0xA4, 0xA4, 0xE4, 0x90, 0x94, 0x6F, 0xF0, 0xFF, 0x71, 0x7D, 0x12, 0x6A, 0xB6, 0x70, 0x28, \r
+0x51, 0x7B, 0x7F, 0x05, 0x7E, 0x00, 0x12, 0x3D, 0xC2, 0x12, 0x5E, 0xF6, 0x90, 0x8E, 0x4A, 0xE0, \r
+0x64, 0x02, 0x60, 0x14, 0x90, 0x93, 0x61, 0xE0, 0x04, 0xF0, 0x12, 0xA6, 0xAD, 0x51, 0x7B, 0x90, \r
+0x93, 0x61, 0xE0, 0xD3, 0x94, 0x0A, 0x40, 0xE4, 0x90, 0x95, 0x01, 0x12, 0x08, 0x79, 0x00, 0x00, \r
+0x00, 0x0A, 0xE4, 0x90, 0x95, 0x05, 0xF0, 0x7F, 0x04, 0x01, 0xD2, 0x7D, 0x01, 0x7F, 0x02, 0x02, \r
+0x58, 0x65, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x82, 0xE0, 0xFF, 0x12, 0xA5, \r
+0x1F, 0xEF, 0x70, 0x02, 0x61, 0x38, 0x90, 0x94, 0x83, 0xE0, 0xFB, 0xD3, 0x94, 0x00, 0x40, 0x1A, \r
+0x90, 0x94, 0xB5, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x0F, 0xAF, 0x03, 0xE4, 0xFC, 0xFD, 0xFE, \r
+0x12, 0x57, 0x9C, 0x7F, 0x08, 0x7E, 0x0E, 0x12, 0x54, 0xE0, 0x90, 0x94, 0x82, 0xE0, 0xFF, 0x90, \r
+0x06, 0x33, 0xF0, 0x12, 0xA6, 0x5E, 0xE4, 0xFB, 0xFD, 0x91, 0x24, 0x90, 0x94, 0x85, 0xE0, 0x60, \r
+0x07, 0x90, 0x8E, 0x2D, 0xE0, 0xFF, 0x71, 0xAE, 0x12, 0x8F, 0xB9, 0x30, 0xE0, 0x3A, 0x90, 0x90, \r
+0xE3, 0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x62, 0xF0, 0x90, 0x90, 0xE3, 0xE0, 0xFF, 0x90, 0x93, \r
+0x62, 0xE0, 0xC3, 0x9F, 0x50, 0x22, 0x7F, 0x03, 0x7E, 0x00, 0x12, 0x3D, 0xC2, 0x90, 0x93, 0x62, \r
+0xE0, 0x24, 0x22, 0x12, 0xA6, 0xA5, 0xE0, 0xFF, 0x71, 0xAE, 0x90, 0x01, 0xA6, 0xE0, 0x04, 0xF0, \r
+0x90, 0x93, 0x62, 0xE0, 0x04, 0xF0, 0x80, 0xD1, 0x90, 0x94, 0x84, 0xE0, 0x90, 0x93, 0x61, 0xF0, \r
+0x90, 0x94, 0x6F, 0xE0, 0x04, 0xF0, 0xE0, 0xFF, 0x71, 0x7D, 0x90, 0x93, 0x61, 0x12, 0x51, 0x26, \r
+0xB1, 0x27, 0x7F, 0x04, 0x11, 0xD2, 0x80, 0x40, 0xE4, 0x90, 0x94, 0x6F, 0xF0, 0x90, 0x94, 0x8B, \r
+0xF0, 0x90, 0x06, 0x32, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x57, 0x2D, 0xE4, 0xFF, 0x12, 0x6A, 0xD9, \r
+0xBF, 0x01, 0x0C, 0x90, 0x94, 0x87, 0xE0, 0xFD, 0x7F, 0x02, 0x12, 0x5F, 0x02, 0xB1, 0x1D, 0x90, \r
+0x93, 0x63, 0x74, 0x07, 0xF0, 0x90, 0x93, 0x71, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x63, 0x12, \r
+0x80, 0xB1, 0x7F, 0x04, 0xF1, 0xEF, 0x71, 0xE4, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x72, 0xEF, 0xF0, 0x12, 0x82, 0xC1, 0x74, 0x10, 0x2F, 0xFF, \r
+0x90, 0x93, 0x72, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0x2F, 0xFF, 0x12, 0x5E, 0xE8, 0x75, 0x43, 0x04, \r
+0x7B, 0x01, 0x7A, 0x94, 0x79, 0x82, 0x12, 0x35, 0x26, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, \r
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x72, 0xEF, 0xF0, 0x12, 0x9B, 0xA9, 0xBF, 0x01, 0x1F, \r
+0x90, 0x06, 0x32, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x93, 0x72, 0xE0, 0xFF, 0x90, 0x95, 0x29, 0x74, \r
+0x07, 0xF0, 0x7B, 0x18, 0x7D, 0x01, 0x12, 0x5D, 0xDA, 0x90, 0x93, 0x73, 0x12, 0x5F, 0xDE, 0xD0, \r
+0xD0, 0x92, 0xAF, 0x22, 0x90, 0x8E, 0x2C, 0x12, 0x6E, 0x91, 0x30, 0xE0, 0x2E, 0xEF, 0xC4, 0x54, \r
+0x0F, 0x20, 0xE0, 0x22, 0x12, 0xA6, 0x20, 0x60, 0x0C, 0x12, 0xA6, 0x16, 0x40, 0x07, 0x91, 0x1C, \r
+0x90, 0x90, 0xEE, 0x80, 0x05, 0x91, 0x1C, 0x90, 0x90, 0xE6, 0x12, 0x43, 0xFF, 0x12, 0x42, 0xAB, \r
+0xB1, 0x27, 0x7F, 0x03, 0x01, 0xD2, 0x7F, 0x01, 0x12, 0x6B, 0xD2, 0x22, 0xE4, 0x7F, 0xE8, 0x7E, \r
+0x03, 0xFD, 0xFC, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x2A, 0xEF, 0xF0, \r
+0xED, 0x64, 0x01, 0x70, 0x2E, 0xEB, 0xB4, 0x01, 0x07, 0xE0, 0x24, 0x02, 0xF5, 0x27, 0x80, 0x08, \r
+0x90, 0x95, 0x2A, 0xE0, 0x24, 0xFE, 0xF5, 0x27, 0x90, 0x94, 0xA3, 0x12, 0x08, 0x79, 0x00, 0x00, \r
+0x00, 0xFF, 0xAF, 0x27, 0x91, 0x8E, 0xB1, 0x15, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0xAF, \r
+0x27, 0x80, 0x20, 0x90, 0x94, 0xA3, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0x90, 0x95, 0x2A, \r
+0x12, 0x51, 0x26, 0x91, 0x92, 0xB1, 0x15, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0xFF, 0x90, 0x95, \r
+0x2A, 0xE0, 0xFF, 0x91, 0x8E, 0x7F, 0x01, 0x91, 0x9D, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFC, \r
+0xFD, 0xFE, 0x90, 0x94, 0xA7, 0x12, 0x08, 0x6D, 0x7D, 0x18, 0x7C, 0x00, 0x22, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0xA1, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x94, 0xA0, 0xEF, \r
+0xF0, 0xA3, 0xA3, 0xE0, 0xFD, 0x12, 0x3E, 0x02, 0x90, 0x94, 0xAB, 0x12, 0x08, 0x6D, 0x90, 0x94, \r
+0xA3, 0x12, 0x43, 0xF3, 0x12, 0x08, 0x3A, 0x90, 0x94, 0xAB, 0x12, 0x57, 0xF3, 0xC0, 0x04, 0xC0, \r
+0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x94, 0xA3, 0x12, 0x43, 0xF3, 0x90, 0x94, 0xA7, 0x12, 0x57, \r
+0xF3, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0xD5, 0x90, 0x94, 0xAF, 0x12, \r
+0x08, 0x6D, 0x90, 0x94, 0xA1, 0xA3, 0xE0, 0xFD, 0xC0, 0x05, 0x90, 0x94, 0xAF, 0x12, 0x43, 0xF3, \r
+0x90, 0xAA, 0x96, 0x12, 0x08, 0x6D, 0x90, 0x94, 0xA0, 0xE0, 0xFF, 0xD0, 0x05, 0x12, 0x3D, 0x09, \r
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFF, 0x91, 0x9D, 0x90, 0x94, 0xA3, 0x22, 0x12, 0x8F, 0x77, \r
+0x7D, 0x04, 0x7F, 0x01, 0x02, 0x5F, 0x02, 0x90, 0x95, 0x01, 0x12, 0x08, 0x6D, 0xE4, 0x90, 0x95, \r
+0x05, 0xF0, 0x22, 0x90, 0x01, 0x53, 0xE4, 0xF0, 0xFF, 0xEF, 0x31, 0xE1, 0xE4, 0xF0, 0x0F, 0xEF, \r
+0xB4, 0x08, 0xF6, 0x22, 0x90, 0x8E, 0xAF, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x05, 0xB1, \r
+0x33, 0x12, 0x89, 0x51, 0x22, 0x90, 0x93, 0x64, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x93, 0x62, \r
+0x12, 0x90, 0x2F, 0x90, 0x93, 0x88, 0xF0, 0xEF, 0x24, 0x24, 0xFF, 0xE4, 0x3E, 0xFE, 0xC0, 0x06, \r
+0x12, 0xA5, 0x79, 0xD0, 0x06, 0xE4, 0xFB, 0xFA, 0xF1, 0x3E, 0x4E, 0x60, 0x3E, 0xE0, 0x24, 0x01, \r
+0xFF, 0x90, 0x93, 0x89, 0x12, 0x66, 0x15, 0x90, 0x93, 0x67, 0xF1, 0x24, 0x90, 0x93, 0x67, 0xF1, \r
+0x1A, 0xFE, 0xC3, 0x9F, 0x50, 0x25, 0x90, 0x93, 0x8A, 0xE0, 0x24, 0x02, 0xFD, 0x90, 0x93, 0x89, \r
+0xE0, 0x34, 0x00, 0xFC, 0xEE, 0x7E, 0x00, 0x2D, 0x12, 0x63, 0x93, 0x90, 0x93, 0x66, 0xE0, 0x24, \r
+0x68, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0x12, 0x53, 0x85, 0x80, 0xD1, 0xF1, 0x2C, 0xC0, 0x06, 0x12, \r
+0xA5, 0x79, 0xD0, 0x06, 0x7B, 0x03, 0xF1, 0x3B, 0x90, 0x93, 0x63, 0xE0, 0x24, 0x22, 0xF1, 0x32, \r
+0x90, 0x93, 0x89, 0x12, 0xA5, 0xAC, 0xEF, 0x20, 0xE4, 0x02, 0xC1, 0x92, 0x90, 0x93, 0x88, 0xE0, \r
+0x04, 0xF0, 0xF1, 0x2C, 0xC0, 0x06, 0x12, 0xA5, 0x79, 0xD0, 0x06, 0x7B, 0x30, 0xF1, 0x3B, 0x4E, \r
+0x60, 0x46, 0xE0, 0x24, 0x08, 0xFF, 0x90, 0x93, 0x89, 0x12, 0x66, 0x15, 0xF1, 0x21, 0xF1, 0x17, \r
+0xC3, 0x9F, 0x50, 0x34, 0x90, 0x93, 0x8A, 0xE0, 0x24, 0x0D, 0xFF, 0x90, 0x93, 0x89, 0x12, 0x66, \r
+0x15, 0x90, 0x93, 0x8B, 0xEF, 0xF0, 0xBF, 0x02, 0x09, 0x90, 0x93, 0x88, 0xE0, 0x24, 0x20, 0xF0, \r
+0x80, 0x0E, 0x90, 0x93, 0x8B, 0xE0, 0xB4, 0x04, 0x07, 0x90, 0x93, 0x88, 0xE0, 0x24, 0x40, 0xF0, \r
+0x12, 0xA5, 0xB5, 0x12, 0x53, 0x89, 0x80, 0xC6, 0xF1, 0x2C, 0xC0, 0x06, 0x12, 0xA5, 0x79, 0xD0, \r
+0x06, 0x7B, 0xDD, 0x7A, 0x00, 0x7D, 0x01, 0xF1, 0x3F, 0x4E, 0x60, 0x4B, 0xE0, 0x24, 0x0C, 0xFF, \r
+0x90, 0x93, 0x89, 0x12, 0x66, 0x15, 0xF1, 0x21, 0xF1, 0x17, 0xC3, 0x9F, 0x50, 0x39, 0x90, 0x93, \r
+0x8A, 0xE0, 0x24, 0x11, 0xFF, 0x90, 0x93, 0x89, 0x12, 0x66, 0x15, 0x90, 0x93, 0x8B, 0xEF, 0xF0, \r
+0xBF, 0x02, 0x09, 0x90, 0x93, 0x88, 0xE0, 0x24, 0x02, 0xF0, 0x80, 0x0E, 0x90, 0x93, 0x8B, 0xE0, \r
+0xB4, 0x04, 0x07, 0x90, 0x93, 0x88, 0xE0, 0x24, 0x04, 0xF0, 0x12, 0xA5, 0xB5, 0x12, 0x53, 0x89, \r
+0x80, 0xC6, 0xE4, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x90, 0xE2, 0xE0, 0x90, 0x04, 0xFD, 0xF1, 0x25, \r
+0x90, 0x90, 0xE2, 0xF1, 0x1A, 0xFE, 0xC3, 0x9F, 0x50, 0x6C, 0x12, 0xA6, 0x55, 0xF5, 0x83, 0xE0, \r
+0xFF, 0x90, 0x93, 0x67, 0xE0, 0xFE, 0x6F, 0x70, 0x58, 0x90, 0x04, 0xFC, 0xE0, 0x04, 0xF0, 0x90, \r
+0x93, 0x66, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, \r
+0x88, 0xE0, 0xFD, 0x4F, 0x60, 0x04, 0xED, 0x5F, 0x60, 0x37, 0xEE, 0xFF, 0x7E, 0x00, 0xC0, 0x06, \r
+0xC0, 0x07, 0x90, 0x93, 0x66, 0xE0, 0x75, 0xF0, 0x20, 0xA4, 0x24, 0x2A, 0xF9, 0x74, 0x91, 0x35, \r
+0xF0, 0xFA, 0x7B, 0x01, 0x78, 0x68, 0x7C, 0x93, 0x7D, 0x01, 0xD0, 0x07, 0xD0, 0x06, 0x12, 0x45, \r
+0xD5, 0xEF, 0x70, 0x0D, 0x90, 0x01, 0xC7, 0x74, 0x55, 0xF0, 0x7F, 0x01, 0x12, 0x67, 0xAD, 0xB1, \r
+0x44, 0x12, 0x53, 0x89, 0x80, 0x8A, 0x22, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x66, 0xE0, \r
+0x22, 0x90, 0x93, 0x8C, 0xEF, 0xF0, 0xE4, 0x90, 0x93, 0x66, 0xF0, 0x22, 0x90, 0x93, 0x63, 0xE0, \r
+0x24, 0x24, 0xFF, 0x90, 0x93, 0x62, 0xE0, 0x34, 0x00, 0xFE, 0x22, 0x7A, 0x00, 0xE4, 0xFD, 0xF1, \r
+0x4A, 0x90, 0x93, 0x89, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x90, 0x93, 0x8D, 0x12, 0x93, 0x15, \r
+0xA3, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xC3, 0x90, 0x93, 0x93, 0xE0, 0x94, 0x01, 0x90, 0x93, 0x92, \r
+0xE0, 0x94, 0x00, 0x50, 0x02, 0x80, 0x75, 0xE4, 0x90, 0x93, 0x96, 0xF0, 0xA3, 0xF0, 0xF1, 0xE0, \r
+0xE4, 0xFD, 0x12, 0x63, 0x99, 0x90, 0x93, 0x90, 0xE0, 0x70, 0x03, 0xA3, 0xE0, 0x6F, 0x70, 0x19, \r
+0x90, 0x93, 0x8E, 0xE0, 0x24, 0x02, 0x12, 0x93, 0xE4, 0xFE, 0x90, 0x93, 0x8F, 0xE0, 0xFD, 0x12, \r
+0xA5, 0x6C, 0xBF, 0x01, 0x02, 0x80, 0x49, 0x80, 0x00, 0x90, 0x93, 0x8E, 0xE0, 0x24, 0x01, 0xFF, \r
+0x90, 0x93, 0x8D, 0x12, 0x66, 0x15, 0x7E, 0x00, 0x90, 0x93, 0x94, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, \r
+0x24, 0x02, 0xFF, 0xEE, 0x33, 0xFE, 0x90, 0x93, 0x8D, 0x8F, 0xF0, 0x12, 0x08, 0xD6, 0x90, 0x93, \r
+0x96, 0xEE, 0x8F, 0xF0, 0x12, 0x08, 0xD6, 0x90, 0x93, 0x92, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, \r
+0x90, 0x93, 0x97, 0xE0, 0x9F, 0x90, 0x93, 0x96, 0xE0, 0x9E, 0x40, 0x92, 0xE4, 0xFE, 0xFF, 0x22, \r
+0x90, 0x93, 0x8D, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0x7F, 0x80, 0x02, 0x69, 0x54, 0x32, 0x90, \r
+0x95, 0x51, 0xEF, 0xF0, 0x7F, 0x02, 0x12, 0x48, 0x20, 0x90, 0x8D, 0x01, 0xE0, 0xFF, 0x90, 0x95, \r
+0x51, 0xE0, 0xFE, 0xEF, 0x4E, 0x90, 0x8D, 0x01, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xF5, 0x51, \r
+0x12, 0x06, 0x89, 0x25, 0x51, 0x90, 0x8D, 0x38, 0x51, 0x97, 0x25, 0x51, 0x90, 0x8D, 0x39, 0x31, \r
+0xA0, 0x25, 0x51, 0x90, 0x8D, 0x3A, 0x71, 0xEF, 0x25, 0x51, 0x90, 0x8D, 0x3B, 0x91, 0x6A, 0x25, \r
+0x51, 0x90, 0x8D, 0x3C, 0xD1, 0x59, 0x25, 0x51, 0x90, 0x8D, 0x3D, 0xD1, 0x52, 0x25, 0x51, 0x90, \r
+0x8D, 0x3E, 0xF0, 0x22, 0x90, 0x93, 0x61, 0x12, 0x44, 0x20, 0x90, 0x93, 0x60, 0xEF, 0xF0, 0x12, \r
+0x44, 0x29, 0x78, 0x8F, 0x00, 0x78, 0x93, 0x01, 0x78, 0x98, 0x02, 0x78, 0x9C, 0x03, 0x78, 0xA0, \r
+0x04, 0x78, 0xA4, 0x12, 0x78, 0xA8, 0x14, 0x78, 0xAD, 0x20, 0x78, 0xB1, 0x21, 0x78, 0xB5, 0x23, \r
+0x78, 0xBA, 0x25, 0x78, 0xBF, 0x27, 0x78, 0xC7, 0x80, 0x78, 0xC3, 0x81, 0x78, 0xCB, 0x82, 0x78, \r
+0xCF, 0x83, 0x78, 0xD3, 0x84, 0x78, 0xDB, 0x86, 0x78, 0xD7, 0x88, 0x00, 0x00, 0x78, 0xDF, 0x11, \r
+0xEF, 0x01, 0x0A, 0x11, 0xEF, 0x02, 0x6F, 0x06, 0x11, 0xEF, 0xE1, 0x3E, 0x11, 0xEF, 0xC1, 0x6B, \r
+0x11, 0xEF, 0x61, 0xB3, 0x11, 0xEF, 0xE1, 0xEC, 0x11, 0xEF, 0x02, 0x87, 0xFE, 0x11, 0xEF, 0x81, \r
+0x71, 0x11, 0xEF, 0x61, 0x46, 0x11, 0xEF, 0x02, 0x88, 0x0D, 0x11, 0xEF, 0x02, 0x88, 0x15, 0x11, \r
+0xEF, 0x61, 0x7E, 0x11, 0xEF, 0x80, 0x2E, 0x11, 0xEF, 0x21, 0xBC, 0x11, 0xEF, 0xE1, 0xC9, 0x11, \r
+0xEF, 0x61, 0xF6, 0x11, 0xEF, 0x81, 0x30, 0x11, 0xEF, 0xE1, 0x1F, 0x11, 0xEF, 0x41, 0x9E, 0x90, \r
+0x01, 0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x93, 0x60, 0xE0, 0x90, 0x01, 0xC2, 0xF0, 0x22, 0x90, \r
+0x93, 0x61, 0x02, 0x44, 0x17, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x71, 0xAB, 0x90, 0x8E, \r
+0xAF, 0x31, 0xA7, 0xF1, 0x90, 0xFF, 0x90, 0x8E, 0xAF, 0xF1, 0x09, 0x31, 0xB5, 0xF1, 0x80, 0xFF, \r
+0x90, 0x8E, 0xAF, 0x71, 0x3C, 0x31, 0xB5, 0xF1, 0x88, 0xFF, 0x90, 0x8E, 0xAF, 0xF1, 0x98, 0x4E, \r
+0x31, 0xA0, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x8E, 0xB1, 0xE0, 0x54, 0xFE, 0x51, 0x96, 0xFE, 0x54, \r
+0x01, 0xFD, 0x90, 0x8E, 0xB0, 0xE0, 0x54, 0xFE, 0x4D, 0xFD, 0xF0, 0xEE, 0x54, 0x04, 0xFE, 0xED, \r
+0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF, 0xA3, 0xE0, 0x54, 0xEF, 0x4F, 0xFF, 0x31, 0xA0, \r
+0x71, 0x3E, 0x90, 0x8E, 0xB1, 0x12, 0x81, 0xEC, 0x12, 0x8F, 0xB1, 0x90, 0x8E, 0xAF, 0xE0, 0xC3, \r
+0x13, 0x54, 0x01, 0xFF, 0x12, 0x9F, 0xAD, 0xD1, 0xF3, 0x54, 0x01, 0xFF, 0x12, 0x9F, 0xB9, 0xD1, \r
+0xF3, 0x13, 0x54, 0x01, 0xFF, 0x12, 0x9F, 0xC5, 0x90, 0x8E, 0xAF, 0xE0, 0xC4, 0x54, 0x01, 0xFF, \r
+0x12, 0xA0, 0x13, 0x90, 0x8E, 0xAF, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x01, 0xFF, 0x12, 0x87, 0x98, \r
+0x90, 0x8E, 0xAF, 0xE0, 0x54, 0x01, 0xFF, 0x12, 0x8B, 0xF7, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x4F, \r
+0xF0, 0x90, 0x00, 0x02, 0x02, 0x06, 0xA2, 0xE0, 0x54, 0xFE, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x02, \r
+0xFF, 0xEE, 0x54, 0xFD, 0x4F, 0xFF, 0xF0, 0x12, 0x06, 0x89, 0xFE, 0x22, 0xD3, 0x10, 0xAF, 0x01, \r
+0xC3, 0xC0, 0xD0, 0xD1, 0xED, 0x12, 0x06, 0x89, 0x20, 0xE0, 0x05, 0x12, 0x8C, 0xAD, 0x41, 0x91, \r
+0x71, 0xA5, 0x90, 0x8E, 0xB2, 0x31, 0xA7, 0xF1, 0x90, 0xFF, 0x90, 0x8E, 0xB2, 0xF1, 0x09, 0x31, \r
+0xB5, 0xF1, 0x80, 0xFF, 0x90, 0x8E, 0xB2, 0x71, 0x3C, 0x31, 0xB5, 0xF1, 0x88, 0xFF, 0x90, 0x8E, \r
+0xB2, 0xF1, 0x98, 0x51, 0x96, 0x54, 0x80, 0xFF, 0x90, 0x8E, 0xB3, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, \r
+0x12, 0x06, 0x89, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x07, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x04, \r
+0xF0, 0x90, 0x93, 0x64, 0x12, 0x44, 0x17, 0x12, 0x06, 0x89, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, \r
+0xE0, 0x07, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x8D, 0x07, 0xE0, 0xB4, 0x02, 0x05, \r
+0xF1, 0xA1, 0x20, 0xE0, 0x3F, 0x51, 0x98, 0x54, 0x7F, 0xFF, 0x90, 0x8E, 0xB3, 0xE0, 0x54, 0x80, \r
+0x31, 0x9F, 0x90, 0x8E, 0xB4, 0x71, 0xEF, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x8E, 0xB5, 0xD1, 0xFA, \r
+0xEF, 0x54, 0xFE, 0xFF, 0xEE, 0x54, 0x01, 0x4F, 0x91, 0x6A, 0x54, 0x04, 0xFF, 0x90, 0x8E, 0xB6, \r
+0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0x12, 0x4D, 0x0E, 0x54, 0x07, 0x7D, 0x00, 0x20, 0xE0, 0x02, 0x7D, \r
+0x01, 0x12, 0x4A, 0x79, 0x90, 0x8D, 0x07, 0xE0, 0xB4, 0x01, 0x16, 0x90, 0xFE, 0x10, 0xE0, 0x44, \r
+0x04, 0xF0, 0x90, 0x90, 0x8A, 0x74, 0x05, 0xF0, 0xF1, 0xC0, 0x7A, 0x8F, 0x79, 0xC9, 0x12, 0x08, \r
+0xAA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x4E, 0xF0, 0x90, 0x00, 0x01, 0x02, 0x06, 0xA2, 0xD3, 0x10, \r
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x71, 0xAB, 0x90, 0x8E, 0x2C, 0x31, \r
+0xA7, 0x54, 0x04, 0xFC, 0xEF, 0x54, 0xFB, 0x4C, 0xFF, 0x90, 0x8E, 0x2C, 0xF1, 0x09, 0xFF, 0xF0, \r
+0x12, 0x06, 0x89, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0x90, 0x8E, 0x2C, 0x51, 0x97, 0xFF, \r
+0xED, 0x2F, 0x90, 0x8E, 0x2D, 0x31, 0xA0, 0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x8E, 0x2E, 0xF0, \r
+0x90, 0x8E, 0x2C, 0xE0, 0xFF, 0x20, 0xE0, 0x08, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x0A, \r
+0x90, 0x06, 0x31, 0xE0, 0x44, 0x40, 0xF0, 0x12, 0xA4, 0x05, 0x90, 0x8E, 0x2C, 0xE0, 0xFF, 0x30, \r
+0xE0, 0x35, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x06, 0x09, 0xE0, 0x54, 0xFE, 0x12, \r
+0xA5, 0x16, 0xEF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x09, 0x12, 0x8F, 0xD1, 0x90, 0x94, 0x8A, \r
+0x74, 0x01, 0xF0, 0x7D, 0x08, 0xE4, 0xFF, 0x12, 0x6C, 0x7E, 0x90, 0x95, 0x01, 0x12, 0x08, 0x79, \r
+0x00, 0x00, 0x27, 0x10, 0x12, 0x70, 0xCB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF0, 0xEE, 0x54, 0x20, \r
+0xFE, 0xEF, 0x54, 0xDF, 0x4E, 0x22, 0x31, 0xA1, 0xFF, 0x30, 0xE0, 0x1C, 0x12, 0x06, 0x89, 0x90, \r
+0x8E, 0xA4, 0x51, 0x97, 0x90, 0x8E, 0xA5, 0xF0, 0xEF, 0x54, 0xFE, 0xFF, 0xA3, 0xE0, 0x54, 0x01, \r
+0x4F, 0x71, 0xEF, 0x90, 0x8E, 0xA7, 0xF0, 0x22, 0x90, 0x8E, 0xA4, 0x74, 0x03, 0xF0, 0xA3, 0x74, \r
+0x0F, 0xF0, 0xA3, 0xE0, 0x54, 0x01, 0x44, 0x28, 0xF0, 0xA3, 0x74, 0x07, 0xF0, 0x22, 0x71, 0xAB, \r
+0x90, 0x8E, 0xAB, 0xD1, 0xFA, 0xEF, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x4F, 0x51, 0x97, 0x90, \r
+0x8E, 0xAC, 0x31, 0xA0, 0x90, 0x8E, 0xAD, 0xF0, 0x12, 0xA6, 0x4B, 0x90, 0x8E, 0xAB, 0xE0, 0x54, \r
+0x01, 0xFF, 0x02, 0x6B, 0xD2, 0x90, 0x93, 0x64, 0x12, 0x44, 0x17, 0x12, 0x06, 0x89, 0xFF, 0x54, \r
+0x01, 0xFE, 0x22, 0xD1, 0xED, 0xF1, 0xAC, 0x71, 0xA5, 0xF1, 0x79, 0x4E, 0xF0, 0xEF, 0xC3, 0x13, \r
+0x30, 0xE0, 0x2A, 0x51, 0x98, 0x90, 0x93, 0x46, 0x31, 0xA0, 0x90, 0x93, 0x47, 0xF0, 0x12, 0x06, \r
+0x89, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x45, 0xE0, 0x54, 0xFB, 0x71, 0xEE, 0x90, 0x93, 0x48, \r
+0xF0, 0xEF, 0x54, 0x08, 0xFF, 0x90, 0x93, 0x45, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0x22, 0x4E, 0xF0, \r
+0x90, 0x00, 0x03, 0x02, 0x06, 0xA2, 0xF1, 0x31, 0x2E, 0x90, 0x93, 0x30, 0x51, 0x97, 0xFF, 0xED, \r
+0x2F, 0x90, 0x93, 0x31, 0x31, 0xA0, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x32, 0x71, 0xEF, 0xFF, 0xED, \r
+0x2F, 0x90, 0x93, 0x33, 0x91, 0x6A, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x34, 0xD1, 0x59, 0xFF, 0xED, \r
+0x2F, 0x90, 0x93, 0x35, 0xD1, 0x52, 0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x93, 0x36, 0xF0, 0x22, \r
+0xF1, 0x31, 0x2E, 0x90, 0x93, 0x37, 0x51, 0x97, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x38, 0x31, 0xA0, \r
+0xFF, 0xED, 0x2F, 0x90, 0x93, 0x39, 0x71, 0xEF, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x3A, 0x91, 0x6A, \r
+0xFF, 0xED, 0x2F, 0x90, 0x93, 0x3B, 0xD1, 0x59, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x3C, 0xD1, 0x52, \r
+0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x93, 0x3D, 0xF0, 0x22, 0xF0, 0x90, 0x00, 0x04, 0x02, 0x06, \r
+0xA2, 0xD1, 0xED, 0x12, 0x06, 0x89, 0xFF, 0x54, 0x7F, 0x90, 0x8E, 0x47, 0xF0, 0xEF, 0xF1, 0xA5, \r
+0xA3, 0x51, 0x97, 0xFF, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFE, 0x90, 0x8E, 0x45, 0xE0, 0x54, 0xF0, \r
+0x71, 0xEE, 0x54, 0x01, 0x25, 0xE0, 0xFE, 0x90, 0x8E, 0x42, 0xE0, 0x54, 0xFD, 0x4E, 0xF0, 0xEF, \r
+0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0xF1, 0xDE, 0x31, 0x9F, 0x90, 0x8E, 0x46, 0x91, 0x6A, 0xFD, \r
+0x7F, 0x02, 0x12, 0x5F, 0x02, 0x90, 0x94, 0x8B, 0xE0, 0x60, 0x03, 0x12, 0x5E, 0xF6, 0x90, 0x93, \r
+0x64, 0x12, 0x44, 0x17, 0x90, 0x93, 0x67, 0x12, 0x44, 0x20, 0x12, 0x6F, 0x9C, 0x90, 0x8E, 0x47, \r
+0xE0, 0xFF, 0x12, 0x6C, 0x95, 0x90, 0x8E, 0x47, 0xE0, 0x60, 0x1D, 0x90, 0x93, 0x67, 0x12, 0x44, \r
+0x17, 0x51, 0x98, 0x54, 0x0F, 0xFF, 0x31, 0xA1, 0xFD, 0x12, 0xA0, 0xDA, 0x12, 0x9B, 0x03, 0x90, \r
+0x95, 0x31, 0x74, 0x01, 0xF0, 0x12, 0x98, 0x23, 0x22, 0x90, 0x94, 0xD7, 0x12, 0x44, 0x20, 0x12, \r
+0x06, 0x89, 0x90, 0x94, 0xDC, 0x51, 0x97, 0x90, 0x94, 0xDD, 0x91, 0x6A, 0x90, 0x94, 0xDE, 0xD1, \r
+0x59, 0x90, 0x94, 0xDF, 0xD1, 0x52, 0x90, 0x94, 0xE0, 0xF0, 0x90, 0x00, 0x07, 0x12, 0x06, 0xA2, \r
+0x90, 0x94, 0xE1, 0x71, 0xEF, 0x90, 0x94, 0xE4, 0xF0, 0xED, 0x70, 0x19, 0xFF, 0xD1, 0x60, 0xE0, \r
+0xB4, 0xFF, 0x06, 0xD1, 0x60, 0xE4, 0xF0, 0x80, 0x07, 0xD1, 0x60, 0xE0, 0x04, 0xF0, 0x80, 0x05, \r
+0x0F, 0xEF, 0xB4, 0x06, 0xE8, 0x90, 0x94, 0xDB, 0xE0, 0xFF, 0xB4, 0x04, 0x13, 0xA3, 0xE0, 0xFE, \r
+0xB1, 0xC0, 0xEE, 0xF1, 0x01, 0xFE, 0xB1, 0xC0, 0xF1, 0xE5, 0x90, 0x00, 0x02, 0xE4, 0x80, 0x20, \r
+0xEF, 0xB4, 0x02, 0x1F, 0x90, 0x94, 0xDD, 0xB1, 0xBE, 0xEF, 0xF1, 0x01, 0x44, 0x20, 0x54, 0x7F, \r
+0xB1, 0xBF, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x06, 0xE1, 0x90, 0x94, 0xDC, 0xE0, 0x90, 0x00, 0x02, \r
+0x12, 0x06, 0xE1, 0xB1, 0xC0, 0xE9, 0x24, 0x03, 0xF9, 0xE4, 0x3A, 0xFA, 0x12, 0x06, 0x89, 0x44, \r
+0x20, 0x12, 0x06, 0xCF, 0x90, 0x94, 0xDE, 0xB1, 0xBE, 0x90, 0x00, 0x04, 0xEF, 0x12, 0x06, 0xE1, \r
+0x90, 0x94, 0xDF, 0xE0, 0x90, 0x00, 0x05, 0x12, 0x06, 0xE1, 0x90, 0x94, 0xE0, 0xE0, 0x90, 0x00, \r
+0x06, 0x12, 0x06, 0xE1, 0x90, 0x94, 0xE1, 0xE0, 0x90, 0x00, 0x07, 0x02, 0x06, 0xE1, 0xE0, 0xFF, \r
+0x90, 0x94, 0xD7, 0x02, 0x44, 0x17, 0x90, 0x95, 0x09, 0xED, 0xF0, 0x90, 0x95, 0x06, 0x12, 0x44, \r
+0x20, 0xE4, 0x90, 0x95, 0x0A, 0xF0, 0xA3, 0xF0, 0x12, 0x06, 0x89, 0xFF, 0x51, 0x98, 0xFD, 0x91, \r
+0x6B, 0xFB, 0x12, 0x9C, 0x8D, 0x90, 0x95, 0x0A, 0xEF, 0xF0, 0x90, 0x95, 0x06, 0x12, 0x44, 0x17, \r
+0x91, 0x6B, 0xFF, 0x12, 0x9C, 0xE8, 0x90, 0x95, 0x0B, 0xEF, 0xF0, 0x90, 0x90, 0x8B, 0xE0, 0x24, \r
+0xFE, 0x60, 0x14, 0x24, 0xFE, 0x60, 0x10, 0x14, 0x60, 0x07, 0x14, 0x60, 0x04, 0x24, 0x05, 0x70, \r
+0x40, 0xF1, 0x13, 0xD1, 0x8A, 0x80, 0x0C, 0xF1, 0x13, 0x90, 0x90, 0x8B, 0xE0, 0x90, 0x94, 0xDB, \r
+0xF0, 0x91, 0xF9, 0x90, 0x95, 0x0B, 0xE0, 0xFF, 0x90, 0x95, 0x06, 0x12, 0x44, 0x17, 0x90, 0x95, \r
+0x0A, 0xE0, 0x7C, 0x00, 0x29, 0xF9, 0xEC, 0x3A, 0xFA, 0xC3, 0xE9, 0x9F, 0xF9, 0xEA, 0x94, 0x00, \r
+0xFA, 0x75, 0x40, 0x01, 0x75, 0x41, 0x90, 0x75, 0x42, 0x5A, 0xA3, 0xE0, 0xF5, 0x43, 0x12, 0x35, \r
+0x26, 0x22, 0xF0, 0x90, 0x00, 0x06, 0x02, 0x06, 0xA2, 0xF0, 0x90, 0x00, 0x05, 0x02, 0x06, 0xA2, \r
+0x74, 0xDC, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0x71, 0xAB, 0x90, 0x93, 0x41, \r
+0xD1, 0xFA, 0xEF, 0x54, 0x04, 0xFF, 0xEE, 0x54, 0xFB, 0x4F, 0xF0, 0x12, 0x06, 0x89, 0xC3, 0x13, \r
+0x30, 0xE0, 0x06, 0x51, 0x98, 0x90, 0x93, 0x42, 0xF0, 0x22, 0x90, 0x94, 0xF5, 0xED, 0xF0, 0x90, \r
+0x94, 0xF2, 0x12, 0x44, 0x20, 0x71, 0xF0, 0x90, 0x94, 0xF9, 0xF0, 0x90, 0x94, 0xF2, 0x12, 0x5D, \r
+0x0E, 0x75, 0x43, 0x03, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0xF6, 0x12, 0x35, 0x26, 0x90, 0x94, 0xF5, \r
+0xE0, 0x70, 0x2E, 0xFF, 0xD1, 0xE2, 0xE0, 0xB4, 0xFF, 0x06, 0xD1, 0xE2, 0xE4, 0xF0, 0x80, 0x07, \r
+0xD1, 0xE2, 0xE0, 0x04, 0xF0, 0x80, 0x05, 0x0F, 0xEF, 0xB4, 0x03, 0xE8, 0x75, 0x40, 0x01, 0x75, \r
+0x41, 0x94, 0x75, 0x42, 0xF6, 0x75, 0x43, 0x03, 0x90, 0x94, 0xF2, 0x12, 0x44, 0x17, 0x12, 0x35, \r
+0x26, 0x22, 0x74, 0xF6, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0x90, 0x93, 0x64, \r
+0x02, 0x44, 0x20, 0x90, 0x8E, 0xAF, 0xE0, 0x13, 0x13, 0x22, 0xE0, 0x54, 0xFE, 0x4E, 0xFE, 0xF0, \r
+0x22, 0x12, 0x06, 0xCF, 0x90, 0x94, 0xDD, 0xE0, 0x22, 0xF0, 0xEE, 0x54, 0x08, 0xFE, 0xEF, 0x54, \r
+0xF7, 0x4E, 0x22, 0x7B, 0x01, 0x7A, 0x90, 0x79, 0x5A, 0x90, 0x95, 0x09, 0xE0, 0xFD, 0x22, 0xF1, \r
+0x31, 0x2E, 0x90, 0x93, 0x3E, 0x51, 0x97, 0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x93, 0x3F, 0xF0, \r
+0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x06, 0x89, 0xFE, 0xAF, 0x05, 0xED, 0x22, 0xD3, 0x10, \r
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x51, 0x8A, 0x52, 0x89, 0x53, 0x12, 0x06, 0x89, 0xFF, 0x90, \r
+0x8E, 0x41, 0xF0, 0xBF, 0x01, 0x0C, 0x51, 0x98, 0x64, 0x01, 0x60, 0x18, 0x7D, 0x13, 0x7F, 0x6F, \r
+0x80, 0x0F, 0xAB, 0x51, 0xAA, 0x52, 0xA9, 0x53, 0x51, 0x98, 0x64, 0x01, 0x60, 0x06, 0xE4, 0xFD, \r
+0xFF, 0x12, 0x5A, 0x57, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x45, 0xE0, 0x54, 0xFE, 0x22, \r
+0x54, 0x10, 0xFD, 0xEF, 0x54, 0xEF, 0x4D, 0x22, 0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0x4D, 0x22, \r
+0x54, 0x04, 0xFD, 0xEF, 0x54, 0xFB, 0x4D, 0x22, 0xF0, 0xEE, 0x54, 0x80, 0xFE, 0xEF, 0x54, 0x7F, \r
+0x22, 0x90, 0x8E, 0xB3, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x22, 0xF1, 0xC0, 0x7A, 0x93, \r
+0x79, 0x45, 0x12, 0x08, 0xAA, 0x90, 0x93, 0x46, 0x74, 0x08, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x22, \r
+0x7E, 0x00, 0x7F, 0x08, 0x7D, 0x00, 0x7B, 0x01, 0x22, 0x90, 0x02, 0x09, 0xE0, 0x90, 0x93, 0x64, \r
+0xF0, 0x12, 0x06, 0x89, 0x90, 0x93, 0x2E, 0x51, 0x97, 0x90, 0x93, 0x2F, 0xF0, 0x22, 0x90, 0x8E, \r
+0x45, 0xE0, 0x54, 0x0F, 0x22, 0x90, 0x00, 0x01, 0xEE, 0x02, 0x06, 0xE1, 0x12, 0x06, 0x89, 0xFF, \r
+0x90, 0x8E, 0x2B, 0xF0, 0xBF, 0x01, 0x08, 0x12, 0x80, 0x00, 0xE4, 0x90, 0x8E, 0x2B, 0xF0, 0x22, \r
+0x11, 0xAA, 0x7F, 0xF5, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x06, 0x90, 0x93, 0x64, 0xE0, \r
+0xA3, 0xF0, 0x11, 0xAA, 0x7F, 0xF6, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0x93, \r
+0x64, 0xE0, 0x90, 0x93, 0x66, 0xF0, 0x11, 0xAA, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, \r
+0x01, 0x08, 0x90, 0x93, 0x64, 0xE0, 0x90, 0x93, 0x67, 0xF0, 0x11, 0xAA, 0x7F, 0xF3, 0x7E, 0x01, \r
+0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x64, 0xE0, 0x90, 0x93, 0x68, 0xF0, 0x11, 0xAA, \r
+0x7F, 0xF2, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x64, 0xE0, 0x90, 0x93, \r
+0x69, 0xF0, 0x90, 0x93, 0x65, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, \r
+0x93, 0x6D, 0xF0, 0x90, 0x93, 0x69, 0xE0, 0x90, 0x93, 0x6E, 0xF0, 0x90, 0x93, 0x6F, 0x74, 0x12, \r
+0xF0, 0x90, 0x93, 0x7D, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x71, 0xEF, 0x31, 0x15, 0x90, 0x93, 0x6D, \r
+0xE0, 0x90, 0x93, 0x74, 0xF0, 0x90, 0x93, 0x6E, 0xE0, 0x90, 0x93, 0x75, 0xF0, 0x7B, 0x01, 0x7A, \r
+0x93, 0x79, 0x6F, 0x11, 0xB1, 0x7F, 0x04, 0x02, 0x77, 0xEF, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x64, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8E, 0x27, 0xE0, 0xFF, 0x70, 0x06, 0xA3, \r
+0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x8E, 0x28, 0xE0, 0xB5, 0x07, 0x04, 0x7F, \r
+0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x02, 0xF0, 0x80, \r
+0x28, 0xC0, 0x01, 0x90, 0x8E, 0x28, 0xE0, 0x31, 0x1D, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0xD0, 0x01, \r
+0x7E, 0x00, 0x7F, 0x0F, 0x12, 0x06, 0x63, 0x90, 0x8E, 0x28, 0x31, 0x0E, 0xB4, 0x0A, 0x02, 0x7F, \r
+0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x8E, 0x28, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, 0x04, \r
+0xF0, 0xE0, 0x7F, 0x00, 0x22, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x22, 0x75, 0xF0, 0x0F, \r
+0xA4, 0x24, 0x91, 0xF9, 0x74, 0x8D, 0x35, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
+0xE4, 0xFF, 0x90, 0x8E, 0x28, 0xE0, 0xFE, 0x90, 0x8E, 0x27, 0xE0, 0xFD, 0xB5, 0x06, 0x04, 0x7E, \r
+0x01, 0x80, 0x02, 0x7E, 0x00, 0xEE, 0x64, 0x01, 0x60, 0x3F, 0xED, 0x31, 0x1D, 0xFA, 0x7B, 0x01, \r
+0x31, 0x8E, 0x7F, 0x01, 0xEF, 0x60, 0x32, 0x90, 0x8E, 0x27, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, \r
+0x02, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x8E, 0x27, 0xF0, 0x90, 0x8E, 0x28, \r
+0xE0, 0xFF, 0x90, 0x8E, 0x27, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, \r
 0x70, 0x07, 0x90, 0x8D, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, \r
 0x70, 0x07, 0x90, 0x8D, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, \r
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x01, 0x12, 0x44, 0x12, 0x7F, 0x96, 0x7E, 0x02, 0x91, \r
-0xAC, 0xEF, 0x60, 0x41, 0x91, 0x9B, 0xFE, 0x12, 0xA1, 0x40, 0x90, 0x95, 0x04, 0xEF, 0xF0, 0xEE, \r
-0xFF, 0x90, 0xFD, 0x11, 0xF0, 0x90, 0x95, 0x04, 0xE0, 0xFD, 0x90, 0x02, 0x94, 0xF0, 0xA3, 0xEF, \r
-0xF0, 0x90, 0x95, 0x01, 0x12, 0x8A, 0x5A, 0x24, 0x02, 0xFF, 0xE4, 0x33, 0xFE, 0x91, 0xF1, 0x90, \r
-0x95, 0x04, 0xE0, 0x24, 0x18, 0xFF, 0x90, 0x95, 0x01, 0x12, 0x44, 0x09, 0x12, 0x89, 0xEC, 0x90, \r
-0x02, 0x96, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF0, 0x90, 0x01, 0x17, 0xE0, 0xFE, \r
-0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x22, 0xD3, 0x10, 0xAF, 0x01, \r
-0xC3, 0xC0, 0xD0, 0x90, 0x94, 0xF9, 0x12, 0x91, 0x98, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x94, 0xF9, \r
-0x12, 0xA1, 0x17, 0xE0, 0x60, 0x24, 0xC3, 0x90, 0x94, 0xFC, 0xE0, 0x94, 0xE8, 0x90, 0x94, 0xFB, \r
-0xE0, 0x94, 0x03, 0x40, 0x0B, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x80, 0xF0, 0x7F, 0x00, 0x80, 0x0C, \r
-0x90, 0x94, 0xFB, 0x12, 0x61, 0x77, 0xF1, 0xDD, 0x80, 0xD3, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, \r
-0x22, 0xE4, 0xFC, 0xED, 0x2C, 0x24, 0x00, 0xB1, 0x46, 0xE4, 0xF0, 0x0C, 0xEC, 0xB4, 0x18, 0xF3, \r
-0xB1, 0x43, 0xEF, 0xF0, 0xEE, 0x54, 0x3F, 0xFF, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, \r
-0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x54, \r
-0xF0, 0xF0, 0xD1, 0x18, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x0B, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, \r
-0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, \r
-0x83, 0xE0, 0xFE, 0x74, 0x00, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0x22, 0x12, 0xA1, \r
-0x0E, 0x91, 0xA3, 0x90, 0x93, 0x4A, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x02, 0x87, 0xE0, 0xF9, 0x90, \r
-0x8E, 0xC4, 0xE0, 0x30, 0xE0, 0x73, 0xEC, 0xC3, 0x99, 0x50, 0x6E, 0x90, 0x93, 0x4A, 0xE0, 0xFA, \r
-0xA3, 0xE0, 0xFB, 0x12, 0xA1, 0x60, 0xAD, 0x07, 0xB1, 0x37, 0x12, 0xA0, 0x35, 0x54, 0x3F, 0x90, \r
-0x93, 0x4C, 0xD1, 0x01, 0xE0, 0x54, 0x03, 0xFB, 0xEF, 0x24, 0x18, 0xFF, 0xE4, 0x33, 0xCF, 0x2B, \r
-0xCF, 0x3A, 0x90, 0x93, 0x4C, 0x8F, 0xF0, 0x12, 0x08, 0xD6, 0x90, 0x93, 0x4C, 0xB1, 0xDA, 0x12, \r
-0xA1, 0x05, 0x90, 0x93, 0x4A, 0xEE, 0x8F, 0xF0, 0x12, 0xA1, 0x90, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, \r
-0x90, 0x93, 0x4B, 0xE0, 0x9F, 0x90, 0x93, 0x4A, 0xE0, 0x9E, 0x40, 0x14, 0x90, 0x8D, 0xF9, 0x12, \r
-0xA0, 0x57, 0xFE, 0xC3, 0x90, 0x93, 0x4B, 0xE0, 0x9F, 0xF0, 0x90, 0x93, 0x4A, 0xE0, 0x9E, 0xF0, \r
-0x90, 0x93, 0x4A, 0x12, 0x90, 0xA6, 0x0C, 0x80, 0x8D, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7D, \r
-0x07, 0xEF, 0x5D, 0xC3, 0x60, 0x0A, 0xB1, 0xF4, 0x24, 0x08, 0xFF, 0xE4, 0x3E, 0xFE, 0x80, 0x03, \r
-0xB1, 0xF4, 0xFF, 0x22, 0x74, 0xFF, 0x9D, 0xFD, 0x74, 0xFF, 0x94, 0x00, 0x5E, 0xFE, 0xED, 0x5F, \r
-0x22, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, \r
-0x54, 0x0F, 0x33, 0x33, 0x33, 0x54, 0xF8, 0xFF, 0x74, 0x03, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, \r
-0xF5, 0x83, 0x22, 0x12, 0x90, 0xEE, 0xAD, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x23, 0xF0, 0x74, 0x86, \r
-0xA3, 0xF0, 0xED, 0x64, 0x01, 0x60, 0x1E, 0x12, 0x6F, 0x98, 0xED, 0xB4, 0x02, 0x08, 0x90, 0x01, \r
-0xC7, 0x74, 0x40, 0xF0, 0x80, 0x0A, 0xED, 0xB4, 0x04, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x41, 0xF0, \r
-0x7F, 0x01, 0x02, 0x79, 0x21, 0xB1, 0x4E, 0x90, 0x02, 0x87, 0xE0, 0x70, 0xF8, 0x90, 0x06, 0x90, \r
-0xE0, 0x44, 0x02, 0xF0, 0x74, 0x23, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x86, 0xA3, 0xF0, 0x22, \r
-0xEF, 0x60, 0x37, 0x90, 0x93, 0x18, 0xE0, 0xFF, 0x60, 0x03, 0x12, 0x99, 0x0A, 0x90, 0x01, 0xC7, \r
-0xE4, 0x91, 0x9A, 0xF1, 0xE4, 0x90, 0x06, 0x09, 0xE0, 0x54, 0xFE, 0xF0, 0x7D, 0x35, 0x12, 0x4B, \r
-0x1C, 0x12, 0x9E, 0xE0, 0xD1, 0x23, 0xF1, 0xA6, 0x12, 0x4F, 0xE7, 0x12, 0x8A, 0xD1, 0x90, 0x01, \r
-0x34, 0x74, 0x08, 0xF0, 0xFD, 0xE4, 0xFF, 0x02, 0x75, 0x25, 0x7D, 0x08, 0xE4, 0xFF, 0x12, 0x76, \r
-0x27, 0x90, 0x06, 0x90, 0xE0, 0x54, 0xF0, 0xF0, 0x12, 0xA1, 0x48, 0x12, 0x8B, 0x24, 0xF1, 0xD7, \r
-0x12, 0x9E, 0x3E, 0x7A, 0x8E, 0x79, 0xC4, 0x12, 0x08, 0xAA, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x20, \r
-0xF0, 0x12, 0x8B, 0x49, 0x12, 0x4E, 0x87, 0x90, 0x8D, 0x06, 0xE0, 0xFF, 0x64, 0x02, 0x70, 0x2A, \r
-0xF1, 0x9F, 0x30, 0xE0, 0x02, 0x7E, 0x01, 0x90, 0x8E, 0xE3, 0xF1, 0x9D, 0x30, 0xE1, 0x02, 0x7E, \r
-0x01, 0x90, 0x8E, 0xE1, 0xF1, 0x9D, 0x30, 0xE2, 0x02, 0x7E, 0x01, 0x90, 0x8E, 0xE2, 0xEE, 0xF0, \r
-0x90, 0xFD, 0x80, 0xE0, 0x90, 0x02, 0xFB, 0xF0, 0x80, 0x4A, 0xEF, 0x64, 0x01, 0x70, 0x1D, 0xF1, \r
-0x96, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90, 0x8E, 0xE3, 0xF1, 0x94, 0x30, 0xE1, 0x02, 0x7F, 0x01, \r
-0x90, 0x8E, 0xE1, 0xF1, 0x94, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x80, 0x23, 0x90, 0x8D, 0x06, 0xE0, \r
-0x64, 0x03, 0x70, 0x20, 0xF1, 0x8D, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90, 0x8E, 0xE3, 0xF1, 0x8B, \r
-0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0x8E, 0xE1, 0xF1, 0x8B, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x90, \r
-0x8E, 0xE2, 0xEF, 0xF0, 0x90, 0x8E, 0xC4, 0xE0, 0x54, 0xEF, 0xF0, 0xE4, 0x90, 0x90, 0xCA, 0xF0, \r
-0xA3, 0xF0, 0x90, 0x90, 0xD2, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0xD6, 0x12, \r
-0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0xCE, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, \r
-0x90, 0x93, 0x12, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0x22, 0xEF, 0xF0, 0x90, 0xFD, 0x78, \r
-0xE0, 0x7F, 0x00, 0x22, 0xEF, 0xF0, 0x90, 0xFD, 0x70, 0xE0, 0x7F, 0x00, 0x22, 0xEE, 0xF0, 0x90, \r
-0xFD, 0x80, 0xE0, 0x7E, 0x00, 0x22, 0xF1, 0xDC, 0x71, 0x85, 0x30, 0xE0, 0x18, 0x90, 0x8D, 0xFB, \r
-0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x20, 0xE0, 0x0D, 0x90, 0x94, 0xE5, 0x12, 0x08, 0x79, 0x00, 0x00, \r
-0x00, 0x14, 0x12, 0x50, 0x45, 0x22, 0x90, 0x8E, 0xC4, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, \r
-0x05, 0x12, 0x90, 0x4C, 0xF1, 0x54, 0x22, 0x12, 0x9F, 0xC9, 0x80, 0xEA, 0x22, 0x7F, 0x0A, 0x7E, \r
-0x00, 0x02, 0x3E, 0x50, 0x90, 0x8D, 0xF8, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, \r
-0xC3, 0xC0, 0xD0, 0x8B, 0x51, 0x8A, 0x52, 0x89, 0x53, 0x12, 0x06, 0x89, 0xFF, 0x90, 0x8E, 0x10, \r
-0xF0, 0xBF, 0x01, 0x0D, 0x12, 0x77, 0xC3, 0x64, 0x01, 0x60, 0x19, 0x7D, 0x13, 0x7F, 0x6F, 0x80, \r
-0x10, 0xAB, 0x51, 0xAA, 0x52, 0xA9, 0x53, 0x12, 0x77, 0xC3, 0x64, 0x01, 0x60, 0x06, 0xE4, 0xFD, \r
-0xFF, 0x12, 0x53, 0xD9, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x06, 0x89, 0xFF, 0x90, 0x8D, 0xFA, \r
-0xF0, 0xBF, 0x01, 0x08, 0x12, 0x80, 0x41, 0xE4, 0x90, 0x8D, 0xFA, 0xF0, 0x22, 0x12, 0x06, 0x89, \r
-0x54, 0x01, 0xFF, 0x90, 0x93, 0x3A, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x90, \r
-0x8E, 0x20, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x90, 0x8E, 0xBF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, \r
-0xC3, 0xC0, 0xD0, 0x90, 0x8D, 0x5F, 0xE0, 0xFF, 0x90, 0x8D, 0x5E, 0xE0, 0xB5, 0x07, 0x04, 0x7F, \r
-0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x41, 0x90, 0x8D, 0x5E, 0xE0, 0xFE, 0x75, 0xF0, 0x08, \r
-0x90, 0x8D, 0x0E, 0x12, 0x43, 0xFD, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x0F, 0xF9, \r
-0x74, 0x8D, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xAF, 0x05, 0x12, 0x7B, 0x96, 0x90, 0x8D, 0x5E, 0x12, \r
-0x83, 0x7E, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x8D, 0x5E, 0xF0, 0x12, \r
-0x71, 0xED, 0x90, 0x8D, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, \r
-0x8D, 0xF6, 0xF0, 0xA3, 0xF0, 0x90, 0x8D, 0x5E, 0xF0, 0xA3, 0xF0, 0x22, 0x11, 0xF9, 0x11, 0xBE, \r
-0x12, 0x4F, 0x1F, 0x31, 0x9C, 0x12, 0x86, 0xC0, 0x31, 0xBF, 0x31, 0xD2, 0x90, 0x93, 0x35, 0xE0, \r
-0x54, 0x7F, 0xF0, 0x54, 0xBF, 0xF0, 0x54, 0xDF, 0xF0, 0x54, 0xF0, 0xF0, 0xE4, 0x90, 0x93, 0x37, \r
-0xF0, 0x90, 0x93, 0x35, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0xE4, 0xFD, 0xFF, 0x31, 0xA1, 0xFE, 0xEF, \r
-0x54, 0x07, 0xFF, 0xED, 0x70, 0x12, 0x31, 0x3C, 0xC0, 0x83, 0xC0, 0x82, 0x31, 0x34, 0x80, 0x02, \r
-0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5E, 0x80, 0x0F, 0x31, 0x3C, 0xC0, 0x83, 0xC0, 0x82, 0x31, 0x34, \r
-0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x31, 0x47, 0x90, 0x8E, \r
-0x0F, 0xEF, 0xF0, 0x22, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x22, 0x74, 0xFF, 0x2E, 0xF5, \r
-0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7D, 0x10, \r
-0xED, 0x14, 0xF9, 0x24, 0xFF, 0x31, 0x3F, 0xE0, 0x60, 0x39, 0x7C, 0x08, 0xEC, 0x14, 0x90, 0x95, \r
-0x28, 0xF0, 0x74, 0xFF, 0x29, 0x31, 0x3F, 0xE0, 0xFB, 0x7A, 0x00, 0x90, 0x95, 0x28, 0x31, 0xA8, \r
-0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5A, 0xFE, 0xEF, 0x5B, 0x4E, \r
-0x60, 0x0F, 0xE9, 0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x90, 0x95, 0x28, 0xE0, 0x2F, 0x04, 0xFF, 0x80, \r
-0x06, 0xDC, 0xC9, 0xDD, 0xBB, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x31, 0xB2, 0x02, 0x08, \r
-0xAA, 0xEF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x22, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, \r
-0x08, 0x22, 0x7E, 0x00, 0x7F, 0x04, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xC0, 0x22, 0x90, \r
-0x93, 0x28, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0x7F, 0xF0, 0x54, 0xFB, 0xF0, 0xA3, 0x74, 0x0A, 0x02, \r
-0x67, 0xE6, 0x7E, 0x00, 0x7F, 0x08, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x2C, 0x12, 0x08, \r
-0xAA, 0x90, 0x93, 0x2D, 0x74, 0x08, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x94, 0xFD, 0xEF, \r
-0xF0, 0xA3, 0x12, 0x44, 0x12, 0x90, 0x95, 0x1B, 0xE0, 0xFE, 0x04, 0xF0, 0x51, 0x53, 0x74, 0x00, \r
-0x2F, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, \r
-0xFE, 0x12, 0x56, 0x7A, 0x75, 0x43, 0x02, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, \r
-0x90, 0x94, 0xFD, 0xE0, 0x24, 0x02, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, \r
-0x02, 0xC0, 0x01, 0xA3, 0x12, 0x44, 0x09, 0xE9, 0x24, 0x02, 0xF9, 0xE4, 0x3A, 0x8B, 0x40, 0xF5, \r
-0x41, 0x89, 0x42, 0x90, 0x94, 0xFE, 0x51, 0x5A, 0xF5, 0x43, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, \r
-0x02, 0x35, 0x26, 0x90, 0x00, 0x01, 0xEE, 0x02, 0x06, 0xE1, 0x12, 0x44, 0x09, 0x90, 0x00, 0x0E, \r
-0x02, 0x06, 0xA2, 0x51, 0x69, 0x54, 0xFB, 0xF0, 0x22, 0x8F, 0x57, 0x75, 0xF0, 0x10, 0xEF, 0x90, \r
-0x81, 0x05, 0x12, 0x43, 0xFD, 0xE0, 0x22, 0x51, 0x69, 0x44, 0x04, 0xF0, 0x22, 0xEF, 0x70, 0x04, \r
-0x74, 0xF0, 0x80, 0x16, 0xEF, 0xB4, 0x01, 0x04, 0x74, 0xF4, 0x80, 0x0E, 0xEF, 0xB4, 0x02, 0x04, \r
-0x74, 0xF8, 0x80, 0x06, 0xEF, 0xB4, 0x03, 0x0C, 0x74, 0xFC, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x02, \r
-0xF5, 0x83, 0xEB, 0xF0, 0x22, 0x90, 0x95, 0x11, 0x12, 0x44, 0x12, 0xE4, 0xFF, 0x90, 0x95, 0x11, \r
-0x12, 0x44, 0x09, 0x8F, 0x82, 0x75, 0x83, 0x00, 0x12, 0x06, 0xA2, 0xFE, 0x74, 0xF0, 0x2F, 0xF5, \r
-0x82, 0xE4, 0x34, 0x02, 0x51, 0xCA, 0xB4, 0x10, 0xE4, 0x22, 0xF5, 0x83, 0xEE, 0xF0, 0x0F, 0xEF, \r
-0x22, 0xE4, 0xFF, 0x74, 0x18, 0x51, 0xF5, 0x74, 0xD4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, \r
-0x83, 0xEE, 0xF0, 0x74, 0x10, 0x51, 0xF5, 0x74, 0xCE, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0x51, \r
-0xCA, 0xB4, 0x06, 0xDF, 0x22, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x06, 0xF5, 0x83, 0xE0, 0xFE, 0x22, \r
-0xE4, 0xFF, 0x74, 0x90, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x84, \r
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0x51, 0xCA, 0xB4, 0x08, 0xE7, 0x90, 0x8F, 0x98, 0xE0, 0x90, \r
-0x04, 0x8C, 0xF0, 0x22, 0x71, 0x49, 0x71, 0x00, 0x90, 0x01, 0x3F, 0x74, 0x04, 0xF0, 0x90, 0x8D, \r
-0x06, 0xE0, 0xFF, 0xB4, 0x01, 0x07, 0x90, 0xFD, 0x00, 0xE0, 0x54, 0xEF, 0xF0, 0xEF, 0xB4, 0x01, \r
-0x07, 0x90, 0xFE, 0x10, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
-0xE4, 0xFD, 0x7F, 0x8F, 0x12, 0x49, 0x39, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0xF1, 0xE0, \r
-0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFF, 0x22, 0x75, 0x15, 0x10, 0xE4, 0xF5, 0x16, 0x75, 0x17, 0x07, \r
-0x75, 0x18, 0x02, 0x90, 0x01, 0x30, 0xE5, 0x15, 0xF0, 0xA3, 0xE5, 0x16, 0xF0, 0xA3, 0xE5, 0x17, \r
-0xF0, 0xA3, 0xE5, 0x18, 0xF0, 0x22, 0x75, 0x1D, 0x07, 0x75, 0x1E, 0x01, 0x75, 0x1F, 0x03, 0x75, \r
-0x20, 0x62, 0x90, 0x01, 0x38, 0xE5, 0x1D, 0xF0, 0xA3, 0xE5, 0x1E, 0xF0, 0xA3, 0xE5, 0x1F, 0xF0, \r
-0xA3, 0xE5, 0x20, 0xF0, 0x22, 0x90, 0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x01, 0xC7, 0xE4, \r
-0xF0, 0x22, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x44, 0x0B, 0xF0, 0x12, 0x87, 0xDD, 0x90, 0x01, \r
-0x98, 0xE0, 0x54, 0xC0, 0x7F, 0x00, 0xB4, 0x40, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xC7, 0x74, \r
-0xFE, 0xF0, 0x22, 0x7D, 0x02, 0x90, 0x01, 0xC4, 0x74, 0xD3, 0xF0, 0x74, 0x8B, 0xA3, 0xF0, 0x90, \r
-0x93, 0x27, 0xE0, 0xFF, 0xED, 0xC3, 0x9F, 0x50, 0x10, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF8, 0xE6, \r
-0x30, 0xE4, 0x03, 0x7F, 0x00, 0x22, 0x0D, 0x80, 0xE6, 0x74, 0xD3, 0x04, 0x90, 0x01, 0xC4, 0xF0, \r
-0x74, 0x8B, 0xA3, 0xF0, 0x7F, 0x01, 0x22, 0xE4, 0x90, 0x8D, 0x01, 0x12, 0x4D, 0xB3, 0xA3, 0xF0, \r
-0x22, 0x90, 0x01, 0xE4, 0x74, 0x1F, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x34, 0xE0, 0x55, \r
-0x15, 0xF5, 0x19, 0xA3, 0xE0, 0x55, 0x16, 0xF5, 0x1A, 0xA3, 0xE0, 0x55, 0x17, 0xF5, 0x1B, 0xA3, \r
-0xE0, 0x55, 0x18, 0xF5, 0x1C, 0x90, 0x01, 0x34, 0xE5, 0x19, 0xF0, 0xA3, 0xE5, 0x1A, 0xF0, 0xA3, \r
-0xE5, 0x1B, 0xF0, 0xA3, 0xE5, 0x1C, 0xF0, 0x22, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x1D, 0xF5, 0x21, \r
-0xA3, 0xE0, 0x55, 0x1E, 0xF5, 0x22, 0xA3, 0xE0, 0x55, 0x1F, 0xF5, 0x23, 0xA3, 0xE0, 0x55, 0x20, \r
-0xF5, 0x24, 0x90, 0x01, 0x3C, 0xE5, 0x21, 0xF0, 0xA3, 0xE5, 0x22, 0xF0, 0xA3, 0xE5, 0x23, 0xF0, \r
-0xA3, 0xE5, 0x24, 0xF0, 0x53, 0x91, 0xDF, 0x22, 0x90, 0x8E, 0xC4, 0xE0, 0x30, 0xE0, 0x05, 0x7F, \r
-0x10, 0x12, 0x71, 0xDE, 0x22, 0x90, 0x01, 0xCF, 0xE0, 0x90, 0x93, 0xF8, 0xF0, 0xE0, 0xFF, 0x30, \r
-0xE0, 0x07, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x30, 0xE5, 0x23, 0x90, 0x01, 0xCF, \r
-0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0xE4, 0xF5, 0xA8, 0xF5, 0xE8, 0x12, \r
-0x4D, 0x6E, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x03, 0x12, 0x49, 0x39, 0x80, 0xFE, \r
-0x22, 0x90, 0x8E, 0x15, 0xE0, 0x60, 0x46, 0x90, 0x8E, 0x11, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x8E, \r
-0x2C, 0xE0, 0x04, 0x12, 0x77, 0x6B, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0x8E, \r
-0x4C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x77, 0x48, 0x30, 0xE0, 0x0A, 0x90, 0x01, 0x3B, 0xE0, \r
-0x30, 0xE4, 0x03, 0x12, 0x76, 0x1D, 0x90, 0x95, 0x29, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x80, \r
-0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xB1, 0xAF, 0xB1, \r
-0x72, 0xE4, 0x90, 0x93, 0x2B, 0xF0, 0x12, 0x77, 0x7A, 0x12, 0x6F, 0xFA, 0x30, 0xE0, 0x52, 0x90, \r
-0x90, 0x74, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7C, 0x00, 0x7D, 0x64, 0x12, 0x07, 0x15, 0x90, 0x90, \r
-0xC8, 0xE0, 0x6E, 0x70, 0x03, 0xA3, 0xE0, 0x6F, 0x60, 0x0A, 0x90, 0x90, 0xC8, 0xE4, 0x75, 0xF0, \r
-0x01, 0x02, 0x08, 0xD6, 0x90, 0x90, 0x78, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x90, 0x86, 0xE0, \r
-0xB5, 0x06, 0x14, 0xA3, 0xE0, 0xB5, 0x07, 0x0F, 0xEF, 0x4E, 0x60, 0x0B, 0x90, 0x01, 0xC7, 0x74, \r
-0x31, 0xF0, 0x7F, 0x01, 0x02, 0x79, 0x21, 0x12, 0x61, 0xA1, 0xE4, 0x90, 0x90, 0xC8, 0xF0, 0xA3, \r
-0xF0, 0x22, 0x90, 0x93, 0x28, 0xE0, 0x30, 0xE0, 0x35, 0x12, 0x73, 0x13, 0x70, 0x30, 0x90, 0x95, \r
-0x2C, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0, 0xE4, 0x90, \r
-0x95, 0x2C, 0xF0, 0x90, 0x93, 0x2A, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xD3, 0x9F, 0x50, 0x0E, \r
-0x90, 0x93, 0x2B, 0xE0, 0x70, 0x08, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x12, 0x67, 0x94, 0x22, 0x90, \r
-0x93, 0x2C, 0xE0, 0x30, 0xE0, 0x6C, 0x90, 0x93, 0x30, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x33, 0xE0, \r
-0x64, 0x01, 0x70, 0x21, 0x90, 0x93, 0x2C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x16, 0x90, \r
-0x93, 0x32, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x2F, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F, 0x40, 0x05, \r
-0x12, 0x79, 0x6A, 0xF0, 0x22, 0x90, 0x93, 0x30, 0xE0, 0xFF, 0x90, 0x93, 0x2D, 0xE0, 0xD3, 0x9F, \r
-0x50, 0x30, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2, 0x1A, 0x90, 0x93, 0x32, 0xE0, 0x70, 0x14, 0x7D, \r
-0x08, 0xFF, 0x12, 0x65, 0x59, 0x90, 0x93, 0x31, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x2B, 0xE0, 0x04, \r
-0xF0, 0x80, 0x06, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x30, 0xF0, 0x90, 0x93, \r
-0x32, 0xF0, 0x22, 0x90, 0x93, 0x32, 0xE0, 0x04, 0xF0, 0x90, 0x8E, 0x18, 0xE0, 0x64, 0x02, 0x60, \r
-0x03, 0x12, 0x75, 0x82, 0x22, 0x90, 0x8E, 0x15, 0xE0, 0x60, 0x02, 0xD1, 0x3E, 0x22, 0x90, 0x8E, \r
-0x15, 0xE0, 0x64, 0x01, 0x70, 0x14, 0x12, 0x77, 0xF5, 0x60, 0x06, 0x12, 0x53, 0xD0, 0x02, 0x67, \r
-0xAC, 0x90, 0x8E, 0x18, 0xE0, 0x70, 0x03, 0x12, 0x51, 0xF9, 0x22, 0x90, 0x8E, 0x15, 0xE0, 0x60, \r
-0x03, 0x12, 0x74, 0x47, 0x22, 0x90, 0x8E, 0x15, 0xE0, 0x60, 0x10, 0x90, 0x06, 0x92, 0xE0, 0x30, \r
-0xE1, 0x03, 0x02, 0x67, 0xAC, 0x12, 0x75, 0x6E, 0x12, 0x74, 0xB2, 0x22, 0xF1, 0x24, 0x90, 0x93, \r
-0xFD, 0xEF, 0xF0, 0x30, 0xE0, 0x05, 0x7D, 0x01, 0xE4, 0x80, 0x02, 0xE4, 0xFD, 0xFF, 0x12, 0x4E, \r
-0xB5, 0x90, 0x93, 0xFD, 0xE0, 0x30, 0xE6, 0x11, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x04, 0xE4, \r
-0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x80, 0xF0, 0xF1, 0x1B, 0x90, 0x8E, 0x2E, 0xE0, 0xFB, \r
-0xAC, 0x07, 0x90, 0x8E, 0x11, 0xE0, 0x30, 0xE0, 0x16, 0x90, 0x8E, 0x4B, 0xE0, 0x24, 0x04, 0x90, \r
-0x8E, 0x2A, 0xF0, 0x90, 0x8E, 0x4B, 0xE0, 0x24, 0x03, 0x90, 0x8E, 0x29, 0xF0, 0x80, 0x0B, 0x90, \r
-0x8E, 0x2A, 0x74, 0x02, 0xF0, 0x90, 0x8E, 0x29, 0x14, 0xF0, 0x90, 0x8E, 0x29, 0xE0, 0xFA, 0x90, \r
-0x8E, 0x28, 0xE0, 0xD3, 0x9A, 0x50, 0x09, 0x90, 0x8E, 0x1D, 0xEB, 0xF1, 0x13, 0x2C, 0x80, 0x0B, \r
-0xAD, 0x02, 0xC3, 0xED, 0x9D, 0x2B, 0x90, 0x8E, 0x1D, 0xF1, 0x13, 0x90, 0x8E, 0x2D, 0xF0, 0x90, \r
-0x8E, 0x2D, 0xE0, 0xFF, 0x7E, 0x00, 0x90, 0x8E, 0x21, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x05, \r
-0x58, 0xF0, 0x22, 0xF0, 0x90, 0x8E, 0x2A, 0xE0, 0xC3, 0x9D, 0x22, 0x90, 0x8E, 0x27, 0xE0, 0xFF, \r
-0xA3, 0xE0, 0xFD, 0x22, 0xE4, 0x90, 0x93, 0xFE, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7F, 0x83, 0x12, \r
-0x4A, 0x4E, 0x90, 0x93, 0xFE, 0xEF, 0xF0, 0x7F, 0x83, 0x12, 0x4A, 0x4E, 0xAE, 0x07, 0x90, 0x93, \r
-0xFE, 0xE0, 0xFF, 0xB5, 0x06, 0x01, 0x22, 0xC3, 0x90, 0x94, 0x00, 0xE0, 0x94, 0x64, 0x90, 0x93, \r
-0xFF, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0xFE, \r
-0xE0, 0xFF, 0x22, 0x90, 0x93, 0xFF, 0x12, 0x61, 0x77, 0x80, 0xC2, 0xD3, 0x10, 0xAF, 0x01, 0xC3, \r
-0xC0, 0xD0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, \r
-0x90, 0x01, 0xC0, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, \r
-0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC3, 0xEE, 0x94, 0x01, 0x40, 0x0A, 0x0D, \r
-0xED, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xE4, 0x2F, 0xFF, 0x22, 0x90, 0x93, 0x71, 0xE0, 0x2F, 0xFF, \r
-0x90, 0x93, 0x70, 0xE0, 0x34, 0x00, 0xFE, 0x90, 0x93, 0xF4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, \r
-0x1B, 0xE0, 0xFD, 0xF1, 0x99, 0x90, 0x93, 0x6B, 0xEF, 0xF0, 0x22, 0x7F, 0xFF, 0x12, 0x53, 0xD9, \r
-0xE4, 0x90, 0x95, 0x1E, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, \r
-0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x95, 0x1F, \r
-0xE0, 0x94, 0xE8, 0x90, 0x95, 0x1E, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC0, 0xE0, 0x44, \r
-0x20, 0xF0, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3E, 0x50, 0x90, 0x95, 0x1E, 0x12, \r
-0x61, 0x77, 0x80, 0xC3, 0x90, 0x01, 0xC4, 0x74, 0x14, 0xF0, 0x74, 0x90, 0xA3, 0xF0, 0x7F, 0x90, \r
-0x12, 0x4A, 0x4E, 0xEF, 0x20, 0xE0, 0xF7, 0x74, 0x14, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x90, \r
-0xA3, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFF, 0xEF, 0x12, 0x51, 0x5B, \r
-0xE4, 0xF0, 0x0F, 0xEF, 0xB4, 0x08, 0xF5, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x53, 0xE4, \r
-0xF0, 0xFF, 0xEF, 0x12, 0x51, 0x5B, 0xE4, 0xF0, 0x0F, 0xEF, 0xB4, 0x08, 0xF5, 0x22, 0x7B, 0x01, \r
-0x7A, 0x93, 0x79, 0x3B, 0x7F, 0xFB, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x16, 0x90, 0x93, \r
-0x3B, 0xE0, 0x54, 0x30, 0xFF, 0xBF, 0x20, 0x07, 0x90, 0x93, 0x34, 0x74, 0x01, 0xF0, 0x22, 0xE4, \r
-0x90, 0x93, 0x34, 0xF0, 0x22, 0x12, 0x7F, 0x59, 0x90, 0x93, 0x28, 0x12, 0x7F, 0xCC, 0x54, 0x04, \r
-0xFF, 0xEE, 0x54, 0xFB, 0x4F, 0xF0, 0x12, 0x06, 0x89, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0x12, 0x77, \r
-0xC3, 0x90, 0x93, 0x29, 0xF0, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x02, 0x84, 0xEF, 0xF0, \r
-0xEE, 0xA3, 0xF0, 0xA3, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x95, 0x22, 0xF0, 0xA3, 0xF0, \r
-0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x24, 0xC3, 0x90, 0x95, 0x23, 0xE0, 0x94, 0xD0, 0x90, 0x95, \r
-0x22, 0xE0, 0x94, 0x07, 0x40, 0x0A, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x00, 0x22, \r
-0x90, 0x95, 0x22, 0x12, 0x61, 0x77, 0x12, 0x87, 0xDD, 0x80, 0xD5, 0x7F, 0x01, 0x22, 0x90, 0x02, \r
-0x86, 0xE0, 0x20, 0xE2, 0x03, 0x7F, 0x04, 0x22, 0x90, 0x02, 0x86, 0xE0, 0x7F, 0x01, 0x20, 0xE1, \r
-0x02, 0x7F, 0x02, 0x22, 0x90, 0x8E, 0xCD, 0xE0, 0xFF, 0x20, 0xE0, 0x07, 0x90, 0x01, 0x3F, 0xE0, \r
-0x30, 0xE2, 0x14, 0xEF, 0x44, 0x01, 0x90, 0x8E, 0xCD, 0xF0, 0x90, 0x8E, 0xC7, 0xE0, 0xC4, 0x54, \r
-0x0F, 0x20, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x01, 0x22, 0xEF, 0x90, 0x01, 0xC7, 0xB4, 0xA0, \r
-0x05, 0x74, 0x04, 0xF0, 0x80, 0x03, 0x74, 0x08, 0xF0, 0x02, 0x6F, 0x98, 0x90, 0x93, 0x56, 0x31, \r
-0x98, 0x90, 0x93, 0x5E, 0xF0, 0x90, 0x93, 0x5E, 0xE0, 0xFD, 0xC3, 0x94, 0x06, 0x50, 0x28, 0x90, \r
-0x93, 0x57, 0xE0, 0x24, 0x04, 0xFF, 0x90, 0x93, 0x56, 0xE0, 0x34, 0x00, 0xFE, 0x12, 0x6B, 0x77, \r
-0x90, 0x93, 0x5E, 0xE0, 0x24, 0x58, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0xEF, 0xF0, 0x90, \r
-0x93, 0x5E, 0xE0, 0x04, 0xF0, 0x80, 0xCE, 0x78, 0xCE, 0x7C, 0x8E, 0x7D, 0x01, 0x7B, 0x01, 0x7A, \r
-0x93, 0x79, 0x58, 0x31, 0x8C, 0x7F, 0x00, 0x70, 0x02, 0x7F, 0x01, 0x22, 0x7E, 0x00, 0x7F, 0x06, \r
-0x12, 0x45, 0xC7, 0xEF, 0x22, 0x90, 0x93, 0x46, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x22, 0x90, \r
-0x93, 0x4A, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x93, 0x48, 0x31, 0x98, 0x90, 0x93, 0x6E, 0xF0, \r
-0xEF, 0x24, 0x24, 0xFF, 0xE4, 0x3E, 0xFE, 0xC0, 0x06, 0x91, 0x20, 0xD0, 0x06, 0xE4, 0xFB, 0xFA, \r
-0x71, 0xF0, 0x4E, 0x60, 0x3E, 0xE0, 0x24, 0x01, 0xFF, 0x90, 0x93, 0x6F, 0x12, 0x6D, 0x70, 0x90, \r
-0x93, 0x4D, 0x91, 0x09, 0x90, 0x93, 0x4D, 0x71, 0xFF, 0xFE, 0xC3, 0x9F, 0x50, 0x25, 0x90, 0x93, \r
-0x70, 0xE0, 0x24, 0x02, 0xFD, 0x90, 0x93, 0x6F, 0xE0, 0x34, 0x00, 0xFC, 0xEE, 0x7E, 0x00, 0x2D, \r
-0x12, 0x6B, 0x71, 0x90, 0x93, 0x4C, 0xE0, 0x24, 0x4E, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0x12, 0x5D, \r
-0x87, 0x80, 0xD1, 0x91, 0x11, 0xC0, 0x06, 0x91, 0x20, 0xD0, 0x06, 0x7B, 0x03, 0x71, 0xED, 0x90, \r
-0x93, 0x49, 0xE0, 0x24, 0x22, 0x91, 0x17, 0x90, 0x93, 0x6F, 0x12, 0x6F, 0xEB, 0xEF, 0x20, 0xE4, \r
-0x02, 0x41, 0xD5, 0x90, 0x93, 0x6E, 0xE0, 0x04, 0xF0, 0x91, 0x11, 0xC0, 0x06, 0x91, 0x20, 0xD0, \r
-0x06, 0x7B, 0x30, 0x71, 0xED, 0x4E, 0x60, 0x45, 0xE0, 0x24, 0x08, 0xFF, 0x90, 0x93, 0x6F, 0x12, \r
-0x6D, 0x70, 0x91, 0x06, 0x71, 0xFC, 0xC3, 0x9F, 0x50, 0x33, 0x90, 0x93, 0x70, 0xE0, 0x24, 0x0D, \r
-0xFF, 0x90, 0x93, 0x6F, 0x12, 0x6D, 0x70, 0x90, 0x93, 0x71, 0xEF, 0xF0, 0xBF, 0x02, 0x09, 0x90, \r
-0x93, 0x6E, 0xE0, 0x24, 0x20, 0xF0, 0x80, 0x0E, 0x90, 0x93, 0x71, 0xE0, 0xB4, 0x04, 0x07, 0x90, \r
-0x93, 0x6E, 0xE0, 0x24, 0x40, 0xF0, 0x91, 0x3E, 0x12, 0x5D, 0x8B, 0x80, 0xC7, 0x91, 0x11, 0xC0, \r
-0x06, 0x91, 0x20, 0xD0, 0x06, 0x7B, 0xDD, 0x7A, 0x00, 0x7D, 0x01, 0x71, 0xF1, 0x4E, 0x60, 0x4A, \r
-0xE0, 0x24, 0x0C, 0xFF, 0x90, 0x93, 0x6F, 0x12, 0x6D, 0x70, 0x91, 0x06, 0x71, 0xFC, 0xC3, 0x9F, \r
-0x50, 0x38, 0x90, 0x93, 0x70, 0xE0, 0x24, 0x11, 0xFF, 0x90, 0x93, 0x6F, 0x12, 0x6D, 0x70, 0x90, \r
-0x93, 0x71, 0xEF, 0xF0, 0xBF, 0x02, 0x09, 0x90, 0x93, 0x6E, 0xE0, 0x24, 0x02, 0xF0, 0x80, 0x0E, \r
-0x90, 0x93, 0x71, 0xE0, 0xB4, 0x04, 0x07, 0x90, 0x93, 0x6E, 0xE0, 0x24, 0x04, 0xF0, 0x91, 0x3E, \r
-0x12, 0x5D, 0x8B, 0x80, 0xC7, 0xE4, 0x90, 0x93, 0x6E, 0xF0, 0x90, 0x90, 0xCA, 0xE0, 0x90, 0x04, \r
-0xFD, 0x91, 0x0A, 0x90, 0x90, 0xCA, 0x71, 0xFF, 0xFE, 0xC3, 0x9F, 0x50, 0x6C, 0xD1, 0x84, 0xF5, \r
-0x83, 0xE0, 0xFF, 0x90, 0x93, 0x4D, 0xE0, 0xFE, 0x6F, 0x70, 0x59, 0x90, 0x04, 0xFC, 0xE0, 0x04, \r
-0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x24, 0xEA, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFF, \r
-0x90, 0x93, 0x6E, 0xE0, 0xFD, 0x4F, 0x60, 0x04, 0xED, 0x5F, 0x60, 0x38, 0xEE, 0xFF, 0x7E, 0x00, \r
-0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0x4C, 0xE0, 0x75, 0xF0, 0x20, 0xA4, 0x24, 0x12, 0xF9, 0x74, \r
-0x91, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0x78, 0x4E, 0x7C, 0x93, 0x7D, 0x01, 0xD0, 0x07, 0xD0, 0x06, \r
-0x12, 0x45, 0xC7, 0xEF, 0x70, 0x0E, 0x90, 0x01, 0xC7, 0x74, 0x55, 0xF0, 0x7F, 0x01, 0x12, 0x79, \r
-0x21, 0x12, 0x87, 0xC6, 0x12, 0x5D, 0x8B, 0x80, 0x8A, 0x22, 0x90, 0x93, 0x73, 0xD1, 0x66, 0xA3, \r
-0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xC3, 0x90, 0x93, 0x79, 0xE0, 0x94, 0x01, 0x90, 0x93, 0x78, 0xE0, \r
-0x94, 0x00, 0x50, 0x02, 0x80, 0x73, 0xE4, 0x90, 0x93, 0x7C, 0xF0, 0xA3, 0xF0, 0x91, 0x35, 0xE4, \r
-0xFD, 0x12, 0x6B, 0x77, 0x90, 0x93, 0x76, 0xE0, 0x70, 0x03, 0xA3, 0xE0, 0x6F, 0x70, 0x17, 0x90, \r
-0x93, 0x74, 0xE0, 0x24, 0x02, 0x91, 0x60, 0xFE, 0x90, 0x93, 0x75, 0xE0, 0xFD, 0xD1, 0xA8, 0xBF, \r
-0x01, 0x02, 0x81, 0x35, 0x80, 0x00, 0x90, 0x93, 0x74, 0xE0, 0x24, 0x01, 0xFF, 0x90, 0x93, 0x73, \r
-0x12, 0x6D, 0x70, 0x7E, 0x00, 0x90, 0x93, 0x7A, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x24, 0x02, 0xFF, \r
-0xEE, 0x33, 0xFE, 0x90, 0x93, 0x73, 0x8F, 0xF0, 0x12, 0x08, 0xD6, 0x90, 0x93, 0x7C, 0xEE, 0x8F, \r
-0xF0, 0x12, 0x08, 0xD6, 0x90, 0x93, 0x78, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x90, 0x93, 0x7D, \r
-0xE0, 0x9F, 0x90, 0x93, 0x7C, 0xE0, 0x9E, 0x40, 0x94, 0xE4, 0xFE, 0xFF, 0x22, 0x7A, 0x00, 0xE4, \r
-0xFD, 0x71, 0x5A, 0x90, 0x93, 0x6F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x90, 0x93, 0x72, 0xE0, \r
-0xFF, 0x90, 0x93, 0x4C, 0xE0, 0x22, 0x90, 0x93, 0x72, 0xEF, 0xF0, 0xE4, 0x90, 0x93, 0x4C, 0xF0, \r
-0x22, 0x90, 0x93, 0x49, 0xE0, 0x24, 0x24, 0xFF, 0x90, 0x93, 0x48, 0xE0, 0x34, 0x00, 0xFE, 0x22, \r
-0x90, 0x93, 0x4B, 0xE0, 0x24, 0xDC, 0xFE, 0x90, 0x93, 0x4A, 0xE0, 0x34, 0xFF, 0x90, 0x93, 0x78, \r
-0xF0, 0xA3, 0xCE, 0xF0, 0x22, 0x90, 0x93, 0x73, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0x90, 0x93, \r
-0x6F, 0xE4, 0x75, 0xF0, 0x04, 0x02, 0x08, 0xD6, 0xD1, 0x7B, 0x90, 0x94, 0x51, 0xE0, 0x64, 0x01, \r
-0xF0, 0xE0, 0x24, 0x48, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x94, 0xA3, 0x12, 0x6C, 0x21, 0x21, 0x9F, \r
-0xFF, 0x90, 0x93, 0x73, 0xE0, 0x34, 0x00, 0x22, 0x90, 0x93, 0x73, 0xD1, 0x66, 0x2F, 0xFF, 0xE4, \r
-0x3E, 0xCF, 0x24, 0x06, 0xCF, 0x12, 0x6D, 0x71, 0xBF, 0x86, 0x19, 0x90, 0x93, 0x75, 0xE0, 0xFF, \r
-0x90, 0x93, 0x74, 0xE0, 0x2F, 0x91, 0x60, 0xCF, 0x24, 0x07, 0xCF, 0x12, 0x6D, 0x71, 0xBF, 0xDD, \r
-0x03, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xD1, 0x63, 0x12, 0x6F, 0xF3, 0x7B, 0xFF, 0x7A, 0x40, \r
-0x79, 0x6A, 0x12, 0x57, 0xF5, 0xD1, 0x9F, 0x7A, 0x40, 0x79, 0x70, 0xD1, 0x40, 0x78, 0x5F, 0x7C, \r
-0x93, 0x7D, 0x01, 0x7B, 0xFF, 0x7A, 0x40, 0x79, 0x80, 0xD1, 0x40, 0xE4, 0x90, 0x93, 0x72, 0x12, \r
-0x6C, 0x21, 0xA3, 0xE0, 0xFD, 0x91, 0x68, 0xEF, 0x64, 0x01, 0x60, 0x02, 0xC1, 0x28, 0x12, 0x6E, \r
-0xA4, 0xCF, 0x24, 0x0E, 0xCF, 0x12, 0x6D, 0x71, 0xEF, 0x64, 0x3A, 0x60, 0x02, 0xC1, 0x28, 0x12, \r
-0x6E, 0xA4, 0xCF, 0x24, 0x30, 0xCF, 0x12, 0x6D, 0x71, 0xEF, 0x64, 0x87, 0x60, 0x02, 0xC1, 0x28, \r
-0x90, 0x93, 0x72, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x6F, 0xF0, 0xD1, 0x2E, 0x94, 0x10, 0x50, 0x1A, \r
-0xD1, 0x6F, 0x12, 0x6E, 0xAF, 0xCD, 0x24, 0x38, 0x12, 0x6B, 0x69, 0x90, 0x93, 0x6F, 0xE0, 0x24, \r
-0x5F, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xD1, 0x35, 0x80, 0xE0, 0xE4, 0x90, 0x93, 0x70, 0xF0, 0x90, \r
-0x93, 0x70, 0xE0, 0xFF, 0xC3, 0x94, 0x02, 0x40, 0x02, 0xC1, 0x28, 0x75, 0xF0, 0x38, 0xEF, 0xD1, \r
-0x47, 0x20, 0xE0, 0x02, 0xC1, 0x28, 0xE4, 0x90, 0x93, 0x71, 0xF0, 0xD1, 0x4F, 0x90, 0x8E, 0xF9, \r
-0x12, 0x43, 0xFD, 0xE0, 0xFE, 0x90, 0x93, 0x71, 0xE0, 0xC3, 0x9E, 0x40, 0x02, 0xC1, 0x20, 0xEF, \r
-0x75, 0xF0, 0x38, 0xA4, 0x24, 0x10, 0xF9, 0x74, 0x8F, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xE0, 0x75, \r
-0xF0, 0x10, 0xA4, 0x29, 0xF9, 0xEA, 0x35, 0xF0, 0xFA, 0x78, 0x5F, 0x7C, 0x93, 0xD1, 0x58, 0x60, \r
-0x02, 0xC1, 0x11, 0x90, 0x06, 0x33, 0xE0, 0x44, 0x01, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x93, 0x6F, \r
-0xF0, 0xD1, 0x2E, 0x94, 0x06, 0x50, 0x14, 0xD1, 0x6F, 0x12, 0x6E, 0xAF, 0xCD, 0x24, 0x4A, 0x12, \r
-0x6B, 0x69, 0x90, 0x93, 0x6F, 0xD1, 0x96, 0xD1, 0x35, 0x80, 0xE6, 0xE4, 0x90, 0x93, 0x6F, 0xF0, \r
-0xD1, 0x2E, 0x94, 0x10, 0x50, 0x0C, 0x12, 0x6B, 0x55, 0x90, 0x93, 0x6F, 0xD1, 0x8D, 0xD1, 0x35, \r
-0x80, 0xEE, 0xD1, 0x4F, 0xD1, 0x47, 0xFE, 0xC3, 0x13, 0x30, 0xE0, 0x19, 0xEF, 0x75, 0xF0, 0x38, \r
-0xA4, 0x24, 0x00, 0xF9, 0x74, 0x8F, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0x78, 0x4F, 0x7C, 0x93, 0xD1, \r
-0x58, 0x70, 0x45, 0x80, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x49, 0x90, 0x93, 0x76, 0x12, 0x44, \r
-0x12, 0x7A, 0x93, 0x79, 0x5F, 0x90, 0x93, 0x79, 0x12, 0x44, 0x12, 0x90, 0x93, 0x70, 0xE0, 0x75, \r
-0xF0, 0x38, 0xA4, 0x24, 0xFA, 0xF9, 0x74, 0x8E, 0x35, 0xF0, 0xFA, 0x90, 0x93, 0x7C, 0x12, 0x44, \r
-0x12, 0xE4, 0x90, 0x93, 0x7F, 0xF0, 0xA3, 0xF0, 0x7A, 0x93, 0x79, 0x4F, 0x12, 0x53, 0xE4, 0x80, \r
-0x07, 0x90, 0x06, 0x33, 0xE0, 0x44, 0x05, 0xF0, 0x90, 0x93, 0x71, 0xE0, 0x04, 0xF0, 0xA1, 0x3B, \r
-0x90, 0x93, 0x70, 0xE0, 0x04, 0xF0, 0xA1, 0x1F, 0x90, 0x93, 0x72, 0xE0, 0xFF, 0x22, 0x90, 0x93, \r
-0x6F, 0xE0, 0xFF, 0xC3, 0x22, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x6F, 0xE0, 0x04, 0xF0, 0x22, \r
-0x7E, 0x00, 0x7F, 0x10, 0x02, 0x06, 0x63, 0x90, 0x8E, 0xF8, 0x12, 0x43, 0xFD, 0xE0, 0x22, 0x90, \r
-0x93, 0x70, 0xE0, 0xFF, 0x75, 0xF0, 0x38, 0x22, 0x7D, 0x01, 0x7E, 0x00, 0x7F, 0x10, 0x12, 0x45, \r
-0xC7, 0xEF, 0x22, 0x90, 0x93, 0x46, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x22, 0x90, \r
-0x93, 0x48, 0xE0, 0xFD, 0x90, 0x93, 0x47, 0xE0, 0x2D, 0xFD, 0x22, 0x90, 0x93, 0x46, 0xEE, 0xF0, \r
-0xA3, 0xEF, 0xF0, 0x22, 0x74, 0xDA, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0x22, 0xE0, 0x24, 0x4F, \r
-0xF5, 0x82, 0xE4, 0x34, 0x93, 0x22, 0xE0, 0x24, 0x49, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0x22, 0x78, \r
-0x4F, 0x7C, 0x93, 0x7D, 0x01, 0x7B, 0xFF, 0x22, 0xED, 0x14, 0x60, 0x06, 0x04, 0x70, 0x03, 0x7F, \r
-0x01, 0x22, 0x7F, 0x01, 0x22, 0x31, 0x95, 0xA3, 0xF0, 0x90, 0x93, 0x48, 0xE0, 0xFD, 0xC3, 0x94, \r
-0x04, 0x50, 0x29, 0x90, 0x93, 0x47, 0xE0, 0x24, 0x10, 0x12, 0x6E, 0xAE, 0xFE, 0x12, 0x6B, 0x77, \r
-0x90, 0x93, 0x48, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x6F, 0x60, \r
-0x03, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x48, 0xE0, 0x04, 0xF0, 0x80, 0xCD, 0x7F, 0x01, 0x22, 0xD1, \r
-0x63, 0xE4, 0xA3, 0xF0, 0xF1, 0x2A, 0x50, 0x1A, 0x12, 0x6C, 0x22, 0xF1, 0x79, 0x24, 0xA8, 0xF5, \r
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xB5, 0x07, 0x1D, 0x90, 0x93, 0x49, 0xE0, 0x04, 0xF0, \r
-0x80, 0xE2, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x01, 0xC7, 0x74, 0x30, 0xF0, 0x7F, \r
-0x01, 0x12, 0x79, 0x21, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x49, 0xE0, 0xFD, 0xC3, \r
-0x94, 0x02, 0x22, 0xD1, 0x63, 0x90, 0x90, 0x7A, 0xE0, 0x70, 0x02, 0xA3, 0xE0, 0x60, 0x26, 0xE4, \r
-0x90, 0x93, 0x49, 0xF0, 0xF1, 0x2A, 0x50, 0x20, 0x12, 0x6C, 0x22, 0xF1, 0x79, 0x24, 0x88, 0xF5, \r
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x6F, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x49, \r
-0xE0, 0x04, 0xF0, 0x80, 0xDF, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x40, 0xF0, 0xE4, \r
-0x90, 0x90, 0x86, 0xF0, 0xA3, 0xF0, 0x7F, 0x01, 0x22, 0xED, 0x24, 0x1C, 0xFD, 0x12, 0x6B, 0x77, \r
-0x90, 0x93, 0x49, 0xE0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x20, 0xE0, 0x05, \r
-0x90, 0x93, 0x16, 0x80, 0x03, 0x90, 0x93, 0x17, 0xE0, 0x90, 0x8F, 0x99, 0xF0, 0x90, 0x8F, 0x99, \r
-0xE0, 0x14, 0x60, 0x13, 0x14, 0x60, 0x14, 0x24, 0xFE, 0x60, 0x10, 0x14, 0x60, 0x09, 0x14, 0x60, \r
-0x06, 0x24, 0x06, 0xE4, 0xFE, 0x80, 0x06, 0x7E, 0x04, 0x80, 0x02, 0x7E, 0x08, 0xAF, 0x06, 0xD0, \r
-0xD0, 0x92, 0xAF, 0x22, 0xA3, 0xE0, 0xFE, 0x24, 0x28, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, \r
-0xE0, 0xFF, 0x74, 0x29, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0x2C, \r
-0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x30, 0xE7, 0x04, \r
-0x7C, 0x02, 0x80, 0x02, 0xE4, 0xFC, 0xED, 0x30, 0xE6, 0x08, 0xAF, 0x03, 0xF1, 0x85, 0xAE, 0x07, \r
-0x80, 0x02, 0xE4, 0xFE, 0xEC, 0x24, 0x18, 0x2E, 0xFF, 0x22, 0x90, 0x94, 0xED, 0xED, 0xF0, 0x90, \r
-0x94, 0xEA, 0x12, 0x44, 0x12, 0xE4, 0x90, 0x94, 0xEE, 0xF0, 0xA3, 0xF0, 0x12, 0x06, 0x89, 0xFF, \r
-0x12, 0x77, 0xC3, 0xFD, 0x12, 0x7D, 0x70, 0xFB, 0x12, 0x97, 0xEA, 0x90, 0x94, 0xEE, 0xEF, 0xF0, \r
-0x90, 0x94, 0xEA, 0x12, 0x44, 0x09, 0x12, 0x7D, 0x70, 0xFF, 0x12, 0x97, 0x85, 0x90, 0x94, 0xEF, \r
-0xEF, 0xF0, 0x90, 0x8F, 0x99, 0xE0, 0x24, 0xFE, 0x60, 0x14, 0x24, 0xFE, 0x60, 0x10, 0x14, 0x60, \r
-0x07, 0x14, 0x60, 0x04, 0x24, 0x05, 0x70, 0x41, 0x11, 0x9A, 0x11, 0xA6, 0x80, 0x0D, 0x11, 0x9A, \r
-0x90, 0x8F, 0x99, 0xE0, 0x90, 0x94, 0xBF, 0xF0, 0x12, 0x7C, 0x99, 0x90, 0x94, 0xEF, 0xE0, 0xFF, \r
-0x90, 0x94, 0xEA, 0x12, 0x44, 0x09, 0x90, 0x94, 0xEE, 0xE0, 0x7C, 0x00, 0x29, 0xF9, 0xEC, 0x3A, \r
-0xFA, 0xC3, 0xE9, 0x9F, 0xF9, 0xEA, 0x94, 0x00, 0xFA, 0x75, 0x40, 0x01, 0x75, 0x41, 0x8F, 0x75, \r
-0x42, 0x90, 0xA3, 0xE0, 0xF5, 0x43, 0x12, 0x35, 0x26, 0x22, 0x7B, 0x01, 0x7A, 0x8F, 0x79, 0x90, \r
-0x90, 0x94, 0xED, 0xE0, 0xFD, 0x22, 0x90, 0x94, 0xD9, 0xED, 0xF0, 0x90, 0x94, 0xD6, 0x12, 0x44, \r
-0x12, 0x12, 0x7D, 0xF8, 0x90, 0x94, 0xDD, 0xF0, 0x90, 0x94, 0xD6, 0x12, 0x56, 0x7A, 0x75, 0x43, \r
-0x03, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0xDA, 0x12, 0x35, 0x26, 0x90, 0x94, 0xD9, 0xE0, 0x70, 0x2E, \r
-0xFF, 0x11, 0xFF, 0xE0, 0xB4, 0xFF, 0x06, 0x11, 0xFF, 0xE4, 0xF0, 0x80, 0x07, 0x11, 0xFF, 0xE0, \r
-0x04, 0xF0, 0x80, 0x05, 0x0F, 0xEF, 0xB4, 0x03, 0xE8, 0x75, 0x40, 0x01, 0x75, 0x41, 0x94, 0x75, \r
-0x42, 0xDA, 0x75, 0x43, 0x03, 0x90, 0x94, 0xD6, 0x12, 0x44, 0x09, 0x12, 0x35, 0x26, 0x22, 0x74, \r
-0xDA, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x94, 0xF5, 0x83, 0x22, 0x31, 0x1B, 0x12, 0x57, 0x00, 0x75, \r
-0x43, 0x08, 0x7B, 0x01, 0x7A, 0x8F, 0x79, 0x90, 0x02, 0x35, 0x26, 0x12, 0x57, 0xD3, 0x7E, 0x00, \r
-0x74, 0x00, 0x2F, 0x22, 0x31, 0x1B, 0x12, 0x57, 0x00, 0x75, 0x43, 0x70, 0x7B, 0x01, 0x7A, 0x8E, \r
-0x79, 0xF8, 0x02, 0x35, 0x26, 0xEF, 0x60, 0x07, 0x90, 0x93, 0x1E, 0xE0, 0xFF, 0x31, 0x24, 0x22, \r
-0x90, 0x93, 0xAD, 0x12, 0x44, 0x12, 0x90, 0x93, 0xB0, 0x12, 0x56, 0x7A, 0x75, 0x43, 0x10, 0x7B, \r
-0x01, 0x7A, 0x8F, 0x79, 0x68, 0x12, 0x35, 0x26, 0x90, 0x93, 0xAD, 0x12, 0x56, 0x7A, 0x75, 0x43, \r
-0x10, 0x7B, 0x01, 0x7A, 0x8F, 0x79, 0x78, 0x12, 0x35, 0x26, 0x90, 0x93, 0xB3, 0x12, 0x43, 0xE5, \r
-0x90, 0x8F, 0x88, 0x12, 0x08, 0x6D, 0x90, 0x93, 0xB7, 0xE0, 0x90, 0x8F, 0x8F, 0xF0, 0x22, 0x90, \r
-0x8E, 0xCD, 0xE0, 0x30, 0xE0, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x06, 0x90, 0xE0, 0x20, 0xE5, 0x10, \r
-0x90, 0x01, 0x3F, 0xE0, 0x30, 0xE2, 0x09, 0x90, 0x01, 0xC7, 0x74, 0x25, 0xF0, 0x7F, 0x01, 0x22, \r
-0x7F, 0x00, 0x22, 0x90, 0x02, 0x09, 0xE0, 0x90, 0x93, 0x4A, 0xF0, 0x12, 0x06, 0x89, 0x90, 0x93, \r
-0x16, 0x12, 0x77, 0xC2, 0x90, 0x93, 0x17, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x12, 0x06, \r
-0x89, 0xFE, 0xEF, 0x2E, 0x90, 0x93, 0x26, 0xF0, 0x22, 0xEF, 0x60, 0x08, 0x90, 0x93, 0x19, 0xE0, \r
-0xFF, 0x12, 0x56, 0x98, 0x22, 0xE4, 0xFD, 0xFC, 0xEF, 0x60, 0x3C, 0x90, 0x93, 0x1C, 0x12, 0x67, \r
-0x7A, 0x51, 0x21, 0x12, 0x7F, 0x3E, 0x90, 0x93, 0x4A, 0x12, 0x56, 0x7A, 0x75, 0x43, 0x40, 0x7B, \r
-0x01, 0x7A, 0x8F, 0x79, 0x9A, 0x12, 0x35, 0x26, 0xE4, 0xFD, 0x7F, 0x03, 0x12, 0x30, 0xCE, 0x90, \r
-0x93, 0x1D, 0xE0, 0x51, 0x18, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x12, 0x39, 0xD6, \r
-0x7D, 0x01, 0x7F, 0x03, 0x12, 0x30, 0xCE, 0x22, 0x75, 0xF0, 0x80, 0xA4, 0xAE, 0xF0, 0x78, 0x03, \r
-0x22, 0x74, 0x00, 0x2F, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0x22, 0xEF, 0x60, 0x0A, 0x90, \r
-0x06, 0x31, 0xE0, 0x44, 0x80, 0xF0, 0x12, 0x5B, 0x04, 0x22, 0xEF, 0x60, 0x06, 0x12, 0x66, 0x5B, \r
-0x12, 0x57, 0x0C, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, \r
-0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x51, 0x44, 0xEF, \r
-0x64, 0x01, 0x70, 0x47, 0x90, 0x8E, 0x19, 0xE0, 0xFF, 0x54, 0x03, 0x70, 0x3E, 0x90, 0x8E, 0x17, \r
-0xE0, 0xFE, 0xE4, 0xC3, 0x9E, 0x40, 0x34, 0xEF, 0x20, 0xE2, 0x30, 0x90, 0x8E, 0x19, 0xE0, 0x20, \r
-0xE4, 0x29, 0x90, 0x8E, 0x12, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x1E, 0x90, 0x8E, 0xBF, \r
-0xE0, 0x70, 0x18, 0x90, 0x06, 0x62, 0xE0, 0x20, 0xE1, 0x11, 0x90, 0x06, 0x62, 0xE0, 0x30, 0xE0, \r
-0x07, 0xE0, 0x54, 0xFC, 0x64, 0x80, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xEF, 0x24, \r
-0xFE, 0x60, 0x0B, 0x04, 0x70, 0x24, 0x90, 0x8E, 0x1B, 0x74, 0x02, 0xF0, 0x80, 0x13, 0xED, 0x70, \r
-0x06, 0x90, 0x8E, 0xBC, 0xE0, 0x80, 0x02, 0xED, 0x14, 0x90, 0x8E, 0x1B, 0xF0, 0x90, 0x8E, 0x1B, \r
-0xE0, 0xA3, 0xF0, 0x90, 0x8E, 0x12, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x8E, 0xC0, 0xE0, 0xC3, \r
-0x13, 0x20, 0xE0, 0x21, 0x90, 0x02, 0x87, 0xE0, 0x70, 0x24, 0x90, 0x8E, 0xC4, 0xE0, 0x30, 0xE0, \r
-0x06, 0x90, 0x02, 0x82, 0xE0, 0x70, 0x17, 0x90, 0x8E, 0xCD, 0xE0, 0x20, 0xE0, 0x10, 0x90, 0x02, \r
-0x86, 0xE0, 0x30, 0xE1, 0x09, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0x7F, 0x00, \r
-0x22, 0xEF, 0x60, 0x2E, 0x12, 0x73, 0x13, 0x70, 0x29, 0x90, 0x8E, 0x12, 0xE0, 0x54, 0xFE, 0xF0, \r
-0x7D, 0x2B, 0x7F, 0x0F, 0x12, 0x53, 0xD9, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0x12, 0x65, \r
-0x55, 0xBF, 0x01, 0x0E, 0x90, 0x8E, 0x11, 0xE0, 0x44, 0x40, 0xF0, 0x7D, 0x06, 0x7F, 0x01, 0x12, \r
-0x4E, 0xB5, 0x22, 0x7D, 0x2D, 0x12, 0x8F, 0xCB, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0xFD, 0x7F, \r
-0x03, 0x12, 0x75, 0x25, 0x12, 0x4B, 0x21, 0xE4, 0xFD, 0x7F, 0x01, 0x02, 0x4E, 0xB5, 0x7D, 0x2E, \r
-0x7F, 0x6F, 0x12, 0x53, 0xD9, 0x7D, 0x02, 0x7F, 0x01, 0x02, 0x4E, 0xB5, 0x90, 0x95, 0x2E, 0xEF, \r
-0xF0, 0x12, 0x4D, 0xE7, 0x90, 0x95, 0x2E, 0xE0, 0x60, 0x03, 0x12, 0x4F, 0xE9, 0x7D, 0x04, 0x7F, \r
-0x01, 0x02, 0x4E, 0xB5, 0xE4, 0xF5, 0x58, 0x90, 0x06, 0xA9, 0xE0, 0xF5, 0x58, 0x54, 0xC0, 0x70, \r
-0x08, 0x71, 0xDD, 0x54, 0xFD, 0xF0, 0x02, 0x74, 0xB2, 0xE5, 0x58, 0x30, 0xE6, 0x1F, 0x90, 0x8E, \r
-0x15, 0xE0, 0x64, 0x01, 0x70, 0x19, 0x90, 0x8E, 0x19, 0xE0, 0x44, 0x01, 0xF0, 0x12, 0x77, 0xF5, \r
-0x64, 0x02, 0x60, 0x04, 0x71, 0xEF, 0x80, 0x07, 0x12, 0x67, 0x84, 0x80, 0x02, 0x71, 0xDD, 0xE5, \r
-0x58, 0x90, 0x8E, 0x19, 0x30, 0xE7, 0x11, 0xE0, 0x44, 0x02, 0xF0, 0x71, 0xE5, 0x12, 0x50, 0x0D, \r
-0x90, 0x8E, 0x11, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x8E, 0x19, \r
-0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xE4, 0x90, 0x94, 0xE2, 0xF0, 0x90, 0x8E, 0xBA, 0xE0, 0x22, 0x90, \r
-0x04, 0x1D, 0xE0, 0x70, 0x12, 0x90, 0x8D, 0x08, 0xE0, 0xFF, 0x7B, 0x18, 0xE4, 0xFD, 0x12, 0x64, \r
-0x38, 0x90, 0x95, 0x24, 0x12, 0x57, 0xFC, 0x22, 0xE4, 0xFD, 0xF9, 0xFC, 0x90, 0x05, 0x62, 0xE0, \r
-0xFE, 0x90, 0x05, 0x61, 0xE0, 0xFB, 0xEB, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, \r
-0xFF, 0xEE, 0x54, 0x3F, 0x90, 0x8E, 0x4E, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, \r
-0xFF, 0x90, 0x8E, 0x4E, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xC3, 0x9F, 0xEA, 0x9E, 0x40, 0x21, 0xEB, \r
-0x9F, 0xFF, 0x90, 0x8E, 0x2D, 0xE0, 0xFE, 0xC3, 0x74, 0x0A, 0x9E, 0x2F, 0xF9, 0xC3, 0x94, 0x19, \r
-0x50, 0x0E, 0x74, 0x32, 0x29, 0x91, 0xF5, 0xE0, 0x04, 0xF0, 0x90, 0x8E, 0x2B, 0xE0, 0x04, 0xF0, \r
-0x90, 0x8E, 0x2B, 0xE0, 0xC3, 0x94, 0x64, 0x50, 0x02, 0x81, 0xF1, 0xE4, 0xFC, 0xFD, 0x91, 0xF2, \r
-0xE0, 0x2C, 0xFC, 0xD3, 0x94, 0x05, 0x40, 0x07, 0x90, 0x93, 0xFA, 0xED, 0xF0, 0x80, 0x05, 0x0D, \r
-0xED, 0xB4, 0x19, 0xEA, 0xE4, 0xFC, 0xFD, 0x91, 0xF2, 0xE0, 0x2C, 0xFC, 0xD3, 0x94, 0x5F, 0x40, \r
-0x07, 0x90, 0x93, 0xFB, 0xED, 0xF0, 0x80, 0x05, 0x0D, 0xED, 0xB4, 0x19, 0xEA, 0x90, 0x93, 0xFA, \r
-0xE0, 0x90, 0x8E, 0x30, 0xF0, 0x90, 0x93, 0xFB, 0xE0, 0x90, 0x8E, 0x31, 0x91, 0xFD, 0x94, 0x0B, \r
-0x40, 0x0A, 0xEF, 0x24, 0xF6, 0x90, 0x8E, 0x28, 0xF0, 0xE4, 0x80, 0x09, 0xE4, 0x90, 0x8E, 0x28, \r
-0x91, 0xFD, 0x74, 0x0A, 0x9F, 0x90, 0x8E, 0x27, 0xF0, 0x90, 0x8E, 0x30, 0xE0, 0xFF, 0xA3, 0xE0, \r
-0xC3, 0x9F, 0x90, 0x8E, 0x2E, 0xF0, 0xC3, 0x94, 0x08, 0x50, 0x03, 0x74, 0x08, 0xF0, 0x90, 0x8E, \r
-0x28, 0xE0, 0xFD, 0x90, 0x8E, 0x2E, 0xE0, 0xFB, 0xE4, 0xFF, 0x12, 0x8E, 0xB0, 0xE4, 0xFF, 0xB1, \r
-0x05, 0x22, 0x74, 0x32, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x22, 0xF0, 0x90, 0x8E, \r
-0x30, 0xE0, 0xFF, 0xC3, 0x22, 0xE4, 0xFE, 0x74, 0x32, 0x2E, 0x91, 0xF5, 0xE4, 0xF0, 0x0E, 0xEE, \r
-0xB4, 0x19, 0xF4, 0xE4, 0x90, 0x8E, 0x2B, 0xF0, 0x90, 0x8E, 0x2F, 0xF0, 0x90, 0x8E, 0x27, 0xF0, \r
-0xEF, 0xB4, 0x01, 0x09, 0x90, 0x8E, 0x30, 0x74, 0x19, 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0x7D, 0x2F, \r
-0x12, 0x4B, 0x1C, 0x7D, 0x08, 0x7F, 0x01, 0x02, 0x4E, 0xB5, 0x90, 0x93, 0x53, 0xED, 0xF0, 0x90, \r
-0x93, 0x51, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xB1, 0x57, 0x90, 0x93, 0x51, 0xE0, 0xFE, 0xA3, 0xE0, \r
-0xFF, 0xA3, 0xE0, 0xFD, 0x02, 0x58, 0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, \r
-0x17, 0xE0, 0xFD, 0xB4, 0x02, 0x07, 0xD1, 0x36, 0x74, 0x08, 0xF0, 0x80, 0x09, 0xED, 0xB4, 0x04, \r
-0x05, 0xD1, 0x36, 0x74, 0x10, 0xF0, 0xEF, 0x64, 0x02, 0x4E, 0x60, 0x02, 0xC1, 0x31, 0x90, 0x8F, \r
-0xDB, 0xE0, 0xFF, 0x64, 0xFE, 0x70, 0x02, 0xC1, 0x31, 0xEF, 0x64, 0x02, 0x60, 0x07, 0xEF, 0x64, \r
-0x03, 0x60, 0x02, 0xC1, 0x31, 0x90, 0x90, 0x3B, 0xD1, 0x47, 0x90, 0x93, 0xA6, 0xEE, 0xF0, 0xA3, \r
-0xEF, 0xF0, 0xD1, 0x3E, 0x7A, 0x93, 0x79, 0x64, 0x12, 0x08, 0xAA, 0xD1, 0x3E, 0x7A, 0x93, 0x79, \r
-0x84, 0x12, 0x08, 0xAA, 0x90, 0xAC, 0x7A, 0x74, 0x10, 0x12, 0x67, 0xE6, 0x7B, 0x20, 0xFD, 0xFC, \r
-0xFF, 0xFE, 0x12, 0x39, 0x9C, 0x7B, 0x01, 0x7A, 0x90, 0x79, 0x3D, 0x90, 0xAC, 0x89, 0x12, 0x44, \r
-0x12, 0x7A, 0x93, 0x79, 0x84, 0x90, 0xAC, 0x8C, 0x12, 0x44, 0x12, 0x90, 0xAC, 0x8F, 0x74, 0x20, \r
-0xF0, 0x7A, 0x8F, 0x79, 0xAA, 0x12, 0x34, 0x5B, 0x75, 0x40, 0x01, 0x75, 0x41, 0x93, 0x75, 0x42, \r
-0x8C, 0x75, 0x43, 0x18, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x64, 0x12, 0x35, 0x26, 0x75, 0x40, 0x01, \r
-0x75, 0x41, 0x93, 0x75, 0x42, 0x6C, 0x75, 0x43, 0x10, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x54, 0x12, \r
-0x35, 0x26, 0x90, 0x93, 0x6A, 0xE0, 0x54, 0x03, 0xFF, 0xC3, 0x94, 0x04, 0x90, 0x8F, 0x98, 0x50, \r
-0x04, 0xEF, 0xF0, 0x80, 0x03, 0x74, 0x05, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x54, 0x12, 0x7E, \r
-0x67, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0xA4, 0x74, 0x80, 0xF0, 0xA3, 0x22, 0x7E, 0x00, \r
-0x7F, 0x20, 0x7D, 0x00, 0x7B, 0x01, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xFD, 0xED, 0xFF, 0x22, 0xD3, \r
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x7F, 0x59, 0x90, 0x8D, \r
-0xFB, 0x12, 0x7A, 0xF3, 0x54, 0x04, 0xFC, 0xEF, 0x54, 0xFB, 0x4C, 0xFF, 0x90, 0x8D, 0xFB, 0xD1, \r
-0xF1, 0x12, 0x77, 0xC2, 0xFF, 0xED, 0x2F, 0x90, 0x8D, 0xFC, 0x12, 0x7D, 0xB3, 0xFF, 0xAE, 0x05, \r
-0xED, 0x2F, 0x90, 0x8D, 0xFD, 0xF0, 0x90, 0x8D, 0xFB, 0xE0, 0xFF, 0x20, 0xE0, 0x08, 0x13, 0x13, \r
-0x13, 0x54, 0x1F, 0x30, 0xE0, 0x0A, 0x90, 0x06, 0x31, 0xE0, 0x44, 0x40, 0xF0, 0x12, 0x66, 0xEF, \r
-0x90, 0x8D, 0xFB, 0xE0, 0xFF, 0x30, 0xE0, 0x33, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x01, 0xF0, 0x90, \r
-0x06, 0x09, 0xE0, 0x54, 0xFE, 0xD1, 0xE8, 0xEF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x08, 0xD1, \r
-0xE0, 0x90, 0x94, 0x6E, 0x74, 0x01, 0xF0, 0x7D, 0x08, 0xE4, 0xFF, 0x12, 0x75, 0x25, 0x90, 0x94, \r
-0xE5, 0x12, 0x08, 0x79, 0x00, 0x00, 0x27, 0x10, 0x12, 0x50, 0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, \r
-0x90, 0x02, 0x86, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0xF0, 0x90, 0x06, 0x08, 0xE0, 0x54, 0x7F, 0xF0, \r
-0x22, 0xF0, 0xEE, 0x54, 0x08, 0xFE, 0xEF, 0x54, 0xF7, 0x4E, 0x22, 0x7F, 0x50, 0x7E, 0x0C, 0x12, \r
-0x37, 0x4E, 0x90, 0x94, 0x54, 0xEF, 0xF0, 0x7F, 0x58, 0x7E, 0x0C, 0x12, 0x37, 0x4E, 0x90, 0x94, \r
-0x55, 0xEF, 0xF0, 0x90, 0x94, 0x99, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x7F, 0x90, 0x94, 0x9D, \r
-0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x17, 0x7F, 0x50, 0x7E, 0x0C, 0x12, 0x5F, 0x34, 0x12, 0x08, \r
-0x79, 0x00, 0x00, 0x00, 0x7F, 0x90, 0x94, 0x9D, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x17, 0x12, \r
-0x5E, 0xCA, 0x90, 0x06, 0x08, 0xE0, 0x90, 0x94, 0x6A, 0xF0, 0x90, 0x06, 0xA1, 0xE0, 0xFE, 0x90, \r
-0x06, 0xA0, 0x12, 0x84, 0xA3, 0x90, 0x94, 0x6C, 0xF0, 0xA3, 0xEF, 0xD1, 0xE8, 0x90, 0x06, 0xA0, \r
-0x74, 0x20, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0xE4, 0xFD, 0xFF, 0x02, 0x5D, 0x92, 0xD3, 0x10, 0xAF, \r
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x58, 0xEF, 0xF0, 0x12, 0x57, 0xCE, 0x74, 0x10, 0x2F, 0xFF, \r
-0x90, 0x93, 0x58, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0x2F, 0xFF, 0x12, 0x56, 0xFE, 0x75, 0x43, 0x04, \r
-0x7B, 0x01, 0x7A, 0x94, 0x79, 0x66, 0x12, 0x35, 0x26, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, \r
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x56, 0xE0, 0xFE, 0x90, 0x94, 0x53, 0xE0, 0xC3, 0x9E, \r
-0x40, 0x04, 0x7F, 0x00, 0x80, 0x0E, 0xEF, 0x60, 0x05, 0xD3, 0x94, 0x0E, 0x40, 0x04, 0x7F, 0x00, \r
-0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x8E, 0xC4, 0xF1, 0xD5, 0x30, 0xE0, \r
-0x03, 0x12, 0x4E, 0x87, 0x22, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x22, 0x90, 0x93, 0x70, \r
-0xE4, 0x75, 0xF0, 0x08, 0x12, 0x08, 0xD6, 0x90, 0x93, 0x70, 0xE4, 0x75, 0xF0, 0x08, 0x02, 0x08, \r
-0xD6, 0xA3, 0xE0, 0x24, 0x28, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0x22, 0x24, 0x48, 0xF9, \r
-0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0x22, 0x90, 0x93, 0x6D, 0xE0, 0xFF, 0x24, 0xE3, 0xF5, 0x82, \r
-0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x22, 0x7D, 0x01, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xEA, 0x7E, \r
-0x00, 0x7F, 0x04, 0x02, 0x45, 0xC7, 0x90, 0x8E, 0x4B, 0xE0, 0x24, 0x04, 0x90, 0x8E, 0x2D, 0xF0, \r
-0xA3, 0x74, 0x08, 0xF0, 0x22, 0xE0, 0x7A, 0x00, 0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x22, 0x90, 0x93, \r
-0x6B, 0xEF, 0xF0, 0x90, 0x93, 0x1B, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x22, 0xF5, 0x83, 0xEF, 0xF0, \r
-0x90, 0x93, 0x4E, 0xE0, 0x04, 0xF0, 0x22, 0xE0, 0x24, 0x01, 0xFF, 0x90, 0x8D, 0xF8, 0xE0, 0x34, \r
-0x00, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x06, 0x89, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x22, \r
-0x90, 0x8E, 0x11, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x22, 0x90, 0x94, 0xAC, 0x12, 0x44, 0x12, \r
-0xE4, 0x90, 0x94, 0xAF, 0xF0, 0xA3, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE0, 0x44, \r
-0x80, 0xF0, 0x22, 0x90, 0x8E, 0xB9, 0xE0, 0xFF, 0x90, 0x8E, 0x1E, 0xE0, 0xD3, 0x9F, 0x22, 0xFF, \r
-0xEE, 0x54, 0x3F, 0x90, 0x8E, 0x50, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x90, 0x93, 0x49, 0xE0, 0xFD, \r
-0x90, 0x93, 0x48, 0xE0, 0x2D, 0x22, 0x90, 0x93, 0x70, 0xE4, 0x75, 0xF0, 0x02, 0x02, 0x08, 0xD6, \r
-0xF0, 0x90, 0x8E, 0x21, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x24, 0x30, 0xF9, 0xE4, 0x34, \r
-0xFC, 0xFA, 0x7B, 0x01, 0x22, 0x75, 0x41, 0x8F, 0x75, 0x42, 0xE1, 0x75, 0x43, 0x02, 0x22, 0xF0, \r
-0xEE, 0x54, 0x80, 0xFE, 0xEF, 0x54, 0x7F, 0x4E, 0x22, 0xF0, 0xEE, 0x54, 0x20, 0xFE, 0xEF, 0x54, \r
-0xDF, 0x4E, 0x22, 0x90, 0x93, 0xF8, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x90, 0x93, 0x6D, 0xE0, \r
-0xFF, 0xC3, 0x94, 0x10, 0x22, 0x90, 0x93, 0x4C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x90, 0x01, \r
-0x1F, 0xE0, 0xFE, 0x90, 0x01, 0x1E, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0x22, \r
-0x90, 0x94, 0xF8, 0xE0, 0x7F, 0x48, 0x7E, 0x09, 0x22, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, \r
-0x22, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0x7F, 0x01, 0x7E, 0x00, 0x02, 0x3D, 0xC2, \r
-0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0x22, 0x90, 0x02, 0x86, 0xE0, 0x54, 0xFB, 0xF0, 0x22, \r
-0x90, 0x93, 0xF7, 0xE0, 0xC3, 0x94, 0x0A, 0x22, 0xF0, 0xE4, 0x90, 0x93, 0x7B, 0xF0, 0xA3, 0x22, \r
-0xEA, 0x90, 0xFD, 0x11, 0xF0, 0xAF, 0x03, 0x22, 0x90, 0x8E, 0x1B, 0xE0, 0x90, 0x05, 0x73, 0x22, \r
-0x90, 0x8E, 0x12, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x90, 0x8E, 0x19, 0xE0, 0x44, 0x10, 0xF0, 0x22, \r
-0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0x22, 0x90, 0x8D, 0xFB, 0xE0, 0xFF, 0xC3, 0x13, 0x22, \r
-0x12, 0x08, 0xD6, 0x90, 0x8D, 0xF8, 0xE0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0xFF, 0x22, \r
-0x2F, 0xF8, 0xE6, 0xFE, 0xED, 0xF4, 0x5E, 0x22, 0x54, 0xDC\r
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x22, 0x12, 0x44, 0x20, 0x7F, 0x96, 0x7E, 0x02, 0x12, \r
+0x8F, 0xE1, 0xEF, 0x60, 0x42, 0x31, 0xED, 0xFE, 0x12, 0xA6, 0xB4, 0x90, 0x95, 0x25, 0xEF, 0xF0, \r
+0xEE, 0xFF, 0x90, 0xFD, 0x11, 0xF0, 0x90, 0x95, 0x25, 0xE0, 0xFD, 0x90, 0x02, 0x94, 0xF0, 0xA3, \r
+0xEF, 0xF0, 0x90, 0x95, 0x22, 0x12, 0x95, 0x9C, 0x24, 0x02, 0xFF, 0xE4, 0x33, 0xFE, 0x12, 0x8E, \r
+0x3F, 0x90, 0x95, 0x25, 0xE0, 0x24, 0x18, 0xFF, 0x90, 0x95, 0x22, 0x12, 0x44, 0x17, 0x12, 0x95, \r
+0x34, 0x90, 0x02, 0x96, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF0, 0x90, 0x01, 0x17, \r
+0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x22, 0x90, 0x93, \r
+0x3B, 0x51, 0xB9, 0xEF, 0xF0, 0xE0, 0xFE, 0x24, 0x28, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, \r
+0xE0, 0xFF, 0x74, 0x29, 0x2E, 0xD1, 0x3A, 0xE0, 0xFD, 0x90, 0x93, 0x64, 0xE0, 0x24, 0x2C, 0x12, \r
+0x9C, 0x84, 0x90, 0x93, 0x64, 0xE0, 0x2F, 0x24, 0x30, 0xA3, 0xF0, 0xE0, 0xFD, 0x24, 0x04, 0xF1, \r
+0xAD, 0xFE, 0x74, 0x05, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x31, 0xF5, 0x90, 0x90, \r
+0x96, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x65, 0xE0, 0x24, 0x0C, 0xF9, 0xE4, 0x34, 0xFC, 0x12, \r
+0x5E, 0xEE, 0x75, 0x43, 0x04, 0x7B, 0x01, 0x7A, 0x90, 0x79, 0x98, 0x12, 0x35, 0x26, 0x90, 0x93, \r
+0x65, 0xE0, 0x24, 0x14, 0xF0, 0xE0, 0xFD, 0x12, 0x57, 0x18, 0xE0, 0xFE, 0x74, 0x00, 0x2D, 0x12, \r
+0x53, 0x7D, 0x31, 0xF5, 0x90, 0x90, 0x9C, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x3C, 0x51, 0xB9, \r
+0xEF, 0xF0, 0x90, 0x90, 0x92, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x4E, 0x60, 0x12, 0x90, 0x93, 0x64, \r
+0xE0, 0x12, 0x5E, 0xE8, 0x8F, 0x43, 0x7B, 0x01, 0x7A, 0x90, 0x79, 0xA0, 0x12, 0x35, 0x26, 0x90, \r
+0x93, 0x3D, 0x51, 0xB9, 0xEF, 0xF0, 0x12, 0x5E, 0xE8, 0x90, 0x90, 0x94, 0xA3, 0xE0, 0xF5, 0x43, \r
+0x7B, 0x01, 0x7A, 0x90, 0x79, 0xC0, 0x02, 0x35, 0x26, 0xE0, 0xFF, 0x51, 0xC6, 0x90, 0x93, 0x64, \r
+0x22, 0x90, 0x8E, 0x2E, 0xE0, 0xFF, 0xE4, 0xFE, 0xEF, 0xC3, 0x13, 0xFD, 0xEF, 0x30, 0xE0, 0x02, \r
+0x7E, 0x80, 0x90, 0xFD, 0x10, 0xED, 0xF0, 0xAF, 0x06, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
+0xD0, 0x90, 0x93, 0x6E, 0x12, 0x93, 0x15, 0x90, 0x93, 0x86, 0x74, 0x18, 0xF0, 0x7E, 0x00, 0x7F, \r
+0x80, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x8E, 0x12, 0x08, 0xAA, 0x90, 0x01, 0xC4, 0x74, \r
+0xDA, 0xF0, 0x74, 0x82, 0xA3, 0xF0, 0x90, 0x93, 0x33, 0xE0, 0xFF, 0x51, 0xC6, 0x90, 0x93, 0x85, \r
+0xEF, 0xF0, 0xF9, 0xE0, 0xFE, 0x24, 0x29, 0xD1, 0x3A, 0x74, 0x41, 0xF0, 0xEE, 0x24, 0x28, 0xFD, \r
+0xE4, 0x33, 0xFC, 0x90, 0x93, 0x86, 0xE0, 0x7A, 0x00, 0x2D, 0xFE, 0xEA, 0x3C, 0x90, 0x93, 0x8A, \r
+0xF0, 0xA3, 0xCE, 0xF0, 0x74, 0x28, 0x29, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0x90, 0x93, \r
+0x70, 0xE0, 0xFD, 0x12, 0x7D, 0xC6, 0xB1, 0xDC, 0x90, 0x93, 0x8A, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, \r
+0x93, 0x88, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x8E, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x03, \r
+0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0x74, 0x5F, 0xF0, 0x90, 0x93, 0x8A, 0x12, 0xA5, 0xB8, 0x90, 0x8F, \r
+0xC4, 0xE0, 0xFF, 0x7E, 0x02, 0xB4, 0xFE, 0x02, 0x7E, 0xFE, 0x90, 0x93, 0x8A, 0xA3, 0xE0, 0xFD, \r
+0x12, 0x53, 0x7B, 0xEE, 0xF0, 0x74, 0x00, 0x2D, 0x12, 0x53, 0x7D, 0xE0, 0x90, 0x93, 0x92, 0xF0, \r
+0x90, 0x93, 0x8A, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x08, 0xD6, 0x90, 0x90, 0x59, 0xE0, 0x90, 0x93, \r
+0x6E, 0xB4, 0x01, 0x0B, 0xE0, 0x44, 0x03, 0xFC, 0xA3, 0xE0, 0x44, 0x10, 0xFD, 0x80, 0x09, 0xE0, \r
+0x44, 0x03, 0xFC, 0xA3, 0xE0, 0x44, 0x20, 0xFD, 0x90, 0x93, 0x8C, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, \r
+0x90, 0x93, 0x93, 0x74, 0x03, 0xF0, 0xA3, 0x74, 0x12, 0xF0, 0xD1, 0x09, 0xEF, 0x64, 0xFE, 0x70, \r
+0x25, 0x90, 0x93, 0x8A, 0xA3, 0xE0, 0x24, 0x00, 0x12, 0xA5, 0x91, 0xC0, 0x03, 0x8B, 0x40, 0xD1, \r
+0x2D, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x75, 0x40, 0x01, 0xD1, 0x2D, 0x7B, 0x01, 0x7A, 0x93, 0x79, \r
+0x95, 0x12, 0x35, 0x26, 0x80, 0x56, 0x90, 0x93, 0x2E, 0xE0, 0xFF, 0xB4, 0x02, 0x26, 0x90, 0x93, \r
+0x8A, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x24, 0x00, 0xF5, 0x82, 0x74, 0xFC, 0x3C, 0xF5, 0x83, 0xE4, \r
+0xF0, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0x74, 0xFC, 0x3C, 0xF5, 0x83, 0x74, 0x20, 0xB1, 0xF8, 0x74, \r
+0x20, 0xF0, 0x80, 0x28, 0xEF, 0xB4, 0x04, 0x24, 0x90, 0x93, 0x8A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, \r
+0x24, 0x00, 0xF5, 0x82, 0x74, 0xFC, 0x3E, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, \r
+0x74, 0xFC, 0x3E, 0xF5, 0x83, 0x74, 0x10, 0xB1, 0xF8, 0x74, 0x10, 0xF0, 0xD1, 0x09, 0xE4, 0x90, \r
+0x93, 0x87, 0xF0, 0xF1, 0xB6, 0xFE, 0x90, 0x93, 0x8A, 0xA3, 0xE0, 0xFD, 0xEF, 0x2D, 0x12, 0x53, \r
+0x7B, 0xEE, 0xF0, 0xF1, 0xB6, 0xFE, 0x74, 0x97, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, \r
+0xEE, 0xB1, 0xD4, 0xE0, 0xB4, 0x08, 0xDC, 0xB1, 0xE6, 0x90, 0x93, 0x8A, 0xF1, 0xDF, 0x90, 0x93, \r
+0x8A, 0xE4, 0x75, 0xF0, 0x10, 0x12, 0x08, 0xD6, 0xB1, 0xDC, 0xE4, 0x90, 0x94, 0x11, 0xF0, 0xE4, \r
+0x90, 0x93, 0x87, 0xF0, 0xD1, 0x00, 0x50, 0x0F, 0x12, 0xA5, 0x99, 0xB1, 0xCD, 0xD1, 0x13, 0x12, \r
+0x53, 0x7A, 0xE4, 0xB1, 0xD4, 0x80, 0xED, 0xF1, 0xE6, 0x90, 0x06, 0x31, 0xE0, 0x54, 0xFB, 0xF0, \r
+0x90, 0x93, 0x34, 0xE0, 0xFD, 0x12, 0xA0, 0x0A, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, \r
+0x90, 0xAC, 0x7B, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0xFF, 0x90, 0x93, 0x33, 0xE0, 0xC3, 0x9F, \r
+0xFF, 0xE4, 0x94, 0x00, 0xFE, 0xEF, 0x78, 0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, \r
+0x90, 0x93, 0x86, 0xE0, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x3E, 0xCF, 0x24, 0x38, 0xCF, 0x34, 0x00, \r
+0xFE, 0x90, 0xAC, 0x7A, 0x74, 0x10, 0xF0, 0x7B, 0x63, 0xE4, 0xFD, 0x12, 0x39, 0x9C, 0x7B, 0x01, \r
+0x7A, 0x93, 0x79, 0x8E, 0x90, 0xAC, 0xA0, 0x12, 0x44, 0x20, 0x7A, 0x93, 0x79, 0x71, 0x90, 0xAC, \r
+0xA3, 0x12, 0x44, 0x20, 0x90, 0xAC, 0xA6, 0x74, 0x10, 0xF0, 0x7A, 0x8F, 0x79, 0x80, 0x12, 0x35, \r
+0x86, 0x90, 0x94, 0x11, 0xE0, 0x04, 0xF0, 0x90, 0x06, 0x31, 0xE0, 0x30, 0xE2, 0x06, 0xB1, 0xF0, \r
+0x50, 0x02, 0x81, 0x8F, 0xB1, 0xF0, 0x40, 0x0A, 0x90, 0x06, 0x35, 0xE0, 0x44, 0x20, 0x90, 0x06, \r
+0x34, 0xF0, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0xD1, 0x00, 0x50, 0x21, 0x12, 0xA5, 0x99, 0xB1, 0xCD, \r
+0xD1, 0x13, 0x90, 0x93, 0x87, 0xE0, 0x24, 0x71, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0xE0, \r
+0xFF, 0x90, 0x93, 0x85, 0x12, 0x53, 0x7A, 0xEF, 0xB1, 0xD4, 0x80, 0xDB, 0x90, 0x04, 0x1D, 0xE0, \r
+0x60, 0x22, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x94, 0x10, 0xF0, 0x7D, 0x1D, 0x12, 0x5D, 0x2C, 0xBF, \r
+0x01, 0x06, 0xB1, 0xB8, 0x90, 0x04, 0x25, 0xF0, 0x90, 0x94, 0x10, 0xE0, 0xFF, 0x7D, 0x1E, 0x12, \r
+0x5A, 0x57, 0x80, 0x06, 0xB1, 0xB8, 0x90, 0x04, 0x25, 0xF0, 0x12, 0x5F, 0xE3, 0x90, 0x8E, 0x4A, \r
+0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x5A, 0x0E, 0x74, 0xDA, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, \r
+0x82, 0xA3, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x33, 0xE0, 0xFF, 0x90, 0x95, 0x29, \r
+0x74, 0x08, 0xF0, 0x7B, 0x18, 0x7D, 0x01, 0x12, 0x5D, 0xDA, 0x90, 0x93, 0x85, 0xEF, 0xF0, 0x90, \r
+0x93, 0x33, 0xE0, 0x22, 0xF0, 0x90, 0x93, 0x87, 0xE0, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x8A, 0xE4, \r
+0x75, 0xF0, 0x08, 0x12, 0x08, 0xD6, 0x90, 0x93, 0x8A, 0xE4, 0x75, 0xF0, 0x08, 0x02, 0x08, 0xD6, \r
+0x90, 0x94, 0x11, 0xE0, 0xC3, 0x94, 0x0A, 0x22, 0xF0, 0xE4, 0x90, 0x93, 0x95, 0xF0, 0xA3, 0x22, \r
+0x90, 0x93, 0x87, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x22, 0x90, 0x93, 0x8A, 0xE4, 0x75, 0xF0, 0x02, \r
+0x02, 0x08, 0xD6, 0xFD, 0xD1, 0x1C, 0x90, 0x93, 0x85, 0xEF, 0xF0, 0x22, 0xC3, 0xEE, 0x94, 0x01, \r
+0x40, 0x0A, 0x0D, 0xED, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xE4, 0x2F, 0xFF, 0x22, 0x75, 0x41, 0x8F, \r
+0x75, 0x42, 0xC7, 0x75, 0x43, 0x02, 0x22, 0x74, 0x29, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, \r
+0x83, 0x22, 0xD1, 0x61, 0x54, 0x3F, 0xF0, 0xEF, 0x60, 0x0B, 0xD1, 0x37, 0xE0, 0x44, 0x10, 0xD1, \r
+0x60, 0x44, 0x80, 0xF0, 0x22, 0xD1, 0x37, 0xE0, 0x54, 0xEF, 0xD1, 0x60, 0x44, 0x40, 0xF0, 0x22, \r
+0xF0, 0x74, 0x09, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xE4, 0xFD, 0xFC, \r
+0x90, 0x93, 0x3A, 0xF1, 0xA0, 0xAB, 0x05, 0x74, 0x01, 0x2B, 0x12, 0x57, 0x1A, 0xE0, 0xFE, 0x74, \r
+0x00, 0x2B, 0x12, 0x53, 0x7D, 0x12, 0xA5, 0xCA, 0x90, 0x90, 0x8C, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, \r
+0x03, 0x2B, 0x12, 0xA4, 0x65, 0xE0, 0xFE, 0x74, 0x02, 0x2B, 0x12, 0xA4, 0x81, 0xE0, 0x24, 0x00, \r
+0xFF, 0xEA, 0x3E, 0x90, 0x90, 0x8E, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x05, 0x2B, 0x12, 0xA4, 0x89, \r
+0xFE, 0x74, 0x04, 0x2B, 0xF1, 0xAD, 0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x90, 0x90, 0x90, 0xF0, 0xA3, \r
+0xEF, 0xF0, 0x74, 0x07, 0x2B, 0x12, 0xA4, 0x9B, 0xFE, 0x74, 0x06, 0x2B, 0xF1, 0x8F, 0x24, 0x00, \r
+0xFF, 0xEA, 0x3E, 0x90, 0x90, 0x92, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x09, 0x2B, 0xD1, 0x64, 0xFE, \r
+0x74, 0x08, 0x2B, 0x12, 0xA4, 0x92, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x90, 0x90, 0x94, 0xF0, 0xA3, \r
+0xEF, 0xF0, 0x22, 0x90, 0x8D, 0x3A, 0xE0, 0xFF, 0x90, 0x95, 0x12, 0xE0, 0xFB, 0x90, 0x95, 0x29, \r
+0x74, 0x0A, 0xF0, 0x7D, 0x01, 0x12, 0x5D, 0xDA, 0x90, 0x95, 0x13, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, \r
+0xF0, 0xFD, 0x90, 0x95, 0x11, 0xE0, 0xFF, 0xD1, 0x42, 0x90, 0x95, 0x13, 0xE0, 0xFE, 0xA3, 0xE0, \r
+0xFF, 0x90, 0x81, 0x00, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0xF1, 0x83, 0x44, 0x01, 0xF0, 0xF1, \r
+0x83, 0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x12, 0x2C, 0x12, 0xA5, 0xC2, 0xE0, 0x44, 0xFA, 0xF0, \r
+0x74, 0x11, 0x2C, 0x12, 0xA6, 0xBC, 0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF1, \r
+0x8F, 0x44, 0x0E, 0xF0, 0x90, 0x04, 0xA7, 0xE4, 0xF0, 0x90, 0x04, 0xA6, 0xF0, 0x90, 0x04, 0xA5, \r
+0x74, 0xFF, 0xF0, 0x90, 0x04, 0xA4, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF1, 0x7B, 0xE0, 0x54, \r
+0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF1, 0x7B, 0xED, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, \r
+0xF5, 0x83, 0x22, 0x74, 0x0D, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xF5, \r
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xEF, 0x60, 0x04, 0xD1, 0x6D, 0x31, 0xFE, 0x22, \r
+0xE0, 0xFF, 0x51, 0xC6, 0x7C, 0x00, 0xAD, 0x07, 0x22, 0xF0, 0x74, 0x04, 0x2F, 0xF5, 0x82, 0xE4, \r
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0x90, 0x93, 0x87, 0xE0, 0xFF, 0x24, 0xC9, 0xF5, 0x82, 0xE4, \r
+0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x22, 0xF1, 0xD7, 0x12, 0x5E, 0xEA, 0x75, 0x43, 0x70, 0x7B, 0x01, \r
+0x7A, 0x8E, 0x79, 0xE8, 0x02, 0x35, 0x26, 0x51, 0xC6, 0x7E, 0x00, 0x74, 0x00, 0x2F, 0x22, 0xE4, \r
+0x75, 0xF0, 0x20, 0x02, 0x08, 0xD6, 0x7F, 0x64, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0xF1, 0xD7, 0x12, \r
+0x5E, 0xEA, 0x75, 0x43, 0x08, 0x7B, 0x01, 0x7A, 0x90, 0x79, 0x5A, 0x02, 0x35, 0x26, 0x12, 0x06, \r
+0x89, 0x54, 0x01, 0xFF, 0x90, 0x93, 0x53, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0x22, 0x12, 0x06, 0x89, \r
+0x90, 0x8E, 0x52, 0xF0, 0x22, 0x12, 0x06, 0x89, 0x90, 0x8E, 0xAA, 0xF0, 0x22, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8D, 0x90, 0xE0, 0xFF, 0x90, 0x8D, 0x8F, 0xE0, 0xB5, 0x07, 0x04, \r
+0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x41, 0x90, 0x8D, 0x8F, 0xE0, 0xFE, 0x75, 0xF0, \r
+0x08, 0x90, 0x8D, 0x3F, 0x12, 0x44, 0x0B, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x40, \r
+0xF9, 0x74, 0x8D, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xAF, 0x05, 0x12, 0x78, 0x44, 0x90, 0x8D, 0x8F, \r
+0x12, 0x81, 0x0E, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x8D, 0x8F, 0xF0, \r
+0x12, 0x69, 0x63, 0x90, 0x8D, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, \r
+0x90, 0x8E, 0x27, 0xF0, 0xA3, 0xF0, 0x90, 0x8D, 0x8F, 0xF0, 0xA3, 0xF0, 0x22, 0x31, 0xA3, 0x11, \r
+0x7F, 0xD1, 0xCE, 0x51, 0x46, 0x11, 0xB9, 0x71, 0x40, 0x12, 0x7F, 0xAC, 0x90, 0x93, 0x4E, 0xE0, \r
+0x54, 0x7F, 0xF0, 0x54, 0xBF, 0xF0, 0x54, 0xDF, 0xF0, 0x54, 0xF0, 0xF0, 0xE4, 0x90, 0x93, 0x50, \r
+0xF0, 0x90, 0x93, 0x4E, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x7E, 0x00, 0x7F, 0x25, 0x7D, 0x00, 0x7B, \r
+0x01, 0x7A, 0x8E, 0x79, 0xAF, 0x12, 0x08, 0xAA, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x20, 0xF0, 0x91, \r
+0xD7, 0x12, 0x4E, 0xD4, 0x90, 0x8D, 0x07, 0xE0, 0xFF, 0x64, 0x02, 0x70, 0x2A, 0x31, 0x9C, 0x30, \r
+0xE0, 0x02, 0x7E, 0x01, 0x90, 0x8E, 0xCE, 0x31, 0x9A, 0x30, 0xE1, 0x02, 0x7E, 0x01, 0x90, 0x8E, \r
+0xCC, 0x31, 0x9A, 0x30, 0xE2, 0x02, 0x7E, 0x01, 0x90, 0x8E, 0xCD, 0xEE, 0xF0, 0x90, 0xFD, 0x80, \r
+0xE0, 0x90, 0x02, 0xFB, 0xF0, 0x80, 0x4A, 0xEF, 0x64, 0x01, 0x70, 0x1D, 0x31, 0x93, 0x30, 0xE0, \r
+0x02, 0x7F, 0x01, 0x90, 0x8E, 0xCE, 0x31, 0x91, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0x8E, 0xCC, \r
+0x31, 0x91, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x80, 0x23, 0x90, 0x8D, 0x07, 0xE0, 0x64, 0x03, 0x70, \r
+0x20, 0x31, 0x8A, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90, 0x8E, 0xCE, 0x31, 0x88, 0x30, 0xE1, 0x02, \r
+0x7F, 0x01, 0x90, 0x8E, 0xCC, 0x31, 0x88, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x90, 0x8E, 0xCD, 0xEF, \r
+0xF0, 0x90, 0x8E, 0xAF, 0xE0, 0x54, 0xEF, 0xF0, 0xE4, 0x90, 0x90, 0xE2, 0xF0, 0xA3, 0xF0, 0x90, \r
+0x90, 0xEA, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0xEE, 0x12, 0x08, 0x79, 0x00, \r
+0x00, 0x00, 0x00, 0x90, 0x90, 0xE6, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0x2A, \r
+0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x00, 0x22, 0xEF, 0xF0, 0x90, 0xFD, 0x78, 0xE0, 0x7F, 0x00, \r
+0x22, 0xEF, 0xF0, 0x90, 0xFD, 0x70, 0xE0, 0x7F, 0x00, 0x22, 0xEE, 0xF0, 0x90, 0xFD, 0x80, 0xE0, \r
+0x7E, 0x00, 0x22, 0xE4, 0xFD, 0xFF, 0x51, 0x4B, 0xFE, 0xEF, 0x54, 0x07, 0xFF, 0xED, 0x70, 0x12, \r
+0x31, 0xE6, 0xC0, 0x83, 0xC0, 0x82, 0x31, 0xDE, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5E, \r
+0x80, 0x0F, 0x31, 0xE6, 0xC0, 0x83, 0xC0, 0x82, 0x31, 0xDE, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, \r
+0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x31, 0xF1, 0x90, 0x8E, 0x40, 0xEF, 0xF0, 0x22, 0xE0, 0xFE, \r
+0x74, 0x01, 0xA8, 0x07, 0x08, 0x22, 0x74, 0x30, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7D, 0x10, 0xED, 0x14, 0xF9, 0x24, 0x30, 0x31, \r
+0xE9, 0xE0, 0x60, 0x39, 0x7C, 0x08, 0xEC, 0x14, 0x90, 0x95, 0x52, 0xF0, 0x74, 0x30, 0x29, 0x31, \r
+0xE9, 0xE0, 0xFB, 0x7A, 0x00, 0x90, 0x95, 0x52, 0x71, 0x36, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, \r
+0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5A, 0xFE, 0xEF, 0x5B, 0x4E, 0x60, 0x0F, 0xE9, 0x75, 0xF0, 0x08, \r
+0xA4, 0xFF, 0x90, 0x95, 0x52, 0xE0, 0x2F, 0x04, 0xFF, 0x80, 0x06, 0xDC, 0xC9, 0xDD, 0xBB, 0x7F, \r
+0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF1, 0x7D, 0x02, 0x08, 0xAA, 0xEF, 0x13, 0x13, 0x13, 0x54, \r
+0x1F, 0x22, 0x90, 0x93, 0x45, 0xE0, 0x30, 0xE0, 0x7A, 0x90, 0x93, 0x49, 0xE0, 0x04, 0xF0, 0x90, \r
+0x93, 0x4C, 0xE0, 0x64, 0x01, 0x70, 0x2F, 0x90, 0x93, 0x45, 0x12, 0x9E, 0xD0, 0x30, 0xE0, 0x26, \r
+0x90, 0x93, 0x4B, 0xE0, 0x70, 0x20, 0x90, 0x93, 0x48, 0xE0, 0xFE, 0xA3, 0xE0, 0xC3, 0x9E, 0x40, \r
+0x15, 0x51, 0x4B, 0x30, 0xE0, 0x08, 0x51, 0xD4, 0x12, 0x7F, 0x79, 0xF0, 0x80, 0x08, 0x12, 0x67, \r
+0xA5, 0x12, 0x7F, 0x79, 0xF0, 0x22, 0x90, 0x93, 0x49, 0xE0, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0xD3, \r
+0x9F, 0x50, 0x30, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2, 0x1A, 0x90, 0x93, 0x4B, 0xE0, 0x70, 0x14, \r
+0x7D, 0x08, 0xFF, 0x12, 0x5D, 0x8E, 0x90, 0x93, 0x4A, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x44, 0xE0, \r
+0x04, 0xF0, 0x80, 0x06, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x49, 0xF0, 0x90, \r
+0x93, 0x4B, 0xF0, 0x22, 0xE4, 0xFD, 0xFF, 0x31, 0xA6, 0xE4, 0xFF, 0x7D, 0x01, 0x02, 0x6F, 0xC2, \r
+0x90, 0x93, 0x45, 0xE0, 0xFD, 0x30, 0xE0, 0x4D, 0x90, 0x93, 0x4A, 0xE0, 0xFC, 0x60, 0x46, 0x71, \r
+0x38, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x04, 0xE0, 0xE0, 0xFB, \r
+0xEF, 0x5B, 0x60, 0x0B, 0xE4, 0x90, 0x93, 0x4A, 0xF0, 0x90, 0x93, 0x4C, 0x04, 0xF0, 0x22, 0x90, \r
+0x93, 0x47, 0xE0, 0xD3, 0x9C, 0x50, 0x15, 0xED, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x04, \r
+0x51, 0xD4, 0x80, 0x03, 0x12, 0x67, 0xA5, 0x12, 0x7F, 0x79, 0xF0, 0x22, 0x12, 0x5D, 0x8A, 0x90, \r
+0x93, 0x4A, 0xE0, 0x04, 0xF0, 0x22, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x22, \r
+0x90, 0x93, 0x41, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0x7F, 0xF0, 0x54, 0xFB, 0xF0, 0xA3, 0x74, 0x0A, \r
+0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x8E, 0x42, 0x91, 0x76, 0x30, 0xE0, 0x15, 0xEF, \r
+0x54, 0xBF, 0x71, 0xA2, 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0xFE, \r
+0xF0, 0x12, 0x58, 0x58, 0xE4, 0xFF, 0x41, 0xE0, 0x90, 0x8E, 0x42, 0xE0, 0xFF, 0x12, 0x7F, 0xA5, \r
+0x30, 0xE0, 0x1B, 0xEF, 0x54, 0x7F, 0x71, 0xA2, 0x30, 0xE1, 0x06, 0xE0, 0x44, 0x02, 0xF0, 0x80, \r
+0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x8E, 0x47, 0xE0, 0x60, 0x03, 0x12, 0x58, 0x58, 0x7F, 0x01, \r
+0x41, 0xE0, 0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x90, 0x8E, 0x43, 0x22, 0x90, 0x95, 0x3C, 0xEF, 0x71, \r
+0x50, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x90, 0x95, 0x3C, 0xE0, \r
+0x6F, 0x60, 0x33, 0xC3, 0x90, 0x95, 0x3E, 0xE0, 0x94, 0x88, 0x90, 0x95, 0x3D, 0xE0, 0x94, 0x13, \r
+0x40, 0x08, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x90, 0x95, 0x3D, 0x12, 0x94, 0x9D, \r
+0xD3, 0x90, 0x95, 0x3E, 0xE0, 0x94, 0x32, 0x90, 0x95, 0x3D, 0xE0, 0x94, 0x00, 0x40, 0xC2, 0x90, \r
+0x01, 0xC6, 0xE0, 0x30, 0xE0, 0xBB, 0x22, 0xEF, 0x60, 0x35, 0x90, 0x93, 0x30, 0xE0, 0xFF, 0x60, \r
+0x03, 0x12, 0x87, 0xED, 0x90, 0x01, 0xC7, 0xE4, 0x12, 0x81, 0xEC, 0xF1, 0xB1, 0x90, 0x06, 0x09, \r
+0xE0, 0x54, 0xFE, 0xF0, 0x7D, 0x35, 0x12, 0x4B, 0x2B, 0xF1, 0xD1, 0x91, 0xEA, 0x91, 0x45, 0xF1, \r
+0x74, 0x91, 0x7E, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0xFD, 0xE4, 0xFF, 0x02, 0x6C, 0x7E, 0x7D, \r
+0x08, 0xE4, 0xFF, 0x12, 0x6C, 0x67, 0x90, 0x06, 0x90, 0xE0, 0x54, 0xF0, 0xF0, 0xF1, 0xC9, 0x91, \r
+0xAD, 0x91, 0x65, 0x01, 0xB9, 0xF1, 0x99, 0xF1, 0xB9, 0x30, 0xE0, 0x18, 0x90, 0x8E, 0x2C, 0xE0, \r
+0xFF, 0xC4, 0x54, 0x0F, 0x20, 0xE0, 0x0D, 0x90, 0x95, 0x01, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, \r
+0x14, 0x12, 0x70, 0xCB, 0x22, 0x91, 0x6A, 0x02, 0x75, 0x44, 0x90, 0x8E, 0xAF, 0x91, 0x76, 0x30, \r
+0xE0, 0x03, 0x12, 0x4E, 0xD4, 0x22, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x22, 0xE4, 0xFF, \r
+0x74, 0x18, 0x91, 0xA2, 0x74, 0xBF, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0, \r
+0x74, 0x10, 0x91, 0xA2, 0x74, 0xB9, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xB1, 0x95, 0xB4, 0x06, \r
+0xDF, 0x22, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x06, 0xF5, 0x83, 0xE0, 0xFE, 0x22, 0x91, 0xD7, 0x90, \r
+0x93, 0x3F, 0xE0, 0xFF, 0xB1, 0x37, 0x90, 0x01, 0x3F, 0x74, 0x04, 0xF0, 0x90, 0x8D, 0x07, 0xE0, \r
+0xFF, 0xB4, 0x01, 0x07, 0x90, 0xFD, 0x00, 0xE0, 0x54, 0xEF, 0xF0, 0xEF, 0xB4, 0x01, 0x07, 0x90, \r
+0xFE, 0x10, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, \r
+0x7F, 0x8F, 0x12, 0x49, 0x47, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x9E, 0xF7, 0xAD, 0x07, 0x90, \r
+0x01, 0xC4, 0x74, 0xEA, 0xF0, 0x74, 0x8C, 0xA3, 0xF0, 0xED, 0x64, 0x01, 0x60, 0x1E, 0x12, 0x67, \r
+0x9D, 0xED, 0xB4, 0x02, 0x08, 0x90, 0x01, 0xC7, 0x74, 0x40, 0xF0, 0x80, 0x0A, 0xED, 0xB4, 0x04, \r
+0x06, 0x90, 0x01, 0xC7, 0x74, 0x41, 0xF0, 0x7F, 0x01, 0x02, 0x67, 0xAD, 0xB1, 0x9C, 0x90, 0x02, \r
+0x87, 0xE0, 0x70, 0xF8, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x02, 0xF0, 0x74, 0xEA, 0x04, 0x90, 0x01, \r
+0xC4, 0xF0, 0x74, 0x8C, 0xA3, 0xF0, 0x22, 0x90, 0x93, 0x67, 0xEF, 0xF0, 0xE4, 0xFF, 0x74, 0x5A, \r
+0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, \r
+0x34, 0x04, 0xB1, 0x95, 0xB4, 0x08, 0xE7, 0x90, 0x90, 0x8A, 0xE0, 0x90, 0x04, 0x8C, 0xF0, 0x75, \r
+0x40, 0x01, 0x75, 0x41, 0x8F, 0x75, 0x42, 0xC9, 0x75, 0x43, 0x08, 0x7B, 0x01, 0x7A, 0x90, 0x79, \r
+0x62, 0x12, 0x35, 0x26, 0x90, 0x93, 0x3F, 0xE0, 0x60, 0x1A, 0x90, 0x93, 0x67, 0xF1, 0xC1, 0x12, \r
+0xA5, 0x8E, 0xC0, 0x03, 0x8B, 0x40, 0x75, 0x41, 0x90, 0x75, 0x42, 0x5A, 0x75, 0x43, 0x32, 0xD0, \r
+0x03, 0x12, 0x35, 0x26, 0x22, 0xF5, 0x83, 0xEE, 0xF0, 0x0F, 0xEF, 0x22, 0x12, 0xA6, 0x82, 0x12, \r
+0x81, 0xF5, 0x90, 0x93, 0x64, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x02, 0x87, 0xE0, 0xF9, 0x90, 0x8E, \r
+0xAF, 0xE0, 0x30, 0xE0, 0x72, 0xEC, 0xC3, 0x99, 0x50, 0x6D, 0x90, 0x93, 0x64, 0xE0, 0xFA, 0xA3, \r
+0xE0, 0xFB, 0xF1, 0xD9, 0xAD, 0x07, 0xD1, 0x28, 0x12, 0xA5, 0xCA, 0x54, 0x3F, 0x90, 0x93, 0x66, \r
+0xD1, 0xAC, 0xE0, 0x54, 0x03, 0xFB, 0xEF, 0x24, 0x18, 0xFF, 0xE4, 0x33, 0xCF, 0x2B, 0xCF, 0x3A, \r
+0x90, 0x93, 0x66, 0x8F, 0xF0, 0x12, 0x08, 0xD6, 0x90, 0x93, 0x66, 0xD1, 0x85, 0x12, 0xA6, 0x67, \r
+0x90, 0x93, 0x64, 0xEE, 0x8F, 0xF0, 0x12, 0xA6, 0xDC, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x93, \r
+0x65, 0xE0, 0x9F, 0x90, 0x93, 0x64, 0xE0, 0x9E, 0x40, 0x14, 0x90, 0x8E, 0x2A, 0x12, 0xA5, 0xDE, \r
+0xFE, 0xC3, 0x90, 0x93, 0x65, 0xE0, 0x9F, 0xF0, 0x90, 0x93, 0x64, 0xE0, 0x9E, 0xF0, 0x90, 0x93, \r
+0x64, 0x12, 0x9E, 0xE4, 0x0C, 0x80, 0x8E, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, \r
+0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x00, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0x22, 0xE4, \r
+0xFC, 0xED, 0x2C, 0x24, 0x00, 0xD1, 0x37, 0xE4, 0xF0, 0x0C, 0xEC, 0xB4, 0x18, 0xF3, 0xD1, 0x34, \r
+0xEF, 0xF0, 0xEE, 0x54, 0x3F, 0xFF, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, \r
+0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, \r
+0xD1, 0xC3, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x0B, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, \r
+0xE0, 0x44, 0x10, 0xF0, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7D, 0x07, 0xEF, 0x5D, 0xC3, 0x60, \r
+0x0A, 0xD1, 0x9F, 0x24, 0x08, 0xFF, 0xE4, 0x3E, 0xFE, 0x80, 0x03, 0xD1, 0x9F, 0xFF, 0x22, 0x74, \r
+0xFF, 0x9D, 0xFD, 0x74, 0xFF, 0x94, 0x00, 0x5E, 0xFE, 0xED, 0x5F, 0x22, 0xF0, 0xA3, 0xEF, 0xF0, \r
+0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x54, 0x0F, 0x33, 0x33, 0x33, \r
+0x54, 0xF8, 0xFF, 0x74, 0x03, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0x22, 0x7E, 0x00, \r
+0x7F, 0x62, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0x42, 0x12, 0x08, 0xAA, 0xF1, 0x7D, 0x12, \r
+0x08, 0xAA, 0x90, 0x8E, 0x46, 0x74, 0x02, 0xF0, 0x90, 0x8E, 0x4D, 0x14, 0xF0, 0xA3, 0xF0, 0xA3, \r
+0x74, 0x0A, 0xF0, 0x90, 0x8E, 0x53, 0xE4, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0xF1, 0x8A, 0x12, 0xA2, \r
+0x44, 0xE4, 0xFD, 0xFF, 0x12, 0x5F, 0x02, 0x7D, 0x0C, 0x7F, 0x02, 0x12, 0x5F, 0x02, 0xF1, 0x9A, \r
+0x90, 0x8D, 0x07, 0xE0, 0xFF, 0xB4, 0x01, 0x08, 0x90, 0x8E, 0x52, 0x74, 0xDD, 0xF0, 0x80, 0x0F, \r
+0xEF, 0x90, 0x8E, 0x52, 0xB4, 0x03, 0x05, 0x74, 0xD4, 0xF0, 0x80, 0x03, 0x74, 0x40, 0xF0, 0x7F, \r
+0x79, 0x12, 0x4A, 0x5D, 0xEF, 0x54, 0x03, 0xFF, 0xBF, 0x02, 0x0F, 0x7F, 0x28, 0x12, 0x4A, 0x5D, \r
+0xEF, 0x30, 0xE2, 0x06, 0x90, 0x8E, 0x64, 0x74, 0x02, 0xF0, 0x12, 0x7B, 0x68, 0xF1, 0x8A, 0x7F, \r
+0x01, 0x12, 0x9B, 0x11, 0x90, 0x05, 0x58, 0x74, 0x02, 0xF0, 0x7E, 0x00, 0xFF, 0x7D, 0x00, 0x7B, \r
+0x01, 0x7A, 0x8E, 0x79, 0xA8, 0x12, 0x08, 0xAA, 0xF1, 0xA1, 0xF1, 0xA9, 0xF1, 0x77, 0xE4, 0x90, \r
+0x8E, 0xAA, 0xF0, 0x22, 0x12, 0x4E, 0x02, 0xE4, 0xFD, 0xFF, 0x02, 0x5A, 0x57, 0x7E, 0x00, 0x7F, \r
+0x04, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xAB, 0x22, 0x90, 0x8E, 0x64, 0xE0, 0x24, 0x04, \r
+0x90, 0x8E, 0x5F, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0x22, 0x7D, 0x0C, 0x7F, 0x01, 0x02, 0x5F, \r
+0x02, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x22, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, \r
+0x22, 0x90, 0x8E, 0x29, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x90, 0x8E, 0xAF, 0xE0, 0xC4, 0x54, 0x0F, \r
+0x22, 0xE0, 0xFF, 0x12, 0x82, 0xC6, 0x7E, 0x00, 0x22, 0x90, 0x02, 0x86, 0xE0, 0x54, 0xFB, 0xF0, \r
+0x22, 0x90, 0x02, 0x86, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0xEA, 0x90, 0xFD, 0x11, 0xF0, 0xAF, 0x03, \r
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x1A, 0x12, 0x90, 0x2F, 0xA3, 0xF0, \r
+0xA3, 0xF0, 0x90, 0x95, 0x1A, 0x12, 0x90, 0x23, 0xE0, 0x60, 0x21, 0xC3, 0x90, 0x95, 0x1D, 0xE0, \r
+0x94, 0xE8, 0x90, 0x95, 0x1C, 0xE0, 0x94, 0x03, 0x40, 0x0B, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x80, \r
+0xF0, 0x7F, 0x00, 0x80, 0x09, 0x90, 0x95, 0x1C, 0x91, 0x19, 0x80, 0xD6, 0x7F, 0x01, 0xD0, 0xD0, \r
+0x92, 0xAF, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0x22, 0x90, 0x93, 0x60, 0xEE, \r
+0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x22, 0x90, 0x93, 0x70, 0x11, 0x2F, 0x90, 0x93, 0x78, 0xF0, 0x90, \r
+0x93, 0x78, 0xE0, 0xFD, 0xC3, 0x94, 0x06, 0x50, 0x22, 0x90, 0x93, 0x71, 0xE0, 0x24, 0x04, 0x71, \r
+0xEC, 0x12, 0x63, 0x99, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x72, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, \r
+0x83, 0xEF, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x80, 0xD4, 0x78, 0xB9, 0x7C, 0x8E, 0x7D, \r
+0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x72, 0x91, 0x10, 0x7F, 0x00, 0x70, 0x02, 0x7F, 0x01, 0x22, \r
+0x71, 0x12, 0x71, 0x0B, 0x7B, 0xFF, 0x7A, 0x40, 0x79, 0x90, 0x31, 0x2E, 0x78, 0x6A, 0x7C, 0x93, \r
+0x7D, 0x01, 0x7B, 0xFF, 0x7A, 0x40, 0x79, 0x96, 0x31, 0x27, 0x12, 0x64, 0xBC, 0x11, 0x36, 0xEF, \r
+0x70, 0x02, 0x21, 0x26, 0x12, 0x67, 0x59, 0xFE, 0x90, 0x93, 0x6E, 0xF0, 0xA3, 0xEF, 0xF0, 0x24, \r
+0x06, 0xFF, 0xE4, 0x3E, 0x12, 0x66, 0x18, 0xEF, 0x64, 0x08, 0x70, 0x6A, 0x90, 0x93, 0x6F, 0xE0, \r
+0x24, 0x07, 0xFF, 0x90, 0x93, 0x6E, 0x12, 0x66, 0x15, 0xEF, 0x70, 0x5A, 0x90, 0x93, 0x69, 0xF0, \r
+0x90, 0x93, 0x69, 0xE0, 0xFF, 0xC3, 0x94, 0x04, 0x50, 0x25, 0x90, 0x93, 0x6F, 0xE0, 0x24, 0x18, \r
+0xFD, 0x90, 0x93, 0x6E, 0xE0, 0x12, 0x63, 0x8C, 0x90, 0x93, 0x69, 0xE0, 0x24, 0x6A, 0xF5, 0x82, \r
+0xE4, 0x34, 0x93, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x69, 0xE0, 0x04, 0xF0, 0x80, 0xD1, 0x78, \r
+0x6A, 0x7C, 0x93, 0x91, 0x27, 0xEF, 0x70, 0x1E, 0x90, 0x93, 0x6F, 0xE0, 0x24, 0x08, 0xFF, 0x90, \r
+0x93, 0x6E, 0xE0, 0x34, 0x00, 0xFE, 0x12, 0x63, 0xC8, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, \r
+0xC7, 0x74, 0x22, 0x12, 0x67, 0x9C, 0x22, 0x7E, 0x00, 0x7F, 0x04, 0x02, 0x06, 0x63, 0x7E, 0x00, \r
+0x7F, 0x06, 0x02, 0x06, 0x63, 0x71, 0x12, 0x71, 0x0B, 0x7B, 0xFF, 0x7A, 0x40, 0x79, 0x6A, 0x31, \r
+0x2E, 0x91, 0x07, 0x7A, 0x40, 0x79, 0x70, 0x51, 0xDC, 0x78, 0x79, 0x7C, 0x93, 0x7D, 0x01, 0x7B, \r
+0xFF, 0x7A, 0x40, 0x79, 0x80, 0x51, 0xDC, 0xE4, 0x90, 0x93, 0x8C, 0x12, 0x64, 0xBB, 0xA3, 0xE0, \r
+0xFD, 0x71, 0x1E, 0xEF, 0x64, 0x01, 0x60, 0x02, 0x41, 0xC4, 0x12, 0x67, 0x59, 0xCF, 0x24, 0x0E, \r
+0xCF, 0x12, 0x66, 0x16, 0xEF, 0x64, 0x3A, 0x60, 0x02, 0x41, 0xC4, 0x12, 0x67, 0x59, 0xCF, 0x24, \r
+0x30, 0xCF, 0x12, 0x66, 0x16, 0xEF, 0x64, 0x87, 0x60, 0x02, 0x41, 0xC4, 0x90, 0x93, 0x8C, 0x04, \r
+0xF0, 0xE4, 0x90, 0x93, 0x89, 0xF0, 0x51, 0xCA, 0x94, 0x10, 0x50, 0x1A, 0x51, 0xFF, 0x12, 0x67, \r
+0x64, 0xCD, 0x24, 0x38, 0x12, 0x63, 0x8B, 0x90, 0x93, 0x89, 0xE0, 0x24, 0x79, 0xF5, 0x82, 0xE4, \r
+0x34, 0x93, 0x51, 0xD1, 0x80, 0xE0, 0xE4, 0x90, 0x93, 0x8A, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0xFF, \r
+0xC3, 0x94, 0x02, 0x40, 0x02, 0x41, 0xC4, 0x75, 0xF0, 0x38, 0xEF, 0x51, 0xE3, 0x20, 0xE0, 0x02, \r
+0x41, 0xC4, 0xE4, 0x90, 0x93, 0x8B, 0xF0, 0x51, 0xEB, 0x90, 0x8E, 0xE9, 0x12, 0x44, 0x0B, 0xE0, \r
+0xFE, 0x90, 0x93, 0x8B, 0xE0, 0xC3, 0x9E, 0x40, 0x02, 0x41, 0xBC, 0xEF, 0x75, 0xF0, 0x38, 0xA4, \r
+0x24, 0x00, 0xF9, 0x74, 0x8F, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xE0, 0x75, 0xF0, 0x10, 0xA4, 0x29, \r
+0xF9, 0xEA, 0x35, 0xF0, 0xFA, 0x78, 0x79, 0x7C, 0x93, 0x51, 0xF4, 0x60, 0x02, 0x41, 0xAD, 0x90, \r
+0x06, 0x33, 0xE0, 0x44, 0x01, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x93, 0x89, 0xF0, 0x51, 0xCA, 0x94, \r
+0x06, 0x50, 0x14, 0x51, 0xFF, 0x12, 0x67, 0x64, 0xCD, 0x24, 0x4A, 0x12, 0x63, 0x8B, 0x90, 0x93, \r
+0x89, 0x71, 0xFE, 0x51, 0xD1, 0x80, 0xE6, 0xE4, 0x90, 0x93, 0x89, 0xF0, 0x51, 0xCA, 0x94, 0x10, \r
+0x50, 0x0C, 0x12, 0x63, 0x77, 0x90, 0x93, 0x89, 0x71, 0xF5, 0x51, 0xD1, 0x80, 0xEE, 0x51, 0xEB, \r
+0x51, 0xE3, 0xFE, 0xC3, 0x13, 0x30, 0xE0, 0x19, 0xEF, 0x75, 0xF0, 0x38, 0xA4, 0x24, 0xF0, 0xF9, \r
+0x74, 0x8E, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0x78, 0x69, 0x7C, 0x93, 0x51, 0xF4, 0x70, 0x45, 0x80, \r
+0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x63, 0x90, 0x93, 0x90, 0x12, 0x44, 0x20, 0x7A, 0x93, 0x79, \r
+0x79, 0x90, 0x93, 0x93, 0x12, 0x44, 0x20, 0x90, 0x93, 0x8A, 0xE0, 0x75, 0xF0, 0x38, 0xA4, 0x24, \r
+0xEA, 0xF9, 0x74, 0x8E, 0x35, 0xF0, 0xFA, 0x90, 0x93, 0x96, 0x12, 0x44, 0x20, 0xE4, 0x90, 0x93, \r
+0x99, 0xF0, 0xA3, 0xF0, 0x7A, 0x93, 0x79, 0x69, 0x12, 0x5A, 0x62, 0x80, 0x07, 0x90, 0x06, 0x33, \r
+0xE0, 0x44, 0x05, 0xF0, 0x90, 0x93, 0x8B, 0xE0, 0x04, 0xF0, 0x21, 0xD7, 0x90, 0x93, 0x8A, 0xE0, \r
+0x04, 0xF0, 0x21, 0xBB, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x22, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0xC3, \r
+0x22, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0x04, 0xF0, 0x22, 0x7E, 0x00, 0x7F, 0x10, \r
+0x02, 0x06, 0x63, 0x90, 0x8E, 0xE8, 0x12, 0x44, 0x0B, 0xE0, 0x22, 0x90, 0x93, 0x8A, 0xE0, 0xFF, \r
+0x75, 0xF0, 0x38, 0x22, 0x7D, 0x01, 0x7E, 0x00, 0x7F, 0x10, 0x12, 0x45, 0xD5, 0xEF, 0x22, 0x90, \r
+0x93, 0x62, 0xE0, 0xFD, 0x90, 0x93, 0x61, 0xE0, 0x2D, 0xFD, 0x22, 0x78, 0x63, 0x7C, 0x93, 0x7D, \r
+0x01, 0x22, 0x90, 0x93, 0x60, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x22, 0x90, 0x93, \r
+0x8D, 0x71, 0x15, 0x2F, 0xFF, 0xE4, 0x3E, 0xCF, 0x24, 0x06, 0xCF, 0x12, 0x66, 0x16, 0xBF, 0x86, \r
+0x19, 0x90, 0x93, 0x8F, 0xE0, 0xFF, 0x90, 0x93, 0x8E, 0xE0, 0x2F, 0x71, 0xE4, 0xCF, 0x24, 0x07, \r
+0xCF, 0x12, 0x66, 0x16, 0xBF, 0xDD, 0x03, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x71, 0x12, 0xE4, \r
+0xA3, 0xF0, 0x71, 0xD0, 0x50, 0x1B, 0x12, 0x64, 0xBC, 0x71, 0xD9, 0xE0, 0x24, 0xC0, 0xF5, 0x82, \r
+0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xB5, 0x07, 0x1D, 0x90, 0x93, 0x63, 0xE0, 0x04, 0xF0, 0x80, \r
+0xE1, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x01, 0xC7, 0x74, 0x30, 0xF0, 0x7F, 0x01, \r
+0x12, 0x67, 0xAD, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x71, 0x12, 0x90, 0x90, 0x92, 0xE0, 0x70, \r
+0x02, 0xA3, 0xE0, 0x60, 0x27, 0xE4, 0x90, 0x93, 0x63, 0xF0, 0x71, 0xD0, 0x50, 0x21, 0x12, 0x64, \r
+0xBC, 0x71, 0xD9, 0xE0, 0x24, 0xA0, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x6F, 0x60, \r
+0x03, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x63, 0xE0, 0x04, 0xF0, 0x80, 0xDE, 0x7F, 0x00, 0x22, 0x90, \r
+0x06, 0x32, 0xE0, 0x44, 0x40, 0xF0, 0xE4, 0x90, 0x90, 0x9E, 0xF0, 0xA3, 0xF0, 0x7F, 0x01, 0x22, \r
+0x90, 0x93, 0x63, 0xE0, 0xFD, 0xC3, 0x94, 0x02, 0x22, 0xED, 0x24, 0x1C, 0xFD, 0x12, 0x63, 0x99, \r
+0x90, 0x93, 0x63, 0x22, 0xFF, 0x90, 0x93, 0x8D, 0xE0, 0x34, 0x00, 0x22, 0xFF, 0x90, 0x93, 0x70, \r
+0xE0, 0x34, 0x00, 0xFE, 0x22, 0xE0, 0x24, 0x69, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0x22, 0xE0, 0x24, \r
+0x63, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0x22, 0x78, 0x69, 0x7C, 0x93, 0x7D, 0x01, 0x7B, 0xFF, 0x22, \r
+0x7E, 0x00, 0x7F, 0x06, 0x12, 0x45, 0xD5, 0xEF, 0x22, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x08, 0xD6, \r
+0x7F, 0x0A, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0x7D, 0x01, 0x7B, 0x01, 0x7A, 0x8E, 0x79, 0xDA, 0x7E, \r
+0x00, 0x7F, 0x04, 0x02, 0x45, 0xD5, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x44, 0x0B, 0xF0, 0x91, \r
+0x20, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xC0, 0x7F, 0x00, 0xB4, 0x40, 0x02, 0x7F, 0x01, 0x22, 0xE4, \r
+0x90, 0x93, 0x54, 0xF0, 0xA3, 0xF0, 0x91, 0x36, 0xEF, 0x64, 0x01, 0x60, 0x39, 0xC3, 0x90, 0x93, \r
+0x55, 0xE0, 0x94, 0x88, 0x90, 0x93, 0x54, 0xE0, 0x94, 0x13, 0x40, 0x0F, 0x90, 0x01, 0xC1, 0xE0, \r
+0x44, 0x10, 0xF0, 0x90, 0x01, 0xC7, 0x74, 0xFD, 0xF0, 0x80, 0x1B, 0x90, 0x93, 0x54, 0x91, 0x9D, \r
+0xD3, 0x90, 0x93, 0x55, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x54, 0xE0, 0x94, 0x00, 0x40, 0xC7, 0x90, \r
+0x01, 0xC6, 0xE0, 0x30, 0xE3, 0xC0, 0x90, 0x01, 0xC7, 0x74, 0xFE, 0xF0, 0x22, 0xE4, 0x75, 0xF0, \r
+0x01, 0x12, 0x08, 0xD6, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x3E, 0x50, 0x90, 0x01, 0x01, 0xE0, 0x44, \r
+0x04, 0xF0, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0xF0, 0x91, 0x20, 0x90, 0x01, 0x99, 0xE0, 0x44, \r
+0xC0, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x80, 0xF0, 0x22, 0xE4, 0x90, 0x95, 0x4C, 0xF0, 0xA3, 0xF0, \r
+0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x20, 0xC3, 0x90, 0x95, 0x4D, 0xE0, 0x94, 0xD0, 0x90, 0x95, \r
+0x4C, 0xE0, 0x94, 0x07, 0x40, 0x0A, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x00, 0x22, \r
+0x90, 0x95, 0x4C, 0x91, 0x19, 0x80, 0xD9, 0x7F, 0x01, 0x22, 0x11, 0x2C, 0xA3, 0xF0, 0x90, 0x93, \r
+0x62, 0xE0, 0xFD, 0xC3, 0x94, 0x04, 0x50, 0x29, 0x90, 0x93, 0x61, 0xE0, 0x24, 0x10, 0x12, 0x67, \r
+0x63, 0xFE, 0x12, 0x63, 0x99, 0x90, 0x93, 0x62, 0xE0, 0x24, 0x98, 0xF5, 0x82, 0xE4, 0x34, 0x90, \r
+0xF5, 0x83, 0xE0, 0x6F, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x62, 0xE0, 0x04, 0xF0, 0x80, \r
+0xCD, 0x7F, 0x01, 0x22, 0x90, 0x95, 0x1E, 0xEF, 0xF0, 0xA3, 0x12, 0x44, 0x20, 0x90, 0x95, 0x43, \r
+0xE0, 0xFE, 0x04, 0xF0, 0x12, 0x7F, 0xE5, 0x74, 0x00, 0x2F, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, \r
+0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x95, 0x1F, 0x12, 0x5D, 0x0E, 0x75, 0x43, 0x02, \r
+0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x35, 0x26, 0x90, 0x95, 0x1E, 0xE0, 0x24, 0x02, 0xF9, \r
+0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0xA3, 0x12, 0x44, 0x17, \r
+0xE9, 0x24, 0x02, 0xF9, 0xE4, 0x3A, 0x8B, 0x40, 0xF5, 0x41, 0x89, 0x42, 0x90, 0x95, 0x1F, 0xB1, \r
+0x9C, 0xF5, 0x43, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x02, 0x35, 0x26, 0x12, 0x44, 0x17, 0x90, \r
+0x00, 0x0E, 0x02, 0x06, 0xA2, 0xEF, 0x70, 0x04, 0x74, 0xF0, 0x80, 0x16, 0xEF, 0xB4, 0x01, 0x04, \r
+0x74, 0xF4, 0x80, 0x0E, 0xEF, 0xB4, 0x02, 0x04, 0x74, 0xF8, 0x80, 0x06, 0xEF, 0xB4, 0x03, 0x0C, \r
+0x74, 0xFC, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x02, 0xF5, 0x83, 0xEB, 0xF0, 0x22, 0x90, 0x95, 0x36, \r
+0x12, 0x44, 0x20, 0xE4, 0xFF, 0x90, 0x95, 0x36, 0x12, 0x44, 0x17, 0x8F, 0x82, 0x75, 0x83, 0x00, \r
+0x12, 0x06, 0xA2, 0xFE, 0x74, 0xF0, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x02, 0x12, 0x8D, 0x95, 0xB4, \r
+0x10, 0xE3, 0x22, 0x90, 0x00, 0xF1, 0xE0, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFF, 0x22, 0x75, 0x15, \r
+0x10, 0xE4, 0xF5, 0x16, 0x75, 0x17, 0x07, 0x75, 0x18, 0x02, 0x90, 0x01, 0x30, 0xE5, 0x15, 0xF0, \r
+0xA3, 0xE5, 0x16, 0xF0, 0xA3, 0xE5, 0x17, 0xF0, 0xA3, 0xE5, 0x18, 0xF0, 0x22, 0x75, 0x1D, 0x07, \r
+0x75, 0x1E, 0x01, 0x75, 0x1F, 0x03, 0x75, 0x20, 0x62, 0x90, 0x01, 0x38, 0xE5, 0x1D, 0xF0, 0xA3, \r
+0xE5, 0x1E, 0xF0, 0xA3, 0xE5, 0x1F, 0xF0, 0xA3, 0xE5, 0x20, 0xF0, 0x22, 0x90, 0x01, 0x94, 0xE0, \r
+0x44, 0x01, 0xF0, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x22, 0x7D, 0x02, 0x90, 0x01, 0xC4, 0x74, 0x49, \r
+0xF0, 0x74, 0x96, 0xA3, 0xF0, 0x90, 0x93, 0x40, 0xE0, 0xFF, 0xED, 0xC3, 0x9F, 0x50, 0x10, 0xED, \r
+0x25, 0xE0, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE4, 0x03, 0x7F, 0x00, 0x22, 0x0D, 0x80, 0xE6, 0x74, \r
+0x49, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x96, 0xA3, 0xF0, 0x7F, 0x01, 0x22, 0xE4, 0x90, 0x8D, \r
+0x01, 0x12, 0x4D, 0xFA, 0xA3, 0xF0, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x23, 0xF0, 0xA3, 0xE4, 0xF0, \r
+0x22, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x15, 0xF5, 0x19, 0xA3, 0xE0, 0x55, 0x16, 0xF5, 0x1A, 0xA3, \r
+0xE0, 0x55, 0x17, 0xF5, 0x1B, 0xA3, 0xE0, 0x55, 0x18, 0xF5, 0x1C, 0x90, 0x01, 0x34, 0xE5, 0x19, \r
+0xF0, 0xA3, 0xE5, 0x1A, 0xF0, 0xA3, 0xE5, 0x1B, 0xF0, 0xA3, 0xE5, 0x1C, 0xF0, 0x22, 0x90, 0x01, \r
+0x3C, 0xE0, 0x55, 0x1D, 0xF5, 0x21, 0xA3, 0xE0, 0x55, 0x1E, 0xF5, 0x22, 0xA3, 0xE0, 0x55, 0x1F, \r
+0xF5, 0x23, 0xA3, 0xE0, 0x55, 0x20, 0xF5, 0x24, 0x90, 0x01, 0x3C, 0xE5, 0x21, 0xF0, 0xA3, 0xE5, \r
+0x22, 0xF0, 0xA3, 0xE5, 0x23, 0xF0, 0xA3, 0xE5, 0x24, 0xF0, 0x53, 0x91, 0xDF, 0x22, 0x90, 0x01, \r
+0xCF, 0xE0, 0x90, 0x94, 0x12, 0xF0, 0xE0, 0xFF, 0x30, 0xE0, 0x07, 0x90, 0x01, 0xCF, 0xE0, 0x54, \r
+0xFE, 0xF0, 0xEF, 0x30, 0xE5, 0x23, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, \r
+0x74, 0x20, 0xF0, 0xE4, 0xF5, 0xA8, 0xF5, 0xE8, 0x12, 0x4D, 0xB5, 0x90, 0x00, 0x03, 0xE0, 0x54, \r
+0xFB, 0xFD, 0x7F, 0x03, 0x12, 0x49, 0x47, 0x80, 0xFE, 0x22, 0xE4, 0xFF, 0x12, 0x6A, 0xD9, 0xBF, \r
+0x01, 0x12, 0x90, 0x8E, 0x47, 0xE0, 0x60, 0x0C, 0x12, 0x7F, 0xDE, 0x64, 0x02, 0x60, 0x02, 0x80, \r
+0x04, 0x12, 0x5F, 0x7E, 0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x18, 0x90, 0x8D, 0x39, 0xE0, 0xFF, \r
+0x90, 0x95, 0x29, 0x74, 0x09, 0xF0, 0x7B, 0x18, 0xE4, 0xFD, 0x12, 0x5D, 0xDA, 0x90, 0x95, 0x4E, \r
+0x12, 0x5F, 0xDE, 0x22, 0xE4, 0xF5, 0x57, 0x90, 0x06, 0xA9, 0xE0, 0xF5, 0x57, 0x54, 0xC0, 0x70, \r
+0x08, 0xF1, 0xBA, 0x54, 0xFD, 0xF0, 0x02, 0x58, 0x58, 0xE5, 0x57, 0x30, 0xE6, 0x1F, 0x90, 0x8E, \r
+0x47, 0xE0, 0x64, 0x01, 0x70, 0x19, 0x90, 0x8E, 0x4B, 0xE0, 0x44, 0x01, 0xF0, 0x12, 0x7F, 0xDE, \r
+0x64, 0x02, 0x60, 0x04, 0xF1, 0x45, 0x80, 0x07, 0x12, 0x5F, 0x7E, 0x80, 0x02, 0xF1, 0xBA, 0xE5, \r
+0x57, 0x90, 0x8E, 0x4B, 0x30, 0xE7, 0x0E, 0xE0, 0x44, 0x02, 0x12, 0x50, 0x0B, 0x90, 0x8E, 0x42, \r
+0xE0, 0x44, 0x04, 0xF0, 0x22, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x8E, 0x4B, 0xE0, 0x54, 0xFE, \r
+0xF0, 0x22, 0x90, 0x8E, 0x47, 0xE0, 0x60, 0x03, 0x12, 0x5F, 0xA7, 0x22, 0x90, 0x8E, 0x47, 0xE0, \r
+0x60, 0x03, 0x12, 0x6D, 0x27, 0x22, 0x90, 0x8E, 0x47, 0xE0, 0x60, 0x10, 0x90, 0x06, 0x92, 0xE0, \r
+0x30, 0xE1, 0x03, 0x02, 0xA0, 0x21, 0x12, 0x6E, 0xFE, 0x12, 0x58, 0x58, 0x22, 0x12, 0x9B, 0x5E, \r
+0x90, 0x94, 0x19, 0xEF, 0xF0, 0x30, 0xE0, 0x05, 0x7D, 0x01, 0xE4, 0x80, 0x02, 0xE4, 0xFD, 0xFF, \r
+0x12, 0x5F, 0x02, 0x90, 0x94, 0x19, 0xE0, 0x30, 0xE6, 0x11, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, \r
+0x04, 0xE4, 0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x80, 0xF0, 0x71, 0x03, 0x90, 0x95, 0x31, \r
+0x74, 0x02, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xAC, 0x07, 0x90, 0x8E, 0x43, 0x12, \r
+0x7F, 0xA4, 0x30, 0xE0, 0x02, 0x01, 0xDC, 0x90, 0x8E, 0x42, 0xE0, 0x30, 0xE0, 0x16, 0x90, 0x8E, \r
+0x64, 0xE0, 0x24, 0x04, 0x90, 0x8E, 0x5C, 0xF0, 0x90, 0x8E, 0x64, 0xE0, 0x24, 0x03, 0x90, 0x8E, \r
+0x5B, 0xF0, 0x80, 0x0D, 0x90, 0x8E, 0x5C, 0x74, 0x02, 0xF0, 0x90, 0x8E, 0x5B, 0x14, 0xF0, 0x0B, \r
+0x0B, 0x90, 0x8E, 0x5B, 0xE0, 0xFA, 0x90, 0x8E, 0x5A, 0xE0, 0xD3, 0x9A, 0x50, 0x0E, 0x90, 0x8E, \r
+0x4F, 0xEB, 0xF0, 0x90, 0x8E, 0x5C, 0xE0, 0xC3, 0x9D, 0x2C, 0x80, 0x11, 0xC3, 0xED, 0x9A, 0x2B, \r
+0x90, 0x8E, 0x4F, 0xF0, 0x90, 0x8E, 0x5B, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F, 0x90, 0x8E, 0x5F, \r
+0xF0, 0x90, 0x8E, 0x5C, 0xE0, 0xFF, 0x24, 0x0A, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x8E, 0x5F, 0x11, \r
+0xE8, 0x40, 0x04, 0xEF, 0x24, 0x0A, 0xF0, 0x90, 0x8E, 0x5F, 0xE0, 0xFF, 0x24, 0x23, 0xFD, 0xE4, \r
+0x33, 0xFC, 0x90, 0x8E, 0x4F, 0x11, 0xE8, 0x40, 0x04, 0xEF, 0x24, 0x23, 0xF0, 0x90, 0x8E, 0x5F, \r
+0xE0, 0xFF, 0x7E, 0x00, 0x90, 0x8E, 0x53, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x05, 0x58, 0xE0, \r
+0x6F, 0x70, 0x01, 0xE4, 0x60, 0x02, 0x71, 0x48, 0x71, 0x40, 0x80, 0x07, 0x90, 0x8E, 0x44, 0xE0, \r
+0x44, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, 0xD3, 0x9D, 0xEC, 0x64, 0x80, 0xF8, 0x74, \r
+0x80, 0x98, 0x22, 0x71, 0x52, 0x40, 0x32, 0x90, 0x8E, 0x61, 0xE0, 0x04, 0xF0, 0x90, 0x8E, 0xA3, \r
+0xE0, 0xFF, 0x90, 0x8E, 0x61, 0xE0, 0xD3, 0x9F, 0x50, 0x1F, 0x90, 0x8E, 0x59, 0xE0, 0x04, 0x31, \r
+0x2A, 0x12, 0x57, 0xBE, 0x90, 0x8E, 0x60, 0xF0, 0xFB, 0x90, 0x8E, 0x59, 0xE0, 0xFF, 0xA3, 0xE0, \r
+0xFD, 0x90, 0x95, 0x31, 0x74, 0x04, 0xF0, 0x11, 0x23, 0x22, 0xF0, 0x90, 0x8E, 0x50, 0xE0, 0x75, \r
+0xF0, 0x03, 0xA4, 0x24, 0xFE, 0x22, 0xE4, 0x90, 0x94, 0x14, 0xF0, 0xA3, 0xF0, 0xA3, 0x12, 0x51, \r
+0x0C, 0x12, 0x43, 0xD5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0x12, \r
+0x51, 0x26, 0x78, 0x10, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, \r
+0x43, 0xD5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0x12, 0x51, 0x26, 0x78, 0x18, \r
+0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0xD5, 0x90, 0x8E, \r
+0x96, 0x12, 0x08, 0x6D, 0x90, 0x8E, 0x9A, 0x12, 0x43, 0xF3, 0x90, 0x8E, 0x96, 0x12, 0x43, 0xFF, \r
+0xC3, 0x12, 0x43, 0xE2, 0x40, 0x41, 0x90, 0x8E, 0x42, 0xE0, 0x90, 0x8E, 0x9A, 0x30, 0xE0, 0x10, \r
+0x51, 0xE7, 0xFF, 0x90, 0x8E, 0x64, 0xE0, 0x24, 0x04, 0x2F, 0xFF, 0x90, 0x8E, 0x9E, 0x80, 0x06, \r
+0x51, 0xE7, 0xFF, 0x90, 0x8E, 0x9F, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0x90, 0x94, 0x15, 0xF0, 0x90, \r
+0x94, 0x15, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x0E, 0x74, 0x65, 0x2F, 0x71, 0x38, 0xE0, 0x04, \r
+0xF0, 0x90, 0x8E, 0x5D, 0xE0, 0x04, 0xF0, 0x90, 0x8E, 0x5D, 0xE0, 0xFF, 0xD3, 0x90, 0x8E, 0xA1, \r
+0xE0, 0x9F, 0x90, 0x8E, 0xA0, 0xE0, 0x94, 0x00, 0x40, 0x02, 0x41, 0xB4, 0x51, 0xC6, 0x51, 0xBD, \r
+0x50, 0x1D, 0x51, 0xD0, 0xFF, 0x90, 0x94, 0x16, 0xE0, 0xD3, 0x9F, 0x40, 0x0A, 0x90, 0x94, 0x14, \r
+0xE0, 0x90, 0x94, 0x17, 0xF0, 0x80, 0x08, 0x90, 0x94, 0x14, 0xE0, 0x04, 0xF0, 0x80, 0xDF, 0x51, \r
+0xC6, 0x51, 0xBD, 0x50, 0x2D, 0x51, 0xD0, 0xFF, 0xC3, 0x90, 0x8E, 0xA1, 0xE0, 0x9F, 0xFF, 0x90, \r
+0x8E, 0xA0, 0xE0, 0x94, 0x00, 0xFE, 0x90, 0x94, 0x16, 0xE0, 0xD3, 0x9F, 0xE4, 0x9E, 0x40, 0x0A, \r
+0x90, 0x94, 0x14, 0xE0, 0x90, 0x94, 0x18, 0xF0, 0x80, 0x08, 0x90, 0x94, 0x14, 0xE0, 0x04, 0xF0, \r
+0x80, 0xCF, 0x90, 0x94, 0x17, 0xE0, 0x90, 0x8E, 0x62, 0xF0, 0x90, 0x94, 0x18, 0xE0, 0x90, 0x8E, \r
+0x63, 0x51, 0xB5, 0x94, 0x0A, 0x40, 0x0A, 0xEF, 0x24, 0xF6, 0x90, 0x8E, 0x5A, 0xF0, 0xE4, 0x80, \r
+0x09, 0xE4, 0x90, 0x8E, 0x5A, 0x51, 0xB5, 0x74, 0x0A, 0x9F, 0x90, 0x8E, 0x59, 0xF0, 0x90, 0x8E, \r
+0x62, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F, 0x90, 0x8E, 0x60, 0xF0, 0x90, 0x8E, 0x42, 0xE0, 0x30, \r
+0xE0, 0x05, 0x90, 0x8E, 0x9E, 0x80, 0x03, 0x90, 0x8E, 0x9F, 0xE0, 0xFF, 0x90, 0x8E, 0x60, 0xE0, \r
+0x2F, 0x04, 0xF0, 0x90, 0x8E, 0x60, 0xE0, 0xC3, 0x94, 0x0A, 0x50, 0x03, 0x74, 0x0A, 0xF0, 0x90, \r
+0x8E, 0x60, 0xE0, 0x24, 0x02, 0xF0, 0x71, 0x03, 0x90, 0x95, 0x31, 0x74, 0x03, 0xF0, 0x11, 0x23, \r
+0xE4, 0xFF, 0x71, 0x11, 0x22, 0xF0, 0x90, 0x8E, 0x62, 0xE0, 0xFF, 0xC3, 0x22, 0x90, 0x94, 0x14, \r
+0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x22, 0xE4, 0x90, 0x94, 0x16, 0xF0, 0x90, 0x94, 0x14, 0xF0, 0x22, \r
+0x74, 0x65, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x94, 0x16, 0xE0, \r
+0x2F, 0xF0, 0x90, 0x8E, 0xA2, 0xE0, 0x22, 0x12, 0x43, 0xFF, 0x90, 0x8E, 0x96, 0x12, 0x43, 0xF3, \r
+0x12, 0x42, 0x9D, 0x78, 0x0A, 0x12, 0x08, 0x47, 0x90, 0x8E, 0x5F, 0xE0, 0xFE, 0xC3, 0x74, 0x0A, \r
+0x9E, 0x2F, 0x22, 0x90, 0x8E, 0x59, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x90, 0x8E, 0x60, 0xE0, 0xFB, \r
+0x22, 0xE4, 0xFE, 0x74, 0x65, 0x2E, 0x71, 0x38, 0xE4, 0xF0, 0x0E, 0xEE, 0xB4, 0x2D, 0xF4, 0xE4, \r
+0x90, 0x8E, 0x5E, 0xF0, 0x90, 0x8E, 0x5D, 0xF0, 0x90, 0x8E, 0x61, 0xF0, 0xEF, 0xB4, 0x01, 0x07, \r
+0xA3, 0x74, 0x2D, 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x22, \r
+0x90, 0x8E, 0x44, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0x90, 0x8E, 0x53, 0xA3, 0xE0, 0x90, 0x05, 0x58, \r
+0xF0, 0x22, 0x90, 0x8E, 0xA4, 0xE0, 0xFF, 0x90, 0x8E, 0x50, 0xE0, 0xD3, 0x9F, 0x22, 0xE4, 0x90, \r
+0x94, 0x1A, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7F, 0x83, 0x12, 0x4A, 0x5D, 0x90, 0x94, 0x1A, 0xEF, \r
+0xF0, 0x7F, 0x83, 0x12, 0x4A, 0x5D, 0xAE, 0x07, 0x90, 0x94, 0x1A, 0xE0, 0xFF, 0xB5, 0x06, 0x01, \r
+0x22, 0xC3, 0x90, 0x94, 0x1C, 0xE0, 0x94, 0x64, 0x90, 0x94, 0x1B, 0xE0, 0x94, 0x00, 0x40, 0x0D, \r
+0x90, 0x01, 0xC0, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x94, 0x1A, 0xE0, 0xFF, 0x22, 0x90, 0x94, 0x1B, \r
+0xE4, 0x75, 0xF0, 0x01, 0x12, 0x08, 0xD6, 0x80, 0xBE, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, \r
+0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, \r
+0xC0, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, \r
+0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x94, 0x15, 0xF0, 0xA3, 0xF0, 0x90, 0x06, \r
+0x32, 0xE0, 0x44, 0x20, 0xF0, 0x71, 0xA9, 0xEF, 0x64, 0x01, 0x70, 0x71, 0x90, 0x93, 0x3B, 0xE0, \r
+0xFF, 0x90, 0x95, 0x29, 0x74, 0x0D, 0xF0, 0x7B, 0x08, 0x7D, 0x01, 0x12, 0x5D, 0xDA, 0x91, 0xAD, \r
+0x90, 0x94, 0x12, 0x91, 0x67, 0x90, 0x94, 0x14, 0xEF, 0xF0, 0x90, 0x94, 0x12, 0x12, 0x5F, 0xF6, \r
+0x7B, 0x01, 0xE4, 0xFD, 0x12, 0x7D, 0xC6, 0x90, 0x94, 0x14, 0xE0, 0xFF, 0x90, 0x94, 0x13, 0xE0, \r
+0x2F, 0xFF, 0x90, 0x94, 0x12, 0xE0, 0x34, 0x00, 0xCF, 0x24, 0x30, 0xCF, 0x34, 0x00, 0xFE, 0x90, \r
+0x94, 0x15, 0xF0, 0xA3, 0xEF, 0xF0, 0x91, 0xB6, 0x91, 0x5E, 0x90, 0x93, 0x3B, 0xE0, 0xFB, 0xE4, \r
+0xFF, 0x12, 0x55, 0x4A, 0x91, 0x5E, 0x90, 0x93, 0x37, 0xE0, 0xFB, 0x7F, 0x11, 0x12, 0x55, 0x4A, \r
+0x12, 0x5F, 0xE3, 0x90, 0x90, 0x9E, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x08, 0xD6, 0x22, 0x90, 0x94, \r
+0x15, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x22, 0xA3, 0xE0, 0xFE, 0x24, 0x28, 0xF5, 0x82, 0xE4, 0x34, \r
+0xFC, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x29, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, \r
+0xFD, 0x74, 0x2C, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, \r
+0x30, 0xE7, 0x04, 0x7C, 0x02, 0x80, 0x02, 0xE4, 0xFC, 0xED, 0x30, 0xE6, 0x08, 0xAF, 0x03, 0x91, \r
+0xE8, 0xAE, 0x07, 0x80, 0x02, 0xE4, 0xFE, 0xEC, 0x24, 0x18, 0x2E, 0xFF, 0x22, 0x90, 0x94, 0x12, \r
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xAD, 0x07, 0x90, 0x90, 0x96, 0xE4, 0x75, 0xF0, 0x01, 0x12, \r
+0x08, 0xD6, 0x90, 0x90, 0x96, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x04, 0x2E, 0xF5, 0x82, 0xE4, 0x34, \r
+0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x90, 0x96, 0xA3, 0xE0, 0xFF, 0x74, 0x05, 0x2E, 0xF5, 0x82, \r
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, \r
+0x20, 0xE0, 0x05, 0x90, 0x93, 0x2E, 0x80, 0x03, 0x90, 0x93, 0x2F, 0xE0, 0x90, 0x90, 0x8B, 0xF0, \r
+0x90, 0x90, 0x8B, 0xE0, 0x14, 0x60, 0x13, 0x14, 0x60, 0x14, 0x24, 0xFE, 0x60, 0x10, 0x14, 0x60, \r
+0x09, 0x14, 0x60, 0x06, 0x24, 0x06, 0xE4, 0xFE, 0x80, 0x06, 0x7E, 0x04, 0x80, 0x02, 0x7E, 0x08, \r
+0xAF, 0x06, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x90, 0x02, 0x86, 0x60, 0x06, 0xE0, 0x44, 0x04, \r
+0xF0, 0x80, 0x04, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x8D, 0x06, 0xED, 0xF0, 0x22, 0x90, 0x01, 0xC4, \r
+0x74, 0x3D, 0xF0, 0x74, 0x9D, 0xA3, 0xF0, 0x7F, 0x90, 0x12, 0x4A, 0x5D, 0xEF, 0x20, 0xE0, 0xF7, \r
+0x74, 0x3D, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x9D, 0xA3, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, \r
+0xC3, 0xC0, 0xD0, 0xE4, 0xFF, 0xEF, 0x12, 0x71, 0xE1, 0xE4, 0xF0, 0x0F, 0xEF, 0xB4, 0x08, 0xF5, \r
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x95, 0x54, 0xED, \r
+0xF0, 0xE4, 0xFE, 0xFD, 0xEF, 0xB4, 0x01, 0x0D, 0xEB, 0xB4, 0x02, 0x03, 0x0D, 0x80, 0x06, 0xEB, \r
+0xB4, 0x01, 0x02, 0x7D, 0x02, 0xAF, 0x06, 0xEF, 0xC4, 0x54, 0xF0, 0x4D, 0xFF, 0xD0, 0xD0, 0x92, \r
+0xAF, 0x22, 0xE4, 0xFE, 0xEF, 0x54, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xEF, 0x54, 0x1F, 0xFF, \r
+0xED, 0x60, 0x2C, 0x14, 0x60, 0x1E, 0x24, 0xFD, 0x60, 0x0F, 0x24, 0xFE, 0x70, 0x2A, 0xEF, 0x25, \r
+0xE0, 0xFF, 0xC3, 0x74, 0xDE, 0x9F, 0xFE, 0x80, 0x1F, 0xEF, 0x25, 0xE0, 0xFF, 0xC3, 0x74, 0xF2, \r
+0x9F, 0xFE, 0x80, 0x14, 0xEF, 0x25, 0xE0, 0xFF, 0xC3, 0x74, 0x06, 0x9F, 0xFE, 0x80, 0x09, 0xEF, \r
+0x25, 0xE0, 0xFF, 0xC3, 0x74, 0x10, 0x9F, 0xFE, 0xAF, 0x06, 0x22, 0xD3, 0xEF, 0x64, 0x80, 0x94, \r
+0x1C, 0x40, 0x07, 0xEF, 0x64, 0x80, 0x94, 0x94, 0x40, 0x03, 0x7F, 0x00, 0x22, 0xC3, 0xEF, 0x64, \r
+0x80, 0x94, 0x80, 0x40, 0x03, 0x7F, 0x64, 0x22, 0xEF, 0x24, 0x64, 0xFF, 0x22, 0x7B, 0x01, 0x7A, \r
+0x93, 0x79, 0x54, 0x7F, 0xFB, 0x7E, 0x01, 0x12, 0x34, 0xC1, 0xBF, 0x01, 0x16, 0x90, 0x93, 0x54, \r
+0xE0, 0x54, 0x30, 0xFF, 0xBF, 0x20, 0x07, 0x90, 0x93, 0x4D, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, \r
+0x93, 0x4D, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x00, 0x7E, 0x08, 0x12, \r
+0x37, 0x4E, 0x90, 0x93, 0x57, 0x12, 0x08, 0x6D, 0x7F, 0x00, 0x7E, 0x09, 0x12, 0x37, 0x4E, 0x90, \r
+0x93, 0x5B, 0x12, 0x08, 0x6D, 0x90, 0x93, 0x57, 0xD1, 0xA8, 0x60, 0x17, 0x90, 0x93, 0x57, 0xD1, \r
+0x9F, 0x90, 0x93, 0x57, 0x12, 0x08, 0x6D, 0x90, 0x93, 0x57, 0xD1, 0x96, 0x7F, 0x00, 0x7E, 0x08, \r
+0x12, 0x38, 0x45, 0x90, 0x93, 0x5B, 0xD1, 0xA8, 0x60, 0x17, 0x90, 0x93, 0x5B, 0xD1, 0x9F, 0x90, \r
+0x93, 0x5B, 0x12, 0x08, 0x6D, 0x90, 0x93, 0x5B, 0xD1, 0x96, 0x7F, 0x00, 0x7E, 0x09, 0x12, 0x38, \r
+0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x43, 0xF3, 0x90, 0xAA, 0xB9, 0x02, 0x08, 0x6D, 0x12, \r
+0x43, 0xF3, 0xEF, 0x54, 0xFE, 0xFF, 0xEC, 0x22, 0x12, 0x43, 0xF3, 0xEF, 0x54, 0x01, 0xFF, 0xE4, \r
+0xFE, 0xFD, 0xFC, 0xEF, 0x22, 0x90, 0x93, 0x41, 0xD1, 0xD0, 0x30, 0xE0, 0x0D, 0x7B, 0x00, 0x7A, \r
+0x00, 0x79, 0x00, 0xD1, 0xD7, 0x04, 0xF0, 0x02, 0x5B, 0xF0, 0x02, 0x5D, 0x8A, 0x90, 0x8E, 0x43, \r
+0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x22, 0x90, 0x94, 0xC8, 0x12, 0x44, 0x20, 0xE4, 0x90, 0x94, \r
+0xCB, 0xF0, 0xA3, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x02, 0x84, 0xEF, 0xF0, 0xEE, 0xA3, \r
+0xF0, 0xA3, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE2, 0x03, 0x7F, 0x04, \r
+0x22, 0x90, 0x02, 0x86, 0xE0, 0x7F, 0x01, 0x20, 0xE1, 0x02, 0x7F, 0x02, 0x22, 0x90, 0x8E, 0xB1, \r
+0xE0, 0xC4, 0x54, 0x0F, 0x20, 0xE0, 0x0A, 0x90, 0x01, 0x3F, 0xE0, 0x30, 0xE2, 0x03, 0x12, 0x67, \r
+0x9D, 0x90, 0x8E, 0xB8, 0xE0, 0x30, 0xE0, 0x0D, 0x90, 0x8E, 0xB2, 0xE0, 0xC4, 0x54, 0x0F, 0x20, \r
+0xE0, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x01, 0x22, 0xEF, 0x90, 0x01, 0xC7, 0xB4, 0xA0, 0x05, 0x74, \r
+0x04, 0xF0, 0x80, 0x03, 0x74, 0x08, 0xF0, 0x02, 0x67, 0x9D, 0x90, 0x93, 0xC7, 0x12, 0x44, 0x20, \r
+0x90, 0x93, 0xCA, 0x12, 0x5D, 0x0E, 0x75, 0x43, 0x10, 0x7B, 0x01, 0x7A, 0x8F, 0x79, 0x58, 0x12, \r
+0x35, 0x26, 0x90, 0x93, 0xC7, 0x12, 0x5D, 0x0E, 0x75, 0x43, 0x10, 0x7B, 0x01, 0x7A, 0x8F, 0x79, \r
+0x68, 0x12, 0x35, 0x26, 0x90, 0x93, 0xCD, 0x12, 0x43, 0xF3, 0x90, 0x8F, 0x78, 0x12, 0x08, 0x6D, \r
+0x90, 0x93, 0xD1, 0xE0, 0x90, 0x8F, 0x7F, 0xF0, 0x22, 0x90, 0x8E, 0xB8, 0xE0, 0x30, 0xE0, 0x03, \r
+0x7F, 0x01, 0x22, 0x90, 0x06, 0x90, 0xE0, 0x20, 0xE5, 0x10, 0x90, 0x01, 0x3F, 0xE0, 0x30, 0xE2, \r
+0x09, 0x90, 0x01, 0xC7, 0x74, 0x25, 0xF0, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xEF, 0x60, 0x08, \r
+0x90, 0x93, 0x31, 0xE0, 0xFF, 0x12, 0x5E, 0x81, 0x22, 0xEF, 0x60, 0x08, 0x90, 0x93, 0x36, 0xE0, \r
+0xFF, 0x12, 0x87, 0xC6, 0x22, 0xE4, 0xFD, 0xFC, 0xEF, 0x60, 0x3E, 0x90, 0x93, 0x34, 0x12, 0x87, \r
+0xA0, 0x12, 0xA5, 0x8E, 0x12, 0x7E, 0xED, 0x90, 0x93, 0x64, 0x12, 0x5D, 0x0E, 0x75, 0x43, 0x40, \r
+0x7B, 0x01, 0x7A, 0x8F, 0x79, 0x80, 0x12, 0x35, 0x26, 0xE4, 0xFD, 0x7F, 0x03, 0x12, 0x30, 0xCE, \r
+0x90, 0x93, 0x35, 0xE0, 0x12, 0xA0, 0x0A, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x12, \r
+0x39, 0xD6, 0x7D, 0x01, 0x7F, 0x03, 0x12, 0x30, 0xCE, 0x22, 0x75, 0xF0, 0x80, 0xA4, 0xAE, 0xF0, \r
+0x78, 0x03, 0x22, 0xEF, 0x60, 0x0A, 0x90, 0x06, 0x31, 0xE0, 0x44, 0x80, 0xF0, 0x12, 0x51, 0x2D, \r
+0x22, 0x11, 0x5A, 0x30, 0xE0, 0x05, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, \r
+0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0xFE, 0xF0, 0x90, 0x8E, 0xA6, 0xE0, \r
+0xC3, 0x13, 0x54, 0x7F, 0x90, 0x94, 0xFF, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, \r
+0x50, 0x20, 0x90, 0x8E, 0x42, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x8E, 0x42, 0xE0, 0x13, 0x13, \r
+0x13, 0x54, 0x1F, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, \r
+0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x11, 0x64, 0xEF, 0x64, 0x01, 0x70, 0x48, 0x90, 0x8E, 0x4B, 0xE0, 0xFF, \r
+0x54, 0x03, 0x70, 0x3F, 0x90, 0x8E, 0x49, 0xE0, 0xFE, 0xE4, 0xC3, 0x9E, 0x40, 0x35, 0xEF, 0x20, \r
+0xE2, 0x31, 0x90, 0x8E, 0x4B, 0xE0, 0x20, 0xE4, 0x2A, 0x90, 0x8E, 0x43, 0xE0, 0x13, 0x13, 0x54, \r
+0x3F, 0x30, 0xE0, 0x1F, 0x90, 0x8E, 0xAA, 0xE0, 0x70, 0x19, 0x90, 0x06, 0x62, 0xE0, 0x20, 0xE1, \r
+0x12, 0x90, 0x06, 0x62, 0xE0, 0x30, 0xE0, 0x07, 0xE0, 0x54, 0xFC, 0x64, 0x80, 0x60, 0x04, 0x7F, \r
+0x01, 0x80, 0x02, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x24, 0xFE, 0x60, 0x0B, 0x04, \r
+0x70, 0x24, 0x90, 0x8E, 0x4D, 0x74, 0x02, 0xF0, 0x80, 0x13, 0xED, 0x70, 0x06, 0x90, 0x8E, 0xA7, \r
+0xE0, 0x80, 0x02, 0xED, 0x14, 0x90, 0x8E, 0x4D, 0xF0, 0x90, 0x8E, 0x4D, 0xE0, 0xA3, 0xF0, 0x90, \r
+0x8E, 0x43, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x8E, 0xAB, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x30, \r
+0x90, 0x02, 0x87, 0xE0, 0x70, 0x33, 0x90, 0x01, 0x00, 0xE0, 0x64, 0x3F, 0x70, 0x2B, 0x90, 0x8E, \r
+0xAF, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x02, 0x82, 0xE0, 0x70, 0x1E, 0x90, 0x8E, 0xB8, 0xE0, 0x20, \r
+0xE0, 0x17, 0x90, 0x02, 0x86, 0xE0, 0x30, 0xE1, 0x10, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE3, 0x09, \r
+0x90, 0x04, 0x1D, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x8E, 0x4A, 0xE0, \r
+0xFF, 0x60, 0x03, 0xB4, 0x08, 0x07, 0x31, 0x07, 0xBF, 0x01, 0x02, 0x31, 0x68, 0x22, 0x90, 0x8E, \r
+0x42, 0xE0, 0x30, 0xE0, 0x02, 0x31, 0x4C, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, \r
+0x4D, 0x2C, 0x12, 0x4F, 0xD2, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x60, 0x2E, 0x12, 0x6A, 0xB6, \r
+0x70, 0x29, 0x90, 0x8E, 0x43, 0xE0, 0x54, 0xFE, 0xF0, 0x7D, 0x2B, 0x7F, 0x0F, 0x12, 0x5A, 0x57, \r
+0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0x12, 0x5D, 0x8A, 0xBF, 0x01, 0x0E, 0x90, 0x8E, 0x42, \r
+0xE0, 0x44, 0x40, 0xF0, 0x7D, 0x06, 0x7F, 0x01, 0x12, 0x5F, 0x02, 0x22, 0xE4, 0x90, 0x94, 0x19, \r
+0xF0, 0x90, 0x8E, 0x47, 0xE0, 0x60, 0x6E, 0x12, 0x6A, 0xB6, 0x70, 0x69, 0x51, 0x26, 0x12, 0x51, \r
+0x0C, 0x12, 0x43, 0xD5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0x12, \r
+0x51, 0x26, 0x78, 0x10, 0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, \r
+0x43, 0xD5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0x12, 0x51, 0x26, 0x78, 0x18, \r
+0x12, 0x08, 0x5A, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x51, 0x36, 0x44, 0x80, 0xF0, \r
+0x90, 0x94, 0x19, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x8E, 0x4E, 0xF0, 0x04, 0x60, 0x17, 0x51, 0x2E, \r
+0xE4, 0x90, 0x94, 0xFE, 0xF0, 0x90, 0x8E, 0x4F, 0x12, 0x50, 0x14, 0x90, 0x8E, 0x4A, 0xE0, 0x20, \r
+0xE2, 0x03, 0x12, 0x58, 0x61, 0x22, 0x90, 0x8E, 0x4D, 0xE0, 0x90, 0x05, 0x73, 0x22, 0x90, 0x8E, \r
+0x4B, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x12, 0x43, 0xD5, 0x90, 0x8E, 0x9A, 0x12, 0x08, 0x6D, 0x90, \r
+0x8E, 0x43, 0xE0, 0x22, 0x90, 0x8E, 0x9E, 0x74, 0x04, 0xF0, 0xA3, 0x14, 0xF0, 0xA3, 0xE4, 0xF0, \r
+0xA3, 0x74, 0x64, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0xA3, 0xF0, 0x22, 0x12, 0x8F, 0x74, 0x7D, 0x0C, \r
+0x7F, 0x01, 0x02, 0x5F, 0x02, 0x90, 0x95, 0x11, 0xE0, 0xFF, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, \r
+0xD0, 0x90, 0x95, 0x5B, 0xEF, 0xF0, 0x90, 0x8D, 0x3A, 0xE0, 0xFF, 0x90, 0x04, 0x1C, 0xE0, 0x6F, \r
+0x70, 0x3D, 0x90, 0x8E, 0x4A, 0xE0, 0x64, 0x0E, 0x70, 0x15, 0x90, 0x95, 0x5B, 0xE0, 0x70, 0x2F, \r
+0x90, 0x8E, 0x42, 0xE0, 0x54, 0x7F, 0xF0, 0x12, 0x8F, 0xA1, 0x12, 0x8F, 0x9A, 0x80, 0x1D, 0x90, \r
+0x8E, 0x4A, 0xE0, 0x64, 0x06, 0x70, 0x18, 0x90, 0x95, 0x5B, 0xE0, 0x60, 0x12, 0x90, 0x8E, 0x42, \r
+0xE0, 0x54, 0xBF, 0xF0, 0x51, 0xC4, 0x90, 0x8E, 0x4A, 0x74, 0x04, 0xF0, 0x12, 0x8F, 0x77, 0xD0, \r
+0xD0, 0x92, 0xAF, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE0, 0x44, 0x80, 0xF0, 0x22, \r
+0x90, 0x93, 0x6D, 0xED, 0xF0, 0x90, 0x93, 0x6B, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x51, 0xED, 0x90, \r
+0x93, 0x6B, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x02, 0x82, 0xDA, 0xD3, 0x10, 0xAF, \r
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x2F, 0xE0, 0xFD, 0xB4, 0x02, 0x07, 0x71, 0xEC, 0x74, 0x08, \r
+0xF0, 0x80, 0x09, 0xED, 0xB4, 0x04, 0x05, 0x71, 0xEC, 0x74, 0x10, 0xF0, 0xEF, 0x64, 0x02, 0x4E, \r
+0x60, 0x02, 0x61, 0xE7, 0x90, 0x8F, 0xC1, 0xE0, 0xFF, 0x64, 0xFE, 0x70, 0x02, 0x61, 0xE7, 0xEF, \r
+0x64, 0x02, 0x60, 0x07, 0xEF, 0x64, 0x03, 0x60, 0x02, 0x61, 0xE7, 0x90, 0x90, 0x21, 0x71, 0xFD, \r
+0x90, 0x93, 0xC1, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x71, 0xF4, 0x7A, 0x93, 0x79, 0x7F, 0x12, 0x08, \r
+0xAA, 0x71, 0xF4, 0x7A, 0x93, 0x79, 0x9F, 0x12, 0x08, 0xAA, 0x90, 0xAC, 0x7A, 0x74, 0x10, 0x12, \r
+0x8B, 0x50, 0x7B, 0x20, 0xFD, 0xFC, 0xFF, 0xFE, 0x12, 0x39, 0x9C, 0x7B, 0x01, 0x7A, 0x90, 0x79, \r
+0x23, 0x90, 0xAC, 0x89, 0x12, 0x44, 0x20, 0x7A, 0x93, 0x79, 0x9F, 0x90, 0xAC, 0x8C, 0x12, 0x44, \r
+0x20, 0x90, 0xAC, 0x8F, 0x74, 0x20, 0xF0, 0x7A, 0x8F, 0x79, 0x90, 0x12, 0x34, 0x5B, 0x75, 0x40, \r
+0x01, 0x75, 0x41, 0x93, 0x75, 0x42, 0xA7, 0x75, 0x43, 0x18, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x7F, \r
+0x12, 0x35, 0x26, 0x75, 0x40, 0x01, 0x75, 0x41, 0x93, 0x75, 0x42, 0x87, 0x75, 0x43, 0x10, 0x7B, \r
+0x01, 0x7A, 0x93, 0x79, 0x6E, 0x12, 0x35, 0x26, 0x90, 0x93, 0x85, 0xE0, 0x54, 0x03, 0x90, 0x93, \r
+0x7E, 0xF0, 0xC3, 0x94, 0x04, 0x50, 0x1C, 0xE0, 0x90, 0x90, 0x8A, 0xF0, 0x75, 0x40, 0x01, 0x75, \r
+0x41, 0x93, 0x75, 0x42, 0x6E, 0x75, 0x43, 0x10, 0x7B, 0x01, 0x7A, 0x90, 0x79, 0x6A, 0x12, 0x35, \r
+0x26, 0x80, 0x06, 0x90, 0x90, 0x8A, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x7E, 0xE0, 0xFF, 0x7B, 0x01, \r
+0x7A, 0x93, 0x79, 0x6E, 0x12, 0x4E, 0xF6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0xBF, 0x74, \r
+0x80, 0xF0, 0xA3, 0x22, 0x7E, 0x00, 0x7F, 0x20, 0x7D, 0x00, 0x7B, 0x01, 0x22, 0xE0, 0xFE, 0xA3, \r
+0xE0, 0xFD, 0xED, 0xFF, 0x22, 0x12, 0x82, 0xC1, 0x74, 0x00, 0x2F, 0x12, 0x53, 0x7D, 0xE0, 0x90, \r
+0x94, 0x72, 0xF0, 0x74, 0x01, 0x2F, 0x12, 0x57, 0x1A, 0xE0, 0x90, 0x94, 0x73, 0xF0, 0x74, 0x02, \r
+0x2F, 0x91, 0x81, 0xE0, 0x90, 0x94, 0x74, 0xF0, 0x74, 0x03, 0x2F, 0x91, 0x65, 0xE0, 0x90, 0x94, \r
+0x75, 0x12, 0x87, 0xA9, 0x90, 0x94, 0x76, 0xF0, 0x74, 0x05, 0x2F, 0x91, 0x89, 0x90, 0x94, 0x77, \r
+0xF0, 0x74, 0x06, 0x2F, 0x12, 0x87, 0x8F, 0x90, 0x94, 0x78, 0xF0, 0x74, 0x07, 0x2F, 0x91, 0x9B, \r
+0x90, 0x94, 0x79, 0xF0, 0x74, 0x08, 0x2F, 0x91, 0x92, 0x90, 0x94, 0x7A, 0xF0, 0x22, 0x90, 0x93, \r
+0x64, 0xA3, 0xE0, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0x12, 0x08, 0x6D, \r
+0x90, 0x93, 0x64, 0xE4, 0x75, 0xF0, 0x04, 0x12, 0x08, 0xD6, 0x90, 0x93, 0x64, 0xA3, 0xE0, 0x24, \r
+0x02, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, \r
+0xE0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, \r
+0xF5, 0x83, 0xE0, 0x22, 0x7F, 0x50, 0x7E, 0x0C, 0x12, 0x37, 0x4E, 0x90, 0x94, 0x70, 0xEF, 0xF0, \r
+0x7F, 0x58, 0x7E, 0x0C, 0x12, 0x37, 0x4E, 0x90, 0x94, 0x71, 0xEF, 0xF0, 0x90, 0x94, 0xB5, 0x12, \r
+0x08, 0x79, 0x00, 0x00, 0x00, 0x7F, 0x90, 0x94, 0xB9, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x17, \r
+0x7F, 0x50, 0x7E, 0x0C, 0x12, 0x55, 0x44, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x7F, 0x90, 0x94, \r
+0xB9, 0x12, 0x08, 0x79, 0x00, 0x00, 0x00, 0x17, 0x12, 0x54, 0xDC, 0x90, 0x06, 0x08, 0xE0, 0x90, \r
+0x94, 0x86, 0xF0, 0x90, 0x06, 0xA1, 0xE0, 0xFE, 0x90, 0x06, 0xA0, 0x12, 0x81, 0xF5, 0x90, 0x94, \r
+0x88, 0xF0, 0xA3, 0xEF, 0xB1, 0x16, 0x90, 0x06, 0xA0, 0x74, 0x20, 0xF0, 0xA3, 0x74, 0x01, 0xF0, \r
+0xE4, 0xFD, 0xFF, 0x02, 0x53, 0x90, 0xF0, 0x90, 0x06, 0x08, 0xE0, 0x54, 0x7F, 0xF0, 0x22, 0xD3, \r
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x72, 0xE0, 0xFE, 0x90, 0x94, 0x6F, 0xE0, 0xC3, \r
+0x9E, 0x40, 0x04, 0x7F, 0x00, 0x80, 0x0E, 0xEF, 0x60, 0x05, 0xD3, 0x94, 0x0E, 0x40, 0x04, 0x7F, \r
+0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xB1, 0x63, 0x90, 0x94, 0x6D, 0xE0, \r
+0x64, 0x01, 0xF0, 0xE0, 0x24, 0x4A, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xA5, 0xA3, 0x12, 0x64, 0xBB, \r
+0x02, 0x75, 0x55, 0x90, 0x93, 0x60, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xED, 0x14, 0x60, 0x06, \r
+0x04, 0x70, 0x03, 0x7F, 0x01, 0x22, 0x7F, 0x01, 0x22, 0x90, 0x93, 0x65, 0xE0, 0x24, 0xDC, 0xFE, \r
+0x90, 0x93, 0x64, 0xE0, 0x34, 0xFF, 0x90, 0x93, 0x92, 0xF0, 0xA3, 0xCE, 0xF0, 0x22, 0x74, 0x00, \r
+0x2F, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0x22, 0x90, 0x93, 0x8B, 0xE0, 0x2F, 0xFF, 0x90, \r
+0x93, 0x8A, 0xE0, 0x34, 0x00, 0xFE, 0x90, 0x94, 0x0E, 0xF0, 0xA3, 0x22, 0xF0, 0xA3, 0xEF, 0xF0, \r
+0xE4, 0xFD, 0x02, 0x63, 0x99, 0x90, 0x93, 0x89, 0xE4, 0x75, 0xF0, 0x04, 0x02, 0x08, 0xD6, 0x74, \r
+0x12, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xE0, 0x7A, 0x00, 0x24, 0x00, 0xFF, \r
+0xEA, 0x3E, 0x22, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x68, 0xE0, 0x04, 0xF0, 0x22, 0xE0, 0x24, \r
+0x01, 0xFF, 0x90, 0x8E, 0x29, 0xE0, 0x34, 0x00, 0x22, 0x90, 0x8E, 0xAF, 0xE0, 0xC4, 0x13, 0x13, \r
+0x54, 0x03, 0x22, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xE0, \r
+0x75, 0xF0, 0x10, 0x90, 0x81, 0x05, 0x12, 0x44, 0x0B, 0xE0, 0x22, 0x90, 0x93, 0x63, 0xE0, 0xFD, \r
+0x90, 0x93, 0x62, 0xE0, 0x2D, 0x22, 0x90, 0x93, 0x2A, 0x12, 0x43, 0xFF, 0xD3, 0x02, 0x43, 0xE2, \r
+0x90, 0x90, 0xEA, 0x12, 0x43, 0xF3, 0xEC, 0x4D, 0x4E, 0x4F, 0x22, 0x90, 0x94, 0xE7, 0xE0, 0xC3, \r
+0x13, 0x90, 0xFD, 0x10, 0xF0, 0x22, 0x7F, 0x84, 0x7E, 0x08, 0x12, 0x54, 0xE0, 0x90, 0x94, 0xA3, \r
+0x22, 0x24, 0x30, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0x22, 0x90, 0x8E, 0xAC, 0xE0, 0x14, \r
+0x90, 0x8E, 0xAE, 0xF0, 0x22, 0x74, 0xF2, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0x22, 0x90, 0x94, \r
+0x7A, 0xE0, 0x90, 0x95, 0x2D, 0xF0, 0x22, 0x90, 0x93, 0x66, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, \r
+0x90, 0x8E, 0xAD, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x22, 0x90, 0x8E, 0xB1, 0xE0, 0xC4, 0x13, 0x54, \r
+0x07, 0x22, 0x90, 0x01, 0x1F, 0xE0, 0xFE, 0x90, 0x01, 0x1E, 0x22, 0x2E, 0xF5, 0x82, 0xE4, 0x34, \r
+0xFC, 0xF5, 0x83, 0x22, 0x90, 0x95, 0x19, 0xE0, 0x7F, 0x48, 0x7E, 0x09, 0x22, 0xF0, 0xA3, 0xEF, \r
+0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x22, 0x7F, 0x01, 0x7E, \r
+0x00, 0x02, 0x3D, 0xC2, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0x22, 0xF5, 0x82, 0xE4, 0x34, \r
+0xFC, 0xF5, 0x83, 0x22, 0x90, 0x8E, 0x43, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x90, 0x8E, 0x45, 0xE0, \r
+0xC4, 0x54, 0x0F, 0x22, 0x90, 0x8E, 0x2C, 0xE0, 0xFF, 0xC3, 0x13, 0x22, 0x12, 0x08, 0xD6, 0x90, \r
+0x8E, 0x29, 0xE0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0xFF, 0x22, 0xF9, 0xEE, 0x34, 0xFC, \r
+0xFA, 0x7B, 0x01, 0x22, 0x2F, 0xF8, 0xE6, 0xFE, 0xED, 0xF4, 0x5E, 0x22, 0xEA, 0xFD, \r
 };\r
 };\r
-u4Byte ArrayLength_MP_8723B_FW_WoWLAN = 25034;\r
+u4Byte ArrayLength_MP_8723B_FW_WoWLAN = 26398;\r
 \r
 \r
 void\r
 \r
 \r
 void\r
index 74c100e9f9317fcd7a80dcebddff1a2824426c6e..acb9952ce6893d5ce3372fb90f08e8e23f7ae751 100755 (executable)
@@ -18,6 +18,7 @@
 * \r
 ******************************************************************************/\r
 \r
 * \r
 ******************************************************************************/\r
 \r
+/*Image2HeaderVersion: 2.9*/\r
 #include "Mp_Precomp.h"\r
 #include "../phydm_precomp.h"\r
 \r
 #include "Mp_Precomp.h"\r
 #include "../phydm_precomp.h"\r
 \r
@@ -36,11 +37,12 @@ CheckPositive(
                            ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  // _BT  \r
 \r
        u4Byte    cond1   = Condition1, cond2 = Condition2;\r
                            ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  // _BT  \r
 \r
        u4Byte    cond1   = Condition1, cond2 = Condition2;\r
-       u4Byte    driver1 = pDM_Odm->CutVersion       << 24 |  \r
-                               pDM_Odm->SupportPlatform  << 16 | \r
-                               pDM_Odm->PackageType      << 12 | \r
-                               pDM_Odm->SupportInterface << 8  |\r
-                               _BoardType;\r
+       u4Byte    driver1 = pDM_Odm->CutVersion       << 24 | \r
+                               (pDM_Odm->SupportInterface & 0xF0) << 16 | \r
+                               pDM_Odm->SupportPlatform  << 16 | \r
+                               pDM_Odm->PackageType      << 12 | \r
+                               (pDM_Odm->SupportInterface & 0x0F) << 8  |\r
+                               _BoardType;\r
 \r
        u4Byte    driver2 = pDM_Odm->TypeGLNA <<  0 |  \r
                                pDM_Odm->TypeGPA  <<  8 | \r
 \r
        u4Byte    driver2 = pDM_Odm->TypeGLNA <<  0 |  \r
                                pDM_Odm->TypeGPA  <<  8 | \r
@@ -58,44 +60,41 @@ CheckPositive(
                 ("     (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));\r
 \r
 \r
                 ("     (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));\r
 \r
 \r
-       //============== Value Defined Check ===============//\r
-       //QFN Type [15:12] and Cut Version [27:24] need to do value check\r
+       /*============== Value Defined Check ===============*/\r
+       /*QFN Type [15:12] and Cut Version [27:24] need to do value check*/\r
        \r
        \r
-       if(((cond1 & 0x0000F000) != 0) &&((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))\r
+       if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))\r
                return FALSE;\r
                return FALSE;\r
-       if(((cond1 & 0x0F000000) != 0) &&((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))\r
-               return FALSE;           \r
+       if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))\r
+               return FALSE;\r
+\r
+       /*=============== Bit Defined Check ================*/\r
+       /* We don't care [31:28] */\r
+\r
+       cond1   &= 0x00FF0FFF; \r
+       driver1 &= 0x00FF0FFF; \r
 \r
 \r
-       //=============== Bit Defined Check ================//\r
-    // We don't care [31:28] and [23:20]\r
-    //\r
-       cond1   &= 0x000F0FFF; \r
-       driver1 &= 0x000F0FFF; \r
+       if ((cond1 & driver1) == cond1) {\r
+               u4Byte bitMask = 0;\r
 \r
 \r
-    if ((cond1 & driver1) == cond1) \r
-    {\r
-        u4Byte bitMask = 0;\r
-        if ((cond1 & 0x0F) == 0) // BoardType is DONTCARE\r
+               if ((cond1 & 0x0F) == 0) /* BoardType is DONTCARE*/\r
             return TRUE;\r
 \r
             return TRUE;\r
 \r
-        if ((cond1 & BIT0) != 0) //GLNA\r
+               if ((cond1 & BIT0) != 0) /*GLNA*/\r
             bitMask |= 0x000000FF;\r
             bitMask |= 0x000000FF;\r
-        if ((cond1 & BIT1) != 0) //GPA\r
+               if ((cond1 & BIT1) != 0) /*GPA*/\r
             bitMask |= 0x0000FF00;\r
             bitMask |= 0x0000FF00;\r
-        if ((cond1 & BIT2) != 0) //ALNA\r
+               if ((cond1 & BIT2) != 0) /*ALNA*/\r
             bitMask |= 0x00FF0000;\r
             bitMask |= 0x00FF0000;\r
-        if ((cond1 & BIT3) != 0) //APA\r
+               if ((cond1 & BIT3) != 0) /*APA*/\r
             bitMask |= 0xFF000000;\r
 \r
             bitMask |= 0xFF000000;\r
 \r
-        if ((cond2 & bitMask) == (driver2 & bitMask)) // BoardType of each RF path is matched\r
+               if ((cond2 & bitMask) == (driver2 & bitMask)) /* BoardType of each RF path is matched*/\r
             return TRUE;\r
             return TRUE;\r
-        else\r
+               else\r
             return FALSE;\r
             return FALSE;\r
-    }\r
-    else \r
-    {\r
+               } else\r
         return FALSE;\r
         return FALSE;\r
-    }\r
 }\r
 static BOOLEAN\r
 CheckNegative(\r
 }\r
 static BOOLEAN\r
 CheckNegative(\r
@@ -115,9 +114,9 @@ u4Byte Array_MP_8723B_MAC_REG[] = {
                0x02F, 0x00000030,\r
                0x035, 0x00000000,\r
                0x039, 0x00000008,\r
                0x02F, 0x00000030,\r
                0x035, 0x00000000,\r
                0x039, 0x00000008,\r
-               0x04E, 0x000000E0,\r
                0x064, 0x00000000,\r
                0x067, 0x00000020,\r
                0x064, 0x00000000,\r
                0x067, 0x00000020,\r
+               0x421, 0x0000000F,\r
                0x428, 0x0000000A,\r
                0x429, 0x00000010,\r
                0x430, 0x00000000,\r
                0x428, 0x0000000A,\r
                0x429, 0x00000010,\r
                0x430, 0x00000000,\r
@@ -226,58 +225,42 @@ ODM_ReadAndConfig_MP_8723B_MAC_REG(
     u4Byte     i         = 0;\r
     u1Byte     cCond;\r
     BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
     u4Byte     i         = 0;\r
     u1Byte     cCond;\r
     BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
-//ask by Luke.Lee\r
     u4Byte     ArrayLen    = sizeof(Array_MP_8723B_MAC_REG)/sizeof(u4Byte);\r
     pu4Byte    Array       = Array_MP_8723B_MAC_REG;\r
        \r
     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_MAC_REG\n"));\r
 \r
     u4Byte     ArrayLen    = sizeof(Array_MP_8723B_MAC_REG)/sizeof(u4Byte);\r
     pu4Byte    Array       = Array_MP_8723B_MAC_REG;\r
        \r
     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_MAC_REG\n"));\r
 \r
-       while(( i+1) < ArrayLen)\r
-       {\r
+       while ((i + 1) < ArrayLen) {\r
                u4Byte v1 = Array[i];\r
                u4Byte v2 = Array[i+1];\r
 \r
                u4Byte v1 = Array[i];\r
                u4Byte v2 = Array[i+1];\r
 \r
-               if(v1 & (BIT31|BIT30)) //positive & negative condition\r
-               {\r
-                       if(v1 & BIT31) // positive condition\r
-                       {\r
+               if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/\r
+                       if (v1 & BIT31) {/* positive condition*/\r
                                cCond  = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
                                cCond  = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
-                               if(cCond == COND_ENDIF) //end\r
-                               {\r
+                               if (cCond == COND_ENDIF) {/*end*/\r
                                        bMatched = TRUE;\r
                                        bSkipped = FALSE;\r
                                        bMatched = TRUE;\r
                                        bSkipped = FALSE;\r
-                               }\r
-                               else if(cCond == COND_ELSE) //else\r
-                               {\r
+                               } else if (cCond == COND_ELSE) /*else*/\r
                                        bMatched = bSkipped?FALSE:TRUE;\r
                                        bMatched = bSkipped?FALSE:TRUE;\r
-                               }\r
-                               else //if , else if\r
-                               {\r
-                                       if(bSkipped)\r
+                               else {/*if , else if*/\r
+                                       if (bSkipped)\r
                                                bMatched = FALSE;\r
                                                bMatched = FALSE;\r
-                                       else\r
-                                       {\r
-                                               if(CheckPositive(pDM_Odm, v1, v2))\r
-                                               {\r
+                                       else {\r
+                                               if (CheckPositive(pDM_Odm, v1, v2)) {\r
                                                        bMatched = TRUE;\r
                                                        bSkipped = TRUE;\r
                                                        bMatched = TRUE;\r
                                                        bSkipped = TRUE;\r
-                                               }\r
-                                               else\r
-                                               {\r
+                                               } else {\r
                                                        bMatched = FALSE;\r
                                                        bSkipped = FALSE;\r
                                                }\r
                                        }\r
                                }\r
                                                        bMatched = FALSE;\r
                                                        bSkipped = FALSE;\r
                                                }\r
                                        }\r
                                }\r
+                       } else if (v1 & BIT30) { /*negative condition*/\r
+                       /*do nothing*/\r
                        }\r
                        }\r
-                       else if(v1 & BIT30){ //negative condition\r
-                       //do nothing\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if(bMatched)\r
-                       odm_ConfigMAC_8723B(pDM_Odm, v1, (u1Byte)v2);\r
+               } else {\r
+                       if (bMatched)\r
+                               odm_ConfigMAC_8723B(pDM_Odm, v1, (u1Byte)v2);\r
                }\r
        i = i + 2;\r
        }\r
                }\r
        i = i + 2;\r
        }\r
@@ -286,8 +269,8 @@ ODM_ReadAndConfig_MP_8723B_MAC_REG(
 u4Byte\r
 ODM_GetVersion_MP_8723B_MAC_REG(void)\r
 {\r
 u4Byte\r
 ODM_GetVersion_MP_8723B_MAC_REG(void)\r
 {\r
-          return 12;\r
+          return 18;\r
 }\r
 \r
 }\r
 \r
-#endif // end of HWIMG_SUPPORT\r
+#endif /* end of HWIMG_SUPPORT*/\r
 \r
 \r
index 1f74db8b12f7c4fd7120d944280b7cd55e00e4cc..6384c333f5bd849c07cdf87ea9b27d64bb6a3f7a 100755 (executable)
@@ -18,6 +18,7 @@
 * \r
 ******************************************************************************/\r
 \r
 * \r
 ******************************************************************************/\r
 \r
+/*Image2HeaderVersion: 2.9*/\r
 #if (RTL8723B_SUPPORT == 1)\r
 #ifndef __INC_MP_MAC_HW_IMG_8723B_H\r
 #define __INC_MP_MAC_HW_IMG_8723B_H\r
 #if (RTL8723B_SUPPORT == 1)\r
 #ifndef __INC_MP_MAC_HW_IMG_8723B_H\r
 #define __INC_MP_MAC_HW_IMG_8723B_H\r
 ******************************************************************************/\r
 \r
 void\r
 ******************************************************************************/\r
 \r
 void\r
-ODM_ReadAndConfig_MP_8723B_MAC_REG( // TC: Test Chip, MP: MP Chip\r
+ODM_ReadAndConfig_MP_8723B_MAC_REG(/* TC: Test Chip, MP: MP Chip*/\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_MAC_REG(void);\r
 \r
 #endif\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_MAC_REG(void);\r
 \r
 #endif\r
-#endif // end of HWIMG_SUPPORT\r
+#endif /* end of HWIMG_SUPPORT*/\r
 \r
 \r
index e4480ccf56be310318c839b38df53222a55eaf27..ee16335fe39932fe5f4c3f597a4cabe0fddf91e0 100755 (executable)
@@ -18,6 +18,7 @@
 * \r
 ******************************************************************************/\r
 \r
 * \r
 ******************************************************************************/\r
 \r
+/*Image2HeaderVersion: 2.9*/\r
 #include "Mp_Precomp.h"\r
 #include "../phydm_precomp.h"\r
 \r
 #include "Mp_Precomp.h"\r
 #include "../phydm_precomp.h"\r
 \r
@@ -36,11 +37,12 @@ CheckPositive(
                            ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  // _BT  \r
 \r
        u4Byte    cond1   = Condition1, cond2 = Condition2;\r
                            ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  // _BT  \r
 \r
        u4Byte    cond1   = Condition1, cond2 = Condition2;\r
-       u4Byte    driver1 = pDM_Odm->CutVersion       << 24 |  \r
-                               pDM_Odm->SupportPlatform  << 16 | \r
-                               pDM_Odm->PackageType      << 12 | \r
-                               pDM_Odm->SupportInterface << 8  |\r
-                               _BoardType;\r
+       u4Byte    driver1 = pDM_Odm->CutVersion       << 24 | \r
+                               (pDM_Odm->SupportInterface & 0xF0) << 16 | \r
+                               pDM_Odm->SupportPlatform  << 16 | \r
+                               pDM_Odm->PackageType      << 12 | \r
+                               (pDM_Odm->SupportInterface & 0x0F) << 8  |\r
+                               _BoardType;\r
 \r
        u4Byte    driver2 = pDM_Odm->TypeGLNA <<  0 |  \r
                                pDM_Odm->TypeGPA  <<  8 | \r
 \r
        u4Byte    driver2 = pDM_Odm->TypeGLNA <<  0 |  \r
                                pDM_Odm->TypeGPA  <<  8 | \r
@@ -58,44 +60,41 @@ CheckPositive(
                 ("     (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));\r
 \r
 \r
                 ("     (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));\r
 \r
 \r
-       //============== Value Defined Check ===============//\r
-       //QFN Type [15:12] and Cut Version [27:24] need to do value check\r
+       /*============== Value Defined Check ===============*/\r
+       /*QFN Type [15:12] and Cut Version [27:24] need to do value check*/\r
        \r
        \r
-       if(((cond1 & 0x0000F000) != 0) &&((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))\r
+       if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))\r
                return FALSE;\r
                return FALSE;\r
-       if(((cond1 & 0x0F000000) != 0) &&((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))\r
-               return FALSE;           \r
-\r
-       //=============== Bit Defined Check ================//\r
-    // We don't care [31:28] and [23:20]\r
-    //\r
-       cond1   &= 0x000F0FFF; \r
-       driver1 &= 0x000F0FFF; \r
-\r
-    if ((cond1 & driver1) == cond1) \r
-    {\r
-        u4Byte bitMask = 0;\r
-        if ((cond1 & 0x0F) == 0) // BoardType is DONTCARE\r
+       if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))\r
+               return FALSE;\r
+\r
+       /*=============== Bit Defined Check ================*/\r
+       /* We don't care [31:28] */\r
+\r
+       cond1   &= 0x00FF0FFF; \r
+       driver1 &= 0x00FF0FFF; \r
+\r
+       if ((cond1 & driver1) == cond1) {\r
+               u4Byte bitMask = 0;\r
+\r
+               if ((cond1 & 0x0F) == 0) /* BoardType is DONTCARE*/\r
             return TRUE;\r
 \r
             return TRUE;\r
 \r
-        if ((cond1 & BIT0) != 0) //GLNA\r
+               if ((cond1 & BIT0) != 0) /*GLNA*/\r
             bitMask |= 0x000000FF;\r
             bitMask |= 0x000000FF;\r
-        if ((cond1 & BIT1) != 0) //GPA\r
+               if ((cond1 & BIT1) != 0) /*GPA*/\r
             bitMask |= 0x0000FF00;\r
             bitMask |= 0x0000FF00;\r
-        if ((cond1 & BIT2) != 0) //ALNA\r
+               if ((cond1 & BIT2) != 0) /*ALNA*/\r
             bitMask |= 0x00FF0000;\r
             bitMask |= 0x00FF0000;\r
-        if ((cond1 & BIT3) != 0) //APA\r
+               if ((cond1 & BIT3) != 0) /*APA*/\r
             bitMask |= 0xFF000000;\r
 \r
             bitMask |= 0xFF000000;\r
 \r
-        if ((cond2 & bitMask) == (driver2 & bitMask)) // BoardType of each RF path is matched\r
+               if ((cond2 & bitMask) == (driver2 & bitMask)) /* BoardType of each RF path is matched*/\r
             return TRUE;\r
             return TRUE;\r
-        else\r
+               else\r
             return FALSE;\r
             return FALSE;\r
-    }\r
-    else \r
-    {\r
+               } else\r
         return FALSE;\r
         return FALSE;\r
-    }\r
 }\r
 static BOOLEAN\r
 CheckNegative(\r
 }\r
 static BOOLEAN\r
 CheckNegative(\r
@@ -135,31 +134,37 @@ u4Byte Array_MP_8723B_RadioA[] = {
                0x01E, 0x00000000,\r
                0x0DF, 0x00000780,\r
                0x050, 0x00067435,\r
                0x01E, 0x00000000,\r
                0x0DF, 0x00000780,\r
                0x050, 0x00067435,\r
-       0x80002000,0x00000000,0x40000000,0x00000000,\r
-               0x051, 0x0006B10E,\r
-       0x90003000,0x00000000,0x40000000,0x00000000,\r
-               0x051, 0x0006B10E,\r
-       0x90004000,0x00000000,0x40000000,0x00000000,\r
-               0x051, 0x0006B10E,\r
-       0xA0000000,0x00000000,\r
+       0x80002000,     0x00000000,     0x40000000,     0x00000000,\r
+               0x051, 0x0006F10E,\r
+               0x052, 0x000007D3,\r
+       0x90003000,     0x00000000,     0x40000000,     0x00000000,\r
+               0x051, 0x0006F10E,\r
+               0x052, 0x000007D3,\r
+       0x90004000,     0x00000000,     0x40000000,     0x00000000,\r
+               0x051, 0x0006F10E,\r
+               0x052, 0x000007D3,\r
+       0xA0000000,     0x00000000,\r
                0x051, 0x0006B04E,\r
                0x051, 0x0006B04E,\r
-       0xB0000000,0x00000000,\r
                0x052, 0x000007D2,\r
                0x052, 0x000007D2,\r
+       0xB0000000,     0x00000000,\r
                0x053, 0x00000000,\r
                0x054, 0x00050400,\r
                0x055, 0x0004026E,\r
                0x0DD, 0x0000004C,\r
                0x070, 0x00067435,\r
                0x053, 0x00000000,\r
                0x054, 0x00050400,\r
                0x055, 0x0004026E,\r
                0x0DD, 0x0000004C,\r
                0x070, 0x00067435,\r
-       0x80002000,0x00000000,0x40000000,0x00000000,\r
-               0x071, 0x0006B10E,\r
-       0x90003000,0x00000000,0x40000000,0x00000000,\r
-               0x071, 0x0006B10E,\r
-       0x90004000,0x00000000,0x40000000,0x00000000,\r
-               0x071, 0x0006B10E,\r
-       0xA0000000,0x00000000,\r
+       0x80002000,     0x00000000,     0x40000000,     0x00000000,\r
+               0x071, 0x0006F10E,\r
+               0x072, 0x000007D3,\r
+       0x90003000,     0x00000000,     0x40000000,     0x00000000,\r
+               0x071, 0x0006F10E,\r
+               0x072, 0x000007D3,\r
+       0x90004000,     0x00000000,     0x40000000,     0x00000000,\r
+               0x071, 0x0006F10E,\r
+               0x072, 0x000007D3,\r
+       0xA0000000,     0x00000000,\r
                0x071, 0x0006B04E,\r
                0x071, 0x0006B04E,\r
-       0xB0000000,0x00000000,\r
                0x072, 0x000007D2,\r
                0x072, 0x000007D2,\r
+       0xB0000000,     0x00000000,\r
                0x073, 0x00000000,\r
                0x074, 0x00050400,\r
                0x075, 0x0004026E,\r
                0x073, 0x00000000,\r
                0x074, 0x00050400,\r
                0x075, 0x0004026E,\r
@@ -247,58 +252,42 @@ ODM_ReadAndConfig_MP_8723B_RadioA(
     u4Byte     i         = 0;\r
     u1Byte     cCond;\r
     BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
     u4Byte     i         = 0;\r
     u1Byte     cCond;\r
     BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
-//ask by Luke.Lee\r
     u4Byte     ArrayLen    = sizeof(Array_MP_8723B_RadioA)/sizeof(u4Byte);\r
     pu4Byte    Array       = Array_MP_8723B_RadioA;\r
        \r
     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_RadioA\n"));\r
 \r
     u4Byte     ArrayLen    = sizeof(Array_MP_8723B_RadioA)/sizeof(u4Byte);\r
     pu4Byte    Array       = Array_MP_8723B_RadioA;\r
        \r
     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_RadioA\n"));\r
 \r
-       while(( i+1) < ArrayLen)\r
-       {\r
+       while ((i + 1) < ArrayLen) {\r
                u4Byte v1 = Array[i];\r
                u4Byte v2 = Array[i+1];\r
 \r
                u4Byte v1 = Array[i];\r
                u4Byte v2 = Array[i+1];\r
 \r
-               if(v1 & (BIT31|BIT30)) //positive & negative condition\r
-               {\r
-                       if(v1 & BIT31) // positive condition\r
-                       {\r
+               if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/\r
+                       if (v1 & BIT31) {/* positive condition*/\r
                                cCond  = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
                                cCond  = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
-                               if(cCond == COND_ENDIF) //end\r
-                               {\r
+                               if (cCond == COND_ENDIF) {/*end*/\r
                                        bMatched = TRUE;\r
                                        bSkipped = FALSE;\r
                                        bMatched = TRUE;\r
                                        bSkipped = FALSE;\r
-                               }\r
-                               else if(cCond == COND_ELSE) //else\r
-                               {\r
+                               } else if (cCond == COND_ELSE) /*else*/\r
                                        bMatched = bSkipped?FALSE:TRUE;\r
                                        bMatched = bSkipped?FALSE:TRUE;\r
-                               }\r
-                               else //if , else if\r
-                               {\r
-                                       if(bSkipped)\r
+                               else {/*if , else if*/\r
+                                       if (bSkipped)\r
                                                bMatched = FALSE;\r
                                                bMatched = FALSE;\r
-                                       else\r
-                                       {\r
-                                               if(CheckPositive(pDM_Odm, v1, v2))\r
-                                               {\r
+                                       else {\r
+                                               if (CheckPositive(pDM_Odm, v1, v2)) {\r
                                                        bMatched = TRUE;\r
                                                        bSkipped = TRUE;\r
                                                        bMatched = TRUE;\r
                                                        bSkipped = TRUE;\r
-                                               }\r
-                                               else\r
-                                               {\r
+                                               } else {\r
                                                        bMatched = FALSE;\r
                                                        bSkipped = FALSE;\r
                                                }\r
                                        }\r
                                }\r
                                                        bMatched = FALSE;\r
                                                        bSkipped = FALSE;\r
                                                }\r
                                        }\r
                                }\r
+                       } else if (v1 & BIT30) { /*negative condition*/\r
+                       /*do nothing*/\r
                        }\r
                        }\r
-                       else if(v1 & BIT30){ //negative condition\r
-                       //do nothing\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if(bMatched)\r
-                       odm_ConfigRF_RadioA_8723B(pDM_Odm, v1, v2);\r
+               } else {\r
+                       if (bMatched)\r
+                               odm_ConfigRF_RadioA_8723B(pDM_Odm, v1, v2);\r
                }\r
        i = i + 2;\r
        }\r
                }\r
        i = i + 2;\r
        }\r
@@ -307,42 +296,42 @@ ODM_ReadAndConfig_MP_8723B_RadioA(
 u4Byte\r
 ODM_GetVersion_MP_8723B_RadioA(void)\r
 {\r
 u4Byte\r
 ODM_GetVersion_MP_8723B_RadioA(void)\r
 {\r
-          return 12;\r
+          return 18;\r
 }\r
 \r
 /******************************************************************************\r
 *                           TxPowerTrack_AP.TXT\r
 ******************************************************************************/\r
 \r
 }\r
 \r
 /******************************************************************************\r
 *                           TxPowerTrack_AP.TXT\r
 ******************************************************************************/\r
 \r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_AP_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_AP_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 1, 2, 2, 3, 4, 5, 5, 6,  6,  7,  7,  8,  8,  9,  9, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_AP_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_AP_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 19, 20, 20, 20},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 19, 20, 20, 20},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_AP_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_AP_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 2, 3, 3, 4, 4, 5, 5, 6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 6,  7,  7,  8,  8,  9, 10, 11, 11, 12, 13, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16},\r
+       {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_AP_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_AP_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
 };\r
 };\r
-u1Byte gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_AP_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_AP_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_AP_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_AP_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_AP_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_AP_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_AP_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_AP_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_AP_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_AP_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_AP_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_AP_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_AP_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_AP_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_AP_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_AP_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
 #endif\r
 \r
 void\r
 #endif\r
 \r
 void\r
@@ -350,7 +339,7 @@ ODM_ReadAndConfig_MP_8723B_TxPowerTrack_AP(
        IN   PDM_ODM_T  pDM_Odm\r
        )\r
 {\r
        IN   PDM_ODM_T  pDM_Odm\r
        )\r
 {\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
        PODM_RF_CAL_T  pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);\r
 \r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_MP_8723B\n"));\r
        PODM_RF_CAL_T  pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);\r
 \r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_MP_8723B\n"));\r
@@ -379,33 +368,33 @@ ODM_ReadAndConfig_MP_8723B_TxPowerTrack_AP(
 \r
 #if DEV_BUS_TYPE == RT_PCI_INTERFACE\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_PCIE_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 \r
 #if DEV_BUS_TYPE == RT_PCI_INTERFACE\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_PCIE_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 1, 2, 2, 3, 4, 5, 5, 6,  6,  7,  7,  8,  8,  9,  9, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_PCIE_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_PCIE_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 19, 20, 20, 20},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 19, 20, 20, 20},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_PCIE_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_PCIE_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 2, 3, 3, 4, 4, 5, 5, 6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 6,  7,  7,  8,  8,  9, 10, 11, 11, 12, 13, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16},\r
+       {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_PCIE_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_PCIE_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
 };\r
 };\r
-u1Byte gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_PCIE_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_PCIE_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_PCIE_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_PCIE_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_PCIE_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_PCIE_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_PCIE_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_PCIE_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_PCIE_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_PCIE_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_PCIE_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_PCIE_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_PCIE_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_PCIE_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_PCIE_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_PCIE_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
 #endif\r
 \r
 void\r
 #endif\r
 \r
 void\r
@@ -442,33 +431,33 @@ ODM_ReadAndConfig_MP_8723B_TxPowerTrack_PCIE(
 \r
 #if DEV_BUS_TYPE == RT_SDIO_INTERFACE\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 \r
 #if DEV_BUS_TYPE == RT_SDIO_INTERFACE\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 1, 2, 2, 3, 4, 5, 5, 6,  6,  7,  7,  8,  8,  9,  9, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 19, 20, 20, 20},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 19, 20, 20, 20},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 2, 3, 3, 4, 4, 5, 5, 6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 6,  7,  7,  8,  8,  9, 10, 11, 11, 12, 13, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16},\r
+       {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
 };\r
 };\r
-u1Byte gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 3, 3, 4, 5, 5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 3, 3, 4, 5, 5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
 #endif\r
 \r
 void\r
 #endif\r
 \r
 void\r
@@ -505,33 +494,33 @@ ODM_ReadAndConfig_MP_8723B_TxPowerTrack_SDIO(
 \r
 #if DEV_BUS_TYPE == RT_USB_INTERFACE\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_USB_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 \r
 #if DEV_BUS_TYPE == RT_USB_INTERFACE\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_USB_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 1, 2, 2, 3, 4, 5, 5, 6,  6,  7,  7,  8,  8,  9,  9, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_USB_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_USB_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 19, 20, 20, 20},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 19, 20, 20, 20},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_USB_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_USB_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 1, 2, 3, 3, 4, 4, 5, 5, 6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 6,  7,  7,  8,  8,  9, 10, 11, 11, 12, 13, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16},\r
+       {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16},\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_USB_8723B[][DELTA_SWINGIDX_SIZE] = {\r
 };\r
 u1Byte gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_USB_8723B[][DELTA_SWINGIDX_SIZE] = {\r
-       {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
-       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
+       {0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},\r
 };\r
 };\r
-u1Byte gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_USB_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_USB_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_USB_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_USB_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_USB_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_USB_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_USB_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
-u1Byte gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_USB_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_USB_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_USB_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_USB_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_USB_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_USB_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_USB_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_USB_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
+u1Byte gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_USB_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15};\r
 #endif\r
 \r
 void\r
 #endif\r
 \r
 void\r
@@ -823,8 +812,8 @@ pu1Byte Array_MP_8723B_TXPWR_LMT[] = {
 \r
 void\r
 ODM_ReadAndConfig_MP_8723B_TXPWR_LMT(\r
 \r
 void\r
 ODM_ReadAndConfig_MP_8723B_TXPWR_LMT(\r
-       IN   PDM_ODM_T  pDM_Odm\r
-       )\r
+       IN   PDM_ODM_T  pDM_Odm\r
+)\r
 {\r
        u4Byte     i           = 0;\r
        u4Byte     ArrayLen    = sizeof(Array_MP_8723B_TXPWR_LMT)/sizeof(pu1Byte);\r
 {\r
        u4Byte     i           = 0;\r
        u4Byte     ArrayLen    = sizeof(Array_MP_8723B_TXPWR_LMT)/sizeof(pu1Byte);\r
@@ -832,20 +821,19 @@ ODM_ReadAndConfig_MP_8723B_TXPWR_LMT(
 \r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_TXPWR_LMT\n"));\r
 \r
 \r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_TXPWR_LMT\n"));\r
 \r
-       for (i = 0; i < ArrayLen; i += 7 )\r
-       {\r
-           pu1Byte regulation = Array[i];\r
-           pu1Byte band = Array[i+1];\r
-           pu1Byte bandwidth = Array[i+2];\r
-           pu1Byte rate = Array[i+3];\r
-           pu1Byte rfPath = Array[i+4];\r
-           pu1Byte chnl = Array[i+5];\r
-           pu1Byte val = Array[i+6];\r
+       for (i = 0; i < ArrayLen; i += 7) {\r
+               pu1Byte regulation = Array[i];\r
+               pu1Byte band = Array[i+1];\r
+               pu1Byte bandwidth = Array[i+2];\r
+               pu1Byte rate = Array[i+3];\r
+               pu1Byte rfPath = Array[i+4];\r
+               pu1Byte chnl = Array[i+5];\r
+               pu1Byte val = Array[i+6];\r
        \r
        \r
-                odm_ConfigBB_TXPWR_LMT_8723B(pDM_Odm, regulation, band, bandwidth, rate, rfPath, chnl, val);\r
+               odm_ConfigBB_TXPWR_LMT_8723B(pDM_Odm, regulation, band, bandwidth, rate, rfPath, chnl, val);\r
        }\r
 \r
 }\r
 \r
        }\r
 \r
 }\r
 \r
-#endif // end of HWIMG_SUPPORT\r
+#endif /* end of HWIMG_SUPPORT*/\r
 \r
 \r
index aee0ae470a637aab962aaa8c952fff001c7eebba..8e17b71ace0eab46247cb16a14c8ce09cbbfc06b 100755 (executable)
@@ -18,6 +18,7 @@
 * \r
 ******************************************************************************/\r
 \r
 * \r
 ******************************************************************************/\r
 \r
+/*Image2HeaderVersion: 2.9*/\r
 #if (RTL8723B_SUPPORT == 1)\r
 #ifndef __INC_MP_RF_HW_IMG_8723B_H\r
 #define __INC_MP_RF_HW_IMG_8723B_H\r
 #if (RTL8723B_SUPPORT == 1)\r
 #ifndef __INC_MP_RF_HW_IMG_8723B_H\r
 #define __INC_MP_RF_HW_IMG_8723B_H\r
@@ -28,7 +29,7 @@
 ******************************************************************************/\r
 \r
 void\r
 ******************************************************************************/\r
 \r
 void\r
-ODM_ReadAndConfig_MP_8723B_RadioA( // TC: Test Chip, MP: MP Chip\r
+ODM_ReadAndConfig_MP_8723B_RadioA(/* TC: Test Chip, MP: MP Chip*/\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_RadioA(void);\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_RadioA(void);\r
@@ -38,7 +39,7 @@ u4Byte ODM_GetVersion_MP_8723B_RadioA(void);
 ******************************************************************************/\r
 \r
 void\r
 ******************************************************************************/\r
 \r
 void\r
-ODM_ReadAndConfig_MP_8723B_TxPowerTrack_AP( // TC: Test Chip, MP: MP Chip\r
+ODM_ReadAndConfig_MP_8723B_TxPowerTrack_AP(/* TC: Test Chip, MP: MP Chip*/\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_AP(void);\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_AP(void);\r
@@ -48,7 +49,7 @@ u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_AP(void);
 ******************************************************************************/\r
 \r
 void\r
 ******************************************************************************/\r
 \r
 void\r
-ODM_ReadAndConfig_MP_8723B_TxPowerTrack_PCIE( // TC: Test Chip, MP: MP Chip\r
+ODM_ReadAndConfig_MP_8723B_TxPowerTrack_PCIE(/* TC: Test Chip, MP: MP Chip*/\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_PCIE(void);\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_PCIE(void);\r
@@ -58,7 +59,7 @@ u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_PCIE(void);
 ******************************************************************************/\r
 \r
 void\r
 ******************************************************************************/\r
 \r
 void\r
-ODM_ReadAndConfig_MP_8723B_TxPowerTrack_SDIO( // TC: Test Chip, MP: MP Chip\r
+ODM_ReadAndConfig_MP_8723B_TxPowerTrack_SDIO(/* TC: Test Chip, MP: MP Chip*/\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_SDIO(void);\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_SDIO(void);\r
@@ -68,7 +69,7 @@ u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_SDIO(void);
 ******************************************************************************/\r
 \r
 void\r
 ******************************************************************************/\r
 \r
 void\r
-ODM_ReadAndConfig_MP_8723B_TxPowerTrack_USB( // TC: Test Chip, MP: MP Chip\r
+ODM_ReadAndConfig_MP_8723B_TxPowerTrack_USB(/* TC: Test Chip, MP: MP Chip*/\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_USB(void);\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_USB(void);\r
@@ -78,11 +79,11 @@ u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_USB(void);
 ******************************************************************************/\r
 \r
 void\r
 ******************************************************************************/\r
 \r
 void\r
-ODM_ReadAndConfig_MP_8723B_TXPWR_LMT( // TC: Test Chip, MP: MP Chip\r
+ODM_ReadAndConfig_MP_8723B_TXPWR_LMT(/* TC: Test Chip, MP: MP Chip*/\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_TXPWR_LMT(void);\r
 \r
 #endif\r
        IN   PDM_ODM_T  pDM_Odm\r
 );\r
 u4Byte ODM_GetVersion_MP_8723B_TXPWR_LMT(void);\r
 \r
 #endif\r
-#endif // end of HWIMG_SUPPORT\r
+#endif /* end of HWIMG_SUPPORT*/\r
 \r
 \r
index 0cbf190188cdf946a6e2bd2aa283d83cd4a25242..ad9a9c46c518812db0ffd3c087a1ec1da5c739ec 100755 (executable)
@@ -168,13 +168,14 @@ setCCKFilterCoefficient(
 }\r
 \r
 void DoIQK_8723B(\r
 }\r
 \r
 void DoIQK_8723B(\r
-       PDM_ODM_T       pDM_Odm,\r
+       PVOID           pDM_VOID,\r
        u1Byte          DeltaThermalIndex,\r
        u1Byte          ThermalValue,   \r
        u1Byte          Threshold\r
        )\r
 {\r
 #if 0 // mark by Lucas@SD4 20140128, suggested by Allen@SD3\r
        u1Byte          DeltaThermalIndex,\r
        u1Byte          ThermalValue,   \r
        u1Byte          Threshold\r
        )\r
 {\r
 #if 0 // mark by Lucas@SD4 20140128, suggested by Allen@SD3\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
@@ -249,7 +250,7 @@ ODM_TxPwrTrackSetPwr_8723B(
        u1Byte          Final_OFDM_Swing_Index = 0; \r
        u1Byte          Final_CCK_Swing_Index = 0; \r
        u1Byte          i = 0;\r
        u1Byte          Final_OFDM_Swing_Index = 0; \r
        u1Byte          Final_CCK_Swing_Index = 0; \r
        u1Byte          i = 0;\r
-\r
+       PODM_RF_CAL_T   pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);\r
        if (pDM_Odm->mp_mode == TRUE)\r
        {\r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE ))\r
        if (pDM_Odm->mp_mode == TRUE)\r
        {\r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE ))\r
@@ -302,7 +303,7 @@ ODM_TxPwrTrackSetPwr_8723B(
                        PwrTrackingLimit_OFDM= 34; //+2dB\r
 \r
                else\r
                        PwrTrackingLimit_OFDM= 34; //+2dB\r
 \r
                else\r
-                       PwrTrackingLimit_OFDM =  pDM_Odm->DefaultOfdmIndex;   //Default OFDM index = 30\r
+                       PwrTrackingLimit_OFDM =  pRFCalibrateInfo->DefaultOfdmIndex;   /*Default OFDM index = 30*/\r
        }\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("TxRate=0x%x, PwrTrackingLimit=%d\n", TxRate, PwrTrackingLimit_OFDM));\r
 \r
        }\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("TxRate=0x%x, PwrTrackingLimit=%d\n", TxRate, PwrTrackingLimit_OFDM));\r
 \r
@@ -314,7 +315,7 @@ ODM_TxPwrTrackSetPwr_8723B(
 \r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("odm_TxPwrTrackSetPwr8723B CH=%d\n", *(pDM_Odm->pChannel)));\r
 \r
 \r
                ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("odm_TxPwrTrackSetPwr8723B CH=%d\n", *(pDM_Odm->pChannel)));\r
 \r
-               pDM_Odm->Remnant_OFDMSwingIdx[RFPath] = pDM_Odm->Absolute_OFDMSwingIdx[RFPath];\r
+               pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath] = pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath];\r
 \r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE ))\r
                if (pDM_Odm->mp_mode == TRUE)\r
 \r
 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE ))\r
                if (pDM_Odm->mp_mode == TRUE)\r
@@ -327,7 +328,7 @@ ODM_TxPwrTrackSetPwr_8723B(
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("ODM_TxPwrTrackSetPwr8723B: CCK Tx-rf(A) Power = 0x%x\n", TxAGC));\r
 \r
                        pwr = PHY_QueryBBReg(Adapter, rTxAGC_A_Rate18_06, 0xFF);\r
                        ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("ODM_TxPwrTrackSetPwr8723B: CCK Tx-rf(A) Power = 0x%x\n", TxAGC));\r
 \r
                        pwr = PHY_QueryBBReg(Adapter, rTxAGC_A_Rate18_06, 0xFF);\r
-                       pwr += (pDM_Odm->BbSwingIdxOfdm[RFPath] - pDM_Odm->BbSwingIdxOfdmBase[RFPath]);\r
+                       pwr += (pRFCalibrateInfo->BbSwingIdxOfdm[RFPath] - pRFCalibrateInfo->BbSwingIdxOfdmBase[RFPath]);\r
                        TxAGC |= ((pwr<<24)|(pwr<<16)|(pwr<<8)|pwr);\r
                        PHY_SetBBReg(Adapter, rTxAGC_A_Rate18_06, bMaskDWord, TxAGC);\r
                        PHY_SetBBReg(Adapter, rTxAGC_A_Rate54_24, bMaskDWord, TxAGC);\r
                        TxAGC |= ((pwr<<24)|(pwr<<16)|(pwr<<8)|pwr);\r
                        PHY_SetBBReg(Adapter, rTxAGC_A_Rate18_06, bMaskDWord, TxAGC);\r
                        PHY_SetBBReg(Adapter, rTxAGC_A_Rate54_24, bMaskDWord, TxAGC);\r
@@ -339,19 +340,19 @@ ODM_TxPwrTrackSetPwr_8723B(
                }\r
                else            \r
                {\r
                }\r
                else            \r
                {\r
-                       pDM_Odm->Modify_TxAGC_Flag_PathA = TRUE;\r
-                       pDM_Odm->Modify_TxAGC_Flag_PathA_CCK = TRUE;\r
+                       pRFCalibrateInfo->Modify_TxAGC_Flag_PathA = TRUE;\r
+                       pRFCalibrateInfo->Modify_TxAGC_Flag_PathA_CCK = TRUE;\r
 \r
 \r
-                       PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK );\r
-                       PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM );\r
-                       PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7 );\r
+                       PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK);\r
+                       PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM);\r
+                       PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7);\r
                }\r
 #endif\r
        }\r
        else if (Method == BBSWING)\r
        {\r
                }\r
 #endif\r
        }\r
        else if (Method == BBSWING)\r
        {\r
-               Final_OFDM_Swing_Index = pDM_Odm->DefaultOfdmIndex + pDM_Odm->Absolute_OFDMSwingIdx[RFPath];\r
-               Final_CCK_Swing_Index = pDM_Odm->DefaultCckIndex + pDM_Odm->Absolute_OFDMSwingIdx[RFPath]; \r
+               Final_OFDM_Swing_Index = pRFCalibrateInfo->DefaultOfdmIndex + pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath];\r
+               Final_CCK_Swing_Index = pRFCalibrateInfo->DefaultCckIndex + pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath]; \r
 \r
                // Adjust BB swing by OFDM IQ matrix\r
                if (Final_OFDM_Swing_Index >= PwrTrackingLimit_OFDM)\r
 \r
                // Adjust BB swing by OFDM IQ matrix\r
                if (Final_OFDM_Swing_Index >= PwrTrackingLimit_OFDM)\r
@@ -361,7 +362,7 @@ ODM_TxPwrTrackSetPwr_8723B(
 \r
                if (Final_CCK_Swing_Index >= CCK_TABLE_SIZE)\r
                        Final_CCK_Swing_Index = CCK_TABLE_SIZE-1;\r
 \r
                if (Final_CCK_Swing_Index >= CCK_TABLE_SIZE)\r
                        Final_CCK_Swing_Index = CCK_TABLE_SIZE-1;\r
-               else if (pDM_Odm->BbSwingIdxCck <= 0)\r
+               else if (pRFCalibrateInfo->BbSwingIdxCck <= 0)\r
                        Final_CCK_Swing_Index = 0;\r
 \r
                setIqkMatrix_8723B(pDM_Odm, Final_OFDM_Swing_Index, RFPath, \r
                        Final_CCK_Swing_Index = 0;\r
 \r
                setIqkMatrix_8723B(pDM_Odm, Final_OFDM_Swing_Index, RFPath, \r
@@ -374,43 +375,43 @@ ODM_TxPwrTrackSetPwr_8723B(
        else if (Method == MIX_MODE)\r
        {\r
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
        else if (Method == MIX_MODE)\r
        {\r
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
-                       ("pDM_Odm->DefaultOfdmIndex=%d,  pDM_Odm->DefaultCCKIndex=%d, pDM_Odm->Absolute_OFDMSwingIdx[RFPath]=%d, RF_Path = %d\n",\r
-                       pDM_Odm->DefaultOfdmIndex, pDM_Odm->DefaultCckIndex, pDM_Odm->Absolute_OFDMSwingIdx[RFPath],RFPath ));\r
+                       ("pRFCalibrateInfo->DefaultOfdmIndex=%d,  pDM_Odm->DefaultCCKIndex=%d, pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath]=%d, RF_Path = %d\n",\r
+                       pRFCalibrateInfo->DefaultOfdmIndex, pRFCalibrateInfo->DefaultCckIndex, pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath], RFPath));\r
 \r
 \r
-               Final_OFDM_Swing_Index = pDM_Odm->DefaultOfdmIndex + pDM_Odm->Absolute_OFDMSwingIdx[RFPath];\r
-               Final_CCK_Swing_Index = pDM_Odm->DefaultCckIndex + pDM_Odm->Absolute_OFDMSwingIdx[RFPath];\r
+               Final_OFDM_Swing_Index = pRFCalibrateInfo->DefaultOfdmIndex + pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath];\r
+               Final_CCK_Swing_Index = pRFCalibrateInfo->DefaultCckIndex + pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath];\r
 \r
                if(Final_OFDM_Swing_Index > PwrTrackingLimit_OFDM )     //BBSwing higher then Limit\r
                {\r
 \r
                if(Final_OFDM_Swing_Index > PwrTrackingLimit_OFDM )     //BBSwing higher then Limit\r
                {\r
-                       pDM_Odm->Remnant_OFDMSwingIdx[RFPath] = Final_OFDM_Swing_Index - PwrTrackingLimit_OFDM;\r
+                       pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath] = Final_OFDM_Swing_Index - PwrTrackingLimit_OFDM;\r
 \r
                        setIqkMatrix_8723B(pDM_Odm, PwrTrackingLimit_OFDM, RFPath, \r
                                pDM_Odm->RFCalibrateInfo.IQKMatrixRegSetting[ChannelMappedIndex].Value[0][0],\r
                                pDM_Odm->RFCalibrateInfo.IQKMatrixRegSetting[ChannelMappedIndex].Value[0][1]);\r
 \r
 \r
                        setIqkMatrix_8723B(pDM_Odm, PwrTrackingLimit_OFDM, RFPath, \r
                                pDM_Odm->RFCalibrateInfo.IQKMatrixRegSetting[ChannelMappedIndex].Value[0][0],\r
                                pDM_Odm->RFCalibrateInfo.IQKMatrixRegSetting[ChannelMappedIndex].Value[0][1]);\r
 \r
-                       pDM_Odm->Modify_TxAGC_Flag_PathA = TRUE;\r
+                       pRFCalibrateInfo->Modify_TxAGC_Flag_PathA = TRUE;\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM );\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7 );\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM );\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7 );\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
-                               ("******Path_A Over BBSwing Limit , PwrTrackingLimit = %d , Remnant TxAGC Value = %d \n", \r
-                               PwrTrackingLimit_OFDM, pDM_Odm->Remnant_OFDMSwingIdx[RFPath]));\r
+                               ("******Path_A Over BBSwing Limit , PwrTrackingLimit = %d , Remnant TxAGC Value = %d\n", \r
+                               PwrTrackingLimit_OFDM, pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath]));\r
                }\r
                else if (Final_OFDM_Swing_Index <= 0)\r
                {\r
                }\r
                else if (Final_OFDM_Swing_Index <= 0)\r
                {\r
-                       pDM_Odm->Remnant_OFDMSwingIdx[RFPath] = Final_OFDM_Swing_Index;\r
+                       pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath] = Final_OFDM_Swing_Index;\r
 \r
                        setIqkMatrix_8723B(pDM_Odm, 0, RFPath, \r
                                pDM_Odm->RFCalibrateInfo.IQKMatrixRegSetting[ChannelMappedIndex].Value[0][0],\r
                                pDM_Odm->RFCalibrateInfo.IQKMatrixRegSetting[ChannelMappedIndex].Value[0][1]);\r
 \r
 \r
                        setIqkMatrix_8723B(pDM_Odm, 0, RFPath, \r
                                pDM_Odm->RFCalibrateInfo.IQKMatrixRegSetting[ChannelMappedIndex].Value[0][0],\r
                                pDM_Odm->RFCalibrateInfo.IQKMatrixRegSetting[ChannelMappedIndex].Value[0][1]);\r
 \r
-                       pDM_Odm->Modify_TxAGC_Flag_PathA = TRUE;\r
+                       pRFCalibrateInfo->Modify_TxAGC_Flag_PathA = TRUE;\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM );\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7 );\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM );\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7 );\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
-                               ("******Path_A Lower then BBSwing lower bound  0 , Remnant TxAGC Value = %d \n", \r
-                               pDM_Odm->Remnant_OFDMSwingIdx[RFPath]));\r
+                               ("******Path_A Lower then BBSwing lower bound  0 , Remnant TxAGC Value = %d\n", \r
+                               pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath]));\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
@@ -419,55 +420,55 @@ ODM_TxPwrTrackSetPwr_8723B(
                                pDM_Odm->RFCalibrateInfo.IQKMatrixRegSetting[ChannelMappedIndex].Value[0][1]);\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
                                pDM_Odm->RFCalibrateInfo.IQKMatrixRegSetting[ChannelMappedIndex].Value[0][1]);\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
-                               ("******Path_A Compensate with BBSwing , Final_OFDM_Swing_Index = %d \n", Final_OFDM_Swing_Index));\r
+                               ("******Path_A Compensate with BBSwing , Final_OFDM_Swing_Index = %d\n", Final_OFDM_Swing_Index));\r
 \r
 \r
-                       if(pDM_Odm->Modify_TxAGC_Flag_PathA)  //If TxAGC has changed, reset TxAGC again\r
+                       if (pRFCalibrateInfo->Modify_TxAGC_Flag_PathA)  /*If TxAGC has changed, reset TxAGC again*/\r
                        {\r
                        {\r
-                               pDM_Odm->Remnant_OFDMSwingIdx[RFPath] = 0;\r
+                               pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath] = 0;\r
                                PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM );\r
                                PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7 );\r
                                PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM );\r
                                PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7 );\r
-                               pDM_Odm->Modify_TxAGC_Flag_PathA = FALSE;\r
+                               pRFCalibrateInfo->Modify_TxAGC_Flag_PathA = FALSE;\r
 \r
                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
 \r
                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
-                                       ("******Path_A pDM_Odm->Modify_TxAGC_Flag = FALSE \n"));\r
+                                       ("******Path_A pDM_Odm->Modify_TxAGC_Flag = FALSE\n"));\r
                        }\r
                }\r
 \r
                if(Final_CCK_Swing_Index > PwrTrackingLimit_CCK)\r
                {\r
                        }\r
                }\r
 \r
                if(Final_CCK_Swing_Index > PwrTrackingLimit_CCK)\r
                {\r
-                       pDM_Odm->Remnant_CCKSwingIdx = Final_CCK_Swing_Index - PwrTrackingLimit_CCK;\r
+                       pRFCalibrateInfo->Remnant_CCKSwingIdx = Final_CCK_Swing_Index - PwrTrackingLimit_CCK;\r
                        setCCKFilterCoefficient(pDM_Odm, PwrTrackingLimit_CCK);\r
                        setCCKFilterCoefficient(pDM_Odm, PwrTrackingLimit_CCK);\r
-                       pDM_Odm->Modify_TxAGC_Flag_PathA_CCK = TRUE;\r
+                       pRFCalibrateInfo->Modify_TxAGC_Flag_PathA_CCK = TRUE;\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK );\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK );\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
-                               ("******Path_A CCK Over Limit , PwrTrackingLimit_CCK = %d , pDM_Odm->Remnant_CCKSwingIdx  = %d \n", PwrTrackingLimit_CCK, pDM_Odm->Remnant_CCKSwingIdx));\r
+                               ("******Path_A CCK Over Limit , PwrTrackingLimit_CCK = %d , pRFCalibrateInfo->Remnant_CCKSwingIdx  = %d\n", PwrTrackingLimit_CCK, pRFCalibrateInfo->Remnant_CCKSwingIdx));\r
                }\r
                else if(Final_CCK_Swing_Index <= 0)       // Lowest CCK Index = 0\r
                {\r
                }\r
                else if(Final_CCK_Swing_Index <= 0)       // Lowest CCK Index = 0\r
                {\r
-                       pDM_Odm->Remnant_CCKSwingIdx = Final_CCK_Swing_Index;\r
+                       pRFCalibrateInfo->Remnant_CCKSwingIdx = Final_CCK_Swing_Index;\r
                        setCCKFilterCoefficient(pDM_Odm, 0);\r
                        setCCKFilterCoefficient(pDM_Odm, 0);\r
-                       pDM_Odm->Modify_TxAGC_Flag_PathA_CCK = TRUE;\r
+                       pRFCalibrateInfo->Modify_TxAGC_Flag_PathA_CCK = TRUE;\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK );\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
                        PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK );\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
-                               ("******Path_A CCK Under Limit , PwrTrackingLimit_CCK = %d , pDM_Odm->Remnant_CCKSwingIdx  = %d \n", 0, pDM_Odm->Remnant_CCKSwingIdx));\r
+                               ("******Path_A CCK Under Limit , PwrTrackingLimit_CCK = %d , pRFCalibrateInfo->Remnant_CCKSwingIdx  = %d\n", 0, pRFCalibrateInfo->Remnant_CCKSwingIdx));\r
                }\r
                else\r
                {\r
                        setCCKFilterCoefficient(pDM_Odm, Final_CCK_Swing_Index);\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
                }\r
                else\r
                {\r
                        setCCKFilterCoefficient(pDM_Odm, Final_CCK_Swing_Index);\r
 \r
                        ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
-                               ("******Path_A CCK Compensate with BBSwing , Final_CCK_Swing_Index = %d \n", Final_CCK_Swing_Index));\r
+                               ("******Path_A CCK Compensate with BBSwing , Final_CCK_Swing_Index = %d\n", Final_CCK_Swing_Index));\r
 \r
 \r
-                       if(pDM_Odm->Modify_TxAGC_Flag_PathA_CCK)  //If TxAGC has changed, reset TxAGC again\r
+                       if (pRFCalibrateInfo->Modify_TxAGC_Flag_PathA_CCK)  /*If TxAGC has changed, reset TxAGC again*/\r
                        {\r
                        {\r
-                               pDM_Odm->Remnant_CCKSwingIdx = 0;\r
+                               pRFCalibrateInfo->Remnant_CCKSwingIdx = 0;\r
                                PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK );\r
                                PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK );\r
-                               pDM_Odm->Modify_TxAGC_Flag_PathA_CCK= FALSE;\r
+                               pRFCalibrateInfo->Modify_TxAGC_Flag_PathA_CCK = FALSE;\r
 \r
                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
 \r
                                ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,\r
-                                       ("******Path_A pDM_Odm->Modify_TxAGC_Flag_CCK = FALSE \n"));\r
+                                       ("******Path_A pDM_Odm->Modify_TxAGC_Flag_CCK = FALSE\n"));\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -662,7 +663,7 @@ phy_PathA_IQK_8723B(
                (((regE9C & 0x03FF0000)>>16) != 0x42))\r
                result |= 0x01;\r
 \r
                (((regE9C & 0x03FF0000)>>16) != 0x42))\r
                result |= 0x01;\r
 \r
-       return result;\r
+       return result;  \r
 \r
 #if 0\r
        if(!(regEAC & BIT27) &&         //if Tx is OK, check whether Rx is OK\r
 \r
 #if 0\r
        if(!(regEAC & BIT27) &&         //if Tx is OK, check whether Rx is OK\r
@@ -1506,7 +1507,7 @@ ODM_CheckPowerStatus(
        //\r
        //      2011/07/19 MH We can not execute tx pwoer tracking/ LLC calibrate or IQK.\r
        //\r
        //\r
        //      2011/07/19 MH We can not execute tx pwoer tracking/ LLC calibrate or IQK.\r
        //\r
-       Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState));        \r
+       rtw_hal_get_hwreg(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState));\r
        if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep || rtState == eRfOff)\r
        {\r
                ODM_RT_TRACE(pDM_Odm,COMP_INIT, DBG_LOUD, ("ODM_CheckPowerStatus Return FALSE, due to %d/%d/%d\n", \r
        if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep || rtState == eRfOff)\r
        {\r
                ODM_RT_TRACE(pDM_Odm,COMP_INIT, DBG_LOUD, ("ODM_CheckPowerStatus Return FALSE, due to %d/%d/%d\n", \r
@@ -2974,14 +2975,14 @@ PHY_IQCalibrate_8723B(
                //#define PATH_S0       1 // RF_PATH_B\r
                //#define PATH_S1       0 // RF_PATH_A\r
 \r
                //#define PATH_S0       1 // RF_PATH_B\r
                //#define PATH_S1       0 // RF_PATH_A\r
 \r
-               path = (RF_Path==0 ? ODM_RF_PATH_A : ODM_RF_PATH_B);\r
+               path = (RF_Path == 0 ? ODM_RF_PATH_A : ODM_RF_PATH_B);\r
 \r
                // Restore TX IQK\r
                for (i = 0; i < 3; ++i) {\r
                        offset = pRFCalibrateInfo->TxIQC_8723B[path][i][0];\r
                        data = pRFCalibrateInfo->TxIQC_8723B[path][i][1];\r
 \r
                // Restore TX IQK\r
                for (i = 0; i < 3; ++i) {\r
                        offset = pRFCalibrateInfo->TxIQC_8723B[path][i][0];\r
                        data = pRFCalibrateInfo->TxIQC_8723B[path][i][1];\r
-                       if ((offset==0) || (i==1 && data==0)) { // 0xc80, 0xc88 ==> index=1\r
-                               DBG_871X("%s =>path:%s Restore TX IQK result failed \n",__FUNCTION__,(path==ODM_RF_PATH_A)?"A":"B");\r
+                       if ((offset == 0) || (i == 1 && data == 0)) {   /* 0xc80, 0xc88 ==> index=1 */\r
+                               DBG_871X("%s =>path:%s Restore TX IQK result failed\n", __func__, (path == ODM_RF_PATH_A) ? "A" : "B");\r
                                bResult = FAIL;\r
                                break;\r
                        }\r
                                bResult = FAIL;\r
                                break;\r
                        }\r
@@ -2993,8 +2994,8 @@ PHY_IQCalibrate_8723B(
                for (i = 0; i < 2; ++i) {\r
                        offset = pRFCalibrateInfo->RxIQC_8723B[path][i][0];\r
                        data = pRFCalibrateInfo->RxIQC_8723B[path][i][1];\r
                for (i = 0; i < 2; ++i) {\r
                        offset = pRFCalibrateInfo->RxIQC_8723B[path][i][0];\r
                        data = pRFCalibrateInfo->RxIQC_8723B[path][i][1];\r
-                       if ((offset==0) || (i==0 && data==0)) {         // 0xc14, 0xc1c ==> index=0\r
-                               DBG_871X("%s =>path:%s  Restore RX IQK result failed \n",__FUNCTION__,(path==ODM_RF_PATH_A)?"A":"B");\r
+                       if ((offset == 0) || (i == 0 && data == 0)) {   /* 0xc14, 0xc1c ==> index=0 */\r
+                               DBG_871X("%s =>path:%s  Restore RX IQK result failed\n", __func__, (path == ODM_RF_PATH_A) ? "A" : "B");\r
                                bResult = FAIL;\r
                                break;\r
                        }\r
                                bResult = FAIL;\r
                                break;\r
                        }\r
@@ -3028,7 +3029,6 @@ PHY_IQCalibrate_8723B(
 #endif\r
                goto out;\r
        }\r
 #endif\r
                goto out;\r
        }\r
-\r
        StartTime = ODM_GetCurrentTime( pDM_Odm);\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_CALIBRATION, ODM_DBG_LOUD,  ("IQK:Start!!!\n"));\r
 \r
        StartTime = ODM_GetCurrentTime( pDM_Odm);\r
        ODM_RT_TRACE(pDM_Odm,ODM_COMP_CALIBRATION, ODM_DBG_LOUD,  ("IQK:Start!!!\n"));\r
 \r
@@ -3229,7 +3229,7 @@ PHY_IQCalibrate_8723B(
        }\r
 \r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("IQK finished\n"));\r
        }\r
 \r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("IQK finished\n"));\r
-       ProgressingTime = ODM_GetProgressingTime( pDM_Odm, StartTime);\r
+       ProgressingTime = ODM_GetProgressingTime(pDM_Odm, StartTime);\r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("IQK ProgressingTime = %d\n", ProgressingTime));\r
 \r
 out:\r
        ODM_RT_TRACE(pDM_Odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("IQK ProgressingTime = %d\n", ProgressingTime));\r
 \r
 out:\r
@@ -3342,7 +3342,7 @@ PHY_APCalibrate_8723B(
                return;\r
 \r
 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
                return;\r
 \r
 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
-       if(IS_92C_SERIAL( pHalData->VersionID)){\r
+       if(IS_2T2R( pHalData->VersionID)){\r
                phy_APCalibrate_8723B(pAdapter, delta, TRUE);\r
        }\r
        else\r
                phy_APCalibrate_8723B(pAdapter, delta, TRUE);\r
        }\r
        else\r
@@ -3868,7 +3868,7 @@ PHY_DigitalPredistortion_8723B(
                return;\r
 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
 \r
                return;\r
 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
 \r
-       if(IS_92C_SERIAL( pHalData->VersionID)){\r
+       if(IS_2T2R( pHalData->VersionID)){\r
                phy_DigitalPredistortion8723B(pAdapter, TRUE);\r
        }\r
        else\r
                phy_DigitalPredistortion8723B(pAdapter, TRUE);\r
        }\r
        else\r
index 405310fae7b02014da0e5baefef2621d18fe4adc..583d718da1f93e8851f62861a5e661081b5d2660 100755 (executable)
@@ -34,7 +34,7 @@ void ConfigureTxpowerTrack_8723B(
        );\r
 \r
 void DoIQK_8723B(\r
        );\r
 \r
 void DoIQK_8723B(\r
-       PDM_ODM_T       pDM_Odm,\r
+       PVOID           pDM_VOID,\r
        u1Byte          DeltaThermalIndex,\r
        u1Byte          ThermalValue,   \r
        u1Byte          Threshold\r
        u1Byte          DeltaThermalIndex,\r
        u1Byte          ThermalValue,   \r
        u1Byte          Threshold\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RTL8723B.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RTL8723B.c
deleted file mode 100755 (executable)
index a81a00d..0000000
+++ /dev/null
@@ -1,578 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-\r
-//============================================================\r
-// include files\r
-//============================================================\r
-\r
-#include "../odm_precomp.h"\r
-\r
-#if (RTL8723B_SUPPORT == 1)\r
-\r
-VOID\r
-odm8723b_DigForBtHsMode(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-       )\r
-{\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-       //PFALSE_ALARM_STATISTICS       pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;\r
-       pDIG_T                                  pDM_DigTable=&pDM_Odm->DM_DigTable;\r
-       u1Byte                                  digForBtHs=0;\r
-       //BOOLEAN                                       bChkFA=FALSE;\r
-       \r
-       if(pDM_Odm->bBtConnectProcess)\r
-       {\r
-               if(pDM_Odm->SupportICType&(ODM_RTL8723A))\r
-                       digForBtHs = 0x28;\r
-               else\r
-                       digForBtHs = 0x22;\r
-       }\r
-       else\r
-       {\r
-               //\r
-               // Decide DIG value by BT RSSI.\r
-               //\r
-               digForBtHs = pDM_Odm->btHsRssi+4;\r
-#if 0\r
-               // check if cur dig and pre dig diff is larger than 10\r
-               \r
-               if(digForBtHs > pDM_DigTable->PreIGValue)\r
-               {\r
-                       if( (digForBtHs - pDM_DigTable->PreIGValue) > 10)\r
-                               pDM_DigTable->PreIGValue = digForBtHs;\r
-                       else\r
-                               bChkFA = TRUE;\r
-               }\r
-               else\r
-               {\r
-                       if( (pDM_DigTable->PreIGValue -digForBtHs) > 10)\r
-                               pDM_DigTable->PreIGValue = digForBtHs;\r
-                       else\r
-                               bChkFA = TRUE;\r
-               }\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DigForBtHsMode() : pFalseAlmCnt->Cnt_all=0x%x\n", pFalseAlmCnt->Cnt_all));\r
-               //Current IGI update by FA\r
-               if(bChkFA)\r
-               {                               \r
-                       if(pFalseAlmCnt->Cnt_all > 0x150)\r
-                               pDM_DigTable->PreIGValue += 2;\r
-                       else if (pFalseAlmCnt->Cnt_all > 0x100)\r
-                               pDM_DigTable->PreIGValue += 1;\r
-                       else if(pFalseAlmCnt->Cnt_all < 0x20)\r
-                               pDM_DigTable->PreIGValue -= 1;\r
-\r
-                       digForBtHs = pDM_DigTable->PreIGValue;\r
-               }\r
-       \r
-               if(digForBtHs > (pDM_Odm->btHsRssi+10))\r
-                       digForBtHs = (pDM_Odm->btHsRssi+10);\r
-               else\r
-               {\r
-                       if(pDM_Odm->btHsRssi < 10)\r
-                               digForBtHs = 0x1c;\r
-                       else\r
-                       {\r
-                               if(digForBtHs > (pDM_Odm->btHsRssi -10))\r
-                                       digForBtHs = (pDM_Odm->btHsRssi -10);\r
-                       }\r
-               }\r
-#endif\r
-               //DIG Bound\r
-               if(digForBtHs > 0x3e)\r
-                       digForBtHs = 0x3e;\r
-               if(digForBtHs < 0x1c)\r
-                       digForBtHs = 0x1c;\r
-\r
-               // update Current IGI\r
-               pDM_DigTable->BT30_CurIGI = digForBtHs;\r
-       }\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DigForBtHsMode() : set DigValue=0x%x\n", digForBtHs));\r
-       //ODM_Write_DIG(pDM_Odm, digForBtHs);\r
-#endif\r
-}\r
-\r
-VOID \r
-odm_DIG_8723(\r
-       IN              PDM_ODM_T               pDM_Odm\r
-       )\r
-{\r
-       pDIG_T                                          pDM_DigTable = &pDM_Odm->DM_DigTable;\r
-       PFALSE_ALARM_STATISTICS         pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;\r
-       //pRXHP_T                                               pRX_HP_Table  = &pDM_Odm->DM_RXHP_Table;\r
-       u1Byte                                          DIG_Dynamic_MIN;\r
-       BOOLEAN                                         FirstConnect, FirstDisConnect;\r
-       u1Byte                                          dm_dig_max, dm_dig_min;\r
-       u1Byte                                          CurrentIGI = pDM_DigTable->CurIGValue;\r
-\r
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-// This should be moved out of OUTSRC\r
-       PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
-#if OS_WIN_FROM_WIN7(OS_VERSION)\r
-       if(IsAPModeExist( pAdapter) && pAdapter->bInHctTest)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: Is AP mode or In HCT Test \n"));\r
-               return;\r
-       }\r
-#endif\r
-       \r
-       if(pDM_Odm->bBtHsOperation)\r
-       {\r
-               odm8723b_DigForBtHsMode(pDM_Odm);\r
-       }\r
-\r
-#if 0       // Neil Chen No RX HP for 8723\r
-       if(!(pDM_Odm->SupportICType &(ODM_RTL8723A|ODM_RTL8188E)))\r
-       {\r
-               if(pRX_HP_Table->RXHP_flag == 1)\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: In RXHP Operation \n"));\r
-                       return; \r
-               }\r
-       }\r
-#endif\r
-\r
-\r
-#endif\r
-\r
-#if 0\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-       prtl8192cd_priv priv                    = pDM_Odm->priv;        \r
-       if (!((priv->up_time > 5) && (priv->up_time % 2)) )\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: Not In DIG Operation Period \n"));\r
-               return;\r
-       }\r
-#endif\r
-#endif\r
-\r
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG()==>\n"));\r
-       //if(!(pDM_Odm->SupportAbility & (ODM_BB_DIG|ODM_BB_FA_CNT)))\r
-       if((!(pDM_Odm->SupportAbility&ODM_BB_DIG)) ||(!(pDM_Odm->SupportAbility&ODM_BB_FA_CNT)))\r
-       {\r
-#if 0       \r
-               if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))\r
-               {\r
-                       if ((pDM_Odm->SupportICType == ODM_RTL8192C) && (pDM_Odm->ExtLNA == 1))\r
-                               CurrentIGI = 0x30; //pDM_DigTable->CurIGValue  = 0x30;\r
-                       else\r
-                               CurrentIGI = 0x20; //pDM_DigTable->CurIGValue  = 0x20;\r
-                       ODM_Write_DIG(pDM_Odm, CurrentIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);\r
-               }\r
-#endif         \r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: SupportAbility ODM_BB_DIG or ODM_BB_FA_CNT is disabled\n"));\r
-               return;\r
-       }\r
-               \r
-       if(*(pDM_Odm->pbScanInProcess))\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: In Scan Progress \n"));\r
-               return;\r
-       }\r
-\r
-       //add by Neil Chen to avoid PSD is processing\r
-       if(pDM_Odm->SupportICType&(ODM_RTL8723A|ODM_RTL8723B))\r
-       {\r
-               if(pDM_Odm->bDMInitialGainEnable == FALSE)\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: PSD is Processing \n"));\r
-                       return;\r
-               }\r
-       }\r
-               \r
-       \r
-       DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_0;\r
-       FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == FALSE);\r
-       FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == TRUE);\r
-\r
-       \r
-#if 0  \r
-       if(pDM_Odm->SupportICType & (ODM_RTL8192C) &&(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA)))\r
-       {\r
-               if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))\r
-               {\r
-\r
-                       dm_dig_max = DM_DIG_MAX_AP_HP;\r
-                       dm_dig_min = DM_DIG_MIN_AP_HP;\r
-               }\r
-               else\r
-               {\r
-                       dm_dig_max = DM_DIG_MAX_NIC_HP;\r
-                       dm_dig_min = DM_DIG_MIN_NIC_HP;\r
-               }\r
-               DIG_MaxOfMin = DM_DIG_MAX_AP_HP;\r
-       }\r
-       else\r
-       {\r
-               if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))\r
-               {\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
-#ifdef DFS\r
-                       if (!priv->pmib->dot11DFSEntry.disable_DFS &&\r
-                               (OPMODE & WIFI_AP_STATE) &&\r
-                               (((pDM_Odm->ControlChannel >= 52) &&\r
-                               (pDM_Odm->ControlChannel <= 64)) ||\r
-                               ((pDM_Odm->ControlChannel >= 100) &&\r
-                               (pDM_Odm->ControlChannel <= 140))))\r
-                               dm_dig_max = 0x24;\r
-                       else\r
-#endif\r
-                       if (priv->pmib->dot11RFEntry.tx2path) {\r
-                               if (*(pDM_Odm->pWirelessMode) == ODM_WM_B)//(priv->pmib->dot11BssType.net_work_type == WIRELESS_11B)\r
-                                       dm_dig_max = 0x2A;\r
-                               else\r
-                                       dm_dig_max = 0x32;\r
-                       }\r
-                       else\r
-#endif                         \r
-                       dm_dig_max = DM_DIG_MAX_AP;\r
-                       dm_dig_min = DM_DIG_MIN_AP;\r
-                       DIG_MaxOfMin = dm_dig_max;\r
-               }\r
-               else\r
-               {\r
-                       if((pDM_Odm->SupportICType >= ODM_RTL8188E) && (pDM_Odm->SupportPlatform & (ODM_WIN|ODM_CE)))\r
-                               dm_dig_max = 0x5A;\r
-                       else\r
-                               dm_dig_max = DM_DIG_MAX_NIC;\r
-                       \r
-                       dm_dig_min = DM_DIG_MIN_NIC;\r
-                       DIG_MaxOfMin = DM_DIG_MAX_AP;\r
-               }\r
-       }\r
-#endif   // masked by neilchen to simpily 8723B case\r
-\r
-\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): RSSI=0x%x\n",pDM_Odm->RSSI_Min));\r
-\r
-       if((pDM_Odm->SupportICType >= ODM_RTL8723B) && (pDM_Odm->SupportPlatform & (ODM_WIN|ODM_CE)))\r
-               dm_dig_max = 0x5A;\r
-       else\r
-               dm_dig_max = DM_DIG_MAX_NIC;\r
-\r
-                       \r
-       dm_dig_min = DM_DIG_MIN_NIC_8723;\r
-               \r
-       if(pDM_Odm->bLinked)\r
-       {\r
-               if(pDM_Odm->SupportICType&(ODM_RTL8723B))\r
-               {\r
-                       //BT is Concurrent\r
-                       if(pDM_Odm->bBtLimitedDig)\r
-                       {\r
-                               if(( pDM_Odm->RSSI_Min + 10) > DM_DIG_MAX_NIC )\r
-                                       pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;\r
-                               else if(( pDM_Odm->RSSI_Min + 10) < DM_DIG_MIN_NIC )\r
-                                       pDM_DigTable->rx_gain_range_max = DM_DIG_MIN_NIC;\r
-                               else\r
-                                       pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + 10;\r
-                       \r
-                               if(pDM_Odm->RSSI_Min>10)\r
-                               {\r
-                                       if((pDM_Odm->RSSI_Min - 10) > DM_DIG_MAX_NIC)\r
-                                               DIG_Dynamic_MIN = DM_DIG_MAX_NIC;\r
-                                       else if((pDM_Odm->RSSI_Min - 10) < DM_DIG_MIN_NIC_8723)\r
-                                               DIG_Dynamic_MIN = DM_DIG_MIN_NIC_8723;\r
-                                       else\r
-                                               DIG_Dynamic_MIN = pDM_Odm->RSSI_Min - 10;\r
-                               }\r
-                               else\r
-                                       DIG_Dynamic_MIN=DM_DIG_MIN_NIC_8723;\r
-                       }\r
-                       else\r
-                       {\r
-                               if((pDM_Odm->RSSI_Min + 20) > dm_dig_max )\r
-                                       pDM_DigTable->rx_gain_range_max = dm_dig_max;\r
-                               else if((pDM_Odm->RSSI_Min + 20) < dm_dig_min )\r
-                                       pDM_DigTable->rx_gain_range_max = dm_dig_min;\r
-                               else\r
-                                       pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + 20;\r
-\r
-\r
-                               if(pDM_Odm->RSSI_Min>20)\r
-                               {\r
-                                       if((pDM_Odm->RSSI_Min - 20) > DM_DIG_MAX_NIC)\r
-                                               DIG_Dynamic_MIN = DM_DIG_MAX_NIC;\r
-                                       else if((pDM_Odm->RSSI_Min - 20) < DM_DIG_MIN_NIC_8723)\r
-                                               DIG_Dynamic_MIN = DM_DIG_MIN_NIC_8723;\r
-                                       else\r
-                                               DIG_Dynamic_MIN = pDM_Odm->RSSI_Min -20;\r
-                               }\r
-                               else\r
-                                       DIG_Dynamic_MIN=DM_DIG_MIN_NIC_8723;\r
-                               \r
-                               \r
-                       }\r
-               }\r
-\r
-       }\r
-       else\r
-       {\r
-               pDM_DigTable->rx_gain_range_max = dm_dig_max;\r
-               pDM_DigTable->rx_gain_range_min = DM_DIG_MIN_NIC_8723;\r
-               DIG_Dynamic_MIN = dm_dig_min;\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() : No Link\n"));\r
-       }\r
-       \r
-#if 0\r
-       if(pFalseAlmCnt->Cnt_all > 10000)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("dm_DIG(): Abnornally false alarm case. \n"));\r
-\r
-               if(pDM_DigTable->LargeFAHit != 3)\r
-                       pDM_DigTable->LargeFAHit++;\r
-               if(pDM_DigTable->ForbiddenIGI < CurrentIGI)//if(pDM_DigTable->ForbiddenIGI < pDM_DigTable->CurIGValue)\r
-               {\r
-                       pDM_DigTable->ForbiddenIGI = CurrentIGI;//pDM_DigTable->ForbiddenIGI = pDM_DigTable->CurIGValue;\r
-                       pDM_DigTable->LargeFAHit = 1;\r
-               }\r
-\r
-               if(pDM_DigTable->LargeFAHit >= 3)\r
-               {\r
-                       if((pDM_DigTable->ForbiddenIGI+1) >pDM_DigTable->rx_gain_range_max)\r
-                               pDM_DigTable->rx_gain_range_min = pDM_DigTable->rx_gain_range_max;\r
-                       else\r
-                               pDM_DigTable->rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 1);\r
-                       pDM_DigTable->Recover_cnt = 3600; //3600=2hr\r
-               }\r
-\r
-       }\r
-       else\r
-       {\r
-               //Recovery mechanism for IGI lower bound\r
-               if(pDM_DigTable->Recover_cnt != 0)\r
-                       pDM_DigTable->Recover_cnt --;\r
-               else\r
-               {\r
-                       if(pDM_DigTable->LargeFAHit < 3)\r
-                       {\r
-                               if((pDM_DigTable->ForbiddenIGI -1) < DIG_Dynamic_MIN) //DM_DIG_MIN)\r
-                               {\r
-                                       pDM_DigTable->ForbiddenIGI = DIG_Dynamic_MIN; //DM_DIG_MIN;\r
-                                       pDM_DigTable->rx_gain_range_min = DIG_Dynamic_MIN; //DM_DIG_MIN;\r
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Normal Case: At Lower Bound\n"));\r
-                               }\r
-                               else\r
-                               {\r
-                                       pDM_DigTable->ForbiddenIGI --;\r
-                                       pDM_DigTable->rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 1);\r
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Normal Case: Approach Lower Bound\n"));\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               pDM_DigTable->LargeFAHit = 0;\r
-                       }\r
-               }\r
-       }\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): pDM_DigTable->LargeFAHit=%d\n",pDM_DigTable->LargeFAHit));\r
-#endif\r
-\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG():pDM_DigTable->Recover_cnt=%d\n",pDM_DigTable->Recover_cnt));\r
-\r
-       //1 Adjust initial gain by false alarm\r
-       if(pDM_Odm->bLinked)\r
-       {\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DIG AfterLink\n"));\r
-               if(FirstConnect)\r
-               {\r
-                       CurrentIGI = pDM_Odm->RSSI_Min;\r
-                       ODM_RT_TRACE(pDM_Odm,   ODM_COMP_DIG, ODM_DBG_LOUD, ("DIG: First Connect\n"));\r
-               }\r
-               else\r
-               {\r
-                       //FA for Combo IC--NeilChen--2012--09--28 \r
-                       if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
-                       {\r
-                                       //WLAN and BT ConCurrent\r
-                               if(pDM_Odm->bBtLimitedDig)\r
-                               {\r
-                                       if(pFalseAlmCnt->Cnt_all > 0x500)\r
-                                               CurrentIGI = CurrentIGI + 4;\r
-                                       else if (pFalseAlmCnt->Cnt_all > 0x300)\r
-                                               CurrentIGI = CurrentIGI + 2;\r
-                                       else if(pFalseAlmCnt->Cnt_all <0x150)\r
-                                               CurrentIGI = CurrentIGI -2;\r
-                               }\r
-                               else //Not Concurrent\r
-                               {\r
-                                       if(pFalseAlmCnt->Cnt_all > 0x400)\r
-                                               CurrentIGI = CurrentIGI + 4;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+2;\r
-                                       else if (pFalseAlmCnt->Cnt_all > 0x200)\r
-                                               CurrentIGI = CurrentIGI + 2;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+1;\r
-                                       else if(pFalseAlmCnt->Cnt_all < 0x100)\r
-                                               CurrentIGI = CurrentIGI - 2;//pDM_DigTable->CurIGValue =pDM_DigTable->PreIGValue-1;     \r
-                               }\r
-                       }\r
-               \r
-               }\r
-       }       \r
-       else\r
-       {\r
-                CurrentIGI = pDM_DigTable->rx_gain_range_min;//pDM_DigTable->CurIGValue = pDM_DigTable->rx_gain_range_min\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DIG BeforeLink\n"));\r
-               if(FirstDisConnect)\r
-               {\r
-                               CurrentIGI = pDM_DigTable->rx_gain_range_min;\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): First DisConnect \n"));\r
-               }\r
-               else\r
-               {\r
-                       //2012.03.30 LukeLee: enable DIG before link but with very high thresholds\r
-                    if(pFalseAlmCnt->Cnt_all > 10000)\r
-                               CurrentIGI = CurrentIGI + 4;\r
-                       else if (pFalseAlmCnt->Cnt_all > 8000)\r
-                               CurrentIGI = CurrentIGI + 2;\r
-                       else if(pFalseAlmCnt->Cnt_all < 500)\r
-                               CurrentIGI = CurrentIGI - 2;\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): England DIG \n"));\r
-               }\r
-       }\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DIG End Adjust IGI\n"));\r
-       //1 Check initial gain by upper/lower bound\r
-\r
-       if(CurrentIGI > pDM_DigTable->rx_gain_range_max)\r
-               CurrentIGI = pDM_DigTable->rx_gain_range_max;\r
-       if(CurrentIGI < pDM_DigTable->rx_gain_range_min)\r
-               CurrentIGI = pDM_DigTable->rx_gain_range_min;\r
-       \r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): rx_gain_range_max=0x%x, rx_gain_range_min=0x%x\n", \r
-               pDM_DigTable->rx_gain_range_max, pDM_DigTable->rx_gain_range_min));\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): TotalFA=%d\n", pFalseAlmCnt->Cnt_all));\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): CurIGValue=0x%x\n", CurrentIGI));\r
-\r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): RSSI=0x%x\n",pDM_Odm->RSSI_Min));\r
-\r
-       //2 High power RSSI threshold\r
-#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
-{\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pDM_Odm->Adapter);\r
-       //----------------------------------------------------------end for LC Mocca issue\r
-       if((pDM_Odm->SupportICType == ODM_RTL8723B)&& (pHalData->UndecoratedSmoothedPWDB > DM_DIG_HIGH_PWR_THRESHOLD))\r
-       {\r
-               // High power IGI lower bound\r
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): UndecoratedSmoothedPWDB(%#x)\n", pHalData->UndecoratedSmoothedPWDB));\r
-               if(CurrentIGI < DM_DIG_HIGH_PWR_IGI_LOWER_BOUND)\r
-               {\r
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): CurIGValue(%#x)\n", pDM_DigTable->CurIGValue));\r
-                       //pDM_DigTable->CurIGValue = DM_DIG_HIGH_PWR_IGI_LOWER_BOUND;\r
-                       CurrentIGI=DM_DIG_HIGH_PWR_IGI_LOWER_BOUND;\r
-               }\r
-       }\r
-#if 0  \r
-       if((pDM_Odm->SupportICType & ODM_RTL8723A) && \r
-                       IS_WIRELESS_MODE_G(pAdapter))\r
-               {\r
-                       if(pHalData->UndecoratedSmoothedPWDB > 0x28)\r
-                       {\r
-                               if(CurrentIGI < DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND)\r
-                               {\r
-                                       //pDM_DigTable->CurIGValue = DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND;\r
-                                       CurrentIGI = DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND;\r
-                               }       \r
-                       } \r
-               }       \r
-\r
-#endif  // end if 0 \r
-}\r
-#endif\r
-\r
-       if(pDM_Odm->bBtHsOperation)\r
-       {\r
-               if(pDM_Odm->bLinked)\r
-               {\r
-                       if(pDM_DigTable->BT30_CurIGI > (CurrentIGI))\r
-                       {\r
-                               ODM_Write_DIG(pDM_Odm, CurrentIGI);\r
-                               \r
-                       }       \r
-                       else\r
-                       {\r
-                               ODM_Write_DIG(pDM_Odm, pDM_DigTable->BT30_CurIGI);\r
-                       }\r
-                       pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;\r
-                       pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;\r
-               }\r
-               else\r
-               {\r
-                       if(pDM_Odm->bLinkInProcess)\r
-                       {\r
-                               ODM_Write_DIG(pDM_Odm, 0x1c);\r
-                       }\r
-                       else if(pDM_Odm->bBtConnectProcess)\r
-                       {\r
-                               ODM_Write_DIG(pDM_Odm, 0x28);\r
-                       }\r
-                       else\r
-                       {\r
-                               ODM_Write_DIG(pDM_Odm, pDM_DigTable->BT30_CurIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);   \r
-                       }\r
-               }\r
-       }       \r
-       else            // BT is not using\r
-       {\r
-               ODM_Write_DIG(pDM_Odm, CurrentIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);\r
-               pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;\r
-               pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;\r
-       }       \r
-}\r
-\r
-\r
- s1Byte\r
-odm_CCKRSSI_8723B(\r
-       IN              u1Byte  LNA_idx,\r
-       IN              u1Byte  VGA_idx\r
-       )\r
-{\r
-       s1Byte  rx_pwr_all=0x00;\r
-       switch(LNA_idx)\r
-       {\r
-               //46  53 73 95 201301231630\r
-               // 46 53 77 99 201301241630\r
-               \r
-               case 6: \r
-                        rx_pwr_all = -34 - (2 * VGA_idx);\r
-                       break;\r
-               case 4: \r
-                        rx_pwr_all = -14 - (2 * VGA_idx);\r
-                       break;\r
-               case 1: \r
-                        rx_pwr_all = 6 - (2 * VGA_idx);\r
-                       break;\r
-               case 0: \r
-                        rx_pwr_all = 16 - (2 * VGA_idx);       \r
-                       break;\r
-               default:\r
-                        //rx_pwr_all = -53+(2*(31-VGA_idx));\r
-                        //DbgPrint("wrong LNA index\n");\r
-                       break;\r
-                       \r
-       }\r
-       return  rx_pwr_all;\r
-}\r
-\r
-#endif         // end if RTL8723B \r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RTL8723B.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RTL8723B.h
deleted file mode 100755 (executable)
index dd5da85..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-#ifndef        __ODM_RTL8723B_H__\r
-#define __ODM_RTL8723B_H__\r
-\r
-#define        DM_DIG_MIN_NIC_8723     0x1C\r
-\r
-VOID \r
-odm_DIG_8723(IN                PDM_ODM_T               pDM_Odm);\r
-\r
-s1Byte\r
-odm_CCKRSSI_8723B(\r
-       IN              u1Byte  LNA_idx,\r
-       IN              u1Byte  VGA_idx\r
-       );\r
-\r
-\r
-\r
-#endif\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RegConfig8723B.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RegConfig8723B.c
deleted file mode 100755 (executable)
index fa1c97c..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#include "../odm_precomp.h"
-
-#if (RTL8723B_SUPPORT == 1)  
-
-void
-odm_ConfigRFReg_8723B(
-       IN      PDM_ODM_T                               pDM_Odm,
-       IN      u4Byte                                  Addr,
-       IN      u4Byte                                  Data,
-       IN  ODM_RF_RADIO_PATH_E     RF_PATH,
-       IN      u4Byte                              RegAddr
-       )
-{
-    if(Addr == 0xfe || Addr == 0xffe)
-       {                                         
-               #ifdef CONFIG_LONG_DELAY_ISSUE
-               ODM_sleep_ms(50);
-               #else           
-               ODM_delay_ms(50);
-               #endif
-       }
-       else
-       {
-               ODM_SetRFReg(pDM_Odm, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
-               // Add 1us delay between BB/RF register setting.
-               ODM_delay_us(1);
-
-               //For disable/enable test in high temperature, the B6 value will fail to fill. Suggestion by BB Stanley, 2013.06.25.
-               if(Addr == 0xb6)
-               {
-                       u4Byte getvalue=0;
-                       u1Byte  count =0;
-                       getvalue = ODM_GetRFReg(pDM_Odm, RF_PATH, Addr, bMaskDWord);    
-
-                       ODM_delay_us(1);
-                       
-                       while((getvalue>>8)!=(Data>>8))
-                       {
-                               count++;
-                               ODM_SetRFReg(pDM_Odm, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
-                               ODM_delay_us(1);
-                               getvalue = ODM_GetRFReg(pDM_Odm, RF_PATH, Addr, bMaskDWord);
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [B6] getvalue 0x%x, Data 0x%x, count %d\n", getvalue, Data,count));                       
-                               if(count>5)
-                                       break;
-                       }
-               }
-
-               if(Addr == 0xb2)
-               {
-                       u4Byte getvalue=0;
-                       u1Byte  count =0;
-                       getvalue = ODM_GetRFReg(pDM_Odm, RF_PATH, Addr, bMaskDWord);    
-
-                       ODM_delay_us(1);
-                       
-                       while(getvalue!=Data)
-                       {
-                               count++;
-                               ODM_SetRFReg(pDM_Odm, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
-                               ODM_delay_us(1);
-                               //Do LCK againg 
-                               ODM_SetRFReg(pDM_Odm, RF_PATH, 0x18, bRFRegOffsetMask, 0x0fc07);
-                               ODM_delay_us(1);
-                               getvalue = ODM_GetRFReg(pDM_Odm, RF_PATH, Addr, bMaskDWord);
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [B2] getvalue 0x%x, Data 0x%x, count %d\n", getvalue, Data,count));                       
-                               if(count>5)
-                                       break;
-                       }
-               }                       
-       }       
-}
-
-
-void 
-odm_ConfigRF_RadioA_8723B(
-       IN      PDM_ODM_T                               pDM_Odm,
-       IN      u4Byte                                  Addr,
-       IN      u4Byte                                  Data
-       )
-{
-       u4Byte  content = 0x1000; // RF_Content: radioa_txt
-       u4Byte  maskforPhySet= (u4Byte)(content&0xE000);
-
-    odm_ConfigRFReg_8723B(pDM_Odm, Addr, Data, ODM_RF_PATH_A, Addr|maskforPhySet);
-
-    ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [RadioA] %08X %08X\n", Addr, Data));
-}
-
-void 
-odm_ConfigRF_RadioB_8723B(
-       IN      PDM_ODM_T                               pDM_Odm,
-       IN      u4Byte                                  Addr,
-       IN      u4Byte                                  Data
-       )
-{
-       u4Byte  content = 0x1001; // RF_Content: radiob_txt
-       u4Byte  maskforPhySet= (u4Byte)(content&0xE000);
-
-    odm_ConfigRFReg_8723B(pDM_Odm, Addr, Data, ODM_RF_PATH_B, Addr|maskforPhySet);
-       
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [RadioB] %08X %08X\n", Addr, Data));
-    
-}
-
-void 
-odm_ConfigMAC_8723B(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      u4Byte          Addr,
-       IN      u1Byte          Data
-       )
-{
-       ODM_Write1Byte(pDM_Odm, Addr, Data);
-    ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigMACWithHeaderFile: [MAC_REG] %08X %08X\n", Addr, Data));
-}
-
-void 
-odm_ConfigBB_AGC_8723B(
-    IN         PDM_ODM_T       pDM_Odm,
-    IN         u4Byte          Addr,
-    IN         u4Byte          Bitmask,
-    IN         u4Byte          Data
-    )
-{
-       ODM_SetBBReg(pDM_Odm, Addr, Bitmask, Data);             
-       // Add 1us delay between BB/RF register setting.
-       ODM_delay_us(1);
-
-    ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigBBWithHeaderFile: [AGC_TAB] %08X %08X\n", Addr, Data));
-}
-
-void
-odm_ConfigBB_PHY_REG_PG_8723B(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      u4Byte          Band,
-       IN      u4Byte          RfPath,
-       IN      u4Byte          TxNum,
-    IN         u4Byte          Addr,
-    IN         u4Byte          Bitmask,
-    IN         u4Byte          Data
-    )
-{    
-       if (Addr == 0xfe || Addr == 0xffe)
-               #ifdef CONFIG_LONG_DELAY_ISSUE
-               ODM_sleep_ms(50);
-               #else           
-               ODM_delay_ms(50);
-               #endif
-    else 
-    {
-#if    !(DM_ODM_SUPPORT_TYPE&ODM_AP)
-           PHY_StoreTxPowerByRate(pDM_Odm->Adapter, Band, RfPath, TxNum, Addr, Bitmask, Data);
-#endif
-    }
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X %08X\n", Addr, Bitmask, Data));
-}
-
-void 
-odm_ConfigBB_PHY_8723B(
-       IN      PDM_ODM_T       pDM_Odm,
-    IN         u4Byte          Addr,
-    IN         u4Byte          Bitmask,
-    IN         u4Byte          Data
-    )
-{    
-       if (Addr == 0xfe)
-               #ifdef CONFIG_LONG_DELAY_ISSUE
-               ODM_sleep_ms(50);
-               #else           
-               ODM_delay_ms(50);
-               #endif
-       else if (Addr == 0xfd)
-               ODM_delay_ms(5);
-       else if (Addr == 0xfc)
-               ODM_delay_ms(1);
-       else if (Addr == 0xfb)
-               ODM_delay_us(50);
-       else if (Addr == 0xfa)
-               ODM_delay_us(5);
-       else if (Addr == 0xf9)
-               ODM_delay_us(1);
-       else 
-       {
-               ODM_SetBBReg(pDM_Odm, Addr, Bitmask, Data);             
-       }
-       
-       // Add 1us delay between BB/RF register setting.
-       ODM_delay_us(1);
-    ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X\n", Addr, Data));
-}
-
-void
-odm_ConfigBB_TXPWR_LMT_8723B(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      pu1Byte         Regulation,
-       IN      pu1Byte         Band,
-       IN      pu1Byte         Bandwidth,
-       IN      pu1Byte         RateSection,
-       IN      pu1Byte         RfPath,
-       IN      pu1Byte         Channel,
-       IN      pu1Byte         PowerLimit
-       )
-{      
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
-               PHY_SetTxPowerLimit(pDM_Odm, Regulation, Band,
-                       Bandwidth, RateSection, RfPath, Channel, PowerLimit);
-#elif (DM_ODM_SUPPORT_TYPE & (ODM_CE))
-               PHY_SetTxPowerLimit(pDM_Odm->Adapter, Regulation, Band,
-                       Bandwidth, RateSection, RfPath, Channel, PowerLimit);
-#endif
-}
-
-#endif
-
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RegConfig8723B.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/OUTSRC/rtl8723b/odm_RegConfig8723B.h
deleted file mode 100755 (executable)
index 4f2d388..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __INC_ODM_REGCONFIG_H_8723B
-#define __INC_ODM_REGCONFIG_H_8723B
-#if (RTL8723B_SUPPORT == 1)
-
-void
-odm_ConfigRFReg_8723B(
-       IN      PDM_ODM_T                               pDM_Odm,
-       IN      u4Byte                                  Addr,
-       IN      u4Byte                                  Data,
-       IN  ODM_RF_RADIO_PATH_E     RF_PATH,
-       IN      u4Byte                              RegAddr
-       );
-
-void 
-odm_ConfigRF_RadioA_8723B(
-       IN      PDM_ODM_T                               pDM_Odm,
-       IN      u4Byte                                  Addr,
-       IN      u4Byte                                  Data
-       );
-
-void 
-odm_ConfigRF_RadioB_8723B(
-       IN      PDM_ODM_T                               pDM_Odm,
-       IN      u4Byte                                  Addr,
-       IN      u4Byte                                  Data
-       );
-
-void 
-odm_ConfigMAC_8723B(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      u4Byte          Addr,
-       IN      u1Byte          Data
-       );
-
-void 
-odm_ConfigBB_AGC_8723B(
-    IN         PDM_ODM_T       pDM_Odm,
-    IN         u4Byte          Addr,
-    IN         u4Byte          Bitmask,
-    IN         u4Byte          Data
-    );
-
-void
-odm_ConfigBB_PHY_REG_PG_8723B(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      u4Byte          Band,
-       IN      u4Byte          RfPath,
-       IN      u4Byte          TxNum,
-    IN         u4Byte          Addr,
-    IN         u4Byte          Bitmask,
-    IN         u4Byte          Data
-    );
-
-void 
-odm_ConfigBB_PHY_8723B(
-       IN      PDM_ODM_T       pDM_Odm,
-    IN         u4Byte          Addr,
-    IN         u4Byte          Bitmask,
-    IN         u4Byte          Data
-    );
-
-void
-odm_ConfigBB_TXPWR_LMT_8723B(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      pu1Byte         Regulation,
-       IN      pu1Byte         Band,
-       IN      pu1Byte         Bandwidth,
-       IN      pu1Byte         RateSection,
-       IN      pu1Byte         RfPath,
-       IN      pu1Byte         Channel,
-       IN      pu1Byte         PowerLimit
-    );
-
-#endif
-#endif // end of SUPPORT
-
index f2defeb3381e0ce87e9e151c61dd53ef4b991b19..722184d26bf253fb508a2002e1743d9d4cccb3be 100755 (executable)
@@ -34,26 +34,25 @@ odm_CCKRSSI_8723B(
        )\r
 {\r
        s1Byte  rx_pwr_all=0x00;\r
        )\r
 {\r
        s1Byte  rx_pwr_all=0x00;\r
-       switch(LNA_idx)\r
-       {\r
+       switch (LNA_idx) {\r
                //46  53 73 95 201301231630\r
                // 46 53 77 99 201301241630\r
                \r
                case 6: \r
                //46  53 73 95 201301231630\r
                // 46 53 77 99 201301241630\r
                \r
                case 6: \r
-                        rx_pwr_all = -34 - (2 * VGA_idx);\r
+                       rx_pwr_all = -40 - (2 * VGA_idx);\r
                        break;\r
                case 4: \r
                        break;\r
                case 4: \r
-                        rx_pwr_all = -14 - (2 * VGA_idx);\r
+                       rx_pwr_all = -20 - (2 * VGA_idx);\r
                        break;\r
                case 1: \r
                        break;\r
                case 1: \r
-                        rx_pwr_all = 6 - (2 * VGA_idx);\r
+                       rx_pwr_all = 0 - (2 * VGA_idx);\r
                        break;\r
                case 0: \r
                        break;\r
                case 0: \r
-                        rx_pwr_all = 16 - (2 * VGA_idx);       \r
+                       rx_pwr_all = 10 - (2 * VGA_idx);        \r
                        break;\r
                default:\r
                        break;\r
                default:\r
-                        //rx_pwr_all = -53+(2*(31-VGA_idx));\r
-                        //DbgPrint("wrong LNA index\n");\r
+                       /*rx_pwr_all = -53+(2*(31-VGA_idx));*/\r
+                       /*DbgPrint("wrong LNA index\n");*/\r
                        break;\r
                        \r
        }\r
                        break;\r
                        \r
        }\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/efuse_mask.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/efuse_mask.h
new file mode 100755 (executable)
index 0000000..d5bd81d
--- /dev/null
@@ -0,0 +1,60 @@
+\r
+#if DEV_BUS_TYPE == RT_USB_INTERFACE\r
+\r
+       #if defined(CONFIG_RTL8188E)\r
+       #include "rtl8188e/HalEfuseMask8188E_USB.h"\r
+       #endif\r
+\r
+       #if defined(CONFIG_RTL8812A)\r
+       #include "rtl8812a/HalEfuseMask8812A_USB.h"\r
+       #endif\r
+\r
+       #if defined(CONFIG_RTL8821A)\r
+       #include "rtl8812a/HalEfuseMask8821A_USB.h"\r
+       #endif\r
+\r
+       #if defined(CONFIG_RTL8192E)\r
+       #include "rtl8192e/HalEfuseMask8192E_USB.h"\r
+       #endif\r
+\r
+       #if defined(CONFIG_RTL8723B)\r
+       #include "rtl8723b/HalEfuseMask8723B_USB.h"\r
+       #endif\r
+\r
+       #if defined(CONFIG_RTL8814A)\r
+       #include "rtl8814a/HalEfuseMask8814A_USB.h"\r
+       #endif\r
+\r
+#elif DEV_BUS_TYPE == RT_PCI_INTERFACE\r
+\r
+       #if defined(CONFIG_RTL8188E)\r
+       #include "rtl8188e/HalEfuseMask8188E_PCIE.h"\r
+       #endif\r
+\r
+       #if defined(CONFIG_RTL8812A)\r
+       #include "rtl8812a/HalEfuseMask8812A_PCIE.h"\r
+       #endif\r
+\r
+       #if defined(CONFIG_RTL8821A)\r
+       #include "rtl8812a/HalEfuseMask8821A_PCIE.h"\r
+       #endif\r
+\r
+       #if defined(CONFIG_RTL8192E)\r
+       #include "rtl8192e/HalEfuseMask8192E_PCIE.h"\r
+       #endif\r
+\r
+       #if defined(CONFIG_RTL8723B)\r
+       #include "rtl8723b/HalEfuseMask8723B_PCIE.h"\r
+       #endif\r
+\r
+       #if defined(CONFIG_RTL8814A)\r
+       #include "rtl8814a/HalEfuseMask8814A_PCIE.h"\r
+       #endif\r
+\r
+#elif DEV_BUS_TYPE == RT_SDIO_INTERFACE\r
+\r
+       #if defined(CONFIG_RTL8188E)\r
+       #include "rtl8188e/HalEfuseMask8188E_SDIO.h"\r
+       #endif\r
+\r
+#endif
\ No newline at end of file
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_PCIE.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_PCIE.c
new file mode 100755 (executable)
index 0000000..1ddaeb0
--- /dev/null
@@ -0,0 +1,101 @@
+/****************************************************************************** 
+* 
+* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. 
+* 
+* This program is free software; you can redistribute it and/or modify it 
+* under the terms of version 2 of the GNU General Public License as 
+* published by the Free Software Foundation. 
+* 
+* This program is distributed in the hope that it will be useful, but WITHOUT 
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
+* more details. 
+* 
+* You should have received a copy of the GNU General Public License along with 
+* this program; if not, write to the Free Software Foundation, Inc., 
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 
+* 
+* 
+******************************************************************************/
+
+//#include "Mp_Precomp.h"
+//#include "../odm_precomp.h"
+#include <drv_types.h>
+#include "../../../hal/OUTSRC/phydm_precomp.h"
+#include "HalEfuseMask8723B_PCIE.h"
+
+
+/******************************************************************************
+*                           MPCIE.TXT
+******************************************************************************/
+
+u1Byte Array_MP_8723B_MPCIE[] = { 
+               0xFF,
+               0xF3,
+               0x00,
+               0x0E,
+               0x70,
+               0x00,
+               0x00,
+               0x00,
+               0x00,
+               0x00,
+               0x00,
+               0x07,
+               0xF3,
+               0xFF,
+               0xFF,
+               0xFF,
+               0xFF,
+               0xFF,
+               0xF1,
+               0x00,
+               0x80,
+               0x00,
+               0x00,
+               0x00,
+               0x00,
+               0x00,
+               0x00,
+               0x00,
+               0x00,
+               0x00,
+               0x00,
+               0x00,
+
+};
+
+u2Byte
+EFUSE_GetArrayLen_MP_8723B_MPCIE(VOID)
+{
+       return sizeof(Array_MP_8723B_MPCIE)/sizeof(u1Byte);
+}
+
+VOID
+EFUSE_GetMaskArray_MP_8723B_MPCIE(
+       IN      OUT pu1Byte Array
+       )
+{
+       u2Byte len = EFUSE_GetArrayLen_MP_8723B_MPCIE(), i = 0;
+
+       for (i = 0; i < len; ++i)
+          Array[i] = Array_MP_8723B_MPCIE[i];
+}
+BOOLEAN
+EFUSE_IsAddressMasked_MP_8723B_MPCIE(
+       IN   u2Byte  Offset
+       )
+{
+       int r = Offset/16;
+       int c = (Offset%16) / 2;
+       int result = 0;
+
+       if (c < 4) // Upper double word
+           result = (Array_MP_8723B_MPCIE[r] & (0x10 << c));
+       else
+           result = (Array_MP_8723B_MPCIE[r] & (0x01 << (c-4)));
+
+       return (result > 0) ? 0 : 1;
+}
+
+
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_PCIE.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_PCIE.h
new file mode 100755 (executable)
index 0000000..41d3338
--- /dev/null
@@ -0,0 +1,40 @@
+/****************************************************************************** 
+* 
+* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. 
+* 
+* This program is free software; you can redistribute it and/or modify it 
+* under the terms of version 2 of the GNU General Public License as 
+* published by the Free Software Foundation. 
+* 
+* This program is distributed in the hope that it will be useful, but WITHOUT 
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
+* more details. 
+* 
+* You should have received a copy of the GNU General Public License along with 
+* this program; if not, write to the Free Software Foundation, Inc., 
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 
+* 
+* 
+******************************************************************************/
+
+
+/******************************************************************************
+*                           MPCIE.TXT
+******************************************************************************/
+
+
+u2Byte
+EFUSE_GetArrayLen_MP_8723B_MPCIE(VOID);
+
+VOID
+EFUSE_GetMaskArray_MP_8723B_MPCIE(
+       IN      OUT pu1Byte Array
+);
+
+BOOLEAN
+EFUSE_IsAddressMasked_MP_8723B_MPCIE( // TC: Test Chip, MP: MP Chip
+       IN   u2Byte  Offset
+);
+
+
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_USB.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_USB.c
new file mode 100755 (executable)
index 0000000..687e633
--- /dev/null
@@ -0,0 +1,100 @@
+/****************************************************************************** \r
+* \r
+* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. \r
+* \r
+* This program is free software; you can redistribute it and/or modify it \r
+* under the terms of version 2 of the GNU General Public License as \r
+* published by the Free Software Foundation. \r
+* \r
+* This program is distributed in the hope that it will be useful, but WITHOUT \r
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or \r
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for \r
+* more details. \r
+* \r
+* You should have received a copy of the GNU General Public License along with \r
+* this program; if not, write to the Free Software Foundation, Inc., \r
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA \r
+* \r
+* \r
+******************************************************************************/\r
+\r
+//#include "Mp_Precomp.h"\r
+//#include "../odm_precomp.h"\r
+\r
+#include <drv_types.h>\r
+#include "../../../hal/OUTSRC/phydm_precomp.h"\r
+#include "HalEfuseMask8723B_USB.h"\r
+/******************************************************************************\r
+*                           MUSB.TXT\r
+******************************************************************************/\r
+\r
+u1Byte Array_MP_8723B_MUSB[] = { \r
+               0xFF,\r
+               0xF3,\r
+               0x00,\r
+               0x0E,\r
+               0x70,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x07,\r
+               0xF1,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0xFF,\r
+               0xFF,\r
+               0xFF,\r
+               0xFF,\r
+               0xB0,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+               0x00,\r
+\r
+};\r
+\r
+u2Byte\r
+EFUSE_GetArrayLen_MP_8723B_MUSB(VOID)\r
+{\r
+       return sizeof(Array_MP_8723B_MUSB)/sizeof(u1Byte);\r
+}\r
+\r
+VOID\r
+EFUSE_GetMaskArray_MP_8723B_MUSB(\r
+       IN      OUT pu1Byte Array\r
+       )\r
+{\r
+       u2Byte len = EFUSE_GetArrayLen_MP_8723B_MUSB(), i = 0;\r
+\r
+       for (i = 0; i < len; ++i)\r
+          Array[i] = Array_MP_8723B_MUSB[i];\r
+}\r
+BOOLEAN\r
+EFUSE_IsAddressMasked_MP_8723B_MUSB(\r
+       IN   u2Byte  Offset\r
+       )\r
+{\r
+       int r = Offset/16;\r
+       int c = (Offset%16) / 2;\r
+       int result = 0;\r
+\r
+       if (c < 4) // Upper double word\r
+           result = (Array_MP_8723B_MUSB[r] & (0x10 << c));\r
+       else\r
+           result = (Array_MP_8723B_MUSB[r] & (0x01 << (c-4)));\r
+\r
+       return (result > 0) ? 0 : 1;\r
+}\r
+\r
+\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_USB.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/efuse/rtl8723b/HalEfuseMask8723B_USB.h
new file mode 100755 (executable)
index 0000000..45c2922
--- /dev/null
@@ -0,0 +1,42 @@
+/****************************************************************************** \r
+* \r
+* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. \r
+* \r
+* This program is free software; you can redistribute it and/or modify it \r
+* under the terms of version 2 of the GNU General Public License as \r
+* published by the Free Software Foundation. \r
+* \r
+* This program is distributed in the hope that it will be useful, but WITHOUT \r
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or \r
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for \r
+* more details. \r
+* \r
+* You should have received a copy of the GNU General Public License along with \r
+* this program; if not, write to the Free Software Foundation, Inc., \r
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA \r
+* \r
+* \r
+******************************************************************************/\r
+\r
+\r
+\r
+/******************************************************************************\r
+*                           MUSB.TXT\r
+******************************************************************************/\r
+\r
+\r
+u2Byte\r
+EFUSE_GetArrayLen_MP_8723B_MUSB(VOID);\r
+\r
+VOID\r
+EFUSE_GetMaskArray_MP_8723B_MUSB(\r
+       IN      OUT pu1Byte Array\r
+);\r
+\r
+BOOLEAN\r
+EFUSE_IsAddressMasked_MP_8723B_MUSB( // TC: Test Chip, MP: MP Chip\r
+       IN   u2Byte  Offset\r
+);\r
+\r
+\r
+\r
index 119aaf78ef5e4f03b934f564ba35426c02ce7ac0..f51e45d0dd42754602978239480b601677d74c5a 100755 (executable)
@@ -90,6 +90,27 @@ const char *const GLBtcWifiFreqString[]={
        "5G"
 };
 
        "5G"
 };
 
+const char *const GLBtcIotPeerString[] = {
+       "UNKNOWN",
+       "REALTEK",
+       "REALTEK_92SE",
+       "BROADCOM",
+       "RALINK",
+       "ATHEROS",
+       "CISCO",
+       "MERU", 
+       "MARVELL",
+       "REALTEK_SOFTAP", /* peer is RealTek SOFT_AP, by Bohn, 2009.12.17 */
+       "SELF_SOFTAP", /* Self is SoftAP */
+       "AIRGO",
+       "INTEL", 
+       "RTK_APCLIENT", 
+       "REALTEK_81XX", 
+       "REALTEK_WOW",
+       "REALTEK_JAGUAR_BCUTAP",
+       "REALTEK_JAGUAR_CCUTAP"
+};
+
 #define HALBTCOUTSRC_AGG_CHK_WINDOW_IN_MS      8000
 
 BTC_COEXIST GLBtCoexist;
 #define HALBTCOUTSRC_AGG_CHK_WINDOW_IN_MS      8000
 
 BTC_COEXIST GLBtCoexist;
@@ -99,7 +120,7 @@ u8 GLBtcWiFiInIPS;
 u8 GLBtcWiFiInLPS;
 u8 GLBtcBtCoexAliveRegistered;
 
 u8 GLBtcWiFiInLPS;
 u8 GLBtcBtCoexAliveRegistered;
 
-u32 GLBtcDbgType[BTC_MSG_MAX];
+u32 GLBtcDbgType[COMP_MAX];
 u8 GLBtcDbgBuf[BT_TMP_BUF_SIZE];
 
 typedef struct _btcoexdbginfo
 u8 GLBtcDbgBuf[BT_TMP_BUF_SIZE];
 
 typedef struct _btcoexdbginfo
@@ -163,26 +184,8 @@ static void halbtcoutsrc_DbgInit(void)
 {
        u8      i;
 
 {
        u8      i;
 
-       for (i=0; i<BTC_MSG_MAX; i++)
+       for (i = 0; i < COMP_MAX; i++)
                GLBtcDbgType[i] = 0;
                GLBtcDbgType[i] = 0;
-
-       GLBtcDbgType[BTC_MSG_INTERFACE]                 =       \
-//                     INTF_INIT                                                               |
-//                     INTF_NOTIFY                                                     |
-                       0;
-
-       GLBtcDbgType[BTC_MSG_ALGORITHM]                 =       \
-//                     ALGO_BT_RSSI_STATE                                      |
-//                     ALGO_WIFI_RSSI_STATE                                    |
-//                     ALGO_BT_MONITOR                                         |
-//                     ALGO_TRACE                                                      |
-//                     ALGO_TRACE_FW                                           |
-//                     ALGO_TRACE_FW_DETAIL                            |
-//                     ALGO_TRACE_FW_EXEC                                      |
-//                     ALGO_TRACE_SW                                           |
-//                     ALGO_TRACE_SW_DETAIL                            |
-//                     ALGO_TRACE_SW_EXEC                                      |
-                       0;
 }
 
 static u8 halbtcoutsrc_IsCsrBtCoex(PBTC_COEXIST pBtCoexist)
 }
 
 static u8 halbtcoutsrc_IsCsrBtCoex(PBTC_COEXIST pBtCoexist)
@@ -241,7 +244,7 @@ void halbtcoutsrc_NormalLps(PBTC_COEXIST pBtCoexist)
        PADAPTER padapter;
 
 
        PADAPTER padapter;
 
 
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Normal LPS behavior!!!\n"));
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Normal LPS behavior!!!\n"));
 
        padapter = pBtCoexist->Adapter;
 
 
        padapter = pBtCoexist->Adapter;
 
@@ -362,7 +365,7 @@ void halbtcoutsrc_AggregationCheck(PBTC_COEXIST pBtCoexist)
 
        if (pBtCoexist->btInfo.bRejectAggPkt)
        {
 
        if (pBtCoexist->btInfo.bRejectAggPkt)
        {
-               rtw_btcoex_RejectApAggregatedPacket(padapter, _TRUE);
+               bNeedToAct = _TRUE;
                pBtCoexist->btInfo.bPreRejectAggPkt = pBtCoexist->btInfo.bRejectAggPkt;
        }
        else
                pBtCoexist->btInfo.bPreRejectAggPkt = pBtCoexist->btInfo.bRejectAggPkt;
        }
        else
@@ -389,13 +392,10 @@ void halbtcoutsrc_AggregationCheck(PBTC_COEXIST pBtCoexist)
                        }
                        pBtCoexist->btInfo.preAggBufSize = pBtCoexist->btInfo.aggBufSize;
                }
                        }
                        pBtCoexist->btInfo.preAggBufSize = pBtCoexist->btInfo.aggBufSize;
                }
-
-               if (bNeedToAct)
-               {
-                       rtw_btcoex_RejectApAggregatedPacket(padapter, _TRUE);
-                       rtw_btcoex_RejectApAggregatedPacket(padapter, _FALSE);
-               }
        }
        }
+
+       if (bNeedToAct)
+               rtw_btcoex_rx_ampdu_apply(padapter);
 }
 
 u8 halbtcoutsrc_IsWifiBusy(PADAPTER padapter)
 }
 
 u8 halbtcoutsrc_IsWifiBusy(PADAPTER padapter)
@@ -413,7 +413,7 @@ u8 halbtcoutsrc_IsWifiBusy(PADAPTER padapter)
                        return _TRUE;
        }
 
                        return _TRUE;
        }
 
-#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
+#if defined(CONFIG_CONCURRENT_MODE)
        pmlmepriv = &padapter->pbuddy_adapter->mlmepriv;
 
        if (check_fwstate(pmlmepriv, WIFI_ASOC_STATE) == _TRUE)
        pmlmepriv = &padapter->pbuddy_adapter->mlmepriv;
 
        if (check_fwstate(pmlmepriv, WIFI_ASOC_STATE) == _TRUE)
@@ -513,9 +513,10 @@ u32 halbtcoutsrc_GetBtPatchVer(PBTC_COEXIST pBtCoexist)
        u8 btFwVer = 0x0;
        u8 cnt = 0;
 
        u8 btFwVer = 0x0;
        u8 cnt = 0;
 
-#if 0
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
        if (!pBtCoexist->btInfo.btRealFwVer && cnt<=5)
        {
        if (!pBtCoexist->btInfo.btRealFwVer && cnt<=5)
        {
+#if 0
                if (halbtcoutsrc_IsHwMailboxExist(pBtCoexist))
                {       // mailbox exists, through mailbox
                        if (NDBG_GetBtFwVersion(pBtCoexist->Adapter, &btRealFwVer, &btFwVer))
                if (halbtcoutsrc_IsHwMailboxExist(pBtCoexist))
                {       // mailbox exists, through mailbox
                        if (NDBG_GetBtFwVersion(pBtCoexist->Adapter, &btRealFwVer, &btFwVer))
@@ -530,6 +531,8 @@ u32 halbtcoutsrc_GetBtPatchVer(PBTC_COEXIST pBtCoexist)
                        }
                }
                else    // no mailbox, query bt patch version through stack.
                        }
                }
                else    // no mailbox, query bt patch version through stack.
+#endif
+               // query bt patch version through socket.
                {
                        u1Byte  dataLen=2;
                        u1Byte  buf[4] = {0};
                {
                        u1Byte  dataLen=2;
                        u1Byte  buf[4] = {0};
@@ -539,7 +542,7 @@ u32 halbtcoutsrc_GetBtPatchVer(PBTC_COEXIST pBtCoexist)
                }
                cnt++;
        }
                }
                cnt++;
        }
-#endif
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
        return pBtCoexist->btInfo.btRealFwVer;
 }
 
        return pBtCoexist->btInfo.btRealFwVer;
 }
 
@@ -548,10 +551,9 @@ s32 halbtcoutsrc_GetWifiRssi(PADAPTER padapter)
        PHAL_DATA_TYPE pHalData;
        s32 UndecoratedSmoothedPWDB = 0;
 
        PHAL_DATA_TYPE pHalData;
        s32 UndecoratedSmoothedPWDB = 0;
 
-
        pHalData = GET_HAL_DATA(padapter);
 
        pHalData = GET_HAL_DATA(padapter);
 
-       UndecoratedSmoothedPWDB = pHalData->dmpriv.EntryMinUndecoratedSmoothedPWDB;
+       UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
 
        return UndecoratedSmoothedPWDB;
 }
 
        return UndecoratedSmoothedPWDB;
 }
@@ -774,7 +776,7 @@ u8 halbtcoutsrc_Get(void *pBtcContext, u8 getType, void *pOutBuf)
                        break;
 
                case BTC_GET_U1_MAC_PHY_MODE:
                        break;
 
                case BTC_GET_U1_MAC_PHY_MODE:
-                       *pU1Tmp = BTC_SMSP;
+//                     *pU1Tmp = BTC_SMSP;
 //                     *pU1Tmp = BTC_DMSP;
 //                     *pU1Tmp = BTC_DMDP;
 //                     *pU1Tmp = BTC_MP_UNKNOWN;
 //                     *pU1Tmp = BTC_DMSP;
 //                     *pU1Tmp = BTC_DMDP;
 //                     *pU1Tmp = BTC_MP_UNKNOWN;
@@ -784,7 +786,32 @@ u8 halbtcoutsrc_Get(void *pBtcContext, u8 getType, void *pOutBuf)
                        *pU1Tmp = halbtcoutsrc_GetWifiScanAPNum(padapter);
                        break;
                case BTC_GET_U1_ANT_TYPE:
                        *pU1Tmp = halbtcoutsrc_GetWifiScanAPNum(padapter);
                        break;
                case BTC_GET_U1_ANT_TYPE:
-                       *pU1Tmp = (u1Byte)BTC_ANT_TYPE_0;
+                       switch(pHalData->bt_coexist.btAntisolation)
+                       {
+                               case 0:
+                                       *pU1Tmp = (u1Byte)BTC_ANT_TYPE_0;
+                                       pBtCoexist->boardInfo.antType = (u1Byte)BTC_ANT_TYPE_0;
+                                       break;
+                               case 1:
+                                       *pU1Tmp = (u1Byte)BTC_ANT_TYPE_1;
+                                       pBtCoexist->boardInfo.antType = (u1Byte)BTC_ANT_TYPE_1;
+                                       break;
+                               case 2:
+                                       *pU1Tmp = (u1Byte)BTC_ANT_TYPE_2;
+                                       pBtCoexist->boardInfo.antType = (u1Byte)BTC_ANT_TYPE_2;
+                                       break;
+                               case 3:
+                                       *pU1Tmp = (u1Byte)BTC_ANT_TYPE_3;
+                                       pBtCoexist->boardInfo.antType = (u1Byte)BTC_ANT_TYPE_3;
+                                       break;
+                               case 4:
+                                       *pU1Tmp = (u1Byte)BTC_ANT_TYPE_4;
+                                       pBtCoexist->boardInfo.antType = (u1Byte)BTC_ANT_TYPE_4;
+                                       break;
+                       }
+                       break;
+               case BTC_GET_U1_IOT_PEER:
+                       *pU1Tmp = mlmeext->mlmext_info.assoc_AP_vendor;
                        break;
 
                //=======1Ant===========
                        break;
 
                //=======1Ant===========
@@ -930,27 +957,26 @@ u8 halbtcoutsrc_Set(void *pBtcContext, u8 setType, void *pInBuf)
 
                case BTC_SET_ACT_SEND_MIMO_PS:
                        {
 
                case BTC_SET_ACT_SEND_MIMO_PS:
                        {
-                                u8 newMimoPsMode = 3;
-                                struct mlme_ext_priv   *pmlmeext = &(padapter->mlmeextpriv);
-                               struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
-
-                                // *pU1Tmp = 0 use SM_PS static type 
-                                // *pU1Tmp = 1 disable SM_PS
-                                if(*pU1Tmp==0)
-                                       newMimoPsMode = WLAN_HT_CAP_SM_PS_STATIC;
-                               else if(*pU1Tmp==1)
-                                       newMimoPsMode = WLAN_HT_CAP_SM_PS_DISABLED;
-                                                  
-                               if (check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE) == _TRUE)
-                               {
-                                       //issue_action_SM_PS(padapter, get_my_bssid(&(pmlmeinfo->network)), newMimoPsMode);
-                                        issue_action_SM_PS_wait_ack(padapter, get_my_bssid(&(pmlmeinfo->network)), newMimoPsMode, 3, 1);
+                               u8 newMimoPsMode = 3;
+                               struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+                               struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+
+                               /* *pU1Tmp = 0 use SM_PS static type */
+                               /* *pU1Tmp = 1 disable SM_PS */
+                               if (*pU1Tmp == 0)
+                                       newMimoPsMode = WLAN_HT_CAP_SM_PS_STATIC;
+                               else if (*pU1Tmp == 1)
+                                       newMimoPsMode = WLAN_HT_CAP_SM_PS_DISABLED;
+                                                                                                 
+                               if (check_fwstate(&padapter->mlmepriv , WIFI_ASOC_STATE) == _TRUE) {
+                                       /* issue_action_SM_PS(padapter, get_my_bssid(&(pmlmeinfo->network)), newMimoPsMode); */
+                                       issue_action_SM_PS_wait_ack(padapter , get_my_bssid(&(pmlmeinfo->network)) , newMimoPsMode, 3 , 1);
                                }
                        }
                        break;
 
                case BTC_SET_ACT_CTRL_BT_INFO:
                                }
                        }
                        break;
 
                case BTC_SET_ACT_CTRL_BT_INFO:
-#if 0
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
                        {
                                u8 dataLen = *pU1Tmp;
                                u8 tmpBuf[20];
                        {
                                u8 dataLen = *pU1Tmp;
                                u8 tmpBuf[20];
@@ -958,15 +984,15 @@ u8 halbtcoutsrc_Set(void *pBtcContext, u8 setType, void *pInBuf)
                                {
                                        _rtw_memcpy(tmpBuf, pU1Tmp+1, dataLen);
                                }
                                {
                                        _rtw_memcpy(tmpBuf, pU1Tmp+1, dataLen);
                                }
-//                             BT_SendEventExtBtInfoControl(padapter, dataLen, &tmpBuf[0]);
+                               BT_SendEventExtBtInfoControl(padapter, dataLen, &tmpBuf[0]);
                        }
                        }
-#else
+#else //!CONFIG_BT_COEXIST_SOCKET_TRX
                        ret = _FALSE;
                        ret = _FALSE;
-#endif
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
                        break;
 
                case BTC_SET_ACT_CTRL_BT_COEX:
                        break;
 
                case BTC_SET_ACT_CTRL_BT_COEX:
-#if 0
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
                        {
                                u8 dataLen = *pU1Tmp;
                                u8 tmpBuf[20];
                        {
                                u8 dataLen = *pU1Tmp;
                                u8 tmpBuf[20];
@@ -974,11 +1000,11 @@ u8 halbtcoutsrc_Set(void *pBtcContext, u8 setType, void *pInBuf)
                                {
                                        _rtw_memcpy(tmpBuf, pU1Tmp+1, dataLen);
                                }
                                {
                                        _rtw_memcpy(tmpBuf, pU1Tmp+1, dataLen);
                                }
-//                             BT_SendEventExtBtCoexControl(padapter, _FALSE, dataLen, &tmpBuf[0]);
+                               BT_SendEventExtBtCoexControl(padapter, _FALSE, dataLen, &tmpBuf[0]);
                        }
                        }
-#else
+#else //!CONFIG_BT_COEXIST_SOCKET_TRX
                        ret = _FALSE;
                        ret = _FALSE;
-#endif
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
                        break;
                case BTC_SET_ACT_CTRL_8723B_ANT:
 #if 0
                        break;
                case BTC_SET_ACT_CTRL_8723B_ANT:
 #if 0
@@ -1108,8 +1134,9 @@ void halbtcoutsrc_DisplayCoexStatistics(PBTC_COEXIST pBtCoexist)
                pBtCoexist->statistics.cntScanNotify, pBtCoexist->statistics.cntConnectNotify,
                pBtCoexist->statistics.cntMediaStatusNotify);
        CL_PRINTF(cliBuf);
                pBtCoexist->statistics.cntScanNotify, pBtCoexist->statistics.cntConnectNotify,
                pBtCoexist->statistics.cntMediaStatusNotify);
        CL_PRINTF(cliBuf);
-       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "Special pkt/Bt info", \
-               pBtCoexist->statistics.cntSpecialPacketNotify, pBtCoexist->statistics.cntBtInfoNotify);
+       CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d", "Special pkt/Bt info/ bind", 
+               pBtCoexist->statistics.cntSpecialPacketNotify, pBtCoexist->statistics.cntBtInfoNotify,
+               pBtCoexist->statistics.cntBind);
        CL_PRINTF(cliBuf);
 #endif
 }
        CL_PRINTF(cliBuf);
 #endif
 }
@@ -1165,6 +1192,11 @@ void halbtcoutsrc_DisplayWifiStatus(PBTC_COEXIST pBtCoexist)
                ((wifiLinkStatus&WIFI_P2P_GC_CONNECTED)? 1:0) );
        CL_PRINTF(cliBuf);
 
                ((wifiLinkStatus&WIFI_P2P_GC_CONNECTED)? 1:0) );
        CL_PRINTF(cliBuf);
 
+       if (wifiLinkStatus&WIFI_STA_CONNECTED) {
+               CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "IOT Peer", GLBtcIotPeerString[padapter->mlmeextpriv.mlmext_info.assoc_AP_vendor]);
+               CL_PRINTF(cliBuf);
+       }
+
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_DOT11_CHNL, &wifiChnl);
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_HS_CHNL, &wifiHsChnl);  CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d(%d)", "Dot11 channel / HsChnl(High Speed)", \
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_DOT11_CHNL, &wifiChnl);
        pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_HS_CHNL, &wifiHsChnl);  CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d(%d)", "Dot11 channel / HsChnl(High Speed)", \
@@ -1437,6 +1469,25 @@ void halbtcoutsrc_SetBtReg(void *pBtcContext, u8 RegType, u32 RegAddr, u32 Data)
        }
 }
 
        }
 }
 
+u8 halbtcoutsrc_SetBtAntDetection(void *pBtcContext, u8 txTime, u8 btChnl)
+{
+/* Always return _FALSE since we don't implement this yet */   
+#if 0  
+       PBTC_COEXIST            pBtCoexist = (PBTC_COEXIST)pBtcContext;
+       PADAPTER                        Adapter = pBtCoexist->Adapter;
+       u1Byte                          btCanTx = 0;
+       BOOLEAN                 bStatus = FALSE;
+
+       bStatus = NDBG_SetBtAntDetection(Adapter, txTime, btChnl, &btCanTx);
+       if (bStatus && btCanTx)
+               return _TRUE;
+       else
+               return _FALSE;
+#else
+       return _FALSE;
+#endif
+}
+
 u32 halbtcoutsrc_GetBtReg(void *pBtcContext, u8 RegType, u32 RegAddr)
 {
        /* To be implemented. Always return 0 temporarily */
 u32 halbtcoutsrc_GetBtReg(void *pBtcContext, u8 RegType, u32 RegAddr)
 {
        /* To be implemented. Always return 0 temporarily */
@@ -1458,6 +1509,20 @@ void halbtcoutsrc_FillH2cCmd(void *pBtcContext, u8 elementId, u32 cmdLen, u8 *pC
 //====================================
 //             Extern functions called by other module
 //====================================
 //====================================
 //             Extern functions called by other module
 //====================================
+u8 EXhalbtcoutsrc_IsTfbgaPackageType(PADAPTER padapter)
+{
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+
+#ifdef CONFIG_RTL8723B
+       if ((pHalData->PackageType == PACKAGE_TFBGA79) || (pHalData->PackageType == PACKAGE_TFBGA80)
+               || (pHalData->PackageType == PACKAGE_TFBGA90)) {
+               return _TRUE;
+       }               
+#endif
+
+       return _FALSE;
+}
+
 u8 EXhalbtcoutsrc_BindBtCoexWithAdapter(void *padapter)
 {
        PBTC_COEXIST            pBtCoexist=&GLBtCoexist;
 u8 EXhalbtcoutsrc_BindBtCoexWithAdapter(void *padapter)
 {
        PBTC_COEXIST            pBtCoexist=&GLBtCoexist;
@@ -1488,6 +1553,16 @@ u8 EXhalbtcoutsrc_BindBtCoexWithAdapter(void *padapter)
 #endif
        // set default antenna position to main  port
        pBtCoexist->boardInfo.btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT;    
 #endif
        // set default antenna position to main  port
        pBtCoexist->boardInfo.btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT;    
+
+       pBtCoexist->boardInfo.btdmAntDetFinish = _FALSE;
+       pBtCoexist->boardInfo.btdmAntNumByAntDet = 1;
+
+       pBtCoexist->boardInfo.bTfbgaPackage = EXhalbtcoutsrc_IsTfbgaPackageType((PADAPTER)padapter);
+
+       if (pBtCoexist->boardInfo.bTfbgaPackage)
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Package Type = TFBGA\n"));
+       else
+               RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], Package Type = Non-TFBGA\n"));
        
        return _TRUE;
 }
        
        return _TRUE;
 }
@@ -1534,6 +1609,7 @@ u8 EXhalbtcoutsrc_InitlizeVariables(void *padapter)
        pBtCoexist->fBtcSet = halbtcoutsrc_Set;
        pBtCoexist->fBtcGetBtReg = halbtcoutsrc_GetBtReg;
        pBtCoexist->fBtcSetBtReg = halbtcoutsrc_SetBtReg;
        pBtCoexist->fBtcSet = halbtcoutsrc_Set;
        pBtCoexist->fBtcGetBtReg = halbtcoutsrc_GetBtReg;
        pBtCoexist->fBtcSetBtReg = halbtcoutsrc_SetBtReg;
+       pBtCoexist->fBtcSetBtAntDetection = halbtcoutsrc_SetBtAntDetection;
 
        pBtCoexist->cliBuf = &GLBtcDbgBuf[0];
 
 
        pBtCoexist->cliBuf = &GLBtcDbgBuf[0];
 
@@ -1606,21 +1682,6 @@ void EXhalbtcoutsrc_InitHwConfig(PBTC_COEXIST pBtCoexist, u8 bWifiOnly)
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_InitHwConfig(pBtCoexist, bWifiOnly);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_InitHwConfig(pBtCoexist, bWifiOnly);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_InitHwConfig(pBtCoexist, bWifiOnly);
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_InitHwConfig(pBtCoexist, bWifiOnly);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_InitHwConfig(pBtCoexist, bWifiOnly);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -1660,21 +1721,6 @@ void EXhalbtcoutsrc_InitCoexDm(PBTC_COEXIST pBtCoexist)
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_InitCoexDm(pBtCoexist);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_InitCoexDm(pBtCoexist);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_InitCoexDm(pBtCoexist);
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_InitCoexDm(pBtCoexist);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_InitCoexDm(pBtCoexist);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -1734,21 +1780,6 @@ void EXhalbtcoutsrc_IpsNotify(PBTC_COEXIST pBtCoexist, u8 type)
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_IpsNotify(pBtCoexist, ipsType);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_IpsNotify(pBtCoexist, ipsType);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_IpsNotify(pBtCoexist, ipsType);
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_IpsNotify(pBtCoexist, ipsType);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_IpsNotify(pBtCoexist, ipsType);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -1806,21 +1837,6 @@ void EXhalbtcoutsrc_LpsNotify(PBTC_COEXIST pBtCoexist, u8 type)
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_LpsNotify(pBtCoexist, lpsType);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_LpsNotify(pBtCoexist, lpsType);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_LpsNotify(pBtCoexist, lpsType);
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_LpsNotify(pBtCoexist, lpsType);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_LpsNotify(pBtCoexist, lpsType);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -1877,21 +1893,6 @@ void EXhalbtcoutsrc_ScanNotify(PBTC_COEXIST pBtCoexist, u8 type)
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_ScanNotify(pBtCoexist, scanType);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_ScanNotify(pBtCoexist, scanType);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_ScanNotify(pBtCoexist, scanType);
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_ScanNotify(pBtCoexist, scanType);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_ScanNotify(pBtCoexist, scanType);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -1944,21 +1945,6 @@ void EXhalbtcoutsrc_ConnectNotify(PBTC_COEXIST pBtCoexist, u8 action)
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_ConnectNotify(pBtCoexist, assoType);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_ConnectNotify(pBtCoexist, assoType);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_ConnectNotify(pBtCoexist, assoType);
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_ConnectNotify(pBtCoexist, assoType);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_ConnectNotify(pBtCoexist, assoType);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -2012,21 +1998,6 @@ void EXhalbtcoutsrc_MediaStatusNotify(PBTC_COEXIST pBtCoexist, RT_MEDIA_STATUS m
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_MediaStatusNotify(pBtCoexist, mStatus);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_MediaStatusNotify(pBtCoexist, mStatus);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_MediaStatusNotify(pBtCoexist, mStatus);
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_MediaStatusNotify(pBtCoexist, mStatus);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_MediaStatusNotify(pBtCoexist, mStatus);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -2086,21 +2057,6 @@ void EXhalbtcoutsrc_SpecialPacketNotify(PBTC_COEXIST pBtCoexist, u8 pktType)
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_SpecialPacketNotify(pBtCoexist, packetType);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_SpecialPacketNotify(pBtCoexist, packetType);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_SpecialPacketNotify(pBtCoexist, packetType);
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_SpecialPacketNotify(pBtCoexist, packetType);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_SpecialPacketNotify(pBtCoexist, packetType);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -2145,21 +2101,6 @@ void EXhalbtcoutsrc_BtInfoNotify(PBTC_COEXIST pBtCoexist, u8 *tmpBuf, u8 length)
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_BtInfoNotify(pBtCoexist, tmpBuf, length);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_BtInfoNotify(pBtCoexist, tmpBuf, length);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_BtInfoNotify(pBtCoexist, tmpBuf, length);
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_BtInfoNotify(pBtCoexist, tmpBuf, length);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_BtInfoNotify(pBtCoexist, tmpBuf, length);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -2233,11 +2174,6 @@ void EXhalbtcoutsrc_StackOperationNotify(PBTC_COEXIST pBtCoexist, u8 type)
                stackOpType = BTC_STACK_OP_NONE;
        }
 
                stackOpType = BTC_STACK_OP_NONE;
        }
 
-       if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_StackOperationNotify(pBtCoexist, stackOpType);
-       }
 #endif
 }
 
 #endif
 }
 
@@ -2262,23 +2198,6 @@ void EXhalbtcoutsrc_HaltNotify(PBTC_COEXIST pBtCoexist)
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_HaltNotify(pBtCoexist);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_HaltNotify(pBtCoexist);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_HaltNotify(pBtCoexist);
-               else if (pBtCoexist->boardInfo.btdmAntNum == 1)
-                       EXhalbtc8723a1ant_HaltNotify(pBtCoexist);
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_HaltNotify(pBtCoexist);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_HaltNotify(pBtCoexist);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -2405,26 +2324,6 @@ void EXhalbtcoutsrc_Periodical(PBTC_COEXIST pBtCoexist)
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_Periodical(pBtCoexist);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_Periodical(pBtCoexist);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_Periodical(pBtCoexist);
-               else if (pBtCoexist->boardInfo.btdmAntNum == 1)
-               {
-                       if (!halbtcoutsrc_UnderIps(pBtCoexist))
-                               EXhalbtc8723a1ant_Periodical(pBtCoexist);
-               }
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_Periodical(pBtCoexist);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_Periodical(pBtCoexist);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -2501,10 +2400,10 @@ EXhalbtcoutsrc_AntennaDetection(
 
 void EXhalbtcoutsrc_StackUpdateProfileInfo(void)
 {
 
 void EXhalbtcoutsrc_StackUpdateProfileInfo(void)
 {
-#if 0
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
        PBTC_COEXIST pBtCoexist = &GLBtCoexist;
        PBTC_COEXIST pBtCoexist = &GLBtCoexist;
-       PADAPTER padapter = (PADAPTER)GLBtCoexist.padapter;
-       PBT_MGNT pBtMgnt = &padapter->MgntInfo.BtInfo.BtMgnt;
+       PADAPTER padapter = (PADAPTER)GLBtCoexist.Adapter;
+       PBT_MGNT pBtMgnt = &padapter->coex_info.BtMgnt;
        u8 i;
 
        if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
        u8 i;
 
        if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
@@ -2556,7 +2455,7 @@ void EXhalbtcoutsrc_StackUpdateProfileInfo(void)
                        pBtCoexist->stackInfo.bUnknownAclExist = _TRUE;
                }
        }
                        pBtCoexist->stackInfo.bUnknownAclExist = _TRUE;
                }
        }
-#endif
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
 }
 
 void EXhalbtcoutsrc_UpdateMinBtRssi(s8 btRssi)
 }
 
 void EXhalbtcoutsrc_UpdateMinBtRssi(s8 btRssi)
@@ -2684,23 +2583,6 @@ void EXhalbtcoutsrc_DisplayBtCoexInfo(PBTC_COEXIST pBtCoexist)
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_DisplayCoexInfo(pBtCoexist);
        }
                else if (pBtCoexist->boardInfo.btdmAntNum == 1)
                        EXhalbtc8723b1ant_DisplayCoexInfo(pBtCoexist);
        }
-       else if (IS_HARDWARE_TYPE_8723A(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8723a2ant_DisplayCoexInfo(pBtCoexist);
-               else if (pBtCoexist->boardInfo.btdmAntNum == 1)
-                       EXhalbtc8723a1ant_DisplayCoexInfo(pBtCoexist);
-       }
-       else if (IS_HARDWARE_TYPE_8192C(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8188c2ant_DisplayCoexInfo(pBtCoexist);
-       }
-       else if (IS_HARDWARE_TYPE_8192D(pBtCoexist->Adapter))
-       {
-               if (pBtCoexist->boardInfo.btdmAntNum == 2)
-                       EXhalbtc8192d2ant_DisplayCoexInfo(pBtCoexist);
-       }
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
        else if (IS_HARDWARE_TYPE_8192E(pBtCoexist->Adapter))
        {
                if (pBtCoexist->boardInfo.btdmAntNum == 2)
@@ -2719,10 +2601,7 @@ void EXhalbtcoutsrc_DisplayBtCoexInfo(PBTC_COEXIST pBtCoexist)
        halbtcoutsrc_NormalLowPower(pBtCoexist);
 }
 
        halbtcoutsrc_NormalLowPower(pBtCoexist);
 }
 
-VOID
-EXhalbtcoutsrc_DisplayAntIsolation(
-       IN      PBTC_COEXIST            pBtCoexist
-       )
+void EXhalbtcoutsrc_DisplayAntDetection(PBTC_COEXIST pBtCoexist)
 {
        if(!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
                return;
 {
        if(!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
                return;
@@ -2732,7 +2611,7 @@ EXhalbtcoutsrc_DisplayAntIsolation(
        if(IS_HARDWARE_TYPE_8723B(pBtCoexist->Adapter))
        {
                if(pBtCoexist->boardInfo.btdmAntNum == 1)
        if(IS_HARDWARE_TYPE_8723B(pBtCoexist->Adapter))
        {
                if(pBtCoexist->boardInfo.btdmAntNum == 1)
-                       EXhalbtc8723b1ant_DisplayAntIsolation(pBtCoexist);
+                       EXhalbtc8723b1ant_DisplayAntDetection(pBtCoexist);
        }
        
        halbtcoutsrc_NormalLowPower(pBtCoexist);
        }
        
        halbtcoutsrc_NormalLowPower(pBtCoexist);
@@ -2907,15 +2786,6 @@ void hal_btcoex_InitHwConfig(PADAPTER padapter, u8 bWifiOnly)
        if (!hal_btcoex_IsBtExist(padapter))
                return;
 
        if (!hal_btcoex_IsBtExist(padapter))
                return;
 
-       if (IS_HARDWARE_TYPE_8192C(padapter))
-       {
-               halbt_InitHwConfig92C(padapter);
-       }
-       else if(IS_HARDWARE_TYPE_8192D(padapter))
-       {
-               halbt_InitHwConfig92D(padapter);
-       }
-
        EXhalbtcoutsrc_InitHwConfig(&GLBtCoexist, bWifiOnly);
        EXhalbtcoutsrc_InitCoexDm(&GLBtCoexist);
 }
        EXhalbtcoutsrc_InitHwConfig(&GLBtCoexist, bWifiOnly);
        EXhalbtcoutsrc_InitCoexDm(&GLBtCoexist);
 }
@@ -2988,6 +2858,11 @@ void hal_btcoex_Hanlder(PADAPTER padapter)
        EXhalbtcoutsrc_Periodical(&GLBtCoexist);
 }
 
        EXhalbtcoutsrc_Periodical(&GLBtCoexist);
 }
 
+s32 hal_btcoex_IsBTCoexRejectAMPDU(PADAPTER padapter)
+{
+       return (s32)GLBtCoexist.btInfo.bRejectAggPkt;
+}
+
 s32 hal_btcoex_IsBTCoexCtrlAMPDUSize(PADAPTER padapter)
 {
        return (s32)GLBtCoexist.btInfo.bBtCtrlAggBufSize;
 s32 hal_btcoex_IsBTCoexCtrlAMPDUSize(PADAPTER padapter)
 {
        return (s32)GLBtCoexist.btInfo.bBtCtrlAggBufSize;
@@ -3055,22 +2930,23 @@ u8 hal_btcoex_LpsVal(PADAPTER padapter)
 u32 hal_btcoex_GetRaMask(PADAPTER padapter)
 {
        if (!hal_btcoex_IsBtExist(padapter))
 u32 hal_btcoex_GetRaMask(PADAPTER padapter)
 {
        if (!hal_btcoex_IsBtExist(padapter))
-                return 0;
+               return 0;
 
        if (GLBtCoexist.btInfo.bBtDisabled)
 
        if (GLBtCoexist.btInfo.bBtDisabled)
-                return 0;
+               return 0;
 
 
-        // Modify by YiWei , suggest by Cosa and Jenyu
-        // Remove the limit antenna number , because 2 antenna case (ex: 8192eu)also want to get BT coex report rate mask.
-       //if (GLBtCoexist.boardInfo.btdmAntNum != 1)
-        //        return 0;
+               /* Modify by YiWei , suggest by Cosa and Jenyu
+                * Remove the limit antenna number , because 2 antenna case (ex: 8192eu)also want to get BT coex report rate mask.
+                */
+       /*if (GLBtCoexist.boardInfo.btdmAntNum != 1)
+               return 0;*/
 
        return GLBtCoexist.btInfo.raMask;
 }
 
 void hal_btcoex_RecordPwrMode(PADAPTER padapter, u8 *pCmdBuf, u8 cmdLen)
 {
 
        return GLBtCoexist.btInfo.raMask;
 }
 
 void hal_btcoex_RecordPwrMode(PADAPTER padapter, u8 *pCmdBuf, u8 cmdLen)
 {
-       BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write pwrModeCmd=0x%04x%08x\n",
+       RT_TRACE(COMP_COEX, DBG_LOUD, ("[BTCoex], FW write pwrModeCmd=0x%04x%08x\n",
                pCmdBuf[0]<<8|pCmdBuf[1],
                pCmdBuf[2]<<24|pCmdBuf[3]<<16|pCmdBuf[4]<<8|pCmdBuf[5]));
 
                pCmdBuf[0]<<8|pCmdBuf[1],
                pCmdBuf[2]<<24|pCmdBuf[3]<<16|pCmdBuf[4]<<8|pCmdBuf[5]));
 
@@ -3096,7 +2972,7 @@ void hal_btcoex_SetDBG(PADAPTER padapter, u32 *pDbgModule)
        if (NULL == pDbgModule)
                return;
 
        if (NULL == pDbgModule)
                return;
 
-       for (i=0; i<BTC_MSG_MAX; i++)
+       for (i = 0; i < COMP_MAX; i++)
                GLBtcDbgType[i] = pDbgModule[i];
 }
 
                GLBtcDbgType[i] = pDbgModule[i];
 }
 
@@ -3128,14 +3004,14 @@ u32 hal_btcoex_GetDBG(PADAPTER padapter, u8 *pStrBuf, u32 bufSize)
        leftSize -= count;
 
        count = rtw_sprintf(pstr, leftSize,
        leftSize -= count;
 
        count = rtw_sprintf(pstr, leftSize,
-               "INTERFACE / ALGORITHM: 0x%08X / 0x%08X\n\n",
-               GLBtcDbgType[BTC_MSG_INTERFACE],
-               GLBtcDbgType[BTC_MSG_ALGORITHM]);
+               "COMP_COEX: 0x%08X\n\n",
+               GLBtcDbgType[COMP_COEX]);
        if ((count < 0) || (count >= leftSize))
                goto exit;
        pstr += count;
        leftSize -= count;
 
        if ((count < 0) || (count >= leftSize))
                goto exit;
        pstr += count;
        leftSize -= count;
 
+#if 0
        count = rtw_sprintf(pstr, leftSize, "INTERFACE Debug Setting Definition:\n");
        if ((count < 0) || (count >= leftSize))
                goto exit;
        count = rtw_sprintf(pstr, leftSize, "INTERFACE Debug Setting Definition:\n");
        if ((count < 0) || (count >= leftSize))
                goto exit;
@@ -3219,6 +3095,7 @@ u32 hal_btcoex_GetDBG(PADAPTER padapter, u8 *pStrBuf, u32 bufSize)
                goto exit;
        pstr += count;
        leftSize -= count;
                goto exit;
        pstr += count;
        leftSize -= count;
+#endif
 
 exit:
        count = pstr - pStrBuf;
 
 exit:
        count = pstr - pStrBuf;
@@ -3246,27 +3123,61 @@ u8 hal_btcoex_IsBtLinkExist(PADAPTER padapter)
        return _FALSE;
 }
 
        return _FALSE;
 }
 
+void hal_btcoex_SetBtPatchVersion(PADAPTER padapter,u16 btHciVer,u16 btPatchVer)
+{
+       EXhalbtcoutsrc_SetBtPatchVersion(btHciVer,btPatchVer);
+}
+
+void hal_btcoex_SetHciVersion(PADAPTER padapter, u16 hciVersion)
+{
+       EXhalbtcoutsrc_SetHciVersion(hciVersion);
+}
+
+void hal_btcoex_StackUpdateProfileInfo(void)
+{
+       EXhalbtcoutsrc_StackUpdateProfileInfo();
+}
+
 /*
 /*
- * Description:
+ *     Description:
  *     Setting BT coex antenna isolation type .
  *     Setting BT coex antenna isolation type .
- *                         coex mechanisn/ spital stream/ best throughput
- *      anttype = 0  ,  PSTDMA  / 2SS / 0.5T , bad isolation      (<20dB) for 2,3 antenna
- *      anttype = 1  ,  PSTDMA  / 1SS / 0.5T , normal isolaiton (>20dB) for 2 antenna
- *      anttype = 2  ,  TDMA      / 2SS / T      , normal isolaiton (>20dB) for 3 antenna
- *      anttype = 3  ,  no TDMA / 1SS / 0.5T , good isolation    (>40dB) for 2 antenna
- *      anttype = 4  ,  no TDMA / 2SS / T      , good isolation    (>40dB) for 3 antenna
- *    wifi only throughput ~ T
- *    wifi/BT share one antenna with SPDT
+ *     coex mechanisn/ spital stream/ best throughput
+ *     anttype = 0     ,       PSTDMA  /       2SS     /       0.5T    ,       bad isolation , WiFi/BT ANT Distance<15cm , (<20dB) for 2,3 antenna
+ *     anttype = 1     ,       PSTDMA  /       1SS     /       0.5T    ,       normal isolaiton , 50cm>WiFi/BT ANT Distance>15cm , (>20dB) for 2 antenna
+ *     anttype = 2     ,       TDMA    /       2SS     /       T ,             normal isolaiton , 50cm>WiFi/BT ANT Distance>15cm , (>20dB) for 3 antenna
+ *     anttype = 3     ,       no TDMA /       1SS     /       0.5T    ,       good isolation , WiFi/BT ANT Distance >50cm , (>40dB) for 2 antenna
+ *     anttype = 4     ,       no TDMA /       2SS     /       T ,             good isolation , WiFi/BT ANT Distance >50cm , (>40dB) for 3 antenna
+ *     wifi only throughput ~ T
+ *     wifi/BT share one antenna with SPDT
  */
 void hal_btcoex_SetAntIsolationType(PADAPTER padapter, u8 anttype)
 {
  */
 void hal_btcoex_SetAntIsolationType(PADAPTER padapter, u8 anttype)
 {
-        PHAL_DATA_TYPE pHalData;
+               PHAL_DATA_TYPE pHalData;
+               PBTC_COEXIST    pBtCoexist = &GLBtCoexist;
 
 
-        //DBG_871X("####%s , anttype = %d  , %d \n", __FUNCTION__,anttype,__LINE__);
-        pHalData = GET_HAL_DATA(padapter);
+               /*DBG_871X("####%s , anttype = %d  , %d\n" , __func__ , anttype , __LINE__); */
+               pHalData = GET_HAL_DATA(padapter);
 
 
 
 
-        pHalData->bt_coexist.btAntisolation= anttype;
+               pHalData->bt_coexist.btAntisolation = anttype;
+
+               switch (pHalData->bt_coexist.btAntisolation) {
+               case 0:
+                               pBtCoexist->boardInfo.antType = (u1Byte)BTC_ANT_TYPE_0;
+                               break;
+               case 1:
+                               pBtCoexist->boardInfo.antType = (u1Byte)BTC_ANT_TYPE_1;
+                               break;
+               case 2:
+                               pBtCoexist->boardInfo.antType = (u1Byte)BTC_ANT_TYPE_2;
+                               break;
+               case 3:
+                               pBtCoexist->boardInfo.antType = (u1Byte)BTC_ANT_TYPE_3;
+                               break;
+               case 4:
+                               pBtCoexist->boardInfo.antType = (u1Byte)BTC_ANT_TYPE_4;
+                               break;
+               }
 
 }
 
 
 }
 
@@ -3277,108 +3188,89 @@ hal_btcoex_ParseAntIsolationConfigFile(
   char*                        buffer
 )
 {
   char*                        buffer
 )
 {
-        HAL_DATA_TYPE  *pHalData = GET_HAL_DATA(Adapter);
-        u32    i = 0 , j=0;
-        char   *szLine, *ptmp;
-        int    rtStatus = _SUCCESS;
-        char param_value_string[10];
-        u8 param_value;
-        u8 anttype = 4;
-        
-        u8 ant_num=3, ant_distance=50;
-        
-        typedef struct ant_isolation
-        {
-            char *param_name; // antenna isolation config parameter name 
-            u8 *value; // antenna isolation config parameter value
-        }ANT_ISOLATION;
-
-        ANT_ISOLATION ant_isolation_param[]= {
-                                                                                    {"ANT_NUMBER",&ant_num},
-                                                                                    {"ANT_DISTANCE",&ant_distance},
-                                                                                    {NULL,0}
-                                                                           };
-
-
-        
-       //DBG_871X("===>Hal_ParseAntIsolationConfigFile()\n" );
-                    
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
+       u32     i = 0 , j = 0;
+       char    *szLine , *ptmp;
+       int rtStatus = _SUCCESS;
+       char param_value_string[10];
+       u8 param_value;
+       u8 anttype = 4;
+       
+       u8 ant_num = 3 , ant_distance = 50 , rfe_type = 1; 
+       
+       typedef struct ant_isolation {
+               char *param_name;  /* antenna isolation config parameter name */ 
+               u8 *value; /* antenna isolation config parameter value */
+       } ANT_ISOLATION;
+
+       ANT_ISOLATION ant_isolation_param[] = {
+                                                                                               {"ANT_NUMBER" , &ant_num},
+                                                                                               {"ANT_DISTANCE" , &ant_distance},
+                                                                                               {"RFE_TYPE" , &rfe_type},                                                                                               
+                                                                                               {NULL , 0}
+                                                                               };
+
+
+       
+       /* DBG_871X("===>Hal_ParseAntIsolationConfigFile()\n" ); */
+                       
        ptmp = buffer;
        ptmp = buffer;
-       for (szLine = GetLineFromBuffer(ptmp); szLine != NULL; szLine = GetLineFromBuffer(ptmp))
-       {
-               // skip comment 
-               if ( IsCommentString( szLine ) ) {
-                       continue;
-               }         
-
-                //DBG_871X("%s : szLine = %s , strlen(szLine) = %d  \n", __FUNCTION__,szLine,strlen(szLine));
-                for ( j=0 ;ant_isolation_param[j].param_name != NULL ; j++ )
-                {
-                        if ( strstr(szLine,ant_isolation_param[j].param_name)!= NULL )
-                        {
-                                i=0;
-                                while ( i < strlen(szLine) )
-                                {
-                                        if (szLine[i] != '"')
-                                                ++i;
-                                        else
-                                        {
-                                                // skip only has one "
-                                                if( strpbrk(szLine, "\"") == strrchr(szLine, '"'))
-                                                {
-                                                        DBG_871X("Fail to parse parameters , format error!\n");
-                                                        break;
-                                                }
-                                                _rtw_memset( ( PVOID ) param_value_string, 0, 10 );
-                                                if ( ! ParseQualifiedString( szLine, &i, param_value_string, '"' , '"' ) ) {
-                                                        DBG_871X("Fail to parse parameters \n");
-                                                        return _FAIL;
-                                                }
-                                                else
-                                                {
-                                                        GetU1ByteIntegerFromStringInDecimal( param_value_string, ant_isolation_param[j].value );                                              
-                                                 }
-                                                break;
-                                        }
-                                }
-                        }
-                }
-        } 
-
-        // YiWei 20140716 , for BT coex antenna isolation control
-        if ( ant_num==3 && ant_distance>=50)
-        {
-                pHalData->EEPROMBluetoothCoexist = 0;
-                anttype = 4;
-        }
-        else if ( ant_num==2 && ant_distance>=50 ) 
-        {
-                anttype = 3;
-        }
-        else if ( ant_num==3 &&  ant_distance>=15 &&  ant_distance<50  ) 
-        {
-                anttype = 2;
-        }
-        else if ( ant_num==2 && ant_distance>=15 &&  ant_distance<50 ) 
-        {
-                anttype = 1;
-        }
-        else if ( (ant_num==2 && ant_distance<15) ||  (ant_num==3 && ant_distance<15)) 
-        {
-                anttype = 0;
-        } 
-        else
-        {
-                pHalData->EEPROMBluetoothCoexist = 1;
-                anttype = 1;             
-        }
-
-        hal_btcoex_SetAntIsolationType(Adapter, anttype); 
-                                                
-        DBG_871X("%s : ant_num = %d   \n", __FUNCTION__,ant_num);
-        DBG_871X("%s : ant_distance = %d  \n", __FUNCTION__,ant_distance);
-        //DBG_871X("<===Hal_ParseAntIsolationConfigFile()\n");
-        return rtStatus;    
+       for (szLine = GetLineFromBuffer(ptmp) ; szLine != NULL; szLine = GetLineFromBuffer(ptmp)) {
+               /* skip comment */ 
+               if (IsCommentString(szLine))
+                       continue;        
+
+               /* DBG_871X("%s : szLine = %s , strlen(szLine) = %d\n" , __func__ , szLine , strlen(szLine));*/
+               for (j = 0 ; ant_isolation_param[j].param_name != NULL ; j++) {
+                       if (strstr(szLine , ant_isolation_param[j].param_name) != NULL) {
+                               i = 0;
+                               while (i < strlen(szLine)) {
+                                       if (szLine[i] != '"')
+                                               ++i;
+                                       else {
+                                               /* skip only has one " */
+                                               if (strpbrk(szLine , "\"") == strrchr(szLine , '"')) {
+                                                       DBG_871X("Fail to parse parameters , format error!\n");
+                                                       break;
+                                               }
+                                               _rtw_memset((PVOID)param_value_string , 0 , 10);
+                                               if (!ParseQualifiedString(szLine , &i , param_value_string , '"' , '"')) {
+                                                       DBG_871X("Fail to parse parameters\n");
+                                                       return _FAIL;
+                                               } else if (!GetU1ByteIntegerFromStringInDecimal(param_value_string , ant_isolation_param[j].value)) 
+                                                       DBG_871X("Fail to GetU1ByteIntegerFromStringInDecimal\n");
+
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       } 
+
+       /* YiWei 20140716 , for BT coex antenna isolation control */
+       /* rfe_type = 0 was SPDT , rfe_type = 1 was coupler */
+       if (ant_num == 3 && ant_distance >= 50) 
+               anttype = 3;
+       else if (ant_num == 2 && ant_distance >= 50 && rfe_type == 1)
+               anttype = 2;
+       else if (ant_num == 3 && ant_distance >= 15 && ant_distance < 50)
+               anttype = 2;
+       else if (ant_num == 2 && ant_distance >= 15 && ant_distance < 50 && rfe_type == 1)
+               anttype = 2;
+       else if ((ant_num == 2 && ant_distance < 15 && rfe_type == 1) || (ant_num == 3 && ant_distance < 15))
+               anttype = 1;
+       else if (ant_num == 2 && rfe_type == 0)
+               anttype = 0;
+       else 
+               anttype = 0;
+
+       hal_btcoex_SetAntIsolationType(Adapter, anttype); 
+                                               
+       DBG_871X("%s : ant_num = %d\n" , __func__ , ant_num);
+       DBG_871X("%s : ant_distance = %d\n" , __func__ , ant_distance);
+       DBG_871X("%s : rfe_type = %d\n" , __func__ , rfe_type);
+       /* DBG_871X("<===Hal_ParseAntIsolationConfigFile()\n"); */
+       return rtStatus;        
 }
 
 
 }
 
 
@@ -3388,14 +3280,10 @@ hal_btcoex_AntIsolationConfig_ParaFile(
        IN      char*           pFileName
 )
 {
        IN      char*           pFileName
 )
 {
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
-       int     rlen = 0, rtStatus = _FAIL;
-       //char  file_path[1024];
-
-       //if(!(Adapter->registrypriv.load_phy_file & LOAD_RF_TXPWR_LMT_PARA_FILE))
-       //      return rtStatus;
+       HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+       int     rlen = 0 , rtStatus = _FAIL;
 
 
-       _rtw_memset(pHalData->para_file_buf, 0, MAX_PARA_FILE_BUF_LEN);
+       _rtw_memset(pHalData->para_file_buf , 0 , MAX_PARA_FILE_BUF_LEN);
 
 
        rtw_merge_string(file_path, PATH_LENGTH_MAX, rtw_phy_file_path, pFileName);
 
 
        rtw_merge_string(file_path, PATH_LENGTH_MAX, rtw_phy_file_path, pFileName);
@@ -3410,14 +3298,11 @@ hal_btcoex_AntIsolationConfig_ParaFile(
        }
 
 
        }
 
 
-       if(rtStatus == _SUCCESS)
-       {
-               //DBG_871X("%s(): read %s ok\n", __FUNCTION__, pFileName);
-               rtStatus = hal_btcoex_ParseAntIsolationConfigFile( Adapter, pHalData->para_file_buf );
-       }
-       else
-       {
-               DBG_871X("%s(): No File %s, Load from *** Array!\n", __FUNCTION__, pFileName);
+       if (rtStatus == _SUCCESS) {
+               /*DBG_871X("%s(): read %s ok\n", __func__ , pFileName);*/
+               rtStatus = hal_btcoex_ParseAntIsolationConfigFile(Adapter , pHalData->para_file_buf);
+       } else {
+               DBG_871X("%s(): No File %s, Load from *** Array!\n" , __func__ , pFileName);
        }
 
        return rtStatus;
        }
 
        return rtStatus;
index bf5256f0b80c81d09745c056f83f4c4f91bcb08f..5c5b09849beaced80788a2b3bdb01d3db6227556 100755 (executable)
 char   file_path[PATH_LENGTH_MAX];
 #endif
 
 char   file_path[PATH_LENGTH_MAX];
 #endif
 
-u8 rtw_hal_data_init(_adapter *padapter)
-{
-       if(is_primary_adapter(padapter))
-       {
-               padapter->hal_data_sz = sizeof(HAL_DATA_TYPE);
-               padapter->HalData = rtw_zvmalloc(padapter->hal_data_sz);
-               if(padapter->HalData == NULL){
-                       DBG_8192C("cant not alloc memory for HAL DATA \n");
-                       return _FAIL;
-               }
-       }
-       return _SUCCESS;
-}
-
-void rtw_hal_data_deinit(_adapter *padapter)
-{      
-       if(is_primary_adapter(padapter))
-       {
-               if (padapter->HalData) 
-               {
-                       #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
-                       phy_free_filebuf(padapter);                             
-                       #endif
-                       rtw_vmfree(padapter->HalData, padapter->hal_data_sz);
-                       padapter->HalData = NULL;
-                       padapter->hal_data_sz = 0;
-               }       
-       }
-}
-
 void dump_chip_info(HAL_VERSION        ChipVersion)
 {
        int cnt = 0;
 void dump_chip_info(HAL_VERSION        ChipVersion)
 {
        int cnt = 0;
-       u8 buf[128];
+       u8 buf[128]={0};
        
        
-       if(IS_81XXC(ChipVersion)){
-               cnt += sprintf((buf+cnt), "Chip Version Info: %s_", IS_92C_SERIAL(ChipVersion)?"CHIP_8192C":"CHIP_8188C");
-       }
-       else if(IS_92D(ChipVersion)){
-               cnt += sprintf((buf+cnt), "Chip Version Info: CHIP_8192D_");
-       }
-       else if(IS_8723_SERIES(ChipVersion)){
-               cnt += sprintf((buf+cnt), "Chip Version Info: CHIP_8723A_");
-       }
-       else if(IS_8188E(ChipVersion)){
+       if(IS_8188E(ChipVersion)){
                cnt += sprintf((buf+cnt), "Chip Version Info: CHIP_8188E_");
        }
        else if(IS_8812_SERIES(ChipVersion)){
                cnt += sprintf((buf+cnt), "Chip Version Info: CHIP_8188E_");
        }
        else if(IS_8812_SERIES(ChipVersion)){
@@ -98,26 +59,70 @@ void dump_chip_info(HAL_VERSION     ChipVersion)
        else if(IS_CHIP_VENDOR_SMIC(ChipVersion))
                cnt += sprintf((buf+cnt), "%s_","SMIC");                
        
        else if(IS_CHIP_VENDOR_SMIC(ChipVersion))
                cnt += sprintf((buf+cnt), "%s_","SMIC");                
        
-       if(IS_A_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "A_CUT_");
-       else if(IS_B_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "B_CUT_");
-       else if(IS_C_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "C_CUT_");
-       else if(IS_D_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "D_CUT_");
-       else if(IS_E_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "E_CUT_");
-       else if(IS_I_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "I_CUT_");
-       else if(IS_J_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "J_CUT_");
-       else if(IS_K_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "K_CUT_");
-       else cnt += sprintf((buf+cnt), "UNKNOWN_CUT(%d)_", ChipVersion.CUTVersion);
+       if (IS_A_CUT(ChipVersion))
+               cnt += sprintf((buf+cnt), "A_CUT_");
+       else if (IS_B_CUT(ChipVersion))
+               cnt += sprintf((buf+cnt), "B_CUT_");
+       else if (IS_C_CUT(ChipVersion))
+               cnt += sprintf((buf+cnt), "C_CUT_");
+       else if (IS_D_CUT(ChipVersion))
+               cnt += sprintf((buf+cnt), "D_CUT_");
+       else if (IS_E_CUT(ChipVersion))
+               cnt += sprintf((buf+cnt), "E_CUT_");
+       else if (IS_F_CUT(ChipVersion))
+               cnt += sprintf((buf+cnt), "F_CUT_");
+       else if (IS_I_CUT(ChipVersion))
+               cnt += sprintf((buf+cnt), "I_CUT_");
+       else if (IS_J_CUT(ChipVersion))
+               cnt += sprintf((buf+cnt), "J_CUT_");
+       else if (IS_K_CUT(ChipVersion))
+               cnt += sprintf((buf+cnt), "K_CUT_");
+       else
+               cnt += sprintf((buf+cnt), "UNKNOWN_CUT(%d)_", ChipVersion.CUTVersion);
 
        if(IS_1T1R(ChipVersion)) cnt += sprintf((buf+cnt), "1T1R_");
        else if(IS_1T2R(ChipVersion)) cnt += sprintf((buf+cnt), "1T2R_");
        else if(IS_2T2R(ChipVersion)) cnt += sprintf((buf+cnt), "2T2R_");
 
        if(IS_1T1R(ChipVersion)) cnt += sprintf((buf+cnt), "1T1R_");
        else if(IS_1T2R(ChipVersion)) cnt += sprintf((buf+cnt), "1T2R_");
        else if(IS_2T2R(ChipVersion)) cnt += sprintf((buf+cnt), "2T2R_");
+       else if(IS_3T3R(ChipVersion)) cnt += sprintf((buf+cnt), "3T3R_");
+       else if(IS_3T4R(ChipVersion)) cnt += sprintf((buf+cnt), "3T4R_");
+       else if(IS_4T4R(ChipVersion)) cnt += sprintf((buf+cnt), "4T4R_");
        else cnt += sprintf((buf+cnt), "UNKNOWN_RFTYPE(%d)_", ChipVersion.RFType);
 
        cnt += sprintf((buf+cnt), "RomVer(%d)\n", ChipVersion.ROMVer);
 
        DBG_871X("%s", buf);
 }
        else cnt += sprintf((buf+cnt), "UNKNOWN_RFTYPE(%d)_", ChipVersion.RFType);
 
        cnt += sprintf((buf+cnt), "RomVer(%d)\n", ChipVersion.ROMVer);
 
        DBG_871X("%s", buf);
 }
-
+void rtw_hal_config_rftype(PADAPTER  padapter)
+{
+       HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+       
+       if (IS_1T1R(pHalData->VersionID)) {
+               pHalData->rf_type = RF_1T1R;
+               pHalData->NumTotalRFPath = 1;
+       }       
+       else if (IS_2T2R(pHalData->VersionID)) {
+               pHalData->rf_type = RF_2T2R;
+               pHalData->NumTotalRFPath = 2;
+       }
+       else if (IS_1T2R(pHalData->VersionID)) {
+               pHalData->rf_type = RF_1T2R;
+               pHalData->NumTotalRFPath = 2;
+       }
+       else if(IS_3T3R(pHalData->VersionID)) {
+               pHalData->rf_type = RF_3T3R;
+               pHalData->NumTotalRFPath = 3;
+       }       
+       else if(IS_4T4R(pHalData->VersionID)) {
+               pHalData->rf_type = RF_4T4R;
+               pHalData->NumTotalRFPath = 4;
+       }
+       else {
+               pHalData->rf_type = RF_1T1R;
+               pHalData->NumTotalRFPath = 1;
+       }
+       
+       DBG_871X("%s RF_Type is %d TotalTxPath is %d \n", __FUNCTION__, pHalData->rf_type, pHalData->NumTotalRFPath);
+}
 
 #define        EEPROM_CHANNEL_PLAN_BY_HW_MASK  0x80
 
 
 #define        EEPROM_CHANNEL_PLAN_BY_HW_MASK  0x80
 
@@ -627,10 +632,10 @@ Hal_MappingOutPipe(
 
 void hal_init_macaddr(_adapter *adapter)
 {
 
 void hal_init_macaddr(_adapter *adapter)
 {
-       rtw_hal_set_hwreg(adapter, HW_VAR_MAC_ADDR, adapter->eeprompriv.mac_addr);
+       rtw_hal_set_hwreg(adapter, HW_VAR_MAC_ADDR, adapter_mac_addr(adapter));
 #ifdef  CONFIG_CONCURRENT_MODE
        if (adapter->pbuddy_adapter)
 #ifdef  CONFIG_CONCURRENT_MODE
        if (adapter->pbuddy_adapter)
-               rtw_hal_set_hwreg(adapter->pbuddy_adapter, HW_VAR_MAC_ADDR, adapter->pbuddy_adapter->eeprompriv.mac_addr);
+               rtw_hal_set_hwreg(adapter->pbuddy_adapter, HW_VAR_MAC_ADDR, adapter_mac_addr(adapter->pbuddy_adapter));
 #endif
 }
 
 #endif
 }
 
@@ -662,7 +667,7 @@ s32 c2h_evt_read(_adapter *adapter, u8 *buf)
        if (buf == NULL)
                goto exit;
 
        if (buf == NULL)
                goto exit;
 
-#if defined(CONFIG_RTL8192C) || defined(CONFIG_RTL8192D) || defined(CONFIG_RTL8723A) || defined (CONFIG_RTL8188E)
+#if defined (CONFIG_RTL8188E)
 
        trigger = rtw_read8(adapter, REG_C2HEVT_CLEAR);
 
 
        trigger = rtw_read8(adapter, REG_C2HEVT_CLEAR);
 
@@ -689,7 +694,7 @@ s32 c2h_evt_read(_adapter *adapter, u8 *buf)
 
        /* Read the content */
        for (i = 0; i < c2h_evt->plen; i++)
 
        /* Read the content */
        for (i = 0; i < c2h_evt->plen; i++)
-               c2h_evt->payload[i] = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + sizeof(*c2h_evt) + i);
+               c2h_evt->payload[i] = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + 2 + i);
 
        RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, "c2h_evt_read(): Command Content:\n",
                c2h_evt->payload, c2h_evt->plen);
 
        RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, "c2h_evt_read(): Command Content:\n",
                c2h_evt->payload, c2h_evt->plen);
@@ -798,7 +803,7 @@ u8 rtw_get_mgntframe_raid(_adapter *adapter,unsigned char network_type)
 void rtw_hal_update_sta_rate_mask(PADAPTER padapter, struct sta_info *psta)
 {
        u8      i, rf_type, limit;
 void rtw_hal_update_sta_rate_mask(PADAPTER padapter, struct sta_info *psta)
 {
        u8      i, rf_type, limit;
-       u32     tx_ra_bitmap;
+       u64     tx_ra_bitmap;
 
        if(psta == NULL)
        {
 
        if(psta == NULL)
        {
@@ -825,11 +830,14 @@ void rtw_hal_update_sta_rate_mask(PADAPTER padapter, struct sta_info *psta)
 #endif //CONFIG_80211AC_VHT
        {
                //n mode ra_bitmap
 #endif //CONFIG_80211AC_VHT
        {
                //n mode ra_bitmap
-               if(psta->htpriv.ht_option) 
+               if(psta->htpriv.ht_option)
                {
                {
+                       rf_type = RF_1T1R;
                        rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
                        if(rf_type == RF_2T2R)
                                limit=16;// 2R
                        rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
                        if(rf_type == RF_2T2R)
                                limit=16;// 2R
+                       else if(rf_type == RF_3T3R)
+                               limit=24;// 3R
                        else
                                limit=8;//  1R
 
                        else
                                limit=8;//  1R
 
@@ -840,7 +848,8 @@ void rtw_hal_update_sta_rate_mask(PADAPTER padapter, struct sta_info *psta)
                }
        }
 #endif //CONFIG_80211N_HT
                }
        }
 #endif //CONFIG_80211N_HT
-
+       DBG_871X("supp_mcs_set = %02x, %02x, %02x, rf_type=%d, tx_ra_bitmap=%016llx\n"
+       , psta->htpriv.ht_cap.supp_mcs_set[0], psta->htpriv.ht_cap.supp_mcs_set[1], psta->htpriv.ht_cap.supp_mcs_set[2], rf_type, tx_ra_bitmap);
        psta->ra_mask = tx_ra_bitmap;
        psta->init_rate = get_highest_rate_idx(tx_ra_bitmap)&0x3f;
 }
        psta->ra_mask = tx_ra_bitmap;
        psta->init_rate = get_highest_rate_idx(tx_ra_bitmap)&0x3f;
 }
@@ -964,7 +973,7 @@ void hw_var_port_switch(_adapter *adapter)
 
        /* write bcn ctl */
 #ifdef CONFIG_BT_COEXIST
 
        /* write bcn ctl */
 #ifdef CONFIG_BT_COEXIST
-#if defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B)
+#if defined(CONFIG_RTL8723B)
        // always enable port0 beacon function for PSTDMA
        bcn_ctrl_1 |= EN_BCN_FUNCTION;
        // always disable port1 beacon function for PSTDMA
        // always enable port0 beacon function for PSTDMA
        bcn_ctrl_1 |= EN_BCN_FUNCTION;
        // always disable port1 beacon function for PSTDMA
@@ -1061,23 +1070,77 @@ void rtw_hal_set_FwRsvdPage_cmd(PADAPTER padapter, PRSVDPAGE_LOC rsvdpageloc)
        SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(u1H2CRsvdPageParm, rsvdpageloc->LocQosNull);
        SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(u1H2CRsvdPageParm, rsvdpageloc->LocBTQosNull);
 
        SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(u1H2CRsvdPageParm, rsvdpageloc->LocQosNull);
        SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(u1H2CRsvdPageParm, rsvdpageloc->LocBTQosNull);
 
-       if (pHalFunc->fill_h2c_cmd != NULL) {
-               ret = pHalFunc->fill_h2c_cmd(padapter,
+       ret = rtw_hal_fill_h2c_cmd(padapter,
                                H2C_RSVD_PAGE,
                                H2C_RSVDPAGE_LOC_LEN,
                                u1H2CRsvdPageParm);
                                H2C_RSVD_PAGE,
                                H2C_RSVDPAGE_LOC_LEN,
                                u1H2CRsvdPageParm);
+
+}
+
+void rtw_hal_set_ap_wow_rsvdpage_cmd(PADAPTER padapter, PRSVDPAGE_LOC rsvdpageloc)
+{
+       struct  pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+       struct  mlme_priv *pmlmepriv = &padapter->mlmepriv;
+       struct  hal_ops *pHalFunc = &padapter->HalFunc;
+       u8      res = 0, count = 0, header = 0;
+       u8 rsvdparm[H2C_AOAC_RSVDPAGE_LOC_LEN] = {0};
+
+       header = rtw_read8(padapter, REG_BCNQ_BDNY);
+
+       DBG_871X("%s: beacon: %d, probeRsp: %d, header:0x%02x\n", __func__,
+                       rsvdpageloc->LocApOffloadBCN,
+                       rsvdpageloc->LocProbeRsp,
+                       header);
+
+       SET_H2CCMD_AP_WOWLAN_RSVDPAGE_LOC_BCN(rsvdparm,
+                       rsvdpageloc->LocApOffloadBCN + header);
+
+       if (pHalFunc->fill_h2c_cmd != NULL) {
+               res = pHalFunc->fill_h2c_cmd(padapter,
+                               H2C_BCN_RSVDPAGE,
+                               H2C_BCN_RSVDPAGE_LEN,
+                               rsvdparm);
        } else {
                DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
        } else {
                DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               ret = _FAIL;
+               res = _FAIL;
+       }
+
+       rtw_msleep_os(10);
+
+       _rtw_memset(&rsvdparm, 0, sizeof(rsvdparm));
+
+       SET_H2CCMD_AP_WOWLAN_RSVDPAGE_LOC_ProbeRsp(
+                       rsvdparm,
+                       rsvdpageloc->LocProbeRsp + header);
+
+       if (pHalFunc->fill_h2c_cmd != NULL) {
+               res = pHalFunc->fill_h2c_cmd(padapter,
+                               H2C_PROBERSP_RSVDPAGE,
+                               H2C_PROBERSP_RSVDPAGE_LEN,
+                               rsvdparm);
+       } else {
+               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
+               res = _FAIL;
        }
        }
+
+       rtw_msleep_os(10);
 }
 
 #ifdef CONFIG_GPIO_WAKEUP
 }
 
 #ifdef CONFIG_GPIO_WAKEUP
-static void rtw_hal_set_output_gpio(_adapter* padapter, u8 index, u8 outputval)
+/*
+ * Switch GPIO_13, GPIO_14 to wlan control, or pull GPIO_13,14 MUST fail.
+ * It happended at 8723B/8192E/8821A. New IC will check multi function GPIO,
+ * and implement HAL function.
+ */
+static void rtw_hal_switch_gpio_wl_ctrl(_adapter* padapter, u8 index, u8 enable)
 {
 {
-       u8 val8;
+       if (index !=13 && index != 14) return;
 
 
+       rtw_hal_set_hwreg(padapter, HW_SET_GPIO_WL_CTRL, (u8 *)(&enable));
+}
 
 
+static void rtw_hal_set_output_gpio(_adapter* padapter, u8 index, u8 outputval)
+{
        if ( index <= 7 ) {
                /* config GPIO mode */
                rtw_write8(padapter, REG_GPIO_PIN_CTRL + 3,
        if ( index <= 7 ) {
                /* config GPIO mode */
                rtw_write8(padapter, REG_GPIO_PIN_CTRL + 3,
@@ -1097,23 +1160,11 @@ static void rtw_hal_set_output_gpio(_adapter* padapter, u8 index, u8 outputval)
                        rtw_write8(padapter, REG_GPIO_PIN_CTRL + 1,
                                        rtw_read8(padapter, REG_GPIO_PIN_CTRL + 1) & ~BIT(index));
                }
                        rtw_write8(padapter, REG_GPIO_PIN_CTRL + 1,
                                        rtw_read8(padapter, REG_GPIO_PIN_CTRL + 1) & ~BIT(index));
                }
-       } else if (index <= 15) {
+       } else if (index <= 15){
                /* 88C Series: */
                /* index: 11~8 transform to 3~0 */
                /* 8723 Series: */
                /* index: 12~8 transform to 4~0 */
                /* 88C Series: */
                /* index: 11~8 transform to 3~0 */
                /* 8723 Series: */
                /* index: 12~8 transform to 4~0 */
-#ifdef CONFIG_RTL8723B
-               if ((index == 13) || (index == 14)) {
-                       // Set BIT_GPIO13_14_WL_CTRL_EN to 0
-                       val8 = rtw_read8(padapter, 0x4e);
-                       if (val8 & BIT(6)) {
-                               val8 &= ~BIT(6);
-                               rtw_write8(padapter, 0x4e, val8);
-                               DBG_871X("%s: set GPIO%d to WL control, 0x4E=0x%02X\n",
-                                       __FUNCTION__, index, rtw_read8(padapter, 0x4e));
-                       }
-               }
-#endif // CONFIG_RTL8723B
 
                index -= 8;
 
 
                index -= 8;
 
@@ -1136,26 +1187,10 @@ static void rtw_hal_set_output_gpio(_adapter* padapter, u8 index, u8 outputval)
                                        rtw_read8(padapter, REG_GPIO_PIN_CTRL_2 + 1) & ~BIT(index));
                }
        } else {
                                        rtw_read8(padapter, REG_GPIO_PIN_CTRL_2 + 1) & ~BIT(index));
                }
        } else {
-               DBG_871X("%s: invalid GPIO%d=%d\n", __FUNCTION__, index, outputval);
+               DBG_871X("%s: invalid GPIO%d=%d\n",
+                               __FUNCTION__, index, outputval);
        }
 }
        }
 }
-
-/*
- * Set GPIO high/low under init and
- * fw will trigger Low/High Pulse when need to wake up host
- */
-void rtw_clear_hostwakeupgpio(PADAPTER padapter)
-{
-       u8 high = 0;
-
-
-#ifdef CONFIG_GPIO_WAKEUP_LOW_ACTIVE
-       high = 1;
-#endif // CONFIG_GPIO_WAKEUP_LOW_ACTIVE
-       DBG_871X("%s: Set GPIO%d to %s for wake\n",
-               __FUNCTION__, WAKEUP_GPIO_IDX, high?"high":"low");
-       rtw_hal_set_output_gpio(padapter, WAKEUP_GPIO_IDX, high);
-}
 #endif
 
 void rtw_hal_set_FwAoacRsvdPage_cmd(PADAPTER padapter, PRSVDPAGE_LOC rsvdpageloc)
 #endif
 
 void rtw_hal_set_FwAoacRsvdPage_cmd(PADAPTER padapter, PRSVDPAGE_LOC rsvdpageloc)
@@ -1182,15 +1217,10 @@ void rtw_hal_set_FwAoacRsvdPage_cmd(PADAPTER padapter, PRSVDPAGE_LOC rsvdpageloc
 #ifdef CONFIG_GTK_OL
                SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(u1H2CAoacRsvdPageParm, rsvdpageloc->LocGTKEXTMEM);
 #endif // CONFIG_GTK_OL
 #ifdef CONFIG_GTK_OL
                SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(u1H2CAoacRsvdPageParm, rsvdpageloc->LocGTKEXTMEM);
 #endif // CONFIG_GTK_OL
-               if (pHalFunc->fill_h2c_cmd != NULL) {
-                       ret = pHalFunc->fill_h2c_cmd(padapter,
+               ret = rtw_hal_fill_h2c_cmd(padapter,
                                        H2C_AOAC_RSVD_PAGE,
                                        H2C_AOAC_RSVDPAGE_LOC_LEN,
                                        u1H2CAoacRsvdPageParm);
                                        H2C_AOAC_RSVD_PAGE,
                                        H2C_AOAC_RSVDPAGE_LOC_LEN,
                                        u1H2CAoacRsvdPageParm);
-               } else {
-                       DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-                       ret = _FAIL;
-               }
        }
 #ifdef CONFIG_PNO_SUPPORT
        else
        }
 #ifdef CONFIG_PNO_SUPPORT
        else
@@ -1202,15 +1232,10 @@ void rtw_hal_set_FwAoacRsvdPage_cmd(PADAPTER padapter, PRSVDPAGE_LOC rsvdpageloc
                                        sizeof(u1H2CAoacRsvdPageParm));
                        SET_H2CCMD_AOAC_RSVDPAGE_LOC_NLO_INFO(u1H2CAoacRsvdPageParm,
                                        rsvdpageloc->LocPNOInfo);
                                        sizeof(u1H2CAoacRsvdPageParm));
                        SET_H2CCMD_AOAC_RSVDPAGE_LOC_NLO_INFO(u1H2CAoacRsvdPageParm,
                                        rsvdpageloc->LocPNOInfo);
-                       if (pHalFunc->fill_h2c_cmd != NULL) {
-                               ret = pHalFunc->fill_h2c_cmd(padapter,
+                       ret = rtw_hal_fill_h2c_cmd(padapter,
                                                H2C_AOAC_RSVDPAGE3,
                                                H2C_AOAC_RSVDPAGE_LOC_LEN,
                                                u1H2CAoacRsvdPageParm);
                                                H2C_AOAC_RSVDPAGE3,
                                                H2C_AOAC_RSVDPAGE_LOC_LEN,
                                                u1H2CAoacRsvdPageParm);
-                       } else {
-                               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-                               ret = _FAIL;
-                       }
                }
        }
 #endif //CONFIG_PNO_SUPPORT
                }
        }
 #endif //CONFIG_PNO_SUPPORT
@@ -1312,132 +1337,6 @@ static void rtw_hal_enable_tx_report(_adapter* adapter)
        DBG_871X("enable TX_RPT:0x%02x\n", rtw_read8(adapter, REG_TX_RPT_CTRL));
 }
 
        DBG_871X("enable TX_RPT:0x%02x\n", rtw_read8(adapter, REG_TX_RPT_CTRL));
 }
 
-void rtw_hal_fill_fake_txdesc(_adapter* padapter, u8* pDesc, u32 BufferLen,
-               u8 IsPsPoll, u8 IsBTQosNull, u8 bDataFrame)
-{
-
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct hal_ops *pHalFunc = &padapter->HalFunc;
-       struct tx_desc *ptxdesc;
-
-       // Clear all status
-       _rtw_memset(pDesc, 0, TXDESC_SIZE);
-
-       if (TXDESC_SIZE == 32) {
-               ptxdesc = (struct tx_desc*)pDesc;
-               //offset 0
-               //own, bFirstSeg, bLastSeg;
-               ptxdesc->txdw0 |=
-                       cpu_to_le32( BIT(31) | BIT(27)| BIT(26));
-
-               //32 bytes for TX Desc
-               ptxdesc->txdw0 |=
-                       cpu_to_le32(((TXDESC_SIZE + 0) << 16)&0x00ff0000);
-
-               // Buffer size + command header
-               ptxdesc->txdw0 |=
-                       cpu_to_le32(BufferLen&0x0000ffff);
-
-               //offset 4
-               // Fixed queue of Mgnt queue
-               ptxdesc->txdw1 |= cpu_to_le32((QSLT_MGNT<< 8)&0x00001f00);
-
-               //Set NAVUSEHDR to prevent Ps-poll AId filed to be changed to error vlaue by Hw.
-               if (IsPsPoll) {
-                       ptxdesc->txdw1 |= cpu_to_le32(BIT(20));
-               } else {
-                       // Hw set sequence number
-                       ptxdesc->txdw4 |= cpu_to_le32(BIT(7));
-                       //set bit3 to 1. Suugested by TimChen. 2009.12.29.
-                       ptxdesc->txdw3 |= cpu_to_le32((8 <<28));
-               }
-
-               if (_TRUE == IsBTQosNull) {
-                       ptxdesc->txdw2 |= cpu_to_le32(BIT(23)); // BT NULL
-               }
-
-               //offset 16
-               //driver uses rate
-               ptxdesc->txdw4 |= cpu_to_le32(BIT(8));
-
-       } else if (TXDESC_SIZE == 40) {
-               SET_TX_DESC_FIRST_SEG(pDesc, 1); //bFirstSeg;
-               SET_TX_DESC_LAST_SEG(pDesc, 1); //bLastSeg;
-
-               SET_TX_DESC_OFFSET(pDesc, TXDESC_SIZE);
-
-               SET_TX_DESC_PKT_SIZE(pDesc, BufferLen); // Buffer size + command header
-
-               if (pmlmeext->cur_wireless_mode & WIRELESS_11B) {
-                       SET_TX_DESC_RATE_ID(pDesc, RATR_INX_WIRELESS_B);
-               } else {
-                       SET_TX_DESC_RATE_ID(pDesc, RATR_INX_WIRELESS_G);
-               }
-
-               SET_TX_DESC_QUEUE_SEL(pDesc, QSLT_MGNT); // Fixed queue of Mgnt queue
-
-               // Set NAVUSEHDR to prevent Ps-poll AId filed to be changed to error vlaue by Hw.
-               if (_TRUE == IsPsPoll) {
-                       SET_TX_DESC_NAV_USE_HDR(pDesc, 1);
-               } else {
-                       SET_TX_DESC_HWSEQ_EN(pDesc, 1); // Hw set sequence number
-                       SET_TX_DESC_HWSEQ_SEL(pDesc, 0);
-               }
-
-               if (_TRUE ==IsBTQosNull) {
-                       SET_TX_DESC_BT_INT(pDesc, 1);
-               }
-
-               SET_TX_DESC_USE_RATE(pDesc, 1); // use data rate which is set by Sw
-               SET_TX_DESC_OWN((pu1Byte)pDesc, 1);
-
-               SET_TX_DESC_TX_RATE(pDesc, MRateToHwRate(pmlmeext->tx_rate));
-
-       }
-
-       //
-       // Encrypt the data frame if under security mode excepct null data.
-       // Suggested by CCW.
-       //
-       if (_TRUE ==bDataFrame)
-       {
-               u32 EncAlg;
-
-               EncAlg = padapter->securitypriv.dot11PrivacyAlgrthm;
-               switch (EncAlg)
-               {
-                       case _NO_PRIVACY_:
-                               SET_TX_DESC_SEC_TYPE(pDesc, 0x0);
-                               break;
-                       case _WEP40_:
-                       case _WEP104_:
-                       case _TKIP_:
-                               SET_TX_DESC_SEC_TYPE(pDesc, 0x1);
-                               break;
-                       case _SMS4_:
-                               SET_TX_DESC_SEC_TYPE(pDesc, 0x2);
-                               break;
-                       case _AES_:
-                               SET_TX_DESC_SEC_TYPE(pDesc, 0x3);
-                               break;
-                       default:
-                               SET_TX_DESC_SEC_TYPE(pDesc, 0x0);
-                               break;
-               }
-       }
-
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-       // USB interface drop packet if the checksum of descriptor isn't correct.
-       // Using this checksum can let hardware recovery from packet bulk out error (e.g. Cancel URC, Bulk out error.).
-       if(pHalFunc->hal_cal_txdesc_chksum != NULL)
-#if defined(CONFIG_RTL8188E) || defined(CONFIG_RTL8723A) ||defined(CONFIG_RTL8723B)
-               pHalFunc->hal_cal_txdesc_chksum((struct tx_desc*)pDesc);
-#else
-               pHalFunc->hal_cal_txdesc_chksum(pDesc);
-#endif //CONFIG_RTL8188E || CONFIG_RTL8723B
-#endif
-}
-
 static void rtw_hal_backup_rate(_adapter* adapter)
 {
        DBG_871X("%s\n", __func__);
 static void rtw_hal_backup_rate(_adapter* adapter)
 {
        DBG_871X("%s\n", __func__);
@@ -1559,7 +1458,7 @@ static void rtw_hal_fw_sync_cam_id(_adapter* adapter)
                        write_cam(adapter, cam_id, ctrl, null_addr, get_key);
                }
                index++;
                        write_cam(adapter, cam_id, ctrl, null_addr, get_key);
                }
                index++;
-       }while(cam_id != -1);
+       }while(index < 4);
 
        rtw_write8(adapter, REG_SECCFG, 0xcc);
 }
 
        rtw_write8(adapter, REG_SECCFG, 0xcc);
 }
@@ -1567,13 +1466,13 @@ static void rtw_hal_fw_sync_cam_id(_adapter* adapter)
 static void rtw_hal_update_gtk_offload_info(_adapter* adapter)
 {
        struct security_priv *psecuritypriv = &adapter->securitypriv;
 static void rtw_hal_update_gtk_offload_info(_adapter* adapter)
 {
        struct security_priv *psecuritypriv = &adapter->securitypriv;
-       int cam_id;
+       u8 defualt_cam_id=0;
+       u8 cam_id=5;
        u8 *addr;
        u8 null_addr[] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
        u8 gtk_keyindex=0;
        u8 get_key[16];
        u8 *addr;
        u8 null_addr[] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
        u8 gtk_keyindex=0;
        u8 get_key[16];
-       u8 null_key[16];
-       u8 index = 0;
+       u8 index = 1;
        u16 ctrl = 0;
        u32 algorithm = 0;
 
        u16 ctrl = 0;
        u32 algorithm = 0;
 
@@ -1584,38 +1483,29 @@ static void rtw_hal_update_gtk_offload_info(_adapter* adapter)
                return;
        }
 
                return;
        }
 
-       _rtw_memset(null_key, 0, sizeof(null_key));
+       _rtw_memset(get_key, 0, sizeof(get_key));
 
        algorithm = psecuritypriv->dot11PrivacyAlgrthm;
 
        if(psecuritypriv->binstallKCK_KEK == _TRUE) {
 
        algorithm = psecuritypriv->dot11PrivacyAlgrthm;
 
        if(psecuritypriv->binstallKCK_KEK == _TRUE) {
+
                //read gtk key index
                gtk_keyindex = rtw_read8(adapter, 0x48c);
                //read gtk key index
                gtk_keyindex = rtw_read8(adapter, 0x48c);
-
                do{
                do{
-                       cam_id = rtw_camid_search(adapter, addr, index);
-                       if (cam_id == -1) {
-                               DBG_871X("%s: cam_id: %d, key_id:%d\n",
-                                               __func__, cam_id, index);
-                       } else if (read_phy_cam_is_gtk(adapter, cam_id) ==
-                                       _FALSE){
-                               DBG_871X("%s: cam_id: %d, key_id:%d is not GK\n",
-                                               __func__, cam_id, index);
-                       } else if (cam_id >= 4) {
-                               DBG_871X("%s: cam_id(%d) is not in default key\n",
-                                               __func__, cam_id);
-                       } else {
-                               read_cam(adapter ,cam_id, get_key);
+                       //chech if GK
+                       if(read_phy_cam_is_gtk(adapter, defualt_cam_id) == _TRUE)
+                       {
+                               read_cam(adapter ,defualt_cam_id, get_key);
                                algorithm = psecuritypriv->dot11PrivacyAlgrthm;
                                algorithm = psecuritypriv->dot11PrivacyAlgrthm;
-                               ctrl = BIT(15) | BIT6 |(algorithm << 2) | index;
-                               write_cam(adapter, cam_id+4, ctrl,
-                                               addr, get_key);
+                               //in defualt cam entry, cam id = key id
+                               ctrl = BIT(15) | BIT6 |(algorithm << 2) | defualt_cam_id;
+                               write_cam(adapter, cam_id, ctrl, addr, get_key);
+                               cam_id++;
                                ctrl = 0;
                                ctrl = 0;
-                               write_cam(adapter, cam_id, ctrl,
-                                               null_addr, get_key);
+                               write_cam(adapter, defualt_cam_id, ctrl, null_addr, get_key);
                        }
 
                        }
 
-                       if (gtk_keyindex < 4 &&(index == gtk_keyindex)) {
+                       if (gtk_keyindex < 4 &&(defualt_cam_id == gtk_keyindex)) {
                                psecuritypriv->dot118021XGrpKeyid = gtk_keyindex;
                                _rtw_memcpy(psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey,
                                                get_key, 16);
                                psecuritypriv->dot118021XGrpKeyid = gtk_keyindex;
                                _rtw_memcpy(psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey,
                                                get_key, 16);
@@ -1627,8 +1517,8 @@ static void rtw_hal_update_gtk_offload_info(_adapter* adapter)
                                psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].lkey[2],
                                psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].lkey[3]);
                        }
                                psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].lkey[2],
                                psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].lkey[3]);
                        }
-                       index++;
-               }while(index < 4);
+                       defualt_cam_id++;
+               }while(defualt_cam_id < 4);
 
                rtw_write8(adapter, REG_SECCFG, 0x0c);
 #ifdef CONFIG_GTK_OL_DBG
 
                rtw_write8(adapter, REG_SECCFG, 0x0c);
 #ifdef CONFIG_GTK_OL_DBG
@@ -1671,15 +1561,10 @@ static u8 rtw_hal_set_keep_alive_cmd(_adapter *adapter, u8 enable, u8 pkt_type)
        SET_H2CCMD_KEEPALIVE_PARM_PKT_TYPE(u1H2CKeepAliveParm, pkt_type);
        SET_H2CCMD_KEEPALIVE_PARM_CHECK_PERIOD(u1H2CKeepAliveParm, check_period);
 
        SET_H2CCMD_KEEPALIVE_PARM_PKT_TYPE(u1H2CKeepAliveParm, pkt_type);
        SET_H2CCMD_KEEPALIVE_PARM_CHECK_PERIOD(u1H2CKeepAliveParm, check_period);
 
-       if (pHalFunc->fill_h2c_cmd != NULL) {
-               ret = pHalFunc->fill_h2c_cmd(adapter,
+       ret = rtw_hal_fill_h2c_cmd(adapter,
                                H2C_KEEP_ALIVE,
                                H2C_KEEP_ALIVE_CTRL_LEN,
                                u1H2CKeepAliveParm);
                                H2C_KEEP_ALIVE,
                                H2C_KEEP_ALIVE_CTRL_LEN,
                                u1H2CKeepAliveParm);
-       } else {
-               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               ret = _FAIL;
-       }
 
        return ret;
 }
 
        return ret;
 }
@@ -1697,16 +1582,10 @@ static u8 rtw_hal_set_disconnect_decision_cmd(_adapter *adapter, u8 enable)
        SET_H2CCMD_DISCONDECISION_PARM_CHECK_PERIOD(u1H2CDisconDecisionParm, check_period);
        SET_H2CCMD_DISCONDECISION_PARM_TRY_PKT_NUM(u1H2CDisconDecisionParm, trypkt_num);
 
        SET_H2CCMD_DISCONDECISION_PARM_CHECK_PERIOD(u1H2CDisconDecisionParm, check_period);
        SET_H2CCMD_DISCONDECISION_PARM_TRY_PKT_NUM(u1H2CDisconDecisionParm, trypkt_num);
 
-       if (pHalFunc->fill_h2c_cmd != NULL) {
-               ret = pHalFunc->fill_h2c_cmd(adapter,
+       ret = rtw_hal_fill_h2c_cmd(adapter,
                                H2C_DISCON_DECISION,
                                H2C_DISCON_DECISION_LEN,
                                u1H2CDisconDecisionParm);
                                H2C_DISCON_DECISION,
                                H2C_DISCON_DECISION_LEN,
                                u1H2CDisconDecisionParm);
-       } else {
-               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               ret = _FAIL;
-       }
-
        return ret;
 }
 
        return ret;
 }
 
@@ -1720,15 +1599,10 @@ static u8 rtw_hal_set_ap_offload_ctrl_cmd(_adapter *adapter, u8 enable)
 
        SET_H2CCMD_AP_WOWLAN_EN(u1H2CAPOffloadCtrlParm, enable);
 
 
        SET_H2CCMD_AP_WOWLAN_EN(u1H2CAPOffloadCtrlParm, enable);
 
-       if (pHalFunc->fill_h2c_cmd != NULL) {
-               ret = pHalFunc->fill_h2c_cmd(adapter,
+       ret = rtw_hal_fill_h2c_cmd(adapter,
                                H2C_AP_OFFLOAD,
                                H2C_AP_OFFLOAD_LEN,
                                u1H2CAPOffloadCtrlParm);
                                H2C_AP_OFFLOAD,
                                H2C_AP_OFFLOAD_LEN,
                                u1H2CAPOffloadCtrlParm);
-       } else {
-               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               ret = _FAIL;
-       }
        return ret;
 }
 
        return ret;
 }
 
@@ -1739,11 +1613,6 @@ static u8 rtw_hal_set_ap_rsvdpage_loc_cmd(_adapter *adapter,
        u8 rsvdparm[H2C_AOAC_RSVDPAGE_LOC_LEN]={0};
        u8 ret = _FAIL, header = 0;
 
        u8 rsvdparm[H2C_AOAC_RSVDPAGE_LOC_LEN]={0};
        u8 ret = _FAIL, header = 0;
 
-       if (pHalFunc->fill_h2c_cmd == NULL) {
-               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               return ret;
-       }
-
        header = rtw_read8(adapter, REG_BCNQ_BDNY);
 
        DBG_871X("%s: beacon: %d, probeRsp: %d, header:0x%02x\n", __func__,
        header = rtw_read8(adapter, REG_BCNQ_BDNY);
 
        DBG_871X("%s: beacon: %d, probeRsp: %d, header:0x%02x\n", __func__,
@@ -1754,7 +1623,7 @@ static u8 rtw_hal_set_ap_rsvdpage_loc_cmd(_adapter *adapter,
        SET_H2CCMD_AP_WOWLAN_RSVDPAGE_LOC_BCN(rsvdparm,
                        rsvdpageloc->LocApOffloadBCN + header);
 
        SET_H2CCMD_AP_WOWLAN_RSVDPAGE_LOC_BCN(rsvdparm,
                        rsvdpageloc->LocApOffloadBCN + header);
 
-       ret = pHalFunc->fill_h2c_cmd(adapter, H2C_BCN_RSVDPAGE,
+       ret = rtw_hal_fill_h2c_cmd(adapter, H2C_BCN_RSVDPAGE,
                                H2C_BCN_RSVDPAGE_LEN, rsvdparm);
 
        if (ret == _FAIL)
                                H2C_BCN_RSVDPAGE_LEN, rsvdparm);
 
        if (ret == _FAIL)
@@ -1765,7 +1634,7 @@ static u8 rtw_hal_set_ap_rsvdpage_loc_cmd(_adapter *adapter,
        SET_H2CCMD_AP_WOWLAN_RSVDPAGE_LOC_ProbeRsp(rsvdparm,
                        rsvdpageloc->LocProbeRsp + header);
 
        SET_H2CCMD_AP_WOWLAN_RSVDPAGE_LOC_ProbeRsp(rsvdparm,
                        rsvdpageloc->LocProbeRsp + header);
 
-       ret = pHalFunc->fill_h2c_cmd(adapter, H2C_PROBERSP_RSVDPAGE,
+       ret = rtw_hal_fill_h2c_cmd(adapter, H2C_PROBERSP_RSVDPAGE,
                                H2C_PROBERSP_RSVDPAGE_LEN, rsvdparm);
 
        if (ret == _FAIL)
                                H2C_PROBERSP_RSVDPAGE_LEN, rsvdparm);
 
        if (ret == _FAIL)
@@ -1774,7 +1643,7 @@ static u8 rtw_hal_set_ap_rsvdpage_loc_cmd(_adapter *adapter,
        return ret;
 }
 
        return ret;
 }
 
-u8 rtw_hal_set_wowlan_ctrl_cmd(_adapter *adapter, u8 enable)
+static u8 rtw_hal_set_wowlan_ctrl_cmd(_adapter *adapter, u8 enable)
 {
        struct security_priv *psecpriv = &adapter->securitypriv;
        struct pwrctrl_priv *ppwrpriv = adapter_to_pwrctl(adapter);
 {
        struct security_priv *psecpriv = &adapter->securitypriv;
        struct pwrctrl_priv *ppwrpriv = adapter_to_pwrctl(adapter);
@@ -1782,7 +1651,7 @@ u8 rtw_hal_set_wowlan_ctrl_cmd(_adapter *adapter, u8 enable)
 
        u8 u1H2CWoWlanCtrlParm[H2C_WOWLAN_LEN]={0};
        u8 discont_wake = 1, gpionum = 0, gpio_dur = 0;
 
        u8 u1H2CWoWlanCtrlParm[H2C_WOWLAN_LEN]={0};
        u8 discont_wake = 1, gpionum = 0, gpio_dur = 0;
-       u8 hw_unicast = 0, gpio_pulse_cnt = 0;
+       u8 hw_unicast = 0, gpio_pulse_cnt=0;
        u8 sdio_wakeup_enable = 1;
        u8 gpio_high_active = 0; //0: low active, 1: high active
        u8 magic_pkt = 0;
        u8 sdio_wakeup_enable = 1;
        u8 gpio_high_active = 0; //0: low active, 1: high active
        u8 magic_pkt = 0;
@@ -1791,12 +1660,6 @@ u8 rtw_hal_set_wowlan_ctrl_cmd(_adapter *adapter, u8 enable)
 #ifdef CONFIG_GPIO_WAKEUP
        gpionum = WAKEUP_GPIO_IDX;
        sdio_wakeup_enable = 0;
 #ifdef CONFIG_GPIO_WAKEUP
        gpionum = WAKEUP_GPIO_IDX;
        sdio_wakeup_enable = 0;
-       gpio_dur = 32; // 32*32us = 1024us
-#ifdef CONFIG_GPIO_WAKEUP_LOW_ACTIVE
-       gpio_high_active = 0;
-#else // !CONFIG_GPIO_WAKEUP_LOW_ACTIVE
-       gpio_high_active = 1;
-#endif // !CONFIG_GPIO_WAKEUP_LOW_ACTIVE
 #endif //CONFIG_GPIO_WAKEUP
 
        if (!ppwrpriv->wowlan_pno_enable)
 #endif //CONFIG_GPIO_WAKEUP
 
        if (!ppwrpriv->wowlan_pno_enable)
@@ -1804,12 +1667,10 @@ u8 rtw_hal_set_wowlan_ctrl_cmd(_adapter *adapter, u8 enable)
 
        if (psecpriv->dot11PrivacyAlgrthm == _WEP40_ || psecpriv->dot11PrivacyAlgrthm == _WEP104_)
                hw_unicast = 1;
 
        if (psecpriv->dot11PrivacyAlgrthm == _WEP40_ || psecpriv->dot11PrivacyAlgrthm == _WEP104_)
                hw_unicast = 1;
-       else if (IS_HARDWARE_TYPE_8192E(adapter))
-               hw_unicast = 1;
        else
                hw_unicast = 0;
 
        else
                hw_unicast = 0;
 
-       DBG_871X("%s: enable=%d GPIO=%d\n", __FUNCTION__, enable, gpionum);
+       DBG_871X("%s(): enable=%d\n", __func__, enable);
 
        SET_H2CCMD_WOWLAN_FUNC_ENABLE(u1H2CWoWlanCtrlParm, enable);
        SET_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(u1H2CWoWlanCtrlParm, 0);
 
        SET_H2CCMD_WOWLAN_FUNC_ENABLE(u1H2CWoWlanCtrlParm, enable);
        SET_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(u1H2CWoWlanCtrlParm, 0);
@@ -1823,23 +1684,19 @@ u8 rtw_hal_set_wowlan_ctrl_cmd(_adapter *adapter, u8 enable)
        SET_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(u1H2CWoWlanCtrlParm, discont_wake);
        SET_H2CCMD_WOWLAN_GPIONUM(u1H2CWoWlanCtrlParm, gpionum);
        SET_H2CCMD_WOWLAN_DATAPIN_WAKE_UP(u1H2CWoWlanCtrlParm, sdio_wakeup_enable);
        SET_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(u1H2CWoWlanCtrlParm, discont_wake);
        SET_H2CCMD_WOWLAN_GPIONUM(u1H2CWoWlanCtrlParm, gpionum);
        SET_H2CCMD_WOWLAN_DATAPIN_WAKE_UP(u1H2CWoWlanCtrlParm, sdio_wakeup_enable);
-       SET_H2CCMD_WOWLAN_GPIO_DURATION(u1H2CWoWlanCtrlParm, gpio_dur); // (real)unit: 32us
-       SET_H2CCMD_WOWLAN_GPIO_PULSE_EN(u1H2CWoWlanCtrlParm, 1);
+       SET_H2CCMD_WOWLAN_GPIO_DURATION(u1H2CWoWlanCtrlParm, gpio_dur);
 #ifdef CONFIG_PLATFORM_ARM_RK3188
 #ifdef CONFIG_PLATFORM_ARM_RK3188
-       SET_H2CCMD_WOWLAN_GPIO_PULSE_COUNT(u1H2CWoWlanCtrlParm, 4);
+       SET_H2CCMD_WOWLAN_GPIO_PULSE_EN(u1H2CWoWlanCtrlParm, 1);
+       SET_H2CCMD_WOWLAN_GPIO_PULSE_COUNT(u1H2CWoWlanCtrlParm, 0x04);
 #else
 #else
+       SET_H2CCMD_WOWLAN_GPIO_PULSE_EN(u1H2CWoWlanCtrlParm, 0);
        SET_H2CCMD_WOWLAN_GPIO_PULSE_COUNT(u1H2CWoWlanCtrlParm, gpio_pulse_cnt);
 #endif
 
        SET_H2CCMD_WOWLAN_GPIO_PULSE_COUNT(u1H2CWoWlanCtrlParm, gpio_pulse_cnt);
 #endif
 
-       if (pHalFunc->fill_h2c_cmd != NULL) {
-               ret = pHalFunc->fill_h2c_cmd(adapter,
+       ret = rtw_hal_fill_h2c_cmd(adapter,
                                H2C_WOWLAN,
                                H2C_WOWLAN_LEN,
                                u1H2CWoWlanCtrlParm);
                                H2C_WOWLAN,
                                H2C_WOWLAN_LEN,
                                u1H2CWoWlanCtrlParm);
-       } else {
-               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               ret = _FAIL;
-       }
        return ret;
 }
 
        return ret;
 }
 
@@ -1872,6 +1729,15 @@ static u8 rtw_hal_set_remote_wake_ctrl_cmd(_adapter *adapter, u8 enable)
 
                SET_H2CCMD_REMOTE_WAKE_CTRL_FW_UNICAST_EN(
                                u1H2CRemoteWakeCtrlParm, 1);
 
                SET_H2CCMD_REMOTE_WAKE_CTRL_FW_UNICAST_EN(
                                u1H2CRemoteWakeCtrlParm, 1);
+
+               /*
+                * filter NetBios name service pkt to avoid being waked-up
+                * by this kind of unicast pkt this exceptional modification 
+                * is used for match competitor's behavior
+                */
+               SET_H2CCMD_REMOTE_WAKE_CTRL_NBNS_FILTER_EN(
+                               u1H2CRemoteWakeCtrlParm, 1);
+               
                if ((psecuritypriv->dot11PrivacyAlgrthm == _AES_) ||
                        (psecuritypriv->dot11PrivacyAlgrthm == _NO_PRIVACY_)) {
                        SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(
                if ((psecuritypriv->dot11PrivacyAlgrthm == _AES_) ||
                        (psecuritypriv->dot11PrivacyAlgrthm == _NO_PRIVACY_)) {
                        SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(
@@ -1880,6 +1746,9 @@ static u8 rtw_hal_set_remote_wake_ctrl_cmd(_adapter *adapter, u8 enable)
                        SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(
                                        u1H2CRemoteWakeCtrlParm, 1);
                }
                        SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(
                                        u1H2CRemoteWakeCtrlParm, 1);
                }
+
+               SET_H2CCMD_REMOTE_WAKE_CTRL_FW_PARSING_UNTIL_WAKEUP(
+                       u1H2CRemoteWakeCtrlParm, 1);
        }
 #ifdef CONFIG_PNO_SUPPORT
        else {
        }
 #ifdef CONFIG_PNO_SUPPORT
        else {
@@ -1904,15 +1773,10 @@ static u8 rtw_hal_set_remote_wake_ctrl_cmd(_adapter *adapter, u8 enable)
 #endif //CONFIG_P2P_WOWLAN
 
 
 #endif //CONFIG_P2P_WOWLAN
 
 
-       if (pHalFunc->fill_h2c_cmd != NULL) {
-               ret = pHalFunc->fill_h2c_cmd(adapter,
+       ret = rtw_hal_fill_h2c_cmd(adapter,
                                H2C_REMOTE_WAKE_CTRL,
                                H2C_REMOTE_WAKE_CTRL_LEN,
                                u1H2CRemoteWakeCtrlParm);
                                H2C_REMOTE_WAKE_CTRL,
                                H2C_REMOTE_WAKE_CTRL_LEN,
                                u1H2CRemoteWakeCtrlParm);
-       } else {
-               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               ret = _FAIL;
-       }
        return ret;
 }
 
        return ret;
 }
 
@@ -1929,15 +1793,10 @@ static u8 rtw_hal_set_global_info_cmd(_adapter* adapter, u8 group_alg, u8 pairwi
        SET_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(u1H2CAOACGlobalInfoParm,
                        group_alg);
 
        SET_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(u1H2CAOACGlobalInfoParm,
                        group_alg);
 
-       if (pHalFunc->fill_h2c_cmd != NULL) {
-               ret = pHalFunc->fill_h2c_cmd(adapter,
+       ret = rtw_hal_fill_h2c_cmd(adapter,
                                H2C_AOAC_GLOBAL_INFO,
                                H2C_AOAC_GLOBAL_INFO_LEN,
                                u1H2CAOACGlobalInfoParm);
                                H2C_AOAC_GLOBAL_INFO,
                                H2C_AOAC_GLOBAL_INFO_LEN,
                                u1H2CAOACGlobalInfoParm);
-       } else {
-               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               ret = _FAIL;
-       }
 
        return ret;
 }
 
        return ret;
 }
@@ -1957,6 +1816,7 @@ static u8 rtw_hal_set_scan_offload_info_cmd(_adapter* adapter,
                rsvdpageloc->LocScanInfo, rsvdpageloc->LocSSIDInfo);
 
        SET_H2CCMD_AOAC_NLO_FUN_EN(u1H2CScanOffloadInfoParm, enable);
                rsvdpageloc->LocScanInfo, rsvdpageloc->LocSSIDInfo);
 
        SET_H2CCMD_AOAC_NLO_FUN_EN(u1H2CScanOffloadInfoParm, enable);
+       SET_H2CCMD_AOAC_NLO_IPS_EN(u1H2CScanOffloadInfoParm, enable);
        SET_H2CCMD_AOAC_RSVDPAGE_LOC_SCAN_INFO(u1H2CScanOffloadInfoParm,
                        rsvdpageloc->LocScanInfo);
        SET_H2CCMD_AOAC_RSVDPAGE_LOC_PROBE_PACKET(u1H2CScanOffloadInfoParm,
        SET_H2CCMD_AOAC_RSVDPAGE_LOC_SCAN_INFO(u1H2CScanOffloadInfoParm,
                        rsvdpageloc->LocScanInfo);
        SET_H2CCMD_AOAC_RSVDPAGE_LOC_PROBE_PACKET(u1H2CScanOffloadInfoParm,
@@ -1964,15 +1824,10 @@ static u8 rtw_hal_set_scan_offload_info_cmd(_adapter* adapter,
        SET_H2CCMD_AOAC_RSVDPAGE_LOC_SSID_INFO(u1H2CScanOffloadInfoParm,
                        rsvdpageloc->LocSSIDInfo);
 
        SET_H2CCMD_AOAC_RSVDPAGE_LOC_SSID_INFO(u1H2CScanOffloadInfoParm,
                        rsvdpageloc->LocSSIDInfo);
 
-       if (pHalFunc->fill_h2c_cmd != NULL) {
-               ret = pHalFunc->fill_h2c_cmd(adapter,
+       ret = rtw_hal_fill_h2c_cmd(adapter,
                                H2C_D0_SCAN_OFFLOAD_INFO,
                                H2C_SCAN_OFFLOAD_CTRL_LEN,
                                u1H2CScanOffloadInfoParm);
                                H2C_D0_SCAN_OFFLOAD_INFO,
                                H2C_SCAN_OFFLOAD_CTRL_LEN,
                                u1H2CScanOffloadInfoParm);
-       } else {
-               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               ret = _FAIL;
-       }
        return ret;
 }
 #endif //CONFIG_PNO_SUPPORT
        return ret;
 }
 #endif //CONFIG_PNO_SUPPORT
@@ -2109,7 +1964,7 @@ static void rtw_hal_construct_P2PBeacon(_adapter *padapter, u8 *pframe, u32 *pLe
        *(fctrl) = 0;
        
        _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
        *(fctrl) = 0;
        
        _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
@@ -2419,7 +2274,7 @@ static void rtw_hal_construct_P2PProbeRsp(_adapter *padapter, u8 *pframe, u32 *p
        DBG_871X("%s\n", __FUNCTION__);
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;  
        
        DBG_871X("%s\n", __FUNCTION__);
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;  
        
-       mac = myid(&(padapter->eeprompriv));
+       mac = adapter_mac_addr(padapter);
        
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
        
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
@@ -2579,7 +2434,7 @@ static void rtw_hal_construct_P2PProbeRsp(_adapter *padapter, u8 *pframe, u32 *p
                //      Value:
                if (pwdinfo->external_uuid == 0) {
                        _rtw_memset( wpsie + wpsielen, 0x0, 16 );
                //      Value:
                if (pwdinfo->external_uuid == 0) {
                        _rtw_memset( wpsie + wpsielen, 0x0, 16 );
-                       _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+                       _rtw_memcpy(wpsie + wpsielen, mac, ETH_ALEN);
                } else {
                        _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
                }
                } else {
                        _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
                }
@@ -2770,8 +2625,8 @@ static void rtw_hal_construct_P2PNegoRsp(_adapter *padapter, u8 *pframe, u32 *pL
 
        //RA, filled by FW
        _rtw_memset(pwlanhdr->addr1, 0, ETH_ALEN);
 
        //RA, filled by FW
        _rtw_memset(pwlanhdr->addr1, 0, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr3, adapter_mac_addr(padapter), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0);
        SetFrameSubType(pframe, WIFI_ACTION);
 
        SetSeqNum(pwlanhdr, 0);
        SetFrameSubType(pframe, WIFI_ACTION);
@@ -2983,7 +2838,7 @@ static void rtw_hal_construct_P2PNegoRsp(_adapter *padapter, u8 *pframe, u32 *pL
        p2pielen += 2;
 
        //      Value:
        p2pielen += 2;
 
        //      Value:
-       _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+       _rtw_memcpy(p2pie + p2pielen, adapter_mac_addr(padapter), ETH_ALEN);
        p2pielen += ETH_ALEN;
 
        //      Channel List
        p2pielen += ETH_ALEN;
 
        //      Channel List
@@ -3101,7 +2956,7 @@ static void rtw_hal_construct_P2PNegoRsp(_adapter *padapter, u8 *pframe, u32 *pL
 
        //      Value:
        //      P2P Device Address
 
        //      Value:
        //      P2P Device Address
-       _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+       _rtw_memcpy(p2pie + p2pielen, adapter_mac_addr(padapter), ETH_ALEN);
        p2pielen += ETH_ALEN;
 
        //      Config Method
        p2pielen += ETH_ALEN;
 
        //      Config Method
@@ -3228,7 +3083,7 @@ static void rtw_hal_construct_P2PInviteRsp(_adapter * padapter, u8 * pframe, u32
 
        //RA fill by FW
        _rtw_memset(pwlanhdr->addr1, 0, ETH_ALEN);
 
        //RA fill by FW
        _rtw_memset(pwlanhdr->addr1, 0, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
 
        //BSSID fill by FW
        _rtw_memset(pwlanhdr->addr3, 0, ETH_ALEN);
 
        //BSSID fill by FW
        _rtw_memset(pwlanhdr->addr3, 0, ETH_ALEN);
@@ -3332,7 +3187,7 @@ static void rtw_hal_construct_P2PInviteRsp(_adapter * padapter, u8 * pframe, u32
 
                        //      Value:
                        //      P2P Device Address for GO
 
                        //      Value:
                        //      P2P Device Address for GO
-                       _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+                       _rtw_memcpy(p2pie + p2pielen, adapter_mac_addr(padapter), ETH_ALEN);
                        p2pielen += ETH_ALEN;
 
                }
                        p2pielen += ETH_ALEN;
 
                }
@@ -3502,8 +3357,8 @@ static void rtw_hal_construct_P2PProvisionDisRsp(_adapter * padapter, u8 * pfram
 
        //RA filled by FW
        _rtw_memset(pwlanhdr->addr1, 0, ETH_ALEN);
 
        //RA filled by FW
        _rtw_memset(pwlanhdr->addr1, 0, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr3, adapter_mac_addr(padapter), ETH_ALEN);
 
        SetSeqNum(pwlanhdr,0);
        SetFrameSubType(pframe, WIFI_ACTION);
 
        SetSeqNum(pwlanhdr,0);
        SetFrameSubType(pframe, WIFI_ACTION);
@@ -3595,15 +3450,10 @@ u8 rtw_hal_set_FwP2PRsvdPage_cmd(_adapter* adapter, PRSVDPAGE_LOC rsvdpageloc)
        SET_H2CCMD_RSVDPAGE_LOC_P2P_PD_RSP(u1H2CP2PRsvdPageParm, rsvdpageloc->LocBTQosNull);
        
        //FillH2CCmd8723B(padapter, H2C_8723B_P2P_OFFLOAD_RSVD_PAGE, H2C_P2PRSVDPAGE_LOC_LEN, u1H2CP2PRsvdPageParm);
        SET_H2CCMD_RSVDPAGE_LOC_P2P_PD_RSP(u1H2CP2PRsvdPageParm, rsvdpageloc->LocBTQosNull);
        
        //FillH2CCmd8723B(padapter, H2C_8723B_P2P_OFFLOAD_RSVD_PAGE, H2C_P2PRSVDPAGE_LOC_LEN, u1H2CP2PRsvdPageParm);
-       if (pHalFunc->fill_h2c_cmd != NULL) {
-               ret = pHalFunc->fill_h2c_cmd(adapter,
+       ret = rtw_hal_fill_h2c_cmd(adapter,
                                H2C_P2P_OFFLOAD_RSVD_PAGE,
                                H2C_P2PRSVDPAGE_LOC_LEN,
                                u1H2CP2PRsvdPageParm);
                                H2C_P2P_OFFLOAD_RSVD_PAGE,
                                H2C_P2PRSVDPAGE_LOC_LEN,
                                u1H2CP2PRsvdPageParm);
-       } else {
-               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               ret = _FAIL;
-       }
 
        return ret;
 }
 
        return ret;
 }
@@ -3642,16 +3492,10 @@ u8 rtw_hal_set_p2p_wowlan_offload_cmd(_adapter* adapter)
        offload_cmd = (u8*)p2p_wowlan_offload;
        DBG_871X("p2p_wowlan_offload: %x:%x:%x\n",offload_cmd[0],offload_cmd[1],offload_cmd[2]);        
 
        offload_cmd = (u8*)p2p_wowlan_offload;
        DBG_871X("p2p_wowlan_offload: %x:%x:%x\n",offload_cmd[0],offload_cmd[1],offload_cmd[2]);        
 
-       if (pHalFunc->fill_h2c_cmd != NULL) {
-               ret = pHalFunc->fill_h2c_cmd(adapter,
+       ret = rtw_hal_fill_h2c_cmd(adapter,
                                H2C_P2P_OFFLOAD,
                                H2C_P2P_OFFLOAD_LEN,
                                offload_cmd);
                                H2C_P2P_OFFLOAD,
                                H2C_P2P_OFFLOAD_LEN,
                                offload_cmd);
-       } else {
-               DBG_871X("%s: Please hook fill_h2c_cmd first!\n", __func__);
-               ret = _FAIL;
-       }
-
        return ret;
 
        //FillH2CCmd8723B(adapter, H2C_8723B_P2P_OFFLOAD, sizeof(struct P2P_WoWlan_Offload_t), (u8 *)p2p_wowlan_offload);
        return ret;
 
        //FillH2CCmd8723B(adapter, H2C_8723B_P2P_OFFLOAD, sizeof(struct P2P_WoWlan_Offload_t), (u8 *)p2p_wowlan_offload);
@@ -3678,7 +3522,7 @@ static void rtw_hal_construct_beacon(_adapter *padapter,
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
@@ -3787,7 +3631,7 @@ static void rtw_hal_construct_PSPoll(_adapter *padapter,
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        // TA.
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        // TA.
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
 
        *pLength = 16;
 }
 
        *pLength = 16;
 }
@@ -3827,19 +3671,19 @@ static void rtw_hal_construct_NullFunctionData(
                case Ndis802_11Infrastructure:
                        SetToDs(fctrl);
                        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
                case Ndis802_11Infrastructure:
                        SetToDs(fctrl);
                        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-                       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+                       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
                        _rtw_memcpy(pwlanhdr->addr3, StaAddr, ETH_ALEN);
                        break;
                case Ndis802_11APMode:
                        SetFrDs(fctrl);
                        _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
                        _rtw_memcpy(pwlanhdr->addr2, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
                        _rtw_memcpy(pwlanhdr->addr3, StaAddr, ETH_ALEN);
                        break;
                case Ndis802_11APMode:
                        SetFrDs(fctrl);
                        _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
                        _rtw_memcpy(pwlanhdr->addr2, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-                       _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
+                       _rtw_memcpy(pwlanhdr->addr3, adapter_mac_addr(padapter), ETH_ALEN);
                        break;
                case Ndis802_11IBSS:
                default:
                        _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
                        break;
                case Ndis802_11IBSS:
                default:
                        _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
-                       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+                       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
                        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
                        break;
        }
                        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
                        break;
        }
@@ -3865,6 +3709,47 @@ static void rtw_hal_construct_NullFunctionData(
        *pLength = pktlen;
 }
 
        *pLength = pktlen;
 }
 
+void rtw_hal_construct_ProbeRsp(_adapter *padapter, u8 *pframe, u32 *pLength, u8 *StaAddr, BOOLEAN bHideSSID)
+{
+       struct rtw_ieee80211_hdr        *pwlanhdr;
+       u16                                     *fctrl;
+       u8                                      *mac, *bssid;
+       u32                                     pktlen;
+       struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);
+       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
+       WLAN_BSSID_EX  *cur_network = &(pmlmeinfo->network);
+
+
+       /*DBG_871X("%s\n", __FUNCTION__);*/
+
+       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+
+       mac = adapter_mac_addr(padapter);
+       bssid = cur_network->MacAddress;
+
+       fctrl = &(pwlanhdr->frame_ctl);
+       *(fctrl) = 0;
+       _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr3, bssid, ETH_ALEN);
+
+       SetSeqNum(pwlanhdr, 0);
+       SetFrameSubType(fctrl, WIFI_PROBERSP);
+
+       pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pframe += pktlen;
+
+       if (cur_network->IELength > MAX_IE_SZ)
+               return;
+
+       _rtw_memcpy(pframe, cur_network->IEs, cur_network->IELength);
+       pframe += cur_network->IELength;
+       pktlen += cur_network->IELength;
+
+       *pLength = pktlen;
+}
+
+
 #ifdef CONFIG_WOWLAN   
 //
 // Description:
 #ifdef CONFIG_WOWLAN   
 //
 // Description:
@@ -3904,7 +3789,7 @@ static void rtw_hal_construct_ARPRsp(
        //SetFrameSubType(fctrl, 0);
        SetToDs(fctrl);
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
        //SetFrameSubType(fctrl, 0);
        SetToDs(fctrl);
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0);
@@ -3966,7 +3851,7 @@ static void rtw_hal_construct_ARPRsp(
        SET_ARP_PKT_HW_ADDR_LEN(pARPRspPkt, 6);
        SET_ARP_PKT_PROTOCOL_ADDR_LEN(pARPRspPkt, 4);
        SET_ARP_PKT_OPERATION(pARPRspPkt, 0x0200);      // ARP response
        SET_ARP_PKT_HW_ADDR_LEN(pARPRspPkt, 6);
        SET_ARP_PKT_PROTOCOL_ADDR_LEN(pARPRspPkt, 4);
        SET_ARP_PKT_OPERATION(pARPRspPkt, 0x0200);      // ARP response
-       SET_ARP_PKT_SENDER_MAC_ADDR(pARPRspPkt, myid(&(padapter->eeprompriv)));
+       SET_ARP_PKT_SENDER_MAC_ADDR(pARPRspPkt, adapter_mac_addr(padapter));
        SET_ARP_PKT_SENDER_IP_ADDR(pARPRspPkt, pIPAddress);
 #ifdef CONFIG_ARP_KEEP_ALIVE
        if (rtw_gw_addr_query(padapter)==0) {
        SET_ARP_PKT_SENDER_IP_ADDR(pARPRspPkt, pIPAddress);
 #ifdef CONFIG_ARP_KEEP_ALIVE
        if (rtw_gw_addr_query(padapter)==0) {
@@ -4046,7 +3931,7 @@ static void rtw_hal_construct_ProbeReq(_adapter *padapter, u8 *pframe,
        u8      bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
 
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
        u8      bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
 
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
-       mac = myid(&(padapter->eeprompriv));
+       mac = adapter_mac_addr(padapter);
 
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
 
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
@@ -4245,7 +4130,7 @@ static void rtw_hal_construct_GTKRsp(
                        get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        _rtw_memcpy(pwlanhdr->addr2,
                        get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        _rtw_memcpy(pwlanhdr->addr2,
-                       myid(&(padapter->eeprompriv)), ETH_ALEN);
+                       adapter_mac_addr(padapter), ETH_ALEN);
 
        _rtw_memcpy(pwlanhdr->addr3,
                        get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        _rtw_memcpy(pwlanhdr->addr3,
                        get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
@@ -4311,6 +4196,7 @@ static void rtw_hal_construct_GTKRsp(
 
 }
 #endif //CONFIG_GTK_OL
 
 }
 #endif //CONFIG_GTK_OL
+#endif //CONFIG_WOWLAN
 
 
 //
 
 
 //
@@ -4355,6 +4241,7 @@ void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished)
        u8 cur_dot11txpn[8];
 #ifdef CONFIG_GTK_OL
        struct sta_priv *pstapriv = &adapter->stapriv;
        u8 cur_dot11txpn[8];
 #ifdef CONFIG_GTK_OL
        struct sta_priv *pstapriv = &adapter->stapriv;
+       struct security_priv *psecpriv = NULL;
        struct sta_info * psta;
        u8 kek[RTW_KEK_LEN];
        u8 kck[RTW_KCK_LEN];
        struct sta_info * psta;
        u8 kek[RTW_KEK_LEN];
        u8 kck[RTW_KCK_LEN];
@@ -4382,16 +4269,15 @@ void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished)
        pwrctl = adapter_to_pwrctl(adapter);
 
        rtw_hal_get_def_var(adapter, HAL_DEF_TX_PAGE_SIZE, (u8 *)&PageSize);
        pwrctl = adapter_to_pwrctl(adapter);
 
        rtw_hal_get_def_var(adapter, HAL_DEF_TX_PAGE_SIZE, (u8 *)&PageSize);
-       DBG_871X("%s PAGE_SIZE: %d\n", __func__, PageSize);
-       if (pHalFunc->hal_get_tx_buff_rsvd_page_num != NULL) {
-               RsvdPageNum =
-                       pHalFunc->hal_get_tx_buff_rsvd_page_num(adapter, _TRUE);
-               DBG_871X("%s RsvdPageNUm: %d\n", __func__, RsvdPageNum);
-       } else {
-               DBG_871X("[Error]: %s, missing tx_buff_rsvd_page_num func!!\n",
-                               __func__);
-       }
 
 
+       if (PageSize == 0) {
+               DBG_871X("[Error]: %s, PageSize is zero!!\n", __func__);
+               return;
+       }
+       
+       RsvdPageNum = rtw_hal_get_txbuff_rsvd_page_num(adapter, _TRUE);
+       DBG_871X("%s PageSize: %d, RsvdPageNUm: %d\n",__func__, PageSize, RsvdPageNum);
+       
        MaxRsvdPageBufSize = RsvdPageNum*PageSize;
 
        pcmdframe = rtw_alloc_cmdxmitframe(pxmitpriv);
        MaxRsvdPageBufSize = RsvdPageNum*PageSize;
 
        pcmdframe = rtw_alloc_cmdxmitframe(pxmitpriv);
@@ -4410,7 +4296,7 @@ void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished)
 
        // When we count the first page size, we need to reserve description size for the RSVD
        // packet, it will be filled in front of the packet in TXPKTBUF.
 
        // When we count the first page size, we need to reserve description size for the RSVD
        // packet, it will be filled in front of the packet in TXPKTBUF.
-       CurtPktPageNum = (u8)PageNum_128(TxDescLen + BeaconLength);
+       CurtPktPageNum = (u8)PageNum((TxDescLen + BeaconLength), PageSize);
        //If we don't add 1 more page, the WOWLAN function has a problem. Baron thinks it's a bug of firmware
        if (CurtPktPageNum == 1)
                CurtPktPageNum += 1;
        //If we don't add 1 more page, the WOWLAN function has a problem. Baron thinks it's a bug of firmware
        if (CurtPktPageNum == 1)
                CurtPktPageNum += 1;
@@ -4546,10 +4432,27 @@ void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished)
 
                //3 KEK, KCK
                RsvdPageLoc.LocGTKInfo = TotalPageNum;
 
                //3 KEK, KCK
                RsvdPageLoc.LocGTKInfo = TotalPageNum;
-               _rtw_memcpy(ReservedPagePacket+BufIndex-TxDescLen,
-                               kck, RTW_KCK_LEN);
-               _rtw_memcpy(ReservedPagePacket+BufIndex-TxDescLen+RTW_KCK_LEN,
-                               kek, RTW_KEK_LEN);
+               if(IS_HARDWARE_TYPE_8188E(adapter) || IS_HARDWARE_TYPE_8812(adapter)){
+                       psecpriv = &adapter->securitypriv;
+                       _rtw_memcpy(ReservedPagePacket+BufIndex-TxDescLen,
+                                       &psecpriv->dot11PrivacyAlgrthm, 1);
+                       _rtw_memcpy(ReservedPagePacket+BufIndex-TxDescLen+1,
+                                       &psecpriv->dot118021XGrpPrivacy, 1);
+                       _rtw_memcpy(ReservedPagePacket+BufIndex-TxDescLen+2,
+                                       kck, RTW_KCK_LEN);
+                       _rtw_memcpy(ReservedPagePacket+BufIndex-TxDescLen+2+RTW_KCK_LEN,
+                                       kek, RTW_KEK_LEN);
+                       
+                       CurtPktPageNum = (u8)PageNum(TxDescLen + 2 + RTW_KCK_LEN + RTW_KEK_LEN, PageSize);
+               }
+               else{
+                       _rtw_memcpy(ReservedPagePacket+BufIndex-TxDescLen,
+                                       kck, RTW_KCK_LEN);
+                       _rtw_memcpy(ReservedPagePacket+BufIndex-TxDescLen+RTW_KCK_LEN,
+                                       kek, RTW_KEK_LEN);
+
+                       CurtPktPageNum = (u8)PageNum(TxDescLen + RTW_KCK_LEN + RTW_KEK_LEN, PageSize);
+               }
 #if 0
                {
                        int i;
 #if 0
                {
                        int i;
@@ -4567,8 +4470,6 @@ void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished)
                //      __FUNCTION__, &ReservedPagePacket[BufIndex-TxDescLen],
                //      (TxDescLen + RTW_KCK_LEN + RTW_KEK_LEN));
 
                //      __FUNCTION__, &ReservedPagePacket[BufIndex-TxDescLen],
                //      (TxDescLen + RTW_KCK_LEN + RTW_KEK_LEN));
 
-               CurtPktPageNum = (u8)PageNum(TxDescLen + RTW_KCK_LEN + RTW_KEK_LEN, PageSize);
-
                TotalPageNum += CurtPktPageNum;
 
                BufIndex += (CurtPktPageNum*PageSize);
                TotalPageNum += CurtPktPageNum;
 
                BufIndex += (CurtPktPageNum*PageSize);
@@ -4639,18 +4540,6 @@ void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished)
                                &ReservedPagePacket[BufIndex-TxDescLen],
                                ProbeReqLength, _FALSE, _FALSE, _FALSE);
 
                                &ReservedPagePacket[BufIndex-TxDescLen],
                                ProbeReqLength, _FALSE, _FALSE, _FALSE);
 
-#ifdef CONFIG_PNO_SET_DEBUG
-                       {
-                               int gj;
-                               printk("probe req pkt=> \n");
-                               for(gj=0; gj < ProbeReqLength + TxDescLen; gj++) {
-                                       printk(" %02x ",ReservedPagePacket[BufIndex- TxDescLen + gj]);
-                                       if ((gj + 1)%8==0)
-                                               printk("\n");
-                               }
-                               printk(" <=end\n");
-                       }
-#endif
                        CurtPktPageNum =
                                (u8)PageNum(TxDescLen + ProbeReqLength, PageSize);
 
                        CurtPktPageNum =
                                (u8)PageNum(TxDescLen + ProbeReqLength, PageSize);
 
@@ -4675,18 +4564,6 @@ void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished)
                                        &ReservedPagePacket[BufIndex-TxDescLen],
                                        ProbeReqLength, _FALSE, _FALSE, _FALSE);
 
                                        &ReservedPagePacket[BufIndex-TxDescLen],
                                        ProbeReqLength, _FALSE, _FALSE, _FALSE);
 
-#ifdef CONFIG_PNO_SET_DEBUG
-                               {
-                                       int gj;
-                                       printk("probe req pkt=> \n");
-                                       for(gj=0; gj < ProbeReqLength + TxDescLen; gj++) {
-                                               printk(" %02x ", ReservedPagePacket[BufIndex- TxDescLen + gj]);
-                                               if ((gj + 1)%8==0)
-                                                       printk("\n");
-                                       }
-                                       printk(" <=end\n");
-                               }
-#endif
                                CurtPktPageNum =
                                        (u8)PageNum(TxDescLen + ProbeReqLength, PageSize);
 
                                CurtPktPageNum =
                                        (u8)PageNum(TxDescLen + ProbeReqLength, PageSize);
 
@@ -4700,18 +4577,6 @@ void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished)
                        rtw_hal_construct_PNO_info(adapter,
                                        &ReservedPagePacket[BufIndex -TxDescLen],
                                        &PNOLength);
                        rtw_hal_construct_PNO_info(adapter,
                                        &ReservedPagePacket[BufIndex -TxDescLen],
                                        &PNOLength);
-#ifdef CONFIG_PNO_SET_DEBUG
-       {
-                       int gj;
-                       printk("PNO pkt=> \n");
-                       for(gj=0; gj < PNOLength; gj++) {
-                               printk(" %02x ", ReservedPagePacket[BufIndex-TxDescLen +gj]);
-                               if ((gj + 1)%8==0)
-                                       printk("\n");
-                       }
-                       printk(" <=end\n");
-       }
-#endif
 
                        CurtPktPageNum = (u8)PageNum_128(PNOLength);
                        TotalPageNum += CurtPktPageNum;
 
                        CurtPktPageNum = (u8)PageNum_128(PNOLength);
                        TotalPageNum += CurtPktPageNum;
@@ -4722,18 +4587,7 @@ void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished)
                        rtw_hal_construct_ssid_list(adapter,
                                        &ReservedPagePacket[BufIndex-TxDescLen],
                                        &SSIDLegnth);
                        rtw_hal_construct_ssid_list(adapter,
                                        &ReservedPagePacket[BufIndex-TxDescLen],
                                        &SSIDLegnth);
-#ifdef CONFIG_PNO_SET_DEBUG
-       {
-                       int gj;
-                       printk("SSID list pkt=> \n");
-                       for(gj=0; gj < SSIDLegnth; gj++) {
-                               printk(" %02x ", ReservedPagePacket[BufIndex-TxDescLen+gj]);
-                               if ((gj + 1)%8==0)
-                                       printk("\n");
-                       }
-                       printk(" <=end\n");
-       }
-#endif
+
                        CurtPktPageNum = (u8)PageNum_128(SSIDLegnth);
                        TotalPageNum += CurtPktPageNum;
                        BufIndex += (CurtPktPageNum*PageSize);
                        CurtPktPageNum = (u8)PageNum_128(SSIDLegnth);
                        TotalPageNum += CurtPktPageNum;
                        BufIndex += (CurtPktPageNum*PageSize);
@@ -4743,18 +4597,7 @@ void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished)
                        rtw_hal_construct_scan_info(adapter,
                                        &ReservedPagePacket[BufIndex-TxDescLen],
                                        &ScanInfoLength);
                        rtw_hal_construct_scan_info(adapter,
                                        &ReservedPagePacket[BufIndex-TxDescLen],
                                        &ScanInfoLength);
-#ifdef CONFIG_PNO_SET_DEBUG
-       {
-                       int gj;
-                       printk("Scan info pkt=> \n");
-                       for(gj=0; gj < ScanInfoLength; gj++) {
-                               printk(" %02x ", ReservedPagePacket[BufIndex-TxDescLen+gj]);
-                               if ((gj + 1)%8==0)
-                                       printk("\n");
-                       }
-                       printk(" <=end\n");
-       }
-#endif
+
                        CurtPktPageNum = (u8)PageNum(ScanInfoLength, PageSize);
                        TotalPageNum += CurtPktPageNum;
                        BufIndex += (CurtPktPageNum*PageSize);
                        CurtPktPageNum = (u8)PageNum(ScanInfoLength, PageSize);
                        TotalPageNum += CurtPktPageNum;
                        BufIndex += (CurtPktPageNum*PageSize);
@@ -4918,110 +4761,155 @@ error:
        rtw_free_xmitframe(pxmitpriv, pcmdframe);
 }
 
        rtw_free_xmitframe(pxmitpriv, pcmdframe);
 }
 
-static void rtw_hal_download_rsvd_page(_adapter* adapter, u8 mstatus)
+#ifdef CONFIG_AP_WOWLAN
+/*
+*Description: Fill the reserved packets that FW will use to RSVD page.
+*Now we just send 2 types packet to rsvd page. (1)Beacon, (2)ProbeRsp.
+*
+*Input: bDLFinished    
+*
+*FALSE: At the first time we will send all the packets as a large packet to Hw,
+*so we need to set the packet length to total length.
+*
+*TRUE: At the second time, we should send the first packet (default:beacon)
+*to Hw again and set the length in descriptor to the real beacon length.
+*2009.10.15 by tynli.
+*
+*Page Size = 128: 8188e, 8723a/b, 8192c/d,  
+*Page Size = 256: 8192e, 8821a
+*Page Size = 512: 8812a
+*/
+void rtw_hal_set_AP_fw_rsvd_page(_adapter *padapter , bool finished)
 {
 {
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(adapter);
-       struct mlme_ext_priv    *pmlmeext = &(adapter->mlmeextpriv);
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
-       struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(adapter);
-       BOOLEAN         bcn_valid = _FALSE;
-       u8      DLBcnCount=0;
-       u32 poll = 0;
-       u8 val8;
+       PHAL_DATA_TYPE pHalData;
+       struct xmit_frame       *pcmdframe;
+       struct pkt_attrib       *pattrib;
+       struct xmit_priv        *pxmitpriv;
+       struct mlme_ext_priv    *pmlmeext;
+       struct mlme_ext_info    *pmlmeinfo;
+       struct pwrctrl_priv *pwrctl;
+       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+       struct hal_ops *pHalFunc = &padapter->HalFunc;
+       u32     BeaconLength = 0 , ProbeRspLength = 0;
+       u8      *ReservedPagePacket;
+       u8      TxDescLen = TXDESC_SIZE, TxDescOffset = TXDESC_OFFSET;
+       u8      TotalPageNum = 0 , CurtPktPageNum = 0 , RsvdPageNum = 0;
+       u8      currentip[4];
+       u16     BufIndex, PageSize = 0;
+       u32     TotalPacketLen = 0 , MaxRsvdPageBufSize = 0;
+       RSVDPAGE_LOC    RsvdPageLoc;
+#ifdef DBG_CONFIG_ERROR_DETECT
+       struct sreset_priv *psrtpriv;
+#endif /* DBG_CONFIG_ERROR_DETECT */
 
 
-_func_enter_;
+       DBG_8192C("+" FUNC_ADPT_FMT ": iface_type=%d\n",
+       FUNC_ADPT_ARG(padapter), get_iface_type(padapter));
 
 
-       DBG_8192C("+" FUNC_ADPT_FMT ": iface_type=%d mstatus(%x)\n",
-               FUNC_ADPT_ARG(adapter), get_iface_type(adapter), mstatus);
-
-       if(mstatus == RT_MEDIA_CONNECT) {
-               BOOLEAN bRecover = _FALSE;
-               u8 v8;
-
-               // We should set AID, correct TSF, HW seq enable before set JoinBssReport to Fw in 88/92C.
-               // Suggested by filen. Added by tynli.
-               rtw_write16(adapter, REG_BCN_PSR_RPT, (0xC000|pmlmeinfo->aid));
-
-               // set REG_CR bit 8
-               v8 = rtw_read8(adapter, REG_CR+1);
-               v8 |= BIT(0); // ENSWBCN
-               rtw_write8(adapter,  REG_CR+1, v8);
-
-               // Disable Hw protection for a time which revserd for Hw sending beacon.
-               // Fix download reserved page packet fail that access collision with the protection time.
-               // 2010.05.11. Added by tynli.
-               val8 = rtw_read8(adapter, REG_BCN_CTRL);
-               val8 &= ~EN_BCN_FUNCTION;
-               val8 |= DIS_TSF_UDT;
-               rtw_write8(adapter, REG_BCN_CTRL, val8);
-
-               // Set FWHW_TXQ_CTRL 0x422[6]=0 to tell Hw the packet is not a real beacon frame.
-               if (pHalData->RegFwHwTxQCtrl & BIT(6))
-                       bRecover = _TRUE;
-
-               // To tell Hw the packet is not a real beacon frame.
-               rtw_write8(adapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl & ~BIT(6));
-               pHalData->RegFwHwTxQCtrl &= ~BIT(6);
-
-               // Clear beacon valid check bit.
-               rtw_hal_set_hwreg(adapter, HW_VAR_BCN_VALID, NULL);
-               rtw_hal_set_hwreg(adapter, HW_VAR_DL_BCN_SEL, NULL);
-
-               DLBcnCount = 0;
-               poll = 0;
-               do {
-                       // download rsvd page.
-                       rtw_hal_set_fw_rsvd_page(adapter, 0);
-
-                       DLBcnCount++;
-                       do {
-                               rtw_yield_os();
-                               //rtw_mdelay_os(10);
-                               // check rsvd page download OK.
-                               rtw_hal_get_hwreg(adapter, HW_VAR_BCN_VALID, (u8*)(&bcn_valid));
-                               poll++;
-                       } while(!bcn_valid && (poll%10)!=0 && !adapter->bSurpriseRemoved && !adapter->bDriverStopped);
-               }while(!bcn_valid && DLBcnCount<=100 && !adapter->bSurpriseRemoved && !adapter->bDriverStopped);
-
-               if(adapter->bSurpriseRemoved || adapter->bDriverStopped) {
-                       DBG_871X(ADPT_FMT": 0 bSurpriseRemoved:%d, bDriverStopped:%d\n",
-                               ADPT_ARG(adapter) ,adapter->bSurpriseRemoved,
-                               adapter->bDriverStopped);
-               } else if(!bcn_valid) {
-                       DBG_871X(ADPT_FMT": 1 DL RSVD page failed! DLBcnCount:%u, poll:%u\n",
-                               ADPT_ARG(adapter) ,DLBcnCount, poll);
-               } else {
-                       struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(adapter);
-                       pwrctl->fw_psmode_iface_id = adapter->iface_id;
-                       DBG_871X(ADPT_FMT": 1 DL RSVD page success! DLBcnCount:%u, poll:%u\n",
-                               ADPT_ARG(adapter), DLBcnCount, poll);
-               }
+       pHalData = GET_HAL_DATA(padapter);
+#ifdef DBG_CONFIG_ERROR_DETECT
+       psrtpriv = &pHalData->srestpriv;
+#endif
+       pxmitpriv = &padapter->xmitpriv;
+       pmlmeext = &padapter->mlmeextpriv;
+       pmlmeinfo = &pmlmeext->mlmext_info;
+       pwrctl = adapter_to_pwrctl(padapter);
 
 
-               // 2010.05.11. Added by tynli.
-               val8 = rtw_read8(adapter, REG_BCN_CTRL);
-               val8 |= EN_BCN_FUNCTION;
-               val8 &= ~DIS_TSF_UDT;
-               rtw_write8(adapter, REG_BCN_CTRL, val8);
-
-               // To make sure that if there exists an adapter which would like to send beacon.
-               // If exists, the origianl value of 0x422[6] will be 1, we should check this to
-               // prevent from setting 0x422[6] to 0 after download reserved page, or it will cause
-               // the beacon cannot be sent by HW.
-               // 2010.06.23. Added by tynli.
-               if(bRecover) {
-                       rtw_write8(adapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl | BIT(6));
-                       pHalData->RegFwHwTxQCtrl |= BIT(6);
-               }
+       rtw_hal_get_def_var(padapter, HAL_DEF_TX_PAGE_SIZE, (u8 *)&PageSize);
+       DBG_871X("%s PAGE_SIZE: %d\n", __func__, PageSize);
+       
+       if (pHalFunc->hal_get_tx_buff_rsvd_page_num != NULL) {
+               RsvdPageNum =
+                       pHalFunc->hal_get_tx_buff_rsvd_page_num(padapter, _TRUE);
+               DBG_871X("%s RsvdPageNUm: %d\n", __func__, RsvdPageNum);
+       } else {
+               DBG_871X("[Error]: %s, missing tx_buff_rsvd_page_num func!!\n",
+                               __func__);
+               return;
+       }
+       MaxRsvdPageBufSize = RsvdPageNum*PageSize;
+       DBG_871X("%s: RsvdPageNum:%d, PageSize:%d\n", __func__ , RsvdPageNum , PageSize);
 
 
-               // Clear CR[8] or beacon packet will not be send to TxBuf anymore.
-               v8 = rtw_read8(adapter, REG_CR+1);
-               v8 &= ~BIT(0); // ~ENSWBCN
-               rtw_write8(adapter, REG_CR+1, v8);
+       pcmdframe = rtw_alloc_cmdxmitframe(pxmitpriv);
+       if (pcmdframe == NULL) {
+               DBG_871X("%s: alloc ReservedPagePacket fail!\n", __func__);
+               return;
        }
 
        }
 
-_func_exit_;
+       ReservedPagePacket = pcmdframe->buf_addr;
+       _rtw_memset(&RsvdPageLoc, 0, sizeof(RSVDPAGE_LOC));
+
+       /* (1) beacon*/
+       BufIndex = TxDescOffset;
+       rtw_hal_construct_beacon(padapter, &ReservedPagePacket[BufIndex], &BeaconLength);
+
+       /* 
+       *When we count the first page size, we need to reserve description size for the RSVD
+       *packet, it will be filled in front of the packet in TXPKTBUF.
+       */
+       CurtPktPageNum = (u8)PageNum(TxDescLen + BeaconLength, PageSize);
+       /*If we don't add 1 more page, the WOWLAN function has a problem. Baron thinks it's a bug of firmware */
+       if (CurtPktPageNum == 1) 
+               CurtPktPageNum += 1;
+
+       TotalPageNum += CurtPktPageNum;
+
+       BufIndex += (CurtPktPageNum*PageSize);
+
+       /* (4) probe response*/
+       RsvdPageLoc.LocProbeRsp = TotalPageNum;
+       rtw_hal_construct_ProbeRsp(
+               padapter,
+               &ReservedPagePacket[BufIndex],
+               &ProbeRspLength,
+               get_my_bssid(&pmlmeinfo->network),
+               _FALSE);
+       rtw_hal_fill_fake_txdesc(padapter,
+                       &ReservedPagePacket[BufIndex-TxDescLen],
+                       ProbeRspLength, _FALSE, _FALSE, _FALSE);
+
+       DBG_871X("%s(): HW_VAR_SET_TX_CMD: PROBE RSP %p %d\n",
+               __func__, &ReservedPagePacket[BufIndex-TxDescLen],
+               (ProbeRspLength+TxDescLen));
+
+       CurtPktPageNum = (u8)PageNum(TxDescLen + BeaconLength, PageSize);
+
+       TotalPageNum += CurtPktPageNum;
+
+       BufIndex += (CurtPktPageNum*PageSize);
+
+       TotalPacketLen = BufIndex + ProbeRspLength;
+
+       if (TotalPacketLen > MaxRsvdPageBufSize) {
+               DBG_871X("%s(): ERROR: The rsvd page size is not enough !!TotalPacketLen %d, MaxRsvdPageBufSize %d\n",
+                               __func__ , TotalPacketLen , MaxRsvdPageBufSize);
+               goto error;
+       } else {
+               /* update attribute*/
+               pattrib = &pcmdframe->attrib;
+               update_mgntframe_attrib(padapter, pattrib);
+               pattrib->qsel = QSLT_BEACON;
+               pattrib->pktlen = TotalPacketLen - TxDescOffset;
+               pattrib->last_txcmdsz = TotalPacketLen - TxDescOffset;
+#ifdef CONFIG_PCI_HCI
+               dump_mgntframe(padapter, pcmdframe);
+#else
+               dump_mgntframe_and_wait(padapter, pcmdframe, 100);
+#endif
+       }
+
+       DBG_871X("%s: Set RSVD page location to Fw ,TotalPacketLen(%d), TotalPageNum(%d)\n" , __func__ , TotalPacketLen , TotalPageNum);
+       rtw_hal_set_ap_wow_rsvdpage_cmd(padapter, &RsvdPageLoc);
+       if (0)
+               dump_TX_FIFO(padapter , 8 , 512);
+
+       return;
+error:
+       rtw_free_xmitframe(pxmitpriv, pcmdframe);
 }
 }
-#endif //CONFIG_WOWLAN
+
+#endif /*CONFIG_AP_WOWLAN*/
+
+
 
 void SetHwReg(_adapter *adapter, u8 variable, u8 *val)
 {
 
 void SetHwReg(_adapter *adapter, u8 variable, u8 *val)
 {
@@ -5033,8 +4921,8 @@ _func_enter_;
        switch (variable) {
                case HW_VAR_INITIAL_GAIN:
                        {                               
        switch (variable) {
                case HW_VAR_INITIAL_GAIN:
                        {                               
-                               u32 rx_gain = ((u32 *)(val))[0];
-               
+                               u8 rx_gain = *((u8 *)(val));
+                               //printk("rx_gain:%x\n",rx_gain);
                                if(rx_gain == 0xff){//restore rx gain                                   
                                        //ODM_Write_DIG(podmpriv,pDigTable->BackupIGValue);
                                        odm_PauseDIG(odm, ODM_RESUME_DIG,rx_gain);
                                if(rx_gain == 0xff){//restore rx gain                                   
                                        //ODM_Write_DIG(podmpriv,pDigTable->BackupIGValue);
                                        odm_PauseDIG(odm, ODM_RESUME_DIG,rx_gain);
@@ -5055,7 +4943,7 @@ _func_enter_;
                        u8 rate_index = 0;
                        HAL_VERSION *hal_ver = &hal_data->VersionID;
 
                        u8 rate_index = 0;
                        HAL_VERSION *hal_ver = &hal_data->VersionID;
 
-                       if (IS_81XXC(*hal_ver) ||IS_92D(*hal_ver) || IS_8723_SERIES(*hal_ver) || IS_8188E(*hal_ver)) {
+                       if (IS_8188E(*hal_ver)) {
 
                                while (brate_cfg > 0x1) {
                                        brate_cfg = (brate_cfg >> 1);
 
                                while (brate_cfg > 0x1) {
                                        brate_cfg = (brate_cfg >> 1);
@@ -5114,13 +5002,7 @@ _func_enter_;
                        }
                        break;
                case HW_VAR_DM_FUNC_SET:
                        }
                        break;
                case HW_VAR_DM_FUNC_SET:
-                       if(*((u32*)val) == DYNAMIC_ALL_FUNC_ENABLE){
-                               struct dm_priv  *dm = &hal_data->dmpriv;
-                               dm->DMFlag = dm->InitDMFlag;
-                               odm->SupportAbility = dm->InitODMFlag;
-                       } else {
-                               odm->SupportAbility |= *((u32 *)val);
-                       }
+                       odm->SupportAbility |= *((u32 *)val);
                        break;
                case HW_VAR_DM_FUNC_CLR:
                        /*
                        break;
                case HW_VAR_DM_FUNC_CLR:
                        /*
@@ -5169,12 +5051,12 @@ _func_enter_;
                                if (IS_HARDWARE_TYPE_8723B(adapter))
                                        rtw_hal_backup_rate(adapter);
 
                                if (IS_HARDWARE_TYPE_8723B(adapter))
                                        rtw_hal_backup_rate(adapter);
 
-                               if (pHalFunc->hal_set_wowlan_fw != NULL)
-                                       pHalFunc->hal_set_wowlan_fw(adapter, _TRUE);
-                               else
-                                       DBG_871X("hal_set_wowlan_fw is null\n");
+                               rtw_hal_set_wowlan_fw(adapter, _TRUE);
 
 
-                               rtw_hal_download_rsvd_page(adapter, RT_MEDIA_CONNECT);
+                               media_status_rpt = RT_MEDIA_CONNECT;
+                               rtw_hal_set_hwreg(adapter,
+                                               HW_VAR_H2C_FW_JOINBSSRPT,
+                                               (u8 *)&media_status_rpt);
 
                                if (!pwrctl->wowlan_pno_enable) {
                                        psta = rtw_get_stainfo(&adapter->stapriv,
 
                                if (!pwrctl->wowlan_pno_enable) {
                                        psta = rtw_get_stainfo(&adapter->stapriv,
@@ -5204,7 +5086,10 @@ _func_enter_;
                                if (res == _FAIL)
                                        DBG_871X_LEVEL(_drv_always_, "[WARNING] enable cpwm2 fail\n");
 #endif
                                if (res == _FAIL)
                                        DBG_871X_LEVEL(_drv_always_, "[WARNING] enable cpwm2 fail\n");
 #endif
-
+#ifdef CONFIG_GPIO_WAKEUP
+                               rtw_hal_switch_gpio_wl_ctrl(adapter,
+                                               WAKEUP_GPIO_IDX, _TRUE);
+#endif
                                //Set WOWLAN H2C command.
                                DBG_871X_LEVEL(_drv_always_, "Set WOWLan cmd\n");
                                rtw_hal_set_fw_wow_related_cmd(adapter, 1);
                                //Set WOWLAN H2C command.
                                DBG_871X_LEVEL(_drv_always_, "Set WOWLan cmd\n");
                                rtw_hal_set_fw_wow_related_cmd(adapter, 1);
@@ -5223,9 +5108,15 @@ _func_enter_;
                                dump_cam_table(adapter);
 #endif
 #ifdef CONFIG_USB_HCI
                                dump_cam_table(adapter);
 #endif
 #ifdef CONFIG_USB_HCI
-                               if (adapter->intf_stop)
+                               if (adapter->intf_stop)         //free adapter's resource
                                        adapter->intf_stop(adapter);
 
                                        adapter->intf_stop(adapter);
 
+#ifdef CONFIG_CONCURRENT_MODE
+                                       if (rtw_buddy_adapter_up(adapter)) { //free buddy adapter's resource
+                                               adapter->pbuddy_adapter->intf_stop(adapter->pbuddy_adapter);
+                                       }
+#endif //CONFIG_CONCURRENT_MODE
+
                                /* Invoid SE0 reset signal during suspending*/
                                rtw_write8(adapter, REG_RSV_CTRL, 0x20);
                                rtw_write8(adapter, REG_RSV_CTRL, 0x60);
                                /* Invoid SE0 reset signal during suspending*/
                                rtw_write8(adapter, REG_RSV_CTRL, 0x20);
                                rtw_write8(adapter, REG_RSV_CTRL, 0x60);
@@ -5280,19 +5171,26 @@ _func_enter_;
                                        rtw_hal_update_gtk_offload_info(adapter);
 #endif //CONFIG_GTK_OL
 
                                        rtw_hal_update_gtk_offload_info(adapter);
 #endif //CONFIG_GTK_OL
 
-                               if (pHalFunc->hal_set_wowlan_fw != NULL)
-                                       pHalFunc->hal_set_wowlan_fw(adapter, _FALSE);
-                               else
-                                       DBG_871X("hal_set_wowlan_fw is null\n");
+                               rtw_hal_set_wowlan_fw(adapter, _FALSE);
+
 #ifdef CONFIG_GPIO_WAKEUP
 #ifdef CONFIG_GPIO_WAKEUP
-                               rtw_clear_hostwakeupgpio(adapter);
+                               DBG_871X_LEVEL(_drv_always_, "Set Wake GPIO to high for default.\n");
+                               rtw_hal_set_output_gpio(adapter, WAKEUP_GPIO_IDX, 1);
+                               rtw_hal_switch_gpio_wl_ctrl(adapter,
+                                               WAKEUP_GPIO_IDX, _FALSE);
 #endif
                                if((pwrctl->wowlan_wake_reason != FWDecisionDisconnect) &&
                                        (pwrctl->wowlan_wake_reason != Rx_Pairwisekey) &&
                                        (pwrctl->wowlan_wake_reason != Rx_DisAssoc) &&
                                        (pwrctl->wowlan_wake_reason != Rx_DeAuth)) {
 
 #endif
                                if((pwrctl->wowlan_wake_reason != FWDecisionDisconnect) &&
                                        (pwrctl->wowlan_wake_reason != Rx_Pairwisekey) &&
                                        (pwrctl->wowlan_wake_reason != Rx_DisAssoc) &&
                                        (pwrctl->wowlan_wake_reason != Rx_DeAuth)) {
 
-                                       rtw_hal_download_rsvd_page(adapter, RT_MEDIA_CONNECT);
+                                       //rtw_hal_download_rsvd_page(adapter, RT_MEDIA_CONNECT);
+
+                                       media_status_rpt = RT_MEDIA_CONNECT;
+                                       rtw_hal_set_hwreg(adapter,
+                                               HW_VAR_H2C_FW_JOINBSSRPT,
+                                               (u8 *)&media_status_rpt);
+
                                        if (psta != NULL) {
                                                media_status_rpt =
                                                        (u16)((psta->mac_id<<8)|RT_MEDIA_CONNECT);
                                        if (psta != NULL) {
                                                media_status_rpt =
                                                        (u16)((psta->mac_id<<8)|RT_MEDIA_CONNECT);
@@ -5308,10 +5206,175 @@ _func_enter_;
                }
                break;
 #endif //CONFIG_WOWLAN
                }
                break;
 #endif //CONFIG_WOWLAN
+#ifdef CONFIG_AP_WOWLAN
+               case HW_VAR_AP_WOWLAN:
+               {
+                       u8 trycnt = 100;
+                       struct wowlan_ioctl_param *poidparam;
+                       struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(adapter);
+                       struct security_priv *psecuritypriv = &adapter->securitypriv;
+                       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+                       struct hal_ops *pHalFunc = &adapter->HalFunc;
+                       struct sta_info *psta = NULL;
+                       int res;
+                       u16 media_status_rpt;
+                       u8 val8;
+
+                       poidparam = (struct wowlan_ioctl_param *) val;
+                       switch (poidparam->subcode) {
+                       case WOWLAN_AP_ENABLE:
+                               DBG_871X("%s, WOWLAN_AP_ENABLE\n", __func__);
+                               /* 1. Download WOWLAN FW*/
+                               DBG_871X_LEVEL(_drv_always_, "Re-download WoWlan FW!\n");
+#ifdef DBG_CHECK_FW_PS_STATE
+                               if (rtw_fw_ps_state(adapter) == _FAIL) {
+                                       pdbgpriv->dbg_enwow_dload_fw_fail_cnt++;
+                                       DBG_871X_LEVEL(_drv_always_, "wowlan enable no leave 32k\n");
+                               }
+#endif /*DBG_CHECK_FW_PS_STATE*/
+                               do {
+                                       if (rtw_read8(adapter, REG_HMETFR) == 0x00) {
+                                               DBG_871X_LEVEL(_drv_always_, "Ready to change FW.\n");
+                                               break;
+                                       }
+                                       rtw_msleep_os(10);
+                                       DBG_871X_LEVEL(_drv_always_, "trycnt: %d\n", (100-trycnt));
+                               } while (trycnt--);
+
+                               if (pHalFunc->hal_set_wowlan_fw != NULL)
+                                       pHalFunc->hal_set_wowlan_fw(adapter, _TRUE);
+                               else
+                                       DBG_871X("hal_set_wowlan_fw is null\n");
+
+                               /* 2. RX DMA stop*/
+                               DBG_871X_LEVEL(_drv_always_, "Pause DMA\n");
+                               trycnt = 100;
+                               rtw_write32(adapter , REG_RXPKT_NUM ,
+                                       (rtw_read32(adapter , REG_RXPKT_NUM)|RW_RELEASE_EN));
+                               do {
+                                       if ((rtw_read32(adapter, REG_RXPKT_NUM)&RXDMA_IDLE)) {
+                                               DBG_871X_LEVEL(_drv_always_ , "RX_DMA_IDLE is true\n");
+                                               /*if (Adapter->intf_stop)
+                                                       Adapter->intf_stop(Adapter);
+                                               */
+                                               break;
+                                       }
+                                       /* If RX_DMA is not idle, receive one pkt from DMA*/
+                                       DBG_871X_LEVEL(_drv_always_ , "RX_DMA_IDLE is not true\n");
+                               } while (trycnt--);
+
+                               if (trycnt == 0)
+                                       DBG_871X_LEVEL(_drv_always_ , "Stop RX DMA failed......\n");
+
+                               /* 5. Set Enable WOWLAN H2C command. */
+                               DBG_871X_LEVEL(_drv_always_, "Set Enable AP WOWLan cmd\n");
+                               if (pHalFunc->hal_set_ap_wowlan_cmd != NULL)
+                                       pHalFunc->hal_set_ap_wowlan_cmd(adapter, 1);
+                               else
+                                       DBG_871X("hal_set_ap_wowlan_cmd is null\n");
+               
+                               /* 6. add some delay for H2C cmd ready*/
+                               rtw_msleep_os(10);
+                               /* 7. enable AP power save*/
+
+                               rtw_write8(adapter, REG_MCUTST_WOWLAN, 0);
+
+                               if (adapter->intf_stop)
+                                       adapter->intf_stop(adapter);
+
+#ifdef CONFIG_USB_HCI 
+                               
+#ifdef CONFIG_CONCURRENT_MODE
+                               if (rtw_buddy_adapter_up(adapter)) { /*free buddy adapter's resource*/
+                                       adapter->pbuddy_adapter->intf_stop(adapter->pbuddy_adapter);
+                               }
+#endif /*CONFIG_CONCURRENT_MODE*/
+
+                               /* Invoid SE0 reset signal during suspending*/
+                               rtw_write8(adapter, REG_RSV_CTRL, 0x20);
+                               rtw_write8(adapter, REG_RSV_CTRL, 0x60);
+#endif /*CONFIG_USB_HCI*/
+                               break;
+                       case WOWLAN_AP_DISABLE:
+                               DBG_871X("%s, WOWLAN_AP_DISABLE\n", __func__);
+                               /* 1. Read wakeup reason*/
+                               pwrctl->wowlan_wake_reason =
+                                       rtw_read8(adapter, REG_MCUTST_WOWLAN);
+
+                               DBG_871X_LEVEL(_drv_always_, "wakeup_reason: 0x%02x\n",
+                                               pwrctl->wowlan_wake_reason);
+
+                               /* 2. disable AP power save*/
+                               if (pHalFunc->hal_set_ap_ps_wowlan_cmd != NULL)
+                                       pHalFunc->hal_set_ap_ps_wowlan_cmd(adapter, 0);
+                               else
+                                       DBG_871X("hal_set_ap_ps_wowlan_cmd is null\n");
+                               /* 3.  Set Disable WOWLAN H2C command.*/
+                               DBG_871X_LEVEL(_drv_always_, "Set Disable WOWLan cmd\n");
+                               if (pHalFunc->hal_set_ap_wowlan_cmd != NULL)
+                                       pHalFunc->hal_set_ap_wowlan_cmd(adapter, 0);
+                               else
+                                       DBG_871X("hal_set_ap_wowlan_cmd is null\n");
+                               /* 6. add some delay for H2C cmd ready*/
+                               rtw_msleep_os(2);
+#ifdef DBG_CHECK_FW_PS_STATE
+                               if (rtw_fw_ps_state(adapter) == _FAIL) {
+                                       pdbgpriv->dbg_diswow_dload_fw_fail_cnt++;
+                                       DBG_871X_LEVEL(_drv_always_, "wowlan enable no leave 32k\n");
+                               }
+#endif /*DBG_CHECK_FW_PS_STATE*/
+
+                               DBG_871X_LEVEL(_drv_always_, "Release RXDMA\n");
+
+                               rtw_write32(adapter, REG_RXPKT_NUM,
+                                       (rtw_read32(adapter , REG_RXPKT_NUM) & (~RW_RELEASE_EN)));
+
+                               do {
+                                       if (rtw_read8(adapter, REG_HMETFR) == 0x00) {
+                                               DBG_871X_LEVEL(_drv_always_, "Ready to change FW.\n");
+                                               break;
+                                       }
+                                       rtw_msleep_os(10);
+                                       DBG_871X_LEVEL(_drv_always_, "trycnt: %d\n", (100-trycnt));
+                               } while (trycnt--);
+
+                               if (pHalFunc->hal_set_wowlan_fw != NULL)
+                                       pHalFunc->hal_set_wowlan_fw(adapter, _FALSE);
+                               else
+                                       DBG_871X("hal_set_wowlan_fw is null\n");
+#ifdef CONFIG_GPIO_WAKEUP
+                               DBG_871X_LEVEL(_drv_always_, "Set Wake GPIO to high for default.\n");
+                               rtw_hal_set_output_gpio(adapter, WAKEUP_GPIO_IDX, 1);
+#endif
+
+#ifdef CONFIG_CONCURRENT_MODE
+                               if (rtw_buddy_adapter_up(adapter) == _TRUE &&
+                                       check_buddy_fwstate(adapter, WIFI_AP_STATE) == _TRUE) {
+                                       media_status_rpt = RT_MEDIA_CONNECT;
+                                       rtw_hal_set_hwreg(adapter->pbuddy_adapter , HW_VAR_H2C_FW_JOINBSSRPT , (u8 *)&media_status_rpt);
+                                       issue_beacon(adapter->pbuddy_adapter, 0);
+                               } else {
+                                       media_status_rpt = RT_MEDIA_CONNECT;
+                                       rtw_hal_set_hwreg(adapter , HW_VAR_H2C_FW_JOINBSSRPT , (u8 *)&media_status_rpt);
+                                       issue_beacon(adapter, 0);
+                               }
+#else
+                               media_status_rpt = RT_MEDIA_CONNECT;
+                               rtw_hal_set_hwreg(adapter , HW_VAR_H2C_FW_JOINBSSRPT , (u8 *)&media_status_rpt);
+                               issue_beacon(adapter , 0);
+#endif
+
+                               break;
+                       default:
+                               break;
+                       }
+               }
+                       break;
+#endif /*CONFIG_AP_WOWLAN*/
                default:
                        if (0)
                default:
                        if (0)
-                       DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" variable(%d) not defined!\n",
-                               FUNC_ADPT_ARG(adapter), variable);
+                               DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" variable(%d) not defined!\n",
+                                       FUNC_ADPT_ARG(adapter), variable);
                        break;
        }
 
                        break;
        }
 
@@ -5337,8 +5400,8 @@ _func_enter_;
                break;
        default:
                if (0)
                break;
        default:
                if (0)
-               DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" variable(%d) not defined!\n",
-                       FUNC_ADPT_ARG(adapter), variable);
+                       DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" variable(%d) not defined!\n",
+                               FUNC_ADPT_ARG(adapter), variable);
                break;
        }
 
                break;
        }
 
@@ -5390,49 +5453,6 @@ SetHalDefVar(_adapter *adapter, HAL_DEF_VARIABLE variable, void *value)
        case HW_DEF_ODM_DBG_LEVEL:
                ODM_CmnInfoUpdate(odm, ODM_CMNINFO_DBG_LEVEL, *((u4Byte*)value));
                break;
        case HW_DEF_ODM_DBG_LEVEL:
                ODM_CmnInfoUpdate(odm, ODM_CMNINFO_DBG_LEVEL, *((u4Byte*)value));
                break;
-       case HAL_DEF_DBG_DM_FUNC:
-       {
-               u8 dm_func = *((u8*)value);
-               struct dm_priv *dm = &hal_data->dmpriv;
-
-               if(dm_func == 0){ //disable all dynamic func
-                       pDIG_T  pDM_DigTable = &odm->DM_DigTable;
-                       odm->SupportAbility = DYNAMIC_FUNC_DISABLE;
-                       pDM_DigTable->bStopDIG = _TRUE;
-                       DBG_8192C("==> Disable all dynamic function...\n");
-               }
-               else if(dm_func == 1){//disable DIG
-                       pDIG_T  pDM_DigTable = &odm->DM_DigTable;
-                       odm->SupportAbility  &= (~DYNAMIC_BB_DIG);
-                       pDM_DigTable->bStopDIG = _TRUE;         
-                       DBG_8192C("==> Disable DIG...\n");
-               }
-               else if(dm_func == 2){//disable High power
-                       odm->SupportAbility  &= (~DYNAMIC_BB_DYNAMIC_TXPWR);
-               }
-               else if(dm_func == 3){//disable tx power tracking
-                       odm->SupportAbility  &= (~DYNAMIC_RF_CALIBRATION);
-                       DBG_8192C("==> Disable tx power tracking...\n");
-               }
-               else if(dm_func == 4){//disable BT coexistence
-                       dm->DMFlag &= (~DYNAMIC_FUNC_BT);
-               }
-               else if(dm_func == 5){//disable antenna diversity
-                       odm->SupportAbility  &= (~DYNAMIC_BB_ANT_DIV);
-               }
-               else if(dm_func == 6){//turn on all dynamic func
-                       if(!(odm->SupportAbility  & DYNAMIC_BB_DIG)) {
-                               DIG_T   *pDigTable = &odm->DM_DigTable;
-                               pDigTable->CurIGValue= rtw_read8(adapter, 0xc50);
-                               pDigTable->bStopDIG = _FALSE;
-                       }
-                       dm->DMFlag |= DYNAMIC_FUNC_BT;
-                       odm->SupportAbility = DYNAMIC_ALL_FUNC_ENABLE;
-
-                       DBG_8192C("==> Turn on all dynamic function...\n");
-               }
-       }
-               break;
        case HAL_DEF_DBG_DUMP_RXPKT:
                hal_data->bDumpRxPkt = *((u8*)value);
                break;
        case HAL_DEF_DBG_DUMP_RXPKT:
                hal_data->bDumpRxPkt = *((u8*)value);
                break;
@@ -5483,9 +5503,6 @@ GetHalDefVar(_adapter *adapter, HAL_DEF_VARIABLE variable, void *value)
                case HW_DEF_ODM_DBG_LEVEL:
                        *((u4Byte*)value) = odm->DebugLevel;
                        break;
                case HW_DEF_ODM_DBG_LEVEL:
                        *((u4Byte*)value) = odm->DebugLevel;
                        break;
-               case HAL_DEF_DBG_DM_FUNC:
-                       *(( u32*)value) =hal_data->odmpriv.SupportAbility;
-                       break;
                case HAL_DEF_DBG_DUMP_RXPKT:
                        *((u8*)value) = hal_data->bDumpRxPkt;
                        break;
                case HAL_DEF_DBG_DUMP_RXPKT:
                        *((u8*)value) = hal_data->bDumpRxPkt;
                        break;
@@ -5874,8 +5891,7 @@ void rtw_hal_check_rxfifo_full(_adapter *adapter)
        int save_cnt=_FALSE;
        
        //switch counter to RX fifo
        int save_cnt=_FALSE;
        
        //switch counter to RX fifo
-       if(IS_81XXC(pHalData->VersionID) || IS_92D(pHalData->VersionID) 
-               || IS_8188E(pHalData->VersionID) || IS_8723_SERIES(pHalData->VersionID)
+       if( IS_8188E(pHalData->VersionID)
                || IS_8812_SERIES(pHalData->VersionID) || IS_8821_SERIES(pHalData->VersionID)
                || IS_8723B_SERIES(pHalData->VersionID) || IS_8192E(pHalData->VersionID))
        {
                || IS_8812_SERIES(pHalData->VersionID) || IS_8821_SERIES(pHalData->VersionID)
                || IS_8723B_SERIES(pHalData->VersionID) || IS_8192E(pHalData->VersionID))
        {
@@ -6010,10 +6026,9 @@ void rtw_store_phy_info(_adapter *padapter, union recv_frame *prframe)
 }
 #endif
 
 }
 #endif
 
-#ifdef CONFIG_EFUSE_CONFIG_FILE
 int check_phy_efuse_tx_power_info_valid(PADAPTER padapter) {
 int check_phy_efuse_tx_power_info_valid(PADAPTER padapter) {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-       u8* pContent = pEEPROM->efuse_eeprom_data;
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
+       u8* pContent = pHalData->efuse_eeprom_data;
        int index = 0;
        u16 tx_index_offset = 0x0000;
 
        int index = 0;
        u16 tx_index_offset = 0x0000;
 
@@ -6027,21 +6042,25 @@ int check_phy_efuse_tx_power_info_valid(PADAPTER padapter) {
                case RTL8192E:
                        tx_index_offset = EEPROM_TX_PWR_INX_8192E;
                break;
                case RTL8192E:
                        tx_index_offset = EEPROM_TX_PWR_INX_8192E;
                break;
+               case RTL8821:
+                       tx_index_offset = EEPROM_TX_PWR_INX_8821;
+               break;
                default:
                        tx_index_offset = 0x0010;
                break;
        }
                default:
                        tx_index_offset = 0x0010;
                break;
        }
-       for (index = 0 ; index < 12 ; index++) {
+       for (index = 0 ; index < 11 ; index++) {
                if (pContent[tx_index_offset + index] == 0xFF) {
                        return _FALSE;
                } else {
                if (pContent[tx_index_offset + index] == 0xFF) {
                        return _FALSE;
                } else {
-                       DBG_871X("0x%02x ,", pContent[EEPROM_TX_PWR_INX_88E+index]);
+                       DBG_871X("0x%02x ,", pContent[tx_index_offset+index]);
                }
        }
        DBG_871X("\n");
        return _TRUE;
 }
 
                }
        }
        DBG_871X("\n");
        return _TRUE;
 }
 
+#ifdef CONFIG_EFUSE_CONFIG_FILE
 int check_phy_efuse_macaddr_info_valid(PADAPTER padapter) {
 
        u8 val = 0;
 int check_phy_efuse_macaddr_info_valid(PADAPTER padapter) {
 
        u8 val = 0;
@@ -6078,6 +6097,21 @@ int check_phy_efuse_macaddr_info_valid(PADAPTER padapter) {
                                DBG_871X("%s: interface is GSPI\n", __func__);
                        }
                break;
                                DBG_871X("%s: interface is GSPI\n", __func__);
                        }
                break;
+               case RTL8821:
+                       if (padapter->interface_type == RTW_USB) {
+                               addr_offset = EEPROM_MAC_ADDR_8821AU;
+                               DBG_871X("%s: interface is USB\n", __func__);
+                       } else if (padapter->interface_type == RTW_SDIO) {
+                               addr_offset = EEPROM_MAC_ADDR_8821AS;
+                               DBG_871X("%s: interface is SDIO\n", __func__);
+                       } else if (padapter->interface_type == RTW_PCIE) {
+                               addr_offset = EEPROM_MAC_ADDR_8821AE;
+                               DBG_871X("%s: interface is PCIE\n", __func__);
+                       } else if (padapter->interface_type == RTW_GSPI) {
+                               //addr_offset = EEPROM_MAC_ADDR_8723BS;
+                               DBG_871X("%s: interface is GSPI\n", __func__);
+                       }
+               break;
        }
 
        if (addr_offset == 0x0000) {
        }
 
        if (addr_offset == 0x0000) {
@@ -6103,8 +6137,8 @@ u32 Hal_readPGDataFromConfigFile(
        mm_segment_t fs;
        u8 temp[3];
        loff_t pos = 0;
        mm_segment_t fs;
        u8 temp[3];
        loff_t pos = 0;
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-       u8      *PROMContent = pEEPROM->efuse_eeprom_data;
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+       u8      *PROMContent = pHalData->efuse_eeprom_data;
 
        temp[2] = 0; // add end of string '\0'
 
 
        temp[2] = 0; // add end of string '\0'
 
@@ -6127,7 +6161,7 @@ u32 Hal_readPGDataFromConfigFile(
        }
 
        set_fs(fs);
        }
 
        set_fs(fs);
-       pEEPROM->bloadfile_fail_flag = _FALSE;
+       pHalData->bloadfile_fail_flag = _FALSE;
 
 #ifdef CONFIG_DEBUG
        DBG_871X("Efuse configure file:\n");
 
 #ifdef CONFIG_DEBUG
        DBG_871X("Efuse configure file:\n");
@@ -6153,11 +6187,11 @@ void Hal_ReadMACAddrFromFile(
        u8 source_addr[18];
        loff_t pos = 0;
        u32     curtime = rtw_get_current_time();
        u8 source_addr[18];
        loff_t pos = 0;
        u32     curtime = rtw_get_current_time();
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
        u8 *head, *end;
 
        _rtw_memset(source_addr, 0, 18);
        u8 *head, *end;
 
        _rtw_memset(source_addr, 0, 18);
-       _rtw_memset(pEEPROM->mac_addr, 0, ETH_ALEN);
+       _rtw_memset(pHalData->EEPROMMACAddr, 0, ETH_ALEN);
 
        fs = get_fs();
        set_fs(KERNEL_DS);
 
        fs = get_fs();
        set_fs(KERNEL_DS);
@@ -6174,7 +6208,7 @@ void Hal_ReadMACAddrFromFile(
                if (end && (*end == ':') )
                        *end = '\0';
 
                if (end && (*end == ':') )
                        *end = '\0';
 
-               pEEPROM->mac_addr[i] = simple_strtoul(head, NULL, 16 );
+               pHalData->EEPROMMACAddr[i] = simple_strtoul(head, NULL, 16 );
 
                if (end) {
                        end++;
 
                if (end) {
                        end++;
@@ -6183,29 +6217,29 @@ void Hal_ReadMACAddrFromFile(
        }
 
        set_fs(fs);
        }
 
        set_fs(fs);
-       pEEPROM->bloadmac_fail_flag = _FALSE;
+       pHalData->bloadmac_fail_flag = _FALSE;
 
 
-       if (rtw_check_invalid_mac_address(pEEPROM->mac_addr) == _TRUE) {
+       if (rtw_check_invalid_mac_address(pHalData->EEPROMMACAddr) == _TRUE) {
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33))
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33))
-               get_random_bytes(pEEPROM->mac_addr, ETH_ALEN);
-               pEEPROM->mac_addr[0] = 0x00;
-               pEEPROM->mac_addr[1] = 0xe0;
-               pEEPROM->mac_addr[2] = 0x4c;
+               get_random_bytes(pHalData->EEPROMMACAddr, ETH_ALEN);
+               pHalData->EEPROMMACAddr[0] = 0x00;
+               pHalData->EEPROMMACAddr[1] = 0xe0;
+               pHalData->EEPROMMACAddr[2] = 0x4c;
 #else
 #else
-               pEEPROM->mac_addr[0] = 0x00;
-               pEEPROM->mac_addr[1] = 0xe0;
-               pEEPROM->mac_addr[2] = 0x4c;
-               pEEPROM->mac_addr[3] = (u8)(curtime & 0xff) ;
-               pEEPROM->mac_addr[4] = (u8)((curtime>>8) & 0xff) ;
-               pEEPROM->mac_addr[5] = (u8)((curtime>>16) & 0xff) ;
+               pHalData->EEPROMMACAddr[0] = 0x00;
+               pHalData->EEPROMMACAddr[1] = 0xe0;
+               pHalData->EEPROMMACAddr[2] = 0x4c;
+               pHalData->EEPROMMACAddr[3] = (u8)(curtime & 0xff) ;
+               pHalData->EEPROMMACAddr[4] = (u8)((curtime>>8) & 0xff) ;
+               pHalData->EEPROMMACAddr[5] = (u8)((curtime>>16) & 0xff) ;
 #endif
                 DBG_871X("MAC Address from wifimac error is invalid, assign random MAC !!!\n");
        }
 
        DBG_871X("%s: Permanent Address = %02x-%02x-%02x-%02x-%02x-%02x\n",
 #endif
                 DBG_871X("MAC Address from wifimac error is invalid, assign random MAC !!!\n");
        }
 
        DBG_871X("%s: Permanent Address = %02x-%02x-%02x-%02x-%02x-%02x\n",
-                       __func__, pEEPROM->mac_addr[0], pEEPROM->mac_addr[1],
-                       pEEPROM->mac_addr[2], pEEPROM->mac_addr[3],
-                       pEEPROM->mac_addr[4], pEEPROM->mac_addr[5]);
+                       __func__, pHalData->EEPROMMACAddr[0], pHalData->EEPROMMACAddr[1],
+                       pHalData->EEPROMMACAddr[2], pHalData->EEPROMMACAddr[3],
+                       pHalData->EEPROMMACAddr[4], pHalData->EEPROMMACAddr[5]);
 }
 
 void Hal_GetPhyEfuseMACAddr(PADAPTER padapter, u8* mac_addr) {
 }
 
 void Hal_GetPhyEfuseMACAddr(PADAPTER padapter, u8* mac_addr) {
@@ -6243,6 +6277,21 @@ void Hal_GetPhyEfuseMACAddr(PADAPTER padapter, u8* mac_addr) {
                                DBG_871X("%s: interface is GSPI\n", __func__);
                        }
                break;
                                DBG_871X("%s: interface is GSPI\n", __func__);
                        }
                break;
+               case RTL8821:
+                       if (padapter->interface_type == RTW_USB) {
+                               addr_offset = EEPROM_MAC_ADDR_8821AU;
+                               DBG_871X("%s: interface is USB\n", __func__);
+                       } else if (padapter->interface_type == RTW_SDIO) {
+                               addr_offset = EEPROM_MAC_ADDR_8821AS;
+                               DBG_871X("%s: interface is SDIO\n", __func__);
+                       } else if (padapter->interface_type == RTW_PCIE) {
+                               addr_offset = EEPROM_MAC_ADDR_8821AE;
+                               DBG_871X("%s: interface is PCIE\n", __func__);
+                       } else if (padapter->interface_type == RTW_GSPI){
+                               //addr_offset = EEPROM_MAC_ADDR_8723BS;
+                               DBG_871X("%s: interface is GSPI\n", __func__);
+                       }
+               break;
        }
 
        rtw_efuse_map_read(padapter, addr_offset, ETH_ALEN, mac_addr);
        }
 
        rtw_efuse_map_read(padapter, addr_offset, ETH_ALEN, mac_addr);
@@ -6287,55 +6336,25 @@ u32 Array_kfreemap[] = {
 void rtw_bb_rf_gain_offset(_adapter *padapter)
 {
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
 void rtw_bb_rf_gain_offset(_adapter *padapter)
 {
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
-       u8              value = padapter->eeprompriv.EEPROMRFGainOffset;
+       u8              value = pHalData->EEPROMRFGainOffset;
        u8              tmp = 0x3e;
        u32     res,i=0;
        u4Byte     ArrayLen    = sizeof(Array_kfreemap)/sizeof(u32);
        pu4Byte    Array           = Array_kfreemap;
        u4Byte v1=0,v2=0,GainValue,target=0; 
        //DBG_871X("+%s value: 0x%02x+\n", __func__, value);
        u8              tmp = 0x3e;
        u32     res,i=0;
        u4Byte     ArrayLen    = sizeof(Array_kfreemap)/sizeof(u32);
        pu4Byte    Array           = Array_kfreemap;
        u4Byte v1=0,v2=0,GainValue,target=0; 
        //DBG_871X("+%s value: 0x%02x+\n", __func__, value);
-#if defined(CONFIG_RTL8723A)
-       if (value & BIT0) {
-               DBG_871X("Offset RF Gain.\n");
-               DBG_871X("Offset RF Gain.  padapter->eeprompriv.EEPROMRFGainVal=0x%x\n",padapter->eeprompriv.EEPROMRFGainVal);
-               if(padapter->eeprompriv.EEPROMRFGainVal != 0xff){
-                       res = rtw_hal_read_rfreg(padapter, RF_PATH_A, 0xd, 0xffffffff);
-                       DBG_871X("Offset RF Gain. reg 0xd=0x%x\n",res);
-                       res &= 0xfff87fff;
-
-                       res |= (padapter->eeprompriv.EEPROMRFGainVal & 0x0f)<< 15;
-                       DBG_871X("Offset RF Gain.        reg 0xd=0x%x\n",res);
-
-                       rtw_hal_write_rfreg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET_CCK, RF_GAIN_OFFSET_MASK, res);
-
-                       res = rtw_hal_read_rfreg(padapter, RF_PATH_A, 0xe, 0xffffffff);
-                       DBG_871X("Offset RF Gain. reg 0xe=0x%x\n",res);
-                       res &= 0xfffffff0;
-
-                       res |= (padapter->eeprompriv.EEPROMRFGainVal & 0x0f);
-                       DBG_871X("Offset RF Gain.        reg 0xe=0x%x\n",res);
-
-                       rtw_hal_write_rfreg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET_OFDM, RF_GAIN_OFFSET_MASK, res);
-               }
-               else
-               {
-                       DBG_871X("Offset RF Gain.  padapter->eeprompriv.EEPROMRFGainVal=0x%x    != 0xff, didn't run Kfree\n",padapter->eeprompriv.EEPROMRFGainVal);
-               }
-       } else {
-               DBG_871X("Using the default RF gain.\n");
-       }
-#elif defined(CONFIG_RTL8723B)
+#if defined(CONFIG_RTL8723B)
        if (value & BIT4) {
                DBG_871X("Offset RF Gain.\n");
        if (value & BIT4) {
                DBG_871X("Offset RF Gain.\n");
-               DBG_871X("Offset RF Gain.  padapter->eeprompriv.EEPROMRFGainVal=0x%x\n",padapter->eeprompriv.EEPROMRFGainVal);
+               DBG_871X("Offset RF Gain.  pHalData->EEPROMRFGainVal=0x%x\n",pHalData->EEPROMRFGainVal);
                
                
-               if(padapter->eeprompriv.EEPROMRFGainVal != 0xff){
+               if(pHalData->EEPROMRFGainVal != 0xff){
 
                        if(pHalData->ant_path == ODM_RF_PATH_A) {
 
                        if(pHalData->ant_path == ODM_RF_PATH_A) {
-                               GainValue=(padapter->eeprompriv.EEPROMRFGainVal & 0x0f);
+                               GainValue=(pHalData->EEPROMRFGainVal & 0x0f);
                                
                        } else {
                                
                        } else {
-                               GainValue=(padapter->eeprompriv.EEPROMRFGainVal & 0xf0)>>4;
+                               GainValue=(pHalData->EEPROMRFGainVal & 0xf0)>>4;
                        }
                        DBG_871X("Ant PATH_%d GainValue Offset = 0x%x\n",(pHalData->ant_path == ODM_RF_PATH_A) ? (ODM_RF_PATH_A) : (ODM_RF_PATH_B),GainValue);
                        
                        }
                        DBG_871X("Ant PATH_%d GainValue Offset = 0x%x\n",(pHalData->ant_path == ODM_RF_PATH_A) ? (ODM_RF_PATH_A) : (ODM_RF_PATH_B),GainValue);
                        
@@ -6350,7 +6369,7 @@ void rtw_bb_rf_gain_offset(_adapter *padapter)
                                                break;
                                 }
                        }        
                                                break;
                                 }
                        }        
-                       DBG_871X("padapter->eeprompriv.EEPROMRFGainVal=0x%x ,Gain offset Target Value=0x%x\n",padapter->eeprompriv.EEPROMRFGainVal,target);
+                       DBG_871X("pHalData->EEPROMRFGainVal=0x%x ,Gain offset Target Value=0x%x\n",pHalData->EEPROMRFGainVal,target);
 
                        res = rtw_hal_read_rfreg(padapter, RF_PATH_A, 0x7f, 0xffffffff);
                        DBG_871X("Offset RF Gain. before reg 0x7f=0x%08x\n",res);
 
                        res = rtw_hal_read_rfreg(padapter, RF_PATH_A, 0x7f, 0xffffffff);
                        DBG_871X("Offset RF Gain. before reg 0x7f=0x%08x\n",res);
@@ -6361,7 +6380,7 @@ void rtw_bb_rf_gain_offset(_adapter *padapter)
                        
                }else {
 
                        
                }else {
 
-                       DBG_871X("Offset RF Gain.  padapter->eeprompriv.EEPROMRFGainVal=0x%x    != 0xff, didn't run Kfree\n",padapter->eeprompriv.EEPROMRFGainVal);
+                       DBG_871X("Offset RF Gain.  pHalData->EEPROMRFGainVal=0x%x       != 0xff, didn't run Kfree\n",pHalData->EEPROMRFGainVal);
                }
        } else {
                DBG_871X("Using the default RF gain.\n");
                }
        } else {
                DBG_871X("Using the default RF gain.\n");
@@ -6371,16 +6390,16 @@ void rtw_bb_rf_gain_offset(_adapter *padapter)
        if (value & BIT4) {
                DBG_871X("8188ES Offset RF Gain.\n");
                DBG_871X("8188ES Offset RF Gain. EEPROMRFGainVal=0x%x\n",
        if (value & BIT4) {
                DBG_871X("8188ES Offset RF Gain.\n");
                DBG_871X("8188ES Offset RF Gain. EEPROMRFGainVal=0x%x\n",
-                               padapter->eeprompriv.EEPROMRFGainVal);
+                               pHalData->EEPROMRFGainVal);
 
 
-               if (padapter->eeprompriv.EEPROMRFGainVal != 0xff) {
+               if (pHalData->EEPROMRFGainVal != 0xff) {
                        res = rtw_hal_read_rfreg(padapter, RF_PATH_A,
                                        REG_RF_BB_GAIN_OFFSET, 0xffffffff);
 
                        DBG_871X("Offset RF Gain. reg 0x55=0x%x\n",res);
                        res &= 0xfff87fff;
 
                        res = rtw_hal_read_rfreg(padapter, RF_PATH_A,
                                        REG_RF_BB_GAIN_OFFSET, 0xffffffff);
 
                        DBG_871X("Offset RF Gain. reg 0x55=0x%x\n",res);
                        res &= 0xfff87fff;
 
-                       res |= (padapter->eeprompriv.EEPROMRFGainVal & 0x0f) << 15;
+                       res |= (pHalData->EEPROMRFGainVal & 0x0f) << 15;
                        DBG_871X("Offset RF Gain. res=0x%x\n",res);
 
                        rtw_hal_write_rfreg(padapter, RF_PATH_A,
                        DBG_871X("Offset RF Gain. res=0x%x\n",res);
 
                        rtw_hal_write_rfreg(padapter, RF_PATH_A,
@@ -6388,7 +6407,7 @@ void rtw_bb_rf_gain_offset(_adapter *padapter)
                                        RF_GAIN_OFFSET_MASK, res);
                } else {
                        DBG_871X("Offset RF Gain. EEPROMRFGainVal=0x%x == 0xff, didn't run Kfree\n",
                                        RF_GAIN_OFFSET_MASK, res);
                } else {
                        DBG_871X("Offset RF Gain. EEPROMRFGainVal=0x%x == 0xff, didn't run Kfree\n",
-                                       padapter->eeprompriv.EEPROMRFGainVal);
+                                       pHalData->EEPROMRFGainVal);
                }
        } else {
                DBG_871X("Using the default RF gain.\n");
                }
        } else {
                DBG_871X("Using the default RF gain.\n");
@@ -6408,12 +6427,53 @@ void rtw_bb_rf_gain_offset(_adapter *padapter)
 }
 #endif //CONFIG_RF_GAIN_OFFSET
 
 }
 #endif //CONFIG_RF_GAIN_OFFSET
 
+#ifdef CONFIG_USB_RX_AGGREGATION       
+void rtw_set_usb_agg_by_mode(_adapter *padapter, u8 cur_wireless_mode)
+{
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+       if(cur_wireless_mode < WIRELESS_11_24N 
+               && cur_wireless_mode > 0) //ABG mode
+       {
+               if(0x6 != pHalData->RegAcUsbDmaSize || 0x10 !=pHalData->RegAcUsbDmaTime)
+               {
+                       pHalData->RegAcUsbDmaSize = 0x6;
+                       pHalData->RegAcUsbDmaTime = 0x10;
+                       rtw_write16(padapter, REG_RXDMA_AGG_PG_TH,
+                               pHalData->RegAcUsbDmaSize | (pHalData->RegAcUsbDmaTime<<8));
+               }
+                                       
+       }
+       else if(cur_wireless_mode >= WIRELESS_11_24N
+                       && cur_wireless_mode <= WIRELESS_MODE_MAX)//N AC mode
+       {
+               if(0x5 != pHalData->RegAcUsbDmaSize || 0x20 !=pHalData->RegAcUsbDmaTime)
+               {
+                       pHalData->RegAcUsbDmaSize = 0x5;
+                       pHalData->RegAcUsbDmaTime = 0x20;
+                       rtw_write16(padapter, REG_RXDMA_AGG_PG_TH,
+                               pHalData->RegAcUsbDmaSize | (pHalData->RegAcUsbDmaTime<<8));
+               }
+
+       }
+       else
+       {
+               /* DBG_871X("%s: Unknow wireless mode(0x%x)\n",__func__,padapter->mlmeextpriv.cur_wireless_mode); */
+       }
+}
+#endif //CONFIG_USB_RX_AGGREGATION
+
 //To avoid RX affect TX throughput
 void dm_DynamicUsbTxAgg(_adapter *padapter, u8 from_timer)
 {
        struct dvobj_priv       *pdvobjpriv = adapter_to_dvobj(padapter);
        struct mlme_priv                *pmlmepriv = &(padapter->mlmepriv);
 //To avoid RX affect TX throughput
 void dm_DynamicUsbTxAgg(_adapter *padapter, u8 from_timer)
 {
        struct dvobj_priv       *pdvobjpriv = adapter_to_dvobj(padapter);
        struct mlme_priv                *pmlmepriv = &(padapter->mlmepriv);
+       struct mlme_ext_priv    *pmlmeextpriv = &(padapter->mlmeextpriv);
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+       u8 cur_wireless_mode = pmlmeextpriv->cur_wireless_mode;
+#ifdef CONFIG_CONCURRENT_MODE
+       struct mlme_ext_priv    *pbuddymlmeextpriv = &(padapter->pbuddy_adapter->mlmeextpriv);
+#endif //CONFIG_CONCURRENT_MODE
+
 #ifdef CONFIG_USB_RX_AGGREGATION       
        if(IS_HARDWARE_TYPE_8821U(padapter) )//|| IS_HARDWARE_TYPE_8192EU(padapter))
        {
 #ifdef CONFIG_USB_RX_AGGREGATION       
        if(IS_HARDWARE_TYPE_8821U(padapter) )//|| IS_HARDWARE_TYPE_8192EU(padapter))
        {
@@ -6421,13 +6481,33 @@ void dm_DynamicUsbTxAgg(_adapter *padapter, u8 from_timer)
                if((pHalData->UsbRxAggMode == USB_RX_AGG_USB) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
                {
                        if(pdvobjpriv->traffic_stat.cur_tx_tp > 2 && pdvobjpriv->traffic_stat.cur_rx_tp < 30)
                if((pHalData->UsbRxAggMode == USB_RX_AGG_USB) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
                {
                        if(pdvobjpriv->traffic_stat.cur_tx_tp > 2 && pdvobjpriv->traffic_stat.cur_rx_tp < 30)
-                               rtw_write16(padapter, REG_RXDMA_AGG_PG_TH,0x1003);
+                               rtw_write16(padapter , REG_RXDMA_AGG_PG_TH , 0x1010);
                        else
                                rtw_write16(padapter, REG_RXDMA_AGG_PG_TH,0x2005); //dmc agg th 20K
                        
                        //DBG_871X("TX_TP=%u, RX_TP=%u \n", pdvobjpriv->traffic_stat.cur_tx_tp, pdvobjpriv->traffic_stat.cur_rx_tp);
                }
        }
                        else
                                rtw_write16(padapter, REG_RXDMA_AGG_PG_TH,0x2005); //dmc agg th 20K
                        
                        //DBG_871X("TX_TP=%u, RX_TP=%u \n", pdvobjpriv->traffic_stat.cur_tx_tp, pdvobjpriv->traffic_stat.cur_rx_tp);
                }
        }
+       else if(IS_HARDWARE_TYPE_8812(padapter))
+       {
+#ifdef CONFIG_CONCURRENT_MODE
+               if(rtw_linked_check(padapter) == _TRUE && rtw_linked_check(padapter->pbuddy_adapter) == _TRUE)
+               {
+                       if(pbuddymlmeextpriv->cur_wireless_mode >= pmlmeextpriv->cur_wireless_mode)
+                               cur_wireless_mode = pbuddymlmeextpriv->cur_wireless_mode;
+                       else
+                               cur_wireless_mode = pmlmeextpriv->cur_wireless_mode;
+
+                       rtw_set_usb_agg_by_mode(padapter,cur_wireless_mode);
+               }
+               else if (rtw_linked_check(padapter) == _TRUE && rtw_linked_check(padapter->pbuddy_adapter) == _FALSE)
+               {
+                       rtw_set_usb_agg_by_mode(padapter,cur_wireless_mode);
+               }
+#else //!CONFIG_CONCURRENT_MODE
+               rtw_set_usb_agg_by_mode(padapter,cur_wireless_mode);
+#endif //CONFIG_CONCURRENT_MODE
+       }
 #endif
 }
 
 #endif
 }
 
@@ -6460,7 +6540,7 @@ inline u8 rtw_hal_busagg_qsel_check(_adapter *padapter,u8 pre_qsel,u8 next_qsel)
  * Input:
  * adapter: adapter pointer.
  * page_num: The max. page number that user want to dump. 
  * Input:
  * adapter: adapter pointer.
  * page_num: The max. page number that user want to dump. 
- * page_size: page size of each page. eg. 128 bytes, 256 bytes.
+ * page_size: page size of each page. eg. 128 bytes, 256 bytes, 512byte.
  */
 void dump_TX_FIFO(_adapter* padapter, u8 page_num, u16 page_size){
 
  */
 void dump_TX_FIFO(_adapter* padapter, u8 page_num, u16 page_size){
 
@@ -6475,7 +6555,7 @@ void dump_TX_FIFO(_adapter* padapter, u8 page_num, u16 page_size){
                return;
        }
 
                return;
        }
 
-       if (page_size < 128 || page_size > 256) {
+       if (page_size < 128 || page_size > 512) {
                DBG_871X("!!%s: incorrect input page_size paramter!\n", __func__);
                return;
        }
                DBG_871X("!!%s: incorrect input page_size paramter!\n", __func__);
                return;
        }
@@ -6523,7 +6603,7 @@ u8 rtw_hal_get_gpio(_adapter* adapter, u8 gpio_num)
        return value;
 }
 
        return value;
 }
 
-int  rtw_hal_set_gpio_output_value(_adapter* adapter, u8 gpio_num, BOOLEAN isHigh)
+int  rtw_hal_set_gpio_output_value(_adapter* adapter, u8 gpio_num, bool isHigh)
 {
        u8 direction = 0;
        u8 res = -1;
 {
        u8 direction = 0;
        u8 res = -1;
@@ -6564,7 +6644,7 @@ int  rtw_hal_set_gpio_output_value(_adapter* adapter, u8 gpio_num, BOOLEAN isHig
        return res;
 }
 
        return res;
 }
 
-int rtw_hal_config_gpio(_adapter* adapter, u8 gpio_num, BOOLEAN isOutput)
+int rtw_hal_config_gpio(_adapter* adapter, u8 gpio_num, bool isOutput)
 {
        if (IS_HARDWARE_TYPE_8188E(adapter)){
                if( gpio_num > 7 || gpio_num < 4)
 {
        if (IS_HARDWARE_TYPE_8188E(adapter)){
                if( gpio_num > 7 || gpio_num < 4)
@@ -6593,5 +6673,414 @@ int rtw_hal_config_gpio(_adapter* adapter, u8 gpio_num, BOOLEAN isOutput)
 
        return 0;
 }
 
        return 0;
 }
+int rtw_hal_register_gpio_interrupt(_adapter* adapter, int gpio_num, void(*callback)(u8 level))
+{
+       u8 value;
+       u8 direction;
+       PHAL_DATA_TYPE phal = GET_HAL_DATA(adapter);
+
+       if (IS_HARDWARE_TYPE_8188E(adapter)){   
+               if(gpio_num > 7 || gpio_num < 4)
+               {
+                       DBG_871X_LEVEL(_drv_always_, "%s The gpio number does not included 4~7.\n",__FUNCTION__);
+                       return -1;
+               }
+       }
+
+       rtw_ps_deny(adapter, PS_DENY_IOCTL);
+
+       LeaveAllPowerSaveModeDirect(adapter);
+
+       /* Read GPIO direction */
+       direction = (rtw_read8(adapter,REG_GPIO_PIN_CTRL + 2) & BIT(gpio_num)) >> gpio_num;
+       if(direction){
+               DBG_871X_LEVEL(_drv_always_, "%s Can't register output gpio as interrupt.\n",__FUNCTION__);
+               return -1;
+       }
+
+       /* Config GPIO Mode */
+       rtw_write8(adapter, REG_GPIO_PIN_CTRL + 3, rtw_read8(adapter, REG_GPIO_PIN_CTRL + 3) | BIT(gpio_num));  
+
+       /* Register GPIO interrupt handler*/
+       adapter->gpiointpriv.callback[gpio_num] = callback;
+       
+       /* Set GPIO interrupt mode, 0:positive edge, 1:negative edge */
+       value = rtw_read8(adapter, REG_GPIO_PIN_CTRL) & BIT(gpio_num);
+       adapter->gpiointpriv.interrupt_mode = rtw_read8(adapter, REG_HSIMR + 2)^value;
+       rtw_write8(adapter, REG_GPIO_INTM, adapter->gpiointpriv.interrupt_mode);
+       
+       /* Enable GPIO interrupt */
+       adapter->gpiointpriv.interrupt_enable_mask = rtw_read8(adapter, REG_HSIMR + 2) | BIT(gpio_num);
+       rtw_write8(adapter, REG_HSIMR + 2, adapter->gpiointpriv.interrupt_enable_mask);
+
+       rtw_hal_update_hisr_hsisr_ind(adapter, 1);
+       
+       rtw_ps_deny_cancel(adapter, PS_DENY_IOCTL);
+
+       return 0;
+}
+int rtw_hal_disable_gpio_interrupt(_adapter* adapter, int gpio_num)
+{
+       u8 value;
+       u8 direction;
+       PHAL_DATA_TYPE phal = GET_HAL_DATA(adapter);
+
+       if (IS_HARDWARE_TYPE_8188E(adapter)){
+               if(gpio_num > 7 || gpio_num < 4)
+               {
+                       DBG_871X("%s The gpio number does not included 4~7.\n",__FUNCTION__);
+                       return -1;
+               }
+       }
+
+       rtw_ps_deny(adapter, PS_DENY_IOCTL);
 
 
+       LeaveAllPowerSaveModeDirect(adapter);
+
+       /* Config GPIO Mode */
+       rtw_write8(adapter, REG_GPIO_PIN_CTRL + 3, rtw_read8(adapter, REG_GPIO_PIN_CTRL + 3) &~ BIT(gpio_num)); 
+
+       /* Unregister GPIO interrupt handler*/
+       adapter->gpiointpriv.callback[gpio_num] = NULL;
+
+       /* Reset GPIO interrupt mode, 0:positive edge, 1:negative edge */
+       adapter->gpiointpriv.interrupt_mode = rtw_read8(adapter, REG_GPIO_INTM) &~ BIT(gpio_num);
+       rtw_write8(adapter, REG_GPIO_INTM, 0x00);
+       
+       /* Disable GPIO interrupt */
+       adapter->gpiointpriv.interrupt_enable_mask = rtw_read8(adapter, REG_HSIMR + 2) &~ BIT(gpio_num);
+       rtw_write8(adapter, REG_HSIMR + 2, adapter->gpiointpriv.interrupt_enable_mask);
+
+       if(!adapter->gpiointpriv.interrupt_enable_mask)
+               rtw_hal_update_hisr_hsisr_ind(adapter, 0);
+       
+       rtw_ps_deny_cancel(adapter, PS_DENY_IOCTL);
+
+       return 0;
+}
+#endif
+
+void rtw_dump_mac_rx_counters(_adapter* padapter,struct dbg_rx_counter *rx_counter)
+{
+       u32     mac_cck_ok=0, mac_ofdm_ok=0, mac_ht_ok=0, mac_vht_ok=0;
+       u32     mac_cck_err=0, mac_ofdm_err=0, mac_ht_err=0, mac_vht_err=0;
+       u32     mac_cck_fa=0, mac_ofdm_fa=0, mac_ht_fa=0;
+       u32     DropPacket=0;
+       
+       if(!rx_counter){
+               rtw_warn_on(1);
+               return;
+       }
+
+       PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT28|BIT29|BIT30|BIT31, 0x3);
+       mac_cck_ok      = PHY_QueryMacReg(padapter, REG_RXERR_RPT, bMaskLWord);// [15:0]          
+       PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT28|BIT29|BIT30|BIT31, 0x0);
+       mac_ofdm_ok     = PHY_QueryMacReg(padapter, REG_RXERR_RPT, bMaskLWord);// [15:0]         
+       PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT28|BIT29|BIT30|BIT31, 0x6);
+       mac_ht_ok       = PHY_QueryMacReg(padapter, REG_RXERR_RPT, bMaskLWord);// [15:0]        
+       mac_vht_ok      = 0;    
+       if (IS_HARDWARE_TYPE_JAGUAR(padapter) || IS_HARDWARE_TYPE_JAGUAR2(padapter)) {
+               PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT28|BIT29|BIT30|BIT31, 0x0);
+               PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT26, 0x1);
+               mac_vht_ok      = PHY_QueryMacReg(padapter, REG_RXERR_RPT, bMaskLWord);// [15:0]         
+       }       
+               
+       PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT28|BIT29|BIT30|BIT31, 0x4);
+       mac_cck_err     = PHY_QueryMacReg(padapter, REG_RXERR_RPT, bMaskLWord);// [15:0]        
+       PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT28|BIT29|BIT30|BIT31, 0x1);
+       mac_ofdm_err    = PHY_QueryMacReg(padapter, REG_RXERR_RPT, bMaskLWord);// [15:0]        
+       PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT28|BIT29|BIT30|BIT31, 0x7);
+       mac_ht_err      = PHY_QueryMacReg(padapter, REG_RXERR_RPT, bMaskLWord);// [15:0]                
+       mac_vht_err     = 0;
+       if (IS_HARDWARE_TYPE_JAGUAR(padapter) || IS_HARDWARE_TYPE_JAGUAR2(padapter)) {
+               PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT28|BIT29|BIT30|BIT31, 0x1);
+               PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT26, 0x1);
+               mac_vht_err     = PHY_QueryMacReg(padapter, REG_RXERR_RPT, bMaskLWord);// [15:0]         
+       }
+
+       PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT28|BIT29|BIT30|BIT31, 0x5);
+       mac_cck_fa      = PHY_QueryMacReg(padapter, REG_RXERR_RPT, bMaskLWord);// [15:0]        
+       PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT28|BIT29|BIT30|BIT31, 0x2);
+       mac_ofdm_fa     = PHY_QueryMacReg(padapter, REG_RXERR_RPT, bMaskLWord);// [15:0]        
+       PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT28|BIT29|BIT30|BIT31, 0x9);
+       mac_ht_fa       = PHY_QueryMacReg(padapter, REG_RXERR_RPT, bMaskLWord);// [15:0]                
+       
+       //Mac_DropPacket
+       rtw_write32(padapter, REG_RXERR_RPT, (rtw_read32(padapter, REG_RXERR_RPT)& 0x0FFFFFFF)| Mac_DropPacket);
+       DropPacket = rtw_read32(padapter, REG_RXERR_RPT)& 0x0000FFFF;
+
+       rx_counter->rx_pkt_ok = mac_cck_ok+mac_ofdm_ok+mac_ht_ok+mac_vht_ok;
+       rx_counter->rx_pkt_crc_error = mac_cck_err+mac_ofdm_err+mac_ht_err+mac_vht_err;
+       rx_counter->rx_cck_fa = mac_cck_fa;
+       rx_counter->rx_ofdm_fa = mac_ofdm_fa;
+       rx_counter->rx_ht_fa = mac_ht_fa;
+       rx_counter->rx_pkt_drop = DropPacket;
+}
+void rtw_reset_mac_rx_counters(_adapter* padapter)
+{
+       //reset mac counter
+       PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT27, 0x1); 
+       PHY_SetMacReg(padapter, REG_RXERR_RPT, BIT27, 0x0);
+}
+
+void rtw_dump_phy_rx_counters(_adapter* padapter,struct dbg_rx_counter *rx_counter)
+{
+       u32 cckok=0,cckcrc=0,ofdmok=0,ofdmcrc=0,htok=0,htcrc=0,OFDM_FA=0,CCK_FA=0,vht_ok=0,vht_err=0;
+       if(!rx_counter){
+               rtw_warn_on(1);
+               return;
+       }
+       if (IS_HARDWARE_TYPE_JAGUAR(padapter) || IS_HARDWARE_TYPE_JAGUAR2(padapter)){
+               cckok   = PHY_QueryBBReg(padapter, 0xF04, 0x3FFF);           // [13:0] 
+               ofdmok  = PHY_QueryBBReg(padapter, 0xF14, 0x3FFF);           // [13:0] 
+               htok            = PHY_QueryBBReg(padapter, 0xF10, 0x3FFF);     // [13:0]
+               vht_ok  = PHY_QueryBBReg(padapter, 0xF0C, 0x3FFF);     // [13:0]
+               cckcrc  = PHY_QueryBBReg(padapter, 0xF04, 0x3FFF0000); // [29:16]       
+               ofdmcrc = PHY_QueryBBReg(padapter, 0xF14, 0x3FFF0000); // [29:16]
+               htcrc   = PHY_QueryBBReg(padapter, 0xF10, 0x3FFF0000); // [29:16]
+               vht_err = PHY_QueryBBReg(padapter, 0xF0C, 0x3FFF0000); // [29:16]
+               CCK_FA  = PHY_QueryBBReg(padapter, 0xA5C, bMaskLWord);
+               OFDM_FA = PHY_QueryBBReg(padapter, 0xF48, bMaskLWord);
+       } 
+       else
+       {
+               cckok   = PHY_QueryBBReg(padapter, 0xF88, bMaskDWord);
+               ofdmok  = PHY_QueryBBReg(padapter, 0xF94, bMaskLWord);
+               htok            = PHY_QueryBBReg(padapter, 0xF90, bMaskLWord);
+               vht_ok  = 0;
+               cckcrc  = PHY_QueryBBReg(padapter, 0xF84, bMaskDWord);
+               ofdmcrc = PHY_QueryBBReg(padapter, 0xF94, bMaskHWord);
+               htcrc   = PHY_QueryBBReg(padapter, 0xF90, bMaskHWord);
+               vht_err = 0;
+               OFDM_FA = PHY_QueryBBReg(padapter, 0xCF0, bMaskLWord) + PHY_QueryBBReg(padapter, 0xCF2, bMaskLWord) +
+                       PHY_QueryBBReg(padapter, 0xDA2, bMaskLWord) + PHY_QueryBBReg(padapter, 0xDA4, bMaskLWord) +
+                       PHY_QueryBBReg(padapter, 0xDA6, bMaskLWord) + PHY_QueryBBReg(padapter, 0xDA8, bMaskLWord);
+       
+               CCK_FA=(rtw_read8(padapter, 0xA5B )<<8 ) | (rtw_read8(padapter, 0xA5C));
+       }
+       
+       rx_counter->rx_pkt_ok = cckok+ofdmok+htok+vht_ok;
+       rx_counter->rx_pkt_crc_error = cckcrc+ofdmcrc+htcrc+vht_err;
+       rx_counter->rx_ofdm_fa = OFDM_FA;
+       rx_counter->rx_cck_fa = CCK_FA;
+       
+}
+
+void rtw_reset_phy_rx_counters(_adapter* padapter)
+{
+       //reset phy counter
+       if (IS_HARDWARE_TYPE_JAGUAR(padapter) || IS_HARDWARE_TYPE_JAGUAR2(padapter))
+       {
+               PHY_SetBBReg(padapter, 0xB58, BIT0, 0x1);
+               PHY_SetBBReg(padapter, 0xB58, BIT0, 0x0);
+
+               PHY_SetBBReg(padapter, 0x9A4, BIT17, 0x1);//reset  OFDA FA counter
+               PHY_SetBBReg(padapter, 0x9A4, BIT17, 0x0);
+                       
+               PHY_SetBBReg(padapter, 0xA2C, BIT15, 0x0);//reset  CCK FA counter
+               PHY_SetBBReg(padapter, 0xA2C, BIT15, 0x1);
+       }
+       else
+       {
+               PHY_SetBBReg(padapter, 0xF14, BIT16, 0x1);
+               rtw_msleep_os(10);
+               PHY_SetBBReg(padapter, 0xF14, BIT16, 0x0);
+               
+               PHY_SetBBReg(padapter, 0xD00, BIT27, 0x1);//reset  OFDA FA counter
+               PHY_SetBBReg(padapter, 0xC0C, BIT31, 0x1);//reset  OFDA FA counter
+               PHY_SetBBReg(padapter, 0xD00, BIT27, 0x0);
+               PHY_SetBBReg(padapter, 0xC0C, BIT31, 0x0);
+                       
+               PHY_SetBBReg(padapter, 0xA2C, BIT15, 0x0);//reset  CCK FA counter
+               PHY_SetBBReg(padapter, 0xA2C, BIT15, 0x1);
+       }
+}
+#ifdef DBG_RX_COUNTER_DUMP
+void rtw_dump_drv_rx_counters(_adapter* padapter,struct dbg_rx_counter *rx_counter)
+{
+       struct recv_priv *precvpriv = &padapter->recvpriv;
+       if(!rx_counter){
+               rtw_warn_on(1);
+               return;
+       }
+       rx_counter->rx_pkt_ok = padapter->drv_rx_cnt_ok;
+       rx_counter->rx_pkt_crc_error = padapter->drv_rx_cnt_crcerror;
+       rx_counter->rx_pkt_drop = precvpriv->rx_drop - padapter->drv_rx_cnt_drop;       
+}
+void rtw_reset_drv_rx_counters(_adapter* padapter)
+{
+       struct recv_priv *precvpriv = &padapter->recvpriv;
+       padapter->drv_rx_cnt_ok = 0;
+       padapter->drv_rx_cnt_crcerror = 0;
+       padapter->drv_rx_cnt_drop = precvpriv->rx_drop;
+}
+void rtw_dump_phy_rxcnts_preprocess(_adapter* padapter,u8 rx_cnt_mode)
+{
+       u8 initialgain;
+       HAL_DATA_TYPE *hal_data = GET_HAL_DATA(padapter);
+       DM_ODM_T *odm = &(hal_data->odmpriv);
+       DIG_T   *pDigTable = &odm->DM_DigTable;
+       
+       if((!(padapter->dump_rx_cnt_mode& DUMP_PHY_RX_COUNTER)) && (rx_cnt_mode & DUMP_PHY_RX_COUNTER))
+       {
+               initialgain = pDigTable->CurIGValue;
+               DBG_871X("%s CurIGValue:0x%02x\n",__FUNCTION__,initialgain);
+               rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
+               //disable dynamic functions, such as high power, DIG
+               Save_DM_Func_Flag(padapter);
+               Switch_DM_Func(padapter, ~(ODM_BB_DIG|ODM_BB_FA_CNT), _FALSE);
+       }
+       else if((padapter->dump_rx_cnt_mode& DUMP_PHY_RX_COUNTER) &&(!(rx_cnt_mode & DUMP_PHY_RX_COUNTER )))
+       {
+               //turn on phy-dynamic functions
+               Restore_DM_Func_Flag(padapter);                 
+               initialgain = 0xff; //restore RX GAIN
+               rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain)); 
+               
+       }
+}
+       
+void rtw_dump_rx_counters(_adapter* padapter)
+{
+       struct dbg_rx_counter rx_counter;
+
+       if( padapter->dump_rx_cnt_mode & DUMP_DRV_RX_COUNTER ){
+               _rtw_memset(&rx_counter,0,sizeof(struct dbg_rx_counter));
+               rtw_dump_drv_rx_counters(padapter,&rx_counter);
+               DBG_871X( "Drv Received packet OK:%d CRC error:%d Drop Packets: %d\n",
+                                       rx_counter.rx_pkt_ok,rx_counter.rx_pkt_crc_error,rx_counter.rx_pkt_drop);               
+               rtw_reset_drv_rx_counters(padapter);            
+       }
+               
+       if( padapter->dump_rx_cnt_mode & DUMP_MAC_RX_COUNTER ){
+               _rtw_memset(&rx_counter,0,sizeof(struct dbg_rx_counter));
+               rtw_dump_mac_rx_counters(padapter,&rx_counter);
+               DBG_871X( "Mac Received packet OK:%d CRC error:%d FA Counter: %d Drop Packets: %d\n",
+                                       rx_counter.rx_pkt_ok,rx_counter.rx_pkt_crc_error,
+                                       rx_counter.rx_cck_fa+rx_counter.rx_ofdm_fa+rx_counter.rx_ht_fa,
+                                       rx_counter.rx_pkt_drop);                        
+               rtw_reset_mac_rx_counters(padapter);
+       }
+
+       if(padapter->dump_rx_cnt_mode & DUMP_PHY_RX_COUNTER ){          
+               _rtw_memset(&rx_counter,0,sizeof(struct dbg_rx_counter));               
+               rtw_dump_phy_rx_counters(padapter,&rx_counter);
+               //DBG_871X("%s: OFDM_FA =%d\n", __FUNCTION__, rx_counter.rx_ofdm_fa);
+               //DBG_871X("%s: CCK_FA =%d\n", __FUNCTION__, rx_counter.rx_cck_fa);
+               DBG_871X("Phy Received packet OK:%d CRC error:%d FA Counter: %d\n",rx_counter.rx_pkt_ok,rx_counter.rx_pkt_crc_error,
+               rx_counter.rx_ofdm_fa+rx_counter.rx_cck_fa);
+               rtw_reset_phy_rx_counters(padapter);    
+       }
+}
 #endif
 #endif
+void rtw_get_noise(_adapter* padapter)
+{
+#if defined(CONFIG_SIGNAL_DISPLAY_DBM) && defined(CONFIG_BACKGROUND_NOISE_MONITOR)
+       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
+       struct noise_info info;
+       if(rtw_linked_check(padapter)){
+               info.bPauseDIG = _TRUE;
+               info.IGIValue = 0x1e;
+               info.max_time = 100;//ms
+               info.chan = pmlmeext->cur_channel ;//rtw_get_oper_ch(padapter);
+               rtw_ps_deny(padapter, PS_DENY_IOCTL);
+               LeaveAllPowerSaveModeDirect(padapter);
+
+               rtw_hal_set_odm_var(padapter, HAL_ODM_NOISE_MONITOR,&info, _FALSE);     
+               //ODM_InbandNoise_Monitor(podmpriv,_TRUE,0x20,100);
+               rtw_ps_deny_cancel(padapter, PS_DENY_IOCTL);
+               rtw_hal_get_odm_var(padapter, HAL_ODM_NOISE_MONITOR,&(info.chan), &(padapter->recvpriv.noise)); 
+               #ifdef DBG_NOISE_MONITOR
+               DBG_871X("chan:%d,noise_level:%d\n",info.chan,padapter->recvpriv.noise);
+               #endif
+       }
+#endif         
+
+}
+
+#ifdef CONFIG_FW_C2H_DEBUG
+
+/*     C2H RX package original is 128.
+if enable CONFIG_FW_C2H_DEBUG, it should increase to 256.
+ C2H FW debug message:
+ without aggregate:
+ {C2H_CmdID,Seq,SubID,Len,Content[0~n]}
+ Content[0~n]={'a','b','c',...,'z','\n'}
+ with aggregate:
+ {C2H_CmdID,Seq,SubID,Len,Content[0~n]}
+ Content[0~n]={'a','b','c',...,'z','\n',Extend C2H pkt 2...}
+ Extend C2H pkt 2={C2H CmdID,Seq,SubID,Len,Content = {'a','b','c',...,'z','\n'}}
+ Author: Isaac */
+
+void Debug_FwC2H(PADAPTER padapter, u8 *pdata, u8 len)
+{
+       int i = 0;
+       int cnt = 0, total_length = 0;
+       u8 buf[128] = {0};
+       u8 more_data = _FALSE;
+       u8 *nextdata = NULL;
+       u8 test = 0;
+
+       u8 data_len;
+       u8 seq_no;
+
+       nextdata = pdata;
+       do {
+               data_len = *(nextdata + 1);
+               seq_no = *(nextdata + 2);
+
+               for (i = 0 ; i < data_len - 2 ; i++) {
+                       cnt += sprintf((buf+cnt), "%c", nextdata[3 + i]);
+
+                       if (nextdata[3 + i] == 0x0a && nextdata[4 + i] == 0xff)
+                               more_data = _TRUE;
+                       else if (nextdata[3 + i] == 0x0a && nextdata[4 + i] != 0xff)
+                               more_data = _FALSE;
+               }
+
+               DBG_871X("[RTKFW, SEQ=%d]: %s", seq_no, buf);
+               data_len += 3;
+               total_length += data_len;
+
+               if (more_data == _TRUE) {
+                       _rtw_memset(buf, '\0', 128);
+                       cnt = 0;
+                       nextdata = (pdata + total_length);
+               }
+       } while (more_data == _TRUE);
+}
+#endif /*CONFIG_FW_C2H_DEBUG*/
+void update_IOT_info(_adapter *padapter)
+{
+       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
+       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
+       
+       switch (pmlmeinfo->assoc_AP_vendor)
+       {
+               case HT_IOT_PEER_MARVELL:
+                       pmlmeinfo->turboMode_cts2self = 1;
+                       pmlmeinfo->turboMode_rtsen = 0;
+                       break;
+               
+               case HT_IOT_PEER_RALINK:
+                       pmlmeinfo->turboMode_cts2self = 0;
+                       pmlmeinfo->turboMode_rtsen = 1;
+                       //disable high power                    
+                       Switch_DM_Func(padapter, (~ODM_BB_DYNAMIC_TXPWR), _FALSE);
+                       break;
+               case HT_IOT_PEER_REALTEK:
+                       //rtw_write16(padapter, 0x4cc, 0xffff);
+                       //rtw_write16(padapter, 0x546, 0x01c0);
+                       //disable high power                    
+                       Switch_DM_Func(padapter, (~ODM_BB_DYNAMIC_TXPWR), _FALSE);
+                       break;
+               default:
+                       pmlmeinfo->turboMode_cts2self = 0;
+                       pmlmeinfo->turboMode_rtsen = 1;
+                       break;  
+       }
+       
+}
+
+
+
index 4866324cc7ecce2befb8bb5669002af69c72be0a..bdf75cfceaaa6b3e10b4f16fa07164d0f57aef32 100755 (executable)
@@ -920,7 +920,7 @@ PHY_InitTxPowerByRate(
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
        u8      band = 0, rfPath = 0, TxNum = 0, rate = 0, i = 0, j = 0;
 
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
        u8      band = 0, rfPath = 0, TxNum = 0, rate = 0, i = 0, j = 0;
 
-       if ( IS_HARDWARE_TYPE_8188E( pAdapter ) || IS_HARDWARE_TYPE_8723A( pAdapter ) )
+       if ( IS_HARDWARE_TYPE_8188E( pAdapter ) )
        {
                for ( i = 0; i < MAX_PG_GROUP; ++i )
                        for ( j = 0; j < 16; ++j )
        {
                for ( i = 0; i < MAX_PG_GROUP; ++i )
                        for ( j = 0; j < 16; ++j )
@@ -1509,13 +1509,13 @@ PHY_GetTxPowerTrackingOffset(
        
        if ((Rate == MGN_1M) ||(Rate == MGN_2M)||(Rate == MGN_5_5M)||(Rate == MGN_11M))
        { 
        
        if ((Rate == MGN_1M) ||(Rate == MGN_2M)||(Rate == MGN_5_5M)||(Rate == MGN_11M))
        { 
-               offset = pDM_Odm->Remnant_CCKSwingIdx;
-               //DBG_871X("+Remnant_CCKSwingIdx = 0x%x\n", RFPath, Rate, pDM_Odm->Remnant_CCKSwingIdx);
+               offset = pDM_Odm->RFCalibrateInfo.Remnant_CCKSwingIdx;
+               /*DBG_871X("+Remnant_CCKSwingIdx = 0x%x\n", RFPath, Rate, pRFCalibrateInfo->Remnant_CCKSwingIdx);*/
        }
        else
        {
        }
        else
        {
-               offset = pDM_Odm->Remnant_OFDMSwingIdx[RFPath]; 
-               //DBG_871X("+Remanant_OFDMSwingIdx[RFPath %u][Rate 0x%x] = 0x%x\n", RFPath, Rate, pDM_Odm->Remnant_OFDMSwingIdx[RFPath]);               
+               offset = pDM_Odm->RFCalibrateInfo.Remnant_OFDMSwingIdx[RFPath]; 
+               /*DBG_871X("+Remanant_OFDMSwingIdx[RFPath %u][Rate 0x%x] = 0x%x\n", RFPath, Rate, pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath]);      */      
                
        }
 
                
        }
 
@@ -1721,17 +1721,17 @@ PHY_SetTxPowerLevelByPath(
                PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, OFDM );
                PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, HT_MCS0_MCS7 );
 
                PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, OFDM );
                PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, HT_MCS0_MCS7 );
 
-               if ( IS_HARDWARE_TYPE_JAGUAR( Adapter ) || IS_HARDWARE_TYPE_8813A( Adapter ) )
-                       PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, VHT_1SSMCS0_1SSMCS9 );
+               if (IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_8814A(Adapter))
+                       PHY_SetTxPowerIndexByRateSection(Adapter, path, channel, VHT_1SSMCS0_1SSMCS9);
 
 
-               if ( pHalData->NumTotalRFPath >= 2 )
+               if (pHalData->NumTotalRFPath >= 2)
                {
                        PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, HT_MCS8_MCS15 );
 
                {
                        PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, HT_MCS8_MCS15 );
 
-                       if ( IS_HARDWARE_TYPE_JAGUAR( Adapter ) || IS_HARDWARE_TYPE_8813A( Adapter ) )
-                               PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, VHT_2SSMCS0_2SSMCS9 );
+                       if (IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_8814A(Adapter))
+                               PHY_SetTxPowerIndexByRateSection(Adapter, path, channel, VHT_2SSMCS0_2SSMCS9);
 
 
-                       if ( IS_HARDWARE_TYPE_8813A( Adapter ) )
+                       if (IS_HARDWARE_TYPE_8814A(Adapter))
                        {
                                PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, HT_MCS16_MCS23 );
                                PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, VHT_3SSMCS0_3SSMCS9 );
                        {
                                PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, HT_MCS16_MCS23 );
                                PHY_SetTxPowerIndexByRateSection( Adapter, path, channel, VHT_3SSMCS0_3SSMCS9 );
@@ -1967,6 +1967,8 @@ PHY_GetTxPowerLimit(
 
        if ( Band == BAND_ON_2_4G ) {
                s8 limits[10] = {0}; u8 i = 0;
 
        if ( Band == BAND_ON_2_4G ) {
                s8 limits[10] = {0}; u8 i = 0;
+               if (bandwidth >= MAX_2_4G_BANDWITH_NUM)
+                       bandwidth = MAX_2_4G_BANDWITH_NUM - 1;
                for (i = 0; i < MAX_REGULATION_NUM; ++i)
                        limits[i] = pHalData->TxPwrLimit_2_4G[i][bandwidth][rateSection][channel][RfPath]; 
 
                for (i = 0; i < MAX_REGULATION_NUM; ++i)
                        limits[i] = pHalData->TxPwrLimit_2_4G[i][bandwidth][rateSection][channel][RfPath]; 
 
@@ -2145,7 +2147,7 @@ PHY_ConvertTxPowerLimitToPowerIndex(
                }
        }
        
                }
        }
        
-       if ( IS_HARDWARE_TYPE_JAGUAR( Adapter ) || IS_HARDWARE_TYPE_8813A( Adapter ) )
+       if (IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_8814A(Adapter))
        {
                for ( regulation = 0; regulation < MAX_REGULATION_NUM; ++regulation )
                {
        {
                for ( regulation = 0; regulation < MAX_REGULATION_NUM; ++regulation )
                {
@@ -2299,6 +2301,9 @@ PHY_SetTxPowerLimit(
                if ( channelIndex == -1 )
                        return;
 
                if ( channelIndex == -1 )
                        return;
 
+               if (bandwidth >= MAX_2_4G_BANDWITH_NUM)
+                       bandwidth = MAX_2_4G_BANDWITH_NUM - 1;
+
                prevPowerLimit = pHalData->TxPwrLimit_2_4G[regulation][bandwidth][rateSection][channelIndex][ODM_RF_PATH_A];
 
                if ( powerLimit < prevPowerLimit )
                prevPowerLimit = pHalData->TxPwrLimit_2_4G[regulation][bandwidth][rateSection][channelIndex][ODM_RF_PATH_A];
 
                if ( powerLimit < prevPowerLimit )
@@ -2340,18 +2345,17 @@ PHY_GetTxPowerIndex(
 {
        u8      txPower = 0x3E;
 
 {
        u8      txPower = 0x3E;
 
-       if (IS_HARDWARE_TYPE_8813A(pAdapter)) {
-//#if (RTL8814A_SUPPORT==1)
-//             txPower = PHY_GetTxPowerIndex_8813A( pAdapter, PowerIndex, RFPath, Rate );
-//#endif
-       }
-       else if (IS_HARDWARE_TYPE_JAGUAR(pAdapter)) {
-#if ((RTL8812A_SUPPORT==1) || (RTL8821A_SUPPORT == 1))
+       if (IS_HARDWARE_TYPE_8814A(pAdapter)) {
+#if (RTL8814A_SUPPORT == 1)
+               txPower = PHY_GetTxPowerIndex_8814A(pAdapter, RFPath, Rate, BandWidth, Channel);
+#endif
+       } else if (IS_HARDWARE_TYPE_JAGUAR(pAdapter)) {
+#if ((RTL8812A_SUPPORT == 1) || (RTL8821A_SUPPORT == 1))
                txPower = PHY_GetTxPowerIndex_8812A(pAdapter, RFPath, Rate, BandWidth, Channel);
 #endif
        }
        else if (IS_HARDWARE_TYPE_8723B(pAdapter)) {
                txPower = PHY_GetTxPowerIndex_8812A(pAdapter, RFPath, Rate, BandWidth, Channel);
 #endif
        }
        else if (IS_HARDWARE_TYPE_8723B(pAdapter)) {
-#if (RTL8723B_SUPPORT==1)
+#if (RTL8723B_SUPPORT == 1)
                txPower = PHY_GetTxPowerIndex_8723B(pAdapter, RFPath, Rate, BandWidth, Channel);
 #endif
        }
                txPower = PHY_GetTxPowerIndex_8723B(pAdapter, RFPath, Rate, BandWidth, Channel);
 #endif
        }
@@ -2377,10 +2381,10 @@ PHY_SetTxPowerIndex(
        IN      u8                              Rate
        )
 {
        IN      u8                              Rate
        )
 {
-       if (IS_HARDWARE_TYPE_8813A(pAdapter)) {
-//#if (RTL8814A_SUPPORT==1)
-//             PHY_SetTxPowerIndex_8813A( pAdapter, PowerIndex, RFPath, Rate );
-//#endif
+       if (IS_HARDWARE_TYPE_8814A(pAdapter)) {
+#if (RTL8814A_SUPPORT == 1)
+               PHY_SetTxPowerIndex_8814A(pAdapter, PowerIndex, RFPath, Rate);
+#endif
        }
        else if (IS_HARDWARE_TYPE_JAGUAR(pAdapter)) {
 #if ((RTL8812A_SUPPORT==1) || (RTL8821A_SUPPORT == 1))
        }
        else if (IS_HARDWARE_TYPE_JAGUAR(pAdapter)) {
 #if ((RTL8812A_SUPPORT==1) || (RTL8821A_SUPPORT == 1))
index 46dab54b08397a5fffd711f2a8de958901952351..0c3b3f8db24832487eeb09254b22b6f9c0880677 100755 (executable)
@@ -76,8 +76,6 @@ void Init_ODM_ComInfo(_adapter *adapter)
 {\r
        struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(adapter);\r
 {\r
        struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(adapter);\r
-       EEPROM_EFUSE_PRIV       *pEEPROM = GET_EEPROM_EFUSE_PRIV(adapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
        struct mlme_ext_priv    *pmlmeext = &adapter->mlmeextpriv;\r
        struct mlme_priv        *pmlmepriv = &adapter->mlmepriv;\r
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
        struct mlme_ext_priv    *pmlmeext = &adapter->mlmeextpriv;\r
        struct mlme_priv        *pmlmepriv = &adapter->mlmepriv;\r
@@ -97,61 +95,55 @@ void Init_ODM_ComInfo(_adapter *adapter)
 \r
        ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_MP_TEST_CHIP, IS_NORMAL_CHIP(pHalData->VersionID));\r
 \r
 \r
        ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_MP_TEST_CHIP, IS_NORMAL_CHIP(pHalData->VersionID));\r
 \r
-       ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_PATCH_ID, pEEPROM->CustomerID);\r
+       ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_PATCH_ID, pHalData->CustomerID);\r
 \r
        ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_BWIFI_TEST, adapter->registrypriv.wifi_spec);\r
 \r
 \r
        ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_BWIFI_TEST, adapter->registrypriv.wifi_spec);\r
 \r
-       if (pHalData->rf_type == RF_1T1R) {\r
-               ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_1T1R);\r
-       }\r
-       else if (pHalData->rf_type == RF_2T2R){\r
-               ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_2T2R);\r
-       }\r
-       else if (pHalData->rf_type == RF_1T2R){\r
-               ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_1T2R);\r
-       }\r
+\r
+       if (pHalData->rf_type == RF_1T1R)\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_1T1R);\r
+       else if (pHalData->rf_type == RF_1T2R)\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_1T2R);\r
+       else if (pHalData->rf_type == RF_2T2R)\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_2T2R);\r
+       else if (pHalData->rf_type == RF_2T2R_GREEN)\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_2T2R_GREEN);\r
+       else if (pHalData->rf_type == RF_2T3R)\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_2T3R);\r
+       else if (pHalData->rf_type == RF_2T4R)\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_2T4R);\r
+       else if (pHalData->rf_type == RF_3T3R)\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_3T3R);\r
+       else if (pHalData->rf_type == RF_3T4R)\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_3T4R);\r
+       else if (pHalData->rf_type == RF_4T4R)\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_4T4R);\r
+       else\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_XTXR);\r
+       \r
 \r
 {\r
        //1 ======= BoardType: ODM_CMNINFO_BOARD_TYPE =======\r
        u8 odm_board_type = ODM_BOARD_DEFAULT;\r
 \r
 \r
 {\r
        //1 ======= BoardType: ODM_CMNINFO_BOARD_TYPE =======\r
        u8 odm_board_type = ODM_BOARD_DEFAULT;\r
 \r
-       if (!IS_HARDWARE_TYPE_OLDER_THAN_8723A(adapter))\r
-       {\r
-               if (pHalData->ExternalLNA_2G != 0) {\r
-                       odm_board_type |= ODM_BOARD_EXT_LNA;\r
-                       ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_LNA, 1);\r
-               }\r
-               if (pHalData->ExternalLNA_5G != 0) {\r
-                       odm_board_type |= ODM_BOARD_EXT_LNA_5G;\r
-                       ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_5G_EXT_LNA, 1);\r
-               }\r
-               if (pHalData->ExternalPA_2G != 0) {\r
-                       odm_board_type |= ODM_BOARD_EXT_PA;\r
-                       ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_PA, 1);\r
-               }\r
-               if (pHalData->ExternalPA_5G != 0) {\r
-                       odm_board_type |= ODM_BOARD_EXT_PA_5G;\r
-                       ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_5G_EXT_PA, 1);\r
-               }\r
-               if (pHalData->EEPROMBluetoothCoexist)\r
-                       odm_board_type |= ODM_BOARD_BT;\r
-\r
-       } else {\r
-               #ifdef CONFIG_USB_HCI\r
-               if (pHalData->InterfaceSel == INTF_SEL1_USB_High_Power\r
-                       || pHalData->BoardType == BOARD_USB_High_PA     /* This is legacy code for hal_data.BoardType */\r
-               ) {\r
-                       ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_EXT_LNA, 1);\r
-                       ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_EXT_PA, 1);\r
-               } else\r
-               #endif\r
-               {\r
-                       ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_PA, pHalData->ExternalPA_2G);\r
-                       ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_LNA, pHalData->ExternalLNA_2G);\r
-               }\r
-\r
-               odm_board_type = boardType(pHalData->InterfaceSel);\r
+       if (pHalData->ExternalLNA_2G != 0) {\r
+               odm_board_type |= ODM_BOARD_EXT_LNA;\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_LNA, 1);\r
+       }\r
+       if (pHalData->ExternalLNA_5G != 0) {\r
+               odm_board_type |= ODM_BOARD_EXT_LNA_5G;\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_5G_EXT_LNA, 1);\r
+       }\r
+       if (pHalData->ExternalPA_2G != 0) {\r
+               odm_board_type |= ODM_BOARD_EXT_PA;\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_PA, 1);\r
+       }\r
+       if (pHalData->ExternalPA_5G != 0) {\r
+               odm_board_type |= ODM_BOARD_EXT_PA_5G;\r
+               ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_5G_EXT_PA, 1);\r
        }\r
        }\r
+       if (pHalData->EEPROMBluetoothCoexist)\r
+               odm_board_type |= ODM_BOARD_BT; \r
 \r
        ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_BOARD_TYPE, odm_board_type);\r
        //1 ============== End of BoardType ==============\r
 \r
        ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_BOARD_TYPE, odm_board_type);\r
        //1 ============== End of BoardType ==============\r
index 0ea23519956e824bb705978e46b883f24b4c3b28..65eaf5df6211ce522ed02f4ed17504dd98b4d10f 100755 (executable)
 #include <drv_types.h>
 #include <hal_data.h>
 
 #include <drv_types.h>
 #include <hal_data.h>
 
+int    usb_init_recv_priv(_adapter *padapter, u16 ini_in_buf_sz)
+{
+       struct recv_priv        *precvpriv = &padapter->recvpriv;
+       int     i, res = _SUCCESS;
+       struct recv_buf *precvbuf;
+
+#ifdef CONFIG_RECV_THREAD_MODE
+       _rtw_init_sema(&precvpriv->recv_sema, 0);//will be removed
+       _rtw_init_sema(&precvpriv->terminate_recvthread_sema, 0);//will be removed
+#endif /* CONFIG_RECV_THREAD_MODE */
+
+#ifdef PLATFORM_LINUX
+       tasklet_init(&precvpriv->recv_tasklet,
+               (void(*)(unsigned long))usb_recv_tasklet,
+               (unsigned long)padapter);
+#endif /* PLATFORM_LINUX */
+
+#ifdef PLATFORM_FREEBSD        
+       #ifdef CONFIG_RX_INDICATE_QUEUE
+       TASK_INIT(&precvpriv->rx_indicate_tasklet, 0, rtw_rx_indicate_tasklet, padapter);
+       #endif /* CONFIG_RX_INDICATE_QUEUE */
+#endif /* PLATFORM_FREEBSD */
+
+#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
+#ifdef PLATFORM_LINUX
+       precvpriv->int_in_urb = usb_alloc_urb(0, GFP_KERNEL);
+       if(precvpriv->int_in_urb == NULL){
+               res = _FAIL;
+               DBG_8192C("alloc_urb for interrupt in endpoint fail !!!!\n");
+               goto exit;
+       }
+#endif /* PLATFORM_LINUX */
+       precvpriv->int_in_buf = rtw_zmalloc(ini_in_buf_sz);
+       if(precvpriv->int_in_buf == NULL){
+               res = _FAIL;
+               DBG_8192C("alloc_mem for interrupt in endpoint fail !!!!\n");
+               goto exit;
+       }
+#endif /* CONFIG_USB_INTERRUPT_IN_PIPE */
+
+       /* init recv_buf */
+       _rtw_init_queue(&precvpriv->free_recv_buf_queue);
+       _rtw_init_queue(&precvpriv->recv_buf_pending_queue);
+       #ifndef CONFIG_USE_USB_BUFFER_ALLOC_RX
+       /* this is used only when RX_IOBUF is sk_buff */
+       skb_queue_head_init(&precvpriv->free_recv_skb_queue);
+       #endif
+
+       DBG_871X("NR_RECVBUFF: %d\n", NR_RECVBUFF);
+       DBG_871X("MAX_RECVBUF_SZ: %d\n", MAX_RECVBUF_SZ);
+       precvpriv->pallocated_recv_buf = rtw_zmalloc(NR_RECVBUFF *sizeof(struct recv_buf) + 4);
+       if(precvpriv->pallocated_recv_buf==NULL){
+               res= _FAIL;
+               RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("alloc recv_buf fail!\n"));
+               goto exit;
+       }
+
+       precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4);
+
+       precvbuf = (struct recv_buf*)precvpriv->precv_buf;
+
+       for(i=0; i < NR_RECVBUFF ; i++)
+       {
+               _rtw_init_listhead(&precvbuf->list);
+
+               _rtw_spinlock_init(&precvbuf->recvbuf_lock);
+
+               precvbuf->alloc_sz = MAX_RECVBUF_SZ;
+
+               res = rtw_os_recvbuf_resource_alloc(padapter, precvbuf);
+               if(res==_FAIL)
+                       break;
+
+               precvbuf->ref_cnt = 0;
+               precvbuf->adapter =padapter;
+
+               //rtw_list_insert_tail(&precvbuf->list, &(precvpriv->free_recv_buf_queue.queue));
+
+               precvbuf++;
+       }
+
+       precvpriv->free_recv_buf_queue_cnt = NR_RECVBUFF;
+
+#if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)
+
+       skb_queue_head_init(&precvpriv->rx_skb_queue);
+
+#ifdef CONFIG_RX_INDICATE_QUEUE
+       memset(&precvpriv->rx_indicate_queue, 0, sizeof(struct ifqueue));
+       mtx_init(&precvpriv->rx_indicate_queue.ifq_mtx, "rx_indicate_queue", NULL, MTX_DEF);
+#endif /* CONFIG_RX_INDICATE_QUEUE */
+
+#ifdef CONFIG_PREALLOC_RECV_SKB
+       {
+               int i;
+               SIZE_PTR tmpaddr=0;
+               SIZE_PTR alignment=0;
+               struct sk_buff *pskb=NULL;
+
+               DBG_871X("NR_PREALLOC_RECV_SKB: %d\n", NR_PREALLOC_RECV_SKB);
+               for(i=0; i<NR_PREALLOC_RECV_SKB; i++)
+               {
+#ifdef CONFIG_PREALLOC_RX_SKB_BUFFER
+                       pskb = rtw_alloc_skb_premem();
+#else
+                       pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
+#endif //CONFIG_PREALLOC_RX_SKB_BUFFER
+
+                       if(pskb)
+                       {
+                               #ifdef PLATFORM_FREEBSD
+                               pskb->dev = padapter->pifp;
+                               #else
+                               pskb->dev = padapter->pnetdev;
+                               #endif //PLATFORM_FREEBSD
+
+#ifndef CONFIG_PREALLOC_RX_SKB_BUFFER
+                               tmpaddr = (SIZE_PTR)pskb->data;
+                               alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
+                               skb_reserve(pskb, (RECVBUFF_ALIGN_SZ - alignment));
+#endif
+                               skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
+                       }
+               }
+       }
+#endif /* CONFIG_PREALLOC_RECV_SKB */
+
+#endif /* defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD) */
+
+exit:
+
+       return res;
+}
+
+void usb_free_recv_priv (_adapter *padapter, u16 ini_in_buf_sz)
+{
+       int i;
+       struct recv_buf *precvbuf;
+       struct recv_priv        *precvpriv = &padapter->recvpriv;
+
+       precvbuf = (struct recv_buf *)precvpriv->precv_buf;
+
+       for(i=0; i < NR_RECVBUFF ; i++)
+       {
+               rtw_os_recvbuf_resource_free(padapter, precvbuf);
+               precvbuf++;
+       }
+
+       if(precvpriv->pallocated_recv_buf)
+               rtw_mfree(precvpriv->pallocated_recv_buf, NR_RECVBUFF *sizeof(struct recv_buf) + 4);
+
+#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
+#ifdef PLATFORM_LINUX
+       if(precvpriv->int_in_urb)
+       {
+               usb_free_urb(precvpriv->int_in_urb);
+       }
+#endif
+       if(precvpriv->int_in_buf)
+               rtw_mfree(precvpriv->int_in_buf, ini_in_buf_sz);
+#endif /* CONFIG_USB_INTERRUPT_IN_PIPE */
+
+#ifdef PLATFORM_LINUX
+
+       if (skb_queue_len(&precvpriv->rx_skb_queue)) {
+               DBG_8192C(KERN_WARNING "rx_skb_queue not empty\n");
+       }
+
+       rtw_skb_queue_purge(&precvpriv->rx_skb_queue);
+
+       if (skb_queue_len(&precvpriv->free_recv_skb_queue)) {
+               DBG_8192C(KERN_WARNING "free_recv_skb_queue not empty, %d\n", skb_queue_len(&precvpriv->free_recv_skb_queue));
+       }
+
+#if !defined(CONFIG_USE_USB_BUFFER_ALLOC_RX)
+       #if defined(CONFIG_PREALLOC_RECV_SKB) && defined(CONFIG_PREALLOC_RX_SKB_BUFFER)
+       {
+               struct sk_buff *skb;
+
+               while ((skb = skb_dequeue(&precvpriv->free_recv_skb_queue)) != NULL)
+               {
+                       if (rtw_free_skb_premem(skb) != 0)
+                               rtw_skb_free(skb);
+               }
+       }
+       #else
+       rtw_skb_queue_purge(&precvpriv->free_recv_skb_queue);
+       #endif /* defined(CONFIG_PREALLOC_RX_SKB_BUFFER) && defined(CONFIG_PREALLOC_RECV_SKB) */
+#endif /* !defined(CONFIG_USE_USB_BUFFER_ALLOC_RX) */
+
+#endif /* PLATFORM_LINUX */
+
+#ifdef PLATFORM_FREEBSD
+       struct sk_buff  *pskb;
+       while (NULL != (pskb = skb_dequeue(&precvpriv->rx_skb_queue)))
+       {
+               rtw_skb_free(pskb);
+       }
+
+       #if !defined(CONFIG_USE_USB_BUFFER_ALLOC_RX)
+       rtw_skb_queue_purge(&precvpriv->free_recv_skb_queue);
+       #endif
+
+#ifdef CONFIG_RX_INDICATE_QUEUE
+       struct mbuf *m;
+       for (;;) {
+               IF_DEQUEUE(&precvpriv->rx_indicate_queue, m);
+               if (m == NULL)
+                       break;
+               m_freem(m);
+       }
+       mtx_destroy(&precvpriv->rx_indicate_queue.ifq_mtx);
+#endif /* CONFIG_RX_INDICATE_QUEUE */
+
+#endif /* PLATFORM_FREEBSD */
+}
 
 #ifdef CONFIG_USB_SUPPORT_ASYNC_VDN_REQ
 int usb_write_async(struct usb_device *udev, u32 addr, void *pdata, u16 len)
 
 #ifdef CONFIG_USB_SUPPORT_ASYNC_VDN_REQ
 int usb_write_async(struct usb_device *udev, u32 addr, void *pdata, u16 len)
@@ -89,65 +305,6 @@ int usb_async_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
 }
 #endif /* CONFIG_USB_SUPPORT_ASYNC_VDN_REQ */
 
 }
 #endif /* CONFIG_USB_SUPPORT_ASYNC_VDN_REQ */
 
-
-
-#ifdef CONFIG_RTL8192D
-/*     This function only works in 92DU chip.          */
-void usb_read_reg_rf_byfw(struct intf_hdl *pintfhdl, 
-                               u16 byteCount, 
-                               u32 registerIndex, 
-                               PVOID buffer)
-{
-       u16     wPage = 0x0000, offset;
-       u32     BufferLengthRead;
-       PADAPTER        Adapter = pintfhdl->padapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       u8      RFPath=0,nPHY=0;
-
-       RFPath =(u8) ((registerIndex&0xff0000)>>16);
-       
-       if (pHalData->interfaceIndex!=0)
-       { 
-               nPHY = 1; //MAC1
-               if(registerIndex&MAC1_ACCESS_PHY0)// MAC1 need to access PHY0
-                       nPHY = 0;
-       }
-       else
-       {
-               if(registerIndex&MAC0_ACCESS_PHY1)
-                       nPHY = 1;
-       }
-       registerIndex &= 0xFF;
-       wPage = ((nPHY<<7)|(RFPath<<5)|8)<<8;
-       offset = (u16)registerIndex;
-       
-       //
-       // IN a vendor request to read back MAC register.
-       //
-       usbctrl_vendorreq(pintfhdl, 0x05, offset, wPage, buffer, byteCount, 0x01);
-
-}
-#endif
-
-/*
-       92DU chip needs to remask "value" parameter,  this function only works in 92DU chip.
-*/
-static inline void usb_value_remask(struct intf_hdl *pintfhdl, u16 *value)
-{
-#ifdef CONFIG_RTL8192D
-       _adapter        *padapter = pintfhdl->padapter;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
-
-       if ((IS_HARDWARE_TYPE_8192DU(padapter)) && (pHalData->interfaceIndex!=0))
-       {
-               if(*value<0x1000)
-                       *value|=0x4000;
-               else if ((*value&MAC1_ACCESS_PHY0) && !(*value&0x8000))   // MAC1 need to access PHY0
-                       *value &= 0xFFF;
-       }
-#endif
-}
-
 u8 usb_read8(struct intf_hdl *pintfhdl, u32 addr)
 {
        u8 request;
 u8 usb_read8(struct intf_hdl *pintfhdl, u32 addr)
 {
        u8 request;
@@ -165,7 +322,6 @@ u8 usb_read8(struct intf_hdl *pintfhdl, u32 addr)
 
        wvalue = (u16)(addr&0x0000ffff);
        len = 1;        
 
        wvalue = (u16)(addr&0x0000ffff);
        len = 1;        
-       usb_value_remask(pintfhdl, &wvalue);
        usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                        &data, len, requesttype);
 
        usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                        &data, len, requesttype);
 
@@ -191,7 +347,6 @@ u16 usb_read16(struct intf_hdl *pintfhdl, u32 addr)
 
        wvalue = (u16)(addr&0x0000ffff);
        len = 2;        
 
        wvalue = (u16)(addr&0x0000ffff);
        len = 2;        
-       usb_value_remask(pintfhdl, &wvalue);
        usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                        &data, len, requesttype);
 
        usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                        &data, len, requesttype);
 
@@ -218,17 +373,9 @@ u32 usb_read32(struct intf_hdl *pintfhdl, u32 addr)
 
        wvalue = (u16)(addr&0x0000ffff);
        len = 4;
 
        wvalue = (u16)(addr&0x0000ffff);
        len = 4;
-#ifdef CONFIG_RTL8192D
-       if ((IS_HARDWARE_TYPE_8192DU(pintfhdl->padapter)) && ((addr&0xff000000)>>24 == 0x66)) {
-               usb_read_reg_rf_byfw(pintfhdl, len, addr, &data);
-       } else 
-#endif
-       {
-               usb_value_remask(pintfhdl, &wvalue);
-               usbctrl_vendorreq(pintfhdl, request, wvalue, index,
+       usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                                &data, len, requesttype);
                                                &data, len, requesttype);
-       }
-
+       
        _func_exit_;
 
        return data;
        _func_exit_;
 
        return data;
@@ -253,8 +400,7 @@ int usb_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val)
        wvalue = (u16)(addr&0x0000ffff);
        len = 1;
        
        wvalue = (u16)(addr&0x0000ffff);
        len = 1;
        
-       data = val;     
-       usb_value_remask(pintfhdl, &wvalue);
+       data = val;
        ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                                &data, len, requesttype);
        
        ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                                &data, len, requesttype);
        
@@ -283,7 +429,6 @@ int usb_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val)
        len = 2;
        
        data = val;
        len = 2;
        
        data = val;
-       usb_value_remask(pintfhdl, &wvalue);
        ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                                &data, len, requesttype);
        
        ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                                &data, len, requesttype);
        
@@ -311,8 +456,7 @@ int usb_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
 
        wvalue = (u16)(addr&0x0000ffff);
        len = 4;
 
        wvalue = (u16)(addr&0x0000ffff);
        len = 4;
-       data =val;              
-       usb_value_remask(pintfhdl, &wvalue);
+       data =val;
        ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                                &data, len, requesttype);
 
        ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                                &data, len, requesttype);
 
@@ -341,7 +485,6 @@ int usb_writeN(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata)
        wvalue = (u16)(addr&0x0000ffff);
        len = length;
         _rtw_memcpy(buf, pdata, len );
        wvalue = (u16)(addr&0x0000ffff);
        len = length;
         _rtw_memcpy(buf, pdata, len );
-       usb_value_remask(pintfhdl, &wvalue);
        ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                                buf, len, requesttype);
        
        ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index,
                                                buf, len, requesttype);
        
index 811cc3dabcb3bbed96aeb36385c15516cd42c642..b4ac4ee8d6fdb4f0de95d30589b2ac14397f2156 100755 (executable)
 
 void rtw_hal_chip_configure(_adapter *padapter)
 {
 
 void rtw_hal_chip_configure(_adapter *padapter)
 {
-       if(padapter->HalFunc.intf_chip_configure)
-               padapter->HalFunc.intf_chip_configure(padapter);
+       padapter->HalFunc.intf_chip_configure(padapter);
 }
 
 void rtw_hal_read_chip_info(_adapter *padapter)
 {
 }
 
 void rtw_hal_read_chip_info(_adapter *padapter)
 {
-       if(padapter->HalFunc.read_adapter_info)
-               padapter->HalFunc.read_adapter_info(padapter);
+       padapter->HalFunc.read_adapter_info(padapter);
 }
 
 void rtw_hal_read_chip_version(_adapter *padapter)
 {
 }
 
 void rtw_hal_read_chip_version(_adapter *padapter)
 {
-       if(padapter->HalFunc.read_chip_version)
-               padapter->HalFunc.read_chip_version(padapter);
+       padapter->HalFunc.read_chip_version(padapter);
 }
 
 void rtw_hal_def_value_init(_adapter *padapter)
 {
        if (is_primary_adapter(padapter)) {
 }
 
 void rtw_hal_def_value_init(_adapter *padapter)
 {
        if (is_primary_adapter(padapter)) {
-               if(padapter->HalFunc.init_default_value)
-                       padapter->HalFunc.init_default_value(padapter);
+               padapter->HalFunc.init_default_value(padapter);
 
                rtw_init_hal_com_default_value(padapter);
 
 
                rtw_init_hal_com_default_value(padapter);
 
@@ -58,37 +54,58 @@ void rtw_hal_def_value_init(_adapter *padapter)
                }
        }
 }
                }
        }
 }
+
+u8 rtw_hal_data_init(_adapter *padapter)
+{
+       if (is_primary_adapter(padapter)) {
+               padapter->hal_data_sz = sizeof(HAL_DATA_TYPE);
+               padapter->HalData = rtw_zvmalloc(padapter->hal_data_sz);
+               if(padapter->HalData == NULL){
+                       DBG_8192C("cant not alloc memory for HAL DATA \n");
+                       return _FAIL;
+               }
+       }
+       return _SUCCESS;
+}
+
+void rtw_hal_data_deinit(_adapter *padapter)
+{      
+       if (is_primary_adapter(padapter)) {
+               if (padapter->HalData) 
+               {
+                       #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
+                       phy_free_filebuf(padapter);                             
+                       #endif
+                       rtw_vmfree(padapter->HalData, padapter->hal_data_sz);
+                       padapter->HalData = NULL;
+                       padapter->hal_data_sz = 0;
+               }       
+       }
+}
+
 void   rtw_hal_free_data(_adapter *padapter)
 {
        //free HAL Data         
 void   rtw_hal_free_data(_adapter *padapter)
 {
        //free HAL Data         
-       rtw_hal_data_deinit(padapter);
-       
-       if (is_primary_adapter(padapter))
-               if(padapter->HalFunc.free_hal_data)
-                       padapter->HalFunc.free_hal_data(padapter);
+       rtw_hal_data_deinit(padapter);  
 }
 void rtw_hal_dm_init(_adapter *padapter)
 {
        if (is_primary_adapter(padapter)) {
                PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(padapter);
 }
 void rtw_hal_dm_init(_adapter *padapter)
 {
        if (is_primary_adapter(padapter)) {
                PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(padapter);
-               struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-
-               if(padapter->HalFunc.dm_init)
-                       padapter->HalFunc.dm_init(padapter);
+               
+               padapter->HalFunc.dm_init(padapter);
 
 
-               _rtw_spinlock_init(&pdmpriv->IQKSpinLock);
+               _rtw_spinlock_init(&pHalData->IQKSpinLock);
        }
 }
 void rtw_hal_dm_deinit(_adapter *padapter)
 {
        if (is_primary_adapter(padapter)) {
        }
 }
 void rtw_hal_dm_deinit(_adapter *padapter)
 {
        if (is_primary_adapter(padapter)) {
-               PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(padapter);
-               struct dm_priv  *pdmpriv = &pHalData->dmpriv;
+               PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(padapter);              
 
 
-               if(padapter->HalFunc.dm_deinit)
-                       padapter->HalFunc.dm_deinit(padapter);
+               padapter->HalFunc.dm_deinit(padapter);
 
 
-               _rtw_spinlock_free(&pdmpriv->IQKSpinLock);
+               _rtw_spinlock_free(&pHalData->IQKSpinLock);
        }
 }
 void   rtw_hal_sw_led_init(_adapter *padapter)
        }
 }
 void   rtw_hal_sw_led_init(_adapter *padapter)
@@ -104,17 +121,15 @@ void rtw_hal_sw_led_deinit(_adapter *padapter)
 }
 
 u32 rtw_hal_power_on(_adapter *padapter)
 }
 
 u32 rtw_hal_power_on(_adapter *padapter)
-{
-       if(padapter->HalFunc.hal_power_on)
-               return padapter->HalFunc.hal_power_on(padapter);
-       return _FAIL;
+{      
+       return padapter->HalFunc.hal_power_on(padapter);
 }
 void rtw_hal_power_off(_adapter *padapter)
 }
 void rtw_hal_power_off(_adapter *padapter)
-{
-       if(padapter->HalFunc.hal_power_off)
-               padapter->HalFunc.hal_power_off(padapter);      
+{      
+       padapter->HalFunc.hal_power_off(padapter);      
 }
 
 }
 
+
 void rtw_hal_init_opmode(_adapter *padapter) 
 {
        NDIS_802_11_NETWORK_INFRASTRUCTURE networkType = Ndis802_11InfrastructureMax;
 void rtw_hal_init_opmode(_adapter *padapter) 
 {
        NDIS_802_11_NETWORK_INFRASTRUCTURE networkType = Ndis802_11InfrastructureMax;
@@ -141,37 +156,6 @@ uint        rtw_hal_init(_adapter *padapter)
        struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
        int i;
 
        struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
        int i;
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       if(padapter->hw_init_completed == _TRUE)
-       {
-               DBG_871X("rtw_hal_init: hw_init_completed == _TRUE\n");
-               return status;
-       }
-
-       // before init mac0, driver must init mac1 first to avoid usb rx error.
-       if((padapter->pbuddy_adapter != NULL) && (padapter->DualMacConcurrent == _TRUE)
-               && (padapter->adapter_type == PRIMARY_ADAPTER))
-       {
-               if(padapter->pbuddy_adapter->hw_init_completed == _TRUE)
-               {
-                       DBG_871X("rtw_hal_init: pbuddy_adapter hw_init_completed == _TRUE\n");
-               }
-               else
-               {
-                       status =        padapter->HalFunc.hal_init(padapter->pbuddy_adapter);
-                       if(status == _SUCCESS){
-                               padapter->pbuddy_adapter->hw_init_completed = _TRUE;
-                       }
-                       else{
-                               padapter->pbuddy_adapter->hw_init_completed = _FALSE;
-                               RT_TRACE(_module_hal_init_c_,_drv_err_,("rtw_hal_init: hal__init fail(pbuddy_adapter)\n"));
-                               DBG_871X("rtw_hal_init: hal__init fail(pbuddy_adapter)\n");
-                               return status;
-                       }
-               }
-       }
-#endif
-
        status = padapter->HalFunc.hal_init(padapter);
 
        if(status == _SUCCESS){
        status = padapter->HalFunc.hal_init(padapter);
 
        if(status == _SUCCESS){
@@ -238,14 +222,12 @@ _func_exit_;
 
 void rtw_hal_set_hwreg(_adapter *padapter, u8 variable, u8 *val)
 {
 
 void rtw_hal_set_hwreg(_adapter *padapter, u8 variable, u8 *val)
 {
-       if (padapter->HalFunc.SetHwRegHandler)
-               padapter->HalFunc.SetHwRegHandler(padapter, variable, val);
+       padapter->HalFunc.SetHwRegHandler(padapter, variable, val);
 }
 
 void rtw_hal_get_hwreg(_adapter *padapter, u8 variable, u8 *val)
 {
 }
 
 void rtw_hal_get_hwreg(_adapter *padapter, u8 variable, u8 *val)
 {
-       if (padapter->HalFunc.GetHwRegHandler)
-               padapter->HalFunc.GetHwRegHandler(padapter, variable, val);
+       padapter->HalFunc.GetHwRegHandler(padapter, variable, val);
 }
 
 #ifdef CONFIG_C2H_PACKET_EN
 }
 
 #ifdef CONFIG_C2H_PACKET_EN
@@ -258,45 +240,39 @@ void rtw_hal_set_hwreg_with_buf(_adapter *padapter, u8 variable, u8 *pbuf, int l
 
 u8 rtw_hal_set_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue)
 {      
 
 u8 rtw_hal_set_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue)
 {      
-       if(padapter->HalFunc.SetHalDefVarHandler)
-               return padapter->HalFunc.SetHalDefVarHandler(padapter,eVariable,pValue);
-       return _FAIL;
+       return padapter->HalFunc.SetHalDefVarHandler(padapter,eVariable,pValue);
 }
 u8 rtw_hal_get_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue)
 {      
 }
 u8 rtw_hal_get_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue)
 {      
-       if(padapter->HalFunc.GetHalDefVarHandler)
-               return padapter->HalFunc.GetHalDefVarHandler(padapter,eVariable,pValue);
-       return _FAIL;   
+       return padapter->HalFunc.GetHalDefVarHandler(padapter,eVariable,pValue);                
 }      
 
 void rtw_hal_set_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,BOOLEAN bSet)
 {
 }      
 
 void rtw_hal_set_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,BOOLEAN bSet)
 {
-       if(padapter->HalFunc.SetHalODMVarHandler)
-               padapter->HalFunc.SetHalODMVarHandler(padapter,eVariable,pValue1,bSet);
+       padapter->HalFunc.SetHalODMVarHandler(padapter,eVariable,pValue1,bSet);
 }
 void   rtw_hal_get_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,PVOID pValue2)
 {
 }
 void   rtw_hal_get_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,PVOID pValue2)
 {
-       if(padapter->HalFunc.GetHalODMVarHandler)
-               padapter->HalFunc.GetHalODMVarHandler(padapter,eVariable,pValue1,pValue2);
+       padapter->HalFunc.GetHalODMVarHandler(padapter,eVariable,pValue1,pValue2);
 }
 
 }
 
+/* FOR SDIO & PCIE */
 void rtw_hal_enable_interrupt(_adapter *padapter)
 {
 void rtw_hal_enable_interrupt(_adapter *padapter)
 {
-       if (padapter->HalFunc.enable_interrupt)
-               padapter->HalFunc.enable_interrupt(padapter);
-       else 
-               DBG_871X("%s: HalFunc.enable_interrupt is NULL!\n", __FUNCTION__);
-       
+#if defined(CONFIG_PCI_HCI) || defined (CONFIG_SDIO_HCI) || defined (CONFIG_GSPI_HCI)
+       padapter->HalFunc.enable_interrupt(padapter);   
+#endif //#if defined(CONFIG_PCI_HCI) || defined (CONFIG_SDIO_HCI) || defined (CONFIG_GSPI_HCI)
 }
 }
+
+/* FOR SDIO & PCIE */
 void rtw_hal_disable_interrupt(_adapter *padapter)
 {
 void rtw_hal_disable_interrupt(_adapter *padapter)
 {
-       if (padapter->HalFunc.disable_interrupt)
-               padapter->HalFunc.disable_interrupt(padapter);
-       else 
-               DBG_871X("%s: HalFunc.disable_interrupt is NULL!\n", __FUNCTION__);
-       
+#if defined(CONFIG_PCI_HCI) || defined (CONFIG_SDIO_HCI) || defined (CONFIG_GSPI_HCI)
+       padapter->HalFunc.disable_interrupt(padapter);
+#endif //#if defined(CONFIG_PCI_HCI) || defined (CONFIG_SDIO_HCI) || defined (CONFIG_GSPI_HCI)
 }
 
 }
 
+
 u8 rtw_hal_check_ips_status(_adapter *padapter)
 {
        u8 val = _FALSE;
 u8 rtw_hal_check_ips_status(_adapter *padapter)
 {
        u8 val = _FALSE;
@@ -310,43 +286,43 @@ u8 rtw_hal_check_ips_status(_adapter *padapter)
 
 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
 void rtw_hal_clear_interrupt(_adapter *padapter)
 
 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
 void rtw_hal_clear_interrupt(_adapter *padapter)
+{  
+#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+       padapter->HalFunc.clear_interrupt(padapter);
+#endif
+}
+void rtw_hal_set_wowlan_fw(_adapter *padapter, u8 sleep)
 {
 {
-    if (padapter->HalFunc.clear_interrupt)
-        padapter->HalFunc.clear_interrupt(padapter);
-    else
-        DBG_871X("%s: HalFunc.clear_interrupt is NULL!\n", __FUNCTION__);
-
+       padapter->HalFunc.hal_set_wowlan_fw(padapter, sleep);
 }
 }
+
 #endif
 
 #endif
 
+#if defined(CONFIG_USB_HCI) || defined (CONFIG_PCI_HCI)
 u32    rtw_hal_inirp_init(_adapter *padapter)
 {
 u32    rtw_hal_inirp_init(_adapter *padapter)
 {
-       u32 rst = _FAIL;
-       if(padapter->HalFunc.inirp_init)        
-               rst = padapter->HalFunc.inirp_init(padapter);   
-       else            
-               DBG_871X(" %s HalFunc.inirp_init is NULL!!!\n",__FUNCTION__);           
-       return rst;
+       if (is_primary_adapter(padapter))               
+               return padapter->HalFunc.inirp_init(padapter);  
+        return _SUCCESS;
 }
 }
-       
 u32    rtw_hal_inirp_deinit(_adapter *padapter)
 {
 u32    rtw_hal_inirp_deinit(_adapter *padapter)
 {
-       
-       if(padapter->HalFunc.inirp_deinit)
+
+       if (is_primary_adapter(padapter))       
                return padapter->HalFunc.inirp_deinit(padapter);
 
                return padapter->HalFunc.inirp_deinit(padapter);
 
-       return _FAIL;
-               
+       return _SUCCESS;
 }
 }
+#endif //#if defined(CONFIG_USB_HCI) || defined (CONFIG_PCI_HCI)
 
 
+#if defined(CONFIG_PCI_HCI)
 void   rtw_hal_irp_reset(_adapter *padapter)
 {
 void   rtw_hal_irp_reset(_adapter *padapter)
 {
-       if(padapter->HalFunc.irp_reset)
-               padapter->HalFunc.irp_reset(padapter);
-       else 
-               DBG_871X("%s: HalFunc.rtw_hal_irp_reset is NULL!\n", __FUNCTION__);
+       padapter->HalFunc.irp_reset(padapter);
 }
 }
+#endif //#if defined(CONFIG_PCI_HCI)
 
 
+/* for USB Auto-suspend */
 u8     rtw_hal_intf_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val)
 {      
        if(padapter->HalFunc.interface_ps_func) 
 u8     rtw_hal_intf_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val)
 {      
        if(padapter->HalFunc.interface_ps_func) 
@@ -356,18 +332,12 @@ u8        rtw_hal_intf_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val)
 
 s32    rtw_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe)
 {
 
 s32    rtw_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe)
 {
-       if(padapter->HalFunc.hal_xmitframe_enqueue)
-               return padapter->HalFunc.hal_xmitframe_enqueue(padapter, pxmitframe);
-
-       return _FALSE;  
+       return padapter->HalFunc.hal_xmitframe_enqueue(padapter, pxmitframe);
 }
 
 s32    rtw_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe)
 {
 }
 
 s32    rtw_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe)
 {
-       if(padapter->HalFunc.hal_xmit)
-               return padapter->HalFunc.hal_xmit(padapter, pxmitframe);
-
-       return _FALSE;  
+       return padapter->HalFunc.hal_xmit(padapter, pxmitframe);
 }
 
 /*
 }
 
 /*
@@ -400,35 +370,26 @@ s32       rtw_hal_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe)
        }
 #endif //CONFIG_IEEE80211W
        
        }
 #endif //CONFIG_IEEE80211W
        
-       if(padapter->HalFunc.mgnt_xmit)
-               ret = padapter->HalFunc.mgnt_xmit(padapter, pmgntframe);
+       ret = padapter->HalFunc.mgnt_xmit(padapter, pmgntframe);
        return ret;
 }
 
 s32    rtw_hal_init_xmit_priv(_adapter *padapter)
 {      
        return ret;
 }
 
 s32    rtw_hal_init_xmit_priv(_adapter *padapter)
 {      
-       if(padapter->HalFunc.init_xmit_priv != NULL)
-               return padapter->HalFunc.init_xmit_priv(padapter);
-       return _FAIL;
+       return padapter->HalFunc.init_xmit_priv(padapter);      
 }
 void   rtw_hal_free_xmit_priv(_adapter *padapter)
 {
 }
 void   rtw_hal_free_xmit_priv(_adapter *padapter)
 {
-       if(padapter->HalFunc.free_xmit_priv != NULL)
-               padapter->HalFunc.free_xmit_priv(padapter);
+       padapter->HalFunc.free_xmit_priv(padapter);
 }
 
 s32    rtw_hal_init_recv_priv(_adapter *padapter)
 {      
 }
 
 s32    rtw_hal_init_recv_priv(_adapter *padapter)
 {      
-       if(padapter->HalFunc.init_recv_priv)
-               return padapter->HalFunc.init_recv_priv(padapter);
-
-       return _FAIL;
+       return padapter->HalFunc.init_recv_priv(padapter);
 }
 void   rtw_hal_free_recv_priv(_adapter *padapter)
 {
 }
 void   rtw_hal_free_recv_priv(_adapter *padapter)
 {
-       
-       if(padapter->HalFunc.free_recv_priv)
-               padapter->HalFunc.free_recv_priv(padapter);
+       padapter->HalFunc.free_recv_priv(padapter);
 }
 
 void rtw_hal_update_ra_mask(struct sta_info *psta, u8 rssi_level)
 }
 
 void rtw_hal_update_ra_mask(struct sta_info *psta, u8 rssi_level)
@@ -449,28 +410,34 @@ void rtw_hal_update_ra_mask(struct sta_info *psta, u8 rssi_level)
        }
        else
        {
        }
        else
        {
-               if(padapter->HalFunc.UpdateRAMaskHandler)
-                       padapter->HalFunc.UpdateRAMaskHandler(padapter, psta->mac_id, rssi_level);
+               padapter->HalFunc.UpdateRAMaskHandler(padapter, psta->mac_id, rssi_level);
        }
 }
 
 void   rtw_hal_add_ra_tid(_adapter *padapter, u32 bitmap, u8* arg, u8 rssi_level)
 {
        }
 }
 
 void   rtw_hal_add_ra_tid(_adapter *padapter, u32 bitmap, u8* arg, u8 rssi_level)
 {
-       if(padapter->HalFunc.Add_RateATid)
-               padapter->HalFunc.Add_RateATid(padapter, bitmap, arg, rssi_level);
+       padapter->HalFunc.Add_RateATid(padapter, bitmap, arg, rssi_level);
 }
 
 /*     Start specifical interface thread               */
 void   rtw_hal_start_thread(_adapter *padapter)
 {
 }
 
 /*     Start specifical interface thread               */
 void   rtw_hal_start_thread(_adapter *padapter)
 {
-       if(padapter->HalFunc.run_thread)
-               padapter->HalFunc.run_thread(padapter);
+#if defined(CONFIG_SDIO_HCI) || defined (CONFIG_GSPI_HCI)
+#ifndef CONFIG_SDIO_TX_TASKLET 
+       padapter->HalFunc.run_thread(padapter); 
+#endif
+#endif
 }
 /*     Start specifical interface thread               */
 void   rtw_hal_stop_thread(_adapter *padapter)
 {
 }
 /*     Start specifical interface thread               */
 void   rtw_hal_stop_thread(_adapter *padapter)
 {
-       if(padapter->HalFunc.cancel_thread)
-               padapter->HalFunc.cancel_thread(padapter);
+#if defined(CONFIG_SDIO_HCI) || defined (CONFIG_GSPI_HCI)
+#ifndef CONFIG_SDIO_TX_TASKLET
+       
+       padapter->HalFunc.cancel_thread(padapter);
+       
+#endif
+#endif 
 }
 
 u32    rtw_hal_read_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask)
 }
 
 u32    rtw_hal_read_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask)
@@ -498,27 +465,25 @@ void      rtw_hal_write_rfreg(_adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMa
        if(padapter->HalFunc.write_rfreg)
                padapter->HalFunc.write_rfreg(padapter, eRFPath, RegAddr, BitMask, Data);       
 }
        if(padapter->HalFunc.write_rfreg)
                padapter->HalFunc.write_rfreg(padapter, eRFPath, RegAddr, BitMask, Data);       
 }
-
+#if defined(CONFIG_PCI_HCI)
 s32    rtw_hal_interrupt_handler(_adapter *padapter)
 {
 s32    rtw_hal_interrupt_handler(_adapter *padapter)
 {
-       if(padapter->HalFunc.interrupt_handler)
-               return padapter->HalFunc.interrupt_handler(padapter);
-       return _FAIL;
+       s32 ret = _FAIL;
+       ret = padapter->HalFunc.interrupt_handler(padapter);
+       return ret;
 }
 }
-
+#endif
 void   rtw_hal_set_bwmode(_adapter *padapter, CHANNEL_WIDTH Bandwidth, u8 Offset)
 {
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(padapter);
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);
        
 void   rtw_hal_set_bwmode(_adapter *padapter, CHANNEL_WIDTH Bandwidth, u8 Offset)
 {
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(padapter);
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);
        
-       if(padapter->HalFunc.set_bwmode_handler)
-       {
-               ODM_AcquireSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
-               if(pDM_Odm->RFCalibrateInfo.bIQKInProgress == _TRUE)
-                       DBG_871X_LEVEL(_drv_err_, "%s, %d, IQK may race condition\n", __func__,__LINE__);
-               ODM_ReleaseSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
-               padapter->HalFunc.set_bwmode_handler(padapter, Bandwidth, Offset);
-       }
+       ODM_AcquireSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
+       if(pDM_Odm->RFCalibrateInfo.bIQKInProgress == _TRUE)
+               DBG_871X_LEVEL(_drv_err_, "%s, %d, IQK may race condition\n", __func__,__LINE__);
+       ODM_ReleaseSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
+       padapter->HalFunc.set_bwmode_handler(padapter, Bandwidth, Offset);
+       
 }
 
 void   rtw_hal_set_chan(_adapter *padapter, u8 channel)
 }
 
 void   rtw_hal_set_chan(_adapter *padapter, u8 channel)
@@ -526,14 +491,11 @@ void      rtw_hal_set_chan(_adapter *padapter, u8 channel)
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(padapter);
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);
        
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(padapter);
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);
        
-       if(padapter->HalFunc.set_channel_handler)
-       {
-               ODM_AcquireSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
-               if(pDM_Odm->RFCalibrateInfo.bIQKInProgress == _TRUE)
-                       DBG_871X_LEVEL(_drv_err_, "%s, %d, IQK may race condition\n", __func__,__LINE__);
-               ODM_ReleaseSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
-               padapter->HalFunc.set_channel_handler(padapter, channel);
-       }
+       ODM_AcquireSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
+       if(pDM_Odm->RFCalibrateInfo.bIQKInProgress == _TRUE)
+               DBG_871X_LEVEL(_drv_err_, "%s, %d, IQK may race condition\n", __func__,__LINE__);
+       ODM_ReleaseSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
+       padapter->HalFunc.set_channel_handler(padapter, channel);       
 }
 
 void   rtw_hal_set_chnl_bw(_adapter *padapter, u8 channel, CHANNEL_WIDTH Bandwidth, u8 Offset40, u8 Offset80)
 }
 
 void   rtw_hal_set_chnl_bw(_adapter *padapter, u8 channel, CHANNEL_WIDTH Bandwidth, u8 Offset40, u8 Offset80)
@@ -541,14 +503,11 @@ void      rtw_hal_set_chnl_bw(_adapter *padapter, u8 channel, CHANNEL_WIDTH Bandwidth
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(padapter);
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);
        
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(padapter);
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);
        
-       if(padapter->HalFunc.set_chnl_bw_handler)
-       {
-               ODM_AcquireSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
-               if(pDM_Odm->RFCalibrateInfo.bIQKInProgress == _TRUE)
-                       DBG_871X_LEVEL(_drv_err_, "%s, %d, IQK may race condition\n", __func__,__LINE__);
-               ODM_ReleaseSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
-               padapter->HalFunc.set_chnl_bw_handler(padapter, channel, Bandwidth, Offset40, Offset80);
-       }
+       ODM_AcquireSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
+       if(pDM_Odm->RFCalibrateInfo.bIQKInProgress == _TRUE)
+               DBG_871X_LEVEL(_drv_err_, "%s, %d, IQK may race condition\n", __func__,__LINE__);
+       ODM_ReleaseSpinLock( pDM_Odm, RT_IQK_SPINLOCK);
+       padapter->HalFunc.set_chnl_bw_handler(padapter, channel, Bandwidth, Offset40, Offset80);        
 }
 
 void   rtw_hal_set_tx_power_level(_adapter *padapter, u8 channel)
 }
 
 void   rtw_hal_set_tx_power_level(_adapter *padapter, u8 channel)
@@ -565,16 +524,14 @@ void      rtw_hal_get_tx_power_level(_adapter *padapter, s32 *powerlevel)
 
 void   rtw_hal_dm_watchdog(_adapter *padapter)
 {
 
 void   rtw_hal_dm_watchdog(_adapter *padapter)
 {
-#if defined(CONFIG_CONCURRENT_MODE)
-       if (padapter->adapter_type != PRIMARY_ADAPTER)
+       if (!is_primary_adapter(padapter))
                return;
                return;
-#endif 
 
 
-       if(padapter->HalFunc.hal_dm_watchdog)
-               padapter->HalFunc.hal_dm_watchdog(padapter);
+       padapter->HalFunc.hal_dm_watchdog(padapter);
        
 }
 
        
 }
 
+#ifdef CONFIG_LPS_LCLK_WD_TIMER
 void   rtw_hal_dm_watchdog_in_lps(_adapter *padapter)
 {
 #if defined(CONFIG_CONCURRENT_MODE)
 void   rtw_hal_dm_watchdog_in_lps(_adapter *padapter)
 {
 #if defined(CONFIG_CONCURRENT_MODE)
@@ -582,19 +539,15 @@ void      rtw_hal_dm_watchdog_in_lps(_adapter *padapter)
                return;
 #endif 
 
                return;
 #endif 
 
-       if (adapter_to_pwrctl(padapter)->bFwCurrentInPSMode ==_TRUE )
-       {
-               if(padapter->HalFunc.hal_dm_watchdog_in_lps)
-               {
-                       padapter->HalFunc.hal_dm_watchdog_in_lps(padapter);//this fuction caller is in interrupt context                        
-               }               
+       if (adapter_to_pwrctl(padapter)->bFwCurrentInPSMode ==_TRUE ) {
+               padapter->HalFunc.hal_dm_watchdog_in_lps(padapter);//this fuction caller is in interrupt context                                        
        }
 }
        }
 }
+#endif
 
 void rtw_hal_bcn_related_reg_setting(_adapter *padapter)
 
 void rtw_hal_bcn_related_reg_setting(_adapter *padapter)
-{
-       if(padapter->HalFunc.SetBeaconRelatedRegistersHandler)
-               padapter->HalFunc.SetBeaconRelatedRegistersHandler(padapter);   
+{      
+       padapter->HalFunc.SetBeaconRelatedRegistersHandler(padapter);   
 }
 
 
 }
 
 
@@ -624,21 +577,17 @@ s32       rtw_hal_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt)
 #ifdef DBG_CONFIG_ERROR_DETECT
 void   rtw_hal_sreset_init(_adapter *padapter)
 {
 #ifdef DBG_CONFIG_ERROR_DETECT
 void   rtw_hal_sreset_init(_adapter *padapter)
 {
-       if(padapter->HalFunc.sreset_init_value)
-               padapter->HalFunc.sreset_init_value(padapter); 
+       padapter->HalFunc.sreset_init_value(padapter); 
 }
 void rtw_hal_sreset_reset(_adapter *padapter)
 {
        padapter = GET_PRIMARY_ADAPTER(padapter);
 }
 void rtw_hal_sreset_reset(_adapter *padapter)
 {
        padapter = GET_PRIMARY_ADAPTER(padapter);
-
-       if(padapter->HalFunc.silentreset)
-               padapter->HalFunc.silentreset(padapter);
+       padapter->HalFunc.silentreset(padapter);
 }
 
 void rtw_hal_sreset_reset_value(_adapter *padapter)
 {
 }
 
 void rtw_hal_sreset_reset_value(_adapter *padapter)
 {
-       if(padapter->HalFunc.sreset_reset_value)
-               padapter->HalFunc.sreset_reset_value(padapter);
+       padapter->HalFunc.sreset_reset_value(padapter);
 }
 
 void rtw_hal_sreset_xmit_status_check(_adapter *padapter)
 }
 
 void rtw_hal_sreset_xmit_status_check(_adapter *padapter)
@@ -646,34 +595,23 @@ void rtw_hal_sreset_xmit_status_check(_adapter *padapter)
        if (!is_primary_adapter(padapter))
                return;
 
        if (!is_primary_adapter(padapter))
                return;
 
-       if(padapter->HalFunc.sreset_xmit_status_check)
-               padapter->HalFunc.sreset_xmit_status_check(padapter);           
+       padapter->HalFunc.sreset_xmit_status_check(padapter);           
 }
 void rtw_hal_sreset_linked_status_check(_adapter *padapter)
 {
        if (!is_primary_adapter(padapter))
                return;
 }
 void rtw_hal_sreset_linked_status_check(_adapter *padapter)
 {
        if (!is_primary_adapter(padapter))
                return;
-
-       if(padapter->HalFunc.sreset_linked_status_check)
-               padapter->HalFunc.sreset_linked_status_check(padapter); 
+       padapter->HalFunc.sreset_linked_status_check(padapter); 
 }
 u8   rtw_hal_sreset_get_wifi_status(_adapter *padapter)
 }
 u8   rtw_hal_sreset_get_wifi_status(_adapter *padapter)
-{
-       u8 status = 0;
-       if(padapter->HalFunc.sreset_get_wifi_status)                            
-               status = padapter->HalFunc.sreset_get_wifi_status(padapter);       
-       return status;
+{      
+       return padapter->HalFunc.sreset_get_wifi_status(padapter);
 }
 
 bool rtw_hal_sreset_inprogress(_adapter *padapter)
 {
 }
 
 bool rtw_hal_sreset_inprogress(_adapter *padapter)
 {
-       bool inprogress = _FALSE;
-
        padapter = GET_PRIMARY_ADAPTER(padapter);
        padapter = GET_PRIMARY_ADAPTER(padapter);
-
-       if(padapter->HalFunc.sreset_inprogress)
-               inprogress = padapter->HalFunc.sreset_inprogress(padapter);
-       return inprogress;
+       return padapter->HalFunc.sreset_inprogress(padapter);
 }
 #endif //DBG_CONFIG_ERROR_DETECT
 
 }
 #endif //DBG_CONFIG_ERROR_DETECT
 
@@ -688,10 +626,8 @@ int rtw_hal_iol_cmd(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wat
 
 #ifdef CONFIG_XMIT_THREAD_MODE
 s32 rtw_hal_xmit_thread_handler(_adapter *padapter)
 
 #ifdef CONFIG_XMIT_THREAD_MODE
 s32 rtw_hal_xmit_thread_handler(_adapter *padapter)
-{
-       if(padapter->HalFunc.xmit_thread_handler)
-               return padapter->HalFunc.xmit_thread_handler(padapter);
-       return _FAIL;
+{      
+       return padapter->HalFunc.xmit_thread_handler(padapter);
 }
 #endif
 
 }
 #endif
 
@@ -713,7 +649,7 @@ bool rtw_hal_c2h_valid(_adapter *adapter, u8 *buf)
        HAL_VERSION *hal_ver = &HalData->VersionID;
        bool ret = _FAIL;
 
        HAL_VERSION *hal_ver = &HalData->VersionID;
        bool ret = _FAIL;
 
-       if (IS_81XXC(*hal_ver) || IS_8723_SERIES(*hal_ver) ||IS_92D(*hal_ver) ||IS_8188E(*hal_ver)) {
+       if (IS_8188E(*hal_ver)) {
                ret = c2h_evt_valid((struct c2h_evt_hdr *)buf);
        } else if(IS_8192E(*hal_ver) || IS_8812_SERIES(*hal_ver) || IS_8821_SERIES(*hal_ver) || IS_8723B_SERIES(*hal_ver)) {
                ret = c2h_evt_valid((struct c2h_evt_hdr_88xx*)buf);
                ret = c2h_evt_valid((struct c2h_evt_hdr *)buf);
        } else if(IS_8192E(*hal_ver) || IS_8812_SERIES(*hal_ver) || IS_8821_SERIES(*hal_ver) || IS_8723B_SERIES(*hal_ver)) {
                ret = c2h_evt_valid((struct c2h_evt_hdr_88xx*)buf);
@@ -730,7 +666,7 @@ s32 rtw_hal_c2h_evt_read(_adapter *adapter, u8 *buf)
        HAL_VERSION *hal_ver = &HalData->VersionID;
        s32 ret = _FAIL;
 
        HAL_VERSION *hal_ver = &HalData->VersionID;
        s32 ret = _FAIL;
 
-       if (IS_81XXC(*hal_ver) || IS_8723_SERIES(*hal_ver) ||IS_92D(*hal_ver) ||IS_8188E(*hal_ver)) {
+       if (IS_8188E(*hal_ver)) {
                ret = c2h_evt_read(adapter, buf);
        } else if(IS_8192E(*hal_ver) || IS_8812_SERIES(*hal_ver) || IS_8821_SERIES(*hal_ver) || IS_8723B_SERIES(*hal_ver)) {
                ret = c2h_evt_read_88xx(adapter, buf);
                ret = c2h_evt_read(adapter, buf);
        } else if(IS_8192E(*hal_ver) || IS_8812_SERIES(*hal_ver) || IS_8821_SERIES(*hal_ver) || IS_8723B_SERIES(*hal_ver)) {
                ret = c2h_evt_read_88xx(adapter, buf);
@@ -805,16 +741,291 @@ s32 rtw_hal_macid_wakeup(PADAPTER padapter, u8 macid)
 
 s32 rtw_hal_fill_h2c_cmd(PADAPTER padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer)
 {
 
 s32 rtw_hal_fill_h2c_cmd(PADAPTER padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer)
 {
-       s32 ret = _FAIL;
+       return padapter->HalFunc.fill_h2c_cmd(padapter, ElementID, CmdLen, pCmdBuffer); 
+}
 
 
-       if (padapter->HalFunc.fill_h2c_cmd)
-               ret = padapter->HalFunc.fill_h2c_cmd(padapter, ElementID, CmdLen, pCmdBuffer);
-       else
-       {
-               DBG_871X("%s:  func[fill_h2c_cmd] not defined!\n", __FUNCTION__);
-               rtw_warn_on(1);
+void rtw_hal_fill_fake_txdesc(_adapter* padapter, u8* pDesc, u32 BufferLen,
+               u8 IsPsPoll, u8 IsBTQosNull, u8 bDataFrame)
+{
+       padapter->HalFunc.fill_fake_txdesc(padapter, pDesc, BufferLen,IsPsPoll, IsBTQosNull, bDataFrame);
+
+}
+u8 rtw_hal_get_txbuff_rsvd_page_num(_adapter *adapter, bool wowlan)
+{
+       return adapter->HalFunc.hal_get_tx_buff_rsvd_page_num(adapter, wowlan);
+}
+
+#ifdef CONFIG_GPIO_API
+void rtw_hal_update_hisr_hsisr_ind(_adapter *padapter, u32 flag)
+{
+       if (padapter->HalFunc.update_hisr_hsisr_ind)
+               padapter->HalFunc.update_hisr_hsisr_ind(padapter, flag);
+}
+#endif
+
+#define rtw_hal_error_msg(ops_fun)             \
+       DBG_871X_LEVEL(_drv_always_, "### %s - Error : Please hook HalFunc.%s ###\n",__FUNCTION__,ops_fun)
+
+u8 rtw_hal_ops_check(_adapter *padapter)
+{      
+       u8 ret = _SUCCESS;
+#if 1
+       /*** initialize section ***/
+       if (NULL == padapter->HalFunc.read_chip_version) {
+               rtw_hal_error_msg("read_chip_version");
+               ret = _FAIL;
+       }       
+       if (NULL == padapter->HalFunc.init_default_value) {
+               rtw_hal_error_msg("init_default_value");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.intf_chip_configure) {
+               rtw_hal_error_msg("intf_chip_configure");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.read_adapter_info) {
+               rtw_hal_error_msg("read_adapter_info");
+               ret = _FAIL;
        }
 
        }
 
-       return ret;
+       if (NULL == padapter->HalFunc.hal_power_on) {           
+               rtw_hal_error_msg("hal_power_on");
+               ret = _FAIL;
+       }       
+       if (NULL == padapter->HalFunc.hal_power_off) {
+               rtw_hal_error_msg("hal_power_off");
+               ret = _FAIL;
+       }
+       
+       if (NULL == padapter->HalFunc.hal_init) {
+               rtw_hal_error_msg("hal_init");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.hal_deinit) {
+               rtw_hal_error_msg("hal_deinit");
+               ret = _FAIL;
+       }
+       
+       /*** xmit section ***/
+       if (NULL == padapter->HalFunc.init_xmit_priv) {
+               rtw_hal_error_msg("init_xmit_priv");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.free_xmit_priv) {
+               rtw_hal_error_msg("free_xmit_priv");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.hal_xmit) {
+               rtw_hal_error_msg("hal_xmit");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.mgnt_xmit) {
+               rtw_hal_error_msg("mgnt_xmit");
+               ret = _FAIL;
+       }
+       #ifdef CONFIG_XMIT_THREAD_MODE
+       if (NULL == padapter->HalFunc.xmit_thread_handler) {
+               rtw_hal_error_msg("xmit_thread_handler");
+               ret = _FAIL;
+       }
+       #endif
+       if (NULL == padapter->HalFunc.hal_xmitframe_enqueue) {
+               rtw_hal_error_msg("hal_xmitframe_enqueue");
+               ret = _FAIL;
+       }
+       #if defined(CONFIG_SDIO_HCI) || defined (CONFIG_GSPI_HCI)
+       #ifndef CONFIG_SDIO_TX_TASKLET
+       if (NULL == padapter->HalFunc.run_thread) {
+               rtw_hal_error_msg("run_thread");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.cancel_thread) {
+               rtw_hal_error_msg("cancel_thread");
+               ret = _FAIL;
+       }
+       #endif
+       #endif
+       
+       /*** recv section ***/
+       if (NULL == padapter->HalFunc.init_recv_priv) {
+               rtw_hal_error_msg("init_recv_priv");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.free_recv_priv) {
+               rtw_hal_error_msg("free_recv_priv");
+               ret = _FAIL;
+       }
+       #if defined(CONFIG_USB_HCI) || defined (CONFIG_PCI_HCI)
+       if (NULL == padapter->HalFunc.inirp_init) {
+               rtw_hal_error_msg("inirp_init");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.inirp_deinit) {
+               rtw_hal_error_msg("inirp_deinit");
+               ret = _FAIL;
+       }
+       #endif //#if defined(CONFIG_USB_HCI) || defined (CONFIG_PCI_HCI)
+       
+       
+       /*** interrupt hdl section ***/
+       #if defined(CONFIG_PCI_HCI)
+       if (NULL == padapter->HalFunc.irp_reset) {
+               rtw_hal_error_msg("irp_reset");
+               ret = _FAIL;
+       }       
+       if (NULL == padapter->HalFunc.interrupt_handler) {
+               rtw_hal_error_msg("interrupt_handler");
+               ret = _FAIL;
+       }
+       #endif //#if defined(CONFIG_PCI_HCI)    
+
+       #if defined(CONFIG_PCI_HCI) || defined (CONFIG_SDIO_HCI) || defined (CONFIG_GSPI_HCI)   
+       if (NULL == padapter->HalFunc.enable_interrupt) {
+               rtw_hal_error_msg("enable_interrupt");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.disable_interrupt) {
+               rtw_hal_error_msg("disable_interrupt");
+               ret = _FAIL;
+       }
+       #endif //defined(CONFIG_PCI_HCI) || defined (CONFIG_SDIO_HCI) || defined (CONFIG_GSPI_HCI)
+               
+       
+       /*** DM section ***/
+       if (NULL == padapter->HalFunc.dm_init) {
+               rtw_hal_error_msg("dm_init");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.dm_deinit) {
+               rtw_hal_error_msg("dm_deinit");
+               ret = _FAIL;
+       }       
+       if (NULL == padapter->HalFunc.hal_dm_watchdog) {
+               rtw_hal_error_msg("hal_dm_watchdog");
+               ret = _FAIL;
+       }
+       #ifdef CONFIG_LPS_LCLK_WD_TIMER
+       if (NULL == padapter->HalFunc.hal_dm_watchdog_in_lps) {
+               rtw_hal_error_msg("hal_dm_watchdog_in_lps");
+               ret = _FAIL;
+       }
+       #endif
+
+       /*** xxx section ***/
+       if (NULL == padapter->HalFunc.set_bwmode_handler) {
+               rtw_hal_error_msg("set_bwmode_handler");
+               ret = _FAIL;
+       }
+
+       if (NULL == padapter->HalFunc.set_channel_handler) {
+               rtw_hal_error_msg("set_channel_handler");
+               ret = _FAIL;
+       }
+
+       if (NULL == padapter->HalFunc.set_chnl_bw_handler) {
+               rtw_hal_error_msg("set_chnl_bw_handler");
+               ret = _FAIL;
+       }       
+       
+       if (NULL == padapter->HalFunc.SetHwRegHandler) {
+               rtw_hal_error_msg("SetHwRegHandler");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.GetHwRegHandler) {
+               rtw_hal_error_msg("GetHwRegHandler");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.GetHalDefVarHandler) {
+               rtw_hal_error_msg("GetHalDefVarHandler");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.SetHalDefVarHandler) {
+               rtw_hal_error_msg("SetHalDefVarHandler");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.GetHalODMVarHandler) {
+               rtw_hal_error_msg("GetHalODMVarHandler");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.SetHalODMVarHandler) {
+               rtw_hal_error_msg("SetHalODMVarHandler");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.UpdateRAMaskHandler) {
+               rtw_hal_error_msg("UpdateRAMaskHandler");
+               ret = _FAIL;
+       }       
+       
+       if (NULL == padapter->HalFunc.SetBeaconRelatedRegistersHandler) {
+               rtw_hal_error_msg("SetBeaconRelatedRegistersHandler");
+               ret = _FAIL;
+       }
+
+       if (NULL == padapter->HalFunc.Add_RateATid) {
+               rtw_hal_error_msg("Add_RateATid");
+               ret = _FAIL;
+       }       
+
+       if (NULL == padapter->HalFunc.fill_h2c_cmd) {
+               rtw_hal_error_msg("fill_h2c_cmd");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.fill_fake_txdesc) {
+               rtw_hal_error_msg("fill_fake_txdesc");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.hal_get_tx_buff_rsvd_page_num) {
+               rtw_hal_error_msg("hal_get_tx_buff_rsvd_page_num");
+               ret = _FAIL;
+       }
+
+       #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
+       #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+       if (NULL == padapter->HalFunc.clear_interrupt) {
+               rtw_hal_error_msg("clear_interrupt");
+               ret = _FAIL;
+       }
+       #endif
+       if (NULL == padapter->HalFunc.hal_set_wowlan_fw) {
+               rtw_hal_error_msg("hal_set_wowlan_fw");
+               ret = _FAIL;
+       }
+       #endif //CONFIG_WOWLAN
+       
+       
+       /*** SReset section ***/
+       #ifdef DBG_CONFIG_ERROR_DETECT          
+       if (NULL == padapter->HalFunc.sreset_init_value) {
+               rtw_hal_error_msg("sreset_init_value");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.sreset_reset_value) {
+               rtw_hal_error_msg("sreset_reset_value");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.silentreset) {
+               rtw_hal_error_msg("silentreset");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.sreset_xmit_status_check) {
+               rtw_hal_error_msg("sreset_xmit_status_check");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.sreset_linked_status_check) {
+               rtw_hal_error_msg("sreset_linked_status_check");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.sreset_get_wifi_status) {
+               rtw_hal_error_msg("sreset_get_wifi_status");
+               ret = _FAIL;
+       }
+       if (NULL == padapter->HalFunc.sreset_inprogress) {
+               rtw_hal_error_msg("sreset_inprogress");
+               ret = _FAIL;
+       }
+       #endif  //#ifdef DBG_CONFIG_ERROR_DETECT
+
+#endif
+       return  ret;
 }
 
 }
 
index 6706e0101c86b65882916baae84bb585c94184b3..4827b9b212535ba3eecc908f5dd2da2f135cd295 100755 (executable)
@@ -149,17 +149,17 @@ SwLedBlink1(
        )\r
 {\r
        _adapter                                *padapter = pLed->padapter;\r
        )\r
 {\r
        _adapter                                *padapter = pLed->padapter;\r
-       EEPROM_EFUSE_PRIV       *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);\r
+       PHAL_DATA_TYPE          pHalData = GET_HAL_DATA(padapter);\r
        struct led_priv         *ledpriv = &(padapter->ledpriv);\r
        struct mlme_priv                *pmlmepriv = &(padapter->mlmepriv);\r
        PLED_USB                        pLed1 = &(ledpriv->SwLed1);\r
        u8                                      bStopBlinking = _FALSE;\r
 \r
        u32 uLedBlinkNoLinkInterval = LED_BLINK_NO_LINK_INTERVAL_ALPHA; //add by ylb 20121012 for customer led for alpha\r
        struct led_priv         *ledpriv = &(padapter->ledpriv);\r
        struct mlme_priv                *pmlmepriv = &(padapter->mlmepriv);\r
        PLED_USB                        pLed1 = &(ledpriv->SwLed1);\r
        u8                                      bStopBlinking = _FALSE;\r
 \r
        u32 uLedBlinkNoLinkInterval = LED_BLINK_NO_LINK_INTERVAL_ALPHA; //add by ylb 20121012 for customer led for alpha\r
-       if(pEEPROM->CustomerID == RT_CID_819x_ALPHA_Dlink)\r
+       if(pHalData->CustomerID == RT_CID_819x_ALPHA_Dlink)\r
                uLedBlinkNoLinkInterval= LED_BLINK_NO_LINK_INTERVAL_ALPHA_500MS;\r
        \r
                uLedBlinkNoLinkInterval= LED_BLINK_NO_LINK_INTERVAL_ALPHA_500MS;\r
        \r
-       if(pEEPROM->CustomerID == RT_CID_819x_CAMEO)\r
+       if(pHalData->CustomerID == RT_CID_819x_CAMEO)\r
                pLed = &(ledpriv->SwLed1);\r
 \r
        // Change LED according to BlinkingLedState specified.\r
                pLed = &(ledpriv->SwLed1);\r
 \r
        // Change LED according to BlinkingLedState specified.\r
@@ -175,7 +175,7 @@ SwLedBlink1(
        }\r
 \r
 \r
        }\r
 \r
 \r
-       if(pEEPROM->CustomerID == RT_CID_DEFAULT)\r
+       if(pHalData->CustomerID == RT_CID_DEFAULT)\r
        {\r
                if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
                {\r
        {\r
                if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
                {\r
@@ -795,18 +795,12 @@ SwLedBlink4(
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       if(IS_HARDWARE_TYPE_8192DU(padapter))\r
-                                       {\r
-                                               pLed->BlinkingLedState = RTW_LED_ON;\r
-                                               pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
-                                       }\r
+                                       \r
+                                       if( pLed->bLedOn )\r
+                                               pLed->BlinkingLedState = RTW_LED_OFF;\r
                                        else\r
                                        else\r
-                                       {\r
-                                               if( pLed->bLedOn )\r
-                                                       pLed->BlinkingLedState = RTW_LED_OFF;\r
-                                               else\r
-                                                       pLed->BlinkingLedState = RTW_LED_ON;\r
-                                       }\r
+                                               pLed->BlinkingLedState = RTW_LED_ON;\r
+                                       \r
                                        _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
                                }\r
                        }\r
                                        _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
                                }\r
                        }\r
@@ -879,20 +873,13 @@ SwLedBlink4(
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       if(IS_HARDWARE_TYPE_8192DU(padapter))\r
-                                       {\r
-                                               pLed->BlinkingLedState = RTW_LED_ON; \r
-                                               pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
-                                       }\r
+                                       pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+                                       pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+                                       if( pLed->bLedOn )\r
+                                               pLed->BlinkingLedState = RTW_LED_OFF;\r
                                        else\r
                                        else\r
-                                       {\r
-                                               pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
-                                               pLed->CurrLedState = LED_BLINK_SLOWLY;\r
-                                               if( pLed->bLedOn )\r
-                                                       pLed->BlinkingLedState = RTW_LED_OFF;\r
-                                               else\r
-                                                       pLed->BlinkingLedState = RTW_LED_ON;\r
-                                       }\r
+                                               pLed->BlinkingLedState = RTW_LED_ON;\r
+                                       \r
                                        _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
                                }\r
                                pLed->bLedBlinkInProgress = _FALSE;\r
                                        _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
                                }\r
                                pLed->bLedBlinkInProgress = _FALSE;\r
@@ -906,17 +893,11 @@ SwLedBlink4(
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       if(IS_HARDWARE_TYPE_8192DU(padapter))\r
-                                       {\r
-                                               pLed->BlinkingLedState = RTW_LED_ON;\r
-                                       }\r
+                                       if( pLed->bLedOn )\r
+                                               pLed->BlinkingLedState = RTW_LED_OFF;\r
                                        else\r
                                        else\r
-                                       {\r
-                                               if( pLed->bLedOn )\r
-                                                       pLed->BlinkingLedState = RTW_LED_OFF;\r
-                                               else\r
-                                                       pLed->BlinkingLedState = RTW_LED_ON;\r
-                                       }\r
+                                               pLed->BlinkingLedState = RTW_LED_ON;\r
+                                       \r
                                        _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
                                }\r
                        }\r
                                        _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
                                }\r
                        }\r
@@ -1354,18 +1335,11 @@ SwLedBlink9(
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       if(IS_HARDWARE_TYPE_8192DU(Adapter))\r
-                                       {\r
-                                               pLed->BlinkingLedState = RTW_LED_ON; \r
-                                               pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
-                                       }\r
+                                       if( pLed->bLedOn )\r
+                                               pLed->BlinkingLedState = RTW_LED_OFF; \r
                                        else\r
                                        else\r
-                                       {\r
-                                                if( pLed->bLedOn )\r
-                                                       pLed->BlinkingLedState = RTW_LED_OFF; \r
-                                               else\r
-                                                       pLed->BlinkingLedState = RTW_LED_ON; \r
-                                       }\r
+                                               pLed->BlinkingLedState = RTW_LED_ON; \r
+                                       \r
                                        _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
                                }\r
                        }\r
                                        _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
                                }\r
                        }\r
@@ -1448,7 +1422,7 @@ SwLedBlink9(
                                }\r
                                else \r
                                {\r
                                }\r
                                else \r
                                {\r
-                                       if(IS_HARDWARE_TYPE_8192DU(Adapter) || IS_HARDWARE_TYPE_8812AU(Adapter))\r
+                                       if(IS_HARDWARE_TYPE_8812AU(Adapter))\r
                                        {\r
                                                pLed->BlinkingLedState = RTW_LED_ON; \r
                                                pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
                                        {\r
                                                pLed->BlinkingLedState = RTW_LED_ON; \r
                                                pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
@@ -1475,7 +1449,7 @@ SwLedBlink9(
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       if(IS_HARDWARE_TYPE_8192DU(Adapter) || IS_HARDWARE_TYPE_8723AU(Adapter) || IS_HARDWARE_TYPE_8812AU(Adapter))\r
+                                       if(IS_HARDWARE_TYPE_8812AU(Adapter))\r
                                        {\r
                                                pLed->BlinkingLedState = RTW_LED_ON; \r
                                        }\r
                                        {\r
                                                pLed->BlinkingLedState = RTW_LED_ON; \r
                                        }\r
@@ -1716,7 +1690,7 @@ SwLedBlink10(
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       if(IS_HARDWARE_TYPE_8192DU(Adapter) || IS_HARDWARE_TYPE_8812AU(Adapter))\r
+                                       if(IS_HARDWARE_TYPE_8812AU(Adapter))\r
                                        {\r
                                                pLed->BlinkingLedState = RTW_LED_ON;\r
                                                pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
                                        {\r
                                                pLed->BlinkingLedState = RTW_LED_ON;\r
                                                pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
@@ -1743,7 +1717,7 @@ SwLedBlink10(
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       if(IS_HARDWARE_TYPE_8192DU(Adapter) || IS_HARDWARE_TYPE_8723AU(Adapter) || IS_HARDWARE_TYPE_8812AU(Adapter))\r
+                                       if(IS_HARDWARE_TYPE_8812AU(Adapter))\r
                                        {\r
                                                pLed->BlinkingLedState = RTW_LED_ON;\r
                                        }\r
                                        {\r
                                                pLed->BlinkingLedState = RTW_LED_ON;\r
                                        }\r
@@ -2426,7 +2400,8 @@ void BlinkTimerCallback(void *data)
        #ifdef CONFIG_LED_HANDLED_BY_CMD_THREAD\r
        rtw_led_blink_cmd(padapter, (PVOID)pLed);\r
        #else\r
        #ifdef CONFIG_LED_HANDLED_BY_CMD_THREAD\r
        rtw_led_blink_cmd(padapter, (PVOID)pLed);\r
        #else\r
-       _set_workitem(&(pLed->BlinkWorkItem));\r
+       if(ATOMIC_READ(&pLed->bCancelWorkItem) == _FALSE)\r
+               _set_workitem(&(pLed->BlinkWorkItem));\r
        #endif\r
 }\r
 \r
        #endif\r
 }\r
 \r
@@ -2567,13 +2542,13 @@ SwLedControlMode1(
        struct led_priv         *ledpriv = &(padapter->ledpriv);\r
        PLED_USB                        pLed = &(ledpriv->SwLed0);\r
        struct mlme_priv                *pmlmepriv = &(padapter->mlmepriv);\r
        struct led_priv         *ledpriv = &(padapter->ledpriv);\r
        PLED_USB                        pLed = &(ledpriv->SwLed0);\r
        struct mlme_priv                *pmlmepriv = &(padapter->mlmepriv);\r
-       EEPROM_EFUSE_PRIV       *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);\r
+       PHAL_DATA_TYPE          pHalData = GET_HAL_DATA(padapter);\r
 \r
        u32 uLedBlinkNoLinkInterval = LED_BLINK_NO_LINK_INTERVAL_ALPHA; //add by ylb 20121012 for customer led for alpha\r
 \r
        u32 uLedBlinkNoLinkInterval = LED_BLINK_NO_LINK_INTERVAL_ALPHA; //add by ylb 20121012 for customer led for alpha\r
-       if(pEEPROM->CustomerID == RT_CID_819x_ALPHA_Dlink)\r
+       if(pHalData->CustomerID == RT_CID_819x_ALPHA_Dlink)\r
                uLedBlinkNoLinkInterval= LED_BLINK_NO_LINK_INTERVAL_ALPHA_500MS;        \r
        \r
                uLedBlinkNoLinkInterval= LED_BLINK_NO_LINK_INTERVAL_ALPHA_500MS;        \r
        \r
-       if(pEEPROM->CustomerID == RT_CID_819x_CAMEO)\r
+       if(pHalData->CustomerID == RT_CID_819x_CAMEO)\r
                pLed = &(ledpriv->SwLed1);\r
 \r
        switch(LedAction)\r
                pLed = &(ledpriv->SwLed1);\r
 \r
        switch(LedAction)\r
@@ -3266,31 +3241,12 @@ SwLedControlMode4(
                                }\r
 \r
                                pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
                                }\r
 \r
                                pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
-                               if(IS_HARDWARE_TYPE_8192DU(padapter))\r
-                               {\r
-                                       if(LedAction == LED_CTL_LINK)\r
-                                       {\r
-                                               pLed->BlinkingLedState = RTW_LED_ON;\r
-                                               pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               pLed->CurrLedState = LED_BLINK_SLOWLY;\r
-                                               if( pLed->bLedOn )\r
-                                                       pLed->BlinkingLedState = RTW_LED_OFF;\r
-                                               else\r
-                                                       pLed->BlinkingLedState = RTW_LED_ON;\r
-\r
-                                       }\r
-                               }\r
+                               pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+                               if( pLed->bLedOn )\r
+                                       pLed->BlinkingLedState = RTW_LED_OFF;\r
                                else\r
                                else\r
-                               {\r
-                                       pLed->CurrLedState = LED_BLINK_SLOWLY;\r
-                                       if( pLed->bLedOn )\r
-                                               pLed->BlinkingLedState = RTW_LED_OFF;\r
-                                       else\r
-                                               pLed->BlinkingLedState = RTW_LED_ON;\r
-                               }\r
+                                       pLed->BlinkingLedState = RTW_LED_ON;\r
+                               \r
                                _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
                        }\r
                        break;\r
                                _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
                        }\r
                        break;\r
@@ -3314,10 +3270,7 @@ SwLedControlMode4(
                                        pLed->bLedBlinkInProgress = _FALSE;\r
                                }\r
                                pLed->bLedScanBlinkInProgress = _TRUE;\r
                                        pLed->bLedBlinkInProgress = _FALSE;\r
                                }\r
                                pLed->bLedScanBlinkInProgress = _TRUE;\r
-                               if(IS_HARDWARE_TYPE_8192D(padapter))\r
-                                       pLed->CurrLedState = LED_BLINK_SLOWLY;\r
-                               else\r
-                                       pLed->CurrLedState = LED_BLINK_SCAN;\r
+                               pLed->CurrLedState = LED_BLINK_SCAN;\r
                                pLed->BlinkTimes = 24;\r
                                if( pLed->bLedOn )\r
                                        pLed->BlinkingLedState = RTW_LED_OFF;\r
                                pLed->BlinkTimes = 24;\r
                                if( pLed->bLedOn )\r
                                        pLed->BlinkingLedState = RTW_LED_OFF;\r
@@ -3556,10 +3509,10 @@ SwLedControlMode5(
 {\r
        struct led_priv *ledpriv = &(padapter->ledpriv);\r
        struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;\r
 {\r
        struct led_priv *ledpriv = &(padapter->ledpriv);\r
        struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;\r
-       EEPROM_EFUSE_PRIV       *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);\r
+       PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(padapter);\r
        PLED_USB                pLed = &(ledpriv->SwLed0);\r
 \r
        PLED_USB                pLed = &(ledpriv->SwLed0);\r
 \r
-       if(pEEPROM->CustomerID == RT_CID_819x_CAMEO)\r
+       if(pHalData->CustomerID == RT_CID_819x_CAMEO)\r
                pLed = &(ledpriv->SwLed1);\r
 \r
        switch(LedAction)\r
                pLed = &(ledpriv->SwLed1);\r
 \r
        switch(LedAction)\r
@@ -3975,7 +3928,7 @@ SwLedControlMode9(
                                }\r
                                \r
                                pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
                                }\r
                                \r
                                pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
-                               if(IS_HARDWARE_TYPE_8192DU(Adapter) || IS_HARDWARE_TYPE_8812AU(Adapter))\r
+                               if(IS_HARDWARE_TYPE_8812AU(Adapter))\r
                                {\r
                                        if(LedAction == LED_CTL_LINK)\r
                                        {\r
                                {\r
                                        if(LedAction == LED_CTL_LINK)\r
                                        {\r
@@ -4023,10 +3976,7 @@ SwLedControlMode9(
                                        pLed->bLedBlinkInProgress = _FALSE;\r
                                }\r
                                pLed->bLedScanBlinkInProgress = _TRUE;\r
                                        pLed->bLedBlinkInProgress = _FALSE;\r
                                }\r
                                pLed->bLedScanBlinkInProgress = _TRUE;\r
-                               if(IS_HARDWARE_TYPE_8192D(Adapter))\r
-                                       pLed->CurrLedState = LED_BLINK_SLOWLY;\r
-                               else\r
-                                       pLed->CurrLedState = LED_BLINK_SCAN;\r
+                               pLed->CurrLedState = LED_BLINK_SCAN;\r
                                pLed->BlinkTimes = 24;\r
                                if( pLed->bLedOn )\r
                                        pLed->BlinkingLedState = RTW_LED_OFF; \r
                                pLed->BlinkTimes = 24;\r
                                if( pLed->bLedOn )\r
                                        pLed->BlinkingLedState = RTW_LED_OFF; \r
@@ -5202,9 +5152,8 @@ InitLed(
        pLed->LedPin = LedPin;\r
 \r
        ResetLedStatus(pLed);\r
        pLed->LedPin = LedPin;\r
 \r
        ResetLedStatus(pLed);\r
-\r
+       ATOMIC_SET(&pLed->bCancelWorkItem, _FALSE);\r
        _init_timer(&(pLed->BlinkTimer), padapter->pnetdev, BlinkTimerCallback, pLed);\r
        _init_timer(&(pLed->BlinkTimer), padapter->pnetdev, BlinkTimerCallback, pLed);\r
-\r
        _init_workitem(&(pLed->BlinkWorkItem), BlinkWorkItemCallback, pLed);\r
 }\r
 \r
        _init_workitem(&(pLed->BlinkWorkItem), BlinkWorkItemCallback, pLed);\r
 }\r
 \r
@@ -5218,6 +5167,7 @@ DeInitLed(
        PLED_USB                pLed\r
        )\r
 {\r
        PLED_USB                pLed\r
        )\r
 {\r
+       ATOMIC_SET(&pLed->bCancelWorkItem, _TRUE);\r
        _cancel_workitem_sync(&(pLed->BlinkWorkItem));\r
        _cancel_timer_ex(&(pLed->BlinkTimer));\r
        ResetLedStatus(pLed);\r
        _cancel_workitem_sync(&(pLed->BlinkWorkItem));\r
        _cancel_timer_ex(&(pLed->BlinkTimer));\r
        ResetLedStatus(pLed);\r
index 7714e38b448eef303da8d923c085e2c2974f2c96..7c46ea78c89b955787de149efa4818abd493f305 100755 (executable)
@@ -42,10 +42,8 @@ static u8 _is_fw_read_cmd_down(_adapter* padapter, u8 msgbox_num)
                if(0 == valid ){
                        read_down = _TRUE;
                }
                if(0 == valid ){
                        read_down = _TRUE;
                }
-#ifdef CONFIG_WOWLAN
                else
                else
-                       rtw_msleep_os(1);               
-#endif
+                       rtw_msleep_os(1);
        }while( (!read_down) && (retry_cnts--));
 
        return read_down;
        }while( (!read_down) && (retry_cnts--));
 
        return read_down;
@@ -171,7 +169,7 @@ static void ConstructBeacon(_adapter *padapter, u8 *pframe, u32 *pLength)
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
        *(fctrl) = 0;
 
        _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
@@ -279,7 +277,7 @@ static void ConstructPSPoll(_adapter *padapter, u8 *pframe, u32 *pLength)
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        // TA.
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        // TA.
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
 
        *pLength = 16;
 }
 
        *pLength = 16;
 }
@@ -319,19 +317,19 @@ static void ConstructNullFunctionData(
                case Ndis802_11Infrastructure:
                        SetToDs(fctrl);
                        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
                case Ndis802_11Infrastructure:
                        SetToDs(fctrl);
                        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-                       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+                       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
                        _rtw_memcpy(pwlanhdr->addr3, StaAddr, ETH_ALEN);
                        break;
                case Ndis802_11APMode:
                        SetFrDs(fctrl);
                        _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
                        _rtw_memcpy(pwlanhdr->addr2, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
                        _rtw_memcpy(pwlanhdr->addr3, StaAddr, ETH_ALEN);
                        break;
                case Ndis802_11APMode:
                        SetFrDs(fctrl);
                        _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
                        _rtw_memcpy(pwlanhdr->addr2, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-                       _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
+                       _rtw_memcpy(pwlanhdr->addr3, adapter_mac_addr(padapter), ETH_ALEN);
                        break;
                case Ndis802_11IBSS:
                default:
                        _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
                        break;
                case Ndis802_11IBSS:
                default:
                        _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
-                       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+                       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
                        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
                        break;
        }
                        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
                        break;
        }
@@ -397,7 +395,7 @@ static void ConstructARPResponse(
        //SetFrameSubType(fctrl, 0);
        SetToDs(fctrl);
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
        //SetFrameSubType(fctrl, 0);
        SetToDs(fctrl);
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0);
@@ -479,7 +477,7 @@ static void ConstructARPResponse(
        SET_ARP_PKT_HW_ADDR_LEN(pARPRspPkt, 6);
        SET_ARP_PKT_PROTOCOL_ADDR_LEN(pARPRspPkt, 4);
        SET_ARP_PKT_OPERATION(pARPRspPkt, 0x0200); // ARP response
        SET_ARP_PKT_HW_ADDR_LEN(pARPRspPkt, 6);
        SET_ARP_PKT_PROTOCOL_ADDR_LEN(pARPRspPkt, 4);
        SET_ARP_PKT_OPERATION(pARPRspPkt, 0x0200); // ARP response
-       SET_ARP_PKT_SENDER_MAC_ADDR(pARPRspPkt, myid(&(padapter->eeprompriv)));
+       SET_ARP_PKT_SENDER_MAC_ADDR(pARPRspPkt, adapter_mac_addr(padapter));
        SET_ARP_PKT_SENDER_IP_ADDR(pARPRspPkt, pIPAddress);
 #ifdef CONFIG_ARP_KEEP_ALIVE
        if (rtw_gw_addr_query(padapter)==0) {
        SET_ARP_PKT_SENDER_IP_ADDR(pARPRspPkt, pIPAddress);
 #ifdef CONFIG_ARP_KEEP_ALIVE
        if (rtw_gw_addr_query(padapter)==0) {
@@ -702,7 +700,7 @@ static void ConstructGTKResponse(
        //SetFrameSubType(fctrl, 0);
        SetToDs(fctrl);
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
        //SetFrameSubType(fctrl, 0);
        SetToDs(fctrl);
        _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0);
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
 
        SetSeqNum(pwlanhdr, 0);
@@ -801,7 +799,7 @@ static void ConstructProbeReq(_adapter *padapter, u8 *pframe, u32 *pLength,
        u8      bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
 
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
        u8      bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
 
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
-       mac = myid(&(padapter->eeprompriv));
+       mac = adapter_mac_addr(padapter);
 
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
 
        fctrl = &(pwlanhdr->frame_ctl);
        *(fctrl) = 0;
@@ -866,7 +864,7 @@ static void ConstructProbeRsp(_adapter *padapter, u8 *pframe, u32 *pLength, u8 *
 
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
 
 
        pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
 
-       mac = myid(&(padapter->eeprompriv));
+       mac = adapter_mac_addr(padapter);
        bssid = cur_network->MacAddress;
 
        fctrl = &(pwlanhdr->frame_ctl);
        bssid = cur_network->MacAddress;
 
        fctrl = &(pwlanhdr->frame_ctl);
@@ -926,7 +924,7 @@ static void ConstructProbeRsp(_adapter *padapter, u8 *pframe, u32 *pLength, u8 *
        /* retrieve SSID IE from cur_network->Ssid */
        {
                u8 *ssid_ie;
        /* retrieve SSID IE from cur_network->Ssid */
        {
                u8 *ssid_ie;
-               sint ssid_ielen;
+               sint ssid_ielen = 0;
                sint ssid_ielen_diff;
                u8 buf[MAX_IE_SZ];
                u8 *ies = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
                sint ssid_ielen_diff;
                u8 buf[MAX_IE_SZ];
                u8 *ies = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
@@ -1282,12 +1280,6 @@ void rtl8723b_set_FwPwrMode_cmd(PADAPTER padapter, u8 psmode)
 
 _func_enter_;
 
 
 _func_enter_;
 
-#ifdef CONFIG_PLATFORM_INTEL_BYT
-        if(psmode == PS_MODE_DTIM)
-                psmode = PS_MODE_MAX;
-#endif //CONFIG_PLATFORM_INTEL_BYT
-
-
        if(pwrpriv->dtim > 0)
                DBG_871X("%s(): FW LPS mode = %d, SmartPS=%d, dtim=%d\n", __func__, psmode, pwrpriv->smart_ps, pwrpriv->dtim);
        else
        if(pwrpriv->dtim > 0)
                DBG_871X("%s(): FW LPS mode = %d, SmartPS=%d, dtim=%d\n", __func__, psmode, pwrpriv->smart_ps, pwrpriv->dtim);
        else
@@ -1499,13 +1491,58 @@ void rtl8723b_set_FwPwrModeInIPS_cmd(PADAPTER padapter, u8 cmd_param)
 
        DBG_871X("%s()\n", __func__);
 
 
        DBG_871X("%s()\n", __func__);
 
-       cmd_param = cmd_param;
-
        FillH2CCmd8723B(padapter, H2C_8723B_FWLPS_IN_IPS_, 1, &cmd_param);
 
 }
 
 #ifdef CONFIG_WOWLAN
        FillH2CCmd8723B(padapter, H2C_8723B_FWLPS_IN_IPS_, 1, &cmd_param);
 
 }
 
 #ifdef CONFIG_WOWLAN
+static void rtl8723b_set_FwWoWlanCtrl_Cmd(PADAPTER padapter, u8 bFuncEn)
+{
+       struct security_priv *psecpriv = &padapter->securitypriv;
+       struct pwrctrl_priv *ppwrpriv = adapter_to_pwrctl(padapter);
+       u8 u1H2CWoWlanCtrlParm[H2C_WOWLAN_LEN]={0};
+       u8 discont_wake = 1, gpionum = 0, gpio_dur = 0, hw_unicast = 0, gpio_pulse_cnt=100;
+       u8 sdio_wakeup_enable = 1;
+       u8 gpio_high_active = 0; //0: low active, 1: high active
+       u8 magic_pkt = 0;
+       
+#ifdef CONFIG_GPIO_WAKEUP
+       gpionum = WAKEUP_GPIO_IDX;
+       sdio_wakeup_enable = 0;
+#endif
+
+#ifdef CONFIG_PNO_SUPPORT
+       if (!ppwrpriv->wowlan_pno_enable) {
+               magic_pkt = 1;
+       }
+#endif
+
+       if (psecpriv->dot11PrivacyAlgrthm == _WEP40_ || psecpriv->dot11PrivacyAlgrthm == _WEP104_)
+               hw_unicast = 1;
+
+       DBG_871X("%s(): bFuncEn=%d\n", __func__, bFuncEn);
+
+       SET_H2CCMD_WOWLAN_FUNC_ENABLE(u1H2CWoWlanCtrlParm, bFuncEn);
+       SET_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(u1H2CWoWlanCtrlParm, 0);
+       SET_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(u1H2CWoWlanCtrlParm, magic_pkt);
+       SET_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(u1H2CWoWlanCtrlParm, hw_unicast);
+       SET_H2CCMD_WOWLAN_ALL_PKT_DROP(u1H2CWoWlanCtrlParm, 0);
+       SET_H2CCMD_WOWLAN_GPIO_ACTIVE(u1H2CWoWlanCtrlParm, gpio_high_active);
+#ifndef CONFIG_GTK_OL
+       SET_H2CCMD_WOWLAN_REKEY_WAKE_UP(u1H2CWoWlanCtrlParm, 1); 
+#endif //!CONFIG_GTK_OL
+       SET_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(u1H2CWoWlanCtrlParm, discont_wake); 
+       SET_H2CCMD_WOWLAN_GPIONUM(u1H2CWoWlanCtrlParm, gpionum);
+       SET_H2CCMD_WOWLAN_DATAPIN_WAKE_UP(u1H2CWoWlanCtrlParm, sdio_wakeup_enable);
+       SET_H2CCMD_WOWLAN_GPIO_DURATION(u1H2CWoWlanCtrlParm, gpio_dur);
+       //SET_H2CCMD_WOWLAN_GPIO_PULSE_EN(u1H2CWoWlanCtrlParm, 1);
+       SET_H2CCMD_WOWLAN_GPIO_PULSE_COUNT(u1H2CWoWlanCtrlParm, 0x09);
+       
+       RT_PRINT_DATA(_module_hal_init_c_, _drv_always_, "u1H2CWoWlanCtrlParm:", u1H2CWoWlanCtrlParm, H2C_WOWLAN_LEN);
+
+       FillH2CCmd8723B(padapter, H2C_8723B_WOWLAN, H2C_WOWLAN_LEN, u1H2CWoWlanCtrlParm);
+}
+
 static void rtl8723b_set_FwRemoteWakeCtrl_Cmd(PADAPTER padapter, u8 benable)
 {
        u8 u1H2CRemoteWakeCtrlParm[H2C_REMOTE_WAKE_CTRL_LEN]={0};
 static void rtl8723b_set_FwRemoteWakeCtrl_Cmd(PADAPTER padapter, u8 benable)
 {
        u8 u1H2CRemoteWakeCtrlParm[H2C_REMOTE_WAKE_CTRL_LEN]={0};
@@ -1636,7 +1673,7 @@ _func_enter_;
                rtw_msleep_os(2);
                }
 
                rtw_msleep_os(2);
                }
 
-               rtw_hal_set_wowlan_ctrl_cmd(padapter, enable);
+               rtl8723b_set_FwWoWlanCtrl_Cmd(padapter, enable);
                rtw_msleep_os(2);
 
                rtl8723b_set_FwRemoteWakeCtrl_Cmd(padapter, enable);
                rtw_msleep_os(2);
 
                rtl8723b_set_FwRemoteWakeCtrl_Cmd(padapter, enable);
@@ -1652,7 +1689,7 @@ _func_enter_;
 #endif
                rtl8723b_set_FwRemoteWakeCtrl_Cmd(padapter, enable);
                rtw_msleep_os(2);
 #endif
                rtl8723b_set_FwRemoteWakeCtrl_Cmd(padapter, enable);
                rtw_msleep_os(2);
-               rtw_hal_set_wowlan_ctrl_cmd(padapter, enable);
+               rtl8723b_set_FwWoWlanCtrl_Cmd(padapter, enable);
        }
        
 _func_exit_;
        }
        
 _func_exit_;
@@ -2450,10 +2487,10 @@ _func_enter_;
                        if (pwrpriv->wowlan_ap_mode)
                                rtl8723b_set_AP_FwRsvdPagePkt(padapter, 0);
                        else
                        if (pwrpriv->wowlan_ap_mode)
                                rtl8723b_set_AP_FwRsvdPagePkt(padapter, 0);
                        else
-                               rtl8723b_set_FwRsvdPagePkt(padapter, 0);
+                               rtw_hal_set_fw_rsvd_page(padapter, 0);
 #else
                        // download rsvd page.
 #else
                        // download rsvd page.
-                       rtl8723b_set_FwRsvdPagePkt(padapter, 0);
+                       rtw_hal_set_fw_rsvd_page(padapter, 0);
 #endif
                        DLBcnCount++;
                        do
 #endif
                        DLBcnCount++;
                        do
@@ -2589,7 +2626,7 @@ static void ConstructBtNullFunctionData(
 
        if (NULL == StaAddr)
        {
 
        if (NULL == StaAddr)
        {
-               _rtw_memcpy(bssid, myid(&padapter->eeprompriv), ETH_ALEN);
+               _rtw_memcpy(bssid, adapter_mac_addr(padapter), ETH_ALEN);
                StaAddr = bssid;
        }
 
                StaAddr = bssid;
        }
 
@@ -2600,8 +2637,8 @@ static void ConstructBtNullFunctionData(
 
        SetFrDs(fctrl);
        _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
 
        SetFrDs(fctrl);
        _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       _rtw_memcpy(pwlanhdr->addr3, myid(&padapter->eeprompriv), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);
+       _rtw_memcpy(pwlanhdr->addr3, adapter_mac_addr(padapter), ETH_ALEN);
 
        SetDuration(pwlanhdr, 0);
        SetSeqNum(pwlanhdr, 0);
 
        SetDuration(pwlanhdr, 0);
        SetSeqNum(pwlanhdr, 0);
index 2224afb83615a43550d933677fa29c3a99919baa..c149fe481db5a8a0b230407a9f0a9e195d98b8ee 100755 (executable)
@@ -246,7 +246,7 @@ static void Init_ODM_ComInfo_8723b(PADAPTER Adapter)
 {\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
 {\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
+       u32 SupportAbility = 0;\r
        u8      cut_ver,fab_ver;\r
 \r
        Init_ODM_ComInfo(Adapter);\r
        u8      cut_ver,fab_ver;\r
 \r
        Init_ODM_ComInfo(Adapter);\r
@@ -262,32 +262,32 @@ static void Init_ODM_ComInfo_8723b(PADAPTER       Adapter)
        ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_CUT_VER,cut_ver);\r
 \r
        #ifdef CONFIG_DISABLE_ODM\r
        ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_CUT_VER,cut_ver);\r
 \r
        #ifdef CONFIG_DISABLE_ODM\r
-       pdmpriv->InitODMFlag = 0;\r
+       SupportAbility = 0;\r
        #else\r
        #else\r
-       pdmpriv->InitODMFlag =  ODM_RF_CALIBRATION              |\r
-                                                       ODM_RF_TX_PWR_TRACK     //|\r
-                                                       ;       \r
-       //if(pHalData->AntDivCfg)\r
-       //      pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV;\r
+       SupportAbility =        ODM_RF_CALIBRATION |\r
+                                       ODM_RF_TX_PWR_TRACK     \r
+                                       ;       \r
+       /*if(pHalData->AntDivCfg)\r
+               SupportAbility |= ODM_BB_ANT_DIV;*/\r
        #endif  \r
 \r
        #endif  \r
 \r
-       ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_ABILITY,pdmpriv->InitODMFlag);\r
+       ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_ABILITY,SupportAbility);\r
 }\r
 \r
 static void Update_ODM_ComInfo_8723b(PADAPTER  Adapter)\r
 {\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
 }\r
 \r
 static void Update_ODM_ComInfo_8723b(PADAPTER  Adapter)\r
 {\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
+       u32 SupportAbility = 0;\r
 \r
 \r
-       pdmpriv->InitODMFlag = 0\r
+       SupportAbility = 0\r
                | ODM_BB_DIG\r
                | ODM_BB_RA_MASK\r
                | ODM_BB_DYNAMIC_TXPWR\r
                | ODM_BB_FA_CNT\r
                | ODM_BB_RSSI_MONITOR\r
                | ODM_BB_CCK_PD\r
                | ODM_BB_DIG\r
                | ODM_BB_RA_MASK\r
                | ODM_BB_DYNAMIC_TXPWR\r
                | ODM_BB_FA_CNT\r
                | ODM_BB_RSSI_MONITOR\r
                | ODM_BB_CCK_PD\r
-               | ODM_BB_PWR_SAVE\r
+               //| ODM_BB_PWR_SAVE\r
                | ODM_BB_CFO_TRACKING\r
                | ODM_MAC_EDCA_TURBO\r
                | ODM_RF_TX_PWR_TRACK\r
                | ODM_BB_CFO_TRACKING\r
                | ODM_MAC_EDCA_TURBO\r
                | ODM_RF_TX_PWR_TRACK\r
@@ -297,16 +297,16 @@ static void Update_ODM_ComInfo_8723b(PADAPTER     Adapter)
                ;\r
 \r
        if (rtw_odm_adaptivity_needed(Adapter) == _TRUE)\r
                ;\r
 \r
        if (rtw_odm_adaptivity_needed(Adapter) == _TRUE)\r
-               pdmpriv->InitODMFlag |= ODM_BB_ADAPTIVITY;\r
+               SupportAbility |= ODM_BB_ADAPTIVITY;\r
 \r
 #ifdef CONFIG_ANTENNA_DIVERSITY\r
        if(pHalData->AntDivCfg)\r
 \r
 #ifdef CONFIG_ANTENNA_DIVERSITY\r
        if(pHalData->AntDivCfg)\r
-               pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV;\r
+               SupportAbility |= ODM_BB_ANT_DIV;\r
 #endif\r
 \r
 #if (MP_DRIVER==1)\r
        if (Adapter->registrypriv.mp_mode == 1) {\r
 #endif\r
 \r
 #if (MP_DRIVER==1)\r
        if (Adapter->registrypriv.mp_mode == 1) {\r
-               pdmpriv->InitODMFlag = 0\r
+               SupportAbility = 0\r
                        | ODM_RF_CALIBRATION\r
                        | ODM_RF_TX_PWR_TRACK\r
                        ;\r
                        | ODM_RF_CALIBRATION\r
                        | ODM_RF_TX_PWR_TRACK\r
                        ;\r
@@ -314,10 +314,10 @@ static void Update_ODM_ComInfo_8723b(PADAPTER     Adapter)
 #endif//(MP_DRIVER==1)\r
 \r
 #ifdef CONFIG_DISABLE_ODM\r
 #endif//(MP_DRIVER==1)\r
 \r
 #ifdef CONFIG_DISABLE_ODM\r
-       pdmpriv->InitODMFlag = 0;\r
+       SupportAbility = 0;\r
 #endif//CONFIG_DISABLE_ODM\r
 \r
 #endif//CONFIG_DISABLE_ODM\r
 \r
-       ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_ABILITY,pdmpriv->InitODMFlag);\r
+       ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_ABILITY,SupportAbility);\r
 }\r
 \r
 void\r
 }\r
 \r
 void\r
@@ -326,7 +326,6 @@ rtl8723b_InitHalDm(
        )\r
 {\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
        )\r
 {\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
 \r
        u8      i;\r
        PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
 \r
        u8      i;\r
@@ -335,13 +334,7 @@ rtl8723b_InitHalDm(
        dm_InitGPIOSetting(Adapter);\r
 #endif\r
 \r
        dm_InitGPIOSetting(Adapter);\r
 #endif\r
 \r
-       pdmpriv->DM_Type = DM_Type_ByDriver;\r
-       pdmpriv->DMFlag = DYNAMIC_FUNC_DISABLE;\r
-\r
-#ifdef CONFIG_BT_COEXIST\r
-       pdmpriv->DMFlag |= DYNAMIC_FUNC_BT;\r
-#endif\r
-       pdmpriv->InitDMFlag = pdmpriv->DMFlag;\r
+       pHalData->DM_Type = DM_Type_ByDriver;\r
 \r
        Update_ODM_ComInfo_8723b(Adapter);\r
        \r
 \r
        Update_ODM_ComInfo_8723b(Adapter);\r
        \r
@@ -350,92 +343,6 @@ rtl8723b_InitHalDm(
 \r
 }\r
 \r
 \r
 }\r
 \r
-static void\r
-FindMinimumRSSI_8723b(\r
-IN     PADAPTER        pAdapter\r
-       )\r
-{\r
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
-       struct mlme_priv        *pmlmepriv = &pAdapter->mlmepriv;\r
-\r
-       //1 1.Determine the minimum RSSI\r
-\r
-\r
-#ifdef CONFIG_CONCURRENT_MODE\r
-       //      FindMinimumRSSI()       per-adapter\r
-       {\r
-               PADAPTER pbuddy_adapter = pAdapter->pbuddy_adapter;\r
-               PHAL_DATA_TYPE  pbuddy_HalData = GET_HAL_DATA(pbuddy_adapter);\r
-               struct dm_priv *pbuddy_dmpriv = &pbuddy_HalData->dmpriv;\r
-\r
-               if((pdmpriv->EntryMinUndecoratedSmoothedPWDB != 0) &&\r
-                  (pbuddy_dmpriv->EntryMinUndecoratedSmoothedPWDB != 0))\r
-               {\r
-\r
-                       if(pdmpriv->EntryMinUndecoratedSmoothedPWDB > pbuddy_dmpriv->EntryMinUndecoratedSmoothedPWDB)\r
-                               pdmpriv->EntryMinUndecoratedSmoothedPWDB = pbuddy_dmpriv->EntryMinUndecoratedSmoothedPWDB;\r
-             }\r
-               else\r
-               {\r
-                       if(pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0)\r
-                             pdmpriv->EntryMinUndecoratedSmoothedPWDB = pbuddy_dmpriv->EntryMinUndecoratedSmoothedPWDB;\r
-\r
-               }\r
-               #if 0\r
-               if((pdmpriv->UndecoratedSmoothedPWDB != (-1)) &&\r
-                        (pbuddy_dmpriv->UndecoratedSmoothedPWDB != (-1)))\r
-               {\r
-\r
-                       if((pdmpriv->UndecoratedSmoothedPWDB > pbuddy_dmpriv->UndecoratedSmoothedPWDB) &&\r
-                               (pbuddy_dmpriv->UndecoratedSmoothedPWDB!=0))\r
-                                   pdmpriv->UndecoratedSmoothedPWDB = pbuddy_dmpriv->UndecoratedSmoothedPWDB;\r
-               }\r
-               else\r
-               {\r
-                       if((pdmpriv->UndecoratedSmoothedPWDB == (-1)) && (pbuddy_dmpriv->UndecoratedSmoothedPWDB!=0))\r
-                             pdmpriv->UndecoratedSmoothedPWDB = pbuddy_dmpriv->UndecoratedSmoothedPWDB;\r
-               }\r
-               #endif\r
-       }\r
-#endif\r
-\r
-       if((check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) &&\r
-               (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))\r
-       {\r
-               pdmpriv->MinUndecoratedPWDBForDM = 0;\r
-               //ODM_RT_TRACE(pDM_Odm,COMP_BB_POWERSAVING, DBG_LOUD, ("Not connected to any \n"));\r
-       }\r
-       if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)       // Default port\r
-       {\r
-               #if 0\r
-               if((check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) ||\r
-                       (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||\r
-                       (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE))\r
-               {\r
-                       pdmpriv->MinUndecoratedPWDBForDM = pdmpriv->EntryMinUndecoratedSmoothedPWDB;\r
-                       //ODM_RT_TRACE(pDM_Odm,COMP_BB_POWERSAVING, DBG_LOUD, ("AP Client PWDB = 0x%x \n", pHalData->MinUndecoratedPWDBForDM));\r
-               }\r
-               else//for STA mode\r
-               {\r
-                       pdmpriv->MinUndecoratedPWDBForDM = pdmpriv->UndecoratedSmoothedPWDB;\r
-                       //ODM_RT_TRACE(pDM_Odm,COMP_BB_POWERSAVING, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", pHalData->MinUndecoratedPWDBForDM));\r
-               }\r
-               #else\r
-               pdmpriv->MinUndecoratedPWDBForDM = pdmpriv->EntryMinUndecoratedSmoothedPWDB;\r
-               #endif\r
-       }\r
-       else // associated entry pwdb\r
-       {\r
-               pdmpriv->MinUndecoratedPWDBForDM = pdmpriv->EntryMinUndecoratedSmoothedPWDB;\r
-               //ODM_RT_TRACE(pDM_Odm,COMP_BB_POWERSAVING, DBG_LOUD, ("AP Ext Port or disconnet PWDB = 0x%x \n", pHalData->MinUndecoratedPWDBForDM));\r
-       }\r
-\r
-       //odm_FindMinimumRSSI_Dmsp(pAdapter);\r
-       //DBG_8192C("%s=>MinUndecoratedPWDBForDM(%d)\n",__FUNCTION__,pdmpriv->MinUndecoratedPWDBForDM);\r
-       //ODM_RT_TRACE(pDM_Odm,COMP_DIG, DBG_LOUD, ("MinUndecoratedPWDBForDM =%d\n",pHalData->MinUndecoratedPWDBForDM));\r
-}\r
-\r
 VOID\r
 rtl8723b_HalDmWatchDog(\r
        IN      PADAPTER        Adapter\r
 VOID\r
 rtl8723b_HalDmWatchDog(\r
        IN      PADAPTER        Adapter\r
@@ -445,7 +352,6 @@ rtl8723b_HalDmWatchDog(
        BOOLEAN         bFwPSAwake = _TRUE;\r
        u8 hw_init_completed = _FALSE;\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
        BOOLEAN         bFwPSAwake = _TRUE;\r
        u8 hw_init_completed = _FALSE;\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
 #ifdef CONFIG_CONCURRENT_MODE\r
        PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;\r
 #endif //CONFIG_CONCURRENT_MODE\r
 #ifdef CONFIG_CONCURRENT_MODE\r
        PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;\r
 #endif //CONFIG_CONCURRENT_MODE\r
@@ -520,7 +426,6 @@ if (Adapter->registrypriv.mp_mode == 1 && Adapter->mppriv.mp_dm ==0) // for MP p
                ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_LINK, bLinked);\r
                ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_STATION_STATE, bsta_state);\r
 \r
                ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_LINK, bLinked);\r
                ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_STATION_STATE, bsta_state);\r
 \r
-               //FindMinimumRSSI_8723b(Adapter);\r
                //ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_RSSI_MIN, pdmpriv->MinUndecoratedPWDBForDM);\r
 \r
 #ifdef CONFIG_BT_COEXIST\r
                //ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_RSSI_MIN, pdmpriv->MinUndecoratedPWDBForDM);\r
 \r
 #ifdef CONFIG_BT_COEXIST\r
@@ -578,7 +483,6 @@ void rtl8723b_HalDmWatchDog_in_LPS(IN       PADAPTER        Adapter)
        u8      bLinked=_FALSE;\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
        struct mlme_priv        *pmlmepriv = &Adapter->mlmepriv;\r
        u8      bLinked=_FALSE;\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
        struct mlme_priv        *pmlmepriv = &Adapter->mlmepriv;\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
        PDM_ODM_T               pDM_Odm = &pHalData->odmpriv;\r
        pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
        struct sta_priv *pstapriv = &Adapter->stapriv;\r
        PDM_ODM_T               pDM_Odm = &pHalData->odmpriv;\r
        pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
        struct sta_priv *pstapriv = &Adapter->stapriv;\r
@@ -616,16 +520,16 @@ void rtl8723b_HalDmWatchDog_in_LPS(IN     PADAPTER        Adapter)
        if(psta == NULL)\r
                goto skip_lps_dm;\r
 \r
        if(psta == NULL)\r
                goto skip_lps_dm;\r
 \r
-       pdmpriv->EntryMinUndecoratedSmoothedPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
+       pHalData->EntryMinUndecoratedSmoothedPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;\r
 \r
 \r
-       DBG_871X("CurIGValue=%d, EntryMinUndecoratedSmoothedPWDB = %d\n", pDM_DigTable->CurIGValue, pdmpriv->EntryMinUndecoratedSmoothedPWDB );\r
+       DBG_871X("CurIGValue=%d, EntryMinUndecoratedSmoothedPWDB = %d\n", pDM_DigTable->CurIGValue, pHalData->EntryMinUndecoratedSmoothedPWDB );\r
 \r
 \r
-       if(pdmpriv->EntryMinUndecoratedSmoothedPWDB <=0)\r
+       if(pHalData->EntryMinUndecoratedSmoothedPWDB <=0)\r
                goto skip_lps_dm;\r
 \r
                goto skip_lps_dm;\r
 \r
-       pdmpriv->MinUndecoratedPWDBForDM = pdmpriv->EntryMinUndecoratedSmoothedPWDB;\r
+       pHalData->MinUndecoratedPWDBForDM = pHalData->EntryMinUndecoratedSmoothedPWDB;\r
 \r
 \r
-       pDM_Odm->RSSI_Min = pdmpriv->MinUndecoratedPWDBForDM;\r
+       pDM_Odm->RSSI_Min = pHalData->MinUndecoratedPWDBForDM;\r
 \r
        //if(pDM_DigTable->CurIGValue != pDM_Odm->RSSI_Min)\r
        if((pDM_DigTable->CurIGValue > pDM_Odm->RSSI_Min + 5) || \r
 \r
        //if(pDM_DigTable->CurIGValue != pDM_Odm->RSSI_Min)\r
        if((pDM_DigTable->CurIGValue > pDM_Odm->RSSI_Min + 5) || \r
@@ -645,9 +549,7 @@ skip_lps_dm:
 void rtl8723b_init_dm_priv(IN PADAPTER Adapter)\r
 {\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
 void rtl8723b_init_dm_priv(IN PADAPTER Adapter)\r
 {\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
        PDM_ODM_T               podmpriv = &pHalData->odmpriv;\r
        PDM_ODM_T               podmpriv = &pHalData->odmpriv;\r
-       _rtw_memset(pdmpriv, 0, sizeof(struct dm_priv));\r
        Init_ODM_ComInfo_8723b(Adapter);\r
        ODM_InitAllTimers(podmpriv );\r
 }\r
        Init_ODM_ComInfo_8723b(Adapter);\r
        ODM_InitAllTimers(podmpriv );\r
 }\r
@@ -655,7 +557,6 @@ void rtl8723b_init_dm_priv(IN PADAPTER Adapter)
 void rtl8723b_deinit_dm_priv(IN PADAPTER Adapter)\r
 {\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
 void rtl8723b_deinit_dm_priv(IN PADAPTER Adapter)\r
 {\r
        PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
        PDM_ODM_T               podmpriv = &pHalData->odmpriv;\r
        ODM_CancelAllTimers(podmpriv);\r
 \r
        PDM_ODM_T               podmpriv = &pHalData->odmpriv;\r
        ODM_CancelAllTimers(podmpriv);\r
 \r
index 37cb5cc5fb662fff7479d2717c5b1cc1834f262f..81acdcac03a64261434cdac1dd395b0e25d1d6db 100755 (executable)
@@ -22,6 +22,7 @@
 #include <rtl8723b_hal.h>
 #include "rtw_bt_mp.h"
 #include "hal_com_h2c.h"
 #include <rtl8723b_hal.h>
 #include "rtw_bt_mp.h"
 #include "hal_com_h2c.h"
+#include <hal_com.h>
 
 static VOID
 _FWDownloadEnable(
 
 static VOID
 _FWDownloadEnable(
@@ -224,7 +225,6 @@ _WriteFW(
        )
 {
        // Since we need dynamic decide method of dwonload fw, so we call this function to get chip version.
        )
 {
        // Since we need dynamic decide method of dwonload fw, so we call this function to get chip version.
-       // We can remove _ReadChipVersion from ReadpadapterInfo8192C later.
        int ret = _SUCCESS;
        u32     pageNums,remainSize ;
        u32     page, offset;
        int ret = _SUCCESS;
        u32     pageNums,remainSize ;
        u32     page, offset;
@@ -1241,13 +1241,6 @@ SetFwRelatedForWoWLAN8723b(
 }
 #endif //CONFIG_WOWLAN
 
 }
 #endif //CONFIG_WOWLAN
 
-static void rtl8723b_free_hal_data(PADAPTER padapter)
-{
-_func_enter_;
-
-_func_exit_;
-}
-
 //===========================================================
 //                             Efuse related code
 //===========================================================
 //===========================================================
 //                             Efuse related code
 //===========================================================
@@ -1660,11 +1653,13 @@ if(0)
                                // Check word enable condition in the section
                                if (!(wden & (0x01<<i)))
                                {
                                // Check word enable condition in the section
                                if (!(wden & (0x01<<i)))
                                {
+                                       efuseData = 0;
                                        //ReadEFuseByte(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                        efuse_OneByteRead(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
 //                                     DBG_8192C("%s: efuse[%#X]=0x%02X\n", __FUNCTION__, eFuse_Addr-1, efuseData);
                                        efuseTbl[addr] = efuseData;
 
                                        //ReadEFuseByte(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                        efuse_OneByteRead(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
 //                                     DBG_8192C("%s: efuse[%#X]=0x%02X\n", __FUNCTION__, eFuse_Addr-1, efuseData);
                                        efuseTbl[addr] = efuseData;
 
+                                       efuseData = 0;
                                        //ReadEFuseByte(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                        efuse_OneByteRead(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
 //                                     DBG_8192C("%s: efuse[%#X]=0x%02X\n", __FUNCTION__, eFuse_Addr-1, efuseData);
                                        //ReadEFuseByte(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                        efuse_OneByteRead(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
 //                                     DBG_8192C("%s: efuse[%#X]=0x%02X\n", __FUNCTION__, eFuse_Addr-1, efuseData);
@@ -1698,9 +1693,13 @@ if(1)
 }
 #endif
        // Calculate Efuse utilization
 }
 #endif
        // Calculate Efuse utilization
+       total = 0;
        EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, &total, bPseudoTest);
        used = eFuse_Addr - 1;
        EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, &total, bPseudoTest);
        used = eFuse_Addr - 1;
-       efuse_usage = (u8)((used*100)/total);
+       if (total)
+               efuse_usage = (u8)((used*100)/total);
+       else
+               efuse_usage = 100;
        if (bPseudoTest)
        {
 #ifdef HAL_EFUSE_MEMORY
        if (bPseudoTest)
        {
 #ifdef HAL_EFUSE_MEMORY
@@ -1758,6 +1757,7 @@ hal_ReadEFuse_BT(
        // 0xff will be efuse default value instead of 0x00.
        _rtw_memset(efuseTbl, 0xFF, EFUSE_BT_MAP_LEN);
 
        // 0xff will be efuse default value instead of 0x00.
        _rtw_memset(efuseTbl, 0xFF, EFUSE_BT_MAP_LEN);
 
+       total = 0;
        EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_BANK, &total, bPseudoTest);
 
        for (bank=1; bank<3; bank++) // 8723b Max bake 0~2
        EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_BANK, &total, bPseudoTest);
 
        for (bank=1; bank<3; bank++) // 8723b Max bake 0~2
@@ -1813,11 +1813,13 @@ hal_ReadEFuse_BT(
                                        // Check word enable condition in the section
                                        if (!(wden & (0x01<<i)))
                                        {
                                        // Check word enable condition in the section
                                        if (!(wden & (0x01<<i)))
                                        {
+                                               efuseData = 0;
                                                //ReadEFuseByte(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                                efuse_OneByteRead(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                                DBG_8192C("%s: efuse[%#X]=0x%02X\n", __FUNCTION__, eFuse_Addr-1, efuseData);
                                                efuseTbl[addr] = efuseData;
 
                                                //ReadEFuseByte(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                                efuse_OneByteRead(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                                DBG_8192C("%s: efuse[%#X]=0x%02X\n", __FUNCTION__, eFuse_Addr-1, efuseData);
                                                efuseTbl[addr] = efuseData;
 
+                                               efuseData = 0;
                                                //ReadEFuseByte(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                                efuse_OneByteRead(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                                DBG_8192C("%s: efuse[%#X]=0x%02X\n", __FUNCTION__, eFuse_Addr-1, efuseData);
                                                //ReadEFuseByte(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                                efuse_OneByteRead(padapter, eFuse_Addr++, &efuseData, bPseudoTest);
                                                DBG_8192C("%s: efuse[%#X]=0x%02X\n", __FUNCTION__, eFuse_Addr-1, efuseData);
@@ -1853,7 +1855,10 @@ hal_ReadEFuse_BT(
        EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, &total, bPseudoTest);
        used = (EFUSE_BT_REAL_BANK_CONTENT_LEN*(bank-1)) + eFuse_Addr - 1;
        DBG_8192C("%s: bank(%d) data end at %#x ,used =%d\n", __FUNCTION__, bank, eFuse_Addr-1,used);
        EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, &total, bPseudoTest);
        used = (EFUSE_BT_REAL_BANK_CONTENT_LEN*(bank-1)) + eFuse_Addr - 1;
        DBG_8192C("%s: bank(%d) data end at %#x ,used =%d\n", __FUNCTION__, bank, eFuse_Addr-1,used);
-       efuse_usage = (u8)((used*100)/total);
+       if (total)
+               efuse_usage = (u8)((used*100)/total);
+       else
+               efuse_usage = 100;
        if (bPseudoTest)
        {
 #ifdef HAL_EFUSE_MEMORY
        if (bPseudoTest)
        {
 #ifdef HAL_EFUSE_MEMORY
@@ -2044,6 +2049,7 @@ hal_EfuseGetCurrentSize_BT(
        }
        else
        {
        }
        else
        {
+               btusedbytes = 0;
                rtw_hal_get_hwreg(padapter, HW_VAR_EFUSE_BT_BYTES, (u8*)&btusedbytes);
        }
        efuse_addr = (u16)((btusedbytes%EFUSE_BT_REAL_BANK_CONTENT_LEN));
                rtw_hal_get_hwreg(padapter, HW_VAR_EFUSE_BT_BYTES, (u8*)&btusedbytes);
        }
        efuse_addr = (u16)((btusedbytes%EFUSE_BT_REAL_BANK_CONTENT_LEN));
@@ -2832,30 +2838,25 @@ Hal_EfusePgPacketWrite_BT(
        return _TRUE;
 }
 
        return _TRUE;
 }
 
-static HAL_VERSION
-ReadChipVersion8723B(
-       IN      PADAPTER        padapter
-       )
+
+static void read_chip_version_8723b(PADAPTER padapter)
 {
 {
-       u32                             value32;
-       HAL_VERSION             ChipVersion;
+       u32                             value32;        
        HAL_DATA_TYPE   *pHalData;
        HAL_DATA_TYPE   *pHalData;
-
-//YJ,TODO, move read chip type here
        pHalData = GET_HAL_DATA(padapter);
 
        value32 = rtw_read32(padapter, REG_SYS_CFG);
        pHalData = GET_HAL_DATA(padapter);
 
        value32 = rtw_read32(padapter, REG_SYS_CFG);
-       ChipVersion.ICType = CHIP_8723B;
-       ChipVersion.ChipType = ((value32 & RTL_ID) ? TEST_CHIP : NORMAL_CHIP);
-       ChipVersion.RFType = RF_TYPE_1T1R ;
-       ChipVersion.VendorType = ((value32 & VENDOR_ID) ? CHIP_VENDOR_UMC : CHIP_VENDOR_TSMC);
-       ChipVersion.CUTVersion = (value32 & CHIP_VER_RTL_MASK)>>CHIP_VER_RTL_SHIFT; // IC version (CUT)
+       pHalData->VersionID.ICType = CHIP_8723B;
+       pHalData->VersionID.ChipType = ((value32 & RTL_ID) ? TEST_CHIP : NORMAL_CHIP);
+       pHalData->VersionID.RFType = RF_TYPE_1T1R ;
+       pHalData->VersionID.VendorType = ((value32 & VENDOR_ID) ? CHIP_VENDOR_UMC : CHIP_VENDOR_TSMC);
+       pHalData->VersionID.CUTVersion = (value32 & CHIP_VER_RTL_MASK)>>CHIP_VER_RTL_SHIFT; // IC version (CUT)
 
        // For regulator mode. by tynli. 2011.01.14
        pHalData->RegulatorMode = ((value32 & SPS_SEL) ? RT_LDO_REGULATOR : RT_SWITCHING_REGULATOR);
 
        value32 = rtw_read32(padapter, REG_GPIO_OUTSTS);
 
        // For regulator mode. by tynli. 2011.01.14
        pHalData->RegulatorMode = ((value32 & SPS_SEL) ? RT_LDO_REGULATOR : RT_SWITCHING_REGULATOR);
 
        value32 = rtw_read32(padapter, REG_GPIO_OUTSTS);
-       ChipVersion.ROMVer = ((value32 & RF_RL_ID) >> 20);      // ROM code version.
+       pHalData->VersionID.ROMVer = ((value32 & RF_RL_ID) >> 20);      // ROM code version.
 
        // For multi-function consideration. Added by Roger, 2010.10.06.
        pHalData->MultiFunc = RT_MULTI_FUNC_NONE;
 
        // For multi-function consideration. Added by Roger, 2010.10.06.
        pHalData->MultiFunc = RT_MULTI_FUNC_NONE;
@@ -2864,39 +2865,27 @@ ReadChipVersion8723B(
        pHalData->MultiFunc |= ((value32 & BT_FUNC_EN) ? RT_MULTI_FUNC_BT : 0);
        pHalData->MultiFunc |= ((value32 & GPS_FUNC_EN) ? RT_MULTI_FUNC_GPS : 0);
        pHalData->PolarityCtl = ((value32 & WL_HWPDN_SL) ? RT_POLARITY_HIGH_ACT : RT_POLARITY_LOW_ACT);
        pHalData->MultiFunc |= ((value32 & BT_FUNC_EN) ? RT_MULTI_FUNC_BT : 0);
        pHalData->MultiFunc |= ((value32 & GPS_FUNC_EN) ? RT_MULTI_FUNC_GPS : 0);
        pHalData->PolarityCtl = ((value32 & WL_HWPDN_SL) ? RT_POLARITY_HIGH_ACT : RT_POLARITY_LOW_ACT);
-//#if DBG
-#if 1
-       dump_chip_info(ChipVersion);
-#endif
-       pHalData->VersionID = ChipVersion;
+
+       rtw_hal_config_rftype(padapter);
+
 /*     // mark for chage to use efuse
 /*     // mark for chage to use efuse
-       if( IS_B_CUT(ChipVersion) || IS_C_CUT(ChipVersion))
+       if( IS_B_CUT(pHalData->VersionID) || IS_C_CUT(pHalData->VersionID))
        {
                MSG_8192C(" IS_B/C_CUT SWR up 1 level !!!!!!!!!!!!!!!!!\n");
                PHY_SetMacReg(padapter, 0x14, BIT23|BIT22|BIT21|BIT20, 0x5); //MAC reg 0x14[23:20] = 4b'0101 (SWR 1.220V)
        {
                MSG_8192C(" IS_B/C_CUT SWR up 1 level !!!!!!!!!!!!!!!!!\n");
                PHY_SetMacReg(padapter, 0x14, BIT23|BIT22|BIT21|BIT20, 0x5); //MAC reg 0x14[23:20] = 4b'0101 (SWR 1.220V)
-       }else if ( IS_D_CUT(ChipVersion))
+       }else if ( IS_D_CUT(pHalData->VersionID))
        {
                MSG_8192C(" IS_D_CUT SKIP SWR !!!!!!!!!!!!!!!!!\n");
        }
 */
        {
                MSG_8192C(" IS_D_CUT SKIP SWR !!!!!!!!!!!!!!!!!\n");
        }
 */
-       if (IS_1T2R(ChipVersion))
-               pHalData->rf_type = RF_1T2R;
-       else if (IS_2T2R(ChipVersion))
-               pHalData->rf_type = RF_2T2R;
-       else
-               pHalData->rf_type = RF_1T1R;
 
 
-       MSG_8192C("RF_Type is %x!!\n", pHalData->rf_type);
+#if 1
+       dump_chip_info(pHalData->VersionID);
+#endif
 
 
-       return ChipVersion;
 }
 
 
 }
 
 
-static void rtl8723b_read_chip_version(PADAPTER padapter)
-{
-       ReadChipVersion8723B(padapter);
-}
-
 void rtl8723b_InitBeaconParameters(PADAPTER padapter)
 {
        PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
 void rtl8723b_InitBeaconParameters(PADAPTER padapter)
 {
        PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
@@ -2933,7 +2922,7 @@ void rtl8723b_InitBeaconParameters(PADAPTER padapter)
 
 void rtl8723b_InitBeaconMaxError(PADAPTER padapter, u8 InfraMode)
 {
 
 void rtl8723b_InitBeaconMaxError(PADAPTER padapter, u8 InfraMode)
 {
-#ifdef RTL8192CU_ADHOC_WORKAROUND_SETTING
+#ifdef CONFIG_ADHOC_WORKAROUND_SETTING
        rtw_write8(padapter, REG_BCN_MAX_ERR, 0xFF);
 #else
        //rtw_write8(Adapter, REG_BCN_MAX_ERR, (InfraMode ? 0xFF : 0x10));
        rtw_write8(padapter, REG_BCN_MAX_ERR, 0xFF);
 #else
        //rtw_write8(Adapter, REG_BCN_MAX_ERR, (InfraMode ? 0xFF : 0x10));
@@ -3183,7 +3172,6 @@ void UpdateHalRAMask8723B(PADAPTER padapter, u32 mac_id, u8 rssi_level)
        u8      shortGIrate = _FALSE;
        struct sta_info *psta;
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
        u8      shortGIrate = _FALSE;
        struct sta_info *psta;
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
 
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
 
@@ -3235,7 +3223,7 @@ void UpdateHalRAMask8723B(PADAPTER padapter, u32 mac_id, u8 rssi_level)
        }
 
        //set correct initial date rate for each mac_id
        }
 
        //set correct initial date rate for each mac_id
-       pdmpriv->INIDATA_RATE[mac_id] = psta->init_rate;
+       pHalData->INIDATA_RATE[mac_id] = psta->init_rate;
        DBG_871X("%s(): mac_id=%d raid=0x%x bw=%d mask=0x%x init_rate=0x%x\n", __func__, mac_id, psta->raid, psta->bw_mode, mask, psta->init_rate);
 }
 
        DBG_871X("%s(): mac_id=%d raid=0x%x bw=%d mask=0x%x init_rate=0x%x\n", __func__, mac_id, psta->raid, psta->bw_mode, mask, psta->init_rate);
 }
 
@@ -3264,14 +3252,97 @@ void rtl8723b_cal_txdesc_chksum(struct tx_desc *ptxdesc)
 }
 #endif
 
 }
 #endif
 
-void rtl8723b_set_hal_ops(struct hal_ops *pHalFunc)
+
+//
+// Description: In normal chip, we should send some packet to Hw which will be used by Fw
+//                     in FW LPS mode. The function is to fill the Tx descriptor of this packets, then
+//                     Fw can tell Hw to send these packet derectly.
+// Added by tynli. 2009.10.15.
+//
+//type1:pspoll, type2:null
+void rtl8723b_fill_fake_txdesc(
+       PADAPTER        padapter,
+       u8*                     pDesc,
+       u32                     BufferLen,
+       u8                      IsPsPoll,
+       u8                      IsBTQosNull,
+       u8                      bDataFrame)
 {
 {
-       pHalFunc->free_hal_data = &rtl8723b_free_hal_data;
+       // Clear all status
+       _rtw_memset(pDesc, 0, TXDESC_SIZE);
+
+       SET_TX_DESC_FIRST_SEG_8723B(pDesc, 1); //bFirstSeg;
+       SET_TX_DESC_LAST_SEG_8723B(pDesc, 1); //bLastSeg;
+
+       SET_TX_DESC_OFFSET_8723B(pDesc, 0x28); // Offset = 32
 
 
+       SET_TX_DESC_PKT_SIZE_8723B(pDesc, BufferLen); // Buffer size + command header
+       SET_TX_DESC_QUEUE_SEL_8723B(pDesc, QSLT_MGNT); // Fixed queue of Mgnt queue
+
+       // Set NAVUSEHDR to prevent Ps-poll AId filed to be changed to error vlaue by Hw.
+       if (_TRUE == IsPsPoll)
+       {
+               SET_TX_DESC_NAV_USE_HDR_8723B(pDesc, 1);
+       }
+       else
+       {
+               SET_TX_DESC_HWSEQ_EN_8723B(pDesc, 1); // Hw set sequence number
+               SET_TX_DESC_HWSEQ_SEL_8723B(pDesc, 0);
+       }
+
+       if (_TRUE ==IsBTQosNull)
+       {
+               SET_TX_DESC_BT_INT_8723B(pDesc, 1);
+       }
+
+       SET_TX_DESC_USE_RATE_8723B(pDesc, 1); // use data rate which is set by Sw
+       SET_TX_DESC_OWN_8723B((pu1Byte)pDesc, 1);
+
+       SET_TX_DESC_TX_RATE_8723B(pDesc, DESC8723B_RATE1M);
+
+       //
+       // Encrypt the data frame if under security mode excepct null data. Suggested by CCW.
+       //
+       if (_TRUE ==bDataFrame)
+       {
+               u32 EncAlg;
+
+               EncAlg = padapter->securitypriv.dot11PrivacyAlgrthm;
+               switch (EncAlg)
+               {
+                       case _NO_PRIVACY_:
+                               SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x0); 
+                               break;
+                       case _WEP40_:
+                       case _WEP104_:
+                       case _TKIP_:
+                               SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x1); 
+                               break;
+                       case _SMS4_:
+                               SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x2); 
+                               break;
+                       case _AES_:
+                               SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x3);
+                               break;
+                       default:
+                               SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x0); 
+                               break;   
+               }
+       }
+
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+       // USB interface drop packet if the checksum of descriptor isn't correct.
+       // Using this checksum can let hardware recovery from packet bulk out error (e.g. Cancel URC, Bulk out error.).
+       rtl8723b_cal_txdesc_chksum((struct tx_desc*)pDesc);
+#endif
+}
+
+void rtl8723b_set_hal_ops(struct hal_ops *pHalFunc)
+{
        pHalFunc->dm_init = &rtl8723b_init_dm_priv;
        pHalFunc->dm_deinit = &rtl8723b_deinit_dm_priv;
 
        pHalFunc->dm_init = &rtl8723b_init_dm_priv;
        pHalFunc->dm_deinit = &rtl8723b_deinit_dm_priv;
 
-       pHalFunc->read_chip_version = &rtl8723b_read_chip_version;
+       pHalFunc->read_chip_version = read_chip_version_8723b;
 
        pHalFunc->UpdateRAMaskHandler = &UpdateHalRAMask8723B;
 
 
        pHalFunc->UpdateRAMaskHandler = &UpdateHalRAMask8723B;
 
@@ -3283,7 +3354,9 @@ void rtl8723b_set_hal_ops(struct hal_ops *pHalFunc)
        pHalFunc->get_tx_power_level_handler = &PHY_GetTxPowerLevel8723B;
 
        pHalFunc->hal_dm_watchdog = &rtl8723b_HalDmWatchDog;
        pHalFunc->get_tx_power_level_handler = &PHY_GetTxPowerLevel8723B;
 
        pHalFunc->hal_dm_watchdog = &rtl8723b_HalDmWatchDog;
+#ifdef CONFIG_LPS_LCLK_WD_TIMER
        pHalFunc->hal_dm_watchdog_in_lps = &rtl8723b_HalDmWatchDog_in_LPS;
        pHalFunc->hal_dm_watchdog_in_lps = &rtl8723b_HalDmWatchDog_in_LPS;
+#endif
 
 #ifdef CONFIG_C2H_PACKET_EN
        pHalFunc->SetHwRegHandlerWithBuf = &SetHwRegWithBuf8723B;
 
 #ifdef CONFIG_C2H_PACKET_EN
        pHalFunc->SetHwRegHandlerWithBuf = &SetHwRegWithBuf8723B;
@@ -3333,9 +3406,7 @@ void rtl8723b_set_hal_ops(struct hal_ops *pHalFunc)
        pHalFunc->c2h_id_filter_ccx = c2h_id_filter_ccx_8723b;
 
        pHalFunc->fill_h2c_cmd = &FillH2CCmd8723B;
        pHalFunc->c2h_id_filter_ccx = c2h_id_filter_ccx_8723b;
 
        pHalFunc->fill_h2c_cmd = &FillH2CCmd8723B;
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-       pHalFunc->hal_cal_txdesc_chksum = &rtl8723b_cal_txdesc_chksum;
-#endif
+       pHalFunc->fill_fake_txdesc = &rtl8723b_fill_fake_txdesc;
 #ifdef CONFIG_WOWLAN
        pHalFunc->hal_set_wowlan_fw = &SetFwRelatedForWoWLAN8723b;
 #endif
 #ifdef CONFIG_WOWLAN
        pHalFunc->hal_set_wowlan_fw = &SetFwRelatedForWoWLAN8723b;
 #endif
@@ -3387,19 +3458,14 @@ void rtl8723b_DeinitAntenna_Selection(PADAPTER padapter)
 
 void rtl8723b_init_default_value(PADAPTER padapter)
 {
 
 void rtl8723b_init_default_value(PADAPTER padapter)
 {
-       PHAL_DATA_TYPE pHalData;
-       struct dm_priv *pdmpriv;
+       PHAL_DATA_TYPE pHalData; 
        u8 i;
        u8 i;
-
-
        pHalData = GET_HAL_DATA(padapter);
        pHalData = GET_HAL_DATA(padapter);
-       pdmpriv = &pHalData->dmpriv;
 
        padapter->registrypriv.wireless_mode = WIRELESS_11BG_24N;
 
        // init default value
        pHalData->fw_ractrl = _FALSE;
 
        padapter->registrypriv.wireless_mode = WIRELESS_11BG_24N;
 
        // init default value
        pHalData->fw_ractrl = _FALSE;
-       pHalData->bIQKInitialized = _FALSE;
        if (!adapter_to_pwrctl(padapter)->bkeepfwalive)
                pHalData->LastHMEBoxNum = 0;
 
        if (!adapter_to_pwrctl(padapter)->bkeepfwalive)
                pHalData->LastHMEBoxNum = 0;
 
@@ -3407,15 +3473,12 @@ void rtl8723b_init_default_value(PADAPTER padapter)
        pHalData->macid_num = MACID_NUM_8723B;
        pHalData->cam_entry_num = CAM_ENTRY_NUM_8723B;
 
        pHalData->macid_num = MACID_NUM_8723B;
        pHalData->cam_entry_num = CAM_ENTRY_NUM_8723B;
 
-       // init dm default value
-       pdmpriv->TM_Trigger = 0;//for IQK
-//     pdmpriv->binitialized = _FALSE;
-//     pdmpriv->prv_traffic_idx = 3;
-//     pdmpriv->initialize = 0;
-
-       pdmpriv->ThermalValue_HP_index = 0;
-       for (i=0; i<HP_THERMAL_NUM; i++)
-               pdmpriv->ThermalValue_HP[i] = 0;
+       //init phydm default value
+       pHalData->bIQKInitialized = _FALSE;
+       pHalData->odmpriv.RFCalibrateInfo.TM_Trigger = 0;//for IQK
+       pHalData->odmpriv.RFCalibrateInfo.ThermalValue_HP_index = 0;
+       for(i = 0; i < HP_THERMAL_NUM; i++)
+               pHalData->odmpriv.RFCalibrateInfo.ThermalValue_HP[i] = 0;
 
        // init Efuse variables
        pHalData->EfuseUsedBytes = 0;
 
        // init Efuse variables
        pHalData->EfuseUsedBytes = 0;
@@ -3517,47 +3580,22 @@ n. LEDCFG 0x4C[15:0] = 0x8080
        value32 |= ((u4bTmp<<8) | 0x00FF0000);
        rtw_write32(padapter, REG_GPIO_PIN_CTRL, value32);
 
        value32 |= ((u4bTmp<<8) | 0x00FF0000);
        rtw_write32(padapter, REG_GPIO_PIN_CTRL, value32);
 
-       if (IS_HARDWARE_TYPE_8723AU(padapter) ||
-               IS_HARDWARE_TYPE_8723AS(padapter))
-       {
-               //
-               // <Roger_Notes> For RTL8723u multi-function configuration which was autoload from Efuse offset 0x0a and 0x0b,
-               // WLAN HW GPIO[9], GPS HW GPIO[10] and BT HW GPIO[11].
-               // Added by Roger, 2010.10.07.
-               //
-               //2. Disable GPIO[8] and GPIO[12]
-               rtw_write16(padapter, REG_GPIO_IO_SEL_2, 0x0000); // Configure all pins as input mode.
-               value32 = rtw_read32(padapter, REG_GPIO_PIN_CTRL_2) & 0xFFFF001F;
-               u4bTmp = value32 & 0x0000001F;
-//             if( IS_MULTI_FUNC_CHIP(padapter) )
-//                     value32 |= ((u4bTmp<<8) | 0x00110000); // Set pin 8 and pin 12 to output mode.
-//             else
-                       value32 |= ((u4bTmp<<8) | 0x001D0000); // Set pin 8, 10, 11 and pin 12 to output mode.
-               rtw_write32(padapter, REG_GPIO_PIN_CTRL_2, value32);
-       }
-       else
-       {
-               //2. Disable GPIO[10:8]
-               rtw_write8(padapter, REG_MAC_PINMUX_CFG, 0x00);
-               value16 = rtw_read16(padapter, REG_GPIO_IO_SEL) & 0xFF0F;
-               value8 = (u8) (value16&0x000F);
-               value16 |= ((value8<<4) | 0x0780);
-               rtw_write16(padapter, REG_GPIO_IO_SEL, value16);
-       }
+       
+       //2. Disable GPIO[10:8]
+       rtw_write8(padapter, REG_MAC_PINMUX_CFG, 0x00);
+       value16 = rtw_read16(padapter, REG_GPIO_IO_SEL) & 0xFF0F;
+       value8 = (u8) (value16&0x000F);
+       value16 |= ((value8<<4) | 0x0780);
+       rtw_write16(padapter, REG_GPIO_IO_SEL, value16);
+       
 
        //3. Disable LED0 & 1
 
        //3. Disable LED0 & 1
-       if(IS_HARDWARE_TYPE_8192DU(padapter))
-       {
-               rtw_write16(padapter, REG_LEDCFG0, 0x8888);
-       }
-       else
-       {
-               rtw_write16(padapter, REG_LEDCFG0, 0x8080);
-       }
+       rtw_write16(padapter, REG_LEDCFG0, 0x8080);
+       
 //     RT_TRACE(COMP_INIT, DBG_LOUD, ("======> Disable GPIO and LED.\n"));
 } //end of _DisableGPIO()
 
 //     RT_TRACE(COMP_INIT, DBG_LOUD, ("======> Disable GPIO and LED.\n"));
 } //end of _DisableGPIO()
 
-void _DisableRFAFEAndResetBB8192C(PADAPTER padapter)
+void _DisableRFAFEAndResetBB8723B(PADAPTER padapter)
 {
 /**************************************
 a.     TXPAUSE 0x522[7:0] = 0xFF             //Pause MAC TX queue
 {
 /**************************************
 a.     TXPAUSE 0x522[7:0] = 0xFF             //Pause MAC TX queue
@@ -3591,15 +3629,10 @@ e.      SYS_FUNC_EN 0x02[7:0] = 0x14            //reset BB state machine
 
 void _DisableRFAFEAndResetBB(PADAPTER padapter)
 {
 
 void _DisableRFAFEAndResetBB(PADAPTER padapter)
 {
-#if 0
-       if (IS_HARDWARE_TYPE_8192D(padapter))
-               _DisableRFAFEAndResetBB8192D(padapter);
-       else
-#endif
-               _DisableRFAFEAndResetBB8192C(padapter);
+       _DisableRFAFEAndResetBB8723B(padapter);
 }
 
 }
 
-void _ResetDigitalProcedure1_92C(PADAPTER padapter, BOOLEAN bWithoutHWSM)
+void _ResetDigitalProcedure1_8723B(PADAPTER padapter, BOOLEAN bWithoutHWSM)
 {
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
 
 {
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
 
@@ -3704,10 +3737,7 @@ void _ResetDigitalProcedure1_92C(PADAPTER padapter, BOOLEAN bWithoutHWSM)
                //rtw_write16(padapter, REG_SYS_CLKR, 0x30A3);
                //if(!pDevice->RegUsbSS)
                // 2011/01/26 MH SD4 Scott suggest to fix UNC-B cut bug.
                //rtw_write16(padapter, REG_SYS_CLKR, 0x30A3);
                //if(!pDevice->RegUsbSS)
                // 2011/01/26 MH SD4 Scott suggest to fix UNC-B cut bug.
-               //if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
-                       //rtw_write16(padapter, REG_SYS_CLKR, (0x70A3|BIT6));  //modify to 0x70A3 by Scott.
-               //else
-                       rtw_write16(padapter, REG_SYS_CLKR, 0x70A3);  //modify to 0x70A3 by Scott.
+               rtw_write16(padapter, REG_SYS_CLKR, 0x70A3);  //modify to 0x70A3 by Scott.
                rtw_write8(padapter, REG_AFE_PLL_CTRL, 0x80);
                rtw_write16(padapter, REG_AFE_XTAL_CTRL, 0x880F);
                //if(!pDevice->RegUsbSS)
                rtw_write8(padapter, REG_AFE_PLL_CTRL, 0x80);
                rtw_write16(padapter, REG_AFE_XTAL_CTRL, 0x880F);
                //if(!pDevice->RegUsbSS)
@@ -3724,12 +3754,7 @@ void _ResetDigitalProcedure1_92C(PADAPTER padapter, BOOLEAN bWithoutHWSM)
 
 void _ResetDigitalProcedure1(PADAPTER padapter, BOOLEAN bWithoutHWSM)
 {
 
 void _ResetDigitalProcedure1(PADAPTER padapter, BOOLEAN bWithoutHWSM)
 {
-#if 0
-       if(IS_HARDWARE_TYPE_8192D(padapter))
-               _ResetDigitalProcedure1_92D(padapter, bWithoutHWSM);
-       else
-#endif
-               _ResetDigitalProcedure1_92C(padapter, bWithoutHWSM);
+       _ResetDigitalProcedure1_8723B(padapter, bWithoutHWSM);
 }
 
 void _ResetDigitalProcedure2(PADAPTER padapter)
 }
 
 void _ResetDigitalProcedure2(PADAPTER padapter)
@@ -3742,10 +3767,7 @@ m.       SYS_ISO_CTRL 0x01[7:0] = 0x83                   // isolated ELDR to PON
 ******************************/
        //rtw_write8(padapter, REG_SYS_FUNC_EN+1, 0x44); //marked by Scott.
        // 2011/01/26 MH SD4 Scott suggest to fix UNC-B cut bug.
 ******************************/
        //rtw_write8(padapter, REG_SYS_FUNC_EN+1, 0x44); //marked by Scott.
        // 2011/01/26 MH SD4 Scott suggest to fix UNC-B cut bug.
-       //if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
-               //rtw_write16(padapter, REG_SYS_CLKR, 0x70a3|BIT6);
-       //else
-               rtw_write16(padapter, REG_SYS_CLKR, 0x70a3); //modify to 0x70a3 by Scott.
+       rtw_write16(padapter, REG_SYS_CLKR, 0x70a3); //modify to 0x70a3 by Scott.
        rtw_write8(padapter, REG_SYS_ISO_CTRL+1, 0x82); //modify to 0x82 by Scott.
 }
 
        rtw_write8(padapter, REG_SYS_ISO_CTRL+1, 0x82); //modify to 0x82 by Scott.
 }
 
@@ -3778,8 +3800,6 @@ void _DisableAnalog(PADAPTER padapter, BOOLEAN bWithoutHWSM)
        i.      APS_FSMCO 0x04[15:0] = 0x4802           // set USB suspend
        ******************************/
        value8 = 0x23;
        i.      APS_FSMCO 0x04[15:0] = 0x4802           // set USB suspend
        ******************************/
        value8 = 0x23;
-       if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
-               value8 |= BIT3;
 
        rtw_write8(padapter, REG_SPS0_CTRL, value8);
 
 
        rtw_write8(padapter, REG_SPS0_CTRL, value8);
 
@@ -3922,15 +3942,15 @@ Hal_InitPGData(
        PADAPTER        padapter,
        u8                      *PROMContent)
 {
        PADAPTER        padapter,
        u8                      *PROMContent)
 {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-//     HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
        u32                     i;
        u16                     value16;
 
        u32                     i;
        u16                     value16;
 
-       if(_FALSE == pEEPROM->bautoload_fail_flag)
+       if(_FALSE == pHalData->bautoload_fail_flag)
        { // autoload OK.
 //             if (IS_BOOT_FROM_EEPROM(padapter))
        { // autoload OK.
 //             if (IS_BOOT_FROM_EEPROM(padapter))
-               if (_TRUE == pEEPROM->EepromOrEfuse)
+               if (_TRUE == pHalData->EepromOrEfuse)
                {
                        // Read all Content from EEPROM or EFUSE.
                        for(i = 0; i < HWSET_MAX_SIZE_8723B; i += 2)
                {
                        // Read all Content from EEPROM or EFUSE.
                        for(i = 0; i < HWSET_MAX_SIZE_8723B; i += 2)
@@ -3943,7 +3963,7 @@ Hal_InitPGData(
                {
                        // Read EFUSE real map to shadow.
                        EFUSE_ShadowMapUpdate(padapter, EFUSE_WIFI, _FALSE);
                {
                        // Read EFUSE real map to shadow.
                        EFUSE_ShadowMapUpdate(padapter, EFUSE_WIFI, _FALSE);
-                       _rtw_memcpy((void*)PROMContent, (void*)pEEPROM->efuse_eeprom_data, HWSET_MAX_SIZE_8723B);
+                       _rtw_memcpy((void*)PROMContent, (void*)pHalData->efuse_eeprom_data, HWSET_MAX_SIZE_8723B);
                }
        }
        else
                }
        }
        else
@@ -3951,9 +3971,9 @@ Hal_InitPGData(
                RT_TRACE(_module_hci_hal_init_c_, _drv_notice_, ("AutoLoad Fail reported from CR9346!!\n"));
 //             pHalData->AutoloadFailFlag = _TRUE;
                //update to default value 0xFF
                RT_TRACE(_module_hci_hal_init_c_, _drv_notice_, ("AutoLoad Fail reported from CR9346!!\n"));
 //             pHalData->AutoloadFailFlag = _TRUE;
                //update to default value 0xFF
-               if (_FALSE == pEEPROM->EepromOrEfuse)
+               if (_FALSE == pHalData->EepromOrEfuse)
                        EFUSE_ShadowMapUpdate(padapter, EFUSE_WIFI, _FALSE);
                        EFUSE_ShadowMapUpdate(padapter, EFUSE_WIFI, _FALSE);
-               _rtw_memcpy((void*)PROMContent, (void*)pEEPROM->efuse_eeprom_data, HWSET_MAX_SIZE_8723B);
+               _rtw_memcpy((void*)PROMContent, (void*)pHalData->efuse_eeprom_data, HWSET_MAX_SIZE_8723B);
        }
 }
 
        }
 }
 
@@ -3963,8 +3983,7 @@ Hal_EfuseParseIDCode(
        IN      u8                      *hwinfo
        )
 {
        IN      u8                      *hwinfo
        )
 {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-//     HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
        u16                     EEPROMId;
 
 
        u16                     EEPROMId;
 
 
@@ -3973,11 +3992,11 @@ Hal_EfuseParseIDCode(
        if (EEPROMId != RTL_EEPROM_ID)
        {
                DBG_8192C("EEPROM ID(%#x) is invalid!!\n", EEPROMId);
        if (EEPROMId != RTL_EEPROM_ID)
        {
                DBG_8192C("EEPROM ID(%#x) is invalid!!\n", EEPROMId);
-               pEEPROM->bautoload_fail_flag = _TRUE;
+               pHalData->bautoload_fail_flag = _TRUE;
        }
        else
        {
        }
        else
        {
-               pEEPROM->bautoload_fail_flag = _FALSE;
+               pHalData->bautoload_fail_flag = _FALSE;
        }
 
        RT_TRACE(_module_hal_init_c_, _drv_notice_, ("EEPROM ID=0x%04x\n", EEPROMId));
        }
 
        RT_TRACE(_module_hal_init_c_, _drv_notice_, ("EEPROM ID=0x%04x\n", EEPROMId));
@@ -4102,64 +4121,36 @@ Hal_ReadPowerValueFromPROM_8723B(
                        if(TxCount==0)
                        {
                                pwrInfo24G->BW40_Diff[rfPath][TxCount] = 0;
                        if(TxCount==0)
                        {
                                pwrInfo24G->BW40_Diff[rfPath][TxCount] = 0;
-                               if(PROMContent[eeAddr] == 0xFF)
-                                       pwrInfo24G->BW20_Diff[rfPath][TxCount] =        EEPROM_DEFAULT_24G_HT20_DIFF;
-                               else
-                               {
-                                       pwrInfo24G->BW20_Diff[rfPath][TxCount] =        (PROMContent[eeAddr]&0xf0)>>4;                          
-                                       if(pwrInfo24G->BW20_Diff[rfPath][TxCount] & BIT3)               //4bit sign number to 8 bit sign number
-                                               pwrInfo24G->BW20_Diff[rfPath][TxCount] |= 0xF0;
-                               }
+                               pwrInfo24G->BW20_Diff[rfPath][TxCount] = (PROMContent[eeAddr]&0xf0)>>4;
+                               if (pwrInfo24G->BW20_Diff[rfPath][TxCount] & BIT3)              /*4bit sign number to 8 bit sign number*/
+                                       pwrInfo24G->BW20_Diff[rfPath][TxCount] |= 0xF0;
+
+                               pwrInfo24G->OFDM_Diff[rfPath][TxCount] = (PROMContent[eeAddr]&0x0f);
+                               if (pwrInfo24G->OFDM_Diff[rfPath][TxCount] & BIT3)              /*4bit sign number to 8 bit sign number*/
+                                       pwrInfo24G->OFDM_Diff[rfPath][TxCount] |= 0xF0;
 
 
-                               if(PROMContent[eeAddr] == 0xFF)
-                                       pwrInfo24G->OFDM_Diff[rfPath][TxCount] =        EEPROM_DEFAULT_24G_OFDM_DIFF;                           
-                               else 
-                               {
-                                       pwrInfo24G->OFDM_Diff[rfPath][TxCount] =        (PROMContent[eeAddr]&0x0f);                                     
-                                       if(pwrInfo24G->OFDM_Diff[rfPath][TxCount] & BIT3)               //4bit sign number to 8 bit sign number
-                                               pwrInfo24G->OFDM_Diff[rfPath][TxCount] |= 0xF0;
-                               }               
                                pwrInfo24G->CCK_Diff[rfPath][TxCount] = 0;
                                eeAddr++;
                                pwrInfo24G->CCK_Diff[rfPath][TxCount] = 0;
                                eeAddr++;
-                       }
-                       else
-                       {                               
-                               if(PROMContent[eeAddr] == 0xFF)
-                                       pwrInfo24G->BW40_Diff[rfPath][TxCount] =        EEPROM_DEFAULT_DIFF;                                                            
-                               else 
-                               {
-                                       pwrInfo24G->BW40_Diff[rfPath][TxCount] =        (PROMContent[eeAddr]&0xf0)>>4;                          
-                                       if(pwrInfo24G->BW40_Diff[rfPath][TxCount] & BIT3)               //4bit sign number to 8 bit sign number
-                                               pwrInfo24G->BW40_Diff[rfPath][TxCount] |= 0xF0;
-                               }
-                               
-                               if(PROMContent[eeAddr] == 0xFF)
-                                       pwrInfo24G->BW20_Diff[rfPath][TxCount] =        EEPROM_DEFAULT_DIFF;                            
-                               else 
-                               {
-                                       pwrInfo24G->BW20_Diff[rfPath][TxCount] =        (PROMContent[eeAddr]&0x0f);                             
-                                       if(pwrInfo24G->BW20_Diff[rfPath][TxCount] & BIT3)               //4bit sign number to 8 bit sign number
-                                               pwrInfo24G->BW20_Diff[rfPath][TxCount] |= 0xF0;
-                               }
+                       } else{
+                               pwrInfo24G->BW40_Diff[rfPath][TxCount] =        (PROMContent[eeAddr]&0xf0)>>4;
+                               if (pwrInfo24G->BW40_Diff[rfPath][TxCount] & BIT3)              /*4bit sign number to 8 bit sign number*/
+                                       pwrInfo24G->BW40_Diff[rfPath][TxCount] |= 0xF0;
+
+                               pwrInfo24G->BW20_Diff[rfPath][TxCount] =        (PROMContent[eeAddr]&0x0f);
+                               if (pwrInfo24G->BW20_Diff[rfPath][TxCount] & BIT3)              /*4bit sign number to 8 bit sign number*/
+                                       pwrInfo24G->BW20_Diff[rfPath][TxCount] |= 0xF0;
+
                                eeAddr++;
                                eeAddr++;
-                               
-                               if(PROMContent[eeAddr] == 0xFF)
-                                       pwrInfo24G->OFDM_Diff[rfPath][TxCount] =        EEPROM_DEFAULT_DIFF;                                                            
-                               else 
-                               {
-                                       pwrInfo24G->OFDM_Diff[rfPath][TxCount] =        (PROMContent[eeAddr]&0xf0)>>4;                          
-                                       if(pwrInfo24G->OFDM_Diff[rfPath][TxCount] & BIT3)               //4bit sign number to 8 bit sign number
-                                               pwrInfo24G->OFDM_Diff[rfPath][TxCount] |= 0xF0;
-                               }
-                       
-                               if(PROMContent[eeAddr] == 0xFF)
-                                       pwrInfo24G->CCK_Diff[rfPath][TxCount] = EEPROM_DEFAULT_DIFF;                                                                                            
-                               else 
-                               {
-                                       pwrInfo24G->CCK_Diff[rfPath][TxCount] = (PROMContent[eeAddr]&0x0f);                             
-                                       if(pwrInfo24G->CCK_Diff[rfPath][TxCount] & BIT3)                //4bit sign number to 8 bit sign number
-                                               pwrInfo24G->CCK_Diff[rfPath][TxCount] |= 0xF0;
-                               }
+
+                               pwrInfo24G->OFDM_Diff[rfPath][TxCount] =        (PROMContent[eeAddr]&0xf0)>>4;
+                               if (pwrInfo24G->OFDM_Diff[rfPath][TxCount] & BIT3)              /*4bit sign number to 8 bit sign number*/
+                                       pwrInfo24G->OFDM_Diff[rfPath][TxCount] |= 0xF0;
+
+
+                               pwrInfo24G->CCK_Diff[rfPath][TxCount] = (PROMContent[eeAddr]&0x0f);
+                               if (pwrInfo24G->CCK_Diff[rfPath][TxCount] & BIT3)               /*4bit sign number to 8 bit sign number*/
+                                       pwrInfo24G->CCK_Diff[rfPath][TxCount] |= 0xF0;
+
                                eeAddr++;
                        }
                }
                                eeAddr++;
                        }
                }
@@ -4238,6 +4229,31 @@ Hal_EfuseParseTxPowerInfo_8723B(
        RT_TRACE(_module_hci_hal_init_c_, _drv_notice_, ("EEPROMRegulatory = 0x%x\n", pHalData->EEPROMRegulatory));
 }
 
        RT_TRACE(_module_hci_hal_init_c_, _drv_notice_, ("EEPROMRegulatory = 0x%x\n", pHalData->EEPROMRegulatory));
 }
 
+VOID
+Hal_EfuseParseBoardType_8723B(
+       IN      PADAPTER        Adapter,        
+       IN      u8*                     PROMContent,
+       IN      BOOLEAN         AutoloadFail
+       )
+{
+
+
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
+
+       if(!AutoloadFail)
+       {
+               pHalData->InterfaceSel = (PROMContent[EEPROM_RF_BOARD_OPTION_8723B]&0xE0)>>5;
+               if(PROMContent[EEPROM_RF_BOARD_OPTION_8723B] == 0xFF)
+                       pHalData->InterfaceSel = (EEPROM_DEFAULT_BOARD_OPTION&0xE0)>>5;
+       }
+       else
+       {
+               pHalData->InterfaceSel = 0;
+       }
+       RT_TRACE(_module_hci_hal_init_c_, _drv_notice_, ("Board Type: 0x%2x\n", pHalData->InterfaceSel));
+
+}
+
 VOID
 Hal_EfuseParseBTCoexistInfo_8723B(
        IN PADAPTER                     padapter,
 VOID
 Hal_EfuseParseBTCoexistInfo_8723B(
        IN PADAPTER                     padapter,
@@ -4391,6 +4407,15 @@ Hal_EfuseParsePackageType_8723B(
        }
 
        DBG_871X("PackageType = 0x%X\n", pHalData->PackageType);
        }
 
        DBG_871X("PackageType = 0x%X\n", pHalData->PackageType);
+
+#ifdef CONFIG_SDIO_HCI
+       /* RTL8703AS: 0x1FB[5:4] 2b'10 */
+       /* RTL8723BS: 0x1FB[5:4] 2b'11 */
+       if ((efuseContent & 0x30) == 0x20) {
+               pAdapter->registrypriv.bw_mode &= 0xF0;
+               DBG_871X("This is the case of 8703AS\n");
+       }
+#endif 
 }
 
 
 }
 
 
@@ -4402,12 +4427,11 @@ Hal_EfuseParseVoltage_8723B(
        ) 
 {
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
        ) 
 {
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
-
-       //_rtw_memcpy(pEEPROM->adjuseVoltageVal, &hwinfo[EEPROM_Voltage_ADDR_8723B], 1);
+       
+       //_rtw_memcpy(pHalData->adjuseVoltageVal, &hwinfo[EEPROM_Voltage_ADDR_8723B], 1);
        DBG_871X("%s hwinfo[EEPROM_Voltage_ADDR_8723B] =%02x \n",__func__, hwinfo[EEPROM_Voltage_ADDR_8723B]);
        DBG_871X("%s hwinfo[EEPROM_Voltage_ADDR_8723B] =%02x \n",__func__, hwinfo[EEPROM_Voltage_ADDR_8723B]);
-       pEEPROM->adjuseVoltageVal = (hwinfo[EEPROM_Voltage_ADDR_8723B] & 0xf0) >> 4 ;
-       DBG_871X("%s pEEPROM->adjuseVoltageVal =%x \n",__func__,pEEPROM->adjuseVoltageVal);
+       pHalData->adjuseVoltageVal = (hwinfo[EEPROM_Voltage_ADDR_8723B] & 0xf0) >> 4 ;
+       DBG_871X("%s pHalData->adjuseVoltageVal =%x \n",__func__,pHalData->adjuseVoltageVal);
 }
 
 VOID
 }
 
 VOID
@@ -4536,7 +4560,7 @@ Hal_EfuseParseThermalMeter_8723B(
 
        if ((pHalData->EEPROMThermalMeter == 0xff) || (_TRUE == AutoLoadFail))
        {
 
        if ((pHalData->EEPROMThermalMeter == 0xff) || (_TRUE == AutoLoadFail))
        {
-               pHalData->bAPKThermalMeterIgnore = _TRUE;
+               pHalData->odmpriv.RFCalibrateInfo.bAPKThermalMeterIgnore = _TRUE;
                pHalData->EEPROMThermalMeter = EEPROM_Default_ThermalMeter_8723B;
        }
 
                pHalData->EEPROMThermalMeter = EEPROM_Default_ThermalMeter_8723B;
        }
 
@@ -4550,22 +4574,23 @@ void Hal_ReadRFGainOffset(
        IN              u8*                     PROMContent,
        IN              BOOLEAN                 AutoloadFail)
 {
        IN              u8*                     PROMContent,
        IN              BOOLEAN                 AutoloadFail)
 {
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
        //
        // BB_RF Gain Offset from EEPROM
        //
 
        if(!AutoloadFail ){
        //
        // BB_RF Gain Offset from EEPROM
        //
 
        if(!AutoloadFail ){
-               Adapter->eeprompriv.EEPROMRFGainOffset =PROMContent[EEPROM_RF_GAIN_OFFSET];
+               pHalData->EEPROMRFGainOffset =PROMContent[EEPROM_RF_GAIN_OFFSET];
                DBG_871X("AutoloadFail =%x,\n", AutoloadFail);
                DBG_871X("AutoloadFail =%x,\n", AutoloadFail);
-               Adapter->eeprompriv.EEPROMRFGainVal=EFUSE_Read1Byte(Adapter, EEPROM_RF_GAIN_VAL);
-               DBG_871X("Adapter->eeprompriv.EEPROMRFGainVal=%x\n", Adapter->eeprompriv.EEPROMRFGainVal);
+               pHalData->EEPROMRFGainVal=EFUSE_Read1Byte(Adapter, EEPROM_RF_GAIN_VAL);
+               DBG_871X("pHalData->EEPROMRFGainVal=%x\n", pHalData->EEPROMRFGainVal);
        }
        else{
        }
        else{
-               Adapter->eeprompriv.EEPROMRFGainOffset = 0;
-               Adapter->eeprompriv.EEPROMRFGainVal=0xFF;
+               pHalData->EEPROMRFGainOffset = 0;
+               pHalData->EEPROMRFGainVal=0xFF;
                DBG_871X("else AutoloadFail =%x,\n", AutoloadFail);
        }
                DBG_871X("else AutoloadFail =%x,\n", AutoloadFail);
        }
-       DBG_871X("EEPRORFGainOffset = 0x%02x\n", Adapter->eeprompriv.EEPROMRFGainOffset);
+       DBG_871X("EEPRORFGainOffset = 0x%02x\n", pHalData->EEPROMRFGainOffset);
 }
 #endif //CONFIG_RF_GAIN_OFFSET
 
 }
 #endif //CONFIG_RF_GAIN_OFFSET
 
@@ -4755,8 +4780,7 @@ static void rtl8723b_fill_default_txdesc(
        u8 *pbuf)
 {
        PADAPTER padapter;
        u8 *pbuf)
 {
        PADAPTER padapter;
-       HAL_DATA_TYPE *pHalData;
-       struct dm_priv *pdmpriv;
+       HAL_DATA_TYPE *pHalData; 
        struct mlme_ext_priv *pmlmeext;
        struct mlme_ext_info *pmlmeinfo;
        struct pkt_attrib *pattrib;
        struct mlme_ext_priv *pmlmeext;
        struct mlme_ext_info *pmlmeinfo;
        struct pkt_attrib *pattrib;
@@ -4765,8 +4789,7 @@ static void rtl8723b_fill_default_txdesc(
        _rtw_memset(pbuf, 0, TXDESC_SIZE);
 
        padapter = pxmitframe->padapter;
        _rtw_memset(pbuf, 0, TXDESC_SIZE);
 
        padapter = pxmitframe->padapter;
-       pHalData = GET_HAL_DATA(padapter);
-       pdmpriv = &pHalData->dmpriv;
+       pHalData = GET_HAL_DATA(padapter); 
        pmlmeext = &padapter->mlmeextpriv;
        pmlmeinfo = &(pmlmeext->mlmext_info);
 
        pmlmeext = &padapter->mlmeextpriv;
        pmlmeinfo = &(pmlmeext->mlmext_info);
 
@@ -4816,11 +4839,11 @@ static void rtl8723b_fill_default_txdesc(
                        if (pHalData->fw_ractrl == _FALSE) {
                                SET_TX_DESC_USE_RATE_8723B(pbuf, 1);
 
                        if (pHalData->fw_ractrl == _FALSE) {
                                SET_TX_DESC_USE_RATE_8723B(pbuf, 1);
 
-                               if (pHalData->dmpriv.INIDATA_RATE[pattrib->mac_id] & BIT(7)) {
+                               if (pHalData->INIDATA_RATE[pattrib->mac_id] & BIT(7)) {
                                        SET_TX_DESC_DATA_SHORT_8723B(pbuf, 1);
                                }
 
                                        SET_TX_DESC_DATA_SHORT_8723B(pbuf, 1);
                                }
 
-                               SET_TX_DESC_TX_RATE_8723B(pbuf, pHalData->dmpriv.INIDATA_RATE[pattrib->mac_id] & 0x7F);
+                               SET_TX_DESC_TX_RATE_8723B(pbuf, pHalData->INIDATA_RATE[pattrib->mac_id] & 0x7F);
                        }
 
                        // modify data rate by iwpriv
                        }
 
                        // modify data rate by iwpriv
@@ -4866,6 +4889,19 @@ static void rtl8723b_fill_default_txdesc(
 
 #if defined(CONFIG_USB_TX_AGGREGATION) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
                SET_TX_DESC_USB_TXAGG_NUM_8723B(pbuf, pxmitframe->agg_num);
 
 #if defined(CONFIG_USB_TX_AGGREGATION) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
                SET_TX_DESC_USB_TXAGG_NUM_8723B(pbuf, pxmitframe->agg_num);
+#endif
+
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_XMIT_ACK
+               /* CCX-TXRPT ack for xmit mgmt frames. */
+               if (pxmitframe->ack_report) {
+                       #ifdef DBG_CCX
+                       DBG_8192C("%s set spe_rpt\n", __func__);
+                       #endif
+                       SET_TX_DESC_SPE_RPT_8723B(pbuf, 1);
+                       SET_TX_DESC_SW_DEFINE_8723B(pbuf, (u8)(GET_PRIMARY_ADAPTER(padapter)->xmitpriv.seq_no));
+               }
+#endif /* CONFIG_XMIT_ACK */
 #endif
        }
        else if (pxmitframe->frame_tag == MGNT_FRAMETAG)
 #endif
        }
        else if (pxmitframe->frame_tag == MGNT_FRAMETAG)
@@ -4981,6 +5017,7 @@ static void rtl8723b_fill_default_txdesc(
  */
 void rtl8723b_update_txdesc(struct xmit_frame *pxmitframe, u8 *pbuf)
 {
  */
 void rtl8723b_update_txdesc(struct xmit_frame *pxmitframe, u8 *pbuf)
 {
+       PADAPTER padapter = pxmitframe->padapter;
        rtl8723b_fill_default_txdesc(pxmitframe, pbuf);
 
 #ifdef CONFIG_ANTENNA_DIVERSITY
        rtl8723b_fill_default_txdesc(pxmitframe, pbuf);
 
 #ifdef CONFIG_ANTENNA_DIVERSITY
@@ -4992,90 +5029,6 @@ void rtl8723b_update_txdesc(struct xmit_frame *pxmitframe, u8 *pbuf)
 #endif
 }
 
 #endif
 }
 
-//
-// Description: In normal chip, we should send some packet to Hw which will be used by Fw
-//                     in FW LPS mode. The function is to fill the Tx descriptor of this packets, then
-//                     Fw can tell Hw to send these packet derectly.
-// Added by tynli. 2009.10.15.
-//
-//type1:pspoll, type2:null
-void rtl8723b_fill_fake_txdesc(
-       PADAPTER        padapter,
-       u8*                     pDesc,
-       u32                     BufferLen,
-       u8                      IsPsPoll,
-       u8                      IsBTQosNull,
-       u8                      bDataFrame)
-{
-       // Clear all status
-       _rtw_memset(pDesc, 0, TXDESC_SIZE);
-
-       SET_TX_DESC_FIRST_SEG_8723B(pDesc, 1); //bFirstSeg;
-       SET_TX_DESC_LAST_SEG_8723B(pDesc, 1); //bLastSeg;
-
-       SET_TX_DESC_OFFSET_8723B(pDesc, 0x28); // Offset = 32
-
-       SET_TX_DESC_PKT_SIZE_8723B(pDesc, BufferLen); // Buffer size + command header
-       SET_TX_DESC_QUEUE_SEL_8723B(pDesc, QSLT_MGNT); // Fixed queue of Mgnt queue
-
-       // Set NAVUSEHDR to prevent Ps-poll AId filed to be changed to error vlaue by Hw.
-       if (_TRUE == IsPsPoll)
-       {
-               SET_TX_DESC_NAV_USE_HDR_8723B(pDesc, 1);
-       }
-       else
-       {
-               SET_TX_DESC_HWSEQ_EN_8723B(pDesc, 1); // Hw set sequence number
-               SET_TX_DESC_HWSEQ_SEL_8723B(pDesc, 0);
-       }
-
-       if (_TRUE ==IsBTQosNull)
-       {
-               SET_TX_DESC_BT_INT_8723B(pDesc, 1);
-       }
-
-       SET_TX_DESC_USE_RATE_8723B(pDesc, 1); // use data rate which is set by Sw
-       SET_TX_DESC_OWN_8723B((pu1Byte)pDesc, 1);
-
-       SET_TX_DESC_TX_RATE_8723B(pDesc, DESC8723B_RATE1M);
-
-       //
-       // Encrypt the data frame if under security mode excepct null data. Suggested by CCW.
-       //
-       if (_TRUE ==bDataFrame)
-       {
-               u32 EncAlg;
-
-               EncAlg = padapter->securitypriv.dot11PrivacyAlgrthm;
-               switch (EncAlg)
-               {
-                       case _NO_PRIVACY_:
-                               SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x0); 
-                               break;
-                       case _WEP40_:
-                       case _WEP104_:
-                       case _TKIP_:
-                               SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x1); 
-                               break;
-                       case _SMS4_:
-                               SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x2); 
-                               break;
-                       case _AES_:
-                               SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x3);
-                               break;
-                       default:
-                               SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x0); 
-                               break;   
-               }
-       }
-
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-       // USB interface drop packet if the checksum of descriptor isn't correct.
-       // Using this checksum can let hardware recovery from packet bulk out error (e.g. Cancel URC, Bulk out error.).
-       rtl8723b_cal_txdesc_chksum((struct tx_desc*)pDesc);
-#endif
-}
-
 #ifdef CONFIG_TSF_RESET_OFFLOAD
 int reset_tsf(PADAPTER Adapter, u8 reset_port )
 {
 #ifdef CONFIG_TSF_RESET_OFFLOAD
 int reset_tsf(PADAPTER Adapter, u8 reset_port )
 {
@@ -5097,11 +5050,69 @@ int reset_tsf(PADAPTER Adapter, u8 reset_port )
 }
 #endif // CONFIG_TSF_RESET_OFFLOAD
 
 }
 #endif // CONFIG_TSF_RESET_OFFLOAD
 
+static void hw_var_set_monitor(PADAPTER Adapter, u8 variable, u8 *val)
+{
+       u32     value_rcr, rcr_bits;
+       u16     value_rxfltmap2;
+       HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+       struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
+
+       if (*((u8 *)val) == _HW_STATE_MONITOR_) {
+
+               /* Leave IPS */
+               rtw_pm_set_ips(Adapter, IPS_NONE);
+               LeaveAllPowerSaveMode(Adapter);
+
+               /* Receive all type */
+               rcr_bits = RCR_AAP | RCR_APM | RCR_AM | RCR_AB | RCR_APWRMGT | RCR_ADF | RCR_ACF | RCR_AMF | RCR_APP_PHYST_RXFF;
+
+               /* Append FCS */
+               rcr_bits |= RCR_APPFCS;
+
+               #if 0
+               /* 
+                  CRC and ICV packet will drop in recvbuf2recvframe()
+                  We no turn on it.
+                */
+               rcr_bits |= (RCR_ACRC32 | RCR_AICV);
+               #endif
+
+               /* Receive all data frames */
+               value_rxfltmap2 = 0xFFFF;
+
+               value_rcr = rcr_bits;
+               rtw_write32(Adapter, REG_RCR, value_rcr);
+
+               rtw_write16(Adapter, REG_RXFLTMAP2, value_rxfltmap2);
+
+               #if 0
+               /* tx pause */
+               rtw_write8(padapter, REG_TXPAUSE, 0xFF);
+               #endif
+       } else {
+               /* do nothing */
+       }
+
+}
+
 static void hw_var_set_opmode(PADAPTER padapter, u8 variable, u8* val)
 {
        u8 val8;
        u8 mode = *((u8 *)val);
 
 static void hw_var_set_opmode(PADAPTER padapter, u8 variable, u8* val)
 {
        u8 val8;
        u8 mode = *((u8 *)val);
 
+       HAL_DATA_TYPE                   *pHalData = GET_HAL_DATA(padapter);
+
+       /* reset RCR */
+       rtw_write32(padapter, REG_RCR, pHalData->ReceiveConfig);
+
+       if (mode == _HW_STATE_MONITOR_) {
+               /* set net_type */
+               Set_MSR(padapter, _HW_STATE_NOLINK_);
+
+               hw_var_set_monitor(padapter, variable, val);
+               return;
+       }
+
 #ifdef CONFIG_CONCURRENT_MODE
        if (padapter->iface_type == IFACE_PORT1)
        {
 #ifdef CONFIG_CONCURRENT_MODE
        if (padapter->iface_type == IFACE_PORT1)
        {
@@ -5608,7 +5619,7 @@ static void hw_var_set_mlme_sitesurvey(PADAPTER padapter, u8 variable, u8* val)
 #ifdef CONFIG_FIND_BEST_CHANNEL
        rcr_clear_bit = (RCR_CBSSID_BCN | RCR_CBSSID_DATA);
 
 #ifdef CONFIG_FIND_BEST_CHANNEL
        rcr_clear_bit = (RCR_CBSSID_BCN | RCR_CBSSID_DATA);
 
-       // Recieve all data frames
+       /* Receive all data frames */
        value_rxfltmap2 = 0xFFFF;
 #else // CONFIG_FIND_BEST_CHANNEL
 
        value_rxfltmap2 = 0xFFFF;
 #else // CONFIG_FIND_BEST_CHANNEL
 
@@ -5710,14 +5721,11 @@ static void hw_var_set_mlme_join(PADAPTER padapter, u8 variable, u8 *val)
        u8 type;
        PHAL_DATA_TYPE pHalData;
        struct mlme_priv *pmlmepriv;
        u8 type;
        PHAL_DATA_TYPE pHalData;
        struct mlme_priv *pmlmepriv;
-       EEPROM_EFUSE_PRIV *pEEPROM;
-
 
        RetryLimit = 0x30;
        type = *(u8*)val;
        pHalData = GET_HAL_DATA(padapter);
        pmlmepriv = &padapter->mlmepriv;
 
        RetryLimit = 0x30;
        type = *(u8*)val;
        pHalData = GET_HAL_DATA(padapter);
        pmlmepriv = &padapter->mlmepriv;
-       pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
 
 #ifdef CONFIG_CONCURRENT_MODE
        if (type == 0)
 
 #ifdef CONFIG_CONCURRENT_MODE
        if (type == 0)
@@ -5747,7 +5755,7 @@ static void hw_var_set_mlme_join(PADAPTER padapter, u8 variable, u8 *val)
 
                if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
                {
 
                if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
                {
-                       RetryLimit = (pEEPROM->CustomerID == RT_CID_CCX) ? 7 : 48;
+                       RetryLimit = (pHalData->CustomerID == RT_CID_CCX) ? 7 : 48;
                }
                else // Ad-hoc Mode
                {
                }
                else // Ad-hoc Mode
                {
@@ -5821,7 +5829,7 @@ static void hw_var_set_mlme_join(PADAPTER padapter, u8 variable, u8 *val)
 
                if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
                {
 
                if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
                {
-                       RetryLimit = (pEEPROM->CustomerID == RT_CID_CCX) ? 7 : 48;
+                       RetryLimit = (pHalData->CustomerID == RT_CID_CCX) ? 7 : 48;
                }
                else // Ad-hoc Mode
                {
                }
                else // Ad-hoc Mode
                {
@@ -5878,70 +5886,6 @@ void CCX_FwC2HTxRpt_8723b(PADAPTER padapter, u8 *pdata, u8 len)
 #endif
 }
 
 #endif
 }
 
-#ifdef CONFIG_FW_C2H_DEBUG
-/*
- * C2H RX package original is 128.
- * If enable CONFIG_FW_C2H_DEBUG, it should increase to 256. 
- * C2H FW debug message:
- * without aggregate:
- * {C2H CmdID, Seq, SubID, Len, Content[0~n]}
- * Content[0~n] = { 'a' , 'b' , 'c' ,..., 'z' , '\n'}
- *
- * with aggregate:
- * {C2H CmdID, Seq, SubID, Len, Content[0~n]}
- * Content[0~n] = { 'a' , 'b' , 'c' ,..., 'z', '\n' , Extend C2H pkt 2...}
- * Extend C2H pkt 2 = {C2H CmdID, Seq, SubID, Len, Content = { 'a' , 'b' , 'c' ,..., 'z' , '\n'}}
- *
- * Author: Isaac
- */
-void Debug_FwC2H_8723b(PADAPTER padapter, u8 *pdata, u8 len)
-{
-       int i = 0;
-       int cnt = 0, total_length = 0;
-       u8 buf[128]={0};
-       u8 more_data = _FALSE;
-       u8 *nextdata = NULL;
-       u8 test = 0;
-
-       u8 data_len;
-       u8 seq_no;
-
-       nextdata = pdata;
-#if 0
-       for (i = 0 ; i < len ; i++) {
-               printk("%02x ", pdata[i]);
-               if ((i + 1)%8 == 0)
-                       printk("\n");
-       }
-       printk("\n");
-#endif
-       do {
-               data_len = *(nextdata + 1);
-               seq_no = *(nextdata + 2);
-
-               for (i = 0 ; i < data_len - 2 ; i++) {
-                       cnt += sprintf((buf+cnt), "%c", nextdata[3 + i]);
-
-                       if (nextdata[3 + i] == 0x0a && nextdata[4 + i] == 0xff) {
-                               more_data = _TRUE;
-                       } else if (nextdata[3 + i] == 0x0a && nextdata[4 + i] != 0xff) {
-                               more_data = _FALSE;
-                       }
-               }
-
-               DBG_871X("[RTKFW, SEQ=%d]: %s", seq_no, buf);
-               data_len += 3;
-               total_length += data_len;
-
-               if (more_data == _TRUE) {
-                       _rtw_memset(buf, '\0', 128);
-                       cnt = 0;
-                       nextdata = (pdata + total_length);
-               }
-       } while (more_data == _TRUE);
-}
-#endif //CONFIG_FW_C2H_DEBUG
-
 s32 c2h_id_filter_ccx_8723b(u8 *buf)
 {
        struct c2h_evt_hdr_88xx *c2h_evt = (struct c2h_evt_hdr_88xx *)buf;
 s32 c2h_id_filter_ccx_8723b(u8 *buf)
 {
        struct c2h_evt_hdr_88xx *c2h_evt = (struct c2h_evt_hdr_88xx *)buf;
@@ -6134,7 +6078,7 @@ static void process_c2h_event(PADAPTER padapter, PC2H_EVT_HDR pC2hEvent, u8 *c2h
 
 #ifdef CONFIG_FW_C2H_DEBUG
                case C2H_8723B_FW_DEBUG:
 
 #ifdef CONFIG_FW_C2H_DEBUG
                case C2H_8723B_FW_DEBUG:
-                       Debug_FwC2H_8723b(padapter, c2hBuf, pC2hEvent->CmdLen);
+                       Debug_FwC2H(padapter, c2hBuf, pC2hEvent->CmdLen);
                        break;
 #endif // CONFIG_FW_C2H_DEBUG
 
                        break;
 #endif // CONFIG_FW_C2H_DEBUG
 
@@ -6605,7 +6549,7 @@ _func_enter_;
 
                                // Forece leave RF low power mode for 1T1R to prevent conficting setting in Fw power
                                // saving sequence. 2010.06.07. Added by tynli. Suggested by SD3 yschang.
 
                                // Forece leave RF low power mode for 1T1R to prevent conficting setting in Fw power
                                // saving sequence. 2010.06.07. Added by tynli. Suggested by SD3 yschang.
-                               if ((psmode != PS_MODE_ACTIVE) && (!IS_92C_SERIAL(pHalData->VersionID)))
+                               if (psmode != PS_MODE_ACTIVE)
                                {
                                        ODM_RF_Saving(&pHalData->odmpriv, _TRUE);
                                }
                                {
                                        ODM_RF_Saving(&pHalData->odmpriv, _TRUE);
                                }
@@ -6635,22 +6579,6 @@ _func_enter_;
                case HW_VAR_TDLS_WRCR:
                        rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)&(~RCR_CBSSID_DATA ));
                        break;
                case HW_VAR_TDLS_WRCR:
                        rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)&(~RCR_CBSSID_DATA ));
                        break;
-               case HW_VAR_TDLS_INIT_CH_SEN:
-                       {
-                               rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)&(~ RCR_CBSSID_DATA )&(~RCR_CBSSID_BCN ));
-                               rtw_write16(padapter, REG_RXFLTMAP2,0xffff);
-
-                               //disable update TSF
-                               rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|DIS_TSF_UDT);
-                       }
-                       break;
-               case HW_VAR_TDLS_DONE_CH_SEN:
-                       {
-                               //enable update TSF
-                               rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)&(~ DIS_TSF_UDT));
-                               rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)|(RCR_CBSSID_BCN ));
-                       }
-                       break;
                case HW_VAR_TDLS_RS_RCR:
                        rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)|(RCR_CBSSID_DATA));
                        break;
                case HW_VAR_TDLS_RS_RCR:
                        rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)|(RCR_CBSSID_DATA));
                        break;
@@ -6934,7 +6862,23 @@ _func_enter_;
                        rtw_write32(padapter, reg_macid_sleep, val32);
                }
                        break;
                        rtw_write32(padapter, reg_macid_sleep, val32);
                }
                        break;
-
+#ifdef CONFIG_GPIO_WAKEUP
+               case HW_SET_GPIO_WL_CTRL:
+               {
+                       u8 enable = *val;
+                       u8 value = rtw_read8(padapter, 0x4e);
+                       if (enable && (value & BIT(6))) {
+                               value &= ~BIT(6);
+                               rtw_write8(padapter, 0x4e, value);
+                       } else if (enable == _FALSE){
+                               value |= BIT(6);
+                               rtw_write8(padapter, 0x4e, value);
+                       }
+                       DBG_871X("%s: set WL control, 0x4E=0x%02X\n",
+                                       __func__, rtw_read8(padapter, 0x4e));
+               }
+                       break;
+#endif
                default:
                        SetHwReg(padapter, variable, val);
                        break;
                default:
                        SetHwReg(padapter, variable, val);
                        break;
index 80b3eea6297e3e9cc3c1c1702cd1b1a5aea2a8a7..17cb14ace2191291d107835c305a6b5ec54f0829 100755 (executable)
@@ -129,7 +129,7 @@ void Hal_mpt_SwitchRfSetting(PADAPTER pAdapter)
 s32 Hal_SetPowerTracking(PADAPTER padapter, u8 enable)\r
 {\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);\r
 s32 Hal_SetPowerTracking(PADAPTER padapter, u8 enable)\r
 {\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
+       PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
 \r
 \r
        if (!netif_running(padapter->pnetdev)) {\r
 \r
 \r
        if (!netif_running(padapter->pnetdev)) {\r
@@ -141,11 +141,10 @@ s32 Hal_SetPowerTracking(PADAPTER padapter, u8 enable)
                RT_TRACE(_module_mp_, _drv_warning_, ("SetPowerTracking! Fail: not in MP mode!\n"));\r
                return _FAIL;\r
        }\r
                RT_TRACE(_module_mp_, _drv_warning_, ("SetPowerTracking! Fail: not in MP mode!\n"));\r
                return _FAIL;\r
        }\r
-\r
-       if (enable)\r
-               pdmpriv->TxPowerTrackControl = _TRUE;\r
+       if (enable) \r
+               pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _TRUE;   \r
        else\r
        else\r
-               pdmpriv->TxPowerTrackControl = _FALSE;\r
+               pDM_Odm->RFCalibrateInfo.TxPowerTrackControl= _FALSE;\r
 \r
        return _SUCCESS;\r
 }\r
 \r
        return _SUCCESS;\r
 }\r
@@ -153,18 +152,18 @@ s32 Hal_SetPowerTracking(PADAPTER padapter, u8 enable)
 void Hal_GetPowerTracking(PADAPTER padapter, u8 *enable)\r
 {\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);\r
 void Hal_GetPowerTracking(PADAPTER padapter, u8 *enable)\r
 {\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
+       PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
 \r
 \r
 \r
 \r
-       *enable = pdmpriv->TxPowerTrackControl;\r
+       *enable = pDM_Odm->RFCalibrateInfo.TxPowerTrackControl;\r
 }\r
 \r
 }\r
 \r
+\r
 static void Hal_disable_dm(PADAPTER padapter)\r
 {\r
        u8 v8;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);\r
 static void Hal_disable_dm(PADAPTER padapter)\r
 {\r
        u8 v8;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);\r
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
-\r
+       PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
 \r
        //3 1. disable firmware dynamic mechanism\r
        // disable Power Training, Rate Adaptive\r
 \r
        //3 1. disable firmware dynamic mechanism\r
        // disable Power Training, Rate Adaptive\r
@@ -173,14 +172,11 @@ static void Hal_disable_dm(PADAPTER padapter)
        rtw_write8(padapter, REG_BCN_CTRL, v8);\r
 \r
        //3 2. disable driver dynamic mechanism\r
        rtw_write8(padapter, REG_BCN_CTRL, v8);\r
 \r
        //3 2. disable driver dynamic mechanism\r
-       // disable Dynamic Initial Gain\r
-       // disable High Power\r
-       // disable Power Tracking\r
        Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);\r
 \r
        // enable APK, LCK and IQK but disable power tracking\r
        Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);\r
 \r
        // enable APK, LCK and IQK but disable power tracking\r
-       pdmpriv->TxPowerTrackControl = _FALSE;\r
-       Switch_DM_Func(padapter, DYNAMIC_RF_TX_PWR_TRACK , _TRUE);\r
+       pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _FALSE;\r
+       Switch_DM_Func(padapter, ODM_RF_CALIBRATION , _TRUE);\r
 }\r
 \r
 void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14)\r
 }\r
 \r
 void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14)\r
@@ -273,7 +269,9 @@ void Hal_MPT_CCKTxPowerAdjustbyIndex(PADAPTER pAdapter, BOOLEAN beven)
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
        PMPT_CONTEXT    pMptCtx = &pAdapter->mppriv.MptCtx;\r
 \r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
        PMPT_CONTEXT    pMptCtx = &pAdapter->mppriv.MptCtx;\r
 \r
-\r
+#if 1\r
+       return;\r
+#else\r
        if (!IS_92C_SERIAL(pHalData->VersionID))\r
                return;\r
 #if 0\r
        if (!IS_92C_SERIAL(pHalData->VersionID))\r
                return;\r
 #if 0\r
@@ -371,6 +369,7 @@ void Hal_MPT_CCKTxPowerAdjustbyIndex(PADAPTER pAdapter, BOOLEAN beven)
 \r
        PlatformAtomicExchange(&Adapter->IntrCCKRefCount, FALSE);\r
 #endif\r
 \r
        PlatformAtomicExchange(&Adapter->IntrCCKRefCount, FALSE);\r
 #endif\r
+#endif\r
 }\r
 /*---------------------------hal\rtl8192c\MPT_HelperFunc.c---------------------------*/\r
 \r
 }\r
 /*---------------------------hal\rtl8192c\MPT_HelperFunc.c---------------------------*/\r
 \r
@@ -391,6 +390,7 @@ void Hal_SetChannel(PADAPTER pAdapter)
        u8              eRFPath;\r
 \r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
        u8              eRFPath;\r
 \r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
+       PDM_ODM_T               pDM_Odm = &(pHalData->odmpriv);\r
        struct mp_priv  *pmp = &pAdapter->mppriv;\r
        u8              channel = pmp->channel;\r
        u8              bandwidth = pmp->bandwidth;\r
        struct mp_priv  *pmp = &pAdapter->mppriv;\r
        u8              channel = pmp->channel;\r
        u8              bandwidth = pmp->bandwidth;\r
@@ -400,22 +400,19 @@ void Hal_SetChannel(PADAPTER pAdapter)
        // set RF channel register\r
        for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++)\r
        {\r
        // set RF channel register\r
        for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++)\r
        {\r
-      if(IS_HARDWARE_TYPE_8192D(pAdapter))\r
-                       _write_rfreg(pAdapter, (RF_PATH)eRFPath, rRfChannel, 0xFF, channel);\r
-               else\r
-               _write_rfreg(pAdapter, eRFPath, rRfChannel, 0x3FF, channel);\r
+               _write_rfreg(pAdapter, eRFPath, rRfChannel, 0x3FF, channel);\r
        }\r
        Hal_mpt_SwitchRfSetting(pAdapter);\r
 \r
        SelectChannel(pAdapter, channel);\r
 \r
        }\r
        Hal_mpt_SwitchRfSetting(pAdapter);\r
 \r
        SelectChannel(pAdapter, channel);\r
 \r
-       if (pHalData->CurrentChannel == 14 && !pHalData->dmpriv.bCCKinCH14) {\r
-               pHalData->dmpriv.bCCKinCH14 = _TRUE;\r
-               Hal_MPT_CCKTxPowerAdjust(pAdapter, pHalData->dmpriv.bCCKinCH14);\r
+       if (pHalData->CurrentChannel == 14 && !pDM_Odm->RFCalibrateInfo.bCCKinCH14) {\r
+               pDM_Odm->RFCalibrateInfo.bCCKinCH14 = _TRUE;\r
+               Hal_MPT_CCKTxPowerAdjust(pAdapter, pDM_Odm->RFCalibrateInfo.bCCKinCH14);\r
        }\r
        }\r
-       else if (pHalData->CurrentChannel != 14 && pHalData->dmpriv.bCCKinCH14) {\r
-               pHalData->dmpriv.bCCKinCH14 = _FALSE;\r
-               Hal_MPT_CCKTxPowerAdjust(pAdapter, pHalData->dmpriv.bCCKinCH14);\r
+       else if (pHalData->CurrentChannel != 14 && pDM_Odm->RFCalibrateInfo.bCCKinCH14) {\r
+               pDM_Odm->RFCalibrateInfo.bCCKinCH14 = _FALSE;\r
+               Hal_MPT_CCKTxPowerAdjust(pAdapter, pDM_Odm->RFCalibrateInfo.bCCKinCH14);\r
        }\r
 \r
 #endif\r
        }\r
 \r
 #endif\r
@@ -669,8 +666,7 @@ void Hal_SetDataRate(PADAPTER pAdapter)
        \r
        DataRate=MptToMgntRate(pAdapter->mppriv.rateidx);\r
        \r
        \r
        DataRate=MptToMgntRate(pAdapter->mppriv.rateidx);\r
        \r
-               if(!IS_HARDWARE_TYPE_8723A(pAdapter))\r
-               Hal_mpt_SwitchRfSetting(pAdapter);\r
+               Hal_mpt_SwitchRfSetting(pAdapter);\r
                if (IS_CCK_RATE(DataRate))\r
                {\r
                        if (pMptCtx->MptRfPath == ODM_RF_PATH_A) // S1\r
                if (IS_CCK_RATE(DataRate))\r
                {\r
                        if (pMptCtx->MptRfPath == ODM_RF_PATH_A) // S1\r
@@ -900,7 +896,6 @@ void Hal_SetSingleToneTx(PADAPTER pAdapter, u8 bStart)
 {\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
        PMPT_CONTEXT            pMptCtx = &(pAdapter->mppriv.MptCtx);\r
 {\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
        PMPT_CONTEXT            pMptCtx = &(pAdapter->mppriv.MptCtx);\r
-       BOOLEAN         is92C = IS_92C_SERIAL(pHalData->VersionID);\r
        static u4Byte       reg58 = 0x0;\r
        static u4Byte       regRF0x0 = 0x0;\r
     static u4Byte       reg0xCB0 = 0x0;\r
        static u4Byte       reg58 = 0x0;\r
        static u4Byte       regRF0x0 = 0x0;\r
     static u4Byte       reg0xCB0 = 0x0;\r
@@ -1169,13 +1164,6 @@ void Hal_SetCCKContinuousTx(PADAPTER pAdapter, u8 bStart)
 \r
                write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);\r
                write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);\r
 \r
                write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);\r
                write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);\r
-#ifdef CONFIG_RTL8192C\r
-               // Patch for CCK 11M waveform\r
-               if (cckrate == MPT_RATE_1M)\r
-                       write_bbreg(pAdapter, 0xA71, BIT(6), bDisable);\r
-               else\r
-                       write_bbreg(pAdapter, 0xA71, BIT(6), bEnable);\r
-#endif\r
 \r
        }\r
        else {\r
 \r
        }\r
        else {\r
index 137270e00dad357586cc921d669312f19e4123de..d50f72435dcd9f4e6ee5c9ef9fdee6d5a16bf41e 100755 (executable)
@@ -498,10 +498,6 @@ s32 PHY_MACConfig8723B(PADAPTER Adapter)
 #endif//CONFIG_EMBEDDED_FWIMG\r
        }\r
 \r
 #endif//CONFIG_EMBEDDED_FWIMG\r
        }\r
 \r
-#ifdef CONFIG_GPIO_WAKEUP\r
-       rtw_clear_hostwakeupgpio(Adapter);\r
-#endif // CONFIG_GPIO_WAKEUP\r
-\r
        return rtStatus;\r
 }\r
 \r
        return rtStatus;\r
 }\r
 \r
@@ -573,41 +569,41 @@ phy_ConfigBBWithMpHeaderFile(
        IN      u1Byte                  ConfigType)\r
 {\r
        int i;\r
        IN      u1Byte                  ConfigType)\r
 {\r
        int i;\r
-       u32*    Rtl8192CPHY_REGArray_Table_MP;\r
+       u32*    Rtl8723BPHY_REGArray_Table_MP;\r
        u16     PHY_REGArrayMPLen;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
 \r
 \r
        PHY_REGArrayMPLen = Rtl8723B_PHY_REG_Array_MPLength;\r
        u16     PHY_REGArrayMPLen;\r
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
 \r
 \r
        PHY_REGArrayMPLen = Rtl8723B_PHY_REG_Array_MPLength;\r
-       Rtl8192CPHY_REGArray_Table_MP = (u32*)Rtl8723B_PHY_REG_Array_MP;\r
+       Rtl8723BPHY_REGArray_Table_MP = (u32*)Rtl8723B_PHY_REG_Array_MP;\r
 \r
        if(ConfigType == BaseBand_Config_PHY_REG)\r
        {\r
                for(i=0;i<PHY_REGArrayMPLen;i=i+2)\r
                {\r
 \r
        if(ConfigType == BaseBand_Config_PHY_REG)\r
        {\r
                for(i=0;i<PHY_REGArrayMPLen;i=i+2)\r
                {\r
-                       if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfe) {\r
+                       if (Rtl8723BPHY_REGArray_Table_MP[i] == 0xfe) {\r
                                #ifdef CONFIG_LONG_DELAY_ISSUE\r
                                rtw_msleep_os(50);\r
                                #else\r
                                rtw_mdelay_os(50);\r
                                #endif\r
                        }\r
                                #ifdef CONFIG_LONG_DELAY_ISSUE\r
                                rtw_msleep_os(50);\r
                                #else\r
                                rtw_mdelay_os(50);\r
                                #endif\r
                        }\r
-                       else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfd)\r
+                       else if (Rtl8723BPHY_REGArray_Table_MP[i] == 0xfd)\r
                                rtw_mdelay_os(5);\r
                                rtw_mdelay_os(5);\r
-                       else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfc)\r
+                       else if (Rtl8723BPHY_REGArray_Table_MP[i] == 0xfc)\r
                                rtw_mdelay_os(1);\r
                                rtw_mdelay_os(1);\r
-                       else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfb) {\r
+                       else if (Rtl8723BPHY_REGArray_Table_MP[i] == 0xfb) {\r
                                #ifdef CONFIG_LONG_DELAY_ISSUE\r
                                rtw_msleep_os(50);\r
                                #else\r
                                rtw_mdelay_os(50);\r
                                #endif\r
                        }\r
                                #ifdef CONFIG_LONG_DELAY_ISSUE\r
                                rtw_msleep_os(50);\r
                                #else\r
                                rtw_mdelay_os(50);\r
                                #endif\r
                        }\r
-                       else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfa)\r
+                       else if (Rtl8723BPHY_REGArray_Table_MP[i] == 0xfa)\r
                                rtw_mdelay_os(5);\r
                                rtw_mdelay_os(5);\r
-                       else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xf9)\r
+                       else if (Rtl8723BPHY_REGArray_Table_MP[i] == 0xf9)\r
                                rtw_mdelay_os(1);\r
                                rtw_mdelay_os(1);\r
-                       PHY_SetBBReg(Adapter, Rtl8192CPHY_REGArray_Table_MP[i], bMaskDWord, Rtl8192CPHY_REGArray_Table_MP[i+1]);\r
+                       PHY_SetBBReg(Adapter, Rtl8723BPHY_REGArray_Table_MP[i], bMaskDWord, Rtl8723BPHY_REGArray_Table_MP[i+1]);\r
 \r
                        // Add 1us delay between BB/RF register setting.\r
                        rtw_mdelay_os(1);\r
 \r
                        // Add 1us delay between BB/RF register setting.\r
                        rtw_mdelay_os(1);\r
@@ -625,28 +621,6 @@ phy_ConfigBBWithMpHeaderFile(
 \r
 #endif // #if (MP_DRIVER == 1)\r
 \r
 \r
 #endif // #if (MP_DRIVER == 1)\r
 \r
-#if 0 //YJ,test,130321\r
-static VOID\r
-phy_BB8192C_Config_1T(\r
-       IN PADAPTER Adapter\r
-       )\r
-{\r
-       //for path - B\r
-       PHY_SetBBReg(Adapter, rFPGA0_TxInfo, 0x3, 0x2);\r
-       PHY_SetBBReg(Adapter, rFPGA1_TxInfo, 0x300033, 0x200022);\r
-\r
-       // 20100519 Joseph: Add for 1T2R config. Suggested by Kevin, Jenyu and Yunan.\r
-       PHY_SetBBReg(Adapter, rCCK0_AFESetting, bMaskByte3, 0x45);\r
-       PHY_SetBBReg(Adapter, rOFDM0_TRxPathEnable, bMaskByte0, 0x23);\r
-       PHY_SetBBReg(Adapter, rOFDM0_AGCParameter1, 0x30, 0x1); // B path first AGC\r
-\r
-       PHY_SetBBReg(Adapter, 0xe74, 0x0c000000, 0x2);\r
-       PHY_SetBBReg(Adapter, 0xe78, 0x0c000000, 0x2);\r
-       PHY_SetBBReg(Adapter, 0xe7c, 0x0c000000, 0x2);\r
-       PHY_SetBBReg(Adapter, 0xe80, 0x0c000000, 0x2);\r
-       PHY_SetBBReg(Adapter, 0xe88, 0x0c000000, 0x2);\r
-}\r
-#endif\r
 \r
 static int\r
 phy_BB8723b_Config_ParaFile(\r
 \r
 static int\r
 phy_BB8723b_Config_ParaFile(\r
@@ -798,7 +772,7 @@ PHY_BBConfig8723B(
        RegVal = rtw_read16(Adapter, REG_SYS_FUNC_EN);\r
        rtw_write16(Adapter, REG_SYS_FUNC_EN, (u16)(RegVal|BIT13|BIT0|BIT1));\r
 \r
        RegVal = rtw_read16(Adapter, REG_SYS_FUNC_EN);\r
        rtw_write16(Adapter, REG_SYS_FUNC_EN, (u16)(RegVal|BIT13|BIT0|BIT1));\r
 \r
-       // switch ant to BT\r
+       /* switch ant to BT */\r
 #ifdef CONFIG_USB_HCI\r
        rtw_write32(Adapter, 0x948, 0x0);       // USB use Antenna S0\r
 #else\r
 #ifdef CONFIG_USB_HCI\r
        rtw_write32(Adapter, 0x948, 0x0);       // USB use Antenna S0\r
 #else\r
index eedc8c20b4f940d038dfc25988442d087ed346f8..c7fa88db26fddbaaa0cc39141f7a6c11cc260895 100755 (executable)
 
 #include <rtl8723b_hal.h>
 
 
 #include <rtl8723b_hal.h>
 
-static void process_rssi(_adapter *padapter,union recv_frame *prframe)
-{
-       u32     last_rssi, tmp_val;
-       struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
-#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
-       struct signal_stat * signal_stat = &padapter->recvpriv.signal_strength_data;
-#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
-
-       //DBG_8192C("process_rssi=> pattrib->rssil(%d) signal_strength(%d)\n ",pattrib->RecvSignalPower,pattrib->signal_strength);
-       //if(pRfd->Status.bPacketToSelf || pRfd->Status.bPacketBeacon)
-       {
-
-       #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
-               if(signal_stat->update_req) {
-                       signal_stat->total_num = 0;
-                       signal_stat->total_val = 0;
-                       signal_stat->update_req = 0;
-               }
-
-               signal_stat->total_num++;
-               signal_stat->total_val  += pattrib->phy_info.SignalStrength;
-               signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
-       #else //CONFIG_NEW_SIGNAL_STAT_PROCESS
-
-               //Adapter->RxStats.RssiCalculateCnt++;  //For antenna Test
-               if(padapter->recvpriv.signal_strength_data.total_num++ >= PHY_RSSI_SLID_WIN_MAX)
-               {
-                       padapter->recvpriv.signal_strength_data.total_num = PHY_RSSI_SLID_WIN_MAX;
-                       last_rssi = padapter->recvpriv.signal_strength_data.elements[padapter->recvpriv.signal_strength_data.index];
-                       padapter->recvpriv.signal_strength_data.total_val -= last_rssi;
-               }
-               padapter->recvpriv.signal_strength_data.total_val  +=pattrib->phy_info.SignalStrength;
-
-               padapter->recvpriv.signal_strength_data.elements[padapter->recvpriv.signal_strength_data.index++] = pattrib->phy_info.SignalStrength;
-               if(padapter->recvpriv.signal_strength_data.index >= PHY_RSSI_SLID_WIN_MAX)
-                       padapter->recvpriv.signal_strength_data.index = 0;
-
-
-               tmp_val = padapter->recvpriv.signal_strength_data.total_val/padapter->recvpriv.signal_strength_data.total_num;
-
-               if(padapter->recvpriv.is_signal_dbg) {
-                       padapter->recvpriv.signal_strength= padapter->recvpriv.signal_strength_dbg;
-                       padapter->recvpriv.rssi=(s8)translate_percentage_to_dbm(padapter->recvpriv.signal_strength_dbg);
-               } else {
-                       padapter->recvpriv.signal_strength= tmp_val;
-                       padapter->recvpriv.rssi=(s8)translate_percentage_to_dbm(tmp_val);
-               }
-
-               RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("UI RSSI = %d, ui_rssi.TotalVal = %d, ui_rssi.TotalNum = %d\n", tmp_val, padapter->recvpriv.signal_strength_data.total_val,padapter->recvpriv.signal_strength_data.total_num));
-       #endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
-       }
-
-}// Process_UI_RSSI_8192C
-
-static void process_link_qual(_adapter *padapter,union recv_frame *prframe)
-{
-       u32     last_evm=0, tmpVal;
-       struct rx_pkt_attrib *pattrib;
-#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
-       struct signal_stat * signal_stat;
-#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
-
-       if(prframe == NULL || padapter==NULL){
-               return;
-       }
-
-       pattrib = &prframe->u.hdr.attrib;
-#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
-       signal_stat = &padapter->recvpriv.signal_qual_data;
-#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
-
-       //DBG_8192C("process_link_qual=> pattrib->signal_qual(%d)\n ",pattrib->signal_qual);
-
-#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
-       if(signal_stat->update_req) {
-               signal_stat->total_num = 0;
-               signal_stat->total_val = 0;
-               signal_stat->update_req = 0;
-       }
-
-       signal_stat->total_num++;
-       signal_stat->total_val  += pattrib->phy_info.SignalQuality;
-       signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
-
-#else //CONFIG_NEW_SIGNAL_STAT_PROCESS
-       if(pattrib->phy_info.SignalQuality != 0)
-       {
-                       //
-                       // 1. Record the general EVM to the sliding window.
-                       //
-                       if(padapter->recvpriv.signal_qual_data.total_num++ >= PHY_LINKQUALITY_SLID_WIN_MAX)
-                       {
-                               padapter->recvpriv.signal_qual_data.total_num = PHY_LINKQUALITY_SLID_WIN_MAX;
-                               last_evm = padapter->recvpriv.signal_qual_data.elements[padapter->recvpriv.signal_qual_data.index];
-                               padapter->recvpriv.signal_qual_data.total_val -= last_evm;
-                       }
-                       padapter->recvpriv.signal_qual_data.total_val += pattrib->phy_info.SignalQuality;
-
-                       padapter->recvpriv.signal_qual_data.elements[padapter->recvpriv.signal_qual_data.index++] = pattrib->phy_info.SignalQuality;
-                       if(padapter->recvpriv.signal_qual_data.index >= PHY_LINKQUALITY_SLID_WIN_MAX)
-                               padapter->recvpriv.signal_qual_data.index = 0;
-
-                       RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("Total SQ=%d  pattrib->signal_qual= %d\n", padapter->recvpriv.signal_qual_data.total_val, pattrib->phy_info.SignalQuality));
-
-                       // <1> Showed on UI for user, in percentage.
-                       tmpVal = padapter->recvpriv.signal_qual_data.total_val/padapter->recvpriv.signal_qual_data.total_num;
-                       padapter->recvpriv.signal_qual=(u8)tmpVal;
-
-       }
-       else
-       {
-               RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" pattrib->signal_qual =%d\n", pattrib->phy_info.SignalQuality));
-       }
-#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
-
-}// Process_UiLinkQuality8192S
-
-static void process_phy_info(_adapter *padapter, void *prframe)
-{
-       union recv_frame *precvframe = (union recv_frame *)prframe;
-       //
-       // Check RSSI
-       //
-       process_rssi(padapter, precvframe);
-       //
-       // Check PWDB.
-       //
-       //process_PWDB(padapter, precvframe);
-
-       //UpdateRxSignalStatistics8192C(Adapter, pRfd);
-       //
-       // Check EVM
-       //
-       process_link_qual(padapter,  precvframe);
-       #ifdef DBG_RX_SIGNAL_DISPLAY_RAW_DATA
-       rtw_store_phy_info( padapter,prframe);
-       #endif
-
-}
-
-/*
- * Notice:
- *     Before calling this function,
- *     precvframe->u.hdr.rx_data should be ready!
- */
-void rtl8723b_query_rx_phy_status(union recv_frame *precvframe, struct phy_stat *pphy_status)
-{
-       PADAPTER padapter = precvframe->u.hdr.adapter;
-       struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
-       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
-       PODM_PHY_INFO_T pPHYInfo  = (PODM_PHY_INFO_T)(&pattrib->phy_info);
-
-       u8 *wlanhdr;
-       ODM_PACKET_INFO_T pkt_info;
-       u8 *sa = NULL;
-       //_irqL         irqL;
-       struct sta_priv *pstapriv;
-       struct sta_info *psta;
-
-
-       pkt_info.bPacketMatchBSSID =_FALSE;
-       pkt_info.bPacketToSelf = _FALSE;
-       pkt_info.bPacketBeacon = _FALSE;
-
-       wlanhdr = get_recvframe_data(precvframe);
-
-       pkt_info.bPacketMatchBSSID = ((!IsFrameTypeCtrl(wlanhdr)) &&
-               !pattrib->icv_err && !pattrib->crc_err &&
-               _rtw_memcmp(get_hdr_bssid(wlanhdr), get_bssid(&padapter->mlmepriv), ETH_ALEN));
-
-       pkt_info.bToSelf = ((!pattrib->icv_err) && (!pattrib->crc_err)) && (_rtw_memcmp(get_ra(wlanhdr), myid(&padapter->eeprompriv), ETH_ALEN));
-
-       pkt_info.bPacketToSelf = pkt_info.bPacketMatchBSSID && (_rtw_memcmp(get_ra(wlanhdr), myid(&padapter->eeprompriv), ETH_ALEN));
-
-       pkt_info.bPacketBeacon = pkt_info.bPacketMatchBSSID && (GetFrameSubType(wlanhdr) == WIFI_BEACON);
-/*
-       if(pkt_info.bPacketBeacon){
-               if(check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE) == _TRUE){
-                       sa = padapter->mlmepriv.cur_network.network.MacAddress;
-               #if 0
-                       {
-                               DBG_871X("==> rx beacon from AP[%02x:%02x:%02x:%02x:%02x:%02x]\n",
-                                       sa[0],sa[1],sa[2],sa[3],sa[4],sa[5]);
-                       }
-               #endif
-               }
-               //to do Ad-hoc
-       }
-       else{
-               sa = get_sa(wlanhdr);
-       }
-*/
-       sa = get_ta(wlanhdr);
-
-       pkt_info.StationID = 0xFF;
-
-       pstapriv = &padapter->stapriv;
-       psta = rtw_get_stainfo(pstapriv, sa);
-       if (psta)
-               pkt_info.StationID = psta->mac_id;
-       pkt_info.DataRate = pattrib->data_rate;
-
-       ODM_PhyStatusQuery(&pHalData->odmpriv, pPHYInfo, (u8*)pphy_status, &pkt_info);
-       if(psta)
-               psta->rssi = pattrib->phy_info.RecvSignalPower;
-
-       precvframe->u.hdr.psta = NULL;
-       if (pkt_info.bPacketMatchBSSID &&
-               (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE)) {
-               if (psta) {
-                       precvframe->u.hdr.psta = psta;
-                       process_phy_info(padapter, precvframe);
-               }
-       } else if (pkt_info.bPacketToSelf || pkt_info.bPacketBeacon) {
-               if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)
-                       if (psta)
-                               precvframe->u.hdr.psta = psta;
-               process_phy_info(padapter, precvframe);
-       }
-}
-
 void rtl8723b_query_rx_desc_status(union recv_frame *precvframe, u8 *pdesc)
 {
        struct rx_pkt_attrib *pattrib;
 void rtl8723b_query_rx_desc_status(union recv_frame *precvframe, u8 *pdesc)
 {
        struct rx_pkt_attrib *pattrib;
@@ -276,6 +55,15 @@ void rtl8723b_query_rx_desc_status(union recv_frame *precvframe, u8 *pdesc)
 
                // Offset 12
                pattrib->data_rate = (u8)GET_RX_STATUS_DESC_RX_RATE_8723B(pdesc);
 
                // Offset 12
                pattrib->data_rate = (u8)GET_RX_STATUS_DESC_RX_RATE_8723B(pdesc);
+
+               /* Offset 16 */
+               pattrib->sgi = (u8)GET_RX_STATUS_DESC_SPLCP_8723B(pdesc);
+               pattrib->ldpc = (u8)GET_RX_STATUS_DESC_LDPC_8723B(pdesc);
+               pattrib->stbc = (u8)GET_RX_STATUS_DESC_STBC_8723B(pdesc);
+               pattrib->bw = (u8)GET_RX_STATUS_DESC_BW_8723B(pdesc);
+
+               /* Offset 20 */
+               /* pattrib->tsfl=(u8)GET_RX_STATUS_DESC_TSFL_8723B(pdesc); */
        }
 }
 
        }
 }
 
index 2c1ee809da3689092e5d654bc99b0919cfa23371..8843c52e3f1445e4991bfdc6b5a4efad3d321fca 100755 (executable)
@@ -56,7 +56,7 @@ void rtl8723b_sreset_xmit_status_check(_adapter *padapter)
                        else{\r
                                diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_complete_time);\r
                                if (diff_time > 4000) {\r
                        else{\r
                                diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_complete_time);\r
                                if (diff_time > 4000) {\r
-                                       u32 ability;\r
+                                       u32 ability = 0;\r
 \r
                                        //padapter->Wifi_Error_Status = WIFI_TX_HANG;\r
                                        rtw_hal_get_hwreg(padapter, HW_VAR_DM_FLAG, (u8*)&ability);\r
 \r
                                        //padapter->Wifi_Error_Status = WIFI_TX_HANG;\r
                                        rtw_hal_get_hwreg(padapter, HW_VAR_DM_FLAG, (u8*)&ability);\r
index c0e893db6792b8ce8bbb739da76f56ea87d68475..518f66ce1028ce4c0defded8f7c1758f59cb6e04 100755 (executable)
 
 int    rtl8723bu_init_recv_priv(_adapter *padapter)
 {
 
 int    rtl8723bu_init_recv_priv(_adapter *padapter)
 {
-       struct recv_priv        *precvpriv = &padapter->recvpriv;
-       int     i, res = _SUCCESS;
-       struct recv_buf *precvbuf;
-
-#ifdef CONFIG_RECV_THREAD_MODE 
-       _rtw_init_sema(&precvpriv->recv_sema, 0);//will be removed
-       _rtw_init_sema(&precvpriv->terminate_recvthread_sema, 0);//will be removed
-#endif
-
-#ifdef PLATFORM_LINUX
-       tasklet_init(&precvpriv->recv_tasklet,
-            (void(*)(unsigned long))usb_recv_tasklet,
-            (unsigned long)padapter);
-#endif
-
-#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
-#ifdef PLATFORM_LINUX
-       precvpriv->int_in_urb = usb_alloc_urb(0, GFP_KERNEL);
-       if(precvpriv->int_in_urb == NULL){
-               DBG_8192C("alloc_urb for interrupt in endpoint fail !!!!\n");
-       }
-#endif
-       precvpriv->int_in_buf = rtw_zmalloc(USB_INTR_CONTENT_LENGTH);
-       if(precvpriv->int_in_buf == NULL){
-               DBG_8192C("alloc_mem for interrupt in endpoint fail !!!!\n");
-       }
-#endif
-
-       //init recv_buf
-       _rtw_init_queue(&precvpriv->free_recv_buf_queue);
-
-       _rtw_init_queue(&precvpriv->recv_buf_pending_queue);
-
-       precvpriv->pallocated_recv_buf = rtw_zmalloc(NR_RECVBUFF *sizeof(struct recv_buf) + 4);
-       if(precvpriv->pallocated_recv_buf==NULL){
-               res= _FAIL;
-               RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("alloc recv_buf fail!\n"));
-               goto exit;
-       }
-       _rtw_memset(precvpriv->pallocated_recv_buf, 0, NR_RECVBUFF *sizeof(struct recv_buf) + 4);
-
-       precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4);
-       //precvpriv->precv_buf = precvpriv->pallocated_recv_buf + 4 -
-       //                                              ((uint) (precvpriv->pallocated_recv_buf) &(4-1));
-
-
-       precvbuf = (struct recv_buf*)precvpriv->precv_buf;
-
-       for(i=0; i < NR_RECVBUFF ; i++)
-       {
-               _rtw_init_listhead(&precvbuf->list);
-
-               _rtw_spinlock_init(&precvbuf->recvbuf_lock);
-
-               precvbuf->alloc_sz = MAX_RECVBUF_SZ;
-
-               res = rtw_os_recvbuf_resource_alloc(padapter, precvbuf);
-               if(res==_FAIL)
-                       break;
-
-               precvbuf->ref_cnt = 0;
-               precvbuf->adapter =padapter;
-
-
-               //rtw_list_insert_tail(&precvbuf->list, &(precvpriv->free_recv_buf_queue.queue));
-
-               precvbuf++;
-
-       }
-
-       precvpriv->free_recv_buf_queue_cnt = NR_RECVBUFF;
-
-#ifdef PLATFORM_LINUX
-
-       skb_queue_head_init(&precvpriv->rx_skb_queue);
-
-#ifdef CONFIG_PREALLOC_RECV_SKB
-       {
-               int i;
-               SIZE_PTR tmpaddr=0;
-               SIZE_PTR alignment=0;
-               struct sk_buff *pskb=NULL;
-
-               skb_queue_head_init(&precvpriv->free_recv_skb_queue);
-
-               for(i=0; i<NR_PREALLOC_RECV_SKB; i++)
-               {
-
-#ifdef CONFIG_PREALLOC_RX_SKB_BUFFER
-                       pskb = rtw_alloc_skb_premem();
-#else
-                       pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
-#endif
-
-                       if(pskb)
-                       {
-                               pskb->dev = padapter->pnetdev;
-
-#ifndef CONFIG_PREALLOC_RX_SKB_BUFFER
-                               tmpaddr = (SIZE_PTR)pskb->data;
-                               alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
-                               skb_reserve(pskb, (RECVBUFF_ALIGN_SZ - alignment));
-#endif //!
-
-                               skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
-                       }
-
-                       pskb=NULL;
-
-               }
-       }
-#endif
-
-#endif
-
-exit:
-
-       return res;
-
+       return usb_init_recv_priv(padapter, USB_INTR_CONTENT_LENGTH);
 }
 
 }
 
-void rtl8723bu_free_recv_priv (_adapter *padapter)
+void rtl8723bu_free_recv_priv(_adapter *padapter)
 {
 {
-       int     i;
-       struct recv_buf *precvbuf;
-       struct recv_priv        *precvpriv = &padapter->recvpriv;
-
-       precvbuf = (struct recv_buf *)precvpriv->precv_buf;
-
-       for(i=0; i < NR_RECVBUFF ; i++)
-       {
-               rtw_os_recvbuf_resource_free(padapter, precvbuf);
-               precvbuf++;
-       }
-
-       if(precvpriv->pallocated_recv_buf)
-               rtw_mfree(precvpriv->pallocated_recv_buf, NR_RECVBUFF *sizeof(struct recv_buf) + 4);
-
-#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
-#ifdef PLATFORM_LINUX
-       if(precvpriv->int_in_urb)
-       {
-               usb_free_urb(precvpriv->int_in_urb);
-       }
-#endif
-       if(precvpriv->int_in_buf)
-               rtw_mfree(precvpriv->int_in_buf, USB_INTR_CONTENT_LENGTH);
-#endif
-
-#ifdef PLATFORM_LINUX
-
-       if (skb_queue_len(&precvpriv->rx_skb_queue)) {
-               DBG_8192C(KERN_WARNING "rx_skb_queue not empty\n");
-       }
-
-       rtw_skb_queue_purge(&precvpriv->rx_skb_queue);
-
-#ifdef CONFIG_PREALLOC_RECV_SKB
-
-       if (skb_queue_len(&precvpriv->free_recv_skb_queue)) {
-               DBG_8192C(KERN_WARNING "free_recv_skb_queue not empty, %d\n", skb_queue_len(&precvpriv->free_recv_skb_queue));
-       }
-
-#ifdef CONFIG_PREALLOC_RX_SKB_BUFFER
-       {
-               int i=0;
-               struct sk_buff *skb;
-
-               while ((skb = skb_dequeue(&precvpriv->free_recv_skb_queue)) != NULL)
-               {
-                       if(i<NR_PREALLOC_RECV_SKB)
-                               rtw_free_skb_premem(skb);
-                       else                            
-                               _rtw_skb_free(skb);
-
-                       i++;
-               }       
-       }       
-#else 
-       rtw_skb_queue_purge(&precvpriv->free_recv_skb_queue);
-#endif //CONFIG_PREALLOC_RX_SKB_BUFFER
-
-#endif
-
-#endif
+       usb_free_recv_priv(padapter, USB_INTR_CONTENT_LENGTH);
 }
 
 }
 
index 0540a38f010962d5650015816cbfa6ccb1f2c35c..e811070f2b778937197e3a0f0e24776fd3695d04 100755 (executable)
@@ -182,7 +182,6 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz, u8 bag
        struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;               
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
        struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;               
        struct pkt_attrib       *pattrib = &pxmitframe->attrib;
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
 
        struct ht_priv          *phtpriv = &pmlmepriv->htpriv;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
 
        struct ht_priv          *phtpriv = &pmlmepriv->htpriv;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
@@ -922,7 +921,7 @@ s32 rtl8723bu_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt)
        ptxdesc->txdw3 |= cpu_to_le32((8 <<28)); //set bit3 to 1. Suugested by TimChen. 2009.12.29.
        
 
        ptxdesc->txdw3 |= cpu_to_le32((8 <<28)); //set bit3 to 1. Suugested by TimChen. 2009.12.29.
        
 
-       rtl8192cu_cal_txdesc_chksum(ptxdesc);
+       rtl8723b_cal_txdesc_chksum(ptxdesc);
        // ----- end of fill tx desc -----
 
        //
        // ----- end of fill tx desc -----
 
        //
@@ -940,7 +939,7 @@ s32 rtl8723bu_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt)
        pipe = usb_sndbulkpipe(pdvobj->pusbdev, pHalData->Queue2EPNum[(u8)MGT_QUEUE_INX]&0x0f);
        
        usb_fill_bulk_urb(urb, pdvobj->pusbdev, pipe,
        pipe = usb_sndbulkpipe(pdvobj->pusbdev, pHalData->Queue2EPNum[(u8)MGT_QUEUE_INX]&0x0f);
        
        usb_fill_bulk_urb(urb, pdvobj->pusbdev, pipe,
-                         pxmit_skb->data, pxmit_skb->len, rtl8192cu_hostap_mgnt_xmit_cb, pxmit_skb);
+                         pxmit_skb->data, pxmit_skb->len, rtl8723bu_hostap_mgnt_xmit_cb, pxmit_skb);
        
        urb->transfer_flags |= URB_ZERO_PACKET;
        usb_anchor_urb(urb, &phostapdpriv->anchored);
        
        urb->transfer_flags |= URB_ZERO_PACKET;
        usb_anchor_urb(urb, &phostapdpriv->anchored);
index a837014d5b00b5deabbb724500bd1f5eeb212bb2..3c15ee36b0b9684f7b612f4e5e53dc9dc0b7ebbd 100755 (executable)
@@ -129,10 +129,10 @@ void rtl8723bu_interface_configure(_adapter *padapter)
 
 #ifdef CONFIG_USB_RX_AGGREGATION
        pHalData->UsbRxAggMode          = USB_RX_AGG_USB;
 
 #ifdef CONFIG_USB_RX_AGGREGATION
        pHalData->UsbRxAggMode          = USB_RX_AGG_USB;
-       pHalData->UsbRxAggBlockCount    = 0x5; // unit: 4KB, for USB mode
-       pHalData->UsbRxAggBlockTimeout  = 0x20; // unit: 32us, for USB mode
-       pHalData->UsbRxAggPageCount     = 0xF; // uint: 1KB, for DMA mode
-       pHalData->UsbRxAggPageTimeout   = 0x20; // unit: 32us, for DMA mode
+       pHalData->UsbRxAggBlockCount    = 0x5; /* unit: 4KB, for USB mode */
+       pHalData->UsbRxAggBlockTimeout  = 0x20; /* unit: 32us, for USB mode */
+       pHalData->UsbRxAggPageCount     = 0xF; /* uint: 1KB, for DMA mode */
+       pHalData->UsbRxAggPageTimeout   = 0x20; /* unit: 32us, for DMA mode */
 #endif
 
        HalUsbSetQueuePipeMapping8723BUsb(padapter,
 #endif
 
        HalUsbSetQueuePipeMapping8723BUsb(padapter,
@@ -140,16 +140,79 @@ void rtl8723bu_interface_configure(_adapter *padapter)
 
 }
 
 
 }
 
-static u8 _InitPowerOn_8723BU(PADAPTER padapter)
+#ifdef CONFIG_GPIO_WAKEUP
+//we set it high under init and fw will
+//give us Low Pulse when host wake up
+void HostWakeUpGpioClear(PADAPTER Adapter)
+{
+       u32     value32;
+
+       value32 = rtw_read32(Adapter, REG_GPIO_PIN_CTRL_2);
+
+       //set GPIO 12 1
+       value32 |= BIT(12);//4+8
+       //GPIO 12 out put
+       value32 |= BIT(20);//4+16
+
+       rtw_write32(Adapter, REG_GPIO_PIN_CTRL_2, value32);
+} //HostWakeUpGpioClear
+
+void HalSetOutPutGPIO(PADAPTER padapter, u8 index, u8 OutPutValue)
+{
+       if ( index <= 7 ) {
+               /* config GPIO mode */
+               rtw_write8(padapter, REG_GPIO_PIN_CTRL + 3, rtw_read8(padapter, REG_GPIO_PIN_CTRL + 3) & ~BIT(index) );
+
+               /* config GPIO Sel */
+               /* 0: input */
+               /* 1: output */
+               rtw_write8(padapter, REG_GPIO_PIN_CTRL + 2, rtw_read8(padapter, REG_GPIO_PIN_CTRL + 2) | BIT(index));
+
+               /* set output value */
+               if ( OutPutValue ) {
+                       rtw_write8(padapter, REG_GPIO_PIN_CTRL + 1, rtw_read8(padapter, REG_GPIO_PIN_CTRL + 1) | BIT(index));
+               } else {
+                       rtw_write8(padapter, REG_GPIO_PIN_CTRL + 1, rtw_read8(padapter, REG_GPIO_PIN_CTRL + 1) & ~BIT(index));
+               }
+       } else {
+               /* 88C Series: */
+               /* index: 11~8 transform to 3~0 */
+               /* 8723 Series: */
+               /* index: 12~8 transform to 4~0 */  
+               index -= 8;
+
+               /* config GPIO mode */
+               rtw_write8(padapter, REG_GPIO_PIN_CTRL_2 + 3, rtw_read8(padapter, REG_GPIO_PIN_CTRL_2 + 3) & ~BIT(index) );
+
+               /* config GPIO Sel */
+               /* 0: input */
+               /* 1: output */
+               rtw_write8(padapter, REG_GPIO_PIN_CTRL_2 + 2, rtw_read8(padapter, REG_GPIO_PIN_CTRL_2 + 2) | BIT(index));
+
+               /* set output value */
+               if ( OutPutValue ) {
+                       rtw_write8(padapter, REG_GPIO_PIN_CTRL_2 + 1, rtw_read8(padapter, REG_GPIO_PIN_CTRL_2 + 1) | BIT(index));
+               } else {
+                       rtw_write8(padapter, REG_GPIO_PIN_CTRL_2 + 1, rtw_read8(padapter, REG_GPIO_PIN_CTRL_2 + 1) & ~BIT(index));
+               }
+       }
+}
+#endif
+
+static u32 _InitPowerOn_8723BU(PADAPTER padapter)
 {
        u8              status = _SUCCESS;
        u16                     value16=0;
        u8                      value8 = 0;
        u32 value32;
 
 {
        u8              status = _SUCCESS;
        u16                     value16=0;
        u8                      value8 = 0;
        u32 value32;
 
+       rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &value8);
+       if (value8 == _TRUE)
+               return _SUCCESS;
+
        // HW Power on sequence
        if(!HalPwrSeqCmdParsing(padapter, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, rtl8723B_card_enable_flow ))
        // HW Power on sequence
        if(!HalPwrSeqCmdParsing(padapter, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, rtl8723B_card_enable_flow ))
-                               return _FAIL;
+               return _FAIL;
 
        // Enable MAC DMA/WMAC/SCHEDULE/SEC block
        // Set CR bit10 to enable 32k calibration. Suggested by SD1 Gimmy. Added by tynli. 2011.08.31.
 
        // Enable MAC DMA/WMAC/SCHEDULE/SEC block
        // Set CR bit10 to enable 32k calibration. Suggested by SD1 Gimmy. Added by tynli. 2011.08.31.
@@ -159,6 +222,9 @@ static u8 _InitPowerOn_8723BU(PADAPTER padapter)
                                | PROTOCOL_EN | SCHEDULE_EN | ENSEC | CALTMR_EN);
        rtw_write16(padapter, REG_CR_8723B, value16);
 
                                | PROTOCOL_EN | SCHEDULE_EN | ENSEC | CALTMR_EN);
        rtw_write16(padapter, REG_CR_8723B, value16);
 
+       value8 = _TRUE;
+       rtw_hal_set_hwreg(padapter, HW_VAR_APFM_ON_MAC, &value8);
+
 #ifdef CONFIG_BT_COEXIST
        rtw_btcoex_PowerOnSetting(padapter);
 
 #ifdef CONFIG_BT_COEXIST
        rtw_btcoex_PowerOnSetting(padapter);
 
@@ -183,10 +249,6 @@ static u8 _InitPowerOn_8723BU(PADAPTER padapter)
        //DBG_8192C("%s: REG_PAD_CTRL1(0x%x)=0x%02X\n", __FUNCTION__, REG_PAD_CTRL1_8723B, rtw_read8(padapter, REG_PAD_CTRL1_8723B));
 #endif // CONFIG_BT_COEXIST
 
        //DBG_8192C("%s: REG_PAD_CTRL1(0x%x)=0x%02X\n", __FUNCTION__, REG_PAD_CTRL1_8723B, rtw_read8(padapter, REG_PAD_CTRL1_8723B));
 #endif // CONFIG_BT_COEXIST
 
-#ifdef CONFIG_GPIO_WAKEUP
-       rtw_clear_hostwakeupgpio(padapter);
-#endif // CONFIG_GPIO_WAKEUP
-
        return status;
 }
 
        return status;
 }
 
@@ -795,7 +857,7 @@ static void usb_AggSettingRxUpdate(PADAPTER padapter)
                        agg_size = RX_DMA_BOUNDARY_8723B >> 1;
                if ((agg_size + 2048) > MAX_RECVBUF_SZ)
                        agg_size = MAX_RECVBUF_SZ - 2048;
                        agg_size = RX_DMA_BOUNDARY_8723B >> 1;
                if ((agg_size + 2048) > MAX_RECVBUF_SZ)
                        agg_size = MAX_RECVBUF_SZ - 2048;
-               agg_size >>= 10; // unit: 1K
+               agg_size >>= 10; /* unit: 1K */
                if (agg_size > 0xF)
                        agg_size = 0xF;
 
                if (agg_size > 0xF)
                        agg_size = 0xF;
 
@@ -804,7 +866,7 @@ static void usb_AggSettingRxUpdate(PADAPTER padapter)
                aggrx |= agg_size;
                aggrx |= (pHalData->UsbRxAggPageTimeout << 8);
                DBG_8192C("%s: RX Agg-DMA mode, size=%dKB, timeout=%dus\n",
                aggrx |= agg_size;
                aggrx |= (pHalData->UsbRxAggPageTimeout << 8);
                DBG_8192C("%s: RX Agg-DMA mode, size=%dKB, timeout=%dus\n",
-                       __FUNCTION__, agg_size, pHalData->UsbRxAggPageTimeout*32);
+                       __func__, agg_size, pHalData->UsbRxAggPageTimeout*32);
                break;
 
        case USB_RX_AGG_USB:
                break;
 
        case USB_RX_AGG_USB:
@@ -812,7 +874,7 @@ static void usb_AggSettingRxUpdate(PADAPTER padapter)
                agg_size = pHalData->UsbRxAggBlockCount << 12;
                if ((agg_size + 2048) > MAX_RECVBUF_SZ)
                        agg_size = MAX_RECVBUF_SZ - 2048;
                agg_size = pHalData->UsbRxAggBlockCount << 12;
                if ((agg_size + 2048) > MAX_RECVBUF_SZ)
                        agg_size = MAX_RECVBUF_SZ - 2048;
-               agg_size >>= 12; // unit: 4K
+               agg_size >>= 12; /* unit: 4K */
                if (agg_size > 0xF)
                        agg_size = 0xF;
 
                if (agg_size > 0xF)
                        agg_size = 0xF;
 
@@ -821,7 +883,7 @@ static void usb_AggSettingRxUpdate(PADAPTER padapter)
                aggrx |= agg_size;
                aggrx |= (pHalData->UsbRxAggBlockTimeout << 8);
                DBG_8192C("%s: RX Agg-USB mode, size=%dKB, timeout=%dus\n",
                aggrx |= agg_size;
                aggrx |= (pHalData->UsbRxAggBlockTimeout << 8);
                DBG_8192C("%s: RX Agg-USB mode, size=%dKB, timeout=%dus\n",
-                       __FUNCTION__, agg_size*4, pHalData->UsbRxAggBlockTimeout*32);
+                       __func__, agg_size*4, pHalData->UsbRxAggBlockTimeout*32);
                break;
 
        case USB_RX_AGG_DISABLE:
                break;
 
        case USB_RX_AGG_DISABLE:
@@ -872,7 +934,7 @@ PHY_InitAntennaSelection8723B(
 
 static VOID _InitAdhocWorkaroundParams(IN PADAPTER Adapter)
 {
 
 static VOID _InitAdhocWorkaroundParams(IN PADAPTER Adapter)
 {
-#ifdef RTL8192CU_ADHOC_WORKAROUND_SETTING
+#ifdef CONFIG_ADHOC_WORKAROUND_SETTING
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);      
        pHalData->RegBcnCtrlVal = rtw_read8(Adapter, REG_BCN_CTRL);
        pHalData->RegTxPause = rtw_read8(Adapter, REG_TXPAUSE); 
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);      
        pHalData->RegBcnCtrlVal = rtw_read8(Adapter, REG_BCN_CTRL);
        pHalData->RegTxPause = rtw_read8(Adapter, REG_TXPAUSE); 
@@ -913,7 +975,7 @@ HalDetectPwrDownMode(
        HAL_DATA_TYPE           *pHalData       = GET_HAL_DATA(Adapter);
        struct pwrctrl_priv             *pwrctrlpriv = adapter_to_pwrctl(Adapter);
        
        HAL_DATA_TYPE           *pHalData       = GET_HAL_DATA(Adapter);
        struct pwrctrl_priv             *pwrctrlpriv = adapter_to_pwrctl(Adapter);
        
-       EFUSE_ShadowRead(Adapter, 1, EEPROM_RF_OPT3_92C, (u32 *)&tmpvalue);
+       EFUSE_ShadowRead(Adapter, 1, EEPROM_FEATURE_OPTION_8723B, (u32 *)&tmpvalue);
 
        // 2010/08/25 MH INF priority > PDN Efuse value.
        if(tmpvalue & BIT4 && pwrctrlpriv->reg_pdnmode)
 
        // 2010/08/25 MH INF priority > PDN Efuse value.
        if(tmpvalue & BIT4 && pwrctrlpriv->reg_pdnmode)
@@ -1063,7 +1125,6 @@ u32 rtl8723bu_hal_init(PADAPTER padapter)
        HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(padapter);
        struct pwrctrl_priv             *pwrctrlpriv = adapter_to_pwrctl(padapter);
        struct registry_priv    *pregistrypriv = &padapter->registrypriv; 
        HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(padapter);
        struct pwrctrl_priv             *pwrctrlpriv = adapter_to_pwrctl(padapter);
        struct registry_priv    *pregistrypriv = &padapter->registrypriv; 
-       u8      is92C = IS_92C_SERIAL(pHalData->VersionID);
        rt_rf_power_state               eRfPowerStateToSet;
        u32 NavUpper = WiFiNavUpperUs;
        u32 value32;
        rt_rf_power_state               eRfPowerStateToSet;
        u32 NavUpper = WiFiNavUpperUs;
        u32 value32;
@@ -1143,7 +1204,7 @@ _func_enter_;
 HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_BEGIN);
 
 //     if(Adapter->bSurpriseRemoved)
 HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_BEGIN);
 
 //     if(Adapter->bSurpriseRemoved)
-//             return RT_STATUS_FAILURE;
+//             return _FAIL;
        
        // Check if MAC has already power on.   
        value8 = rtw_read8(padapter, REG_SYS_CLKR_8723B+1);     
        
        // Check if MAC has already power on.   
        value8 = rtw_read8(padapter, REG_SYS_CLKR_8723B+1);     
@@ -1459,7 +1520,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INIT_HAL_DM);
                        restore_iqk_rst = (pwrpriv->bips_processing==_TRUE)?_TRUE:_FALSE;
                        b2Ant = pHalData->EEPROMBluetoothAntNum==Ant_x2?_TRUE:_FALSE;
                        PHY_IQCalibrate_8723B(padapter, _FALSE, restore_iqk_rst, b2Ant, pHalData->ant_path);
                        restore_iqk_rst = (pwrpriv->bips_processing==_TRUE)?_TRUE:_FALSE;
                        b2Ant = pHalData->EEPROMBluetoothAntNum==Ant_x2?_TRUE:_FALSE;
                        PHY_IQCalibrate_8723B(padapter, _FALSE, restore_iqk_rst, b2Ant, pHalData->ant_path);
-                       pHalData->odmpriv.RFCalibrateInfo.bIQKInitialized = _TRUE;
+                       pHalData->bIQKInitialized = _TRUE;
 #ifdef CONFIG_BT_COEXIST
                        rtw_btcoex_IQKNotify(padapter, _FALSE);
 #endif
 #ifdef CONFIG_BT_COEXIST
                        rtw_btcoex_IQKNotify(padapter, _FALSE);
 #endif
@@ -1880,8 +1941,6 @@ i.        APS_FSMCO 0x04[15:0] = 0x4802           // set USB suspend
 
 
        value8 = 0x23;
 
 
        value8 = 0x23;
-       if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
-               value8 |= BIT3;
 
        rtw_write8(Adapter, REG_SPS0_CTRL, value8);
 
 
        rtw_write8(Adapter, REG_SPS0_CTRL, value8);
 
@@ -1944,9 +2003,13 @@ CardDisableRTL8723U(
 )
 {
        u8              u1bTmp;
 )
 {
        u8              u1bTmp;
-//     PMGNT_INFO      pMgntInfo       = &(Adapter->MgntInfo);
 
 
-       DBG_8192C("CardDisableRTL8723BU\n");
+       rtw_hal_get_hwreg(Adapter, HW_VAR_APFM_ON_MAC, &u1bTmp);
+       DBG_8192C(FUNC_ADPT_FMT ": bMacPwrCtrlOn=%d\n", FUNC_ADPT_ARG(Adapter), u1bTmp);
+       if (u1bTmp == _FALSE)
+               return;
+       u1bTmp = _FALSE;
+       rtw_hal_set_hwreg(Adapter, HW_VAR_APFM_ON_MAC, &u1bTmp);
 
        //Stop Tx Report Timer. 0x4EC[Bit1]=b'0
        u1bTmp = rtw_read8(Adapter, REG_TX_RPT_CTRL);
 
        //Stop Tx Report Timer. 0x4EC[Bit1]=b'0
        u1bTmp = rtw_read8(Adapter, REG_TX_RPT_CTRL);
@@ -2099,83 +2162,6 @@ _GetChannelGroup(
 //     EEPROM/EFUSE Content Parsing
 //
 //-------------------------------------------------------------------
 //     EEPROM/EFUSE Content Parsing
 //
 //-------------------------------------------------------------------
-static void
-_ReadIDs(
-       IN      PADAPTER        Adapter,
-       IN      u8*             PROMContent,
-       IN      BOOLEAN         AutoloadFail
-       )
-{
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       EEPROM_EFUSE_PRIV       *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
-
-       if(_FALSE == AutoloadFail){
-               // VID, PID 
-               pHalData->EEPROMVID = le16_to_cpu( *(u16 *)&PROMContent[EEPROM_VID_8723BU]);
-               pHalData->EEPROMPID = le16_to_cpu( *(u16 *)&PROMContent[EEPROM_PID_8723BU]);
-               
-               // Customer ID, 0x00 and 0xff are reserved for Realtek.                 
-               pHalData->EEPROMCustomerID = *(u8 *)&PROMContent[EEPROM_CUSTOMER_ID_92C];
-               pHalData->EEPROMSubCustomerID = *(u8 *)&PROMContent[EEPROM_SUBCUSTOMER_ID_92C];
-
-       }
-       else{
-               pHalData->EEPROMVID      = EEPROM_Default_VID;
-               pHalData->EEPROMPID      = EEPROM_Default_PID;
-
-               // Customer ID, 0x00 and 0xff are reserved for Realtek.                 
-               pHalData->EEPROMCustomerID      = EEPROM_Default_CustomerID;
-               pHalData->EEPROMSubCustomerID = EEPROM_Default_SubCustomerID;
-
-       }
-
-       // For customized behavior.
-       if((pHalData->EEPROMVID == 0x103C) && (pHalData->EEPROMVID == 0x1629))// HP Lite-On for RTL8188CUS Slim Combo.
-               pEEPROM->CustomerID = RT_CID_819x_HP;
-
-       //      Decide CustomerID according to VID/DID or EEPROM
-       switch(pHalData->EEPROMCustomerID)
-       {
-               case EEPROM_CID_DEFAULT:
-                       if((pHalData->EEPROMVID == 0x2001) && (pHalData->EEPROMPID == 0x3308))
-                               pEEPROM->CustomerID = RT_CID_DLINK;
-                       else if((pHalData->EEPROMVID == 0x2001) && (pHalData->EEPROMPID == 0x3309))
-                               pEEPROM->CustomerID = RT_CID_DLINK;
-                       else if((pHalData->EEPROMVID == 0x2001) && (pHalData->EEPROMPID == 0x330a))
-                               pEEPROM->CustomerID = RT_CID_DLINK;
-                       break;
-               case EEPROM_CID_WHQL:
-/*                     
-                       Adapter->bInHctTest = TRUE;
-
-                       pMgntInfo->bSupportTurboMode = FALSE;
-                       pMgntInfo->bAutoTurboBy8186 = FALSE;
-
-                       pMgntInfo->PowerSaveControl.bInactivePs = FALSE;
-                       pMgntInfo->PowerSaveControl.bIPSModeBackup = FALSE;
-                       pMgntInfo->PowerSaveControl.bLeisurePs = FALSE;
-                               
-                       pMgntInfo->keepAliveLevel = 0;
-
-                       Adapter->bUnloadDriverwhenS3S4 = FALSE;
-*/                             
-                       break;
-               default:
-                       pEEPROM->CustomerID = RT_CID_DEFAULT;
-                       break;
-                       
-       }
-
-       MSG_8192C("EEPROMVID = 0x%04x\n", pHalData->EEPROMVID);
-       MSG_8192C("EEPROMPID = 0x%04x\n", pHalData->EEPROMPID);
-       MSG_8192C("EEPROMCustomerID : 0x%02x\n", pHalData->EEPROMCustomerID);
-       MSG_8192C("EEPROMSubCustomerID: 0x%02x\n", pHalData->EEPROMSubCustomerID);
-
-       MSG_8192C("RT_CustomerID: 0x%02x\n", pEEPROM->CustomerID);
-
-}
-
-
 static VOID
 _ReadMACAddress(
        IN      PADAPTER        Adapter,        
 static VOID
 _ReadMACAddress(
        IN      PADAPTER        Adapter,        
@@ -2183,59 +2169,24 @@ _ReadMACAddress(
        IN      BOOLEAN         AutoloadFail
        )
 {
        IN      BOOLEAN         AutoloadFail
        )
 {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
 
        if(_FALSE == AutoloadFail){
                //Read Permanent MAC address and set value to hardware
 
        if(_FALSE == AutoloadFail){
                //Read Permanent MAC address and set value to hardware
-               _rtw_memcpy(pEEPROM->mac_addr, &PROMContent[EEPROM_MAC_ADDR_8723BU], ETH_ALEN);         
+               _rtw_memcpy(pHalData->EEPROMMACAddr, &PROMContent[EEPROM_MAC_ADDR_8723BU], ETH_ALEN);           
        }
        else{
                //Random assigh MAC address
                u8 sMacAddr[MAC_ADDR_LEN] = {0x00, 0xE0, 0x4C, 0x81, 0x92, 0x00};
                //sMacAddr[5] = (u8)GetRandomNumber(1, 254);            
        }
        else{
                //Random assigh MAC address
                u8 sMacAddr[MAC_ADDR_LEN] = {0x00, 0xE0, 0x4C, 0x81, 0x92, 0x00};
                //sMacAddr[5] = (u8)GetRandomNumber(1, 254);            
-               _rtw_memcpy(pEEPROM->mac_addr, sMacAddr, ETH_ALEN);     
+               _rtw_memcpy(pHalData->EEPROMMACAddr, sMacAddr, ETH_ALEN);       
        }
        }
-       DBG_8192C("%s MAC Address from EFUSE = "MAC_FMT"\n",__FUNCTION__, MAC_ARG(pEEPROM->mac_addr));
+       DBG_8192C("%s MAC Address from EFUSE = "MAC_FMT"\n",__FUNCTION__, MAC_ARG(pHalData->EEPROMMACAddr));
        //NicIFSetMacAddress(Adapter, Adapter->PermanentAddress);
        //RT_PRINT_ADDR(COMP_INIT|COMP_EFUSE, DBG_LOUD, "MAC Addr: %s", Adapter->PermanentAddress);
 
 }
 
        //NicIFSetMacAddress(Adapter, Adapter->PermanentAddress);
        //RT_PRINT_ADDR(COMP_INIT|COMP_EFUSE, DBG_LOUD, "MAC Addr: %s", Adapter->PermanentAddress);
 
 }
 
-static VOID
-_ReadBoardType(
-       IN      PADAPTER        Adapter,        
-       IN      u8*             PROMContent,
-       IN      BOOLEAN         AutoloadFail
-       )
-{
-#if 0 //amyma
-       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter); 
-       u32                     value32;
-       u8                      boardType = BOARD_USB_DONGLE; 
-
-       if(AutoloadFail){
-               if(IS_8723_SERIES(pHalData->VersionID))
-                       pHalData->rf_type = RF_1T1R;
-               else
-                       pHalData->rf_type = RF_2T2R;
-       
-               pHalData->BoardType = boardType;
-               return;
-       }
-
-       boardType = PROMContent[EEPROM_NORMAL_BoardType_92C];
-       boardType &= BOARD_TYPE_NORMAL_MASK;//bit[7:5]
-       boardType >>= 5;
-
-       pHalData->BoardType = boardType;
-       MSG_8192C("_ReadBoardType(%x)\n",pHalData->BoardType);
-
-       if (boardType == BOARD_USB_High_PA)
-               pHalData->ExternalPA = 1;
-#endif
-}
-
-
 static VOID
 _ReadLEDSetting(
        IN      PADAPTER        Adapter,        
 static VOID
 _ReadLEDSetting(
        IN      PADAPTER        Adapter,        
@@ -2245,7 +2196,6 @@ _ReadLEDSetting(
 {
        struct led_priv *pledpriv = &(Adapter->ledpriv);
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
 {
        struct led_priv *pledpriv = &(Adapter->ledpriv);
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       EEPROM_EFUSE_PRIV       *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
 
 #ifdef CONFIG_SW_LED
        pledpriv->bRegUseLed = _TRUE;
 
 #ifdef CONFIG_SW_LED
        pledpriv->bRegUseLed = _TRUE;
@@ -2253,7 +2203,7 @@ _ReadLEDSetting(
        //
        // Led mode
        //
        //
        // Led mode
        //
-       switch(pEEPROM->CustomerID)
+       switch(pHalData->CustomerID)
        {
                case RT_CID_DEFAULT:
                        pledpriv->LedStrategy = SW_LED_MODE1;
        {
                case RT_CID_DEFAULT:
                        pledpriv->LedStrategy = SW_LED_MODE1;
@@ -2269,51 +2219,12 @@ _ReadLEDSetting(
                        break;
        }
 
                        break;
        }
 
-//     if( BOARD_MINICARD == pHalData->BoardType )
-//     {
-//             pledpriv->LedStrategy = SW_LED_MODE6;
-//     }
        pHalData->bLedOpenDrain = _TRUE;// Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16.
 #else // HW LED
        pledpriv->LedStrategy = HW_LED;
 #endif //CONFIG_SW_LED
 }
        pHalData->bLedOpenDrain = _TRUE;// Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16.
 #else // HW LED
        pledpriv->LedStrategy = HW_LED;
 #endif //CONFIG_SW_LED
 }
-
-static VOID
-_ReadThermalMeter(
-       IN      PADAPTER        Adapter,        
-       IN      u8*     PROMContent,
-       IN      BOOLEAN         AutoloadFail
-       )
-{
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       u8      tempval;
-
-       //
-       // ThermalMeter from EEPROM
-       //
-       if(!AutoloadFail)       
-               tempval = PROMContent[EEPROM_THERMAL_METER_8723A];
-       else
-               tempval = EEPROM_Default_ThermalMeter;
-       
-       pHalData->EEPROMThermalMeter = (tempval&0x1f);  //[4:0]
-
-       if(pHalData->EEPROMThermalMeter == 0x1f || AutoloadFail)
-               pdmpriv->bAPKThermalMeterIgnore = _TRUE;
-
-#if 0
-       if(pHalData->EEPROMThermalMeter < 0x06 || pHalData->EEPROMThermalMeter > 0x1c)
-               pHalData->EEPROMThermalMeter = 0x12;
-#endif
-
-       pdmpriv->ThermalMeter[0] = pHalData->EEPROMThermalMeter;
-       
-       //RTPRINT(FINIT, INIT_TxPower, ("ThermalMeter = 0x%x\n", pHalData->EEPROMThermalMeter));
-       
-}
-
 static VOID
 _ReadRFSetting(
        IN      PADAPTER        Adapter,        
 static VOID
 _ReadRFSetting(
        IN      PADAPTER        Adapter,        
@@ -2342,13 +2253,13 @@ static void _ReadPSSetting(IN PADAPTER Adapter,IN u8*PROMContent,IN u8  AutoloadF
                //hw power down mode selection , 0:rf-off / 1:power down
 
                if(Adapter->registrypriv.hwpdn_mode==2)
                //hw power down mode selection , 0:rf-off / 1:power down
 
                if(Adapter->registrypriv.hwpdn_mode==2)
-                       pwrctl->bHWPowerdown = (PROMContent[EEPROM_RF_OPT3_92C] & BIT4);
+                       pwrctl->bHWPowerdown = (PROMContent[EEPROM_FEATURE_OPTION_8723B] & BIT4);
                else
                        pwrctl->bHWPowerdown = Adapter->registrypriv.hwpdn_mode;
                                
                // decide hw if support remote wakeup function
                // if hw supported, 8051 (SIE) will generate WeakUP signal( D+/D- toggle) when autoresume
                else
                        pwrctl->bHWPowerdown = Adapter->registrypriv.hwpdn_mode;
                                
                // decide hw if support remote wakeup function
                // if hw supported, 8051 (SIE) will generate WeakUP signal( D+/D- toggle) when autoresume
-               pwrctl->bSupportRemoteWakeup = (PROMContent[EEPROM_TEST_USB_OPT] & BIT1)?_TRUE :_FALSE;
+               pwrctl->bSupportRemoteWakeup = (PROMContent[EEPROM_USB_OPTIONAL_FUNCTION0] & BIT1)?_TRUE :_FALSE;
 
                //if(SUPPORT_HW_RADIO_DETECT(Adapter))  
                        //Adapter->registrypriv.usbss_enable = pwrctl->bSupportRemoteWakeup ;
 
                //if(SUPPORT_HW_RADIO_DETECT(Adapter))  
                        //Adapter->registrypriv.usbss_enable = pwrctl->bSupportRemoteWakeup ;
@@ -2403,24 +2314,23 @@ Hal_EfuseParseMACAddr_8723BU(
 {
        u16                     i, usValue;
        u8                      sMacAddr[6] = {0x00, 0xE0, 0x4C, 0x87, 0x23, 0x00};
 {
        u16                     i, usValue;
        u8                      sMacAddr[6] = {0x00, 0xE0, 0x4C, 0x87, 0x23, 0x00};
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
        if (AutoLoadFail)
        {
 //             sMacAddr[5] = (u1Byte)GetRandomNumber(1, 254);
                for (i=0; i<6; i++)
        if (AutoLoadFail)
        {
 //             sMacAddr[5] = (u1Byte)GetRandomNumber(1, 254);
                for (i=0; i<6; i++)
-                       pEEPROM->mac_addr[i] = sMacAddr[i];
+                       pHalData->EEPROMMACAddr[i] = sMacAddr[i];
        }
        else
        {
                //Read Permanent MAC address
 #if 1
        }
        else
        {
                //Read Permanent MAC address
 #if 1
-               _rtw_memcpy(pEEPROM->mac_addr, &hwinfo[EEPROM_MAC_ADDR_8723BU], ETH_ALEN);
+               _rtw_memcpy(pHalData->EEPROMMACAddr, &hwinfo[EEPROM_MAC_ADDR_8723BU], ETH_ALEN);
 #else
                for(i=0; i<6; i+=2)
                {
                        usValue = *(u16*)&hwinfo[EEPROM_MAC_ADDR_8723S+i];
 #else
                for(i=0; i<6; i+=2)
                {
                        usValue = *(u16*)&hwinfo[EEPROM_MAC_ADDR_8723S+i];
-                       *((u16*)(&pEEPROM->mac_addr[i])) = usValue;
+                       *((u16*)(&pHalData->EEPROMMACAddr[i])) = usValue;
                }
 #endif
        }
                }
 #endif
        }
@@ -2428,9 +2338,9 @@ Hal_EfuseParseMACAddr_8723BU(
 
        RT_TRACE(_module_hci_hal_init_c_, _drv_notice_,
                 ("Hal_EfuseParseMACAddr_8723BU: Permanent Address=%02x:%02x:%02x:%02x:%02x:%02x\n",
 
        RT_TRACE(_module_hci_hal_init_c_, _drv_notice_,
                 ("Hal_EfuseParseMACAddr_8723BU: Permanent Address=%02x:%02x:%02x:%02x:%02x:%02x\n",
-                 pEEPROM->mac_addr[0], pEEPROM->mac_addr[1],
-                 pEEPROM->mac_addr[2], pEEPROM->mac_addr[3],
-                 pEEPROM->mac_addr[4], pEEPROM->mac_addr[5]));
+                 pHalData->EEPROMMACAddr[0], pHalData->EEPROMMACAddr[1],
+                 pHalData->EEPROMMACAddr[2], pHalData->EEPROMMACAddr[3],
+                 pHalData->EEPROMMACAddr[4], pHalData->EEPROMMACAddr[5]));
 }
 
 
 }
 
 
@@ -2443,15 +2353,15 @@ static u32 Hal_readPGDataFromConfigFile(
        mm_segment_t fs;
        u8 temp[3];
        loff_t pos = 0;
        mm_segment_t fs;
        u8 temp[3];
        loff_t pos = 0;
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-       u8      *PROMContent = pEEPROM->efuse_eeprom_data;
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
+       u8      *PROMContent = pHalData->efuse_eeprom_data;
 
 
        temp[2] = 0; // add end of string '\0'
 
        fp = filp_open("/system/etc/wifi/wifi_efuse.map", O_RDWR,  0644);
        if (IS_ERR(fp)) {
 
 
        temp[2] = 0; // add end of string '\0'
 
        fp = filp_open("/system/etc/wifi/wifi_efuse.map", O_RDWR,  0644);
        if (IS_ERR(fp)) {
-               pEEPROM->bloadfile_fail_flag= _TRUE;
+               pHalData->bloadfile_fail_flag= _TRUE;
                DBG_871X("Error, Efuse configure file doesn't exist.\n");
                return _FAIL;
        }
                DBG_871X("Error, Efuse configure file doesn't exist.\n");
                return _FAIL;
        }
@@ -2471,7 +2381,7 @@ static u32 Hal_readPGDataFromConfigFile(
 
        filp_close(fp, NULL);
        
 
        filp_close(fp, NULL);
        
-       pEEPROM->bloadfile_fail_flag= _FALSE;
+       pHalData->bloadfile_fail_flag= _FALSE;
        return _SUCCESS;
 }
 
        return _SUCCESS;
 }
 
@@ -2487,18 +2397,18 @@ Hal_ReadMACAddrFromFile_8723AU(
        u8 source_addr[18];
        loff_t pos = 0;
        u32 curtime = rtw_get_current_time();
        u8 source_addr[18];
        loff_t pos = 0;
        u32 curtime = rtw_get_current_time();
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
        u8 *head, *end;
 
        u8 null_mac_addr[ETH_ALEN] = {0, 0, 0,0, 0, 0};
        u8 multi_mac_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
 
        _rtw_memset(source_addr, 0, 18);
        u8 *head, *end;
 
        u8 null_mac_addr[ETH_ALEN] = {0, 0, 0,0, 0, 0};
        u8 multi_mac_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
 
        _rtw_memset(source_addr, 0, 18);
-       _rtw_memset(pEEPROM->mac_addr, 0, ETH_ALEN);
+       _rtw_memset(pHalData->EEPROMMACAddr, 0, ETH_ALEN);
 
        fp = filp_open("/data/wifimac.txt", O_RDWR,  0644);
        if (IS_ERR(fp)) {
 
        fp = filp_open("/data/wifimac.txt", O_RDWR,  0644);
        if (IS_ERR(fp)) {
-               pEEPROM->bloadmac_fail_flag = _TRUE;
+               pHalData->bloadmac_fail_flag = _TRUE;
                DBG_871X("Error, wifi mac address file doesn't exist.\n");
        } else {
                fs = get_fs();
                DBG_871X("Error, wifi mac address file doesn't exist.\n");
        } else {
                fs = get_fs();
@@ -2516,13 +2426,13 @@ Hal_ReadMACAddrFromFile_8723AU(
                        if (end && (*end == ':') )
                                *end = '\0';
 
                        if (end && (*end == ':') )
                                *end = '\0';
 
-                       pEEPROM->mac_addr[i] = simple_strtoul(head, NULL, 16 );
+                       pHalData->EEPROMMACAddr[i] = simple_strtoul(head, NULL, 16 );
 
                        if (end) {
                                end++;
                                head = end;
                        }
 
                        if (end) {
                                end++;
                                head = end;
                        }
-                       DBG_871X("%02x \n", pEEPROM->mac_addr[i]);
+                       DBG_871X("%02x \n", pHalData->EEPROMMACAddr[i]);
                }
                DBG_871X("\n");
                set_fs(fs);
                }
                DBG_871X("\n");
                set_fs(fs);
@@ -2530,22 +2440,22 @@ Hal_ReadMACAddrFromFile_8723AU(
                filp_close(fp, NULL);
        }
 
                filp_close(fp, NULL);
        }
 
-       if ( (_rtw_memcmp(pEEPROM->mac_addr, null_mac_addr, ETH_ALEN)) ||
-               (_rtw_memcmp(pEEPROM->mac_addr, multi_mac_addr, ETH_ALEN)) ) {
-               pEEPROM->mac_addr[0] = 0x00;
-               pEEPROM->mac_addr[1] = 0xe0;
-               pEEPROM->mac_addr[2] = 0x4c;
-               pEEPROM->mac_addr[3] = (u8)(curtime & 0xff) ;
-               pEEPROM->mac_addr[4] = (u8)((curtime>>8) & 0xff) ;
-               pEEPROM->mac_addr[5] = (u8)((curtime>>16) & 0xff) ;
+       if ( (_rtw_memcmp(pHalData->EEPROMMACAddr, null_mac_addr, ETH_ALEN)) ||
+               (_rtw_memcmp(pHalData->EEPROMMACAddr, multi_mac_addr, ETH_ALEN)) ) {
+               pHalData->EEPROMMACAddr[0] = 0x00;
+               pHalData->EEPROMMACAddr[1] = 0xe0;
+               pHalData->EEPROMMACAddr[2] = 0x4c;
+               pHalData->EEPROMMACAddr[3] = (u8)(curtime & 0xff) ;
+               pHalData->EEPROMMACAddr[4] = (u8)((curtime>>8) & 0xff) ;
+               pHalData->EEPROMMACAddr[5] = (u8)((curtime>>16) & 0xff) ;
        }
        
        }
        
-       pEEPROM->bloadmac_fail_flag = _FALSE;
+       pHalData->bloadmac_fail_flag = _FALSE;
        
         DBG_871X("Hal_ReadMACAddrFromFile_8188ES: Permanent Address = %02x-%02x-%02x-%02x-%02x-%02x\n",
        
         DBG_871X("Hal_ReadMACAddrFromFile_8188ES: Permanent Address = %02x-%02x-%02x-%02x-%02x-%02x\n",
-                 pEEPROM->mac_addr[0], pEEPROM->mac_addr[1],
-                 pEEPROM->mac_addr[2], pEEPROM->mac_addr[3],
-                 pEEPROM->mac_addr[4], pEEPROM->mac_addr[5]);
+                 pHalData->EEPROMMACAddr[0], pHalData->EEPROMMACAddr[1],
+                 pHalData->EEPROMMACAddr[2], pHalData->EEPROMMACAddr[3],
+                 pHalData->EEPROMMACAddr[4], pHalData->EEPROMMACAddr[5]);
 }
 #endif //CONFIG_EFUSE_CONFIG_FILE
 
 }
 #endif //CONFIG_EFUSE_CONFIG_FILE
 
@@ -2555,14 +2465,14 @@ InitAdapterVariablesByPROM_8723BU(
        IN      PADAPTER        padapter
        )
 {
        IN      PADAPTER        padapter
        )
 {
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-       //PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
+
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
        u8*                     hwinfo = NULL;
 
        u8*                     hwinfo = NULL;
 
-       if (sizeof(pEEPROM->efuse_eeprom_data) < HWSET_MAX_SIZE_8723B)
+       if (sizeof(pHalData->efuse_eeprom_data) < HWSET_MAX_SIZE_8723B)
                DBG_871X("[WARNING] size of efuse_eeprom_data is less than HWSET_MAX_SIZE_8723B!\n");
 
                DBG_871X("[WARNING] size of efuse_eeprom_data is less than HWSET_MAX_SIZE_8723B!\n");
 
-       hwinfo = pEEPROM->efuse_eeprom_data;
+       hwinfo = pHalData->efuse_eeprom_data;
        
 #ifdef CONFIG_EFUSE_CONFIG_FILE
        Hal_readPGDataFromConfigFile(padapter);
        
 #ifdef CONFIG_EFUSE_CONFIG_FILE
        Hal_readPGDataFromConfigFile(padapter);
@@ -2570,32 +2480,32 @@ InitAdapterVariablesByPROM_8723BU(
        Hal_InitPGData(padapter, hwinfo);
 #endif //CONFIG_EFUSE_CONFIG_FILE      
        Hal_EfuseParseIDCode(padapter, hwinfo);
        Hal_InitPGData(padapter, hwinfo);
 #endif //CONFIG_EFUSE_CONFIG_FILE      
        Hal_EfuseParseIDCode(padapter, hwinfo);
-       Hal_EfuseParsePIDVID_8723BU(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseEEPROMVer_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
+       Hal_EfuseParsePIDVID_8723BU(padapter, hwinfo, pHalData->bautoload_fail_flag);
+       Hal_EfuseParseEEPROMVer_8723B(padapter, hwinfo, pHalData->bautoload_fail_flag);
 #ifdef CONFIG_EFUSE_CONFIG_FILE
        Hal_ReadMACAddrFromFile_8723BU(padapter);
 #else //CONFIG_EFUSE_CONFIG_FILE
 #ifdef CONFIG_EFUSE_CONFIG_FILE
        Hal_ReadMACAddrFromFile_8723BU(padapter);
 #else //CONFIG_EFUSE_CONFIG_FILE
-       Hal_EfuseParseMACAddr_8723BU(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
+       Hal_EfuseParseMACAddr_8723BU(padapter, hwinfo, pHalData->bautoload_fail_flag);
 #endif
 #endif
-       Hal_EfuseParseTxPowerInfo_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-       _ReadBoardType(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseBTCoexistInfo_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-
-       Hal_EfuseParseChnlPlan_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseThermalMeter_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-//     _ReadLEDSetting(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
-//     _ReadRFSetting(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
-//     _ReadPSSetting(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseAntennaDiversity_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-
-       Hal_EfuseParseEEPROMVer_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseCustomerID_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-//     Hal_EfuseParseRateIndicationOption(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseXtal_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
+       Hal_EfuseParseTxPowerInfo_8723B(padapter, hwinfo, pHalData->bautoload_fail_flag);
+       Hal_EfuseParseBoardType_8723B(padapter, hwinfo, pHalData->bautoload_fail_flag);
+       
+       Hal_EfuseParseBTCoexistInfo_8723B(padapter, hwinfo, pHalData->bautoload_fail_flag);
+
+       Hal_EfuseParseChnlPlan_8723B(padapter, hwinfo, pHalData->bautoload_fail_flag);
+       Hal_EfuseParseThermalMeter_8723B(padapter, hwinfo, pHalData->bautoload_fail_flag);
+//     _ReadLEDSetting(Adapter, PROMContent, pHalData->bautoload_fail_flag);
+//     _ReadRFSetting(Adapter, PROMContent, pHalData->bautoload_fail_flag);
+//     _ReadPSSetting(Adapter, PROMContent, pHalData->bautoload_fail_flag);
+       Hal_EfuseParseAntennaDiversity_8723B(padapter, hwinfo, pHalData->bautoload_fail_flag);
+
+       Hal_EfuseParseEEPROMVer_8723B(padapter, hwinfo, pHalData->bautoload_fail_flag);
+       Hal_EfuseParseCustomerID_8723B(padapter, hwinfo, pHalData->bautoload_fail_flag);
+//     Hal_EfuseParseRateIndicationOption(padapter, hwinfo, pHalData->bautoload_fail_flag);
+       Hal_EfuseParseXtal_8723B(padapter, hwinfo, pHalData->bautoload_fail_flag);
        //
        // The following part initialize some vars by PG info.
        //
        //
        // The following part initialize some vars by PG info.
        //
-//     Hal_InitChannelPlan(padapter);
 
        
 
 
        
 
@@ -2609,20 +2519,20 @@ static void _ReadPROMContent(
        IN PADAPTER             Adapter
        )
 {      
        IN PADAPTER             Adapter
        )
 {      
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
-       //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
+       
        u8                      eeValue;
        u32                     i;
        u16                     value16;
 
        eeValue = rtw_read8(Adapter, REG_9346CR);
        // To check system boot selection.
        u8                      eeValue;
        u32                     i;
        u16                     value16;
 
        eeValue = rtw_read8(Adapter, REG_9346CR);
        // To check system boot selection.
-       pEEPROM->EepromOrEfuse          = (eeValue & BOOT_FROM_EEPROM) ? _TRUE : _FALSE;
-       pEEPROM->bautoload_fail_flag    = (eeValue & EEPROM_EN) ? _FALSE : _TRUE;
+       pHalData->EepromOrEfuse         = (eeValue & BOOT_FROM_EEPROM) ? _TRUE : _FALSE;
+       pHalData->bautoload_fail_flag   = (eeValue & EEPROM_EN) ? _FALSE : _TRUE;
 
 
 
 
-       DBG_8192C("Boot from %s, Autoload %s !\n", (pEEPROM->EepromOrEfuse ? "EEPROM" : "EFUSE"),
-                               (pEEPROM->bautoload_fail_flag ? "Fail" : "OK") );
+       DBG_8192C("Boot from %s, Autoload %s !\n", (pHalData->EepromOrEfuse ? "EEPROM" : "EFUSE"),
+                               (pHalData->bautoload_fail_flag ? "Fail" : "OK") );
 
 
        InitAdapterVariablesByPROM_8723BU(Adapter);
 
 
        InitAdapterVariablesByPROM_8723BU(Adapter);
@@ -2813,7 +2723,7 @@ GetHalDefVar8723BUsb(
        {
                case HAL_DEF_IS_SUPPORT_ANT_DIV:
                        #ifdef CONFIG_ANTENNA_DIVERSITY
        {
                case HAL_DEF_IS_SUPPORT_ANT_DIV:
                        #ifdef CONFIG_ANTENNA_DIVERSITY
-                       *((u8 *)pValue) = (IS_92C_SERIAL(pHalData->VersionID) ||(pHalData->AntDivCfg==0))?_FALSE:_TRUE;
+                       *((u8 *)pValue) =_FALSE;
                        #endif
                        break;                  
                case HAL_DEF_CURRENT_ANTENNA:
                        #endif
                        break;                  
                case HAL_DEF_CURRENT_ANTENNA:
@@ -2917,6 +2827,9 @@ _func_enter_;
 
        rtl8723b_set_hal_ops(pHalFunc);
 
 
        rtl8723b_set_hal_ops(pHalFunc);
 
+       pHalFunc->hal_power_on = &_InitPowerOn_8723BU;
+       pHalFunc->hal_power_off = &CardDisableRTL8723U;
+
        pHalFunc->hal_init = &rtl8723bu_hal_init;
        pHalFunc->hal_deinit = &rtl8723bu_hal_deinit;
 
        pHalFunc->hal_init = &rtl8723bu_hal_init;
        pHalFunc->hal_deinit = &rtl8723bu_hal_deinit;
 
index c5dc2682116ffbd7d66049c917fb686479e999ac..31547e2740120196b27a03d3525db32e90c84f94 100755 (executable)
@@ -229,11 +229,11 @@ _func_exit_;
 #endif
 
 
 #endif
 
 
-static s32 pre_recv_entry(union recv_frame *precvframe, struct phy_stat *pphy_status)
+static s32 pre_recv_entry(union recv_frame *precvframe, u8 *pphy_status)
 {
        s32 ret=_SUCCESS;
 #ifdef CONFIG_CONCURRENT_MODE
 {
        s32 ret=_SUCCESS;
 #ifdef CONFIG_CONCURRENT_MODE
-       u8 *primary_myid, *secondary_myid, *paddr1;
+       u8 *secondary_myid, *paddr1;
        union recv_frame        *precvframe_if2 = NULL;
        _adapter *primary_padapter = precvframe->u.hdr.adapter;
        _adapter *secondary_padapter = primary_padapter->pbuddy_adapter;
        union recv_frame        *precvframe_if2 = NULL;
        _adapter *primary_padapter = precvframe->u.hdr.adapter;
        _adapter *secondary_padapter = primary_padapter->pbuddy_adapter;
@@ -248,8 +248,7 @@ static s32 pre_recv_entry(union recv_frame *precvframe, struct phy_stat *pphy_st
 
        if(IS_MCAST(paddr1) == _FALSE)//unicast packets
        {
 
        if(IS_MCAST(paddr1) == _FALSE)//unicast packets
        {
-               //primary_myid = myid(&primary_padapter->eeprompriv);
-               secondary_myid = myid(&secondary_padapter->eeprompriv);
+               secondary_myid = adapter_mac_addr(secondary_padapter);
 
                if(_rtw_memcmp(paddr1, secondary_myid, ETH_ALEN))
                {
 
                if(_rtw_memcmp(paddr1, secondary_myid, ETH_ALEN))
                {
@@ -313,7 +312,7 @@ static s32 pre_recv_entry(union recv_frame *precvframe, struct phy_stat *pphy_st
                        recvframe_pull_tail(precvframe_if2, IEEE80211_FCS_LEN);
 
                if (pattrib->physt)
                        recvframe_pull_tail(precvframe_if2, IEEE80211_FCS_LEN);
 
                if (pattrib->physt)
-                       rtl8723b_query_rx_phy_status(precvframe_if2, pphy_status);
+                       rx_query_phy_status(precvframe_if2, pphy_status);
 
                if(rtw_recv_entry(precvframe_if2) != _SUCCESS)
                {
 
                if(rtw_recv_entry(precvframe_if2) != _SUCCESS)
                {
@@ -323,7 +322,7 @@ static s32 pre_recv_entry(union recv_frame *precvframe, struct phy_stat *pphy_st
        }
 
        //if (precvframe->u.hdr.attrib.physt)
        }
 
        //if (precvframe->u.hdr.attrib.physt)
-       //      rtl8723b_query_rx_phy_status(precvframe, pphy_status);
+       //      rx_query_phy_status(precvframe, pphy_status);
 
        //ret = rtw_recv_entry(precvframe);
 #endif
 
        //ret = rtw_recv_entry(precvframe);
 #endif
@@ -337,7 +336,7 @@ static s32 pre_recv_entry(union recv_frame *precvframe, u8 *pphy_status)
 {      
        s32 ret=_SUCCESS;
 #ifdef CONFIG_CONCURRENT_MODE  
 {      
        s32 ret=_SUCCESS;
 #ifdef CONFIG_CONCURRENT_MODE  
-       u8 *primary_myid, *secondary_myid, *paddr1;
+       u8 *secondary_myid, *paddr1;
        union recv_frame        *precvframe_if2 = NULL;
        _adapter *primary_padapter = precvframe->u.hdr.adapter;
        _adapter *secondary_padapter = primary_padapter->pbuddy_adapter;
        union recv_frame        *precvframe_if2 = NULL;
        _adapter *primary_padapter = precvframe->u.hdr.adapter;
        _adapter *secondary_padapter = primary_padapter->pbuddy_adapter;
@@ -352,8 +351,7 @@ static s32 pre_recv_entry(union recv_frame *precvframe, u8 *pphy_status)
 
        if(IS_MCAST(paddr1) == _FALSE)//unicast packets
        {
 
        if(IS_MCAST(paddr1) == _FALSE)//unicast packets
        {
-               //primary_myid = myid(&primary_padapter->eeprompriv);
-               secondary_myid = myid(&secondary_padapter->eeprompriv);
+               secondary_myid = adapter_mac_addr(secondary_padapter);
 
                if(_rtw_memcmp(paddr1, secondary_myid, ETH_ALEN))
                {                       
 
                if(_rtw_memcmp(paddr1, secondary_myid, ETH_ALEN))
                {                       
@@ -466,7 +464,7 @@ static s32 pre_recv_entry(union recv_frame *precvframe, u8 *pphy_status)
                                        //recvframe_pull(precvframe_if2, drvinfo_sz + RXDESC_SIZE);
 
                                        if (pattrib->physt && pphy_status)
                                        //recvframe_pull(precvframe_if2, drvinfo_sz + RXDESC_SIZE);
 
                                        if (pattrib->physt && pphy_status)
-                                               rtl8812_query_rx_phy_status(precvframe_if2, pphy_status);
+                                               rx_query_phy_status(precvframe_if2, pphy_status);
        
                                        ret = rtw_recv_entry(precvframe_if2);                           
                                }       
        
                                        ret = rtw_recv_entry(precvframe_if2);                           
                                }       
@@ -482,7 +480,7 @@ static s32 pre_recv_entry(union recv_frame *precvframe, u8 *pphy_status)
                
        }
        //if (precvframe->u.hdr.attrib.physt)
                
        }
        //if (precvframe->u.hdr.attrib.physt)
-       //      rtl8812_query_rx_phy_status(precvframe, pphy_status);
+       //      rx_query_phy_status(precvframe, pphy_status);
 
        //ret = rtw_recv_entry(precvframe);
 
 
        //ret = rtw_recv_entry(precvframe);
 
@@ -578,7 +576,7 @@ int recvbuf2recvframe(PADAPTER padapter, void *ptr)
 
 #ifdef CONFIG_CONCURRENT_MODE
                        if (rtw_buddy_adapter_up(padapter)) {
 
 #ifdef CONFIG_CONCURRENT_MODE
                        if (rtw_buddy_adapter_up(padapter)) {
-                               if (pre_recv_entry(precvframe, (struct phy_stat*)pphy_status) != _SUCCESS) {
+                               if (pre_recv_entry(precvframe, pphy_status) != _SUCCESS) {
                                        // Return fail except data frame
                                        //DBG_8192C("%s: RX Error! (concurrent)pre_recv_entry FAIL!\n", __FUNCTION__);
                                }
                                        // Return fail except data frame
                                        //DBG_8192C("%s: RX Error! (concurrent)pre_recv_entry FAIL!\n", __FUNCTION__);
                                }
@@ -586,7 +584,7 @@ int recvbuf2recvframe(PADAPTER padapter, void *ptr)
 #endif // CONFIG_CONCURRENT_MODE
 
                        if (pphy_status)
 #endif // CONFIG_CONCURRENT_MODE
 
                        if (pphy_status)
-                               rtl8723b_query_rx_phy_status(precvframe, (struct phy_stat*)pphy_status);
+                               rx_query_phy_status(precvframe, pphy_status);
 
                        if (rtw_recv_entry(precvframe) != _SUCCESS) {
                                // Return fail except data frame
 
                        if (rtw_recv_entry(precvframe) != _SUCCESS) {
                                // Return fail except data frame
@@ -628,9 +626,6 @@ void rtl8723bu_xmit_tasklet(void *priv)
        _adapter *padapter = (_adapter*)priv;
        struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
 
        _adapter *padapter = (_adapter*)priv;
        struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
 
-       if(check_fwstate(&padapter->mlmepriv, _FW_UNDER_SURVEY) == _TRUE)
-               return;
-
        while(1)
        {
                if (RTW_CANNOT_TX(padapter))
        while(1)
        {
                if (RTW_CANNOT_TX(padapter))
@@ -639,6 +634,14 @@ void rtl8723bu_xmit_tasklet(void *priv)
                        break;
                }
 
                        break;
                }
 
+               if(check_fwstate(&padapter->mlmepriv, _FW_UNDER_SURVEY) == _TRUE
+                       #ifdef CONFIG_CONCURRENT_MODE
+                       || check_buddy_fwstate(padapter, _FW_UNDER_SURVEY) == _TRUE
+                       #endif
+               ) {
+                       break;
+               }
+
                ret = rtl8723bu_xmitframe_complete(padapter, pxmitpriv, NULL);
 
                if(ret==_FALSE)
                ret = rtl8723bu_xmitframe_complete(padapter, pxmitpriv, NULL);
 
                if(ret==_FALSE)
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/Hal8192CPhyReg.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/Hal8192CPhyReg.h
deleted file mode 100755 (executable)
index 1c7cd5d..0000000
+++ /dev/null
@@ -1,1133 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-/*****************************************************************************
- *
- * Module:     __INC_HAL8192CPHYREG_H
- *
- *
- * Note:       1. Define PMAC/BB register map
- *                     2. Define RF register map
- *                     3. PMAC/BB register bit mask.
- *                     4. RF reg bit mask.
- *                     5. Other BB/RF relative definition.
- *                     
- *
- * Export:     Constants, macro, functions(API), global variables(None).
- *
- * Abbrev:     
- *
- * History:
- *             Data            Who             Remark 
- *      08/07/2007  MHC        1. Porting from 9x series PHYCFG.h.
- *                                                     2. Reorganize code architecture.
- *     09/25/2008      MH              1. Add RL6052 register definition
- * 
- *****************************************************************************/
-#ifndef __INC_HAL8192CPHYREG_H
-#define __INC_HAL8192CPHYREG_H
-
-
-/*--------------------------Define Parameters-------------------------------*/
-
-//============================================================
-//       8192S Regsiter offset definition
-//============================================================
-
-//
-// BB-PHY register PMAC 0x100 PHY 0x800 - 0xEFF
-// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF
-// 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00
-// 3. RF register 0x00-2E
-// 4. Bit Mask for BB/RF register
-// 5. Other defintion for BB/RF R/W
-//
-
-
-//
-// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF
-// 1. Page1(0x100)
-//
-#define                rPMAC_Reset                                     0x100
-#define                rPMAC_TxStart                                   0x104
-#define                rPMAC_TxLegacySIG                               0x108
-#define                rPMAC_TxHTSIG1                          0x10c
-#define                rPMAC_TxHTSIG2                          0x110
-#define                rPMAC_PHYDebug                          0x114
-#define                rPMAC_TxPacketNum                               0x118
-#define                rPMAC_TxIdle                                    0x11c
-#define                rPMAC_TxMACHeader0                      0x120
-#define                rPMAC_TxMACHeader1                      0x124
-#define                rPMAC_TxMACHeader2                      0x128
-#define                rPMAC_TxMACHeader3                      0x12c
-#define                rPMAC_TxMACHeader4                      0x130
-#define                rPMAC_TxMACHeader5                      0x134
-#define                rPMAC_TxDataType                                0x138
-#define                rPMAC_TxRandomSeed                      0x13c
-#define                rPMAC_CCKPLCPPreamble                   0x140
-#define                rPMAC_CCKPLCPHeader                     0x144
-#define                rPMAC_CCKCRC16                          0x148
-#define                rPMAC_OFDMRxCRC32OK                     0x170
-#define                rPMAC_OFDMRxCRC32Er                     0x174
-#define                rPMAC_OFDMRxParityEr                    0x178
-#define                rPMAC_OFDMRxCRC8Er                      0x17c
-#define                rPMAC_CCKCRxRC16Er                      0x180
-#define                rPMAC_CCKCRxRC32Er                      0x184
-#define                rPMAC_CCKCRxRC32OK                      0x188
-#define                rPMAC_TxStatus                                  0x18c
-
-//
-// 2. Page2(0x200)
-//
-// The following two definition are only used for USB interface.
-#define                RF_BB_CMD_ADDR                          0x02c0  // RF/BB read/write command address.
-#define                RF_BB_CMD_DATA                          0x02c4  // RF/BB read/write command data.
-
-//
-// 3. Page8(0x800)
-//
-#define                rFPGA0_RFMOD                            0x800   //RF mode & CCK TxSC // RF BW Setting??
-
-#define                rFPGA0_TxInfo                           0x804   // Status report??
-#define                rFPGA0_PSDFunction                      0x808
-
-#define                rFPGA0_TxGainStage                      0x80c   // Set TX PWR init gain?
-
-#define                rFPGA0_RFTiming1                        0x810   // Useless now
-#define                rFPGA0_RFTiming2                        0x814
-
-#define                rFPGA0_XA_HSSIParameter1                0x820   // RF 3 wire register
-#define                rFPGA0_XA_HSSIParameter2                0x824
-#define                rFPGA0_XB_HSSIParameter1                0x828
-#define                rFPGA0_XB_HSSIParameter2                0x82c
-#define                rTxAGC_B_Rate18_06                              0x830
-#define                rTxAGC_B_Rate54_24                              0x834
-#define                rTxAGC_B_CCK1_55_Mcs32          0x838
-#define                rTxAGC_B_Mcs03_Mcs00                    0x83c
-
-#define                rTxAGC_B_Mcs07_Mcs04                    0x848
-#define                rTxAGC_B_Mcs11_Mcs08                    0x84c
-
-#define                rFPGA0_XA_LSSIParameter         0x840
-#define                rFPGA0_XB_LSSIParameter         0x844
-
-#define                rFPGA0_RFWakeUpParameter                0x850   // Useless now
-#define                rFPGA0_RFSleepUpParameter               0x854
-
-#define                rFPGA0_XAB_SwitchControl                0x858   // RF Channel switch
-#define                rFPGA0_XCD_SwitchControl                0x85c
-
-#define                rFPGA0_XA_RFInterfaceOE         0x860   // RF Channel switch
-#define                rFPGA0_XB_RFInterfaceOE         0x864
-
-#define                rTxAGC_B_Mcs15_Mcs12                    0x868
-#define                rTxAGC_B_CCK11_A_CCK2_11                0x86c
-
-#define                rFPGA0_XAB_RFInterfaceSW                0x870   // RF Interface Software Control
-#define                rFPGA0_XCD_RFInterfaceSW                0x874
-
-#define                rFPGA0_XAB_RFParameter          0x878   // RF Parameter
-#define                rFPGA0_XCD_RFParameter          0x87c
-
-#define                rFPGA0_AnalogParameter1         0x880   // Crystal cap setting RF-R/W protection for parameter4??
-#define                rFPGA0_AnalogParameter2         0x884
-#define                rFPGA0_AnalogParameter3         0x888   // Useless now
-#define                rFPGA0_AnalogParameter4         0x88c
-
-#define                rFPGA0_XA_LSSIReadBack          0x8a0   // Tranceiver LSSI Readback
-#define                rFPGA0_XB_LSSIReadBack          0x8a4
-#define                rFPGA0_XC_LSSIReadBack          0x8a8
-#define                rFPGA0_XD_LSSIReadBack          0x8ac
-
-#define                rFPGA0_PSDReport                                0x8b4   // Useless now
-#define                TransceiverA_HSPI_Readback      0x8b8   // Transceiver A HSPI Readback
-#define                TransceiverB_HSPI_Readback      0x8bc   // Transceiver B HSPI Readback
-#define                rFPGA0_XAB_RFInterfaceRB                0x8e0   // Useless now // RF Interface Readback Value
-#define                rFPGA0_XCD_RFInterfaceRB                0x8e4   // Useless now
-
-//
-// 4. Page9(0x900)
-//
-#define                rFPGA1_RFMOD                            0x900   //RF mode & OFDM TxSC // RF BW Setting??
-
-#define                rFPGA1_TxBlock                          0x904   // Useless now
-#define                rFPGA1_DebugSelect                      0x908   // Useless now
-#define                rFPGA1_TxInfo                           0x90c   // Useless now // Status report??
-#define        rS0S1_PathSwitch                        0x948
-
-//
-// 5. PageA(0xA00)
-//
-// Set Control channel to upper or lower. These settings are required only for 40MHz
-#define                rCCK0_System                            0xa00
-
-#define                rCCK0_AFESetting                        0xa04   // Disable init gain now // Select RX path by RSSI
-#define                rCCK0_CCA                                       0xa08   // Disable init gain now // Init gain
-
-#define                rCCK0_RxAGC1                            0xa0c   //AGC default value, saturation level // Antenna Diversity, RX AGC, LNA Threshold, RX LNA Threshold useless now. Not the same as 90 series
-#define                rCCK0_RxAGC2                            0xa10   //AGC & DAGC
-
-#define                rCCK0_RxHP                                      0xa14
-
-#define                rCCK0_DSPParameter1             0xa18   //Timing recovery & Channel estimation threshold
-#define                rCCK0_DSPParameter2             0xa1c   //SQ threshold
-
-#define                rCCK0_TxFilter1                         0xa20
-#define                rCCK0_TxFilter2                         0xa24
-#define                rCCK0_DebugPort                 0xa28   //debug port and Tx filter3
-#define                rCCK0_FalseAlarmReport          0xa2c   //0xa2d useless now 0xa30-a4f channel report
-#define                rCCK0_TRSSIReport                       0xa50
-#define                rCCK0_RxReport                          0xa54  //0xa57
-#define                rCCK0_FACounterLower            0xa5c  //0xa5b
-#define                rCCK0_FACounterUpper            0xa58  //0xa5c
-//
-// PageB(0xB00)
-//
-#define                rPdp_AntA                               0xb00  
-#define                rPdp_AntA_4                             0xb04
-#define                rConfig_Pmpd_AntA                       0xb28
-#define                rConfig_AntA                            0xb68
-#define                rConfig_AntB                            0xb6c
-#define                rPdp_AntB                                       0xb70
-#define                rPdp_AntB_4                             0xb74
-#define                rConfig_Pmpd_AntB                       0xb98
-#define                rAPK                                            0xbd8
-
-//
-// 6. PageC(0xC00)
-//
-#define                rOFDM0_LSTF                             0xc00
-
-#define                rOFDM0_TRxPathEnable            0xc04
-#define                rOFDM0_TRMuxPar                 0xc08
-#define                rOFDM0_TRSWIsolation            0xc0c
-
-#define                rOFDM0_XARxAFE                  0xc10  //RxIQ DC offset, Rx digital filter, DC notch filter
-#define                rOFDM0_XARxIQImbalance          0xc14  //RxIQ imblance matrix
-#define                rOFDM0_XBRxAFE                          0xc18
-#define                rOFDM0_XBRxIQImbalance          0xc1c
-#define                rOFDM0_XCRxAFE                          0xc20
-#define                rOFDM0_XCRxIQImbalance          0xc24
-#define                rOFDM0_XDRxAFE                          0xc28
-#define                rOFDM0_XDRxIQImbalance          0xc2c
-
-#define                rOFDM0_RxDetector1                      0xc30  //PD,BW & SBD    // DM tune init gain
-#define                rOFDM0_RxDetector2                      0xc34  //SBD & Fame Sync. 
-#define                rOFDM0_RxDetector3                      0xc38  //Frame Sync.
-#define                rOFDM0_RxDetector4                      0xc3c  //PD, SBD, Frame Sync & Short-GI
-
-#define                rOFDM0_RxDSP                            0xc40  //Rx Sync Path
-#define                rOFDM0_CFOandDAGC               0xc44  //CFO & DAGC
-#define                rOFDM0_CCADropThreshold 0xc48 //CCA Drop threshold
-#define                rOFDM0_ECCAThreshold            0xc4c // energy CCA
-
-#define                rOFDM0_XAAGCCore1                       0xc50   // DIG
-#define                rOFDM0_XAAGCCore2                       0xc54
-#define                rOFDM0_XBAGCCore1                       0xc58
-#define                rOFDM0_XBAGCCore2                       0xc5c
-#define                rOFDM0_XCAGCCore1                       0xc60
-#define                rOFDM0_XCAGCCore2                       0xc64
-#define                rOFDM0_XDAGCCore1                       0xc68
-#define                rOFDM0_XDAGCCore2                       0xc6c
-
-#define                rOFDM0_AGCParameter1                    0xc70
-#define                rOFDM0_AGCParameter2                    0xc74
-#define                rOFDM0_AGCRSSITable                     0xc78
-#define                rOFDM0_HTSTFAGC                         0xc7c
-
-#define                rOFDM0_XATxIQImbalance          0xc80   // TX PWR TRACK and DIG
-#define                rOFDM0_XATxAFE                          0xc84
-#define                rOFDM0_XBTxIQImbalance          0xc88
-#define                rOFDM0_XBTxAFE                          0xc8c
-#define                rOFDM0_XCTxIQImbalance          0xc90
-#define                rOFDM0_XCTxAFE                                  0xc94
-#define                rOFDM0_XDTxIQImbalance          0xc98
-#define                rOFDM0_XDTxAFE                          0xc9c
-
-#define                rOFDM0_RxIQExtAnta                      0xca0
-#define                rOFDM0_TxCoeff1                         0xca4
-#define                rOFDM0_TxCoeff2                         0xca8
-#define                rOFDM0_TxCoeff3                         0xcac
-#define                rOFDM0_TxCoeff4                         0xcb0
-#define                rOFDM0_TxCoeff5                         0xcb4
-#define                rOFDM0_TxCoeff6                         0xcb8
-#define                rOFDM0_RxHPParameter                    0xce0
-#define                rOFDM0_TxPseudoNoiseWgt         0xce4
-#define                rOFDM0_FrameSync                                0xcf0
-#define                rOFDM0_DFSReport                                0xcf4
-
-//
-// 7. PageD(0xD00)
-//
-#define                rOFDM1_LSTF                                     0xd00
-#define                rOFDM1_TRxPathEnable                    0xd04
-
-#define                rOFDM1_CFO                                              0xd08   // No setting now
-#define                rOFDM1_CSI1                                     0xd10
-#define                rOFDM1_SBD                                              0xd14
-#define                rOFDM1_CSI2                                     0xd18
-#define                rOFDM1_CFOTracking                      0xd2c
-#define                rOFDM1_TRxMesaure1                      0xd34
-#define                rOFDM1_IntfDet                                  0xd3c
-#define                rOFDM1_PseudoNoiseStateAB               0xd50
-#define                rOFDM1_PseudoNoiseStateCD               0xd54
-#define                rOFDM1_RxPseudoNoiseWgt         0xd58
-
-#define                rOFDM_PHYCounter1                               0xda0  //cca, parity fail
-#define                rOFDM_PHYCounter2                               0xda4  //rate illegal, crc8 fail
-#define                rOFDM_PHYCounter3                               0xda8  //MCS not support
-
-#define                rOFDM_ShortCFOAB                                0xdac   // No setting now
-#define                rOFDM_ShortCFOCD                                0xdb0
-#define                rOFDM_LongCFOAB                         0xdb4
-#define                rOFDM_LongCFOCD                         0xdb8
-#define                rOFDM_TailCFOAB                         0xdbc
-#define                rOFDM_TailCFOCD                         0xdc0
-#define                rOFDM_PWMeasure1                        0xdc4
-#define                rOFDM_PWMeasure2                        0xdc8
-#define                rOFDM_BWReport                          0xdcc
-#define                rOFDM_AGCReport                         0xdd0
-#define                rOFDM_RxSNR                                     0xdd4
-#define                rOFDM_RxEVMCSI                          0xdd8
-#define                rOFDM_SIGReport                         0xddc
-
-
-//
-// 8. PageE(0xE00)
-//
-#define                rTxAGC_A_Rate18_06                      0xe00
-#define                rTxAGC_A_Rate54_24                      0xe04
-#define                rTxAGC_A_CCK1_Mcs32                     0xe08
-#define                rTxAGC_A_Mcs03_Mcs00                    0xe10
-#define                rTxAGC_A_Mcs07_Mcs04                    0xe14
-#define                rTxAGC_A_Mcs11_Mcs08                    0xe18
-#define                rTxAGC_A_Mcs15_Mcs12                    0xe1c
-
-#define                rFPGA0_IQK                                      0xe28
-#define                rTx_IQK_Tone_A                          0xe30
-#define                rRx_IQK_Tone_A                          0xe34
-#define                rTx_IQK_PI_A                                    0xe38
-#define                rRx_IQK_PI_A                                    0xe3c
-
-#define                rTx_IQK                                                 0xe40
-#define                rRx_IQK                                         0xe44
-#define                rIQK_AGC_Pts                                    0xe48
-#define                rIQK_AGC_Rsp                                    0xe4c
-#define                rTx_IQK_Tone_B                          0xe50
-#define                rRx_IQK_Tone_B                          0xe54
-#define                rTx_IQK_PI_B                                    0xe58
-#define                rRx_IQK_PI_B                                    0xe5c
-#define                rIQK_AGC_Cont                           0xe60
-
-#define                rBlue_Tooth                                     0xe6c
-#define                rRx_Wait_CCA                                    0xe70
-#define                rTx_CCK_RFON                                    0xe74
-#define                rTx_CCK_BBON                            0xe78
-#define                rTx_OFDM_RFON                           0xe7c
-#define                rTx_OFDM_BBON                           0xe80
-#define                rTx_To_Rx                                       0xe84
-#define                rTx_To_Tx                                       0xe88
-#define                rRx_CCK                                         0xe8c
-
-#define                rTx_Power_Before_IQK_A          0xe94
-#define                rTx_Power_After_IQK_A                   0xe9c
-
-#define                rRx_Power_Before_IQK_A          0xea0
-#define                rRx_Power_Before_IQK_A_2                0xea4
-#define                rRx_Power_After_IQK_A                   0xea8
-#define                rRx_Power_After_IQK_A_2         0xeac
-
-#define                rTx_Power_Before_IQK_B          0xeb4
-#define                rTx_Power_After_IQK_B                   0xebc
-
-#define                rRx_Power_Before_IQK_B          0xec0
-#define                rRx_Power_Before_IQK_B_2                0xec4
-#define                rRx_Power_After_IQK_B                   0xec8
-#define                rRx_Power_After_IQK_B_2         0xecc
-
-#define                rRx_OFDM                                        0xed0
-#define                rRx_Wait_RIFS                           0xed4
-#define                rRx_TO_Rx                                       0xed8
-#define                rStandby                                                0xedc
-#define                rSleep                                          0xee0
-#define                rPMPD_ANAEN                             0xeec
-
-//
-// 7. RF Register 0x00-0x2E (RF 8256)
-//    RF-0222D 0x00-3F
-//
-//Zebra1
-#define                rZebra1_HSSIEnable                              0x0     // Useless now
-#define                rZebra1_TRxEnable1                              0x1
-#define                rZebra1_TRxEnable2                              0x2
-#define                rZebra1_AGC                                     0x4
-#define                rZebra1_ChargePump                      0x5
-#define                rZebra1_Channel                         0x7     // RF channel switch
-
-//#endif
-#define                rZebra1_TxGain                                  0x8     // Useless now
-#define                rZebra1_TxLPF                                   0x9
-#define                rZebra1_RxLPF                                   0xb
-#define                rZebra1_RxHPFCorner                     0xc
-
-//Zebra4
-#define                rGlobalCtrl                                             0       // Useless now
-#define                rRTL8256_TxLPF                                  19
-#define                rRTL8256_RxLPF                                  11
-
-//RTL8258
-#define                rRTL8258_TxLPF                                  0x11    // Useless now
-#define                rRTL8258_RxLPF                                  0x13
-#define                rRTL8258_RSSILPF                                0xa
-
-//
-// RL6052 Register definition
-//
-#define                RF_AC                                           0x00    // 
-
-#define                RF_IQADJ_G1                             0x01    // 
-#define                RF_IQADJ_G2                             0x02    // 
-#define                RF_BS_PA_APSET_G1_G4            0x03
-#define                RF_BS_PA_APSET_G5_G8            0x04
-#define                RF_POW_TRSW                             0x05    // 
-
-#define                RF_GAIN_RX                                      0x06    // 
-#define                RF_GAIN_TX                                      0x07    // 
-
-#define                RF_TXM_IDAC                             0x08    // 
-#define                RF_IPA_G                                        0x09    // 
-#define                RF_TXBIAS_G                             0x0A
-#define                RF_TXPA_AG                                      0x0B
-#define                RF_IPA_A                                        0x0C    // 
-#define                RF_TXBIAS_A                             0x0D
-#define                RF_BS_PA_APSET_G9_G11   0x0E
-#define                RF_BS_IQGEN                             0x0F    // 
-
-#define                RF_MODE1                                        0x10    // 
-#define                RF_MODE2                                        0x11    // 
-
-#define                RF_RX_AGC_HP                            0x12    // 
-#define                RF_TX_AGC                                       0x13    // 
-#define                RF_BIAS                                         0x14    // 
-#define                RF_IPA                                          0x15    // 
-#define                RF_TXBIAS                                       0x16 //
-#define                RF_POW_ABILITY                  0x17    // 
-#define                RF_MODE_AG                              0x18    // 
-#define                rRfChannel                                      0x18    // RF channel and BW switch
-#define                RF_CHNLBW                                       0x18    // RF channel and BW switch
-#define                RF_TOP                                          0x19    // 
-
-#define                RF_RX_G1                                        0x1A    // 
-#define                RF_RX_G2                                        0x1B    // 
-
-#define                RF_RX_BB2                                       0x1C    // 
-#define                RF_RX_BB1                                       0x1D    // 
-
-#define                RF_RCK1                                 0x1E    // 
-#define                RF_RCK2                                 0x1F    // 
-
-#define                RF_TX_G1                                        0x20    // 
-#define                RF_TX_G2                                        0x21    // 
-#define                RF_TX_G3                                        0x22    // 
-
-#define                RF_TX_BB1                                       0x23    // 
-
-#define                RF_T_METER                                      0x24    // 
-
-#define                RF_SYN_G1                                       0x25    // RF TX Power control
-#define                RF_SYN_G2                                       0x26    // RF TX Power control
-#define                RF_SYN_G3                                       0x27    // RF TX Power control
-#define                RF_SYN_G4                                       0x28    // RF TX Power control
-#define                RF_SYN_G5                                       0x29    // RF TX Power control
-#define                RF_SYN_G6                                       0x2A    // RF TX Power control
-#define                RF_SYN_G7                                       0x2B    // RF TX Power control
-#define                RF_SYN_G8                                       0x2C    // RF TX Power control
-
-#define                RF_RCK_OS                                       0x30    // RF TX PA control
-
-#define                RF_TXPA_G1                                      0x31    // RF TX PA control
-#define                RF_TXPA_G2                                      0x32    // RF TX PA control
-#define                RF_TXPA_G3                                      0x33    // RF TX PA control
-#define        RF_TX_BIAS_A                            0x35
-#define        RF_TX_BIAS_D                            0x36
-#define        RF_LOBF_9                                       0x38
-#define        RF_RXRF_A3                                      0x3C    //      
-#define        RF_TRSW                                         0x3F
-
-#define        RF_TXRF_A2                                      0x41
-#define        RF_TXPA_G4                                      0x46    
-#define        RF_TXPA_A4                                      0x4B    
-#define        RF_0x52                                         0x52
-#define        RF_WE_LUT                                       0xEF    
-#define        RF_S0S1                                         0xB0
-
-//
-//Bit Mask
-//
-// 1. Page1(0x100)
-#define                bBBResetB                                               0x100   // Useless now?
-#define                bGlobalResetB                                   0x200
-#define                bOFDMTxStart                                    0x4
-#define                bCCKTxStart                                             0x8
-#define                bCRC32Debug                                     0x100
-#define                bPMACLoopback                                   0x10
-#define                bTxLSIG                                                 0xffffff
-#define                bOFDMTxRate                                     0xf
-#define                bOFDMTxReserved                         0x10
-#define                bOFDMTxLength                                   0x1ffe0
-#define                bOFDMTxParity                                   0x20000
-#define                bTxHTSIG1                                               0xffffff
-#define                bTxHTMCSRate                                    0x7f
-#define                bTxHTBW                                         0x80
-#define                bTxHTLength                                     0xffff00
-#define                bTxHTSIG2                                               0xffffff
-#define                bTxHTSmoothing                                  0x1
-#define                bTxHTSounding                                   0x2
-#define                bTxHTReserved                                   0x4
-#define                bTxHTAggreation                         0x8
-#define                bTxHTSTBC                                               0x30
-#define                bTxHTAdvanceCoding                      0x40
-#define                bTxHTShortGI                                    0x80
-#define                bTxHTNumberHT_LTF                       0x300
-#define                bTxHTCRC8                                               0x3fc00
-#define                bCounterReset                                   0x10000
-#define                bNumOfOFDMTx                                    0xffff
-#define                bNumOfCCKTx                                     0xffff0000
-#define                bTxIdleInterval                                 0xffff
-#define                bOFDMService                                    0xffff0000
-#define                bTxMACHeader                                    0xffffffff
-#define                bTxDataInit                                             0xff
-#define                bTxHTMode                                               0x100
-#define                bTxDataType                                     0x30000
-#define                bTxRandomSeed                                   0xffffffff
-#define                bCCKTxPreamble                                  0x1
-#define                bCCKTxSFD                                               0xffff0000
-#define                bCCKTxSIG                                               0xff
-#define                bCCKTxService                                   0xff00
-#define                bCCKLengthExt                                   0x8000
-#define                bCCKTxLength                                    0xffff0000
-#define                bCCKTxCRC16                                     0xffff
-#define                bCCKTxStatus                                    0x1
-#define                bOFDMTxStatus                                   0x2
-
-#define                IS_BB_REG_OFFSET_92S(_Offset)           ((_Offset >= 0x800) && (_Offset <= 0xfff))
-
-// 2. Page8(0x800)
-#define                bRFMOD                                                  0x1     // Reg 0x800 rFPGA0_RFMOD
-#define                bJapanMode                                              0x2
-#define                bCCKTxSC                                                0x30
-#define                bCCKEn                                                  0x1000000
-#define                bOFDMEn                                         0x2000000
-
-#define                bOFDMRxADCPhase                         0x10000 // Useless now
-#define                bOFDMTxDACPhase                         0x40000
-#define                bXATxAGC                                        0x3f
-
-#define                bAntennaSelect                          0x0300
-
-#define                bXBTxAGC                                        0xf00   // Reg 80c rFPGA0_TxGainStage
-#define                bXCTxAGC                                        0xf000
-#define                bXDTxAGC                                        0xf0000
-                       
-#define                bPAStart                                        0xf0000000      // Useless now
-#define                bTRStart                                        0x00f00000
-#define                bRFStart                                        0x0000f000
-#define                bBBStart                                        0x000000f0
-#define                bBBCCKStart                             0x0000000f
-#define                bPAEnd                                          0xf          //Reg0x814
-#define                bTREnd                                          0x0f000000
-#define                bRFEnd                                          0x000f0000
-#define                bCCAMask                                        0x000000f0   //T2R
-#define                bR2RCCAMask                             0x00000f00
-#define                bHSSI_R2TDelay                          0xf8000000
-#define                bHSSI_T2RDelay                          0xf80000
-#define                bContTxHSSI                             0x400     //chane gain at continue Tx
-#define                bIGFromCCK                              0x200
-#define                bAGCAddress                             0x3f
-#define                bRxHPTx                                         0x7000
-#define                bRxHPT2R                                        0x38000
-#define                bRxHPCCKIni                             0xc0000
-#define                bAGCTxCode                              0xc00000
-#define                bAGCRxCode                              0x300000
-
-#define                b3WireDataLength                        0x800   // Reg 0x820~84f rFPGA0_XA_HSSIParameter1
-#define                b3WireAddressLength                     0x400
-
-#define                b3WireRFPowerDown                       0x1     // Useless now
-//#define bHWSISelect                          0x8
-#define                b5GPAPEPolarity                         0x40000000
-#define                b2GPAPEPolarity                         0x80000000
-#define                bRFSW_TxDefaultAnt                      0x3
-#define                bRFSW_TxOptionAnt                       0x30
-#define                bRFSW_RxDefaultAnt                      0x300
-#define                bRFSW_RxOptionAnt                       0x3000
-#define                bRFSI_3WireData                         0x1
-#define                bRFSI_3WireClock                        0x2
-#define                bRFSI_3WireLoad                         0x4
-#define                bRFSI_3WireRW                           0x8
-#define                bRFSI_3Wire                                     0xf
-
-#define                bRFSI_RFENV                             0x10    // Reg 0x870 rFPGA0_XAB_RFInterfaceSW
-
-#define                bRFSI_TRSW                              0x20    // Useless now
-#define                bRFSI_TRSWB                             0x40
-#define                bRFSI_ANTSW                             0x100
-#define                bRFSI_ANTSWB                            0x200
-#define                bRFSI_PAPE                                      0x400
-#define                bRFSI_PAPE5G                            0x800 
-#define                bBandSelect                                     0x1
-#define                bHTSIG2_GI                                      0x80
-#define                bHTSIG2_Smoothing                       0x01
-#define                bHTSIG2_Sounding                        0x02
-#define                bHTSIG2_Aggreaton                       0x08
-#define                bHTSIG2_STBC                            0x30
-#define                bHTSIG2_AdvCoding                       0x40
-#define                bHTSIG2_NumOfHTLTF              0x300
-#define                bHTSIG2_CRC8                            0x3fc
-#define                bHTSIG1_MCS                             0x7f
-#define                bHTSIG1_BandWidth                       0x80
-#define                bHTSIG1_HTLength                        0xffff
-#define                bLSIG_Rate                                      0xf
-#define                bLSIG_Reserved                          0x10
-#define                bLSIG_Length                            0x1fffe
-#define                bLSIG_Parity                                    0x20
-#define                bCCKRxPhase                             0x4
-
-#define                bLSSIReadAddress                        0x7f800000   // T65 RF
-
-#define                bLSSIReadEdge                           0x80000000   //LSSI "Read" edge signal
-
-#define                bLSSIReadBackData                       0xfffff         // T65 RF
-
-#define                bLSSIReadOKFlag                         0x1000  // Useless now
-#define                bCCKSampleRate                          0x8       //0: 44MHz, 1:88MHz                   
-#define                bRegulator0Standby                      0x1
-#define                bRegulatorPLLStandby                    0x2
-#define                bRegulator1Standby                      0x4
-#define                bPLLPowerUp                             0x8
-#define                bDPLLPowerUp                            0x10
-#define                bDA10PowerUp                            0x20
-#define                bAD7PowerUp                             0x200
-#define                bDA6PowerUp                             0x2000
-#define                bXtalPowerUp                            0x4000
-#define                b40MDClkPowerUP                         0x8000
-#define                bDA6DebugMode                           0x20000
-#define                bDA6Swing                                       0x380000
-
-#define                bADClkPhase                             0x4000000       // Reg 0x880 rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ
-
-#define                b80MClkDelay                            0x18000000      // Useless
-#define                bAFEWatchDogEnable                      0x20000000
-
-#define                bXtalCap01                                      0xc0000000      // Reg 0x884 rFPGA0_AnalogParameter2 Crystal cap
-#define                bXtalCap23                                      0x3
-#define                bXtalCap92x                                     0x0f000000
-#define                bXtalCap                                        0x0f000000
-
-#define                bIntDifClkEnable                        0x400   // Useless
-#define                bExtSigClkEnable                        0x800
-#define                bBandgapMbiasPowerUp            0x10000
-#define                bAD11SHGain                             0xc0000
-#define                bAD11InputRange                         0x700000
-#define                bAD11OPCurrent                          0x3800000
-#define                bIPathLoopback                          0x4000000
-#define                bQPathLoopback                          0x8000000
-#define                bAFELoopback                            0x10000000
-#define                bDA10Swing                              0x7e0
-#define                bDA10Reverse                            0x800
-#define                bDAClkSource                            0x1000
-#define                bAD7InputRange                          0x6000
-#define                bAD7Gain                                        0x38000
-#define                bAD7OutputCMMode                        0x40000
-#define                bAD7InputCMMode                         0x380000
-#define                bAD7Current                                     0xc00000
-#define                bRegulatorAdjust                        0x7000000
-#define                bAD11PowerUpAtTx                        0x1
-#define                bDA10PSAtTx                             0x10
-#define                bAD11PowerUpAtRx                        0x100
-#define                bDA10PSAtRx                             0x1000                  
-#define                bCCKRxAGCFormat                         0x200                   
-#define                bPSDFFTSamplepPoint                     0xc000
-#define                bPSDAverageNum                          0x3000
-#define                bIQPathControl                          0xc00
-#define                bPSDFreq                                        0x3ff
-#define                bPSDAntennaPath                         0x30
-#define                bPSDIQSwitch                            0x40
-#define                bPSDRxTrigger                           0x400000
-#define                bPSDTxTrigger                           0x80000000
-#define                bPSDSineToneScale                       0x7f000000
-#define                bPSDReport                                      0xffff
-
-// 3. Page9(0x900)
-#define                bOFDMTxSC                               0x30000000      // Useless
-#define                bCCKTxOn                                        0x1
-#define                bOFDMTxOn                               0x2
-#define                bDebugPage                              0xfff  //reset debug page and also HWord, LWord
-#define                bDebugItem                              0xff   //reset debug page and LWord
-#define                bAntL                                   0x10
-#define                bAntNonHT                                       0x100
-#define                bAntHT1                                 0x1000
-#define                bAntHT2                                         0x10000
-#define                bAntHT1S1                                       0x100000
-#define                bAntNonHTS1                             0x1000000
-
-// 4. PageA(0xA00)
-#define                bCCKBBMode                              0x3     // Useless
-#define                bCCKTxPowerSaving               0x80
-#define                bCCKRxPowerSaving               0x40
-
-#define                bCCKSideBand                    0x10    // Reg 0xa00 rCCK0_System 20/40 switch
-
-#define                bCCKScramble                    0x8     // Useless
-#define                bCCKAntDiversity                0x8000
-#define                bCCKCarrierRecovery             0x4000
-#define                bCCKTxRate                              0x3000
-#define                bCCKDCCancel                    0x0800
-#define                bCCKISICancel                   0x0400
-#define                bCCKMatchFilter                 0x0200
-#define                bCCKEqualizer                   0x0100
-#define                bCCKPreambleDetect              0x800000
-#define                bCCKFastFalseCCA                0x400000
-#define                bCCKChEstStart                  0x300000
-#define                bCCKCCACount                    0x080000
-#define                bCCKcs_lim                              0x070000
-#define                bCCKBistMode                    0x80000000
-#define                bCCKCCAMask                     0x40000000
-#define                bCCKTxDACPhase          0x4
-#define                bCCKRxADCPhase          0x20000000   //r_rx_clk
-#define                bCCKr_cp_mode0          0x0100
-#define                bCCKTxDCOffset                  0xf0
-#define                bCCKRxDCOffset                  0xf
-#define                bCCKCCAMode                     0xc000
-#define                bCCKFalseCS_lim                 0x3f00
-#define                bCCKCS_ratio                    0xc00000
-#define                bCCKCorgBit_sel                 0x300000
-#define                bCCKPD_lim                              0x0f0000
-#define                bCCKNewCCA                      0x80000000
-#define                bCCKRxHPofIG                    0x8000
-#define                bCCKRxIG                                0x7f00
-#define                bCCKLNAPolarity                 0x800000
-#define                bCCKRx1stGain                   0x7f0000
-#define                bCCKRFExtend                    0x20000000 //CCK Rx Iinital gain polarity
-#define                bCCKRxAGCSatLevel               0x1f000000
-#define                bCCKRxAGCSatCount               0xe0
-#define                bCCKRxRFSettle                  0x1f       //AGCsamp_dly
-#define                bCCKFixedRxAGC                  0x8000
-//#define bCCKRxAGCFormat                      0x4000   //remove to HSSI register 0x824
-#define                bCCKAntennaPolarity             0x2000
-#define                bCCKTxFilterType                0x0c00
-#define                bCCKRxAGCReportType     0x0300
-#define                bCCKRxDAGCEn                    0x80000000
-#define                bCCKRxDAGCPeriod                0x20000000
-#define                bCCKRxDAGCSatLevel              0x1f000000
-#define                bCCKTimingRecovery              0x800000
-#define                bCCKTxC0                                0x3f0000
-#define                bCCKTxC1                                0x3f000000
-#define                bCCKTxC2                                0x3f
-#define                bCCKTxC3                                0x3f00
-#define                bCCKTxC4                                0x3f0000
-#define                bCCKTxC5                                0x3f000000
-#define                bCCKTxC6                                0x3f
-#define                bCCKTxC7                                0x3f00
-#define                bCCKDebugPort                   0xff0000
-#define                bCCKDACDebug                    0x0f000000
-#define                bCCKFalseAlarmEnable    0x8000
-#define                bCCKFalseAlarmRead              0x4000
-#define                bCCKTRSSI                               0x7f
-#define                bCCKRxAGCReport         0xfe
-#define                bCCKRxReport_AntSel     0x80000000
-#define                bCCKRxReport_MFOff              0x40000000
-#define                bCCKRxRxReport_SQLoss   0x20000000
-#define                bCCKRxReport_Pktloss    0x10000000
-#define                bCCKRxReport_Lockedbit  0x08000000
-#define                bCCKRxReport_RateError  0x04000000
-#define                bCCKRxReport_RxRate     0x03000000
-#define                bCCKRxFACounterLower    0xff
-#define                bCCKRxFACounterUpper    0xff000000
-#define                bCCKRxHPAGCStart                0xe000
-#define                bCCKRxHPAGCFinal                0x1c00                  
-#define                bCCKRxFalseAlarmEnable  0x8000
-#define                bCCKFACounterFreeze     0x4000                  
-#define                bCCKTxPathSel                   0x10000000
-#define                bCCKDefaultRxPath               0xc000000
-#define                bCCKOptionRxPath                0x3000000
-
-// 5. PageC(0xC00)
-#define                bNumOfSTF                               0x3     // Useless
-#define                bShift_L                                        0xc0
-#define                bGI_TH                                  0xc
-#define                bRxPathA                                0x1
-#define                bRxPathB                                0x2
-#define                bRxPathC                                0x4
-#define                bRxPathD                                0x8
-#define                bTxPathA                                0x1
-#define                bTxPathB                                0x2
-#define                bTxPathC                                0x4
-#define                bTxPathD                                0x8
-#define                bTRSSIFreq                              0x200
-#define                bADCBackoff                             0x3000
-#define                bDFIRBackoff                    0xc000
-#define                bTRSSILatchPhase                0x10000
-#define                bRxIDCOffset                    0xff
-#define                bRxQDCOffset                    0xff00
-#define                bRxDFIRMode                     0x1800000
-#define                bRxDCNFType                     0xe000000
-#define                bRXIQImb_A                              0x3ff
-#define                bRXIQImb_B                              0xfc00
-#define                bRXIQImb_C                              0x3f0000
-#define                bRXIQImb_D                              0xffc00000
-#define                bDC_dc_Notch                    0x60000
-#define                bRxNBINotch                     0x1f000000
-#define                bPD_TH                                  0xf
-#define                bPD_TH_Opt2                     0xc000
-#define                bPWED_TH                                0x700
-#define                bIfMF_Win_L                     0x800
-#define                bPD_Option                              0x1000
-#define                bMF_Win_L                               0xe000
-#define                bBW_Search_L                    0x30000
-#define                bwin_enh_L                              0xc0000
-#define                bBW_TH                                  0x700000
-#define                bED_TH2                         0x3800000
-#define                bBW_option                              0x4000000
-#define                bRatio_TH                               0x18000000
-#define                bWindow_L                               0xe0000000
-#define                bSBD_Option                             0x1
-#define                bFrame_TH                               0x1c
-#define                bFS_Option                              0x60
-#define                bDC_Slope_check         0x80
-#define                bFGuard_Counter_DC_L    0xe00
-#define                bFrame_Weight_Short     0x7000
-#define                bSub_Tune                               0xe00000
-#define                bFrame_DC_Length                0xe000000
-#define                bSBD_start_offset               0x30000000
-#define                bFrame_TH_2                     0x7
-#define                bFrame_GI2_TH                   0x38
-#define                bGI2_Sync_en                    0x40
-#define                bSarch_Short_Early              0x300
-#define                bSarch_Short_Late               0xc00
-#define                bSarch_GI2_Late         0x70000
-#define                bCFOAntSum                              0x1
-#define                bCFOAcc                         0x2
-#define                bCFOStartOffset                 0xc
-#define                bCFOLookBack                    0x70
-#define                bCFOSumWeight                   0x80
-#define                bDAGCEnable                     0x10000
-#define                bTXIQImb_A                              0x3ff
-#define                bTXIQImb_B                              0xfc00
-#define                bTXIQImb_C                              0x3f0000
-#define                bTXIQImb_D                              0xffc00000
-#define                bTxIDCOffset                    0xff
-#define                bTxQDCOffset                    0xff00
-#define                bTxDFIRMode                     0x10000
-#define                bTxPesudoNoiseOn                0x4000000
-#define                bTxPesudoNoise_A                0xff
-#define                bTxPesudoNoise_B                0xff00
-#define                bTxPesudoNoise_C                0xff0000
-#define                bTxPesudoNoise_D                0xff000000
-#define                bCCADropOption                  0x20000
-#define                bCCADropThres                   0xfff00000
-#define                bEDCCA_H                                0xf
-#define                bEDCCA_L                                0xf0
-#define                bLambda_ED                      0x300
-#define                bRxInitialGain                  0x7f
-#define                bRxAntDivEn                             0x80
-#define                bRxAGCAddressForLNA     0x7f00
-#define                bRxHighPowerFlow                0x8000
-#define                bRxAGCFreezeThres               0xc0000
-#define                bRxFreezeStep_AGC1      0x300000
-#define                bRxFreezeStep_AGC2      0xc00000
-#define                bRxFreezeStep_AGC3      0x3000000
-#define                bRxFreezeStep_AGC0      0xc000000
-#define                bRxRssi_Cmp_En                  0x10000000
-#define                bRxQuickAGCEn                   0x20000000
-#define                bRxAGCFreezeThresMode   0x40000000
-#define                bRxOverFlowCheckType    0x80000000
-#define                bRxAGCShift                             0x7f
-#define                bTRSW_Tri_Only                  0x80
-#define                bPowerThres                     0x300
-#define                bRxAGCEn                                0x1
-#define                bRxAGCTogetherEn                0x2
-#define                bRxAGCMin                               0x4
-#define                bRxHP_Ini                               0x7
-#define                bRxHP_TRLNA                     0x70
-#define                bRxHP_RSSI                              0x700
-#define                bRxHP_BBP1                              0x7000
-#define                bRxHP_BBP2                              0x70000
-#define                bRxHP_BBP3                              0x700000
-#define                bRSSI_H                                 0x7f0000     //the threshold for high power
-#define                bRSSI_Gen                               0x7f000000   //the threshold for ant diversity
-#define                bRxSettle_TRSW                  0x7
-#define                bRxSettle_LNA                   0x38
-#define                bRxSettle_RSSI                  0x1c0
-#define                bRxSettle_BBP                   0xe00
-#define                bRxSettle_RxHP                  0x7000
-#define                bRxSettle_AntSW_RSSI    0x38000
-#define                bRxSettle_AntSW         0xc0000
-#define                bRxProcessTime_DAGC     0x300000
-#define                bRxSettle_HSSI                  0x400000
-#define                bRxProcessTime_BBPPW    0x800000
-#define                bRxAntennaPowerShift    0x3000000
-#define                bRSSITableSelect                0xc000000
-#define                bRxHP_Final                             0x7000000
-#define                bRxHTSettle_BBP                 0x7
-#define                bRxHTSettle_HSSI                0x8
-#define                bRxHTSettle_RxHP                0x70
-#define                bRxHTSettle_BBPPW               0x80
-#define                bRxHTSettle_Idle                0x300
-#define                bRxHTSettle_Reserved    0x1c00
-#define                bRxHTRxHPEn                     0x8000
-#define                bRxHTAGCFreezeThres     0x30000
-#define                bRxHTAGCTogetherEn      0x40000
-#define                bRxHTAGCMin                     0x80000
-#define                bRxHTAGCEn                              0x100000
-#define                bRxHTDAGCEn                     0x200000
-#define                bRxHTRxHP_BBP                   0x1c00000
-#define                bRxHTRxHP_Final         0xe0000000
-#define                bRxPWRatioTH                    0x3
-#define                bRxPWRatioEn                    0x4
-#define                bRxMFHold                               0x3800
-#define                bRxPD_Delay_TH1         0x38
-#define                bRxPD_Delay_TH2         0x1c0
-#define                bRxPD_DC_COUNT_MAX      0x600
-//#define bRxMF_Hold               0x3800
-#define                bRxPD_Delay_TH                  0x8000
-#define                bRxProcess_Delay                0xf0000
-#define                bRxSearchrange_GI2_Early        0x700000
-#define                bRxFrame_Guard_Counter_L        0x3800000
-#define                bRxSGI_Guard_L                  0xc000000
-#define                bRxSGI_Search_L         0x30000000
-#define                bRxSGI_TH                               0xc0000000
-#define                bDFSCnt0                                0xff
-#define                bDFSCnt1                                0xff00
-#define                bDFSFlag                                0xf0000                 
-#define                bMFWeightSum                    0x300000
-#define                bMinIdxTH                               0x7f000000                      
-#define                bDAFormat                               0x40000                 
-#define                bTxChEmuEnable          0x01000000                      
-#define                bTRSWIsolation_A                0x7f
-#define                bTRSWIsolation_B                0x7f00
-#define                bTRSWIsolation_C                0x7f0000
-#define                bTRSWIsolation_D                0x7f000000                      
-#define                bExtLNAGain                             0x7c00          
-
-// 6. PageE(0xE00)
-#define                bSTBCEn                         0x4     // Useless
-#define                bAntennaMapping         0x10
-#define                bNss                                    0x20
-#define                bCFOAntSumD                     0x200
-#define                bPHYCounterReset                0x8000000
-#define                bCFOReportGet                   0x4000000
-#define                bOFDMContinueTx         0x10000000
-#define                bOFDMSingleCarrier              0x20000000
-#define                bOFDMSingleTone         0x40000000
-//#define bRxPath1                 0x01
-//#define bRxPath2                 0x02
-//#define bRxPath3                 0x04
-//#define bRxPath4                 0x08
-//#define bTxPath1                 0x10
-//#define bTxPath2                 0x20
-#define                bHTDetect                       0x100
-#define                bCFOEn                          0x10000
-#define                bCFOValue                       0xfff00000
-#define                bSigTone_Re             0x3f
-#define                bSigTone_Im             0x7f00
-#define                bCounter_CCA            0xffff
-#define                bCounter_ParityFail     0xffff0000
-#define                bCounter_RateIllegal            0xffff
-#define                bCounter_CRC8Fail       0xffff0000
-#define                bCounter_MCSNoSupport   0xffff
-#define                bCounter_FastSync       0xffff
-#define                bShortCFO                       0xfff
-#define                bShortCFOTLength        12   //total
-#define                bShortCFOFLength        11   //fraction
-#define                bLongCFO                        0x7ff
-#define                bLongCFOTLength 11
-#define                bLongCFOFLength 11
-#define                bTailCFO                        0x1fff
-#define                bTailCFOTLength         13
-#define                bTailCFOFLength         12                      
-#define                bmax_en_pwdB            0xffff
-#define                bCC_power_dB            0xffff0000
-#define                bnoise_pwdB             0xffff
-#define                bPowerMeasTLength       10
-#define                bPowerMeasFLength       3
-#define                bRx_HT_BW                       0x1
-#define                bRxSC                           0x6
-#define                bRx_HT                          0x8                     
-#define                bNB_intf_det_on         0x1
-#define                bIntf_win_len_cfg       0x30
-#define                bNB_Intf_TH_cfg         0x1c0                   
-#define                bRFGain                         0x3f
-#define                bTableSel                       0x40
-#define                bTRSW                           0x80                    
-#define                bRxSNR_A                        0xff
-#define                bRxSNR_B                        0xff00
-#define                bRxSNR_C                        0xff0000
-#define                bRxSNR_D                        0xff000000
-#define                bSNREVMTLength          8
-#define                bSNREVMFLength          1                       
-#define                bCSI1st                         0xff
-#define                bCSI2nd                         0xff00
-#define                bRxEVM1st                       0xff0000
-#define                bRxEVM2nd                       0xff000000                      
-#define                bSIGEVM                 0xff
-#define                bPWDB                           0xff00
-#define                bSGIEN                          0x10000
-                       
-#define                bSFactorQAM1            0xf     // Useless
-#define                bSFactorQAM2            0xf0
-#define                bSFactorQAM3            0xf00
-#define                bSFactorQAM4            0xf000
-#define                bSFactorQAM5            0xf0000
-#define                bSFactorQAM6            0xf0000
-#define                bSFactorQAM7            0xf00000
-#define                bSFactorQAM8            0xf000000
-#define                bSFactorQAM9            0xf0000000
-#define                bCSIScheme                      0x100000
-                       
-#define                bNoiseLvlTopSet         0x3     // Useless
-#define                bChSmooth                       0x4
-#define                bChSmoothCfg1           0x38
-#define                bChSmoothCfg2           0x1c0
-#define                bChSmoothCfg3           0xe00
-#define                bChSmoothCfg4           0x7000
-#define                bMRCMode                        0x800000
-#define                bTHEVMCfg                       0x7000000
-                       
-#define                bLoopFitType            0x1     // Useless
-#define                bUpdCFO                 0x40
-#define                bUpdCFOOffData          0x80
-#define                bAdvUpdCFO                      0x100
-#define                bAdvTimeCtrl            0x800
-#define                bUpdClko                        0x1000
-#define                bFC                                     0x6000
-#define                bTrackingMode           0x8000
-#define                bPhCmpEnable            0x10000
-#define                bUpdClkoLTF             0x20000
-#define                bComChCFO                       0x40000
-#define                bCSIEstiMode            0x80000
-#define                bAdvUpdEqz                      0x100000
-#define                bUChCfg                         0x7000000
-#define                bUpdEqz                 0x8000000
-
-//Rx Pseduo noise
-#define                bRxPesudoNoiseOn                0x20000000      // Useless
-#define                bRxPesudoNoise_A                0xff
-#define                bRxPesudoNoise_B                0xff00
-#define                bRxPesudoNoise_C                0xff0000
-#define                bRxPesudoNoise_D                0xff000000
-#define                bPesudoNoiseState_A     0xffff
-#define                bPesudoNoiseState_B     0xffff0000
-#define                bPesudoNoiseState_C     0xffff
-#define                bPesudoNoiseState_D     0xffff0000
-
-//7. RF Register
-//Zebra1
-#define                bZebra1_HSSIEnable              0x8             // Useless
-#define                bZebra1_TRxControl              0xc00
-#define                bZebra1_TRxGainSetting  0x07f
-#define                bZebra1_RxCorner                0xc00
-#define                bZebra1_TxChargePump    0x38
-#define                bZebra1_RxChargePump    0x7
-#define                bZebra1_ChannelNum      0xf80
-#define                bZebra1_TxLPFBW         0x400
-#define                bZebra1_RxLPFBW         0x600
-
-//Zebra4
-#define                bRTL8256RegModeCtrl1    0x100   // Useless
-#define                bRTL8256RegModeCtrl0    0x40
-#define                bRTL8256_TxLPFBW                0x18
-#define                bRTL8256_RxLPFBW                0x600
-
-//RTL8258
-#define                bRTL8258_TxLPFBW                0xc     // Useless
-#define                bRTL8258_RxLPFBW                0xc00
-#define                bRTL8258_RSSILPFBW      0xc0
-
-
-//
-// Other Definition
-//
-
-//byte endable for sb_write
-#define                bByte0                          0x1     // Useless
-#define                bByte1                          0x2
-#define                bByte2                          0x4
-#define                bByte3                          0x8
-#define                bWord0                          0x3
-#define                bWord1                          0xc
-#define                bDWord                          0xf
-
-//for PutRegsetting & GetRegSetting BitMask
-#define                bMaskByte0                      0xff    // Reg 0xc50 rOFDM0_XAAGCCore~0xC6f
-#define                bMaskByte1                      0xff00
-#define                bMaskByte2                      0xff0000
-#define                bMaskByte3                      0xff000000
-#define                bMaskHWord              0xffff0000
-#define                bMaskLWord                      0x0000ffff
-#define                bMaskDWord              0xffffffff
-#define                bMaskH3Bytes            0xffffff00
-#define                bMask12Bits                     0xfff
-#define                bMaskH4Bits                     0xf0000000      
-#define                bMaskOFDM_D             0xffc00000
-#define                bMaskCCK                        0x3f3f3f3f
-
-               
-#define                bEnable                 0x1     // Useless
-#define                bDisable                0x0
-                       
-#define                LeftAntenna             0x0     // Useless
-#define                RightAntenna    0x1
-                       
-#define                tCheckTxStatus          500   //500ms // Useless
-#define                tUpdateRxCounter        100   //100ms
-                       
-#define                rateCCK         0       // Useless
-#define                rateOFDM        1
-#define                rateHT          2
-
-//define Register-End
-#define                bPMAC_End                       0x1ff   // Useless
-#define                bFPGAPHY0_End           0x8ff
-#define                bFPGAPHY1_End           0x9ff
-#define                bCCKPHY0_End            0xaff
-#define                bOFDMPHY0_End           0xcff
-#define                bOFDMPHY1_End           0xdff
-
-//define max debug item in each debug page
-//#define bMaxItem_FPGA_PHY0        0x9
-//#define bMaxItem_FPGA_PHY1        0x3
-//#define bMaxItem_PHY_11B          0x16
-//#define bMaxItem_OFDM_PHY0        0x29
-//#define bMaxItem_OFDM_PHY1        0x0
-
-#define                bPMACControl            0x0             // Useless
-#define                bWMACControl            0x1
-#define                bWNICControl            0x2
-                       
-#define                PathA                   0x0     // Useless
-#define                PathB                   0x1
-#define                PathC                   0x2
-#define                PathD                   0x3
-
-/*--------------------------Define Parameters-------------------------------*/
-
-
-#endif //__INC_HAL8192SPHYREG_H
-
index a9b006e2dd815709026a140183f8ab021a2a3c2a..ff444b27545490e11ea26f89a0f6e588879f77b1 100755 (executable)
 #ifndef __INC_HAL8723BPHYREG_H__\r
 #define __INC_HAL8723BPHYREG_H__\r
 \r
 #ifndef __INC_HAL8723BPHYREG_H__\r
 #define __INC_HAL8723BPHYREG_H__\r
 \r
-#include <Hal8192CPhyReg.h>\r
+#define                rSYM_WLBT_PAPE_SEL              0x64\r
+//\r
+// BB-PHY register PMAC 0x100 PHY 0x800 - 0xEFF\r
+// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF\r
+// 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00\r
+// 3. RF register 0x00-2E\r
+// 4. Bit Mask for BB/RF register\r
+// 5. Other defintion for BB/RF R/W\r
+//\r
+\r
+\r
+//\r
+// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF\r
+// 1. Page1(0x100)\r
+//\r
+#define                rPMAC_Reset                                     0x100\r
+#define                rPMAC_TxStart                                   0x104\r
+#define                rPMAC_TxLegacySIG                               0x108\r
+#define                rPMAC_TxHTSIG1                          0x10c\r
+#define                rPMAC_TxHTSIG2                          0x110\r
+#define                rPMAC_PHYDebug                          0x114\r
+#define                rPMAC_TxPacketNum                               0x118\r
+#define                rPMAC_TxIdle                                    0x11c\r
+#define                rPMAC_TxMACHeader0                      0x120\r
+#define                rPMAC_TxMACHeader1                      0x124\r
+#define                rPMAC_TxMACHeader2                      0x128\r
+#define                rPMAC_TxMACHeader3                      0x12c\r
+#define                rPMAC_TxMACHeader4                      0x130\r
+#define                rPMAC_TxMACHeader5                      0x134\r
+#define                rPMAC_TxDataType                                0x138\r
+#define                rPMAC_TxRandomSeed                      0x13c\r
+#define                rPMAC_CCKPLCPPreamble                   0x140\r
+#define                rPMAC_CCKPLCPHeader                     0x144\r
+#define                rPMAC_CCKCRC16                          0x148\r
+#define                rPMAC_OFDMRxCRC32OK                     0x170\r
+#define                rPMAC_OFDMRxCRC32Er                     0x174\r
+#define                rPMAC_OFDMRxParityEr                    0x178\r
+#define                rPMAC_OFDMRxCRC8Er                      0x17c\r
+#define                rPMAC_CCKCRxRC16Er                      0x180\r
+#define                rPMAC_CCKCRxRC32Er                      0x184\r
+#define                rPMAC_CCKCRxRC32OK                      0x188\r
+#define                rPMAC_TxStatus                                  0x18c\r
+\r
+//\r
+// 2. Page2(0x200)\r
+//\r
+// The following two definition are only used for USB interface.\r
+#define                RF_BB_CMD_ADDR                          0x02c0  // RF/BB read/write command address.\r
+#define                RF_BB_CMD_DATA                          0x02c4  // RF/BB read/write command data.\r
+\r
+//\r
+// 3. Page8(0x800)\r
+//\r
+#define                rFPGA0_RFMOD                            0x800   //RF mode & CCK TxSC // RF BW Setting??\r
+\r
+#define                rFPGA0_TxInfo                           0x804   // Status report??\r
+#define                rFPGA0_PSDFunction                      0x808\r
+\r
+#define                rFPGA0_TxGainStage                      0x80c   // Set TX PWR init gain?\r
+\r
+#define                rFPGA0_RFTiming1                        0x810   // Useless now\r
+#define                rFPGA0_RFTiming2                        0x814\r
+\r
+#define                rFPGA0_XA_HSSIParameter1                0x820   // RF 3 wire register\r
+#define                rFPGA0_XA_HSSIParameter2                0x824\r
+#define                rFPGA0_XB_HSSIParameter1                0x828\r
+#define                rFPGA0_XB_HSSIParameter2                0x82c\r
+#define                rTxAGC_B_Rate18_06                              0x830\r
+#define                rTxAGC_B_Rate54_24                              0x834\r
+#define                rTxAGC_B_CCK1_55_Mcs32          0x838\r
+#define                rTxAGC_B_Mcs03_Mcs00                    0x83c\r
+\r
+#define                rTxAGC_B_Mcs07_Mcs04                    0x848\r
+#define                rTxAGC_B_Mcs11_Mcs08                    0x84c\r
+\r
+#define                rFPGA0_XA_LSSIParameter         0x840\r
+#define                rFPGA0_XB_LSSIParameter         0x844\r
+\r
+#define                rFPGA0_RFWakeUpParameter                0x850   // Useless now\r
+#define                rFPGA0_RFSleepUpParameter               0x854\r
+\r
+#define                rFPGA0_XAB_SwitchControl                0x858   // RF Channel switch\r
+#define                rFPGA0_XCD_SwitchControl                0x85c\r
+\r
+#define                rFPGA0_XA_RFInterfaceOE         0x860   // RF Channel switch\r
+#define                rFPGA0_XB_RFInterfaceOE         0x864\r
+\r
+#define                rTxAGC_B_Mcs15_Mcs12                    0x868\r
+#define                rTxAGC_B_CCK11_A_CCK2_11                0x86c\r
+\r
+#define                rFPGA0_XAB_RFInterfaceSW                0x870   // RF Interface Software Control\r
+#define                rFPGA0_XCD_RFInterfaceSW                0x874\r
+\r
+#define                rFPGA0_XAB_RFParameter          0x878   // RF Parameter\r
+#define                rFPGA0_XCD_RFParameter          0x87c\r
+\r
+#define                rFPGA0_AnalogParameter1         0x880   // Crystal cap setting RF-R/W protection for parameter4??\r
+#define                rFPGA0_AnalogParameter2         0x884\r
+#define                rFPGA0_AnalogParameter3         0x888   // Useless now\r
+#define                rFPGA0_AnalogParameter4         0x88c\r
+\r
+#define                rFPGA0_XA_LSSIReadBack          0x8a0   // Tranceiver LSSI Readback\r
+#define                rFPGA0_XB_LSSIReadBack          0x8a4\r
+#define                rFPGA0_XC_LSSIReadBack          0x8a8\r
+#define                rFPGA0_XD_LSSIReadBack          0x8ac\r
+\r
+#define                rFPGA0_PSDReport                                0x8b4   // Useless now\r
+#define                TransceiverA_HSPI_Readback      0x8b8   // Transceiver A HSPI Readback\r
+#define                TransceiverB_HSPI_Readback      0x8bc   // Transceiver B HSPI Readback\r
+#define                rFPGA0_XAB_RFInterfaceRB                0x8e0   // Useless now // RF Interface Readback Value\r
+#define                rFPGA0_XCD_RFInterfaceRB                0x8e4   // Useless now\r
 \r
 \r
-// BB Register Definition\r
 //\r
 // 4. Page9(0x900)\r
 //\r
 //\r
 // 4. Page9(0x900)\r
 //\r
-#define rDPDT_control                          0x92c\r
-#define rfe_ctrl_anta_src                              0x930\r
-#define rS0S1_PathSwitch                       0x948\r
-#define AGC_table_select                               0xb2c\r
+#define        rFPGA1_RFMOD                            0x900   //RF mode & OFDM TxSC // RF BW Setting??\r
+#define        rFPGA1_TxBlock                          0x904   // Useless now\r
+#define        rFPGA1_DebugSelect                      0x908   // Useless now\r
+#define        rFPGA1_TxInfo                           0x90c   // Useless now // Status report??\r
+#define        rDPDT_control                           0x92c\r
+#define        rfe_ctrl_anta_src                               0x930\r
+#define        rS0S1_PathSwitch                        0x948\r
+\r
+//\r
+// 5. PageA(0xA00)\r
+//\r
+// Set Control channel to upper or lower. These settings are required only for 40MHz\r
+#define                rCCK0_System                            0xa00\r
+\r
+#define                rCCK0_AFESetting                        0xa04   // Disable init gain now // Select RX path by RSSI\r
+#define                rCCK0_CCA                                       0xa08   // Disable init gain now // Init gain\r
+\r
+#define                rCCK0_RxAGC1                            0xa0c   //AGC default value, saturation level // Antenna Diversity, RX AGC, LNA Threshold, RX LNA Threshold useless now. Not the same as 90 series\r
+#define                rCCK0_RxAGC2                            0xa10   //AGC & DAGC\r
+\r
+#define                rCCK0_RxHP                                      0xa14\r
+\r
+#define                rCCK0_DSPParameter1             0xa18   //Timing recovery & Channel estimation threshold\r
+#define                rCCK0_DSPParameter2             0xa1c   //SQ threshold\r
+\r
+#define                rCCK0_TxFilter1                         0xa20\r
+#define                rCCK0_TxFilter2                         0xa24\r
+#define                rCCK0_DebugPort                 0xa28   //debug port and Tx filter3\r
+#define                rCCK0_FalseAlarmReport          0xa2c   //0xa2d useless now 0xa30-a4f channel report\r
+#define                rCCK0_TRSSIReport                       0xa50\r
+#define                rCCK0_RxReport                          0xa54  //0xa57\r
+#define                rCCK0_FACounterLower            0xa5c  //0xa5b\r
+#define                rCCK0_FACounterUpper            0xa58  //0xa5c\r
 \r
 //\r
 // PageB(0xB00)\r
 \r
 //\r
 // PageB(0xB00)\r
 #define rPm_Rx1_AntB                                   0xbf0\r
 #define rPm_Rx2_AntB                                   0xbf4\r
 #define rPm_Rx3_AntB                                   0xbf8\r
 #define rPm_Rx1_AntB                                   0xbf0\r
 #define rPm_Rx2_AntB                                   0xbf4\r
 #define rPm_Rx3_AntB                                   0xbf8\r
+//\r
+// 6. PageC(0xC00)\r
+//\r
+#define                rOFDM0_LSTF                             0xc00\r
+\r
+#define                rOFDM0_TRxPathEnable            0xc04\r
+#define                rOFDM0_TRMuxPar                 0xc08\r
+#define                rOFDM0_TRSWIsolation            0xc0c\r
+\r
+#define                rOFDM0_XARxAFE                  0xc10  //RxIQ DC offset, Rx digital filter, DC notch filter\r
+#define                rOFDM0_XARxIQImbalance          0xc14  //RxIQ imblance matrix\r
+#define                rOFDM0_XBRxAFE                          0xc18\r
+#define                rOFDM0_XBRxIQImbalance          0xc1c\r
+#define                rOFDM0_XCRxAFE                          0xc20\r
+#define                rOFDM0_XCRxIQImbalance          0xc24\r
+#define                rOFDM0_XDRxAFE                          0xc28\r
+#define                rOFDM0_XDRxIQImbalance          0xc2c\r
+\r
+#define                rOFDM0_RxDetector1                      0xc30  //PD,BW & SBD    // DM tune init gain\r
+#define                rOFDM0_RxDetector2                      0xc34  //SBD & Fame Sync. \r
+#define                rOFDM0_RxDetector3                      0xc38  //Frame Sync.\r
+#define                rOFDM0_RxDetector4                      0xc3c  //PD, SBD, Frame Sync & Short-GI\r
+\r
+#define                rOFDM0_RxDSP                            0xc40  //Rx Sync Path\r
+#define                rOFDM0_CFOandDAGC               0xc44  //CFO & DAGC\r
+#define                rOFDM0_CCADropThreshold 0xc48 //CCA Drop threshold\r
+#define                rOFDM0_ECCAThreshold            0xc4c // energy CCA\r
+\r
+#define                rOFDM0_XAAGCCore1                       0xc50   // DIG\r
+#define                rOFDM0_XAAGCCore2                       0xc54\r
+#define                rOFDM0_XBAGCCore1                       0xc58\r
+#define                rOFDM0_XBAGCCore2                       0xc5c\r
+#define                rOFDM0_XCAGCCore1                       0xc60\r
+#define                rOFDM0_XCAGCCore2                       0xc64\r
+#define                rOFDM0_XDAGCCore1                       0xc68\r
+#define                rOFDM0_XDAGCCore2                       0xc6c\r
+\r
+#define                rOFDM0_AGCParameter1                    0xc70\r
+#define                rOFDM0_AGCParameter2                    0xc74\r
+#define                rOFDM0_AGCRSSITable                     0xc78\r
+#define                rOFDM0_HTSTFAGC                         0xc7c\r
+\r
+#define                rOFDM0_XATxIQImbalance          0xc80   // TX PWR TRACK and DIG\r
+#define                rOFDM0_XATxAFE                          0xc84\r
+#define                rOFDM0_XBTxIQImbalance          0xc88\r
+#define                rOFDM0_XBTxAFE                          0xc8c\r
+#define                rOFDM0_XCTxIQImbalance          0xc90\r
+#define                rOFDM0_XCTxAFE                                  0xc94\r
+#define                rOFDM0_XDTxIQImbalance          0xc98\r
+#define                rOFDM0_XDTxAFE                          0xc9c\r
+\r
+#define                rOFDM0_RxIQExtAnta                      0xca0\r
+#define                rOFDM0_TxCoeff1                         0xca4\r
+#define                rOFDM0_TxCoeff2                         0xca8\r
+#define                rOFDM0_TxCoeff3                         0xcac\r
+#define                rOFDM0_TxCoeff4                         0xcb0\r
+#define                rOFDM0_TxCoeff5                         0xcb4\r
+#define                rOFDM0_TxCoeff6                         0xcb8\r
+#define                rOFDM0_RxHPParameter                    0xce0\r
+#define                rOFDM0_TxPseudoNoiseWgt         0xce4\r
+#define                rOFDM0_FrameSync                                0xcf0\r
+#define                rOFDM0_DFSReport                                0xcf4\r
+\r
+//\r
+// 7. PageD(0xD00)\r
+//\r
+#define                rOFDM1_LSTF                                     0xd00\r
+#define                rOFDM1_TRxPathEnable                    0xd04\r
+\r
+#define                rOFDM1_CFO                                              0xd08   // No setting now\r
+#define                rOFDM1_CSI1                                     0xd10\r
+#define                rOFDM1_SBD                                              0xd14\r
+#define                rOFDM1_CSI2                                     0xd18\r
+#define                rOFDM1_CFOTracking                      0xd2c\r
+#define                rOFDM1_TRxMesaure1                      0xd34\r
+#define                rOFDM1_IntfDet                                  0xd3c\r
+#define                rOFDM1_PseudoNoiseStateAB               0xd50\r
+#define                rOFDM1_PseudoNoiseStateCD               0xd54\r
+#define                rOFDM1_RxPseudoNoiseWgt         0xd58\r
+\r
+#define                rOFDM_PHYCounter1                               0xda0  //cca, parity fail\r
+#define                rOFDM_PHYCounter2                               0xda4  //rate illegal, crc8 fail\r
+#define                rOFDM_PHYCounter3                               0xda8  //MCS not support\r
+\r
+#define                rOFDM_ShortCFOAB                                0xdac   // No setting now\r
+#define                rOFDM_ShortCFOCD                                0xdb0\r
+#define                rOFDM_LongCFOAB                         0xdb4\r
+#define                rOFDM_LongCFOCD                         0xdb8\r
+#define                rOFDM_TailCFOAB                         0xdbc\r
+#define                rOFDM_TailCFOCD                         0xdc0\r
+#define                rOFDM_PWMeasure1                        0xdc4\r
+#define                rOFDM_PWMeasure2                        0xdc8\r
+#define                rOFDM_BWReport                          0xdcc\r
+#define                rOFDM_AGCReport                         0xdd0\r
+#define                rOFDM_RxSNR                                     0xdd4\r
+#define                rOFDM_RxEVMCSI                          0xdd8\r
+#define                rOFDM_SIGReport                         0xddc\r
+\r
+\r
+//\r
+// 8. PageE(0xE00)\r
+//\r
+#define                rTxAGC_A_Rate18_06                      0xe00\r
+#define                rTxAGC_A_Rate54_24                      0xe04\r
+#define                rTxAGC_A_CCK1_Mcs32                     0xe08\r
+#define                rTxAGC_A_Mcs03_Mcs00                    0xe10\r
+#define                rTxAGC_A_Mcs07_Mcs04                    0xe14\r
+#define                rTxAGC_A_Mcs11_Mcs08                    0xe18\r
+#define                rTxAGC_A_Mcs15_Mcs12                    0xe1c\r
+\r
+#define                rFPGA0_IQK                                      0xe28\r
+#define                rTx_IQK_Tone_A                          0xe30\r
+#define                rRx_IQK_Tone_A                          0xe34\r
+#define                rTx_IQK_PI_A                                    0xe38\r
+#define                rRx_IQK_PI_A                                    0xe3c\r
+\r
+#define                rTx_IQK                                                 0xe40\r
+#define                rRx_IQK                                         0xe44\r
+#define                rIQK_AGC_Pts                                    0xe48\r
+#define                rIQK_AGC_Rsp                                    0xe4c\r
+#define                rTx_IQK_Tone_B                          0xe50\r
+#define                rRx_IQK_Tone_B                          0xe54\r
+#define                rTx_IQK_PI_B                                    0xe58\r
+#define                rRx_IQK_PI_B                                    0xe5c\r
+#define                rIQK_AGC_Cont                           0xe60\r
+\r
+#define                rBlue_Tooth                                     0xe6c\r
+#define                rRx_Wait_CCA                                    0xe70\r
+#define                rTx_CCK_RFON                                    0xe74\r
+#define                rTx_CCK_BBON                            0xe78\r
+#define                rTx_OFDM_RFON                           0xe7c\r
+#define                rTx_OFDM_BBON                           0xe80\r
+#define                rTx_To_Rx                                       0xe84\r
+#define                rTx_To_Tx                                       0xe88\r
+#define                rRx_CCK                                         0xe8c\r
+\r
+#define                rTx_Power_Before_IQK_A          0xe94\r
+#define                rTx_Power_After_IQK_A                   0xe9c\r
+\r
+#define                rRx_Power_Before_IQK_A          0xea0\r
+#define                rRx_Power_Before_IQK_A_2                0xea4\r
+#define                rRx_Power_After_IQK_A                   0xea8\r
+#define                rRx_Power_After_IQK_A_2         0xeac\r
+\r
+#define                rTx_Power_Before_IQK_B          0xeb4\r
+#define                rTx_Power_After_IQK_B                   0xebc\r
+\r
+#define                rRx_Power_Before_IQK_B          0xec0\r
+#define                rRx_Power_Before_IQK_B_2                0xec4\r
+#define                rRx_Power_After_IQK_B                   0xec8\r
+#define                rRx_Power_After_IQK_B_2         0xecc\r
+\r
+#define                rRx_OFDM                                        0xed0\r
+#define                rRx_Wait_RIFS                           0xed4\r
+#define                rRx_TO_Rx                                       0xed8\r
+#define                rStandby                                                0xedc\r
+#define                rSleep                                          0xee0\r
+#define                rPMPD_ANAEN                             0xeec\r
+\r
+//\r
+// 7. RF Register 0x00-0x2E (RF 8256)\r
+//    RF-0222D 0x00-3F\r
+//\r
+//Zebra1\r
+#define                rZebra1_HSSIEnable                              0x0     // Useless now\r
+#define                rZebra1_TRxEnable1                              0x1\r
+#define                rZebra1_TRxEnable2                              0x2\r
+#define                rZebra1_AGC                                     0x4\r
+#define                rZebra1_ChargePump                      0x5\r
+#define                rZebra1_Channel                         0x7     // RF channel switch\r
+\r
+//#endif\r
+#define                rZebra1_TxGain                                  0x8     // Useless now\r
+#define                rZebra1_TxLPF                                   0x9\r
+#define                rZebra1_RxLPF                                   0xb\r
+#define                rZebra1_RxHPFCorner                     0xc\r
+\r
+//Zebra4\r
+#define                rGlobalCtrl                                             0       // Useless now\r
+#define                rRTL8256_TxLPF                                  19\r
+#define                rRTL8256_RxLPF                                  11\r
+\r
+//RTL8258\r
+#define                rRTL8258_TxLPF                                  0x11    // Useless now\r
+#define                rRTL8258_RxLPF                                  0x13\r
+#define                rRTL8258_RSSILPF                                0xa\r
+\r
+//\r
+// RL6052 Register definition\r
+//\r
+#define                RF_AC                                           0x00    // \r
+\r
+#define                RF_IQADJ_G1                             0x01    // \r
+#define                RF_IQADJ_G2                             0x02    // \r
+#define                RF_BS_PA_APSET_G1_G4            0x03\r
+#define                RF_BS_PA_APSET_G5_G8            0x04\r
+#define                RF_POW_TRSW                             0x05    // \r
+\r
+#define                RF_GAIN_RX                                      0x06    // \r
+#define                RF_GAIN_TX                                      0x07    // \r
+\r
+#define                RF_TXM_IDAC                             0x08    // \r
+#define                RF_IPA_G                                        0x09    // \r
+#define                RF_TXBIAS_G                             0x0A\r
+#define                RF_TXPA_AG                                      0x0B\r
+#define                RF_IPA_A                                        0x0C    // \r
+#define                RF_TXBIAS_A                             0x0D\r
+#define                RF_BS_PA_APSET_G9_G11   0x0E\r
+#define                RF_BS_IQGEN                             0x0F    // \r
+\r
+#define                RF_MODE1                                        0x10    // \r
+#define                RF_MODE2                                        0x11    // \r
+\r
+#define                RF_RX_AGC_HP                            0x12    // \r
+#define                RF_TX_AGC                                       0x13    // \r
+#define                RF_BIAS                                         0x14    // \r
+#define                RF_IPA                                          0x15    // \r
+#define                RF_TXBIAS                                       0x16 //\r
+#define                RF_POW_ABILITY                  0x17    // \r
+#define                RF_MODE_AG                              0x18    // \r
+#define                rRfChannel                                      0x18    // RF channel and BW switch\r
+#define                RF_CHNLBW                                       0x18    // RF channel and BW switch\r
+#define                RF_TOP                                          0x19    // \r
+\r
+#define                RF_RX_G1                                        0x1A    // \r
+#define                RF_RX_G2                                        0x1B    // \r
+\r
+#define                RF_RX_BB2                                       0x1C    // \r
+#define                RF_RX_BB1                                       0x1D    // \r
+\r
+#define                RF_RCK1                                 0x1E    // \r
+#define                RF_RCK2                                 0x1F    // \r
+\r
+#define                RF_TX_G1                                        0x20    // \r
+#define                RF_TX_G2                                        0x21    // \r
+#define                RF_TX_G3                                        0x22    // \r
+\r
+#define                RF_TX_BB1                                       0x23    // \r
+\r
+#define                RF_T_METER                                      0x24    // \r
+\r
+#define                RF_SYN_G1                                       0x25    // RF TX Power control\r
+#define                RF_SYN_G2                                       0x26    // RF TX Power control\r
+#define                RF_SYN_G3                                       0x27    // RF TX Power control\r
+#define                RF_SYN_G4                                       0x28    // RF TX Power control\r
+#define                RF_SYN_G5                                       0x29    // RF TX Power control\r
+#define                RF_SYN_G6                                       0x2A    // RF TX Power control\r
+#define                RF_SYN_G7                                       0x2B    // RF TX Power control\r
+#define                RF_SYN_G8                                       0x2C    // RF TX Power control\r
+\r
+#define                RF_RCK_OS                                       0x30    // RF TX PA control\r
+\r
+#define                RF_TXPA_G1                                      0x31    // RF TX PA control\r
+#define                RF_TXPA_G2                                      0x32    // RF TX PA control\r
+#define                RF_TXPA_G3                                      0x33    // RF TX PA control\r
+#define        RF_TX_BIAS_A                            0x35\r
+#define        RF_TX_BIAS_D                            0x36\r
+#define        RF_LOBF_9                                       0x38\r
+#define        RF_RXRF_A3                                      0x3C    //      \r
+#define        RF_TRSW                                         0x3F\r
+\r
+#define        RF_TXRF_A2                                      0x41\r
+#define        RF_TXPA_G4                                      0x46    \r
+#define        RF_TXPA_A4                                      0x4B    \r
+#define        RF_0x52                                         0x52\r
+#define        RF_WE_LUT                                       0xEF    \r
+#define        RF_S0S1                                         0xB0\r
+\r
+//\r
+//Bit Mask\r
+//\r
+// 1. Page1(0x100)\r
+#define                bBBResetB                                               0x100   // Useless now?\r
+#define                bGlobalResetB                                   0x200\r
+#define                bOFDMTxStart                                    0x4\r
+#define                bCCKTxStart                                             0x8\r
+#define                bCRC32Debug                                     0x100\r
+#define                bPMACLoopback                                   0x10\r
+#define                bTxLSIG                                                 0xffffff\r
+#define                bOFDMTxRate                                     0xf\r
+#define                bOFDMTxReserved                         0x10\r
+#define                bOFDMTxLength                                   0x1ffe0\r
+#define                bOFDMTxParity                                   0x20000\r
+#define                bTxHTSIG1                                               0xffffff\r
+#define                bTxHTMCSRate                                    0x7f\r
+#define                bTxHTBW                                         0x80\r
+#define                bTxHTLength                                     0xffff00\r
+#define                bTxHTSIG2                                               0xffffff\r
+#define                bTxHTSmoothing                                  0x1\r
+#define                bTxHTSounding                                   0x2\r
+#define                bTxHTReserved                                   0x4\r
+#define                bTxHTAggreation                         0x8\r
+#define                bTxHTSTBC                                               0x30\r
+#define                bTxHTAdvanceCoding                      0x40\r
+#define                bTxHTShortGI                                    0x80\r
+#define                bTxHTNumberHT_LTF                       0x300\r
+#define                bTxHTCRC8                                               0x3fc00\r
+#define                bCounterReset                                   0x10000\r
+#define                bNumOfOFDMTx                                    0xffff\r
+#define                bNumOfCCKTx                                     0xffff0000\r
+#define                bTxIdleInterval                                 0xffff\r
+#define                bOFDMService                                    0xffff0000\r
+#define                bTxMACHeader                                    0xffffffff\r
+#define                bTxDataInit                                             0xff\r
+#define                bTxHTMode                                               0x100\r
+#define                bTxDataType                                     0x30000\r
+#define                bTxRandomSeed                                   0xffffffff\r
+#define                bCCKTxPreamble                                  0x1\r
+#define                bCCKTxSFD                                               0xffff0000\r
+#define                bCCKTxSIG                                               0xff\r
+#define                bCCKTxService                                   0xff00\r
+#define                bCCKLengthExt                                   0x8000\r
+#define                bCCKTxLength                                    0xffff0000\r
+#define                bCCKTxCRC16                                     0xffff\r
+#define                bCCKTxStatus                                    0x1\r
+#define                bOFDMTxStatus                                   0x2\r
+\r
+#define                IS_BB_REG_OFFSET_92S(_Offset)           ((_Offset >= 0x800) && (_Offset <= 0xfff))\r
+\r
+// 2. Page8(0x800)\r
+#define                bRFMOD                                                  0x1     // Reg 0x800 rFPGA0_RFMOD\r
+#define                bJapanMode                                              0x2\r
+#define                bCCKTxSC                                                0x30\r
+#define                bCCKEn                                                  0x1000000\r
+#define                bOFDMEn                                         0x2000000\r
+\r
+#define                bOFDMRxADCPhase                         0x10000 // Useless now\r
+#define                bOFDMTxDACPhase                         0x40000\r
+#define                bXATxAGC                                        0x3f\r
+\r
+#define                bAntennaSelect                          0x0300\r
+\r
+#define                bXBTxAGC                                        0xf00   // Reg 80c rFPGA0_TxGainStage\r
+#define                bXCTxAGC                                        0xf000\r
+#define                bXDTxAGC                                        0xf0000\r
+                       \r
+#define                bPAStart                                        0xf0000000      // Useless now\r
+#define                bTRStart                                        0x00f00000\r
+#define                bRFStart                                        0x0000f000\r
+#define                bBBStart                                        0x000000f0\r
+#define                bBBCCKStart                             0x0000000f\r
+#define                bPAEnd                                          0xf          //Reg0x814\r
+#define                bTREnd                                          0x0f000000\r
+#define                bRFEnd                                          0x000f0000\r
+#define                bCCAMask                                        0x000000f0   //T2R\r
+#define                bR2RCCAMask                             0x00000f00\r
+#define                bHSSI_R2TDelay                          0xf8000000\r
+#define                bHSSI_T2RDelay                          0xf80000\r
+#define                bContTxHSSI                             0x400     //chane gain at continue Tx\r
+#define                bIGFromCCK                              0x200\r
+#define                bAGCAddress                             0x3f\r
+#define                bRxHPTx                                         0x7000\r
+#define                bRxHPT2R                                        0x38000\r
+#define                bRxHPCCKIni                             0xc0000\r
+#define                bAGCTxCode                              0xc00000\r
+#define                bAGCRxCode                              0x300000\r
+\r
+#define                b3WireDataLength                        0x800   // Reg 0x820~84f rFPGA0_XA_HSSIParameter1\r
+#define                b3WireAddressLength                     0x400\r
+\r
+#define                b3WireRFPowerDown                       0x1     // Useless now\r
+//#define bHWSISelect                          0x8\r
+#define                b5GPAPEPolarity                         0x40000000\r
+#define                b2GPAPEPolarity                         0x80000000\r
+#define                bRFSW_TxDefaultAnt                      0x3\r
+#define                bRFSW_TxOptionAnt                       0x30\r
+#define                bRFSW_RxDefaultAnt                      0x300\r
+#define                bRFSW_RxOptionAnt                       0x3000\r
+#define                bRFSI_3WireData                         0x1\r
+#define                bRFSI_3WireClock                        0x2\r
+#define                bRFSI_3WireLoad                         0x4\r
+#define                bRFSI_3WireRW                           0x8\r
+#define                bRFSI_3Wire                                     0xf\r
+\r
+#define                bRFSI_RFENV                             0x10    // Reg 0x870 rFPGA0_XAB_RFInterfaceSW\r
+\r
+#define                bRFSI_TRSW                              0x20    // Useless now\r
+#define                bRFSI_TRSWB                             0x40\r
+#define                bRFSI_ANTSW                             0x100\r
+#define                bRFSI_ANTSWB                            0x200\r
+#define                bRFSI_PAPE                                      0x400\r
+#define                bRFSI_PAPE5G                            0x800 \r
+#define                bBandSelect                                     0x1\r
+#define                bHTSIG2_GI                                      0x80\r
+#define                bHTSIG2_Smoothing                       0x01\r
+#define                bHTSIG2_Sounding                        0x02\r
+#define                bHTSIG2_Aggreaton                       0x08\r
+#define                bHTSIG2_STBC                            0x30\r
+#define                bHTSIG2_AdvCoding                       0x40\r
+#define                bHTSIG2_NumOfHTLTF              0x300\r
+#define                bHTSIG2_CRC8                            0x3fc\r
+#define                bHTSIG1_MCS                             0x7f\r
+#define                bHTSIG1_BandWidth                       0x80\r
+#define                bHTSIG1_HTLength                        0xffff\r
+#define                bLSIG_Rate                                      0xf\r
+#define                bLSIG_Reserved                          0x10\r
+#define                bLSIG_Length                            0x1fffe\r
+#define                bLSIG_Parity                                    0x20\r
+#define                bCCKRxPhase                             0x4\r
+\r
+#define                bLSSIReadAddress                        0x7f800000   // T65 RF\r
+\r
+#define                bLSSIReadEdge                           0x80000000   //LSSI "Read" edge signal\r
+\r
+#define                bLSSIReadBackData                       0xfffff         // T65 RF\r
+\r
+#define                bLSSIReadOKFlag                         0x1000  // Useless now\r
+#define                bCCKSampleRate                          0x8       //0: 44MHz, 1:88MHz                   \r
+#define                bRegulator0Standby                      0x1\r
+#define                bRegulatorPLLStandby                    0x2\r
+#define                bRegulator1Standby                      0x4\r
+#define                bPLLPowerUp                             0x8\r
+#define                bDPLLPowerUp                            0x10\r
+#define                bDA10PowerUp                            0x20\r
+#define                bAD7PowerUp                             0x200\r
+#define                bDA6PowerUp                             0x2000\r
+#define                bXtalPowerUp                            0x4000\r
+#define                b40MDClkPowerUP                         0x8000\r
+#define                bDA6DebugMode                           0x20000\r
+#define                bDA6Swing                                       0x380000\r
+\r
+#define                bADClkPhase                             0x4000000       // Reg 0x880 rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ\r
+\r
+#define                b80MClkDelay                            0x18000000      // Useless\r
+#define                bAFEWatchDogEnable                      0x20000000\r
+\r
+#define                bXtalCap01                                      0xc0000000      // Reg 0x884 rFPGA0_AnalogParameter2 Crystal cap\r
+#define                bXtalCap23                                      0x3\r
+#define                bXtalCap92x                                     0x0f000000\r
+#define                bXtalCap                                        0x0f000000\r
+\r
+#define                bIntDifClkEnable                        0x400   // Useless\r
+#define                bExtSigClkEnable                        0x800\r
+#define                bBandgapMbiasPowerUp            0x10000\r
+#define                bAD11SHGain                             0xc0000\r
+#define                bAD11InputRange                         0x700000\r
+#define                bAD11OPCurrent                          0x3800000\r
+#define                bIPathLoopback                          0x4000000\r
+#define                bQPathLoopback                          0x8000000\r
+#define                bAFELoopback                            0x10000000\r
+#define                bDA10Swing                              0x7e0\r
+#define                bDA10Reverse                            0x800\r
+#define                bDAClkSource                            0x1000\r
+#define                bAD7InputRange                          0x6000\r
+#define                bAD7Gain                                        0x38000\r
+#define                bAD7OutputCMMode                        0x40000\r
+#define                bAD7InputCMMode                         0x380000\r
+#define                bAD7Current                                     0xc00000\r
+#define                bRegulatorAdjust                        0x7000000\r
+#define                bAD11PowerUpAtTx                        0x1\r
+#define                bDA10PSAtTx                             0x10\r
+#define                bAD11PowerUpAtRx                        0x100\r
+#define                bDA10PSAtRx                             0x1000                  \r
+#define                bCCKRxAGCFormat                         0x200                   \r
+#define                bPSDFFTSamplepPoint                     0xc000\r
+#define                bPSDAverageNum                          0x3000\r
+#define                bIQPathControl                          0xc00\r
+#define                bPSDFreq                                        0x3ff\r
+#define                bPSDAntennaPath                         0x30\r
+#define                bPSDIQSwitch                            0x40\r
+#define                bPSDRxTrigger                           0x400000\r
+#define                bPSDTxTrigger                           0x80000000\r
+#define                bPSDSineToneScale                       0x7f000000\r
+#define                bPSDReport                                      0xffff\r
+\r
+// 3. Page9(0x900)\r
+#define                bOFDMTxSC                               0x30000000      // Useless\r
+#define                bCCKTxOn                                        0x1\r
+#define                bOFDMTxOn                               0x2\r
+#define                bDebugPage                              0xfff  //reset debug page and also HWord, LWord\r
+#define                bDebugItem                              0xff   //reset debug page and LWord\r
+#define                bAntL                                   0x10\r
+#define                bAntNonHT                                       0x100\r
+#define                bAntHT1                                 0x1000\r
+#define                bAntHT2                                         0x10000\r
+#define                bAntHT1S1                                       0x100000\r
+#define                bAntNonHTS1                             0x1000000\r
+\r
+// 4. PageA(0xA00)\r
+#define                bCCKBBMode                              0x3     // Useless\r
+#define                bCCKTxPowerSaving               0x80\r
+#define                bCCKRxPowerSaving               0x40\r
+\r
+#define                bCCKSideBand                    0x10    // Reg 0xa00 rCCK0_System 20/40 switch\r
+\r
+#define                bCCKScramble                    0x8     // Useless\r
+#define                bCCKAntDiversity                0x8000\r
+#define                bCCKCarrierRecovery             0x4000\r
+#define                bCCKTxRate                              0x3000\r
+#define                bCCKDCCancel                    0x0800\r
+#define                bCCKISICancel                   0x0400\r
+#define                bCCKMatchFilter                 0x0200\r
+#define                bCCKEqualizer                   0x0100\r
+#define                bCCKPreambleDetect              0x800000\r
+#define                bCCKFastFalseCCA                0x400000\r
+#define                bCCKChEstStart                  0x300000\r
+#define                bCCKCCACount                    0x080000\r
+#define                bCCKcs_lim                              0x070000\r
+#define                bCCKBistMode                    0x80000000\r
+#define                bCCKCCAMask                     0x40000000\r
+#define                bCCKTxDACPhase          0x4\r
+#define                bCCKRxADCPhase          0x20000000   //r_rx_clk\r
+#define                bCCKr_cp_mode0          0x0100\r
+#define                bCCKTxDCOffset                  0xf0\r
+#define                bCCKRxDCOffset                  0xf\r
+#define                bCCKCCAMode                     0xc000\r
+#define                bCCKFalseCS_lim                 0x3f00\r
+#define                bCCKCS_ratio                    0xc00000\r
+#define                bCCKCorgBit_sel                 0x300000\r
+#define                bCCKPD_lim                              0x0f0000\r
+#define                bCCKNewCCA                      0x80000000\r
+#define                bCCKRxHPofIG                    0x8000\r
+#define                bCCKRxIG                                0x7f00\r
+#define                bCCKLNAPolarity                 0x800000\r
+#define                bCCKRx1stGain                   0x7f0000\r
+#define                bCCKRFExtend                    0x20000000 //CCK Rx Iinital gain polarity\r
+#define                bCCKRxAGCSatLevel               0x1f000000\r
+#define                bCCKRxAGCSatCount               0xe0\r
+#define                bCCKRxRFSettle                  0x1f       //AGCsamp_dly\r
+#define                bCCKFixedRxAGC                  0x8000\r
+//#define bCCKRxAGCFormat                      0x4000   //remove to HSSI register 0x824\r
+#define                bCCKAntennaPolarity             0x2000\r
+#define                bCCKTxFilterType                0x0c00\r
+#define                bCCKRxAGCReportType     0x0300\r
+#define                bCCKRxDAGCEn                    0x80000000\r
+#define                bCCKRxDAGCPeriod                0x20000000\r
+#define                bCCKRxDAGCSatLevel              0x1f000000\r
+#define                bCCKTimingRecovery              0x800000\r
+#define                bCCKTxC0                                0x3f0000\r
+#define                bCCKTxC1                                0x3f000000\r
+#define                bCCKTxC2                                0x3f\r
+#define                bCCKTxC3                                0x3f00\r
+#define                bCCKTxC4                                0x3f0000\r
+#define                bCCKTxC5                                0x3f000000\r
+#define                bCCKTxC6                                0x3f\r
+#define                bCCKTxC7                                0x3f00\r
+#define                bCCKDebugPort                   0xff0000\r
+#define                bCCKDACDebug                    0x0f000000\r
+#define                bCCKFalseAlarmEnable    0x8000\r
+#define                bCCKFalseAlarmRead              0x4000\r
+#define                bCCKTRSSI                               0x7f\r
+#define                bCCKRxAGCReport         0xfe\r
+#define                bCCKRxReport_AntSel     0x80000000\r
+#define                bCCKRxReport_MFOff              0x40000000\r
+#define                bCCKRxRxReport_SQLoss   0x20000000\r
+#define                bCCKRxReport_Pktloss    0x10000000\r
+#define                bCCKRxReport_Lockedbit  0x08000000\r
+#define                bCCKRxReport_RateError  0x04000000\r
+#define                bCCKRxReport_RxRate     0x03000000\r
+#define                bCCKRxFACounterLower    0xff\r
+#define                bCCKRxFACounterUpper    0xff000000\r
+#define                bCCKRxHPAGCStart                0xe000\r
+#define                bCCKRxHPAGCFinal                0x1c00                  \r
+#define                bCCKRxFalseAlarmEnable  0x8000\r
+#define                bCCKFACounterFreeze     0x4000                  \r
+#define                bCCKTxPathSel                   0x10000000\r
+#define                bCCKDefaultRxPath               0xc000000\r
+#define                bCCKOptionRxPath                0x3000000\r
+\r
+// 5. PageC(0xC00)\r
+#define                bNumOfSTF                               0x3     // Useless\r
+#define                bShift_L                                        0xc0\r
+#define                bGI_TH                                  0xc\r
+#define                bRxPathA                                0x1\r
+#define                bRxPathB                                0x2\r
+#define                bRxPathC                                0x4\r
+#define                bRxPathD                                0x8\r
+#define                bTxPathA                                0x1\r
+#define                bTxPathB                                0x2\r
+#define                bTxPathC                                0x4\r
+#define                bTxPathD                                0x8\r
+#define                bTRSSIFreq                              0x200\r
+#define                bADCBackoff                             0x3000\r
+#define                bDFIRBackoff                    0xc000\r
+#define                bTRSSILatchPhase                0x10000\r
+#define                bRxIDCOffset                    0xff\r
+#define                bRxQDCOffset                    0xff00\r
+#define                bRxDFIRMode                     0x1800000\r
+#define                bRxDCNFType                     0xe000000\r
+#define                bRXIQImb_A                              0x3ff\r
+#define                bRXIQImb_B                              0xfc00\r
+#define                bRXIQImb_C                              0x3f0000\r
+#define                bRXIQImb_D                              0xffc00000\r
+#define                bDC_dc_Notch                    0x60000\r
+#define                bRxNBINotch                     0x1f000000\r
+#define                bPD_TH                                  0xf\r
+#define                bPD_TH_Opt2                     0xc000\r
+#define                bPWED_TH                                0x700\r
+#define                bIfMF_Win_L                     0x800\r
+#define                bPD_Option                              0x1000\r
+#define                bMF_Win_L                               0xe000\r
+#define                bBW_Search_L                    0x30000\r
+#define                bwin_enh_L                              0xc0000\r
+#define                bBW_TH                                  0x700000\r
+#define                bED_TH2                         0x3800000\r
+#define                bBW_option                              0x4000000\r
+#define                bRatio_TH                               0x18000000\r
+#define                bWindow_L                               0xe0000000\r
+#define                bSBD_Option                             0x1\r
+#define                bFrame_TH                               0x1c\r
+#define                bFS_Option                              0x60\r
+#define                bDC_Slope_check         0x80\r
+#define                bFGuard_Counter_DC_L    0xe00\r
+#define                bFrame_Weight_Short     0x7000\r
+#define                bSub_Tune                               0xe00000\r
+#define                bFrame_DC_Length                0xe000000\r
+#define                bSBD_start_offset               0x30000000\r
+#define                bFrame_TH_2                     0x7\r
+#define                bFrame_GI2_TH                   0x38\r
+#define                bGI2_Sync_en                    0x40\r
+#define                bSarch_Short_Early              0x300\r
+#define                bSarch_Short_Late               0xc00\r
+#define                bSarch_GI2_Late         0x70000\r
+#define                bCFOAntSum                              0x1\r
+#define                bCFOAcc                         0x2\r
+#define                bCFOStartOffset                 0xc\r
+#define                bCFOLookBack                    0x70\r
+#define                bCFOSumWeight                   0x80\r
+#define                bDAGCEnable                     0x10000\r
+#define                bTXIQImb_A                              0x3ff\r
+#define                bTXIQImb_B                              0xfc00\r
+#define                bTXIQImb_C                              0x3f0000\r
+#define                bTXIQImb_D                              0xffc00000\r
+#define                bTxIDCOffset                    0xff\r
+#define                bTxQDCOffset                    0xff00\r
+#define                bTxDFIRMode                     0x10000\r
+#define                bTxPesudoNoiseOn                0x4000000\r
+#define                bTxPesudoNoise_A                0xff\r
+#define                bTxPesudoNoise_B                0xff00\r
+#define                bTxPesudoNoise_C                0xff0000\r
+#define                bTxPesudoNoise_D                0xff000000\r
+#define                bCCADropOption                  0x20000\r
+#define                bCCADropThres                   0xfff00000\r
+#define                bEDCCA_H                                0xf\r
+#define                bEDCCA_L                                0xf0\r
+#define                bLambda_ED                      0x300\r
+#define                bRxInitialGain                  0x7f\r
+#define                bRxAntDivEn                             0x80\r
+#define                bRxAGCAddressForLNA     0x7f00\r
+#define                bRxHighPowerFlow                0x8000\r
+#define                bRxAGCFreezeThres               0xc0000\r
+#define                bRxFreezeStep_AGC1      0x300000\r
+#define                bRxFreezeStep_AGC2      0xc00000\r
+#define                bRxFreezeStep_AGC3      0x3000000\r
+#define                bRxFreezeStep_AGC0      0xc000000\r
+#define                bRxRssi_Cmp_En                  0x10000000\r
+#define                bRxQuickAGCEn                   0x20000000\r
+#define                bRxAGCFreezeThresMode   0x40000000\r
+#define                bRxOverFlowCheckType    0x80000000\r
+#define                bRxAGCShift                             0x7f\r
+#define                bTRSW_Tri_Only                  0x80\r
+#define                bPowerThres                     0x300\r
+#define                bRxAGCEn                                0x1\r
+#define                bRxAGCTogetherEn                0x2\r
+#define                bRxAGCMin                               0x4\r
+#define                bRxHP_Ini                               0x7\r
+#define                bRxHP_TRLNA                     0x70\r
+#define                bRxHP_RSSI                              0x700\r
+#define                bRxHP_BBP1                              0x7000\r
+#define                bRxHP_BBP2                              0x70000\r
+#define                bRxHP_BBP3                              0x700000\r
+#define                bRSSI_H                                 0x7f0000     //the threshold for high power\r
+#define                bRSSI_Gen                               0x7f000000   //the threshold for ant diversity\r
+#define                bRxSettle_TRSW                  0x7\r
+#define                bRxSettle_LNA                   0x38\r
+#define                bRxSettle_RSSI                  0x1c0\r
+#define                bRxSettle_BBP                   0xe00\r
+#define                bRxSettle_RxHP                  0x7000\r
+#define                bRxSettle_AntSW_RSSI    0x38000\r
+#define                bRxSettle_AntSW         0xc0000\r
+#define                bRxProcessTime_DAGC     0x300000\r
+#define                bRxSettle_HSSI                  0x400000\r
+#define                bRxProcessTime_BBPPW    0x800000\r
+#define                bRxAntennaPowerShift    0x3000000\r
+#define                bRSSITableSelect                0xc000000\r
+#define                bRxHP_Final                             0x7000000\r
+#define                bRxHTSettle_BBP                 0x7\r
+#define                bRxHTSettle_HSSI                0x8\r
+#define                bRxHTSettle_RxHP                0x70\r
+#define                bRxHTSettle_BBPPW               0x80\r
+#define                bRxHTSettle_Idle                0x300\r
+#define                bRxHTSettle_Reserved    0x1c00\r
+#define                bRxHTRxHPEn                     0x8000\r
+#define                bRxHTAGCFreezeThres     0x30000\r
+#define                bRxHTAGCTogetherEn      0x40000\r
+#define                bRxHTAGCMin                     0x80000\r
+#define                bRxHTAGCEn                              0x100000\r
+#define                bRxHTDAGCEn                     0x200000\r
+#define                bRxHTRxHP_BBP                   0x1c00000\r
+#define                bRxHTRxHP_Final         0xe0000000\r
+#define                bRxPWRatioTH                    0x3\r
+#define                bRxPWRatioEn                    0x4\r
+#define                bRxMFHold                               0x3800\r
+#define                bRxPD_Delay_TH1         0x38\r
+#define                bRxPD_Delay_TH2         0x1c0\r
+#define                bRxPD_DC_COUNT_MAX      0x600\r
+//#define bRxMF_Hold               0x3800\r
+#define                bRxPD_Delay_TH                  0x8000\r
+#define                bRxProcess_Delay                0xf0000\r
+#define                bRxSearchrange_GI2_Early        0x700000\r
+#define                bRxFrame_Guard_Counter_L        0x3800000\r
+#define                bRxSGI_Guard_L                  0xc000000\r
+#define                bRxSGI_Search_L         0x30000000\r
+#define                bRxSGI_TH                               0xc0000000\r
+#define                bDFSCnt0                                0xff\r
+#define                bDFSCnt1                                0xff00\r
+#define                bDFSFlag                                0xf0000                 \r
+#define                bMFWeightSum                    0x300000\r
+#define                bMinIdxTH                               0x7f000000                      \r
+#define                bDAFormat                               0x40000                 \r
+#define                bTxChEmuEnable          0x01000000                      \r
+#define                bTRSWIsolation_A                0x7f\r
+#define                bTRSWIsolation_B                0x7f00\r
+#define                bTRSWIsolation_C                0x7f0000\r
+#define                bTRSWIsolation_D                0x7f000000                      \r
+#define                bExtLNAGain                             0x7c00          \r
+\r
+// 6. PageE(0xE00)\r
+#define                bSTBCEn                         0x4     // Useless\r
+#define                bAntennaMapping         0x10\r
+#define                bNss                                    0x20\r
+#define                bCFOAntSumD                     0x200\r
+#define                bPHYCounterReset                0x8000000\r
+#define                bCFOReportGet                   0x4000000\r
+#define                bOFDMContinueTx         0x10000000\r
+#define                bOFDMSingleCarrier              0x20000000\r
+#define                bOFDMSingleTone         0x40000000\r
+//#define bRxPath1                 0x01\r
+//#define bRxPath2                 0x02\r
+//#define bRxPath3                 0x04\r
+//#define bRxPath4                 0x08\r
+//#define bTxPath1                 0x10\r
+//#define bTxPath2                 0x20\r
+#define                bHTDetect                       0x100\r
+#define                bCFOEn                          0x10000\r
+#define                bCFOValue                       0xfff00000\r
+#define                bSigTone_Re             0x3f\r
+#define                bSigTone_Im             0x7f00\r
+#define                bCounter_CCA            0xffff\r
+#define                bCounter_ParityFail     0xffff0000\r
+#define                bCounter_RateIllegal            0xffff\r
+#define                bCounter_CRC8Fail       0xffff0000\r
+#define                bCounter_MCSNoSupport   0xffff\r
+#define                bCounter_FastSync       0xffff\r
+#define                bShortCFO                       0xfff\r
+#define                bShortCFOTLength        12   //total\r
+#define                bShortCFOFLength        11   //fraction\r
+#define                bLongCFO                        0x7ff\r
+#define                bLongCFOTLength 11\r
+#define                bLongCFOFLength 11\r
+#define                bTailCFO                        0x1fff\r
+#define                bTailCFOTLength         13\r
+#define                bTailCFOFLength         12                      \r
+#define                bmax_en_pwdB            0xffff\r
+#define                bCC_power_dB            0xffff0000\r
+#define                bnoise_pwdB             0xffff\r
+#define                bPowerMeasTLength       10\r
+#define                bPowerMeasFLength       3\r
+#define                bRx_HT_BW                       0x1\r
+#define                bRxSC                           0x6\r
+#define                bRx_HT                          0x8                     \r
+#define                bNB_intf_det_on         0x1\r
+#define                bIntf_win_len_cfg       0x30\r
+#define                bNB_Intf_TH_cfg         0x1c0                   \r
+#define                bRFGain                         0x3f\r
+#define                bTableSel                       0x40\r
+#define                bTRSW                           0x80                    \r
+#define                bRxSNR_A                        0xff\r
+#define                bRxSNR_B                        0xff00\r
+#define                bRxSNR_C                        0xff0000\r
+#define                bRxSNR_D                        0xff000000\r
+#define                bSNREVMTLength          8\r
+#define                bSNREVMFLength          1                       \r
+#define                bCSI1st                         0xff\r
+#define                bCSI2nd                         0xff00\r
+#define                bRxEVM1st                       0xff0000\r
+#define                bRxEVM2nd                       0xff000000                      \r
+#define                bSIGEVM                 0xff\r
+#define                bPWDB                           0xff00\r
+#define                bSGIEN                          0x10000\r
+                       \r
+#define                bSFactorQAM1            0xf     // Useless\r
+#define                bSFactorQAM2            0xf0\r
+#define                bSFactorQAM3            0xf00\r
+#define                bSFactorQAM4            0xf000\r
+#define                bSFactorQAM5            0xf0000\r
+#define                bSFactorQAM6            0xf0000\r
+#define                bSFactorQAM7            0xf00000\r
+#define                bSFactorQAM8            0xf000000\r
+#define                bSFactorQAM9            0xf0000000\r
+#define                bCSIScheme                      0x100000\r
+                       \r
+#define                bNoiseLvlTopSet         0x3     // Useless\r
+#define                bChSmooth                       0x4\r
+#define                bChSmoothCfg1           0x38\r
+#define                bChSmoothCfg2           0x1c0\r
+#define                bChSmoothCfg3           0xe00\r
+#define                bChSmoothCfg4           0x7000\r
+#define                bMRCMode                        0x800000\r
+#define                bTHEVMCfg                       0x7000000\r
+                       \r
+#define                bLoopFitType            0x1     // Useless\r
+#define                bUpdCFO                 0x40\r
+#define                bUpdCFOOffData          0x80\r
+#define                bAdvUpdCFO                      0x100\r
+#define                bAdvTimeCtrl            0x800\r
+#define                bUpdClko                        0x1000\r
+#define                bFC                                     0x6000\r
+#define                bTrackingMode           0x8000\r
+#define                bPhCmpEnable            0x10000\r
+#define                bUpdClkoLTF             0x20000\r
+#define                bComChCFO                       0x40000\r
+#define                bCSIEstiMode            0x80000\r
+#define                bAdvUpdEqz                      0x100000\r
+#define                bUChCfg                         0x7000000\r
+#define                bUpdEqz                 0x8000000\r
+\r
+//Rx Pseduo noise\r
+#define                bRxPesudoNoiseOn                0x20000000      // Useless\r
+#define                bRxPesudoNoise_A                0xff\r
+#define                bRxPesudoNoise_B                0xff00\r
+#define                bRxPesudoNoise_C                0xff0000\r
+#define                bRxPesudoNoise_D                0xff000000\r
+#define                bPesudoNoiseState_A     0xffff\r
+#define                bPesudoNoiseState_B     0xffff0000\r
+#define                bPesudoNoiseState_C     0xffff\r
+#define                bPesudoNoiseState_D     0xffff0000\r
+\r
+//7. RF Register\r
+//Zebra1\r
+#define                bZebra1_HSSIEnable              0x8             // Useless\r
+#define                bZebra1_TRxControl              0xc00\r
+#define                bZebra1_TRxGainSetting  0x07f\r
+#define                bZebra1_RxCorner                0xc00\r
+#define                bZebra1_TxChargePump    0x38\r
+#define                bZebra1_RxChargePump    0x7\r
+#define                bZebra1_ChannelNum      0xf80\r
+#define                bZebra1_TxLPFBW         0x400\r
+#define                bZebra1_RxLPFBW         0x600\r
+\r
+//Zebra4\r
+#define                bRTL8256RegModeCtrl1    0x100   // Useless\r
+#define                bRTL8256RegModeCtrl0    0x40\r
+#define                bRTL8256_TxLPFBW                0x18\r
+#define                bRTL8256_RxLPFBW                0x600\r
+\r
+//RTL8258\r
+#define                bRTL8258_TxLPFBW                0xc     // Useless\r
+#define                bRTL8258_RxLPFBW                0xc00\r
+#define                bRTL8258_RSSILPFBW      0xc0\r
+\r
+\r
+//\r
+// Other Definition\r
+//\r
+\r
+//byte endable for sb_write\r
+#define                bByte0                          0x1     // Useless\r
+#define                bByte1                          0x2\r
+#define                bByte2                          0x4\r
+#define                bByte3                          0x8\r
+#define                bWord0                          0x3\r
+#define                bWord1                          0xc\r
+#define                bDWord                          0xf\r
+\r
+//for PutRegsetting & GetRegSetting BitMask\r
+#define                bMaskByte0                      0xff    // Reg 0xc50 rOFDM0_XAAGCCore~0xC6f\r
+#define                bMaskByte1                      0xff00\r
+#define                bMaskByte2                      0xff0000\r
+#define                bMaskByte3                      0xff000000\r
+#define                bMaskHWord              0xffff0000\r
+#define                bMaskLWord                      0x0000ffff\r
+#define                bMaskDWord              0xffffffff\r
+#define                bMaskH3Bytes            0xffffff00\r
+#define                bMask12Bits                     0xfff\r
+#define                bMaskH4Bits                     0xf0000000      \r
+#define                bMaskOFDM_D             0xffc00000\r
+#define                bMaskCCK                        0x3f3f3f3f\r
+\r
+               \r
+#define                bEnable                 0x1     // Useless\r
+#define                bDisable                0x0\r
+                       \r
+#define                LeftAntenna             0x0     // Useless\r
+#define                RightAntenna    0x1\r
+                       \r
+#define                tCheckTxStatus          500   //500ms // Useless\r
+#define                tUpdateRxCounter        100   //100ms\r
+                       \r
+#define                rateCCK         0       // Useless\r
+#define                rateOFDM        1\r
+#define                rateHT          2\r
+\r
+//define Register-End\r
+#define                bPMAC_End                       0x1ff   // Useless\r
+#define                bFPGAPHY0_End           0x8ff\r
+#define                bFPGAPHY1_End           0x9ff\r
+#define                bCCKPHY0_End            0xaff\r
+#define                bOFDMPHY0_End           0xcff\r
+#define                bOFDMPHY1_End           0xdff\r
+\r
+//define max debug item in each debug page\r
+//#define bMaxItem_FPGA_PHY0        0x9\r
+//#define bMaxItem_FPGA_PHY1        0x3\r
+//#define bMaxItem_PHY_11B          0x16\r
+//#define bMaxItem_OFDM_PHY0        0x29\r
+//#define bMaxItem_OFDM_PHY1        0x0\r
+\r
+#define                bPMACControl            0x0             // Useless\r
+#define                bWMACControl            0x1\r
+#define                bWNICControl            0x2\r
+                       \r
+#define                PathA                   0x0     // Useless\r
+#define                PathB                   0x1\r
+#define                PathC                   0x2\r
+#define                PathD                   0x3\r
 \r
 #endif\r
 \r
 \r
 #endif\r
 \r
index ce30c4a3027d4f97cf3014b90ff9602333e2c560..0e94ed2f2dadd7517f83e8972cd3d81183e02b8a 100755 (executable)
@@ -36,6 +36,7 @@ typedef enum tag_HAL_IC_Type_Definition
        CHIP_8821       =       7,
        CHIP_8723B      =       8,
        CHIP_8192E      =       9,
        CHIP_8821       =       7,
        CHIP_8723B      =       8,
        CHIP_8192E      =       9,
+       CHIP_8814A      =       10,
 }HAL_IC_TYPE_E;
 
 //HAL_CHIP_TYPE_E
 }HAL_IC_TYPE_E;
 
 //HAL_CHIP_TYPE_E
@@ -109,13 +110,17 @@ typedef   struct tag_HAL_VERSION
 //HAL_VERSION VersionID
 
 // HAL_IC_TYPE_E
 //HAL_VERSION VersionID
 
 // HAL_IC_TYPE_E
+#if 0
 #define IS_81XXC(version)                              (((GET_CVID_IC_TYPE(version) == CHIP_8192C)||(GET_CVID_IC_TYPE(version) == CHIP_8188C))? TRUE : FALSE)
 #define IS_8723_SERIES(version)                        ((GET_CVID_IC_TYPE(version) == CHIP_8723A)? TRUE : FALSE)
 #define IS_92D(version)                                        ((GET_CVID_IC_TYPE(version) == CHIP_8192D)? TRUE : FALSE)
 #define IS_81XXC(version)                              (((GET_CVID_IC_TYPE(version) == CHIP_8192C)||(GET_CVID_IC_TYPE(version) == CHIP_8188C))? TRUE : FALSE)
 #define IS_8723_SERIES(version)                        ((GET_CVID_IC_TYPE(version) == CHIP_8723A)? TRUE : FALSE)
 #define IS_92D(version)                                        ((GET_CVID_IC_TYPE(version) == CHIP_8192D)? TRUE : FALSE)
+#endif
+
 #define IS_8188E(version)                                      ((GET_CVID_IC_TYPE(version) == CHIP_8188E)? TRUE : FALSE)
 #define IS_8192E(version)                                      ((GET_CVID_IC_TYPE(version) == CHIP_8192E)? TRUE : FALSE)
 #define IS_8812_SERIES(version)                        ((GET_CVID_IC_TYPE(version) == CHIP_8812)? TRUE : FALSE)
 #define IS_8821_SERIES(version)                        ((GET_CVID_IC_TYPE(version) == CHIP_8821)? TRUE : FALSE)
 #define IS_8188E(version)                                      ((GET_CVID_IC_TYPE(version) == CHIP_8188E)? TRUE : FALSE)
 #define IS_8192E(version)                                      ((GET_CVID_IC_TYPE(version) == CHIP_8192E)? TRUE : FALSE)
 #define IS_8812_SERIES(version)                        ((GET_CVID_IC_TYPE(version) == CHIP_8812)? TRUE : FALSE)
 #define IS_8821_SERIES(version)                        ((GET_CVID_IC_TYPE(version) == CHIP_8821)? TRUE : FALSE)
+#define IS_8814A_SERIES(version)                       ((GET_CVID_IC_TYPE(version) == CHIP_8814A) ? TRUE : FALSE)
 #define IS_8723B_SERIES(version)                       ((GET_CVID_IC_TYPE(version) == CHIP_8723B)? TRUE : FALSE)
 
 
 #define IS_8723B_SERIES(version)                       ((GET_CVID_IC_TYPE(version) == CHIP_8723B)? TRUE : FALSE)
 
 
@@ -129,6 +134,7 @@ typedef     struct tag_HAL_VERSION
 #define IS_C_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == C_CUT_VERSION) ? TRUE : FALSE)
 #define IS_D_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == D_CUT_VERSION) ? TRUE : FALSE)
 #define IS_E_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == E_CUT_VERSION) ? TRUE : FALSE)
 #define IS_C_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == C_CUT_VERSION) ? TRUE : FALSE)
 #define IS_D_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == D_CUT_VERSION) ? TRUE : FALSE)
 #define IS_E_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == E_CUT_VERSION) ? TRUE : FALSE)
+#define IS_F_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == F_CUT_VERSION) ? TRUE : FALSE)
 #define IS_I_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == I_CUT_VERSION) ? TRUE : FALSE)
 #define IS_J_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == J_CUT_VERSION) ? TRUE : FALSE)
 #define IS_K_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == K_CUT_VERSION) ? TRUE : FALSE)
 #define IS_I_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == I_CUT_VERSION) ? TRUE : FALSE)
 #define IS_J_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == J_CUT_VERSION) ? TRUE : FALSE)
 #define IS_K_CUT(version)                              ((GET_CVID_CUT_VERSION(version) == K_CUT_VERSION) ? TRUE : FALSE)
@@ -142,11 +148,16 @@ typedef   struct tag_HAL_VERSION
 #define IS_1T1R(version)                                       ((GET_CVID_RF_TYPE(version) == RF_TYPE_1T1R)? TRUE : FALSE )
 #define IS_1T2R(version)                                       ((GET_CVID_RF_TYPE(version) == RF_TYPE_1T2R)? TRUE : FALSE)
 #define IS_2T2R(version)                                       ((GET_CVID_RF_TYPE(version) == RF_TYPE_2T2R)? TRUE : FALSE)
 #define IS_1T1R(version)                                       ((GET_CVID_RF_TYPE(version) == RF_TYPE_1T1R)? TRUE : FALSE )
 #define IS_1T2R(version)                                       ((GET_CVID_RF_TYPE(version) == RF_TYPE_1T2R)? TRUE : FALSE)
 #define IS_2T2R(version)                                       ((GET_CVID_RF_TYPE(version) == RF_TYPE_2T2R)? TRUE : FALSE)
+#define IS_3T3R(version)                                       ((GET_CVID_RF_TYPE(version) == RF_TYPE_3T3R)? TRUE : FALSE)
+#define IS_3T4R(version)                                       ((GET_CVID_RF_TYPE(version) == RF_TYPE_3T4R)? TRUE : FALSE)
+#define IS_4T4R(version)                                       ((GET_CVID_RF_TYPE(version) == RF_TYPE_4T4R)? TRUE : FALSE)
+
 
 
 //----------------------------------------------------------------------------
 //Chip version Macro. --
 //----------------------------------------------------------------------------
 
 
 //----------------------------------------------------------------------------
 //Chip version Macro. --
 //----------------------------------------------------------------------------
+#if 0
 #define IS_81XXC_TEST_CHIP(version)            ((IS_81XXC(version) && (!IS_NORMAL_CHIP(version)))? TRUE: FALSE)
 
 #define IS_92C_SERIAL(version)                                         ((IS_81XXC(version) && IS_2T2R(version)) ? TRUE : FALSE)
 #define IS_81XXC_TEST_CHIP(version)            ((IS_81XXC(version) && (!IS_NORMAL_CHIP(version)))? TRUE: FALSE)
 
 #define IS_92C_SERIAL(version)                                         ((IS_81XXC(version) && IS_2T2R(version)) ? TRUE : FALSE)
@@ -163,6 +174,7 @@ typedef     struct tag_HAL_VERSION
 
 #define IS_8723A_A_CUT(version)                                ((IS_8723_SERIES(version)) ? ( IS_A_CUT(version)?TRUE : FALSE) : FALSE)
 #define IS_8723A_B_CUT(version)                                ((IS_8723_SERIES(version)) ? ( IS_B_CUT(version)?TRUE : FALSE) : FALSE)
 
 #define IS_8723A_A_CUT(version)                                ((IS_8723_SERIES(version)) ? ( IS_A_CUT(version)?TRUE : FALSE) : FALSE)
 #define IS_8723A_B_CUT(version)                                ((IS_8723_SERIES(version)) ? ( IS_B_CUT(version)?TRUE : FALSE) : FALSE)
+#endif
 
 #define IS_VENDOR_8188E_I_CUT_SERIES(_Adapter)         ((IS_8188E(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >= I_CUT_VERSION) ? TRUE : FALSE) : FALSE)
 
 
 #define IS_VENDOR_8188E_I_CUT_SERIES(_Adapter)         ((IS_8188E(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >= I_CUT_VERSION) ? TRUE : FALSE) : FALSE)
 
index a99eae1d11ef78504dde2e057e88ee5c4a2364ba..b858573725bb5ed1772d8897a76f2aa853a9888b 100755 (executable)
@@ -61,7 +61,6 @@
                #define CONFIG_HOSTAPD_MLME
        #endif
        //#define CONFIG_FIND_BEST_CHANNEL
                #define CONFIG_HOSTAPD_MLME
        #endif
        //#define CONFIG_FIND_BEST_CHANNEL
-       //#define CONFIG_NO_WIRELESS_HANDLERS
        #define CONFIG_TX_MCAST2UNI     // Support IP multicast->unicast
 
        //#define CONFIG_AUTO_AP_MODE
        #define CONFIG_TX_MCAST2UNI     // Support IP multicast->unicast
 
        //#define CONFIG_AUTO_AP_MODE
@@ -73,9 +72,8 @@
        //The CONFIG_WFD is for supporting the Wi-Fi display
        #define CONFIG_WFD
 
        //The CONFIG_WFD is for supporting the Wi-Fi display
        #define CONFIG_WFD
 
-       #ifndef CONFIG_WIFI_TEST
-               #define CONFIG_P2P_REMOVE_GROUP_INFO
-       #endif
+       #define CONFIG_P2P_REMOVE_GROUP_INFO
+
        //#define CONFIG_DBG_P2P
        #define CONFIG_P2P_PS
        //#define CONFIG_P2P_IPS
        //#define CONFIG_DBG_P2P
        #define CONFIG_P2P_PS
        //#define CONFIG_P2P_IPS
 #endif
 
 // Added by Kurt 20110511
 #endif
 
 // Added by Kurt 20110511
-//#define CONFIG_TDLS
 #ifdef CONFIG_TDLS
 #ifdef CONFIG_TDLS
+       #define CONFIG_TDLS_DRIVER_SETUP
 //     #ifndef CONFIG_WFD
 //             #define CONFIG_WFD
 //     #endif
 //     #define CONFIG_TDLS_AUTOSETUP
 //     #ifndef CONFIG_WFD
 //             #define CONFIG_WFD
 //     #endif
 //     #define CONFIG_TDLS_AUTOSETUP
-//     #define CONFIG_TDLS_AUTOCHECKALIVE
+       #define CONFIG_TDLS_AUTOCHECKALIVE
+       #define CONFIG_TDLS_CH_SW               /* Enable "CONFIG_TDLS_CH_SW" by default, however limit it to only work in wifi logo test mode but not in normal mode currently */
 #endif
 
 //#define CONFIG_CONCURRENT_MODE       // Set from Makefile
 #endif
 
 //#define CONFIG_CONCURRENT_MODE       // Set from Makefile
 
 #define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable, */
 
 
 #define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable, */
 
-//#define CONFIG_IOL
-#ifdef CONFIG_IOL
-       #define CONFIG_IOL_READ_EFUSE_MAP
-       //#define DBG_IOL_READ_EFUSE_MAP
-       #define CONFIG_IOL_LLT
-#endif
-
-
 /*
  * Interface Related Config
  */
 #define CONFIG_USB_TX_AGGREGATION
 /*
  * Interface Related Config
  */
 #define CONFIG_USB_TX_AGGREGATION
-//#define CONFIG_USB_RX_AGGREGATION
+#define CONFIG_USB_RX_AGGREGATION
 
 #define USB_INTERFERENCE_ISSUE // this should be checked in all usb interface
 
 
 #define USB_INTERFERENCE_ISSUE // this should be checked in all usb interface
 
  */
 #define CONFIG_SKB_COPY        //for amsdu
 
  */
 #define CONFIG_SKB_COPY        //for amsdu
 
-#define CONFIG_PREALLOC_RECV_SKB
-
 //#define CONFIG_EASY_REPLACEMENT
 
 //#define CONFIG_ADAPTOR_INFO_CACHING_FILE // now just applied on 8192cu only, should make it general...
 //#define CONFIG_EASY_REPLACEMENT
 
 //#define CONFIG_ADAPTOR_INFO_CACHING_FILE // now just applied on 8192cu only, should make it general...
 #define CONFIG_LONG_DELAY_ISSUE
 #define CONFIG_ATTEMPT_TO_FIX_AP_BEACON_ERROR
 
 #define CONFIG_LONG_DELAY_ISSUE
 #define CONFIG_ATTEMPT_TO_FIX_AP_BEACON_ERROR
 
-// Android L(5.0) support
-#define CONFIG_RADIO_WORK
-
 
 /*
  * Auto Config Section
 
 /*
  * Auto Config Section
        #ifndef WAKEUP_GPIO_IDX
                #define WAKEUP_GPIO_IDX 14      // WIFI Chip Side
        #endif // !WAKEUP_GPIO_IDX
        #ifndef WAKEUP_GPIO_IDX
                #define WAKEUP_GPIO_IDX 14      // WIFI Chip Side
        #endif // !WAKEUP_GPIO_IDX
-       #define CONFIG_GPIO_WAKEUP_LOW_ACTIVE   // mark this for HIGH active
 #endif // CONFIG_GPIO_WAKEUP
 
 #ifdef CONFIG_AP_MODE
 #endif // CONFIG_GPIO_WAKEUP
 
 #ifdef CONFIG_AP_MODE
 #endif // CONFIG_AP_MODE
 
 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
 #endif // CONFIG_AP_MODE
 
 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
-       #undef CONFIG_PREALLOC_RECV_SKB
+
 #else
 #else
+       #define CONFIG_PREALLOC_RECV_SKB
        #ifdef CONFIG_PREALLOC_RECV_SKB
        #ifdef CONFIG_PREALLOC_RECV_SKB
-//             #define CONFIG_FIX_NR_BULKIN_BUFFER     // only use USB prealloc_recv_buffer, no use alloc_skb()
+               //#define CONFIG_FIX_NR_BULKIN_BUFFER /* only use PREALLOC_RECV_SKB buffer, don't alloc skb at runtime */
        #endif
 #endif
 
        #endif
 #endif
 
  */
 
 #define TESTCHIP_SUPPORT                               0
  */
 
 #define TESTCHIP_SUPPORT                               0
-
-#define RTL8192CE_SUPPORT                              0
-#define RTL8192CU_SUPPORT                              0
-#define RTL8192C_SUPPORT                               (RTL8192CE_SUPPORT|RTL8192CU_SUPPORT)
-
-#define RTL8192DE_SUPPORT                              0
-#define RTL8192DU_SUPPORT                              0
-#define RTL8192D_SUPPORT                               (RTL8192DE_SUPPORT|RTL8192DU_SUPPORT)
-
-#define RTL8723AS_SUPPORT                              0
-#define RTL8723AU_SUPPORT                              0
-#define RTL8723AE_SUPPORT                              0
-#define RTL8723A_SUPPORT                               (RTL8723AU_SUPPORT|RTL8723AS_SUPPORT|RTL8723AE_SUPPORT)
-#define RTL8723_FPGA_VERIFICATION              0
-
 #define RTL8188E_SUPPORT                               0
 #define RTL8812A_SUPPORT                               0
 #define RTL8821A_SUPPORT                               0
 #define RTL8188E_SUPPORT                               0
 #define RTL8812A_SUPPORT                               0
 #define RTL8821A_SUPPORT                               0
index 28ba763ba5a2524e675757f819e5d5c5c02a8713..6f98c1af231da0aea60e016d2592a4f71d35ce4d 100755 (executable)
@@ -76,7 +76,7 @@
 
 
 #ifdef PLATFORM_LINUX
 
 
 #ifdef PLATFORM_LINUX
-
+       #include <linux/version.h>
        #include <linux/types.h>
        #define IN
        #define OUT
        #include <linux/types.h>
        #define IN
        #define OUT
        #define UINT u32
        #define ULONG u32       
 
        #define UINT u32
        #define ULONG u32       
 
+       #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19))
+               typedef _Bool bool;
+       #endif
+
        typedef void (*proc_t)(void*);
 
        typedef         __kernel_size_t SIZE_T; 
        typedef void (*proc_t)(void*);
 
        typedef         __kernel_size_t SIZE_T; 
        ( \
                LE_P2BYTE_TO_HOST_2BYTE(__pStart) \
                & \
        ( \
                LE_P2BYTE_TO_HOST_2BYTE(__pStart) \
                & \
-               ( ~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \
+               (u16)(~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen))\
        )
 
 #define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \
        )
 
 #define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \
        ( \
                LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
                & \
        ( \
                LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
                & \
-               ( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \
+               (u8)(~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen))\
        )
 
 #define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \
        )
 
 #define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \
        )
 
 #define SET_BITS_TO_LE_1BYTE_8BIT(__pStart, __BitOffset, __BitLen, __Value) \
        )
 
 #define SET_BITS_TO_LE_1BYTE_8BIT(__pStart, __BitOffset, __BitLen, __Value) \
-{ \
+do { \
        *((u8 *)(__pStart)) = \
                EF1Byte( \
                        LE_BITS_CLEARED_TO_1BYTE_8BIT(__pStart, __BitOffset, __BitLen) \
                        | \
                        ((u8)__Value) \
                ); \
        *((u8 *)(__pStart)) = \
                EF1Byte( \
                        LE_BITS_CLEARED_TO_1BYTE_8BIT(__pStart, __BitOffset, __BitLen) \
                        | \
                        ((u8)__Value) \
                ); \
-}
+} while (0)
 
 // Get the N-bytes aligment offset from the current length
 #define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment))
 
 // Get the N-bytes aligment offset from the current length
 #define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment))
index b93d60db9449ffedbdb5d88edecde659a9152f38..944834b3b38bb69784f769fe98f1c5316d50a448 100755 (executable)
        #define CONFIG_RTW_ADAPTIVITY_MODE 0
 #endif
 
        #define CONFIG_RTW_ADAPTIVITY_MODE 0
 #endif
 
-#ifndef CONFIG_RTW_NHM_EN
-       #define CONFIG_RTW_NHM_EN 0
+#ifndef CONFIG_RTW_ADAPTIVITY_DML
+       #define CONFIG_RTW_ADAPTIVITY_DML 0
+#endif
+
+#ifndef CONFIG_RTW_ADAPTIVITY_DC_BACKOFF
+       #define CONFIG_RTW_ADAPTIVITY_DC_BACKOFF 2
 #endif
 
 #ifndef CONFIG_RTW_AMPLIFIER_TYPE_2G
 #endif
 
 #ifndef CONFIG_RTW_AMPLIFIER_TYPE_2G
 #define MACID_NUM_SW_LIMIT 32
 #define CAM_ENTRY_NUM_SW_LIMIT 32
 
 #define MACID_NUM_SW_LIMIT 32
 #define CAM_ENTRY_NUM_SW_LIMIT 32
 
+/*#define CONFIG_WEXT_DONT_JOIN_BYSSID */
 //#include <rtl871x_byteorder.h>
 
 #endif // __DRV_CONF_H__
 //#include <rtl871x_byteorder.h>
 
 #endif // __DRV_CONF_H__
index ea6ce92aff08014a17697f6f3ad2663db095be80..352a84df789a0863858399a11599961ac281947d 100755 (executable)
@@ -153,6 +153,10 @@ typedef struct _ADAPTER _adapter, ADAPTER,*PADAPTER;
 
 #include <rtw_android.h>
 
 
 #include <rtw_android.h>
 
+#ifdef CONFIG_BT_COEXIST
+#include <rtw_btcoex.h>
+#endif // CONFIG_BT_COEXIST
+
 #define SPEC_DEV_ID_NONE BIT(0)
 #define SPEC_DEV_ID_DISABLE_HT BIT(1)
 #define SPEC_DEV_ID_ENABLE_PS BIT(2)
 #define SPEC_DEV_ID_NONE BIT(0)
 #define SPEC_DEV_ID_DISABLE_HT BIT(1)
 #define SPEC_DEV_ID_ENABLE_PS BIT(2)
@@ -263,6 +267,8 @@ struct registry_priv
 
        u8      antdiv_cfg;
        u8      antdiv_type;
 
        u8      antdiv_cfg;
        u8      antdiv_type;
+       
+       u8      switch_usb3;
 
        u8      usbss_enable;//0:disable,1:enable
        u8      hwpdn_mode;//0:disable,1:enable,2:decide by EFUSE config
 
        u8      usbss_enable;//0:disable,1:enable
        u8      hwpdn_mode;//0:disable,1:enable,2:decide by EFUSE config
@@ -282,10 +288,6 @@ struct registry_priv
        u8 fw_iol; //enable iol without other concern
 #endif
 
        u8 fw_iol; //enable iol without other concern
 #endif
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       u8      dmsp;//0:disable,1:enable
-#endif
-
 #ifdef CONFIG_80211D
        u8 enable80211d;
 #endif
 #ifdef CONFIG_80211D
        u8 enable80211d;
 #endif
@@ -312,7 +314,8 @@ struct registry_priv
        u8      bEn_RFE;
        u8      RFE_Type;
        u8  check_fw_ps;
        u8      bEn_RFE;
        u8      RFE_Type;
        u8  check_fw_ps;
-
+       u8      RegRfKFreeEnable;
+       
 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
        u8      load_phy_file;
        u8      RegDecryptCustomFile;
 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
        u8      load_phy_file;
        u8      RegDecryptCustomFile;
@@ -326,7 +329,10 @@ struct registry_priv
        u8 hiq_filter;
        u8 adaptivity_en;
        u8 adaptivity_mode;
        u8 hiq_filter;
        u8 adaptivity_en;
        u8 adaptivity_mode;
-       u8 nhm_en;
+       u8 adaptivity_dml;
+       u8 adaptivity_dc_backoff;
+       u8 boffefusemask;
+       BOOLEAN bFileMaskEfuse;
 };
 
 
 };
 
 
@@ -543,6 +549,7 @@ struct debug_priv {
        u64 dbg_rx_ampdu_loss_count;
        u64 dbg_rx_dup_mgt_frame_drop_count;
        u64 dbg_rx_ampdu_window_shift_cnt;
        u64 dbg_rx_ampdu_loss_count;
        u64 dbg_rx_dup_mgt_frame_drop_count;
        u64 dbg_rx_ampdu_window_shift_cnt;
+       u64 dbg_rx_conflic_mac_addr_cnt;
 };
 
 struct rtw_traffic_statistics {
 };
 
 struct rtw_traffic_statistics {
@@ -851,8 +858,8 @@ struct _ADAPTER{
        struct  sta_priv        stapriv;
        struct  security_priv   securitypriv;
        _lock   security_key_mutex; // add for CONFIG_IEEE80211W, none 11w also can use
        struct  sta_priv        stapriv;
        struct  security_priv   securitypriv;
        _lock   security_key_mutex; // add for CONFIG_IEEE80211W, none 11w also can use
-       struct  registry_priv   registrypriv;
-       struct  eeprom_priv eeprompriv;
+       struct  registry_priv   registrypriv;   
+
        struct  led_priv        ledpriv;
 
 #ifdef CONFIG_MP_INCLUDED
        struct  led_priv        ledpriv;
 
 #ifdef CONFIG_MP_INCLUDED
@@ -891,6 +898,12 @@ struct _ADAPTER{
        struct wifi_display_info wfd_info;
 #endif //CONFIG_WFD
 
        struct wifi_display_info wfd_info;
 #endif //CONFIG_WFD
 
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+       struct bt_coex_info coex_info;
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
+       
+       ERROR_CODE              LastError; /* <20130613, Kordan> Only the functions associated with MP records the error code by now. */
+       
        PVOID                   HalData;
        u32 hal_data_sz;
        struct hal_ops  HalFunc;
        PVOID                   HalData;
        u32 hal_data_sz;
        struct hal_ops  HalFunc;
@@ -909,6 +922,11 @@ struct _ADAPTER{
        u8      bHaltInProgress;
 #ifdef CONFIG_GPIO_API 
        u8      pre_gpio_pin;
        u8      bHaltInProgress;
 #ifdef CONFIG_GPIO_API 
        u8      pre_gpio_pin;
+       struct gpio_int_priv {
+               u8 interrupt_mode;
+               u8 interrupt_enable_mask;
+               void (*callback[8])(u8 level);
+       }gpiointpriv;
 #endif 
        _thread_hdl_ cmdThread;
        _thread_hdl_ evtThread;
 #endif 
        _thread_hdl_ cmdThread;
        _thread_hdl_ evtThread;
@@ -970,6 +988,7 @@ struct _ADAPTER{
        int bup;
        _lock glock;
 #endif //PLATFORM_FREEBSD
        int bup;
        _lock glock;
 #endif //PLATFORM_FREEBSD
+       u8 mac_addr[ETH_ALEN];
        int net_closed;
        
        u8 netif_up;
        int net_closed;
        
        u8 netif_up;
@@ -998,7 +1017,7 @@ struct _ADAPTER{
        //for PRIMARY_ADAPTER(IFACE_ID0) can directly refer to if1 in struct dvobj_priv
        _adapter *pbuddy_adapter;
 
        //for PRIMARY_ADAPTER(IFACE_ID0) can directly refer to if1 in struct dvobj_priv
        _adapter *pbuddy_adapter;
 
-#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
+#if defined(CONFIG_CONCURRENT_MODE)
        u8 isprimary; //is primary adapter or not
        //notes:
        // if isprimary is true, the adapter_type value is 0, iface_id is IFACE_ID0 for PRIMARY_ADAPTER
        u8 isprimary; //is primary adapter or not
        //notes:
        // if isprimary is true, the adapter_type value is 0, iface_id is IFACE_ID0 for PRIMARY_ADAPTER
@@ -1006,17 +1025,13 @@ struct _ADAPTER{
        // refer to iface_id if iface_nums>2 and isprimary is false and the adapter_type value is 0xff.
        u8 adapter_type;//used only in  two inteface case(PRIMARY_ADAPTER and SECONDARY_ADAPTER) .
        u8 iface_type; //interface port type, it depends on HW port
        // refer to iface_id if iface_nums>2 and isprimary is false and the adapter_type value is 0xff.
        u8 adapter_type;//used only in  two inteface case(PRIMARY_ADAPTER and SECONDARY_ADAPTER) .
        u8 iface_type; //interface port type, it depends on HW port
-#endif //CONFIG_CONCURRENT_MODE || CONFIG_DUALMAC_CONCURRENT
+#endif //CONFIG_CONCURRENT_MODE 
 
        //extend to support multi interface
        //IFACE_ID0 is equals to PRIMARY_ADAPTER
        //IFACE_ID1 is equals to SECONDARY_ADAPTER
        u8 iface_id;
 
 
        //extend to support multi interface
        //IFACE_ID0 is equals to PRIMARY_ADAPTER
        //IFACE_ID1 is equals to SECONDARY_ADAPTER
        u8 iface_id;
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       u8 DualMacConcurrent; // 1: DMSP 0:DMDP
-#endif
-
 #ifdef CONFIG_BR_EXT
        _lock                                   br_ext_lock;
        //unsigned int                  macclone_completed;
 #ifdef CONFIG_BR_EXT
        _lock                                   br_ext_lock;
        //unsigned int                  macclone_completed;
@@ -1050,9 +1065,16 @@ struct _ADAPTER{
        u8 driver_vcs_type;//force 0:disable VCS, 1:RTS-CTS, 2:CTS-to-self when vcs_en=1.
        u8 driver_ampdu_spacing;//driver control AMPDU Density for peer sta's rx
        u8 driver_rx_ampdu_factor;//0xff: disable drv ctrl, 0:8k, 1:16k, 2:32k, 3:64k;
        u8 driver_vcs_type;//force 0:disable VCS, 1:RTS-CTS, 2:CTS-to-self when vcs_en=1.
        u8 driver_ampdu_spacing;//driver control AMPDU Density for peer sta's rx
        u8 driver_rx_ampdu_factor;//0xff: disable drv ctrl, 0:8k, 1:16k, 2:32k, 3:64k;
-       u8 fix_ba_rxbuf_bz; /* 0~127, TODO:consider each sta and each TID */
        u8 driver_rx_ampdu_spacing;  //driver control Rx AMPDU Density 
        u8 driver_rx_ampdu_spacing;  //driver control Rx AMPDU Density 
+       u8 fix_rx_ampdu_accept;
+       u8 fix_rx_ampdu_size; /* 0~127, TODO:consider each sta and each TID */
        unsigned char     in_cta_test;
        unsigned char     in_cta_test;
+#ifdef DBG_RX_COUNTER_DUMP             
+       u8 dump_rx_cnt_mode;/*BIT0:drv,BIT1:mac,BIT2:phy*/
+       u32 drv_rx_cnt_ok;
+       u32 drv_rx_cnt_crcerror;
+       u32 drv_rx_cnt_drop;
+#endif
 
 #ifdef CONFIG_DBG_COUNTER      
        struct rx_logs rx_logs;
 
 #ifdef CONFIG_DBG_COUNTER      
        struct rx_logs rx_logs;
@@ -1064,6 +1086,7 @@ struct _ADAPTER{
 #define adapter_to_dvobj(adapter) (adapter->dvobj)
 #define adapter_to_pwrctl(adapter) (dvobj_to_pwrctl(adapter->dvobj))
 #define adapter_wdev_data(adapter) (&((adapter)->wdev_data))
 #define adapter_to_dvobj(adapter) (adapter->dvobj)
 #define adapter_to_pwrctl(adapter) (dvobj_to_pwrctl(adapter->dvobj))
 #define adapter_wdev_data(adapter) (&((adapter)->wdev_data))
+#define adapter_mac_addr(adapter) (adapter->mac_addr)
 
 //
 // Function disabled.
 
 //
 // Function disabled.
@@ -1104,8 +1127,6 @@ __inline static void RTW_ENABLE_FUNC(_adapter*padapter, int func_bit)
                         (padapter)->bSurpriseRemoved || \
                         RTW_IS_FUNC_DISABLED((padapter), DF_TX_BIT))
 
                         (padapter)->bSurpriseRemoved || \
                         RTW_IS_FUNC_DISABLED((padapter), DF_TX_BIT))
 
-int rtw_handle_dualmac(_adapter *adapter, bool init);
-
 #ifdef CONFIG_PNO_SUPPORT
 int rtw_parse_ssid_list_tlv(char** list_str, pno_ssid_t* ssid, int max, int *bytes_left);
 int rtw_dev_pno_set(struct net_device *net, pno_ssid_t* ssid, int num, 
 #ifdef CONFIG_PNO_SUPPORT
 int rtw_parse_ssid_list_tlv(char** list_str, pno_ssid_t* ssid, int max, int *bytes_left);
 int rtw_dev_pno_set(struct net_device *net, pno_ssid_t* ssid, int num, 
@@ -1120,11 +1141,6 @@ int rtw_suspend_wow(_adapter *padapter);
 int rtw_resume_process_wow(_adapter *padapter);
 #endif
 
 int rtw_resume_process_wow(_adapter *padapter);
 #endif
 
-__inline static u8 *myid(struct eeprom_priv *peepriv)
-{
-       return (peepriv->mac_addr);
-}
-
 // HCI Related header file
 #ifdef CONFIG_USB_HCI
 #include <usb_osintf.h>
 // HCI Related header file
 #ifdef CONFIG_USB_HCI
 #include <usb_osintf.h>
@@ -1150,9 +1166,5 @@ __inline static u8 *myid(struct eeprom_priv *peepriv)
 #include <pci_hal.h>
 #endif
 
 #include <pci_hal.h>
 #endif
 
-#ifdef CONFIG_BT_COEXIST
-#include <rtw_btcoex.h>
-#endif // CONFIG_BT_COEXIST
-
 #endif //__DRV_TYPES_H__
 
 #endif //__DRV_TYPES_H__
 
index 84aa63ac49bfa8f3a2c307c55ed26cb7b5783d67..0deb3993d818b90e83a2b58ea0a1d2e6ccfa7a28 100755 (executable)
@@ -63,6 +63,7 @@ void hal_btcoex_SwitchBtTRxMask(PADAPTER padapter);
 
 void hal_btcoex_Hanlder(PADAPTER padapter);
 
 
 void hal_btcoex_Hanlder(PADAPTER padapter);
 
+s32 hal_btcoex_IsBTCoexRejectAMPDU(PADAPTER padapter);
 s32 hal_btcoex_IsBTCoexCtrlAMPDUSize(PADAPTER padapter);
 u32 hal_btcoex_GetAMPDUSize(PADAPTER padapter);
 void hal_btcoex_SetManualControl(PADAPTER padapter, u8 bmanual);
 s32 hal_btcoex_IsBTCoexCtrlAMPDUSize(PADAPTER padapter);
 u32 hal_btcoex_GetAMPDUSize(PADAPTER padapter);
 void hal_btcoex_SetManualControl(PADAPTER padapter, u8 bmanual);
@@ -78,6 +79,10 @@ void hal_btcoex_SetDBG(PADAPTER, u32 *pDbgModule);
 u32 hal_btcoex_GetDBG(PADAPTER, u8 *pStrBuf, u32 bufSize);
 u8 hal_btcoex_IncreaseScanDeviceNum(PADAPTER);
 u8 hal_btcoex_IsBtLinkExist(PADAPTER);
 u32 hal_btcoex_GetDBG(PADAPTER, u8 *pStrBuf, u32 bufSize);
 u8 hal_btcoex_IncreaseScanDeviceNum(PADAPTER);
 u8 hal_btcoex_IsBtLinkExist(PADAPTER);
+void hal_btcoex_SetBtPatchVersion(PADAPTER,u16 btHciVer,u16 btPatchVer);
+void hal_btcoex_SetHciVersion(PADAPTER, u16 hciVersion);
+void hal_btcoex_SendScanNotify(PADAPTER, u8 type);
+void hal_btcoex_StackUpdateProfileInfo(void);
 void hal_btcoex_SetAntIsolationType(PADAPTER padapter, u8 anttype);
 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
 int hal_btcoex_AntIsolationConfig_ParaFile(IN PADAPTER Adapter,IN char* pFileName);
 void hal_btcoex_SetAntIsolationType(PADAPTER padapter, u8 anttype);
 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
 int hal_btcoex_AntIsolationConfig_ParaFile(IN PADAPTER Adapter,IN char* pFileName);
index 6cb7f717328e9076f840d6ddfa9459ae65f1d5cb..5c509da5044eea15db669dfc12df5e9a567d2b07 100755 (executable)
@@ -214,11 +214,32 @@ typedef enum _FIRMWARE_SOURCE {
 #define PageNum_512(_Len)              (u32)(((_Len)>>9) + ((_Len)&0x1FF ? 1:0))
 #define PageNum(_Len, _Size)           (u32)(((_Len)/(_Size)) + ((_Len)&((_Size) - 1) ? 1:0))
 
 #define PageNum_512(_Len)              (u32)(((_Len)>>9) + ((_Len)&0x1FF ? 1:0))
 #define PageNum(_Len, _Size)           (u32)(((_Len)/(_Size)) + ((_Len)&((_Size) - 1) ? 1:0))
 
-
-u8 rtw_hal_data_init(_adapter *padapter);
-void rtw_hal_data_deinit(_adapter *padapter);
+struct dbg_rx_counter
+{
+       u32     rx_pkt_ok;
+       u32     rx_pkt_crc_error;
+       u32     rx_pkt_drop;    
+       u32     rx_ofdm_fa;
+       u32     rx_cck_fa;
+       u32     rx_ht_fa;
+};
+void rtw_dump_mac_rx_counters(_adapter* padapter,struct dbg_rx_counter *rx_counter);
+void rtw_dump_phy_rx_counters(_adapter* padapter,struct dbg_rx_counter *rx_counter);
+void rtw_reset_mac_rx_counters(_adapter* padapter);
+void rtw_reset_phy_rx_counters(_adapter* padapter);
+
+#ifdef DBG_RX_COUNTER_DUMP
+#define DUMP_DRV_RX_COUNTER    BIT0
+#define DUMP_MAC_RX_COUNTER    BIT1
+#define DUMP_PHY_RX_COUNTER    BIT2
+#define DUMP_DRV_TRX_COUNTER_DATA      BIT3
+
+void rtw_dump_phy_rxcnts_preprocess(_adapter* padapter,u8 rx_cnt_mode);
+void rtw_dump_rx_counters(_adapter* padapter);
+#endif
 
 void dump_chip_info(HAL_VERSION        ChipVersion);
 
 void dump_chip_info(HAL_VERSION        ChipVersion);
+void rtw_hal_config_rftype(PADAPTER  padapter);
 
 u8     //return the final channel plan decision
 hal_com_config_channel_plan(
 
 u8     //return the final channel plan decision
 hal_com_config_channel_plan(
@@ -342,10 +363,11 @@ void rtw_dump_raw_rssi_info(_adapter *padapter);
 u32 Hal_readPGDataFromConfigFile(PADAPTER padapter, struct file *fp);
 void Hal_ReadMACAddrFromFile(PADAPTER padapter, struct file *fp);
 void Hal_GetPhyEfuseMACAddr(PADAPTER padapter, u8* mac_addr);
 u32 Hal_readPGDataFromConfigFile(PADAPTER padapter, struct file *fp);
 void Hal_ReadMACAddrFromFile(PADAPTER padapter, struct file *fp);
 void Hal_GetPhyEfuseMACAddr(PADAPTER padapter, u8* mac_addr);
-int check_phy_efuse_tx_power_info_valid(PADAPTER padapter);
 int check_phy_efuse_macaddr_info_valid(PADAPTER padapter);
 #endif //CONFIG_EFUSE_CONFIG_FILE
 
 int check_phy_efuse_macaddr_info_valid(PADAPTER padapter);
 #endif //CONFIG_EFUSE_CONFIG_FILE
 
+int check_phy_efuse_tx_power_info_valid(PADAPTER padapter);
+
 #ifdef CONFIG_RF_GAIN_OFFSET
 void rtw_bb_rf_gain_offset(_adapter *padapter);
 #endif //CONFIG_RF_GAIN_OFFSET
 #ifdef CONFIG_RF_GAIN_OFFSET
 void rtw_bb_rf_gain_offset(_adapter *padapter);
 #endif //CONFIG_RF_GAIN_OFFSET
@@ -372,15 +394,17 @@ struct noise_info
        u8              chan;
 };
 #endif
        u8              chan;
 };
 #endif
+void rtw_get_noise(_adapter* padapter);
+
+void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished);
+void rtw_hal_set_AP_fw_rsvd_page(_adapter *padapter , bool finished);
 
 #ifdef CONFIG_GPIO_API
 u8 rtw_hal_get_gpio(_adapter* adapter, u8 gpio_num);
 
 #ifdef CONFIG_GPIO_API
 u8 rtw_hal_get_gpio(_adapter* adapter, u8 gpio_num);
-int rtw_hal_set_gpio_output_value(_adapter* adapter, u8 gpio_num, BOOLEAN isHigh);
-int rtw_hal_config_gpio(_adapter* adapter, u8 gpio_num, BOOLEAN isOutput);
-#endif
-
-#ifdef CONFIG_GPIO_WAKEUP
-void rtw_clear_hostwakeupgpio(PADAPTER padapter);
+int rtw_hal_set_gpio_output_value(_adapter* adapter, u8 gpio_num, bool isHigh);
+int rtw_hal_config_gpio(_adapter* adapter, u8 gpio_num, bool isOutput);
+int rtw_hal_register_gpio_interrupt(_adapter* adapter, int gpio_num, void(*callback)(u8 level));
+int rtw_hal_disable_gpio_interrupt(_adapter* adapter, int gpio_num);
 #endif
 
 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
 #endif
 
 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
@@ -389,5 +413,12 @@ extern char file_path[PATH_LENGTH_MAX];
 #define GetLineFromBuffer(buffer)   strsep(&buffer, "\n")
 #endif
 
 #define GetLineFromBuffer(buffer)   strsep(&buffer, "\n")
 #endif
 
+#ifdef CONFIG_FW_C2H_DEBUG
+void Debug_FwC2H(PADAPTER padapter, u8 *pdata, u8 len);
+#endif
+/*CONFIG_FW_C2H_DEBUG*/
+
+void update_IOT_info(_adapter *padapter);
+
 #endif //__HAL_COMMON_H__
 
 #endif //__HAL_COMMON_H__
 
index 8ad82f63d4826b47d204b170d9f2307aa32a4d42..609cafbca2e890c17376ae19d916d17f4faf2c4a 100755 (executable)
@@ -51,11 +51,18 @@ enum h2c_cmd{
        H2C_FWLPS_IN_IPS_ = 0x28,
        
        //Dynamic Mechanism Class: 010
        H2C_FWLPS_IN_IPS_ = 0x28,
        
        //Dynamic Mechanism Class: 010
-       H2C_MACID_CFG = 0x40,   
+       H2C_MACID_CFG = 0x40,
        H2C_TXBF = 0x41,        
        H2C_RSSI_SETTING = 0x42,        
        H2C_AP_REQ_TXRPT = 0x43,        
        H2C_INIT_RATE_COLLECT = 0x44,   
        H2C_TXBF = 0x41,        
        H2C_RSSI_SETTING = 0x42,        
        H2C_AP_REQ_TXRPT = 0x43,        
        H2C_INIT_RATE_COLLECT = 0x44,   
+       H2C_IQ_CALIBRATION      = 0x45,
+
+       H2C_RA_MASK_3SS = 0x46,/* for 8814A */
+       H2C_RA_PARA_ADJUST = 0x47,/* CONFIG_RA_DBG_CMD */
+       H2C_DYNAMIC_TX_PATH = 0x48,/* for 8814A */
+
+       H2C_FW_TRACE_EN = 0x49,
        
        //BT Class: 011
        H2C_B_TYPE_TDMA = 0x60,
        
        //BT Class: 011
        H2C_B_TYPE_TDMA = 0x60,
@@ -113,7 +120,7 @@ enum h2c_cmd{
 #define H2C_P2PRSVDPAGE_LOC_LEN        5
 #define H2C_P2P_OFFLOAD_LEN    3
 
 #define H2C_P2PRSVDPAGE_LOC_LEN        5
 #define H2C_P2P_OFFLOAD_LEN    3
 
-#ifdef CONFIG_WOWLAN   
+#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)        
 #define eqMacAddr(a,b)                                         ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 )
 #define cpMacAddr(des,src)                                     ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5])
 #define cpIpAddr(des,src)                                      ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3])
 #define eqMacAddr(a,b)                                         ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 )
 #define cpMacAddr(des,src)                                     ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5])
 #define cpIpAddr(des,src)                                      ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3])
@@ -225,8 +232,8 @@ enum h2c_cmd{
 #define SET_H2CCMD_WOWLAN_DATAPIN_WAKE_UP(__pH2CCmd, __Value)          SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 7, 1, __Value)
 #define SET_H2CCMD_WOWLAN_GPIO_DURATION(__pH2CCmd, __Value)                    SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+2, 0, 8, __Value)
 #define SET_H2CCMD_WOWLAN_GPIO_PULSE_EN(__pH2CCmd, __Value)            SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 1, __Value)
 #define SET_H2CCMD_WOWLAN_DATAPIN_WAKE_UP(__pH2CCmd, __Value)          SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 7, 1, __Value)
 #define SET_H2CCMD_WOWLAN_GPIO_DURATION(__pH2CCmd, __Value)                    SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+2, 0, 8, __Value)
 #define SET_H2CCMD_WOWLAN_GPIO_PULSE_EN(__pH2CCmd, __Value)            SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 1, __Value)
-#define SET_H2CCMD_WOWLAN_GPIO_PULSE_COUNT(__pH2CCmd, __Value)         SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 1, 7, __Value)
-#define SET_H2CCMD_WOWLAN_LOWPR_RX(__pH2CCmd, __Value)                         SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 1, __Value)
+#define SET_H2CCMD_WOWLAN_GPIO_PULSE_COUNT(__pH2CCmd, __Value)         SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+3, 1, 7, __Value)
+#define SET_H2CCMD_WOWLAN_LOWPR_RX(__pH2CCmd, __Value)                         SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+4, 0, 1, __Value)
 
 // _REMOTE_WAKEUP_CMD_0x81
 #define SET_H2CCMD_REMOTE_WAKECTRL_ENABLE(__pH2CCmd, __Value)          SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
 
 // _REMOTE_WAKEUP_CMD_0x81
 #define SET_H2CCMD_REMOTE_WAKECTRL_ENABLE(__pH2CCmd, __Value)          SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
@@ -236,7 +243,9 @@ enum h2c_cmd{
 #define SET_H2CCMD_REMOTE_WAKE_CTRL_NLO_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)
 #define SET_H2CCMD_REMOTE_WAKE_CTRL_FW_UNICAST_EN(__pH2CCmd, __Value)  SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value)
 #define SET_H2CCMD_REMOTE_WAKE_CTRL_P2P_OFFLAD_EN(__pH2CCmd, __Value)  SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 1, __Value)
 #define SET_H2CCMD_REMOTE_WAKE_CTRL_NLO_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)
 #define SET_H2CCMD_REMOTE_WAKE_CTRL_FW_UNICAST_EN(__pH2CCmd, __Value)  SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value)
 #define SET_H2CCMD_REMOTE_WAKE_CTRL_P2P_OFFLAD_EN(__pH2CCmd, __Value)  SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 1, __Value)
+#define SET_H2CCMD_REMOTE_WAKE_CTRL_NBNS_FILTER_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 2, 1, __Value)
 #define SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(__pH2CCmd, __Value)     SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 1, __Value)
 #define SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(__pH2CCmd, __Value)     SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 1, __Value)
+#define SET_H2CCMD_REMOTE_WAKE_CTRL_FW_PARSING_UNTIL_WAKEUP(__pH2CCmd, __Value)        SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 4, 1, __Value)
 
 // AOAC_GLOBAL_INFO_0x82
 #define SET_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(__pH2CCmd, __Value)       SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd, 0, 8, __Value)
 
 // AOAC_GLOBAL_INFO_0x82
 #define SET_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(__pH2CCmd, __Value)       SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd, 0, 8, __Value)
@@ -258,6 +267,7 @@ enum h2c_cmd{
 #ifdef CONFIG_PNO_SUPPORT
 // D0_Scan_Offload_Info_0x86
 #define SET_H2CCMD_AOAC_NLO_FUN_EN(__pH2CCmd, __Value)                 SET_BITS_TO_LE_1BYTE((__pH2CCmd), 3, 1, __Value)
 #ifdef CONFIG_PNO_SUPPORT
 // D0_Scan_Offload_Info_0x86
 #define SET_H2CCMD_AOAC_NLO_FUN_EN(__pH2CCmd, __Value)                 SET_BITS_TO_LE_1BYTE((__pH2CCmd), 3, 1, __Value)
+#define SET_H2CCMD_AOAC_NLO_IPS_EN(__pH2CCmd, __Value)                 SET_BITS_TO_LE_1BYTE((__pH2CCmd), 4, 1, __Value)
 #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_PROBE_PACKET(__pH2CCmd, __Value)  SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+1, 0, 8, __Value)
 #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_SCAN_INFO(__pH2CCmd, __Value)     SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+2, 0, 8, __Value)
 #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_SSID_INFO(__pH2CCmd, __Value)     SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+3, 0, 8, __Value)
 #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_PROBE_PACKET(__pH2CCmd, __Value)  SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+1, 0, 8, __Value)
 #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_SCAN_INFO(__pH2CCmd, __Value)     SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+2, 0, 8, __Value)
 #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_SSID_INFO(__pH2CCmd, __Value)     SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+3, 0, 8, __Value)
@@ -311,18 +321,13 @@ typedef struct _RSVDPAGE_LOC {
 
 #endif
 void dump_TX_FIFO(PADAPTER padapter, u8 page_num, u16 page_size);
 
 #endif
 void dump_TX_FIFO(PADAPTER padapter, u8 page_num, u16 page_size);
-u8 rtw_check_invalid_mac_address (u8 *mac_addr);
 u8 rtw_hal_set_fw_media_status_cmd(_adapter* adapter, u8 mstatus, u8 macid);
 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
 void rtw_get_current_ip_address(PADAPTER padapter, u8 *pcurrentip);
 void rtw_get_sec_iv(PADAPTER padapter, u8*pcur_dot11txpn, u8 *StaAddr);
 void rtw_set_sec_pn(_adapter *padapter);
 
 u8 rtw_hal_set_fw_media_status_cmd(_adapter* adapter, u8 mstatus, u8 macid);
 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
 void rtw_get_current_ip_address(PADAPTER padapter, u8 *pcurrentip);
 void rtw_get_sec_iv(PADAPTER padapter, u8*pcur_dot11txpn, u8 *StaAddr);
 void rtw_set_sec_pn(_adapter *padapter);
 
-void rtw_hal_fill_fake_txdesc(_adapter* padapter, u8* pDesc, u32 BufferLen,
-               u8 IsPsPoll, u8 IsBTQosNull, u8 bDataFrame);
-
 //WOW command function
 //WOW command function
-u8 rtw_hal_set_wowlan_ctrl_cmd(_adapter *adapter, u8 enable);
 void rtw_hal_set_fw_wow_related_cmd(_adapter* padapter, u8 enable);
 #ifdef CONFIG_P2P_WOWLAN
 //H2C 0x8A
 void rtw_hal_set_fw_wow_related_cmd(_adapter* padapter, u8 enable);
 #ifdef CONFIG_P2P_WOWLAN
 //H2C 0x8A
index e03c692fd04499ead938ced7360a33c55801f9d7..79e62c6e58f1d5ab5dd37594656caaf21ae6522d 100755 (executable)
@@ -264,7 +264,8 @@ typedef struct _LED_USB{
 
        _timer                          BlinkTimer; // Timer object for led blinking.
 
 
        _timer                          BlinkTimer; // Timer object for led blinking.
 
-       _workitem                       BlinkWorkItem; // Workitem used by BlinkTimer to manipulate H/W to blink LED.
+       _workitem                       BlinkWorkItem; // Workitem used by BlinkTimer to manipulate H/W to blink LED.'
+       ATOMIC_T                        bCancelWorkItem; //check if WorkItem is cancelled
 } LED_USB, *PLED_USB;
 
 typedef struct _LED_USB        LED_DATA, *PLED_DATA;
 } LED_USB, *PLED_USB;
 
 typedef struct _LED_USB        LED_DATA, *PLED_DATA;
index 6a0faf00c4abd54e0ad56c088d7e1340d6143bb0..78937442b50aca727ae8b9537dfc7897392f90c0 100755 (executable)
@@ -43,6 +43,7 @@
 #define REG_SYS_FUNC_EN                                0x0002
 #define REG_APS_FSMCO                                  0x0004
 #define REG_SYS_CLKR                                   0x0008
 #define REG_SYS_FUNC_EN                                0x0002
 #define REG_APS_FSMCO                                  0x0004
 #define REG_SYS_CLKR                                   0x0008
+#define REG_SYS_CLK_CTRL                               REG_SYS_CLKR
 #define REG_9346CR                                             0x000A
 #define REG_SYS_EEPROM_CTRL                    0x000A
 #define REG_EE_VPD                                             0x000C
 #define REG_9346CR                                             0x000A
 #define REG_SYS_EEPROM_CTRL                    0x000A
 #define REG_EE_VPD                                             0x000C
@@ -1211,6 +1212,7 @@ Current IOREG MAP
 #define RFINI_RDY                              BIT(5)
 #define WINTINI_RDY                            BIT(6)
 #define RAM_DL_SEL                             BIT(7)
 #define RFINI_RDY                              BIT(5)
 #define WINTINI_RDY                            BIT(6)
 #define RAM_DL_SEL                             BIT(7)
+#define CPU_DL_READY                   BIT(15) /* add flag  by gw for fw download ready 20130826 */
 #define ROM_DLEN                               BIT(19)
 #define CPRST                                  BIT(23)
 
 #define ROM_DLEN                               BIT(19)
 #define CPRST                                  BIT(23)
 
@@ -1762,6 +1764,7 @@ Current IOREG MAP
 
 
 // GPIO BIT
 
 
 // GPIO BIT
+#define        HAL_8812A_HW_GPIO_WPS_BIT       BIT2
 #define        HAL_8192C_HW_GPIO_WPS_BIT       BIT2
 #define        HAL_8192EU_HW_GPIO_WPS_BIT      BIT7
 #define        HAL_8188E_HW_GPIO_WPS_BIT       BIT7
 #define        HAL_8192C_HW_GPIO_WPS_BIT       BIT2
 #define        HAL_8192EU_HW_GPIO_WPS_BIT      BIT7
 #define        HAL_8188E_HW_GPIO_WPS_BIT       BIT7
index ac6007e8977e1fd6f6bd674e765784da7bdb1165..a91086655a4676eab487cbce0cfd6ad7ca582f0b 100755 (executable)
@@ -75,22 +75,6 @@ typedef      enum _INTERFACE_SELECT_USB{
        INTF_SEL5_USB_Combo_MF  = 5,            // USB WiFi+BT Multi-Function Combo, i.e., Proprietary layout(AS-VAU) which is the same as SDIO card
 } INTERFACE_SELECT_USB, *PINTERFACE_SELECT_USB;
 
        INTF_SEL5_USB_Combo_MF  = 5,            // USB WiFi+BT Multi-Function Combo, i.e., Proprietary layout(AS-VAU) which is the same as SDIO card
 } INTERFACE_SELECT_USB, *PINTERFACE_SELECT_USB;
 
-#ifdef CONFIG_USB_HCI
-//should be sync with INTERFACE_SELECT_USB
-typedef        enum _BOARD_TYPE_8192CUSB{
-       BOARD_USB_DONGLE                        = 0,            // USB dongle
-       BOARD_USB_High_PA               = 1,            // USB dongle with high power PA
-       BOARD_MINICARD                  = 2,            // Minicard
-       BOARD_USB_SOLO                  = 3,            // USB solo-Slim module
-       BOARD_USB_COMBO                 = 4,            // USB Combo-Slim module
-} BOARD_TYPE_8192CUSB, *PBOARD_TYPE_8192CUSB;
-
-#define        SUPPORT_HW_RADIO_DETECT(pHalData) \
-       (pHalData->BoardType == BOARD_MINICARD||\
-       pHalData->BoardType == BOARD_USB_SOLO||\
-       pHalData->BoardType == BOARD_USB_COMBO)
-#endif
-
 typedef enum _RT_AMPDU_BRUST_MODE{
        RT_AMPDU_BRUST_NONE             = 0,
        RT_AMPDU_BRUST_92D              = 1,
 typedef enum _RT_AMPDU_BRUST_MODE{
        RT_AMPDU_BRUST_NONE             = 0,
        RT_AMPDU_BRUST_92D              = 1,
@@ -134,14 +118,6 @@ typedef enum _RT_AMPDU_BRUST_MODE{
 //#define HP_THERMAL_NUM               8
 //###### duplicate code,will move to ODM #########
 
 //#define HP_THERMAL_NUM               8
 //###### duplicate code,will move to ODM #########
 
-#if defined(CONFIG_RTL8192D) || defined(CONFIG_BT_COEXIST)
-typedef enum _MACPHY_MODE_8192D{
-       SINGLEMAC_SINGLEPHY,    //SMSP
-       DUALMAC_DUALPHY,                //DMDP
-       DUALMAC_SINGLEPHY,      //DMSP  
-}MACPHY_MODE_8192D,*PMACPHY_MODE_8192D;
-#endif
-
 #ifdef CONFIG_USB_RX_AGGREGATION
 typedef enum _USB_RX_AGG_MODE{
        USB_RX_AGG_DISABLE,
 #ifdef CONFIG_USB_RX_AGGREGATION
 typedef enum _USB_RX_AGG_MODE{
        USB_RX_AGG_DISABLE,
@@ -158,156 +134,63 @@ typedef enum _USB_RX_AGG_MODE{
 #define PAGE_SIZE_256  256
 #define PAGE_SIZE_512  512
 
 #define PAGE_SIZE_256  256
 #define PAGE_SIZE_512  512
 
-struct dm_priv
-{
-       u8      DM_Type;
-
-#define DYNAMIC_FUNC_BT BIT0
-
-       u8      DMFlag;
-       u8      InitDMFlag;
-       //u8   RSVD_1;   
-       
-       u32     InitODMFlag;
-       //* Upper and Lower Signal threshold for Rate Adaptive*/
-       int     UndecoratedSmoothedPWDB;
-       int     UndecoratedSmoothedCCK;
-       int     EntryMinUndecoratedSmoothedPWDB;
-       int     EntryMaxUndecoratedSmoothedPWDB;
-       int     MinUndecoratedPWDBForDM;
-       int     LastMinUndecoratedPWDBForDM;
-
-       s32     UndecoratedSmoothedBeacon;
-
-//###### duplicate code,will move to ODM #########
-       //for High Power
-       u8      bDynamicTxPowerEnable;
-       u8      LastDTPLvl;
-       u8      DynamicTxHighPowerLvl;//Add by Jacken Tx Power Control for Near/Far Range 2008/03/06
-
-       //for tx power tracking
-       u8      bTXPowerTracking;
-       u8      TXPowercount;
-       u8      bTXPowerTrackingInit;
-       u8      TxPowerTrackControl;    //for mp mode, turn off txpwrtracking as default
-       u8      TM_Trigger;
-
-       u8      ThermalMeter[2];                                // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1
-       u8      ThermalValue;
-       u8      ThermalValue_LCK;
-       u8      ThermalValue_IQK;
-       u8      ThermalValue_DPK; 
-       u8      bRfPiEnable;
-       //u8   RSVD_2;          
-
-       //for APK
-       u32     APKoutput[2][2];        //path A/B; output1_1a/output1_2a
-       u8      bAPKdone;
-       u8      bAPKThermalMeterIgnore;
-       u8      bDPdone;
-       u8      bDPPathAOK;
-       u8      bDPPathBOK;
-       //u8   RSVD_3;                  
-       //u8   RSVD_4;
-       //u8   RSVD_5;
-
-       //for IQK       
-       u32     ADDA_backup[IQK_ADDA_REG_NUM];
-       u32     IQK_MAC_backup[IQK_MAC_REG_NUM];
-       u32     IQK_BB_backup_recover[9];
-       u32     IQK_BB_backup[IQK_BB_REG_NUM];
-       
-       u8      PowerIndex_backup[6];
-       u8      OFDM_index[2];
-       
-       u8      bCCKinCH14;
-       u8      CCK_index;
-       u8      bDoneTxpower;
-       u8      CCK_index_HP;
-       
-       u8      OFDM_index_HP[2];
-       u8      ThermalValue_HP[HP_THERMAL_NUM];
-       u8      ThermalValue_HP_index;
-       //u8   RSVD_6;
-       
-       //for TxPwrTracking2
-       s32     RegE94;
-       s32  RegE9C;
-       s32     RegEB4;
-       s32     RegEBC;
-
-       u32     TXPowerTrackingCallbackCnt;     //cosa add for debug
-
-       u32     prv_traffic_idx; // edca turbo
-#ifdef CONFIG_RTL8192D
-       u8      ThermalValue_AVG[AVG_THERMAL_NUM];
-       u8      ThermalValue_AVG_index;
-       u8      ThermalValue_RxGain;
-       u8      ThermalValue_Crystal;
-       u8      bReloadtxpowerindex;
-       
-       u32     RegD04_MP;
-       
-       u8      RegC04_MP;
-       u8      Delta_IQK;
-       u8      Delta_LCK;
-       //u8   RSVD_7;
-       
-       BOOLEAN bDPKdone[2];
-       //u16 RSVD_8;
-       
-       u32     RegA24; 
-       u32     RegRF3C[2];     //pathA / pathB
-#endif
-//###### duplicate code,will move to ODM #########
-
-       // Add for Reading Initial Data Rate SEL Register 0x484 during watchdog. Using for fill tx desc. 2011.3.21 by Thomas
-       u8      INIDATA_RATE[32];
-       _lock IQKSpinLock;
-};
-
-
 typedef struct hal_com_data
 {
        HAL_VERSION                     VersionID;
        RT_MULTI_FUNC           MultiFunc; // For multi-function consideration.
        RT_POLARITY_CTL         PolarityCtl; // For Wifi PDn Polarity control.
        RT_REGULATOR_MODE       RegulatorMode; // switching regulator or LDO
 typedef struct hal_com_data
 {
        HAL_VERSION                     VersionID;
        RT_MULTI_FUNC           MultiFunc; // For multi-function consideration.
        RT_POLARITY_CTL         PolarityCtl; // For Wifi PDn Polarity control.
        RT_REGULATOR_MODE       RegulatorMode; // switching regulator or LDO
-
+       
+       /****** FW related ******/
        u16     FirmwareVersion;
        u16     FirmwareVersionRev;
        u16     FirmwareSubVersion;
        u16     FirmwareSignature;
        u16     FirmwareVersion;
        u16     FirmwareVersionRev;
        u16     FirmwareSubVersion;
        u16     FirmwareSignature;
+       u8      RegFWOffload;   
+       u8      fw_ractrl;
+       u8      FwRsvdPageStartOffset; /* 2010.06.23. Added by tynli. Reserve page start offset except beacon in TxQ.*/
+       u8      LastHMEBoxNum;  /* H2C - for host message to fw */
 
 
-       //current WIFI_PHY values
-       WIRELESS_MODE           CurrentWirelessMode;
+       /****** current WIFI_PHY values ******/
+       WIRELESS_MODE   CurrentWirelessMode;
        CHANNEL_WIDTH   CurrentChannelBW;
        CHANNEL_WIDTH   CurrentChannelBW;
-       BAND_TYPE                       CurrentBandType;        //0:2.4G, 1:5G
-       BAND_TYPE                       BandSet;
-       u8      CurrentChannel;
-       u8      CurrentCenterFrequencyIndex1;
-       u8      nCur40MhzPrimeSC;// Control channel sub-carrier
-       u8      nCur80MhzPrimeSC;   //used for primary 40MHz of 80MHz mode
-
-       u16     CustomerID;
-       u16     BasicRateSet;
-       u16 ForcedDataRate;// Force Data Rate. 0: Auto, 0x02: 1M ~ 0x6C: 54M.
-       u32     ReceiveConfig;
-
-       //rf_ctrl
+       BAND_TYPE               CurrentBandType;        /* 0:2.4G, 1:5G */
+       BAND_TYPE               BandSet;
+       u8                              CurrentChannel;
+       u8                              CurrentCenterFrequencyIndex1;
+       u8                              nCur40MhzPrimeSC;       /* Control channel sub-carrier */
+       u8                              nCur80MhzPrimeSC;   /* used for primary 40MHz of 80MHz mode */
+       BOOLEAN                 bSwChnlAndSetBWInProgress;      
+       u8                              bDisableSWChannelPlan; /* flag of disable software change channel plan   */
+       u16                             BasicRateSet;   
+       u32                             ReceiveConfig;
+       BOOLEAN                 bSwChnl;
+       BOOLEAN                 bSetChnlBW;
+       BOOLEAN                 bChnlBWInitialized;
+
+       /****** rf_ctrl *****/
        u8      rf_chip;
        u8      rf_type;
        u8      PackageType;
        u8      rf_chip;
        u8      rf_type;
        u8      PackageType;
-       u8      NumTotalRFPath;
+       u8      NumTotalRFPath; 
 
 
-       u8      InterfaceSel;
-       u8      framesync;
-       u32     framesyncC34;
-       u8      framesyncMonitor;
-       u8      DefaultInitialGain[4];
-       //
-       // EEPROM setting.
-       //
+       /****** Debug ******/
+       u16     ForcedDataRate; /* Force Data Rate. 0: Auto, 0x02: 1M ~ 0x6C: 54M. */
+       u8      u1ForcedIgiLb;  /* forced IGI lower bound */    
+       u8      bDumpRxPkt;
+       u8      bDumpTxPkt;
+       u8      bDisableTXPowerTraining;
+
+       
+       /****** EEPROM setting.******/  
+       u8      bautoload_fail_flag;
+       u8      bloadfile_fail_flag;
+       u8      bloadmac_fail_flag;
+       u8      EepromOrEfuse;
+       u8      efuse_eeprom_data[EEPROM_MAX_SIZE]; /*92C:256bytes, 88E:512bytes, we use union set (512bytes)*/
+       u8      InterfaceSel; /* board type kept in eFuse */
+       u16     CustomerID;
+       
        u16     EEPROMVID;
        u16     EEPROMSVID;
 #ifdef CONFIG_USB_HCI
        u16     EEPROMVID;
        u16     EEPROMSVID;
 #ifdef CONFIG_USB_HCI
@@ -330,16 +213,22 @@ typedef struct hal_com_data
        u8      EEPROMBluetoothAntIsolation;
        u8      EEPROMBluetoothRadioShared;
        u8      bTXPowerDataReadFromEEPORM;
        u8      EEPROMBluetoothAntIsolation;
        u8      EEPROMBluetoothRadioShared;
        u8      bTXPowerDataReadFromEEPORM;
-       u8      bAPKThermalMeterIgnore;
-       u8      bDisableSWChannelPlan; // flag of disable software change channel plan
+       u8      EEPROMMACAddr[ETH_ALEN];
+       
+#ifdef CONFIG_RF_GAIN_OFFSET
+       u8      EEPROMRFGainOffset;
+       u8      EEPROMRFGainVal;
+#endif /*CONFIG_RF_GAIN_OFFSET*/
 
 
-       BOOLEAN                 EepromOrEfuse;
-       u8                              EfuseUsedPercentage;
-       u16                             EfuseUsedBytes;
-       //u8                            EfuseMap[2][HWSET_MAX_SIZE_JAGUAR];
-       EFUSE_HAL               EfuseHal;
+#ifdef CONFIG_RTL8723B
+       u8      adjuseVoltageVal;
+#endif
+       u8      EfuseUsedPercentage;
+       u16     EfuseUsedBytes;
+       /*u8            EfuseMap[2][HWSET_MAX_SIZE_JAGUAR];*/
+       EFUSE_HAL       EfuseHal;
 
 
-       //---------------------------------------------------------------------------------//
+       /*---------------------------------------------------------------------------------*/
        //3 [2.4G]
        u8      Index24G_CCK_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
        u8      Index24G_BW40_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
        //3 [2.4G]
        u8      Index24G_CCK_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
        u8      Index24G_BW40_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
@@ -361,16 +250,15 @@ typedef struct hal_com_data
 
        u8      TxPwrInPercentage;
 
 
        u8      TxPwrInPercentage;
 
-       u8      TxPwrCalibrateRate;
-       //
-       // TX power by rate table at most 4RF path.
-       // The register is 
-       //
-       // VHT TX power by rate off setArray = 
-       // Band:-2G&5G = 0 / 1
-       // RF: at most 4*4 = ABCD=0/1/2/3
-       // CCK=0 OFDM=1/2 HT-MCS 0-15=3/4/56 VHT=7/8/9/10/11                    
-       //
+       /********************************
+       *       TX power by rate table at most 4RF path.
+       *       The register is 
+       *
+       *       VHT TX power by rate off setArray = 
+       *       Band:-2G&5G = 0 / 1
+       *       RF: at most 4*4 = ABCD=0/1/2/3
+       *       CCK=0 OFDM=1/2 HT-MCS 0-15=3/4/56 VHT=7/8/9/10/11                       
+       **********************************/
        u8      TxPwrByRateTable;
        u8      TxPwrByRateBand;
        s8      TxPwrByRateOffset[TX_PWR_BY_RATE_NUM_BAND]
        u8      TxPwrByRateTable;
        u8      TxPwrByRateBand;
        s8      TxPwrByRateOffset[TX_PWR_BY_RATE_NUM_BAND]
@@ -412,12 +300,8 @@ typedef struct hal_com_data
        // For power group
        u8      PwrGroupHT20[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER];
        u8      PwrGroupHT40[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER];
        // For power group
        u8      PwrGroupHT20[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER];
        u8      PwrGroupHT40[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER];
-
-
-       
-
        u8      PGMaxGroup;
        u8      PGMaxGroup;
-       u8      LegacyHTTxPowerDiff;// Legacy to HT rate power diff
+       
        // The current Tx Power Level
        u8      CurrentCckTxPwrIdx;
        u8      CurrentOfdm24GTxPwrIdx;
        // The current Tx Power Level
        u8      CurrentCckTxPwrIdx;
        u8      CurrentOfdm24GTxPwrIdx;
@@ -430,9 +314,7 @@ typedef struct hal_com_data
        u32     CCKTxPowerLevelOriginalOffset;
 
        u8      CrystalCap;
        u32     CCKTxPowerLevelOriginalOffset;
 
        u8      CrystalCap;
-       u32     AntennaTxPath;                                  // Antenna path Tx
-       u32     AntennaRxPath;                                  // Antenna path Rx
-
+       
        u8      PAType_2G;
        u8      PAType_5G;
        u8      LNAType_2G;
        u8      PAType_2G;
        u8      PAType_5G;
        u8      LNAType_2G;
@@ -446,33 +328,17 @@ typedef struct hal_com_data
        u8      TypeALNA;
        u8      TypeAPA;
        u8      RFEType;
        u8      TypeALNA;
        u8      TypeAPA;
        u8      RFEType;
-       u8      BoardType;
-       u8      ExternalPA;
-       u8      bIQKInitialized;
-       BOOLEAN         bLCKInProgress;
-
-       BOOLEAN         bSwChnl;
-       BOOLEAN         bSetChnlBW;
-       BOOLEAN         bChnlBWInitialized;
-       BOOLEAN         bNeedIQK;
-
-       u8      bLedOpenDrain; // Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16.
-       u8      TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default
-       u8      b1x1RecvCombine;        // for 1T1R receive combining
 
 
-       u32     AcParam_BE; //Original parameter for BE, use for EDCA turbo.    
+       u8      bLedOpenDrain; /* Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16. */
+       u32     AcParam_BE; /* Original parameter for BE, use for EDCA turbo.   */
 
 
-       BB_REGISTER_DEFINITION_T        PHYRegDef[4];   //Radio A/B/C/D
+       BB_REGISTER_DEFINITION_T        PHYRegDef[MAX_RF_PATH]; //Radio A/B/C/D
 
 
-       u32     RfRegChnlVal[2];
+       u32     RfRegChnlVal[MAX_RF_PATH];
 
        //RDG enable
        BOOLEAN  bRDGEnable;
 
 
        //RDG enable
        BOOLEAN  bRDGEnable;
 
-       //for host message to fw
-       u8      LastHMEBoxNum;
-
-       u8      fw_ractrl;
        u8      RegTxPause;
        // Beacon function related global variable.
        u8      RegBcnCtrlVal;
        u8      RegTxPause;
        // Beacon function related global variable.
        u8      RegBcnCtrlVal;
@@ -481,18 +347,30 @@ typedef struct hal_com_data
        u8      RegCR_1;
        u8      Reg837;
        u16     RegRRSR;
        u8      RegCR_1;
        u8      Reg837;
        u16     RegRRSR;
-
+       
+       /****** antenna diversity ******/
        u8      CurAntenna;
        u8      AntDivCfg;
        u8      AntDetection;
        u8      TRxAntDivType;
        u8      CurAntenna;
        u8      AntDivCfg;
        u8      AntDetection;
        u8      TRxAntDivType;
-       u8      ant_path; //for 8723B s0/s1 selection
+       u8      ant_path; //for 8723B s0/s1 selection   
+       u32     AntennaTxPath;                                  /* Antenna path Tx */
+       u32     AntennaRxPath;                                  /* Antenna path Rx */
+
+       /******** PHY DM & DM Section **********/
+       u8                      DM_Type;
+       _lock           IQKSpinLock;    
+       u8                      INIDATA_RATE[MACID_NUM_SW_LIMIT];
+       /* Upper and Lower Signal threshold for Rate Adaptive*/ 
+       int                     EntryMinUndecoratedSmoothedPWDB;
+       int                     EntryMaxUndecoratedSmoothedPWDB;
+       int                     MinUndecoratedPWDBForDM;
+       DM_ODM_T        odmpriv;        
+       u8                      bIQKInitialized;
+       u8                      bNeedIQK;
+       /******** PHY DM & DM Section **********/
 
 
-       u8      u1ForcedIgiLb;                  // forced IGI lower bound
 
 
-       u8      bDumpRxPkt;//for debug
-       u8      bDumpTxPkt;//for debug
-       u8      FwRsvdPageStartOffset; //2010.06.23. Added by tynli. Reserve page start offset except beacon in TxQ.
 
        // 2010/08/09 MH Add CU power down mode.
        BOOLEAN         pwrdown;
 
        // 2010/08/09 MH Add CU power down mode.
        BOOLEAN         pwrdown;
@@ -500,30 +378,20 @@ typedef struct hal_com_data
        // Add for dual MAC  0--Mac0 1--Mac1
        u32     interfaceIndex;
 
        // Add for dual MAC  0--Mac0 1--Mac1
        u32     interfaceIndex;
 
-       u8      OutEpQueueSel;
-       u8      OutEpNumber;
-
-       // 2010/12/10 MH Add for USB aggreation mode dynamic shceme.
-       BOOLEAN         UsbRxHighSpeedMode;
-
-       // 2010/11/22 MH Add for slim combo debug mode selective.
-       // This is used for fix the drawback of CU TSMC-A/UMC-A cut. HW auto suspend ability. Close BT clock.
-       BOOLEAN         SlimComboDbg;
-
 #ifdef CONFIG_P2P
        u8      p2p_ps_offload;
 #endif
 #ifdef CONFIG_P2P
        u8      p2p_ps_offload;
 #endif
-
-       //u8    AMPDUDensity;
-
-       // Auto FSM to Turn On, include clock, isolation, power control for MAC only
+       /* Auto FSM to Turn On, include clock, isolation, power control for MAC only */
        u8      bMacPwrCtrlOn;
        u8      bMacPwrCtrlOn;
-       u8      bDisableTXPowerTraining;
+       
        u8      RegIQKFWOffload;
        struct submit_ctx       iqk_sctx;
 
        RT_AMPDU_BRUST          AMPDUBurstMode; //92C maybe not use, but for compile successfully
 
        u8      RegIQKFWOffload;
        struct submit_ctx       iqk_sctx;
 
        RT_AMPDU_BRUST          AMPDUBurstMode; //92C maybe not use, but for compile successfully
 
+       u8      OutEpQueueSel;
+       u8      OutEpNumber;    
+
 #if defined (CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
        //
        // For SDIO Interface HAL related
 #if defined (CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
        //
        // For SDIO Interface HAL related
@@ -546,7 +414,6 @@ typedef struct hal_com_data
        _lock           SdioTxFIFOFreePageLock;
        u8                      SdioTxOQTMaxFreeSpace;
        u8                      SdioTxOQTFreeSpace;
        _lock           SdioTxFIFOFreePageLock;
        u8                      SdioTxOQTMaxFreeSpace;
        u8                      SdioTxOQTFreeSpace;
-       
 
        //
        // SDIO Rx FIFO related.
 
        //
        // SDIO Rx FIFO related.
@@ -558,30 +425,34 @@ typedef struct hal_com_data
 #endif //CONFIG_SDIO_HCI
 
 #ifdef CONFIG_USB_HCI
 #endif //CONFIG_SDIO_HCI
 
 #ifdef CONFIG_USB_HCI
-       u32     UsbBulkOutSize;
+
+       // 2010/12/10 MH Add for USB aggreation mode dynamic shceme.
+       BOOLEAN         UsbRxHighSpeedMode;
+       BOOLEAN         UsbTxVeryHighSpeedMode;
+       u32                     UsbBulkOutSize;
        BOOLEAN         bSupportUSB3;
 
        // Interrupt relatd register information.
        BOOLEAN         bSupportUSB3;
 
        // Interrupt relatd register information.
-       u32     IntArray[3];//HISR0,HISR1,HSISR
-       u32     IntrMask[3];
-       u8      C2hArray[16];
+       u32                     IntArray[3];//HISR0,HISR1,HSISR
+       u32                     IntrMask[3];
+       u8                      C2hArray[16];
        #ifdef CONFIG_USB_TX_AGGREGATION
        #ifdef CONFIG_USB_TX_AGGREGATION
-       u8      UsbTxAggMode;
-       u8      UsbTxAggDescNum;
+       u8                      UsbTxAggMode;
+       u8                      UsbTxAggDescNum;
        #endif // CONFIG_USB_TX_AGGREGATION
        
        #ifdef CONFIG_USB_RX_AGGREGATION
        #endif // CONFIG_USB_TX_AGGREGATION
        
        #ifdef CONFIG_USB_RX_AGGREGATION
-       u16     HwRxPageSize;                           // Hardware setting
-       u32     MaxUsbRxAggBlock;
+       u16                     HwRxPageSize;                           // Hardware setting
+       u32                     MaxUsbRxAggBlock;
 
        USB_RX_AGG_MODE UsbRxAggMode;
 
        USB_RX_AGG_MODE UsbRxAggMode;
-       u8      UsbRxAggBlockCount;             //FOR USB Mode, USB Block count. Block size is 512-byte in hight speed and 64-byte in full speed
-       u8      UsbRxAggBlockTimeout;
-       u8      UsbRxAggPageCount;                      //FOR DMA Mode, 8192C DMA page count
-       u8      UsbRxAggPageTimeout;
+       u8                      UsbRxAggBlockCount;             /* FOR USB Mode, USB Block count. Block size is 512-byte in hight speed and 64-byte in full speed */
+       u8                      UsbRxAggBlockTimeout;
+       u8                      UsbRxAggPageCount;                      /* FOR DMA Mode, 8192C DMA page count*/
+       u8                      UsbRxAggPageTimeout;
 
 
-       u8      RegAcUsbDmaSize;
-       u8      RegAcUsbDmaTime;
+       u8                      RegAcUsbDmaSize;
+       u8                      RegAcUsbDmaTime;
        #endif//CONFIG_USB_RX_AGGREGATION
 #endif //CONFIG_USB_HCI
 
        #endif//CONFIG_USB_RX_AGGREGATION
 #endif //CONFIG_USB_HCI
 
@@ -590,34 +461,27 @@ typedef struct hal_com_data
        //
        // EEPROM setting.
        //
        //
        // EEPROM setting.
        //
-       u16     EEPROMChannelPlan;
-       
-       u8      EEPROMTSSI[2];
-       u8      EEPROMBoardType;
-       u32     TransmitConfig; 
-
-       u32     IntrMaskToSet[2];
-       u32     IntArray[2];
-       u32     IntrMask[2];
-       u32     SysIntArray[1];
-       u32     SysIntrMask[1];
-       u32     IntrMaskReg[2];
-       u32     IntrMaskDefault[2];
-
-       BOOLEAN  bL1OffSupport;
-       BOOLEAN bSupportBackDoor;
-
-       u8      bDefaultAntenna;
-       //u8    bIQKInitialized;
+       u32                     TransmitConfig;
+       u32                     IntrMaskToSet[2];
+       u32                     IntArray[2];
+       u32                     IntrMask[2];
+       u32                     SysIntArray[1];
+       u32                     SysIntrMask[1];
+       u32                     IntrMaskReg[2];
+       u32                     IntrMaskDefault[2];
+
+       BOOLEAN         bL1OffSupport;
+       BOOLEAN         bSupportBackDoor;
+
+       u8                      bDefaultAntenna;
        
        
-       u8      bInterruptMigration;
-       u8      bDisableTxInt;
+       u8                      bInterruptMigration;
+       u8                      bDisableTxInt;
 
 
-       u16     RxTag;  
+       u16                     RxTag;  
 #endif //CONFIG_PCI_HCI
 #endif //CONFIG_PCI_HCI
+       
 
 
-       struct dm_priv  dmpriv;
-       DM_ODM_T                odmpriv;
 #ifdef DBG_CONFIG_ERROR_DETECT
        struct sreset_priv srestpriv;
 #endif //#ifdef DBG_CONFIG_ERROR_DETECT
 #ifdef DBG_CONFIG_ERROR_DETECT
        struct sreset_priv srestpriv;
 #endif //#ifdef DBG_CONFIG_ERROR_DETECT
@@ -625,58 +489,15 @@ typedef struct hal_com_data
 #ifdef CONFIG_BT_COEXIST
        // For bluetooth co-existance
        BT_COEXIST              bt_coexist;
 #ifdef CONFIG_BT_COEXIST
        // For bluetooth co-existance
        BT_COEXIST              bt_coexist;
-#ifdef CONFIG_RTL8723A
-       u8                              bAntennaDetected;
-#endif // CONFIG_RTL8723A
 #endif // CONFIG_BT_COEXIST
 
 #endif // CONFIG_BT_COEXIST
 
-#if defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B)
+#if defined(CONFIG_RTL8723B)
        #ifndef CONFIG_PCI_HCI  // mutual exclusive with PCI -- so they're SDIO and GSPI 
        // Interrupt relatd register information.
        u32                     SysIntrStatus;
        u32                     SysIntrMask;
        #endif
        #ifndef CONFIG_PCI_HCI  // mutual exclusive with PCI -- so they're SDIO and GSPI 
        // Interrupt relatd register information.
        u32                     SysIntrStatus;
        u32                     SysIntrMask;
        #endif
-#endif //endif CONFIG_RTL8723A
-
-       
-#if defined(CONFIG_RTL8192C) ||defined(CONFIG_RTL8192D)
-       
-       u8      BluetoothCoexist;
-       
-       u8      EEPROMChnlAreaTxPwrCCK[2][3];   
-       u8      EEPROMChnlAreaTxPwrHT40_1S[2][3];       
-       u8      EEPROMChnlAreaTxPwrHT40_2SDiff[2][3];
-       u8      EEPROMPwrLimitHT20[3];
-       u8      EEPROMPwrLimitHT40[3];
-       #ifdef CONFIG_RTL8192D
-       MACPHY_MODE_8192D       MacPhyMode92D;
-       BAND_TYPE       CurrentBandType92D;     //0:2.4G, 1:5G
-       BAND_TYPE       BandSet92D;
-       BOOLEAN       bMasterOfDMSP;
-       BOOLEAN       bSlaveOfDMSP;
-
-       IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM_92D];
-       #ifdef CONFIG_DUALMAC_CONCURRENT
-       BOOLEAN         bInModeSwitchProcess;
-       #endif
-       u8      AutoLoadStatusFor8192D;
-       u8      EEPROMC9;
-       u8      EEPROMCC;
-       u8      PAMode;
-       u8      InternalPA5G[2];        //pathA / pathB
-       BOOLEAN         bPhyValueInitReady;
-       BOOLEAN         bLoadIMRandIQKSettingFor2G;// True if IMR or IQK  have done  for 2.4G in scan progress
-       BOOLEAN         bNOPG;
-       BOOLEAN         bIsVS;
-       //Query RF by FW
-       BOOLEAN         bReadRFbyFW;
-       BOOLEAN         bEarlyModeEnable;
-       BOOLEAN         bSupportRemoteWakeUp;
-       BOOLEAN         bInSetPower;
-       u8      RTSInitRate;     // 2010.11.24.by tynli.        
-       #endif //CONFIG_RTL8192D 
-
-#endif //defined(CONFIG_RTL8192C) ||defined(CONFIG_RTL8192D)
+#endif /*endif CONFIG_RTL8723B */
 
 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
        char    para_file_buf[MAX_PARA_FILE_BUF_LEN];
 
 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
        char    para_file_buf[MAX_PARA_FILE_BUF_LEN];
@@ -704,17 +525,27 @@ typedef struct hal_com_data
        s16 noise[ODM_MAX_CHANNEL_NUM];
 #endif
 
        s16 noise[ODM_MAX_CHANNEL_NUM];
 #endif
 
-       u8 macid_num;
-       u8 cam_entry_num;
+       u8      macid_num;
+       u8      cam_entry_num;
+       u8      RfKFreeEnable;
 
 } HAL_DATA_COMMON, *PHAL_DATA_COMMON;
 
 
 
 } HAL_DATA_COMMON, *PHAL_DATA_COMMON;
 
 
+
 typedef struct hal_com_data HAL_DATA_TYPE, *PHAL_DATA_TYPE;
 typedef struct hal_com_data HAL_DATA_TYPE, *PHAL_DATA_TYPE;
-#define GET_HAL_DATA(__pAdapter)       ((HAL_DATA_TYPE *)((__pAdapter)->HalData))
-#define GET_HAL_RFPATH_NUM(__pAdapter) (((HAL_DATA_TYPE *)((__pAdapter)->HalData))->NumTotalRFPath )
-#define RT_GetInterfaceSelection(_Adapter)     (GET_HAL_DATA(_Adapter)->InterfaceSel)
-#define GET_RF_TYPE(__pAdapter)                (GET_HAL_DATA(__pAdapter)->rf_type)
+#define GET_HAL_DATA(__pAdapter)                       ((HAL_DATA_TYPE *)((__pAdapter)->HalData))
+#define GET_HAL_RFPATH_NUM(__pAdapter)         (((HAL_DATA_TYPE *)((__pAdapter)->HalData))->NumTotalRFPath )
+#define RT_GetInterfaceSelection(_Adapter)             (GET_HAL_DATA(_Adapter)->InterfaceSel)
+#define GET_RF_TYPE(__pAdapter)                                (GET_HAL_DATA(__pAdapter)->rf_type)
+
+#define        SUPPORT_HW_RADIO_DETECT(Adapter)        (       RT_GetInterfaceSelection(Adapter) == INTF_SEL2_MINICARD ||\
+                                                                                               RT_GetInterfaceSelection(Adapter) == INTF_SEL3_USB_Solo ||\
+                                                                                               RT_GetInterfaceSelection(Adapter) == INTF_SEL4_USB_Combo)
+
+#define get_hal_mac_addr(adapter)                              (GET_HAL_DATA(adapter)->EEPROMMACAddr)
+#define is_boot_from_eeprom(adapter)                   (GET_HAL_DATA(adapter)->EepromOrEfuse)
+
 #endif
 
 
 #endif
 
 
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_gspi.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_gspi.h
deleted file mode 100755 (executable)
index f5880e2..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __HAL_GSPI_H_
-#define __HAL_GSPI_H_
-
-#define ffaddr2deviceId(pdvobj, addr)  (pdvobj->Queue2Pipe[addr])
-
-u8 rtw_hal_gspi_max_txoqt_free_space(_adapter *padapter);
-u8 rtw_hal_gspi_query_tx_freepage(_adapter *padapter, u8 PageIdx, u8 RequiredPageNum);
-void rtw_hal_gspi_update_tx_freepage(_adapter *padapter, u8 PageIdx, u8 RequiredPageNum);
-void rtw_hal_set_gspi_tx_max_length(PADAPTER padapter, u8 numHQ, u8 numNQ, u8 numLQ, u8 numPubQ);
-u32 rtw_hal_get_gspi_tx_max_length(PADAPTER padapter, u8 queue_idx);
-
-#endif 
-
index 9dadd66cfaac5bdecac3a85080b79df884d48ed2..b58556097eb8ea9e891a6301f32897f582a4042e 100755 (executable)
@@ -30,15 +30,13 @@ enum RTL871X_HCI_TYPE {
 
 enum _CHIP_TYPE {
 
 
 enum _CHIP_TYPE {
 
-       NULL_CHIP_TYPE, 
-       RTL8188C_8192C,
-       RTL8192D,
-       RTL8723A,
+       NULL_CHIP_TYPE,
        RTL8188E,
        RTL8192E,
        RTL8812,
        RTL8821, //RTL8811
        RTL8723B,
        RTL8188E,
        RTL8192E,
        RTL8812,
        RTL8821, //RTL8811
        RTL8723B,
+       RTL8814A,
        MAX_CHIP_TYPE
 };
 
        MAX_CHIP_TYPE
 };
 
@@ -68,10 +66,12 @@ typedef enum _HW_VARIABLES{
        HW_VAR_SEC_DK_CFG,
        HW_VAR_BCN_VALID,
        HW_VAR_RF_TYPE,
        HW_VAR_SEC_DK_CFG,
        HW_VAR_BCN_VALID,
        HW_VAR_RF_TYPE,
-       HW_VAR_DM_FLAG,
+       /* PHYDM odm->SupportAbility */ 
+       HW_VAR_DM_FLAG, 
        HW_VAR_DM_FUNC_OP,
        HW_VAR_DM_FUNC_SET,
        HW_VAR_DM_FUNC_CLR,
        HW_VAR_DM_FUNC_OP,
        HW_VAR_DM_FUNC_SET,
        HW_VAR_DM_FUNC_CLR,
+       /* PHYDM odm->SupportAbility */
        HW_VAR_CAM_EMPTY_ENTRY,
        HW_VAR_CAM_INVALID_ALL,
        HW_VAR_CAM_WRITE,
        HW_VAR_CAM_EMPTY_ENTRY,
        HW_VAR_CAM_INVALID_ALL,
        HW_VAR_CAM_WRITE,
@@ -92,9 +92,7 @@ typedef enum _HW_VARIABLES{
        HW_VAR_FWLPS_RF_ON,
        HW_VAR_H2C_FW_P2P_PS_OFFLOAD,
        HW_VAR_TDLS_WRCR,
        HW_VAR_FWLPS_RF_ON,
        HW_VAR_H2C_FW_P2P_PS_OFFLOAD,
        HW_VAR_TDLS_WRCR,
-       HW_VAR_TDLS_INIT_CH_SEN,
        HW_VAR_TDLS_RS_RCR,
        HW_VAR_TDLS_RS_RCR,
-       HW_VAR_TDLS_DONE_CH_SEN,
        HW_VAR_INITIAL_GAIN,
        HW_VAR_TRIGGER_GPIO_0,
        HW_VAR_BT_SET_COEXIST,
        HW_VAR_INITIAL_GAIN,
        HW_VAR_TRIGGER_GPIO_0,
        HW_VAR_BT_SET_COEXIST,
@@ -120,6 +118,9 @@ typedef enum _HW_VARIABLES{
 #endif
 #ifdef CONFIG_AP_WOWLAN
        HW_VAR_AP_WOWLAN,
 #endif
 #ifdef CONFIG_AP_WOWLAN
        HW_VAR_AP_WOWLAN,
+#endif
+#ifdef CONFIG_GPIO_WAKEUP
+       HW_SET_GPIO_WL_CTRL,
 #endif
        HW_VAR_SYS_CLKR,
        HW_VAR_NAV_UPPER,
 #endif
        HW_VAR_SYS_CLKR,
        HW_VAR_NAV_UPPER,
@@ -158,7 +159,6 @@ typedef enum _HAL_DEF_VARIABLE{
        HAL_DEF_MAX_RECVBUF_SZ,
        HAL_DEF_RX_PACKET_OFFSET,
        HAL_DEF_DBG_DUMP_RXPKT,//for dbg
        HAL_DEF_MAX_RECVBUF_SZ,
        HAL_DEF_RX_PACKET_OFFSET,
        HAL_DEF_DBG_DUMP_RXPKT,//for dbg
-       HAL_DEF_DBG_DM_FUNC,//for dbg
        HAL_DEF_RA_DECISION_RATE,
        HAL_DEF_RA_SGI,
        HAL_DEF_PT_PWR_STATUS,
        HAL_DEF_RA_DECISION_RATE,
        HAL_DEF_RA_SGI,
        HAL_DEF_PT_PWR_STATUS,
@@ -184,6 +184,8 @@ typedef enum _HAL_DEF_VARIABLE{
        HAL_DEF_MACID_SLEEP, // Support for MACID sleep
        HAL_DEF_DBG_RX_INFO_DUMP,
        HAL_DEF_DBG_DIS_PWT, //disable Tx power training or not.
        HAL_DEF_MACID_SLEEP, // Support for MACID sleep
        HAL_DEF_DBG_RX_INFO_DUMP,
        HAL_DEF_DBG_DIS_PWT, //disable Tx power training or not.
+       HAL_DEF_EFUSE_USAGE,    /* Get current EFUSE utilization. 2008.12.19. Added by Roger. */
+       HAL_DEF_EFUSE_BYTES,
 }HAL_DEF_VARIABLE;
 
 typedef enum _HAL_ODM_VARIABLE{
 }HAL_DEF_VARIABLE;
 
 typedef enum _HAL_ODM_VARIABLE{
@@ -202,41 +204,58 @@ typedef enum _HAL_INTF_PS_FUNC{
 typedef s32 (*c2h_id_filter)(u8 *c2h_evt);
 
 struct hal_ops {
 typedef s32 (*c2h_id_filter)(u8 *c2h_evt);
 
 struct hal_ops {
+       /*** initialize section ***/
+       void    (*read_chip_version)(_adapter *padapter);
+       void    (*init_default_value)(_adapter *padapter);
+       void    (*intf_chip_configure)(_adapter *padapter);
+       void    (*read_adapter_info)(_adapter *padapter);
        u32     (*hal_power_on)(_adapter *padapter);
        u32     (*hal_power_on)(_adapter *padapter);
-       void    (*hal_power_off)(_adapter *padapter);
+       void    (*hal_power_off)(_adapter *padapter);   
        u32     (*hal_init)(_adapter *padapter);
        u32     (*hal_deinit)(_adapter *padapter);
        u32     (*hal_init)(_adapter *padapter);
        u32     (*hal_deinit)(_adapter *padapter);
-
-       void    (*free_hal_data)(_adapter *padapter);
-
-       u32     (*inirp_init)(_adapter *padapter);
-       u32     (*inirp_deinit)(_adapter *padapter);
-       void    (*irp_reset)(_adapter *padapter);
-
+       void    (*dm_init)(_adapter *padapter);
+       void    (*dm_deinit)(_adapter *padapter);
+       
+       /*** xmit section ***/
        s32     (*init_xmit_priv)(_adapter *padapter);
        void    (*free_xmit_priv)(_adapter *padapter);
        s32     (*init_xmit_priv)(_adapter *padapter);
        void    (*free_xmit_priv)(_adapter *padapter);
+       s32     (*hal_xmit)(_adapter *padapter, struct xmit_frame *pxmitframe);
+       /*
+        * mgnt_xmit should be implemented to run in interrupt context
+        */
+       s32 (*mgnt_xmit)(_adapter *padapter, struct xmit_frame *pmgntframe);
+       s32     (*hal_xmitframe_enqueue)(_adapter *padapter, struct xmit_frame *pxmitframe);
+#ifdef CONFIG_XMIT_THREAD_MODE
+       s32 (*xmit_thread_handler)(_adapter *padapter);
+#endif
+       void    (*run_thread)(_adapter *padapter);
+       void    (*cancel_thread)(_adapter *padapter);
 
 
+       /*** recv section ***/
        s32     (*init_recv_priv)(_adapter *padapter);
        s32     (*init_recv_priv)(_adapter *padapter);
-       void    (*free_recv_priv)(_adapter *padapter);
+       void    (*free_recv_priv)(_adapter *padapter);  
+#if defined(CONFIG_USB_HCI)||defined(CONFIG_PCI_HCI)
+       u32     (*inirp_init)(_adapter *padapter);
+       u32     (*inirp_deinit)(_adapter *padapter);
+#endif
+       /*** interrupt hdl section ***/
+       void    (*enable_interrupt)(_adapter *padapter);
+       void    (*disable_interrupt)(_adapter *padapter);
+       u8      (*check_ips_status)(_adapter *padapter);
+#if defined(CONFIG_PCI_HCI)
+       s32     (*interrupt_handler)(_adapter *padapter);
+#endif
 
 
+#if defined(CONFIG_PCI_HCI)
+       void    (*irp_reset)(_adapter *padapter);
+#endif
+               
+       /*** DM section ***/
+       
        void    (*InitSwLeds)(_adapter *padapter);
        void    (*DeInitSwLeds)(_adapter *padapter);
        void    (*InitSwLeds)(_adapter *padapter);
        void    (*DeInitSwLeds)(_adapter *padapter);
+               
 
 
-       void    (*dm_init)(_adapter *padapter);
-       void    (*dm_deinit)(_adapter *padapter);
-       void    (*read_chip_version)(_adapter *padapter);
-
-       void    (*init_default_value)(_adapter *padapter);
-
-       void    (*intf_chip_configure)(_adapter *padapter);
-
-       void    (*read_adapter_info)(_adapter *padapter);
-
-       void    (*enable_interrupt)(_adapter *padapter);
-       void    (*disable_interrupt)(_adapter *padapter);
-       u8              (*check_ips_status)(_adapter *padapter);
-       s32             (*interrupt_handler)(_adapter *padapter);
-       void    (*clear_interrupt)(_adapter *padapter);
        void    (*set_bwmode_handler)(_adapter *padapter, CHANNEL_WIDTH Bandwidth, u8 Offset);
        void    (*set_channel_handler)(_adapter *padapter, u8 channel);
        void    (*set_chnl_bw_handler)(_adapter *padapter, u8 channel, CHANNEL_WIDTH Bandwidth, u8 Offset40, u8 Offset80);
        void    (*set_bwmode_handler)(_adapter *padapter, CHANNEL_WIDTH Bandwidth, u8 Offset);
        void    (*set_channel_handler)(_adapter *padapter, u8 channel);
        void    (*set_chnl_bw_handler)(_adapter *padapter, u8 channel, CHANNEL_WIDTH Bandwidth, u8 Offset40, u8 Offset80);
@@ -245,14 +264,15 @@ struct hal_ops {
        void    (*get_tx_power_level_handler)(_adapter *padapter, s32 *powerlevel);
 
        void    (*hal_dm_watchdog)(_adapter *padapter);
        void    (*get_tx_power_level_handler)(_adapter *padapter, s32 *powerlevel);
 
        void    (*hal_dm_watchdog)(_adapter *padapter);
+#ifdef CONFIG_LPS_LCLK_WD_TIMER
        void    (*hal_dm_watchdog_in_lps)(_adapter *padapter);
        void    (*hal_dm_watchdog_in_lps)(_adapter *padapter);
-       
+#endif
 
        void    (*SetHwRegHandler)(_adapter *padapter, u8       variable,u8* val);
        void    (*GetHwRegHandler)(_adapter *padapter, u8       variable,u8* val);
 
 #ifdef CONFIG_C2H_PACKET_EN
 
        void    (*SetHwRegHandler)(_adapter *padapter, u8       variable,u8* val);
        void    (*GetHwRegHandler)(_adapter *padapter, u8       variable,u8* val);
 
 #ifdef CONFIG_C2H_PACKET_EN
-               void    (*SetHwRegHandlerWithBuf)(_adapter *padapter, u8 variable, u8* pbuf, int len);
+       void    (*SetHwRegHandlerWithBuf)(_adapter *padapter, u8 variable, u8 * pbuf, int len);
 #endif
 
        u8      (*GetHalDefVarHandler)(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
 #endif
 
        u8      (*GetHalDefVarHandler)(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
@@ -266,8 +286,6 @@ struct hal_ops {
 
        void    (*Add_RateATid)(_adapter *padapter, u32 bitmap, u8* arg, u8 rssi_level);
 
 
        void    (*Add_RateATid)(_adapter *padapter, u32 bitmap, u8* arg, u8 rssi_level);
 
-       void    (*run_thread)(_adapter *padapter);
-       void    (*cancel_thread)(_adapter *padapter);
 
 #ifdef CONFIG_ANTENNA_DIVERSITY
        u8      (*AntDivBeforeLinkHandler)(_adapter *padapter);
 
 #ifdef CONFIG_ANTENNA_DIVERSITY
        u8      (*AntDivBeforeLinkHandler)(_adapter *padapter);
@@ -275,12 +293,6 @@ struct hal_ops {
 #endif
        u8      (*interface_ps_func)(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
 
 #endif
        u8      (*interface_ps_func)(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
 
-       s32     (*hal_xmit)(_adapter *padapter, struct xmit_frame *pxmitframe);
-       /*
-        * mgnt_xmit should be implemented to run in interrupt context
-        */
-       s32 (*mgnt_xmit)(_adapter *padapter, struct xmit_frame *pmgntframe);
-       s32     (*hal_xmitframe_enqueue)(_adapter *padapter, struct xmit_frame *pxmitframe);
 
        u32     (*read_bbreg)(_adapter *padapter, u32 RegAddr, u32 BitMask);
        void    (*write_bbreg)(_adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data);
 
        u32     (*read_bbreg)(_adapter *padapter, u32 RegAddr, u32 BitMask);
        void    (*write_bbreg)(_adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data);
@@ -315,23 +327,27 @@ struct hal_ops {
        int (*IOL_exec_cmds_sync)(_adapter *padapter, struct xmit_frame *xmit_frame, u32 max_wating_ms, u32 bndy_cnt);
 #endif
 
        int (*IOL_exec_cmds_sync)(_adapter *padapter, struct xmit_frame *xmit_frame, u32 max_wating_ms, u32 bndy_cnt);
 #endif
 
-#ifdef CONFIG_XMIT_THREAD_MODE
-       s32 (*xmit_thread_handler)(_adapter *padapter);
-#endif
        void (*hal_notch_filter)(_adapter * adapter, bool enable);
        void (*hal_reset_security_engine)(_adapter * adapter);
        s32 (*c2h_handler)(_adapter *padapter, u8 *c2h_evt);
        c2h_id_filter c2h_id_filter_ccx;
        s32 (*fill_h2c_cmd)(PADAPTER, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
        void (*hal_notch_filter)(_adapter * adapter, bool enable);
        void (*hal_reset_security_engine)(_adapter * adapter);
        s32 (*c2h_handler)(_adapter *padapter, u8 *c2h_evt);
        c2h_id_filter c2h_id_filter_ccx;
        s32 (*fill_h2c_cmd)(PADAPTER, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
-#if defined(CONFIG_RTL8188E) || defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B)
-       void (*hal_cal_txdesc_chksum)(struct tx_desc *ptxdesc);
-#else
-       void (*hal_cal_txdesc_chksum)(u8 *ptxdesc);
-#endif
-#ifdef CONFIG_WOWLAN
+       void (*fill_fake_txdesc)(PADAPTER, u8 *pDesc, u32 BufferLen,
+                       u8 IsPsPoll, u8 IsBTQosNull, u8 bDataFrame);
+       
+#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
        void (*hal_set_wowlan_fw)(_adapter *adapter, u8 sleep);
        void (*hal_set_wowlan_fw)(_adapter *adapter, u8 sleep);
-#endif //CONFIG_WOWLAN
+       void (*clear_interrupt)(_adapter *padapter);
+#endif 
+
+#ifdef CONFIG_AP_WOWLAN
+       void (*hal_set_ap_wowlan_cmd)(_adapter *padapter, u8 enable);
+       void (*hal_set_ap_ps_wowlan_cmd)(_adapter *padapter , u8 enable);
+#endif
        u8 (*hal_get_tx_buff_rsvd_page_num)(_adapter *adapter, bool wowlan);
        u8 (*hal_get_tx_buff_rsvd_page_num)(_adapter *adapter, bool wowlan);
+#ifdef CONFIG_GPIO_API
+       void (*update_hisr_hsisr_ind)(PADAPTER padapter, u32 flag);
+#endif
 };
 
 typedef        enum _RT_EEPROM_TYPE{
 };
 
 typedef        enum _RT_EEPROM_TYPE{
@@ -349,22 +365,6 @@ typedef    enum _RT_EEPROM_TYPE{
 #define RF_CHANGE_BY_SW        BIT31
 
 typedef enum _HARDWARE_TYPE{
 #define RF_CHANGE_BY_SW        BIT31
 
 typedef enum _HARDWARE_TYPE{
-       HARDWARE_TYPE_RTL8180,
-       HARDWARE_TYPE_RTL8185,
-       HARDWARE_TYPE_RTL8187,
-       HARDWARE_TYPE_RTL8188,
-       HARDWARE_TYPE_RTL8190P,
-       HARDWARE_TYPE_RTL8192E,
-       HARDWARE_TYPE_RTL819xU,
-       HARDWARE_TYPE_RTL8192SE,
-       HARDWARE_TYPE_RTL8192SU,
-       HARDWARE_TYPE_RTL8192CE,
-       HARDWARE_TYPE_RTL8192CU,
-       HARDWARE_TYPE_RTL8192DE,
-       HARDWARE_TYPE_RTL8192DU,
-       HARDWARE_TYPE_RTL8723AE,
-       HARDWARE_TYPE_RTL8723AU,
-       HARDWARE_TYPE_RTL8723AS,
        HARDWARE_TYPE_RTL8188EE,
        HARDWARE_TYPE_RTL8188EU,
        HARDWARE_TYPE_RTL8188ES,
        HARDWARE_TYPE_RTL8188EE,
        HARDWARE_TYPE_RTL8188EU,
        HARDWARE_TYPE_RTL8188ES,
@@ -381,14 +381,26 @@ typedef enum _HARDWARE_TYPE{
        HARDWARE_TYPE_RTL8723BE,
        HARDWARE_TYPE_RTL8723BU,
        HARDWARE_TYPE_RTL8723BS,
        HARDWARE_TYPE_RTL8723BE,
        HARDWARE_TYPE_RTL8723BU,
        HARDWARE_TYPE_RTL8723BS,
-       HARDWARE_TYPE_RTL8813AE,
-       HARDWARE_TYPE_RTL8813AU,
-       HARDWARE_TYPE_RTL8813AS,
-
+       HARDWARE_TYPE_RTL8814AE,
+       HARDWARE_TYPE_RTL8814AU,
+       HARDWARE_TYPE_RTL8814AS,
+       HARDWARE_TYPE_RTL8821BE,
+       HARDWARE_TYPE_RTL8821BU,
+       HARDWARE_TYPE_RTL8821BS,
+       HARDWARE_TYPE_RTL8822BE,
+       HARDWARE_TYPE_RTL8822BU,
+       HARDWARE_TYPE_RTL8822BS,
+       HARDWARE_TYPE_RTL8703BE,
+       HARDWARE_TYPE_RTL8703BU,
+       HARDWARE_TYPE_RTL8703BS,
+       HARDWARE_TYPE_RTL8188FE,
+       HARDWARE_TYPE_RTL8188FU,
+       HARDWARE_TYPE_RTL8188FS,
        HARDWARE_TYPE_MAX,
 }HARDWARE_TYPE;
 
 #define IS_NEW_GENERATION_IC(_Adapter) (((PADAPTER)_Adapter)->HardwareType >=HARDWARE_TYPE_RTL8192EE)
        HARDWARE_TYPE_MAX,
 }HARDWARE_TYPE;
 
 #define IS_NEW_GENERATION_IC(_Adapter) (((PADAPTER)_Adapter)->HardwareType >=HARDWARE_TYPE_RTL8192EE)
+#if 0
 //
 // RTL8192C Series
 //
 //
 // RTL8192C Series
 //
@@ -416,6 +428,7 @@ typedef enum _HARDWARE_TYPE{
 #define IS_HARDWARE_TYPE_8723AS(_Adapter)      (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723AS)
 #define        IS_HARDWARE_TYPE_8723A(_Adapter)        \
 (IS_HARDWARE_TYPE_8723AE(_Adapter) || IS_HARDWARE_TYPE_8723AU(_Adapter) || IS_HARDWARE_TYPE_8723AS(_Adapter))
 #define IS_HARDWARE_TYPE_8723AS(_Adapter)      (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723AS)
 #define        IS_HARDWARE_TYPE_8723A(_Adapter)        \
 (IS_HARDWARE_TYPE_8723AE(_Adapter) || IS_HARDWARE_TYPE_8723AU(_Adapter) || IS_HARDWARE_TYPE_8723AS(_Adapter))
+#endif
 
 //
 // RTL8188E Series
 
 //
 // RTL8188E Series
@@ -426,17 +439,6 @@ typedef enum _HARDWARE_TYPE{
 #define        IS_HARDWARE_TYPE_8188E(_Adapter)        \
 (IS_HARDWARE_TYPE_8188EE(_Adapter) || IS_HARDWARE_TYPE_8188EU(_Adapter) || IS_HARDWARE_TYPE_8188ES(_Adapter))
 
 #define        IS_HARDWARE_TYPE_8188E(_Adapter)        \
 (IS_HARDWARE_TYPE_8188EE(_Adapter) || IS_HARDWARE_TYPE_8188EU(_Adapter) || IS_HARDWARE_TYPE_8188ES(_Adapter))
 
-
-#define        IS_HARDWARE_TYPE_8188E_before(_Adapter)                 \
-(IS_HARDWARE_TYPE_8192C(_Adapter) ||IS_HARDWARE_TYPE_8192D(_Adapter) ||IS_HARDWARE_TYPE_8723A(_Adapter))
-
-
-#define IS_HARDWARE_TYPE_OLDER_THAN_8812A(_Adapter)    \
-(IS_HARDWARE_TYPE_8192D(_Adapter) || IS_HARDWARE_TYPE_8192C(_Adapter) ||\
- IS_HARDWARE_TYPE_8723AE(_Adapter) || IS_HARDWARE_TYPE_8723AU(_Adapter) || IS_HARDWARE_TYPE_8723AS(_Adapter) ||\
- IS_HARDWARE_TYPE_8188EE(_Adapter) || IS_HARDWARE_TYPE_8188EU(_Adapter) || IS_HARDWARE_TYPE_8188ES(_Adapter)\
-)
-
 // RTL8812 Series
 #define IS_HARDWARE_TYPE_8812E(_Adapter)               (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8812E)
 #define IS_HARDWARE_TYPE_8812AU(_Adapter)      (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8812AU)
 // RTL8812 Series
 #define IS_HARDWARE_TYPE_8812E(_Adapter)               (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8812E)
 #define IS_HARDWARE_TYPE_8812AU(_Adapter)      (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8812AU)
@@ -471,18 +473,48 @@ typedef enum _HARDWARE_TYPE{
 #define IS_HARDWARE_TYPE_8723B(_Adapter) \
        (IS_HARDWARE_TYPE_8723BE(_Adapter) || IS_HARDWARE_TYPE_8723BU(_Adapter) ||IS_HARDWARE_TYPE_8723BS(_Adapter))
 
 #define IS_HARDWARE_TYPE_8723B(_Adapter) \
        (IS_HARDWARE_TYPE_8723BE(_Adapter) || IS_HARDWARE_TYPE_8723BU(_Adapter) ||IS_HARDWARE_TYPE_8723BS(_Adapter))
 
-//RTL8813A Series
-#define IS_HARDWARE_TYPE_8813AE(_Adapter)              (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8813AE)
-#define IS_HARDWARE_TYPE_8813AU(_Adapter)              (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8813AU)
-#define IS_HARDWARE_TYPE_8813AS(_Adapter)              (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8813AS)
+/* RTL8814A Series */
+#define IS_HARDWARE_TYPE_8814AE(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8814AE)
+#define IS_HARDWARE_TYPE_8814AU(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8814AU)
+#define IS_HARDWARE_TYPE_8814AS(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8814AS)
+
+#define IS_HARDWARE_TYPE_8814A(_Adapter)               \
+(IS_HARDWARE_TYPE_8814AE(_Adapter) || IS_HARDWARE_TYPE_8814AU(_Adapter) || IS_HARDWARE_TYPE_8814AS(_Adapter))
+
+#define IS_HARDWARE_TYPE_JAGUAR2(_Adapter)             \
+(IS_HARDWARE_TYPE_8814A(_Adapter) || IS_HARDWARE_TYPE_8821B(_Adapter) || IS_HARDWARE_TYPE_8822B(_Adapter))
+
+#define IS_HARDWARE_TYPE_JAGUAR_AND_JAGUAR2(_Adapter)          \
+(IS_HARDWARE_TYPE_JAGUAR(_Adapter) || IS_HARDWARE_TYPE_JAGUAR2(_Adapter))
+
+/* RTL8703B Series */
+#define IS_HARDWARE_TYPE_8703BE(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8703BE)
+#define IS_HARDWARE_TYPE_8703BS(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8703BS)
+#define IS_HARDWARE_TYPE_8703BU(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8703BU)
+#define        IS_HARDWARE_TYPE_8703B(_Adapter)                        \
+(IS_HARDWARE_TYPE_8703BE(_Adapter) || IS_HARDWARE_TYPE_8703BU(_Adapter) || IS_HARDWARE_TYPE_8703BS(_Adapter))
+
+/* RTL8188F Series */
+#define IS_HARDWARE_TYPE_8188FE(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8188FE)
+#define IS_HARDWARE_TYPE_8188FS(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8188FS)
+#define IS_HARDWARE_TYPE_8188FU(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8188FU)
+#define        IS_HARDWARE_TYPE_8188F(_Adapter)                        \
+(IS_HARDWARE_TYPE_8188FE(_Adapter) || IS_HARDWARE_TYPE_8188FU(_Adapter) || IS_HARDWARE_TYPE_8188FS(_Adapter))
+
+#define IS_HARDWARE_TYPE_8821BE(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8821BE)
+#define IS_HARDWARE_TYPE_8821BU(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8821BU)
+#define IS_HARDWARE_TYPE_8821BS(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8821BS)
 
 
-#define IS_HARDWARE_TYPE_8813A(_Adapter)               \
-(IS_HARDWARE_TYPE_8813AE(_Adapter) || IS_HARDWARE_TYPE_8813AU(_Adapter) ||IS_HARDWARE_TYPE_8813AS(_Adapter))
+#define IS_HARDWARE_TYPE_8821B(_Adapter)               \
+(IS_HARDWARE_TYPE_8821BE(_Adapter) || IS_HARDWARE_TYPE_8821BU(_Adapter) || IS_HARDWARE_TYPE_8821BS(_Adapter))
+
+#define IS_HARDWARE_TYPE_8822BE(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8822BE)
+#define IS_HARDWARE_TYPE_8822BU(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8822BU)
+#define IS_HARDWARE_TYPE_8822BS(_Adapter)              (((PADAPTER)_Adapter)->HardwareType == HARDWARE_TYPE_RTL8822BS)
+#define IS_HARDWARE_TYPE_8822B(_Adapter)               \
+(IS_HARDWARE_TYPE_8822BE(_Adapter) || IS_HARDWARE_TYPE_8822BU(_Adapter) || IS_HARDWARE_TYPE_8822BS(_Adapter))
 
 
 
 
-typedef struct eeprom_priv EEPROM_EFUSE_PRIV, *PEEPROM_EFUSE_PRIV;
-#define GET_EEPROM_EFUSE_PRIV(adapter) (&adapter->eeprompriv)
-#define is_boot_from_eeprom(adapter) (adapter->eeprompriv.EepromOrEfuse)
 
 typedef enum _wowlan_subcode{
        WOWLAN_PATTERN_MATCH    = 1,
 
 typedef enum _wowlan_subcode{
        WOWLAN_PATTERN_MATCH    = 1,
@@ -520,6 +552,9 @@ struct wowlan_ioctl_param{
 #define        RX_PNOWakeUp                    0x55
 #define        AP_WakeUp                       0x66
 
 #define        RX_PNOWakeUp                    0x55
 #define        AP_WakeUp                       0x66
 
+u8 rtw_hal_data_init(_adapter *padapter);
+void rtw_hal_data_deinit(_adapter *padapter);
+
 void rtw_hal_def_value_init(_adapter *padapter);
 
 void   rtw_hal_free_data(_adapter *padapter);
 void rtw_hal_def_value_init(_adapter *padapter);
 
 void   rtw_hal_free_data(_adapter *padapter);
@@ -531,6 +566,7 @@ void rtw_hal_sw_led_deinit(_adapter *padapter);
 
 u32 rtw_hal_power_on(_adapter *padapter);
 void rtw_hal_power_off(_adapter *padapter);
 
 u32 rtw_hal_power_on(_adapter *padapter);
 void rtw_hal_power_off(_adapter *padapter);
+
 uint rtw_hal_init(_adapter *padapter);
 uint rtw_hal_deinit(_adapter *padapter);
 void rtw_hal_stop(_adapter *padapter);
 uint rtw_hal_init(_adapter *padapter);
 uint rtw_hal_deinit(_adapter *padapter);
 void rtw_hal_stop(_adapter *padapter);
@@ -550,16 +586,20 @@ u8 rtw_hal_get_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pVa
 
 void rtw_hal_set_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,BOOLEAN bSet);
 void   rtw_hal_get_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,PVOID pValue2);
 
 void rtw_hal_set_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,BOOLEAN bSet);
 void   rtw_hal_get_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,PVOID pValue2);
-       
+
 void rtw_hal_enable_interrupt(_adapter *padapter);
 void rtw_hal_disable_interrupt(_adapter *padapter);
 
 u8 rtw_hal_check_ips_status(_adapter *padapter);
 
 void rtw_hal_enable_interrupt(_adapter *padapter);
 void rtw_hal_disable_interrupt(_adapter *padapter);
 
 u8 rtw_hal_check_ips_status(_adapter *padapter);
 
+#if defined(CONFIG_USB_HCI)||defined(CONFIG_PCI_HCI)
 u32    rtw_hal_inirp_init(_adapter *padapter);
 u32    rtw_hal_inirp_deinit(_adapter *padapter);
 u32    rtw_hal_inirp_init(_adapter *padapter);
 u32    rtw_hal_inirp_deinit(_adapter *padapter);
+#endif
 
 
+#if defined(CONFIG_PCI_HCI)
 void   rtw_hal_irp_reset(_adapter *padapter);
 void   rtw_hal_irp_reset(_adapter *padapter);
+#endif
 
 u8     rtw_hal_intf_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
 
 
 u8     rtw_hal_intf_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
 
@@ -645,7 +685,20 @@ s32 rtw_hal_is_disable_sw_channel_plan(PADAPTER padapter);
 s32 rtw_hal_macid_sleep(PADAPTER padapter, u8 macid);
 s32 rtw_hal_macid_wakeup(PADAPTER padapter, u8 macid);
 
 s32 rtw_hal_macid_sleep(PADAPTER padapter, u8 macid);
 s32 rtw_hal_macid_wakeup(PADAPTER padapter, u8 macid);
 
-s32 rtw_hal_fill_h2c_cmd(PADAPTER, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
+s32 rtw_hal_fill_h2c_cmd(PADAPTER padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
+void rtw_hal_fill_fake_txdesc(_adapter *padapter, u8 *pDesc, u32 BufferLen,
+               u8 IsPsPoll, u8 IsBTQosNull, u8 bDataFrame);
+u8 rtw_hal_get_txbuff_rsvd_page_num(_adapter *adapter, bool wowlan);
+
+#ifdef CONFIG_GPIO_API
+void rtw_hal_update_hisr_hsisr_ind(_adapter *padapter, u32 flag);
+#endif
+
+#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
+void rtw_hal_clear_interrupt(_adapter *padapter);
+void rtw_hal_set_wowlan_fw(_adapter *padapter, u8 sleep);
+#endif
+u8 rtw_hal_ops_check(_adapter *padapter);
 
 #endif //__HAL_INTF_H__
 
 
 #endif //__HAL_INTF_H__
 
index 9d9911f3cf3b45830dac20a9c4273f25467a90b2..26280caa5f2bbdbb3b8304a6f5e88381418fa89d 100755 (executable)
 #ifndef __HAL_PG_H__\r
 #define __HAL_PG_H__\r
 \r
 #ifndef __HAL_PG_H__\r
 #define __HAL_PG_H__\r
 \r
-//====================================================\r
-//                     EEPROM/Efuse PG Offset for 8192 CE/CU\r
-//====================================================\r
-#define EEPROM_VID_92C                                                 0x0A\r
-#define EEPROM_PID_92C                                                 0x0C\r
-#define EEPROM_DID_92C                                                 0x0C \r
-#define EEPROM_SVID_92C                                                0x0E\r
-#define EEPROM_SMID_92C                                                0x10 \r
-#define EEPROM_MAC_ADDR_92C                                    0x16\r
-\r
-#define EEPROM_MAC_ADDR                                                0x16\r
-#define EEPROM_TV_OPTION                                               0x50\r
-#define EEPROM_SUBCUSTOMER_ID_92C                      0x59\r
-#define EEPROM_CCK_TX_PWR_INX                                  0x5A\r
-#define EEPROM_HT40_1S_TX_PWR_INX                      0x60\r
-#define EEPROM_HT40_2S_TX_PWR_INX_DIFF         0x66\r
-#define EEPROM_HT20_TX_PWR_INX_DIFF                    0x69\r
-#define EEPROM_OFDM_TX_PWR_INX_DIFF                    0x6C\r
-#define EEPROM_HT40_MAX_PWR_OFFSET                     0x6F\r
-#define EEPROM_HT20_MAX_PWR_OFFSET                     0x72\r
-#define EEPROM_CHANNEL_PLAN_92C                                0x75\r
-#define EEPROM_TSSI_A                                                  0x76\r
-#define EEPROM_TSSI_B                                                  0x77\r
-#define EEPROM_THERMAL_METER_92C                               0x78\r
-#define EEPROM_RF_OPT1_92C                                     0x79\r
-#define EEPROM_RF_OPT2_92C                                     0x7A\r
-#define EEPROM_RF_OPT3_92C                                     0x7B\r
-#define EEPROM_RF_OPT4_92C                                     0x7C\r
-#define EEPROM_VERSION_92C                                             0x7E\r
-#define EEPROM_CUSTOMER_ID_92C                         0x7F\r
-\r
-#define EEPROM_NORMAL_CHANNEL_PLAN                     0x75\r
-#define EEPROM_NORMAL_BoardType_92C                    EEPROM_RF_OPT1_92C\r
-#define BOARD_TYPE_NORMAL_MASK                         0xE0\r
-#define BOARD_TYPE_TEST_MASK                                   0xF\r
-#define EEPROM_TYPE_ID                                                 0x7E\r
-\r
-// PCIe related\r
-#define        EEPROM_PCIE_DEV_CAP_01                          0xE0 // Express device capability in PCIe configuration space, i.e., map to offset 0x74\r
-#define        EEPROM_PCIE_DEV_CAP_02                          0xE1 // Express device capability in PCIe configuration space, i.e., map to offset 0x75\r
-\r
-// EEPROM address for Test chip\r
-#define EEPROM_TEST_USB_OPT                                    0x0E\r
-\r
-#define EEPROM_EASY_REPLACEMENT                                0x50//BIT0 1 for build-in module, 0 for external dongle\r
-\r
-//====================================================\r
-//                     EEPROM/Efuse PG Offset for 8723AE/8723AU/8723AS\r
-//====================================================\r
-#define EEPROM_CCK_TX_PWR_INX_8723A                    0x10\r
-#define EEPROM_HT40_1S_TX_PWR_INX_8723A                0x16\r
-#define EEPROM_HT20_TX_PWR_INX_DIFF_8723A      0x1C\r
-#define EEPROM_OFDM_TX_PWR_INX_DIFF_8723A      0x1F\r
-#define EEPROM_HT40_MAX_PWR_OFFSET_8723A       0x22 \r
-#define EEPROM_HT20_MAX_PWR_OFFSET_8723A       0x25 \r
-\r
-#define EEPROM_ChannelPlan_8723A                               0x28\r
-#define EEPROM_TSSI_A_8723A                                    0x29\r
-#define EEPROM_THERMAL_METER_8723A                     0x2A\r
-#define RF_OPTION1_8723A                                               0x2B\r
-#define RF_OPTION2_8723A                                               0x2C\r
-#define RF_OPTION3_8723A                                               0x2D\r
-#define RF_OPTION4_8723A                                               0x2E\r
-#define EEPROM_VERSION_8723A                                   0x30\r
-#define EEPROM_CustomID_8723A                                  0x31\r
-#define EEPROM_SubCustomID_8723A                               0x32\r
-#define EEPROM_XTAL_K_8723A                                    0x33\r
-#define EEPROM_Chipset_8723A                                   0x34\r
-\r
-\r
-// RTL8723AE\r
-#define EEPROM_VID_8723AE                                              0x49\r
-#define EEPROM_DID_8723AE                                              0x4B\r
-#define EEPROM_SVID_8723AE                                             0x4D\r
-#define EEPROM_SMID_8723AE                                     0x4F\r
-#define EEPROM_MAC_ADDR_8723AE                         0x67\r
-\r
-//RTL8723AU\r
-#define EEPROM_MAC_ADDR_8723AU                         0xC6\r
-#define EEPROM_VID_8723AU                                              0xB7\r
-#define EEPROM_PID_8723AU                                              0xB9\r
-\r
-// RTL8723AS\r
-#define EEPROM_MAC_ADDR_8723AS                         0xAA\r
-\r
-//====================================================\r
-//                     EEPROM/Efuse PG Offset for 8192 DE/DU\r
-//====================================================\r
-// pcie\r
-#define RTL8190_EEPROM_ID                                              0x8129  // 0-1\r
-#define EEPROM_HPON                                                    0x02 // LDO settings.2-5\r
-#define EEPROM_CLK                                                             0x06 // Clock settings.6-7\r
-#define EEPROM_MAC_FUNCTION                                    0x08 // SE Test mode.8\r
-\r
-#define EEPROM_MAC_ADDR_MAC0_92DE                      0x55\r
-#define EEPROM_MAC_ADDR_MAC1_92DE                      0x5B\r
-\r
-//usb\r
-#define EEPROM_ENDPOINT_SETTING                                0x10\r
-#define EEPROM_CHIRP_K                                                 0x12    // Changed\r
-#define EEPROM_USB_PHY                                                 0x13    // Changed\r
-#define EEPROM_STRING                                                  0x1F\r
-#define EEPROM_SUBCUSTOMER_ID_92D                      0x59\r
-\r
-#define EEPROM_MAC_ADDR_MAC0_92DU                      0x19\r
-#define EEPROM_MAC_ADDR_MAC1_92DU                      0x5B\r
-//----------------------------------------------------------------\r
-// 2.4G band Tx power index setting\r
-#define EEPROM_CCK_TX_PWR_INX_2G_92D                                   0x61\r
-#define EEPROM_HT40_1S_TX_PWR_INX_2G_92D                               0x67\r
-#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_2G_92D                  0x6D\r
-#define EEPROM_HT20_TX_PWR_INX_DIFF_2G_92D                             0x70\r
-#define EEPROM_OFDM_TX_PWR_INX_DIFF_2G_92D                             0x73\r
-#define EEPROM_HT40_MAX_PWR_OFFSET_2G_92D                              0x76\r
-#define EEPROM_HT20_MAX_PWR_OFFSET_2G_92D                              0x79\r
-\r
-//5GL channel 32-64\r
-#define EEPROM_HT40_1S_TX_PWR_INX_5GL_92D                              0x7C\r
-#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GL_92D                 0x82\r
-#define EEPROM_HT20_TX_PWR_INX_DIFF_5GL_92D                            0x85\r
-#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GL_92D                    0x88\r
-#define EEPROM_HT40_MAX_PWR_OFFSET_5GL_92D                             0x8B\r
-#define EEPROM_HT20_MAX_PWR_OFFSET_5GL_92D                             0x8E\r
-\r
-//5GM channel 100-140\r
-#define EEPROM_HT40_1S_TX_PWR_INX_5GM_92D                              0x91\r
-#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GM_92D                 0x97\r
-#define EEPROM_HT20_TX_PWR_INX_DIFF_5GM_92D                    0x9A\r
-#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GM_92D                    0x9D\r
-#define EEPROM_HT40_MAX_PWR_OFFSET_5GM_92D                     0xA0\r
-#define EEPROM_HT20_MAX_PWR_OFFSET_5GM_92D                     0xA3\r
-\r
-//5GH channel 149-165\r
-#define EEPROM_HT40_1S_TX_PWR_INX_5GH_92D                              0xA6\r
-#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GH_92D                 0xAC\r
-#define EEPROM_HT20_TX_PWR_INX_DIFF_5GH_92D                    0xAF\r
-#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GH_92D                    0xB2\r
-#define EEPROM_HT40_MAX_PWR_OFFSET_5GH_92D                             0xB5\r
-#define EEPROM_HT20_MAX_PWR_OFFSET_5GH_92D                             0xB8\r
-\r
-\r
-#define EEPROM_CHANNEL_PLAN_92D                                                        0xBB // Map of supported channels.      \r
-#define EEPROM_TEST_CHANNEL_PLAN_92D                                   0xBB\r
-#define EEPROM_THERMAL_METER_92D                                                       0xC3    //[4:0]\r
-#define EEPROM_IQK_DELTA_92D                                                           0xBC\r
-#define EEPROM_LCK_DELTA_92D                                                           0xBC\r
-#define EEPROM_XTAL_K_92D                                                                      0xBD    //[7:5]\r
-#define EEPROM_TSSI_A_5G_92D                                                           0xBE\r
-#define EEPROM_TSSI_B_5G_92D                                                           0xBF\r
-#define EEPROM_TSSI_AB_5G_92D                                                          0xC0\r
-\r
-#define EEPROM_RF_OPT1_92D                                             0xC4\r
-#define EEPROM_RF_OPT2_92D                                             0xC5\r
-#define EEPROM_RF_OPT3_92D                                             0xC6\r
-#define EEPROM_RF_OPT4_92D                                             0xC7\r
-#define EEPROM_RF_OPT5_92D                                             0xC8\r
-#define EEPROM_RF_OPT6_92D                                             0xC9\r
-#define EEPROM_RF_OPT7_92D                                             0xCC\r
-\r
-#define EEPROM_NORMAL_BoardType_92D                            EEPROM_RF_OPT1_92D      //[7:5]\r
-\r
-#define EEPROM_WIDIPAIRING_ADDR                                0xF0\r
-#define EEPROM_WIDIPAIRING_KEY                         0xF6\r
-\r
-#define EEPROM_DEF_PART_NO                                     0x3FD    //Byte\r
-#define EEPROME_CHIP_VERSION_L                         0x3FF\r
-#define EEPROME_CHIP_VERSION_H                         0x3FE\r
-\r
-//----------------------------------------------------------------\r
-\r
-#define EEPROM_VID_92DE                                                0x28\r
-#define EEPROM_PID_92DE                                                0x2A\r
-#define EEPROM_SVID_92DE                                               0x2C\r
-#define EEPROM_SMID_92DE                                               0x2E\r
-#define EEPROM_PATHDIV_92D                                     0xC4\r
-\r
-#define EEPROM_BOARD_OPTIONS_92D                               0xC4\r
-#define EEPROM_5G_LNA_GAIN_92D                         0xC6\r
-#define EEPROM_FEATURE_OPTIONS_92D                     0xC7\r
-#define EEPROM_BT_SETTING_92D                                  0xC8\r
-\r
-#define EEPROM_VERSION_92D                                     0xCA\r
-#define EEPROM_CUSTOMER_ID_92D                         0xCB\r
-\r
-#define EEPROM_VID_92DU                                                0xC\r
-#define EEPROM_PID_92DU                                                0xE\r
-\r
\r
 //====================================================\r
 //                     EEPROM/Efuse PG Offset for 88EE/88EU/88ES\r
 //====================================================\r
 //====================================================\r
 //                     EEPROM/Efuse PG Offset for 88EE/88EU/88ES\r
 //====================================================\r
 #define EEPROM_MAC_ADDR_88EU                                   0xD7\r
 #define EEPROM_VID_88EU                                                0xD0\r
 #define EEPROM_PID_88EU                                                0xD2\r
 #define EEPROM_MAC_ADDR_88EU                                   0xD7\r
 #define EEPROM_VID_88EU                                                0xD0\r
 #define EEPROM_PID_88EU                                                0xD2\r
-#define EEPROM_USB_OPTIONAL_FUNCTION0          0xD4 //8192EU, 8812AU is the same\r
+#define EEPROM_USB_OPTIONAL_FUNCTION0          0xD4 //8188EU,8192EU, 8812AU is the same\r
 #define EEPROM_USB_OPTIONAL_FUNCTION0_8811AU 0x104\r
 \r
 // RTL88ES\r
 #define EEPROM_USB_OPTIONAL_FUNCTION0_8811AU 0x104\r
 \r
 // RTL88ES\r
 #define        EEPROM_LNA_TYPE_5G_8192EU               0xBF\r
 \r
 // RTL8192ES\r
 #define        EEPROM_LNA_TYPE_5G_8192EU               0xBF\r
 \r
 // RTL8192ES\r
-#define        EEPROM_MAC_ADDR_8192ES                          0x11B\r
+#define        EEPROM_MAC_ADDR_8192ES                          0x11A\r
 //====================================================\r
 //                     EEPROM/Efuse PG Offset for 8812AE/8812AU/8812AS\r
 //====================================================\r
 //====================================================\r
 //                     EEPROM/Efuse PG Offset for 8812AE/8812AU/8812AS\r
 //====================================================\r
 #define EEPROM_LNA_TYPE_2G_8812AU                      0xBD\r
 #define EEPROM_LNA_TYPE_5G_8812AU                      0xBF\r
 \r
 #define EEPROM_LNA_TYPE_2G_8812AU                      0xBD\r
 #define EEPROM_LNA_TYPE_5G_8812AU                      0xBF\r
 \r
+//RTL8814AU\r
+#define        EEPROM_MAC_ADDR_8814AU                          0xD8\r
+#define        EEPROM_VID_8814AU                                               0xD0\r
+#define        EEPROM_PID_8814AU                                               0xD2\r
+#define        EEPROM_PA_TYPE_8814AU                           0xBC\r
+#define        EEPROM_LNA_TYPE_2G_8814AU                       0xBD\r
+#define        EEPROM_LNA_TYPE_5G_8814AU                       0xBF\r
+\r
+//====================================================\r
+//                     EEPROM/Efuse PG Offset for 8814AU\r
+//====================================================\r
+#define EEPROM_TX_PWR_INX_8814                         0x10\r
+#define EEPROM_ChannelPlan_8814                                0xB8\r
+#define EEPROM_XTAL_8814                                       0xB9\r
+#define EEPROM_THERMAL_METER_8814                      0xBA\r
+#define        EEPROM_IQK_LCK_8814                                     0xBB\r
+#define EEPROM_RFE_OPTION_8814                         0xCA\r
+\r
+\r
+#define EEPROM_PA_TYPE_8814                                    0xBC\r
+#define EEPROM_LNA_TYPE_AB_2G_8814                     0xBD\r
+#define        EEPROM_LNA_TYPE_CD_2G_8814                      0xBE\r
+#define EEPROM_LNA_TYPE_AB_5G_8814                     0xBF\r
+#define EEPROM_LNA_TYPE_CD_5G_8814                     0xC0\r
+#define        EEPROM_RF_BOARD_OPTION_8814                     0xC1\r
+#define        EEPROM_RF_BT_SETTING_8814                       0xC3\r
+#define        EEPROM_VERSION_8814                                     0xC4\r
+#define        EEPROM_CustomID_8814                            0xC5\r
+#define        EEPROM_TX_BBSWING_2G_8814                       0xC6\r
+#define        EEPROM_TX_BBSWING_5G_8814                       0xC7\r
+#define EEPROM_TRX_ANTENNA_OPTION_8814         0xC9\r
+#define        EEPROM_RFE_OPTION_8814                          0xCA\r
+\r
 //====================================================\r
 //                     EEPROM/Efuse PG Offset for 8821AE/8821AU/8821AS\r
 //====================================================\r
 //====================================================\r
 //                     EEPROM/Efuse PG Offset for 8821AE/8821AU/8821AS\r
 //====================================================\r
 #define EEPROM_PA_TYPE_8723BU                                  0xBC\r
 #define EEPROM_LNA_TYPE_2G_8723BU                              0xBD\r
 \r
 #define EEPROM_PA_TYPE_8723BU                                  0xBC\r
 #define EEPROM_LNA_TYPE_2G_8723BU                              0xBD\r
 \r
+\r
 //RTL8723BS\r
 #define        EEPROM_MAC_ADDR_8723BS                          0x11A\r
 #define EEPROM_Voltage_ADDR_8723B                      0x8\r
 //RTL8723BS\r
 #define        EEPROM_MAC_ADDR_8723BS                          0x11A\r
 #define EEPROM_Voltage_ADDR_8723B                      0x8\r
 #define EEPROM_Default_CrystalCap_8723A                0x20\r
 #define EEPROM_Default_CrystalCap_88E                  0x20\r
 #define EEPROM_Default_CrystalCap_8812                 0x20\r
 #define EEPROM_Default_CrystalCap_8723A                0x20\r
 #define EEPROM_Default_CrystalCap_88E                  0x20\r
 #define EEPROM_Default_CrystalCap_8812                 0x20\r
+#define EEPROM_Default_CrystalCap_8814                 0x20\r
 #define EEPROM_Default_CrystalCap_8192E                        0x20\r
 #define EEPROM_Default_CrystalCap_8723B                        0x20\r
 #define EEPROM_Default_CrystalFreq                             0x0\r
 #define EEPROM_Default_CrystalCap_8192E                        0x20\r
 #define EEPROM_Default_CrystalCap_8723B                        0x20\r
 #define EEPROM_Default_CrystalFreq                             0x0\r
 \r
 #define EEPROM_DEFAULT_TX_CALIBRATE_RATE       0x00\r
 \r
 \r
 #define EEPROM_DEFAULT_TX_CALIBRATE_RATE       0x00\r
 \r
+// PCIe related\r
+#define        EEPROM_PCIE_DEV_CAP_01                          0xE0 // Express device capability in PCIe configuration space, i.e., map to offset 0x74\r
+#define        EEPROM_PCIE_DEV_CAP_02                          0xE1 // Express device capability in PCIe configuration space, i.e., map to offset 0x75\r
+\r
+\r
 //\r
 // For VHT series TX power by rate table.\r
 // VHT TX power by rate off setArray = \r
 //\r
 // For VHT series TX power by rate table.\r
 // VHT TX power by rate off setArray = \r
@@ -643,7 +497,7 @@ typedef     enum _BT_CoType{
        BT_RTL8821              = 7,\r
        BT_RTL8723B             = 8,\r
        BT_RTL8192E             = 9,\r
        BT_RTL8821              = 7,\r
        BT_RTL8723B             = 8,\r
        BT_RTL8192E             = 9,\r
-       BT_RTL8813A             = 10,\r
+       BT_RTL8814A             = 10,\r
        BT_RTL8812A             = 11\r
 } BT_CoType, *PBT_CoType;\r
 \r
        BT_RTL8812A             = 11\r
 } BT_CoType, *PBT_CoType;\r
 \r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_sdio.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/hal_sdio.h
deleted file mode 100755 (executable)
index ccb49e7..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __HAL_SDIO_H_
-#define __HAL_SDIO_H_
-
-#define ffaddr2deviceId(pdvobj, addr)  (pdvobj->Queue2Pipe[addr])
-
-u8 rtw_hal_sdio_max_txoqt_free_space(_adapter *padapter);
-u8 rtw_hal_sdio_query_tx_freepage(_adapter *padapter, u8 PageIdx, u8 RequiredPageNum);
-void rtw_hal_sdio_update_tx_freepage(_adapter *padapter, u8 PageIdx, u8 RequiredPageNum);
-void rtw_hal_set_sdio_tx_max_length(PADAPTER padapter, u8 numHQ, u8 numNQ, u8 numLQ, u8 numPubQ);
-u32 rtw_hal_get_sdio_tx_max_length(PADAPTER padapter, u8 queue_idx);
-
-#endif //__RTW_LED_H_
-
index 5dfc421366cbd6ce16b95a74a8c6b22809688f4e..09475efa52775eee8bb69fec304e034f5a3e734e 100755 (executable)
@@ -166,6 +166,10 @@ typedef enum _RATEID_IDX_ {
        RATEID_IDX_B = 8,
        RATEID_IDX_VHT_2SS = 9,
        RATEID_IDX_VHT_1SS = 10,
        RATEID_IDX_B = 8,
        RATEID_IDX_VHT_2SS = 9,
        RATEID_IDX_VHT_1SS = 10,
+       RATEID_IDX_MIX1 = 11,
+       RATEID_IDX_MIX2 = 12,
+       RATEID_IDX_VHT_3SS = 13,
+       RATEID_IDX_BGN_3SS = 14,
 } RATEID_IDX, *PRATEID_IDX;
 
 typedef enum _RATR_TABLE_MODE{
 } RATEID_IDX, *PRATEID_IDX;
 
 typedef enum _RATR_TABLE_MODE{
@@ -207,13 +211,13 @@ enum NETWORK_TYPE
        //Type for registry default wireless mode
        WIRELESS_11AGN = (WIRELESS_11A|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N), // tx: ofdm & MCS, rx: ofdm & MCS, hw: ofdm only
        WIRELESS_11ABGN = (WIRELESS_11A|WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N),
        //Type for registry default wireless mode
        WIRELESS_11AGN = (WIRELESS_11A|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N), // tx: ofdm & MCS, rx: ofdm & MCS, hw: ofdm only
        WIRELESS_11ABGN = (WIRELESS_11A|WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N),
-       WIRELESS_MODE_24G = (WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11AC),
+       WIRELESS_MODE_24G = (WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N),
        WIRELESS_MODE_5G = (WIRELESS_11A|WIRELESS_11_5N|WIRELESS_11AC),
        WIRELESS_MODE_MAX = (WIRELESS_11A|WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N|WIRELESS_11AC),
 };
 
        WIRELESS_MODE_5G = (WIRELESS_11A|WIRELESS_11_5N|WIRELESS_11AC),
        WIRELESS_MODE_MAX = (WIRELESS_11A|WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N|WIRELESS_11AC),
 };
 
-#define SUPPORTED_24G_NETTYPE_MSK (WIRELESS_11B | WIRELESS_11G | WIRELESS_11_24N)
-#define SUPPORTED_5G_NETTYPE_MSK (WIRELESS_11A | WIRELESS_11_5N)
+#define SUPPORTED_24G_NETTYPE_MSK WIRELESS_MODE_24G
+#define SUPPORTED_5G_NETTYPE_MSK WIRELESS_MODE_5G 
 
 #define IsLegacyOnly(NetType)  ((NetType) == ((NetType) & (WIRELESS_11BG|WIRELESS_11A)))
 
 
 #define IsLegacyOnly(NetType)  ((NetType) == ((NetType) & (WIRELESS_11BG|WIRELESS_11A)))
 
@@ -1342,7 +1346,7 @@ typedef struct tx_pending_t{
 
 
 
 
 
 
-#define MAXTID 16
+#define TID_NUM        16
 
 #define IEEE_A            (1<<0)
 #define IEEE_B            (1<<1)
 
 #define IEEE_A            (1<<0)
 #define IEEE_B            (1<<1)
@@ -1714,7 +1718,8 @@ int rtw_check_network_type(unsigned char *rate, int ratelen, int channel);
 
 void rtw_get_bcn_info(struct wlan_network *pnetwork);
 
 
 void rtw_get_bcn_info(struct wlan_network *pnetwork);
 
-void rtw_macaddr_cfg(u8 *mac_addr);
+u8 rtw_check_invalid_mac_address(u8 *mac_addr);
+void rtw_macaddr_cfg(u8 *out, const u8 *hw_mac_addr);
 
 u16 rtw_mcs_rate(u8 rf_type, u8 bw_40MHz, u8 short_GI, unsigned char * MCS_rate);
 
 
 u16 rtw_mcs_rate(u8 rf_type, u8 bw_40MHz, u8 short_GI, unsigned char * MCS_rate);
 
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/ioctl_cfg80211.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/ioctl_cfg80211.h
deleted file mode 100755 (executable)
index b689c8b..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-#ifndef __IOCTL_CFG80211_H__\r
-#define __IOCTL_CFG80211_H__ \r
-\r
-\r
-#if defined(RTW_USE_CFG80211_STA_EVENT)\r
-       #undef CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER\r
-#endif\r
-\r
-struct rtw_wdev_invit_info {\r
-       u8 state; /* 0: req, 1:rep */\r
-       u8 peer_mac[ETH_ALEN];\r
-       u8 active;\r
-       u8 token;\r
-       u8 flags;\r
-       u8 status;\r
-       u8 req_op_ch;\r
-       u8 rsp_op_ch;\r
-};\r
-\r
-#define rtw_wdev_invit_info_init(invit_info) \\r
-       do { \\r
-               (invit_info)->state = 0xff; \\r
-               _rtw_memset((invit_info)->peer_mac, 0, ETH_ALEN); \\r
-               (invit_info)->active = 0xff; \\r
-               (invit_info)->token = 0; \\r
-               (invit_info)->flags = 0x00; \\r
-               (invit_info)->status = 0xff; \\r
-               (invit_info)->req_op_ch = 0; \\r
-               (invit_info)->rsp_op_ch = 0; \\r
-       } while (0)\r
-\r
-struct rtw_wdev_nego_info {\r
-       u8 state; /* 0: req, 1:rep, 2:conf */\r
-       u8 peer_mac[ETH_ALEN];\r
-       u8 active;\r
-       u8 token;\r
-       u8 status;\r
-       u8 req_intent;\r
-       u8 req_op_ch;\r
-       u8 req_listen_ch;\r
-       u8 rsp_intent;\r
-       u8 rsp_op_ch;\r
-       u8 conf_op_ch;\r
-};\r
-\r
-#define rtw_wdev_nego_info_init(nego_info) \\r
-       do { \\r
-               (nego_info)->state = 0xff; \\r
-               _rtw_memset((nego_info)->peer_mac, 0, ETH_ALEN); \\r
-               (nego_info)->active = 0xff; \\r
-               (nego_info)->token = 0; \\r
-               (nego_info)->status = 0xff; \\r
-               (nego_info)->req_intent = 0xff; \\r
-               (nego_info)->req_op_ch = 0; \\r
-               (nego_info)->req_listen_ch = 0; \\r
-               (nego_info)->rsp_intent = 0xff; \\r
-               (nego_info)->rsp_op_ch = 0; \\r
-               (nego_info)->conf_op_ch = 0; \\r
-       } while (0)\r
-\r
-struct rtw_wdev_priv\r
-{      \r
-       struct wireless_dev *rtw_wdev;\r
-       \r
-       _adapter *padapter;\r
-\r
-       struct cfg80211_scan_request *scan_request;\r
-       _lock scan_req_lock;\r
-\r
-       struct net_device *pmon_ndev;//for monitor interface\r
-       char ifname_mon[IFNAMSIZ + 1]; //interface name for monitor interface\r
-\r
-       u8 p2p_enabled;\r
-\r
-       u8 provdisc_req_issued;\r
-\r
-       struct rtw_wdev_invit_info invit_info;\r
-       struct rtw_wdev_nego_info nego_info;\r
-\r
-       u8 bandroid_scan;\r
-       bool block;\r
-       bool power_mgmt;\r
-\r
-#ifdef CONFIG_CONCURRENT_MODE\r
-       ATOMIC_T ro_ch_to;\r
-       ATOMIC_T switch_ch_to;  \r
-#endif \r
-       \r
-};\r
-\r
-#define wiphy_to_adapter(x) (*((_adapter**)wiphy_priv(x)))\r
-\r
-#define wdev_to_ndev(w) ((w)->netdev)\r
-\r
-int rtw_wdev_alloc(_adapter *padapter, struct device *dev);\r
-void rtw_wdev_free(struct wireless_dev *wdev);\r
-void rtw_wdev_unregister(struct wireless_dev *wdev);\r
-\r
-void rtw_cfg80211_init_wiphy(_adapter *padapter);\r
-\r
-void rtw_cfg80211_unlink_bss(_adapter *padapter, struct wlan_network *pnetwork);\r
-void rtw_cfg80211_surveydone_event_callback(_adapter *padapter);\r
-struct cfg80211_bss *rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_network *pnetwork);\r
-int rtw_cfg80211_check_bss(_adapter *padapter);\r
-void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter);\r
-void rtw_cfg80211_indicate_connect(_adapter *padapter);\r
-void rtw_cfg80211_indicate_disconnect(_adapter *padapter);\r
-void rtw_cfg80211_indicate_scan_done(_adapter *adapter, bool aborted);\r
-\r
-#ifdef CONFIG_AP_MODE\r
-void rtw_cfg80211_indicate_sta_assoc(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);\r
-void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, unsigned char *da, unsigned short reason);\r
-#endif //CONFIG_AP_MODE\r
-\r
-void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, size_t len);\r
-void rtw_cfg80211_rx_p2p_action_public(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);\r
-void rtw_cfg80211_rx_action_p2p(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);\r
-void rtw_cfg80211_rx_action(_adapter *adapter, u8 *frame, uint frame_len, const char*msg);\r
-\r
-int rtw_cfg80211_set_mgnt_wpsp2pie(struct net_device *net, char *buf, int len, int type);\r
-\r
-bool rtw_cfg80211_pwr_mgmt(_adapter *adapter);\r
-\r
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))  && !defined(COMPAT_KERNEL_RELEASE)\r
-#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, buf, len, gfp)\r
-#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))\r
-#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, sig_dbm, buf, len, gfp)\r
-#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0))\r
-#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, gfp)\r
-#else // kernel >= 3.12\r
-#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, 0, gfp)\r
-#endif // kernel >= 3.12\r
-\r
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))  && !defined(COMPAT_KERNEL_RELEASE)\r
-#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, buf, len)\r
-#else\r
-#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, bss, buf, len)\r
-#endif\r
-\r
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))\r
-#define rtw_cfg80211_mgmt_tx_status(adapter, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status((adapter)->pnetdev, cookie, buf, len, ack, gfp)\r
-#else\r
-#define rtw_cfg80211_mgmt_tx_status(adapter, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status((adapter)->rtw_wdev, cookie, buf, len, ack, gfp)\r
-#endif\r
-\r
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))\r
-#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp)  cfg80211_ready_on_channel((adapter)->pnetdev, cookie, chan, channel_type, duration, gfp)\r
-#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->pnetdev, cookie, chan, chan_type, gfp)\r
-#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))\r
-#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp)  cfg80211_ready_on_channel((adapter)->rtw_wdev, cookie, chan, channel_type, duration, gfp)\r
-#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->rtw_wdev, cookie, chan, chan_type, gfp)\r
-#else\r
-#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp)  cfg80211_ready_on_channel((adapter)->rtw_wdev, cookie, chan, duration, gfp)\r
-#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->rtw_wdev, cookie, chan, gfp)\r
-#endif\r
-\r
-#endif //__IOCTL_CFG80211_H__\r
-\r
index 805f3b2f5eeb567dc90c4e99684e27487ee8991a..5e4a480056657e148968746e147c35f40d936cd9 100755 (executable)
@@ -110,6 +110,7 @@ int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 
 int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname);
 struct net_device *rtw_init_netdev(_adapter *padapter);
 
 int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname);
 struct net_device *rtw_init_netdev(_adapter *padapter);
+void rtw_unregister_netdev(_adapter *adapter);
 void rtw_unregister_netdevs(struct dvobj_priv *dvobj);
 
 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
 void rtw_unregister_netdevs(struct dvobj_priv *dvobj);
 
 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
index b5901766e262025ef920e113831e3a16d03736d4..228589459ac2590aa58c2e88382fc2b63c1e4f4d 100755 (executable)
@@ -256,7 +256,7 @@ void _rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_a
 extern void*   rtw_malloc2d(int h, int w, size_t size);
 extern void    rtw_mfree2d(void *pbuf, int h, int w, int size);
 
 extern void*   rtw_malloc2d(int h, int w, size_t size);
 extern void    rtw_mfree2d(void *pbuf, int h, int w, int size);
 
-extern void    _rtw_memcpy(void* dec, void* sour, u32 sz);
+extern void    _rtw_memcpy(void *dec, const void *sour, u32 sz);
 extern int     _rtw_memcmp(void *dst, void *src, u32 sz);
 extern void    _rtw_memset(void *pbuf, int c, u32 sz);
 
 extern int     _rtw_memcmp(void *dst, void *src, u32 sz);
 extern void    _rtw_memset(void *pbuf, int c, u32 sz);
 
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_service_bsd.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_service_bsd.h
deleted file mode 100755 (executable)
index b56ccbb..0000000
+++ /dev/null
@@ -1,749 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2013 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-#ifndef __OSDEP_BSD_SERVICE_H_\r
-#define __OSDEP_BSD_SERVICE_H_\r
-\r
-\r
-#include <sys/cdefs.h>\r
-#include <sys/types.h>\r
-#include <sys/systm.h>\r
-#include <sys/param.h>\r
-#include <sys/sockio.h>\r
-#include <sys/sysctl.h>\r
-#include <sys/lock.h>\r
-#include <sys/mutex.h>\r
-#include <sys/mbuf.h>\r
-#include <sys/kernel.h>\r
-#include <sys/socket.h>\r
-#include <sys/systm.h>\r
-#include <sys/malloc.h>\r
-#include <sys/module.h>\r
-#include <sys/bus.h>\r
-#include <sys/endian.h>\r
-#include <sys/kdb.h>\r
-#include <sys/kthread.h>\r
-#include <sys/malloc.h>\r
-#include <sys/time.h>\r
-#include <machine/atomic.h>\r
-#include <machine/bus.h>\r
-#include <machine/resource.h>\r
-#include <sys/rman.h>\r
-\r
-#include <net/bpf.h>\r
-#include <net/if.h>\r
-#include <net/if_arp.h>\r
-#include <net/ethernet.h>\r
-#include <net/if_dl.h>\r
-#include <net/if_media.h>\r
-#include <net/if_types.h>\r
-#include <net/route.h>\r
-\r
-\r
-#include <netinet/in.h>\r
-#include <netinet/in_systm.h>\r
-#include <netinet/in_var.h>\r
-#include <netinet/if_ether.h>\r
-#include <if_ether.h>\r
-\r
-#include <net80211/ieee80211_var.h>\r
-#include <net80211/ieee80211_regdomain.h>\r
-#include <net80211/ieee80211_radiotap.h>\r
-#include <net80211/ieee80211_ratectl.h>\r
-\r
-#include <dev/usb/usb.h>\r
-#include <dev/usb/usbdi.h>\r
-#include "usbdevs.h"\r
-\r
-#define        USB_DEBUG_VAR rum_debug\r
-#include <dev/usb/usb_debug.h>\r
-\r
-#if 1 //Baron porting from linux, it's all temp solution, needs to check again\r
-#include <sys/sema.h>\r
-#include <sys/pcpu.h> /* XXX for PCPU_GET */\r
-//     typedef struct  semaphore _sema;\r
-       typedef struct  sema _sema;\r
-//     typedef spinlock_t      _lock;\r
-       typedef struct mtx      _lock;\r
-       typedef struct mtx              _mutex;\r
-       typedef struct timer_list _timer;\r
-       struct list_head {\r
-       struct list_head *next, *prev;\r
-       };\r
-       struct  __queue {\r
-               struct  list_head       queue;  \r
-               _lock   lock;\r
-       };\r
-\r
-       //typedef       struct sk_buff  _pkt;\r
-       typedef struct mbuf     _pkt;\r
-       typedef struct mbuf     _buffer;\r
-       \r
-       typedef struct  __queue _queue;\r
-       typedef struct  list_head       _list;\r
-       typedef int     _OS_STATUS;\r
-       //typedef u32   _irqL;\r
-       typedef unsigned long _irqL;\r
-       typedef struct  ifnet * _nic_hdl;\r
-       \r
-       typedef pid_t           _thread_hdl_;\r
-//     typedef struct thread           _thread_hdl_;\r
-       typedef void            thread_return;\r
-       typedef void*   thread_context;\r
-\r
-       //#define thread_exit() complete_and_exit(NULL, 0)\r
-\r
-       #define thread_exit() do{printf("%s", "RTKTHREAD_exit");}while(0)\r
-\r
-       typedef void timer_hdl_return;\r
-       typedef void* timer_hdl_context;\r
-       typedef struct work_struct _workitem;\r
-\r
-#define   KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))\r
-/* emulate a modern version */\r
-#define LINUX_VERSION_CODE KERNEL_VERSION(2, 6, 35)\r
-\r
-#define WIRELESS_EXT -1\r
-#define HZ hz\r
-#define spin_lock_irqsave mtx_lock_irqsave\r
-#define spin_lock_bh mtx_lock_irqsave\r
-#define mtx_lock_irqsave(lock, x) mtx_lock(lock)//{local_irq_save((x)); mtx_lock_spin((lock));}\r
-//#define IFT_RTW      0xf9 //ifnet allocate type for RTW\r
-#define free_netdev if_free\r
-#define LIST_CONTAINOR(ptr, type, member) \\r
-        ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member)))\r
-#define container_of(p,t,n) (t*)((p)-&(((t*)0)->n))\r
-/* \r
- * Linux timers are emulated using FreeBSD callout functions\r
- * (and taskqueue functionality).\r
- *\r
- * Currently no timer stats functionality.\r
- *\r
- * See (linux_compat) processes.c\r
- *\r
- */\r
-struct timer_list {\r
-\r
-        /* FreeBSD callout related fields */\r
-        struct callout callout;\r
-\r
-       //timeout function\r
-        void (*function)(void*);\r
-       //argument\r
-        void *arg;\r
-        \r
-};\r
-struct workqueue_struct;\r
-struct work_struct;\r
-typedef void (*work_func_t)(struct work_struct *work);\r
-/* Values for the state of an item of work (work_struct) */\r
-typedef enum work_state {\r
-        WORK_STATE_UNSET = 0,\r
-        WORK_STATE_CALLOUT_PENDING = 1,\r
-        WORK_STATE_TASK_PENDING = 2,\r
-        WORK_STATE_WORK_CANCELLED = 3        \r
-} work_state_t;\r
-\r
-struct work_struct {\r
-        struct task task; /* FreeBSD task */\r
-        work_state_t state; /* the pending or otherwise state of work. */\r
-        work_func_t func;       \r
-};\r
-#define spin_unlock_irqrestore mtx_unlock_irqrestore\r
-#define spin_unlock_bh mtx_unlock_irqrestore\r
-#define mtx_unlock_irqrestore(lock,x)    mtx_unlock(lock);\r
-extern void    _rtw_spinlock_init(_lock *plock);\r
-\r
-//modify private structure to match freebsd\r
-#define BITS_PER_LONG 32\r
-union ktime {\r
-       s64     tv64;\r
-#if BITS_PER_LONG != 64 && !defined(CONFIG_KTIME_SCALAR)\r
-       struct {\r
-#ifdef __BIG_ENDIAN\r
-       s32     sec, nsec;\r
-#else\r
-       s32     nsec, sec;\r
-#endif\r
-       } tv;\r
-#endif\r
-};\r
-#define kmemcheck_bitfield_begin(name)\r
-#define kmemcheck_bitfield_end(name)\r
-#define CHECKSUM_NONE 0\r
-typedef unsigned char *sk_buff_data_t;\r
-typedef union ktime ktime_t;           /* Kill this */\r
-\r
-void rtw_mtx_lock(_lock *plock);\r
-       \r
-void rtw_mtx_unlock(_lock *plock);\r
-\r
-/** \r
- *     struct sk_buff - socket buffer\r
- *     @next: Next buffer in list\r
- *     @prev: Previous buffer in list\r
- *     @sk: Socket we are owned by\r
- *     @tstamp: Time we arrived\r
- *     @dev: Device we arrived on/are leaving by\r
- *     @transport_header: Transport layer header\r
- *     @network_header: Network layer header\r
- *     @mac_header: Link layer header\r
- *     @_skb_refdst: destination entry (with norefcount bit)\r
- *     @sp: the security path, used for xfrm\r
- *     @cb: Control buffer. Free for use by every layer. Put private vars here\r
- *     @len: Length of actual data\r
- *     @data_len: Data length\r
- *     @mac_len: Length of link layer header\r
- *     @hdr_len: writable header length of cloned skb\r
- *     @csum: Checksum (must include start/offset pair)\r
- *     @csum_start: Offset from skb->head where checksumming should start\r
- *     @csum_offset: Offset from csum_start where checksum should be stored\r
- *     @local_df: allow local fragmentation\r
- *     @cloned: Head may be cloned (check refcnt to be sure)\r
- *     @nohdr: Payload reference only, must not modify header\r
- *     @pkt_type: Packet class\r
- *     @fclone: skbuff clone status\r
- *     @ip_summed: Driver fed us an IP checksum\r
- *     @priority: Packet queueing priority\r
- *     @users: User count - see {datagram,tcp}.c\r
- *     @protocol: Packet protocol from driver\r
- *     @truesize: Buffer size \r
- *     @head: Head of buffer\r
- *     @data: Data head pointer\r
- *     @tail: Tail pointer\r
- *     @end: End pointer\r
- *     @destructor: Destruct function\r
- *     @mark: Generic packet mark\r
- *     @nfct: Associated connection, if any\r
- *     @ipvs_property: skbuff is owned by ipvs\r
- *     @peeked: this packet has been seen already, so stats have been\r
- *             done for it, don't do them again\r
- *     @nf_trace: netfilter packet trace flag\r
- *     @nfctinfo: Relationship of this skb to the connection\r
- *     @nfct_reasm: netfilter conntrack re-assembly pointer\r
- *     @nf_bridge: Saved data about a bridged frame - see br_netfilter.c\r
- *     @skb_iif: ifindex of device we arrived on\r
- *     @rxhash: the packet hash computed on receive\r
- *     @queue_mapping: Queue mapping for multiqueue devices\r
- *     @tc_index: Traffic control index\r
- *     @tc_verd: traffic control verdict\r
- *     @ndisc_nodetype: router type (from link layer)\r
- *     @dma_cookie: a cookie to one of several possible DMA operations\r
- *             done by skb DMA functions\r
- *     @secmark: security marking\r
- *     @vlan_tci: vlan tag control information\r
- */\r
-\r
-struct sk_buff {\r
-       /* These two members must be first. */\r
-       struct sk_buff          *next;\r
-       struct sk_buff          *prev;\r
-\r
-       ktime_t                 tstamp;\r
-\r
-       struct sock             *sk;\r
-       //struct net_device     *dev;\r
-       struct ifnet *dev;\r
-\r
-       /*\r
-        * This is the control buffer. It is free to use for every\r
-        * layer. Please put your private variables there. If you\r
-        * want to keep them across layers you have to do a skb_clone()\r
-        * first. This is owned by whoever has the skb queued ATM.\r
-        */\r
-       char                    cb[48] __aligned(8);\r
-\r
-       unsigned long           _skb_refdst;\r
-#ifdef CONFIG_XFRM\r
-       struct  sec_path        *sp;\r
-#endif\r
-       unsigned int            len,\r
-                               data_len;\r
-       u16                     mac_len,\r
-                               hdr_len;\r
-       union {\r
-               u32             csum;\r
-               struct {\r
-                       u16     csum_start;\r
-                       u16     csum_offset;\r
-               }smbol2;\r
-       }smbol1;\r
-       u32                     priority;\r
-       kmemcheck_bitfield_begin(flags1);\r
-       u8                      local_df:1,\r
-                               cloned:1,\r
-                               ip_summed:2,\r
-                               nohdr:1,\r
-                               nfctinfo:3;\r
-       u8                      pkt_type:3,\r
-                               fclone:2,\r
-                               ipvs_property:1,\r
-                               peeked:1,\r
-                               nf_trace:1;\r
-       kmemcheck_bitfield_end(flags1);\r
-       u16                     protocol;\r
-\r
-       void                    (*destructor)(struct sk_buff *skb);\r
-#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)\r
-       struct nf_conntrack     *nfct;\r
-       struct sk_buff          *nfct_reasm;\r
-#endif\r
-#ifdef CONFIG_BRIDGE_NETFILTER\r
-       struct nf_bridge_info   *nf_bridge;\r
-#endif\r
-\r
-       int                     skb_iif;\r
-#ifdef CONFIG_NET_SCHED\r
-       u16                     tc_index;       /* traffic control index */\r
-#ifdef CONFIG_NET_CLS_ACT\r
-       u16                     tc_verd;        /* traffic control verdict */\r
-#endif\r
-#endif\r
-\r
-       u32                     rxhash;\r
-\r
-       kmemcheck_bitfield_begin(flags2);\r
-       u16                     queue_mapping:16;\r
-#ifdef CONFIG_IPV6_NDISC_NODETYPE\r
-       u8                      ndisc_nodetype:2,\r
-                               deliver_no_wcard:1;\r
-#else\r
-       u8                      deliver_no_wcard:1;\r
-#endif\r
-       kmemcheck_bitfield_end(flags2);\r
-\r
-       /* 0/14 bit hole */\r
-\r
-#ifdef CONFIG_NET_DMA\r
-       dma_cookie_t            dma_cookie;\r
-#endif\r
-#ifdef CONFIG_NETWORK_SECMARK\r
-       u32                     secmark;\r
-#endif\r
-       union {\r
-               u32             mark;\r
-               u32             dropcount;\r
-       }symbol3;\r
-\r
-       u16                     vlan_tci;\r
-\r
-       sk_buff_data_t          transport_header;\r
-       sk_buff_data_t          network_header;\r
-       sk_buff_data_t          mac_header;\r
-       /* These elements must be at the end, see alloc_skb() for details.  */\r
-       sk_buff_data_t          tail;\r
-       sk_buff_data_t          end;\r
-       unsigned char           *head,\r
-                               *data;\r
-       unsigned int            truesize;\r
-       atomic_t                users;\r
-};\r
-struct sk_buff_head {\r
-       /* These two members must be first. */\r
-       struct sk_buff  *next;\r
-       struct sk_buff  *prev;\r
-\r
-       u32             qlen;\r
-       _lock   lock;\r
-};\r
-#define skb_tail_pointer(skb)  skb->tail\r
-static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len)\r
-{\r
-       unsigned char *tmp = skb_tail_pointer(skb);\r
-       //SKB_LINEAR_ASSERT(skb);\r
-       skb->tail += len;\r
-       skb->len  += len;\r
-       return tmp;\r
-}\r
-\r
-static inline unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len)\r
-{\r
-       skb->len -= len;\r
-       if(skb->len < skb->data_len)\r
-               printf("%s(),%d,error!\n",__FUNCTION__,__LINE__);\r
-       return skb->data += len;\r
-}\r
-static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len)\r
-{\r
-       #ifdef PLATFORM_FREEBSD\r
-       return __skb_pull(skb, len);\r
-       #else\r
-       return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len);\r
-       #endif //PLATFORM_FREEBSD\r
-}\r
-static inline u32 skb_queue_len(const struct sk_buff_head *list_)\r
-{\r
-       return list_->qlen;\r
-}\r
-static inline void __skb_insert(struct sk_buff *newsk,\r
-                               struct sk_buff *prev, struct sk_buff *next,\r
-                               struct sk_buff_head *list)\r
-{\r
-       newsk->next = next;\r
-       newsk->prev = prev;\r
-       next->prev  = prev->next = newsk;\r
-       list->qlen++;\r
-}\r
-static inline void __skb_queue_before(struct sk_buff_head *list,\r
-                                     struct sk_buff *next,\r
-                                     struct sk_buff *newsk)\r
-{\r
-       __skb_insert(newsk, next->prev, next, list);\r
-}\r
-static inline void skb_queue_tail(struct sk_buff_head *list,\r
-                                  struct sk_buff *newsk)\r
-{\r
-       mtx_lock(&list->lock);\r
-       __skb_queue_before(list, (struct sk_buff *)list, newsk);\r
-       mtx_unlock(&list->lock);\r
-}\r
-static inline struct sk_buff *skb_peek(struct sk_buff_head *list_)\r
-{\r
-       struct sk_buff *list = ((struct sk_buff *)list_)->next;\r
-       if (list == (struct sk_buff *)list_)\r
-               list = NULL;\r
-       return list;\r
-}\r
-static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list)\r
-{\r
-       struct sk_buff *next, *prev;\r
-\r
-       list->qlen--;\r
-       next       = skb->next;\r
-       prev       = skb->prev;\r
-       skb->next  = skb->prev = NULL;\r
-       next->prev = prev;\r
-       prev->next = next;\r
-}\r
-\r
-static inline struct sk_buff *skb_dequeue(struct sk_buff_head *list)\r
-{\r
-       mtx_lock(&list->lock);\r
-\r
-       struct sk_buff *skb = skb_peek(list);\r
-       if (skb)\r
-               __skb_unlink(skb, list);\r
-\r
-       mtx_unlock(&list->lock);\r
-\r
-       return skb;\r
-}\r
-static inline void skb_reserve(struct sk_buff *skb, int len)\r
-{\r
-       skb->data += len;\r
-       skb->tail += len;\r
-}\r
-static inline void __skb_queue_head_init(struct sk_buff_head *list)\r
-{\r
-       list->prev = list->next = (struct sk_buff *)list;\r
-       list->qlen = 0;\r
-}\r
-/*\r
- * This function creates a split out lock class for each invocation;\r
- * this is needed for now since a whole lot of users of the skb-queue\r
- * infrastructure in drivers have different locking usage (in hardirq)\r
- * than the networking core (in softirq only). In the long run either the\r
- * network layer or drivers should need annotation to consolidate the\r
- * main types of usage into 3 classes.\r
- */\r
-static inline void skb_queue_head_init(struct sk_buff_head *list)\r
-{\r
-       _rtw_spinlock_init(&list->lock);\r
-       __skb_queue_head_init(list);\r
-}\r
-unsigned long copy_from_user(void *to, const void *from, unsigned long n);\r
-unsigned long copy_to_user(void *to, const void *from, unsigned long n);\r
-struct sk_buff * dev_alloc_skb(unsigned int size);\r
-struct sk_buff *skb_clone(const struct sk_buff *skb);\r
-void dev_kfree_skb_any(struct sk_buff *skb);\r
-#endif //Baron porting from linux, it's all temp solution, needs to check again\r
-\r
-\r
-#if 1 // kenny add Linux compatibility code for Linux USB driver\r
-#include <dev/usb/usb_compat_linux.h>\r
-\r
-#define __init         // __attribute ((constructor))\r
-#define __exit         // __attribute ((destructor))\r
-\r
-/*\r
- * Definitions for module_init and module_exit macros.\r
- *\r
- * These macros will use the SYSINIT framework to call a specified\r
- * function (with no arguments) on module loading or unloading.\r
- * \r
- */\r
-\r
-void module_init_exit_wrapper(void *arg);\r
-\r
-#define module_init(initfn)                             \\r
-        SYSINIT(mod_init_ ## initfn,                    \\r
-                SI_SUB_KLD, SI_ORDER_FIRST,             \\r
-                module_init_exit_wrapper, initfn)\r
-\r
-#define module_exit(exitfn)                             \\r
-        SYSUNINIT(mod_exit_ ## exitfn,                  \\r
-                  SI_SUB_KLD, SI_ORDER_ANY,             \\r
-                  module_init_exit_wrapper, exitfn)\r
-\r
-/*\r
- * The usb_register and usb_deregister functions are used to register\r
- * usb drivers with the usb subsystem. \r
- */\r
-int usb_register(struct usb_driver *driver);\r
-int usb_deregister(struct usb_driver *driver);\r
-\r
-/*\r
- * usb_get_dev and usb_put_dev - increment/decrement the reference count \r
- * of the usb device structure.\r
- *\r
- * Original body of usb_get_dev:\r
- *\r
- *       if (dev)\r
- *               get_device(&dev->dev);\r
- *       return dev;\r
- *\r
- * Reference counts are not currently used in this compatibility\r
- * layer. So these functions will do nothing.\r
- */\r
-static inline struct usb_device *\r
-usb_get_dev(struct usb_device *dev)\r
-{\r
-        return dev;\r
-}\r
-\r
-static inline void \r
-usb_put_dev(struct usb_device *dev)\r
-{\r
-        return;\r
-}\r
-\r
-\r
-// rtw_usb_compat_linux\r
-int rtw_usb_submit_urb(struct urb *urb, uint16_t mem_flags);\r
-int rtw_usb_unlink_urb(struct urb *urb);\r
-int rtw_usb_clear_halt(struct usb_device *dev, struct usb_host_endpoint *uhe);\r
-int rtw_usb_control_msg(struct usb_device *dev, struct usb_host_endpoint *uhe,\r
-    uint8_t request, uint8_t requesttype,\r
-    uint16_t value, uint16_t index, void *data,\r
-    uint16_t size, usb_timeout_t timeout);\r
-int rtw_usb_set_interface(struct usb_device *dev, uint8_t iface_no, uint8_t alt_index);\r
-int rtw_usb_setup_endpoint(struct usb_device *dev,\r
-    struct usb_host_endpoint *uhe, usb_size_t bufsize);\r
-struct urb *rtw_usb_alloc_urb(uint16_t iso_packets, uint16_t mem_flags);\r
-struct usb_host_endpoint *rtw_usb_find_host_endpoint(struct usb_device *dev, uint8_t type, uint8_t ep);\r
-struct usb_host_interface *rtw_usb_altnum_to_altsetting(const struct usb_interface *intf, uint8_t alt_index);\r
-struct usb_interface *rtw_usb_ifnum_to_if(struct usb_device *dev, uint8_t iface_no);\r
-void *rtw_usbd_get_intfdata(struct usb_interface *intf);\r
-void rtw_usb_linux_register(void *arg);\r
-void rtw_usb_linux_deregister(void *arg);\r
-void rtw_usb_linux_free_device(struct usb_device *dev);\r
-void rtw_usb_free_urb(struct urb *urb);\r
-void rtw_usb_init_urb(struct urb *urb);\r
-void rtw_usb_kill_urb(struct urb *urb);\r
-void rtw_usb_set_intfdata(struct usb_interface *intf, void *data);\r
-void rtw_usb_fill_bulk_urb(struct urb *urb, struct usb_device *udev,\r
-    struct usb_host_endpoint *uhe, void *buf,\r
-    int length, usb_complete_t callback, void *arg);\r
-int rtw_usb_bulk_msg(struct usb_device *udev, struct usb_host_endpoint *uhe,\r
-    void *data, int len, uint16_t *pactlen, usb_timeout_t timeout);\r
-void *usb_get_intfdata(struct usb_interface *intf);\r
-int usb_linux_init_endpoints(struct usb_device *udev);\r
-\r
-\r
-\r
-typedef struct urb *  PURB;\r
-\r
-typedef unsigned gfp_t;\r
-#define __GFP_WAIT      ((gfp_t)0x10u)  /* Can wait and reschedule? */\r
-#define __GFP_HIGH      ((gfp_t)0x20u)  /* Should access emergency pools? */\r
-#define __GFP_IO        ((gfp_t)0x40u)  /* Can start physical IO? */\r
-#define __GFP_FS        ((gfp_t)0x80u)  /* Can call down to low-level FS? */\r
-#define __GFP_COLD      ((gfp_t)0x100u) /* Cache-cold page required */\r
-#define __GFP_NOWARN    ((gfp_t)0x200u) /* Suppress page allocation failure warning */\r
-#define __GFP_REPEAT    ((gfp_t)0x400u) /* Retry the allocation.  Might fail */\r
-#define __GFP_NOFAIL    ((gfp_t)0x800u) /* Retry for ever.  Cannot fail */\r
-#define __GFP_NORETRY   ((gfp_t)0x1000u)/* Do not retry.  Might fail */\r
-#define __GFP_NO_GROW   ((gfp_t)0x2000u)/* Slab internal usage */\r
-#define __GFP_COMP      ((gfp_t)0x4000u)/* Add compound page metadata */\r
-#define __GFP_ZERO      ((gfp_t)0x8000u)/* Return zeroed page on success */\r
-#define __GFP_NOMEMALLOC ((gfp_t)0x10000u) /* Don't use emergency reserves */\r
-#define __GFP_HARDWALL   ((gfp_t)0x20000u) /* Enforce hardwall cpuset memory allocs */\r
-\r
-/* This equals 0, but use constants in case they ever change */\r
-#define GFP_NOWAIT      (GFP_ATOMIC & ~__GFP_HIGH)\r
-/* GFP_ATOMIC means both !wait (__GFP_WAIT not set) and use emergency pool */\r
-#define GFP_ATOMIC      (__GFP_HIGH)\r
-#define GFP_NOIO        (__GFP_WAIT)\r
-#define GFP_NOFS        (__GFP_WAIT | __GFP_IO)\r
-#define GFP_KERNEL      (__GFP_WAIT | __GFP_IO | __GFP_FS)\r
-#define GFP_USER        (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL)\r
-#define GFP_HIGHUSER    (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL | \\r
-                         __GFP_HIGHMEM)\r
-\r
-\r
-#endif // kenny add Linux compatibility code for Linux USB\r
-\r
-__inline static _list *get_next(_list  *list)\r
-{\r
-       return list->next;\r
-}      \r
-\r
-__inline static _list  *get_list_head(_queue   *queue)\r
-{\r
-       return (&(queue->queue));\r
-}\r
-\r
-       \r
-#define LIST_CONTAINOR(ptr, type, member) \\r
-        ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member)))       \r
-\r
-        \r
-__inline static void _enter_critical(_lock *plock, _irqL *pirqL)\r
-{\r
-       spin_lock_irqsave(plock, *pirqL);\r
-}\r
-\r
-__inline static void _exit_critical(_lock *plock, _irqL *pirqL)\r
-{\r
-       spin_unlock_irqrestore(plock, *pirqL);\r
-}\r
-\r
-__inline static void _enter_critical_ex(_lock *plock, _irqL *pirqL)\r
-{\r
-       spin_lock_irqsave(plock, *pirqL);\r
-}\r
-\r
-__inline static void _exit_critical_ex(_lock *plock, _irqL *pirqL)\r
-{\r
-       spin_unlock_irqrestore(plock, *pirqL);\r
-}\r
-\r
-__inline static void _enter_critical_bh(_lock *plock, _irqL *pirqL)\r
-{\r
-       spin_lock_bh(plock, *pirqL);\r
-}\r
-\r
-__inline static void _exit_critical_bh(_lock *plock, _irqL *pirqL)\r
-{\r
-       spin_unlock_bh(plock, *pirqL);\r
-}\r
-\r
-__inline static void _enter_critical_mutex(_mutex *pmutex, _irqL *pirqL)\r
-{\r
-\r
-               mtx_lock(pmutex);\r
-\r
-}\r
-\r
-\r
-__inline static void _exit_critical_mutex(_mutex *pmutex, _irqL *pirqL)\r
-{\r
-\r
-               mtx_unlock(pmutex);\r
-\r
-}\r
-static inline void __list_del(struct list_head * prev, struct list_head * next)\r
-{\r
-       next->prev = prev;\r
-       prev->next = next;\r
-}\r
-static inline void INIT_LIST_HEAD(struct list_head *list)\r
-{\r
-       list->next = list;\r
-       list->prev = list;\r
-}\r
-__inline static void rtw_list_delete(_list *plist)\r
-{\r
-       __list_del(plist->prev, plist->next);\r
-       INIT_LIST_HEAD(plist);\r
-}\r
-\r
-__inline static void _init_timer(_timer *ptimer,_nic_hdl padapter,void *pfunc,void* cntx)\r
-{\r
-       ptimer->function = pfunc;\r
-       ptimer->arg = cntx;\r
-       callout_init(&ptimer->callout, CALLOUT_MPSAFE);\r
-}\r
-\r
-__inline static void _set_timer(_timer *ptimer,u32 delay_time)\r
-{      \r
-       //      mod_timer(ptimer , (jiffies+(delay_time*HZ/1000)));\r
-       if(ptimer->function && ptimer->arg){\r
-               rtw_mtx_lock(NULL);\r
-               callout_reset(&ptimer->callout, delay_time,ptimer->function, ptimer->arg);\r
-               rtw_mtx_unlock(NULL);\r
-       }\r
-}\r
-\r
-__inline static void _cancel_timer(_timer *ptimer,u8 *bcancelled)\r
-{\r
-       //      del_timer_sync(ptimer);         \r
-       //      *bcancelled=  _TRUE;//TRUE ==1; FALSE==0        \r
-       rtw_mtx_lock(NULL);\r
-       callout_drain(&ptimer->callout);\r
-       rtw_mtx_unlock(NULL);\r
-}\r
-\r
-__inline static void _init_workitem(_workitem *pwork, void *pfunc, PVOID cntx)\r
-{\r
-       printf("%s Not implement yet! \n",__FUNCTION__);\r
-}\r
-\r
-__inline static void _set_workitem(_workitem *pwork)\r
-{\r
-       printf("%s Not implement yet! \n",__FUNCTION__);\r
-//     schedule_work(pwork);\r
-}\r
-\r
-//\r
-// Global Mutex: can only be used at PASSIVE level.\r
-//\r
-\r
-#define ACQUIRE_GLOBAL_MUTEX(_MutexCounter)                              \\r
-{                                                               \\r
-}\r
-\r
-#define RELEASE_GLOBAL_MUTEX(_MutexCounter)                              \\r
-{                                                               \\r
-}\r
-\r
-#define ATOMIC_INIT(i)  { (i) }\r
-\r
-static __inline void thread_enter(char *name);\r
-\r
-//Atomic integer operations\r
-typedef uint32_t ATOMIC_T ;\r
-\r
-#define rtw_netdev_priv(netdev) (((struct ifnet *)netdev)->if_softc)\r
-\r
-#define rtw_free_netdev(netdev) if_free((netdev))\r
-\r
-#define NDEV_FMT "%s"\r
-#define NDEV_ARG(ndev) ""\r
-#define ADPT_FMT "%s"\r
-#define ADPT_ARG(adapter) ""\r
-#define FUNC_NDEV_FMT "%s"\r
-#define FUNC_NDEV_ARG(ndev) __func__\r
-#define FUNC_ADPT_FMT "%s"\r
-#define FUNC_ADPT_ARG(adapter) __func__\r
-\r
-#define STRUCT_PACKED\r
-\r
-#endif\r
-\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_service_ce.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_service_ce.h
deleted file mode 100755 (executable)
index 04c5b18..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/\r
-\r
-#ifndef __OSDEP_CE_SERVICE_H_\r
-#define __OSDEP_CE_SERVICE_H_\r
-\r
-\r
-#include <ndis.h>\r
-#include <ntddndis.h>\r
-\r
-#ifdef CONFIG_SDIO_HCI\r
-#include "SDCardDDK.h"\r
-#endif\r
-\r
-#ifdef CONFIG_USB_HCI\r
-#include <usbdi.h>\r
-#endif\r
-\r
-typedef HANDLE         _sema;\r
-typedef        LIST_ENTRY      _list;\r
-typedef NDIS_STATUS _OS_STATUS;\r
-\r
-typedef NDIS_SPIN_LOCK _lock;\r
-\r
-typedef HANDLE                 _rwlock; //Mutex\r
-\r
-typedef u32    _irqL;\r
-\r
-typedef NDIS_HANDLE  _nic_hdl;\r
-\r
-\r
-typedef NDIS_MINIPORT_TIMER    _timer;\r
-\r
-struct __queue {\r
-       LIST_ENTRY      queue;\r
-       _lock   lock;\r
-};\r
-\r
-typedef        NDIS_PACKET     _pkt;\r
-typedef NDIS_BUFFER    _buffer;\r
-typedef struct __queue _queue;\r
-\r
-typedef HANDLE         _thread_hdl_;\r
-typedef DWORD thread_return;\r
-typedef void*  thread_context;\r
-typedef NDIS_WORK_ITEM _workitem;\r
-\r
-#define thread_exit() ExitThread(STATUS_SUCCESS); return 0;\r
-\r
-\r
-#define SEMA_UPBND     (0x7FFFFFFF)   //8192\r
-\r
-__inline static _list *get_prev(_list  *list)\r
-{\r
-       return list->Blink;\r
-}\r
-       \r
-__inline static _list *get_next(_list  *list)\r
-{\r
-       return list->Flink;\r
-}\r
-\r
-__inline static _list  *get_list_head(_queue   *queue)\r
-{\r
-       return (&(queue->queue));\r
-}\r
-\r
-#define LIST_CONTAINOR(ptr, type, member) CONTAINING_RECORD(ptr, type, member)\r
-\r
-__inline static void _enter_critical(_lock *plock, _irqL *pirqL)\r
-{\r
-       NdisAcquireSpinLock(plock);\r
-}\r
-\r
-__inline static void _exit_critical(_lock *plock, _irqL *pirqL)\r
-{\r
-       NdisReleaseSpinLock(plock);\r
-}\r
-\r
-__inline static _enter_critical_ex(_lock *plock, _irqL *pirqL)\r
-{\r
-       NdisDprAcquireSpinLock(plock);  \r
-}\r
-\r
-__inline static _exit_critical_ex(_lock *plock, _irqL *pirqL)\r
-{\r
-       NdisDprReleaseSpinLock(plock);  \r
-}\r
-\r
-\r
-__inline static void _enter_hwio_critical(_rwlock *prwlock, _irqL *pirqL)\r
-{\r
-       WaitForSingleObject(*prwlock, INFINITE );\r
-\r
-}\r
-\r
-__inline static void _exit_hwio_critical(_rwlock *prwlock, _irqL *pirqL)\r
-{\r
-       ReleaseMutex(*prwlock);\r
-}\r
-\r
-__inline static void rtw_list_delete(_list *plist)\r
-{\r
-       RemoveEntryList(plist);\r
-       InitializeListHead(plist);\r
-}\r
-\r
-#define RTW_TIMER_HDL_ARGS IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3\r
-\r
-__inline static void _init_timer(_timer *ptimer,_nic_hdl nic_hdl,void *pfunc,PVOID cntx)\r
-{\r
-       NdisMInitializeTimer(ptimer, nic_hdl, pfunc, cntx);\r
-}\r
-\r
-__inline static void _set_timer(_timer *ptimer,u32 delay_time)\r
-{\r
-       NdisMSetTimer(ptimer,delay_time);\r
-}\r
-\r
-__inline static void _cancel_timer(_timer *ptimer,u8 *bcancelled)\r
-{\r
-       NdisMCancelTimer(ptimer,bcancelled);\r
-}\r
-\r
-__inline static void _init_workitem(_workitem *pwork, void *pfunc, PVOID cntx)\r
-{\r
-\r
-       NdisInitializeWorkItem(pwork, pfunc, cntx);\r
-}\r
-\r
-__inline static void _set_workitem(_workitem *pwork)\r
-{\r
-       NdisScheduleWorkItem(pwork);\r
-}\r
-\r
-#define ATOMIC_INIT(i)  { (i) }\r
-\r
-//\r
-// Global Mutex: can only be used at PASSIVE level.\r
-//\r
-\r
-#define ACQUIRE_GLOBAL_MUTEX(_MutexCounter)                              \\r
-{                                                               \\r
-    while (NdisInterlockedIncrement((PULONG)&(_MutexCounter)) != 1)\\r
-    {                                                           \\r
-        NdisInterlockedDecrement((PULONG)&(_MutexCounter));        \\r
-        NdisMSleep(10000);                          \\r
-    }                                                           \\r
-}\r
-\r
-#define RELEASE_GLOBAL_MUTEX(_MutexCounter)                              \\r
-{                                                               \\r
-    NdisInterlockedDecrement((PULONG)&(_MutexCounter));              \\r
-}\r
-\r
-// limitation of path length\r
-#define PATH_LENGTH_MAX MAX_PATH\r
-\r
-//Atomic integer operations\r
-#define ATOMIC_T LONG\r
-\r
-#define NDEV_FMT "%s"\r
-#define NDEV_ARG(ndev) ""\r
-#define ADPT_FMT "%s"\r
-#define ADPT_ARG(adapter) ""\r
-#define FUNC_NDEV_FMT "%s"\r
-#define FUNC_NDEV_ARG(ndev) __func__\r
-#define FUNC_ADPT_FMT "%s"\r
-#define FUNC_ADPT_ARG(adapter) __func__\r
-\r
-#define STRUCT_PACKED\r
-\r
-\r
-#endif\r
-\r
index 894169dd1e58d0dd30f13e4e83fd796bd4451042..223efc1c580f598a3594b9015db1682c9eebd7f4 100755 (executable)
        #include <asm/io.h>\r
 #endif\r
 \r
        #include <asm/io.h>\r
 #endif\r
 \r
+#ifdef CONFIG_NET_RADIO\r
+       #define CONFIG_WIRELESS_EXT\r
+#endif\r
+\r
+       /* Monitor mode */\r
+       #include <net/ieee80211_radiotap.h>\r
+\r
 #ifdef CONFIG_IOCTL_CFG80211   \r
 #ifdef CONFIG_IOCTL_CFG80211   \r
-//     #include <linux/ieee80211.h>        \r
-        #include <net/ieee80211_radiotap.h>\r
-       #include <net/cfg80211.h>       \r
+/*     #include <linux/ieee80211.h> */\r
+       #include <net/cfg80211.h>\r
 #endif //CONFIG_IOCTL_CFG80211\r
 \r
 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX\r
 #endif //CONFIG_IOCTL_CFG80211\r
 \r
 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX\r
 #endif\r
 #endif\r
 \r
 #endif\r
 #endif\r
 \r
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX\r
+       #include <net/sock.h>\r
+       #include <net/tcp.h>\r
+       #include <linux/udp.h>\r
+       #include <linux/in.h>\r
+       #include <linux/netlink.h>\r
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX\r
+\r
 #ifdef CONFIG_USB_HCI\r
        typedef struct urb *  PURB;\r
 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22))\r
 #ifdef CONFIG_USB_HCI\r
        typedef struct urb *  PURB;\r
 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22))\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_service_xp.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/osdep_service_xp.h
deleted file mode 100755 (executable)
index 45d54af..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-/******************************************************************************\r
- *\r
- * Copyright(c) 2007 - 2013 Realtek Corporation. All rights reserved.\r
- *                                        \r
- * This program is free software; you can redistribute it and/or modify it\r
- * under the terms of version 2 of the GNU General Public License as\r
- * published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful, but WITHOUT\r
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
- * more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along with\r
- * this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
- *\r
- *\r
- ******************************************************************************/\r
-#ifndef __OSDEP_LINUX_SERVICE_H_\r
-#define __OSDEP_LINUX_SERVICE_H_\r
-\r
-       #include <ndis.h>\r
-       #include <ntddk.h>\r
-       #include <ntddndis.h>\r
-       #include <ntdef.h>\r
-\r
-#ifdef CONFIG_USB_HCI\r
-       #include <usb.h>\r
-       #include <usbioctl.h>\r
-       #include <usbdlib.h>\r
-#endif\r
-\r
-       typedef KSEMAPHORE      _sema;\r
-       typedef LIST_ENTRY      _list;\r
-       typedef NDIS_STATUS _OS_STATUS;\r
-       \r
-\r
-       typedef NDIS_SPIN_LOCK  _lock;\r
-\r
-       typedef KMUTEX                  _mutex;\r
-\r
-       typedef KIRQL   _irqL;\r
-\r
-       // USB_PIPE for WINCE , but handle can be use just integer under windows\r
-       typedef NDIS_HANDLE  _nic_hdl;\r
-\r
-\r
-       typedef NDIS_MINIPORT_TIMER    _timer;\r
-\r
-       struct  __queue {\r
-               LIST_ENTRY      queue;  \r
-               _lock   lock;\r
-       };\r
-\r
-       typedef NDIS_PACKET     _pkt;\r
-       typedef NDIS_BUFFER     _buffer;\r
-       typedef struct  __queue _queue;\r
-       \r
-       typedef PKTHREAD _thread_hdl_;\r
-       typedef void    thread_return;\r
-       typedef void* thread_context;\r
-\r
-       typedef NDIS_WORK_ITEM _workitem;\r
-\r
-       #define thread_exit() PsTerminateSystemThread(STATUS_SUCCESS);\r
-\r
-       #define HZ                      10000000\r
-       #define SEMA_UPBND      (0x7FFFFFFF)   //8192\r
-       \r
-__inline static _list *get_next(_list  *list)\r
-{\r
-       return list->Flink;\r
-}      \r
-\r
-__inline static _list  *get_list_head(_queue   *queue)\r
-{\r
-       return (&(queue->queue));\r
-}\r
-       \r
-\r
-#define LIST_CONTAINOR(ptr, type, member) CONTAINING_RECORD(ptr, type, member)\r
-     \r
-\r
-__inline static _enter_critical(_lock *plock, _irqL *pirqL)\r
-{\r
-       NdisAcquireSpinLock(plock);     \r
-}\r
-\r
-__inline static _exit_critical(_lock *plock, _irqL *pirqL)\r
-{\r
-       NdisReleaseSpinLock(plock);     \r
-}\r
-\r
-\r
-__inline static _enter_critical_ex(_lock *plock, _irqL *pirqL)\r
-{\r
-       NdisDprAcquireSpinLock(plock);  \r
-}\r
-\r
-__inline static _exit_critical_ex(_lock *plock, _irqL *pirqL)\r
-{\r
-       NdisDprReleaseSpinLock(plock);  \r
-}\r
-\r
-__inline static void _enter_critical_bh(_lock *plock, _irqL *pirqL)\r
-{\r
-       NdisDprAcquireSpinLock(plock);\r
-}\r
-\r
-__inline static void _exit_critical_bh(_lock *plock, _irqL *pirqL)\r
-{\r
-       NdisDprReleaseSpinLock(plock);\r
-}\r
-\r
-__inline static _enter_critical_mutex(_mutex *pmutex, _irqL *pirqL)\r
-{\r
-       KeWaitForSingleObject(pmutex, Executive, KernelMode, FALSE, NULL);\r
-}\r
-\r
-\r
-__inline static _exit_critical_mutex(_mutex *pmutex, _irqL *pirqL)\r
-{\r
-       KeReleaseMutex(pmutex, FALSE);\r
-}\r
-\r
-\r
-__inline static void rtw_list_delete(_list *plist)\r
-{\r
-       RemoveEntryList(plist);\r
-       InitializeListHead(plist);      \r
-}\r
-\r
-#define RTW_TIMER_HDL_ARGS IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3\r
-\r
-__inline static void _init_timer(_timer *ptimer,_nic_hdl nic_hdl,void *pfunc,PVOID cntx)\r
-{\r
-       NdisMInitializeTimer(ptimer, nic_hdl, pfunc, cntx);\r
-}\r
-\r
-__inline static void _set_timer(_timer *ptimer,u32 delay_time)\r
-{      \r
-       NdisMSetTimer(ptimer,delay_time);       \r
-}\r
-\r
-__inline static void _cancel_timer(_timer *ptimer,u8 *bcancelled)\r
-{\r
-       NdisMCancelTimer(ptimer,bcancelled);\r
-}\r
-\r
-__inline static void _init_workitem(_workitem *pwork, void *pfunc, PVOID cntx)\r
-{\r
-\r
-       NdisInitializeWorkItem(pwork, pfunc, cntx);\r
-}\r
-\r
-__inline static void _set_workitem(_workitem *pwork)\r
-{\r
-       NdisScheduleWorkItem(pwork);\r
-}\r
-\r
-\r
-#define ATOMIC_INIT(i)  { (i) }\r
-\r
-//\r
-// Global Mutex: can only be used at PASSIVE level.\r
-//\r
-\r
-#define ACQUIRE_GLOBAL_MUTEX(_MutexCounter)                              \\r
-{                                                               \\r
-    while (NdisInterlockedIncrement((PULONG)&(_MutexCounter)) != 1)\\r
-    {                                                           \\r
-        NdisInterlockedDecrement((PULONG)&(_MutexCounter));        \\r
-        NdisMSleep(10000);                          \\r
-    }                                                           \\r
-}\r
-\r
-#define RELEASE_GLOBAL_MUTEX(_MutexCounter)                              \\r
-{                                                               \\r
-    NdisInterlockedDecrement((PULONG)&(_MutexCounter));              \\r
-}\r
-\r
-// limitation of path length\r
-#define PATH_LENGTH_MAX MAX_PATH\r
-\r
-//Atomic integer operations\r
-#define ATOMIC_T LONG\r
-\r
-\r
-#define NDEV_FMT "%s"\r
-#define NDEV_ARG(ndev) ""\r
-#define ADPT_FMT "%s"\r
-#define ADPT_ARG(adapter) ""\r
-#define FUNC_NDEV_FMT "%s"\r
-#define FUNC_NDEV_ARG(ndev) __func__\r
-#define FUNC_ADPT_FMT "%s"\r
-#define FUNC_ADPT_ARG(adapter) __func__\r
-\r
-#define STRUCT_PACKED\r
-\r
-#endif\r
-\r
index e1013379f11f0430e1f23127adea2fd6a191108f..269ce2460c2c2e5fbc483ea9bd8c42e7792af4fc 100755 (executable)
@@ -29,6 +29,8 @@ extern s32  rtw_recv_entry(union recv_frame *precv_frame);
 extern int rtw_recv_indicatepkt(_adapter *adapter, union recv_frame *precv_frame);
 extern void rtw_recv_returnpacket(IN _nic_hdl cnxt, IN _pkt *preturnedpkt);
 
 extern int rtw_recv_indicatepkt(_adapter *adapter, union recv_frame *precv_frame);
 extern void rtw_recv_returnpacket(IN _nic_hdl cnxt, IN _pkt *preturnedpkt);
 
+extern int rtw_recv_monitor(_adapter *padapter, union recv_frame *precv_frame);
+
 extern void rtw_hostapd_mlme_rx(_adapter *padapter, union recv_frame *precv_frame);
 extern void rtw_handle_tkip_mic_err(_adapter *padapter,u8 bgroup);
                
 extern void rtw_hostapd_mlme_rx(_adapter *padapter, union recv_frame *precv_frame);
 extern void rtw_handle_tkip_mic_err(_adapter *padapter,u8 bgroup);
                
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtl8192c_recv.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtl8192c_recv.h
deleted file mode 100755 (executable)
index ad4d370..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef _RTL8192C_RECV_H_
-#define _RTL8192C_RECV_H_
-
-#define RECV_BLK_SZ 512
-#define RECV_BLK_CNT 16
-#define RECV_BLK_TH RECV_BLK_CNT
-
-#if defined(CONFIG_USB_HCI)
-
-#ifndef MAX_RECVBUF_SZ
-#ifdef PLATFORM_OS_CE
-#define MAX_RECVBUF_SZ (8192+1024) // 8K+1k
-#else
-       #ifndef CONFIG_MINIMAL_MEMORY_USAGE
-               //#define MAX_RECVBUF_SZ (32768) // 32k
-               //#define MAX_RECVBUF_SZ (16384) //16K
-               //#define MAX_RECVBUF_SZ (10240) //10K
-               #ifdef CONFIG_PLATFORM_MSTAR
-                       #define MAX_RECVBUF_SZ (8192) // 8K
-               #else
-                       #define MAX_RECVBUF_SZ (15360) // 15k < 16k
-               #endif
-               //#define MAX_RECVBUF_SZ (8192+1024) // 8K+1k
-       #else
-               #define MAX_RECVBUF_SZ (4000) // about 4K
-       #endif
-#endif
-#endif //!MAX_RECVBUF_SZ
-
-#elif defined(CONFIG_PCI_HCI)
-//#ifndef CONFIG_MINIMAL_MEMORY_USAGE
-//     #define MAX_RECVBUF_SZ (9100)
-//#else
-       #define MAX_RECVBUF_SZ (4000) // about 4K
-//#endif
-
-
-#elif defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-
-#define MAX_RECVBUF_SZ (10240)
-
-#endif
-
-
-
-struct phy_stat
-{
-       unsigned int phydw0;
-
-       unsigned int phydw1;
-
-       unsigned int phydw2;
-
-       unsigned int phydw3;
-
-       unsigned int phydw4;
-
-       unsigned int phydw5;
-
-       unsigned int phydw6;
-
-       unsigned int phydw7;
-};
-
-// Rx smooth factor
-#define        Rx_Smooth_Factor (20)
-
-
-#ifdef CONFIG_USB_HCI
-typedef struct _INTERRUPT_MSG_FORMAT_EX{
-       unsigned int C2H_MSG0;
-       unsigned int C2H_MSG1;
-       unsigned int C2H_MSG2;
-       unsigned int C2H_MSG3;
-       unsigned int HISR; // from HISR Reg0x124, read to clear
-       unsigned int HISRE;// from HISRE Reg0x12c, read to clear
-       unsigned int  MSG_EX;
-}INTERRUPT_MSG_FORMAT_EX,*PINTERRUPT_MSG_FORMAT_EX;
-
-void rtl8192cu_init_recvbuf(_adapter *padapter, struct recv_buf *precvbuf);
-int    rtl8192cu_init_recv_priv(_adapter * padapter);
-void rtl8192cu_free_recv_priv(_adapter * padapter);
-#endif
-
-#ifdef CONFIG_PCI_HCI
-int    rtl8192ce_init_recv_priv(_adapter * padapter);
-void rtl8192ce_free_recv_priv(_adapter * padapter);
-#endif
-
-void rtl8192c_translate_rx_signal_stuff(union recv_frame *precvframe, struct phy_stat *pphy_status);
-void rtl8192c_query_rx_desc_status(union recv_frame *precvframe, struct recv_stat *pdesc);
-
-#endif
-
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtl8192c_rf.h b/drivers/net/wireless/rockchip_wlan/rtl8723bu/include/rtl8192c_rf.h
deleted file mode 100755 (executable)
index 4619650..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *                                        
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef _RTL8192C_RF_H_
-#define _RTL8192C_RF_H_
-
-
-//
-// RF RL6052 Series API
-//
-void           rtl8192c_RF_ChangeTxPath(       IN      PADAPTER        Adapter, 
-                                                                               IN      u16             DataRate);
-void           rtl8192c_PHY_RF6052SetBandwidth(        
-                                                                               IN      PADAPTER                                Adapter,
-                                                                               IN      CHANNEL_WIDTH           Bandwidth);     
-VOID   rtl8192c_PHY_RF6052SetCckTxPower(
-                                                                               IN      PADAPTER        Adapter,
-                                                                               IN      u8*             pPowerlevel);
-VOID   rtl8192c_PHY_RF6052SetOFDMTxPower(
-                                                                               IN      PADAPTER        Adapter,
-                                                                               IN      u8*             pPowerLevel,
-                                                                               IN      u8              Channel);
-int    PHY_RF6052_Config8192C( IN      PADAPTER                Adapter );
-
-/*--------------------------Exported Function prototype---------------------*/
-
-
-#endif/* End of HalRf.h */
-
index 9826d0da30ed069fc55240f9ae06b9017f927c30..0abb84b0e1e99e3c70506e42416e7edad82ace58 100755 (executable)
@@ -56,6 +56,7 @@ enum h2c_cmd_8723B{
        H2C_8723B_RSSI_SETTING = 0x42,  
        H2C_8723B_AP_REQ_TXRPT = 0x43,  
        H2C_8723B_INIT_RATE_COLLECT = 0x44,     
        H2C_8723B_RSSI_SETTING = 0x42,  
        H2C_8723B_AP_REQ_TXRPT = 0x43,  
        H2C_8723B_INIT_RATE_COLLECT = 0x44,     
+       H2C_8723B_RA_PARA_ADJUST = 0x46,
        
        //BT Class: 011
        H2C_8723B_B_TYPE_TDMA = 0x60,
        
        //BT Class: 011
        H2C_8723B_B_TYPE_TDMA = 0x60,
index 11ccd6ef09f5bcfc092ec5c2214c5c1e9f07e5ba..7a2b059f43f25c6cec8126efaff28f1a6d836a2e 100755 (executable)
@@ -124,8 +124,8 @@ typedef struct _RT_8723B_FIRMWARE_HDR
 #define PAGE_SIZE_TX_8723B                     128\r
 #define PAGE_SIZE_RX_8723B                     8\r
 \r
 #define PAGE_SIZE_TX_8723B                     128\r
 #define PAGE_SIZE_RX_8723B                     8\r
 \r
-#define TX_DMA_SIZE_8723B                      0x8000  // 32K(TX)\r
-#define RX_DMA_SIZE_8723B                      0x4000  // 16K(RX)\r
+#define TX_DMA_SIZE_8723B                      0x8000  /* 32K(TX) */\r
+#define RX_DMA_SIZE_8723B                      0x4000  /* 16K(RX) */\r
 \r
 #ifdef CONFIG_FW_C2H_DEBUG \r
 #define RX_DMA_RESERVED_SIZE_8723B     0x100   // 256B, reserved for c2h debug message\r
 \r
 #ifdef CONFIG_FW_C2H_DEBUG \r
 #define RX_DMA_RESERVED_SIZE_8723B     0x100   // 256B, reserved for c2h debug message\r
@@ -283,6 +283,7 @@ void Hal_EfuseParseXtal_8723B(PADAPTER pAdapter, u8 *hwinfo, u8 AutoLoadFail);
 void Hal_EfuseParseThermalMeter_8723B(PADAPTER padapter, u8 *hwinfo, u8 AutoLoadFail);\r
 VOID Hal_EfuseParsePackageType_8723B(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);\r
 VOID Hal_EfuseParseVoltage_8723B(PADAPTER pAdapter,u8* hwinfo,BOOLEAN  AutoLoadFail); \r
 void Hal_EfuseParseThermalMeter_8723B(PADAPTER padapter, u8 *hwinfo, u8 AutoLoadFail);\r
 VOID Hal_EfuseParsePackageType_8723B(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);\r
 VOID Hal_EfuseParseVoltage_8723B(PADAPTER pAdapter,u8* hwinfo,BOOLEAN  AutoLoadFail); \r
+VOID Hal_EfuseParseBoardType_8723B(PADAPTER Adapter,   u8*     PROMContent,BOOLEAN AutoloadFail);\r
 \r
 #ifdef CONFIG_C2H_PACKET_EN\r
 void rtl8723b_c2h_packet_handler(PADAPTER padapter, u8 *pbuf, u16 length);\r
 \r
 #ifdef CONFIG_C2H_PACKET_EN\r
 void rtl8723b_c2h_packet_handler(PADAPTER padapter, u8 *pbuf, u16 length);\r
@@ -317,12 +318,13 @@ void rtl8723bs_cancle_checkbthang_workqueue(_adapter * adapter);
 void rtl8723bs_hal_check_bt_hang(_adapter * adapter);\r
 #endif\r
 \r
 void rtl8723bs_hal_check_bt_hang(_adapter * adapter);\r
 #endif\r
 \r
+#ifdef CONFIG_GPIO_WAKEUP\r
+void HalSetOutPutGPIO(PADAPTER padapter, u8 index, u8 OutPutValue);\r
+#endif\r
+\r
 int FirmwareDownloadBT(IN PADAPTER Adapter, PRT_MP_FIRMWARE pFirmware);\r
 \r
 void CCX_FwC2HTxRpt_8723b(PADAPTER padapter, u8 *pdata, u8 len);\r
 int FirmwareDownloadBT(IN PADAPTER Adapter, PRT_MP_FIRMWARE pFirmware);\r
 \r
 void CCX_FwC2HTxRpt_8723b(PADAPTER padapter, u8 *pdata, u8 len);\r
-#ifdef CONFIG_FW_C2H_DEBUG\r
-void Debug_FwC2H_8723b(PADAPTER padapter, u8 *pdata, u8 len);\r
-#endif //CONFIG_FW_C2H_DEBUG\r
 s32 c2h_id_filter_ccx_8723b(u8 *buf);\r
 s32 c2h_handler_8723b(PADAPTER padapter, u8 *pC2hEvent);\r
 u8 MRateToHwRate8723B(u8  rate);\r
 s32 c2h_id_filter_ccx_8723b(u8 *buf);\r
 s32 c2h_handler_8723b(PADAPTER padapter, u8 *pC2hEvent);\r
 u8 MRateToHwRate8723B(u8  rate);\r
index 4218f50999b3e1c3c10c407a26e8b902b0cb0ad7..f4611864dc78523855b29040e154448399167a8d 100755 (executable)
 #ifndef __RTL8723B_RECV_H__\r
 #define __RTL8723B_RECV_H__\r
 \r
 #ifndef __RTL8723B_RECV_H__\r
 #define __RTL8723B_RECV_H__\r
 \r
-#include <rtl8192c_recv.h>\r
+#define RECV_BLK_SZ 512\r
+#define RECV_BLK_CNT 16\r
+#define RECV_BLK_TH RECV_BLK_CNT\r
+\r
+#if defined(CONFIG_USB_HCI)\r
+\r
+#ifndef MAX_RECVBUF_SZ\r
+#ifdef PLATFORM_OS_CE\r
+#define MAX_RECVBUF_SZ (8192+1024) // 8K+1k\r
+#else\r
+       #ifndef CONFIG_MINIMAL_MEMORY_USAGE\r
+               //#define MAX_RECVBUF_SZ (32768) // 32k\r
+               //#define MAX_RECVBUF_SZ (16384) //16K\r
+               //#define MAX_RECVBUF_SZ (10240) //10K\r
+               #ifdef CONFIG_PLATFORM_MSTAR\r
+                       #define MAX_RECVBUF_SZ (8192) // 8K\r
+               #else\r
+                       #define MAX_RECVBUF_SZ (15360) // 15k < 16k\r
+               #endif\r
+               //#define MAX_RECVBUF_SZ (8192+1024) // 8K+1k\r
+       #else\r
+               #define MAX_RECVBUF_SZ (4000) // about 4K\r
+       #endif\r
+#endif\r
+#endif //!MAX_RECVBUF_SZ\r
+\r
+#elif defined(CONFIG_PCI_HCI)\r
+//#ifndef CONFIG_MINIMAL_MEMORY_USAGE\r
+//     #define MAX_RECVBUF_SZ (9100)\r
+//#else\r
+       #define MAX_RECVBUF_SZ (4000) // about 4K\r
+//#endif\r
+\r
+\r
+#elif defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)\r
+\r
+#define MAX_RECVBUF_SZ (10240)\r
+\r
+#endif\r
+\r
+// Rx smooth factor\r
+#define        Rx_Smooth_Factor (20)\r
 \r
 #ifdef CONFIG_SDIO_HCI\r
 #ifndef CONFIG_SDIO_RX_COPY\r
 \r
 #ifdef CONFIG_SDIO_HCI\r
 #ifndef CONFIG_SDIO_RX_COPY\r
@@ -45,8 +86,7 @@ s32 rtl8723be_init_recv_priv(PADAPTER padapter);
 void rtl8723be_free_recv_priv(PADAPTER padapter);\r
 #endif\r
 \r
 void rtl8723be_free_recv_priv(PADAPTER padapter);\r
 #endif\r
 \r
-void rtl8723b_query_rx_phy_status(union recv_frame *precvframe, struct phy_stat *pphy_status);\r
 void rtl8723b_query_rx_desc_status(union recv_frame *precvframe, u8 *pdesc);\r
 \r
 void rtl8723b_query_rx_desc_status(union recv_frame *precvframe, u8 *pdesc);\r
 \r
-#endif\r
+#endif /* __RTL8723B_RECV_H__ */\r
 \r
 \r
index 1c6d42072c289f3ebc540d4b5152c67f2aaba171..2bb734176e9692e2c6d892ca2a8808b40ec1859e 100755 (executable)
@@ -20,8 +20,6 @@
 #ifndef __RTL8723B_RF_H__
 #define __RTL8723B_RF_H__
 
 #ifndef __RTL8723B_RF_H__
 #define __RTL8723B_RF_H__
 
-#include "rtl8192c_rf.h"
-
 int    PHY_RF6052_Config8723B( IN      PADAPTER                Adapter );
 
 VOID
 int    PHY_RF6052_Config8723B( IN      PADAPTER                Adapter );
 
 VOID
index aa4bc2cf35527fbfb7ec605ea16b685117bcf6b8..0821e50a1aa1de4423bb4a5feefdc82e8bba09d8 100755 (executable)
 //     0x0100h ~ 0x01FFh       MACTOP General Configuration\r
 //\r
 //-----------------------------------------------------\r
 //     0x0100h ~ 0x01FFh       MACTOP General Configuration\r
 //\r
 //-----------------------------------------------------\r
-\r
+#undef IS_E_CUT\r
+#define IS_E_CUT(version)              FALSE\r
+#undef IS_F_CUT\r
+#define IS_F_CUT(version)              ((GET_CVID_CUT_VERSION(version) == E_CUT_VERSION) ? TRUE : FALSE)\r
 \r
 //-----------------------------------------------------\r
 //\r
 \r
 //-----------------------------------------------------\r
 //\r
index cc59417397a1d3c6e600254d0197819aba09f347..9609b3ac87a8afc7623da5355006d37532611003 100755 (executable)
@@ -57,6 +57,7 @@ enum ANDROID_WIFI_CMD {
 
        ANDROID_WIFI_CMD_MACADDR,
 
 
        ANDROID_WIFI_CMD_MACADDR,
 
+       ANDROID_WIFI_CMD_BLOCK_SCAN,
        ANDROID_WIFI_CMD_BLOCK,
 
        ANDROID_WIFI_CMD_WFD_ENABLE,
        ANDROID_WIFI_CMD_BLOCK,
 
        ANDROID_WIFI_CMD_WFD_ENABLE,
@@ -69,7 +70,7 @@ enum ANDROID_WIFI_CMD {
        ANDROID_WIFI_CMD_HOSTAPD_SET_MACADDR_ACL,
        ANDROID_WIFI_CMD_HOSTAPD_ACL_ADD_STA,
        ANDROID_WIFI_CMD_HOSTAPD_ACL_REMOVE_STA,
        ANDROID_WIFI_CMD_HOSTAPD_SET_MACADDR_ACL,
        ANDROID_WIFI_CMD_HOSTAPD_ACL_ADD_STA,
        ANDROID_WIFI_CMD_HOSTAPD_ACL_REMOVE_STA,
-#ifdef CONFIG_GTK_OL
+#if defined(CONFIG_GTK_OL) && (LINUX_VERSION_CODE < KERNEL_VERSION(3, 1, 0))   
        ANDROID_WIFI_CMD_GTK_REKEY_OFFLOAD,
 #endif //CONFIG_GTK_OL
        ANDROID_WIFI_CMD_P2P_DISABLE,
        ANDROID_WIFI_CMD_GTK_REKEY_OFFLOAD,
 #endif //CONFIG_GTK_OL
        ANDROID_WIFI_CMD_P2P_DISABLE,
index c8d780165ae02c2ad0c4b4e0ac361e46e0402750..dcb51014ae2f7ddbdaed9f9c08ed4802063d1f82 100755 (executable)
@@ -29,7 +29,7 @@
 #define DEBUG_INFO             //DBG_8192C
 #define DEBUG_ERR              DBG_8192C
 //#define GET_MY_HWADDR                ((GET_MIB(priv))->dot11OperationEntry.hwaddr)
 #define DEBUG_INFO             //DBG_8192C
 #define DEBUG_ERR              DBG_8192C
 //#define GET_MY_HWADDR                ((GET_MIB(priv))->dot11OperationEntry.hwaddr)
-#define GET_MY_HWADDR(padapter)                ((padapter)->eeprompriv.mac_addr)
+#define GET_MY_HWADDR(padapter)                (adapter_mac_addr(padapter))
 #endif // rtw_wifi_driver
 
 #define NAT25_HASH_BITS                4
 #endif // rtw_wifi_driver
 
 #define NAT25_HASH_BITS                4
index e7b2fa0a5d6fcb84d6e6c0529989bf11b948fab9..266ce1e46765ed1612233b61fddd8eb56a704fee 100755 (executable)
 
 #include <drv_types.h>
 
 
 #include <drv_types.h>
 
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+
+#define NETLINK_USER 31
+#define CONNECT_PORT 30000
+#define CONNECT_PORT_BT 30001
+#define KERNEL_SOCKET_OK 0x01  
+#define NETLINK_SOCKET_OK 0x02
+
+#define OTHER 0
+#define RX_ATTEND_ACK 1
+#define RX_LEAVE_ACK 2
+#define RX_BT_LEAVE 3
+#define RX_INVITE_REQ 4
+#define RX_ATTEND_REQ 5
+#define RX_INVITE_RSP 6
+
+#define invite_req "INVITE_REQ"
+#define invite_rsp "INVITE_RSP"
+#define attend_req "ATTEND_REQ"
+#define attend_ack "ATTEND_ACK"
+#define wifi_leave "WIFI_LEAVE"
+#define leave_ack "LEAVE_ACK"
+#define bt_leave "BT_LEAVE"
+
+#define BT_INFO_NOTIFY_CMD 0x0106
+#define BT_INFO_LEN 8
+
+typedef struct _HCI_LINK_INFO{
+       u2Byte                                  ConnectHandle;
+       u1Byte                                  IncomingTrafficMode;
+       u1Byte                                  OutgoingTrafficMode;
+       u1Byte                                  BTProfile;
+       u1Byte                                  BTCoreSpec;
+       s1Byte                                  BT_RSSI;
+       u1Byte                                  TrafficProfile;
+       u1Byte                                  linkRole;
+}HCI_LINK_INFO, *PHCI_LINK_INFO;
+
+#define        MAX_BT_ACL_LINK_NUM                             8
+
+typedef struct _HCI_EXT_CONFIG{
+       HCI_LINK_INFO                           aclLink[MAX_BT_ACL_LINK_NUM];
+       u1Byte                                  btOperationCode;
+       u2Byte                                  CurrentConnectHandle;
+       u1Byte                                  CurrentIncomingTrafficMode;
+       u1Byte                                  CurrentOutgoingTrafficMode;
+
+       u1Byte                                  NumberOfACL;
+       u1Byte                                  NumberOfSCO;
+       u1Byte                                  CurrentBTStatus;
+       u2Byte                                  HCIExtensionVer;
+
+       BOOLEAN                                 bEnableWifiScanNotify;
+}HCI_EXT_CONFIG, *PHCI_EXT_CONFIG;
+
+typedef struct _HCI_PHY_LINK_BSS_INFO{
+       u2Byte                                          bdCap;                  // capability information
+
+       // Qos related. Added by Annie, 2005-11-01.
+       //BSS_QOS                                               BssQos;         
+       
+}HCI_PHY_LINK_BSS_INFO, *PHCI_PHY_LINK_BSS_INFO;
+
+typedef enum _BT_CONNECT_TYPE{
+       BT_CONNECT_AUTH_REQ                                                             =0x00,  
+       BT_CONNECT_AUTH_RSP                                                             =0x01,
+       BT_CONNECT_ASOC_REQ                                                             =0x02,
+       BT_CONNECT_ASOC_RSP                                                             =0x03,
+       BT_DISCONNECT                                                                           =0x04
+}BT_CONNECT_TYPE,*PBT_CONNECT_TYPE;
+
+
+typedef struct _PACKET_IRP_HCIEVENT_DATA {
+           u8          EventCode;
+           u8          Length; //total cmd length = extension event length+1(extension event code length)
+           u8          Data[1]; // byte1 is extension event code
+} rtw_HCI_event;
+
+
+struct btinfo_8761ATV {
+       u8 cid;
+       u8 len;
+
+       u8 bConnection:1;
+       u8 bSCOeSCO:1;
+       u8 bInQPage:1;
+       u8 bACLBusy:1;
+       u8 bSCOBusy:1;
+       u8 bHID:1;
+       u8 bA2DP:1;
+       u8 bFTP:1;
+
+       u8 retry_cnt:4;
+       u8 rsvd_34:1;
+       u8 bPage:1;
+       u8 TRxMask:1;
+       u8 Sniff_attempt:1;
+
+       u8 rssi;
+
+       u8 A2dp_rate:1;
+       u8 ReInit:1;
+       u8 MaxPower:1;
+       u8 bEnIgnoreWlanAct:1;
+       u8 TxPowerLow:1;
+       u8 TxPowerHigh:1;
+       u8 eSCO_SCO:1;
+       u8 Master_Slave:1;
+
+       u8 ACL_TRx_TP_low;
+       u8 ACL_TRx_TP_high;
+};
+
+#define HCIOPCODE(_OCF, _OGF)     ((_OGF)<<10|(_OCF))
+#define HCIOPCODELOW(_OCF, _OGF)       (u8)(HCIOPCODE(_OCF, _OGF)&0x00ff)
+#define HCIOPCODEHIGHT(_OCF, _OGF) (u8)(HCIOPCODE(_OCF, _OGF)>>8)
+#define HCI_OGF(opCode)  (unsigned char)((0xFC00 & (opCode)) >> 10)
+#define HCI_OCF(opCode)  ( 0x3FF & (opCode))
+
+
+typedef enum _HCI_STATUS{
+       HCI_STATUS_SUCCESS                                                                              =0x00, //Success
+       HCI_STATUS_UNKNOW_HCI_CMD                                                               =0x01, //Unknown HCI Command
+       HCI_STATUS_UNKNOW_CONNECT_ID                                                    =0X02, //Unknown Connection Identifier
+       HCI_STATUS_HW_FAIL                                                                              =0X03, //Hardware Failure
+       HCI_STATUS_PAGE_TIMEOUT                                                                 =0X04, //Page Timeout
+       HCI_STATUS_AUTH_FAIL                                                                            =0X05, //Authentication Failure
+       HCI_STATUS_PIN_OR_KEY_MISSING                                                   =0X06, //PIN or Key Missing
+       HCI_STATUS_MEM_CAP_EXCEED                                                               =0X07, //Memory Capacity Exceeded
+       HCI_STATUS_CONNECT_TIMEOUT                                                              =0X08, //Connection Timeout
+       HCI_STATUS_CONNECT_LIMIT                                                                        =0X09, //Connection Limit Exceeded
+       HCI_STATUS_SYN_CONNECT_LIMIT                                                            =0X0a, //Synchronous Connection Limit To A Device Exceeded
+       HCI_STATUS_ACL_CONNECT_EXISTS                                                   =0X0b, //ACL Connection Already Exists
+       HCI_STATUS_CMD_DISALLOW                                                                 =0X0c, //Command Disallowed
+       HCI_STATUS_CONNECT_RJT_LIMIT_RESOURCE                                   =0X0d, //Connection Rejected due to Limited Resources
+       HCI_STATUS_CONNECT_RJT_SEC_REASON                                               =0X0e, //Connection Rejected Due To Security Reasons
+       HCI_STATUS_CONNECT_RJT_UNACCEPT_BD_ADDR                         =0X0f, //Connection Rejected due to Unacceptable BD_ADDR
+       HCI_STATUS_CONNECT_ACCEPT_TIMEOUT                                               =0X10, //Connection Accept Timeout Exceeded
+       HCI_STATUS_UNSUPPORT_FEATURE_PARA_VALUE                         =0X11, //Unsupported Feature or Parameter Value
+       HCI_STATUS_INVALID_HCI_CMD_PARA_VALUE                                   =0X12, //Invalid HCI Command Parameters
+       HCI_STATUS_REMOTE_USER_TERMINATE_CONNECT                                =0X13, //Remote User Terminated Connection
+       HCI_STATUS_REMOTE_DEV_TERMINATE_LOW_RESOURCE                    =0X14, //Remote Device Terminated Connection due to Low Resources
+       HCI_STATUS_REMOTE_DEV_TERMINATE_CONNECT_POWER_OFF       =0X15, //Remote Device Terminated Connection due to Power Off
+       HCI_STATUS_CONNECT_TERMINATE_LOCAL_HOST                         =0X16, //Connection Terminated By Local Host
+       HCI_STATUS_REPEATE_ATTEMPT                                                              =0X17, //Repeated Attempts
+       HCI_STATUS_PAIR_NOT_ALLOW                                                               =0X18, //Pairing Not Allowed
+       HCI_STATUS_UNKNOW_LMP_PDU                                                               =0X19, //Unknown LMP PDU
+       HCI_STATUS_UNSUPPORT_REMOTE_LMP_FEATURE                         =0X1a, //Unsupported Remote Feature / Unsupported LMP Feature
+       HCI_STATUS_SOC_OFFSET_REJECT                                                            =0X1b, //SCO Offset Rejected
+       HCI_STATUS_SOC_INTERVAL_REJECT                                                  =0X1c, //SCO Interval Rejected
+       HCI_STATUS_SOC_AIR_MODE_REJECT                                                  =0X1d,//SCO Air Mode Rejected
+       HCI_STATUS_INVALID_LMP_PARA                                                             =0X1e, //Invalid LMP Parameters
+       HCI_STATUS_UNSPECIFIC_ERROR                                                             =0X1f, //Unspecified Error
+       HCI_STATUS_UNSUPPORT_LMP_PARA_VALUE                                     =0X20, //Unsupported LMP Parameter Value
+       HCI_STATUS_ROLE_CHANGE_NOT_ALLOW                                                =0X21, //Role Change Not Allowed
+       HCI_STATUS_LMP_RESPONSE_TIMEOUT                                                 =0X22, //LMP Response Timeout
+       HCI_STATUS_LMP_ERROR_TRANSACTION_COLLISION                              =0X23, //LMP Error Transaction Collision
+       HCI_STATUS_LMP_PDU_NOT_ALLOW                                                    =0X24, //LMP PDU Not Allowed
+       HCI_STATUS_ENCRYPTION_MODE_NOT_ALLOW                                    =0X25, //Encryption Mode Not Acceptable
+       HCI_STATUS_LINK_KEY_CAN_NOT_CHANGE                                              =0X26, //Link Key Can Not be Changed
+       HCI_STATUS_REQUEST_QOS_NOT_SUPPORT                                              =0X27, //Requested QoS Not Supported
+       HCI_STATUS_INSTANT_PASSED                                                               =0X28, //Instant Passed
+       HCI_STATUS_PAIRING_UNIT_KEY_NOT_SUPPORT                                 =0X29, //Pairing With Unit Key Not Supported
+       HCI_STATUS_DIFFERENT_TRANSACTION_COLLISION                              =0X2a, //Different Transaction Collision
+       HCI_STATUS_RESERVE_1                                                                            =0X2b, //Reserved
+       HCI_STATUS_QOS_UNACCEPT_PARA                                                    =0X2c, //QoS Unacceptable Parameter
+       HCI_STATUS_QOS_REJECT                                                                           =0X2d, //QoS Rejected
+       HCI_STATUS_CHNL_CLASSIFICATION_NOT_SUPPORT                              =0X2e, //Channel Classification Not Supported
+       HCI_STATUS_INSUFFICIENT_SECURITY                                                        =0X2f, //Insufficient Security
+       HCI_STATUS_PARA_OUT_OF_RANGE                                                    =0x30, //Parameter Out Of Mandatory Range
+       HCI_STATUS_RESERVE_2                                                                            =0X31, //Reserved
+       HCI_STATUS_ROLE_SWITCH_PENDING                                                  =0X32, //Role Switch Pending
+       HCI_STATUS_RESERVE_3                                                                            =0X33, //Reserved
+       HCI_STATUS_RESERVE_SOLT_VIOLATION                                               =0X34, //Reserved Slot Violation
+       HCI_STATUS_ROLE_SWITCH_FAIL                                                             =0X35, //Role Switch Failed
+       HCI_STATUS_EXTEND_INQUIRY_RSP_TOO_LARGE                         =0X36, //Extended Inquiry Response Too Large
+       HCI_STATUS_SEC_SIMPLE_PAIRING_NOT_SUPPORT                               =0X37, //Secure Simple Pairing Not Supported By Host.
+       HCI_STATUS_HOST_BUSY_PAIRING                                                            =0X38, //Host Busy - Pairing
+       HCI_STATUS_CONNECT_REJ_NOT_SUIT_CHNL_FOUND                      =0X39, //Connection Rejected due to No Suitable Channel Found
+       HCI_STATUS_CONTROLLER_BUSY                                                              =0X3a  //CONTROLLER BUSY
+}RTW_HCI_STATUS;
+
+#define HCI_EVENT_COMMAND_COMPLETE                                     0x0e
+
+#define OGF_EXTENSION                                                                  0X3f
+typedef enum HCI_EXTENSION_COMMANDS{
+       HCI_SET_ACL_LINK_DATA_FLOW_MODE                         =0x0010,
+       HCI_SET_ACL_LINK_STATUS                                                 =0x0020,
+       HCI_SET_SCO_LINK_STATUS                                                 =0x0030,
+       HCI_SET_RSSI_VALUE                                                              =0x0040,
+       HCI_SET_CURRENT_BLUETOOTH_STATUS                                =0x0041,
+
+       //The following is for RTK8723
+       HCI_EXTENSION_VERSION_NOTIFY                                    =0x0100,
+       HCI_LINK_STATUS_NOTIFY                                                  =0x0101,
+       HCI_BT_OPERATION_NOTIFY                                                 =0x0102,
+       HCI_ENABLE_WIFI_SCAN_NOTIFY                                             =0x0103,
+       HCI_QUERY_RF_STATUS                                                             =0x0104,
+       HCI_BT_ABNORMAL_NOTIFY                                                  =0x0105,
+       HCI_BT_INFO_NOTIFY                                                              =0x0106,
+       HCI_BT_COEX_NOTIFY                                                              =0x0107,
+       HCI_BT_PATCH_VERSION_NOTIFY                                             =0x0108,
+       HCI_BT_AFH_MAP_NOTIFY                                                   =0x0109,
+       HCI_BT_REGISTER_VALUE_NOTIFY                                    =0x010a,
+       
+       //The following is for IVT
+       HCI_WIFI_CURRENT_CHANNEL                                                =0x0300,        
+       HCI_WIFI_CURRENT_BANDWIDTH                                              =0x0301,                
+       HCI_WIFI_CONNECTION_STATUS                                              =0x0302
+}RTW_HCI_EXT_CMD;
+
+#define HCI_EVENT_EXTENSION_RTK                                                0xfe
+typedef enum HCI_EXTENSION_EVENT_RTK{
+       HCI_EVENT_EXT_WIFI_SCAN_NOTIFY                                                          =0x01,
+       HCI_EVENT_EXT_WIFI_RF_STATUS_NOTIFY                                             =0x02,
+       HCI_EVENT_EXT_BT_INFO_CONTROL                                                           =0x03,
+       HCI_EVENT_EXT_BT_COEX_CONTROL                                                           =0x04
+}RTW_HCI_EXT_EVENT;
+
+typedef enum _BT_TRAFFIC_MODE{
+       BT_MOTOR_EXT_BE         = 0x00, //Best Effort. Default. for HCRP, PAN, SDP, RFCOMM-based profiles like FTP,OPP, SPP, DUN, etc.
+       BT_MOTOR_EXT_GUL                = 0x01, //Guaranteed Latency. This type of traffic is used e.g. for HID and AVRCP.
+       BT_MOTOR_EXT_GUB                = 0X02, //Guaranteed Bandwidth.
+       BT_MOTOR_EXT_GULB       = 0X03  //Guaranteed Latency and Bandwidth. for A2DP and VDP.
+} BT_TRAFFIC_MODE;
+
+typedef enum _BT_TRAFFIC_MODE_PROFILE{
+       BT_PROFILE_NONE,        
+       BT_PROFILE_A2DP,
+       BT_PROFILE_PAN  ,
+       BT_PROFILE_HID,
+       BT_PROFILE_SCO          
+} BT_TRAFFIC_MODE_PROFILE;
+
+typedef enum _HCI_EXT_BT_OPERATION {
+       HCI_BT_OP_NONE                          = 0x0,
+       HCI_BT_OP_INQUIRY_START         = 0x1,
+       HCI_BT_OP_INQUIRY_FINISH                = 0x2,
+       HCI_BT_OP_PAGING_START          = 0x3,
+       HCI_BT_OP_PAGING_SUCCESS                = 0x4,
+       HCI_BT_OP_PAGING_UNSUCCESS      = 0x5,
+       HCI_BT_OP_PAIRING_START         = 0x6,
+       HCI_BT_OP_PAIRING_FINISH                = 0x7,
+       HCI_BT_OP_BT_DEV_ENABLE         = 0x8,
+       HCI_BT_OP_BT_DEV_DISABLE                = 0x9,
+       HCI_BT_OP_MAX
+} HCI_EXT_BT_OPERATION, *PHCI_EXT_BT_OPERATION;
+
+typedef struct _BT_MGNT{
+       BOOLEAN                         bBTConnectInProgress;
+       BOOLEAN                         bLogLinkInProgress;
+       BOOLEAN                         bPhyLinkInProgress;
+       BOOLEAN                         bPhyLinkInProgressStartLL;
+       u1Byte                          BtCurrentPhyLinkhandle;
+       u2Byte                          BtCurrentLogLinkhandle; 
+       u1Byte                          CurrentConnectEntryNum;
+       u1Byte                          DisconnectEntryNum;
+       u1Byte                          CurrentBTConnectionCnt;
+       BT_CONNECT_TYPE         BTCurrentConnectType;
+       BT_CONNECT_TYPE         BTReceiveConnectPkt;    
+       u1Byte                          BTAuthCount;
+       u1Byte                          BTAsocCount;
+       BOOLEAN                         bStartSendSupervisionPkt;
+       BOOLEAN                         BtOperationOn;
+       BOOLEAN                         BTNeedAMPStatusChg;
+       BOOLEAN                         JoinerNeedSendAuth;
+       HCI_PHY_LINK_BSS_INFO   bssDesc;
+       HCI_EXT_CONFIG          ExtConfig;
+       BOOLEAN                         bNeedNotifyAMPNoCap;
+       BOOLEAN                         bCreateSpportQos;
+       BOOLEAN                         bSupportProfile;
+       u1Byte                          BTChannel;
+       BOOLEAN                         CheckChnlIsSuit;
+       BOOLEAN                         bBtScan;
+       BOOLEAN                         btLogoTest;
+       BOOLEAN                         bRfStatusNotified;
+       BOOLEAN                         bBtRsvedPageDownload;
+}BT_MGNT, *PBT_MGNT;
+
+struct bt_coex_info {
+       /* For Kernel Socket */
+       struct socket *udpsock; 
+       struct sockaddr_in wifi_sockaddr; /*wifi socket*/
+       struct sockaddr_in bt_sockaddr;/* BT socket  */
+       struct sock *sk_store;/*back up socket for UDP RX int*/
+       
+       /* store which socket is OK */
+       u8 sock_open;
+               
+       u8 BT_attend;
+       u8 is_exist; /* socket exist */
+       BT_MGNT BtMgnt;
+       struct workqueue_struct *btcoex_wq;
+       struct delayed_work recvmsg_work;
+};
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
 
 #define        PACKET_NORMAL                   0
 #define        PACKET_DHCP                             1
 
 #define        PACKET_NORMAL                   0
 #define        PACKET_DHCP                             1
@@ -46,6 +342,7 @@ void rtw_btcoex_SwitchBtTRxMask(PADAPTER);
 void rtw_btcoex_Switch(PADAPTER, u8 enable);
 u8 rtw_btcoex_IsBtDisabled(PADAPTER);
 void rtw_btcoex_Handler(PADAPTER);
 void rtw_btcoex_Switch(PADAPTER, u8 enable);
 u8 rtw_btcoex_IsBtDisabled(PADAPTER);
 void rtw_btcoex_Handler(PADAPTER);
+s32 rtw_btcoex_IsBTCoexRejectAMPDU(PADAPTER padapter);
 s32 rtw_btcoex_IsBTCoexCtrlAMPDUSize(PADAPTER);
 u32 rtw_btcoex_GetAMPDUSize(PADAPTER);
 void rtw_btcoex_SetManualControl(PADAPTER, u8 bmanual);
 s32 rtw_btcoex_IsBTCoexCtrlAMPDUSize(PADAPTER);
 u32 rtw_btcoex_GetAMPDUSize(PADAPTER);
 void rtw_btcoex_SetManualControl(PADAPTER, u8 bmanual);
@@ -66,11 +363,31 @@ void rtw_btcoex_SetDBG(PADAPTER, u32 *pDbgModule);
 u32 rtw_btcoex_GetDBG(PADAPTER, u8 *pStrBuf, u32 bufSize);
 u8 rtw_btcoex_IncreaseScanDeviceNum(PADAPTER);
 u8 rtw_btcoex_IsBtLinkExist(PADAPTER);
 u32 rtw_btcoex_GetDBG(PADAPTER, u8 *pStrBuf, u32 bufSize);
 u8 rtw_btcoex_IncreaseScanDeviceNum(PADAPTER);
 u8 rtw_btcoex_IsBtLinkExist(PADAPTER);
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+void rtw_btcoex_SetBtPatchVersion(PADAPTER padapter,u16 btHciVer, u16 btPatchVer);
+void rtw_btcoex_SetHciVersion(PADAPTER  padapter, u16 hciVersion);
+void rtw_btcoex_StackUpdateProfileInfo(void);
+void rtw_btcoex_init_socket(_adapter *padapter);
+void rtw_btcoex_close_socket(_adapter *padapter);
+void rtw_btcoex_dump_tx_msg(u8 *tx_msg, u8 len, u8 *msg_name);
+u8 rtw_btcoex_sendmsgbysocket(_adapter *padapter, u8 *msg, u8 msg_size, bool force);
+u8 rtw_btcoex_create_kernel_socket(_adapter *padapter);
+void rtw_btcoex_close_kernel_socket(_adapter *padapter);
+void rtw_btcoex_recvmsgbysocket(void *data);
+u16 rtw_btcoex_parse_recv_data(u8 *msg, u8 msg_size);
+u8 rtw_btcoex_btinfo_cmd(PADAPTER padapter, u8 *pbuf, u16 length);
+void rtw_btcoex_parse_hci_cmd(_adapter *padapter, u8 *cmd, u16 len);
+void rtw_btcoex_SendEventExtBtCoexControl(PADAPTER Adapter, u8 bNeedDbgRsp, u8 dataLen, void *pData);
+void rtw_btcoex_SendEventExtBtInfoControl(PADAPTER Adapter, u8 dataLen, void *pData);
+void rtw_btcoex_SendScanNotify(PADAPTER padapter, u8 scanType);
+#define BT_SendEventExtBtCoexControl(Adapter, bNeedDbgRsp, dataLen, pData) rtw_btcoex_SendEventExtBtCoexControl(Adapter, bNeedDbgRsp, dataLen, pData)
+#define BT_SendEventExtBtInfoControl(Adapter, dataLen, pData) rtw_btcoex_SendEventExtBtInfoControl(Adapter, dataLen, pData)
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
 
 // ==================================================
 // Below Functions are called by BT-Coex
 // ==================================================
 
 // ==================================================
 // Below Functions are called by BT-Coex
 // ==================================================
-void rtw_btcoex_RejectApAggregatedPacket(PADAPTER, u8 enable);
+void rtw_btcoex_rx_ampdu_apply(PADAPTER);
 void rtw_btcoex_LPS_Enter(PADAPTER);
 void rtw_btcoex_LPS_Leave(PADAPTER);
 
 void rtw_btcoex_LPS_Enter(PADAPTER);
 void rtw_btcoex_LPS_Leave(PADAPTER);
 
index eb0e33ea10f1b11c2067532bb715766c7cd461ac..4e0d7a01c38b74097cf3a0533ce1566c9270b6b5 100755 (executable)
@@ -250,6 +250,13 @@ enum LPS_CTRL_TYPE
        LPS_CTRL_ENTER = 9,
 };
 
        LPS_CTRL_ENTER = 9,
 };
 
+enum STAKEY_TYPE
+{
+       GROUP_KEY               =0,
+       UNICAST_KEY             =1,
+       TDLS_KEY                =2,
+};
+
 enum RFINTFS {
        SWSI,
        HWSI,
 enum RFINTFS {
        SWSI,
        HWSI,
@@ -1007,7 +1014,7 @@ u8 rtw_startbss_cmd(_adapter  *padapter, int flags);
 extern u8 rtw_setphy_cmd(_adapter  *padapter, u8 modem, u8 ch);
 
 struct sta_info;
 extern u8 rtw_setphy_cmd(_adapter  *padapter, u8 modem, u8 ch);
 
 struct sta_info;
-extern u8 rtw_setstakey_cmd(_adapter  *padapter, struct sta_info *sta, u8 unicast_key, bool enqueue);
+extern u8 rtw_setstakey_cmd(_adapter  *padapter, struct sta_info *sta, u8 key_type, bool enqueue);
 extern u8 rtw_clearstakey_cmd(_adapter *padapter, struct sta_info *sta, u8 enqueue);
 
 extern u8 rtw_joinbss_cmd(_adapter  *padapter, struct wlan_network* pnetwork);
 extern u8 rtw_clearstakey_cmd(_adapter *padapter, struct sta_info *sta, u8 enqueue);
 
 extern u8 rtw_joinbss_cmd(_adapter  *padapter, struct wlan_network* pnetwork);
index 67edf7f0a6d0246d1c3e91ce96ef58e6b04650c8..bf8ba13257a1fc9e844bd0d7aead5cd71dfd2a15 100755 (executable)
@@ -338,10 +338,14 @@ void rf_reg_dump(void *sel, _adapter *adapter);
 
 bool rtw_fwdl_test_trigger_chksum_fail(void);
 bool rtw_fwdl_test_trigger_wintint_rdy_fail(void);
 
 bool rtw_fwdl_test_trigger_chksum_fail(void);
 bool rtw_fwdl_test_trigger_wintint_rdy_fail(void);
+bool rtw_del_rx_ampdu_test_trigger_no_tx_fail(void);
 
 u32 rtw_get_wait_hiq_empty_ms(void);
 void rtw_sink_rtp_seq_dbg( _adapter *adapter,_pkt *pkt);
 
 
 u32 rtw_get_wait_hiq_empty_ms(void);
 void rtw_sink_rtp_seq_dbg( _adapter *adapter,_pkt *pkt);
 
+struct sta_info;
+void sta_rx_reorder_ctl_dump(void *sel, struct sta_info *sta);
+
 #ifdef CONFIG_PROC_DEBUG
 ssize_t proc_set_write_reg(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
 int proc_get_read_reg(struct seq_file *m, void *v);
 #ifdef CONFIG_PROC_DEBUG
 ssize_t proc_set_write_reg(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
 int proc_get_read_reg(struct seq_file *m, void *v);
@@ -363,16 +367,22 @@ int proc_get_rf_info(struct seq_file *m, void *v);
 int proc_get_survey_info(struct seq_file *m, void *v);
 int proc_get_ap_info(struct seq_file *m, void *v);
 int proc_get_adapter_state(struct seq_file *m, void *v);
 int proc_get_survey_info(struct seq_file *m, void *v);
 int proc_get_ap_info(struct seq_file *m, void *v);
 int proc_get_adapter_state(struct seq_file *m, void *v);
+ssize_t proc_reset_trx_info(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
 int proc_get_trx_info(struct seq_file *m, void *v);
 int proc_get_rate_ctl(struct seq_file *m, void *v);
 int proc_get_wifi_spec(struct seq_file *m, void *v);
 ssize_t proc_set_rate_ctl(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
 int proc_get_trx_info(struct seq_file *m, void *v);
 int proc_get_rate_ctl(struct seq_file *m, void *v);
 int proc_get_wifi_spec(struct seq_file *m, void *v);
 ssize_t proc_set_rate_ctl(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
+#ifdef DBG_RX_COUNTER_DUMP
+int proc_get_rx_cnt_dump(struct seq_file *m, void *v);
+ssize_t proc_set_rx_cnt_dump(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);     
+#endif
 int proc_get_dis_pwt(struct seq_file *m, void *v);
 ssize_t proc_set_dis_pwt(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data); 
 
 int proc_get_suspend_resume_info(struct seq_file *m, void *v);
 
 ssize_t proc_set_fwdl_test_case(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
 int proc_get_dis_pwt(struct seq_file *m, void *v);
 ssize_t proc_set_dis_pwt(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data); 
 
 int proc_get_suspend_resume_info(struct seq_file *m, void *v);
 
 ssize_t proc_set_fwdl_test_case(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
+ssize_t proc_set_del_rx_ampdu_test_case(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
 ssize_t proc_set_wait_hiq_empty(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
 
 #ifdef CONFIG_AP_MODE
 ssize_t proc_set_wait_hiq_empty(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
 
 #ifdef CONFIG_AP_MODE
@@ -463,6 +473,17 @@ int proc_get_p2p_wowlan_info(struct seq_file *m, void *v);
 int proc_get_new_bcn_max(struct seq_file *m, void *v);
 ssize_t proc_set_new_bcn_max(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
 
 int proc_get_new_bcn_max(struct seq_file *m, void *v);
 ssize_t proc_set_new_bcn_max(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
 
+#ifdef CONFIG_POWER_SAVING
+int proc_get_ps_info(struct seq_file *m, void *v);
+#endif //CONFIG_POWER_SAVING
+
+#ifdef CONFIG_TDLS
+int proc_get_tdls_info(struct seq_file *m, void *v);
+#endif
+
+int proc_get_monitor(struct seq_file *m, void *v);
+ssize_t proc_set_monitor(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
+
 #endif /* CONFIG_PROC_DEBUG */
 
 #endif //__RTW_DEBUG_H__
 #endif /* CONFIG_PROC_DEBUG */
 
 #endif //__RTW_DEBUG_H__
index 7705adc9bd5267b6b2e2c61d21c0c8d26384a80f..2da2a67b348eaa0cbceabfdf44f0a2dc01f2cd99 100755 (executable)
@@ -27,8 +27,9 @@
 #define        HWSET_MAX_SIZE_128              128
 #define        HWSET_MAX_SIZE_256              256
 #define        HWSET_MAX_SIZE_512              512
 #define        HWSET_MAX_SIZE_128              128
 #define        HWSET_MAX_SIZE_256              256
 #define        HWSET_MAX_SIZE_512              512
+#define HWSET_MAX_SIZE_1024            1024
 
 
-#define        EEPROM_MAX_SIZE                 HWSET_MAX_SIZE_512
+#define        EEPROM_MAX_SIZE                 HWSET_MAX_SIZE_1024
 
 #define        CLOCK_RATE                                      50                      //100us         
 
 
 #define        CLOCK_RATE                                      50                      //100us         
 
 #define EUROPE                                         0x1 //temp, should be provided later    
 #define JAPAN                                          0x2 //temp, should be provided later
 
 #define EUROPE                                         0x1 //temp, should be provided later    
 #define JAPAN                                          0x2 //temp, should be provided later
 
-#ifdef CONFIG_SDIO_HCI
-#define eeprom_cis0_sz 17
-#define eeprom_cis1_sz 50
-#endif
-
 //
 // Customer ID, note that: 
 // This variable is initiailzed through EEPROM or registry, 
 //
 // Customer ID, note that: 
 // This variable is initiailzed through EEPROM or registry, 
@@ -108,35 +104,6 @@ typedef enum _RT_CUSTOMER_ID
        RT_CID_DNI_BUFFALO = 46,//add by page for NEC
 }RT_CUSTOMER_ID, *PRT_CUSTOMER_ID;
 
        RT_CID_DNI_BUFFALO = 46,//add by page for NEC
 }RT_CUSTOMER_ID, *PRT_CUSTOMER_ID;
 
-struct eeprom_priv 
-{    
-       u8              bautoload_fail_flag;
-       u8              bloadfile_fail_flag;
-       u8              bloadmac_fail_flag;
-       u8              EepromOrEfuse;
-
-       u8              mac_addr[6];    //PermanentAddress
-
-       u16             channel_plan;
-       u16             CustomerID;
-
-       u8              efuse_eeprom_data[EEPROM_MAX_SIZE]; //92C:256bytes, 88E:512bytes, we use union set (512bytes)
-       u8              adjuseVoltageVal;
-
-#ifdef CONFIG_RF_GAIN_OFFSET
-       u8              EEPROMRFGainOffset;
-       u8              EEPROMRFGainVal;
-#endif //CONFIG_RF_GAIN_OFFSET
-
-#ifdef CONFIG_SDIO_HCI
-       u8              sdio_setting;   
-       u32             ocr;
-       u8              cis0[eeprom_cis0_sz];
-       u8              cis1[eeprom_cis1_sz];   
-#endif
-};
-
-
 extern void eeprom_write16(_adapter *padapter, u16 reg, u16 data);
 extern u16 eeprom_read16(_adapter *padapter, u16 reg);
 extern void read_eeprom_content(_adapter *padapter);
 extern void eeprom_write16(_adapter *padapter, u16 reg, u16 data);
 extern u16 eeprom_read16(_adapter *padapter, u16 reg);
 extern void read_eeprom_content(_adapter *padapter);
@@ -147,8 +114,8 @@ extern void read_eeprom_content_by_attrib(_adapter *        padapter        );
 #ifdef PLATFORM_LINUX
 #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
 extern int isAdaptorInfoFileValid(void);
 #ifdef PLATFORM_LINUX
 #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
 extern int isAdaptorInfoFileValid(void);
-extern int storeAdaptorInfoFile(char *path, struct eeprom_priv * eeprom_priv);
-extern int retriveAdaptorInfoFile(char *path, struct eeprom_priv * eeprom_priv);
+extern int storeAdaptorInfoFile(char *path, u8 *efuse_data);
+extern int retriveAdaptorInfoFile(char *path, u8 *efuse_data);
 #endif //CONFIG_ADAPTOR_INFO_CACHING_FILE
 #endif //PLATFORM_LINUX
 
 #endif //CONFIG_ADAPTOR_INFO_CACHING_FILE
 #endif //PLATFORM_LINUX
 
index 9dbab56fa0ca474fc67ec25d481b17340d9df106..be32193383c878027a770d3f7b62276ff2c13634 100755 (executable)
@@ -59,6 +59,18 @@ enum _EFUSE_DEF_TYPE {
 
 #define                EFUSE_REPEAT_THRESHOLD_                 3
 
 
 #define                EFUSE_REPEAT_THRESHOLD_                 3
 
+#define IS_MASKED_MP(ic, txt, offset) (EFUSE_IsAddressMasked_MP_##ic##txt(offset))
+#define IS_MASKED_TC(ic, txt, offset) (EFUSE_IsAddressMasked_TC_##ic##txt(offset))
+#define GET_MASK_ARRAY_LEN_MP(ic, txt) (EFUSE_GetArrayLen_MP_##ic##txt())
+#define GET_MASK_ARRAY_LEN_TC(ic, txt) (EFUSE_GetArrayLen_TC_##ic##txt())
+#define GET_MASK_ARRAY_MP(ic, txt, offset) (EFUSE_GetMaskArray_MP_##ic##txt(offset))
+#define GET_MASK_ARRAY_TC(ic, txt, offset) (EFUSE_GetMaskArray_TC_##ic##txt(offset))
+
+
+#define IS_MASKED(ic, txt, offset) ( IS_MASKED_MP(ic,txt, offset) )
+#define GET_MASK_ARRAY_LEN(ic, txt) ( GET_MASK_ARRAY_LEN_MP(ic,txt) )
+#define GET_MASK_ARRAY(ic, txt, out) do { GET_MASK_ARRAY_MP(ic,txt, out);} while(0)
+
 //=============================================
 //     The following is for BT Efuse definition
 //=============================================
 //=============================================
 //     The following is for BT Efuse definition
 //=============================================
@@ -77,6 +89,21 @@ typedef struct PG_PKT_STRUCT_A{
        u8 word_cnts;
 }PGPKT_STRUCT,*PPGPKT_STRUCT;
 
        u8 word_cnts;
 }PGPKT_STRUCT,*PPGPKT_STRUCT;
 
+typedef enum
+{
+       ERR_SUCCESS = 0,
+       ERR_DRIVER_FAILURE,
+       ERR_IO_FAILURE,
+       ERR_WI_TIMEOUT,
+       ERR_WI_BUSY,
+       ERR_BAD_FORMAT,
+       ERR_INVALID_DATA,
+       ERR_NOT_ENOUGH_SPACE,
+       ERR_WRITE_PROTECT,
+       ERR_READ_BACK_FAIL,
+       ERR_OUT_OF_RANGE
+} ERROR_CODE;
+
 /*------------------------------Define structure----------------------------*/ 
 typedef struct _EFUSE_HAL{
        u8      fakeEfuseBank;
 /*------------------------------Define structure----------------------------*/ 
 typedef struct _EFUSE_HAL{
        u8      fakeEfuseBank;
@@ -84,7 +111,9 @@ typedef struct _EFUSE_HAL{
        u8      fakeEfuseContent[EFUSE_MAX_HW_SIZE];
        u8      fakeEfuseInitMap[EFUSE_MAX_MAP_LEN];
        u8      fakeEfuseModifiedMap[EFUSE_MAX_MAP_LEN];
        u8      fakeEfuseContent[EFUSE_MAX_HW_SIZE];
        u8      fakeEfuseInitMap[EFUSE_MAX_MAP_LEN];
        u8      fakeEfuseModifiedMap[EFUSE_MAX_MAP_LEN];
-
+       u32     EfuseUsedBytes;
+       u8      EfuseUsedPercentage;
+       
        u16     BTEfuseUsedBytes;
        u8      BTEfuseUsedPercentage;
        u8      BTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
        u16     BTEfuseUsedBytes;
        u8      BTEfuseUsedPercentage;
        u8      BTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
@@ -95,8 +124,32 @@ typedef struct _EFUSE_HAL{
        u8      fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
        u8      fakeBTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN];
        u8      fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN];
        u8      fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
        u8      fakeBTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN];
        u8      fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN];
+
+       // EFUSE Configuration, initialized in HAL_CmnInitPGData().
+       const u16  MaxSecNum_WiFi;
+       const u16  MaxSecNum_BT;        
+       const u16  WordUnit;    
+       const u16  PhysicalLen_WiFi;
+       const u16  PhysicalLen_BT;      
+       const u16  LogicalLen_WiFi;
+       const u16  LogicalLen_BT;       
+       const u16  BankSize;
+       const u16  TotalBankNum;
+       const u16  BankNum_WiFi;
+       const u16  BankNum_BT;  
+       const u16  OOBProtectBytes;
+       const u16  ProtectBytes;
+       const u16  BankAvailBytes;      
+       const u16  TotalAvailBytes_WiFi;
+       const u16  TotalAvailBytes_BT;  
+       const u16  HeaderRetry; 
+       const u16  DataRetry;   
+
+       ERROR_CODE        Status;
+       
 }EFUSE_HAL, *PEFUSE_HAL;
 
 }EFUSE_HAL, *PEFUSE_HAL;
 
+extern u8 maskfileBuffer[32];
 
 /*------------------------Export global variable----------------------------*/
 extern u8 fakeEfuseBank;
 
 /*------------------------Export global variable----------------------------*/
 extern u8 fakeEfuseBank;
@@ -119,6 +172,7 @@ extern u8 fakeBTEfuseModifiedMap[];
 u8     efuse_GetCurrentSize(PADAPTER padapter, u16 *size);
 u16    efuse_GetMaxSize(PADAPTER padapter);
 u8     rtw_efuse_access(PADAPTER padapter, u8 bRead, u16 start_addr, u16 cnts, u8 *data);
 u8     efuse_GetCurrentSize(PADAPTER padapter, u16 *size);
 u16    efuse_GetMaxSize(PADAPTER padapter);
 u8     rtw_efuse_access(PADAPTER padapter, u8 bRead, u16 start_addr, u16 cnts, u8 *data);
+u8     rtw_efuse_mask_map_read(PADAPTER padapter, u16 addr, u16 cnts, u8 *data);
 u8     rtw_efuse_map_read(PADAPTER padapter, u16 addr, u16 cnts, u8 *data);
 u8     rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data);
 u8     rtw_BT_efuse_map_read(PADAPTER padapter, u16 addr, u16 cnts, u8 *data);
 u8     rtw_efuse_map_read(PADAPTER padapter, u16 addr, u16 cnts, u8 *data);
 u8     rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data);
 u8     rtw_BT_efuse_map_read(PADAPTER padapter, u16 addr, u16 cnts, u8 *data);
@@ -143,6 +197,7 @@ void        EFUSE_ShadowMapUpdate(PADAPTER pAdapter, u8 efuseType, BOOLEAN bPseudoTest)
 void   EFUSE_ShadowRead(PADAPTER pAdapter, u8 Type, u16 Offset, u32 *Value);
 void Rtw_Hal_ReadMACAddrFromFile(PADAPTER padapter);
 u32 Rtw_Hal_readPGDataFromConfigFile(PADAPTER  padapter);
 void   EFUSE_ShadowRead(PADAPTER pAdapter, u8 Type, u16 Offset, u32 *Value);
 void Rtw_Hal_ReadMACAddrFromFile(PADAPTER padapter);
 u32 Rtw_Hal_readPGDataFromConfigFile(PADAPTER  padapter);
+u8 rtw_efuse_file_read(PADAPTER padapter,u8 *filepatch,u8 *buf, u32 len);
 
 #endif
 
 
 #endif
 
index da08376b2eb11b2fb9083ee91114ff26b48b2494..1b7184688dc494d1367cbfd225f4642bcf2d6572 100755 (executable)
@@ -70,7 +70,7 @@ u16 rtw_get_cur_max_rate(_adapter *adapter);
 int rtw_set_scan_mode(_adapter *adapter, RT_SCAN_TYPE scan_mode);
 int rtw_set_channel_plan(_adapter *adapter, u8 channel_plan);
 int rtw_set_country(_adapter *adapter, const char *country_code);
 int rtw_set_scan_mode(_adapter *adapter, RT_SCAN_TYPE scan_mode);
 int rtw_set_channel_plan(_adapter *adapter, u8 channel_plan);
 int rtw_set_country(_adapter *adapter, const char *country_code);
-int rtw_set_band(_adapter *adapter, enum _BAND band);
+int rtw_set_band(_adapter *adapter, u8 band);
 
 #endif
 
 
 #endif
 
index 1cf2ab1b20f42d09f00ebb64a7a438d965c0eabb..8afa435dc391a1086377253a970fef34c520e219 100755 (executable)
 //     Increase the scanning timeout because of increasing the SURVEY_TO value.
 
 #define        SCANNING_TIMEOUT        8000
 //     Increase the scanning timeout because of increasing the SURVEY_TO value.
 
 #define        SCANNING_TIMEOUT        8000
+#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
+#define                CONC_SCANNING_TIMEOUT_SINGLE_BAND 10000
+#define                CONC_SCANNING_TIMEOUT_DUAL_BAND 15000
+#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
 
 #ifdef PALTFORM_OS_WINCE
 #define        SCANQUEUE_LIFETIME 12000000 // unit:us
 
 #ifdef PALTFORM_OS_WINCE
 #define        SCANQUEUE_LIFETIME 12000000 // unit:us
@@ -60,6 +64,7 @@
 #define        WIFI_AUTOCONF                   0x00004000
 #define        WIFI_AUTOCONF_IND       0x00008000
 #endif
 #define        WIFI_AUTOCONF                   0x00004000
 #define        WIFI_AUTOCONF_IND       0x00008000
 #endif
+#define WIFI_MONITOR_STATE 0x80000000
 
 /*
 // ========== P2P Section Start ===============
 
 /*
 // ========== P2P Section Start ===============
@@ -101,15 +106,11 @@ typedef enum _RT_SCAN_TYPE
        SCAN_MIX,
 }RT_SCAN_TYPE, *PRT_SCAN_TYPE;
 
        SCAN_MIX,
 }RT_SCAN_TYPE, *PRT_SCAN_TYPE;
 
-enum  _BAND
-{
-       GHZ24_50 = 0,
-       GHZ_50,
-       GHZ_24,
-       GHZ_MAX,
-};
+#define WIFI_FREQUENCY_BAND_AUTO 0
+#define WIFI_FREQUENCY_BAND_5GHZ 1
+#define WIFI_FREQUENCY_BAND_2GHZ 2
 
 
-#define rtw_band_valid(band) ((band) >= GHZ24_50 && (band) < GHZ_MAX)
+#define rtw_band_valid(band) ((band) <= WIFI_FREQUENCY_BAND_2GHZ)
 
 enum DriverInterface {
        DRIVER_WEXT =  1,
 
 enum DriverInterface {
        DRIVER_WEXT =  1,
@@ -264,7 +265,7 @@ struct cfg80211_wifidirect_info{
        struct ieee80211_channel        remain_on_ch_channel;
        enum nl80211_channel_type       remain_on_ch_type;
        ATOMIC_T ro_ch_cookie_gen;
        struct ieee80211_channel        remain_on_ch_channel;
        enum nl80211_channel_type       remain_on_ch_type;
        ATOMIC_T ro_ch_cookie_gen;
-       u64                                             remain_on_ch_cookie;
+       u64 remain_on_ch_cookie;
        bool is_ro_ch;
        u32 last_ro_ch_time; /* this will be updated at the beginning and end of ro_ch */
 };
        bool is_ro_ch;
        u32 last_ro_ch_time; /* this will be updated at the beginning and end of ro_ch */
 };
@@ -400,22 +401,46 @@ struct tdls_ss_record{    //signal strength record
        u8              is_tdls_sta;    // _TRUE: direct link sta, _FALSE: else
 };
 
        u8              is_tdls_sta;    // _TRUE: direct link sta, _FALSE: else
 };
 
+struct tdls_temp_mgmt{
+       u8      initiator;      // 0: None, 1: we initiate, 2: peer initiate
+       u8      peer_addr[ETH_ALEN];
+};
+
+#ifdef CONFIG_TDLS_CH_SW
+struct tdls_ch_switch{
+       u32     ch_sw_state;
+       ATOMIC_T        chsw_on;
+       u8      addr[ETH_ALEN];
+       u8      off_ch_num;
+       u8      ch_offset;
+       u32     cur_time;
+       u8      delay_switch_back;
+       u8      dump_stack;
+};
+#endif
+
 struct tdls_info{
        u8                                      ap_prohibited;
 struct tdls_info{
        u8                                      ap_prohibited;
+       u8                                      ch_switch_prohibited;
        u8                                      link_established;
        u8                                      sta_cnt;
        u8                                      link_established;
        u8                                      sta_cnt;
-       u8                                      sta_maximum;    // 1:tdls sta is equal (NUM_STA-1), reach max direct link number; 0: else;
+       u8                                      sta_maximum;    /* 1:tdls sta is equal (NUM_STA-1), reach max direct link number; 0: else; */
        struct tdls_ss_record   ss_record;
        struct tdls_ss_record   ss_record;
+#ifdef CONFIG_TDLS_CH_SW       
+       struct tdls_ch_switch   chsw_info;
+#endif
+
        u8                                      ch_sensing;
        u8                                      cur_channel;
        u8                                      ch_sensing;
        u8                                      cur_channel;
-       u8                                      candidate_ch;
        u8                                      collect_pkt_num[MAX_CHANNEL_NUM];
        _lock                           cmd_lock;
        _lock                           hdl_lock;
        u8                                      watchdog_count;
        u8                                      collect_pkt_num[MAX_CHANNEL_NUM];
        _lock                           cmd_lock;
        _lock                           hdl_lock;
        u8                                      watchdog_count;
-       u8                                      dev_discovered;         //WFD_TDLS: for sigma test
+       u8                                      dev_discovered;         /* WFD_TDLS: for sigma test */
        u8                                      tdls_enable;
        u8                                      tdls_enable;
-       u8                                      external_setup; // _TRUE: setup is handled by wpa_supplicant
+
+       /* Let wpa_supplicant to setup*/
+       u8                                      driver_setup;
 #ifdef CONFIG_WFD
        struct wifi_display_info                *wfd_info;
 #endif         
 #ifdef CONFIG_WFD
        struct wifi_display_info                *wfd_info;
 #endif         
@@ -428,7 +453,6 @@ struct tdls_txmgmt {
        u16 status_code;
        u8 *buf;
        size_t len;
        u16 status_code;
        u8 *buf;
        size_t len;
-       u8 external_support;
 };
 
 /* used for mlme_priv.roam_flags */
 };
 
 /* used for mlme_priv.roam_flags */
@@ -678,6 +702,12 @@ struct mlme_priv {
 //     u32     timeBcnInfoChkStart;
 };
 
 //     u32     timeBcnInfoChkStart;
 };
 
+#define mlme_set_scan_to_timer(mlme, ms) \
+       do { \
+               /* DBG_871X("%s set_scan_to_timer(%p, %d)\n", __FUNCTION__, (mlme), (ms)); */ \
+               _set_timer(&(mlme)->scan_to_timer, (ms)); \
+       } while(0)
+
 #define rtw_mlme_set_auto_scan_int(adapter, ms) \
        do { \
                adapter->mlmepriv.auto_scan_int_ms = ms; \
 #define rtw_mlme_set_auto_scan_int(adapter, ms) \
        do { \
                adapter->mlmepriv.auto_scan_int_ms = ms; \
index f5ba9b4414b25883c0b70541db192975e1fd59a5..f8fd112ca29055c0f1bffb8aab144c3a88f84cb6 100755 (executable)
 
 #define DYNAMIC_FUNC_DISABLE           (0x0)
 
 
 #define DYNAMIC_FUNC_DISABLE           (0x0)
 
-// ====== ODM_ABILITY_E ========
-// BB ODM section BIT 0-15
-#define DYNAMIC_BB_DIG                         BIT0 //ODM_BB_DIG
-#define DYNAMIC_BB_RA_MASK                     BIT1 //ODM_BB_RA_MASK
-#define DYNAMIC_BB_DYNAMIC_TXPWR       BIT2 //ODM_BB_DYNAMIC_TXPWR
-#define DYNAMIC_BB_BB_FA_CNT           BIT3 //ODM_BB_FA_CNT
-#define DYNAMIC_BB_RSSI_MONITOR                BIT4 //ODM_BB_RSSI_MONITOR
-#define DYNAMIC_BB_CCK_PD                      BIT5 //ODM_BB_CCK_PD
-#define DYNAMIC_BB_ANT_DIV                     BIT6 //ODM_BB_ANT_DIV
-#define DYNAMIC_BB_PWR_SAVE                    BIT7 //ODM_BB_PWR_SAVE
-#define DYNAMIC_BB_PWR_TRAIN           BIT8 //ODM_BB_PWR_TRAIN
-#define DYNAMIC_BB_RATE_ADAPTIVE       BIT9 //ODM_BB_RATE_ADAPTIVE
-#define DYNAMIC_BB_PATH_DIV                    BIT10//ODM_BB_PATH_DIV
-#define DYNAMIC_BB_PSD                         BIT11//ODM_BB_PSD
-#define DYNAMIC_BB_RXHP                                BIT12//ODM_BB_RXHP
-#define DYNAMIC_BB_ADAPTIVITY          BIT13//ODM_BB_ADAPTIVITY
-#define DYNAMIC_BB_DYNAMIC_ATC         BIT14//ODM_BB_DYNAMIC_ATC
-
-// MAC DM section BIT 16-23
-#define DYNAMIC_MAC_EDCA_TURBO         BIT16//ODM_MAC_EDCA_TURBO
-#define DYNAMIC_MAC_EARLY_MODE         BIT17//ODM_MAC_EARLY_MODE
-
-// RF ODM section BIT 24-31
-#define DYNAMIC_RF_TX_PWR_TRACK                BIT24//ODM_RF_TX_PWR_TRACK
-#define DYNAMIC_RF_RX_GAIN_TRACK       BIT25//ODM_RF_RX_GAIN_TRACK
-#define DYNAMIC_RF_CALIBRATION         BIT26//ODM_RF_CALIBRATION
-
-#define DYNAMIC_ALL_FUNC_ENABLE                0xFFFFFFF
-
 #define _HW_STATE_NOLINK_              0x00
 #define _HW_STATE_ADHOC_               0x01
 #define _HW_STATE_STATION_     0x02
 #define _HW_STATE_AP_                  0x03
 #define _HW_STATE_NOLINK_              0x00
 #define _HW_STATE_ADHOC_               0x01
 #define _HW_STATE_STATION_     0x02
 #define _HW_STATE_AP_                  0x03
+#define _HW_STATE_MONITOR_ 0x04
 
 
 #define                _1M_RATE_       0
 
 
 #define                _1M_RATE_       0
@@ -378,30 +350,15 @@ struct    ss_res
 #define        WIFI_FW_LINKING_STATE           (WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE | WIFI_FW_AUTH_SUCCESS |WIFI_FW_ASSOC_STATE)
 
 #ifdef CONFIG_TDLS
 #define        WIFI_FW_LINKING_STATE           (WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE | WIFI_FW_AUTH_SUCCESS |WIFI_FW_ASSOC_STATE)
 
 #ifdef CONFIG_TDLS
-// 1: Write RCR DATA BIT
-// 2: Issue peer traffic indication
-// 3: Go back to the channel linked with AP, terminating channel switch procedure
-// 4: Init channel sensing, receive all data and mgnt frame
-// 5: Channel sensing and report candidate channel
-// 6: First time set channel to off channel
-// 7: Go back tp the channel linked with AP when set base channel as target channel
-// 8: Set channel back to base channel
-// 9: Set channel back to off channel
-// 10: Restore RCR DATA BIT
-// 11: Free TDLS sta
 enum TDLS_option
 {
        TDLS_ESTABLISHED        =       1,
 enum TDLS_option
 {
        TDLS_ESTABLISHED        =       1,
-       TDLS_SD_PTI             =       2,
-       TDLS_CS_OFF             =       3,
-       TDLS_INIT_CH_SEN        =       4,
-       TDLS_DONE_CH_SEN        =       5,
-       TDLS_OFF_CH             =       6,
-       TDLS_BASE_CH            =       7,
-       TDLS_P_OFF_CH           =       8,
-       TDLS_P_BASE_CH  =       9,
-       TDLS_RS_RCR             =       10,
-       TDLS_TEAR_STA           =       11,
+       TDLS_ISSUE_PTI                          =       2,
+       TDLS_CH_SW_RESP                 =       3,
+       TDLS_CH_SW                              =       4,
+       TDLS_CH_SW_BACK                 =       5,
+       TDLS_RS_RCR                             =       6,
+       TDLS_TEAR_STA                           =       7,
        maxTDLS,
 };
 
        maxTDLS,
 };
 
@@ -618,6 +575,8 @@ struct mlme_ext_priv
        
 };
 
        
 };
 
+#define mlmeext_msr(mlmeext) ((mlmeext)->mlmext_info.state & 0x03)
+
 void init_mlme_default_rate_set(_adapter* padapter);
 int init_mlme_ext_priv(_adapter* padapter);
 int init_hw_mlme_ext(_adapter *padapter);
 void init_mlme_default_rate_set(_adapter* padapter);
 int init_mlme_ext_priv(_adapter* padapter);
 int init_hw_mlme_ext(_adapter *padapter);
@@ -726,7 +685,6 @@ void update_beacon_info(_adapter *padapter, u8 *pframe, uint len, struct sta_inf
 #ifdef CONFIG_DFS
 void process_csa_ie(_adapter *padapter, u8 *pframe, uint len);
 #endif //CONFIG_DFS
 #ifdef CONFIG_DFS
 void process_csa_ie(_adapter *padapter, u8 *pframe, uint len);
 #endif //CONFIG_DFS
-void update_IOT_info(_adapter *padapter);
 void update_capinfo(PADAPTER Adapter, u16 updateCap);
 void update_wireless_mode(_adapter * padapter);
 void update_tx_basic_rate(_adapter *padapter, u8 modulation);
 void update_capinfo(PADAPTER Adapter, u16 updateCap);
 void update_wireless_mode(_adapter * padapter);
 void update_tx_basic_rate(_adapter *padapter, u8 modulation);
@@ -811,12 +769,20 @@ int issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid, int try_c
 int issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason);
 int issue_deauth_ex(_adapter *padapter, u8 *da, unsigned short reason, int try_cnt, int wait_ms);
 void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_offset);
 int issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason);
 int issue_deauth_ex(_adapter *padapter, u8 *da, unsigned short reason, int try_cnt, int wait_ms);
 void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_offset);
-void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status);
+void issue_addba_req(_adapter *adapter, unsigned char *ra, u8 tid);
+void issue_addba_rsp(_adapter *adapter, unsigned char *ra, u8 tid, u16 status, u8 size);
+void issue_del_ba(_adapter *adapter, unsigned char *ra, u8 tid, u16 reason, u8 initiator);
+int issue_del_ba_ex(_adapter *adapter, unsigned char *ra, u8 tid, u16 reason, u8 initiator, int try_cnt, int wait_ms);
+
 #ifdef CONFIG_IEEE80211W
 void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid);
 #endif //CONFIG_IEEE80211W
 int issue_action_SM_PS(_adapter *padapter ,  unsigned char *raddr , u8 NewMimoPsMode);
 int issue_action_SM_PS_wait_ack(_adapter *padapter, unsigned char *raddr, u8 NewMimoPsMode, int try_cnt, int wait_ms);
 #ifdef CONFIG_IEEE80211W
 void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid);
 #endif //CONFIG_IEEE80211W
 int issue_action_SM_PS(_adapter *padapter ,  unsigned char *raddr , u8 NewMimoPsMode);
 int issue_action_SM_PS_wait_ack(_adapter *padapter, unsigned char *raddr, u8 NewMimoPsMode, int try_cnt, int wait_ms);
+
+unsigned int send_delba_sta_tid(_adapter *adapter, u8 initiator, struct sta_info *sta, u8 tid, u8 force);
+unsigned int send_delba_sta_tid_wait_ack(_adapter *adapter, u8 initiator, struct sta_info *sta, u8 tid, u8 force);
+
 unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr);
 unsigned int send_beacon(_adapter *padapter);
 
 unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr);
 unsigned int send_beacon(_adapter *padapter);
 
@@ -841,6 +807,22 @@ unsigned int OnAction(_adapter *padapter, union recv_frame *precv_frame);
 unsigned int on_action_spct(_adapter *padapter, union recv_frame *precv_frame);
 unsigned int OnAction_qos(_adapter *padapter, union recv_frame *precv_frame);
 unsigned int OnAction_dls(_adapter *padapter, union recv_frame *precv_frame);
 unsigned int on_action_spct(_adapter *padapter, union recv_frame *precv_frame);
 unsigned int OnAction_qos(_adapter *padapter, union recv_frame *precv_frame);
 unsigned int OnAction_dls(_adapter *padapter, union recv_frame *precv_frame);
+
+#define RX_AMPDU_ACCEPT_INVALID 0xFF
+#define RX_AMPDU_SIZE_INVALID 0xFF
+
+enum rx_ampdu_reason {
+       RX_AMPDU_DRV_FIXED = 1,
+       RX_AMPDU_BTCOEX = 2, /* not used, because BTCOEX has its own variable management */
+};
+u8 rtw_rx_ampdu_size(_adapter *adapter);
+bool rtw_rx_ampdu_is_accept(_adapter *adapter);
+bool rtw_rx_ampdu_set_size(_adapter *adapter, u8 size, u8 reason);
+bool rtw_rx_ampdu_set_accept(_adapter *adapter, u8 accept, u8 reason);
+u8 rx_ampdu_apply_sta_tid(_adapter *adapter, struct sta_info *sta, u8 tid, u8 accept, u8 size);
+u8 rx_ampdu_apply_sta(_adapter *adapter, struct sta_info *sta, u8 accept, u8 size);
+u16 rtw_rx_ampdu_apply(_adapter *adapter);
+
 unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame);
 unsigned int on_action_public(_adapter *padapter, union recv_frame *precv_frame);
 unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame);
 unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame);
 unsigned int on_action_public(_adapter *padapter, union recv_frame *precv_frame);
 unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame);
@@ -903,21 +885,6 @@ extern u8 traffic_status_watchdog(_adapter *padapter, u8 from_timer);
 void concurrent_chk_joinbss_done(_adapter *padapter, int join_res);
 #endif //CONFIG_CONCURRENT_MODE
 
 void concurrent_chk_joinbss_done(_adapter *padapter, int join_res);
 #endif //CONFIG_CONCURRENT_MODE
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-void   dc_SelectChannel(_adapter *padapter, unsigned char channel);
-void   dc_SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset);
-void   dc_set_channel_bwmode_disconnect(_adapter *padapter);
-u8     dc_handle_join_request(_adapter *padapter, u8 *ch, u8 *bw, u8 *offset);
-void   dc_handle_join_done(_adapter *padapter, u8 join_res);
-sint   dc_check_fwstate(_adapter *padapter, sint fw_state);
-u8     dc_handle_site_survey(_adapter *padapter);
-void   dc_report_survey_event(_adapter *padapter, union recv_frame *precv_frame);
-void   dc_set_channel_bwmode_survey_done(_adapter *padapter);
-void   dc_set_ap_channel_bandwidth(_adapter *padapter, u8 channel, u8 channel_offset, u8 bwmode);
-void   dc_resume_xmit(_adapter *padapter);
-u8     dc_check_xmit(_adapter *padapter);
-#endif
-
 int rtw_chk_start_clnt_join(_adapter *padapter, u8 *ch, u8 *bw, u8 *offset);
 int rtw_get_ch_setting_union(_adapter *adapter, u8 *ch, u8 *bw, u8 *offset);
 
 int rtw_chk_start_clnt_join(_adapter *padapter, u8 *ch, u8 *bw, u8 *offset);
 int rtw_get_ch_setting_union(_adapter *adapter, u8 *ch, u8 *bw, u8 *offset);
 
@@ -1134,7 +1101,7 @@ static struct fwevent wlanevents[] =
 
 };
 
 
 };
 
-#endif//_RTL8192C_CMD_C_
+#endif//_RTW_MLME_EXT_C_
 
 #endif
 
 
 #endif
 
index e5f11415a4118868b2207d37bfe65da565efe768..b788c6a2e8f6a8073a7b7e63ecf132bf00f831ae 100755 (executable)
@@ -137,8 +137,6 @@ struct mp_tx
        _thread_hdl_ PktTxThread;
 };
 
        _thread_hdl_ PktTxThread;
 };
 
-#if defined(CONFIG_RTL8192C) || defined(CONFIG_RTL8192D) || defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8188E) || defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) ||defined(CONFIG_RTL8192E) || defined(CONFIG_RTL8723B)
-
 #define MP_MAX_LINES           1000
 #define MP_MAX_LINES_BYTES     256
 #define u1Byte u8
 #define MP_MAX_LINES           1000
 #define MP_MAX_LINES_BYTES     256
 #define u1Byte u8
@@ -231,7 +229,7 @@ typedef struct _MPT_CONTEXT
        // Register value kept for Single Carrier Tx test.
        u8                      btMpOfdmTxPower;
        // For MP Tx Power index
        // Register value kept for Single Carrier Tx test.
        u8                      btMpOfdmTxPower;
        // For MP Tx Power index
-       u8                      TxPwrLevel[2];  // rf-A, rf-B
+       u8                      TxPwrLevel[4];  /* rf-A, rf-B*/
        u32                     RegTxPwrLimit;
        // Content of RCR Regsiter for Mass Production Test.
        ULONG                   MptRCR;
        u32                     RegTxPwrLimit;
        // Content of RCR Regsiter for Mass Production Test.
        ULONG                   MptRCR;
@@ -281,23 +279,13 @@ typedef struct _MPT_CONTEXT
     u1Byte          mptOutBuf[100];
     
 }MPT_CONTEXT, *PMPT_CONTEXT;
     u1Byte          mptOutBuf[100];
     
 }MPT_CONTEXT, *PMPT_CONTEXT;
-#endif
 //#endif
 
 /* E-Fuse */
 //#endif
 
 /* E-Fuse */
-#ifdef CONFIG_RTL8192D
-#define EFUSE_MAP_SIZE         256
-#endif
-#ifdef CONFIG_RTL8192C
-#define EFUSE_MAP_SIZE         128
-#endif
-#ifdef CONFIG_RTL8723A
-#define EFUSE_MAP_SIZE         256
-#endif
 #ifdef CONFIG_RTL8188E
 #define EFUSE_MAP_SIZE         512
 #endif
 #ifdef CONFIG_RTL8188E
 #define EFUSE_MAP_SIZE         512
 #endif
-#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
+#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8814A)
 #define EFUSE_MAP_SIZE         512
 #endif
 #ifdef CONFIG_RTL8192E
 #define EFUSE_MAP_SIZE         512
 #endif
 #ifdef CONFIG_RTL8192E
@@ -306,8 +294,11 @@ typedef struct _MPT_CONTEXT
 #ifdef CONFIG_RTL8723B
 #define EFUSE_MAP_SIZE         512
 #endif
 #ifdef CONFIG_RTL8723B
 #define EFUSE_MAP_SIZE         512
 #endif
+#ifdef CONFIG_RTL8814A
+#define EFUSE_MAP_SIZE         512
+#endif
 
 
-#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
+#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8814A)
 #define EFUSE_MAX_SIZE         1024
 #elif defined(CONFIG_RTL8188E)
 #define EFUSE_MAX_SIZE         256
 #define EFUSE_MAX_SIZE         1024
 #elif defined(CONFIG_RTL8188E)
 #define EFUSE_MAX_SIZE         256
@@ -349,6 +340,9 @@ enum {
        MP_DISABLE_BT_COEXIST,
        MP_PwrCtlDM,
        MP_GETVER,
        MP_DISABLE_BT_COEXIST,
        MP_PwrCtlDM,
        MP_GETVER,
+       MP_MON,
+       EFUSE_MASK,
+       EFUSE_FILE,
 #ifdef CONFIG_WOWLAN
        MP_WOW_ENABLE,
 #endif
 #ifdef CONFIG_WOWLAN
        MP_WOW_ENABLE,
 #endif
@@ -393,6 +387,8 @@ struct mp_priv
        u8 prime_channel_offset;
        u8 txpoweridx;
        u8 txpoweridx_b;
        u8 prime_channel_offset;
        u8 txpoweridx;
        u8 txpoweridx_b;
+       u8 txpoweridx_c;
+       u8 txpoweridx_d;
        u8 rateidx;
        u32 preamble;
 //     u8 modem;
        u8 rateidx;
        u32 preamble;
 //     u8 modem;
@@ -445,7 +441,7 @@ struct mp_priv
        u32 free_mp_xmitframe_cnt;
        BOOLEAN bSetRxBssid;
        BOOLEAN bTxBufCkFail;
        u32 free_mp_xmitframe_cnt;
        BOOLEAN bSetRxBssid;
        BOOLEAN bTxBufCkFail;
-       
+       BOOLEAN bRTWSmbCfg;
        MPT_CONTEXT MptCtx;
 
        u8              *TXradomBuffer;
        MPT_CONTEXT MptCtx;
 
        u8              *TXradomBuffer;
@@ -702,16 +698,14 @@ typedef enum _ENCRY_CTRL_STATE_ {
 typedef enum   _MPT_TXPWR_DEF{
        MPT_CCK,
        MPT_OFDM, // L and HT OFDM
 typedef enum   _MPT_TXPWR_DEF{
        MPT_CCK,
        MPT_OFDM, // L and HT OFDM
-       MPT_VHT_OFDM
+       MPT_OFDM_AND_HT,
+       MPT_HT,
+       MPT_VHT
 }MPT_TXPWR_DEF;
 
 #ifdef CONFIG_RF_GAIN_OFFSET
 
 }MPT_TXPWR_DEF;
 
 #ifdef CONFIG_RF_GAIN_OFFSET
 
-#if defined(CONFIG_RTL8723A)
-       #define         REG_RF_BB_GAIN_OFFSET_CCK       0x0d
-       #define         REG_RF_BB_GAIN_OFFSET_OFDM      0x0e
-       #define         RF_GAIN_OFFSET_MASK     0xfffff
-#elif defined(CONFIG_RTL8723B)
+#if defined(CONFIG_RTL8723B)
        #define         REG_RF_BB_GAIN_OFFSET   0x7f
        #define         RF_GAIN_OFFSET_MASK     0xfffff
 #elif defined(CONFIG_RTL8188E)
        #define         REG_RF_BB_GAIN_OFFSET   0x7f
        #define         RF_GAIN_OFFSET_MASK     0xfffff
 #elif defined(CONFIG_RTL8188E)
@@ -720,7 +714,7 @@ typedef enum        _MPT_TXPWR_DEF{
 #else
        #define         REG_RF_BB_GAIN_OFFSET   0x55
        #define         RF_GAIN_OFFSET_MASK     0xfffff
 #else
        #define         REG_RF_BB_GAIN_OFFSET   0x55
        #define         RF_GAIN_OFFSET_MASK     0xfffff
-#endif //CONFIG_RTL8723A
+#endif //CONFIG_RTL8723B
 
 #endif //CONFIG_RF_GAIN_OFFSET
 
 
 #endif //CONFIG_RF_GAIN_OFFSET
 
@@ -758,73 +752,74 @@ extern void write_bbreg(_adapter *padapter, u32 addr, u32 bitmask, u32 val);
 extern u32 read_rfreg(PADAPTER padapter, u8 rfpath, u32 addr);
 extern void write_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 val);
 
 extern u32 read_rfreg(PADAPTER padapter, u8 rfpath, u32 addr);
 extern void write_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 val);
 
-extern void    SetChannel(PADAPTER pAdapter);
-extern void    SetBandwidth(PADAPTER pAdapter);
-extern int SetTxPower(PADAPTER pAdapter);
-extern void    SetAntennaPathPower(PADAPTER pAdapter);
+void   SetChannel(PADAPTER pAdapter);
+void   SetBandwidth(PADAPTER pAdapter);
+int SetTxPower(PADAPTER pAdapter);
+void   SetAntennaPathPower(PADAPTER pAdapter);
 //extern void  SetTxAGCOffset(PADAPTER pAdapter, u32 ulTxAGCOffset);
 //extern void  SetTxAGCOffset(PADAPTER pAdapter, u32 ulTxAGCOffset);
-extern void    SetDataRate(PADAPTER pAdapter);
+void   SetDataRate(PADAPTER pAdapter);
 
 
-extern void    SetAntenna(PADAPTER pAdapter);
+void   SetAntenna(PADAPTER pAdapter);
 
 //extern void  SetCrystalCap(PADAPTER pAdapter);
 
 
 //extern void  SetCrystalCap(PADAPTER pAdapter);
 
-extern s32     SetThermalMeter(PADAPTER pAdapter, u8 target_ther);
-extern void    GetThermalMeter(PADAPTER pAdapter, u8 *value);
-
-extern void    SetContinuousTx(PADAPTER pAdapter, u8 bStart);
-extern void    SetSingleCarrierTx(PADAPTER pAdapter, u8 bStart);
-extern void    SetSingleToneTx(PADAPTER pAdapter, u8 bStart);
-extern void    SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart);
-extern void PhySetTxPowerLevel(PADAPTER pAdapter);
-
-extern void    fill_txdesc_for_mp(PADAPTER padapter, u8 *ptxdesc);
-extern void    SetPacketTx(PADAPTER padapter);
-extern void    SetPacketRx(PADAPTER pAdapter, u8 bStartRx);
-
-extern void    ResetPhyRxPktCount(PADAPTER pAdapter);
-extern u32     GetPhyRxPktReceived(PADAPTER pAdapter);
-extern u32     GetPhyRxPktCRC32Error(PADAPTER pAdapter);
-
-extern s32     SetPowerTracking(PADAPTER padapter, u8 enable);
-extern void    GetPowerTracking(PADAPTER padapter, u8 *enable);
-
-extern u32     mp_query_psd(PADAPTER pAdapter, u8 *data);
-
-
-extern void Hal_SetAntenna(PADAPTER pAdapter);
-extern void Hal_SetBandwidth(PADAPTER pAdapter);
-
-extern void Hal_SetTxPower(PADAPTER pAdapter);
-extern void Hal_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart);
-extern void Hal_SetSingleToneTx ( PADAPTER pAdapter , u8 bStart );
-extern void Hal_SetSingleCarrierTx (PADAPTER pAdapter, u8 bStart);
-extern void Hal_SetContinuousTx (PADAPTER pAdapter, u8 bStart);
-extern void Hal_SetBandwidth(PADAPTER pAdapter);
-
-extern void Hal_SetDataRate(PADAPTER pAdapter);
-extern void Hal_SetChannel(PADAPTER pAdapter);
-extern void Hal_SetAntennaPathPower(PADAPTER pAdapter);
-extern s32 Hal_SetThermalMeter(PADAPTER pAdapter, u8 target_ther);
-extern s32 Hal_SetPowerTracking(PADAPTER padapter, u8 enable);
-extern void Hal_GetPowerTracking(PADAPTER padapter, u8 * enable);
-extern void Hal_GetThermalMeter(PADAPTER pAdapter, u8 *value);
-extern void Hal_mpt_SwitchRfSetting(PADAPTER pAdapter);
-extern void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14);
-extern void Hal_MPT_CCKTxPowerAdjustbyIndex(PADAPTER pAdapter, BOOLEAN beven);
-extern void Hal_SetCCKTxPower(PADAPTER pAdapter, u8 * TxPower);
-extern void Hal_SetOFDMTxPower(PADAPTER pAdapter, u8 * TxPower);
-extern void Hal_TriggerRFThermalMeter(PADAPTER pAdapter);
-extern u8 Hal_ReadRFThermalMeter(PADAPTER pAdapter);
-extern void Hal_SetCCKContinuousTx(PADAPTER pAdapter, u8 bStart);
-extern void Hal_SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart);
-extern void Hal_ProSetCrystalCap (PADAPTER pAdapter , u32 CrystalCapVal);
+s32    SetThermalMeter(PADAPTER pAdapter, u8 target_ther);
+void   GetThermalMeter(PADAPTER pAdapter, u8 *value);
+
+void   SetContinuousTx(PADAPTER pAdapter, u8 bStart);
+void   SetSingleCarrierTx(PADAPTER pAdapter, u8 bStart);
+void   SetSingleToneTx(PADAPTER pAdapter, u8 bStart);
+void   SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart);
+void PhySetTxPowerLevel(PADAPTER pAdapter);
+
+void   fill_txdesc_for_mp(PADAPTER padapter, u8 *ptxdesc);
+void   SetPacketTx(PADAPTER padapter);
+void   SetPacketRx(PADAPTER pAdapter, u8 bStartRx, u8 bAB);
+
+void   ResetPhyRxPktCount(PADAPTER pAdapter);
+u32    GetPhyRxPktReceived(PADAPTER pAdapter);
+u32    GetPhyRxPktCRC32Error(PADAPTER pAdapter);
+
+s32    SetPowerTracking(PADAPTER padapter, u8 enable);
+void   GetPowerTracking(PADAPTER padapter, u8 *enable);
+
+u32    mp_query_psd(PADAPTER pAdapter, u8 *data);
+
+
+void Hal_SetAntenna(PADAPTER pAdapter);
+void Hal_SetBandwidth(PADAPTER pAdapter);
+
+void Hal_SetTxPower(PADAPTER pAdapter);
+void Hal_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart);
+void Hal_SetSingleToneTx(PADAPTER pAdapter, u8 bStart);
+void Hal_SetSingleCarrierTx(PADAPTER pAdapter, u8 bStart);
+void Hal_SetContinuousTx(PADAPTER pAdapter, u8 bStart);
+void Hal_SetBandwidth(PADAPTER pAdapter);
+
+void Hal_SetDataRate(PADAPTER pAdapter);
+void Hal_SetChannel(PADAPTER pAdapter);
+void Hal_SetAntennaPathPower(PADAPTER pAdapter);
+s32 Hal_SetThermalMeter(PADAPTER pAdapter, u8 target_ther);
+s32 Hal_SetPowerTracking(PADAPTER padapter, u8 enable);
+void Hal_GetPowerTracking(PADAPTER padapter, u8 *enable);
+void Hal_GetThermalMeter(PADAPTER pAdapter, u8 *value);
+void Hal_mpt_SwitchRfSetting(PADAPTER pAdapter);
+void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14);
+void Hal_MPT_CCKTxPowerAdjustbyIndex(PADAPTER pAdapter, BOOLEAN beven);
+void Hal_SetCCKTxPower(PADAPTER pAdapter, u8 *TxPower);
+void Hal_SetOFDMTxPower(PADAPTER pAdapter, u8 *TxPower);
+void Hal_TriggerRFThermalMeter(PADAPTER pAdapter);
+u8 Hal_ReadRFThermalMeter(PADAPTER pAdapter);
+void Hal_SetCCKContinuousTx(PADAPTER pAdapter, u8 bStart);
+void Hal_SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart);
+void Hal_ProSetCrystalCap(PADAPTER pAdapter , u32 CrystalCapVal);
 //extern void _rtw_mp_xmit_priv(struct xmit_priv *pxmitpriv);
 //extern void _rtw_mp_xmit_priv(struct xmit_priv *pxmitpriv);
-extern void MP_PHY_SetRFPathSwitch(PADAPTER pAdapter ,BOOLEAN bMain);
-extern ULONG mpt_ProQueryCalTxPower(PADAPTER   pAdapter,u8 RfPath);
-extern void MPT_PwrCtlDM(PADAPTER padapter, u32 bstart);
-extern u8 MptToMgntRate(u32    MptRateIdx);
-extern u8 rtw_mpRateParseFunc(PADAPTER pAdapter, u8 *targetStr);
+void MP_PHY_SetRFPathSwitch(PADAPTER pAdapter , BOOLEAN bMain);
+ULONG mpt_ProQueryCalTxPower(PADAPTER  pAdapter, u8 RfPath);
+void MPT_PwrCtlDM(PADAPTER padapter, u32 bstart);
+u8 MptToMgntRate(u32   MptRateIdx);
+u8 rtw_mpRateParseFunc(PADAPTER pAdapter, u8 *targetStr);
+u32 mp_join(PADAPTER padapter, u8 mode);
 
 #endif //_RTW_MP_H_
 
 
 #endif //_RTW_MP_H_
 
index a1d81ac4c9237dac18cad92418cadfa027433b68..f7ef82460f5f236227dd7ba7aa65ca39483b5007 100755 (executable)
@@ -36,8 +36,7 @@ void rtw_odm_ability_set(_adapter *adapter, u32 ability);
 
 bool rtw_odm_adaptivity_needed(_adapter *adapter);
 void rtw_odm_adaptivity_parm_msg(void *sel,_adapter *adapter);
 
 bool rtw_odm_adaptivity_needed(_adapter *adapter);
 void rtw_odm_adaptivity_parm_msg(void *sel,_adapter *adapter);
-void rtw_odm_adaptivity_parm_set(_adapter *adapter, s8 TH_L2H_ini, s8 TH_EDCCA_HL_diff,
-       s8 IGI_Base, bool ForceEDCCA, u8 AdapEn_RSSI, u8 IGI_LowerBound);
+void rtw_odm_adaptivity_parm_set(_adapter *adapter, s8 TH_L2H_ini, s8 TH_EDCCA_HL_diff);
 void rtw_odm_get_perpkt_rssi(void *sel, _adapter *adapter);
 void rtw_odm_acquirespinlock(_adapter *adapter,        RT_SPINLOCK_TYPE type);
 void rtw_odm_releasespinlock(_adapter *adapter,        RT_SPINLOCK_TYPE type);
 void rtw_odm_get_perpkt_rssi(void *sel, _adapter *adapter);
 void rtw_odm_acquirespinlock(_adapter *adapter,        RT_SPINLOCK_TYPE type);
 void rtw_odm_releasespinlock(_adapter *adapter,        RT_SPINLOCK_TYPE type);
index d43ad24f37ed4dff0c3f116b54f4fb25011cc27b..2425cb2b1ea1e1e7baf98e205e9a6b04941b30a2 100755 (executable)
@@ -51,6 +51,7 @@ u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe
 u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pframe, uint len );
 u8 process_p2p_group_negotation_confirm( struct wifidirect_info *pwdinfo, u8 *pframe, uint len );
 u8 process_p2p_presence_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint len);
 u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pframe, uint len );
 u8 process_p2p_group_negotation_confirm( struct wifidirect_info *pwdinfo, u8 *pframe, uint len );
 u8 process_p2p_presence_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint len);
+int process_p2p_cross_connect_ie(PADAPTER padapter, u8 *IEs, u32 IELength);
 
 void p2p_protocol_wk_hdl(_adapter *padapter, int intCmdType);
 
 
 void p2p_protocol_wk_hdl(_adapter *padapter, int intCmdType);
 
index 0eb89fa3bd8403ad7144de5180d359a933451b0b..4fceaee2545d95b7c923265bfac365ca4e2b7c59 100755 (executable)
@@ -282,6 +282,8 @@ struct pwrctrl_priv
 
        uint    ips_enter_cnts;
        uint    ips_leave_cnts;
 
        uint    ips_enter_cnts;
        uint    ips_leave_cnts;
+       uint    lps_enter_cnts;
+       uint    lps_leave_cnts;
 
        u8      ips_mode; 
        u8      ips_org_mode; 
 
        u8      ips_mode; 
        u8      ips_org_mode; 
@@ -320,12 +322,12 @@ struct pwrctrl_priv
        u8              wowlan_ap_mode;
        u8              wowlan_mode;
        u8              wowlan_p2p_mode;
        u8              wowlan_ap_mode;
        u8              wowlan_mode;
        u8              wowlan_p2p_mode;
+       u8              wowlan_pno_enable;
 #ifdef CONFIG_WOWLAN
        u8              wowlan_pattern;
        u8              wowlan_magic;
        u8              wowlan_unicast;
        u8              wowlan_pattern_idx;
 #ifdef CONFIG_WOWLAN
        u8              wowlan_pattern;
        u8              wowlan_magic;
        u8              wowlan_unicast;
        u8              wowlan_pattern_idx;
-       u8              wowlan_pno_enable;
        u8              wowlan_from_cmd;
 #ifdef CONFIG_PNO_SUPPORT
        u8              pno_in_resume;
        u8              wowlan_from_cmd;
 #ifdef CONFIG_PNO_SUPPORT
        u8              pno_in_resume;
index dab240e3efdc505ee11437a5d631e4e7ef7074b9..f04c045a8aa78a1127fd76710e2895d325b9c8e4 100755 (executable)
@@ -96,6 +96,7 @@ struct recv_reorder_ctrl
        u16 indicate_seq;//=wstart_b, init_value=0xffff
        u16 wend_b;
        u8 wsize_b;
        u16 indicate_seq;//=wstart_b, init_value=0xffff
        u16 wend_b;
        u8 wsize_b;
+       u8 ampdu_size;
        _queue pending_recvframe_queue;
        _timer reordering_ctrl_timer;
 };
        _queue pending_recvframe_queue;
        _timer reordering_ctrl_timer;
 };
@@ -254,8 +255,12 @@ struct rx_pkt_attrib       {
        u8      key_index;
 
        u8      data_rate;
        u8      key_index;
 
        u8      data_rate;
+       u8      bw;
+       u8      stbc;
+       u8      ldpc;
        u8      sgi;
        u8      pkt_rpt_type;
        u8      sgi;
        u8      pkt_rpt_type;
+       u32 tsfl;
        u32     MacIDValidEntry[2];     // 64 bits present 64 entry.
 
 /*
        u32     MacIDValidEntry[2];     // 64 bits present 64 entry.
 
 /*
@@ -265,7 +270,7 @@ struct rx_pkt_attrib        {
        u32     RxPWDBAll;      
        s32     RecvSignalPower;
 */
        u32     RxPWDBAll;      
        s32     RecvSignalPower;
 */
-       struct phy_info phy_info;       
+       struct phy_info phy_info;
 };
 
 
 };
 
 
@@ -521,11 +526,9 @@ struct recv_buf
 
 #ifdef PLATFORM_LINUX
        _pkt    *pskb;
 
 #ifdef PLATFORM_LINUX
        _pkt    *pskb;
-       u8      reuse;
 #endif
 #ifdef PLATFORM_FREEBSD //skb solution
        struct sk_buff *pskb;
 #endif
 #ifdef PLATFORM_FREEBSD //skb solution
        struct sk_buff *pskb;
-       u8      reuse;
 #endif //PLATFORM_FREEBSD //skb solution
 };
 
 #endif //PLATFORM_FREEBSD //skb solution
 };
 
@@ -628,6 +631,8 @@ struct recv_buf *rtw_dequeue_recvbuf (_queue *queue);
 
 void rtw_reordering_ctrl_timeout_handler(void *pcontext);
 
 
 void rtw_reordering_ctrl_timeout_handler(void *pcontext);
 
+void rx_query_phy_status(union recv_frame *rframe, u8 *phy_stat);
+
 __inline static u8 *get_rxmem(union recv_frame *precvframe)
 {
        //always return rx_head...
 __inline static u8 *get_rxmem(union recv_frame *precvframe)
 {
        //always return rx_head...
index 35d031f0b1e48ea0eb22e740fd91e989eb4f0ffb..97365607d60117b71bec5fa265743c4ac0eb5939 100755 (executable)
@@ -155,7 +155,6 @@ typedef enum _PROTECTION_MODE{
        PROTECTION_MODE_FORCE_DISABLE = 2,
 }PROTECTION_MODE, *PPROTECTION_MODE;
 
        PROTECTION_MODE_FORCE_DISABLE = 2,
 }PROTECTION_MODE, *PPROTECTION_MODE;
 
-/* 2007/11/15 MH Define different RF type. */
 typedef        enum _RT_RF_TYPE_DEFINITION
 {
        RF_1T2R = 0,
 typedef        enum _RT_RF_TYPE_DEFINITION
 {
        RF_1T2R = 0,
@@ -163,7 +162,12 @@ typedef    enum _RT_RF_TYPE_DEFINITION
        RF_2T2R = 2,
        RF_1T1R = 3,
        RF_2T2R_GREEN = 4,
        RF_2T2R = 2,
        RF_1T1R = 3,
        RF_2T2R_GREEN = 4,
-       RF_MAX_TYPE = 5,
+       RF_2T3R = 5,    
+       RF_3T3R = 6,
+       RF_3T4R = 7,
+       RF_4T4R = 8,
+
+       RF_MAX_TYPE = 0xF, /* u1Byte */
 }RT_RF_TYPE_DEF_E;
 
 
 }RT_RF_TYPE_DEF_E;
 
 
index 00b08fd75e469cbab330ca30ed8099a281c5d3e1..7d758f6f01e8b516f19ee02058492de4f3c19914 100755 (executable)
@@ -468,6 +468,8 @@ void wpa_tdls_generate_tpk(_adapter *padapter, PVOID sta);
 int wpa_tdls_ftie_mic(u8 *kck, u8 trans_seq, 
                                                u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie,
                                                u8 *mic);
 int wpa_tdls_ftie_mic(u8 *kck, u8 trans_seq, 
                                                u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie,
                                                u8 *mic);
+int wpa_tdls_teardown_ftie_mic(u8 *kck, u8 *lnkid, u16 reason, 
+       u8 dialog_token, u8 trans_seq, u8 *ftie, u8 *mic);
 int tdls_verify_mic(u8 *kck, u8 trans_seq, 
                                                u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie);
 #endif //CONFIG_TDLS
 int tdls_verify_mic(u8 *kck, u8 trans_seq, 
                                                u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie);
 #endif //CONFIG_TDLS
index ce0e2fc3c8973e6514bff6e49d07f3e4a9527f17..ed54a9968c522ab97a4e7f426ea5105c32a1cfb0 100755 (executable)
 \r
 #ifdef CONFIG_TDLS\r
 /* TDLS STA state */\r
 \r
 #ifdef CONFIG_TDLS\r
 /* TDLS STA state */\r
-#define        TDLS_STATE_NONE                         0x00000000      //default state\r
-#define        TDLS_INITIATOR_STATE                    0x10000000\r
-#define        TDLS_RESPONDER_STATE                    0x20000000\r
-#define        TDLS_LINKED_STATE                               0x40000000\r
-#define        TDLS_CH_SWITCH_ON_STATE         0x01000000\r
-#define        TDLS_PEER_AT_OFF_STATE          0x02000000      //could send pkt on target ch\r
-#define        TDLS_AT_OFF_CH_STATE                    0x04000000\r
-#define        TDLS_CH_SW_INITIATOR_STATE      0x08000000      //avoiding duplicated or unconditional ch. switch rsp.\r
-#define        TDLS_APSD_CHSW_STATE            0x00100000      //in APSD and want to setup channel switch\r
-#define        TDLS_PEER_SLEEP_STATE           0x00200000      //peer sta is sleeping  //[TDLS] UAPSD: will not be used one day\r
-#define        TDLS_SW_OFF_STATE                       0x00400000      //terminate channel swithcing\r
-#define        TDLS_ALIVE_STATE                                0x00010000      //Check if peer sta is alived.\r
-#define        TDLS_WAIT_PTR_STATE                     0x00020000      //Waiting peer's TDLS_PEER_TRAFFIC_RESPONSE frame\r
-\r
-#define        TPK_RESEND_COUNT                                301\r
-#define        CH_SWITCH_TIME                          10\r
-#define        CH_SWITCH_TIMEOUT                       30\r
-#define        TDLS_STAY_TIME                          500\r
+\r
+\r
+/* TDLS Diect Link Establishment */\r
+#define        TDLS_STATE_NONE                         0x00000000              /* Default state */\r
+#define        TDLS_INITIATOR_STATE            BIT(28)                 /* 0x10000000 */\r
+#define        TDLS_RESPONDER_STATE            BIT(29)                 /* 0x20000000 */\r
+#define        TDLS_LINKED_STATE                       BIT(30)                 /* 0x40000000 */\r
+/* TDLS PU Buffer STA */\r
+#define        TDLS_WAIT_PTR_STATE                     BIT(24)                 /* 0x01000000 */        /* Waiting peer's TDLS_PEER_TRAFFIC_RESPONSE frame */\r
+/* TDLS Check ALive */\r
+#define        TDLS_ALIVE_STATE                        BIT(20)                 /* 0x00100000 */        /* Check if peer sta is alived. */\r
+/* TDLS Channel Switch */\r
+#define        TDLS_CH_SWITCH_ON_STATE         BIT(16)                 /* 0x00010000 */\r
+#define        TDLS_PEER_AT_OFF_STATE          BIT(17)                 /* 0x00020000 */        /* Could send pkt on target ch */\r
+#define        TDLS_CH_SW_INITIATOR_STATE      BIT(18)                 /* 0x00040000 */        /* Avoid duplicated or unconditional ch. switch rsp. */\r
+#define        TDLS_WAIT_CH_RSP_STATE          BIT(19)                 /* 0x00080000 */        /* Wait Ch. response as we are TDLS channel switch initiator */\r
+\r
+\r
+#define        TPK_RESEND_COUNT                        1800    /*Unit: seconds */\r
+#define        CH_SWITCH_TIME                          5\r
+#define        CH_SWITCH_TIMEOUT                       20\r
 #define        TDLS_SIGNAL_THRESH                      0x20\r
 #define        TDLS_SIGNAL_THRESH                      0x20\r
-#define        TDLS_WATCHDOG_PERIOD            10      //Periodically sending tdls discovery request in TDLS_WATCHDOG_PERIOD * 2 sec\r
-#define        TDLS_STAY_TIME                          500\r
+#define        TDLS_WATCHDOG_PERIOD            10      /* Periodically sending tdls discovery request in TDLS_WATCHDOG_PERIOD * 2 sec */\r
 #define        TDLS_HANDSHAKE_TIME                     3000\r
 #define        TDLS_HANDSHAKE_TIME                     3000\r
-#define        TDLS_PTI_TIME                                   7000\r
-#define        TDLS_ALIVE_COUNT                                3\r
-#define        TDLS_INI_MACID_ENTRY                    6\r
+#define        TDLS_PTI_TIME                           7000\r
 \r
 \r
-/* TDLS */\r
 #define TDLS_MIC_LEN 16\r
 #define WPA_NONCE_LEN 32\r
 #define TDLS_TIMEOUT_LEN 4\r
 #define TDLS_MIC_LEN 16\r
 #define WPA_NONCE_LEN 32\r
 #define TDLS_TIMEOUT_LEN 4\r
@@ -72,44 +71,48 @@ struct wpa_tdls_lnkid {
        u8 resp_sta[ETH_ALEN];\r
 } ;\r
 \r
        u8 resp_sta[ETH_ALEN];\r
 } ;\r
 \r
-static u8 TDLS_RSNIE[]={       0x01, 0x00,     //version shall be set to 1\r
-                                               0x00, 0x0f, 0xac, 0x07, //group sipher suite\r
-                                               0x01, 0x00,     //pairwise cipher suite count\r
-                                               0x00, 0x0f, 0xac, 0x04, //pairwise cipher suite list; CCMP only\r
-                                               0x01, 0x00,     //AKM suite count\r
-                                               0x00, 0x0f, 0xac, 0x07, //TPK Handshake\r
-                                               0x0c, 0x02,\r
-                                               //PMKID shall not be present\r
+static u8 TDLS_RSNIE[20]={     0x01, 0x00,     /* Version shall be set to 1 */\r
+                                                       0x00, 0x0f, 0xac, 0x07, /* Group sipher suite */\r
+                                                       0x01, 0x00,     /* Pairwise cipher suite count */\r
+                                                       0x00, 0x0f, 0xac, 0x04, /* Pairwise cipher suite list; CCMP only */\r
+                                                       0x01, 0x00,     /* AKM suite count */\r
+                                                       0x00, 0x0f, 0xac, 0x07, /* TPK Handshake */\r
+                                                       0x0c, 0x02,\r
+                                                       /* PMKID shall not be present */\r
                                                };\r
 \r
                                                };\r
 \r
-static u8 TDLS_WMMIE[]={0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00};     //Qos info all set zero\r
+static u8 TDLS_WMMIE[]={0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00};     /* Qos info all set zero */\r
+\r
+static u8 TDLS_WMM_PARAM_IE[] = {0x00, 0x00, 0x03, 0xa4, 0x00, 0x00, 0x27, 0xa4, 0x00, 0x00, 0x42, 0x43, 0x5e, 0x00, 0x62, 0x32, 0x2f, 0x00};\r
 \r
 \r
-static u8 TDLS_EXT_CAPIE[] = {0x00, 0x00, 0x00, 0x50, 0x20, 0x00, 0x00, 0x00}; //bit(28), bit(30), bit(37)\r
+static u8 TDLS_EXT_CAPIE[] = {0x00, 0x00, 0x00, 0x50, 0x20, 0x00, 0x00, 0x00}; /* bit(28), bit(30), bit(37) */\r
 \r
 \r
-//     SRC: Supported Regulatory Classes\r
+/* SRC: Supported Regulatory Classes */\r
 static u8 TDLS_SRC[] = { 0x01, 0x01, 0x02, 0x03, 0x04, 0x0c, 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x21 };\r
 \r
 static u8 TDLS_SRC[] = { 0x01, 0x01, 0x02, 0x03, 0x04, 0x0c, 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x21 };\r
 \r
+int check_ap_tdls_prohibited(u8 *pframe, u8 pkt_len);\r
+int check_ap_tdls_ch_switching_prohibited(u8 *pframe, u8 pkt_len);\r
 void rtw_reset_tdls_info(_adapter* padapter);\r
 int rtw_init_tdls_info(_adapter* padapter);\r
 void rtw_free_tdls_info(struct tdls_info *ptdlsinfo);\r
 int issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms);\r
 void rtw_init_tdls_timer(_adapter *padapter, struct sta_info *psta);\r
 void rtw_reset_tdls_info(_adapter* padapter);\r
 int rtw_init_tdls_info(_adapter* padapter);\r
 void rtw_free_tdls_info(struct tdls_info *ptdlsinfo);\r
 int issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms);\r
 void rtw_init_tdls_timer(_adapter *padapter, struct sta_info *psta);\r
-void rtw_free_tdls_timer(struct sta_info *psta);\r
+void   rtw_free_tdls_timer(struct sta_info *psta);\r
 void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta);\r
 #ifdef CONFIG_WFD\r
 int issue_tunneled_probe_req(_adapter *padapter);\r
 int issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame);\r
 void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta);\r
 #ifdef CONFIG_WFD\r
 int issue_tunneled_probe_req(_adapter *padapter);\r
 int issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame);\r
-#endif //CONFIG_WFD\r
+#endif /* CONFIG_WFD */\r
 int issue_tdls_dis_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
 int issue_tdls_setup_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wait_ack);\r
 int issue_tdls_setup_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
 int issue_tdls_setup_cfm(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
 int issue_tdls_dis_rsp(_adapter * padapter, struct tdls_txmgmt *ptxmgmt, u8 privacy);\r
 int issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wait_ack);\r
 int issue_tdls_dis_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
 int issue_tdls_setup_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wait_ack);\r
 int issue_tdls_setup_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
 int issue_tdls_setup_cfm(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
 int issue_tdls_dis_rsp(_adapter * padapter, struct tdls_txmgmt *ptxmgmt, u8 privacy);\r
 int issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wait_ack);\r
-int issue_tdls_peer_traffic_rsp(_adapter *padapter, struct sta_info *psta);\r
+int issue_tdls_peer_traffic_rsp(_adapter *padapter, struct sta_info *psta, struct tdls_txmgmt *ptxmgmt);\r
 int issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *psta);\r
 int issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *psta);\r
-int issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr);\r
-int issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr);\r
+int issue_tdls_ch_switch_req(_adapter *padapter, struct sta_info *ptdls_sta);\r
+int issue_tdls_ch_switch_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wait_ack);\r
 sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
 sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame);\r
 int On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
 sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
 sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame);\r
 int On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
@@ -118,24 +121,29 @@ int On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame);
 int On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame);\r
 int On_TDLS_Peer_Traffic_Indication(_adapter *adapter, union recv_frame *precv_frame);\r
 int On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
 int On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame);\r
 int On_TDLS_Peer_Traffic_Indication(_adapter *adapter, union recv_frame *precv_frame);\r
 int On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
+#ifdef CONFIG_TDLS_CH_SW\r
 sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame);\r
 sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
 sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame);\r
 sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
+void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
+void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
+#endif\r
 void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
 void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
 void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
 void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
 void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
 void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
 void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
 void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
 void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
 void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
-void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog, u8 privacy);\r
-void rtw_build_tdls_peer_traffic_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
-void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
-void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
-void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
+void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt, u8 privacy);\r
+void rtw_build_tdls_peer_traffic_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
+void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
 void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
 void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
 \r
 u8     update_sgi_tdls(_adapter *padapter, struct sta_info *psta);\r
 u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta);\r
 void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
 void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
 \r
 u8     update_sgi_tdls(_adapter *padapter, struct sta_info *psta);\r
 u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta);\r
-#endif //CONFIG_TDLS\r
+int rtw_tdls_is_driver_setup(_adapter *padapter);\r
+void rtw_tdls_set_key(_adapter *padapter, struct sta_info *ptdls_sta);\r
+const char * rtw_tdls_action_txt(enum TDLS_ACTION_FIELD action);\r
+#endif /* CONFIG_TDLS */\r
 \r
 #endif\r
 \r
 \r
 #endif\r
 \r
index 6bd3f4c78d0db37d1b9d5b0a267877aaf0d1a3ef..9ac6e8122be6f22294327a2bec0b99e75258f301 100755 (executable)
@@ -1,2 +1,2 @@
-#define DRIVERVERSION  "v4.3.9.6_13610.20150310_BTCOEX20140929-5443"
-#define BTCOEXVERSION  "BTCOEX20140929-5443"
+#define DRIVERVERSION  "v4.3.16_14189.20150519_BTCOEX20150119-5844"
+#define BTCOEXVERSION  "BTCOEX20150119-5844"
index 62ad08b5a7d1eee079cd3fa37780200a9a0e238d..3e93131dfc3c256a445352d3a3a9a1229a424a40 100755 (executable)
@@ -117,7 +117,7 @@ struct vht_priv
 u8     rtw_get_vht_highest_rate(u8 *pvht_mcs_map);
 void   rtw_get_vht_nss(u8 *pvht_mcs_map);
 u16    rtw_vht_mcs_to_data_rate(u8 bw, u8 short_GI, u8 vht_mcs_rate);
 u8     rtw_get_vht_highest_rate(u8 *pvht_mcs_map);
 void   rtw_get_vht_nss(u8 *pvht_mcs_map);
 u16    rtw_vht_mcs_to_data_rate(u8 bw, u8 short_GI, u8 vht_mcs_rate);
-u32    rtw_vht_rate_to_bitmap(u8 *pVHTRate);
+u64    rtw_vht_rate_to_bitmap(u8 *pVHTRate);
 void   rtw_vht_use_default_setting(_adapter *padapter);
 u32    rtw_build_vht_operation_ie(_adapter *padapter, u8 *pbuf, u8 channel);
 u32    rtw_build_vht_op_mode_notify_ie(_adapter *padapter, u8 *pbuf, u8 bw);
 void   rtw_vht_use_default_setting(_adapter *padapter);
 u32    rtw_build_vht_operation_ie(_adapter *padapter, u8 *pbuf, u8 channel);
 u32    rtw_build_vht_op_mode_notify_ie(_adapter *padapter, u8 *pbuf, u8 bw);
index d7d8fca072e22b436ee52ba1afd12a0e9f133027..c7938684a65d6e9f7b6bca3e8984393b288371d4 100755 (executable)
@@ -156,7 +156,7 @@ do{\
 #endif
 #endif
 
 #endif
 #endif
 
-#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)|| defined(CONFIG_RTL8723B)
+#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)|| defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8814A)
 #define TXDESC_SIZE 40
 //8192EE_TODO
 #elif defined (CONFIG_RTL8192E) // this section is defined for buffer descriptor ring architecture
 #define TXDESC_SIZE 40
 //8192EE_TODO
 #elif defined (CONFIG_RTL8192E) // this section is defined for buffer descriptor ring architecture
@@ -198,105 +198,6 @@ do{\
 #define TX_DESC_NEXT_DESC_OFFSET       (TXDESC_SIZE + 8)
 #endif //CONFIG_PCI_HCI
 
 #define TX_DESC_NEXT_DESC_OFFSET       (TXDESC_SIZE + 8)
 #endif //CONFIG_PCI_HCI
 
-#ifdef CONFIG_WOWLAN
-// The following foramt is 40 bytes tx description.
-// It supports 8192E, 8723B, 8812a.
-// Dword 0
-#define GET_TX_DESC_OWN(__pTxDesc)                     LE_BITS_TO_4BYTE(__pTxDesc, 31, 1)
-#define SET_TX_DESC_PKT_SIZE(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc, 0, 16, __Value)
-#define SET_TX_DESC_OFFSET(__pTxDesc, __Value)         SET_BITS_TO_LE_4BYTE(__pTxDesc, 16, 8, __Value)
-#define SET_TX_DESC_BMC(__pTxDesc, __Value)            SET_BITS_TO_LE_4BYTE(__pTxDesc, 24, 1, __Value)
-#define SET_TX_DESC_HTC(__pTxDesc, __Value)            SET_BITS_TO_LE_4BYTE(__pTxDesc, 25, 1, __Value)
-#define SET_TX_DESC_LAST_SEG(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc, 26, 1, __Value)
-#define SET_TX_DESC_FIRST_SEG(__pTxDesc, __Value)      SET_BITS_TO_LE_4BYTE(__pTxDesc, 27, 1, __Value)
-#define SET_TX_DESC_LINIP(__pTxDesc, __Value)          SET_BITS_TO_LE_4BYTE(__pTxDesc, 28, 1, __Value)
-#define SET_TX_DESC_NO_ACM(__pTxDesc, __Value)         SET_BITS_TO_LE_4BYTE(__pTxDesc, 29, 1, __Value)
-#define SET_TX_DESC_GF(__pTxDesc, __Value)             SET_BITS_TO_LE_4BYTE(__pTxDesc, 30, 1, __Value)
-#define SET_TX_DESC_OWN(__pTxDesc, __Value)            SET_BITS_TO_LE_4BYTE(__pTxDesc, 31, 1, __Value)
-// Dword 1
-#define SET_TX_DESC_MACID(__pTxDesc, __Value)          SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 0, 7, __Value)
-#define SET_TX_DESC_QUEUE_SEL(__pTxDesc, __Value)      SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 8, 5, __Value)
-#define SET_TX_DESC_RDG_NAV_EXT(__pTxDesc, __Value)    SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 13, 1, __Value)
-#define SET_TX_DESC_LSIG_TXOP_EN(__pTxDesc, __Value)   SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 14, 1, __Value)
-#define SET_TX_DESC_PIFS(__pTxDesc, __Value)           SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 15, 1, __Value)
-#define SET_TX_DESC_RATE_ID(__pTxDesc, __Value)                SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 16, 5, __Value)
-#define SET_TX_DESC_EN_DESC_ID(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 21, 1, __Value)
-#define SET_TX_DESC_SEC_TYPE(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 22, 2, __Value)
-#define SET_TX_DESC_PKT_OFFSET(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 24, 5, __Value)
-// Dword 2
-#define SET_TX_DESC_PAID(__pTxDesc, __Value)           SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 0,  9, __Value) 
-#define SET_TX_DESC_CCA_RTS(__pTxDesc, __Value)                SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 10, 2, __Value)
-#define SET_TX_DESC_AGG_ENABLE(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 12, 1, __Value)
-#define SET_TX_DESC_RDG_ENABLE(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 13, 1, __Value)
-#define SET_TX_DESC_AGG_BREAK(__pTxDesc, __Value)      SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 16, 1, __Value)
-#define SET_TX_DESC_MORE_FRAG(__pTxDesc, __Value)      SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 17, 1, __Value)
-#define SET_TX_DESC_RAW(__pTxDesc, __Value)            SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 18, 1, __Value)
-#define SET_TX_DESC_SPE_RPT(__pTxDesc, __Value)                SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 19, 1, __Value)
-#define SET_TX_DESC_AMPDU_DENSITY(__pTxDesc, __Value)  SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 20, 3, __Value)
-#define SET_TX_DESC_BT_INT(__pTxDesc, __Value)         SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 23, 1, __Value)
-#define SET_TX_DESC_GID(__pTxDesc, __Value)            SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 24, 6, __Value)
-// Dword 3
-#define SET_TX_DESC_WHEADER_LEN(__pTxDesc, __Value)    SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 0, 4, __Value)
-#define SET_TX_DESC_CHK_EN(__pTxDesc, __Value)         SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 4, 1, __Value)
-#define SET_TX_DESC_EARLY_MODE(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 5, 1, __Value)
-#define SET_TX_DESC_HWSEQ_SEL(__pTxDesc, __Value)      SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 6, 2, __Value)
-#define SET_TX_DESC_USE_RATE(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 8, 1, __Value)
-#define SET_TX_DESC_DISABLE_RTS_FB(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 9, 1, __Value)
-#define SET_TX_DESC_DISABLE_FB(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 10, 1, __Value)
-#define SET_TX_DESC_CTS2SELF(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 11, 1, __Value)
-#define SET_TX_DESC_RTS_ENABLE(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 12, 1, __Value)
-#define SET_TX_DESC_HW_RTS_ENABLE(__pTxDesc, __Value)  SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 13, 1, __Value)
-#define SET_TX_DESC_NAV_USE_HDR(__pTxDesc, __Value)    SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 15, 1, __Value)
-#define SET_TX_DESC_USE_MAX_LEN(__pTxDesc, __Value)    SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 16, 1, __Value)
-#define SET_TX_DESC_MAX_AGG_NUM(__pTxDesc, __Value)    SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 17, 5, __Value)
-#define SET_TX_DESC_NDPA(__pTxDesc, __Value)           SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 22, 2, __Value)
-#define SET_TX_DESC_AMPDU_MAX_TIME(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 24, 8, __Value)
-// Dword 4
-#define SET_TX_DESC_TX_RATE(__pTxDesc, __Value)                SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 0, 7, __Value)
-#define SET_TX_DESC_DATA_RATE_FB_LIMIT(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 8, 5, __Value)
-#define SET_TX_DESC_RTS_RATE_FB_LIMIT(__pTxDesc, __Value)      SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 13, 4, __Value)
-#define SET_TX_DESC_RETRY_LIMIT_ENABLE(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 17, 1, __Value)
-#define SET_TX_DESC_DATA_RETRY_LIMIT(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 18, 6, __Value)
-#define SET_TX_DESC_RTS_RATE(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 24, 5, __Value)
-// Dword 5
-#define SET_TX_DESC_DATA_SC(__pTxDesc, __Value)                SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 0, 4, __Value)
-#define SET_TX_DESC_DATA_SHORT(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 4, 1, __Value)
-#define SET_TX_DESC_DATA_BW(__pTxDesc, __Value)                SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 5, 2, __Value)
-#define SET_TX_DESC_DATA_LDPC(__pTxDesc, __Value)      SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 7, 1, __Value)
-#define SET_TX_DESC_DATA_STBC(__pTxDesc, __Value)      SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 8, 2, __Value)
-#define SET_TX_DESC_CTROL_STBC(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 10, 2, __Value)
-#define SET_TX_DESC_RTS_SHORT(__pTxDesc, __Value)      SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 12, 1, __Value)
-#define SET_TX_DESC_RTS_SC(__pTxDesc, __Value)         SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 13, 4, __Value)
-// Dword 6
-#define SET_TX_DESC_SW_DEFINE(__pTxDesc, __Value)      SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 0, 12, __Value)
-#define SET_TX_DESC_ANTSEL_A(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 16, 3, __Value)
-#define SET_TX_DESC_ANTSEL_B(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 19, 3, __Value)
-#define SET_TX_DESC_ANTSEL_C(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 22, 3, __Value)
-#define SET_TX_DESC_ANTSEL_D(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 25, 3, __Value)
-// Dword 7
-#ifdef CONFIG_PCI_HCI 
-#define SET_TX_DESC_TX_BUFFER_SIZE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 0, 16, __Value)
-#else
-#define SET_TX_DESC_TX_DESC_CHECKSUM(__pTxDesc, __Value)SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 0, 16, __Value)
-#endif
-#define SET_TX_DESC_USB_TXAGG_NUM(__pTxDesc, __Value)  SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 24, 8, __Value)
-#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-#define SET_TX_DESC_SDIO_TXSEQ(__pTxDesc, __Value)     SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 16, 8, __Value)
-#endif
-
-// Dword 8
-#define SET_TX_DESC_HWSEQ_EN(__pTxDesc, __Value)       SET_BITS_TO_LE_4BYTE(__pTxDesc+32, 15, 1, __Value)
-// Dword 9
-#define SET_TX_DESC_SEQ(__pTxDesc, __Value)            SET_BITS_TO_LE_4BYTE(__pTxDesc+36, 12, 12, __Value)
-// Dword 10
-#define SET_TX_DESC_TX_BUFFER_ADDRESS(__pTxDesc, __Value)SET_BITS_TO_LE_4BYTE(__pTxDesc+40, 0, 32, __Value)
-#define GET_TX_DESC_TX_BUFFER_ADDRESS(__pTxDesc)       LE_BITS_TO_4BYTE(__pTxDesc+40, 0, 32)
-
-// Dword 11
-#define SET_TX_DESC_NEXT_DESC_ADDRESS(__pTxDesc, __Value)SET_BITS_TO_LE_4BYTE(__pTxDesc+48, 0, 32, __Value)
-// 40 bytes tx description end.
-#endif
-
 enum TXDESC_SC{
        SC_DONT_CARE = 0x00,
        SC_UPPER= 0x01, 
 enum TXDESC_SC{
        SC_DONT_CARE = 0x00,
        SC_UPPER= 0x01, 
@@ -669,10 +570,6 @@ struct xmit_frame
        u8      agg_num;
 #endif
        s8      pkt_offset;
        u8      agg_num;
 #endif
        s8      pkt_offset;
-#ifdef CONFIG_RTL8192D
-       u8      EMPktNum;
-       u16     EMPktLen[5];//The max value by HW
-#endif
 #endif
 
 #ifdef CONFIG_XMIT_ACK
 #endif
 
 #ifdef CONFIG_XMIT_ACK
@@ -876,7 +773,13 @@ struct     xmit_priv       {
 extern struct xmit_frame *__rtw_alloc_cmdxmitframe(struct xmit_priv *pxmitpriv,
                enum cmdbuf_type buf_type);
 #define rtw_alloc_cmdxmitframe(p) __rtw_alloc_cmdxmitframe(p, CMDBUF_RSVD)
 extern struct xmit_frame *__rtw_alloc_cmdxmitframe(struct xmit_priv *pxmitpriv,
                enum cmdbuf_type buf_type);
 #define rtw_alloc_cmdxmitframe(p) __rtw_alloc_cmdxmitframe(p, CMDBUF_RSVD)
+#if defined(CONFIG_RTL8192E) && defined(CONFIG_PCI_HCI) 
+extern struct xmit_frame *__rtw_alloc_cmdxmitframe_8192ee(struct xmit_priv *pxmitpriv,
+               enum cmdbuf_type buf_type);
+#define rtw_alloc_bcnxmitframe(p) __rtw_alloc_cmdxmitframe_8192ee(p, CMDBUF_BEACON)
+#else
 #define rtw_alloc_bcnxmitframe(p) __rtw_alloc_cmdxmitframe(p, CMDBUF_BEACON)
 #define rtw_alloc_bcnxmitframe(p) __rtw_alloc_cmdxmitframe(p, CMDBUF_BEACON)
+#endif
 
 extern struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv);
 extern s32 rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
 
 extern struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv);
 extern s32 rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
index 15964d7f80c46becf237ee441470e7b8c2e5413c..dc3634e2e8c1b96d20bbdb0c0b314f5c9e206afe 100755 (executable)
 
 
 #define IBSS_START_MAC_ID      2
 
 
 #define IBSS_START_MAC_ID      2
-#define NUM_STA 32
+#define NUM_STA MACID_NUM_SW_LIMIT
 #define NUM_ACL 16
 
 #define NUM_ACL 16
 
+#ifdef CONFIG_TDLS
+#define MAX_ALLOWED_TDLS_STA_NUM       4
+#endif
 
 //if mode ==0, then the sta is allowed once the addr is hit.
 //if mode ==1, then the sta is rejected once the addr is non-hit.
 
 //if mode ==0, then the sta is allowed once the addr is hit.
 //if mode ==1, then the sta is rejected once the addr is non-hit.
@@ -136,7 +139,7 @@ struct sta_info {
 
        u8      raid;
        u8      init_rate;
 
        u8      raid;
        u8      init_rate;
-       u32     ra_mask;
+       u64     ra_mask;
        u8      wireless_mode;  // NETWORK_TYPE
        u8      bw_mode;
 
        u8      wireless_mode;  // NETWORK_TYPE
        u8      bw_mode;
 
@@ -147,27 +150,24 @@ struct sta_info {
 
 #ifdef CONFIG_TDLS
        u32     tdls_sta_state;
 
 #ifdef CONFIG_TDLS
        u32     tdls_sta_state;
-       u8      dialog;
        u8      SNonce[32];
        u8      ANonce[32];
        u32     TDLS_PeerKey_Lifetime;
        u16     TPK_count;
        _timer  TPK_timer;
        struct TDLS_PeerKey     tpk;
        u8      SNonce[32];
        u8      ANonce[32];
        u32     TDLS_PeerKey_Lifetime;
        u16     TPK_count;
        _timer  TPK_timer;
        struct TDLS_PeerKey     tpk;
-       u16     stat_code;
-       u8      off_ch;
+#ifdef CONFIG_TDLS_CH_SW       
        u16     ch_switch_time;
        u16     ch_switch_timeout;
        u16     ch_switch_time;
        u16     ch_switch_timeout;
-       u8      option;
-       _timer  option_timer;
-       _timer  base_ch_timer;
-       _timer  off_ch_timer;
+       //u8    option;
+       _timer  ch_sw_timer;
+       _timer  delay_timer;
+#endif 
        _timer handshake_timer;
        _timer handshake_timer;
-       u8 timer_flag;
        u8 alive_count;
        _timer  pti_timer;
        u8 alive_count;
        _timer  pti_timer;
-       u8      TDLS_RSNIE[20]; //Save peer's RSNIE, use for sending TDLS_SETUP_RSP
-#endif //CONFIG_TDLS
+       u8      TDLS_RSNIE[20]; /* Save peer's RSNIE, used for sending TDLS_SETUP_RSP */
+#endif /* CONFIG_TDLS */
 
        //for A-MPDU TX, ADDBA timeout check    
        _timer addba_retry_timer;
 
        //for A-MPDU TX, ADDBA timeout check    
        _timer addba_retry_timer;
index 51f25b8086ab75e760bb967534d492e1f00869f6..bf17f82013ea275be3e2157d4892c8c20fcd5db5 100755 (executable)
 #ifndef __USB_HAL_H__
 #define __USB_HAL_H__
 
 #ifndef __USB_HAL_H__
 #define __USB_HAL_H__
 
-void rtw_set_hal_ops(_adapter *padapter);
+int usb_init_recv_priv(_adapter *padapter, u16 ini_in_buf_sz);
+void usb_free_recv_priv (_adapter *padapter, u16 ini_in_buf_sz);
 
 
-#ifdef CONFIG_RTL8192C
-void rtl8192cu_set_hal_ops(_adapter * padapter);
-#endif
-
-#ifdef CONFIG_RTL8192D
-void rtl8192du_set_hal_ops(_adapter * padapter);
-#endif
-
-#ifdef CONFIG_RTL8723A
-void rtl8723au_set_hal_ops(_adapter * padapter);
-#endif
+u8 rtw_set_hal_ops(_adapter *padapter);
 
 #ifdef CONFIG_RTL8188E
 void rtl8188eu_set_hal_ops(_adapter * padapter);
 
 #ifdef CONFIG_RTL8188E
 void rtl8188eu_set_hal_ops(_adapter * padapter);
@@ -51,6 +42,10 @@ void rtl8192eu_set_hal_ops(_adapter * padapter);
 void rtl8723bu_set_hal_ops(_adapter * padapter);
 #endif
 
 void rtl8723bu_set_hal_ops(_adapter * padapter);
 #endif
 
+#ifdef CONFIG_RTL8814A
+void rtl8814au_set_hal_ops(_adapter * padapter);
+#endif /* CONFIG_RTL8814A */
+
 #ifdef CONFIG_INTEL_PROXIM     
 extern _adapter  *rtw_usb_get_sw_pointer(void);
 #endif //CONFIG_INTEL_PROXIM
 #ifdef CONFIG_INTEL_PROXIM     
 extern _adapter  *rtw_usb_get_sw_pointer(void);
 #endif //CONFIG_INTEL_PROXIM
index 5606891ec909eb0f3a99dc970630db97655120aa..43c275909eda4fc3e935f4f6844e91b262e4b34f 100755 (executable)
@@ -51,35 +51,6 @@ enum{
 #include <usb_ops_linux.h>
 #endif //PLATFORM_LINUX
 
 #include <usb_ops_linux.h>
 #endif //PLATFORM_LINUX
 
-#ifdef CONFIG_RTL8192C
-void rtl8192cu_set_hw_type(_adapter *padapter);
-void rtl8192cu_set_intf_ops(struct _io_ops *pops);
-void rtl8192cu_recv_tasklet(void *priv);
-void rtl8192cu_xmit_tasklet(void *priv);
-#endif
-
-#ifdef CONFIG_RTL8723A
-void rtl8723au_set_hw_type(_adapter *padapter);
-void rtl8723au_set_intf_ops(struct _io_ops *pops);
-void rtl8192cu_recv_tasklet(void *priv);
-void rtl8192cu_xmit_tasklet(void *priv);
-#endif
-
-#ifdef CONFIG_RTL8192D
-void rtl8192du_set_hw_type(_adapter *padapter);
-void rtl8192du_set_intf_ops(struct _io_ops *pops);
-#ifndef PLATFORM_FREEBSD
-void rtl8192du_recv_tasklet(void *priv);
-#else  // PLATFORM_FREEBSD
-void rtl8192du_recv_tasklet(void *priv, int npending);
-#ifdef CONFIG_RX_INDICATE_QUEUE
-void rtw_rx_indicate_tasklet(void *priv, int npending);
-#endif // CONFIG_RX_INDICATE_QUEUE
-#endif // PLATFORM_FREEBSD
-
-void rtl8192du_xmit_tasklet(void *priv);
-#endif
-
 #ifdef CONFIG_RTL8188E
 void rtl8188eu_set_hw_type(_adapter *padapter);
 void rtl8188eu_set_intf_ops(struct _io_ops *pops);
 #ifdef CONFIG_RTL8188E
 void rtl8188eu_set_hw_type(_adapter *padapter);
 void rtl8188eu_set_intf_ops(struct _io_ops *pops);
@@ -90,6 +61,11 @@ void rtl8812au_set_hw_type(_adapter *padapter);
 void rtl8812au_set_intf_ops(struct _io_ops *pops);
 #endif
 
 void rtl8812au_set_intf_ops(struct _io_ops *pops);
 #endif
 
+#ifdef CONFIG_RTL8814A
+void rtl8814au_set_hw_type(_adapter *padapter);
+void rtl8814au_set_intf_ops(struct _io_ops     *pops);
+#endif /* CONFIG_RTL8814 */
+
 #ifdef CONFIG_RTL8192E
 void rtl8192eu_set_hw_type(_adapter *padapter);
 void rtl8192eu_set_intf_ops(struct _io_ops *pops);
 #ifdef CONFIG_RTL8192E
 void rtl8192eu_set_hw_type(_adapter *padapter);
 void rtl8192eu_set_intf_ops(struct _io_ops *pops);
index dff95b413506d9e386e12734e23a1ad613f5860f..bb309050e44e1ee190e86d60fb433d1755cab681 100755 (executable)
@@ -170,6 +170,8 @@ enum WIFI_REASON_CODE       {
 enum WIFI_STATUS_CODE {
        _STATS_SUCCESSFUL_                      = 0,
        _STATS_FAILURE_                         = 1,
 enum WIFI_STATUS_CODE {
        _STATS_SUCCESSFUL_                      = 0,
        _STATS_FAILURE_                         = 1,
+       _STATS_SEC_DISABLED_                    = 5,
+       _STATS_NOT_IN_SAME_BSS_         = 7,
        _STATS_CAP_FAIL_                        = 10,
        _STATS_NO_ASOC_                         = 11,
        _STATS_OTHER_                           = 12,
        _STATS_CAP_FAIL_                        = 10,
        _STATS_NO_ASOC_                         = 11,
        _STATS_OTHER_                           = 12,
@@ -179,6 +181,9 @@ enum WIFI_STATUS_CODE {
        _STATS_AUTH_TIMEOUT_            = 16,
        _STATS_UNABLE_HANDLE_STA_       = 17,
        _STATS_RATE_FAIL_                       = 18,
        _STATS_AUTH_TIMEOUT_            = 16,
        _STATS_UNABLE_HANDLE_STA_       = 17,
        _STATS_RATE_FAIL_                       = 18,
+       _STATS_DECLINE_REQ_                     = 37,
+       _STATS_INVALID_PARAMETERS_      = 38,
+       _STATS_INVALID_RSNIE_                   = 72,
 };
 
 /* Status codes (IEEE 802.11-2007, 7.3.1.9, Table 7-23) */
 };
 
 /* Status codes (IEEE 802.11-2007, 7.3.1.9, Table 7-23) */
index dac17a05bb445764e2b75376fb51c796c576ca55..3490b29fb667316e2fe36567f238ea5844086cee 100755 (executable)
@@ -73,7 +73,7 @@ typedef struct _NDIS_802_11_CONFIGURATION
     ULONG           Length;             // Length of structure
     ULONG           BeaconPeriod;       // units are Kusec
     ULONG           ATIMWindow;         // units are Kusec
     ULONG           Length;             // Length of structure
     ULONG           BeaconPeriod;       // units are Kusec
     ULONG           ATIMWindow;         // units are Kusec
-    ULONG           DSConfig;           // Frequency, units are kHz
+       ULONG           DSConfig;           /* channel number */
     NDIS_802_11_CONFIGURATION_FH    FHConfig;
 } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
 
     NDIS_802_11_CONFIGURATION_FH    FHConfig;
 } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
 
@@ -85,7 +85,8 @@ typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE
     Ndis802_11Infrastructure,
     Ndis802_11AutoUnknown,
     Ndis802_11InfrastructureMax,     // Not a real value, defined as upper bound
     Ndis802_11Infrastructure,
     Ndis802_11AutoUnknown,
     Ndis802_11InfrastructureMax,     // Not a real value, defined as upper bound
-    Ndis802_11APMode
+       Ndis802_11APMode,
+       Ndis802_11Monitor,
 } NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE;
 
 
 } NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE;
 
 
@@ -345,7 +346,7 @@ typedef struct _NDIS_802_11_CONFIGURATION
     ULONG           Length;             // Length of structure
     ULONG           BeaconPeriod;       // units are Kusec
     ULONG           ATIMWindow;         // units are Kusec
     ULONG           Length;             // Length of structure
     ULONG           BeaconPeriod;       // units are Kusec
     ULONG           ATIMWindow;         // units are Kusec
-    ULONG           DSConfig;           // Frequency, units are kHz
+       ULONG           DSConfig;           /* channel number */ 
     NDIS_802_11_CONFIGURATION_FH    FHConfig;
 } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
 
     NDIS_802_11_CONFIGURATION_FH    FHConfig;
 } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
 
index 45606cdde5d71bd4212f16ed5c7ba430325f247b..418d7932e6221580d70926cd760119434d5cd8af 100755 (executable)
@@ -71,7 +71,7 @@ int rtw_wifi_gpio_init(void)
                gpio_request(GPIO_WIFI_POWER, "wifi_power");
 
 #ifdef CONFIG_SDIO_HCI
                gpio_request(GPIO_WIFI_POWER, "wifi_power");
 
 #ifdef CONFIG_SDIO_HCI
-#if (defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B)) && (MP_DRIVER == 1) 
+#if (defined(CONFIG_RTL8723B)) && (MP_DRIVER == 1) 
        if(rtw_mp_mode==1){
                DBG_871X("%s GPIO_BT_RESET pin special for mp_test\n", __func__);       
                if (GPIO_BT_RESET > 0)
        if(rtw_mp_mode==1){
                DBG_871X("%s GPIO_BT_RESET pin special for mp_test\n", __func__);       
                if (GPIO_BT_RESET > 0)
@@ -94,7 +94,7 @@ int rtw_wifi_gpio_deinit(void)
                gpio_free(GPIO_WIFI_POWER);
 
 #ifdef CONFIG_SDIO_HCI
                gpio_free(GPIO_WIFI_POWER);
 
 #ifdef CONFIG_SDIO_HCI
-#if (defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B)) && (MP_DRIVER == 1) 
+#if ( defined(CONFIG_RTL8723B)) && (MP_DRIVER == 1) 
        if(rtw_mp_mode==1){
                DBG_871X("%s GPIO_BT_RESET pin special for mp_test\n", __func__);
                if (GPIO_BT_RESET > 0)
        if(rtw_mp_mode==1){
                DBG_871X("%s GPIO_BT_RESET pin special for mp_test\n", __func__);
                if (GPIO_BT_RESET > 0)
@@ -134,7 +134,7 @@ void rtw_wifi_gpio_wlan_ctrl(int onoff)
                case WLAN_POWER_ON:
                break;
 #ifdef CONFIG_SDIO_HCI
                case WLAN_POWER_ON:
                break;
 #ifdef CONFIG_SDIO_HCI
-#if (defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B)) && (MP_DRIVER == 1) 
+#if ( defined(CONFIG_RTL8723B)) && (MP_DRIVER == 1) 
                case WLAN_BT_PWDN_OFF:
                if(rtw_mp_mode==1)
                {
                case WLAN_BT_PWDN_OFF:
                if(rtw_mp_mode==1)
                {
@@ -168,13 +168,13 @@ void rtw_wifi_gpio_wlan_ctrl(int onoff)
 extern int sprd_3rdparty_gpio_wifi_power;
 #endif
 extern int sprd_3rdparty_gpio_wifi_pwd;
 extern int sprd_3rdparty_gpio_wifi_power;
 #endif
 extern int sprd_3rdparty_gpio_wifi_pwd;
-#if (defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B))
+#if  defined(CONFIG_RTL8723B)
 extern int sprd_3rdparty_gpio_bt_reset;
 #endif
 
 int rtw_wifi_gpio_init(void)
 {
 extern int sprd_3rdparty_gpio_bt_reset;
 #endif
 
 int rtw_wifi_gpio_init(void)
 {
-#if (defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B))
+#if defined(CONFIG_RTL8723B)
        if (sprd_3rdparty_gpio_bt_reset > 0)
                gpio_direction_output(sprd_3rdparty_gpio_bt_reset, 1);
 #endif
        if (sprd_3rdparty_gpio_bt_reset > 0)
                gpio_direction_output(sprd_3rdparty_gpio_bt_reset, 1);
 #endif
@@ -259,7 +259,7 @@ void rtw_wifi_gpio_wlan_ctrl(int onoff)
                case WLAN_BT_PWDN_OFF:
                        DBG_8192C("%s: call customer specific GPIO to set bt power down pin to 0\n",
                                __FUNCTION__);
                case WLAN_BT_PWDN_OFF:
                        DBG_8192C("%s: call customer specific GPIO to set bt power down pin to 0\n",
                                __FUNCTION__);
-#if (defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B))
+#if defined(CONFIG_RTL8723B)
                        if (sprd_3rdparty_gpio_bt_reset > 0)
                                gpio_set_value(sprd_3rdparty_gpio_bt_reset, 0);
 #endif
                        if (sprd_3rdparty_gpio_bt_reset > 0)
                                gpio_set_value(sprd_3rdparty_gpio_bt_reset, 0);
 #endif
@@ -268,7 +268,7 @@ void rtw_wifi_gpio_wlan_ctrl(int onoff)
                case WLAN_BT_PWDN_ON:
                        DBG_8192C("%s: callc customer specific GPIO to set bt power down pin to 1\n",
                                __FUNCTION__);
                case WLAN_BT_PWDN_ON:
                        DBG_8192C("%s: callc customer specific GPIO to set bt power down pin to 1\n",
                                __FUNCTION__);
-#if (defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B))
+#if defined(CONFIG_RTL8723B)
                        if (sprd_3rdparty_gpio_bt_reset > 0)
                                gpio_set_value(sprd_3rdparty_gpio_bt_reset, 1);
 #endif
                        if (sprd_3rdparty_gpio_bt_reset > 0)
                                gpio_set_value(sprd_3rdparty_gpio_bt_reset, 1);
 #endif
@@ -312,6 +312,37 @@ void rtw_wifi_gpio_wlan_ctrl(int onoff)
 {
 }
 
 {
 }
 
+#ifdef CONFIG_GPIO_API
+//this is a demo for extending GPIO pin[7] as interrupt mode
+struct net_device * rtl_net;
+extern int rtw_register_gpio_interrupt(struct net_device *netdev, int gpio_num, void(*callback)(u8 level));
+extern int rtw_disable_gpio_interrupt(struct net_device *netdev, int gpio_num);
+void gpio_int(u8 is_high)
+{
+       DBG_8192C("%s level=%d\n",__func__, is_high);
+}
+int register_net_gpio_init(void)
+{
+       rtl_net = dev_get_by_name(&init_net,"wlan0");
+       if(!rtl_net)
+       {
+               DBG_871X_LEVEL(_drv_always_, "rtl_net init fail!\n");
+               return -1;
+       }
+       return rtw_register_gpio_interrupt(rtl_net,7, gpio_int);
+}
+int unregister_net_gpio_init(void)
+{
+       rtl_net = dev_get_by_name(&init_net,"wlan0");
+       if(!rtl_net)
+       {
+               DBG_871X_LEVEL(_drv_always_, "rtl_net init fail!\n");
+               return -1;
+       }
+       return rtw_disable_gpio_interrupt(rtl_net,7);
+}
+#endif
+
 #else
 
 int rtw_wifi_gpio_init(void)
 #else
 
 int rtw_wifi_gpio_init(void)
index 12ce112da794678748f8cc8f770af286e601a89d..f3c693b83ffcc0f69f8271df3b4d2d594c47c98c 100755 (executable)
@@ -550,7 +550,7 @@ struct cfg80211_bss *rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_net
                _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);                \r
                SetFrameSubType(pbuf, WIFI_BEACON);\r
        } else {\r
                _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);                \r
                SetFrameSubType(pbuf, WIFI_BEACON);\r
        } else {\r
-               _rtw_memcpy(pwlanhdr->addr1, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+               _rtw_memcpy(pwlanhdr->addr1, adapter_mac_addr(padapter), ETH_ALEN);\r
                SetFrameSubType(pbuf, WIFI_PROBERSP);\r
        }\r
 \r
                SetFrameSubType(pbuf, WIFI_PROBERSP);\r
        }\r
 \r
@@ -675,11 +675,22 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter)
        struct cfg80211_bss *bss = NULL;\r
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0))\r
        struct wiphy *wiphy = pwdev->wiphy;\r
        struct cfg80211_bss *bss = NULL;\r
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0))\r
        struct wiphy *wiphy = pwdev->wiphy;\r
-       int freq = (int)cur_network->network.Configuration.DSConfig;\r
-       struct ieee80211_channel *chan;\r
+       int freq = 2412;\r
+       struct ieee80211_channel *notify_channel;\r
 #endif\r
 \r
        DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));\r
 #endif\r
 \r
        DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));\r
+\r
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0))   \r
+       if (cur_network->network.Configuration.DSConfig <= RTW_CH_MAX_2G_CHANNEL)\r
+               freq = rtw_ieee80211_channel_to_frequency(cur_network->network.Configuration.DSConfig, IEEE80211_BAND_2GHZ);\r
+       else\r
+               freq = rtw_ieee80211_channel_to_frequency(cur_network->network.Configuration.DSConfig, IEEE80211_BAND_5GHZ);\r
+       \r
+       if (0)\r
+               DBG_871X("chan: %d, freq: %d\n", cur_network->network.Configuration.DSConfig, freq);\r
+#endif\r
+\r
        if (pwdev->iftype != NL80211_IFTYPE_ADHOC) \r
        {\r
                return;\r
        if (pwdev->iftype != NL80211_IFTYPE_ADHOC) \r
        {\r
                return;\r
@@ -730,8 +741,8 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter)
        }\r
        //notify cfg80211 that device joined an IBSS\r
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0))\r
        }\r
        //notify cfg80211 that device joined an IBSS\r
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0))\r
-       chan = ieee80211_get_channel(wiphy, freq);\r
-       cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, chan, GFP_ATOMIC);\r
+       notify_channel = ieee80211_get_channel(wiphy, freq);\r
+       cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, notify_channel, GFP_ATOMIC);\r
 #else\r
        cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, GFP_ATOMIC);\r
 #endif\r
 #else\r
        cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, GFP_ATOMIC);\r
 #endif\r
@@ -1334,7 +1345,7 @@ _func_enter_;
                                        //DEBUG_ERR((" param->u.crypt.key_len=%d\n",param->u.crypt.key_len));\r
                                        DBG_871X(" ~~~~set sta key:unicastkey\n");\r
                                        \r
                                        //DEBUG_ERR((" param->u.crypt.key_len=%d\n",param->u.crypt.key_len));\r
                                        DBG_871X(" ~~~~set sta key:unicastkey\n");\r
                                        \r
-                                       rtw_setstakey_cmd(padapter, psta, _TRUE, _TRUE);\r
+                                       rtw_setstakey_cmd(padapter, psta, UNICAST_KEY, _TRUE);\r
                                }\r
                                else//group key\r
                                {\r
                                }\r
                                else//group key\r
                                {\r
@@ -1494,6 +1505,9 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
        _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);\r
        struct wireless_dev *rtw_wdev = padapter->rtw_wdev;\r
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;\r
        _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);\r
        struct wireless_dev *rtw_wdev = padapter->rtw_wdev;\r
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;\r
+#ifdef CONFIG_TDLS\r
+       struct sta_info *ptdls_sta;\r
+#endif /* CONFIG_TDLS */\r
        \r
        DBG_871X(FUNC_NDEV_FMT" adding key for %pM\n", FUNC_NDEV_ARG(ndev), mac_addr);\r
        DBG_871X("cipher=0x%x\n", params->cipher);\r
        \r
        DBG_871X(FUNC_NDEV_FMT" adding key for %pM\n", FUNC_NDEV_ARG(ndev), mac_addr);\r
        DBG_871X("cipher=0x%x\n", params->cipher);\r
@@ -1583,6 +1597,17 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
 \r
        if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)\r
        {\r
 \r
        if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)\r
        {\r
+#ifdef CONFIG_TDLS\r
+               if (rtw_tdls_is_driver_setup(padapter) == _FALSE && mac_addr) {\r
+                       ptdls_sta = rtw_get_stainfo(&padapter->stapriv, (void *)mac_addr);\r
+                       if (ptdls_sta != NULL && ptdls_sta->tdls_sta_state) {\r
+                               _rtw_memcpy(ptdls_sta->tpk.tk, params->key, params->key_len);\r
+                               rtw_tdls_set_key(padapter, ptdls_sta);\r
+                               goto addkey_end;\r
+                       }\r
+               }\r
+#endif /* CONFIG_TDLS */\r
+\r
                ret =  rtw_cfg80211_set_encryption(ndev, param, param_len);     \r
        }\r
        else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)\r
                ret =  rtw_cfg80211_set_encryption(ndev, param, param_len);     \r
        }\r
        else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)\r
@@ -1680,15 +1705,23 @@ static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
        _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);         \r
        struct security_priv *psecuritypriv = &padapter->securitypriv;\r
 \r
        _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);         \r
        struct security_priv *psecuritypriv = &padapter->securitypriv;\r
 \r
-               DBG_871X(FUNC_NDEV_FMT" key_index=%d"\r
-               #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)\r
-               ", unicast=%d, multicast=%d"\r
-               #endif\r
-               ".\n", FUNC_NDEV_ARG(ndev), key_index\r
-               #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)\r
-               , unicast, multicast\r
-               #endif\r
-               );\r
+#define SET_DEF_KEY_PARAM_FMT " key_index=%d"\r
+#define SET_DEF_KEY_PARAM_ARG , key_index\r
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38)) || defined(COMPAT_KERNEL_RELEASE)\r
+       #define SET_DEF_KEY_PARAM_FMT_2_6_38 ", unicast=%d, multicast=%d"\r
+       #define SET_DEF_KEY_PARAM_ARG_2_6_38 , unicast, multicast\r
+#else\r
+       #define SET_DEF_KEY_PARAM_FMT_2_6_38 ""\r
+       #define SET_DEF_KEY_PARAM_ARG_2_6_38\r
+#endif\r
+\r
+       DBG_871X(FUNC_NDEV_FMT\r
+               SET_DEF_KEY_PARAM_FMT\r
+               SET_DEF_KEY_PARAM_FMT_2_6_38\r
+               "\n", FUNC_NDEV_ARG(ndev)\r
+               SET_DEF_KEY_PARAM_ARG\r
+               SET_DEF_KEY_PARAM_ARG_2_6_38\r
+       );\r
 \r
        if ((key_index < WEP_KEYS) && ((psecuritypriv->dot11PrivacyAlgrthm == _WEP40_) || (psecuritypriv->dot11PrivacyAlgrthm == _WEP104_))) //set wep default key\r
        {\r
 \r
        if ((key_index < WEP_KEYS) && ((psecuritypriv->dot11PrivacyAlgrthm == _WEP40_) || (psecuritypriv->dot11PrivacyAlgrthm == _WEP104_))) //set wep default key\r
        {\r
@@ -1710,7 +1743,41 @@ static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
        return 0;\r
 \r
 }\r
        return 0;\r
 \r
 }\r
+#if defined(CONFIG_GTK_OL) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0))\r
+static int cfg80211_rtw_set_rekey_data(struct wiphy *wiphy,\r
+       struct net_device *ndev,\r
+       struct cfg80211_gtk_rekey_data *data)\r
+{\r
+       /*int i;*/\r
+       struct sta_info *psta;\r
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);\r
+       struct mlme_priv   *pmlmepriv = &padapter->mlmepriv;\r
+       struct sta_priv *pstapriv = &padapter->stapriv;\r
+       struct security_priv *psecuritypriv = &(padapter->securitypriv);\r
+\r
+       psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));\r
+       if (psta == NULL) {\r
+               DBG_871X("%s, : Obtain Sta_info fail\n", __func__);\r
+               return -1;\r
+       }\r
+\r
+       _rtw_memcpy(psta->kek, data->kek, NL80211_KEK_LEN);\r
+       /*printk("\ncfg80211_rtw_set_rekey_data KEK:");\r
+       for(i=0;i<NL80211_KEK_LEN; i++)\r
+               printk(" %02x ", psta->kek[i]);*/\r
+       _rtw_memcpy(psta->kck, data->kck, NL80211_KCK_LEN);\r
+       /*printk("\ncfg80211_rtw_set_rekey_data KCK:");\r
+       for(i=0;i<NL80211_KCK_LEN; i++)\r
+               printk(" %02x ", psta->kck[i]);*/\r
+       _rtw_memcpy(psta->replay_ctr, data->replay_ctr, NL80211_REPLAY_CTR_LEN);\r
+       psecuritypriv->binstallKCK_KEK = _TRUE;\r
+       /*printk("\nREPLAY_CTR: ");\r
+       for(i=0;i<RTW_REPLAY_CTR_LEN; i++)\r
+               printk(" %02x ", psta->replay_ctr[i]);*/\r
 \r
 \r
+       return 0;\r
+}\r
+#endif /*CONFIG_GTK_OL*/\r
 static int cfg80211_rtw_get_station(struct wiphy *wiphy,\r
                                struct net_device *ndev,\r
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0))\r
 static int cfg80211_rtw_get_station(struct wiphy *wiphy,\r
                                struct net_device *ndev,\r
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0))\r
@@ -1869,7 +1936,10 @@ static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
                pmlmeext->action_public_rxseq = 0xffff;\r
                pmlmeext->action_public_dialog_token = 0xff;\r
        }       \r
                pmlmeext->action_public_rxseq = 0xffff;\r
                pmlmeext->action_public_dialog_token = 0xff;\r
        }       \r
-               \r
+\r
+       /* initial default type */\r
+       ndev->type = ARPHRD_ETHER;\r
+\r
        switch (type) {\r
        case NL80211_IFTYPE_ADHOC:\r
                networkType = Ndis802_11IBSS;\r
        switch (type) {\r
        case NL80211_IFTYPE_ADHOC:\r
                networkType = Ndis802_11IBSS;\r
@@ -1908,7 +1978,14 @@ static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
                        }\r
                }\r
                #endif //CONFIG_P2P\r
                        }\r
                }\r
                #endif //CONFIG_P2P\r
-               break;          \r
+               break;\r
+       case NL80211_IFTYPE_MONITOR:\r
+               networkType = Ndis802_11Monitor;\r
+#if 0\r
+               ndev->type = ARPHRD_IEEE80211; /* IEEE 802.11 : 801 */\r
+#endif\r
+               ndev->type = ARPHRD_IEEE80211_RADIOTAP; /* IEEE 802.11 + radiotap header : 803 */\r
+               break;\r
        default:\r
                ret = -EOPNOTSUPP;\r
                goto exit;\r
        default:\r
                ret = -EOPNOTSUPP;\r
                goto exit;\r
@@ -1923,7 +2000,7 @@ static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
                goto exit;\r
        }\r
 \r
                goto exit;\r
        }\r
 \r
-       rtw_setopmode_cmd(padapter, networkType,_TRUE); \r
+       rtw_setopmode_cmd(padapter, networkType, _TRUE);\r
        \r
 exit:\r
 \r
        \r
 exit:\r
 \r
@@ -2185,6 +2262,7 @@ static int cfg80211_rtw_scan(struct wiphy *wiphy
        struct cfg80211_ssid *ssids = request->ssids;\r
        int social_channel = 0, j = 0;\r
        bool need_indicate_scan_done = _FALSE;\r
        struct cfg80211_ssid *ssids = request->ssids;\r
        int social_channel = 0, j = 0;\r
        bool need_indicate_scan_done = _FALSE;\r
+       bool ps_denied = _FALSE;\r
 \r
        _adapter *padapter;\r
        struct rtw_wdev_priv *pwdev_priv;\r
 \r
        _adapter *padapter;\r
        struct rtw_wdev_priv *pwdev_priv;\r
@@ -2243,6 +2321,12 @@ if (padapter->registrypriv.mp_mode == 1)
        pwdev_priv->scan_request = request;\r
        _exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);\r
 \r
        pwdev_priv->scan_request = request;\r
        _exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);\r
 \r
+       if (adapter_wdev_data(padapter)->block_scan == _TRUE) {\r
+               DBG_871X(FUNC_ADPT_FMT" wdev_priv.block_scan is set\n", FUNC_ADPT_ARG(padapter));\r
+               need_indicate_scan_done = _TRUE;\r
+               goto check_need_indicate_scan_done;\r
+       }\r
+\r
        if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)\r
        {\r
 #ifdef CONFIG_DEBUG_CFG80211\r
        if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)\r
        {\r
 #ifdef CONFIG_DEBUG_CFG80211\r
@@ -2264,6 +2348,7 @@ if (padapter->registrypriv.mp_mode == 1)
        }\r
 \r
        rtw_ps_deny(padapter, PS_DENY_SCAN);\r
        }\r
 \r
        rtw_ps_deny(padapter, PS_DENY_SCAN);\r
+       ps_denied = _TRUE;\r
        if(_FAIL == rtw_pwr_wakeup(padapter)) {\r
                need_indicate_scan_done = _TRUE;\r
                goto check_need_indicate_scan_done;\r
        if(_FAIL == rtw_pwr_wakeup(padapter)) {\r
                need_indicate_scan_done = _TRUE;\r
                goto check_need_indicate_scan_done;\r
@@ -2457,7 +2542,8 @@ check_need_indicate_scan_done:
        }\r
 \r
 cancel_ps_deny:\r
        }\r
 \r
 cancel_ps_deny:\r
-       rtw_ps_deny_cancel(padapter, PS_DENY_SCAN);\r
+       if (ps_denied == _TRUE)\r
+               rtw_ps_deny_cancel(padapter, PS_DENY_SCAN);\r
 \r
 exit:\r
        return ret;\r
 \r
 exit:\r
        return ret;\r
@@ -2900,7 +2986,21 @@ static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
        NDIS_802_11_SSID ndis_ssid;\r
        struct security_priv *psecuritypriv = &padapter->securitypriv;\r
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;\r
        NDIS_802_11_SSID ndis_ssid;\r
        struct security_priv *psecuritypriv = &padapter->securitypriv;\r
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;\r
+       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;\r
+       struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);\r
+       WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX *)(&(pmlmeinfo->network));\r
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))\r
+       struct cfg80211_chan_def *pch_def;\r
+#endif\r
+       struct ieee80211_channel *pch;\r
        int ret=0;\r
        int ret=0;\r
+\r
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))\r
+       pch_def = (struct cfg80211_chan_def *)(&params->chandef); \r
+       pch = (struct ieee80211_channel *) pch_def->chan;\r
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31))\r
+       pch = (struct ieee80211_channel *)(params->channel); \r
+#endif\r
        \r
        if(_FAIL == rtw_pwr_wakeup(padapter)) {\r
                ret= -EPERM;\r
        \r
        if(_FAIL == rtw_pwr_wakeup(padapter)) {\r
                ret= -EPERM;\r
@@ -2949,6 +3049,9 @@ static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
        \r
        ret = rtw_cfg80211_set_auth_type(psecuritypriv, NL80211_AUTHTYPE_OPEN_SYSTEM);\r
        rtw_set_802_11_authentication_mode(padapter, psecuritypriv->ndisauthtype);\r
        \r
        ret = rtw_cfg80211_set_auth_type(psecuritypriv, NL80211_AUTHTYPE_OPEN_SYSTEM);\r
        rtw_set_802_11_authentication_mode(padapter, psecuritypriv->ndisauthtype);\r
+\r
+       DBG_871X("%s: center_freq = %d\n", __func__, pch->center_freq);\r
+       pmlmeext->cur_channel = rtw_freq2ch(pch->center_freq);\r
        \r
        if (rtw_set_802_11_ssid(padapter, &ndis_ssid) == _FALSE) \r
        {\r
        \r
        if (rtw_set_802_11_ssid(padapter, &ndis_ssid) == _FALSE) \r
        {\r
@@ -3552,9 +3655,7 @@ void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, unsigned char *da, u
        fctrl = &(pwlanhdr->frame_ctl);\r
        *(fctrl) = 0;\r
 \r
        fctrl = &(pwlanhdr->frame_ctl);\r
        *(fctrl) = 0;\r
 \r
-       //_rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);\r
-       //_rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
-       _rtw_memcpy(pwlanhdr->addr1, myid(&(padapter->eeprompriv)), ETH_ALEN);\r
+       _rtw_memcpy(pwlanhdr->addr1, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pwlanhdr->addr2, da, ETH_ALEN);     \r
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);\r
 \r
        _rtw_memcpy(pwlanhdr->addr2, da, ETH_ALEN);     \r
        _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);\r
 \r
@@ -4124,9 +4225,9 @@ static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev,
                WLAN_BSSID_EX *pbss_network_ext = &adapter->mlmeextpriv.mlmext_info.network;\r
 \r
                if(0)\r
                WLAN_BSSID_EX *pbss_network_ext = &adapter->mlmeextpriv.mlmext_info.network;\r
 \r
                if(0)\r
-               DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%zu), from ie:(%s,%d)\n", FUNC_ADPT_ARG(adapter),\r
-                       settings->ssid, settings->ssid_len,\r
-                       pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength);\r
+                       DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%zu), from ie:(%s,%d)\n", FUNC_ADPT_ARG(adapter),\r
+                               settings->ssid, settings->ssid_len,\r
+                               pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength);\r
 \r
                _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len);\r
                pbss_network->Ssid.SsidLength = settings->ssid_len;\r
 \r
                _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len);\r
                pbss_network->Ssid.SsidLength = settings->ssid_len;\r
@@ -4134,9 +4235,9 @@ static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev,
                pbss_network_ext->Ssid.SsidLength = settings->ssid_len;\r
 \r
                if(0)\r
                pbss_network_ext->Ssid.SsidLength = settings->ssid_len;\r
 \r
                if(0)\r
-               DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),\r
-                       pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,\r
-                       pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);\r
+                       DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),\r
+                               pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,\r
+                               pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);\r
        }\r
 \r
        return ret;\r
        }\r
 \r
        return ret;\r
@@ -4171,9 +4272,28 @@ static int       cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev
 #endif\r
                               struct station_parameters *params)\r
 {\r
 #endif\r
                               struct station_parameters *params)\r
 {\r
+       int ret = 0;\r
+#ifdef CONFIG_TDLS\r
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);\r
+       struct sta_priv *pstapriv = &padapter->stapriv;\r
+       struct sta_info *psta;\r
+#endif /* CONFIG_TDLS */\r
        DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));\r
        \r
        DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));\r
        \r
-       return 0;\r
+#ifdef CONFIG_TDLS\r
+       psta = rtw_get_stainfo(pstapriv, mac);\r
+       if (psta == NULL) {\r
+               psta = rtw_alloc_stainfo(pstapriv, mac);\r
+               if (psta ==NULL) {\r
+                       DBG_871X("[%s] Alloc station for "MAC_FMT" fail\n", __FUNCTION__, MAC_ARG(mac));\r
+                       ret =-EOPNOTSUPP;\r
+                       goto exit;\r
+               }\r
+       }\r
+#endif /* CONFIG_TDLS */\r
+\r
+exit:\r
+       return ret;\r
 }\r
 \r
 static int     cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev,\r
 }\r
 \r
 static int     cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev,\r
@@ -4290,7 +4410,7 @@ static int        cfg80211_rtw_change_station(struct wiphy *wiphy, struct net_device *n
 \r
 struct sta_info *rtw_sta_info_get_by_idx(const int idx, struct sta_priv *pstapriv)\r
 \r
 \r
 struct sta_info *rtw_sta_info_get_by_idx(const int idx, struct sta_priv *pstapriv)\r
 \r
-{\r
+{\r\r
        _list   *phead, *plist;\r
        struct sta_info *psta = NULL;\r
        int i = 0;\r
        _list   *phead, *plist;\r
        struct sta_info *psta = NULL;\r
        int i = 0;\r
@@ -4366,10 +4486,37 @@ static int      cfg80211_rtw_set_channel(struct wiphy *wiphy
        #endif\r
        , struct ieee80211_channel *chan, enum nl80211_channel_type channel_type)\r
 {\r
        #endif\r
        , struct ieee80211_channel *chan, enum nl80211_channel_type channel_type)\r
 {\r
+       int chan_target = (u8) ieee80211_frequency_to_channel(chan->center_freq);\r
+       int chan_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;\r
+       int chan_width = CHANNEL_WIDTH_20;\r
+       _adapter *padapter = wiphy_to_adapter(wiphy);\r
+\r
        #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))\r
        DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));\r
        #endif\r
        #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))\r
        DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));\r
        #endif\r
-       \r
+\r
+       switch (channel_type) {\r
+       case NL80211_CHAN_NO_HT:\r
+       case NL80211_CHAN_HT20:\r
+               chan_width = CHANNEL_WIDTH_20;\r
+               chan_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;\r
+               break;\r
+       case NL80211_CHAN_HT40MINUS:\r
+               chan_width = CHANNEL_WIDTH_40;\r
+               chan_offset = HAL_PRIME_CHNL_OFFSET_UPPER;\r
+               break;\r
+       case NL80211_CHAN_HT40PLUS:\r
+               chan_width = CHANNEL_WIDTH_40;\r
+               chan_offset = HAL_PRIME_CHNL_OFFSET_LOWER;\r
+               break;\r
+       default:\r
+               chan_width = CHANNEL_WIDTH_20;\r
+               chan_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;\r
+               break;\r
+       }\r
+\r
+       set_channel_bwmode(padapter, chan_target, chan_offset, chan_width);\r
+\r
        return 0;\r
 }\r
 \r
        return 0;\r
 }\r
 \r
@@ -4606,7 +4753,7 @@ void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf,
        *(fctrl) = 0;\r
 \r
        _rtw_memcpy(pwlanhdr->addr1, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);\r
        *(fctrl) = 0;\r
 \r
        _rtw_memcpy(pwlanhdr->addr1, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);\r
-       _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);  \r
+       _rtw_memcpy(pwlanhdr->addr2, adapter_mac_addr(padapter), ETH_ALEN);\r
        _rtw_memcpy(pwlanhdr->addr3, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);\r
 \r
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);\r
        _rtw_memcpy(pwlanhdr->addr3, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);\r
 \r
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);\r
@@ -4752,7 +4899,6 @@ static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy,
        struct cfg80211_wifidirect_info *pcfg80211_wdinfo;\r
        u8 is_p2p_find = _FALSE;\r
 \r
        struct cfg80211_wifidirect_info *pcfg80211_wdinfo;\r
        u8 is_p2p_find = _FALSE;\r
 \r
-\r
 #ifndef CONFIG_RADIO_WORK\r
        #define RTW_ROCH_DURATION_ENLARGE\r
        #define RTW_ROCH_BACK_OP\r
 #ifndef CONFIG_RADIO_WORK\r
        #define RTW_ROCH_DURATION_ENLARGE\r
        #define RTW_ROCH_BACK_OP\r
@@ -4770,8 +4916,9 @@ static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy,
        #ifdef CONFIG_CONCURRENT_MODE\r
        is_p2p_find=(duration < (pwdinfo->ext_listen_interval))? _TRUE : _FALSE;\r
        #endif\r
        #ifdef CONFIG_CONCURRENT_MODE\r
        is_p2p_find=(duration < (pwdinfo->ext_listen_interval))? _TRUE : _FALSE;\r
        #endif\r
-       *cookie = ATOMIC_INC_RETURN(&pcfg80211_wdinfo->ro_ch_cookie_gen);\r
 \r
 \r
+       *cookie = ATOMIC_INC_RETURN(&pcfg80211_wdinfo->ro_ch_cookie_gen);\r
+       \r
        DBG_871X(FUNC_ADPT_FMT" ch:%u duration:%d, cookie:0x%llx\n", FUNC_ADPT_ARG(padapter), remain_ch, duration, *cookie);\r
 \r
        if(pcfg80211_wdinfo->is_ro_ch == _TRUE)\r
        DBG_871X(FUNC_ADPT_FMT" ch:%u duration:%d, cookie:0x%llx\n", FUNC_ADPT_ARG(padapter), remain_ch, duration, *cookie);\r
 \r
        if(pcfg80211_wdinfo->is_ro_ch == _TRUE)\r
@@ -4834,21 +4981,19 @@ static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy,
 \r
 \r
        rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);\r
 \r
 \r
        rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);\r
-       \r
-#ifdef RTW_ROCH_DURATION_ENLARGE\r
-       if(duration < 400)\r
-               duration = duration*3;//extend from exper.\r
-#endif /* RTW_ROCH_DURATION_ENLARGE */\r
+\r
+       #ifdef RTW_ROCH_DURATION_ENLARGE\r
+       if (duration < 400)\r
+               duration = duration * 3; /* extend from exper */\r
+       #endif\r
 \r
 #ifdef RTW_ROCH_BACK_OP\r
 \r
 #ifdef RTW_ROCH_BACK_OP\r
-#ifdef CONFIG_CONCURRENT_MODE\r
-       if   (check_buddy_fwstate(padapter, _FW_LINKED))\r
-       {\r
-               if (is_p2p_find)                                // p2p_find , duration<1000\r
-                       duration = duration +   pwdinfo->ext_listen_interval;\r
-               else                                                    // p2p_listen, duration=5000\r
-                       duration = pwdinfo->ext_listen_interval  \r
-                                    + (pwdinfo->ext_listen_interval/4);\r
+#ifdef CONFIG_CONCURRENT_MODE\r
+       if (check_buddy_fwstate(padapter, _FW_LINKED)) {\r
+               if (is_p2p_find) /* p2p_find , duration<1000 */\r
+                       duration = duration + pwdinfo->ext_listen_interval;\r
+               else /* p2p_listen, duration=5000 */\r
+                       duration = pwdinfo->ext_listen_interval + (pwdinfo->ext_listen_interval / 4);\r
        }\r
 #endif\r
 #endif /* RTW_ROCH_BACK_OP */\r
        }\r
 #endif\r
 #endif /* RTW_ROCH_BACK_OP */\r
@@ -4867,15 +5012,17 @@ static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy,
                                if(ATOMIC_READ(&pwdev_priv->switch_ch_to)==1 ||\r
                                        (remain_ch != pmlmeext->cur_channel))\r
                                {\r
                                if(ATOMIC_READ(&pwdev_priv->switch_ch_to)==1 ||\r
                                        (remain_ch != pmlmeext->cur_channel))\r
                                {\r
-                                       DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);           \r
-                                       issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);\r
-                               \r
+                                       if (check_buddy_fwstate(padapter, WIFI_FW_STATION_STATE)) {\r
+                                               DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);\r
+                                               issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);\r
+                                       }\r
+\r
                                        ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);\r
 \r
                                        #ifdef RTW_ROCH_BACK_OP\r
                                        DBG_8192C("%s, set switch ch timer, duration=%d\n", __func__, duration-pwdinfo->ext_listen_interval);\r
                                        _set_timer(&pwdinfo->ap_p2p_switch_timer, duration-pwdinfo->ext_listen_interval);\r
                                        ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);\r
 \r
                                        #ifdef RTW_ROCH_BACK_OP\r
                                        DBG_8192C("%s, set switch ch timer, duration=%d\n", __func__, duration-pwdinfo->ext_listen_interval);\r
                                        _set_timer(&pwdinfo->ap_p2p_switch_timer, duration-pwdinfo->ext_listen_interval);\r
-                                       #endif /* RTW_ROCH_BACK_OP */\r
+                                       #endif\r
                                }                       \r
                        }\r
                \r
                                }                       \r
                        }\r
                \r
@@ -5056,8 +5203,10 @@ static int _cfg80211_rtw_mgmt_tx(_adapter *padapter, u8 tx_ch, const u8 *buf, si
                        u16 ext_listen_period;\r
                        \r
                        if (ATOMIC_READ(&pwdev_priv->switch_ch_to)==1) {\r
                        u16 ext_listen_period;\r
                        \r
                        if (ATOMIC_READ(&pwdev_priv->switch_ch_to)==1) {\r
-                               DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);\r
-                               issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);\r
+                               if (check_buddy_fwstate(padapter, WIFI_FW_STATION_STATE)) {\r
+                                       DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);\r
+                                       issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);\r
+                               }\r
 \r
                                ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);\r
 \r
 \r
                                ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);\r
 \r
@@ -5373,12 +5522,15 @@ static int cfg80211_rtw_tdls_mgmt(struct wiphy *wiphy,
        size_t len)\r
 {\r
        _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);\r
        size_t len)\r
 {\r
        _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);\r
+       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;\r
+       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;\r
        int ret = 0;\r
        struct tdls_txmgmt txmgmt;\r
 \r
        int ret = 0;\r
        struct tdls_txmgmt txmgmt;\r
 \r
-       //TDLS: discard wpa_supplicant's frame mgmt\r
-       DBG_871X("%s %d\n", __FUNCTION__, __LINE__);\r
-       return 0;\r
+       if (rtw_tdls_is_driver_setup(padapter)) {\r
+               DBG_871X("Discard tdls action:%d, let driver to set up direct link\n", action_code);\r
+               goto discard;\r
+       }\r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        _rtw_memcpy(txmgmt.peer, peer, ETH_ALEN);\r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
        _rtw_memcpy(txmgmt.peer, peer, ETH_ALEN);\r
@@ -5387,53 +5539,52 @@ static int cfg80211_rtw_tdls_mgmt(struct wiphy *wiphy,
        txmgmt.status_code = status_code;\r
        txmgmt.len = len;\r
        txmgmt.buf = (u8 *)rtw_malloc(txmgmt.len);\r
        txmgmt.status_code = status_code;\r
        txmgmt.len = len;\r
        txmgmt.buf = (u8 *)rtw_malloc(txmgmt.len);\r
-       if (txmgmt.buf == NULL)\r
-       {\r
+       if (txmgmt.buf == NULL) {\r
                ret = -ENOMEM;\r
                goto bad;\r
        }\r
        _rtw_memcpy(txmgmt.buf, (void*)buf, txmgmt.len);\r
                ret = -ENOMEM;\r
                goto bad;\r
        }\r
        _rtw_memcpy(txmgmt.buf, (void*)buf, txmgmt.len);\r
-       txmgmt.external_support = _TRUE;\r
 \r
 \r
-//TDLS: Debug purpose\r
-#if 0\r
+/* Debug purpose */\r
+#if 1\r
        DBG_871X("%s %d\n", __FUNCTION__, __LINE__);\r
        DBG_871X("%s %d\n", __FUNCTION__, __LINE__);\r
-       DBG_871X("peer:"MAC_FMT" ", MAC_ARG(txmgmt.peer));\r
-       DBG_871X("action code:%d ", txmgmt.action_code);\r
-       DBG_871X("dialog:%d ", txmgmt.dialog_token);\r
-       DBG_871X("status code:%d\n", txmgmt.status_code);\r
-       if( txmgmt.len > 0 )\r
-       {\r
+       DBG_871X("peer:"MAC_FMT", action code:%d, dialog:%d, status code:%d\n",\r
+                               MAC_ARG(txmgmt.peer), txmgmt.action_code, \r
+                               txmgmt.dialog_token, txmgmt.status_code);\r
+       if (txmgmt.len > 0) {\r
                int i=0;\r
                for(;i < len; i++)\r
                int i=0;\r
                for(;i < len; i++)\r
-                       DBG_871X("%02x ", *(txmgmt.buf+i));\r
-                       DBG_871X("\n len:%d\n", txmgmt.len);\r
+                       printk("%02x ", *(txmgmt.buf+i));\r
+                       DBG_871X("len:%d\n", txmgmt.len);\r
        }\r
 #endif\r
 \r
        }\r
 #endif\r
 \r
-       switch(txmgmt.action_code) {\r
-               case TDLS_SETUP_REQUEST:\r
-                       issue_tdls_setup_req(padapter, &txmgmt, _TRUE);\r
-                       break;\r
-               case TDLS_SETUP_RESPONSE:\r
-                       issue_tdls_setup_rsp(padapter, &txmgmt);\r
-                       break;\r
-               case TDLS_SETUP_CONFIRM:\r
-                       issue_tdls_setup_cfm(padapter, &txmgmt);\r
-                       break;\r
-               case TDLS_TEARDOWN:\r
-                       break;\r
-               case TDLS_DISCOVERY_REQUEST:\r
-                       issue_tdls_dis_req(padapter, &txmgmt);\r
+       switch (txmgmt.action_code) {\r
+       case TDLS_SETUP_REQUEST:\r
+               issue_tdls_setup_req(padapter, &txmgmt, _TRUE);\r
+               break;\r
+       case TDLS_SETUP_RESPONSE:\r
+               issue_tdls_setup_rsp(padapter, &txmgmt);\r
+               break;\r
+       case TDLS_SETUP_CONFIRM:\r
+               issue_tdls_setup_cfm(padapter, &txmgmt);\r
+               break;\r
+       case TDLS_TEARDOWN:\r
+               issue_tdls_teardown(padapter, &txmgmt, _TRUE);\r
+               break;\r
+       case TDLS_DISCOVERY_REQUEST:\r
+               issue_tdls_dis_req(padapter, &txmgmt);\r
+               break;\r
+       case TDLS_DISCOVERY_RESPONSE:\r
+               issue_tdls_dis_rsp(padapter, &txmgmt, pmlmeinfo->enc_algo? _TRUE : _FALSE);\r
                break;\r
        }\r
 \r
 bad:\r
        if (txmgmt.buf)\r
                break;\r
        }\r
 \r
 bad:\r
        if (txmgmt.buf)\r
-       {\r
                rtw_mfree(txmgmt.buf, txmgmt.len);\r
                rtw_mfree(txmgmt.buf, txmgmt.len);\r
-       }\r
 \r
 \r
+discard:\r
        return ret;\r
 }\r
 \r
        return ret;\r
 }\r
 \r
@@ -5443,6 +5594,7 @@ static int cfg80211_rtw_tdls_oper(struct wiphy *wiphy,
        enum nl80211_tdls_operation oper)\r
 {\r
        _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);\r
        enum nl80211_tdls_operation oper)\r
 {\r
        _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);\r
+       struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;\r
        struct tdls_txmgmt      txmgmt;\r
        struct sta_info *ptdls_sta = NULL;\r
 \r
        struct tdls_txmgmt      txmgmt;\r
        struct sta_info *ptdls_sta = NULL;\r
 \r
@@ -5453,50 +5605,58 @@ static int cfg80211_rtw_tdls_oper(struct wiphy *wiphy,
 #endif //CONFIG_LPS\r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
 #endif //CONFIG_LPS\r
 \r
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));\r
-       if(peer)\r
+       if (peer)\r
                _rtw_memcpy(txmgmt.peer, peer, ETH_ALEN);\r
                _rtw_memcpy(txmgmt.peer, peer, ETH_ALEN);\r
-#if 0\r
-       CFG80211_TDLS_DISCOVERY_REQ,\r
-       CFG80211_TDLS_SETUP,\r
-       CFG80211_TDLS_TEARDOWN,\r
-       CFG80211_TDLS_ENABLE_LINK,\r
-       CFG80211_TDLS_DISABLE_LINK,\r
-       CFG80211_TDLS_ENABLE,\r
-       CFG80211_TDLS_DISABLE\r
-#endif\r
-       switch(oper) {\r
-               case NL80211_TDLS_DISCOVERY_REQ:\r
-                       issue_tdls_dis_req(padapter, &txmgmt);\r
-                       break;\r
-               case NL80211_TDLS_SETUP:\r
+\r
+       if (rtw_tdls_is_driver_setup(padapter)) {\r
+               /* these two cases are done by driver itself */\r
+               if (oper == NL80211_TDLS_ENABLE_LINK || oper == NL80211_TDLS_DISABLE_LINK)\r
+                       return 0;\r
+       }\r
+\r
+       switch (oper) {\r
+       case NL80211_TDLS_DISCOVERY_REQ:\r
+               issue_tdls_dis_req(padapter, &txmgmt);\r
+               break;\r
+       case NL80211_TDLS_SETUP:\r
 #ifdef CONFIG_WFD\r
 #ifdef CONFIG_WFD\r
-                       if ( _AES_ != padapter->securitypriv.dot11PrivacyAlgrthm )\r
-                       {\r
-                               if ( padapter->wdinfo.wfd_tdls_weaksec == _TRUE)\r
-                                       issue_tdls_setup_req(padapter, &txmgmt, _TRUE);\r
-                               else\r
-                                       DBG_871X( "[%s] Current link is not AES, SKIP sending the tdls setup request!!\n", __FUNCTION__ );\r
-                       }\r
-                       else\r
-#endif // CONFIG_WFD\r
-                       {\r
+               if ( _AES_ != padapter->securitypriv.dot11PrivacyAlgrthm ) {\r
+                       if ( padapter->wdinfo.wfd_tdls_weaksec == _TRUE)\r
                                issue_tdls_setup_req(padapter, &txmgmt, _TRUE);\r
                                issue_tdls_setup_req(padapter, &txmgmt, _TRUE);\r
-                       }\r
-                       break;\r
-               case NL80211_TDLS_TEARDOWN:\r
-                       ptdls_sta = rtw_get_stainfo( &(padapter->stapriv), txmgmt.peer);\r
-                       if(ptdls_sta != NULL)\r
-                       {\r
-                               txmgmt.status_code = _RSON_TDLS_TEAR_UN_RSN_;\r
-                               issue_tdls_teardown(padapter, &txmgmt, _FALSE);\r
-                       }\r
                        else\r
                        else\r
-                               DBG_871X( "TDLS peer not found\n");\r
-                       break;\r
-               case NL80211_TDLS_ENABLE_LINK:\r
-                       break;\r
-               case NL80211_TDLS_DISABLE_LINK:\r
-                       break;\r
+                               DBG_871X( "[%s] Current link is not AES, SKIP sending the tdls setup request!!\n", __FUNCTION__ );\r
+               } else\r
+#endif // CONFIG_WFD\r
+               {\r
+                       issue_tdls_setup_req(padapter, &txmgmt, _TRUE);\r
+               }\r
+               break;\r
+       case NL80211_TDLS_TEARDOWN:\r
+               ptdls_sta = rtw_get_stainfo( &(padapter->stapriv), txmgmt.peer);\r
+               if (ptdls_sta != NULL) {\r
+                       txmgmt.status_code = _RSON_TDLS_TEAR_UN_RSN_;\r
+                       issue_tdls_teardown(padapter, &txmgmt, _TRUE);\r
+               }else {\r
+                       DBG_871X( "TDLS peer not found\n");\r
+               }\r
+               break;\r
+       case NL80211_TDLS_ENABLE_LINK:\r
+               DBG_871X(FUNC_NDEV_FMT", NL80211_TDLS_ENABLE_LINK;mac:"MAC_FMT"\n", FUNC_NDEV_ARG(ndev), MAC_ARG(peer));\r
+               ptdls_sta = rtw_get_stainfo(&(padapter->stapriv), peer);\r
+               if (ptdls_sta != NULL) {\r
+                       ptdlsinfo->link_established = _TRUE;\r
+                       ptdls_sta->tdls_sta_state |= TDLS_LINKED_STATE;\r
+                       ptdls_sta->state |= _FW_LINKED;\r
+                       rtw_tdls_cmd(padapter, txmgmt.peer, TDLS_ESTABLISHED);\r
+               }\r
+               break;\r
+       case NL80211_TDLS_DISABLE_LINK:\r
+               DBG_871X(FUNC_NDEV_FMT", NL80211_TDLS_DISABLE_LINK;mac:"MAC_FMT"\n", FUNC_NDEV_ARG(ndev), MAC_ARG(peer));\r
+               ptdls_sta = rtw_get_stainfo(&(padapter->stapriv), peer);\r
+               if (ptdls_sta != NULL) {\r
+                       rtw_tdls_cmd(padapter, peer, TDLS_TEAR_STA );\r
+               }\r
+               break;\r
        }\r
        return 0;\r
 }\r
        }\r
        return 0;\r
 }\r
@@ -5991,14 +6151,14 @@ void rtw_cfg80211_init_wiphy(_adapter *padapter)
 \r
        DBG_8192C("%s:rf_type=%d\n", __func__, rf_type);\r
 \r
 \r
        DBG_8192C("%s:rf_type=%d\n", __func__, rf_type);\r
 \r
-       /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */\r
+       if (padapter->registrypriv.wireless_mode & WIRELESS_11G)\r
        {\r
                bands = wiphy->bands[IEEE80211_BAND_2GHZ];\r
                if(bands)\r
                        rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_2GHZ, rf_type);\r
        }\r
 \r
        {\r
                bands = wiphy->bands[IEEE80211_BAND_2GHZ];\r
                if(bands)\r
                        rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_2GHZ, rf_type);\r
        }\r
 \r
-       /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */\r
+       if (padapter->registrypriv.wireless_mode & WIRELESS_11A)\r
        {\r
                bands = wiphy->bands[IEEE80211_BAND_5GHZ];\r
                if(bands)\r
        {\r
                bands = wiphy->bands[IEEE80211_BAND_5GHZ];\r
                if(bands)\r
@@ -6009,7 +6169,7 @@ void rtw_cfg80211_init_wiphy(_adapter *padapter)
        rtw_regd_init(padapter);\r
 \r
        /* copy mac_addr to wiphy */\r
        rtw_regd_init(padapter);\r
 \r
        /* copy mac_addr to wiphy */\r
-       _rtw_memcpy(wiphy->perm_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);\r
+       _rtw_memcpy(wiphy->perm_addr, adapter_mac_addr(padapter), ETH_ALEN);\r
 \r
 }\r
 \r
 \r
 }\r
 \r
@@ -6053,9 +6213,9 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy)
                                                                | BIT(NL80211_IFTYPE_ADHOC)\r
 #ifdef CONFIG_AP_MODE\r
                                                                | BIT(NL80211_IFTYPE_AP)\r
                                                                | BIT(NL80211_IFTYPE_ADHOC)\r
 #ifdef CONFIG_AP_MODE\r
                                                                | BIT(NL80211_IFTYPE_AP)\r
-#ifndef CONFIG_RADIO_WORK\r
+                                                               #ifndef CONFIG_RADIO_WORK\r
                                                                | BIT(NL80211_IFTYPE_MONITOR)\r
                                                                | BIT(NL80211_IFTYPE_MONITOR)\r
-#endif /* !CONFIG_RADIO_WORK */\r
+                                                               #endif\r
 #endif\r
 #if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))\r
                                                                | BIT(NL80211_IFTYPE_P2P_CLIENT)\r
 #endif\r
 #if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))\r
                                                                | BIT(NL80211_IFTYPE_P2P_CLIENT)\r
@@ -6070,9 +6230,9 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy)
 #endif         \r
 \r
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0))\r
 #endif         \r
 \r
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0))\r
-#ifndef CONFIG_RADIO_WORK\r
+       #ifndef CONFIG_RADIO_WORK\r
        wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR);\r
        wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR);\r
-#endif /* !CONFIG_RADIO_WORK */\r
+       #endif\r
 #endif\r
 \r
        /*\r
 #endif\r
 \r
        /*\r
@@ -6085,8 +6245,10 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy)
 \r
        /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */\r
                wiphy->bands[IEEE80211_BAND_2GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_2GHZ);\r
 \r
        /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */\r
                wiphy->bands[IEEE80211_BAND_2GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_2GHZ);\r
+#ifdef CONFIG_IEEE80211_BAND_5GHZ\r
        /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */\r
                wiphy->bands[IEEE80211_BAND_5GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_5GHZ);\r
        /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */\r
                wiphy->bands[IEEE80211_BAND_5GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_5GHZ);\r
+#endif\r
        \r
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) && LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0))\r
        wiphy->flags |= WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS;\r
        \r
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) && LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0))\r
        wiphy->flags |= WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS;\r
@@ -6114,7 +6276,10 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy)
 \r
 #if defined(CONFIG_TDLS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))\r
        wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;\r
 \r
 #if defined(CONFIG_TDLS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))\r
        wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;\r
-       //wiphy->flags |= WIPHY_FLAG_TDLS_EXTERNAL_SETUP;\r
+#ifndef CONFIG_TDLS_DRIVER_SETUP\r
+       wiphy->flags |= WIPHY_FLAG_TDLS_EXTERNAL_SETUP; //Driver handles key exchange\r
+       wiphy->flags |= NL80211_ATTR_HT_CAPABILITY;\r
+#endif //CONFIG_TDLS_DRIVER_SETUP\r
 #endif /* CONFIG_TDLS */\r
 \r
        if(padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)\r
 #endif /* CONFIG_TDLS */\r
 \r
        if(padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)\r
@@ -6137,6 +6302,9 @@ static struct cfg80211_ops rtw_cfg80211_ops = {
        .get_key = cfg80211_rtw_get_key,\r
        .del_key = cfg80211_rtw_del_key,\r
        .set_default_key = cfg80211_rtw_set_default_key,\r
        .get_key = cfg80211_rtw_get_key,\r
        .del_key = cfg80211_rtw_del_key,\r
        .set_default_key = cfg80211_rtw_set_default_key,\r
+#if defined(CONFIG_GTK_OL) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0))\r
+       .set_rekey_data = cfg80211_rtw_set_rekey_data,\r
+#endif /*CONFIG_GTK_OL*/\r
        .get_station = cfg80211_rtw_get_station,\r
        .scan = cfg80211_rtw_scan,\r
        .set_wiphy_params = cfg80211_rtw_set_wiphy_params,\r
        .get_station = cfg80211_rtw_get_station,\r
        .scan = cfg80211_rtw_scan,\r
        .set_wiphy_params = cfg80211_rtw_set_wiphy_params,\r
index 3727922c43bad625f935b3055ac38d45259134d7..6c463cc3588455bded1f49c75d81ca88dc19597d 100755 (executable)
@@ -98,6 +98,7 @@ struct rtw_wdev_priv
 \r
        u8 bandroid_scan;\r
        bool block;\r
 \r
        u8 bandroid_scan;\r
        bool block;\r
+       bool block_scan;\r
        bool power_mgmt;\r
 \r
 #ifdef CONFIG_CONCURRENT_MODE\r
        bool power_mgmt;\r
 \r
 #ifdef CONFIG_CONCURRENT_MODE\r
@@ -146,8 +147,10 @@ bool rtw_cfg80211_pwr_mgmt(_adapter *adapter);
 #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, sig_dbm, buf, len, gfp)\r
 #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0))\r
 #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, gfp)\r
 #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, sig_dbm, buf, len, gfp)\r
 #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0))\r
 #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, gfp)\r
-#else\r
+#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3 , 18 , 0))\r
 #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len,0,gfp)\r
 #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len,0,gfp)\r
+#else\r
+#define rtw_cfg80211_rx_mgmt(adapter , freq , sig_dbm , buf , len , gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev , freq , sig_dbm , buf , len , 0)\r
 #endif\r
 \r
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))  && !defined(COMPAT_KERNEL_RELEASE)\r
 #endif\r
 \r
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))  && !defined(COMPAT_KERNEL_RELEASE)\r
index 1c6c50b91555bc770f2f426391a6c12db80bcfb6..cce7250f51c20d90c65b91d9deaaf73c9f3a225f 100755 (executable)
 #include <drv_types.h>
 
 //#ifdef CONFIG_MP_INCLUDED
 #include <drv_types.h>
 
 //#ifdef CONFIG_MP_INCLUDED
+#include <rtw_mp.h>
 #include <rtw_mp_ioctl.h>
 #include "../../hal/OUTSRC/phydm_precomp.h"
 //#endif
 
 #include <rtw_mp_ioctl.h>
 #include "../../hal/OUTSRC/phydm_precomp.h"
 //#endif
 
-#if defined(CONFIG_RTL8723A)
-#include "rtl8723a_hal.h"
-#include <rtw_bt_mp.h>
-#endif
-
 #if defined(CONFIG_RTL8723B)
 #include <rtw_bt_mp.h>
 #endif
 #if defined(CONFIG_RTL8723B)
 #include <rtw_bt_mp.h>
 #endif
@@ -1541,7 +1537,7 @@ _func_enter_;
                                        //DEBUG_ERR((" param->u.crypt.key_len=%d\n",param->u.crypt.key_len));
                                        DBG_871X(" ~~~~set sta key:unicastkey\n");
                                        
                                        //DEBUG_ERR((" param->u.crypt.key_len=%d\n",param->u.crypt.key_len));
                                        DBG_871X(" ~~~~set sta key:unicastkey\n");
                                        
-                                       rtw_setstakey_cmd(padapter, psta, _TRUE, _TRUE);
+                                       rtw_setstakey_cmd(padapter, psta, UNICAST_KEY, _TRUE);
                                }
                                else//group key
                                {                                       
                                }
                                else//group key
                                {                                       
@@ -1962,10 +1958,51 @@ static int rtw_wx_set_freq(struct net_device *dev,
                             struct iw_request_info *info, 
                             union iwreq_data *wrqu, char *extra)
 {      
                             struct iw_request_info *info, 
                             union iwreq_data *wrqu, char *extra)
 {      
+
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct  mlme_priv       *pmlmepriv = &(padapter->mlmepriv);
+       struct wlan_network  *cur_network = &(pmlmepriv->cur_network);
+       int exp = 1, freq = 0, div = 0;
+
        _func_enter_;
 
        RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_, ("+rtw_wx_set_freq\n"));
 
        _func_enter_;
 
        RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_, ("+rtw_wx_set_freq\n"));
 
+       if (wrqu->freq.m <= 1000) {
+               if (wrqu->freq.flags == IW_FREQ_AUTO) {
+                       padapter->mlmeextpriv.cur_channel = 1;
+                       DBG_871X("%s: channel is auto, set to channel 1\n", __func__);
+               } else {
+                       padapter->mlmeextpriv.cur_channel = wrqu->freq.m;
+                       DBG_871X("%s: set to channel %d\n", __func__, padapter->mlmeextpriv.cur_channel);
+               }
+       } else {
+               while (wrqu->freq.e) {
+                       exp *= 10;
+                       wrqu->freq.e--;
+               }
+
+               freq = wrqu->freq.m;
+               while (!(freq%10)) {
+                       freq /= 10;
+                       exp *= 10;
+               }
+
+               /* freq unit is MHz here */
+               div = 1000000/exp;
+
+               if (div)
+                       freq /= div;
+               else {
+                       div = exp/1000000;
+                       freq *= div;
+               }
+
+               /* If freq is invalid, rtw_freq2ch() will return channel 1 */
+               padapter->mlmeextpriv.cur_channel = rtw_freq2ch(freq);
+               DBG_871X("%s: set to channel %d\n", __func__, padapter->mlmeextpriv.cur_channel);
+       }
+
        _func_exit_;
        
        return 0;
        _func_exit_;
        
        return 0;
@@ -2014,9 +2051,21 @@ static int rtw_wx_set_mode(struct net_device *dev, struct iw_request_info *a,
                ret = -EPERM;
                goto exit;
        }
                ret = -EPERM;
                goto exit;
        }
-       
+
+       /* initial default type */
+       dev->type = ARPHRD_ETHER;
+
        switch(wrqu->mode)
        {
        switch(wrqu->mode)
        {
+               case IW_MODE_MONITOR:
+                       networkType = Ndis802_11Monitor;
+#if 0
+                       dev->type = ARPHRD_IEEE80211; /* IEEE 802.11 : 801 */
+#endif
+                       dev->type = ARPHRD_IEEE80211_RADIOTAP; /* IEEE 802.11 + radiotap header : 803 */
+                       DBG_871X("set_mode = IW_MODE_MONITOR\n");
+                       break;
+
                case IW_MODE_AUTO:
                        networkType = Ndis802_11AutoUnknown;
                        DBG_871X("set_mode = IW_MODE_AUTO\n");  
                case IW_MODE_AUTO:
                        networkType = Ndis802_11AutoUnknown;
                        DBG_871X("set_mode = IW_MODE_AUTO\n");  
@@ -2399,15 +2448,6 @@ static int rtw_wx_set_wap(struct net_device *dev,
        }
 #endif
 
        }
 #endif
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       if (dc_check_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING)== _TRUE)
-       {
-               DBG_871X("set bssid, but buddy_intf is under scanning or linking\n");
-               ret = -EINVAL;
-               goto exit;
-       }
-#endif
-
        rtw_ps_deny(padapter, PS_DENY_JOIN);
        if(_FAIL == rtw_pwr_wakeup(padapter))
        {
        rtw_ps_deny(padapter, PS_DENY_JOIN);
        if(_FAIL == rtw_pwr_wakeup(padapter))
        {
@@ -2564,12 +2604,12 @@ struct  iw_mlme
        {
                case IW_MLME_DEAUTH:
                                if(!rtw_set_802_11_disassociate(padapter))
        {
                case IW_MLME_DEAUTH:
                                if(!rtw_set_802_11_disassociate(padapter))
-                               ret = -1;
+                                       ret = -1;
                                break;
 
                case IW_MLME_DISASSOC:
                                if(!rtw_set_802_11_disassociate(padapter))
                                break;
 
                case IW_MLME_DISASSOC:
                                if(!rtw_set_802_11_disassociate(padapter))
-                                               ret = -1;
+                                       ret = -1;
 
                                break;
 
 
                                break;
 
@@ -2616,14 +2656,14 @@ _func_enter_;
                                goto exit;
                }
 #ifdef CONFIG_CONCURRENT_MODE
                                goto exit;
                }
 #ifdef CONFIG_CONCURRENT_MODE
-                       if (padapter->pbuddy_adapter) {
+               if (padapter->pbuddy_adapter) {
                                if (padapter->pbuddy_adapter->registrypriv.mp_mode == 1)
                                {
                                        DBG_871X(FUNC_ADPT_FMT ": MP mode block Scan request\n", FUNC_ADPT_ARG(padapter->pbuddy_adapter));
                                        ret = -1;
                                        goto exit;
                                }
                                if (padapter->pbuddy_adapter->registrypriv.mp_mode == 1)
                                {
                                        DBG_871X(FUNC_ADPT_FMT ": MP mode block Scan request\n", FUNC_ADPT_ARG(padapter->pbuddy_adapter));
                                        ret = -1;
                                        goto exit;
                                }
-                       }
+               }
 #endif //CONFIG_CONCURRENT_MODE
 #endif
 
 #endif //CONFIG_CONCURRENT_MODE
 #endif
 
@@ -2678,14 +2718,6 @@ _func_enter_;
        }
 #endif
 
        }
 #endif
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       if (dc_check_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING)== _TRUE)
-       {
-               indicate_wx_scan_complete_event(padapter);
-               goto exit;
-       }
-#endif
-
 #ifdef CONFIG_P2P
        if ( pwdinfo->p2p_state != P2P_STATE_NONE )
        {
 #ifdef CONFIG_P2P
        if ( pwdinfo->p2p_state != P2P_STATE_NONE )
        {
@@ -2872,11 +2904,7 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
 #ifdef CONFIG_P2P
        if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
        {
 #ifdef CONFIG_P2P
        if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
        {
-               //      P2P is enabled
-               if ( padapter->chip_type == RTL8192D )
-                       wait_for_surveydone = 300;      //      Because the 8192du supports more channels.
-               else
-                       wait_for_surveydone = 200;
+               wait_for_surveydone = 200;
        }
        else
        {
        }
        else
        {
@@ -2907,16 +2935,6 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
                #endif
        ;
 
                #endif
        ;
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       while(dc_check_fwstate(padapter, wait_status)== _TRUE)
-       {
-               rtw_msleep_os(30);
-               cnt++;
-               if(cnt > wait_for_surveydone )
-                       break;
-       }
-#endif // CONFIG_DUALMAC_CONCURRENT
-
        while(check_fwstate(pmlmepriv, wait_status) == _TRUE)
        {       
                rtw_msleep_os(30);
        while(check_fwstate(pmlmepriv, wait_status) == _TRUE)
        {       
                rtw_msleep_os(30);
@@ -2999,7 +3017,10 @@ static int rtw_wx_set_essid(struct net_device *dev,
        #ifdef DBG_IOCTL
        DBG_871X("DBG_IOCTL %s:%d\n",__FUNCTION__, __LINE__);
        #endif
        #ifdef DBG_IOCTL
        DBG_871X("DBG_IOCTL %s:%d\n",__FUNCTION__, __LINE__);
        #endif
-       
+       #ifdef CONFIG_WEXT_DONT_JOIN_BYSSID
+       DBG_871X("%s: CONFIG_WEXT_DONT_JOIN_BYSSID be defined!! only allow bssid joining\n", __func__);
+       return -EPERM;
+       #endif
 /*
 #ifdef CONFIG_CONCURRENT_MODE
        if(padapter->iface_type > PRIMARY_IFACE)
 /*
 #ifdef CONFIG_CONCURRENT_MODE
        if(padapter->iface_type > PRIMARY_IFACE)
@@ -3021,15 +3042,6 @@ static int rtw_wx_set_essid(struct net_device *dev,
        }
 #endif
 
        }
 #endif
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       if (dc_check_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING)== _TRUE)
-       {
-               DBG_871X("set bssid, but buddy_intf is under scanning or linking\n");
-               ret = -EINVAL;
-               goto exit;
-       }
-#endif
-
        RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
                 ("+rtw_wx_set_essid: fw_state=0x%08x\n", get_fwstate(pmlmepriv)));
 
        RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
                 ("+rtw_wx_set_essid: fw_state=0x%08x\n", get_fwstate(pmlmepriv)));
 
@@ -5720,13 +5732,10 @@ static int rtw_p2p_get_invitation_procedure(struct net_device *dev,
                sprintf(inv_proc_str, "\nIP=-1");
        } else
        {
                sprintf(inv_proc_str, "\nIP=-1");
        } else
        {
-               if (attr_content[0] && 0x20)
-               {
+               if ((attr_content[0] & 0x20) == 0x20)
                        sprintf(inv_proc_str, "\nIP=1");
                        sprintf(inv_proc_str, "\nIP=1");
-               } else
-               {
+               else
                        sprintf(inv_proc_str, "\nIP=0");
                        sprintf(inv_proc_str, "\nIP=0");
-               }
        }
 
        wrqu->data.length = strlen(inv_proc_str);
        }
 
        wrqu->data.length = strlen(inv_proc_str);
@@ -7059,7 +7068,7 @@ static int rtw_p2p_get2(struct net_device *dev,
 
        if (copy_from_user(buffer, wrqu->data.pointer, wrqu->data.length))
        {
 
        if (copy_from_user(buffer, wrqu->data.pointer, wrqu->data.length))
        {
-               ret EFAULT;
+               ret = -EFAULT;
                goto bad;
        }
 
                goto bad;
        }
 
@@ -7290,7 +7299,6 @@ static int rtw_dbg_port(struct net_device *dev,
                                case 0x01: //dbg mode
                                        padapter->recvpriv.is_signal_dbg = 1;
                                        extra_arg = extra_arg>100?100:extra_arg;
                                case 0x01: //dbg mode
                                        padapter->recvpriv.is_signal_dbg = 1;
                                        extra_arg = extra_arg>100?100:extra_arg;
-                                       extra_arg = extra_arg<0?0:extra_arg;
                                        padapter->recvpriv.signal_strength_dbg=extra_arg;
                                        break;
                        }
                                        padapter->recvpriv.signal_strength_dbg=extra_arg;
                                        break;
                        }
@@ -7521,9 +7529,6 @@ static int rtw_dbg_port(struct net_device *dev,
                                        psta = rtw_get_stainfo(pstapriv, cur_network->network.MacAddress);
                                        if(psta)
                                        {
                                        psta = rtw_get_stainfo(pstapriv, cur_network->network.MacAddress);
                                        if(psta)
                                        {
-                                               int i;
-                                               struct recv_reorder_ctrl *preorder_ctrl;
-                                       
                                                DBG_871X("SSID=%s\n", cur_network->network.Ssid.Ssid);
                                                DBG_871X("sta's macaddr:" MAC_FMT "\n", MAC_ARG(psta->hwaddr));
                                                DBG_871X("cur_channel=%d, cur_bwmode=%d, cur_ch_offset=%d\n", pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
                                                DBG_871X("SSID=%s\n", cur_network->network.Ssid.Ssid);
                                                DBG_871X("sta's macaddr:" MAC_FMT "\n", MAC_ARG(psta->hwaddr));
                                                DBG_871X("cur_channel=%d, cur_bwmode=%d, cur_ch_offset=%d\n", pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
@@ -7535,16 +7540,8 @@ static int rtw_dbg_port(struct net_device *dev,
                                                DBG_871X("ampdu_enable = %d\n", psta->htpriv.ampdu_enable);     
                                                DBG_871X("agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
 #endif //CONFIG_80211N_HT
                                                DBG_871X("ampdu_enable = %d\n", psta->htpriv.ampdu_enable);     
                                                DBG_871X("agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
 #endif //CONFIG_80211N_HT
-                                               
-                                               for(i=0;i<16;i++)
-                                               {                                                       
-                                                       preorder_ctrl = &psta->recvreorder_ctrl[i];
-                                                       if(preorder_ctrl->enable)
-                                                       {
-                                                               DBG_871X("tid=%d, indicate_seq=%d\n", i, preorder_ctrl->indicate_seq);
-                                                       }
-                                               }       
-                                                       
+
+                                               sta_rx_reorder_ctl_dump(RTW_DBGDUMP, psta);
                                        }
                                        else
                                        {                                                       
                                        }
                                        else
                                        {                                                       
@@ -7552,13 +7549,7 @@ static int rtw_dbg_port(struct net_device *dev,
                                        }                                       
                                        break;
                                case 0x06:
                                        }                                       
                                        break;
                                case 0x06:
-                                       {
-                                               u32     ODMFlag;
-                                               rtw_hal_get_hwreg(padapter, HW_VAR_DM_FLAG, (u8*)(&ODMFlag));
-                                               DBG_871X("(B)DMFlag=0x%x, arg=0x%x\n", ODMFlag, arg);
-                                               ODMFlag = (u32)(0x0f&arg);
-                                               DBG_871X("(A)DMFlag=0x%x\n", ODMFlag);
-                                               rtw_hal_set_hwreg(padapter, HW_VAR_DM_FLAG, (u8 *)(&ODMFlag));
+                                       {                                               
                                        }
                                        break;
                                case 0x07:
                                        }
                                        break;
                                case 0x07:
@@ -7583,9 +7574,8 @@ static int rtw_dbg_port(struct net_device *dev,
                                        break;  
                                case 0x09:
                                        {
                                        break;  
                                case 0x09:
                                        {
-                                               int i, j;
+                                               int i;
                                                _list   *plist, *phead;
                                                _list   *plist, *phead;
-                                               struct recv_reorder_ctrl *preorder_ctrl;
                                                
 #ifdef CONFIG_AP_MODE
                                                DBG_871X("sta_dz_bitmap=0x%x, tim_bitmap=0x%x\n", pstapriv->sta_dz_bitmap, pstapriv->tim_bitmap);
                                                
 #ifdef CONFIG_AP_MODE
                                                DBG_871X("sta_dz_bitmap=0x%x, tim_bitmap=0x%x\n", pstapriv->sta_dz_bitmap, pstapriv->tim_bitmap);
@@ -7624,18 +7614,8 @@ static int rtw_dbg_port(struct net_device *dev,
                                                                        DBG_871X("qos_info=0x%x\n", psta->qos_info);
 #endif
                                                                        DBG_871X("dot118021XPrivacy=0x%x\n", psta->dot118021XPrivacy);
                                                                        DBG_871X("qos_info=0x%x\n", psta->qos_info);
 #endif
                                                                        DBG_871X("dot118021XPrivacy=0x%x\n", psta->dot118021XPrivacy);
-                                                                       
-                                                                       
-                                               
-                                                                       for(j=0;j<16;j++)
-                                                                       {                                                       
-                                                                               preorder_ctrl = &psta->recvreorder_ctrl[j];
-                                                                               if(preorder_ctrl->enable)
-                                                                               {
-                                                                                       DBG_871X("tid=%d, indicate_seq=%d\n", j, preorder_ctrl->indicate_seq);
-                                                                               }
-                                                                       }               
-                                                                       
+
+                                                                       sta_rx_reorder_ctl_dump(RTW_DBGDUMP, psta);
                                                                }                                                       
                        
                                                        }
                                                                }                                                       
                        
                                                        }
@@ -8021,31 +8001,9 @@ static int rtw_dbg_port(struct net_device *dev,
                                        }
                                        break;          
 
                                        }
                                        break;          
 
-                               case 0xee://turn on/off dynamic funcs
+                               case 0xee:
                                        {
                                        {
-                                               u32 odm_flag;
-
-                                               if(0xf==extra_arg){
-                                                       rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC,&odm_flag);                                                   
-                                                       DBG_871X(" === DMFlag(0x%08x) === \n",odm_flag);
-                                                       DBG_871X("extra_arg = 0  - disable all dynamic func \n");
-                                                       DBG_871X("extra_arg = 1  - disable DIG- BIT(0)\n");
-                                                       DBG_871X("extra_arg = 2  - disable High power - BIT(1)\n");
-                                                       DBG_871X("extra_arg = 3  - disable tx power tracking - BIT(2)\n");
-                                                       DBG_871X("extra_arg = 4  - disable BT coexistence - BIT(3)\n");
-                                                       DBG_871X("extra_arg = 5  - disable antenna diversity - BIT(4)\n");
-                                                       DBG_871X("extra_arg = 6  - enable all dynamic func \n");                                                        
-                                               }
-                                               else{
-                                                       /*      extra_arg = 0  - disable all dynamic func
-                                                               extra_arg = 1  - disable DIG
-                                                               extra_arg = 2  - disable tx power tracking
-                                                               extra_arg = 3  - turn on all dynamic func
-                                                       */                      
-                                                       rtw_hal_set_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &(extra_arg));
-                                                       rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC,&odm_flag);                                                   
-                                                       DBG_871X(" === DMFlag(0x%08x) === \n",odm_flag);
-                                               }
+                                               DBG_871X(" === please control /proc  to trun on/off PHYDM func === \n");
                                        }
                                        break;
 
                                        }
                                        break;
 
@@ -9108,7 +9066,7 @@ static int rtw_set_hidden_ssid(struct net_device *dev, struct ieee_param *param,
        int ie_len;
        u8 *ssid_ie;
        char ssid[NDIS_802_11_LENGTH_SSID + 1];
        int ie_len;
        u8 *ssid_ie;
        char ssid[NDIS_802_11_LENGTH_SSID + 1];
-       sint ssid_len;
+       sint ssid_len = 0;
        u8 ignore_broadcast_ssid;
 
        if(check_fwstate(mlmepriv, WIFI_AP_STATE) != _TRUE)
        u8 ignore_broadcast_ssid;
 
        if(check_fwstate(mlmepriv, WIFI_AP_STATE) != _TRUE)
@@ -9130,10 +9088,10 @@ static int rtw_set_hidden_ssid(struct net_device *dev, struct ieee_param *param,
                ssid[ssid_len] = 0x0;
 
                if(0)
                ssid[ssid_len] = 0x0;
 
                if(0)
-               DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%d), from ie:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
-                       ssid, ssid_len,
-                       pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
-                       pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
+                       DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%d), from ie:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
+                               ssid, ssid_len,
+                               pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
+                               pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
 
                _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)ssid, ssid_len);
                pbss_network->Ssid.SsidLength = ssid_len;
 
                _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)ssid, ssid_len);
                pbss_network->Ssid.SsidLength = ssid_len;
@@ -9141,9 +9099,9 @@ static int rtw_set_hidden_ssid(struct net_device *dev, struct ieee_param *param,
                pbss_network_ext->Ssid.SsidLength = ssid_len;
 
                if(0)
                pbss_network_ext->Ssid.SsidLength = ssid_len;
 
                if(0)
-               DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
-                       pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
-                       pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
+                       DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
+                               pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
+                               pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
        }
 
        DBG_871X(FUNC_ADPT_FMT" ignore_broadcast_ssid:%d, %s,%d\n", FUNC_ADPT_ARG(adapter),
        }
 
        DBG_871X(FUNC_ADPT_FMT" ignore_broadcast_ssid:%d, %s,%d\n", FUNC_ADPT_ARG(adapter),
@@ -9649,8 +9607,7 @@ static int rtw_ap_wowlan_ctrl(struct net_device *dev,
                rtw_hal_disable_interrupt(padapter); // It need wait for leaving 32K.
 
                // 2.1 clean interupt
                rtw_hal_disable_interrupt(padapter); // It need wait for leaving 32K.
 
                // 2.1 clean interupt
-               if (padapter->HalFunc.clear_interrupt)
-                       padapter->HalFunc.clear_interrupt(padapter);
+               rtw_hal_clear_interrupt(padapter);
 
                poidparam.subcode = WOWLAN_AP_ENABLE;
 
 
                poidparam.subcode = WOWLAN_AP_ENABLE;
 
@@ -9663,8 +9620,7 @@ static int rtw_ap_wowlan_ctrl(struct net_device *dev,
 
                rtw_hal_disable_interrupt(padapter);
 
 
                rtw_hal_disable_interrupt(padapter);
 
-               if (padapter->HalFunc.clear_interrupt)
-                       padapter->HalFunc.clear_interrupt(padapter);
+               rtw_hal_clear_interrupt(padapter);
 
                poidparam.subcode = WOWLAN_AP_ENABLE;
 
 
                poidparam.subcode = WOWLAN_AP_ENABLE;
 
@@ -9733,12 +9689,12 @@ static int rtw_mp_efuse_get(struct net_device *dev,
                        union iwreq_data *wdata, char *extra)
 {
        PADAPTER padapter = rtw_netdev_priv(dev);
                        union iwreq_data *wdata, char *extra)
 {
        PADAPTER padapter = rtw_netdev_priv(dev);
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+       
        PEFUSE_HAL pEfuseHal;
        struct iw_point *wrqu;
        
        PEFUSE_HAL pEfuseHal;
        struct iw_point *wrqu;
        
-       u8      *PROMContent = pEEPROM->efuse_eeprom_data;
+       u8      *PROMContent = pHalData->efuse_eeprom_data;
        u8 ips_mode = IPS_NUM; // init invalid value
        u8 lps_mode = PS_MODE_NUM; // init invalid value
        struct pwrctrl_priv *pwrctrlpriv ;
        u8 ips_mode = IPS_NUM; // init invalid value
        u8 lps_mode = PS_MODE_NUM; // init invalid value
        struct pwrctrl_priv *pwrctrlpriv ;
@@ -9801,7 +9757,7 @@ static int rtw_mp_efuse_get(struct net_device *dev,
        #endif
        
        if(strcmp(tmp[0], "status") == 0){
        #endif
        
        if(strcmp(tmp[0], "status") == 0){
-               sprintf(extra, "Load File efuse=%s,Load File MAC=%s",(pEEPROM->bloadfile_fail_flag? "FAIL" : "OK"),(pEEPROM->bloadmac_fail_flag? "FAIL" : "OK"));
+               sprintf(extra, "Load File efuse=%s,Load File MAC=%s",(pHalData->bloadfile_fail_flag? "FAIL" : "OK"),(pHalData->bloadmac_fail_flag? "FAIL" : "OK"));
 
                  goto exit;
        }
 
                  goto exit;
        }
@@ -9832,7 +9788,7 @@ static int rtw_mp_efuse_get(struct net_device *dev,
        else if (strcmp(tmp[0], "realmap") == 0)
        {
                mapLen = EFUSE_MAP_SIZE;
        else if (strcmp(tmp[0], "realmap") == 0)
        {
                mapLen = EFUSE_MAP_SIZE;
-               if (rtw_efuse_map_read(padapter, EFUSE_WIFI , mapLen, pEfuseHal->fakeEfuseInitMap) == _FAIL)
+               if (rtw_efuse_mask_map_read(padapter, EFUSE_WIFI , mapLen, pEfuseHal->fakeEfuseInitMap) == _FAIL)
                {
                        DBG_871X("%s: read realmap Fail!!\n", __FUNCTION__);
                        err = -EFAULT;
                {
                        DBG_871X("%s: read realmap Fail!!\n", __FUNCTION__);
                        err = -EFAULT;
@@ -9890,9 +9846,9 @@ static int rtw_mp_efuse_get(struct net_device *dev,
                        goto exit;
                }
 
                        goto exit;
                }
 
-               if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL)
+               if (rtw_efuse_mask_map_read(padapter, addr, cnts, data) == _FAIL)
                {
                {
-                       DBG_871X("%s: rtw_efuse_map_read error!\n", __FUNCTION__);
+                       DBG_871X("%s: rtw_efuse_mask_map_read error!\n", __func__);
                        err = -EFAULT;
                        goto exit;
                }
                        err = -EFAULT;
                        goto exit;
                }
@@ -9909,6 +9865,7 @@ static int rtw_mp_efuse_get(struct net_device *dev,
        {
                addr = 0;
                mapLen = EFUSE_MAX_SIZE;
        {
                addr = 0;
                mapLen = EFUSE_MAX_SIZE;
+               DBG_871X("EFUSE_MAX_SIZE =%d\n",EFUSE_MAX_SIZE);
                if (rtw_efuse_access(padapter, _FALSE, addr, mapLen, rawdata) == _FAIL)
                {
                        DBG_871X("%s: rtw_efuse_access Fail!!\n", __FUNCTION__);
                if (rtw_efuse_access(padapter, _FALSE, addr, mapLen, rawdata) == _FAIL)
                {
                        DBG_871X("%s: rtw_efuse_access Fail!!\n", __FUNCTION__);
@@ -9918,7 +9875,8 @@ static int rtw_mp_efuse_get(struct net_device *dev,
                _rtw_memset(extra,'\0',strlen(extra));
                //              DBG_871X("%s: realraw={\n", __FUNCTION__);
                                sprintf(extra, "\n0x00\t");
                _rtw_memset(extra,'\0',strlen(extra));
                //              DBG_871X("%s: realraw={\n", __FUNCTION__);
                                sprintf(extra, "\n0x00\t");
-                               for (i=0; i< mapLen; i++)
+
+                               for (i=0; i< 512 ; i++)
                                {
                //                      DBG_871X("%02X", rawdata[i]);
                                        sprintf(extra, "%s%02X", extra, rawdata[i]);
                                {
                //                      DBG_871X("%02X", rawdata[i]);
                                        sprintf(extra, "%s%02X", extra, rawdata[i]);
@@ -9937,35 +9895,41 @@ static int rtw_mp_efuse_get(struct net_device *dev,
                                }
                //              DBG_871X("}\n");
        }
                                }
                //              DBG_871X("}\n");
        }
-       else if (strcmp(tmp[0], "mac") == 0)
+       else if (strcmp(tmp[0], "realrawb") == 0)
        {
        {
-               #ifdef CONFIG_RTL8192C
-               addr = EEPROM_MAC_ADDR_92C;
-               #endif // CONFIG_RTL8192C
-               #ifdef CONFIG_RTL8192D
-                       #ifdef CONFIG_USB_HCI
-                       if (pHalData->interfaceIndex == 0)
-                               addr = EEPROM_MAC_ADDR_MAC0_92DU;
-                       else
-                               addr = EEPROM_MAC_ADDR_MAC1_92DU;
-                       #else
-                       if (pHalData->interfaceIndex == 0)
-                               addr = EEPROM_MAC_ADDR_MAC0_92DE;
-                       else
-                               addr = EEPROM_MAC_ADDR_MAC1_92DE;
-                       #endif
-               #endif // CONFIG_RTL8192D
-               #ifdef CONFIG_RTL8723A
-                       #ifdef CONFIG_SDIO_HCI
-                       addr = EEPROM_MAC_ADDR_8723AS;
-                       #endif
-                       #ifdef CONFIG_GSPI_HCI
-                       addr = EEPROM_MAC_ADDR_8723AS;
-                       #endif
-                       #ifdef CONFIG_USB_HCI
-                       addr = EEPROM_MAC_ADDR_8723AU;
-                       #endif
-               #endif // CONFIG_RTL8723A
+               addr = 0;
+               mapLen = EFUSE_MAX_SIZE;
+               DBG_871X("EFUSE_MAX_SIZE =%d   \n",EFUSE_MAX_SIZE);
+               if (rtw_efuse_access(padapter, _FALSE, addr, mapLen, rawdata) == _FAIL)
+               {
+                       DBG_871X("%s: rtw_efuse_access Fail!!\n", __FUNCTION__);
+                       err = -EFAULT;
+                       goto exit;
+               }
+               _rtw_memset(extra,'\0',strlen(extra));
+               //              DBG_871X("%s: realraw={\n", __FUNCTION__);
+                               sprintf(extra, "\n0x00\t");
+                               for (i= 512; i< mapLen; i++)
+                               {
+               //                      DBG_871X("%02X", rawdata[i]);
+                                       sprintf(extra, "%s%02X", extra, rawdata[i]);
+                                       if ((i & 0xF) == 0xF) {
+               //                              DBG_871X("\n");
+                                               sprintf(extra, "%s\n", extra);
+                                               sprintf(extra, "%s0x%02x\t", extra, i+1);
+                                       }
+                                       else if ((i & 0x7) == 0x7){
+               //                              DBG_871X("\t");
+                                               sprintf(extra, "%s \t", extra);
+                                       } else {
+               //                              DBG_871X(" ");
+                                               sprintf(extra, "%s ", extra);
+                                       }
+                               }
+               //              DBG_871X("}\n");
+       }
+       else if (strcmp(tmp[0], "mac") == 0)
+       {               
                #ifdef CONFIG_RTL8188E
                        #ifdef CONFIG_USB_HCI
                        addr = EEPROM_MAC_ADDR_88EU;
                #ifdef CONFIG_RTL8188E
                        #ifdef CONFIG_USB_HCI
                        addr = EEPROM_MAC_ADDR_88EU;
@@ -10009,9 +9973,9 @@ static int rtw_mp_efuse_get(struct net_device *dev,
                        goto exit;
                }
 
                        goto exit;
                }
 
-               if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL)
+               if (rtw_efuse_mask_map_read(padapter, addr, cnts, data) == _FAIL)
                {
                {
-                       DBG_871X("%s: rtw_efuse_map_read error!\n", __FUNCTION__);
+                       DBG_871X("%s: rtw_efuse_mask_map_read error!\n", __func__);
                        err = -EFAULT;
                        goto exit;
                }
                        err = -EFAULT;
                        goto exit;
                }
@@ -10032,21 +9996,6 @@ static int rtw_mp_efuse_get(struct net_device *dev,
        }
        else if (strcmp(tmp[0], "vidpid") == 0)
        {
        }
        else if (strcmp(tmp[0], "vidpid") == 0)
        {
-               #ifdef CONFIG_RTL8192C
-               addr = EEPROM_VID_92C;
-               #endif // CONFIG_RTL8192C
-               #ifdef CONFIG_RTL8192D
-                       #ifdef CONFIG_USB_HCI
-                       addr = EEPROM_VID_92DU;
-                       #else
-                       addr = EEPROM_VID_92DE;
-                       #endif
-               #endif // CONFIG_RTL8192D
-               #ifdef CONFIG_RTL8723A
-                       #ifdef CONFIG_USB_HCI
-                       addr = EEPROM_VID_8723AU;
-                       #endif
-               #endif // CONFIG_RTL8723A
                #ifdef CONFIG_RTL8188E
                        #ifdef CONFIG_USB_HCI
                        addr = EEPROM_VID_88EU;
                #ifdef CONFIG_RTL8188E
                        #ifdef CONFIG_USB_HCI
                        addr = EEPROM_VID_88EU;
@@ -10076,7 +10025,7 @@ static int rtw_mp_efuse_get(struct net_device *dev,
                        err = -EFAULT;
                        goto exit;
                }
                        err = -EFAULT;
                        goto exit;
                }
-               if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL)
+               if (rtw_efuse_mask_map_read(padapter, addr, cnts, data) == _FAIL)
                {
                        DBG_871X("%s: rtw_efuse_access error!!\n", __FUNCTION__);
                        err = -EFAULT;
                {
                        DBG_871X("%s: rtw_efuse_access error!!\n", __FUNCTION__);
                        err = -EFAULT;
@@ -10517,8 +10466,8 @@ static int rtw_mp_efuse_set(struct net_device *dev,
                        goto exit;
                }
                *extra = 0;
                        goto exit;
                }
                *extra = 0;
-               DBG_871X("%s: after rtw_BT_efuse_map_write to _rtw_memcmp \n", __FUNCTION__);
-               if ( (rtw_efuse_map_read(padapter, addr, cnts, ShadowMapWiFi) == _SUCCESS ) )
+               DBG_871X("%s: after rtw_efuse_map_write to _rtw_memcmp\n", __func__);
+               if (rtw_efuse_mask_map_read(padapter, addr, cnts, ShadowMapWiFi) == _SUCCESS)
                {
                        if (_rtw_memcmp((void*)ShadowMapWiFi ,(void*)setdata,cnts))
                        { 
                {
                        if (_rtw_memcmp((void*)ShadowMapWiFi ,(void*)setdata,cnts))
                        { 
@@ -10585,33 +10534,7 @@ static int rtw_mp_efuse_set(struct net_device *dev,
                }
 
                //mac,00e04c871200
                }
 
                //mac,00e04c871200
-               #ifdef CONFIG_RTL8192C
-               addr = EEPROM_MAC_ADDR_92C;
-               #endif
-               #ifdef CONFIG_RTL8192D
-                       #ifdef CONFIG_USB_HCI
-                       if (pHalData->interfaceIndex == 0)
-                               addr = EEPROM_MAC_ADDR_MAC0_92DU;
-                       else
-                               addr = EEPROM_MAC_ADDR_MAC1_92DU;
-                       #else
-                       if (pHalData->interfaceIndex == 0)
-                               addr = EEPROM_MAC_ADDR_MAC0_92DE;
-                       else
-                               addr = EEPROM_MAC_ADDR_MAC1_92DE;
-                       #endif
-               #endif
-               #ifdef CONFIG_RTL8723A
-               #ifdef CONFIG_SDIO_HCI
-               addr = EEPROM_MAC_ADDR_8723AS;
-               #endif
-               #ifdef CONFIG_GSPI_HCI
-               addr = EEPROM_MAC_ADDR_8723AS;
-               #endif
-               #ifdef CONFIG_USB_HCI
-               addr = EEPROM_MAC_ADDR_8723AU;
-               #endif
-               #endif // CONFIG_RTL8723A
+               
                #ifdef CONFIG_RTL8188E
                        #ifdef CONFIG_USB_HCI
                        addr = EEPROM_MAC_ADDR_88EU;
                #ifdef CONFIG_RTL8188E
                        #ifdef CONFIG_USB_HCI
                        addr = EEPROM_MAC_ADDR_88EU;
@@ -10716,22 +10639,7 @@ static int rtw_mp_efuse_set(struct net_device *dev,
                        goto exit;
                }
 
                        goto exit;
                }
 
-               // pidvid,da0b7881
-               #ifdef CONFIG_RTL8192C
-               addr = EEPROM_VID_92C;
-               #endif // CONFIG_RTL8192C
-               #ifdef CONFIG_RTL8192D
-                       #ifdef CONFIG_USB_HCI
-                       addr = EEPROM_VID_92DU;
-                       #else
-                       addr = EEPROM_VID_92DE;
-                       #endif
-               #endif // CONFIG_RTL8192D
-               #ifdef CONFIG_RTL8723A
-                       #ifdef CONFIG_USB_HCI
-                       addr = EEPROM_VID_8723AU;
-                       #endif
-               #endif // CONFIG_RTL8723A
+               // pidvid,da0b7881              
                #ifdef CONFIG_RTL8188E
                        #ifdef CONFIG_USB_HCI
                        addr = EEPROM_VID_88EU;
                #ifdef CONFIG_RTL8188E
                        #ifdef CONFIG_USB_HCI
                        addr = EEPROM_VID_88EU;
@@ -10793,10 +10701,10 @@ static int rtw_mp_efuse_set(struct net_device *dev,
        }
         else if (strcmp(tmp[0], "wldumpfake") == 0)
        {
        }
         else if (strcmp(tmp[0], "wldumpfake") == 0)
        {
-               if (rtw_efuse_map_read(padapter, 0, EFUSE_MAP_SIZE,  pEfuseHal->fakeEfuseModifiedMap) == _SUCCESS) {
-                       DBG_871X("%s: WiFi hw efuse dump to Fake map success \n", __FUNCTION__); 
+               if (rtw_efuse_mask_map_read(padapter, 0, EFUSE_MAP_SIZE, pEfuseHal->fakeEfuseModifiedMap) == _SUCCESS) {
+                       DBG_871X("%s: WiFi hw efuse dump to Fake map success\n", __func__);
                } else {
                } else {
-                       DBG_871X("%s: WiFi hw efuse dump to Fake map Fail \n", __FUNCTION__);
+                       DBG_871X("%s: WiFi hw efuse dump to Fake map Fail\n", __func__);
                        err = -EFAULT;
                }
        }
                        err = -EFAULT;
                }
        }
@@ -11041,8 +10949,8 @@ static int rtw_mp_efuse_set(struct net_device *dev,
                        goto exit;
                }
                *extra = 0;
                        goto exit;
                }
                *extra = 0;
-               DBG_871X("%s: after rtw_BT_efuse_map_write to _rtw_memcmp \n", __FUNCTION__);
-               if ( (rtw_efuse_map_read(padapter, 0x00, EFUSE_MAP_SIZE, ShadowMapWiFi) == _SUCCESS ) )
+               DBG_871X("%s: after rtw_BT_efuse_map_write to _rtw_memcmp\n", __func__);
+               if (rtw_efuse_mask_map_read(padapter, 0x00, EFUSE_MAP_SIZE, ShadowMapWiFi) == _SUCCESS)
                {
                        if (_rtw_memcmp((void*)ShadowMapWiFi ,(void*)setdata,cnts))
                        {
                {
                        if (_rtw_memcmp((void*)ShadowMapWiFi ,(void*)setdata,cnts))
                        {
@@ -11092,6 +11000,8 @@ static int rtw_mp_efuse_set(struct net_device *dev,
                {
                        pEfuseHal->fakeEfuseModifiedMap[addr+jj] = key_2char2num(tmp[2][kk], tmp[2][kk+1]);
                }
                {
                        pEfuseHal->fakeEfuseModifiedMap[addr+jj] = key_2char2num(tmp[2][kk], tmp[2][kk+1]);
                }
+               _rtw_memset(extra, '\0', strlen(extra));
+               sprintf(extra, "wlwfake OK\n");
        }
 
 exit:
        }
 
 exit:
@@ -11304,8 +11214,8 @@ static int rtw_mp_read_reg(struct net_device *dev,
                                                   tmp[j]=' ';
                                                   j++;
                                          }
                                                   tmp[j]=' ';
                                                   j++;
                                          }
-                                         if ( data[i] != '\0' )
-                                         tmp[j] = data[i];
+                                       if ( data[i] != '\0' )
+                                               tmp[j] = data[i];
                                          
                                          j++;
                                }
                                          
                                          j++;
                                }
@@ -11361,6 +11271,8 @@ static int rtw_mp_read_reg(struct net_device *dev,
        PADAPTER padapter = rtw_netdev_priv(dev);
        char input[wrqu->length];
 
        PADAPTER padapter = rtw_netdev_priv(dev);
        char input[wrqu->length];
 
+
+       _rtw_memset(input, 0, wrqu->length);
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                         return -EFAULT;
 
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                         return -EFAULT;
 
@@ -11404,6 +11316,7 @@ static int rtw_mp_read_rf(struct net_device *dev,
 
 
        if (wrqu->length > 128) return -EFAULT;
 
 
        if (wrqu->length > 128) return -EFAULT;
+       _rtw_memset(input, 0, wrqu->length);
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                return -EFAULT;
 
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                return -EFAULT;
 
@@ -11459,18 +11372,13 @@ static int rtw_mp_start(struct net_device *dev,
        u8 val8;
        PADAPTER padapter = rtw_netdev_priv(dev);
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
        u8 val8;
        PADAPTER padapter = rtw_netdev_priv(dev);
        HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
        struct hal_ops *pHalFunc = &padapter->HalFunc;
 
        rtw_pm_set_ips(padapter,IPS_NONE);
        LeaveAllPowerSaveMode(padapter);
 
        if(padapter->registrypriv.mp_mode ==0)
        struct hal_ops *pHalFunc = &padapter->HalFunc;
 
        rtw_pm_set_ips(padapter,IPS_NONE);
        LeaveAllPowerSaveMode(padapter);
 
        if(padapter->registrypriv.mp_mode ==0)
-       {
-
-#ifdef CONFIG_BT_COEXIST
-               pdmpriv->DMFlag &= ~DYNAMIC_FUNC_BT;
-#endif         
+       {               
                pHalFunc->hal_deinit(padapter);
                padapter->registrypriv.mp_mode =1;
                pHalFunc->hal_init(padapter);
                pHalFunc->hal_deinit(padapter);
                padapter->registrypriv.mp_mode =1;
                pHalFunc->hal_init(padapter);
@@ -11568,7 +11476,7 @@ static int rtw_mp_rate(struct net_device *dev,
        DBG_871X("%s: %s rate index=%d \n", __func__,input,rate);
        
        if (rate >= MPT_RATE_LAST )     
        DBG_871X("%s: %s rate index=%d \n", __func__,input,rate);
        
        if (rate >= MPT_RATE_LAST )     
-       return -EINVAL;
+               return -EINVAL;
 
        padapter->mppriv.rateidx = rate;
        Hal_SetDataRate(padapter);
 
        padapter->mppriv.rateidx = rate;
        Hal_SetDataRate(padapter);
@@ -11665,7 +11573,8 @@ static int rtw_mp_txpower(struct net_device *dev,
                        struct iw_request_info *info,
                        struct iw_point *wrqu, char *extra)
 {
                        struct iw_request_info *info,
                        struct iw_point *wrqu, char *extra)
 {
-       u32             idx_a=0,idx_b=0,MsetPower=1;
+       u32 idx_a = 0, idx_b = 0, idx_c = 0, idx_d = 0, status = 0;
+       int MsetPower = 1;
        u8              input[wrqu->length];
 
        PADAPTER padapter = rtw_netdev_priv(dev);
        u8              input[wrqu->length];
 
        PADAPTER padapter = rtw_netdev_priv(dev);
@@ -11673,22 +11582,24 @@ static int rtw_mp_txpower(struct net_device *dev,
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                        return -EFAULT;
 
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                        return -EFAULT;
 
-       MsetPower = strncmp(input, "off", 3); 
-       sscanf(input,"patha=%d,pathb=%d",&idx_a,&idx_b);
-       //DBG_871X("%s: tx_pwr_idx_a=%x b=%x\n", __func__, idx_a, idx_b);
-       if(MsetPower==0)
-       {
+       MsetPower = strncmp(input, "off", 3);
+       if (MsetPower == 0) {
                padapter->mppriv.bSetTxPower = 0;
                sprintf( extra, "MP Set power off");
                padapter->mppriv.bSetTxPower = 0;
                sprintf( extra, "MP Set power off");
-       }
-       else
-       {
-       sprintf( extra, "Set power level path_A:%d path_B:%d", idx_a , idx_b );
-       padapter->mppriv.txpoweridx = (u8)idx_a;
-       padapter->mppriv.txpoweridx_b = (u8)idx_b;
-       padapter->mppriv.bSetTxPower = 1;
+       } else {
+               if (sscanf(input, "patha=%d,pathb=%d,pathc=%d,pathd=%d", &idx_a, &idx_b, &idx_c, &idx_d) < 3)
+                       DBG_871X("Invalid format on line %s ,patha=%d,pathb=%d,pathc=%d,pathd=%d\n", input , idx_a , idx_b , idx_c , idx_d);
+
+               sprintf(extra, "Set power level path_A:%d path_B:%d path_C:%d path_D:%d", idx_a , idx_b , idx_c , idx_d);
+               padapter->mppriv.txpoweridx = (u8)idx_a;
+               padapter->mppriv.txpoweridx_b = (u8)idx_b;
+               padapter->mppriv.txpoweridx_c = (u8)idx_c;
+               padapter->mppriv.txpoweridx_d = (u8)idx_d;
+               padapter->mppriv.bSetTxPower = 1;
+
                Hal_SetAntennaPathPower(padapter);
        }
                Hal_SetAntennaPathPower(padapter);
        }
+
        wrqu->length = strlen(extra);
        return 0;
 }
        wrqu->length = strlen(extra);
        return 0;
 }
@@ -11701,6 +11612,7 @@ static int rtw_mp_ant_tx(struct net_device *dev,
        u8              input[wrqu->length];
        u16 antenna = 0;
        PADAPTER padapter = rtw_netdev_priv(dev);
        u8              input[wrqu->length];
        u16 antenna = 0;
        PADAPTER padapter = rtw_netdev_priv(dev);
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
 
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                        return -EFAULT;
 
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                        return -EFAULT;
@@ -11713,19 +11625,26 @@ static int rtw_mp_ant_tx(struct net_device *dev,
        {
                switch(input[i])
                        {
        {
                switch(input[i])
                        {
-                               case 'a' :
-                                                               antenna|=ANTENNA_A;
+                               case 'a':
+                                                               antenna |= ANTENNA_A;
                                                                break;
                                case 'b':
                                                                break;
                                case 'b':
-                                                               antenna|=ANTENNA_B;
+                                                               antenna |= ANTENNA_B;
+                                                               break;
+                               case 'c':
+                                                               antenna |= ANTENNA_C;
                                                                break;
                                                                break;
+                               case 'd':
+                                                               antenna |= ANTENNA_D;
+                                                               break;                          
                        }
        }
        //antenna |= BIT(extra[i]-'a');
                        }
        }
        //antenna |= BIT(extra[i]-'a');
-       //DBG_871X("%s: antenna=0x%x\n", __func__, antenna);            
+       DBG_871X("%s: antenna=0x%x\n", __func__, antenna);
        padapter->mppriv.antenna_tx = antenna;
        padapter->mppriv.antenna_rx = antenna;
        //DBG_871X("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_tx);
        padapter->mppriv.antenna_tx = antenna;
        padapter->mppriv.antenna_rx = antenna;
        //DBG_871X("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_tx);
+       pHalData->AntennaTxPath = antenna;
        
        Hal_SetAntenna(padapter);
 
        
        Hal_SetAntenna(padapter);
 
@@ -11741,7 +11660,8 @@ static int rtw_mp_ant_rx(struct net_device *dev,
        u16 antenna = 0;
        u8              input[wrqu->length];
        PADAPTER padapter = rtw_netdev_priv(dev);
        u16 antenna = 0;
        u8              input[wrqu->length];
        PADAPTER padapter = rtw_netdev_priv(dev);
-
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+       
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                        return -EFAULT;
        //DBG_871X("%s: input=%s\n", __func__, input);
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                        return -EFAULT;
        //DBG_871X("%s: input=%s\n", __func__, input);
@@ -11752,21 +11672,25 @@ static int rtw_mp_ant_rx(struct net_device *dev,
        for (i=0; i < strlen(input); i++) {
        switch( input[i] )
                        {
        for (i=0; i < strlen(input); i++) {
        switch( input[i] )
                        {
-                               case 'a' :
-                                                               antenna|=ANTENNA_A;
+                               case 'a':
+                                                               antenna |= ANTENNA_A;
                                                                break;
                                case 'b':
                                                                break;
                                case 'b':
-                                                               antenna|=ANTENNA_B;
+                                                               antenna |= ANTENNA_B;
+                                                               break;
+                               case 'c':
+                                                               antenna |= ANTENNA_C;
                                                                break;
                                                                break;
-                               case 'c' :
-                                                               antenna|=ANTENNA_C;
+                               case 'd':
+                                                               antenna |= ANTENNA_D;
                                                                break;
                        }
        }
        
                                                                break;
                        }
        }
        
-       //DBG_871X("%s: antenna=0x%x\n", __func__, antenna);            
+       DBG_871X("%s: antenna=0x%x\n", __func__, antenna);
        padapter->mppriv.antenna_tx = antenna;
        padapter->mppriv.antenna_rx = antenna;
        padapter->mppriv.antenna_tx = antenna;
        padapter->mppriv.antenna_rx = antenna;
+       pHalData->AntennaRxPath = antenna;
        //DBG_871X("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_rx);
        Hal_SetAntenna(padapter);
        wrqu->length = strlen(extra);
        //DBG_871X("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_rx);
        Hal_SetAntenna(padapter);
        wrqu->length = strlen(extra);
@@ -11774,20 +11698,46 @@ static int rtw_mp_ant_rx(struct net_device *dev,
        return 0;
 }
 
        return 0;
 }
 
+static int rtw_set_ctx_destAddr(struct net_device *dev,
+                       struct iw_request_info *info,
+                       struct iw_point *wrqu, char *extra)
+{
+       int jj,kk=0;
+       
+       struct pkt_attrib *pattrib;
+       struct mp_priv *pmp_priv;
+       PADAPTER padapter = rtw_netdev_priv(dev);
+       pmp_priv = &padapter->mppriv;
+       pattrib = &pmp_priv->tx.attrib;
+
+       if( strlen(extra) < 5 )
+               return _FAIL;
+               
+       DBG_871X("%s: in=%s\n", __func__, extra);
+       for(jj = 0,kk = 0; jj < ETH_ALEN; jj++, kk += 3 )
+       {
+               pattrib->dst[ jj ] = key_2char2num( extra[kk], extra[kk+ 1] );
+       }
+
+       DBG_871X("pattrib->dst:%x %x %x %x %x %x\n",pattrib->dst[0],pattrib->dst[1],pattrib->dst[2],pattrib->dst[3],pattrib->dst[4],pattrib->dst[5]);
+       return 0;
+}
+
 static int rtw_mp_ctx(struct net_device *dev,
                        struct iw_request_info *info,
                        struct iw_point *wrqu, char *extra)
 {
 static int rtw_mp_ctx(struct net_device *dev,
                        struct iw_request_info *info,
                        struct iw_point *wrqu, char *extra)
 {
-       u32 pkTx = 1, countPkTx = 1, cotuTx = 1, CarrSprTx = 1, scTx = 1, sgleTx = 1, stop = 1;
+       u32 pkTx = 1;
+       int countPkTx = 1, cotuTx = 1, CarrSprTx = 1, scTx = 1, sgleTx = 1, stop = 1;
        u32 bStartTest = 1;
        u32 bStartTest = 1;
-       u32 count = 0,pktinterval=0;
+       u32 count = 0,pktinterval=0,pktlen=0;
        struct mp_priv *pmp_priv;
        struct pkt_attrib *pattrib;
        struct mp_priv *pmp_priv;
        struct pkt_attrib *pattrib;
-
        PADAPTER padapter = rtw_netdev_priv(dev);
        PADAPTER padapter = rtw_netdev_priv(dev);
-
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
 
        pmp_priv = &padapter->mppriv;
 
        pmp_priv = &padapter->mppriv;
+       pattrib = &pmp_priv->tx.attrib;
 
        if (copy_from_user(extra, wrqu->pointer, wrqu->length))
                        return -EFAULT;
 
        if (copy_from_user(extra, wrqu->pointer, wrqu->length))
                        return -EFAULT;
@@ -11803,19 +11753,33 @@ static int rtw_mp_ctx(struct net_device *dev,
        stop = strncmp(extra, "stop", 4);
        sscanf(extra, "count=%d,pkt", &count);
        sscanf(extra, "pktinterval=%d", &pktinterval);
        stop = strncmp(extra, "stop", 4);
        sscanf(extra, "count=%d,pkt", &count);
        sscanf(extra, "pktinterval=%d", &pktinterval);
+       sscanf(extra, "pktlen=%d", &pktlen);
+       
+       if ( _rtw_memcmp( extra, "destmac=", 8 ) )
+       {
+               wrqu->length -= 8;
+               rtw_set_ctx_destAddr (dev,info,wrqu,&extra[8]);
+               sprintf( extra, "Set dest mac OK ! \n");
+               return 0;
+       }
        
        //DBG_871X("%s: count=%d countPkTx=%d cotuTx=%d CarrSprTx=%d scTx=%d sgleTx=%d pkTx=%d stop=%d\n", __func__, count, countPkTx, cotuTx, CarrSprTx, pkTx, sgleTx, scTx, stop);
        
        //DBG_871X("%s: count=%d countPkTx=%d cotuTx=%d CarrSprTx=%d scTx=%d sgleTx=%d pkTx=%d stop=%d\n", __func__, count, countPkTx, cotuTx, CarrSprTx, pkTx, sgleTx, scTx, stop);
-       _rtw_memset(extra, '\0', sizeof(extra));
+       _rtw_memset(extra, '\0', strlen(extra));
 
        if( pktinterval !=0 )
        {
                sprintf( extra, "Pkt Interval = %d",pktinterval);
                padapter->mppriv.pktInterval = pktinterval;
 
        if( pktinterval !=0 )
        {
                sprintf( extra, "Pkt Interval = %d",pktinterval);
                padapter->mppriv.pktInterval = pktinterval;
-               
                wrqu->length = strlen(extra);
                return 0;
        }
                wrqu->length = strlen(extra);
                return 0;
        }
-       
+       if( pktlen !=0 )
+       {
+               sprintf( extra, "Pkt len = %d",pktlen);
+               pattrib->pktlen = pktlen ;
+               wrqu->length = strlen(extra);
+               return 0;
+       }
        if (stop == 0) {
                bStartTest = 0; // To set Stop
                pmp_priv->tx.stop = 1;
        if (stop == 0) {
                bStartTest = 0; // To set Stop
                pmp_priv->tx.stop = 1;
@@ -11854,20 +11818,11 @@ static int rtw_mp_ctx(struct net_device *dev,
                        }
                        else if (pmp_priv->tx.stop == 1)
                        {
                        }
                        else if (pmp_priv->tx.stop == 1)
                        {
-                               sprintf( extra, "Start continuous DA=ffffffffffff len=1500 count=%u,\n",count);
+                               sprintf( extra, "Start continuous DA=ffffffffffff len=1500 count=%u\n",count);
                                //DBG_871X("%s:countPkTx %d\n", __func__,count);
                                pmp_priv->tx.stop = 0;
                                pmp_priv->tx.count = count;
                                //DBG_871X("%s:countPkTx %d\n", __func__,count);
                                pmp_priv->tx.stop = 0;
                                pmp_priv->tx.count = count;
-                               pmp_priv->tx.payload = 2;
-#ifdef CONFIG_80211N_HT
-                               pmp_priv->tx.attrib.ht_en = 1;
-#endif
-#ifdef CONFIG_80211AC_VHT
-                               pmp_priv->tx.attrib.raid = RATEID_IDX_VHT_1SS; //10
-#endif
-                               pattrib = &pmp_priv->tx.attrib;
-                               pattrib->pktlen = 1000;
-                               _rtw_memset(pattrib->dst, 0xFF, ETH_ALEN);
+                       
                                SetPacketTx(padapter);
                        } 
                        else {
                                SetPacketTx(padapter);
                        } 
                        else {
@@ -11929,9 +11884,6 @@ static int rtw_mp_ctx(struct net_device *dev,
                }
 #ifdef CONFIG_80211N_HT
                pmp_priv->tx.attrib.ht_en = 1;
                }
 #ifdef CONFIG_80211N_HT
                pmp_priv->tx.attrib.ht_en = 1;
-#endif
-#ifdef CONFIG_80211AC_VHT
-               pmp_priv->tx.attrib.raid = RATEID_IDX_VHT_1SS; //10
 #endif
                pmp_priv->tx.stop = 0;
                pmp_priv->tx.count = 1;
 #endif
                pmp_priv->tx.stop = 0;
                pmp_priv->tx.count = 1;
@@ -11950,8 +11902,7 @@ static int rtw_mp_disable_bt_coexist(struct net_device *dev,
                        union iwreq_data *wrqu, char *extra)
 {
        PADAPTER padapter = (PADAPTER)rtw_netdev_priv(dev);
                        union iwreq_data *wrqu, char *extra)
 {
        PADAPTER padapter = (PADAPTER)rtw_netdev_priv(dev);
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);     
        struct hal_ops *pHalFunc = &padapter->HalFunc;
        
        u8 input[wrqu->data.length];
        struct hal_ops *pHalFunc = &padapter->HalFunc;
        
        u8 input[wrqu->data.length];
@@ -11969,8 +11920,7 @@ static int rtw_mp_disable_bt_coexist(struct net_device *dev,
                DBG_871X("Set OID_RT_SET_DISABLE_BT_COEXIST: disable BT_COEXIST\n");
 #ifdef CONFIG_BT_COEXIST
                rtw_btcoex_HaltNotify(padapter);
                DBG_871X("Set OID_RT_SET_DISABLE_BT_COEXIST: disable BT_COEXIST\n");
 #ifdef CONFIG_BT_COEXIST
                rtw_btcoex_HaltNotify(padapter);
-               rtw_btcoex_SetManualControl(padapter, _TRUE);
-               pdmpriv->DMFlag &= ~DYNAMIC_FUNC_BT;
+               rtw_btcoex_SetManualControl(padapter, _TRUE);           
                // Force to switch Antenna to WiFi
                rtw_write16(padapter, 0x870, 0x300);
                rtw_write16(padapter, 0x860, 0x110); 
                // Force to switch Antenna to WiFi
                rtw_write16(padapter, 0x870, 0x300);
                rtw_write16(padapter, 0x860, 0x110); 
@@ -11980,8 +11930,7 @@ static int rtw_mp_disable_bt_coexist(struct net_device *dev,
        {
                RT_TRACE(_module_mp_, _drv_info_,
                        ("Set OID_RT_SET_DISABLE_BT_COEXIST: enable BT_COEXIST\n"));
        {
                RT_TRACE(_module_mp_, _drv_info_,
                        ("Set OID_RT_SET_DISABLE_BT_COEXIST: enable BT_COEXIST\n"));
-#ifdef CONFIG_BT_COEXIST               
-               pdmpriv->DMFlag |= DYNAMIC_FUNC_BT;
+#ifdef CONFIG_BT_COEXIST                       
                rtw_btcoex_SetManualControl(padapter, _FALSE);
 #endif
        }
                rtw_btcoex_SetManualControl(padapter, _FALSE);
 #endif
        }
@@ -11994,16 +11943,14 @@ static int rtw_mp_arx(struct net_device *dev,
                        struct iw_request_info *info,
                        struct iw_point *wrqu, char *extra)
 {
                        struct iw_request_info *info,
                        struct iw_point *wrqu, char *extra)
 {
-       u8 bStartRx=0,bStopRx=0,bQueryPhy=0,bQueryMac=0,bSetBssid=0;
-       u8 bmac_filter = 0,bfilter_init=0;
-       u32 cckok=0,cckcrc=0,ofdmok=0,ofdmcrc=0,htok=0,htcrc=0,OFDM_FA=0,CCK_FA=0,DropPacket=0,vht_ok=0,vht_err=0;
-       u32             mac_cck_ok=0, mac_ofdm_ok=0, mac_ht_ok=0, mac_vht_ok=0;
-       u32             mac_cck_err=0, mac_ofdm_err=0, mac_ht_err=0, mac_vht_err=0;
+       int bStartRx = 0, bStopRx = 0, bQueryPhy = 0, bQueryMac = 0, bSetBssid = 0;
+       int bmac_filter = 0, bfilter_init = 0, bmon = 0, bSmpCfg = 0;
        u8              input[wrqu->length];
        char *pch, *ptmp, *token, *tmp[2]={0x00,0x00};
        u8              input[wrqu->length];
        char *pch, *ptmp, *token, *tmp[2]={0x00,0x00};
-       u32 i=0,ii=0,jj=0,kk=0,cnts=0,bmon=0;
+       u32 i = 0, ii = 0, jj = 0, kk = 0, cnts = 0, ret;
        PADAPTER padapter = rtw_netdev_priv(dev);
        struct mp_priv *pmppriv = &padapter->mppriv;
        PADAPTER padapter = rtw_netdev_priv(dev);
        struct mp_priv *pmppriv = &padapter->mppriv;
+       struct dbg_rx_counter rx_counter;
 
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                        return -EFAULT;
 
        if (copy_from_user(input, wrqu->pointer, wrqu->length))
                        return -EFAULT;
@@ -12018,6 +11965,7 @@ static int rtw_mp_arx(struct net_device *dev,
        //bfilter_init = (strncmp(input, "filter_init",11)==0)?1:0;
        bmac_filter = (strncmp(input, "accept_mac",10)==0)?1:0;
        bmon = (strncmp(input, "mon=",4)==0)?1:0;
        //bfilter_init = (strncmp(input, "filter_init",11)==0)?1:0;
        bmac_filter = (strncmp(input, "accept_mac",10)==0)?1:0;
        bmon = (strncmp(input, "mon=",4)==0)?1:0;
+       bSmpCfg = (strncmp(input , "smpcfg=" , 7) == 0)?1:0;
 
        if(bSetBssid==1){
                pch = input;
 
        if(bSetBssid==1){
                pch = input;
@@ -12071,80 +12019,32 @@ static int rtw_mp_arx(struct net_device *dev,
        if(bStartRx)
        {
                sprintf( extra, "start");
        if(bStartRx)
        {
                sprintf( extra, "start");
-               SetPacketRx(padapter, bStartRx);
+               SetPacketRx(padapter, bStartRx, _FALSE);
        }
        else if(bStopRx)
        {
        }
        else if(bStopRx)
        {
-               SetPacketRx(padapter, 0);
+               SetPacketRx(padapter, bStartRx, _FALSE);
                pmppriv->bmac_filter = _FALSE;
                sprintf( extra, "Received packet OK:%d CRC error:%d ,Filter out:%d",padapter->mppriv.rx_pktcount,padapter->mppriv.rx_crcerrpktcount,padapter->mppriv.rx_pktcount_filter_out);
        }
        else if(bQueryPhy)
                pmppriv->bmac_filter = _FALSE;
                sprintf( extra, "Received packet OK:%d CRC error:%d ,Filter out:%d",padapter->mppriv.rx_pktcount,padapter->mppriv.rx_crcerrpktcount,padapter->mppriv.rx_pktcount_filter_out);
        }
        else if(bQueryPhy)
-       {          
-
-               if (IS_HARDWARE_TYPE_JAGUAR(padapter)) 
-               {
-                       cckok      = PHY_QueryBBReg(padapter, 0xF04, 0x3FFF);        // [13:0]  
-                       ofdmok     = PHY_QueryBBReg(padapter, 0xF14, 0x3FFF);        // [13:0]  
-                       htok       = PHY_QueryBBReg(padapter, 0xF10, 0x3FFF);     // [13:0]
-                       vht_ok      = PHY_QueryBBReg(padapter, 0xF0C, 0x3FFF);     // [13:0]
-                                                                 
-                       cckcrc     = PHY_QueryBBReg(padapter, 0xF04, 0x3FFF0000); // [29:16]                                            
-                       ofdmcrc    = PHY_QueryBBReg(padapter, 0xF14, 0x3FFF0000); // [29:16]
-                       htcrc      = PHY_QueryBBReg(padapter, 0xF10, 0x3FFF0000); // [29:16]            
-                       vht_err     = PHY_QueryBBReg(padapter, 0xF0C, 0x3FFF0000); // [29:16]   
-                       
-                       CCK_FA = PHY_QueryBBReg(padapter, 0xa5c, bMaskLWord);
-                       OFDM_FA = PHY_QueryBBReg(padapter, 0xF48, bMaskLWord);
-               } 
-               else
-               {
-                       cckok      = PHY_QueryBBReg(padapter, 0xF88, bMaskDWord);               
-                       ofdmok     = PHY_QueryBBReg(padapter, 0xF94, bMaskLWord);               
-                           htok       = PHY_QueryBBReg(padapter, 0xF90, bMaskLWord);
-                       vht_ok      = 0;
-                   
-                       cckcrc     = PHY_QueryBBReg(padapter, 0xF84, bMaskDWord);                                               
-                       ofdmcrc    = PHY_QueryBBReg(padapter, 0xF94, bMaskHWord);
-                       htcrc      = PHY_QueryBBReg(padapter, 0xF90, bMaskHWord);               
-                       vht_err     = 0;
+       {
+               _rtw_memset(&rx_counter,0,sizeof(struct dbg_rx_counter));
+               rtw_dump_phy_rx_counters(padapter,&rx_counter);
                
                
-               OFDM_FA = PHY_QueryBBReg(padapter, 0xCF0, bMaskLWord) + PHY_QueryBBReg(padapter, 0xCF2, bMaskLWord) + 
-                                       PHY_QueryBBReg(padapter, 0xDA2, bMaskLWord)+ PHY_QueryBBReg(padapter, 0xDA4, bMaskLWord) + 
-                                       PHY_QueryBBReg(padapter, 0xDA6, bMaskLWord) + PHY_QueryBBReg(padapter, 0xDA8, bMaskLWord);
+               DBG_871X("%s: OFDM_FA =%d\n", __FUNCTION__, rx_counter.rx_ofdm_fa);
+               DBG_871X("%s: CCK_FA =%d\n", __FUNCTION__, rx_counter.rx_cck_fa);
+               sprintf( extra, "Phy Received packet OK:%d CRC error:%d FA Counter: %d",rx_counter.rx_pkt_ok,rx_counter.rx_pkt_crc_error,rx_counter.rx_cck_fa+rx_counter.rx_ofdm_fa);
                
                
-               CCK_FA=(rtw_read8(padapter, 0xa5b )<<8 ) | (rtw_read8(padapter, 0xa5c));
-               }
-               DBG_871X("%s: OFDM_FA =%d\n", __FUNCTION__, OFDM_FA);
-               DBG_871X("%s: CCK_FA =%d\n", __FUNCTION__, CCK_FA);
-               sprintf( extra, "Phy Received packet OK:%d CRC error:%d FA Counter: %d",cckok+ofdmok+htok+vht_ok,cckcrc+ofdmcrc+htcrc+vht_err,OFDM_FA+CCK_FA);
+       
        }
        else if(bQueryMac)
        {
        }
        else if(bQueryMac)
        {
-               // for 8723A
-               {
-                       PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x3);
-                       mac_cck_ok      = PHY_QueryMacReg(padapter, 0x664, bMaskLWord);      // [15:0]    
-                       PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x0);
-                       mac_ofdm_ok     = PHY_QueryMacReg(padapter, 0x664, bMaskLWord);      // [15:0]   
-                       PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x6);
-                       mac_ht_ok       = PHY_QueryMacReg(padapter, 0x664, bMaskLWord);     // [15:0]   
-                       mac_vht_ok      = 0;
-                       
-                       PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x4);
-                       mac_cck_err     = PHY_QueryMacReg(padapter, 0x664, bMaskLWord); // [15:0]       
-                       PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x1);
-                       mac_ofdm_err    = PHY_QueryMacReg(padapter, 0x664, bMaskLWord); // [15:0]       
-                       PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x7);
-                       mac_ht_err      = PHY_QueryMacReg(padapter, 0x664, bMaskLWord); // [15:0]               
-                       mac_vht_err     = 0;
-                       //Mac_DropPacket
-                       rtw_write32(padapter, 0x664, (rtw_read32(padapter, 0x0664)& 0x0FFFFFFF)| Mac_DropPacket);
-                       DropPacket = rtw_read32(padapter, 0x664)& 0x0000FFFF;
-               } 
-               
+               _rtw_memset(&rx_counter,0,sizeof(struct dbg_rx_counter));
+               rtw_dump_mac_rx_counters(padapter,&rx_counter);
                sprintf( extra, "Mac Received packet OK: %d , CRC error: %d , Drop Packets: %d\n",
                sprintf( extra, "Mac Received packet OK: %d , CRC error: %d , Drop Packets: %d\n",
-                               mac_cck_ok+mac_ofdm_ok+mac_ht_ok+mac_vht_ok,mac_cck_err+mac_ofdm_err+mac_ht_err+mac_vht_err,DropPacket);                        
+                               rx_counter.rx_pkt_ok,rx_counter.rx_pkt_crc_error,rx_counter.rx_pkt_drop);                       
+
        }
 
        if( bmon==1 ) { 
        }
 
        if( bmon==1 ) { 
@@ -12159,6 +12059,19 @@ static int rtw_mp_arx(struct net_device *dev,
                        sprintf( extra, "Indicating Receive Packet to network Stop\n");
                }       
        }
                        sprintf( extra, "Indicating Receive Packet to network Stop\n");
                }       
        }
+       if (bSmpCfg == 1) {     
+               ret = sscanf(input, "smpcfg=%d", &bSmpCfg);
+               
+               if (bSmpCfg == 1) {
+                       pmppriv->bRTWSmbCfg = _TRUE;
+                       sprintf(extra , "Indicate By Simple Config Format\n");
+                       SetPacketRx(padapter, _TRUE, _TRUE);
+               } else {
+                       pmppriv->bRTWSmbCfg = _FALSE;
+                       sprintf(extra , "Indicate By Normal Format\n");
+                       SetPacketRx(padapter, _TRUE, _FALSE);
+               }
+       }
        
        wrqu->length = strlen(extra) + 1;
 
        
        wrqu->length = strlen(extra) + 1;
 
@@ -12210,11 +12123,9 @@ static int rtw_mp_pwrtrk(struct net_device *dev,
                if (strncmp(input, "stop", 4) == 0)
                {       
                        enable = 0;
                if (strncmp(input, "stop", 4) == 0)
                {       
                        enable = 0;
-                       sprintf(extra, "mp tx power tracking stop");
-                       pHalData->TxPowerTrackControl = _FALSE;
+                       sprintf(extra, "mp tx power tracking stop");            
                }
                }
-               else if (sscanf(input, "ther=%d", &thermal)) {
-                       pHalData->TxPowerTrackControl = _TRUE;
+               else if (sscanf(input, "ther=%d", &thermal)) {          
                        ret = Hal_SetThermalMeter(padapter, (u8)thermal);
                        if (ret == _FAIL) return -EPERM;
                                sprintf(extra, "mp tx power tracking start,target value=%d ok ",thermal);
                        ret = Hal_SetThermalMeter(padapter, (u8)thermal);
                        if (ret == _FAIL) return -EPERM;
                                sprintf(extra, "mp tx power tracking start,target value=%d ok ",thermal);
@@ -12253,21 +12164,12 @@ static int rtw_mp_thermal(struct net_device *dev,
                        struct iw_point *wrqu, char *extra)
 {
        u8 val;
                        struct iw_point *wrqu, char *extra)
 {
        u8 val;
-       int bwrite=1;
+       int bwrite=1;   
        
        
-       #ifdef CONFIG_RTL8192C
-                       u16 addr=EEPROM_THERMAL_METER_92C;
-       #endif
-       #ifdef CONFIG_RTL8192D
-                       u16 addr=EEPROM_THERMAL_METER_92D;
-       #endif
-       #ifdef CONFIG_RTL8723A
-                       u16 addr=EEPROM_THERMAL_METER_8723A;
-       #endif
        #ifdef CONFIG_RTL8188E
                        u16 addr=EEPROM_THERMAL_METER_88E;
        #endif
        #ifdef CONFIG_RTL8188E
                        u16 addr=EEPROM_THERMAL_METER_88E;
        #endif
-       #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
+       #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8814A)
                        u16 addr=EEPROM_THERMAL_METER_8812;
        #endif
        #ifdef CONFIG_RTL8192E
                        u16 addr=EEPROM_THERMAL_METER_8812;
        #endif
        #ifdef CONFIG_RTL8192E
@@ -12333,35 +12235,9 @@ static int rtw_mp_reset_stats(struct net_device *dev,
        pmp_priv->rx_pktcount_filter_out=0;
        pmp_priv->rx_crcerrpktcount = 0;
 
        pmp_priv->rx_pktcount_filter_out=0;
        pmp_priv->rx_crcerrpktcount = 0;
 
-       //reset phy counter
-       if (IS_HARDWARE_TYPE_JAGUAR(padapter))
-       {
-               write_bbreg(padapter, 0xB58, BIT0, 0x1);
-               write_bbreg(padapter, 0xB58, BIT0, 0x0);
+       rtw_reset_phy_rx_counters(padapter);
+       rtw_reset_mac_rx_counters(padapter);
 
 
-               write_bbreg(padapter, 0x9A4, BIT17, 0x1);//reset  OFDA FA counter
-               write_bbreg(padapter, 0x9A4, BIT17, 0x0);
-               
-               write_bbreg(padapter, 0xA5C, BIT15, 0x0);//reset  CCK FA counter
-               write_bbreg(padapter, 0xA5C, BIT15, 0x1);
-       }
-       else
-       {
-               write_bbreg(padapter, 0xF14, BIT16, 0x1);
-               rtw_msleep_os(10);
-               write_bbreg(padapter, 0xF14, BIT16, 0x0);
-               
-               write_bbreg(padapter, 0xD00, BIT27, 0x1);//reset  OFDA FA counter
-               write_bbreg(padapter, 0xC0C, BIT31, 0x1);//reset  OFDA FA counter
-               write_bbreg(padapter, 0xD00, BIT27, 0x0);
-               write_bbreg(padapter, 0xC0C, BIT31, 0x0);
-               
-               write_bbreg(padapter, 0xA2C, BIT15, 0x0);//reset  CCK FA counter
-               write_bbreg(padapter, 0xA2C, BIT15, 0x1);
-       }
-       //reset mac counter
-       PHY_SetMacReg(padapter, 0x664, BIT27, 0x1); 
-       PHY_SetMacReg(padapter, 0x664, BIT27, 0x0);
        return 0;
 }
 
        return 0;
 }
 
@@ -12424,7 +12300,7 @@ static int rtw_mp_SetRFPath(struct net_device *dev,
 {
        PADAPTER padapter = rtw_netdev_priv(dev);
        char    input[wrqu->data.length];
 {
        PADAPTER padapter = rtw_netdev_priv(dev);
        char    input[wrqu->data.length];
-       s32             bMain=1,bTurnoff=1;
+       int             bMain = 1, bTurnoff = 1;
        
        if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length))
                        return -EFAULT;
        
        if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length))
                        return -EFAULT;
@@ -12453,9 +12329,9 @@ static int rtw_mp_QueryDrv(struct net_device *dev,
 {
        PADAPTER padapter = rtw_netdev_priv(dev);
        char    input[wrqu->data.length];
 {
        PADAPTER padapter = rtw_netdev_priv(dev);
        char    input[wrqu->data.length];
-       s32     qAutoLoad=1;
+       int     qAutoLoad = 1;
 
 
-       EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
+       PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
        
        if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length))
                        return -EFAULT;
        
        if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length))
                        return -EFAULT;
@@ -12467,7 +12343,7 @@ static int rtw_mp_QueryDrv(struct net_device *dev,
        {
                DBG_871X("%s:qAutoLoad\n", __func__);
                
        {
                DBG_871X("%s:qAutoLoad\n", __func__);
                
-               if(pEEPROM->bautoload_fail_flag)
+               if(pHalData->bautoload_fail_flag)
                        sprintf(extra, "fail");
                else
                sprintf(extra, "ok");      
                        sprintf(extra, "fail");
                else
                sprintf(extra, "ok");      
@@ -12529,28 +12405,162 @@ static int rtw_mp_getver(struct net_device *dev,
        return 0;
 }
 
        return 0;
 }
 
-#if (defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B))
-/* update Tx AGC offset */
-static int rtw_mp_SetBT(struct net_device *dev,
+static int rtw_mp_mon(struct net_device *dev,
                        struct iw_request_info *info,
                        union iwreq_data *wrqu, char *extra)
 {
        PADAPTER padapter = rtw_netdev_priv(dev);
                        struct iw_request_info *info,
                        union iwreq_data *wrqu, char *extra)
 {
        PADAPTER padapter = rtw_netdev_priv(dev);
+       struct mp_priv *pmp_priv = &padapter->mppriv;
+       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct hal_ops *pHalFunc = &padapter->HalFunc;
        struct hal_ops *pHalFunc = &padapter->HalFunc;
-       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+       NDIS_802_11_NETWORK_INFRASTRUCTURE networkType ;
+       int bstart = 1, bstop = 1;
+       networkType=Ndis802_11Infrastructure;
+       if (copy_from_user(extra, wrqu->data.pointer, wrqu->data.length))
+                       return -EFAULT;
+                       
+       rtw_pm_set_ips(padapter,IPS_NONE);
+       LeaveAllPowerSaveMode(padapter);
        
        
-       BT_REQ_CMD      BtReq;
-       PMPT_CONTEXT    pMptCtx=&(padapter->mppriv.MptCtx);
-       PBT_RSP_CMD     pBtRsp=(PBT_RSP_CMD)&pMptCtx->mptOutBuf[0];
-       char    input[128];
+#ifdef CONFIG_MP_INCLUDED
+       if (init_mp_priv(padapter) == _FAIL) {
+                       DBG_871X("%s: initialize MP private data Fail!\n", __func__);
+       }
+       padapter->mppriv.channel = 6;
+
+       bstart = strncmp(extra, "start", 5); // strncmp TRUE is 0
+       bstop = strncmp(extra, "stop", 4); // strncmp TRUE is 0
+       if(bstart==0)
+       {
+               mp_join(padapter,WIFI_FW_ADHOC_STATE);
+               SetPacketRx(padapter, _TRUE, _FALSE);
+               Hal_SetChannel(padapter);
+               pmp_priv->rx_bindicatePkt= _TRUE;
+               pmp_priv->bRTWSmbCfg = _TRUE;
+               sprintf(extra, "monitor mode start\n");
+       }
+       else if (bstop==0)
+       {
+               SetPacketRx(padapter, _FALSE, _FALSE);
+               pmp_priv->rx_bindicatePkt= _FALSE;
+               pmp_priv->bRTWSmbCfg = _FALSE;
+               padapter->registrypriv.mp_mode=1;
+               pHalFunc->hal_deinit(padapter);
+               padapter->registrypriv.mp_mode=0;
+               pHalFunc->hal_init(padapter);
+               //rtw_disassoc_cmd(padapter, 0, _TRUE);
+               if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
+                       rtw_disassoc_cmd(padapter, 500, _TRUE);
+                       rtw_indicate_disconnect(padapter);
+                       //rtw_free_assoc_resources(padapter, 1);
+               }
+               rtw_pm_set_ips(padapter,IPS_NORMAL);
+               sprintf(extra, "monitor mode Stop\n");
+       }
+#endif
+       wrqu->data.length = strlen(extra);
+       return 0;
+}
+
+static int rtw_efuse_mask_file(struct net_device *dev,
+                       struct iw_request_info *info,
+                       union iwreq_data *wrqu, char *extra)
+{
+       char *rtw_efuse_mask_file_path;
+       u8 Status;
+       PADAPTER padapter = rtw_netdev_priv(dev);
+       _rtw_memset(maskfileBuffer,0x00,sizeof(maskfileBuffer));
+
+       if (copy_from_user(extra, wrqu->data.pointer, wrqu->data.length))
+                       return -EFAULT;
+
+       if(strncmp(extra, "off",3) ==0 && strlen(extra)<4)
+       {       
+               padapter->registrypriv.boffefusemask=1;
+               sprintf(extra, "Turn off Efuse Mask\n");
+               wrqu->data.length = strlen(extra);
+               return 0;
+       }
+       if(strncmp(extra, "on",2) ==0 && strlen(extra)<3)
+       {       
+               padapter->registrypriv.boffefusemask=0;
+               sprintf(extra, "Turn on Efuse Mask\n");
+               wrqu->data.length = strlen(extra);
+               return 0;
+       }
+       rtw_efuse_mask_file_path=extra;
+       
+       if (rtw_is_file_readable(rtw_efuse_mask_file_path) == _TRUE)
+       {
+               DBG_871X("%s do rtw_efuse_mask_file_read = %s! ,sizeof maskfileBuffer %zu\n",__FUNCTION__,rtw_efuse_mask_file_path,sizeof(maskfileBuffer));
+               Status=rtw_efuse_file_read(padapter,rtw_efuse_mask_file_path,maskfileBuffer,sizeof(maskfileBuffer));
+               if(Status==_TRUE)
+                 padapter->registrypriv.bFileMaskEfuse = _TRUE;
+               sprintf(extra, "efuse mask file read OK\n");    
+       } else {
+               padapter->registrypriv.bFileMaskEfuse = _FALSE;
+               sprintf(extra, "efuse mask file readable FAIL\n");      
+               DBG_871X("%s rtw_is_file_readable fail !\n",__FUNCTION__);
+       }
+        wrqu->data.length = strlen(extra);     
+       return 0;
+}
+
+
+static int rtw_efuse_file_map(struct net_device *dev,
+                       struct iw_request_info *info,
+                       union iwreq_data *wrqu, char *extra)
+{
+       char *rtw_efuse_file_map_path;
+       u8 Status;
+       PEFUSE_HAL pEfuseHal;
+       PADAPTER padapter = rtw_netdev_priv(dev);
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+       pEfuseHal = &pHalData->EfuseHal;
+       if (copy_from_user(extra, wrqu->data.pointer, wrqu->data.length))
+                       return -EFAULT;
+
+       rtw_efuse_file_map_path=extra;
+
+       if (rtw_is_file_readable(rtw_efuse_file_map_path) == _TRUE)
+       {
+               DBG_871X("%s do rtw_efuse_mask_file_read = %s! \n",__FUNCTION__,rtw_efuse_file_map_path);
+               Status=rtw_efuse_file_read(padapter,rtw_efuse_file_map_path,pEfuseHal->fakeEfuseModifiedMap,sizeof(pEfuseHal->fakeEfuseModifiedMap));
+               if(Status==_TRUE)
+                       sprintf(extra, "efuse file file_read OK\n");
+               else    
+                       sprintf(extra, "efuse file file_read FAIL\n");
+       } else {
+               sprintf(extra, "efuse file readable FAIL\n");   
+               DBG_871X("%s rtw_is_file_readable fail !\n",__FUNCTION__);
+       }
+        wrqu->data.length = strlen(extra);     
+       return 0;
+}
+
+
+#if defined(CONFIG_RTL8723B)
+/* update Tx AGC offset */
+static int rtw_mp_SetBT(struct net_device *dev,
+                       struct iw_request_info *info,
+                       union iwreq_data *wrqu, char *extra)
+{
+       PADAPTER padapter = rtw_netdev_priv(dev);
+       struct hal_ops *pHalFunc = &padapter->HalFunc;
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
+       
+       BT_REQ_CMD      BtReq;
+       PMPT_CONTEXT    pMptCtx=&(padapter->mppriv.MptCtx);
+       PBT_RSP_CMD     pBtRsp=(PBT_RSP_CMD)&pMptCtx->mptOutBuf[0];
+       char    input[128];
        char *pch, *ptmp, *token, *tmp[2]={0x00,0x00};
        u8 setdata[100];
        u8 resetbt=0x00;
        u8 tempval,BTStatus;
        u8 H2cSetbtmac[6];
        u8 u1H2CBtMpOperParm[4]={0x01};
        char *pch, *ptmp, *token, *tmp[2]={0x00,0x00};
        u8 setdata[100];
        u8 resetbt=0x00;
        u8 tempval,BTStatus;
        u8 H2cSetbtmac[6];
        u8 u1H2CBtMpOperParm[4]={0x01};
-       u16 testmode=1,ready=1,trxparam=1,setgen=1,getgen=1,testctrl=1,testbt=1,readtherm=1,setbtmac=1;
-       u32 i=0,ii=0,jj=0,kk=0,cnts=0,status=0;
+       int testmode = 1, ready = 1, trxparam = 1, setgen = 1, getgen = 1, testctrl = 1, testbt = 1, readtherm = 1, setbtmac = 1;
+       u32 i = 0, ii = 0, jj = 0, kk = 0, cnts = 0, status = 0;
        PRT_MP_FIRMWARE pBTFirmware = NULL;
        
        if (copy_from_user(extra, wrqu->data.pointer, wrqu->data.length))
        PRT_MP_FIRMWARE pBTFirmware = NULL;
        
        if (copy_from_user(extra, wrqu->data.pointer, wrqu->data.length))
@@ -12619,19 +12629,16 @@ static int rtw_mp_SetBT(struct net_device *dev,
                rtw_msleep_os(100);
 
                DBG_8192C("FirmwareDownloadBT ready = 0x%x 0x%x", pMptCtx->mptOutBuf[4],pMptCtx->mptOutBuf[5]);
                rtw_msleep_os(100);
 
                DBG_8192C("FirmwareDownloadBT ready = 0x%x 0x%x", pMptCtx->mptOutBuf[4],pMptCtx->mptOutBuf[5]);
-               if( (pMptCtx->mptOutBuf[4]==0x00) && (pMptCtx->mptOutBuf[5]==0x00))
-                       {
-                               if(padapter->mppriv.bTxBufCkFail==_TRUE)
-                                       sprintf(extra, "check TxBuf Fail.\n");
-                               else
-                                       sprintf(extra, "download FW Fail.\n");
-                       }
+               if ((pMptCtx->mptOutBuf[4] == 0x00) && (pMptCtx->mptOutBuf[5] == 0x00)) {
+
+                       if (padapter->mppriv.bTxBufCkFail == _TRUE)
+                               sprintf(extra, "check TxBuf Fail.\n");
                        else
                        else
-                       {
-                               sprintf(extra, "download FW OK.\n");
-                               goto exit;
-                       }
-               goto exit;
+                               sprintf(extra, "download FW Fail.\n");
+               } else {
+                       sprintf(extra, "download FW OK.\n");
+                       goto exit;
+               }
                goto exit;      
        }
        if ( strncmp(extra, "dlfw", 4) == 0)
                goto exit;      
        }
        if ( strncmp(extra, "dlfw", 4) == 0)
@@ -12674,11 +12681,9 @@ static int rtw_mp_SetBT(struct net_device *dev,
                DBG_871X("%s: pull up BT reset pin when bt start mp test\n", __FUNCTION__);
                rtw_wifi_gpio_wlan_ctrl(WLAN_BT_PWDN_ON);
 #endif
                DBG_871X("%s: pull up BT reset pin when bt start mp test\n", __FUNCTION__);
                rtw_wifi_gpio_wlan_ctrl(WLAN_BT_PWDN_ON);
 #endif
-               DBG_871X(" rtl8723a_FirmwareDownload!\n");
+               DBG_871X(" FirmwareDownload!\n");
 
 
-#ifdef CONFIG_RTL8723A
-               status = rtl8723a_FirmwareDownload(padapter);
-#elif defined(CONFIG_RTL8723B)
+#if defined(CONFIG_RTL8723B)
                status = rtl8723b_FirmwareDownload(padapter, _FALSE);
 #endif
                DBG_871X("Wait for FirmwareDownloadBT fw boot!\n");
                status = rtl8723b_FirmwareDownload(padapter, _FALSE);
 #endif
                DBG_871X("Wait for FirmwareDownloadBT fw boot!\n");
@@ -12881,11 +12886,7 @@ todo:
                        if ((pMptCtx->mptOutBuf[i]==0x00) && (pMptCtx->mptOutBuf[i+1]==0x00))
                                goto exit;
 
                        if ((pMptCtx->mptOutBuf[i]==0x00) && (pMptCtx->mptOutBuf[i+1]==0x00))
                                goto exit;
 
-#ifdef CONFIG_RTL8723A
-                       sprintf(extra, "%s %d ", extra, (pMptCtx->mptOutBuf[i]& 0x3f));
-#else
                        sprintf(extra, "%s %d ", extra, (pMptCtx->mptOutBuf[i]& 0x1f));
                        sprintf(extra, "%s %d ", extra, (pMptCtx->mptOutBuf[i]& 0x1f));
-#endif
                }
        }
        else
                }
        }
        else
@@ -12903,7 +12904,7 @@ exit:
        return status;
 }
 
        return status;
 }
 
-#endif //#ifdef CONFIG_RTL8723A
+#endif //#ifdef CONFIG_RTL8723B
 
 static int rtw_mp_set(struct net_device *dev,
                        struct iw_request_info *info,
 
 static int rtw_mp_set(struct net_device *dev,
                        struct iw_request_info *info,
@@ -13081,7 +13082,7 @@ static int rtw_mp_get(struct net_device *dev,
                        DBG_871X("set case MP_CTX \n");
                        rtw_mp_ctx (dev,info,wrqu,extra);
                        break;
                        DBG_871X("set case MP_CTX \n");
                        rtw_mp_ctx (dev,info,wrqu,extra);
                        break;
-                       
+                                       
        case MP_ARX:
                        DBG_871X("set case MP_ARX \n");
                        rtw_mp_arx (dev,info,wrqu,extra);
        case MP_ARX:
                        DBG_871X("set case MP_ARX \n");
                        rtw_mp_arx (dev,info,wrqu,extra);
@@ -13123,12 +13124,24 @@ static int rtw_mp_get(struct net_device *dev,
        case MP_GET_TXPOWER_INX:
                        DBG_871X("mp_get MP_GET_TXPOWER_INX \n");
                        rtw_mp_txpower_index(dev,info,wrqu,extra);
        case MP_GET_TXPOWER_INX:
                        DBG_871X("mp_get MP_GET_TXPOWER_INX \n");
                        rtw_mp_txpower_index(dev,info,wrqu,extra);
-               break;
+                       break;
        case MP_GETVER:
                        DBG_871X("mp_get MP_GETVER \n");
                        rtw_mp_getver(dev,info,wdata,extra);
                        break;
        case MP_GETVER:
                        DBG_871X("mp_get MP_GETVER \n");
                        rtw_mp_getver(dev,info,wdata,extra);
                        break;
-#if defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B)
+       case  MP_MON:
+                       DBG_871X("mp_get MP_MON \n");
+                       rtw_mp_mon(dev,info,wdata,extra);
+                       break;
+       case  EFUSE_MASK:
+                       DBG_871X("mp_get EFUSE_MASK\n");
+                       rtw_efuse_mask_file(dev,info,wdata,extra);
+                       break;
+        case  EFUSE_FILE:
+                       DBG_871X("mp_get EFUSE_FILE\n");
+                       rtw_efuse_file_map(dev,info,wdata,extra);
+                       break;          
+#if defined(CONFIG_RTL8723B)
        case MP_SetBT:          
                        DBG_871X("set MP_SetBT \n");
                        rtw_mp_SetBT(dev,info,wdata,extra);
        case MP_SetBT:          
                        DBG_871X("set MP_SetBT \n");
                        rtw_mp_SetBT(dev,info,wdata,extra);
@@ -13154,19 +13167,15 @@ static int rtw_wfd_tdls_enable(struct net_device *dev,
 
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
 
 
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
 
-       printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
+       DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
        if ( extra[ 0 ] == '0' )
 
        if ( extra[ 0 ] == '0' )
-       {
                padapter->wdinfo.wfd_tdls_enable = 0;
                padapter->wdinfo.wfd_tdls_enable = 0;
-       }
        else
        else
-       {
                padapter->wdinfo.wfd_tdls_enable = 1;
                padapter->wdinfo.wfd_tdls_enable = 1;
-       }
 
 
-#endif //CONFIG_WFD
-#endif //CONFIG_TDLS
+#endif /* CONFIG_WFD */
+#endif /* CONFIG_TDLS */
        
        return ret;
 }
        
        return ret;
 }
@@ -13185,14 +13194,11 @@ static int rtw_tdls_weaksec(struct net_device *dev,
        DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
        if ( extra[ 0 ] == '0' )
        DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
        if ( extra[ 0 ] == '0' )
-       {
                padapter->wdinfo.wfd_tdls_weaksec = 0;
                padapter->wdinfo.wfd_tdls_weaksec = 0;
-       }
        else
        else
-       {
                padapter->wdinfo.wfd_tdls_weaksec = 1;
                padapter->wdinfo.wfd_tdls_weaksec = 1;
-       }
-#endif
+
+#endif /* CONFIG_TDLS */
        
        return ret;
 }
        
        return ret;
 }
@@ -13217,56 +13223,48 @@ static int rtw_tdls_enable(struct net_device *dev,
        u8 empty_hwaddr[ETH_ALEN] = { 0x00 };
        struct tdls_txmgmt txmgmt;
 
        u8 empty_hwaddr[ETH_ALEN] = { 0x00 };
        struct tdls_txmgmt txmgmt;
 
-       printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
+       DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
        _rtw_memset(tdls_sta, 0x00, sizeof(tdls_sta));
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));
 
 
        _rtw_memset(tdls_sta, 0x00, sizeof(tdls_sta));
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));
 
-       if ( extra[ 0 ] == '0' )
-       {
+       if (extra[ 0 ] == '0') {
                ptdlsinfo->tdls_enable = 0;
 
                if(pstapriv->asoc_sta_count==1)
                        return ret;
 
                _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
                ptdlsinfo->tdls_enable = 0;
 
                if(pstapriv->asoc_sta_count==1)
                        return ret;
 
                _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
-               for(index=0; index< NUM_STA; index++)
-               {
+               for (index=0; index< NUM_STA; index++) {
                        phead = &(pstapriv->sta_hash[index]);
                        plist = get_next(phead);
                        
                        phead = &(pstapriv->sta_hash[index]);
                        plist = get_next(phead);
                        
-                       while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
-                       {
+                       while (rtw_end_of_queue_search(phead, plist) == _FALSE) {
                                psta = LIST_CONTAINOR(plist, struct sta_info ,hash_list);
 
                                plist = get_next(plist);
 
                                psta = LIST_CONTAINOR(plist, struct sta_info ,hash_list);
 
                                plist = get_next(plist);
 
-                               if(psta->tdls_sta_state != TDLS_STATE_NONE)
-                               {
+                               if (psta->tdls_sta_state != TDLS_STATE_NONE) {
                                        _rtw_memcpy(tdls_sta[index], psta->hwaddr, ETH_ALEN);
                                }
                        }
                }
                _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
 
                                        _rtw_memcpy(tdls_sta[index], psta->hwaddr, ETH_ALEN);
                                }
                        }
                }
                _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
 
-               for(index=0; index< NUM_STA; index++)
-               {
-                       if( !_rtw_memcmp(tdls_sta[index], empty_hwaddr, ETH_ALEN) )
-                       {
-                               printk("issue tear down to "MAC_FMT"\n", MAC_ARG(tdls_sta[index]));
+               for (index=0; index< NUM_STA; index++) {
+                       if (!_rtw_memcmp(tdls_sta[index], empty_hwaddr, ETH_ALEN)) {
+                               DBG_871X("issue tear down to "MAC_FMT"\n", MAC_ARG(tdls_sta[index]));
                                txmgmt.status_code = _RSON_TDLS_TEAR_UN_RSN_;
                                _rtw_memcpy(txmgmt.peer, tdls_sta[index], ETH_ALEN);
                                txmgmt.status_code = _RSON_TDLS_TEAR_UN_RSN_;
                                _rtw_memcpy(txmgmt.peer, tdls_sta[index], ETH_ALEN);
-                               issue_tdls_teardown(padapter, &txmgmt, _FALSE);
+                               issue_tdls_teardown(padapter, &txmgmt, _TRUE);
                        }
                }
                        }
                }
-               rtw_tdls_cmd(padapter, myid(&(padapter->eeprompriv)), TDLS_RS_RCR);
+               rtw_tdls_cmd(padapter, NULL, TDLS_RS_RCR);
                rtw_reset_tdls_info(padapter);
                rtw_reset_tdls_info(padapter);
-       }
-       else if ( extra[ 0 ] == '1' )
-       {
+       }       else if (extra[0] == '1') {
                ptdlsinfo->tdls_enable = 1;
        }
                ptdlsinfo->tdls_enable = 1;
        }
-#endif //CONFIG_TDLS
+#endif /* CONFIG_TDLS */
        
        return ret;
 }
        
        return ret;
 }
@@ -13282,13 +13280,12 @@ static int rtw_tdls_setup(struct net_device *dev,
        struct tdls_txmgmt txmgmt;
 #ifdef CONFIG_WFD
        struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
        struct tdls_txmgmt txmgmt;
 #ifdef CONFIG_WFD
        struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
-#endif // CONFIG_WFD
+#endif /* CONFIG_WFD */
 
 
-       printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
+       DBG_871X("[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1);
 
 
-       if(wrqu->data.length - 1 != 17 )
-       {
-               printk( "[%s] length:%d != 17\n", __FUNCTION__, (wrqu->data.length -1)  );
+       if (wrqu->data.length - 1 != 17) {
+               DBG_871X("[%s] length:%d != 17\n", __FUNCTION__, (wrqu->data.length -1));
                return ret;
        }
 
                return ret;
        }
 
@@ -13298,25 +13295,21 @@ static int rtw_tdls_setup(struct net_device *dev,
        }
 
 #ifdef CONFIG_WFD
        }
 
 #ifdef CONFIG_WFD
-       if ( _AES_ != padapter->securitypriv.dot11PrivacyAlgrthm )
-       {
-               //      Weak Security situation with AP.
-               if ( 0 == pwdinfo->wfd_tdls_weaksec )
-               {
-                       //      Can't send the tdls setup request out!!
-                       DBG_871X( "[%s] Current link is not AES, SKIP sending the tdls setup request!!\n", __FUNCTION__ );
-               }
-               else
-               {
+       if (_AES_ != padapter->securitypriv.dot11PrivacyAlgrthm) {
+               /* Weak Security situation with AP. */
+               if (0 == pwdinfo->wfd_tdls_weaksec)     {
+                       /* Can't send the tdls setup request out!! */
+                       DBG_871X("[%s] Current link is not AES, "
+                               "SKIP sending the tdls setup request!!\n", __FUNCTION__);
+               } else {
                        issue_tdls_setup_req(padapter, &txmgmt, _TRUE);
                }
                        issue_tdls_setup_req(padapter, &txmgmt, _TRUE);
                }
-       }
-       else
-#endif // CONFIG_WFD
+       } else
+#endif /* CONFIG_WFD */
        {
                issue_tdls_setup_req(padapter, &txmgmt, _TRUE);
        }
        {
                issue_tdls_setup_req(padapter, &txmgmt, _TRUE);
        }
-#endif
+#endif /* CONFIG_TDLS */
        
        return ret;
 }
        
        return ret;
 }
@@ -13336,30 +13329,28 @@ static int rtw_tdls_teardown(struct net_device *dev,
 
        DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
 
        DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
-       if(wrqu->data.length - 1 != 17 && wrqu->data.length - 1 != 19)
-       {
-               printk( "[%s] length:%d != 17 or 19\n", __FUNCTION__, (wrqu->data.length -1)  );
+       if (wrqu->data.length - 1 != 17 && wrqu->data.length - 1 != 19) {
+               DBG_871X("[%s] length:%d != 17 or 19\n",
+                       __FUNCTION__, (wrqu->data.length -1));
                return ret;
        }
 
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));
                return ret;
        }
 
        _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));
-       for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
+       for (i=0, j=0; i < ETH_ALEN; i++, j+=3)
                txmgmt.peer[i]=key_2char2num(*(extra+j), *(extra+j+1));
                txmgmt.peer[i]=key_2char2num(*(extra+j), *(extra+j+1));
-       }
 
        ptdls_sta = rtw_get_stainfo( &(padapter->stapriv), txmgmt.peer);
        
 
        ptdls_sta = rtw_get_stainfo( &(padapter->stapriv), txmgmt.peer);
        
-       if(ptdls_sta != NULL)
-       {
+       if (ptdls_sta != NULL) {
                txmgmt.status_code = _RSON_TDLS_TEAR_UN_RSN_;
                txmgmt.status_code = _RSON_TDLS_TEAR_UN_RSN_;
-               if(wrqu->data.length - 1 == 17)
+               if (wrqu->data.length - 1 == 19)
                        issue_tdls_teardown(padapter, &txmgmt, _FALSE);
                        issue_tdls_teardown(padapter, &txmgmt, _FALSE);
-               else if(wrqu->data.length - 1 == 19)
+               else 
                        issue_tdls_teardown(padapter, &txmgmt, _TRUE);
                        issue_tdls_teardown(padapter, &txmgmt, _TRUE);
-       }
-       else
+       } else {
                DBG_871X( "TDLS peer not found\n");
                DBG_871X( "TDLS peer not found\n");
-#endif //CONFIG_TDLS
+       }
+#endif /* CONFIG_TDLS */
        
        return ret;
 }
        
        return ret;
 }
@@ -13373,8 +13364,6 @@ static int rtw_tdls_discovery(struct net_device *dev,
 #ifdef CONFIG_TDLS
        
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
 #ifdef CONFIG_TDLS
        
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
-       struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        struct tdls_txmgmt      txmgmt;
        int i = 0, j=0;
 
        struct tdls_txmgmt      txmgmt;
        int i = 0, j=0;
 
@@ -13387,7 +13376,7 @@ static int rtw_tdls_discovery(struct net_device *dev,
 
        issue_tdls_dis_req(padapter, &txmgmt);
 
 
        issue_tdls_dis_req(padapter, &txmgmt);
 
-#endif //CONFIG_TDLS
+#endif /* CONFIG_TDLS */
 
        return ret;
 }
 
        return ret;
 }
@@ -13399,27 +13388,169 @@ static int rtw_tdls_ch_switch(struct net_device *dev,
        int ret = 0;
 
 #ifdef CONFIG_TDLS
        int ret = 0;
 
 #ifdef CONFIG_TDLS
-       
+#ifdef CONFIG_TDLS_CH_SW       
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
-       struct tdls_info        *ptdlsinfo = &padapter->tdlsinfo;
-       u8 i, j, mac_addr[ETH_ALEN];
+       struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;
+       u8 i, j;
        struct sta_info *ptdls_sta = NULL;
 
        DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
        struct sta_info *ptdls_sta = NULL;
 
        DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
+       if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)
+       {
+               DBG_871X("Can't do TDLS channel switch since ch_switch_prohibited = _TRUE\n");
+               return ret;
+       }
+
        for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
        for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
-               mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
+               pchsw_info->addr[i] = key_2char2num(*(extra+j), *(extra+j+1));
        }
 
        }
 
-       ptdls_sta = rtw_get_stainfo(&padapter->stapriv, mac_addr);
+       ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pchsw_info->addr);
        if( ptdls_sta == NULL )
                return ret;
 
        if( ptdls_sta == NULL )
                return ret;
 
-//     ptdlsinfo->ch_sensing=1;
+       pchsw_info->ch_sw_state |= TDLS_CH_SW_INITIATOR_STATE;
+
+       if (ptdls_sta != NULL) {
+               if (pchsw_info->off_ch_num == 0)
+                       pchsw_info->off_ch_num = 11;
+       }else {
+               DBG_871X( "TDLS peer not found\n");
+       }
+
+       
+       //issue_tdls_ch_switch_req(padapter, ptdls_sta);
+       /* DBG_871X("issue tdls ch switch req\n"); */
+
+#endif /* CONFIG_TDLS_CH_SW */
+#endif /* CONFIG_TDLS */
+
+       return ret;
+}
+
+static int rtw_tdls_ch_switch_off(struct net_device *dev,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
+{
+       int ret = 0;
+
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW       
+       
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;
+       u8 i, j, mac_addr[ETH_ALEN];
+       struct sta_info *ptdls_sta = NULL;
+       struct tdls_txmgmt txmgmt;
+
+       _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));
+       
+       DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
+
+       if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)
+       {
+               DBG_871X("Can't do TDLS channel switch since ch_switch_prohibited = _TRUE\n");
+               return ret;
+       }
+
+       if (wrqu->data.length >= 17) {
+               for (i=0, j=0 ; i < ETH_ALEN; i++, j+=3)
+               mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
+                       ptdls_sta = rtw_get_stainfo(&padapter->stapriv, mac_addr);
+       }
+
+       if (padapter->mlmeextpriv.cur_channel != rtw_get_oper_ch(padapter)) {   
+               SelectChannel(padapter, padapter->mlmeextpriv.cur_channel);
+       }
+
+       pchsw_info->ch_sw_state &= ~(TDLS_CH_SW_INITIATOR_STATE |
+                                                               TDLS_CH_SWITCH_ON_STATE |
+                                                               TDLS_PEER_AT_OFF_STATE);
+       ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);
+       _rtw_memset(pchsw_info->addr, 0x00, ETH_ALEN);
+
+       if (ptdls_sta != NULL) {
+               ptdls_sta->ch_switch_time = 0;
+               ptdls_sta->ch_switch_timeout = 0;
+               _cancel_timer_ex(&ptdls_sta->ch_sw_timer);
+               _cancel_timer_ex(&ptdls_sta->delay_timer);
+       }
+
+#endif /* CONFIG_TDLS_CH_SW */
+#endif /* CONFIG_TDLS */
 
 
-//     rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_INIT_CH_SEN);
+       return ret;
+}
+
+static int rtw_tdls_dump_ch(struct net_device *dev,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
+{
+       int ret = 0;
+
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW       
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+
+       DBG_8192C("[%s] dump_stack:%s\n", __FUNCTION__, extra);
+
+       extra[ wrqu->data.length ] = 0x00;
+       ptdlsinfo->chsw_info.dump_stack = rtw_atoi( extra );
+
+       return ret;
+
+#endif
+#endif /* CONFIG_TDLS */
+
+       return ret;
+}
+
+static int rtw_tdls_off_ch_num(struct net_device *dev,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
+{
+       int ret = 0;
+
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW       
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+
+       DBG_8192C("[%s] off_ch_num:%s\n", __FUNCTION__, extra);
+
+       extra[ wrqu->data.length ] = 0x00;
+       ptdlsinfo->chsw_info.off_ch_num = rtw_atoi(extra);
+
+       return ret;
+       
+#endif
+#endif /* CONFIG_TDLS */
+
+       return ret;
+}
+
+static int rtw_tdls_ch_offset(struct net_device *dev,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
+{
+       int ret = 0;
+
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW       
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+       struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+
+       DBG_8192C("[%s] ch_offset:%s\n", __FUNCTION__, extra);
+
+       extra[ wrqu->data.length ] = 0x00;
+       ptdlsinfo->chsw_info.ch_offset = rtw_atoi( extra );
+
+       return ret;
 
 
-#endif //CONFIG_TDLS
+#endif
+#endif /* CONFIG_TDLS */
 
                return ret;
 }
 
                return ret;
 }
@@ -13433,22 +13564,19 @@ static int rtw_tdls_pson(struct net_device *dev,
 #ifdef CONFIG_TDLS
        
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
 #ifdef CONFIG_TDLS
        
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
-       struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        u8 i, j, mac_addr[ETH_ALEN];
        struct sta_info *ptdls_sta = NULL;
 
        DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
        u8 i, j, mac_addr[ETH_ALEN];
        struct sta_info *ptdls_sta = NULL;
 
        DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
-       for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
+       for (i=0, j=0; i < ETH_ALEN; i++, j+=3)
                mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
                mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
-       }
 
        ptdls_sta = rtw_get_stainfo(&padapter->stapriv, mac_addr);
 
        issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta->hwaddr, 1, 3, 500);
 
 
        ptdls_sta = rtw_get_stainfo(&padapter->stapriv, mac_addr);
 
        issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta->hwaddr, 1, 3, 500);
 
-#endif //CONFIG_TDLS
+#endif /* CONFIG_TDLS */
 
                return ret;
 }
 
                return ret;
 }
@@ -13462,25 +13590,20 @@ static int rtw_tdls_psoff(struct net_device *dev,
 #ifdef CONFIG_TDLS
        
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
 #ifdef CONFIG_TDLS
        
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
-       struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        u8 i, j, mac_addr[ETH_ALEN];
        struct sta_info *ptdls_sta = NULL;
        
        DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
        u8 i, j, mac_addr[ETH_ALEN];
        struct sta_info *ptdls_sta = NULL;
        
        DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
 
-       for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
+       for (i=0, j=0; i < ETH_ALEN; i++, j+=3)
                mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
                mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
-       }
 
        ptdls_sta = rtw_get_stainfo(&padapter->stapriv, mac_addr);
 
        if(ptdls_sta)
 
        ptdls_sta = rtw_get_stainfo(&padapter->stapriv, mac_addr);
 
        if(ptdls_sta)
-       {
-               //issue_tdls_peer_traffic_rsp(padapter, ptdls_sta);
                issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta->hwaddr, 0, 3, 500);
                issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta->hwaddr, 0, 3, 500);
-       }
-#endif //CONFIG_TDLS
+
+#endif /* CONFIG_TDLS */
 
        return ret;
 }
 
        return ret;
 }
@@ -13497,17 +13620,13 @@ static int rtw_tdls_setip(struct net_device *dev,
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
        struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
        struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
-       u8 i=0, j=0, k=0, tag=0, ip[3] = { 0xff }, *ptr = extra;
-       
-       printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length - 1  );
+       u8 i=0, j=0, k=0, tag=0;
 
 
+       DBG_871X("[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length - 1);
 
 
-       while( i < 4 )
-       {
-               for( j=0; j < 4; j++)
-               {
-                       if( *( extra + j + tag ) == '.' || *( extra + j + tag ) == '\0' )
-                       {
+       while (i < 4) {
+               for (j=0; j < 4; j++) {
+                       if (*( extra + j + tag ) == '.' || *( extra + j + tag ) == '\0') {
                                if( j == 1 )
                                        pwfd_info->ip_address[i]=convert_ip_addr( '0', '0', *(extra+(j-1)+tag));
                                if( j == 2 )
                                if( j == 1 )
                                        pwfd_info->ip_address[i]=convert_ip_addr( '0', '0', *(extra+(j-1)+tag));
                                if( j == 2 )
@@ -13522,13 +13641,14 @@ static int rtw_tdls_setip(struct net_device *dev,
                i++;
        }
 
                i++;
        }
 
-       printk( "[%s] Set IP = %u.%u.%u.%u \n", __FUNCTION__, 
-               ptdlsinfo->wfd_info->ip_address[0], ptdlsinfo->wfd_info->ip_address[1],
-               ptdlsinfo->wfd_info->ip_address[2], ptdlsinfo->wfd_info->ip_address[3]
-       );
+       DBG_871X( "[%s] Set IP = %u.%u.%u.%u \n", __FUNCTION__, 
+               ptdlsinfo->wfd_info->ip_address[0],
+               ptdlsinfo->wfd_info->ip_address[1],
+               ptdlsinfo->wfd_info->ip_address[2],
+               ptdlsinfo->wfd_info->ip_address[3]);
 
 
-#endif //CONFIG_WFD    
-#endif //CONFIG_TDLS
+#endif /* CONFIG_WFD */
+#endif /* CONFIG_TDLS */
 
        return ret;
 }
 
        return ret;
 }
@@ -13546,22 +13666,20 @@ static int rtw_tdls_getip(struct net_device *dev,
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
        struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
        
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
        struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
        
-       printk( "[%s]\n", __FUNCTION__);
+       DBG_871X( "[%s]\n", __FUNCTION__);
 
        sprintf( extra, "\n\n%u.%u.%u.%u\n", 
                pwfd_info->peer_ip_address[0], pwfd_info->peer_ip_address[1], 
 
        sprintf( extra, "\n\n%u.%u.%u.%u\n", 
                pwfd_info->peer_ip_address[0], pwfd_info->peer_ip_address[1], 
-               pwfd_info->peer_ip_address[2], pwfd_info->peer_ip_address[3]
-               );
+               pwfd_info->peer_ip_address[2], pwfd_info->peer_ip_address[3]);
 
 
-       printk( "[%s] IP=%u.%u.%u.%u\n", __FUNCTION__,
+       DBG_871X( "[%s] IP=%u.%u.%u.%u\n", __FUNCTION__,
                pwfd_info->peer_ip_address[0], pwfd_info->peer_ip_address[1], 
                pwfd_info->peer_ip_address[0], pwfd_info->peer_ip_address[1], 
-               pwfd_info->peer_ip_address[2], pwfd_info->peer_ip_address[3]
-               );
+               pwfd_info->peer_ip_address[2], pwfd_info->peer_ip_address[3]);
        
        wrqu->data.length = strlen( extra );
 
        
        wrqu->data.length = strlen( extra );
 
-#endif //CONFIG_WFD    
-#endif //CONFIG_TDLS
+#endif /* CONFIG_WFD */
+#endif /* CONFIG_TDLS */
 
        return ret;
 }
 
        return ret;
 }
@@ -13580,21 +13698,22 @@ static int rtw_tdls_getport(struct net_device *dev,
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
        struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
 
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
        struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
 
-       printk( "[%s]\n", __FUNCTION__);
+       DBG_871X( "[%s]\n", __FUNCTION__);
 
        sprintf( extra, "\n\n%d\n", pwfd_info->peer_rtsp_ctrlport );
 
        sprintf( extra, "\n\n%d\n", pwfd_info->peer_rtsp_ctrlport );
-       printk( "[%s] remote port = %d\n", __FUNCTION__, pwfd_info->peer_rtsp_ctrlport );
+       DBG_871X( "[%s] remote port = %d\n",
+               __FUNCTION__, pwfd_info->peer_rtsp_ctrlport );
        
        wrqu->data.length = strlen( extra );
 
        
        wrqu->data.length = strlen( extra );
 
-#endif //CONFIG_WFD
-#endif //CONFIG_TDLS
+#endif /* CONFIG_WFD */
+#endif /* CONFIG_TDLS */
 
        return ret;
                
 }
 
 
        return ret;
                
 }
 
-//WFDTDLS, for sigma test
+/* WFDTDLS, for sigma test */
 static int rtw_tdls_dis_result(struct net_device *dev,
                                struct iw_request_info *info,
                                union iwreq_data *wrqu, char *extra)
 static int rtw_tdls_dis_result(struct net_device *dev,
                                struct iw_request_info *info,
                                union iwreq_data *wrqu, char *extra)
@@ -13607,26 +13726,24 @@ static int rtw_tdls_dis_result(struct net_device *dev,
 
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
 
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
-       struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
 
 
-       printk( "[%s]\n", __FUNCTION__);
+       DBG_871X( "[%s]\n", __FUNCTION__);
 
 
-       if(ptdlsinfo->dev_discovered == 1 )
-       {
+       if (ptdlsinfo->dev_discovered == _TRUE) {
                sprintf( extra, "\n\nDis=1\n" );
                sprintf( extra, "\n\nDis=1\n" );
-               ptdlsinfo->dev_discovered = 0;
+               ptdlsinfo->dev_discovered = _FALSE;
        }
        
        wrqu->data.length = strlen( extra );
 
        }
        
        wrqu->data.length = strlen( extra );
 
-#endif //CONFIG_WFD
-#endif //CONFIG_TDLS
+#endif /* CONFIG_WFD */
+#endif /* CONFIG_TDLS */
 
        return ret;
                
 }
 
 
        return ret;
                
 }
 
-//WFDTDLS, for sigma test
+/* WFDTDLS, for sigma test */
 static int rtw_wfd_tdls_status(struct net_device *dev,
                                struct iw_request_info *info,
                                union iwreq_data *wrqu, char *extra)
 static int rtw_wfd_tdls_status(struct net_device *dev,
                                struct iw_request_info *info,
                                union iwreq_data *wrqu, char *extra)
@@ -13639,20 +13756,39 @@ static int rtw_wfd_tdls_status(struct net_device *dev,
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
 
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
 
-       printk( "[%s]\n", __FUNCTION__);
+       DBG_871X("[%s]\n", __FUNCTION__);
 
 
-       sprintf( extra, "\nlink_established:0x%08x \n"
+       sprintf( extra, "\nlink_established:%d \n"
                "sta_cnt:%d \n"
                "sta_maximum:%d \n"
                "cur_channel:%d \n"
                "sta_cnt:%d \n"
                "sta_maximum:%d \n"
                "cur_channel:%d \n"
-               "tdls_enable:%d",
-               ptdlsinfo->link_established, ptdlsinfo->sta_cnt, ptdlsinfo->sta_maximum,
-               ptdlsinfo->cur_channel, ptdlsinfo->tdls_enable
-               );
+               "tdls_enable:%d"
+#ifdef CONFIG_TDLS_CH_SW
+               "ch_sw_state:%08x\n"
+               "chsw_on:%d\n"
+               "off_ch_num:%d\n"
+               "cur_time:%d\n"
+               "ch_offset:%d\n"
+               "delay_swtich_back:%d"
+#endif
+               ,
+               ptdlsinfo->link_established, ptdlsinfo->sta_cnt,
+               ptdlsinfo->sta_maximum, ptdlsinfo->cur_channel, 
+               ptdlsinfo->tdls_enable
+#ifdef CONFIG_TDLS_CH_SW
+,
+               ptdlsinfo->chsw_info.ch_sw_state,
+               ATOMIC_READ(&padapter->tdlsinfo.chsw_info.chsw_on),
+               ptdlsinfo->chsw_info.off_ch_num,
+               ptdlsinfo->chsw_info.cur_time,
+               ptdlsinfo->chsw_info.ch_offset,
+               ptdlsinfo->chsw_info.delay_switch_back
+#endif
+);
 
        wrqu->data.length = strlen( extra );
 
 
        wrqu->data.length = strlen( extra );
 
-#endif //CONFIG_TDLS
+#endif /* CONFIG_TDLS */
 
        return ret;
                
 
        return ret;
                
@@ -13671,68 +13807,102 @@ static int rtw_tdls_getsta(struct net_device *dev,
        char charmac[17];
        struct sta_info *ptdls_sta = NULL;
 
        char charmac[17];
        struct sta_info *ptdls_sta = NULL;
 
-       printk( "[%s] %s %d\n", __FUNCTION__, (char *)wrqu->data.pointer, wrqu->data.length -1  );
+       DBG_871X("[%s] %s %d\n", __FUNCTION__,
+               (char *)wrqu->data.pointer, wrqu->data.length -1);
 
        if(copy_from_user(charmac, wrqu->data.pointer+9, 17)){
                ret = -EFAULT;
                goto exit;
        }
        
 
        if(copy_from_user(charmac, wrqu->data.pointer+9, 17)){
                ret = -EFAULT;
                goto exit;
        }
        
-       printk("[%s] %d, charmac:%s\n", __FUNCTION__, __LINE__, charmac);
-       for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
+       DBG_871X("[%s] %d, charmac:%s\n", __FUNCTION__, __LINE__, charmac);
+       for (i=0, j=0 ; i < ETH_ALEN; i++, j+=3)
                addr[i]=key_2char2num(*(charmac+j), *(charmac+j+1));
                addr[i]=key_2char2num(*(charmac+j), *(charmac+j+1));
-       }
 
 
-       printk("[%s] %d, charmac:%s, addr:"MAC_FMT"\n", __FUNCTION__, __LINE__, charmac, MAC_ARG(addr));
+       DBG_871X("[%s] %d, charmac:%s, addr:"MAC_FMT"\n",
+               __FUNCTION__, __LINE__, charmac, MAC_ARG(addr));
        ptdls_sta = rtw_get_stainfo(&padapter->stapriv, addr);  
        if(ptdls_sta) {
        ptdls_sta = rtw_get_stainfo(&padapter->stapriv, addr);  
        if(ptdls_sta) {
-               sprintf(extra, "\n\ntdls_sta_state=%d\n", ptdls_sta->tdls_sta_state);
-               printk("\n\ntdls_sta_state=%d\n", ptdls_sta->tdls_sta_state);
-       }
-       else {
+               sprintf(extra, "\n\ntdls_sta_state=0x%08x\n", ptdls_sta->tdls_sta_state);
+               DBG_871X("\n\ntdls_sta_state=%d\n", ptdls_sta->tdls_sta_state);
+       } else {
                sprintf(extra, "\n\nNot found this sta\n");
                sprintf(extra, "\n\nNot found this sta\n");
-               printk("\n\nNot found this sta\n");
+               DBG_871X("\n\nNot found this sta\n");
        }
        wrqu->data.length = strlen( extra );
 
        }
        wrqu->data.length = strlen( extra );
 
-#endif //CONFIG_TDLS
+#endif /* CONFIG_TDLS */
 exit:
        return ret;
                
 }
 
 exit:
        return ret;
                
 }
 
-static int rtw_tdls_ch_switch_off(struct net_device *dev,
+static int rtw_tdls_get_best_ch(struct net_device *dev,
                                struct iw_request_info *info,
                                union iwreq_data *wrqu, char *extra)
 {
                                struct iw_request_info *info,
                                union iwreq_data *wrqu, char *extra)
 {
-       int ret = 0;
-
-#ifdef CONFIG_TDLS
-       
+#ifdef CONFIG_FIND_BEST_CHANNEL        
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
-       u8 i, j, mac_addr[ETH_ALEN];
-       struct sta_info *ptdls_sta = NULL;
+       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+       u32 i, best_channel_24G = 1, best_channel_5G = 36, index_24G = 0, index_5G = 0;
+
+       for (i=0; pmlmeext->channel_set[i].ChannelNum !=0; i++) {
+               if (pmlmeext->channel_set[i].ChannelNum == 1)
+                       index_24G = i;
+               if (pmlmeext->channel_set[i].ChannelNum == 36)
+                       index_5G = i;
+       }
+       
+       for (i=0; pmlmeext->channel_set[i].ChannelNum !=0; i++) {
+               /* 2.4G */
+               if (pmlmeext->channel_set[i].ChannelNum == 6 || pmlmeext->channel_set[i].ChannelNum == 11) {
+                       if (pmlmeext->channel_set[i].rx_count < pmlmeext->channel_set[index_24G].rx_count) {
+                               index_24G = i;
+                               best_channel_24G = pmlmeext->channel_set[i].ChannelNum;
+                       }
+               }
+
+               /* 5G */
+               if (pmlmeext->channel_set[i].ChannelNum >= 36
+                       && pmlmeext->channel_set[i].ChannelNum < 140) {
+                        /* Find primary channel */
+                       if (((pmlmeext->channel_set[i].ChannelNum - 36) % 8 == 0)
+                               && (pmlmeext->channel_set[i].rx_count < pmlmeext->channel_set[index_5G].rx_count)) {
+                               index_5G = i;
+                               best_channel_5G = pmlmeext->channel_set[i].ChannelNum;
+                       }
+               }
+
+               if (pmlmeext->channel_set[i].ChannelNum >= 149
+                       && pmlmeext->channel_set[i].ChannelNum < 165) {
+                        /* Find primary channel */
+                       if (((pmlmeext->channel_set[i].ChannelNum - 149) % 8 == 0)
+                               && (pmlmeext->channel_set[i].rx_count < pmlmeext->channel_set[index_5G].rx_count)) {
+                               index_5G = i;
+                               best_channel_5G = pmlmeext->channel_set[i].ChannelNum;
+                       }
+               }
+#if 1 /* debug */
+               DBG_871X("The rx cnt of channel %3d = %d\n", 
+                                       pmlmeext->channel_set[i].ChannelNum,
+                                       pmlmeext->channel_set[i].rx_count);
+#endif
+       }
        
        
-       DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1  );
+       sprintf( extra, "\nbest_channel_24G = %d\n", best_channel_24G );
+       DBG_871X("best_channel_24G = %d\n", best_channel_24G);
 
 
-       for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
-               mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
+       if (index_5G != 0) {
+               sprintf(extra, "best_channel_5G = %d\n", best_channel_5G);
+               DBG_871X("best_channel_5G = %d\n", best_channel_5G);
        }
 
        }
 
-       ptdls_sta = rtw_get_stainfo(&padapter->stapriv, mac_addr);
+       wrqu->data.length = strlen( extra );
 
 
-       ptdls_sta->tdls_sta_state |= TDLS_SW_OFF_STATE;
-/*
-       if((ptdls_sta->tdls_sta_state & TDLS_AT_OFF_CH_STATE) && (ptdls_sta->tdls_sta_state & TDLS_PEER_AT_OFF_STATE)){
-               pmlmeinfo->tdls_candidate_ch= pmlmeext->cur_channel;
-               issue_tdls_ch_switch_req(padapter, mac_addr);
-               DBG_871X("issue tdls ch switch req back to base channel\n");
-       }
-*/
-       
-#endif //CONFIG_TDLS
+#endif
+
+       return 0;
 
 
-       return ret;
 }
 
 static int rtw_tdls(struct net_device *dev,
 }
 
 static int rtw_tdls(struct net_device *dev,
@@ -13742,85 +13912,71 @@ static int rtw_tdls(struct net_device *dev,
        int ret = 0;
 
 #ifdef CONFIG_TDLS
        int ret = 0;
 
 #ifdef CONFIG_TDLS
-       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
-
 
 
+       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
 
        DBG_871X( "[%s] extra = %s\n", __FUNCTION__, extra );
 
        DBG_871X( "[%s] extra = %s\n", __FUNCTION__, extra );
-       //      WFD Sigma will use the tdls enable command to let the driver know we want to test the tdls now!
-       if ( _rtw_memcmp( extra, "wfdenable=", 10 ) )
-       {
+       /* WFD Sigma will use the tdls enable command to let the driver know we want to test the tdls now! */
+       if (_rtw_memcmp(extra, "wfdenable=", 10)) {
                wrqu->data.length -=10;
                rtw_wfd_tdls_enable( dev, info, wrqu, &extra[10] );
                return ret;
                wrqu->data.length -=10;
                rtw_wfd_tdls_enable( dev, info, wrqu, &extra[10] );
                return ret;
-       }
-       else if ( _rtw_memcmp( extra, "weaksec=", 8 ) )
-       {
+       } else if (_rtw_memcmp(extra, "weaksec=", 8)) {
                wrqu->data.length -=8;
                rtw_tdls_weaksec( dev, info, wrqu, &extra[8] );
                return ret;
                wrqu->data.length -=8;
                rtw_tdls_weaksec( dev, info, wrqu, &extra[8] );
                return ret;
-       }
-       else if ( _rtw_memcmp( extra, "tdlsenable=", 11 ) )
-       {
+       } else if (_rtw_memcmp( extra, "tdlsenable=", 11)) {
                wrqu->data.length -=11;
                rtw_tdls_enable( dev, info, wrqu, &extra[11] );
                return ret;
        }
 
                wrqu->data.length -=11;
                rtw_tdls_enable( dev, info, wrqu, &extra[11] );
                return ret;
        }
 
-       if( padapter->tdlsinfo.tdls_enable == 0 )
-       {
-               printk("tdls haven't enabled\n");
+       if (padapter->tdlsinfo.tdls_enable == 0) {
+               DBG_871X("tdls haven't enabled\n");
                return 0;
        }
 
                return 0;
        }
 
-       if ( _rtw_memcmp( extra, "setup=", 6 ) )
-       {
+       if (_rtw_memcmp(extra, "setup=", 6)) {
                wrqu->data.length -=6;
                rtw_tdls_setup( dev, info, wrqu, &extra[6] );
                wrqu->data.length -=6;
                rtw_tdls_setup( dev, info, wrqu, &extra[6] );
-       }
-       else if (_rtw_memcmp( extra, "tear=", 5 ) )
-       {
+       } else if (_rtw_memcmp(extra, "tear=", 5)) {
                wrqu->data.length -= 5;
                rtw_tdls_teardown( dev, info, wrqu, &extra[5] );
                wrqu->data.length -= 5;
                rtw_tdls_teardown( dev, info, wrqu, &extra[5] );
-       }
-       else if (_rtw_memcmp( extra, "dis=", 4 ) )
-       {
+       } else if (_rtw_memcmp(extra, "dis=", 4)) {
                wrqu->data.length -= 4;
                rtw_tdls_discovery( dev, info, wrqu, &extra[4] );
                wrqu->data.length -= 4;
                rtw_tdls_discovery( dev, info, wrqu, &extra[4] );
-       }
-       else if (_rtw_memcmp( extra, "sw=", 3 ) )
-       {
+       } else if (_rtw_memcmp(extra, "swoff=", 6)) {
+               wrqu->data.length -= 6;
+               rtw_tdls_ch_switch_off(dev, info, wrqu, &extra[6]);
+       } else if (_rtw_memcmp(extra, "sw=", 3)) {
                wrqu->data.length -= 3;
                rtw_tdls_ch_switch( dev, info, wrqu, &extra[3] );
                wrqu->data.length -= 3;
                rtw_tdls_ch_switch( dev, info, wrqu, &extra[3] );
-       }
-       else if (_rtw_memcmp( extra, "swoff=", 6 ) )
-       {
-               wrqu->data.length -= 6;
-               rtw_tdls_ch_switch_off( dev, info, wrqu, &extra[6] );
-       }       
-       else if (_rtw_memcmp( extra, "pson=", 5 ) )
-       {
+       } else if (_rtw_memcmp(extra, "dumpstack=", 10)) {
+               wrqu->data.length -= 10;
+               rtw_tdls_dump_ch(dev, info, wrqu, &extra[10]);
+       } else if (_rtw_memcmp(extra, "offchnum=", 9)) {
+               wrqu->data.length -= 9;
+               rtw_tdls_off_ch_num(dev, info, wrqu, &extra[9]);
+       } else if (_rtw_memcmp(extra, "choffset=", 9)) {
+               wrqu->data.length -= 9;
+               rtw_tdls_ch_offset(dev, info, wrqu, &extra[9]);
+       } else if (_rtw_memcmp(extra, "pson=", 5)) {
                wrqu->data.length -= 5;
                rtw_tdls_pson( dev, info, wrqu, &extra[5] );
                wrqu->data.length -= 5;
                rtw_tdls_pson( dev, info, wrqu, &extra[5] );
-       }
-       else if (_rtw_memcmp( extra, "psoff=", 6 ) )
-       {
+       } else if (_rtw_memcmp(extra, "psoff=", 6)) {
                wrqu->data.length -= 6;
                rtw_tdls_psoff( dev, info, wrqu, &extra[6] );
        }
 #ifdef CONFIG_WFD
                wrqu->data.length -= 6;
                rtw_tdls_psoff( dev, info, wrqu, &extra[6] );
        }
 #ifdef CONFIG_WFD
-       else if (_rtw_memcmp( extra, "setip=", 6 ) )
-       {
+       else if (_rtw_memcmp(extra, "setip=", 6)) {
                wrqu->data.length -= 6;
                rtw_tdls_setip( dev, info, wrqu, &extra[6] );
                wrqu->data.length -= 6;
                rtw_tdls_setip( dev, info, wrqu, &extra[6] );
-       }
-       else if (_rtw_memcmp( extra, "tprobe=", 6 ) )
-       {
+       } else if (_rtw_memcmp(extra, "tprobe=", 6)) {
                issue_tunneled_probe_req((_adapter *)rtw_netdev_priv(dev));
        }
                issue_tunneled_probe_req((_adapter *)rtw_netdev_priv(dev));
        }
-#endif //CONFIG_WFD
+#endif /* CONFIG_WFD */
 
 
-#endif //CONFIG_TDLS
+#endif /* CONFIG_TDLS */
        
        return ret;
 }
        
        return ret;
 }
@@ -13832,33 +13988,24 @@ static int rtw_tdls_get(struct net_device *dev,
 {
        int ret = 0;
 
 {
        int ret = 0;
 
-#ifdef CONFIG_WFD
+#ifdef CONFIG_TDLS
 
        DBG_871X( "[%s] extra = %s\n", __FUNCTION__, (char*) wrqu->data.pointer );
 
        if ( _rtw_memcmp( wrqu->data.pointer, "ip", 2 ) )
 
        DBG_871X( "[%s] extra = %s\n", __FUNCTION__, (char*) wrqu->data.pointer );
 
        if ( _rtw_memcmp( wrqu->data.pointer, "ip", 2 ) )
-       {
                rtw_tdls_getip( dev, info, wrqu, extra );
                rtw_tdls_getip( dev, info, wrqu, extra );
-       }
-       if ( _rtw_memcmp( wrqu->data.pointer, "port", 4 ) )
-       {
+       else if (_rtw_memcmp(wrqu->data.pointer, "port", 4))
                rtw_tdls_getport( dev, info, wrqu, extra );
                rtw_tdls_getport( dev, info, wrqu, extra );
-       }
-       //WFDTDLS, for sigma test
-       if ( _rtw_memcmp( wrqu->data.pointer, "dis", 3 ) )
-       {
+       /* WFDTDLS, for sigma test */
+       else if ( _rtw_memcmp(wrqu->data.pointer, "dis", 3))
                rtw_tdls_dis_result( dev, info, wrqu, extra );
                rtw_tdls_dis_result( dev, info, wrqu, extra );
-       }
-       if ( _rtw_memcmp( wrqu->data.pointer, "status", 6 ) )
-       {
+       else if ( _rtw_memcmp(wrqu->data.pointer, "status", 6))
                rtw_wfd_tdls_status( dev, info, wrqu, extra );
                rtw_wfd_tdls_status( dev, info, wrqu, extra );
-       }
-       if ( _rtw_memcmp( wrqu->data.pointer, "tdls_sta=", 9 ) )
-       {
+       else if ( _rtw_memcmp(wrqu->data.pointer, "tdls_sta=", 9))
                rtw_tdls_getsta( dev, info, wrqu, extra );
                rtw_tdls_getsta( dev, info, wrqu, extra );
-       }
-
-#endif //CONFIG_WFD
+       else if (_rtw_memcmp(wrqu->data.pointer, "best_ch", 7))
+               rtw_tdls_get_best_ch(dev, info, wrqu, extra);
+#endif /* CONFIG_TDLS */
 
        return ret;
 }
 
        return ret;
 }
@@ -13906,12 +14053,6 @@ static int rtw_widi_set_probe_request(struct net_device *dev,
 
 #ifdef CONFIG_MAC_LOOPBACK_DRIVER
 
 
 #ifdef CONFIG_MAC_LOOPBACK_DRIVER
 
-#ifdef CONFIG_RTL8723A
-extern void rtl8723a_cal_txdesc_chksum(struct tx_desc *ptxdesc);
-#define cal_txdesc_chksum rtl8723a_cal_txdesc_chksum
-extern void rtl8723a_fill_default_txdesc(struct xmit_frame *pxmitframe, u8 *pbuf);
-#define fill_default_txdesc rtl8723a_fill_default_txdesc
-#endif
 #if defined(CONFIG_RTL8188E)
 #include <rtl8188e_hal.h>
 extern void rtl8188e_cal_txdesc_chksum(struct tx_desc *ptxdesc);
 #if defined(CONFIG_RTL8188E)
 #include <rtl8188e_hal.h>
 extern void rtl8188e_cal_txdesc_chksum(struct tx_desc *ptxdesc);
@@ -14103,7 +14244,7 @@ static struct xmit_frame* createloopbackpkt(PADAPTER padapter, u32 size)
        _rtw_memset(pattrib, 0, sizeof(struct pkt_attrib));
 
        pattrib->ether_type = 0x8723;
        _rtw_memset(pattrib, 0, sizeof(struct pkt_attrib));
 
        pattrib->ether_type = 0x8723;
-       _rtw_memcpy(pattrib->src, padapter->eeprompriv.mac_addr, ETH_ALEN);
+       _rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
        _rtw_memset(pattrib->dst, 0xFF, ETH_ALEN);
        _rtw_memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
        _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
        _rtw_memset(pattrib->dst, 0xFF, ETH_ALEN);
        _rtw_memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
@@ -14415,11 +14556,9 @@ static void loopbackTest(PADAPTER padapter, u32 cnt, u32 size, u8* pmsg)
                return;
        }
 
                return;
        }
 
-       // disable dynamic algorithm
-       {
-       u32 DMFlag = DYNAMIC_FUNC_DISABLE;
-       rtw_hal_get_hwreg(padapter, HW_VAR_DM_FLAG, (u8*)&DMFlag);
-       }
+       // disable dynamic algorithm    
+       Save_DM_Func_Flag(padapter);
+       Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
 
        // create pseudo ad-hoc connection
        err = initpseudoadhoc(padapter);
 
        // create pseudo ad-hoc connection
        err = initpseudoadhoc(padapter);
@@ -14527,34 +14666,6 @@ static int rtw_test(
        }
 #endif
 
        }
 #endif
 
-#if 0
-//#ifdef CONFIG_RTL8723A
-       if (strcmp(pch, "poweron") == 0)
-       {
-               s32 ret;
-
-               ret = _InitPowerOn(padapter);
-               DBG_871X("%s: power on %s\n", __func__, (_FAIL==ret) ? "FAIL!":"OK.");
-               sprintf(extra, "Power ON %s", (_FAIL==ret) ? "FAIL!":"OK.");
-               wrqu->data.length = strlen(extra) + 1;
-
-               rtw_mfree(pbuf, len);
-               return 0;
-       }
-
-       if (strcmp(pch, "dlfw") == 0)
-       {
-               s32 ret;
-
-               ret = rtl8723a_FirmwareDownload(padapter);
-               DBG_871X("%s: download FW %s\n", __func__, (_FAIL==ret) ? "FAIL!":"OK.");
-               sprintf(extra, "download FW %s", (_FAIL==ret) ? "FAIL!":"OK.");
-               wrqu->data.length = strlen(extra) + 1;
-
-               rtw_mfree(pbuf, len);
-               return 0;
-       }
-#endif
 
 #ifdef CONFIG_BT_COEXIST
        if (strcmp(pch, "bton") == 0)
 
 #ifdef CONFIG_BT_COEXIST
        if (strcmp(pch, "bton") == 0)
@@ -14602,20 +14713,6 @@ static int rtw_test(
 
                wrqu->data.length = strlen(extra) + 1;
        }
 
                wrqu->data.length = strlen(extra) + 1;
        }
-       else if (strcmp(pch, "ba_rxbuf_sz") == 0)
-       {
-               u8 ba_rxbuf_bz;
-
-               pch = strsep(&ptmp, delim);
-               if ((pch != NULL) && (strlen(pch) != 0)) {
-                       sscanf(pch, "%hhu", &ba_rxbuf_bz);
-                       DBG_871X("%s set ba_rxbuf_bz as %u\n", __func__, ba_rxbuf_bz);
-                       padapter->fix_ba_rxbuf_bz = ba_rxbuf_bz;
-                       rtw_btcoex_RejectApAggregatedPacket(padapter, _TRUE);
-                       rtw_btcoex_RejectApAggregatedPacket(padapter, _FALSE);
-               }
-       }
-
 #endif // CONFIG_BT_COEXIST
 
        rtw_mfree(pbuf, len);
 #endif // CONFIG_BT_COEXIST
 
        rtw_mfree(pbuf, len);
@@ -14834,8 +14931,10 @@ static const struct iw_priv_args rtw_private_args[] = {
                { MP_PwrCtlDM, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_pwrctldm" },                
                { MP_GET_TXPOWER_INX, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_get_txpower" },
                { MP_GETVER, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_priv_ver" },
                { MP_PwrCtlDM, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_pwrctldm" },                
                { MP_GET_TXPOWER_INX, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_get_txpower" },
                { MP_GETVER, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_priv_ver" },
-               
-#if defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8723B)
+               { MP_MON, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_mon" },
+               { EFUSE_MASK, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_mask" },
+               { EFUSE_FILE, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_file" },
+#if defined(CONFIG_RTL8723B)
                { MP_SetBT, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_setbt" },
         { MP_DISABLE_BT_COEXIST, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_disa_btcoex"},
 #endif
                { MP_SetBT, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_setbt" },
         { MP_DISABLE_BT_COEXIST, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_disa_btcoex"},
 #endif
@@ -14943,26 +15042,7 @@ static struct iw_statistics *rtw_get_wireless_stats(struct net_device *dev)
                #endif
                
                tmp_qual = padapter->recvpriv.signal_qual;
                #endif
                
                tmp_qual = padapter->recvpriv.signal_qual;
-#if defined(CONFIG_SIGNAL_DISPLAY_DBM) && defined(CONFIG_BACKGROUND_NOISE_MONITOR)
-               if(rtw_linked_check(padapter)){                 
-                       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-                       struct noise_info info;
-                       info.bPauseDIG = _TRUE;
-                       info.IGIValue = 0x1e;
-                       info.max_time = 100;//ms                
-                       info.chan = pmlmeext->cur_channel ;//rtw_get_oper_ch(padapter);
-                       rtw_ps_deny(padapter, PS_DENY_IOCTL);   
-                       LeaveAllPowerSaveModeDirect(padapter);  
-
-                       rtw_hal_set_odm_var(padapter, HAL_ODM_NOISE_MONITOR,&info, _FALSE);     
-                       //ODM_InbandNoise_Monitor(podmpriv,_TRUE,0x20,100);
-                       rtw_ps_deny_cancel(padapter, PS_DENY_IOCTL);
-                       rtw_hal_get_odm_var(padapter, HAL_ODM_NOISE_MONITOR,&(info.chan), &(padapter->recvpriv.noise)); 
-                       #ifdef DBG_NOISE_MONITOR
-                       DBG_871X("chan:%d,noise_level:%d\n",info.chan,padapter->recvpriv.noise);
-                       #endif
-               }
-#endif         
+               rtw_get_noise(padapter);
                tmp_noise = padapter->recvpriv.noise;
                //DBG_871X("level:%d, qual:%d, noise:%d, rssi (%d)\n", tmp_level, tmp_qual, tmp_noise,padapter->recvpriv.rssi);
 
                tmp_noise = padapter->recvpriv.noise;
                //DBG_871X("level:%d, qual:%d, noise:%d, rssi (%d)\n", tmp_level, tmp_qual, tmp_noise,padapter->recvpriv.rssi);
 
@@ -15067,12 +15147,13 @@ static int _rtw_ioctl_wext_private(struct net_device *dev, union iwreq_data *wrq
 
        input_len = wdata.data.length;
        input = rtw_zmalloc(input_len);
 
        input_len = wdata.data.length;
        input = rtw_zmalloc(input_len);
-       if (NULL == input)
+       if (NULL == input || input_len == 0)
                return -ENOMEM;
        if (copy_from_user(input, wdata.data.pointer, input_len)) {
                err = -EFAULT;
                goto exit;
        }
                return -ENOMEM;
        if (copy_from_user(input, wdata.data.pointer, input_len)) {
                err = -EFAULT;
                goto exit;
        }
+       input[input_len - 1] = '\0';
        ptr = input;
        len = input_len;
        sscanf(ptr, "%16s", cmdname);
        ptr = input;
        len = input_len;
        sscanf(ptr, "%16s", cmdname);
@@ -15439,7 +15520,7 @@ int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
                case RTL_IOCTL_HOSTAPD:
                        ret = rtw_hostapd_ioctl(dev, &wrq->u.data);
                        break;
                case RTL_IOCTL_HOSTAPD:
                        ret = rtw_hostapd_ioctl(dev, &wrq->u.data);
                        break;
-#ifdef CONFIG_NO_WIRELESS_HANDLERS
+#ifdef CONFIG_WIRELESS_EXT
                case SIOCSIWMODE:
                        ret = rtw_wx_set_mode(dev, NULL, &wrq->u, NULL);
                        break;
                case SIOCSIWMODE:
                        ret = rtw_wx_set_mode(dev, NULL, &wrq->u, NULL);
                        break;
index 1eef779c4292d0a6ea94a017f5cfc9b86eb34844..4f6541d311f5bad48c0989028a9e1fb5174868ae 100755 (executable)
@@ -54,11 +54,7 @@ int rtw_adhoc_tx_pwr = 1;
 int rtw_soft_ap = 0;
 //int smart_ps = 1;
 #ifdef CONFIG_POWER_SAVING
 int rtw_soft_ap = 0;
 //int smart_ps = 1;
 #ifdef CONFIG_POWER_SAVING
-#ifdef CONFIG_PLATFORM_INTEL_BYT
 int rtw_power_mgnt = PS_MODE_MAX;
 int rtw_power_mgnt = PS_MODE_MAX;
-#else
-int rtw_power_mgnt = PS_MODE_MIN;
-#endif 
 #ifdef CONFIG_IPS_LEVEL_2
 int rtw_ips_mode = IPS_LEVEL_2;
 #else
 #ifdef CONFIG_IPS_LEVEL_2
 int rtw_ips_mode = IPS_LEVEL_2;
 #else
@@ -104,6 +100,8 @@ int rtw_uapsd_acbe_en = 0;
 int rtw_uapsd_acvi_en = 0;
 int rtw_uapsd_acvo_en = 0;
 
 int rtw_uapsd_acvi_en = 0;
 int rtw_uapsd_acvo_en = 0;
 
+int rtw_rfkfree_enable = 2; /* disable kfree */
+
 #ifdef CONFIG_80211N_HT
 int rtw_ht_enable = 1;
 // 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160MHz, 4: 80+80MHz
 #ifdef CONFIG_80211N_HT
 int rtw_ht_enable = 1;
 // 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160MHz, 4: 80+80MHz
@@ -138,6 +136,7 @@ int rtw_lowrate_two_xmit = 1;//Use 2 path Tx to transmit MCS0~7 and legacy mode
 
 //int rf_config = RF_1T2R;  // 1T2R
 int rtw_rf_config = RF_MAX_TYPE;  //auto
 
 //int rf_config = RF_1T2R;  // 1T2R
 int rtw_rf_config = RF_MAX_TYPE;  //auto
+
 int rtw_low_power = 0;
 #ifdef CONFIG_WIFI_TEST
 int rtw_wifi_spec = 1;//for wifi test
 int rtw_low_power = 0;
 #ifdef CONFIG_WIFI_TEST
 int rtw_wifi_spec = 1;//for wifi test
@@ -166,6 +165,7 @@ int rtw_AcceptAddbaReq = _TRUE;// 0:Reject AP's Add BA req, 1:Accept AP's Add BA
 int rtw_antdiv_cfg = 2; // 0:OFF , 1:ON, 2:decide by Efuse config
 int rtw_antdiv_type = 0 ; //0:decide by efuse  1: for 88EE, 1Tx and 1RxCG are diversity.(2 Ant with SPDT), 2:  for 88EE, 1Tx and 2Rx are diversity.( 2 Ant, Tx and RxCG are both on aux port, RxCS is on main port ), 3: for 88EE, 1Tx and 1RxCG are fixed.(1Ant, Tx and RxCG are both on aux port)
 
 int rtw_antdiv_cfg = 2; // 0:OFF , 1:ON, 2:decide by Efuse config
 int rtw_antdiv_type = 0 ; //0:decide by efuse  1: for 88EE, 1Tx and 1RxCG are diversity.(2 Ant with SPDT), 2:  for 88EE, 1Tx and 2Rx are diversity.( 2 Ant, Tx and RxCG are both on aux port, RxCS is on main port ), 3: for 88EE, 1Tx and 1RxCG are fixed.(1Ant, Tx and RxCG are both on aux port)
 
+int rtw_switch_usb3 = _FALSE; /* _FALSE: doesn't switch, _TRUE: switch from usb2.0 to usb 3.0 */
 
 #ifdef CONFIG_USB_AUTOSUSPEND
 int rtw_enusbss = 1;//0:disable,1:enable
 
 #ifdef CONFIG_USB_AUTOSUSPEND
 int rtw_enusbss = 1;//0:disable,1:enable
@@ -191,10 +191,6 @@ int rtw_hw_wps_pbc = 0;
 int rtw_mc2u_disable = 0;
 #endif // CONFIG_TX_MCAST2UNI
 
 int rtw_mc2u_disable = 0;
 #endif // CONFIG_TX_MCAST2UNI
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-int rtw_dmsp = 0;
-#endif // CONFIG_DUALMAC_CONCURRENT
-
 #ifdef CONFIG_80211D
 int rtw_80211d = 0;
 #endif
 #ifdef CONFIG_80211D
 int rtw_80211d = 0;
 #endif
@@ -268,6 +264,8 @@ module_param(rtw_wifi_spec, int, 0644);
 module_param(rtw_antdiv_cfg, int, 0644);
 module_param(rtw_antdiv_type, int, 0644);
 
 module_param(rtw_antdiv_cfg, int, 0644);
 module_param(rtw_antdiv_type, int, 0644);
 
+module_param(rtw_switch_usb3, int, 0644);
+
 module_param(rtw_enusbss, int, 0644);
 module_param(rtw_hwpdn_mode, int, 0644);
 module_param(rtw_hwpwrp_detect, int, 0644);
 module_param(rtw_enusbss, int, 0644);
 module_param(rtw_hwpdn_mode, int, 0644);
 module_param(rtw_hwpwrp_detect, int, 0644);
@@ -290,9 +288,9 @@ MODULE_PARM_DESC(rtw_max_roaming_times,"The max roaming times to try");
 #endif //CONFIG_LAYER2_ROAMING
 
 #ifdef CONFIG_IOL
 #endif //CONFIG_LAYER2_ROAMING
 
 #ifdef CONFIG_IOL
-int rtw_fw_iol=1;// 0:Disable, 1:enable, 2:by usb speed
+int rtw_fw_iol=1;
 module_param(rtw_fw_iol, int, 0644);
 module_param(rtw_fw_iol, int, 0644);
-MODULE_PARM_DESC(rtw_fw_iol,"FW IOL");
+MODULE_PARM_DESC(rtw_fw_iol, "FW IOL. 0:Disable, 1:enable, 2:by usb speed");
 #endif //CONFIG_IOL
 
 #ifdef CONFIG_FILE_FWIMG
 #endif //CONFIG_IOL
 
 #ifdef CONFIG_FILE_FWIMG
@@ -315,10 +313,6 @@ MODULE_PARM_DESC(rtw_fw_mp_bt_file_path, "The path of fw for MP-BT image");
 module_param(rtw_mc2u_disable, int, 0644);
 #endif // CONFIG_TX_MCAST2UNI
 
 module_param(rtw_mc2u_disable, int, 0644);
 #endif // CONFIG_TX_MCAST2UNI
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-module_param(rtw_dmsp, int, 0644);
-#endif // CONFIG_DUALMAC_CONCURRENT
-
 #ifdef CONFIG_80211D
 module_param(rtw_80211d, int, 0644);
 MODULE_PARM_DESC(rtw_80211d, "Enable 802.11d mechanism");
 #ifdef CONFIG_80211D
 module_param(rtw_80211d, int, 0644);
 MODULE_PARM_DESC(rtw_80211d, "Enable 802.11d mechanism");
@@ -334,15 +328,19 @@ MODULE_PARM_DESC(rtw_hiq_filter, "0:allow all, 1:allow special, 2:deny all");
 
 uint rtw_adaptivity_en = CONFIG_RTW_ADAPTIVITY_EN;
 module_param(rtw_adaptivity_en, uint, 0644);
 
 uint rtw_adaptivity_en = CONFIG_RTW_ADAPTIVITY_EN;
 module_param(rtw_adaptivity_en, uint, 0644);
-MODULE_PARM_DESC(rtw_adaptivity_en, "0:disable, 1:enable, 2:auto");
+MODULE_PARM_DESC(rtw_adaptivity_en, "0:disable, 1:enable");
 
 uint rtw_adaptivity_mode = CONFIG_RTW_ADAPTIVITY_MODE;
 module_param(rtw_adaptivity_mode, uint, 0644);
 MODULE_PARM_DESC(rtw_adaptivity_mode, "0:normal, 1:carrier sense");
 
 
 uint rtw_adaptivity_mode = CONFIG_RTW_ADAPTIVITY_MODE;
 module_param(rtw_adaptivity_mode, uint, 0644);
 MODULE_PARM_DESC(rtw_adaptivity_mode, "0:normal, 1:carrier sense");
 
-uint rtw_nhm_en = CONFIG_RTW_NHM_EN;
-module_param(rtw_nhm_en, uint, 0644);
-MODULE_PARM_DESC(rtw_nhm_en, "0:disable, 1:enable");
+uint rtw_adaptivity_dml = CONFIG_RTW_ADAPTIVITY_DML;
+module_param(rtw_adaptivity_dml, uint, 0644);
+MODULE_PARM_DESC(rtw_adaptivity_dml, "0:disable, 1:enable");
+
+uint rtw_adaptivity_dc_backoff = CONFIG_RTW_ADAPTIVITY_DC_BACKOFF;
+module_param(rtw_adaptivity_dc_backoff, uint, 0644);
+MODULE_PARM_DESC(rtw_adaptivity_dc_backoff, "DC backoff for Adaptivity");
 
 uint rtw_amplifier_type_2g = CONFIG_RTW_AMPLIFIER_TYPE_2G;
 module_param(rtw_amplifier_type_2g, uint, 0644);
 
 uint rtw_amplifier_type_2g = CONFIG_RTW_AMPLIFIER_TYPE_2G;
 module_param(rtw_amplifier_type_2g, uint, 0644);
@@ -364,6 +362,15 @@ uint rtw_TxBBSwing_5G = 0xFF;
 module_param(rtw_TxBBSwing_5G, uint, 0644);
 MODULE_PARM_DESC(rtw_TxBBSwing_5G, "default init value:0xFF");
 
 module_param(rtw_TxBBSwing_5G, uint, 0644);
 MODULE_PARM_DESC(rtw_TxBBSwing_5G, "default init value:0xFF");
 
+uint rtw_OffEfuseMask = 0;
+module_param(rtw_OffEfuseMask, uint, 0644);
+MODULE_PARM_DESC(rtw_OffEfuseMask, "default open Efuse Mask vaule:0");
+
+uint rtw_FileMaskEfuse = 0;
+module_param(rtw_FileMaskEfuse, uint, 0644);
+MODULE_PARM_DESC(rtw_FileMaskEfuse, "default drv Mask Efuse vaule:0");
+
+
 #if defined(CONFIG_CALIBRATE_TX_POWER_BY_REGULATORY) //eFuse: Regulatory selection=1
 int rtw_tx_pwr_lmt_enable = 1;
 int rtw_tx_pwr_by_rate = 1;
 #if defined(CONFIG_CALIBRATE_TX_POWER_BY_REGULATORY) //eFuse: Regulatory selection=1
 int rtw_tx_pwr_lmt_enable = 1;
 int rtw_tx_pwr_by_rate = 1;
@@ -478,6 +485,8 @@ _func_enter_;
        registry_par->uapsd_acvi_en = (u8)rtw_uapsd_acvi_en;
        registry_par->uapsd_acvo_en = (u8)rtw_uapsd_acvo_en;
 
        registry_par->uapsd_acvi_en = (u8)rtw_uapsd_acvi_en;
        registry_par->uapsd_acvo_en = (u8)rtw_uapsd_acvo_en;
 
+       registry_par->RegRfKFreeEnable = (u8)rtw_rfkfree_enable;
+       
 #ifdef CONFIG_80211N_HT
        registry_par->ht_enable = (u8)rtw_ht_enable;
        registry_par->bw_mode = (u8)rtw_bw_mode;
 #ifdef CONFIG_80211N_HT
        registry_par->ht_enable = (u8)rtw_ht_enable;
        registry_par->bw_mode = (u8)rtw_bw_mode;
@@ -521,6 +530,8 @@ _func_enter_;
 
        registry_par->antdiv_cfg = (u8)rtw_antdiv_cfg;
        registry_par->antdiv_type = (u8)rtw_antdiv_type;
 
        registry_par->antdiv_cfg = (u8)rtw_antdiv_cfg;
        registry_par->antdiv_type = (u8)rtw_antdiv_type;
+       
+       registry_par->switch_usb3 = (u8)rtw_switch_usb3;
 
 #ifdef CONFIG_AUTOSUSPEND
        registry_par->usbss_enable = (u8)rtw_enusbss;//0:disable,1:enable
 
 #ifdef CONFIG_AUTOSUSPEND
        registry_par->usbss_enable = (u8)rtw_enusbss;//0:disable,1:enable
@@ -548,10 +559,6 @@ _func_enter_;
        registry_par->fw_iol = rtw_fw_iol;
 #endif
 
        registry_par->fw_iol = rtw_fw_iol;
 #endif
 
-#ifdef CONFIG_DUALMAC_CONCURRENT
-       registry_par->dmsp= (u8)rtw_dmsp;
-#endif
-
 #ifdef CONFIG_80211D
        registry_par->enable80211d = (u8)rtw_80211d;
 #endif
 #ifdef CONFIG_80211D
        registry_par->enable80211d = (u8)rtw_80211d;
 #endif
@@ -591,8 +598,11 @@ _func_enter_;
 
        registry_par->adaptivity_en = (u8)rtw_adaptivity_en;
        registry_par->adaptivity_mode = (u8)rtw_adaptivity_mode;
 
        registry_par->adaptivity_en = (u8)rtw_adaptivity_en;
        registry_par->adaptivity_mode = (u8)rtw_adaptivity_mode;
-       registry_par->nhm_en = (u8)rtw_nhm_en;
+       registry_par->adaptivity_dml = (u8)rtw_adaptivity_dml;
+       registry_par->adaptivity_dc_backoff = (u8)rtw_adaptivity_dc_backoff;
 
 
+       registry_par->boffefusemask = (u8)rtw_OffEfuseMask;
+       registry_par->bFileMaskEfuse = (u8)rtw_FileMaskEfuse;
 _func_exit_;
 
        return status;
 _func_exit_;
 
        return status;
@@ -607,7 +617,7 @@ static int rtw_net_set_mac_address(struct net_device *pnetdev, void *p)
        {
                //DBG_871X("r8711_net_set_mac_address(), MAC=%x:%x:%x:%x:%x:%x\n", addr->sa_data[0], addr->sa_data[1], addr->sa_data[2], addr->sa_data[3],
                //addr->sa_data[4], addr->sa_data[5]);
        {
                //DBG_871X("r8711_net_set_mac_address(), MAC=%x:%x:%x:%x:%x:%x\n", addr->sa_data[0], addr->sa_data[1], addr->sa_data[2], addr->sa_data[3],
                //addr->sa_data[4], addr->sa_data[5]);
-               _rtw_memcpy(padapter->eeprompriv.mac_addr, addr->sa_data, ETH_ALEN);
+               _rtw_memcpy(adapter_mac_addr(padapter), addr->sa_data, ETH_ALEN);
                //_rtw_memcpy(pnetdev->dev_addr, addr->sa_data, ETH_ALEN);
                //padapter->bset_hwaddr = _TRUE;
        }
                //_rtw_memcpy(pnetdev->dev_addr, addr->sa_data, ETH_ALEN);
                //padapter->bset_hwaddr = _TRUE;
        }
@@ -766,6 +776,7 @@ int rtw_ndev_init(struct net_device *dev)
 
        DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter));
        strncpy(adapter->old_ifname, dev->name, IFNAMSIZ);
 
        DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter));
        strncpy(adapter->old_ifname, dev->name, IFNAMSIZ);
+       adapter->old_ifname[IFNAMSIZ-1] = '\0';
        rtw_adapter_proc_init(dev);
 
        return 0;
        rtw_adapter_proc_init(dev);
 
        return 0;
@@ -904,51 +915,54 @@ struct net_device *rtw_init_netdev(_adapter *old_padapter)
 
 }
 
 
 }
 
-void rtw_unregister_netdevs(struct dvobj_priv *dvobj)
+void rtw_unregister_netdev(_adapter *adapter)
 {
 {
-       int i;
-       _adapter *padapter = NULL;
-
-       for(i=0;i<dvobj->iface_nums;i++)
-       {
-               struct net_device *pnetdev = NULL;
-               
-               padapter = dvobj->padapters[i];
+       struct net_device *netdev = NULL;
 
 
-               if (padapter == NULL)
-                       continue;
+       if (adapter == NULL)
+               return;
 
 
-               pnetdev = padapter->pnetdev;
+       netdev = adapter->pnetdev;
 
 
-               if((padapter->DriverState != DRIVER_DISAPPEAR) && pnetdev) {
-               
-                       unregister_netdev(pnetdev); //will call netdev_close()
-               }
+       if ((adapter->DriverState != DRIVER_DISAPPEAR) && netdev)
+               unregister_netdev(netdev); /* will call netdev_close() */
 
 
-#ifdef CONFIG_IOCTL_CFG80211   
-               rtw_wdev_unregister(padapter->rtw_wdev);
+#ifdef CONFIG_IOCTL_CFG80211
+       rtw_wdev_unregister(adapter->rtw_wdev);
 #endif
 #endif
+}
 
 
+void rtw_unregister_netdevs(struct dvobj_priv *dvobj)
+{
+       int i;
+       _adapter *adapter = NULL;
+
+       for (i = 0; i < dvobj->iface_nums; i++) {
+               adapter = dvobj->padapters[i];
+
+               if (adapter == NULL)
+                       continue;
+
+               rtw_unregister_netdev(adapter);
        }
        }
-       
-}      
+}
 
 u32 rtw_start_drv_threads(_adapter *padapter)
 {
        u32 _status = _SUCCESS;
 
        RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_start_drv_threads\n"));
 
 u32 rtw_start_drv_threads(_adapter *padapter)
 {
        u32 _status = _SUCCESS;
 
        RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_start_drv_threads\n"));
+
 #ifdef CONFIG_XMIT_THREAD_MODE
 #ifdef CONFIG_XMIT_THREAD_MODE
-#if defined(CONFIG_SDIO_HCI) && defined(CONFIG_CONCURRENT_MODE)
-       if(padapter->adapter_type == PRIMARY_ADAPTER){
-#endif
-       padapter->xmitThread = kthread_run(rtw_xmit_thread, padapter, "RTW_XMIT_THREAD");
-       if(IS_ERR(padapter->xmitThread))
-               _status = _FAIL;
-#if defined(CONFIG_SDIO_HCI) && defined(CONFIG_CONCURRENT_MODE)
+#if defined(CONFIG_SDIO_HCI)
+       if(is_primary_adapter(padapter))
+#endif         
+       {
+               padapter->xmitThread = kthread_run(rtw_xmit_thread, padapter, "RTW_XMIT_THREAD");
+               if(IS_ERR(padapter->xmitThread))
+                       _status = _FAIL;
        }
        }
-#endif         // CONFIG_SDIO_HCI+CONFIG_CONCURRENT_MODE
-#endif
+#endif //#ifdef CONFIG_XMIT_THREAD_MODE
 
 #ifdef CONFIG_RECV_THREAD_MODE
        padapter->recvThread = kthread_run(rtw_recv_thread, padapter, "RTW_RECV_THREAD");
 
 #ifdef CONFIG_RECV_THREAD_MODE
        padapter->recvThread = kthread_run(rtw_recv_thread, padapter, "RTW_RECV_THREAD");
@@ -956,10 +970,7 @@ u32 rtw_start_drv_threads(_adapter *padapter)
                _status = _FAIL;
 #endif
 
                _status = _FAIL;
 #endif
 
-
-#ifdef CONFIG_CONCURRENT_MODE
-       if(padapter->isprimary == _TRUE)
-#endif //CONFIG_CONCURRENT_MODE
+       if(is_primary_adapter(padapter))
        {
                padapter->cmdThread = kthread_run(rtw_cmd_thread, padapter, "RTW_CMD_THREAD");
                if(IS_ERR(padapter->cmdThread))
        {
                padapter->cmdThread = kthread_run(rtw_cmd_thread, padapter, "RTW_CMD_THREAD");
                if(IS_ERR(padapter->cmdThread))
@@ -1086,7 +1097,7 @@ u8 rtw_init_default_value(_adapter *padapter)
        RTW_ENABLE_FUNC(padapter, DF_RX_BIT);
        RTW_ENABLE_FUNC(padapter, DF_TX_BIT);
        padapter->bLinkInfoDump = 0;
        RTW_ENABLE_FUNC(padapter, DF_RX_BIT);
        RTW_ENABLE_FUNC(padapter, DF_TX_BIT);
        padapter->bLinkInfoDump = 0;
-       padapter->bNotifyChannelChange = 0;
+       padapter->bNotifyChannelChange = _FALSE;
 #ifdef CONFIG_P2P
        padapter->bShowGetP2PState = 1;
 #endif
 #ifdef CONFIG_P2P
        padapter->bShowGetP2PState = 1;
 #endif
@@ -1097,8 +1108,14 @@ u8 rtw_init_default_value(_adapter *padapter)
        padapter->driver_ampdu_spacing = 0xFF;
        padapter->driver_rx_ampdu_factor =  0xFF;
        padapter->driver_rx_ampdu_spacing = 0xFF;
        padapter->driver_ampdu_spacing = 0xFF;
        padapter->driver_rx_ampdu_factor =  0xFF;
        padapter->driver_rx_ampdu_spacing = 0xFF;
-       padapter->fix_ba_rxbuf_bz = 0xFF;
-
+       padapter->fix_rx_ampdu_accept = RX_AMPDU_ACCEPT_INVALID;
+       padapter->fix_rx_ampdu_size = RX_AMPDU_SIZE_INVALID;
+#ifdef DBG_RX_COUNTER_DUMP
+       padapter->dump_rx_cnt_mode = 0;
+       padapter->drv_rx_cnt_ok = 0;
+       padapter->drv_rx_cnt_crcerror = 0;
+       padapter->drv_rx_cnt_drop = 0;
+#endif 
        return ret;
 }
 
        return ret;
 }
 
@@ -1284,10 +1301,17 @@ _func_enter_;
        }
 
        padapter->stapriv.padapter = padapter;
        }
 
        padapter->stapriv.padapter = padapter;
-       padapter->setband = GHZ24_50;
+       padapter->setband = WIFI_FREQUENCY_BAND_AUTO;
        padapter->fix_rate = 0xFF;
        padapter->data_fb = 0;
        padapter->fix_rate = 0xFF;
        padapter->data_fb = 0;
-       padapter->fix_ba_rxbuf_bz = 0xFF;
+       padapter->fix_rx_ampdu_accept = RX_AMPDU_ACCEPT_INVALID;
+       padapter->fix_rx_ampdu_size = RX_AMPDU_SIZE_INVALID;
+#ifdef DBG_RX_COUNTER_DUMP
+       padapter->dump_rx_cnt_mode = 0;
+       padapter->drv_rx_cnt_ok = 0;
+       padapter->drv_rx_cnt_crcerror = 0;
+       padapter->drv_rx_cnt_drop = 0;
+#endif 
        rtw_init_bcmc_stainfo(padapter);
 
        rtw_init_pwrctrl_priv(padapter);
        rtw_init_bcmc_stainfo(padapter);
 
        rtw_init_pwrctrl_priv(padapter);
@@ -1618,10 +1642,6 @@ _adapter *rtw_drv_add_vir_if(_adapter *primary_padapter,
        pnetdev->stop = netdev_vir_if_close;
 #endif
 
        pnetdev->stop = netdev_vir_if_close;
 #endif
 
-#ifdef CONFIG_NO_WIRELESS_HANDLERS
-       pnetdev->wireless_handlers = NULL;
-#endif
-
        /****** init adapter ******/
        padapter = rtw_netdev_priv(pnetdev);
        _rtw_memcpy(padapter, primary_padapter, sizeof(_adapter));
        /****** init adapter ******/
        padapter = rtw_netdev_priv(pnetdev);
        _rtw_memcpy(padapter, primary_padapter, sizeof(_adapter));
@@ -1666,58 +1686,33 @@ _adapter *rtw_drv_add_vir_if(_adapter *primary_padapter,
        padapter->chip_type = primary_padapter->chip_type;
        padapter->HardwareType = primary_padapter->HardwareType;
 
        padapter->chip_type = primary_padapter->chip_type;
        padapter->HardwareType = primary_padapter->HardwareType;
 
-       //step 2. hook HalFunc, allocate HalData
-       //hal_set_hal_ops(padapter);
-       rtw_set_hal_ops(padapter);
-
-       padapter->HalFunc.inirp_init = NULL;
-       padapter->HalFunc.inirp_deinit = NULL;
        padapter->intf_start = NULL;
        padapter->intf_stop = NULL;
 
        //step init_io_priv
        if ((rtw_init_io_priv(padapter, set_intf_ops)) == _FAIL) {
        padapter->intf_start = NULL;
        padapter->intf_stop = NULL;
 
        //step init_io_priv
        if ((rtw_init_io_priv(padapter, set_intf_ops)) == _FAIL) {
-               RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
+               RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("\n Can't init io_reqs\n"));
+               goto error_rtw_drv_add_iface;
        }
 
        }
 
-       //step read_chip_version
-       rtw_hal_read_chip_version(padapter);
-
-       //step usb endpoint mapping
-       rtw_hal_chip_configure(padapter);
-
-
        //init drv data
        if(rtw_init_drv_sw(padapter)!= _SUCCESS)
                goto error_rtw_drv_add_iface;
 
 
        //get mac address from primary_padapter
        //init drv data
        if(rtw_init_drv_sw(padapter)!= _SUCCESS)
                goto error_rtw_drv_add_iface;
 
 
        //get mac address from primary_padapter
-       _rtw_memcpy(mac, primary_padapter->eeprompriv.mac_addr, ETH_ALEN);
-
-       if (((mac[0]==0xff) &&(mac[1]==0xff) && (mac[2]==0xff) &&
-            (mac[3]==0xff) && (mac[4]==0xff) &&(mac[5]==0xff)) ||
-           ((mac[0]==0x0) && (mac[1]==0x0) && (mac[2]==0x0) &&
-            (mac[3]==0x0) && (mac[4]==0x0) &&(mac[5]==0x0)))
-       {
-               mac[0] = 0x00;
-               mac[1] = 0xe0;
-               mac[2] = 0x4c;
-               mac[3] = 0x87;
-               mac[4] = 0x11;
-               mac[5] = 0x22;
-       }
-       else
-       {
-               //If the BIT1 is 0, the address is universally administered.
-               //If it is 1, the address is locally administered
-#if 1 //needs enable MBSSID CAM
-               mac[0] |= BIT(1); // locally administered
-               mac[0] |= (padapter->iface_id-1)<<4;
+       _rtw_memcpy(mac, adapter_mac_addr(primary_padapter), ETH_ALEN);
+
+       /*
+       * If the BIT1 is 0, the address is universally administered.
+       * If it is 1, the address is locally administered
+       */
+#if 1 /* needs enable MBSSID CAM */
+       mac[0] |= BIT(1);
+       mac[0] |= (padapter->iface_id-1)<<4;
 #endif
 #endif
-       }
 
 
-       _rtw_memcpy(padapter->eeprompriv.mac_addr, mac, ETH_ALEN);
+       _rtw_memcpy(adapter_mac_addr(padapter), mac, ETH_ALEN);
 
        res = _SUCCESS;
 
 
        res = _SUCCESS;
 
@@ -1837,36 +1832,23 @@ int _netdev_if2_open(struct net_device *pnetdev)
 #ifdef CONFIG_PLATFORM_INTEL_BYT
        if (padapter->bup == _FALSE)
        {
 #ifdef CONFIG_PLATFORM_INTEL_BYT
        if (padapter->bup == _FALSE)
        {
-               u8 mac[ETH_ALEN];
+               u8 mac[ETH_ALEN];
 
 
-               //get mac address from primary_padapter
+               /* get mac address from primary_padapter */
                if (primary_padapter->bup == _FALSE)
                if (primary_padapter->bup == _FALSE)
-                       rtw_macaddr_cfg(primary_padapter->eeprompriv.mac_addr);
+                       rtw_macaddr_cfg(adapter_mac_addr(primary_padapter), get_hal_mac_addr(primary_padapter));
 
 
-               _rtw_memcpy(mac, primary_padapter->eeprompriv.mac_addr, ETH_ALEN);
+               _rtw_memcpy(mac, adapter_mac_addr(primary_padapter), ETH_ALEN);
 
 
-               if (((mac[0] == 0xff) && (mac[1] == 0xff) && (mac[2] == 0xff) &&
-                    (mac[3] == 0xff) && (mac[4] == 0xff) && (mac[5] == 0xff)) ||
-                   ((mac[0] == 0x0) && (mac[1] == 0x0) && (mac[2] == 0x0) &&
-                    (mac[3] == 0x0) && (mac[4] == 0x0) && (mac[5] == 0x0)))
-               {
-                       mac[0] = 0x00;
-                       mac[1] = 0xe0;
-                       mac[2] = 0x4c;
-                       mac[3] = 0x87;
-                       mac[4] = 0x11;
-                       mac[5] = 0x22;
-               }
-               else
-               {
-                       //If the BIT1 is 0, the address is universally administered.
-                       //If it is 1, the address is locally administered
-                       mac[0] |= BIT(1); // locally administered
-               }
+               /*
+               * If the BIT1 is 0, the address is universally administered.
+               * If it is 1, the address is locally administered
+               */
+               mac[0] |= BIT(1);
 
 
-               _rtw_memcpy(padapter->eeprompriv.mac_addr, mac, ETH_ALEN);
-               rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
-               _rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
+               _rtw_memcpy(adapter_mac_addr(padapter), mac, ETH_ALEN);
+               rtw_init_wifidirect_addrs(padapter, adapter_mac_addr(padapter), adapter_mac_addr(padapter));
+               _rtw_memcpy(pnetdev->dev_addr, adapter_mac_addr(padapter), ETH_ALEN);
        }
 #endif //CONFIG_PLATFORM_INTEL_BYT
 
        }
 #endif //CONFIG_PLATFORM_INTEL_BYT
 
@@ -1958,8 +1940,10 @@ int netdev_if2_open(struct net_device *pnetdev)
 static int netdev_if2_close(struct net_device *pnetdev)
 {
        _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
 static int netdev_if2_close(struct net_device *pnetdev)
 {
        _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
+       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
 
        padapter->net_closed = _TRUE;
 
        padapter->net_closed = _TRUE;
+       pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
 
        if(pnetdev)
        {
 
        if(pnetdev)
        {
@@ -2018,10 +2002,6 @@ _adapter *rtw_drv_if2_init(_adapter *primary_padapter,
        pnetdev->stop = netdev_if2_close;
 #endif
 
        pnetdev->stop = netdev_if2_close;
 #endif
 
-#ifdef CONFIG_NO_WIRELESS_HANDLERS
-       pnetdev->wireless_handlers = NULL;
-#endif
-
        /****** init adapter ******/
        padapter = rtw_netdev_priv(pnetdev);
        _rtw_memcpy(padapter, primary_padapter, sizeof(_adapter));
        /****** init adapter ******/
        padapter = rtw_netdev_priv(pnetdev);
        _rtw_memcpy(padapter, primary_padapter, sizeof(_adapter));
@@ -2061,59 +2041,32 @@ _adapter *rtw_drv_if2_init(_adapter *primary_padapter,
        padapter->chip_type = primary_padapter->chip_type;
        padapter->HardwareType = primary_padapter->HardwareType;
 
        padapter->chip_type = primary_padapter->chip_type;
        padapter->HardwareType = primary_padapter->HardwareType;
 
-       //step 2. hook HalFunc, allocate HalData
-       //hal_set_hal_ops(padapter);
-       rtw_set_hal_ops(padapter);
-
-       padapter->HalFunc.inirp_init = NULL;
-       padapter->HalFunc.inirp_deinit = NULL;
-
        //
        padapter->intf_start = primary_padapter->intf_start;
        padapter->intf_stop = primary_padapter->intf_stop;
 
        //step init_io_priv
        if ((rtw_init_io_priv(padapter, set_intf_ops)) == _FAIL) {
        //
        padapter->intf_start = primary_padapter->intf_start;
        padapter->intf_stop = primary_padapter->intf_stop;
 
        //step init_io_priv
        if ((rtw_init_io_priv(padapter, set_intf_ops)) == _FAIL) {
-               RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
+               RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("\n Can't init io_reqs\n"));
+               goto error_rtw_drv_if2_init;
        }
 
        }
 
-       //step read_chip_version
-       rtw_hal_read_chip_version(padapter);
-
-       //step usb endpoint mapping
-       rtw_hal_chip_configure(padapter);
-
-
        //init drv data
        if(rtw_init_drv_sw(padapter)!= _SUCCESS)
                goto error_rtw_drv_if2_init;
 
 
        //init drv data
        if(rtw_init_drv_sw(padapter)!= _SUCCESS)
                goto error_rtw_drv_if2_init;
 
 
-       //get mac address from primary_padapter
-       _rtw_memcpy(mac, primary_padapter->eeprompriv.mac_addr, ETH_ALEN);
+       /* get mac address from primary_padapter */
+       _rtw_memcpy(mac, adapter_mac_addr(primary_padapter), ETH_ALEN);
 
 
-       if (((mac[0]==0xff) &&(mac[1]==0xff) && (mac[2]==0xff) &&
-            (mac[3]==0xff) && (mac[4]==0xff) &&(mac[5]==0xff)) ||
-           ((mac[0]==0x0) && (mac[1]==0x0) && (mac[2]==0x0) &&
-            (mac[3]==0x0) && (mac[4]==0x0) &&(mac[5]==0x0)))
-       {
-               mac[0] = 0x00;
-               mac[1] = 0xe0;
-               mac[2] = 0x4c;
-               mac[3] = 0x87;
-               mac[4] = 0x11;
-               mac[5] = 0x22;
-       }
-       else
-       {
-               //If the BIT1 is 0, the address is universally administered.
-               //If it is 1, the address is locally administered
-               mac[0] |= BIT(1); // locally administered
-
-       }
+       /*
+       * If the BIT1 is 0, the address is universally administered.
+       * If it is 1, the address is locally administered
+       */
+       mac[0] |= BIT(1);
 
 
-       _rtw_memcpy(padapter->eeprompriv.mac_addr, mac, ETH_ALEN);
-       rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
+       _rtw_memcpy(adapter_mac_addr(padapter), mac, ETH_ALEN);
+       rtw_init_wifidirect_addrs(padapter, adapter_mac_addr(padapter), adapter_mac_addr(padapter));
 
        primary_padapter->pbuddy_adapter = padapter;
 
 
        primary_padapter->pbuddy_adapter = padapter;
 
@@ -2241,7 +2194,7 @@ static int _rtw_drv_register_netdev(_adapter *padapter, char *name)
        /* alloc netdev name */
        rtw_init_netdev_name(pnetdev, name);
 
        /* alloc netdev name */
        rtw_init_netdev_name(pnetdev, name);
 
-       _rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
+       _rtw_memcpy(pnetdev->dev_addr, adapter_mac_addr(padapter), ETH_ALEN);
 
        /* Tell the network stack we exist */
        if (register_netdev(pnetdev) != 0) {
 
        /* Tell the network stack we exist */
        if (register_netdev(pnetdev) != 0) {
@@ -2303,6 +2256,9 @@ int _netdev_open(struct net_device *pnetdev)
        uint status;
        _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
        struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
        uint status;
        _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
        struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(padapter);
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
 
        RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - dev_open\n"));
        DBG_871X("+871x_drv - drv_open, bup=%d\n", padapter->bup);
 
        RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - dev_open\n"));
        DBG_871X("+871x_drv - drv_open, bup=%d\n", padapter->bup);
@@ -2321,9 +2277,9 @@ int _netdev_open(struct net_device *pnetdev)
        if(padapter->bup == _FALSE)
        {
 #ifdef CONFIG_PLATFORM_INTEL_BYT
        if(padapter->bup == _FALSE)
        {
 #ifdef CONFIG_PLATFORM_INTEL_BYT
-               rtw_macaddr_cfg(padapter->eeprompriv.mac_addr);
-               rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
-               _rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
+               rtw_macaddr_cfg(adapter_mac_addr(padapter),  get_hal_mac_addr(padapter));
+               rtw_init_wifidirect_addrs(padapter, adapter_mac_addr(padapter), adapter_mac_addr(padapter));
+               _rtw_memcpy(pnetdev->dev_addr, adapter_mac_addr(padapter), ETH_ALEN);
 #endif //CONFIG_PLATFORM_INTEL_BYT
 
                padapter->bDriverStopped = _FALSE;
 #endif //CONFIG_PLATFORM_INTEL_BYT
 
                padapter->bDriverStopped = _FALSE;
@@ -2385,6 +2341,18 @@ int _netdev_open(struct net_device *pnetdev)
        netdev_br_init(pnetdev);
 #endif // CONFIG_BR_EXT
 
        netdev_br_init(pnetdev);
 #endif // CONFIG_BR_EXT
 
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+       if(is_primary_adapter(padapter) &&  _TRUE == pHalData->EEPROMBluetoothCoexist)
+       {
+               rtw_btcoex_init_socket(padapter);
+               padapter->coex_info.BtMgnt.ExtConfig.HCIExtensionVer = 0x04;
+               rtw_btcoex_SetHciVersion(padapter,0x04);
+       }
+       else
+               DBG_871X("CONFIG_BT_COEXIST: SECONDARY_ADAPTER\n");
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
+
+
 netdev_open_normal_process:
 
        #ifdef CONFIG_CONCURRENT_MODE
 netdev_open_normal_process:
 
        #ifdef CONFIG_CONCURRENT_MODE
@@ -2490,7 +2458,7 @@ int rtw_ips_pwr_up(_adapter *padapter)
        if (psrtpriv->silent_reset_inprogress == _TRUE)
 #endif//#ifdef DBG_CONFIG_ERROR_DETECT         
 #endif //defined(CONFIG_SWLPS_IN_IPS) || defined(CONFIG_FWLPS_IN_IPS)
        if (psrtpriv->silent_reset_inprogress == _TRUE)
 #endif//#ifdef DBG_CONFIG_ERROR_DETECT         
 #endif //defined(CONFIG_SWLPS_IN_IPS) || defined(CONFIG_FWLPS_IN_IPS)
-       rtw_reset_drv_sw(padapter);
+               rtw_reset_drv_sw(padapter);
 
        result = ips_netdrv_open(padapter);
 
 
        result = ips_netdrv_open(padapter);
 
@@ -2571,6 +2539,10 @@ static int netdev_close(struct net_device *pnetdev)
 {
        _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
        struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(padapter);
 {
        _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
        struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(padapter);
+       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(padapter);
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
 
        RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - drv_close\n"));
 
 
        RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - drv_close\n"));
 
@@ -2583,6 +2555,7 @@ static int netdev_close(struct net_device *pnetdev)
        }
        padapter->net_closed = _TRUE;
        padapter->netif_up = _FALSE;
        }
        padapter->net_closed = _TRUE;
        padapter->netif_up = _FALSE;
+       pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
 
 /*     if(!padapter->hw_init_completed)
        {
 
 /*     if(!padapter->hw_init_completed)
        {
@@ -2638,6 +2611,12 @@ static int netdev_close(struct net_device *pnetdev)
 #ifdef CONFIG_WAPI_SUPPORT
        rtw_wapi_disable_tx(padapter);
 #endif
 #ifdef CONFIG_WAPI_SUPPORT
        rtw_wapi_disable_tx(padapter);
 #endif
+#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
+       if(is_primary_adapter(padapter) &&  _TRUE == pHalData->EEPROMBluetoothCoexist)
+               rtw_btcoex_close_socket(padapter);
+       else
+               DBG_871X("CONFIG_BT_COEXIST: SECONDARY_ADAPTER\n");
+#endif //CONFIG_BT_COEXIST_SOCKET_TRX
 #else //!CONFIG_PLATFORM_INTEL_BYT
 
        if (pwrctl->bInSuspend == _TRUE)
 #else //!CONFIG_PLATFORM_INTEL_BYT
 
        if (pwrctl->bInSuspend == _TRUE)
@@ -3097,7 +3076,7 @@ int rtw_suspend_free_assoc_resource(_adapter *padapter)
 #ifdef CONFIG_AUTOSUSPEND
        if(is_primary_adapter(padapter) && (!adapter_to_pwrctl(padapter)->bInternalAutoSuspend ))
 #endif
 #ifdef CONFIG_AUTOSUSPEND
        if(is_primary_adapter(padapter) && (!adapter_to_pwrctl(padapter)->bInternalAutoSuspend ))
 #endif
-       rtw_free_network_queue(padapter, _TRUE);
+               rtw_free_network_queue(padapter, _TRUE);
 
        if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
                rtw_indicate_scan_done(padapter, 1);
 
        if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
                rtw_indicate_scan_done(padapter, 1);
@@ -3138,6 +3117,7 @@ int rtw_suspend_wow(_adapter *padapter)
 #endif
        
        if (pwrpriv->wowlan_mode == _TRUE) {
 #endif
        
        if (pwrpriv->wowlan_mode == _TRUE) {
+               
                if(pnetdev)
                        rtw_netif_stop_queue(pnetdev);  
                #ifdef CONFIG_CONCURRENT_MODE
                if(pnetdev)
                        rtw_netif_stop_queue(pnetdev);  
                #ifdef CONFIG_CONCURRENT_MODE
@@ -3146,6 +3126,8 @@ int rtw_suspend_wow(_adapter *padapter)
                        rtw_netif_stop_queue(pbuddy_netdev);
                }
                #endif//CONFIG_CONCURRENT_MODE
                        rtw_netif_stop_queue(pbuddy_netdev);
                }
                #endif//CONFIG_CONCURRENT_MODE
+               // 0. Power off LED
+               rtw_led_control(padapter, LED_CTL_POWER_OFF);
                // 1. stop thread
                padapter->bDriverStopped = _TRUE;       //for stop thread
                rtw_stop_drv_threads(padapter);
                // 1. stop thread
                padapter->bDriverStopped = _TRUE;       //for stop thread
                rtw_stop_drv_threads(padapter);
@@ -3177,8 +3159,7 @@ int rtw_suspend_wow(_adapter *padapter)
                #endif
 
                // 2.1 clean interupt
                #endif
 
                // 2.1 clean interupt
-               if (padapter->HalFunc.clear_interrupt)
-                       padapter->HalFunc.clear_interrupt(padapter);
+               rtw_hal_clear_interrupt(padapter);
 #endif //CONFIG_SDIO_HCI
 
                // 2.2 free irq
 #endif //CONFIG_SDIO_HCI
 
                // 2.2 free irq
@@ -3194,7 +3175,7 @@ int rtw_suspend_wow(_adapter *padapter)
                #endif
 
                poidparam.subcode = WOWLAN_ENABLE;
                #endif
 
                poidparam.subcode = WOWLAN_ENABLE;
-               padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
+               rtw_hal_set_hwreg(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
                if (rtw_chk_roam_flags(padapter, RTW_ROAM_ON_RESUME)) {
                        if(check_fwstate(pmlmepriv, WIFI_STATION_STATE)
                                && check_fwstate(pmlmepriv, _FW_LINKED))
                if (rtw_chk_roam_flags(padapter, RTW_ROAM_ON_RESUME)) {
                        if(check_fwstate(pmlmepriv, WIFI_STATION_STATE)
                                && check_fwstate(pmlmepriv, _FW_LINKED))
@@ -3232,10 +3213,13 @@ int rtw_suspend_wow(_adapter *padapter)
                if(pwrpriv->wowlan_pno_enable) {
                        DBG_871X_LEVEL(_drv_always_, "%s: pno: %d\n", __func__,
                                        pwrpriv->wowlan_pno_enable);
                if(pwrpriv->wowlan_pno_enable) {
                        DBG_871X_LEVEL(_drv_always_, "%s: pno: %d\n", __func__,
                                        pwrpriv->wowlan_pno_enable);
+#ifdef CONFIG_FWLPS_IN_IPS
+                       rtw_set_fw_in_ips_mode(padapter, _TRUE);
+#endif
                }
                #ifdef CONFIG_LPS
                else
                }
                #ifdef CONFIG_LPS
                else
-                       rtw_set_ps_mode(padapter, PS_MODE_DTIM, 0, 0, "WOWLAN");
+                       rtw_set_ps_mode(padapter, PS_MODE_MAX, 0, 0, "WOWLAN");
                #endif //#ifdef CONFIG_LPS
 
        }
                #endif //#ifdef CONFIG_LPS
 
        }
@@ -3279,6 +3263,8 @@ int rtw_suspend_ap_wow(_adapter *padapter)
                rtw_netif_stop_queue(pbuddy_netdev);
        }
        #endif//CONFIG_CONCURRENT_MODE
                rtw_netif_stop_queue(pbuddy_netdev);
        }
        #endif//CONFIG_CONCURRENT_MODE
+       // 0. Power off LED
+       rtw_led_control(padapter, LED_CTL_POWER_OFF);
        // 1. stop thread
        padapter->bDriverStopped = _TRUE;       //for stop thread
        rtw_stop_drv_threads(padapter);
        // 1. stop thread
        padapter->bDriverStopped = _TRUE;       //for stop thread
        rtw_stop_drv_threads(padapter);
@@ -3307,8 +3293,7 @@ int rtw_suspend_ap_wow(_adapter *padapter)
        #endif
 
        // 2.1 clean interupt
        #endif
 
        // 2.1 clean interupt
-       if (padapter->HalFunc.clear_interrupt)
-               padapter->HalFunc.clear_interrupt(padapter);
+       rtw_hal_clear_interrupt(padapter);
 #endif //CONFIG_SDIO_HCI
 
        // 2.2 free irq
 #endif //CONFIG_SDIO_HCI
 
        // 2.2 free irq
@@ -3324,8 +3309,7 @@ int rtw_suspend_ap_wow(_adapter *padapter)
        #endif
 
        poidparam.subcode = WOWLAN_AP_ENABLE;
        #endif
 
        poidparam.subcode = WOWLAN_AP_ENABLE;
-       padapter->HalFunc.SetHwRegHandler(padapter,
-                                       HW_VAR_AP_WOWLAN,(u8 *)&poidparam);
+       rtw_hal_set_hwreg(padapter,HW_VAR_AP_WOWLAN,(u8 *)&poidparam);
 
        DBG_871X_LEVEL(_drv_always_, "%s: wowmode suspending\n", __func__);
 
 
        DBG_871X_LEVEL(_drv_always_, "%s: wowmode suspending\n", __func__);
 
@@ -3431,6 +3415,7 @@ int rtw_suspend_common(_adapter *padapter)
 
        DBG_871X_LEVEL(_drv_always_, " suspend start\n");
        DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
 
        DBG_871X_LEVEL(_drv_always_, " suspend start\n");
        DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
+       
        pdbgpriv->dbg_suspend_cnt++;
        
        pwrpriv->bInSuspend = _TRUE;
        pdbgpriv->dbg_suspend_cnt++;
        
        pwrpriv->bInSuspend = _TRUE;
@@ -3483,10 +3468,6 @@ int rtw_suspend_common(_adapter *padapter)
        }
 #endif // CONFIG_BT_COEXIST
 
        }
 #endif // CONFIG_BT_COEXIST
 
-#if defined(CONFIG_WOWLAN) && defined(CONFIG_GPIO_WAKEUP)
-       rtw_clear_hostwakeupgpio(padapter);
-#endif // CONFIG_WOWLAN && CONFIG_GPIO_WAKEUP
-
        rtw_ps_deny_cancel(padapter, PS_DENY_SUSPEND);
 
        if (check_fwstate(pmlmepriv,WIFI_STATION_STATE) == _TRUE
        rtw_ps_deny_cancel(padapter, PS_DENY_SUSPEND);
 
        if (check_fwstate(pmlmepriv,WIFI_STATION_STATE) == _TRUE
@@ -3541,6 +3522,7 @@ int rtw_suspend_common(_adapter *padapter)
                rtw_suspend_normal(padapter);
        }
 
                rtw_suspend_normal(padapter);
        }
 
+
        DBG_871X_LEVEL(_drv_always_, "rtw suspend success in %d ms\n",
                rtw_get_passing_time_ms(start_time));
 
        DBG_871X_LEVEL(_drv_always_, "rtw suspend success in %d ms\n",
                rtw_get_passing_time_ms(start_time));
 
@@ -3589,7 +3571,11 @@ _func_enter_;
 
 #ifdef CONFIG_PNO_SUPPORT
        pwrpriv->pno_in_resume = _TRUE;
 
 #ifdef CONFIG_PNO_SUPPORT
        pwrpriv->pno_in_resume = _TRUE;
-#endif
+#ifdef CONFIG_FWLPS_IN_IPS
+       if(pwrpriv->wowlan_pno_enable)
+               rtw_set_fw_in_ips_mode(padapter, _FALSE);
+#endif //CONFIG_FWLPS_IN_IPS
+#endif//CONFIG_PNO_SUPPORT
 
        if (pwrpriv->wowlan_mode == _TRUE){
 #ifdef CONFIG_LPS
 
        if (pwrpriv->wowlan_mode == _TRUE){
 #ifdef CONFIG_LPS
@@ -3609,8 +3595,7 @@ _func_enter_;
                }
                #endif
 
                }
                #endif
 
-               if (padapter->HalFunc.clear_interrupt)
-                       padapter->HalFunc.clear_interrupt(padapter);
+               rtw_hal_clear_interrupt(padapter);
 #endif //CONFIG_SDIO_HCI
 
                //if (sdio_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS) {         
 #endif //CONFIG_SDIO_HCI
 
                //if (sdio_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS) {         
@@ -3622,7 +3607,7 @@ _func_enter_;
 
                //Disable WOW, set H2C command
                poidparam.subcode=WOWLAN_DISABLE;
 
                //Disable WOW, set H2C command
                poidparam.subcode=WOWLAN_DISABLE;
-               padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
+               rtw_hal_set_hwreg(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
 
                #ifdef CONFIG_CONCURRENT_MODE
                rtw_reset_drv_sw(padapter->pbuddy_adapter);
 
                #ifdef CONFIG_CONCURRENT_MODE
                rtw_reset_drv_sw(padapter->pbuddy_adapter);
@@ -3714,7 +3699,11 @@ _func_enter_;
        }
 
        if (pwrpriv->wowlan_wake_reason == RX_PNOWakeUp) {
        }
 
        if (pwrpriv->wowlan_wake_reason == RX_PNOWakeUp) {
-               rtw_lock_ext_suspend_timeout(15000);
+#ifdef CONFIG_IOCTL_CFG80211   
+               cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0,
+                               GFP_ATOMIC);
+#endif
+               rtw_lock_ext_suspend_timeout(10000);
        }
 
        if (pwrpriv->wowlan_mode == _TRUE) {
        }
 
        if (pwrpriv->wowlan_mode == _TRUE) {
@@ -3729,8 +3718,18 @@ _func_enter_;
 
        pwrpriv->wowlan_mode =_FALSE;
 
 
        pwrpriv->wowlan_mode =_FALSE;
 
+       // Power On LED
+       rtw_hal_sw_led_init(padapter);
+       if(pwrpriv->wowlan_wake_reason == Rx_DisAssoc ||
+               pwrpriv->wowlan_wake_reason == Rx_DeAuth ||
+               pwrpriv->wowlan_wake_reason == FWDecisionDisconnect)
+               rtw_led_control(padapter, LED_CTL_NO_LINK);
+       else
+               rtw_led_control(padapter, LED_CTL_LINK);
+
        //clean driver side wake up reason.
        pwrpriv->wowlan_wake_reason = 0;
        //clean driver side wake up reason.
        pwrpriv->wowlan_wake_reason = 0;
+
 exit:
        DBG_871X("<== "FUNC_ADPT_FMT" exit....\n", FUNC_ADPT_ARG(padapter));
 _func_exit_;
 exit:
        DBG_871X("<== "FUNC_ADPT_FMT" exit....\n", FUNC_ADPT_ARG(padapter));
 _func_exit_;
@@ -3775,8 +3774,7 @@ _func_enter_;
 
        rtw_hal_disable_interrupt(padapter);
 
 
        rtw_hal_disable_interrupt(padapter);
 
-       if (padapter->HalFunc.clear_interrupt)
-               padapter->HalFunc.clear_interrupt(padapter);
+       rtw_hal_clear_interrupt(padapter);
                
        //if (sdio_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS) {         
        if((padapter->intf_alloc_irq) && (padapter->intf_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS)){
                
        //if (sdio_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS) {         
        if((padapter->intf_alloc_irq) && (padapter->intf_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS)){
@@ -3787,8 +3785,7 @@ _func_enter_;
 
        //Disable WOW, set H2C command
        poidparam.subcode = WOWLAN_AP_DISABLE;
 
        //Disable WOW, set H2C command
        poidparam.subcode = WOWLAN_AP_DISABLE;
-       padapter->HalFunc.SetHwRegHandler(padapter,
-               HW_VAR_AP_WOWLAN,(u8 *)&poidparam);
+       rtw_hal_set_hwreg(padapter,HW_VAR_AP_WOWLAN,(u8 *)&poidparam);
        pwrpriv->wowlan_ap_mode = _FALSE;
 
        padapter->bDriverStopped = _FALSE;
        pwrpriv->wowlan_ap_mode = _FALSE;
 
        padapter->bDriverStopped = _FALSE;
@@ -3869,6 +3866,10 @@ _func_enter_;
 #endif
        //clean driver side wake up reason.
        pwrpriv->wowlan_wake_reason = 0;
 #endif
        //clean driver side wake up reason.
        pwrpriv->wowlan_wake_reason = 0;
+
+       // Power On LED
+       rtw_hal_sw_led_init(padapter);
+       rtw_led_control(padapter, LED_CTL_LINK);
 exit:
        DBG_871X("<== "FUNC_ADPT_FMT" exit....\n", FUNC_ADPT_ARG(padapter));
 _func_exit_;
 exit:
        DBG_871X("<== "FUNC_ADPT_FMT" exit....\n", FUNC_ADPT_ARG(padapter));
 _func_exit_;
@@ -4077,7 +4078,7 @@ u8 rtw_get_gpio(struct net_device *netdev, u8 gpio_num)
 }
 EXPORT_SYMBOL(rtw_get_gpio);
 
 }
 EXPORT_SYMBOL(rtw_get_gpio);
 
-int  rtw_set_gpio_output_value(struct net_device *netdev, u8 gpio_num, BOOLEAN isHigh)
+int  rtw_set_gpio_output_value(struct net_device *netdev, u8 gpio_num, bool isHigh)
 {
        u8 direction = 0;
        u8 res = -1;
 {
        u8 direction = 0;
        u8 res = -1;
@@ -4086,11 +4087,25 @@ int  rtw_set_gpio_output_value(struct net_device *netdev, u8 gpio_num, BOOLEAN i
 }
 EXPORT_SYMBOL(rtw_set_gpio_output_value);
 
 }
 EXPORT_SYMBOL(rtw_set_gpio_output_value);
 
-int rtw_config_gpio(struct net_device *netdev, u8 gpio_num, BOOLEAN isOutput)
+int rtw_config_gpio(struct net_device *netdev, u8 gpio_num, bool isOutput)
 {
        _adapter *adapter = (_adapter *)rtw_netdev_priv(netdev);        
        return rtw_hal_config_gpio(adapter,gpio_num,isOutput);  
 }
 EXPORT_SYMBOL(rtw_config_gpio);
 {
        _adapter *adapter = (_adapter *)rtw_netdev_priv(netdev);        
        return rtw_hal_config_gpio(adapter,gpio_num,isOutput);  
 }
 EXPORT_SYMBOL(rtw_config_gpio);
+int rtw_register_gpio_interrupt(struct net_device *netdev, int gpio_num, void(*callback)(u8 level))
+{
+       _adapter *adapter = (_adapter *)rtw_netdev_priv(netdev);
+       return rtw_hal_register_gpio_interrupt(adapter,gpio_num,callback);
+}
+EXPORT_SYMBOL(rtw_register_gpio_interrupt);
+
+int rtw_disable_gpio_interrupt(struct net_device *netdev, int gpio_num)
+{
+       _adapter *adapter = (_adapter *)rtw_netdev_priv(netdev);
+       return rtw_hal_disable_gpio_interrupt(adapter,gpio_num);
+}
+EXPORT_SYMBOL(rtw_disable_gpio_interrupt);
+
 #endif //#ifdef CONFIG_GPIO_API 
 
 #endif //#ifdef CONFIG_GPIO_API 
 
index 2c2a47ab66a3d65db4646772dea308d09db1ae43..0b1a74585c37d32d632558e8836c187f10f0e201 100755 (executable)
@@ -183,8 +183,6 @@ int rtw_os_recvbuf_resource_alloc(_adapter *padapter, struct recv_buf *precvbuf)
 
        precvbuf->pskb = NULL;
 
 
        precvbuf->pskb = NULL;
 
-       precvbuf->reuse = _FALSE;
-
        precvbuf->pallocated_buf  = precvbuf->pbuf = NULL;
 
        precvbuf->pdata = precvbuf->phead = precvbuf->ptail = precvbuf->pend = NULL;
        precvbuf->pallocated_buf  = precvbuf->pbuf = NULL;
 
        precvbuf->pdata = precvbuf->phead = precvbuf->ptail = precvbuf->pend = NULL;
@@ -319,7 +317,7 @@ void rtw_os_recv_indicate_pkt(_adapter *padapter, _pkt *pkt, struct rx_pkt_attri
 
                        //DBG_871X("bmcast=%d\n", bmcast);
 
 
                        //DBG_871X("bmcast=%d\n", bmcast);
 
-                       if(_rtw_memcmp(pattrib->dst, myid(&padapter->eeprompriv), ETH_ALEN)==_FALSE)
+                       if (_rtw_memcmp(pattrib->dst, adapter_mac_addr(padapter), ETH_ALEN) == _FALSE)
                        {
                                //DBG_871X("not ap psta=%p, addr=%pM\n", psta, pattrib->dst);
 
                        {
                                //DBG_871X("not ap psta=%p, addr=%pM\n", psta, pattrib->dst);
 
@@ -565,6 +563,52 @@ static void rtw_os_ksocket_send(_adapter *padapter, union recv_frame *precv_fram
 }
 #endif //CONFIG_AUTO_AP_MODE
 
 }
 #endif //CONFIG_AUTO_AP_MODE
 
+int rtw_recv_monitor(_adapter *padapter, union recv_frame *precv_frame)
+{
+       int ret = _FAIL;
+       struct recv_priv *precvpriv;
+       _queue  *pfree_recv_queue;
+       _pkt *skb;
+       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+       struct rx_pkt_attrib *pattrib;
+
+       if (NULL == precv_frame)
+               goto _recv_drop;
+
+       pattrib = &precv_frame->u.hdr.attrib;
+       precvpriv = &(padapter->recvpriv);
+       pfree_recv_queue = &(precvpriv->free_recv_queue);
+
+       skb = precv_frame->u.hdr.pkt;
+       if (skb == NULL) {
+               DBG_871X("%s :skb==NULL something wrong!!!!\n", __func__);
+               goto _recv_drop;
+       }
+
+       skb->data = precv_frame->u.hdr.rx_data;
+       skb_set_tail_pointer(skb, precv_frame->u.hdr.len);
+       skb->len = precv_frame->u.hdr.len;
+       skb->ip_summed = CHECKSUM_NONE;
+       skb->pkt_type = PACKET_OTHERHOST;
+       skb->protocol = htons(0x0019); /* ETH_P_80211_RAW */
+
+       rtw_netif_rx(padapter->pnetdev, skb);
+
+       /* pointers to NULL before rtw_free_recvframe() */
+       precv_frame->u.hdr.pkt = NULL;
+
+       ret = _SUCCESS;
+
+_recv_drop:
+
+       /* enqueue back to free_recv_queue */
+       if (precv_frame)
+               rtw_free_recvframe(precv_frame, pfree_recv_queue);
+
+       return ret;
+
+}
+
 int rtw_recv_indicatepkt(_adapter *padapter, union recv_frame *precv_frame)
 {
        struct recv_priv *precvpriv;
 int rtw_recv_indicatepkt(_adapter *padapter, union recv_frame *precv_frame)
 {
        struct recv_priv *precvpriv;
@@ -672,7 +716,6 @@ void rtw_os_read_port(_adapter *padapter, struct recv_buf *precvbuf)
        rtw_skb_free(precvbuf->pskb);
 
        precvbuf->pskb = NULL;
        rtw_skb_free(precvbuf->pskb);
 
        precvbuf->pskb = NULL;
-       precvbuf->reuse = _FALSE;
 
        if(precvbuf->irp_pending == _FALSE)
        {
 
        if(precvbuf->irp_pending == _FALSE)
        {
index abb99f087d4fd04592ba5172b1899094b0aa3762..6d0c84ffd6f1462f7e8623a80a64bc47e265127d 100755 (executable)
@@ -76,6 +76,7 @@ const char *android_wifi_cmd_str[ANDROID_WIFI_CMD_MAX] = {
 
        "MACADDR",
 
 
        "MACADDR",
 
+       "BLOCK_SCAN",
        "BLOCK",
        "WFD-ENABLE",
        "WFD-DISABLE",
        "BLOCK",
        "WFD-ENABLE",
        "WFD-DISABLE",
@@ -86,7 +87,7 @@ const char *android_wifi_cmd_str[ANDROID_WIFI_CMD_MAX] = {
        "HOSTAPD_SET_MACADDR_ACL",
        "HOSTAPD_ACL_ADD_STA",
        "HOSTAPD_ACL_REMOVE_STA",
        "HOSTAPD_SET_MACADDR_ACL",
        "HOSTAPD_ACL_ADD_STA",
        "HOSTAPD_ACL_REMOVE_STA",
-#ifdef CONFIG_GTK_OL
+#if defined(CONFIG_GTK_OL) && (LINUX_VERSION_CODE < KERNEL_VERSION(3, 1, 0))
        "GTK_REKEY_OFFLOAD",
 #endif //CONFIG_GTK_OL
 /*     Private command for     P2P disable*/
        "GTK_REKEY_OFFLOAD",
 #endif //CONFIG_GTK_OL
 /*     Private command for     P2P disable*/
@@ -409,6 +410,18 @@ int rtw_android_get_p2p_dev_addr(struct net_device *net, char *command, int tota
        return bytes_written;
 }
 
        return bytes_written;
 }
 
+int rtw_android_set_block_scan(struct net_device *net, char *command, int total_len)
+{
+       _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
+       char *block_value = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_BLOCK_SCAN]) + 1;
+
+       #ifdef CONFIG_IOCTL_CFG80211
+       adapter_wdev_data(adapter)->block_scan = (*block_value == '0')?_FALSE:_TRUE;
+       #endif
+
+       return 0;
+}
+
 int rtw_android_set_block(struct net_device *net, char *command, int total_len)
 {
        _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
 int rtw_android_set_block(struct net_device *net, char *command, int total_len)
 {
        _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
@@ -425,11 +438,11 @@ int rtw_android_setband(struct net_device *net, char *command, int total_len)
 {
        _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
        char *arg = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_SETBAND]) + 1;
 {
        _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
        char *arg = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_SETBAND]) + 1;
-       u32 band = GHZ_MAX;
+       u32 band = WIFI_FREQUENCY_BAND_AUTO;
        int ret = _FAIL;
 
        int ret = _FAIL;
 
-       sscanf(arg, "%u", &band);
-       ret = rtw_set_band(adapter, band);
+       if (sscanf(arg, "%u", &band) >= 1)
+               ret = rtw_set_band(adapter, band);
 
        return (ret==_SUCCESS)?0:-1;
 }
 
        return (ret==_SUCCESS)?0:-1;
 }
@@ -482,7 +495,7 @@ int get_int_from_command( char* pcmd )
        return ( rtw_atoi( pcmd + i ) );
 }
 
        return ( rtw_atoi( pcmd + i ) );
 }
 
-#ifdef CONFIG_GTK_OL
+#if defined(CONFIG_GTK_OL) && (LINUX_VERSION_CODE < KERNEL_VERSION(3, 1, 0))
 int rtw_gtk_offload(struct net_device *net, u8 *cmd_ptr)
 {
        int i;
 int rtw_gtk_offload(struct net_device *net, u8 *cmd_ptr)
 {
        int i;
@@ -641,7 +654,11 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
        case ANDROID_WIFI_CMD_MACADDR:
                bytes_written = rtw_android_get_macaddr(net, command, priv_cmd.total_len);
                break;
        case ANDROID_WIFI_CMD_MACADDR:
                bytes_written = rtw_android_get_macaddr(net, command, priv_cmd.total_len);
                break;
-               
+
+       case ANDROID_WIFI_CMD_BLOCK_SCAN:
+               bytes_written = rtw_android_set_block_scan(net, command, priv_cmd.total_len);
+               break;
+
        case ANDROID_WIFI_CMD_BLOCK:
                bytes_written = rtw_android_set_block(net, command, priv_cmd.total_len);
                break;
        case ANDROID_WIFI_CMD_BLOCK:
                bytes_written = rtw_android_set_block(net, command, priv_cmd.total_len);
                break;
@@ -735,6 +752,7 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
 #endif //CONFIG_IOCTL_CFG80211
 
 #ifdef CONFIG_WFD
 #endif //CONFIG_IOCTL_CFG80211
 
 #ifdef CONFIG_WFD
+
        case ANDROID_WIFI_CMD_MIRACAST:
                bytes_written = rtw_android_set_miracast_mode(net, command, priv_cmd.total_len);
                break;
        case ANDROID_WIFI_CMD_MIRACAST:
                bytes_written = rtw_android_set_miracast_mode(net, command, priv_cmd.total_len);
                break;
@@ -829,7 +847,7 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
                rtw_acl_remove_sta(padapter, addr);
                break;
        }
                rtw_acl_remove_sta(padapter, addr);
                break;
        }
-#ifdef CONFIG_GTK_OL
+#if defined(CONFIG_GTK_OL) && (LINUX_VERSION_CODE < KERNEL_VERSION(3, 1, 0))
        case ANDROID_WIFI_CMD_GTK_REKEY_OFFLOAD:
                rtw_gtk_offload(net, (u8*)command);
                break;
        case ANDROID_WIFI_CMD_GTK_REKEY_OFFLOAD:
                rtw_gtk_offload(net, (u8*)command);
                break;
index 2e249c92c6dd728682ff5601d574a60f4e6bfefa..af51646b5e9ddfb8635ff9b08630fe10ed6c5a3d 100755 (executable)
 
 #include <drv_types.h>
 
 
 #include <drv_types.h>
 
+#ifdef CONFIG_IOCTL_CFG80211
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(RTW_VENDOR_EXT_SUPPORT)
+
 /*
 #include <linux/kernel.h>
 #include <linux/if_arp.h>
 /*
 #include <linux/kernel.h>
 #include <linux/if_arp.h>
 
 #include <net/rtnetlink.h>
 
 
 #include <net/rtnetlink.h>
 
-#ifdef CONFIG_IOCTL_CFG80211
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(RTW_VENDOR_EXT_SUPPORT)
-
 #ifdef DBG_MEM_ALLOC
 extern bool match_mstat_sniff_rules(const enum mstat_f flags, const size_t size);
 struct sk_buff * dbg_rtw_cfg80211_vendor_event_alloc(struct wiphy *wiphy, int len, int event_id, gfp_t gfp
 #ifdef DBG_MEM_ALLOC
 extern bool match_mstat_sniff_rules(const enum mstat_f flags, const size_t size);
 struct sk_buff * dbg_rtw_cfg80211_vendor_event_alloc(struct wiphy *wiphy, int len, int event_id, gfp_t gfp
@@ -229,7 +229,8 @@ int rtw_dev_get_feature_set(struct net_device *dev)
 
        feature_set |= WIFI_FEATURE_INFRA;
 
 
        feature_set |= WIFI_FEATURE_INFRA;
 
-       if(IS_92D(*hal_ver) || IS_8812_SERIES(*hal_ver) || IS_8821_SERIES(*hal_ver))
+       if (IS_8814A_SERIES(*hal_ver) || IS_8812_SERIES(*hal_ver) ||
+                       IS_8821_SERIES(*hal_ver))
                feature_set |= WIFI_FEATURE_INFRA_5G;
 
        feature_set |= WIFI_FEATURE_P2P;
                feature_set |= WIFI_FEATURE_INFRA_5G;
 
        feature_set |= WIFI_FEATURE_P2P;
index c752173b69cdf9488b5dd7d40d1baec8f6755b34..80575c1584a332454fa0ef260cf0d4a061869cf3 100755 (executable)
@@ -392,24 +392,6 @@ static ssize_t proc_set_linked_info_dump(struct file *file, const char __user *b
        return count;
 }
 
        return count;
 }
 
-int proc_get_rx_info(struct seq_file *m, void *v)
-{
-       struct net_device *dev = m->private;
-       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
-       struct dvobj_priv *psdpriv = padapter->dvobj;
-       struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
-
-       //Counts of packets whose seq_num is less than preorder_ctrl->indicate_seq, Ex delay, retransmission, redundant packets and so on
-       DBG_871X_SEL_NL(m,"Counts of Packets Whose Seq_Num Less Than Reorder Control Seq_Num: %llu\n",(unsigned long long)pdbgpriv->dbg_rx_ampdu_drop_count);
-       //How many times the Rx Reorder Timer is triggered.
-       DBG_871X_SEL_NL(m,"Rx Reorder Time-out Trigger Counts: %llu\n",(unsigned long long)pdbgpriv->dbg_rx_ampdu_forced_indicate_count);
-       //Total counts of packets loss
-       DBG_871X_SEL_NL(m,"Rx Packet Loss Counts: %llu\n",(unsigned long long)pdbgpriv->dbg_rx_ampdu_loss_count);
-       DBG_871X_SEL_NL(m,"Duplicate Management Frame Drop Count: %llu\n",(unsigned long long)pdbgpriv->dbg_rx_dup_mgt_frame_drop_count);
-       DBG_871X_SEL_NL(m,"AMPDU BA window shift Count: %llu\n",(unsigned long long)pdbgpriv->dbg_rx_ampdu_window_shift_cnt);
-       return 0;
-}      
-
 static int proc_get_mac_qinfo(struct seq_file *m, void *v)
 {
        struct net_device *dev = m->private;
 static int proc_get_mac_qinfo(struct seq_file *m, void *v)
 {
        struct net_device *dev = m->private;
@@ -420,26 +402,6 @@ static int proc_get_mac_qinfo(struct seq_file *m, void *v)
        return 0;
 }
 
        return 0;
 }
 
-ssize_t proc_reset_rx_info(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
-{
-       struct net_device *dev = data;
-       _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
-       struct dvobj_priv *psdpriv = padapter->dvobj;
-       struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
-       char cmd[32];
-       if (buffer && !copy_from_user(cmd, buffer, sizeof(cmd))) {
-               if('0' == cmd[0]){
-                       pdbgpriv->dbg_rx_ampdu_drop_count = 0;
-                       pdbgpriv->dbg_rx_ampdu_forced_indicate_count = 0;
-                       pdbgpriv->dbg_rx_ampdu_loss_count = 0;
-                       pdbgpriv->dbg_rx_dup_mgt_frame_drop_count = 0;
-                       pdbgpriv->dbg_rx_ampdu_window_shift_cnt = 0;
-               }
-       }
-
-       return count;
-}
-
 int proc_get_wifi_spec(struct seq_file *m, void *v)
 {
        struct net_device *dev = m->private;
 int proc_get_wifi_spec(struct seq_file *m, void *v)
 {
        struct net_device *dev = m->private;
@@ -603,6 +565,11 @@ static ssize_t proc_set_cam(struct file *file, const char __user *buffer, size_t
                if (num < 2)
                        return count;
 
                if (num < 2)
                        return count;
 
+               if (id >= CAM_ENTRY_NUM_SW_LIMIT) {
+                       DBG_871X_LEVEL(_drv_err_, FUNC_ADPT_FMT" invalid id:%u\n", FUNC_ADPT_ARG(adapter), id);
+                       return count;
+               }
+
                if (strcmp("c", cmd) == 0) {
                        _clear_cam_entry(adapter, id);
                        adapter->securitypriv.hw_decrypted = _FALSE; /* temporarily set this for TX path to use SW enc */
                if (strcmp("c", cmd) == 0) {
                        _clear_cam_entry(adapter, id);
                        adapter->securitypriv.hw_decrypted = _FALSE; /* temporarily set this for TX path to use SW enc */
@@ -698,7 +665,7 @@ const struct rtw_proc_hdl adapter_proc_hdls [] = {
        {"survey_info", proc_get_survey_info, NULL},
        {"ap_info", proc_get_ap_info, NULL},
        {"adapter_state", proc_get_adapter_state, NULL},
        {"survey_info", proc_get_survey_info, NULL},
        {"ap_info", proc_get_ap_info, NULL},
        {"adapter_state", proc_get_adapter_state, NULL},
-       {"trx_info", proc_get_trx_info, NULL},
+       {"trx_info", proc_get_trx_info, proc_reset_trx_info},
        {"rate_ctl", proc_get_rate_ctl, proc_set_rate_ctl},
        {"dis_pwt_ctl", proc_get_dis_pwt, proc_set_dis_pwt},
        {"mac_qinfo", proc_get_mac_qinfo, NULL},
        {"rate_ctl", proc_get_rate_ctl, proc_set_rate_ctl},
        {"dis_pwt_ctl", proc_get_dis_pwt, proc_set_dis_pwt},
        {"mac_qinfo", proc_get_mac_qinfo, NULL},
@@ -706,7 +673,6 @@ const struct rtw_proc_hdl adapter_proc_hdls [] = {
        {"cam", proc_get_cam, proc_set_cam},
        {"cam_cache", proc_get_cam_cache, NULL},
        {"suspend_info", proc_get_suspend_resume_info, NULL},
        {"cam", proc_get_cam, proc_set_cam},
        {"cam_cache", proc_get_cam_cache, NULL},
        {"suspend_info", proc_get_suspend_resume_info, NULL},
-       {"rx_info", proc_get_rx_info, proc_reset_rx_info},
        {"wifi_spec",proc_get_wifi_spec,NULL},
 #ifdef CONFIG_LAYER2_ROAMING
        {"roam_flags", proc_get_roam_flags, proc_set_roam_flags},
        {"wifi_spec",proc_get_wifi_spec,NULL},
 #ifdef CONFIG_LAYER2_ROAMING
        {"roam_flags", proc_get_roam_flags, proc_set_roam_flags},
@@ -719,6 +685,7 @@ const struct rtw_proc_hdl adapter_proc_hdls [] = {
 #endif /* CONFIG_SDIO_HCI */
 
        {"fwdl_test_case", proc_get_dummy, proc_set_fwdl_test_case},
 #endif /* CONFIG_SDIO_HCI */
 
        {"fwdl_test_case", proc_get_dummy, proc_set_fwdl_test_case},
+       {"del_rx_ampdu_test_case", proc_get_dummy, proc_set_del_rx_ampdu_test_case},
        {"wait_hiq_empty", proc_get_dummy, proc_set_wait_hiq_empty},
 
        {"mac_reg_dump", proc_get_mac_reg_dump, NULL},
        {"wait_hiq_empty", proc_get_dummy, proc_set_wait_hiq_empty},
 
        {"mac_reg_dump", proc_get_mac_reg_dump, NULL},
@@ -768,9 +735,9 @@ const struct rtw_proc_hdl adapter_proc_hdls [] = {
        {"linked_info_dump",proc_get_linked_info_dump,proc_set_linked_info_dump},
 
 #ifdef CONFIG_GPIO_API
        {"linked_info_dump",proc_get_linked_info_dump,proc_set_linked_info_dump},
 
 #ifdef CONFIG_GPIO_API
-       {"get_gpio",proc_get_gpio,proc_set_gpio},
-       {"set_gpio_output_value",proc_get_dummy,proc_set_gpio_output_value},
-       {"config_gpio",proc_get_dummy,proc_set_config_gpio},
+       {"gpio_info",proc_get_gpio,proc_set_gpio},
+       {"gpio_set_output_value",proc_get_dummy,proc_set_gpio_output_value},
+       {"gpio_set_direction",proc_get_dummy,proc_set_config_gpio},
 #endif
 
 #ifdef CONFIG_DBG_COUNTER
 #endif
 
 #ifdef CONFIG_DBG_COUNTER
@@ -789,6 +756,16 @@ const struct rtw_proc_hdl adapter_proc_hdls [] = {
        {"chan_plan",proc_get_chan_plan,proc_set_chan_plan},
        {"new_bcn_max", proc_get_new_bcn_max, proc_set_new_bcn_max},
        {"sink_udpport",proc_get_udpport,proc_set_udpport},
        {"chan_plan",proc_get_chan_plan,proc_set_chan_plan},
        {"new_bcn_max", proc_get_new_bcn_max, proc_set_new_bcn_max},
        {"sink_udpport",proc_get_udpport,proc_set_udpport},
+#ifdef DBG_RX_COUNTER_DUMP
+       {"dump_rx_cnt_mode",proc_get_rx_cnt_dump,proc_set_rx_cnt_dump},
+#endif 
+#ifdef CONFIG_POWER_SAVING
+       {"ps_info",proc_get_ps_info, NULL},
+#endif
+#ifdef CONFIG_TDLS
+       {"tdls_info", proc_get_tdls_info, NULL},
+#endif
+       {"monitor", proc_get_monitor, proc_set_monitor},
 };
 
 const int adapter_proc_hdls_num = sizeof(adapter_proc_hdls) / sizeof(struct rtw_proc_hdl);
 };
 
 const int adapter_proc_hdls_num = sizeof(adapter_proc_hdls) / sizeof(struct rtw_proc_hdl);
@@ -941,23 +918,18 @@ ssize_t proc_set_odm_adaptivity(struct file *file, const char __user *buffer, si
        char tmp[32];
        u32 TH_L2H_ini;
        s8 TH_EDCCA_HL_diff;
        char tmp[32];
        u32 TH_L2H_ini;
        s8 TH_EDCCA_HL_diff;
-       u32 IGI_Base;
-       int ForceEDCCA;
-       u8 AdapEn_RSSI;
-       u8 IGI_LowerBound;
 
        if (count < 1)
                return -EFAULT;
 
        if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
 
 
        if (count < 1)
                return -EFAULT;
 
        if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
 
-               int num = sscanf(tmp, "%x %hhd %x %d %hhu %hhu",
-                       &TH_L2H_ini, &TH_EDCCA_HL_diff, &IGI_Base, &ForceEDCCA, &AdapEn_RSSI, &IGI_LowerBound);
+               int num = sscanf(tmp, "%x %hhd",        &TH_L2H_ini, &TH_EDCCA_HL_diff);
 
 
-               if (num != 6)
+               if (num != 2)
                        return count;
 
                        return count;
 
-               rtw_odm_adaptivity_parm_set(padapter, (s8)TH_L2H_ini, TH_EDCCA_HL_diff, (s8)IGI_Base, (bool)ForceEDCCA, AdapEn_RSSI, IGI_LowerBound);
+               rtw_odm_adaptivity_parm_set(padapter, (s8)TH_L2H_ini, TH_EDCCA_HL_diff);
        }
        
        return count;
        }
        
        return count;
@@ -984,7 +956,7 @@ int proc_get_phydm_cmd(struct seq_file *m, void *v)
                if (NULL == phydm_msg)
                        return -ENOMEM;
 
                if (NULL == phydm_msg)
                        return -ENOMEM;
 
-               PhyDM_Cmd(phydm, NULL, 0, 0, phydm_msg, PHYDM_MSG_LEN);
+               phydm_cmd(phydm, NULL, 0, 0, phydm_msg, PHYDM_MSG_LEN);
        }
 
        DBG_871X_SEL(m, "%s\n", phydm_msg);
        }
 
        DBG_871X_SEL(m, "%s\n", phydm_msg);
@@ -1024,7 +996,7 @@ ssize_t proc_set_phydm_cmd(struct file *file, const char __user *buffer, size_t
                        _rtw_memset(phydm_msg, 0, PHYDM_MSG_LEN);
                }
 
                        _rtw_memset(phydm_msg, 0, PHYDM_MSG_LEN);
                }
 
-               PhyDM_Cmd(phydm, tmp, count, 1, phydm_msg, PHYDM_MSG_LEN);
+               phydm_cmd(phydm, tmp, count, 1, phydm_msg, PHYDM_MSG_LEN);
 
                if (strlen(phydm_msg) == 0) {
                        rtw_mfree(phydm_msg, PHYDM_MSG_LEN);
 
                if (strlen(phydm_msg) == 0) {
                        rtw_mfree(phydm_msg, PHYDM_MSG_LEN);
index 1ea0e5aed86c052bb0dd24c5a34c2ba5057b09df..c331b33864adfd57de914f01af6d724c2bfc4dfc 100755 (executable)
@@ -20,6 +20,8 @@
 #define _HCI_INTF_C_
 
 #include <drv_types.h>
 #define _HCI_INTF_C_
 
 #include <drv_types.h>
+#include <hal_data.h>
+
 #include <platform_ops.h>
 
 #ifndef CONFIG_USB_HCI
 #include <platform_ops.h>
 
 #ifndef CONFIG_USB_HCI
@@ -137,133 +139,6 @@ static void rtw_dev_shutdown(struct device *dev)
 
 /* DID_USB_v916_20130116 */
 static struct usb_device_id rtw_usb_id_tbl[] ={
 
 /* DID_USB_v916_20130116 */
 static struct usb_device_id rtw_usb_id_tbl[] ={
-
-#ifdef CONFIG_RTL8192C
-       /*=== Realtek demoboard ===*/
-       /****** 8188CUS ********/
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8176),.driver_info = RTL8188C_8192C},/* 8188cu 1*1 dongole */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8170),.driver_info = RTL8188C_8192C},/* 8188CE-VAU USB minCard */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817E),.driver_info = RTL8188C_8192C},/* 8188CE-VAU USB minCard */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817A),.driver_info = RTL8188C_8192C},/* 8188cu Slim Solo */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817B),.driver_info = RTL8188C_8192C},/* 8188cu Slim Combo */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817D),.driver_info = RTL8188C_8192C},/* 8188RU High-power USB Dongle */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754),.driver_info = RTL8188C_8192C},/* 8188 Combo for BC4 */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817F),.driver_info = RTL8188C_8192C},/* 8188RU */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x818A),.driver_info = RTL8188C_8192C},/* RTL8188CUS-VL */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x018A),.driver_info = RTL8188C_8192C},/* RTL8188CTV */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x17C0),.driver_info = RTL8188C_8192C},/* RTK demoboard - USB-N10E */
-       /****** 8192CUS ********/
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8177),.driver_info = RTL8188C_8192C},/* 8191cu 1*2 */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8178),.driver_info = RTL8188C_8192C},/* 8192cu 2*2 */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817C),.driver_info = RTL8188C_8192C},/* 8192CE-VAU USB minCard */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8191),.driver_info = RTL8188C_8192C},/* 8192CU 2*2 */
-       {USB_DEVICE(0x1058, 0x0631),.driver_info = RTL8188C_8192C},/* Alpha, 8192CU */
-       /*=== Customer ID ===*/
-       /****** 8188CUS Dongle ********/
-       {USB_DEVICE(0x2019, 0xED17),.driver_info = RTL8188C_8192C},/* PCI - Edimax */
-       {USB_DEVICE(0x0DF6, 0x0052),.driver_info = RTL8188C_8192C},/* Sitecom - Edimax */
-       {USB_DEVICE(0x7392, 0x7811),.driver_info = RTL8188C_8192C},/* Edimax - Edimax */
-       {USB_DEVICE(0x07B8, 0x8189),.driver_info = RTL8188C_8192C},/* Abocom - Abocom */
-       {USB_DEVICE(0x0EB0, 0x9071),.driver_info = RTL8188C_8192C},/* NO Brand - Etop */
-       {USB_DEVICE(0x06F8, 0xE033),.driver_info = RTL8188C_8192C},/* Hercules - Edimax */
-       {USB_DEVICE(0x103C, 0x1629),.driver_info = RTL8188C_8192C},/* HP - Lite-On ,8188CUS Slim Combo */
-       {USB_DEVICE(0x2001, 0x3308),.driver_info = RTL8188C_8192C},/* D-Link - Alpha */
-       {USB_DEVICE(0x050D, 0x1102),.driver_info = RTL8188C_8192C},/* Belkin - Edimax */
-       {USB_DEVICE(0x2019, 0xAB2A),.driver_info = RTL8188C_8192C},/* Planex - Abocom */
-       {USB_DEVICE(0x20F4, 0x648B),.driver_info = RTL8188C_8192C},/* TRENDnet - Cameo */
-       {USB_DEVICE(0x4855, 0x0090),.driver_info = RTL8188C_8192C},/*  - Feixun */
-       {USB_DEVICE(0x13D3, 0x3357),.driver_info = RTL8188C_8192C},/*  - AzureWave */
-       {USB_DEVICE(0x0DF6, 0x005C),.driver_info = RTL8188C_8192C},/* Sitecom - Edimax */
-       {USB_DEVICE(0x0BDA, 0x5088),.driver_info = RTL8188C_8192C},/* Thinkware - CC&C */
-       {USB_DEVICE(0x4856, 0x0091),.driver_info = RTL8188C_8192C},/* NetweeN - Feixun */
-       {USB_DEVICE(0x0846, 0x9041),.driver_info = RTL8188C_8192C}, /* Netgear - Cameo */
-       {USB_DEVICE(0x2019, 0x4902),.driver_info = RTL8188C_8192C},/* Planex - Etop */
-       {USB_DEVICE(0x2019, 0xAB2E),.driver_info = RTL8188C_8192C},/* SW-WF02-AD15 -Abocom */
-       {USB_DEVICE(0x2001, 0x330B),.driver_info = RTL8188C_8192C}, /* D-LINK - T&W */
-       {USB_DEVICE(0xCDAB, 0x8010),.driver_info = RTL8188C_8192C}, /* - - compare */
-       {USB_DEVICE(0x0B05, 0x17BA),.driver_info = RTL8188C_8192C}, /* ASUS - Edimax */
-       {USB_DEVICE(0x0BDA, 0x1E1E),.driver_info = RTL8188C_8192C}, /* Intel - - */
-       {USB_DEVICE(0x04BB, 0x094c),.driver_info = RTL8188C_8192C}, /* I-O DATA - Edimax */
-       /****** 8188CTV ********/
-       {USB_DEVICE(0xCDAB, 0x8011),.driver_info = RTL8188C_8192C}, /* - - compare */
-       {USB_DEVICE(0x0BDA, 0x0A8A),.driver_info = RTL8188C_8192C}, /* Sony - Foxconn */
-       /****** 8188 RU ********/
-       {USB_DEVICE(0x0BDA, 0x317F),.driver_info = RTL8188C_8192C},/* Netcore,Netcore */
-       /****** 8188CE-VAU ********/
-       {USB_DEVICE(0x13D3, 0x3359),.driver_info = RTL8188C_8192C},/*  - Azwave */
-       {USB_DEVICE(0x13D3, 0x3358),.driver_info = RTL8188C_8192C},/*  - Azwave */
-       /****** 8188CUS Slim Solo********/
-       {USB_DEVICE(0x04F2, 0xAFF7),.driver_info = RTL8188C_8192C},/* XAVI - XAVI */
-       {USB_DEVICE(0x04F2, 0xAFF9),.driver_info = RTL8188C_8192C},/* XAVI - XAVI */
-       {USB_DEVICE(0x04F2, 0xAFFA),.driver_info = RTL8188C_8192C},/* XAVI - XAVI */
-       /****** 8188CUS Slim Combo ********/
-       {USB_DEVICE(0x04F2, 0xAFF8),.driver_info = RTL8188C_8192C},/* XAVI - XAVI */
-       {USB_DEVICE(0x04F2, 0xAFFB),.driver_info = RTL8188C_8192C},/* XAVI - XAVI */
-       {USB_DEVICE(0x04F2, 0xAFFC),.driver_info = RTL8188C_8192C},/* XAVI - XAVI */
-       {USB_DEVICE(0x2019, 0x1201),.driver_info = RTL8188C_8192C},/* Planex - Vencer */
-       /****** 8192CUS Dongle ********/
-       {USB_DEVICE(0x2001, 0x3307),.driver_info = RTL8188C_8192C},/* D-Link - Cameo */
-       {USB_DEVICE(0x2001, 0x330A),.driver_info = RTL8188C_8192C},/* D-Link - Alpha */
-       {USB_DEVICE(0x2001, 0x3309),.driver_info = RTL8188C_8192C},/* D-Link - Alpha */
-       {USB_DEVICE(0x0586, 0x341F),.driver_info = RTL8188C_8192C},/* Zyxel - Abocom */
-       {USB_DEVICE(0x7392, 0x7822),.driver_info = RTL8188C_8192C},/* Edimax - Edimax */
-       {USB_DEVICE(0x2019, 0xAB2B),.driver_info = RTL8188C_8192C},/* Planex - Abocom */
-       {USB_DEVICE(0x07B8, 0x8178),.driver_info = RTL8188C_8192C},/* Abocom - Abocom */
-       {USB_DEVICE(0x07AA, 0x0056),.driver_info = RTL8188C_8192C},/* ATKK - Gemtek */
-       {USB_DEVICE(0x4855, 0x0091),.driver_info = RTL8188C_8192C},/*  - Feixun */
-       {USB_DEVICE(0x050D, 0x2102),.driver_info = RTL8188C_8192C},/* Belkin - Sercomm */
-       {USB_DEVICE(0x050D, 0x2103),.driver_info = RTL8188C_8192C},/* Belkin - Edimax */
-       {USB_DEVICE(0x20F4, 0x624D),.driver_info = RTL8188C_8192C},/* TRENDnet */
-       {USB_DEVICE(0x0DF6, 0x0061),.driver_info = RTL8188C_8192C},/* Sitecom - Edimax */
-       {USB_DEVICE(0x0B05, 0x17AB),.driver_info = RTL8188C_8192C},/* ASUS - Edimax */
-       {USB_DEVICE(0x0846, 0x9021),.driver_info = RTL8188C_8192C},/* Netgear - Sercomm */
-       {USB_DEVICE(0x0846, 0xF001),.driver_info = RTL8188C_8192C}, /* Netgear - Sercomm */
-       {USB_DEVICE(0x0E66, 0x0019),.driver_info = RTL8188C_8192C},/* Hawking,Edimax */
-       {USB_DEVICE(0x0E66, 0x0020),.driver_info = RTL8188C_8192C}, /* Hawking  - Edimax */
-       {USB_DEVICE(0x050D, 0x1004),.driver_info = RTL8188C_8192C}, /* Belkin - Edimax */
-       {USB_DEVICE(0x0BDA, 0x2E2E),.driver_info = RTL8188C_8192C}, /* Intel - - */
-       {USB_DEVICE(0x2357, 0x0100),.driver_info = RTL8188C_8192C}, /* TP-Link - TP-Link */
-       {USB_DEVICE(0x06F8, 0xE035),.driver_info = RTL8188C_8192C}, /* Hercules - Edimax */
-       {USB_DEVICE(0x04BB, 0x0950),.driver_info = RTL8188C_8192C}, /* IO-DATA - Edimax */
-       {USB_DEVICE(0x0DF6, 0x0070),.driver_info = RTL8188C_8192C}, /* Sitecom - Edimax */
-       {USB_DEVICE(0x0789, 0x016D),.driver_info = RTL8188C_8192C}, /* LOGITEC - Edimax */
-       /****** 8192CE-VAU  ********/
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8186),.driver_info = RTL8188C_8192C},/* Intel-Xavi( Azwave) */
-#endif
-
-#ifdef CONFIG_RTL8192D
-       /*=== Realtek demoboard ===*/
-       /****** 8192DU ********/
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8193),.driver_info = RTL8192D},/* 8192DU-VC */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8194),.driver_info = RTL8192D},/* 8192DU-VS */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8111),.driver_info = RTL8192D},/* Realtek 5G dongle for WiFi Display */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0193),.driver_info = RTL8192D},/* 8192DE-VAU */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8171),.driver_info = RTL8192D},/* 8192DU-VC */
-       /*=== Customer ID ===*/
-       /****** 8192DU-VC ********/
-       {USB_DEVICE(0x2019, 0xAB2C),.driver_info = RTL8192D},/* PCI - Abocm */
-       {USB_DEVICE(0x2019, 0x4903),.driver_info = RTL8192D},/* PCI - ETOP */
-       {USB_DEVICE(0x2019, 0x4904),.driver_info = RTL8192D},/* PCI - ETOP */
-       {USB_DEVICE(0x07B8, 0x8193),.driver_info = RTL8192D},/* Abocom - Abocom */
-       /****** 8192DU-VS ********/
-       {USB_DEVICE(0x20F4, 0x664B),.driver_info = RTL8192D},/* TRENDnet */
-       {USB_DEVICE(0x04DD, 0x954F),.driver_info = RTL8192D},  /* Sharp */
-       {USB_DEVICE(0x04DD, 0x96A6),.driver_info = RTL8192D},  /* Sharp */
-       {USB_DEVICE(0x050D, 0x110A),.driver_info = RTL8192D}, /* Belkin - Edimax */
-       {USB_DEVICE(0x050D, 0x1105),.driver_info = RTL8192D}, /* Belkin - Edimax */
-       {USB_DEVICE(0x050D, 0x120A),.driver_info = RTL8192D}, /* Belkin - Edimax */
-       {USB_DEVICE(0x1668, 0x8102),.driver_info = RTL8192D}, /*  -  */
-       {USB_DEVICE(0x0BDA, 0xE194),.driver_info = RTL8192D}, /*  - Edimax */
-       /****** 8192DU-WiFi Display Dongle ********/
-       {USB_DEVICE(0x2019, 0xAB2D),.driver_info = RTL8192D},/* Planex - Abocom ,5G dongle for WiFi Display */
-#endif
-
-#ifdef CONFIG_RTL8723A
-       {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0x8724,0xff,0xff,0xff),.driver_info = RTL8723A}, /* 8723AU 1*1 */
-       {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0x1724,0xff,0xff,0xff),.driver_info = RTL8723A}, /* 8723AU 1*1 */
-       {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0x0724,0xff,0xff,0xff),.driver_info = RTL8723A}, /* 8723AU 1*1 */
-#endif
-
 #ifdef CONFIG_RTL8188E
        /*=== Realtek demoboard ===*/
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8179),.driver_info = RTL8188E}, /* 8188EUS */
 #ifdef CONFIG_RTL8188E
        /*=== Realtek demoboard ===*/
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8179),.driver_info = RTL8188E}, /* 8188EUS */
@@ -305,6 +180,7 @@ static struct usb_device_id rtw_usb_id_tbl[] ={
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0821),.driver_info = RTL8821},/* Default ID */
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8822),.driver_info = RTL8821},/* Default ID */
        {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0x0820,0xff,0xff,0xff),.driver_info = RTL8821}, /* 8821AU */
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0821),.driver_info = RTL8821},/* Default ID */
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8822),.driver_info = RTL8821},/* Default ID */
        {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0x0820,0xff,0xff,0xff),.driver_info = RTL8821}, /* 8821AU */
+       {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0x0823,0xff,0xff,0xff),.driver_info = RTL8821}, /* 8821AU */
        /*=== Customer ID ===*/
        {USB_DEVICE(0x7392, 0xA811),.driver_info = RTL8821}, /* Edimax - Edimax */
        {USB_DEVICE(0x04BB, 0x0953),.driver_info = RTL8821}, /* I-O DATA - Edimax */
        /*=== Customer ID ===*/
        {USB_DEVICE(0x7392, 0xA811),.driver_info = RTL8821}, /* Edimax - Edimax */
        {USB_DEVICE(0x04BB, 0x0953),.driver_info = RTL8821}, /* I-O DATA - Edimax */
@@ -324,6 +200,11 @@ static struct usb_device_id rtw_usb_id_tbl[] ={
        {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0xB720,0xff,0xff,0xff),.driver_info = RTL8723B}, /* 8723BU 1*1 */
        //{USB_DEVICE(USB_VENDER_ID_REALTEK, 0xB720),.driver_info = RTL8723B}, /* 8723BU */
 #endif
        {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0xB720,0xff,0xff,0xff),.driver_info = RTL8723B}, /* 8723BU 1*1 */
        //{USB_DEVICE(USB_VENDER_ID_REALTEK, 0xB720),.driver_info = RTL8723B}, /* 8723BU */
 #endif
+
+#ifdef CONFIG_RTL8814A
+       
+       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8813),.driver_info = RTL8814A},
+#endif /* CONFIG_RTL8814A */
        {}      /* Terminating entry */
 };
 
        {}      /* Terminating entry */
 };
 
@@ -671,24 +552,36 @@ _func_enter_;
 _func_exit_;
 }
 
 _func_exit_;
 }
 
-static void rtw_decide_chip_type_by_usb_info(_adapter *padapter, const struct usb_device_id *pdid)
+static int usb_reprobe_to_usb3(PADAPTER Adapter)
 {
 {
-       padapter->chip_type = pdid->driver_info;
+       struct registry_priv  *registry_par = &Adapter->registrypriv;
+       int ret = _FALSE;
+       
+       if (registry_par->switch_usb3 == _TRUE) {
+               if (IS_HIGH_SPEED_USB(Adapter)) {
+                       if ((rtw_read8(Adapter, 0x74) & (BIT(2)|BIT(3))) != BIT(3)) {
+                               rtw_write8(Adapter, 0x74, 0x8);
+                               rtw_write8(Adapter, 0x70, 0x2);
+                               rtw_write8(Adapter, 0x3e, 0x1);
+                               rtw_write8(Adapter, 0x3d, 0x3);
+                               /* usb disconnect */
+                               rtw_write8(Adapter, 0x5, 0x80);
+                               ret = _TRUE;
+                       }
+                       
+               } else if (IS_SUPER_SPEED_USB(Adapter)) {
+                       rtw_write8(Adapter, 0x70, rtw_read8(Adapter, 0x70) & (~BIT(1)));
+                       rtw_write8(Adapter, 0x3e, rtw_read8(Adapter, 0x3e) & (~BIT(0)));
+               }
+       }
 
 
-       #ifdef CONFIG_RTL8192C
-       if(padapter->chip_type == RTL8188C_8192C)
-               rtl8192cu_set_hw_type(padapter);
-       #endif
+       return ret;
+}
 
 
-       #ifdef CONFIG_RTL8192D
-       if(padapter->chip_type == RTL8192D)
-               rtl8192du_set_hw_type(padapter);
-       #endif
 
 
-       #ifdef CONFIG_RTL8723A
-       if(padapter->chip_type == RTL8723A)
-               rtl8723au_set_hw_type(padapter);
-       #endif
+static void rtw_decide_chip_type_by_usb_info(_adapter *padapter, const struct usb_device_id *pdid)
+{
+       padapter->chip_type = pdid->driver_info;
 
        #ifdef CONFIG_RTL8188E
        if(padapter->chip_type == RTL8188E)
 
        #ifdef CONFIG_RTL8188E
        if(padapter->chip_type == RTL8188E)
@@ -709,27 +602,18 @@ static void rtw_decide_chip_type_by_usb_info(_adapter *padapter, const struct us
        if(padapter->chip_type == RTL8723B)
                rtl8723bu_set_hw_type(padapter);
        #endif
        if(padapter->chip_type == RTL8723B)
                rtl8723bu_set_hw_type(padapter);
        #endif
+       
+       #ifdef CONFIG_RTL8814A
+       if(padapter->chip_type == RTL8814A)
+               rtl8814au_set_hw_type(padapter);
+       #endif /* CONFIG_RTL8814A */
 
 }
 
 }
-void rtw_set_hal_ops(_adapter *padapter)
+u8 rtw_set_hal_ops(_adapter *padapter)
 {
        //alloc memory for HAL DATA
 {
        //alloc memory for HAL DATA
-       rtw_hal_data_init(padapter);
-       
-       #ifdef CONFIG_RTL8192C
-       if(padapter->chip_type == RTL8188C_8192C)
-               rtl8192cu_set_hal_ops(padapter);
-       #endif
-
-       #ifdef CONFIG_RTL8192D
-       if(padapter->chip_type == RTL8192D)
-               rtl8192du_set_hal_ops(padapter);
-       #endif
-
-       #ifdef CONFIG_RTL8723A
-       if(padapter->chip_type == RTL8723A)
-               rtl8723au_set_hal_ops(padapter);
-       #endif
+       if (rtw_hal_data_init(padapter) == _FAIL)
+               return _FAIL;
 
        #ifdef CONFIG_RTL8188E
        if(padapter->chip_type == RTL8188E)
 
        #ifdef CONFIG_RTL8188E
        if(padapter->chip_type == RTL8188E)
@@ -749,25 +633,19 @@ void rtw_set_hal_ops(_adapter *padapter)
        if(padapter->chip_type == RTL8723B)
                rtl8723bu_set_hal_ops(padapter);
        #endif
        if(padapter->chip_type == RTL8723B)
                rtl8723bu_set_hal_ops(padapter);
        #endif
+       #ifdef CONFIG_RTL8814A
+       if(padapter->chip_type == RTL8814A)
+               rtl8814au_set_hal_ops(padapter);
+       #endif /* CONFIG_RTL8814A */
+
+       if (_FAIL == rtw_hal_ops_check(padapter) )
+               return _FAIL;
+
+       return _SUCCESS;
 }
 
 void usb_set_intf_ops(_adapter *padapter,struct _io_ops *pops)
 {
 }
 
 void usb_set_intf_ops(_adapter *padapter,struct _io_ops *pops)
 {
-       #ifdef CONFIG_RTL8192C
-       if(padapter->chip_type == RTL8188C_8192C)
-               rtl8192cu_set_intf_ops(pops);
-       #endif
-
-       #ifdef CONFIG_RTL8192D
-       if(padapter->chip_type == RTL8192D)
-               rtl8192du_set_intf_ops(pops);
-       #endif
-
-       #ifdef CONFIG_RTL8723A
-       if(padapter->chip_type == RTL8723A)
-               rtl8723au_set_intf_ops(pops);
-       #endif
-
        #ifdef CONFIG_RTL8188E
        if(padapter->chip_type == RTL8188E)
                rtl8188eu_set_intf_ops(pops);
        #ifdef CONFIG_RTL8188E
        if(padapter->chip_type == RTL8188E)
                rtl8188eu_set_intf_ops(pops);
@@ -787,6 +665,10 @@ void usb_set_intf_ops(_adapter *padapter,struct _io_ops *pops)
        if(padapter->chip_type == RTL8723B)
                rtl8723bu_set_intf_ops(pops);
        #endif
        if(padapter->chip_type == RTL8723B)
                rtl8723bu_set_intf_ops(pops);
        #endif
+       
+       #ifdef CONFIG_RTL8814A
+       rtl8814au_set_intf_ops(pops);
+       #endif /* CONFIG_RTL8814A */
 }
 
 
 }
 
 
@@ -1008,7 +890,6 @@ static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
                        {
                                u8 bOpen = _TRUE;
                                rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
                        {
                                u8 bOpen = _TRUE;
                                rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
-                               //rtl8192c_set_FwSelectSuspend_cmd(padapter,_TRUE ,500);//note fw to support hw power down ping detect
                        }
                        #endif//SUPPORT_HW_RFOFF_DETECTED
                }
                        }
                        #endif//SUPPORT_HW_RFOFF_DETECTED
                }
@@ -1074,7 +955,6 @@ int rtw_resume_process(_adapter *padapter)
                        // The FW command register update must after MAC and FW init ready.
                if((padapter->bFWReady) && (pwrpriv->bHWPwrPindetect) && (padapter->registrypriv.usbss_enable ))
                {
                        // The FW command register update must after MAC and FW init ready.
                if((padapter->bFWReady) && (pwrpriv->bHWPwrPindetect) && (padapter->registrypriv.usbss_enable ))
                {
-                       //rtl8192c_set_FwSelectSuspend_cmd(padapter,_FALSE ,500);//note fw to support hw power down ping detect
                        u8 bOpen = _FALSE;
                        rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
                }       
                        u8 bOpen = _FALSE;
                        rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
                }       
@@ -1311,7 +1191,7 @@ _adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
        dvobj->padapters[dvobj->iface_nums++] = padapter;
        padapter->iface_id = IFACE_ID0;
 
        dvobj->padapters[dvobj->iface_nums++] = padapter;
        padapter->iface_id = IFACE_ID0;
 
-#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
+#if defined(CONFIG_CONCURRENT_MODE) 
        //set adapter_type/iface type for primary padapter
        padapter->isprimary = _TRUE;
        padapter->adapter_type = PRIMARY_ADAPTER;
        //set adapter_type/iface type for primary padapter
        padapter->isprimary = _TRUE;
        padapter->adapter_type = PRIMARY_ADAPTER;
@@ -1319,37 +1199,37 @@ _adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
        padapter->iface_type = IFACE_PORT0;
        #else
        padapter->iface_type = IFACE_PORT1;
        padapter->iface_type = IFACE_PORT0;
        #else
        padapter->iface_type = IFACE_PORT1;
-       #endif  
+       #endif
 #endif
 
        //step 1-1., decide the chip_type via driver_info
        padapter->interface_type = RTW_USB;
        rtw_decide_chip_type_by_usb_info(padapter, pdid);
 #endif
 
        //step 1-1., decide the chip_type via driver_info
        padapter->interface_type = RTW_USB;
        rtw_decide_chip_type_by_usb_info(padapter, pdid);
-
-       if (rtw_handle_dualmac(padapter, 1) != _SUCCESS)
-               goto free_adapter;
-
+       
        if((pnetdev = rtw_init_netdev(padapter)) == NULL) {
        if((pnetdev = rtw_init_netdev(padapter)) == NULL) {
-               goto handle_dualmac;
+               goto free_adapter;
        }
        SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
        padapter = rtw_netdev_priv(pnetdev);
 
 #ifdef CONFIG_IOCTL_CFG80211
        if(rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj)) != 0) {
        }
        SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
        padapter = rtw_netdev_priv(pnetdev);
 
 #ifdef CONFIG_IOCTL_CFG80211
        if(rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj)) != 0) {
-               goto handle_dualmac;
+               goto free_adapter;
        }
 #endif
 
        //step 2. hook HalFunc, allocate HalData
        //hal_set_hal_ops(padapter);
        }
 #endif
 
        //step 2. hook HalFunc, allocate HalData
        //hal_set_hal_ops(padapter);
-       rtw_set_hal_ops(padapter);
+       if(rtw_set_hal_ops(padapter) ==_FAIL) 
+               goto free_hal_data;
+       
 
        padapter->intf_start=&usb_intf_start;
        padapter->intf_stop=&usb_intf_stop;
 
        //step init_io_priv
 
        padapter->intf_start=&usb_intf_start;
        padapter->intf_stop=&usb_intf_stop;
 
        //step init_io_priv
-       rtw_init_io_priv(padapter,usb_set_intf_ops);
+       if( rtw_init_io_priv(padapter,usb_set_intf_ops) ==_FAIL)
+               goto free_hal_data;
 
        //step read_chip_version
        rtw_hal_read_chip_version(padapter);
 
        //step read_chip_version
        rtw_hal_read_chip_version(padapter);
@@ -1422,9 +1302,9 @@ _adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
 #endif
 
        // set mac addr
 #endif
 
        // set mac addr
-       rtw_macaddr_cfg(padapter->eeprompriv.mac_addr);
+       rtw_macaddr_cfg(adapter_mac_addr(padapter), get_hal_mac_addr(padapter));
 #ifdef CONFIG_P2P      
 #ifdef CONFIG_P2P      
-       rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
+       rtw_init_wifidirect_addrs(padapter, adapter_mac_addr(padapter), adapter_mac_addr(padapter));
 #endif // CONFIG_P2P
        DBG_871X("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n"
                , padapter->bDriverStopped
 #endif // CONFIG_P2P
        DBG_871X("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n"
                , padapter->bDriverStopped
@@ -1436,8 +1316,8 @@ _adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
        status = _SUCCESS;
 
 free_hal_data:
        status = _SUCCESS;
 
 free_hal_data:
-       if(status != _SUCCESS && padapter->HalData)
-               rtw_mfree(padapter->HalData, sizeof(*(padapter->HalData)));
+       if (status != _SUCCESS && padapter->HalData)
+               rtw_hal_free_data(padapter);
 free_wdev:
        if(status != _SUCCESS) {
                #ifdef CONFIG_IOCTL_CFG80211
 free_wdev:
        if(status != _SUCCESS) {
                #ifdef CONFIG_IOCTL_CFG80211
@@ -1445,9 +1325,7 @@ free_wdev:
                rtw_wdev_free(padapter->rtw_wdev);
                #endif
        }
                rtw_wdev_free(padapter->rtw_wdev);
                #endif
        }
-handle_dualmac:
-       if (status != _SUCCESS)
-               rtw_handle_dualmac(padapter, 0);
+       
 free_adapter:
        if (status != _SUCCESS) {
                if (pnetdev)
 free_adapter:
        if (status != _SUCCESS) {
                if (pnetdev)
@@ -1487,8 +1365,6 @@ static void rtw_usb_if1_deinit(_adapter *if1)
 
        DBG_871X("+r871xu_dev_remove, hw_init_completed=%d\n", if1->hw_init_completed);
 
 
        DBG_871X("+r871xu_dev_remove, hw_init_completed=%d\n", if1->hw_init_completed);
 
-       rtw_handle_dualmac(if1, 0);
-
 #ifdef CONFIG_IOCTL_CFG80211
        if(if1->rtw_wdev) {
                rtw_wdev_free(if1->rtw_wdev);
 #ifdef CONFIG_IOCTL_CFG80211
        if(if1->rtw_wdev) {
                rtw_wdev_free(if1->rtw_wdev);
@@ -1545,7 +1421,10 @@ static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device
                DBG_871X("rtw_usb_if1_init Failed!\n");
                goto free_dvobj;
        }
                DBG_871X("rtw_usb_if1_init Failed!\n");
                goto free_dvobj;
        }
-
+       
+       if (usb_reprobe_to_usb3(if1) == _TRUE)
+               goto free_if1;
+       
 #ifdef CONFIG_CONCURRENT_MODE
        if((if2 = rtw_drv_if2_init(if1, usb_set_intf_ops)) == NULL) {
                goto free_if1;
 #ifdef CONFIG_CONCURRENT_MODE
        if((if2 = rtw_drv_if2_init(if1, usb_set_intf_ops)) == NULL) {
                goto free_if1;
@@ -1574,9 +1453,8 @@ static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device
 #endif
 
        //dev_alloc_name && register_netdev
 #endif
 
        //dev_alloc_name && register_netdev
-       if((status = rtw_drv_register_netdev(if1)) != _SUCCESS) {
+       if (rtw_drv_register_netdev(if1) != _SUCCESS)
                goto free_if2;
                goto free_if2;
-       }
 
 #ifdef CONFIG_HOSTAPD_MLME
        hostapd_mode_init(if1);
 
 #ifdef CONFIG_HOSTAPD_MLME
        hostapd_mode_init(if1);
@@ -1591,15 +1469,26 @@ static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device
 
        status = _SUCCESS;
 
 
        status = _SUCCESS;
 
+#if 0 /* not used now */
+unregister_ndevs:
+       if (status != _SUCCESS)
+               rtw_unregister_netdevs(dvobj);
+#endif
 free_if2:
        if(status != _SUCCESS && if2) {
                #ifdef CONFIG_CONCURRENT_MODE
 free_if2:
        if(status != _SUCCESS && if2) {
                #ifdef CONFIG_CONCURRENT_MODE
+#ifdef CONFIG_IOCTL_CFG80211
+               rtw_wdev_unregister(if2->rtw_wdev);
+#endif /*CONFIG_IOCTL_CFG80211*/
                rtw_drv_if2_stop(if2);
                rtw_drv_if2_free(if2);
                #endif
        }
 free_if1:
        if (status != _SUCCESS && if1) {
                rtw_drv_if2_stop(if2);
                rtw_drv_if2_free(if2);
                #endif
        }
 free_if1:
        if (status != _SUCCESS && if1) {
+#ifdef CONFIG_IOCTL_CFG80211
+               rtw_wdev_unregister(if1->rtw_wdev);
+#endif /*CONFIG_IOCTL_CFG80211*/
                rtw_usb_if1_deinit(if1);
        }
 free_dvobj:
                rtw_usb_if1_deinit(if1);
        }
 free_dvobj:
@@ -1690,7 +1579,7 @@ _func_exit_;
 extern int console_suspend_enabled;
 #endif
 
 extern int console_suspend_enabled;
 #endif
 
-static int  rtw_drv_entry(void)
+static int rtw_drv_entry(void)
 {
        int ret = 0;
 
 {
        int ret = 0;
 
@@ -1731,7 +1620,7 @@ exit:
        return ret;
 }
 
        return ret;
 }
 
-static void rtw_drv_halt(void)
+static void  rtw_drv_halt(void)
 {
        DBG_871X_LEVEL(_drv_always_, "module exit start\n");
 
 {
        DBG_871X_LEVEL(_drv_always_, "module exit start\n");
 
@@ -1788,7 +1677,6 @@ void rockchip_wifi_exit_module_rtkwifi(void)
     rockchip_wifi_power(0);
   // wifi_deactivate_usb();
 }
     rockchip_wifi_power(0);
   // wifi_deactivate_usb();
 }
-
 #ifdef CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
 late_initcall(rockchip_wifi_init_module_rtkwifi);
 module_exit(rockchip_wifi_exit_module_rtkwifi);
 #ifdef CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
 late_initcall(rockchip_wifi_init_module_rtkwifi);
 module_exit(rockchip_wifi_exit_module_rtkwifi);
index b552caf212a18045e01cc9afcdd7054995036259..f432c53d5ab5d0343a49f5524e448aae8ae6d2a7 100755 (executable)
 #include <hal_data.h>\r
 #include <rtw_sreset.h>\r
 \r
 #include <hal_data.h>\r
 #include <rtw_sreset.h>\r
 \r
-#ifdef CONFIG_RTL8192D\r
-#include <Hal8192DPhyReg.h>\r
-#endif\r
-\r
-\r
 struct rtw_async_write_data {\r
        u8 data[VENDOR_CMD_MAX_DATA_LEN];\r
        struct usb_ctrlrequest dr;\r
 struct rtw_async_write_data {\r
        u8 data[VENDOR_CMD_MAX_DATA_LEN];\r
        struct usb_ctrlrequest dr;\r
@@ -389,8 +384,7 @@ void usb_read_port_cancel(struct intf_hdl *pintfhdl)
        DBG_871X("%s\n", __func__);\r
 \r
        for (i=0; i < NR_RECVBUFF ; i++) {\r
        DBG_871X("%s\n", __func__);\r
 \r
        for (i=0; i < NR_RECVBUFF ; i++) {\r
-               \r
-               precvbuf->reuse = _TRUE;        \r
+\r
                if (precvbuf->purb)      {\r
                        //DBG_8192C("usb_read_port_cancel : usb_kill_urb \n");\r
                        usb_kill_urb(precvbuf->purb);\r
                if (precvbuf->purb)      {\r
                        //DBG_8192C("usb_read_port_cancel : usb_kill_urb \n");\r
                        usb_kill_urb(precvbuf->purb);\r
@@ -520,8 +514,7 @@ _func_enter_;
                {                                       \r
                        padapter->bSurpriseRemoved=_TRUE;\r
                        DBG_8192C("bSurpriseRemoved=TRUE\n");\r
                {                                       \r
                        padapter->bSurpriseRemoved=_TRUE;\r
                        DBG_8192C("bSurpriseRemoved=TRUE\n");\r
-                       //rtl8192cu_trigger_gpio_0(padapter);\r
-                       RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bSurpriseRemoved=TRUE\n"));\r
+                       RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bSurpriseRemoved=TRUE\n"));\r
 \r
                        goto check_completion;\r
                }\r
 \r
                        goto check_completion;\r
                }\r
@@ -916,46 +909,34 @@ void usb_recv_tasklet(void *priv)
        _adapter                *padapter = (_adapter*)priv;\r
        struct recv_priv        *precvpriv = &padapter->recvpriv;\r
        struct recv_buf *precvbuf = NULL;\r
        _adapter                *padapter = (_adapter*)priv;\r
        struct recv_priv        *precvpriv = &padapter->recvpriv;\r
        struct recv_buf *precvbuf = NULL;\r
-       \r
-       while (NULL != (pskb = skb_dequeue(&precvpriv->rx_skb_queue)))\r
-       {\r
-               if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))\r
-               {\r
-                       DBG_8192C("recv_tasklet => bDriverStopped or bSurpriseRemoved \n");\r
-#ifdef CONFIG_PREALLOC_RX_SKB_BUFFER\r
-                       if(rtw_free_skb_premem(pskb)!=0)\r
-#endif //CONFIG_PREALLOC_RX_SKB_BUFFER\r
 \r
 \r
-                       rtw_skb_free(pskb);\r
+       while (NULL != (pskb = skb_dequeue(&precvpriv->rx_skb_queue))) {\r
+\r
+               if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE)) {\r
+                       DBG_8192C("recv_tasklet => bDriverStopped or bSurpriseRemoved \n");\r
+                       #ifdef CONFIG_PREALLOC_RX_SKB_BUFFER\r
+                       if (rtw_free_skb_premem(pskb) != 0)\r
+                       #endif //CONFIG_PREALLOC_RX_SKB_BUFFER\r
+                               rtw_skb_free(pskb);\r
                        break;\r
                }\r
                        break;\r
                }\r
-       \r
-               recvbuf2recvframe(padapter, pskb);\r
 \r
 \r
-#ifdef CONFIG_PREALLOC_RECV_SKB\r
+               recvbuf2recvframe(padapter, pskb);\r
 \r
                skb_reset_tail_pointer(pskb);\r
 \r
                skb_reset_tail_pointer(pskb);\r
-\r
                pskb->len = 0;\r
                pskb->len = 0;\r
-               \r
+\r
                skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);\r
                skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);\r
-               \r
-#else\r
-               rtw_skb_free(pskb);\r
-#endif\r
+\r
                if (NULL != (precvbuf = rtw_dequeue_recvbuf(&precvpriv->recv_buf_pending_queue))) {\r
                        precvbuf->pskb = NULL;\r
                if (NULL != (precvbuf = rtw_dequeue_recvbuf(&precvpriv->recv_buf_pending_queue))) {\r
                        precvbuf->pskb = NULL;\r
-                       precvbuf->reuse = _FALSE;\r
                        rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);\r
                }\r
        }\r
 }\r
 \r
                        rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);\r
                }\r
        }\r
 }\r
 \r
-\r
 void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)\r
 {\r
 void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)\r
 {\r
-       _irqL irqL;\r
-       uint isevt, *pbuf;\r
        struct recv_buf *precvbuf = (struct recv_buf *)purb->context;   \r
        _adapter                        *padapter =(_adapter *)precvbuf->adapter;\r
        struct recv_priv        *precvpriv = &padapter->recvpriv;       \r
        struct recv_buf *precvbuf = (struct recv_buf *)purb->context;   \r
        _adapter                        *padapter =(_adapter *)precvbuf->adapter;\r
        struct recv_priv        *precvpriv = &padapter->recvpriv;       \r
@@ -966,18 +947,9 @@ void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
        \r
        if(RTW_CANNOT_RX(padapter))\r
        {\r
        \r
        if(RTW_CANNOT_RX(padapter))\r
        {\r
-               RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n", padapter->bDriverStopped, padapter->bSurpriseRemoved));                \r
-               \r
-       #ifdef CONFIG_PREALLOC_RECV_SKB\r
-               precvbuf->reuse = _TRUE;\r
-       #else\r
-               if(precvbuf->pskb){\r
-                       DBG_8192C("==> free skb(%p)\n",precvbuf->pskb);\r
-                       rtw_skb_free(precvbuf->pskb);\r
-               }       \r
-       #endif\r
+               RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n", padapter->bDriverStopped, padapter->bSurpriseRemoved));\r
                DBG_8192C("%s() RX Warning! bDriverStopped(%d) OR bSurpriseRemoved(%d) \n", \r
                DBG_8192C("%s() RX Warning! bDriverStopped(%d) OR bSurpriseRemoved(%d) \n", \r
-               __FUNCTION__,padapter->bDriverStopped, padapter->bSurpriseRemoved);\r
+                       __FUNCTION__,padapter->bDriverStopped, padapter->bSurpriseRemoved);\r
                goto exit;\r
        }\r
 \r
                goto exit;\r
        }\r
 \r
@@ -986,7 +958,6 @@ void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
                if ((purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE))\r
                {\r
                        RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port_complete: (purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE)\n"));\r
                if ((purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE))\r
                {\r
                        RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port_complete: (purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE)\n"));\r
-                       precvbuf->reuse = _TRUE;\r
                        rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);\r
                        DBG_8192C("%s()-%d: RX Warning!\n", __FUNCTION__, __LINE__);    \r
                }\r
                        rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);\r
                        DBG_8192C("%s()-%d: RX Warning!\n", __FUNCTION__, __LINE__);    \r
                }\r
@@ -997,13 +968,13 @@ void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
                        precvbuf->transfer_len = purb->actual_length;                   \r
                        skb_put(precvbuf->pskb, purb->actual_length);   \r
                        skb_queue_tail(&precvpriv->rx_skb_queue, precvbuf->pskb);\r
                        precvbuf->transfer_len = purb->actual_length;                   \r
                        skb_put(precvbuf->pskb, purb->actual_length);   \r
                        skb_queue_tail(&precvpriv->rx_skb_queue, precvbuf->pskb);\r
-#ifndef CONFIG_FIX_NR_BULKIN_BUFFER\r
+\r
+                       #ifndef CONFIG_FIX_NR_BULKIN_BUFFER\r
                        if (skb_queue_len(&precvpriv->rx_skb_queue)<=1)\r
                        if (skb_queue_len(&precvpriv->rx_skb_queue)<=1)\r
-#endif\r
+                       #endif\r
                                tasklet_schedule(&precvpriv->recv_tasklet);\r
 \r
                        precvbuf->pskb = NULL;\r
                                tasklet_schedule(&precvpriv->recv_tasklet);\r
 \r
                        precvbuf->pskb = NULL;\r
-                       precvbuf->reuse = _FALSE;\r
                        rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);                    \r
                }               \r
        }\r
                        rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);                    \r
                }               \r
        }\r
@@ -1039,7 +1010,6 @@ void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
                                        pHalData->srestpriv.Wifi_Error_Status = USB_READ_PORT_FAIL;                     \r
                                }\r
                                #endif\r
                                        pHalData->srestpriv.Wifi_Error_Status = USB_READ_PORT_FAIL;                     \r
                                }\r
                                #endif\r
-                               precvbuf->reuse = _TRUE;\r
                                rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);                    \r
                                break;\r
                        case -EINPROGRESS:\r
                                rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);                    \r
                                break;\r
                        case -EINPROGRESS:\r
@@ -1059,12 +1029,9 @@ _func_exit_;
 \r
 u32 usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)\r
 {\r
 \r
 u32 usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)\r
 {\r
-       _irqL irqL;\r
        int err;\r
        unsigned int pipe;\r
        int err;\r
        unsigned int pipe;\r
-       SIZE_PTR tmpaddr=0;\r
-       SIZE_PTR alignment=0;\r
-       u32 ret = _SUCCESS;\r
+       u32 ret = _FAIL;\r
        PURB purb = NULL;\r
        struct recv_buf *precvbuf = (struct recv_buf *)rmem;\r
        _adapter                *adapter = pintfhdl->padapter;\r
        PURB purb = NULL;\r
        struct recv_buf *precvbuf = (struct recv_buf *)rmem;\r
        _adapter                *adapter = pintfhdl->padapter;\r
@@ -1072,85 +1039,70 @@ u32 usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
        struct pwrctrl_priv *pwrctl = dvobj_to_pwrctl(pdvobj);\r
        struct recv_priv        *precvpriv = &adapter->recvpriv;\r
        struct usb_device       *pusbd = pdvobj->pusbdev;\r
        struct pwrctrl_priv *pwrctl = dvobj_to_pwrctl(pdvobj);\r
        struct recv_priv        *precvpriv = &adapter->recvpriv;\r
        struct usb_device       *pusbd = pdvobj->pusbdev;\r
-       \r
 \r
 _func_enter_;\r
 \r
 _func_enter_;\r
-       \r
-       if (RTW_CANNOT_RX(adapter) || (precvbuf == NULL))\r
-       {\r
+\r
+       if (RTW_CANNOT_RX(adapter) || (precvbuf == NULL)) {\r
                RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port:( RTW_CANNOT_RX ) || precvbuf == NULL!!!\n"));\r
                RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port:( RTW_CANNOT_RX ) || precvbuf == NULL!!!\n"));\r
-               return _FAIL;\r
+               goto exit;\r
        }\r
 \r
        }\r
 \r
-#ifdef CONFIG_PREALLOC_RECV_SKB\r
-       if((precvbuf->reuse == _FALSE) || (precvbuf->pskb == NULL))\r
-       {\r
-               if (NULL != (precvbuf->pskb = skb_dequeue(&precvpriv->free_recv_skb_queue)))\r
-               {\r
-                       precvbuf->reuse = _TRUE;\r
-               }\r
-       }\r
-#endif\r
+       usb_init_recvbuf(adapter, precvbuf);\r
 \r
 \r
-       usb_init_recvbuf(adapter, precvbuf);            \r
+       if (precvbuf->pskb == NULL) {\r
+               SIZE_PTR tmpaddr = 0;\r
+               SIZE_PTR alignment = 0;\r
 \r
 \r
-       //re-assign for linux based on skb\r
-       if((precvbuf->reuse == _FALSE) || (precvbuf->pskb == NULL))\r
-       {\r
-#ifndef CONFIG_FIX_NR_BULKIN_BUFFER\r
+               if (NULL != (precvbuf->pskb = skb_dequeue(&precvpriv->free_recv_skb_queue)))\r
+                       goto recv_buf_hook;\r
+\r
+               #ifndef CONFIG_FIX_NR_BULKIN_BUFFER\r
                precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);\r
                precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);\r
-#endif\r
-               if(precvbuf->pskb == NULL)              \r
-               {\r
+               #endif\r
+\r
+               if (precvbuf->pskb == NULL) {\r
                        if (0)\r
                        if (0)\r
-                       DBG_8192C("usb_read_port() enqueue precvbuf=%p \n", precvbuf);\r
-                       //enqueue precvbuf and wait for free skb\r
+                               DBG_871X("usb_read_port() enqueue precvbuf=%p \n", precvbuf);\r
+                       /* enqueue precvbuf and wait for free skb */\r
                        rtw_enqueue_recvbuf(precvbuf, &precvpriv->recv_buf_pending_queue);\r
                        rtw_enqueue_recvbuf(precvbuf, &precvpriv->recv_buf_pending_queue);\r
-                       return _FAIL;\r
+                       goto exit;\r
                }\r
 \r
                tmpaddr = (SIZE_PTR)precvbuf->pskb->data;\r
                }\r
 \r
                tmpaddr = (SIZE_PTR)precvbuf->pskb->data;\r
-               alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);\r
+               alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);\r
                skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment));\r
                skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment));\r
-\r
-               precvbuf->phead = precvbuf->pskb->head;\r
-               precvbuf->pdata = precvbuf->pskb->data;\r
-               precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);\r
-               precvbuf->pend = skb_end_pointer(precvbuf->pskb);\r
-               precvbuf->pbuf = precvbuf->pskb->data;\r
-       }       \r
-       else//reuse skb\r
-       {\r
-               precvbuf->phead = precvbuf->pskb->head;\r
-               precvbuf->pdata = precvbuf->pskb->data;\r
-               precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);\r
-               precvbuf->pend = skb_end_pointer(precvbuf->pskb);\r
-               precvbuf->pbuf = precvbuf->pskb->data;\r
-\r
-               precvbuf->reuse = _FALSE;\r
        }\r
 \r
        }\r
 \r
-       ATOMIC_INC(&(precvpriv->rx_pending_cnt));\r
-       \r
+recv_buf_hook:\r
+       precvbuf->phead = precvbuf->pskb->head;\r
+       precvbuf->pdata = precvbuf->pskb->data;\r
+       precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);\r
+       precvbuf->pend = skb_end_pointer(precvbuf->pskb);\r
+       precvbuf->pbuf = precvbuf->pskb->data;\r
+\r
        purb = precvbuf->purb;\r
 \r
        purb = precvbuf->purb;\r
 \r
-       //translate DMA FIFO addr to pipehandle\r
+       /* translate DMA FIFO addr to pipehandle */\r
        pipe = ffaddr2pipehdl(pdvobj, addr);\r
 \r
        pipe = ffaddr2pipehdl(pdvobj, addr);\r
 \r
-       usb_fill_bulk_urb(purb, pusbd, pipe, \r
-                                       precvbuf->pbuf,\r
-                                       MAX_RECVBUF_SZ,\r
-                                       usb_read_port_complete,\r
-                                       precvbuf);//context is precvbuf\r
+       usb_fill_bulk_urb(purb, pusbd, pipe,\r
+               precvbuf->pbuf,\r
+               MAX_RECVBUF_SZ,\r
+               usb_read_port_complete,\r
+               precvbuf);\r
 \r
        err = usb_submit_urb(purb, GFP_ATOMIC);\r
 \r
        err = usb_submit_urb(purb, GFP_ATOMIC);\r
-       if((err) && (err != (-EPERM)))\r
-       {\r
-               RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("cannot submit rx in-token(err=0x%.8x), URB_STATUS =0x%.8x", err, purb->status));\r
-               DBG_8192C("cannot submit rx in-token(err = 0x%08x),urb_status = %d\n",err,purb->status);\r
-               ret = _FAIL;\r
+       if (err && err != (-EPERM)) {\r
+               DBG_871X("cannot submit rx in-token(err = 0x%08x),urb_status = %d\n"\r
+                       , err, purb->status);\r
+               goto exit;\r
        }\r
 \r
        }\r
 \r
+       ATOMIC_INC(&(precvpriv->rx_pending_cnt));\r
+       ret = _SUCCESS;\r
+\r
+exit:\r
+\r
 _func_exit_;\r
 \r
        return ret;\r
 _func_exit_;\r
 \r
        return ret;\r
index 7cd319cd6e010e382862ef58c37b3084012e6020..ac40287e1e2f3150dc463102218837259ee0a3ad 100755 (executable)
@@ -7,7 +7,6 @@
 /*
  * Broadcom BCM4319 driver version.
  */
 /*
  * Broadcom BCM4319 driver version.
  */
-#define RTL8723BU_DRV_VERSION "4.39.WFD"
+#define RTL8723BU_DRV_VERSION "4.3.16.WFD"
 
 #endif /* WIFI_VERSION_H */
 
 #endif /* WIFI_VERSION_H */
-
index dcef0e75acf5252efeeedf3dd8e59497829261a7..39c5349bf573f07f2c4a6f50c642bfbc3d804df3 100755 (executable)
@@ -804,7 +804,7 @@ void rtw_mfree2d(void *pbuf, int h, int w, int size)
        rtw_mfree((u8 *)pbuf, h*sizeof(void*) + w*h*size);
 }
 
        rtw_mfree((u8 *)pbuf, h*sizeof(void*) + w*h*size);
 }
 
-void _rtw_memcpy(void* dst, void* src, u32 sz)
+void _rtw_memcpy(void *dst, const void *src, u32 sz)
 {
 
 #if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
 {
 
 #if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
@@ -1551,7 +1551,7 @@ void rtw_udelay_os(int us)
 }
 #endif
 
 }
 #endif
 
-void rtw_yield_os()
+void rtw_yield_os(void)
 {
 #ifdef PLATFORM_LINUX
        yield();
 {
 #ifdef PLATFORM_LINUX
        yield();
@@ -1598,7 +1598,7 @@ static android_suspend_lock_t rtw_resume_scan_lock ={
 };
 #endif
 
 };
 #endif
 
-inline void rtw_suspend_lock_init()
+inline void rtw_suspend_lock_init(void)
 {
        #ifdef CONFIG_WAKELOCK
        wake_lock_init(&rtw_suspend_lock, WAKE_LOCK_SUSPEND, RTW_SUSPEND_LOCK_NAME);
 {
        #ifdef CONFIG_WAKELOCK
        wake_lock_init(&rtw_suspend_lock, WAKE_LOCK_SUSPEND, RTW_SUSPEND_LOCK_NAME);
@@ -1617,7 +1617,7 @@ inline void rtw_suspend_lock_init()
        #endif
 }
 
        #endif
 }
 
-inline void rtw_suspend_lock_uninit()
+inline void rtw_suspend_lock_uninit(void)
 {
        #ifdef CONFIG_WAKELOCK
        wake_lock_destroy(&rtw_suspend_lock);
 {
        #ifdef CONFIG_WAKELOCK
        wake_lock_destroy(&rtw_suspend_lock);
@@ -2190,7 +2190,7 @@ int rtw_change_ifname(_adapter *padapter, const char *ifname)
 
        rtw_init_netdev_name(pnetdev, ifname);
 
 
        rtw_init_netdev_name(pnetdev, ifname);
 
-       _rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
+       _rtw_memcpy(pnetdev->dev_addr, adapter_mac_addr(padapter), ETH_ALEN);
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
        if(!rtnl_is_locked())
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
        if(!rtnl_is_locked())
index d384141eba0c8112870087e8deebb666e26f27ee..64f93a201141bbd2f859ccc89b4ba339addca2b8 100755 (executable)
 static int sdc_id = -1;\r
 static signed int gpio_eint_wlan = -1;\r
 static u32 eint_wlan_handle = 0;\r
 static int sdc_id = -1;\r
 static signed int gpio_eint_wlan = -1;\r
 static u32 eint_wlan_handle = 0;\r
+\r
 #if defined(CONFIG_PLATFORM_ARM_SUN6I) || defined(CONFIG_PLATFORM_ARM_SUN7I)\r
 extern void sw_mci_rescan_card(unsigned id, unsigned insert);\r
 #elif defined(CONFIG_PLATFORM_ARM_SUN8I)\r
 extern void sunxi_mci_rescan_card(unsigned id, unsigned insert);\r
 #endif\r
 #if defined(CONFIG_PLATFORM_ARM_SUN6I) || defined(CONFIG_PLATFORM_ARM_SUN7I)\r
 extern void sw_mci_rescan_card(unsigned id, unsigned insert);\r
 #elif defined(CONFIG_PLATFORM_ARM_SUN8I)\r
 extern void sunxi_mci_rescan_card(unsigned id, unsigned insert);\r
 #endif\r
+\r
+#ifdef CONFIG_PLATFORM_ARM_SUN8I_W5P1\r
+extern int get_rf_mod_type(void);\r
+#else\r
 extern int wifi_pm_get_mod_type(void);\r
 extern int wifi_pm_get_mod_type(void);\r
+#endif\r
+\r
 extern void wifi_pm_power(int on);\r
 #ifdef CONFIG_GPIO_WAKEUP\r
 extern unsigned int oob_irq;\r
 extern void wifi_pm_power(int on);\r
 #ifdef CONFIG_GPIO_WAKEUP\r
 extern unsigned int oob_irq;\r
@@ -60,7 +67,11 @@ int platform_wifi_power_on(void)
        script_item_u val;\r
        script_item_value_type_e type;\r
 \r
        script_item_u val;\r
        script_item_value_type_e type;\r
 \r
+#ifdef CONFIG_PLATFORM_ARM_SUN8I_W5P1\r
+       unsigned int mod_sel = get_rf_mod_type();\r
+#else\r
        unsigned int mod_sel = wifi_pm_get_mod_type();\r
        unsigned int mod_sel = wifi_pm_get_mod_type();\r
+#endif\r
 \r
        type = script_get_item("wifi_para", "wifi_sdc_id", &val);\r
        if (SCIRPT_ITEM_VALUE_TYPE_INT!=type) {\r
 \r
        type = script_get_item("wifi_para", "wifi_sdc_id", &val);\r
        if (SCIRPT_ITEM_VALUE_TYPE_INT!=type) {\r
@@ -82,12 +93,16 @@ int platform_wifi_power_on(void)
        }\r
 \r
 #ifdef CONFIG_GPIO_WAKEUP\r
        }\r
 \r
 #ifdef CONFIG_GPIO_WAKEUP\r
+#ifdef CONFIG_PLATFORM_ARM_SUN8I_W5P1\r
+       type = script_get_item("wifi_para", "wl_host_wake", &val);\r
+#else\r
 #ifdef CONFIG_RTL8723B\r
        type = script_get_item("wifi_para", "rtl8723bs_wl_host_wake", &val);\r
 #endif\r
 #ifdef CONFIG_RTL8188E\r
        type = script_get_item("wifi_para", "rtl8189es_host_wake", &val);\r
 #endif\r
 #ifdef CONFIG_RTL8723B\r
        type = script_get_item("wifi_para", "rtl8723bs_wl_host_wake", &val);\r
 #endif\r
 #ifdef CONFIG_RTL8188E\r
        type = script_get_item("wifi_para", "rtl8189es_host_wake", &val);\r
 #endif\r
+#endif /* CONFIG_PLATFORM_ARM_SUN8I_W5P1 */\r
        if (SCIRPT_ITEM_VALUE_TYPE_PIO != type) {\r
                DBG_871X("No definition of wake up host PIN\n");\r
                ret = -1;\r
        if (SCIRPT_ITEM_VALUE_TYPE_PIO != type) {\r
                DBG_871X("No definition of wake up host PIN\n");\r
                ret = -1;\r
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bu/platform/platform_arm_act_sdio.c b/drivers/net/wireless/rockchip_wlan/rtl8723bu/platform/platform_arm_act_sdio.c
new file mode 100755 (executable)
index 0000000..539bb17
--- /dev/null
@@ -0,0 +1,58 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+/*
+ * Description:
+ *     This file can be applied to following platforms:
+ *    CONFIG_PLATFORM_ACTIONS_ATM703X
+ */
+#include <drv_types.h>
+
+#ifdef CONFIG_PLATFORM_ACTIONS_ATM705X
+extern int acts_wifi_init(void);
+extern void acts_wifi_cleanup(void);
+#endif
+
+/*
+ * Return:
+ *     0:      power on successfully
+ *     others: power on failed
+ */
+int platform_wifi_power_on(void)
+{
+       int ret = 0;
+
+#ifdef CONFIG_PLATFORM_ACTIONS_ATM705X
+       ret = acts_wifi_init();
+       if (unlikely(ret < 0)) {
+               pr_err("%s Failed to register the power control driver.\n", __FUNCTION__);
+               goto exit;
+       }
+#endif
+
+exit:
+       return ret;
+}
+
+void platform_wifi_power_off(void)
+{
+#ifdef CONFIG_PLATFORM_ACTIONS_ATM705X
+       acts_wifi_cleanup();
+#endif
+}