staging: rtl8723bs: remove unused code blocks conditioned by never set CONFIG_WOWLAN

remove conditional code blocks checked by unused CONFIG_WOWLAN

cleaning required in TODO file:

find and remove code blocks guarded by never set CONFIG_FOO defines

Signed-off-by: Fabio Aiuto <fabioaiuto83@gmail.com>
Link: https://lore.kernel.org/r/1d4e09852ff08e7121e9dd6d2d55d819d53ed702.1615744948.git.fabioaiuto83@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Fabio Aiuto
2021-03-14 19:12:40 +01:00
committed by Greg Kroah-Hartman
parent 0bb8ece4cb
commit ada3334fc1
23 changed files with 29 additions and 1250 deletions

View File

@@ -2098,9 +2098,6 @@ int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv)
if (!candidate) {
DBG_871X("%s: return _FAIL(candidate == NULL)\n", __func__);
#ifdef CONFIG_WOWLAN
_clr_fwstate_(pmlmepriv, _FW_LINKED|_FW_UNDER_LINKING);
#endif
ret = _FAIL;
goto exit;
} else {

View File

@@ -350,7 +350,7 @@ static u8 PS_RDY_CHECK(struct adapter *padapter)
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
if (pwrpriv->bInSuspend && pwrpriv->wowlan_mode)
return true;
else if (pwrpriv->bInSuspend && pwrpriv->wowlan_ap_mode)
@@ -391,7 +391,7 @@ static u8 PS_RDY_CHECK(struct adapter *padapter)
void rtw_set_ps_mode(struct adapter *padapter, u8 ps_mode, u8 smart_ps, u8 bcn_ant_mode, const char *msg)
{
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
struct debug_priv *pdbgpriv = &padapter->dvobj->drv_dbg;
#endif
@@ -422,7 +422,7 @@ void rtw_set_ps_mode(struct adapter *padapter, u8 ps_mode, u8 smart_ps, u8 bcn_a
pwrpriv->pwr_mode = ps_mode;
rtw_set_rpwm(padapter, PS_STATE_S4);
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
if (pwrpriv->wowlan_mode || pwrpriv->wowlan_ap_mode) {
unsigned long start_time;
u32 delay_ms;

View File

@@ -10,7 +10,7 @@
#include <rtw_debug.h>
#include <hal_com_h2c.h>
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
#include <linux/inetdevice.h>
#endif
@@ -2113,7 +2113,7 @@ int rtw_config_gpio(struct net_device *netdev, int gpio_num, bool isOutput)
EXPORT_SYMBOL(rtw_config_gpio);
#endif
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
void rtw_get_current_ip_address(struct adapter *padapter, u8 *pcurrentip)
{
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
@@ -2139,53 +2139,4 @@ void rtw_get_current_ip_address(struct adapter *padapter, u8 *pcurrentip)
}
}
#endif
#ifdef CONFIG_WOWLAN
void rtw_get_sec_iv(struct adapter *padapter, u8 *pcur_dot11txpn, u8 *StaAddr)
{
struct sta_info *psta;
struct security_priv *psecpriv = &padapter->securitypriv;
memset(pcur_dot11txpn, 0, 8);
if (!StaAddr)
return;
psta = rtw_get_stainfo(&padapter->stapriv, StaAddr);
DBG_871X("%s(): StaAddr: %02x %02x %02x %02x %02x %02x\n",
__func__, StaAddr[0], StaAddr[1], StaAddr[2],
StaAddr[3], StaAddr[4], StaAddr[5]);
if (psta) {
if (psecpriv->dot11PrivacyAlgrthm != _NO_PRIVACY_ && psta->dot11txpn.val > 0)
psta->dot11txpn.val--;
AES_IV(pcur_dot11txpn, psta->dot11txpn, 0);
DBG_871X("%s(): CurrentIV: %02x %02x %02x %02x %02x %02x %02x %02x\n"
, __func__, pcur_dot11txpn[0], pcur_dot11txpn[1],
pcur_dot11txpn[2], pcur_dot11txpn[3], pcur_dot11txpn[4],
pcur_dot11txpn[5], pcur_dot11txpn[6], pcur_dot11txpn[7]);
}
}
void rtw_set_sec_pn(struct adapter *padapter)
{
struct sta_info *psta;
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct security_priv *psecpriv = &padapter->securitypriv;
psta = rtw_get_stainfo(&padapter->stapriv,
get_my_bssid(&pmlmeinfo->network));
if (psta) {
if (pwrpriv->wowlan_fw_iv > psta->dot11txpn.val) {
if (psecpriv->dot11PrivacyAlgrthm != _NO_PRIVACY_)
psta->dot11txpn.val = pwrpriv->wowlan_fw_iv + 2;
} else {
DBG_871X("%s(): FW IV is smaller than driver\n", __func__);
psta->dot11txpn.val += 2;
}
DBG_871X("%s: dot11txpn: 0x%016llx\n", __func__, psta->dot11txpn.val);
}
}
#endif /* CONFIG_WOWLAN */

View File

@@ -31,10 +31,6 @@ static u8 _is_fw_read_cmd_down(struct adapter *padapter, u8 msgbox_num)
if (0 == valid) {
read_down = true;
}
#ifdef CONFIG_WOWLAN
else
msleep(1);
#endif
} while ((!read_down) && (retry_cnts--));
return read_down;
@@ -316,239 +312,6 @@ static void ConstructNullFunctionData(
*pLength = pktlen;
}
#ifdef CONFIG_WOWLAN
/* */
/* Description: */
/* Construct the ARP response packet to support ARP offload. */
/* */
static void ConstructARPResponse(
struct adapter *padapter,
u8 *pframe,
u32 *pLength,
u8 *pIPAddress
)
{
struct ieee80211_hdr *pwlanhdr;
__le16 *fctrl;
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
struct security_priv *psecuritypriv = &padapter->securitypriv;
static u8 ARPLLCHeader[8] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06};
u8 *pARPRspPkt = pframe;
/* for TKIP Cal MIC */
u8 *payload = pframe;
u8 EncryptionHeadOverhead = 0;
/* DBG_871X("%s:%d\n", __func__, bForcePowerSave); */
pwlanhdr = (struct ieee80211_hdr *)pframe;
fctrl = &pwlanhdr->frame_control;
*(fctrl) = 0;
/* */
/* MAC Header. */
/* */
SetFrameType(fctrl, WIFI_DATA);
/* SetFrameSubType(fctrl, 0); */
SetToDs(fctrl);
memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
SetSeqNum(pwlanhdr, 0);
SetDuration(pwlanhdr, 0);
/* SET_80211_HDR_FRAME_CONTROL(pARPRspPkt, 0); */
/* SET_80211_HDR_TYPE_AND_SUBTYPE(pARPRspPkt, Type_Data); */
/* SET_80211_HDR_TO_DS(pARPRspPkt, 1); */
/* SET_80211_HDR_ADDRESS1(pARPRspPkt, pMgntInfo->Bssid); */
/* SET_80211_HDR_ADDRESS2(pARPRspPkt, Adapter->CurrentAddress); */
/* SET_80211_HDR_ADDRESS3(pARPRspPkt, pMgntInfo->Bssid); */
/* SET_80211_HDR_DURATION(pARPRspPkt, 0); */
/* SET_80211_HDR_FRAGMENT_SEQUENCE(pARPRspPkt, 0); */
*pLength = 24;
/* */
/* Security Header: leave space for it if necessary. */
/* */
switch (psecuritypriv->dot11PrivacyAlgrthm) {
case _WEP40_:
case _WEP104_:
EncryptionHeadOverhead = 4;
break;
case _TKIP_:
EncryptionHeadOverhead = 8;
break;
case _AES_:
EncryptionHeadOverhead = 8;
break;
default:
EncryptionHeadOverhead = 0;
}
if (EncryptionHeadOverhead > 0) {
memset(&(pframe[*pLength]), 0, EncryptionHeadOverhead);
*pLength += EncryptionHeadOverhead;
SetPrivacy(fctrl);
}
/* */
/* Frame Body. */
/* */
pARPRspPkt = (u8 *)(pframe + *pLength);
payload = pARPRspPkt; /* Get Payload pointer */
/* LLC header */
memcpy(pARPRspPkt, ARPLLCHeader, 8);
*pLength += 8;
/* ARP element */
pARPRspPkt += 8;
SET_ARP_PKT_HW(pARPRspPkt, 0x0100);
SET_ARP_PKT_PROTOCOL(pARPRspPkt, 0x0008); /* IP protocol */
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_IP_ADDR(pARPRspPkt, pIPAddress);
{
SET_ARP_PKT_TARGET_MAC_ADDR(pARPRspPkt, get_my_bssid(&(pmlmeinfo->network)));
SET_ARP_PKT_TARGET_IP_ADDR(pARPRspPkt, pIPAddress);
DBG_871X("%s Target Mac Addr:%pM\n", __func__, MAC_ARG(get_my_bssid(&(pmlmeinfo->network))));
DBG_871X("%s Target IP Addr:%pI4\n", __func__, IP_ARG(pIPAddress));
}
*pLength += 28;
if (psecuritypriv->dot11PrivacyAlgrthm == _TKIP_) {
u8 mic[8];
struct mic_data micdata;
struct sta_info *psta = NULL;
u8 priority[4] = {
0x0, 0x0, 0x0, 0x0
};
u8 null_key[16] = {
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
};
DBG_871X("%s(): Add MIC\n", __func__);
psta = rtw_get_stainfo(&padapter->stapriv, get_my_bssid(&(pmlmeinfo->network)));
if (psta) {
if (!memcmp(&psta->dot11tkiptxmickey.skey[0], null_key, 16)) {
DBG_871X("%s(): STA dot11tkiptxmickey == 0\n", __func__);
}
/* start to calculate the mic code */
rtw_secmicsetkey(&micdata, &psta->dot11tkiptxmickey.skey[0]);
}
rtw_secmicappend(&micdata, pwlanhdr->addr3, 6); /* DA */
rtw_secmicappend(&micdata, pwlanhdr->addr2, 6); /* SA */
priority[0] = 0;
rtw_secmicappend(&micdata, &priority[0], 4);
rtw_secmicappend(&micdata, payload, 36); /* payload length = 8 + 28 */
rtw_secgetmic(&micdata, &(mic[0]));
pARPRspPkt += 28;
memcpy(pARPRspPkt, &(mic[0]), 8);
*pLength += 8;
}
}
#ifdef CONFIG_GTK_OL
static void ConstructGTKResponse(
struct adapter *padapter, u8 *pframe, u32 *pLength
)
{
struct ieee80211_hdr *pwlanhdr;
u16 *fctrl;
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
struct security_priv *psecuritypriv = &padapter->securitypriv;
static u8 LLCHeader[8] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x88, 0x8E};
static u8 GTKbody_a[11] = {0x01, 0x03, 0x00, 0x5F, 0x02, 0x03, 0x12, 0x00, 0x10, 0x42, 0x0B};
u8 *pGTKRspPkt = pframe;
u8 EncryptionHeadOverhead = 0;
/* DBG_871X("%s:%d\n", __func__, bForcePowerSave); */
pwlanhdr = (struct ieee80211_hdr *)pframe;
fctrl = &pwlanhdr->frame_control;
*(fctrl) = 0;
/* */
/* MAC Header. */
/* */
SetFrameType(fctrl, WIFI_DATA);
/* SetFrameSubType(fctrl, 0); */
SetToDs(fctrl);
memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
SetSeqNum(pwlanhdr, 0);
SetDuration(pwlanhdr, 0);
*pLength = 24;
/* */
/* Security Header: leave space for it if necessary. */
/* */
switch (psecuritypriv->dot11PrivacyAlgrthm) {
case _WEP40_:
case _WEP104_:
EncryptionHeadOverhead = 4;
break;
case _TKIP_:
EncryptionHeadOverhead = 8;
break;
case _AES_:
EncryptionHeadOverhead = 8;
break;
default:
EncryptionHeadOverhead = 0;
}
if (EncryptionHeadOverhead > 0) {
memset(&(pframe[*pLength]), 0, EncryptionHeadOverhead);
*pLength += EncryptionHeadOverhead;
/* GTK's privacy bit is done by FW */
/* SetPrivacy(fctrl); */
}
/* */
/* Frame Body. */
/* */
pGTKRspPkt = (u8 *)(pframe + *pLength);
/* LLC header */
memcpy(pGTKRspPkt, LLCHeader, 8);
*pLength += 8;
/* GTK element */
pGTKRspPkt += 8;
/* GTK frame body after LLC, part 1 */
memcpy(pGTKRspPkt, GTKbody_a, 11);
*pLength += 11;
pGTKRspPkt += 11;
/* GTK frame body after LLC, part 2 */
memset(&(pframe[*pLength]), 0, 88);
*pLength += 88;
pGTKRspPkt += 88;
}
#endif /* CONFIG_GTK_OL */
#endif /* CONFIG_WOWLAN */
#ifdef CONFIG_AP_WOWLAN
static void ConstructProbeRsp(struct adapter *padapter, u8 *pframe, u32 *pLength, u8 *StaAddr, bool bHideSSID)
{
@@ -692,31 +455,6 @@ static void rtl8723b_set_FwRsvdPage_cmd(struct adapter *padapter, struct RSVDPAG
static void rtl8723b_set_FwAoacRsvdPage_cmd(struct adapter *padapter, struct RSVDPAGE_LOC *rsvdpageloc)
{
#ifdef CONFIG_WOWLAN
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
u8 u1H2CAoacRsvdPageParm[H2C_AOAC_RSVDPAGE_LOC_LEN] = {0};
DBG_871X("8723BAOACRsvdPageLoc: RWC =%d ArpRsp =%d NbrAdv =%d GtkRsp =%d GtkInfo =%d ProbeReq =%d NetworkList =%d\n",
rsvdpageloc->LocRemoteCtrlInfo, rsvdpageloc->LocArpRsp,
rsvdpageloc->LocNbrAdv, rsvdpageloc->LocGTKRsp,
rsvdpageloc->LocGTKInfo, rsvdpageloc->LocProbeReq,
rsvdpageloc->LocNetList);
if (check_fwstate(pmlmepriv, _FW_LINKED)) {
SET_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(u1H2CAoacRsvdPageParm, rsvdpageloc->LocRemoteCtrlInfo);
SET_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(u1H2CAoacRsvdPageParm, rsvdpageloc->LocArpRsp);
/* SET_H2CCMD_AOAC_RSVDPAGE_LOC_NEIGHBOR_ADV(u1H2CAoacRsvdPageParm, rsvdpageloc->LocNbrAdv); */
SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_RSP(u1H2CAoacRsvdPageParm, rsvdpageloc->LocGTKRsp);
SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_INFO(u1H2CAoacRsvdPageParm, rsvdpageloc->LocGTKInfo);
#ifdef CONFIG_GTK_OL
SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(u1H2CAoacRsvdPageParm, rsvdpageloc->LocGTKEXTMEM);
#endif /* CONFIG_GTK_OL */
RT_PRINT_DATA(_module_hal_init_c_, _drv_always_, "u1H2CAoacRsvdPageParm:", u1H2CAoacRsvdPageParm, H2C_AOAC_RSVDPAGE_LOC_LEN);
FillH2CCmd8723B(padapter, H2C_8723B_AOAC_RSVD_PAGE, H2C_AOAC_RSVDPAGE_LOC_LEN, u1H2CAoacRsvdPageParm);
} else {
}
#endif /* CONFIG_WOWLAN */
}
#ifdef CONFIG_AP_WOWLAN
@@ -771,40 +509,6 @@ void rtl8723b_set_FwMediaStatusRpt_cmd(struct adapter *padapter, u8 mstatus, u8
FillH2CCmd8723B(padapter, H2C_8723B_MEDIA_STATUS_RPT, H2C_MEDIA_STATUS_RPT_LEN, u1H2CMediaStatusRptParm);
}
#ifdef CONFIG_WOWLAN
static void rtl8723b_set_FwKeepAlive_cmd(struct adapter *padapter, u8 benable, u8 pkt_type)
{
u8 u1H2CKeepAliveParm[H2C_KEEP_ALIVE_CTRL_LEN] = {0};
u8 adopt = 1, check_period = 5;
DBG_871X("%s(): benable = %d\n", __func__, benable);
SET_8723B_H2CCMD_KEEPALIVE_PARM_ENABLE(u1H2CKeepAliveParm, benable);
SET_8723B_H2CCMD_KEEPALIVE_PARM_ADOPT(u1H2CKeepAliveParm, adopt);
SET_8723B_H2CCMD_KEEPALIVE_PARM_PKT_TYPE(u1H2CKeepAliveParm, pkt_type);
SET_8723B_H2CCMD_KEEPALIVE_PARM_CHECK_PERIOD(u1H2CKeepAliveParm, check_period);
RT_PRINT_DATA(_module_hal_init_c_, _drv_always_, "u1H2CKeepAliveParm:", u1H2CKeepAliveParm, H2C_KEEP_ALIVE_CTRL_LEN);
FillH2CCmd8723B(padapter, H2C_8723B_KEEP_ALIVE, H2C_KEEP_ALIVE_CTRL_LEN, u1H2CKeepAliveParm);
}
static void rtl8723b_set_FwDisconDecision_cmd(struct adapter *padapter, u8 benable)
{
u8 u1H2CDisconDecisionParm[H2C_DISCON_DECISION_LEN] = {0};
u8 adopt = 1, check_period = 10, trypkt_num = 0;
DBG_871X("%s(): benable = %d\n", __func__, benable);
SET_8723B_H2CCMD_DISCONDECISION_PARM_ENABLE(u1H2CDisconDecisionParm, benable);
SET_8723B_H2CCMD_DISCONDECISION_PARM_ADOPT(u1H2CDisconDecisionParm, adopt);
SET_8723B_H2CCMD_DISCONDECISION_PARM_CHECK_PERIOD(u1H2CDisconDecisionParm, check_period);
SET_8723B_H2CCMD_DISCONDECISION_PARM_TRY_PKT_NUM(u1H2CDisconDecisionParm, trypkt_num);
RT_PRINT_DATA(_module_hal_init_c_, _drv_always_, "u1H2CDisconDecisionParm:", u1H2CDisconDecisionParm, H2C_DISCON_DECISION_LEN);
FillH2CCmd8723B(padapter, H2C_8723B_DISCON_DECISION, H2C_DISCON_DECISION_LEN, u1H2CDisconDecisionParm);
}
#endif /* CONFIG_WOWLAN */
void rtl8723b_set_FwMacIdConfig_cmd(struct adapter *padapter, u8 mac_id, u8 raid, u8 bw, u8 sgi, u32 mask)
{
u8 u1H2CMacIdConfigParm[H2C_MACID_CFG_LEN] = {0};
@@ -855,21 +559,12 @@ void rtl8723b_set_FwPwrMode_cmd(struct adapter *padapter, u8 psmode)
else
DBG_871X("%s(): FW LPS mode = %d, SmartPS =%d\n", __func__, psmode, pwrpriv->smart_ps);
#ifdef CONFIG_WOWLAN
if (psmode == PS_MODE_DTIM) { /* For WOWLAN LPS, DTIM = (awake_intvl - 1) */
if (pwrpriv->dtim > 0 && pwrpriv->dtim < 16)
awake_intvl = pwrpriv->dtim+1;/* DTIM = (awake_intvl - 1) */
else
awake_intvl = 3;/* DTIM =2 */
rlbm = 2;
} else
#endif /* CONFIG_WOWLAN */
{
if (pwrpriv->dtim > 0 && pwrpriv->dtim < 16)
awake_intvl = pwrpriv->dtim+1;/* DTIM = (awake_intvl - 1) */
else
awake_intvl = 3;/* DTIM =2 */
rlbm = 2;
}
rlbm = 2;
if (padapter->registrypriv.wifi_spec == 1) {
awake_intvl = 2;
@@ -1003,135 +698,6 @@ void rtl8723b_set_FwPwrModeInIPS_cmd(struct adapter *padapter, u8 cmd_param)
FillH2CCmd8723B(padapter, H2C_8723B_FWLPS_IN_IPS_, 1, &cmd_param);
}
#ifdef CONFIG_WOWLAN
static void rtl8723b_set_FwWoWlanCtrl_Cmd(struct adapter *padapter, u8 bFuncEn)
{
struct security_priv *psecpriv = &padapter->securitypriv;
u8 u1H2CWoWlanCtrlParm[H2C_WOWLAN_LEN] = {0};
u8 discont_wake = 1, gpionum = 0, gpio_dur = 0, hw_unicast = 0;
u8 sdio_wakeup_enable = 1;
u8 gpio_high_active = 0; /* 0: low active, 1: high active */
u8 magic_pkt = 0;
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);
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(struct adapter *padapter, u8 benable)
{
u8 u1H2CRemoteWakeCtrlParm[H2C_REMOTE_WAKE_CTRL_LEN] = {0};
struct security_priv *psecuritypriv = &(padapter->securitypriv);
struct pwrctrl_priv *ppwrpriv = adapter_to_pwrctl(padapter);
DBG_871X("%s(): Enable =%d\n", __func__, benable);
if (!ppwrpriv->wowlan_pno_enable) {
SET_H2CCMD_REMOTE_WAKECTRL_ENABLE(u1H2CRemoteWakeCtrlParm, benable);
SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(u1H2CRemoteWakeCtrlParm, 1);
#ifdef CONFIG_GTK_OL
if (psecuritypriv->binstallKCK_KEK &&
psecuritypriv->dot11PrivacyAlgrthm == _AES_) {
SET_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(u1H2CRemoteWakeCtrlParm, 1);
} else {
DBG_871X("no kck or security is not AES\n");
SET_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(u1H2CRemoteWakeCtrlParm, 0);
}
#endif /* CONFIG_GTK_OL */
SET_H2CCMD_REMOTE_WAKE_CTRL_FW_UNICAST_EN(u1H2CRemoteWakeCtrlParm, 1);
if ((psecuritypriv->dot11PrivacyAlgrthm == _AES_) ||
(psecuritypriv->dot11PrivacyAlgrthm == _NO_PRIVACY_))
SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(u1H2CRemoteWakeCtrlParm, 0);
else
SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(u1H2CRemoteWakeCtrlParm, 1);
}
RT_PRINT_DATA(_module_hal_init_c_, _drv_always_, "u1H2CRemoteWakeCtrlParm:", u1H2CRemoteWakeCtrlParm, H2C_REMOTE_WAKE_CTRL_LEN);
FillH2CCmd8723B(padapter, H2C_8723B_REMOTE_WAKE_CTRL,
H2C_REMOTE_WAKE_CTRL_LEN, u1H2CRemoteWakeCtrlParm);
}
static void rtl8723b_set_FwAOACGlobalInfo_Cmd(struct adapter *padapter, u8 group_alg, u8 pairwise_alg)
{
u8 u1H2CAOACGlobalInfoParm[H2C_AOAC_GLOBAL_INFO_LEN] = {0};
DBG_871X("%s(): group_alg =%d pairwise_alg =%d\n", __func__, group_alg, pairwise_alg);
SET_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(u1H2CAOACGlobalInfoParm, pairwise_alg);
SET_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(u1H2CAOACGlobalInfoParm, group_alg);
RT_PRINT_DATA(_module_hal_init_c_, _drv_always_, "u1H2CAOACGlobalInfoParm:", u1H2CAOACGlobalInfoParm, H2C_AOAC_GLOBAL_INFO_LEN);
FillH2CCmd8723B(padapter, H2C_8723B_AOAC_GLOBAL_INFO, H2C_AOAC_GLOBAL_INFO_LEN, u1H2CAOACGlobalInfoParm);
}
void rtl8723b_set_wowlan_cmd(struct adapter *padapter, u8 enable)
{
struct security_priv *psecpriv = &padapter->securitypriv;
struct pwrctrl_priv *ppwrpriv = adapter_to_pwrctl(padapter);
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct sta_info *psta = NULL;
u8 pkt_type = 0;
DBG_871X_LEVEL(_drv_always_, "+%s()+: enable =%d\n", __func__, enable);
if (enable) {
rtl8723b_set_FwAOACGlobalInfo_Cmd(padapter, psecpriv->dot118021XGrpPrivacy, psecpriv->dot11PrivacyAlgrthm);
rtl8723b_set_FwJoinBssRpt_cmd(padapter, RT_MEDIA_CONNECT); /* RT_MEDIA_CONNECT will confuse in the future */
if (!(ppwrpriv->wowlan_pno_enable)) {
psta = rtw_get_stainfo(&padapter->stapriv, get_bssid(pmlmepriv));
if (psta)
rtl8723b_set_FwMediaStatusRpt_cmd(padapter, RT_MEDIA_CONNECT, psta->mac_id);
} else
DBG_871X("%s(): Disconnected, no FwMediaStatusRpt CONNECT\n", __func__);
msleep(2);
if (!(ppwrpriv->wowlan_pno_enable)) {
rtl8723b_set_FwDisconDecision_cmd(padapter, enable);
msleep(2);
if ((psecpriv->dot11PrivacyAlgrthm != _WEP40_) || (psecpriv->dot11PrivacyAlgrthm != _WEP104_))
pkt_type = 1;
rtl8723b_set_FwKeepAlive_cmd(padapter, enable, pkt_type);
msleep(2);
}
rtl8723b_set_FwWoWlanCtrl_Cmd(padapter, enable);
msleep(2);
rtl8723b_set_FwRemoteWakeCtrl_Cmd(padapter, enable);
} else {
rtl8723b_set_FwRemoteWakeCtrl_Cmd(padapter, enable);
msleep(2);
rtl8723b_set_FwWoWlanCtrl_Cmd(padapter, enable);
}
DBG_871X_LEVEL(_drv_always_, "-%s()-\n", __func__);
}
#endif /* CONFIG_WOWLAN */
#ifdef CONFIG_AP_WOWLAN
static void rtl8723b_set_FwAPWoWlanCtrl_Cmd(struct adapter *padapter, u8 bFuncEn)
{
@@ -1222,18 +788,8 @@ static void rtl8723b_set_FwRsvdPagePkt(
u8 TotalPageNum = 0, CurtPktPageNum = 0, RsvdPageNum = 0;
u16 BufIndex, PageSize = 128;
u32 TotalPacketLen, MaxRsvdPageBufSize = 0;
struct RSVDPAGE_LOC RsvdPageLoc;
#ifdef CONFIG_WOWLAN
u32 ARPLegnth = 0, GTKLegnth = 0;
u8 currentip[4];
u8 cur_dot11txpn[8];
#ifdef CONFIG_GTK_OL
struct sta_priv *pstapriv = &padapter->stapriv;
struct sta_info *psta;
u8 kek[RTW_KEK_LEN];
u8 kck[RTW_KCK_LEN];
#endif
#endif
/* DBG_871X("%s---->\n", __func__); */
@@ -1343,107 +899,7 @@ static void rtl8723b_set_FwRsvdPagePkt(
BufIndex += (CurtPktPageNum*PageSize);
#ifdef CONFIG_WOWLAN
if (check_fwstate(pmlmepriv, _FW_LINKED)) {
/* if (pwrctl->wowlan_mode == true) { */
/* BufIndex += (CurtPktPageNum*PageSize); */
/* 3(7) ARP RSP */
rtw_get_current_ip_address(padapter, currentip);
RsvdPageLoc.LocArpRsp = TotalPageNum;
{
ConstructARPResponse(
padapter,
&ReservedPagePacket[BufIndex],
&ARPLegnth,
currentip
);
rtl8723b_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], ARPLegnth, false, false, true);
/* DBG_871X("%s(): HW_VAR_SET_TX_CMD: ARP RSP %p %d\n", */
/* __func__, &ReservedPagePacket[BufIndex-TxDescLen], (ARPLegnth+TxDescLen)); */
CurtPktPageNum = (u8)PageNum_128(TxDescLen + ARPLegnth);
}
TotalPageNum += CurtPktPageNum;
BufIndex += (CurtPktPageNum*PageSize);
/* 3(8) SEC IV */
rtw_get_sec_iv(padapter, cur_dot11txpn, get_my_bssid(&pmlmeinfo->network));
RsvdPageLoc.LocRemoteCtrlInfo = TotalPageNum;
memcpy(ReservedPagePacket+BufIndex-TxDescLen, cur_dot11txpn, _AES_IV_LEN_);
/* DBG_871X("%s(): HW_VAR_SET_TX_CMD: SEC IV %p %d\n", */
/* __func__, &ReservedPagePacket[BufIndex-TxDescLen], _AES_IV_LEN_); */
CurtPktPageNum = (u8)PageNum_128(_AES_IV_LEN_);
TotalPageNum += CurtPktPageNum;
#ifdef CONFIG_GTK_OL
BufIndex += (CurtPktPageNum*PageSize);
/* if the ap station info. exists, get the kek, kck from station info. */
psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));
if (!psta) {
memset(kek, 0, RTW_KEK_LEN);
memset(kck, 0, RTW_KCK_LEN);
DBG_8192C("%s, KEK, KCK download rsvd page all zero\n", __func__);
} else {
memcpy(kek, psta->kek, RTW_KEK_LEN);
memcpy(kck, psta->kck, RTW_KCK_LEN);
}
/* 3(9) KEK, KCK */
RsvdPageLoc.LocGTKInfo = TotalPageNum;
memcpy(ReservedPagePacket+BufIndex-TxDescLen, kck, RTW_KCK_LEN);
memcpy(ReservedPagePacket+BufIndex-TxDescLen+RTW_KCK_LEN, kek, RTW_KEK_LEN);
/* DBG_871X("%s(): HW_VAR_SET_TX_CMD: KEK KCK %p %d\n", */
/* __func__, &ReservedPagePacket[BufIndex-TxDescLen], (TxDescLen + RTW_KCK_LEN + RTW_KEK_LEN)); */
CurtPktPageNum = (u8)PageNum_128(TxDescLen + RTW_KCK_LEN + RTW_KEK_LEN);
TotalPageNum += CurtPktPageNum;
BufIndex += (CurtPktPageNum*PageSize);
/* 3(10) GTK Response */
RsvdPageLoc.LocGTKRsp = TotalPageNum;
ConstructGTKResponse(
padapter,
&ReservedPagePacket[BufIndex],
&GTKLegnth
);
rtl8723b_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], GTKLegnth, false, false, true);
/* DBG_871X("%s(): HW_VAR_SET_TX_CMD: GTK RSP %p %d\n", */
/* __func__, &ReservedPagePacket[BufIndex-TxDescLen], (TxDescLen + GTKLegnth)); */
CurtPktPageNum = (u8)PageNum_128(TxDescLen + GTKLegnth);
TotalPageNum += CurtPktPageNum;
BufIndex += (CurtPktPageNum*PageSize);
/* below page is empty for GTK extension memory */
/* 3(11) GTK EXT MEM */
RsvdPageLoc.LocGTKEXTMEM = TotalPageNum;
CurtPktPageNum = 2;
TotalPageNum += CurtPktPageNum;
TotalPacketLen = BufIndex-TxDescLen + 256; /* extension memory for FW */
#else
TotalPacketLen = BufIndex - TxDescLen + sizeof(union pn48); /* IV len */
#endif /* CONFIG_GTK_OL */
} else
#endif /* CONFIG_WOWLAN */
{
TotalPacketLen = BufIndex + BTQosNullLength;
}
TotalPacketLen = BufIndex + BTQosNullLength;
if (TotalPacketLen > MaxRsvdPageBufSize) {
DBG_871X("%s(): ERROR: The rsvd page size is not enough!!TotalPacketLen %d, MaxRsvdPageBufSize %d\n", __func__,

View File

@@ -369,9 +369,6 @@ s32 rtl8723b_FirmwareDownload(struct adapter *padapter, bool bUsedWoWLANFw)
u8 tmp_ps;
RT_TRACE(_module_hal_init_c_, _drv_info_, ("+%s\n", __func__));
#ifdef CONFIG_WOWLAN
RT_TRACE(_module_hal_init_c_, _drv_notice_, ("+%s, bUsedWoWLANFw:%d\n", __func__, bUsedWoWLANFw));
#endif
pFirmware = kzalloc(sizeof(struct rt_firmware), GFP_KERNEL);
if (!pFirmware)
return _FAIL;
@@ -393,12 +390,7 @@ s32 rtl8723b_FirmwareDownload(struct adapter *padapter, bool bUsedWoWLANFw)
pdbgpriv->dbg_downloadfw_pwr_state_cnt++;
}
#ifdef CONFIG_WOWLAN
if (bUsedWoWLANFw)
fwfilepath = "rtlwifi/rtl8723bs_wowlan.bin";
else
#endif /* CONFIG_WOWLAN */
fwfilepath = "rtlwifi/rtl8723bs_nic.bin";
fwfilepath = "rtlwifi/rtl8723bs_nic.bin";
pr_info("rtl8723bs: acquire FW from file:%s\n", fwfilepath);
@@ -535,7 +527,7 @@ void rtl8723b_InitializeFirmwareVars(struct adapter *padapter)
/* pHalData->H2CStopInsertQueue = false; */
}
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
/* */
/* */
@@ -566,7 +558,7 @@ void SetFwRelatedForWoWLAN8723b(
/* */
rtl8723b_InitializeFirmwareVars(padapter);
}
#endif /* CONFIG_WOWLAN */
#endif /* CONFIG_AP_WOWLAN */
static void rtl8723b_free_hal_data(struct adapter *padapter)
{
@@ -3752,14 +3744,6 @@ void C2HPacketHandler_8723B(struct adapter *padapter, u8 *pbuffer, u16 length)
{
struct C2H_EVT_HDR C2hEvent;
u8 *tmpBuf = NULL;
#ifdef CONFIG_WOWLAN
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
if (pwrpriv->wowlan_mode) {
DBG_871X("%s(): return because wowolan_mode ==true! CMDID =%d\n", __func__, pbuffer[0]);
return;
}
#endif
C2hEvent.CmdID = pbuffer[0];
C2hEvent.CmdSeq = pbuffer[1];
C2hEvent.CmdLen = length-2;
@@ -4314,19 +4298,6 @@ void GetHwReg8723B(struct adapter *padapter, u8 variable, u8 *val)
val16 = rtw_read16(padapter, REG_TXPKT_EMPTY);
*val = (val16 & BIT(10)) ? true:false;
break;
#ifdef CONFIG_WOWLAN
case HW_VAR_RPWM_TOG:
*val = rtw_read8(padapter, SDIO_LOCAL_BASE|SDIO_REG_HRPWM1) & BIT7;
break;
case HW_VAR_WAKEUP_REASON:
*val = rtw_read8(padapter, REG_WOWLAN_WAKE_REASON);
if (*val == 0xEA)
*val = 0;
break;
case HW_VAR_SYS_CLKR:
*val = rtw_read8(padapter, REG_SYS_CLKR);
break;
#endif
default:
GetHwReg(padapter, variable, val);
break;
@@ -4461,14 +4432,6 @@ u8 GetHalDefVar8723B(struct adapter *padapter, enum HAL_DEF_VARIABLE variable, v
return bResult;
}
#ifdef CONFIG_WOWLAN
void Hal_DetectWoWMode(struct adapter *padapter)
{
adapter_to_pwrctl(padapter)->bSupportRemoteWakeup = true;
DBG_871X("%s\n", __func__);
}
#endif /* CONFIG_WOWLAN */
void rtl8723b_start_thread(struct adapter *padapter)
{
#ifndef CONFIG_SDIO_TX_TASKLET

View File

@@ -689,30 +689,6 @@ static u32 rtl8723bs_hal_init(struct adapter *padapter)
return _SUCCESS;
}
#ifdef CONFIG_WOWLAN
if (rtw_read8(padapter, REG_MCUFWDL) & BIT7) {
u8 reg_val = 0;
DBG_871X("+Reset Entry+\n");
rtw_write8(padapter, REG_MCUFWDL, 0x00);
_8051Reset8723(padapter);
/* reset BB */
reg_val = rtw_read8(padapter, REG_SYS_FUNC_EN);
reg_val &= ~(BIT(0) | BIT(1));
rtw_write8(padapter, REG_SYS_FUNC_EN, reg_val);
/* reset RF */
rtw_write8(padapter, REG_RF_CTRL, 0);
/* reset TRX path */
rtw_write16(padapter, REG_CR, 0);
/* reset MAC, Digital Core */
reg_val = rtw_read8(padapter, REG_SYS_FUNC_EN + 1);
reg_val &= ~(BIT(4) | BIT(7));
rtw_write8(padapter, REG_SYS_FUNC_EN + 1, reg_val);
reg_val = rtw_read8(padapter, REG_SYS_FUNC_EN + 1);
reg_val |= BIT(4) | BIT(7);
rtw_write8(padapter, REG_SYS_FUNC_EN + 1, reg_val);
DBG_871X("-Reset Entry-\n");
}
#endif /* CONFIG_WOWLAN */
/* Disable Interrupt first. */
/* rtw_hal_disable_interrupt(padapter); */
@@ -1228,10 +1204,6 @@ static void _ReadEfuseInfo8723BS(struct adapter *padapter)
Hal_EfuseParseVoltage_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
#ifdef CONFIG_WOWLAN
Hal_DetectWoWMode(padapter);
#endif
Hal_ReadRFGainOffset(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
RT_TRACE(_module_hci_hal_init_c_, _drv_info_, ("<==== _ReadEfuseInfo8723BS()\n"));
@@ -1322,7 +1294,7 @@ static void SetHwReg8723BS(struct adapter *padapter, u8 variable, u8 *val)
{
u8 val8;
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
struct wowlan_ioctl_param *poidparam;
struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(padapter);
int res;
@@ -1330,13 +1302,6 @@ static void SetHwReg8723BS(struct adapter *padapter, u8 variable, u8 *val)
u16 len = 0;
u8 trycnt = 100;
u32 himr = 0;
#if defined(CONFIG_WOWLAN)
struct security_priv *psecuritypriv = &padapter->securitypriv;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct sta_info *psta = NULL;
u64 iv_low = 0, iv_high = 0;
u8 mstatus = (*(u8 *)val);
#endif
#endif
switch (variable) {
@@ -1363,206 +1328,6 @@ static void SetHwReg8723BS(struct adapter *padapter, u8 variable, u8 *val)
val8 = *val;
break;
#ifdef CONFIG_WOWLAN
case HW_VAR_WOWLAN:
{
poidparam = (struct wowlan_ioctl_param *)val;
switch (poidparam->subcode) {
case WOWLAN_ENABLE:
DBG_871X_LEVEL(_drv_always_, "WOWLAN_ENABLE\n");
/* backup data rate to register 0x8b for wowlan FW */
rtw_write8(padapter, 0x8d, 1);
rtw_write8(padapter, 0x8c, 0);
rtw_write8(padapter, 0x8f, 0x40);
rtw_write8(padapter, 0x8b,
rtw_read8(padapter, 0x2f0));
/* 1. Download WOWLAN FW */
DBG_871X_LEVEL(_drv_always_, "Re-download WoWlan FW!\n");
SetFwRelatedForWoWLAN8723b(padapter, true);
/* 2. RX DMA stop */
DBG_871X_LEVEL(_drv_always_, "Pause DMA\n");
rtw_write32(padapter, REG_RXPKT_NUM, (rtw_read32(padapter, REG_RXPKT_NUM) | RW_RELEASE_EN));
do {
if ((rtw_read32(padapter, REG_RXPKT_NUM) & RXDMA_IDLE)) {
DBG_871X_LEVEL(_drv_always_, "RX_DMA_IDLE is true\n");
break;
} else {
/* If RX_DMA is not idle, receive one pkt from DMA */
res = sdio_local_read(padapter, SDIO_REG_RX0_REQ_LEN, 4, (u8 *)&tmp);
len = le16_to_cpu(tmp);
DBG_871X_LEVEL(_drv_always_, "RX len:%d\n", len);
if (len > 0)
res = RecvOnePkt(padapter, len);
else
DBG_871X_LEVEL(_drv_always_, "read length fail %d\n", len);
DBG_871X_LEVEL(_drv_always_, "RecvOnePkt Result: %d\n", res);
}
} while (trycnt--);
if (trycnt == 0)
DBG_871X_LEVEL(_drv_always_, "Stop RX DMA failed......\n");
/* 3. Clear IMR and ISR */
DBG_871X_LEVEL(_drv_always_, "Clear IMR and ISR\n");
tmp = 0;
sdio_local_write(padapter, SDIO_REG_HIMR_ON, 4, (u8 *)&tmp);
sdio_local_write(padapter, SDIO_REG_HIMR, 4, (u8 *)&tmp);
sdio_local_read(padapter, SDIO_REG_HISR, 4, (u8 *)&tmp);
sdio_local_write(padapter, SDIO_REG_HISR, 4, (u8 *)&tmp);
/* 4. Enable CPWM2 only */
DBG_871X_LEVEL(_drv_always_, "Enable only CPWM2\n");
sdio_local_read(padapter, SDIO_REG_HIMR, 4, (u8 *)&tmp);
DBG_871X("DisableInterruptButCpwm28723BSdio(): Read SDIO_REG_HIMR: 0x%08x\n", tmp);
himr = cpu_to_le32(SDIO_HIMR_DISABLED) | SDIO_HIMR_CPWM2_MSK;
sdio_local_write(padapter, SDIO_REG_HIMR, 4, (u8 *)&himr);
sdio_local_read(padapter, SDIO_REG_HIMR, 4, (u8 *)&tmp);
DBG_871X("DisableInterruptButCpwm28723BSdio(): Read again SDIO_REG_HIMR: 0x%08x\n", tmp);
/* 5. Set Enable WOWLAN H2C command. */
DBG_871X_LEVEL(_drv_always_, "Set Enable WOWLan cmd\n");
rtl8723b_set_wowlan_cmd(padapter, 1);
/* 6. Check EnableWoWlan CMD is ready */
if (!pwrctl->wowlan_pno_enable) {
DBG_871X_LEVEL(_drv_always_, "Check EnableWoWlan CMD is ready\n");
mstatus = rtw_read8(padapter, REG_WOW_CTRL);
trycnt = 10;
while (!(mstatus & BIT1) && trycnt > 1) {
mstatus = rtw_read8(padapter, REG_WOW_CTRL);
DBG_871X("Loop index: %d :0x%02x\n", trycnt, mstatus);
trycnt--;
msleep(2);
}
}
break;
case WOWLAN_DISABLE:
DBG_871X_LEVEL(_drv_always_, "WOWLAN_DISABLE\n");
psta = rtw_get_stainfo(&padapter->stapriv, get_bssid(pmlmepriv));
if (psta)
rtl8723b_set_FwMediaStatusRpt_cmd(padapter, RT_MEDIA_DISCONNECT, psta->mac_id);
else
DBG_871X("psta is null\n");
/* 1. Read wakeup reason */
pwrctl->wowlan_wake_reason = rtw_read8(padapter, REG_WOWLAN_WAKE_REASON);
DBG_871X_LEVEL(
_drv_always_,
"wakeup_reason: 0x%02x, mac_630 = 0x%08x, mac_634 = 0x%08x, mac_1c0 = 0x%08x, mac_1c4 = 0x%08x"
", mac_494 = 0x%08x, , mac_498 = 0x%08x, mac_49c = 0x%08x, mac_608 = 0x%08x, mac_4a0 = 0x%08x, mac_4a4 = 0x%08x\n"
", mac_1cc = 0x%08x, mac_2f0 = 0x%08x, mac_2f4 = 0x%08x, mac_2f8 = 0x%08x, mac_2fc = 0x%08x, mac_8c = 0x%08x",
pwrctl->wowlan_wake_reason,
rtw_read32(padapter, REG_WOWLAN_GTK_DBG1),
rtw_read32(padapter, REG_WOWLAN_GTK_DBG2),
rtw_read32(padapter, 0x1c0),
rtw_read32(padapter, 0x1c4),
rtw_read32(padapter, 0x494),
rtw_read32(padapter, 0x498),
rtw_read32(padapter, 0x49c),
rtw_read32(padapter, 0x608),
rtw_read32(padapter, 0x4a0),
rtw_read32(padapter, 0x4a4),
rtw_read32(padapter, 0x1cc),
rtw_read32(padapter, 0x2f0),
rtw_read32(padapter, 0x2f4),
rtw_read32(padapter, 0x2f8),
rtw_read32(padapter, 0x2fc),
rtw_read32(padapter, 0x8c)
);
{
/* 2. Set Disable WOWLAN H2C command. */
DBG_871X_LEVEL(_drv_always_, "Set Disable WOWLan cmd\n");
rtl8723b_set_wowlan_cmd(padapter, 0);
/* 3. Check Disable WoWlan CMD ready. */
DBG_871X_LEVEL(_drv_always_, "Check DisableWoWlan CMD is ready\n");
mstatus = rtw_read8(padapter, REG_WOW_CTRL);
trycnt = 50;
while (mstatus & BIT1 && trycnt > 1) {
mstatus = rtw_read8(padapter, REG_WOW_CTRL);
DBG_871X_LEVEL(_drv_always_, "Loop index: %d :0x%02x\n", trycnt, mstatus);
trycnt--;
msleep(10);
}
if (mstatus & BIT1) {
DBG_871X_LEVEL(_drv_always_, "Disable WOW mode fail!!\n");
DBG_871X("Set 0x690 = 0x00\n");
rtw_write8(padapter, REG_WOW_CTRL, (rtw_read8(padapter, REG_WOW_CTRL) & 0xf0));
DBG_871X_LEVEL(_drv_always_, "Release RXDMA\n");
rtw_write32(padapter, REG_RXPKT_NUM, (rtw_read32(padapter, REG_RXPKT_NUM) & (~RW_RELEASE_EN)));
}
/* 3.1 read fw iv */
iv_low = rtw_read32(padapter, REG_TXPKTBUF_IV_LOW);
/* only low two bytes is PN, check AES_IV macro for detail */
iv_low &= 0xffff;
iv_high = rtw_read32(padapter, REG_TXPKTBUF_IV_HIGH);
/* get the real packet number */
pwrctl->wowlan_fw_iv = iv_high << 16 | iv_low;
DBG_871X_LEVEL(_drv_always_, "fw_iv: 0x%016llx\n", pwrctl->wowlan_fw_iv);
/* Update TX iv data. */
rtw_set_sec_pn(padapter);
/* 3.2 read GTK index and key */
if (
psecuritypriv->binstallKCK_KEK == true &&
psecuritypriv->dot11PrivacyAlgrthm == _AES_
) {
u8 gtk_keyindex = 0;
u8 get_key[16];
/* read gtk key index */
gtk_keyindex = rtw_read8(padapter, 0x48c);
if (gtk_keyindex < 4) {
psecuritypriv->dot118021XGrpKeyid = gtk_keyindex;
read_cam(padapter, gtk_keyindex, get_key);
memcpy(psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey, get_key, 16);
DBG_871X_LEVEL(
_drv_always_,
"GTK (%d) = 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
gtk_keyindex,
psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].lkey[0],
psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].lkey[1],
psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].lkey[2],
psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].lkey[3]
);
} else
DBG_871X_LEVEL(_drv_always_, "GTK index =%d\n", gtk_keyindex);
}
/* 4. Re-download Normal FW. */
DBG_871X_LEVEL(_drv_always_, "Re-download Normal FW!\n");
SetFwRelatedForWoWLAN8723b(padapter, false);
}
/* 5. Download reserved pages and report media status if needed. */
if (
(pwrctl->wowlan_wake_reason != FWDecisionDisconnect) &&
(pwrctl->wowlan_wake_reason != Rx_Pairwisekey) &&
(pwrctl->wowlan_wake_reason != Rx_DisAssoc) &&
(pwrctl->wowlan_wake_reason != Rx_DeAuth)
) {
rtl8723b_set_FwJoinBssRpt_cmd(padapter, RT_MEDIA_CONNECT);
if (psta)
rtl8723b_set_FwMediaStatusRpt_cmd(padapter, RT_MEDIA_CONNECT, psta->mac_id);
}
break;
default:
break;
}
}
break;
#endif /* CONFIG_WOWLAN */
#ifdef CONFIG_AP_WOWLAN
case HW_VAR_AP_WOWLAN:
{
@@ -1765,9 +1530,6 @@ void rtl8723bs_set_hal_ops(struct adapter *padapter)
pHalFunc->enable_interrupt = &EnableInterrupt8723BSdio;
pHalFunc->disable_interrupt = &DisableInterrupt8723BSdio;
pHalFunc->check_ips_status = &CheckIPSStatus;
#ifdef CONFIG_WOWLAN
pHalFunc->clear_interrupt = &ClearInterrupt8723BSdio;
#endif
pHalFunc->SetHwRegHandler = &SetHwReg8723BS;
pHalFunc->GetHwRegHandler = &GetHwReg8723BS;
pHalFunc->SetHwRegHandlerWithBuf = &SetHwRegWithBuf8723B;

View File

@@ -1114,7 +1114,7 @@ void HalQueryTxOQTBufferStatus8723BSdio(struct adapter *adapter)
haldata->SdioTxOQTFreeSpace = SdioLocalCmd52Read1Byte(adapter, SDIO_REG_OQT_FREE_PG);
}
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
u8 RecvOnePkt(struct adapter *adapter, u32 size)
{
struct recv_buf *recvbuf;
@@ -1149,4 +1149,4 @@ u8 RecvOnePkt(struct adapter *adapter, u32 size)
DBG_871X("-%s-\n", __func__);
return res;
}
#endif /* CONFIG_WOWLAN */
#endif /* CONFIG_AP_WOWLAN */

View File

@@ -40,9 +40,6 @@
* Platform dependent
*/
#define WAKEUP_GPIO_IDX 12 /* WIFI Chip Side */
#ifdef CONFIG_WOWLAN
#define CONFIG_GTK_OL
#endif /* CONFIG_WOWLAN */
/*
* Debug Related Config

View File

@@ -534,11 +534,6 @@ int rtw_set_gpio_output_value(struct net_device *netdev, int gpio_num, bool isHi
int rtw_config_gpio(struct net_device *netdev, int gpio_num, bool isOutput);
#endif
#ifdef CONFIG_WOWLAN
void rtw_suspend_wow(struct adapter *padapter);
int rtw_resume_process_wow(struct adapter *padapter);
#endif
static inline u8 *myid(struct eeprom_priv *peepriv)
{
return peepriv->mac_addr;

View File

@@ -11,7 +11,7 @@
#include <linux/mmc/sdio_func.h>
#include <linux/mmc/sdio_ids.h>
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
#include <linux/mmc/host.h>
#include <linux/mmc/card.h>
#endif

View File

@@ -95,60 +95,6 @@ enum h2c_cmd {
#define H2C_BCN_RSVDPAGE_LEN 5
#define H2C_PROBERSP_RSVDPAGE_LEN 5
#ifdef CONFIG_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])
/* */
/* ARP packet */
/* */
/* LLC Header */
#define GET_ARP_PKT_LLC_TYPE(__pHeader) ReadEF2Byte(((u8 *)(__pHeader)) + 6)
/* ARP element */
#define GET_ARP_PKT_OPERATION(__pHeader) ReadEF2Byte(((u8 *)(__pHeader)) + 6)
#define GET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cpMacAddr((u8 *)(_val), ((u8 *)(__pHeader))+8)
#define GET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr((u8 *)(_val), ((u8 *)(__pHeader))+14)
#define GET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cpMacAddr((u8 *)(_val), ((u8 *)(__pHeader))+18)
#define GET_ARP_PKT_TARGET_IP_ADDR(__pHeader, _val) cpIpAddr((u8 *)(_val), ((u8 *)(__pHeader))+24)
#define SET_ARP_PKT_HW(__pHeader, __Value) WRITEEF2BYTE(((u8 *)(__pHeader)) + 0, __Value)
#define SET_ARP_PKT_PROTOCOL(__pHeader, __Value) WRITEEF2BYTE(((u8 *)(__pHeader)) + 2, __Value)
#define SET_ARP_PKT_HW_ADDR_LEN(__pHeader, __Value) WRITEEF1BYTE(((u8 *)(__pHeader)) + 4, __Value)
#define SET_ARP_PKT_PROTOCOL_ADDR_LEN(__pHeader, __Value) WRITEEF1BYTE(((u8 *)(__pHeader)) + 5, __Value)
#define SET_ARP_PKT_OPERATION(__pHeader, __Value) WRITEEF2BYTE(((u8 *)(__pHeader)) + 6, __Value)
#define SET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cpMacAddr(((u8 *)(__pHeader))+8, (u8 *)(_val))
#define SET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr(((u8 *)(__pHeader))+14, (u8 *)(_val))
#define SET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cpMacAddr(((u8 *)(__pHeader))+18, (u8 *)(_val))
#define SET_ARP_PKT_TARGET_IP_ADDR(__pHeader, _val) cpIpAddr(((u8 *)(__pHeader))+24, (u8 *)(_val))
#define FW_WOWLAN_FUN_EN BIT(0)
#define FW_WOWLAN_PATTERN_MATCH BIT(1)
#define FW_WOWLAN_MAGIC_PKT BIT(2)
#define FW_WOWLAN_UNICAST BIT(3)
#define FW_WOWLAN_ALL_PKT_DROP BIT(4)
#define FW_WOWLAN_GPIO_ACTIVE BIT(5)
#define FW_WOWLAN_REKEY_WAKEUP BIT(6)
#define FW_WOWLAN_DEAUTH_WAKEUP BIT(7)
#define FW_WOWLAN_GPIO_WAKEUP_EN BIT(0)
#define FW_FW_PARSE_MAGIC_PKT BIT(1)
#define FW_REMOTE_WAKE_CTRL_EN BIT(0)
#define FW_REALWOWLAN_EN BIT(5)
#define FW_WOWLAN_KEEP_ALIVE_EN BIT(0)
#define FW_ADOPT_USER BIT(1)
#define FW_WOWLAN_KEEP_ALIVE_PKT_TYPE BIT(2)
#define FW_REMOTE_WAKE_CTRL_EN BIT(0)
#define FW_ARP_EN BIT(1)
#define FW_REALWOWLAN_EN BIT(5)
#define FW_WOW_FW_UNICAST_EN BIT(7)
#endif /* CONFIG_WOWLAN */
/* _RSVDPAGE_LOC_CMD_0x00 */
#define SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd, 0, 8, __Value)
#define SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+1, 0, 8, __Value)
@@ -230,9 +176,6 @@ enum h2c_cmd {
#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_NEIGHBOR_ADV(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+2, 0, 8, __Value)
#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+3, 0, 8, __Value)
#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+4, 0, 8, __Value)
#ifdef CONFIG_GTK_OL
#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+5, 0, 8, __Value)
#endif /* CONFIG_GTK_OL */
/* */
/* Structure -------------------------------------------------- */
@@ -243,25 +186,13 @@ struct RSVDPAGE_LOC {
u8 LocNullData;
u8 LocQosNull;
u8 LocBTQosNull;
#ifdef CONFIG_WOWLAN
u8 LocRemoteCtrlInfo;
u8 LocArpRsp;
u8 LocNbrAdv;
u8 LocGTKRsp;
u8 LocGTKInfo;
u8 LocProbeReq;
u8 LocNetList;
#ifdef CONFIG_GTK_OL
u8 LocGTKEXTMEM;
#endif /* CONFIG_GTK_OL */
#endif /* CONFIG_WOWLAN */
#ifdef CONFIG_AP_WOWLAN
u8 LocApOffloadBCN;
#endif /* CONFIG_AP_WOWLAN */
};
#endif
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
void rtw_get_current_ip_address(struct adapter *padapter, u8 *pcurrentip);
void rtw_get_sec_iv(struct adapter *padapter, u8 *pcur_dot11txpn, u8 *StaAddr);
void rtw_set_sec_pn(struct adapter *padapter);

View File

@@ -85,11 +85,6 @@ enum HW_VARIABLES {
HW_VAR_APFM_ON_MAC, /* Auto FSM to Turn On, include clock, isolation, power control for MAC only */
/* The valid upper nav range for the HW updating, if the true value is larger than the upper range, the HW won't update it. */
/* Unit in microsecond. 0 means disable this function. */
#ifdef CONFIG_WOWLAN
HW_VAR_WOWLAN,
HW_VAR_WAKEUP_REASON,
HW_VAR_RPWM_TOG,
#endif
#ifdef CONFIG_AP_WOWLAN
HW_VAR_AP_WOWLAN,
#endif

View File

@@ -177,11 +177,11 @@ void rtl8723b_download_BTCoex_AP_mode_rsvd_page(struct adapter *padapter);
void CheckFwRsvdPageContent(struct adapter *padapter);
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
void rtl8723b_set_wowlan_cmd(struct adapter *padapter, u8 enable);
void rtl8723b_set_ap_wowlan_cmd(struct adapter *padapter, u8 enable);
void SetFwRelatedForWoWLAN8723b(struct adapter *padapter, u8 bHostIsGoingtoSleep);
#endif/* CONFIG_WOWLAN */
#endif
void rtl8723b_set_FwPwrModeInIPS_cmd(struct adapter *padapter, u8 cmd_param);

View File

@@ -96,11 +96,7 @@ struct rt_firmware_hdr {
/* For WoWLan, more reserved page */
/* ARP Rsp:1, RWC:1, GTK Info:1, GTK RSP:2, GTK EXT MEM:2, PNO: 6 */
#ifdef CONFIG_WOWLAN
#define WOWLAN_PAGE_NUM_8723B 0x07
#else
#define WOWLAN_PAGE_NUM_8723B 0x00
#endif
#ifdef CONFIG_AP_WOWLAN
#define AP_WOWLAN_PAGE_NUM_8723B 0x02
@@ -244,9 +240,6 @@ u8 GetHalDefVar8723B(struct adapter *padapter, enum HAL_DEF_VARIABLE variable,
void rtl8723b_InitBeaconParameters(struct adapter *padapter);
void _InitBurstPktLen_8723BS(struct adapter *adapter);
void _8051Reset8723(struct adapter *padapter);
#ifdef CONFIG_WOWLAN
void Hal_DetectWoWMode(struct adapter *padapter);
#endif /* CONFIG_WOWLAN */
void rtl8723b_start_thread(struct adapter *padapter);
void rtl8723b_stop_thread(struct adapter *padapter);

View File

@@ -96,10 +96,6 @@
#define REG_TXPKTBUF_BCNQ_BDNY_8723B 0x0424
#define REG_TXPKTBUF_MGQ_BDNY_8723B 0x0425
#define REG_TXPKTBUF_WMAC_LBK_BF_HD_8723B 0x045D
#ifdef CONFIG_WOWLAN
#define REG_TXPKTBUF_IV_LOW 0x0484
#define REG_TXPKTBUF_IV_HIGH 0x0488
#endif
#define REG_AMPDU_BURST_MODE_8723B 0x04BC
/* */
@@ -164,12 +160,6 @@
#define BIT_USB_RXDMA_AGG_EN BIT(31)
#define RXDMA_AGG_MODE_EN BIT(1)
#ifdef CONFIG_WOWLAN
#define RXPKT_RELEASE_POLL BIT(16)
#define RXDMA_IDLE BIT(17)
#define RW_RELEASE_EN BIT(18)
#endif
/* */
/* */
/* 0x0400h ~ 0x047Fh Protocol Configuration */

View File

@@ -189,9 +189,6 @@ enum {
CTA_TEST,
MP_DISABLE_BT_COEXIST,
MP_PwrCtlDM,
#ifdef CONFIG_WOWLAN
MP_WOW_ENABLE,
#endif
#ifdef CONFIG_AP_WOWLAN
MP_AP_WOW_ENABLE,
#endif

View File

@@ -220,15 +220,6 @@ struct pwrctrl_priv {
u8 wowlan_wake_reason;
u8 wowlan_ap_mode;
u8 wowlan_mode;
#ifdef CONFIG_WOWLAN
u8 wowlan_pattern;
u8 wowlan_magic;
u8 wowlan_unicast;
u8 wowlan_pattern_idx;
u8 wowlan_pno_enable;
u32 wowlan_pattern_context[8][5];
u64 wowlan_fw_iv;
#endif /* CONFIG_WOWLAN */
struct timer_list pwr_state_check_timer;
struct adapter *adapter;
int pwr_state_check_interval;

View File

@@ -129,9 +129,6 @@ struct security_priv {
u8 binstallGrpkey;
#ifdef CONFIG_GTK_OL
u8 binstallKCK_KEK;
#endif /* CONFIG_GTK_OL */
u8 binstallBIPkey;
u8 busetkipkey;
/* _timer tkip_timer; */

View File

@@ -25,17 +25,17 @@ s32 _sdio_write32(struct adapter *padapter, u32 addr, u32 val);
extern void sd_int_hdl(struct adapter *padapter);
extern u8 CheckIPSStatus(struct adapter *padapter);
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
extern u8 RecvOnePkt(struct adapter *padapter, u32 size);
#endif /* CONFIG_WOWLAN */
#endif
extern void InitInterrupt8723BSdio(struct adapter *padapter);
extern void InitSysInterrupt8723BSdio(struct adapter *padapter);
extern void EnableInterrupt8723BSdio(struct adapter *padapter);
extern void DisableInterrupt8723BSdio(struct adapter *padapter);
extern u8 HalQueryTxBufferStatus8723BSdio(struct adapter *padapter);
extern void HalQueryTxOQTBufferStatus8723BSdio(struct adapter *padapter);
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
#ifdef CONFIG_AP_WOWLAN
extern void ClearInterrupt8723BSdio(struct adapter *padapter);
#endif /* CONFIG_WOWLAN */
#endif
#endif /* !__SDIO_OPS_H__ */

View File

@@ -92,11 +92,6 @@ struct sta_info {
union Keytype dot11tkiprxmickey;
union Keytype dot118021x_UncstKey;
union pn48 dot11txpn; /* PN48 used for Unicast xmit */
#ifdef CONFIG_GTK_OL
u8 kek[RTW_KEK_LEN];
u8 kck[RTW_KCK_LEN];
u8 replay_ctr[RTW_REPLAY_CTR_LEN];
#endif /* CONFIG_GTK_OL */
union pn48 dot11wtxpn; /* PN48 used for Unicast mgmt xmit. */
union pn48 dot11rxpn; /* PN48 used for Unicast recv. */

View File

@@ -4669,9 +4669,6 @@ static const struct iw_priv_args rtw_private_args[] = {
IW_PRIV_TYPE_CHAR | 40, IW_PRIV_TYPE_CHAR | 0x7FF, "test"
},
#ifdef CONFIG_WOWLAN
{ MP_WOW_ENABLE, IW_PRIV_TYPE_CHAR | 1024, 0, "wow_mode" }, /* set */
#endif
#ifdef CONFIG_AP_WOWLAN
{ MP_AP_WOW_ENABLE, IW_PRIV_TYPE_CHAR | 1024, 0, "ap_wow_mode" }, /* set */
#endif

View File

@@ -596,9 +596,6 @@ static void rtw_init_default_value(struct adapter *padapter)
/* security_priv */
/* rtw_get_encrypt_decrypt_from_registrypriv(padapter); */
psecuritypriv->binstallGrpkey = _FAIL;
#ifdef CONFIG_GTK_OL
psecuritypriv->binstallKCK_KEK = _FAIL;
#endif /* CONFIG_GTK_OL */
psecuritypriv->sw_encrypt = pregistrypriv->software_encrypt;
psecuritypriv->sw_decrypt = pregistrypriv->software_decrypt;
@@ -1174,16 +1171,10 @@ void rtw_dev_unload(struct adapter *padapter)
if (!padapter->bSurpriseRemoved) {
hal_btcoex_IpsNotify(padapter, pwrctl->ips_mode_req);
#ifdef CONFIG_WOWLAN
if (pwrctl->bSupportRemoteWakeup && pwrctl->wowlan_mode) {
DBG_871X_LEVEL(_drv_always_, "%s bSupportRemoteWakeup ==true do not run rtw_hal_deinit()\n", __func__);
}
else
#endif
{
/* amy modify 20120221 for power seq is different between driver open and ips */
rtw_hal_deinit(padapter);
}
/* amy modify 20120221 for power seq is different between driver open and ips */
rtw_hal_deinit(padapter);
padapter->bSurpriseRemoved = true;
}
RT_TRACE(_module_hci_intfs_c_, _drv_notice_,
@@ -1244,81 +1235,6 @@ static int rtw_suspend_free_assoc_resource(struct adapter *padapter)
return _SUCCESS;
}
#ifdef CONFIG_WOWLAN
void rtw_suspend_wow(struct adapter *padapter)
{
u8 ch, bw, offset;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct net_device *pnetdev = padapter->pnetdev;
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct wowlan_ioctl_param poidparam;
DBG_871X("==> " FUNC_ADPT_FMT " entry....\n", FUNC_ADPT_ARG(padapter));
DBG_871X("wowlan_mode: %d\n", pwrpriv->wowlan_mode);
DBG_871X("wowlan_pno_enable: %d\n", pwrpriv->wowlan_pno_enable);
if (pwrpriv->wowlan_mode) {
if (pnetdev)
rtw_netif_stop_queue(pnetdev);
/* 1. stop thread */
padapter->bDriverStopped = true; /* for stop thread */
rtw_stop_drv_threads(padapter);
padapter->bDriverStopped = false; /* for 32k command */
/* 2. disable interrupt */
if (padapter->intf_stop)
padapter->intf_stop(padapter);
/* 2.1 clean interrupt */
if (padapter->HalFunc.clear_interrupt)
padapter->HalFunc.clear_interrupt(padapter);
/* 2.2 free irq */
/* sdio_free_irq(adapter_to_dvobj(padapter)); */
if (padapter->intf_free_irq)
padapter->intf_free_irq(adapter_to_dvobj(padapter));
poidparam.subcode = WOWLAN_ENABLE;
padapter->HalFunc.SetHwRegHandler(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)) {
DBG_871X("%s %s(%pM), length:%d assoc_ssid.length:%d\n", __func__,
pmlmepriv->cur_network.network.Ssid.Ssid,
MAC_ARG(pmlmepriv->cur_network.network.MacAddress),
pmlmepriv->cur_network.network.Ssid.SsidLength,
pmlmepriv->assoc_ssid.SsidLength);
rtw_set_to_roam(padapter, 0);
}
}
DBG_871X_LEVEL(_drv_always_, "%s: wowmode suspending\n", __func__);
if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
DBG_871X_LEVEL(_drv_always_, "%s: fw_under_survey\n", __func__);
rtw_indicate_scan_done(padapter, 1);
clr_fwstate(pmlmepriv, _FW_UNDER_SURVEY);
}
if (rtw_get_ch_setting_union(padapter, &ch, &bw, &offset) != 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);
set_channel_bwmode(padapter, ch, offset, bw);
}
if (pwrpriv->wowlan_pno_enable)
DBG_871X_LEVEL(_drv_always_, "%s: pno: %d\n", __func__, pwrpriv->wowlan_pno_enable);
else
rtw_set_ps_mode(padapter, PS_MODE_DTIM, 0, 0, "WOWLAN");
} else {
DBG_871X_LEVEL(_drv_always_, "%s: ### ERROR ### wowlan_mode =%d\n", __func__, pwrpriv->wowlan_mode);
}
DBG_871X("<== " FUNC_ADPT_FMT " exit....\n", FUNC_ADPT_ARG(padapter));
}
#endif /* ifdef CONFIG_WOWLAN */
#ifdef CONFIG_AP_WOWLAN
void rtw_suspend_ap_wow(struct adapter *padapter)
{
@@ -1440,20 +1356,7 @@ int rtw_suspend_common(struct adapter *padapter)
rtw_ps_deny_cancel(padapter, PS_DENY_SUSPEND);
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
#ifdef CONFIG_WOWLAN
if (check_fwstate(pmlmepriv, _FW_LINKED))
pwrpriv->wowlan_mode = true;
else if (pwrpriv->wowlan_pno_enable)
pwrpriv->wowlan_mode |= pwrpriv->wowlan_pno_enable;
if (pwrpriv->wowlan_mode)
rtw_suspend_wow(padapter);
else
rtw_suspend_normal(padapter);
#else /* CONFIG_WOWLAN */
rtw_suspend_normal(padapter);
#endif /* CONFIG_WOWLAN */
} else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
#ifdef CONFIG_AP_WOWLAN
rtw_suspend_ap_wow(padapter);
@@ -1474,124 +1377,6 @@ exit:
return ret;
}
#ifdef CONFIG_WOWLAN
int rtw_resume_process_wow(struct adapter *padapter)
{
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
struct net_device *pnetdev = padapter->pnetdev;
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct dvobj_priv *psdpriv = padapter->dvobj;
struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
struct wowlan_ioctl_param poidparam;
struct sta_info *psta = NULL;
int ret = _SUCCESS;
DBG_871X("==> " FUNC_ADPT_FMT " entry....\n", FUNC_ADPT_ARG(padapter));
if (padapter) {
pnetdev = padapter->pnetdev;
pwrpriv = adapter_to_pwrctl(padapter);
} else {
pdbgpriv->dbg_resume_error_cnt++;
ret = -1;
goto exit;
}
if (padapter->bDriverStopped || padapter->bSurpriseRemoved) {
DBG_871X("%s pdapter %p bDriverStopped %d bSurpriseRemoved %d\n",
__func__, padapter, padapter->bDriverStopped,
padapter->bSurpriseRemoved);
goto exit;
}
if (pwrpriv->wowlan_mode) {
rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0, "WOWLAN");
pwrpriv->bFwCurrentInPSMode = false;
if (padapter->intf_stop)
padapter->intf_stop(padapter);
if (padapter->HalFunc.clear_interrupt)
padapter->HalFunc.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)) {
ret = -1;
RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("%s: sdio_alloc_irq Failed!!\n", __func__));
goto exit;
}
/* Disable WOW, set H2C command */
poidparam.subcode = WOWLAN_DISABLE;
padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_WOWLAN, (u8 *)&poidparam);
psta = rtw_get_stainfo(&padapter->stapriv, get_bssid(&padapter->mlmepriv));
if (psta)
set_sta_rate(padapter, psta);
padapter->bDriverStopped = false;
DBG_871X("%s: wowmode resuming, DriverStopped:%d\n", __func__, padapter->bDriverStopped);
rtw_start_drv_threads(padapter);
if (padapter->intf_start)
padapter->intf_start(padapter);
/* start netif queue */
if (pnetdev) {
if (!rtw_netif_queue_stopped(pnetdev))
rtw_netif_start_queue(pnetdev);
else
rtw_netif_wake_queue(pnetdev);
}
} else {
DBG_871X_LEVEL(_drv_always_, "%s: ### ERROR ### wowlan_mode =%d\n", __func__, pwrpriv->wowlan_mode);
}
if (padapter->pid[1] != 0) {
DBG_871X("pid[1]:%d\n", padapter->pid[1]);
rtw_signal_process(padapter->pid[1], SIGUSR2);
}
if (rtw_chk_roam_flags(padapter, RTW_ROAM_ON_RESUME)) {
if (pwrpriv->wowlan_wake_reason == FWDecisionDisconnect ||
pwrpriv->wowlan_wake_reason == Rx_DisAssoc ||
pwrpriv->wowlan_wake_reason == Rx_DeAuth) {
DBG_871X("%s: disconnect reason: %02x\n", __func__,
pwrpriv->wowlan_wake_reason);
rtw_indicate_disconnect(padapter);
rtw_sta_media_status_rpt(padapter,
rtw_get_stainfo(&padapter->stapriv,
get_bssid(&padapter->mlmepriv)), 0);
rtw_free_assoc_resources(padapter, 1);
pmlmeinfo->state = WIFI_FW_NULL_STATE;
} else {
DBG_871X("%s: do roaming\n", __func__);
rtw_roaming(padapter, NULL);
}
}
if (pwrpriv->wowlan_mode) {
pwrpriv->bips_processing = false;
_set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
} else {
DBG_871X_LEVEL(_drv_always_, "do not reset timer\n");
}
pwrpriv->wowlan_mode = false;
/* clean driver side wake up reason. */
pwrpriv->wowlan_wake_reason = 0;
exit:
DBG_871X("<== " FUNC_ADPT_FMT " exit....\n", FUNC_ADPT_ARG(padapter));
return ret;
}
#endif /* ifdef CONFIG_WOWLAN */
#ifdef CONFIG_AP_WOWLAN
int rtw_resume_process_ap_wow(struct adapter *padapter)
{
@@ -1753,15 +1538,7 @@ int rtw_resume_common(struct adapter *padapter)
DBG_871X("==> %s (%s:%d)\n", __func__, current->comm, current->pid);
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
#ifdef CONFIG_WOWLAN
if (pwrpriv->wowlan_mode)
rtw_resume_process_wow(padapter);
else
rtw_resume_process_normal(padapter);
#else
rtw_resume_process_normal(padapter);
#endif
} else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
#ifdef CONFIG_AP_WOWLAN
rtw_resume_process_ap_wow(padapter);

View File

@@ -377,11 +377,6 @@ static void rtw_sdio_if1_deinit(struct adapter *if1)
rtw_cancel_all_timer(if1);
#ifdef CONFIG_WOWLAN
adapter_to_pwrctl(if1)->wowlan_mode = false;
DBG_871X_LEVEL(_drv_always_, "%s wowlan_mode:%d\n", __func__, adapter_to_pwrctl(if1)->wowlan_mode);
#endif /* CONFIG_WOWLAN */
rtw_dev_unload(if1);
DBG_871X("+r871xu_dev_remove, hw_init_completed =%d\n", if1->hw_init_completed);