diff options
Diffstat (limited to 'drivers/staging/rtl8723au/core/rtw_recv.c')
-rw-r--r-- | drivers/staging/rtl8723au/core/rtw_recv.c | 313 |
1 files changed, 128 insertions, 185 deletions
diff --git a/drivers/staging/rtl8723au/core/rtw_recv.c b/drivers/staging/rtl8723au/core/rtw_recv.c index 0b2455e4f5b6..690970efc22f 100644 --- a/drivers/staging/rtl8723au/core/rtw_recv.c +++ b/drivers/staging/rtl8723au/core/rtw_recv.c @@ -19,10 +19,11 @@ #include <mlme_osdep.h> #include <linux/ip.h> #include <linux/if_ether.h> -#include <ethernet.h> #include <usb_ops.h> #include <linux/ieee80211.h> #include <wifi.h> +#include <rtl8723a_recv.h> +#include <rtl8723a_xmit.h> void rtw_signal_stat_timer_hdl23a(unsigned long data); @@ -48,12 +49,6 @@ int _rtw_init_recv_priv23a(struct recv_priv *precvpriv, int i; int res = _SUCCESS; - - - /* We don't need to memset padapter->XXX to zero, because - adapter is allocated by rtw_zvmalloc(). */ - /* memset((unsigned char *)precvpriv, 0, sizeof (struct recv_priv)); */ - spin_lock_init(&precvpriv->lock); _rtw_init_queue23a(&precvpriv->free_recv_queue); @@ -62,35 +57,23 @@ int _rtw_init_recv_priv23a(struct recv_priv *precvpriv, precvpriv->adapter = padapter; - precvpriv->free_recvframe_cnt = NR_RECVFRAME; - - precvpriv->pallocated_frame_buf = - rtw_zvmalloc(NR_RECVFRAME * sizeof(struct recv_frame)); - - if (precvpriv->pallocated_frame_buf == NULL) { - res = _FAIL; - goto exit; - } - - precvframe = precvpriv->pallocated_frame_buf; - for (i = 0; i < NR_RECVFRAME ; i++) { + precvframe = kzalloc(sizeof(struct recv_frame), GFP_KERNEL); + if (!precvframe) + break; INIT_LIST_HEAD(&precvframe->list); list_add_tail(&precvframe->list, &precvpriv->free_recv_queue.queue); - res = rtw_os_recv_resource_alloc23a(padapter, precvframe); - precvframe->adapter = padapter; precvframe++; } + precvpriv->free_recvframe_cnt = i; precvpriv->rx_pending_cnt = 1; - sema_init(&precvpriv->allrxreturnevt, 0); - - res = rtw_hal_init23a_recv_priv(padapter); + res = rtl8723au_init_recv_priv(padapter); setup_timer(&precvpriv->signal_stat_timer, rtw_signal_stat_timer_hdl23a, (unsigned long)padapter); @@ -99,29 +82,24 @@ int _rtw_init_recv_priv23a(struct recv_priv *precvpriv, rtw_set_signal_stat_timer(precvpriv); -exit: - - - return res; } void _rtw_free_recv_priv23a (struct recv_priv *precvpriv) { struct rtw_adapter *padapter = precvpriv->adapter; - - + struct recv_frame *precvframe; + struct list_head *plist, *ptmp; rtw_free_uc_swdec_pending_queue23a(padapter); - if (precvpriv->pallocated_frame_buf) { - rtw_vmfree(precvpriv->pallocated_frame_buf, - NR_RECVFRAME * sizeof(struct recv_frame)); + list_for_each_safe(plist, ptmp, &precvpriv->free_recv_queue.queue) { + precvframe = container_of(plist, struct recv_frame, list); + list_del_init(&precvframe->list); + kfree(precvframe); } - rtw_hal_free_recv_priv23a(padapter); - - + rtl8723au_free_recv_priv(padapter); } struct recv_frame *rtw_alloc_recvframe23a(struct rtw_queue *pfree_recv_queue) @@ -133,7 +111,7 @@ struct recv_frame *rtw_alloc_recvframe23a(struct rtw_queue *pfree_recv_queue) spin_lock_bh(&pfree_recv_queue->lock); - if (_rtw_queue_empty23a(pfree_recv_queue) == true) + if (list_empty(&pfree_recv_queue->queue)) pframe = NULL; else { phead = get_list_head(pfree_recv_queue); @@ -156,18 +134,18 @@ struct recv_frame *rtw_alloc_recvframe23a(struct rtw_queue *pfree_recv_queue) return pframe; } -int rtw_free_recvframe23a(struct recv_frame *precvframe, struct rtw_queue *pfree_recv_queue) +int rtw_free_recvframe23a(struct recv_frame *precvframe) { struct rtw_adapter *padapter = precvframe->adapter; struct recv_priv *precvpriv = &padapter->recvpriv; - - + struct rtw_queue *pfree_recv_queue; if (precvframe->pkt) { dev_kfree_skb_any(precvframe->pkt);/* free skb by driver */ precvframe->pkt = NULL; } + pfree_recv_queue = &precvpriv->free_recv_queue; spin_lock_bh(&pfree_recv_queue->lock); list_del_init(&precvframe->list); @@ -215,12 +193,11 @@ using spinlock to protect */ -void rtw_free_recvframe23a_queue(struct rtw_queue *pframequeue, struct rtw_queue *pfree_recv_queue) +static void rtw_free_recvframe23a_queue(struct rtw_queue *pframequeue) { struct recv_frame *hdr; struct list_head *plist, *phead, *ptmp; - spin_lock(&pframequeue->lock); phead = get_list_head(pframequeue); @@ -228,12 +205,10 @@ void rtw_free_recvframe23a_queue(struct rtw_queue *pframequeue, struct rtw_queu list_for_each_safe(plist, ptmp, phead) { hdr = container_of(plist, struct recv_frame, list); - rtw_free_recvframe23a(hdr, pfree_recv_queue); + rtw_free_recvframe23a(hdr); } spin_unlock(&pframequeue->lock); - - } u32 rtw_free_uc_swdec_pending_queue23a(struct rtw_adapter *adapter) @@ -241,8 +216,7 @@ u32 rtw_free_uc_swdec_pending_queue23a(struct rtw_adapter *adapter) u32 cnt = 0; struct recv_frame *pending_frame; while ((pending_frame = rtw_alloc_recvframe23a(&adapter->recvpriv.uc_swdec_pending_queue))) { - rtw_free_recvframe23a(pending_frame, - &adapter->recvpriv.free_recv_queue); + rtw_free_recvframe23a(pending_frame); DBG_8723A("%s: dequeue uc_swdec_pending_queue\n", __func__); cnt++; } @@ -282,7 +256,7 @@ struct recv_buf *rtw_dequeue_recvbuf23a (struct rtw_queue *queue) spin_lock_irqsave(&queue->lock, irqL); - if (_rtw_queue_empty23a(queue) == true) { + if (list_empty(&queue->queue)) { precvbuf = NULL; } else { phead = get_list_head(queue); @@ -321,9 +295,9 @@ int recvframe_chkmic(struct rtw_adapter *adapter, stainfo = rtw_get_stainfo23a(&adapter->stapriv, &prxattrib->ta[0]); - if (prxattrib->encrypt == _TKIP_) { + if (prxattrib->encrypt == WLAN_CIPHER_SUITE_TKIP) { RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, - ("\n recvframe_chkmic:prxattrib->encrypt == _TKIP_\n")); + ("\n recvframe_chkmic:prxattrib->encrypt == WLAN_CIPHER_SUITE_TKIP\n")); RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("\n recvframe_chkmic:da = 0x%02x:0x%02x:0x%02x:0x%02x:" "0x%02x:0x%02x\n", prxattrib->ra[0], @@ -338,7 +312,7 @@ int recvframe_chkmic(struct rtw_adapter *adapter, RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("\n recvframe_chkmic: bcmc key\n")); - if (psecuritypriv->binstallGrpkey == false) { + if (!psecuritypriv->binstallGrpkey) { res = _FAIL; RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, @@ -467,9 +441,9 @@ int recvframe_chkmic(struct rtw_adapter *adapter, res = _FAIL; } else { /* mic checked ok */ - if ((psecuritypriv->bcheck_grpkey == false) && - (is_multicast_ether_addr(prxattrib->ra))) { - psecuritypriv->bcheck_grpkey = true; + if (!psecuritypriv->bcheck_grpkey && + is_multicast_ether_addr(prxattrib->ra)) { + psecuritypriv->bcheck_grpkey = 1; RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("psecuritypriv->bcheck_grp" @@ -501,8 +475,7 @@ struct recv_frame *decryptor(struct rtw_adapter *padapter, struct rx_pkt_attrib *prxattrib = &precv_frame->attrib; struct security_priv *psecuritypriv = &padapter->securitypriv; struct recv_frame *return_packet = precv_frame; - u32 res = _SUCCESS; - + int res = _SUCCESS; RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("prxstat->decrypted =%x prxattrib->encrypt = 0x%03x\n", @@ -517,13 +490,13 @@ struct recv_frame *decryptor(struct rtw_adapter *padapter, prxattrib->key_index); switch (prxattrib->encrypt) { - case _WEP40_: - case _WEP104_: + case WLAN_CIPHER_SUITE_WEP40: + case WLAN_CIPHER_SUITE_WEP104: prxattrib->key_index = psecuritypriv->dot11PrivacyKeyIndex; break; - case _TKIP_: - case _AES_: + case WLAN_CIPHER_SUITE_TKIP: + case WLAN_CIPHER_SUITE_CCMP: default: prxattrib->key_index = psecuritypriv->dot118021XGrpKeyid; @@ -533,16 +506,16 @@ struct recv_frame *decryptor(struct rtw_adapter *padapter, } if ((prxattrib->encrypt > 0) && ((prxattrib->bdecrypted == 0))) { - psecuritypriv->hw_decrypted = false; + psecuritypriv->hw_decrypted = 0; switch (prxattrib->encrypt) { - case _WEP40_: - case _WEP104_: + case WLAN_CIPHER_SUITE_WEP40: + case WLAN_CIPHER_SUITE_WEP104: rtw_wep_decrypt23a(padapter, precv_frame); break; - case _TKIP_: + case WLAN_CIPHER_SUITE_TKIP: res = rtw_tkip_decrypt23a(padapter, precv_frame); break; - case _AES_: + case WLAN_CIPHER_SUITE_CCMP: res = rtw_aes_decrypt23a(padapter, precv_frame); break; default: @@ -550,13 +523,12 @@ struct recv_frame *decryptor(struct rtw_adapter *padapter, } } else if (prxattrib->bdecrypted == 1 && prxattrib->encrypt > 0 && (psecuritypriv->busetkipkey == 1 || - prxattrib->encrypt != _TKIP_)) { - psecuritypriv->hw_decrypted = true; + prxattrib->encrypt != WLAN_CIPHER_SUITE_TKIP)) { + psecuritypriv->hw_decrypted = 1; } if (res == _FAIL) { - rtw_free_recvframe23a(return_packet, - &padapter->recvpriv.free_recv_queue); + rtw_free_recvframe23a(return_packet); return_packet = NULL; } @@ -569,31 +541,35 @@ struct recv_frame *decryptor(struct rtw_adapter *padapter, static struct recv_frame *portctrl(struct rtw_adapter *adapter, struct recv_frame *precv_frame) { - u8 *psta_addr = NULL, *ptr; + u8 *psta_addr, *ptr; uint auth_alg; struct recv_frame *pfhdr; struct sta_info *psta; struct sta_priv *pstapriv ; struct recv_frame *prtnframe; - u16 ether_type = 0; - u16 eapol_type = 0x888e;/* for Funia BD's WPA issue */ + u16 ether_type; + u16 eapol_type = ETH_P_PAE;/* for Funia BD's WPA issue */ struct rx_pkt_attrib *pattrib; pstapriv = &adapter->stapriv; - psta = rtw_get_stainfo23a(pstapriv, psta_addr); auth_alg = adapter->securitypriv.dot11AuthAlgrthm; - ptr = precv_frame->pkt->data; pfhdr = precv_frame; pattrib = &pfhdr->attrib; psta_addr = pattrib->ta; + psta = rtw_get_stainfo23a(pstapriv, psta_addr); RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("########portctrl:adapter->securitypriv.dot11AuthAlgrthm =" "%d\n", adapter->securitypriv.dot11AuthAlgrthm)); - if (auth_alg == 2) { + if (auth_alg == dot11AuthAlgrthm_8021X) { + /* get ether_type */ + ptr = pfhdr->pkt->data + pfhdr->attrib.hdrlen; + + ether_type = (ptr[6] << 8) | ptr[7]; + if ((psta != NULL) && (psta->ieee8021x_blocked)) { /* blocked */ /* only accept EAPOL frame */ @@ -601,19 +577,11 @@ static struct recv_frame *portctrl(struct rtw_adapter *adapter, ("########portctrl:psta->ieee8021x_blocked ==" "1\n")); - prtnframe = precv_frame; - - /* get ether_type */ - ptr = ptr + pfhdr->attrib.hdrlen + LLC_HEADER_SIZE; - memcpy(ðer_type, ptr, 2); - ether_type = ntohs((unsigned short)ether_type); - if (ether_type == eapol_type) { prtnframe = precv_frame; } else { /* free this frame */ - rtw_free_recvframe23a(precv_frame, - &adapter->recvpriv.free_recv_queue); + rtw_free_recvframe23a(precv_frame); prtnframe = NULL; } } else { @@ -651,9 +619,7 @@ static struct recv_frame *portctrl(struct rtw_adapter *adapter, prtnframe = precv_frame; } - - - return prtnframe; + return prtnframe; } int recv_decache(struct recv_frame *precv_frame, u8 bretry, @@ -833,8 +799,8 @@ static int sta2sta_data_frame(struct rtw_adapter *adapter, - if ((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == true) || - (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == true)) { + if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || + check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) { /* filter packets that SA is myself or multicast or broadcast */ if (ether_addr_equal(myhwaddr, pattrib->src)) { @@ -857,7 +823,7 @@ static int sta2sta_data_frame(struct rtw_adapter *adapter, } sta_addr = pattrib->src; - } else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) == true) { + } else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { /* For Station mode, sa and bssid should always be BSSID, and DA is my mac-address */ if (!ether_addr_equal(pattrib->bssid, pattrib->src)) { @@ -870,7 +836,7 @@ static int sta2sta_data_frame(struct rtw_adapter *adapter, sta_addr = pattrib->bssid; - } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true) { + } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { if (bmcast) { /* For AP mode, if DA == MCAST, then BSSID should be also MCAST */ if (!is_multicast_ether_addr(pattrib->bssid)) { @@ -887,7 +853,7 @@ static int sta2sta_data_frame(struct rtw_adapter *adapter, sta_addr = pattrib->src; } - } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == true) { + } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) { ether_addr_copy(pattrib->dst, hdr->addr1); ether_addr_copy(pattrib->src, hdr->addr2); ether_addr_copy(pattrib->bssid, hdr->addr3); @@ -934,9 +900,9 @@ int ap2sta_data_frame(struct rtw_adapter *adapter, - if ((check_fwstate(pmlmepriv, WIFI_STATION_STATE) == true) && - (check_fwstate(pmlmepriv, _FW_LINKED) == true || - check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == true)) { + if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) && + (check_fwstate(pmlmepriv, _FW_LINKED) || + check_fwstate(pmlmepriv, _FW_UNDER_LINKING))) { /* filter packets that SA is myself or multicast or broadcast */ if (ether_addr_equal(myhwaddr, pattrib->src)) { @@ -999,8 +965,8 @@ int ap2sta_data_frame(struct rtw_adapter *adapter, goto exit; } - } else if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == true) && - (check_fwstate(pmlmepriv, _FW_LINKED) == true)) { + } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE) && + check_fwstate(pmlmepriv, _FW_LINKED)) { ether_addr_copy(pattrib->dst, hdr->addr1); ether_addr_copy(pattrib->src, hdr->addr2); ether_addr_copy(pattrib->bssid, hdr->addr3); @@ -1018,7 +984,7 @@ int ap2sta_data_frame(struct rtw_adapter *adapter, ret = _FAIL; goto exit; } - } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true) { + } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { /* Special case */ ret = RTW_RX_HANDLED; goto exit; @@ -1062,7 +1028,7 @@ int sta2ap_data_frame(struct rtw_adapter *adapter, - if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true) { + if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { /* For AP mode, RA = BSSID, TX = STA(SRC_ADDR), A3 = DST_ADDR */ if (!ether_addr_equal(pattrib->bssid, mybssid)) { ret = _FAIL; @@ -1119,17 +1085,14 @@ exit: return ret; } -int validate_recv_ctrl_frame(struct rtw_adapter *padapter, - struct recv_frame *precv_frame); -int validate_recv_ctrl_frame(struct rtw_adapter *padapter, - struct recv_frame *precv_frame) +static int validate_recv_ctrl_frame(struct rtw_adapter *padapter, + struct recv_frame *precv_frame) { #ifdef CONFIG_8723AU_AP_MODE struct rx_pkt_attrib *pattrib = &precv_frame->attrib; struct sta_priv *pstapriv = &padapter->stapriv; struct sk_buff *skb = precv_frame->pkt; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - u8 *pframe = skb->data; if (!ieee80211_is_ctl(hdr->frame_control)) return _FAIL; @@ -1140,14 +1103,15 @@ int validate_recv_ctrl_frame(struct rtw_adapter *padapter, /* only handle ps-poll */ if (ieee80211_is_pspoll(hdr->frame_control)) { + struct ieee80211_pspoll *psp = (struct ieee80211_pspoll *)hdr; u16 aid; u8 wmmps_ac = 0; struct sta_info *psta = NULL; - aid = GetAid(pframe); + aid = le16_to_cpu(psp->aid) & 0x3fff; psta = rtw_get_stainfo23a(pstapriv, hdr->addr2); - if ((!psta) || (psta->aid != aid)) + if (!psta || psta->aid != aid) return _FAIL; /* for rx pkt statistics */ @@ -1213,7 +1177,8 @@ int validate_recv_ctrl_frame(struct rtw_adapter *padapter, /* DBG_8723A("handling ps-poll, q_len =%d, tim =%x\n", psta->sleepq_len, pstapriv->tim_bitmap); */ - rtw_hal_xmit23aframe_enqueue(padapter, pxmitframe); + rtl8723au_hal_xmitframe_enqueue(padapter, + pxmitframe); if (psta->sleepq_len == 0) { pstapriv->tim_bitmap &= ~CHKBIT(psta->aid); @@ -1222,8 +1187,8 @@ int validate_recv_ctrl_frame(struct rtw_adapter *padapter, /* upate BCN for TIM IE */ /* update_BCNTIM(padapter); */ - update_beacon23a(padapter, _TIM_IE_, - NULL, false); + update_beacon23a(padapter, WLAN_EID_TIM, + NULL, false); } /* spin_unlock_bh(&psta->sleep_q.lock); */ @@ -1254,8 +1219,8 @@ int validate_recv_ctrl_frame(struct rtw_adapter *padapter, /* upate BCN for TIM IE */ /* update_BCNTIM(padapter); */ - update_beacon23a(padapter, _TIM_IE_, - NULL, false); + update_beacon23a(padapter, WLAN_EID_TIM, + NULL, false); } } } @@ -1267,10 +1232,8 @@ int validate_recv_ctrl_frame(struct rtw_adapter *padapter, struct recv_frame* recvframe_chk_defrag23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame); -int validate_recv_mgnt_frame(struct rtw_adapter *padapter, - struct recv_frame *precv_frame); -int validate_recv_mgnt_frame(struct rtw_adapter *padapter, - struct recv_frame *precv_frame) +static int validate_recv_mgnt_frame(struct rtw_adapter *padapter, + struct recv_frame *precv_frame) { struct sta_info *psta; struct sk_buff *skb; @@ -1316,15 +1279,12 @@ int validate_recv_mgnt_frame(struct rtw_adapter *padapter, return _SUCCESS; } -int validate_recv_data_frame(struct rtw_adapter *adapter, - struct recv_frame *precv_frame); -int validate_recv_data_frame(struct rtw_adapter *adapter, - struct recv_frame *precv_frame) +static int validate_recv_data_frame(struct rtw_adapter *adapter, + struct recv_frame *precv_frame) { u8 bretry; - u8 *psa, *pda, *pbssid; + u8 *psa, *pda; struct sta_info *psta = NULL; - u8 *ptr = precv_frame->pkt->data; struct rx_pkt_attrib *pattrib = & precv_frame->attrib; struct security_priv *psecuritypriv = &adapter->securitypriv; int ret = _SUCCESS; @@ -1336,48 +1296,44 @@ int validate_recv_data_frame(struct rtw_adapter *adapter, bretry = ieee80211_has_retry(hdr->frame_control); pda = ieee80211_get_DA(hdr); psa = ieee80211_get_SA(hdr); - pbssid = get_hdr_bssid(ptr); - - if (pbssid == NULL) { - ret = _FAIL; - goto exit; - } ether_addr_copy(pattrib->dst, pda); ether_addr_copy(pattrib->src, psa); - ether_addr_copy(pattrib->bssid, pbssid); - - switch (pattrib->to_fr_ds) - { - case 0: + switch (hdr->frame_control & + cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) { + case cpu_to_le16(0): + ether_addr_copy(pattrib->bssid, hdr->addr3); ether_addr_copy(pattrib->ra, pda); ether_addr_copy(pattrib->ta, psa); ret = sta2sta_data_frame(adapter, precv_frame, &psta); break; - case 1: + case cpu_to_le16(IEEE80211_FCTL_FROMDS): + ether_addr_copy(pattrib->bssid, hdr->addr2); ether_addr_copy(pattrib->ra, pda); - ether_addr_copy(pattrib->ta, pbssid); + ether_addr_copy(pattrib->ta, hdr->addr2); ret = ap2sta_data_frame(adapter, precv_frame, &psta); break; - case 2: - ether_addr_copy(pattrib->ra, pbssid); + case cpu_to_le16(IEEE80211_FCTL_TODS): + ether_addr_copy(pattrib->bssid, hdr->addr1); + ether_addr_copy(pattrib->ra, hdr->addr1); ether_addr_copy(pattrib->ta, psa); ret = sta2ap_data_frame(adapter, precv_frame, &psta); break; - case 3: + case cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS): + /* + * There is no BSSID in this case, but the driver has been + * using addr1 so far, so keep it for now. + */ + ether_addr_copy(pattrib->bssid, hdr->addr1); ether_addr_copy(pattrib->ra, hdr->addr1); ether_addr_copy(pattrib->ta, hdr->addr2); ret = _FAIL; RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, (" case 3\n")); break; - - default: - ret = _FAIL; - break; } if ((ret == _FAIL) || (ret == RTW_RX_HANDLED)) @@ -1451,22 +1407,18 @@ int validate_recv_data_frame(struct rtw_adapter *adapter, switch (pattrib->encrypt) { - case _WEP40_: - case _WEP104_: - pattrib->iv_len = 4; - pattrib->icv_len = 4; + case WLAN_CIPHER_SUITE_WEP40: + case WLAN_CIPHER_SUITE_WEP104: + pattrib->iv_len = IEEE80211_WEP_IV_LEN; + pattrib->icv_len = IEEE80211_WEP_ICV_LEN; break; - case _TKIP_: - pattrib->iv_len = 8; - pattrib->icv_len = 4; + case WLAN_CIPHER_SUITE_TKIP: + pattrib->iv_len = IEEE80211_TKIP_IV_LEN; + pattrib->icv_len = IEEE80211_TKIP_ICV_LEN; break; - case _AES_: - pattrib->iv_len = 8; - pattrib->icv_len = 8; - break; - case _SMS4_: - pattrib->iv_len = 18; - pattrib->icv_len = 16; + case WLAN_CIPHER_SUITE_CCMP: + pattrib->iv_len = IEEE80211_CCMP_HDR_LEN; + pattrib->icv_len = IEEE80211_CCMP_MIC_LEN; break; default: pattrib->iv_len = 0; @@ -1538,8 +1490,6 @@ static int validate_recv_frame(struct rtw_adapter *adapter, goto exit; } - pattrib->to_fr_ds = get_tofr_ds(hdr->frame_control); - seq_ctrl = le16_to_cpu(hdr->seq_ctrl); pattrib->frag_num = seq_ctrl & IEEE80211_SCTL_FRAG; pattrib->seq_num = seq_ctrl >> 4; @@ -1550,7 +1500,7 @@ static int validate_recv_frame(struct rtw_adapter *adapter, pattrib->privacy = ieee80211_has_protected(hdr->frame_control); pattrib->order = ieee80211_has_order(hdr->frame_control); - rtw_hal_get_def_var23a(adapter, HAL_DEF_DBG_DUMP_RXPKT, &bDumpRxPkt); + GetHalDefVar8192CUsb(adapter, HAL_DEF_DBG_DUMP_RXPKT, &bDumpRxPkt); if (unlikely(bDumpRxPkt == 1)) dump_rx_pkt(skb, type, bDumpRxPkt); @@ -1638,7 +1588,7 @@ static int wlanhdr_to_ethhdr (struct recv_frame *precvframe) pattrib->hdrlen, pattrib->iv_len)); pattrib->eth_type = eth_type; - if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == true)) { + if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) { ptr += hdrlen; *ptr = 0x87; *(ptr + 1) = 0x12; @@ -1694,8 +1644,8 @@ struct recv_frame *recvframe_defrag(struct rtw_adapter *adapter, if (curfragnum != prframe->attrib.frag_num) { /* the first fragment number must be 0 */ /* free the whole queue */ - rtw_free_recvframe23a(prframe, pfree_recv_queue); - rtw_free_recvframe23a_queue(defrag_q, pfree_recv_queue); + rtw_free_recvframe23a(prframe); + rtw_free_recvframe23a_queue(defrag_q); return NULL; } @@ -1715,8 +1665,8 @@ struct recv_frame *recvframe_defrag(struct rtw_adapter *adapter, /* the fragment number must be increasing (after decache) */ /* release the defrag_q & prframe */ - rtw_free_recvframe23a(prframe, pfree_recv_queue); - rtw_free_recvframe23a_queue(defrag_q, pfree_recv_queue); + rtw_free_recvframe23a(prframe); + rtw_free_recvframe23a_queue(defrag_q); return NULL; } @@ -1744,7 +1694,7 @@ struct recv_frame *recvframe_defrag(struct rtw_adapter *adapter, }; /* free the defrag_q queue and return the prframe */ - rtw_free_recvframe23a_queue(defrag_q, pfree_recv_queue); + rtw_free_recvframe23a_queue(defrag_q); RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("Performance defrag!!!!!\n")); @@ -1803,9 +1753,9 @@ struct recv_frame* recvframe_chk_defrag23a(struct rtw_adapter *padapter, if (pdefrag_q != NULL) { if (fragnum == 0) { /* the first fragment */ - if (_rtw_queue_empty23a(pdefrag_q) == false) { + if (!list_empty(&pdefrag_q->queue)) { /* free current defrag_q */ - rtw_free_recvframe23a_queue(pdefrag_q, pfree_recv_queue); + rtw_free_recvframe23a_queue(pdefrag_q); } } @@ -1826,7 +1776,7 @@ struct recv_frame* recvframe_chk_defrag23a(struct rtw_adapter *padapter, } else { /* can't find this ta's defrag_queue, so free this recv_frame */ - rtw_free_recvframe23a(precv_frame, pfree_recv_queue); + rtw_free_recvframe23a(precv_frame); prtnframe = NULL; RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("Free because pdefrag_q == NULL: ismfrag = " @@ -1852,7 +1802,7 @@ struct recv_frame* recvframe_chk_defrag23a(struct rtw_adapter *padapter, } else { /* can't find this ta's defrag_queue, so free this recv_frame */ - rtw_free_recvframe23a(precv_frame, pfree_recv_queue); + rtw_free_recvframe23a(precv_frame); prtnframe = NULL; RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("Free because pdefrag_q == NULL: ismfrag = " @@ -1867,7 +1817,7 @@ struct recv_frame* recvframe_chk_defrag23a(struct rtw_adapter *padapter, RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("recvframe_chkmic(padapter, prtnframe) ==" "_FAIL\n")); - rtw_free_recvframe23a(prtnframe, pfree_recv_queue); + rtw_free_recvframe23a(prtnframe); prtnframe = NULL; } } @@ -1883,8 +1833,6 @@ int amsdu_to_msdu(struct rtw_adapter *padapter, struct recv_frame *prframe) struct rx_pkt_attrib *pattrib; struct sk_buff *skb, *sub_skb; struct sk_buff_head skb_list; - struct recv_priv *precvpriv = &padapter->recvpriv; - struct rtw_queue *pfree_recv_queue = &precvpriv->free_recv_queue; pattrib = &prframe->attrib; @@ -1906,7 +1854,7 @@ int amsdu_to_msdu(struct rtw_adapter *padapter, struct recv_frame *prframe) } prframe->pkt = NULL; - rtw_free_recvframe23a(prframe, pfree_recv_queue); + rtw_free_recvframe23a(prframe); return _SUCCESS; } @@ -1942,8 +1890,8 @@ int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_num) return true; } -int enqueue_reorder_recvframe23a(struct recv_reorder_ctrl *preorder_ctrl, - struct recv_frame *prframe) +static int enqueue_reorder_recvframe23a(struct recv_reorder_ctrl *preorder_ctrl, + struct recv_frame *prframe) { struct rx_pkt_attrib *pattrib = &prframe->attrib; struct rtw_queue *ppending_recvframe_queue; @@ -2061,10 +2009,8 @@ int recv_indicatepkts_in_order(struct rtw_adapter *padapter, } } else { if (amsdu_to_msdu(padapter, prframe) != - _SUCCESS) { - rtw_free_recvframe23a(prframe, - &precvpriv->free_recv_queue); - } + _SUCCESS) + rtw_free_recvframe23a(prframe); } /* Update local variables. */ @@ -2102,7 +2048,7 @@ int recv_indicatepkt_reorder(struct rtw_adapter *padapter, /* s1. */ wlanhdr_to_ethhdr(prframe); - if ((pattrib->qos!= 1) || (pattrib->eth_type == 0x0806) || + if ((pattrib->qos!= 1) || (pattrib->eth_type == ETH_P_ARP) || (pattrib->ack_policy != 0)) { if ((padapter->bDriverStopped == false) && (padapter->bSurpriseRemoved == false)) { @@ -2269,7 +2215,6 @@ int process_recv_indicatepkts(struct rtw_adapter *padapter, static int recv_func_prehandle(struct rtw_adapter *padapter, struct recv_frame *rframe) { - struct rtw_queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue; int ret = _SUCCESS; /* check the frame crtl field and decache */ @@ -2277,7 +2222,7 @@ static int recv_func_prehandle(struct rtw_adapter *padapter, if (ret != _SUCCESS) { RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("recv_func: validate_recv_frame fail! drop pkt\n")); - rtw_free_recvframe23a(rframe, pfree_recv_queue); + rtw_free_recvframe23a(rframe); goto exit; } @@ -2291,7 +2236,6 @@ static int recv_func_posthandle(struct rtw_adapter *padapter, int ret = _SUCCESS; struct recv_frame *orig_prframe = prframe; struct recv_priv *precvpriv = &padapter->recvpriv; - struct rtw_queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue; /* DATA FRAME */ rtw_led_control(padapter, LED_CTL_RX); @@ -2337,7 +2281,7 @@ static int recv_func_posthandle(struct rtw_adapter *padapter, if (ret != _SUCCESS) { RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("recv_func: process_recv_indicatepkts fail!\n")); - rtw_free_recvframe23a(orig_prframe, pfree_recv_queue);/* free this recv_frame */ + rtw_free_recvframe23a(orig_prframe);/* free this recv_frame */ goto _recv_data_drop; } return ret; @@ -2434,8 +2378,7 @@ void rtw_signal_stat_timer_hdl23a(unsigned long data) } /* update value of signal_strength, rssi, signal_qual */ - if (check_fwstate(&adapter->mlmepriv, _FW_UNDER_SURVEY) == - false) { + if (!check_fwstate(&adapter->mlmepriv, _FW_UNDER_SURVEY)) { tmp_s = (avg_signal_strength + (_alpha - 1) * recvpriv->signal_strength); if (tmp_s %_alpha) |