mirror of
https://github.com/lwfinger/rtl8188eu.git
synced 2024-11-09 23:19:39 +00:00
rtl8188eu: Change union recv_frame to struct
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
This commit is contained in:
parent
89efde68f8
commit
7fd86158bf
11 changed files with 377 additions and 381 deletions
|
@ -409,10 +409,10 @@ void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _mgt_dispatcher(struct adapter *padapter, struct mlme_handler *ptable, union recv_frame *precv_frame)
|
static void _mgt_dispatcher(struct adapter *padapter, struct mlme_handler *ptable, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
|
|
||||||
if (ptable->func) {
|
if (ptable->func) {
|
||||||
/* 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. */
|
||||||
|
@ -423,7 +423,7 @@ static void _mgt_dispatcher(struct adapter *padapter, struct mlme_handler *ptabl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void mgt_dispatcher(struct adapter *padapter, union recv_frame *precv_frame)
|
void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
int index;
|
int index;
|
||||||
struct mlme_handler *ptable;
|
struct mlme_handler *ptable;
|
||||||
|
@ -431,7 +431,7 @@ void mgt_dispatcher(struct adapter *padapter, union recv_frame *precv_frame)
|
||||||
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
||||||
#endif /* CONFIG_88EU_AP_MODE */
|
#endif /* CONFIG_88EU_AP_MODE */
|
||||||
u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(pframe));
|
struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(pframe));
|
||||||
|
|
||||||
RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
|
RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
|
||||||
|
@ -460,13 +460,13 @@ void mgt_dispatcher(struct adapter *padapter, union recv_frame *precv_frame)
|
||||||
|
|
||||||
if (psta != NULL) {
|
if (psta != NULL) {
|
||||||
if (GetRetry(pframe)) {
|
if (GetRetry(pframe)) {
|
||||||
if (precv_frame->u.hdr.attrib.seq_num == psta->RxMgmtFrameSeqNum) {
|
if (precv_frame->attrib.seq_num == psta->RxMgmtFrameSeqNum) {
|
||||||
/* drop the duplicate management frame */
|
/* drop the duplicate management frame */
|
||||||
DBG_88E("Drop duplicate management frame with seq_num=%d.\n", precv_frame->u.hdr.attrib.seq_num);
|
DBG_88E("Drop duplicate management frame with seq_num=%d.\n", precv_frame->attrib.seq_num);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
psta->RxMgmtFrameSeqNum = precv_frame->u.hdr.attrib.seq_num;
|
psta->RxMgmtFrameSeqNum = precv_frame->attrib.seq_num;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_88EU_AP_MODE
|
#ifdef CONFIG_88EU_AP_MODE
|
||||||
|
@ -526,7 +526,7 @@ Following are the callback functions for each subtype of the management frames
|
||||||
|
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
unsigned int OnProbeReq(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnProbeReq(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
unsigned int ielen;
|
unsigned int ielen;
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
|
@ -534,8 +534,8 @@ unsigned int OnProbeReq(struct adapter *padapter, union recv_frame *precv_frame)
|
||||||
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
struct wlan_bssid_ex *cur = &(pmlmeinfo->network);
|
struct wlan_bssid_ex *cur = &(pmlmeinfo->network);
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
uint len = precv_frame->u.hdr.len;
|
uint len = precv_frame->len;
|
||||||
u8 is_valid_p2p_probereq = false;
|
u8 is_valid_p2p_probereq = false;
|
||||||
|
|
||||||
#ifdef CONFIG_88EU_P2P
|
#ifdef CONFIG_88EU_P2P
|
||||||
|
@ -604,12 +604,12 @@ _issue_probersp:
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnProbeRsp(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnProbeRsp(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
||||||
#ifdef CONFIG_88EU_P2P
|
#ifdef CONFIG_88EU_P2P
|
||||||
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_88EU_P2P
|
#ifdef CONFIG_88EU_P2P
|
||||||
|
@ -657,7 +657,7 @@ unsigned int OnProbeRsp(struct adapter *padapter, union recv_frame *precv_frame)
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnBeacon(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnBeacon(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
int cam_idx;
|
int cam_idx;
|
||||||
struct sta_info *psta;
|
struct sta_info *psta;
|
||||||
|
@ -665,8 +665,8 @@ unsigned int OnBeacon(struct adapter *padapter, union recv_frame *precv_frame)
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
||||||
struct sta_priv *pstapriv = &padapter->stapriv;
|
struct sta_priv *pstapriv = &padapter->stapriv;
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
uint len = precv_frame->u.hdr.len;
|
uint len = precv_frame->len;
|
||||||
struct wlan_bssid_ex *pbss;
|
struct wlan_bssid_ex *pbss;
|
||||||
int ret = _SUCCESS;
|
int ret = _SUCCESS;
|
||||||
|
|
||||||
|
@ -747,7 +747,7 @@ _END_ONBEACON_:
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAuth(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAuth(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_88EU_AP_MODE
|
#ifdef CONFIG_88EU_AP_MODE
|
||||||
unsigned int auth_mode, ie_len;
|
unsigned int auth_mode, ie_len;
|
||||||
|
@ -761,8 +761,8 @@ unsigned int OnAuth(struct adapter *padapter, union recv_frame *precv_frame)
|
||||||
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
||||||
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
uint len = precv_frame->u.hdr.len;
|
uint len = precv_frame->len;
|
||||||
|
|
||||||
if ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
|
if ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
|
||||||
return _FAIL;
|
return _FAIL;
|
||||||
|
@ -920,15 +920,15 @@ auth_fail:
|
||||||
return _FAIL;
|
return _FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAuthClient(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAuthClient(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
unsigned int seq, len, status, offset;
|
unsigned int seq, len, status, offset;
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
unsigned int go2asoc = 0;
|
unsigned int go2asoc = 0;
|
||||||
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
uint pkt_len = precv_frame->u.hdr.len;
|
uint pkt_len = precv_frame->len;
|
||||||
|
|
||||||
DBG_88E("%s\n", __func__);
|
DBG_88E("%s\n", __func__);
|
||||||
|
|
||||||
|
@ -995,7 +995,7 @@ authclnt_fail:
|
||||||
return _FAIL;
|
return _FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAssocReq(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAssocReq(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_88EU_AP_MODE
|
#ifdef CONFIG_88EU_AP_MODE
|
||||||
u16 capab_info;
|
u16 capab_info;
|
||||||
|
@ -1014,8 +1014,8 @@ unsigned int OnAssocReq(struct adapter *padapter, union recv_frame *precv_frame)
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
struct wlan_bssid_ex *cur = &(pmlmeinfo->network);
|
struct wlan_bssid_ex *cur = &(pmlmeinfo->network);
|
||||||
struct sta_priv *pstapriv = &padapter->stapriv;
|
struct sta_priv *pstapriv = &padapter->stapriv;
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
uint pkt_len = precv_frame->u.hdr.len;
|
uint pkt_len = precv_frame->len;
|
||||||
#ifdef CONFIG_88EU_P2P
|
#ifdef CONFIG_88EU_P2P
|
||||||
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
||||||
u8 p2p_status_code = P2P_STATUS_SUCCESS;
|
u8 p2p_status_code = P2P_STATUS_SUCCESS;
|
||||||
|
@ -1456,7 +1456,7 @@ OnAssocReqFail:
|
||||||
return _FAIL;
|
return _FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAssocRsp(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAssocRsp(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
uint i;
|
uint i;
|
||||||
int res;
|
int res;
|
||||||
|
@ -1466,8 +1466,8 @@ unsigned int OnAssocRsp(struct adapter *padapter, union recv_frame *precv_frame)
|
||||||
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
/* struct wlan_bssid_ex *cur_network = &(pmlmeinfo->network); */
|
/* struct wlan_bssid_ex *cur_network = &(pmlmeinfo->network); */
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
uint pkt_len = precv_frame->u.hdr.len;
|
uint pkt_len = precv_frame->len;
|
||||||
|
|
||||||
DBG_88E("%s\n", __func__);
|
DBG_88E("%s\n", __func__);
|
||||||
|
|
||||||
|
@ -1546,13 +1546,13 @@ report_assoc_result:
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnDeAuth(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnDeAuth(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
unsigned short reason;
|
unsigned short reason;
|
||||||
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
||||||
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
#ifdef CONFIG_88EU_P2P
|
#ifdef CONFIG_88EU_P2P
|
||||||
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
||||||
#endif /* CONFIG_88EU_P2P */
|
#endif /* CONFIG_88EU_P2P */
|
||||||
|
@ -1626,13 +1626,13 @@ unsigned int OnDeAuth(struct adapter *padapter, union recv_frame *precv_frame)
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnDisassoc(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnDisassoc(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
u16 reason;
|
u16 reason;
|
||||||
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
||||||
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
#ifdef CONFIG_88EU_P2P
|
#ifdef CONFIG_88EU_P2P
|
||||||
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
||||||
#endif /* CONFIG_88EU_P2P */
|
#endif /* CONFIG_88EU_P2P */
|
||||||
|
@ -1688,18 +1688,18 @@ unsigned int OnDisassoc(struct adapter *padapter, union recv_frame *precv_frame)
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAtim(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAtim(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
DBG_88E("%s\n", __func__);
|
DBG_88E("%s\n", __func__);
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int on_action_spct(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int on_action_spct(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
unsigned int ret = _FAIL;
|
unsigned int ret = _FAIL;
|
||||||
struct sta_info *psta = NULL;
|
struct sta_info *psta = NULL;
|
||||||
struct sta_priv *pstapriv = &padapter->stapriv;
|
struct sta_priv *pstapriv = &padapter->stapriv;
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
u8 *frame_body = (u8 *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
|
u8 *frame_body = (u8 *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
|
||||||
u8 category;
|
u8 category;
|
||||||
u8 action;
|
u8 action;
|
||||||
|
@ -1732,17 +1732,17 @@ exit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAction_qos(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAction_qos(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAction_dls(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAction_dls(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAction_back(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
u8 *addr;
|
u8 *addr;
|
||||||
struct sta_info *psta = NULL;
|
struct sta_info *psta = NULL;
|
||||||
|
@ -1752,7 +1752,7 @@ unsigned int OnAction_back(struct adapter *padapter, union recv_frame *precv_fra
|
||||||
unsigned short tid, status, reason_code = 0;
|
unsigned short tid, status, reason_code = 0;
|
||||||
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
struct sta_priv *pstapriv = &padapter->stapriv;
|
struct sta_priv *pstapriv = &padapter->stapriv;
|
||||||
/* check RA matches or not */
|
/* check RA matches or not */
|
||||||
if (memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))/* for if1, sta/ap mode */
|
if (memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))/* for if1, sta/ap mode */
|
||||||
|
@ -3829,13 +3829,13 @@ exit:
|
||||||
|
|
||||||
#endif /* CONFIG_88EU_P2P */
|
#endif /* CONFIG_88EU_P2P */
|
||||||
|
|
||||||
static s32 rtw_action_public_decache(union recv_frame *recv_frame, s32 token)
|
static s32 rtw_action_public_decache(struct recv_frame *recv_frame, s32 token)
|
||||||
{
|
{
|
||||||
struct adapter *adapter = recv_frame->u.hdr.adapter;
|
struct adapter *adapter = recv_frame->adapter;
|
||||||
struct mlme_ext_priv *mlmeext = &(adapter->mlmeextpriv);
|
struct mlme_ext_priv *mlmeext = &(adapter->mlmeextpriv);
|
||||||
u8 *frame = recv_frame->u.hdr.rx_data;
|
u8 *frame = recv_frame->rx_data;
|
||||||
u16 seq_ctrl = ((recv_frame->u.hdr.attrib.seq_num&0xffff) << 4) |
|
u16 seq_ctrl = ((recv_frame->attrib.seq_num&0xffff) << 4) |
|
||||||
(recv_frame->u.hdr.attrib.frag_num & 0xf);
|
(recv_frame->attrib.frag_num & 0xf);
|
||||||
|
|
||||||
if (GetRetry(frame)) {
|
if (GetRetry(frame)) {
|
||||||
if (token >= 0) {
|
if (token >= 0) {
|
||||||
|
@ -3861,14 +3861,14 @@ static s32 rtw_action_public_decache(union recv_frame *recv_frame, s32 token)
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int on_action_public_p2p(union recv_frame *precv_frame)
|
static unsigned int on_action_public_p2p(struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
u8 *frame_body;
|
u8 *frame_body;
|
||||||
u8 dialogToken = 0;
|
u8 dialogToken = 0;
|
||||||
#ifdef CONFIG_88EU_P2P
|
#ifdef CONFIG_88EU_P2P
|
||||||
struct adapter *padapter = precv_frame->u.hdr.adapter;
|
struct adapter *padapter = precv_frame->adapter;
|
||||||
uint len = precv_frame->u.hdr.len;
|
uint len = precv_frame->len;
|
||||||
u8 *p2p_ie;
|
u8 *p2p_ie;
|
||||||
u32 p2p_ielen;
|
u32 p2p_ielen;
|
||||||
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
||||||
|
@ -4151,10 +4151,10 @@ static unsigned int on_action_public_p2p(union recv_frame *precv_frame)
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int on_action_public_vendor(union recv_frame *precv_frame)
|
static unsigned int on_action_public_vendor(struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
unsigned int ret = _FAIL;
|
unsigned int ret = _FAIL;
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
|
u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
|
||||||
|
|
||||||
if (!memcmp(frame_body + 2, P2P_OUI, 4)) {
|
if (!memcmp(frame_body + 2, P2P_OUI, 4)) {
|
||||||
|
@ -4164,10 +4164,10 @@ static unsigned int on_action_public_vendor(union recv_frame *precv_frame)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int on_action_public_default(union recv_frame *precv_frame, u8 action)
|
static unsigned int on_action_public_default(struct recv_frame *precv_frame, u8 action)
|
||||||
{
|
{
|
||||||
unsigned int ret = _FAIL;
|
unsigned int ret = _FAIL;
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
|
u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
|
||||||
u8 token;
|
u8 token;
|
||||||
|
|
||||||
|
@ -4182,10 +4182,10 @@ exit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int on_action_public(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int on_action_public(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
unsigned int ret = _FAIL;
|
unsigned int ret = _FAIL;
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
|
u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
|
||||||
u8 category, action;
|
u8 category, action;
|
||||||
|
|
||||||
|
@ -4211,23 +4211,23 @@ exit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAction_ht(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAction_ht(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAction_wmm(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAction_wmm(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAction_p2p(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAction_p2p(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_88EU_P2P
|
#ifdef CONFIG_88EU_P2P
|
||||||
u8 *frame_body;
|
u8 *frame_body;
|
||||||
u8 category, OUI_Subtype;
|
u8 category, OUI_Subtype;
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
uint len = precv_frame->u.hdr.len;
|
uint len = precv_frame->len;
|
||||||
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
||||||
|
|
||||||
DBG_88E("%s\n", __func__);
|
DBG_88E("%s\n", __func__);
|
||||||
|
@ -4265,13 +4265,13 @@ unsigned int OnAction_p2p(struct adapter *padapter, union recv_frame *precv_fram
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int OnAction(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int OnAction(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned char category;
|
unsigned char category;
|
||||||
struct action_handler *ptable;
|
struct action_handler *ptable;
|
||||||
unsigned char *frame_body;
|
unsigned char *frame_body;
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
|
|
||||||
frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
|
frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
|
||||||
|
|
||||||
|
@ -4285,7 +4285,7 @@ unsigned int OnAction(struct adapter *padapter, union recv_frame *precv_frame)
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int DoReserved(struct adapter *padapter, union recv_frame *precv_frame)
|
unsigned int DoReserved(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -6491,14 +6491,14 @@ void site_survey(struct adapter *padapter)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* collect bss info from Beacon and Probe request/response frames. */
|
/* collect bss info from Beacon and Probe request/response frames. */
|
||||||
u8 collect_bss_info(struct adapter *padapter, union recv_frame *precv_frame, struct wlan_bssid_ex *bssid)
|
u8 collect_bss_info(struct adapter *padapter, struct recv_frame *precv_frame, struct wlan_bssid_ex *bssid)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
u32 len;
|
u32 len;
|
||||||
u8 *p;
|
u8 *p;
|
||||||
u16 val16, subtype;
|
u16 val16, subtype;
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
u32 packet_len = precv_frame->u.hdr.len;
|
u32 packet_len = precv_frame->len;
|
||||||
u8 ie_offset;
|
u8 ie_offset;
|
||||||
struct registry_priv *pregistrypriv = &padapter->registrypriv;
|
struct registry_priv *pregistrypriv = &padapter->registrypriv;
|
||||||
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
||||||
|
@ -6538,9 +6538,9 @@ u8 collect_bss_info(struct adapter *padapter, union recv_frame *precv_frame, str
|
||||||
memcpy(bssid->IEs, (pframe + sizeof(struct rtw_ieee80211_hdr_3addr)), bssid->IELength);
|
memcpy(bssid->IEs, (pframe + sizeof(struct rtw_ieee80211_hdr_3addr)), bssid->IELength);
|
||||||
|
|
||||||
/* get the signal strength */
|
/* get the signal strength */
|
||||||
bssid->Rssi = precv_frame->u.hdr.attrib.phy_info.recvpower; /* in dBM.raw data */
|
bssid->Rssi = precv_frame->attrib.phy_info.recvpower; /* in dBM.raw data */
|
||||||
bssid->PhyInfo.SignalQuality = precv_frame->u.hdr.attrib.phy_info.SignalQuality;/* in percentage */
|
bssid->PhyInfo.SignalQuality = precv_frame->attrib.phy_info.SignalQuality;/* in percentage */
|
||||||
bssid->PhyInfo.SignalStrength = precv_frame->u.hdr.attrib.phy_info.SignalStrength;/* in percentage */
|
bssid->PhyInfo.SignalStrength = precv_frame->attrib.phy_info.SignalStrength;/* in percentage */
|
||||||
rtw_hal_get_def_var(padapter, HAL_DEF_CURRENT_ANTENNA, &bssid->PhyInfo.Optimum_antenna);
|
rtw_hal_get_def_var(padapter, HAL_DEF_CURRENT_ANTENNA, &bssid->PhyInfo.Optimum_antenna);
|
||||||
|
|
||||||
/* checking SSID */
|
/* checking SSID */
|
||||||
|
@ -6986,7 +6986,7 @@ Following are the functions to report events
|
||||||
|
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
void report_survey_event(struct adapter *padapter, union recv_frame *precv_frame)
|
void report_survey_event(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
struct cmd_obj *pcmd_obj;
|
struct cmd_obj *pcmd_obj;
|
||||||
u8 *pevtcmd;
|
u8 *pevtcmd;
|
||||||
|
@ -6995,8 +6995,8 @@ void report_survey_event(struct adapter *padapter, union recv_frame *precv_frame
|
||||||
struct C2HEvent_Header *pc2h_evt_hdr;
|
struct C2HEvent_Header *pc2h_evt_hdr;
|
||||||
struct mlme_ext_priv *pmlmeext;
|
struct mlme_ext_priv *pmlmeext;
|
||||||
struct cmd_priv *pcmdpriv;
|
struct cmd_priv *pcmdpriv;
|
||||||
/* u8 *pframe = precv_frame->u.hdr.rx_data; */
|
/* u8 *pframe = precv_frame->rx_data; */
|
||||||
/* uint len = precv_frame->u.hdr.len; */
|
/* uint len = precv_frame->len; */
|
||||||
|
|
||||||
if (!padapter)
|
if (!padapter)
|
||||||
return;
|
return;
|
||||||
|
|
324
core/rtw_recv.c
324
core/rtw_recv.c
|
@ -58,7 +58,7 @@ int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
union recv_frame *precvframe;
|
struct recv_frame *precvframe;
|
||||||
|
|
||||||
int res = _SUCCESS;
|
int res = _SUCCESS;
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter)
|
||||||
|
|
||||||
rtw_os_recv_resource_init(precvpriv, padapter);
|
rtw_os_recv_resource_init(precvpriv, padapter);
|
||||||
|
|
||||||
precvpriv->pallocated_frame_buf = rtw_zvmalloc(NR_RECVFRAME * sizeof(union recv_frame) + RXFRAME_ALIGN_SZ);
|
precvpriv->pallocated_frame_buf = rtw_zvmalloc(NR_RECVFRAME * sizeof(struct recv_frame) + RXFRAME_ALIGN_SZ);
|
||||||
|
|
||||||
if (precvpriv->pallocated_frame_buf == NULL) {
|
if (precvpriv->pallocated_frame_buf == NULL) {
|
||||||
res = _FAIL;
|
res = _FAIL;
|
||||||
|
@ -83,18 +83,18 @@ int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter)
|
||||||
|
|
||||||
precvpriv->precv_frame_buf = (u8 *)N_BYTE_ALIGMENT((size_t)(precvpriv->pallocated_frame_buf), RXFRAME_ALIGN_SZ);
|
precvpriv->precv_frame_buf = (u8 *)N_BYTE_ALIGMENT((size_t)(precvpriv->pallocated_frame_buf), RXFRAME_ALIGN_SZ);
|
||||||
|
|
||||||
precvframe = (union recv_frame *)precvpriv->precv_frame_buf;
|
precvframe = (struct recv_frame *)precvpriv->precv_frame_buf;
|
||||||
|
|
||||||
for (i = 0; i < NR_RECVFRAME; i++) {
|
for (i = 0; i < NR_RECVFRAME; i++) {
|
||||||
INIT_LIST_HEAD(&(precvframe->u.list));
|
INIT_LIST_HEAD(&(precvframe->list));
|
||||||
|
|
||||||
rtw_list_insert_tail(&(precvframe->u.list), &(precvpriv->free_recv_queue.queue));
|
rtw_list_insert_tail(&(precvframe->list), &(precvpriv->free_recv_queue.queue));
|
||||||
|
|
||||||
res = rtw_os_recv_resource_alloc(padapter, precvframe);
|
res = rtw_os_recv_resource_alloc(padapter, precvframe);
|
||||||
|
|
||||||
precvframe->u.hdr.len = 0;
|
precvframe->len = 0;
|
||||||
|
|
||||||
precvframe->u.hdr.adapter = padapter;
|
precvframe->adapter = padapter;
|
||||||
precvframe++;
|
precvframe++;
|
||||||
}
|
}
|
||||||
precvpriv->rx_pending_cnt = 1;
|
precvpriv->rx_pending_cnt = 1;
|
||||||
|
@ -133,16 +133,16 @@ void _rtw_free_recv_priv (struct recv_priv *precvpriv)
|
||||||
rtw_os_recv_resource_free(precvpriv);
|
rtw_os_recv_resource_free(precvpriv);
|
||||||
|
|
||||||
if (precvpriv->pallocated_frame_buf) {
|
if (precvpriv->pallocated_frame_buf) {
|
||||||
rtw_vmfree(precvpriv->pallocated_frame_buf, NR_RECVFRAME * sizeof(union recv_frame) + RXFRAME_ALIGN_SZ);
|
rtw_vmfree(precvpriv->pallocated_frame_buf, NR_RECVFRAME * sizeof(struct recv_frame) + RXFRAME_ALIGN_SZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
rtw_hal_free_recv_priv(padapter);
|
rtw_hal_free_recv_priv(padapter);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
union recv_frame *_rtw_alloc_recvframe (struct __queue *pfree_recv_queue)
|
struct recv_frame *_rtw_alloc_recvframe (struct __queue *pfree_recv_queue)
|
||||||
{
|
{
|
||||||
union recv_frame *precvframe;
|
struct recv_frame *precvframe;
|
||||||
struct list_head *plist, *phead;
|
struct list_head *plist, *phead;
|
||||||
struct adapter *padapter;
|
struct adapter *padapter;
|
||||||
struct recv_priv *precvpriv;
|
struct recv_priv *precvpriv;
|
||||||
|
@ -154,10 +154,10 @@ union recv_frame *_rtw_alloc_recvframe (struct __queue *pfree_recv_queue)
|
||||||
|
|
||||||
plist = get_next(phead);
|
plist = get_next(phead);
|
||||||
|
|
||||||
precvframe = LIST_CONTAINOR(plist, union recv_frame, u);
|
precvframe = LIST_CONTAINOR(plist, struct recv_frame, list);
|
||||||
|
|
||||||
rtw_list_delete(&precvframe->u.hdr.list);
|
rtw_list_delete(&precvframe->list);
|
||||||
padapter = precvframe->u.hdr.adapter;
|
padapter = precvframe->adapter;
|
||||||
if (padapter != NULL) {
|
if (padapter != NULL) {
|
||||||
precvpriv = &padapter->recvpriv;
|
precvpriv = &padapter->recvpriv;
|
||||||
if (pfree_recv_queue == &precvpriv->free_recv_queue)
|
if (pfree_recv_queue == &precvpriv->free_recv_queue)
|
||||||
|
@ -168,9 +168,9 @@ union recv_frame *_rtw_alloc_recvframe (struct __queue *pfree_recv_queue)
|
||||||
return precvframe;
|
return precvframe;
|
||||||
}
|
}
|
||||||
|
|
||||||
union recv_frame *rtw_alloc_recvframe (struct __queue *pfree_recv_queue)
|
struct recv_frame *rtw_alloc_recvframe (struct __queue *pfree_recv_queue)
|
||||||
{
|
{
|
||||||
union recv_frame *precvframe;
|
struct recv_frame *precvframe;
|
||||||
|
|
||||||
spin_lock_bh(&pfree_recv_queue->lock);
|
spin_lock_bh(&pfree_recv_queue->lock);
|
||||||
|
|
||||||
|
@ -181,35 +181,35 @@ union recv_frame *rtw_alloc_recvframe (struct __queue *pfree_recv_queue)
|
||||||
return precvframe;
|
return precvframe;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtw_init_recvframe(union recv_frame *precvframe, struct recv_priv *precvpriv)
|
void rtw_init_recvframe(struct recv_frame *precvframe, struct recv_priv *precvpriv)
|
||||||
{
|
{
|
||||||
/* Perry: This can be removed */
|
/* Perry: This can be removed */
|
||||||
INIT_LIST_HEAD(&precvframe->u.hdr.list);
|
INIT_LIST_HEAD(&precvframe->list);
|
||||||
|
|
||||||
precvframe->u.hdr.len = 0;
|
precvframe->len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rtw_free_recvframe(union recv_frame *precvframe, struct __queue *pfree_recv_queue)
|
int rtw_free_recvframe(struct recv_frame *precvframe, struct __queue *pfree_recv_queue)
|
||||||
{
|
{
|
||||||
struct adapter *padapter;
|
struct adapter *padapter;
|
||||||
struct recv_priv *precvpriv;
|
struct recv_priv *precvpriv;
|
||||||
|
|
||||||
if (!precvframe)
|
if (!precvframe)
|
||||||
return _FAIL;
|
return _FAIL;
|
||||||
padapter = precvframe->u.hdr.adapter;
|
padapter = precvframe->adapter;
|
||||||
precvpriv = &padapter->recvpriv;
|
precvpriv = &padapter->recvpriv;
|
||||||
if (precvframe->u.hdr.pkt) {
|
if (precvframe->pkt) {
|
||||||
dev_kfree_skb_any(precvframe->u.hdr.pkt);/* free skb by driver */
|
dev_kfree_skb_any(precvframe->pkt);/* free skb by driver */
|
||||||
precvframe->u.hdr.pkt = NULL;
|
precvframe->pkt = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_bh(&pfree_recv_queue->lock);
|
spin_lock_bh(&pfree_recv_queue->lock);
|
||||||
|
|
||||||
rtw_list_delete(&(precvframe->u.hdr.list));
|
rtw_list_delete(&(precvframe->list));
|
||||||
|
|
||||||
precvframe->u.hdr.len = 0;
|
precvframe->len = 0;
|
||||||
|
|
||||||
rtw_list_insert_tail(&(precvframe->u.hdr.list), get_list_head(pfree_recv_queue));
|
rtw_list_insert_tail(&(precvframe->list), get_list_head(pfree_recv_queue));
|
||||||
|
|
||||||
if (padapter != NULL) {
|
if (padapter != NULL) {
|
||||||
if (pfree_recv_queue == &precvpriv->free_recv_queue)
|
if (pfree_recv_queue == &precvpriv->free_recv_queue)
|
||||||
|
@ -221,13 +221,13 @@ int rtw_free_recvframe(union recv_frame *precvframe, struct __queue *pfree_recv_
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int _rtw_enqueue_recvframe(union recv_frame *precvframe, struct __queue *queue)
|
int _rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue)
|
||||||
{
|
{
|
||||||
struct adapter *padapter = precvframe->u.hdr.adapter;
|
struct adapter *padapter = precvframe->adapter;
|
||||||
struct recv_priv *precvpriv = &padapter->recvpriv;
|
struct recv_priv *precvpriv = &padapter->recvpriv;
|
||||||
|
|
||||||
rtw_list_delete(&(precvframe->u.hdr.list));
|
rtw_list_delete(&(precvframe->list));
|
||||||
rtw_list_insert_tail(&(precvframe->u.hdr.list), get_list_head(queue));
|
rtw_list_insert_tail(&(precvframe->list), get_list_head(queue));
|
||||||
|
|
||||||
if (padapter != NULL) {
|
if (padapter != NULL) {
|
||||||
if (queue == &precvpriv->free_recv_queue)
|
if (queue == &precvpriv->free_recv_queue)
|
||||||
|
@ -237,7 +237,7 @@ int _rtw_enqueue_recvframe(union recv_frame *precvframe, struct __queue *queue)
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rtw_enqueue_recvframe(union recv_frame *precvframe, struct __queue *queue)
|
int rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ using spinlock to protect
|
||||||
|
|
||||||
void rtw_free_recvframe_queue(struct __queue *pframequeue, struct __queue *pfree_recv_queue)
|
void rtw_free_recvframe_queue(struct __queue *pframequeue, struct __queue *pfree_recv_queue)
|
||||||
{
|
{
|
||||||
union recv_frame *precvframe;
|
struct recv_frame *precvframe;
|
||||||
struct list_head *plist, *phead;
|
struct list_head *plist, *phead;
|
||||||
|
|
||||||
spin_lock(&pframequeue->lock);
|
spin_lock(&pframequeue->lock);
|
||||||
|
@ -267,7 +267,7 @@ void rtw_free_recvframe_queue(struct __queue *pframequeue, struct __queue *pfre
|
||||||
plist = get_next(phead);
|
plist = get_next(phead);
|
||||||
|
|
||||||
while (rtw_end_of_queue_search(phead, plist) == false) {
|
while (rtw_end_of_queue_search(phead, plist) == false) {
|
||||||
precvframe = LIST_CONTAINOR(plist, union recv_frame, u);
|
precvframe = LIST_CONTAINOR(plist, struct recv_frame, list);
|
||||||
|
|
||||||
plist = get_next(plist);
|
plist = get_next(plist);
|
||||||
|
|
||||||
|
@ -281,7 +281,7 @@ void rtw_free_recvframe_queue(struct __queue *pframequeue, struct __queue *pfre
|
||||||
u32 rtw_free_uc_swdec_pending_queue(struct adapter *adapter)
|
u32 rtw_free_uc_swdec_pending_queue(struct adapter *adapter)
|
||||||
{
|
{
|
||||||
u32 cnt = 0;
|
u32 cnt = 0;
|
||||||
union recv_frame *pending_frame;
|
struct recv_frame *pending_frame;
|
||||||
while ((pending_frame = rtw_alloc_recvframe(&adapter->recvpriv.uc_swdec_pending_queue))) {
|
while ((pending_frame = rtw_alloc_recvframe(&adapter->recvpriv.uc_swdec_pending_queue))) {
|
||||||
rtw_free_recvframe(pending_frame, &adapter->recvpriv.free_recv_queue);
|
rtw_free_recvframe(pending_frame, &adapter->recvpriv.free_recv_queue);
|
||||||
DBG_88E("%s: dequeue uc_swdec_pending_queue\n", __func__);
|
DBG_88E("%s: dequeue uc_swdec_pending_queue\n", __func__);
|
||||||
|
@ -341,7 +341,7 @@ struct recv_buf *rtw_dequeue_recvbuf (struct __queue *queue)
|
||||||
return precvbuf;
|
return precvbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int recvframe_chkmic(struct adapter *adapter, union recv_frame *precvframe)
|
static int recvframe_chkmic(struct adapter *adapter, struct recv_frame *precvframe)
|
||||||
{
|
{
|
||||||
int i, res = _SUCCESS;
|
int i, res = _SUCCESS;
|
||||||
u32 datalen;
|
u32 datalen;
|
||||||
|
@ -350,7 +350,7 @@ static int recvframe_chkmic(struct adapter *adapter, union recv_frame *precvfra
|
||||||
u8 *pframe, *payload, *pframemic;
|
u8 *pframe, *payload, *pframemic;
|
||||||
u8 *mickey;
|
u8 *mickey;
|
||||||
struct sta_info *stainfo;
|
struct sta_info *stainfo;
|
||||||
struct rx_pkt_attrib *prxattrib = &precvframe->u.hdr.attrib;
|
struct rx_pkt_attrib *prxattrib = &precvframe->attrib;
|
||||||
struct security_priv *psecuritypriv = &adapter->securitypriv;
|
struct security_priv *psecuritypriv = &adapter->securitypriv;
|
||||||
|
|
||||||
struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
|
||||||
|
@ -381,8 +381,8 @@ static int recvframe_chkmic(struct adapter *adapter, union recv_frame *precvfra
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("\n recvframe_chkmic: unicast key\n"));
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("\n recvframe_chkmic: unicast key\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
datalen = precvframe->u.hdr.len-prxattrib->hdrlen-prxattrib->iv_len-prxattrib->icv_len-8;/* icv_len included the mic code */
|
datalen = precvframe->len-prxattrib->hdrlen-prxattrib->iv_len-prxattrib->icv_len-8;/* icv_len included the mic code */
|
||||||
pframe = precvframe->u.hdr.rx_data;
|
pframe = precvframe->rx_data;
|
||||||
payload = pframe+prxattrib->hdrlen+prxattrib->iv_len;
|
payload = pframe+prxattrib->hdrlen+prxattrib->iv_len;
|
||||||
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("\n prxattrib->iv_len=%d prxattrib->icv_len=%d\n", prxattrib->iv_len, prxattrib->icv_len));
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("\n prxattrib->iv_len=%d prxattrib->icv_len=%d\n", prxattrib->iv_len, prxattrib->icv_len));
|
||||||
|
@ -415,15 +415,15 @@ static int recvframe_chkmic(struct adapter *adapter, union recv_frame *precvfra
|
||||||
*(pframemic-10), *(pframemic-9)));
|
*(pframemic-10), *(pframemic-9)));
|
||||||
{
|
{
|
||||||
uint i;
|
uint i;
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("\n ======demp packet (len=%d)======\n", precvframe->u.hdr.len));
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("\n ======demp packet (len=%d)======\n", precvframe->len));
|
||||||
for (i = 0; i < precvframe->u.hdr.len; i = i+8) {
|
for (i = 0; i < precvframe->len; i = i+8) {
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x",
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x",
|
||||||
*(precvframe->u.hdr.rx_data+i), *(precvframe->u.hdr.rx_data+i+1),
|
*(precvframe->rx_data+i), *(precvframe->rx_data+i+1),
|
||||||
*(precvframe->u.hdr.rx_data+i+2), *(precvframe->u.hdr.rx_data+i+3),
|
*(precvframe->rx_data+i+2), *(precvframe->rx_data+i+3),
|
||||||
*(precvframe->u.hdr.rx_data+i+4), *(precvframe->u.hdr.rx_data+i+5),
|
*(precvframe->rx_data+i+4), *(precvframe->rx_data+i+5),
|
||||||
*(precvframe->u.hdr.rx_data+i+6), *(precvframe->u.hdr.rx_data+i+7)));
|
*(precvframe->rx_data+i+6), *(precvframe->rx_data+i+7)));
|
||||||
}
|
}
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("\n ====== demp packet end [len=%d]======\n", precvframe->u.hdr.len));
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("\n ====== demp packet end [len=%d]======\n", precvframe->len));
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("\n hrdlen=%d,\n", prxattrib->hdrlen));
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("\n hrdlen=%d,\n", prxattrib->hdrlen));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -466,17 +466,17 @@ exit:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* decrypt and set the ivlen, icvlen of the recv_frame */
|
/* decrypt and set the ivlen, icvlen of the recv_frame */
|
||||||
static union recv_frame *decryptor(struct adapter *padapter, union recv_frame *precv_frame)
|
static struct recv_frame *decryptor(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
struct rx_pkt_attrib *prxattrib = &precv_frame->u.hdr.attrib;
|
struct rx_pkt_attrib *prxattrib = &precv_frame->attrib;
|
||||||
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
||||||
union recv_frame *return_packet = precv_frame;
|
struct recv_frame *return_packet = precv_frame;
|
||||||
u32 res = _SUCCESS;
|
u32 res = _SUCCESS;
|
||||||
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("prxstat->decrypted=%x prxattrib->encrypt=0x%03x\n", prxattrib->bdecrypted, prxattrib->encrypt));
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("prxstat->decrypted=%x prxattrib->encrypt=0x%03x\n", prxattrib->bdecrypted, prxattrib->encrypt));
|
||||||
|
|
||||||
if (prxattrib->encrypt > 0) {
|
if (prxattrib->encrypt > 0) {
|
||||||
u8 *iv = precv_frame->u.hdr.rx_data+prxattrib->hdrlen;
|
u8 *iv = precv_frame->rx_data+prxattrib->hdrlen;
|
||||||
prxattrib->key_index = (((iv[3])>>6)&0x3);
|
prxattrib->key_index = (((iv[3])>>6)&0x3);
|
||||||
|
|
||||||
if (prxattrib->key_index > WEP_KEYS) {
|
if (prxattrib->key_index > WEP_KEYS) {
|
||||||
|
@ -528,15 +528,15 @@ static union recv_frame *decryptor(struct adapter *padapter, union recv_frame *p
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set the security information in the recv_frame */
|
/* set the security information in the recv_frame */
|
||||||
static union recv_frame *portctrl(struct adapter *adapter, union recv_frame *precv_frame)
|
static struct recv_frame *portctrl(struct adapter *adapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
u8 *psta_addr = NULL, *ptr;
|
u8 *psta_addr, *ptr;
|
||||||
uint auth_alg;
|
uint auth_alg;
|
||||||
struct recv_frame_hdr *pfhdr;
|
struct recv_frame *pfhdr;
|
||||||
struct sta_info *psta;
|
struct sta_info *psta;
|
||||||
struct sta_priv *pstapriv;
|
struct sta_priv *pstapriv;
|
||||||
union recv_frame *prtnframe;
|
struct recv_frame *prtnframe;
|
||||||
u16 ether_type = 0;
|
u16 ether_type;
|
||||||
u16 eapol_type = 0x888e;/* for Funia BD's WPA issue */
|
u16 eapol_type = 0x888e;/* for Funia BD's WPA issue */
|
||||||
struct rx_pkt_attrib *pattrib;
|
struct rx_pkt_attrib *pattrib;
|
||||||
__be16 be_tmp;
|
__be16 be_tmp;
|
||||||
|
@ -545,8 +545,8 @@ static union recv_frame *portctrl(struct adapter *adapter, union recv_frame *pre
|
||||||
|
|
||||||
auth_alg = adapter->securitypriv.dot11AuthAlgrthm;
|
auth_alg = adapter->securitypriv.dot11AuthAlgrthm;
|
||||||
|
|
||||||
ptr = get_recvframe_data(precv_frame);
|
ptr = precv_frame->rx_data;
|
||||||
pfhdr = &precv_frame->u.hdr;
|
pfhdr = precv_frame;
|
||||||
pattrib = &pfhdr->attrib;
|
pattrib = &pfhdr->attrib;
|
||||||
psta_addr = pattrib->ta;
|
psta_addr = pattrib->ta;
|
||||||
|
|
||||||
|
@ -581,7 +581,7 @@ static union recv_frame *portctrl(struct adapter *adapter, union recv_frame *pre
|
||||||
/* allowed */
|
/* allowed */
|
||||||
/* check decryption status, and decrypt the frame if needed */
|
/* check decryption status, and decrypt the frame if needed */
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("########portctrl:psta->ieee8021x_blocked==0\n"));
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("########portctrl:psta->ieee8021x_blocked==0\n"));
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("portctrl:precv_frame->hdr.attrib.privacy=%x\n", precv_frame->u.hdr.attrib.privacy));
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("portctrl:precv_frame->hdr.attrib.privacy=%x\n", precv_frame->attrib.privacy));
|
||||||
|
|
||||||
if (pattrib->bdecrypted == 0)
|
if (pattrib->bdecrypted == 0)
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("portctrl:prxstat->decrypted=%x\n", pattrib->bdecrypted));
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("portctrl:prxstat->decrypted=%x\n", pattrib->bdecrypted));
|
||||||
|
@ -604,12 +604,12 @@ static union recv_frame *portctrl(struct adapter *adapter, union recv_frame *pre
|
||||||
return prtnframe;
|
return prtnframe;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int recv_decache(union recv_frame *precv_frame, u8 bretry, struct stainfo_rxcache *prxcache)
|
static int recv_decache(struct recv_frame *precv_frame, u8 bretry, struct stainfo_rxcache *prxcache)
|
||||||
{
|
{
|
||||||
int tid = precv_frame->u.hdr.attrib.priority;
|
int tid = precv_frame->attrib.priority;
|
||||||
|
|
||||||
u16 seq_ctrl = ((precv_frame->u.hdr.attrib.seq_num&0xffff) << 4) |
|
u16 seq_ctrl = ((precv_frame->attrib.seq_num&0xffff) << 4) |
|
||||||
(precv_frame->u.hdr.attrib.frag_num & 0xf);
|
(precv_frame->attrib.frag_num & 0xf);
|
||||||
|
|
||||||
if (tid > 15) {
|
if (tid > 15) {
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_, ("recv_decache, (tid>15)! seq_ctrl=0x%x, tid=0x%x\n", seq_ctrl, tid));
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_, ("recv_decache, (tid>15)! seq_ctrl=0x%x, tid=0x%x\n", seq_ctrl, tid));
|
||||||
|
@ -630,13 +630,13 @@ static int recv_decache(union recv_frame *precv_frame, u8 bretry, struct stainfo
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void process_pwrbit_data(struct adapter *padapter, union recv_frame *precv_frame);
|
void process_pwrbit_data(struct adapter *padapter, struct recv_frame *precv_frame);
|
||||||
void process_pwrbit_data(struct adapter *padapter, union recv_frame *precv_frame)
|
void process_pwrbit_data(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_88EU_AP_MODE
|
#ifdef CONFIG_88EU_AP_MODE
|
||||||
unsigned char pwrbit;
|
unsigned char pwrbit;
|
||||||
u8 *ptr = precv_frame->u.hdr.rx_data;
|
u8 *ptr = precv_frame->rx_data;
|
||||||
struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
|
||||||
struct sta_priv *pstapriv = &padapter->stapriv;
|
struct sta_priv *pstapriv = &padapter->stapriv;
|
||||||
struct sta_info *psta = NULL;
|
struct sta_info *psta = NULL;
|
||||||
|
|
||||||
|
@ -657,10 +657,10 @@ void process_pwrbit_data(struct adapter *padapter, union recv_frame *precv_frame
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void process_wmmps_data(struct adapter *padapter, union recv_frame *precv_frame)
|
static void process_wmmps_data(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_88EU_AP_MODE
|
#ifdef CONFIG_88EU_AP_MODE
|
||||||
struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
|
||||||
struct sta_priv *pstapriv = &padapter->stapriv;
|
struct sta_priv *pstapriv = &padapter->stapriv;
|
||||||
struct sta_info *psta = NULL;
|
struct sta_info *psta = NULL;
|
||||||
|
|
||||||
|
@ -712,12 +712,12 @@ static void process_wmmps_data(struct adapter *padapter, union recv_frame *precv
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void count_rx_stats(struct adapter *padapter, union recv_frame *prframe, struct sta_info *sta)
|
static void count_rx_stats(struct adapter *padapter, struct recv_frame *prframe, struct sta_info *sta)
|
||||||
{
|
{
|
||||||
int sz;
|
int sz;
|
||||||
struct sta_info *psta = NULL;
|
struct sta_info *psta = NULL;
|
||||||
struct stainfo_stats *pstats = NULL;
|
struct stainfo_stats *pstats = NULL;
|
||||||
struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &prframe->attrib;
|
||||||
struct recv_priv *precvpriv = &padapter->recvpriv;
|
struct recv_priv *precvpriv = &padapter->recvpriv;
|
||||||
|
|
||||||
sz = get_recvframe_len(prframe);
|
sz = get_recvframe_len(prframe);
|
||||||
|
@ -731,7 +731,7 @@ static void count_rx_stats(struct adapter *padapter, union recv_frame *prframe,
|
||||||
if (sta)
|
if (sta)
|
||||||
psta = sta;
|
psta = sta;
|
||||||
else
|
else
|
||||||
psta = prframe->u.hdr.psta;
|
psta = prframe->psta;
|
||||||
|
|
||||||
if (psta) {
|
if (psta) {
|
||||||
pstats = &psta->sta_stats;
|
pstats = &psta->sta_stats;
|
||||||
|
@ -743,15 +743,15 @@ static void count_rx_stats(struct adapter *padapter, union recv_frame *prframe,
|
||||||
|
|
||||||
int sta2sta_data_frame(
|
int sta2sta_data_frame(
|
||||||
struct adapter *adapter,
|
struct adapter *adapter,
|
||||||
union recv_frame *precv_frame,
|
struct recv_frame *precv_frame,
|
||||||
struct sta_info **psta
|
struct sta_info **psta
|
||||||
);
|
);
|
||||||
|
|
||||||
int sta2sta_data_frame(struct adapter *adapter, union recv_frame *precv_frame, struct sta_info **psta)
|
int sta2sta_data_frame(struct adapter *adapter, struct recv_frame *precv_frame, struct sta_info **psta)
|
||||||
{
|
{
|
||||||
u8 *ptr = precv_frame->u.hdr.rx_data;
|
u8 *ptr = precv_frame->rx_data;
|
||||||
int ret = _SUCCESS;
|
int ret = _SUCCESS;
|
||||||
struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
|
||||||
struct sta_priv *pstapriv = &adapter->stapriv;
|
struct sta_priv *pstapriv = &adapter->stapriv;
|
||||||
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
|
||||||
u8 *mybssid = get_bssid(pmlmepriv);
|
u8 *mybssid = get_bssid(pmlmepriv);
|
||||||
|
@ -839,11 +839,11 @@ exit:
|
||||||
|
|
||||||
static int ap2sta_data_frame (
|
static int ap2sta_data_frame (
|
||||||
struct adapter *adapter,
|
struct adapter *adapter,
|
||||||
union recv_frame *precv_frame,
|
struct recv_frame *precv_frame,
|
||||||
struct sta_info **psta)
|
struct sta_info **psta)
|
||||||
{
|
{
|
||||||
u8 *ptr = precv_frame->u.hdr.rx_data;
|
u8 *ptr = precv_frame->rx_data;
|
||||||
struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
|
||||||
int ret = _SUCCESS;
|
int ret = _SUCCESS;
|
||||||
struct sta_priv *pstapriv = &adapter->stapriv;
|
struct sta_priv *pstapriv = &adapter->stapriv;
|
||||||
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
|
||||||
|
@ -946,13 +946,13 @@ exit:
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sta2ap_data_frame(struct adapter *adapter,
|
static int sta2ap_data_frame(struct adapter *adapter,
|
||||||
union recv_frame *precv_frame,
|
struct recv_frame *precv_frame,
|
||||||
struct sta_info **psta)
|
struct sta_info **psta)
|
||||||
{
|
{
|
||||||
struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
|
||||||
struct sta_priv *pstapriv = &adapter->stapriv;
|
struct sta_priv *pstapriv = &adapter->stapriv;
|
||||||
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
|
||||||
u8 *ptr = precv_frame->u.hdr.rx_data;
|
u8 *ptr = precv_frame->rx_data;
|
||||||
unsigned char *mybssid = get_bssid(pmlmepriv);
|
unsigned char *mybssid = get_bssid(pmlmepriv);
|
||||||
int ret = _SUCCESS;
|
int ret = _SUCCESS;
|
||||||
|
|
||||||
|
@ -1004,13 +1004,13 @@ exit:
|
||||||
}
|
}
|
||||||
|
|
||||||
static int validate_recv_ctrl_frame(struct adapter *padapter,
|
static int validate_recv_ctrl_frame(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame)
|
struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_88EU_AP_MODE
|
#ifdef CONFIG_88EU_AP_MODE
|
||||||
struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
|
||||||
struct sta_priv *pstapriv = &padapter->stapriv;
|
struct sta_priv *pstapriv = &padapter->stapriv;
|
||||||
u8 *pframe = precv_frame->u.hdr.rx_data;
|
u8 *pframe = precv_frame->rx_data;
|
||||||
/* uint len = precv_frame->u.hdr.len; */
|
/* uint len = precv_frame->len; */
|
||||||
|
|
||||||
if (GetFrameType(pframe) != WIFI_CTRL_TYPE)
|
if (GetFrameType(pframe) != WIFI_CTRL_TYPE)
|
||||||
return _FAIL;
|
return _FAIL;
|
||||||
|
@ -1126,10 +1126,10 @@ static int validate_recv_ctrl_frame(struct adapter *padapter,
|
||||||
return _FAIL;
|
return _FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
union recv_frame *recvframe_chk_defrag(struct adapter *padapter, union recv_frame *precv_frame);
|
struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, struct recv_frame *precv_frame);
|
||||||
|
|
||||||
static int validate_recv_mgnt_frame(struct adapter *padapter,
|
static int validate_recv_mgnt_frame(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame)
|
struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
struct sta_info *psta;
|
struct sta_info *psta;
|
||||||
|
|
||||||
|
@ -1142,18 +1142,18 @@ static int validate_recv_mgnt_frame(struct adapter *padapter,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* for rx pkt statistics */
|
/* for rx pkt statistics */
|
||||||
psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(precv_frame->u.hdr.rx_data));
|
psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(precv_frame->rx_data));
|
||||||
if (psta) {
|
if (psta) {
|
||||||
psta->sta_stats.rx_mgnt_pkts++;
|
psta->sta_stats.rx_mgnt_pkts++;
|
||||||
if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_BEACON) {
|
if (GetFrameSubType(precv_frame->rx_data) == WIFI_BEACON) {
|
||||||
psta->sta_stats.rx_beacon_pkts++;
|
psta->sta_stats.rx_beacon_pkts++;
|
||||||
} else if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_PROBEREQ) {
|
} else if (GetFrameSubType(precv_frame->rx_data) == WIFI_PROBEREQ) {
|
||||||
psta->sta_stats.rx_probereq_pkts++;
|
psta->sta_stats.rx_probereq_pkts++;
|
||||||
} else if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_PROBERSP) {
|
} else if (GetFrameSubType(precv_frame->rx_data) == WIFI_PROBERSP) {
|
||||||
if (!memcmp(padapter->eeprompriv.mac_addr, GetAddr1Ptr(precv_frame->u.hdr.rx_data), ETH_ALEN))
|
if (!memcmp(padapter->eeprompriv.mac_addr, GetAddr1Ptr(precv_frame->rx_data), ETH_ALEN))
|
||||||
psta->sta_stats.rx_probersp_pkts++;
|
psta->sta_stats.rx_probersp_pkts++;
|
||||||
else if (is_broadcast_mac_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data)) ||
|
else if (is_broadcast_mac_addr(GetAddr1Ptr(precv_frame->rx_data)) ||
|
||||||
is_multicast_mac_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data)))
|
is_multicast_mac_addr(GetAddr1Ptr(precv_frame->rx_data)))
|
||||||
psta->sta_stats.rx_probersp_bm_pkts++;
|
psta->sta_stats.rx_probersp_bm_pkts++;
|
||||||
else
|
else
|
||||||
psta->sta_stats.rx_probersp_uo_pkts++;
|
psta->sta_stats.rx_probersp_uo_pkts++;
|
||||||
|
@ -1166,13 +1166,13 @@ static int validate_recv_mgnt_frame(struct adapter *padapter,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int validate_recv_data_frame(struct adapter *adapter,
|
static int validate_recv_data_frame(struct adapter *adapter,
|
||||||
union recv_frame *precv_frame)
|
struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
u8 bretry;
|
u8 bretry;
|
||||||
u8 *psa, *pda, *pbssid;
|
u8 *psa, *pda, *pbssid;
|
||||||
struct sta_info *psta = NULL;
|
struct sta_info *psta = NULL;
|
||||||
u8 *ptr = precv_frame->u.hdr.rx_data;
|
u8 *ptr = precv_frame->rx_data;
|
||||||
struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
|
||||||
struct security_priv *psecuritypriv = &adapter->securitypriv;
|
struct security_priv *psecuritypriv = &adapter->securitypriv;
|
||||||
int ret = _SUCCESS;
|
int ret = _SUCCESS;
|
||||||
|
|
||||||
|
@ -1232,7 +1232,7 @@ static int validate_recv_data_frame(struct adapter *adapter,
|
||||||
|
|
||||||
/* psta->rssi = prxcmd->rssi; */
|
/* psta->rssi = prxcmd->rssi; */
|
||||||
/* psta->signal_quality = prxcmd->sq; */
|
/* psta->signal_quality = prxcmd->sq; */
|
||||||
precv_frame->u.hdr.psta = psta;
|
precv_frame->psta = psta;
|
||||||
|
|
||||||
pattrib->amsdu = 0;
|
pattrib->amsdu = 0;
|
||||||
pattrib->ack_policy = 0;
|
pattrib->ack_policy = 0;
|
||||||
|
@ -1253,7 +1253,7 @@ static int validate_recv_data_frame(struct adapter *adapter,
|
||||||
if (pattrib->order)/* HT-CTRL 11n */
|
if (pattrib->order)/* HT-CTRL 11n */
|
||||||
pattrib->hdrlen += 4;
|
pattrib->hdrlen += 4;
|
||||||
|
|
||||||
precv_frame->u.hdr.preorder_ctrl = &psta->recvreorder_ctrl[pattrib->priority];
|
precv_frame->preorder_ctrl = &psta->recvreorder_ctrl[pattrib->priority];
|
||||||
|
|
||||||
/* decache, drop duplicate recv packets */
|
/* decache, drop duplicate recv packets */
|
||||||
if (recv_decache(precv_frame, bretry, &psta->sta_recvpriv.rxcache) == _FAIL) {
|
if (recv_decache(precv_frame, bretry, &psta->sta_recvpriv.rxcache) == _FAIL) {
|
||||||
|
@ -1282,7 +1282,7 @@ exit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int validate_recv_frame(struct adapter *adapter, union recv_frame *precv_frame)
|
static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
/* shall check frame subtype, to / from ds, da, bssid */
|
/* shall check frame subtype, to / from ds, da, bssid */
|
||||||
|
|
||||||
|
@ -1292,8 +1292,8 @@ static int validate_recv_frame(struct adapter *adapter, union recv_frame *precv_
|
||||||
u8 subtype;
|
u8 subtype;
|
||||||
int retval = _SUCCESS;
|
int retval = _SUCCESS;
|
||||||
u8 bDumpRxPkt;
|
u8 bDumpRxPkt;
|
||||||
struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
|
||||||
u8 *ptr = precv_frame->u.hdr.rx_data;
|
u8 *ptr = precv_frame->rx_data;
|
||||||
u8 ver = (unsigned char) (*ptr)&0x3;
|
u8 ver = (unsigned char) (*ptr)&0x3;
|
||||||
struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
|
||||||
|
|
||||||
|
@ -1390,7 +1390,7 @@ exit:
|
||||||
|
|
||||||
/* remove the wlanhdr and add the eth_hdr */
|
/* remove the wlanhdr and add the eth_hdr */
|
||||||
|
|
||||||
static int wlanhdr_to_ethhdr (union recv_frame *precvframe)
|
static int wlanhdr_to_ethhdr (struct recv_frame *precvframe)
|
||||||
{
|
{
|
||||||
int rmv_len;
|
int rmv_len;
|
||||||
u16 eth_type, len;
|
u16 eth_type, len;
|
||||||
|
@ -1400,11 +1400,11 @@ static int wlanhdr_to_ethhdr (union recv_frame *precvframe)
|
||||||
struct ieee80211_snap_hdr *psnap;
|
struct ieee80211_snap_hdr *psnap;
|
||||||
|
|
||||||
int ret = _SUCCESS;
|
int ret = _SUCCESS;
|
||||||
struct adapter *adapter = precvframe->u.hdr.adapter;
|
struct adapter *adapter = precvframe->adapter;
|
||||||
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
|
||||||
|
|
||||||
u8 *ptr = get_recvframe_data(precvframe); /* point to frame_ctrl field */
|
u8 *ptr = get_recvframe_data(precvframe); /* point to frame_ctrl field */
|
||||||
struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precvframe->attrib;
|
||||||
|
|
||||||
if (pattrib->encrypt)
|
if (pattrib->encrypt)
|
||||||
recvframe_pull_tail(precvframe, pattrib->icv_len);
|
recvframe_pull_tail(precvframe, pattrib->icv_len);
|
||||||
|
@ -1424,7 +1424,7 @@ static int wlanhdr_to_ethhdr (union recv_frame *precvframe)
|
||||||
}
|
}
|
||||||
|
|
||||||
rmv_len = pattrib->hdrlen + pattrib->iv_len + (bsnaphdr ? SNAP_SIZE : 0);
|
rmv_len = pattrib->hdrlen + pattrib->iv_len + (bsnaphdr ? SNAP_SIZE : 0);
|
||||||
len = precvframe->u.hdr.len - rmv_len;
|
len = precvframe->len - rmv_len;
|
||||||
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
|
||||||
("\n===pattrib->hdrlen: %x, pattrib->iv_len:%x===\n\n", pattrib->hdrlen, pattrib->iv_len));
|
("\n===pattrib->hdrlen: %x, pattrib->iv_len:%x===\n\n", pattrib->hdrlen, pattrib->iv_len));
|
||||||
|
@ -1459,23 +1459,23 @@ static int wlanhdr_to_ethhdr (union recv_frame *precvframe)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* perform defrag */
|
/* perform defrag */
|
||||||
static union recv_frame *recvframe_defrag(struct adapter *adapter, struct __queue *defrag_q)
|
static struct recv_frame *recvframe_defrag(struct adapter *adapter, struct __queue *defrag_q)
|
||||||
{
|
{
|
||||||
struct list_head *plist, *phead;
|
struct list_head *plist, *phead;
|
||||||
u8 wlanhdr_offset;
|
u8 wlanhdr_offset;
|
||||||
u8 curfragnum;
|
u8 curfragnum;
|
||||||
struct recv_frame_hdr *pfhdr, *pnfhdr;
|
struct recv_frame *pfhdr, *pnfhdr;
|
||||||
union recv_frame *prframe, *pnextrframe;
|
struct recv_frame *prframe, *pnextrframe;
|
||||||
struct __queue *pfree_recv_queue;
|
struct __queue *pfree_recv_queue;
|
||||||
|
|
||||||
curfragnum = 0;
|
curfragnum = 0;
|
||||||
pfree_recv_queue = &adapter->recvpriv.free_recv_queue;
|
pfree_recv_queue = &adapter->recvpriv.free_recv_queue;
|
||||||
|
|
||||||
phead = get_list_head(defrag_q);
|
phead = get_list_head(defrag_q);
|
||||||
plist = get_next(phead);
|
plist = phead->next;
|
||||||
prframe = LIST_CONTAINOR(plist, union recv_frame, u);
|
prframe = LIST_CONTAINOR(plist, struct recv_frame, list);
|
||||||
pfhdr = &prframe->u.hdr;
|
prframe = (struct recv_frame *)pfhdr;
|
||||||
rtw_list_delete(&(prframe->u.list));
|
rtw_list_delete(&(prframe->list));
|
||||||
|
|
||||||
if (curfragnum != pfhdr->attrib.frag_num) {
|
if (curfragnum != pfhdr->attrib.frag_num) {
|
||||||
/* the first fragment number must be 0 */
|
/* the first fragment number must be 0 */
|
||||||
|
@ -1489,12 +1489,16 @@ static union recv_frame *recvframe_defrag(struct adapter *adapter, struct __queu
|
||||||
curfragnum++;
|
curfragnum++;
|
||||||
|
|
||||||
plist = get_list_head(defrag_q);
|
plist = get_list_head(defrag_q);
|
||||||
|
plist = phead->next;
|
||||||
|
pfhdr = container_of(plist, struct recv_frame, list);
|
||||||
|
prframe = (struct recv_frame *)pfhdr;
|
||||||
|
list_del_init(&(prframe->list));
|
||||||
|
|
||||||
plist = get_next(plist);
|
plist = plist->next;
|
||||||
|
|
||||||
while (rtw_end_of_queue_search(phead, plist) == false) {
|
while (phead != plist) {
|
||||||
pnextrframe = LIST_CONTAINOR(plist, union recv_frame , u);
|
pnfhdr = container_of(plist, struct recv_frame, list);
|
||||||
pnfhdr = &pnextrframe->u.hdr;
|
pnextrframe = (struct recv_frame *)pnfhdr;
|
||||||
|
|
||||||
/* check the fragment sequence (2nd ~n fragment frame) */
|
/* check the fragment sequence (2nd ~n fragment frame) */
|
||||||
|
|
||||||
|
@ -1524,7 +1528,7 @@ static union recv_frame *recvframe_defrag(struct adapter *adapter, struct __queu
|
||||||
recvframe_put(prframe, pnfhdr->len);
|
recvframe_put(prframe, pnfhdr->len);
|
||||||
|
|
||||||
pfhdr->attrib.icv_len = pnfhdr->attrib.icv_len;
|
pfhdr->attrib.icv_len = pnfhdr->attrib.icv_len;
|
||||||
plist = get_next(plist);
|
plist = plist->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* free the defrag_q queue and return the prframe */
|
/* free the defrag_q queue and return the prframe */
|
||||||
|
@ -1536,21 +1540,21 @@ static union recv_frame *recvframe_defrag(struct adapter *adapter, struct __queu
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check if need to defrag, if needed queue the frame to defrag_q */
|
/* check if need to defrag, if needed queue the frame to defrag_q */
|
||||||
union recv_frame *recvframe_chk_defrag(struct adapter *padapter, union recv_frame *precv_frame)
|
struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
u8 ismfrag;
|
u8 ismfrag;
|
||||||
u8 fragnum;
|
u8 fragnum;
|
||||||
u8 *psta_addr;
|
u8 *psta_addr;
|
||||||
struct recv_frame_hdr *pfhdr;
|
struct recv_frame *pfhdr;
|
||||||
struct sta_info *psta;
|
struct sta_info *psta;
|
||||||
struct sta_priv *pstapriv;
|
struct sta_priv *pstapriv;
|
||||||
struct list_head *phead;
|
struct list_head *phead;
|
||||||
union recv_frame *prtnframe = NULL;
|
struct recv_frame *prtnframe = NULL;
|
||||||
struct __queue *pfree_recv_queue, *pdefrag_q;
|
struct __queue *pfree_recv_queue, *pdefrag_q;
|
||||||
|
|
||||||
pstapriv = &padapter->stapriv;
|
pstapriv = &padapter->stapriv;
|
||||||
|
|
||||||
pfhdr = &precv_frame->u.hdr;
|
pfhdr = precv_frame;
|
||||||
|
|
||||||
pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
|
pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
|
||||||
|
|
||||||
|
@ -1622,7 +1626,7 @@ union recv_frame *recvframe_chk_defrag(struct adapter *padapter, union recv_fram
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prtnframe != NULL) && (prtnframe->u.hdr.attrib.privacy)) {
|
if ((prtnframe != NULL) && (prtnframe->attrib.privacy)) {
|
||||||
/* after defrag we must check tkip mic code */
|
/* after defrag we must check tkip mic code */
|
||||||
if (recvframe_chkmic(padapter, prtnframe) == _FAIL) {
|
if (recvframe_chkmic(padapter, prtnframe) == _FAIL) {
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("recvframe_chkmic(padapter, prtnframe)==_FAIL\n"));
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("recvframe_chkmic(padapter, prtnframe)==_FAIL\n"));
|
||||||
|
@ -1634,7 +1638,7 @@ union recv_frame *recvframe_chk_defrag(struct adapter *padapter, union recv_fram
|
||||||
return prtnframe;
|
return prtnframe;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int amsdu_to_msdu(struct adapter *padapter, union recv_frame *prframe)
|
static int amsdu_to_msdu(struct adapter *padapter, struct recv_frame *prframe)
|
||||||
{
|
{
|
||||||
int a_len, padding_len;
|
int a_len, padding_len;
|
||||||
u16 eth_type, nSubframe_Length;
|
u16 eth_type, nSubframe_Length;
|
||||||
|
@ -1648,16 +1652,16 @@ static int amsdu_to_msdu(struct adapter *padapter, union recv_frame *prframe)
|
||||||
int ret = _SUCCESS;
|
int ret = _SUCCESS;
|
||||||
nr_subframes = 0;
|
nr_subframes = 0;
|
||||||
|
|
||||||
pattrib = &prframe->u.hdr.attrib;
|
pattrib = &prframe->attrib;
|
||||||
|
|
||||||
recvframe_pull(prframe, prframe->u.hdr.attrib.hdrlen);
|
recvframe_pull(prframe, prframe->attrib.hdrlen);
|
||||||
|
|
||||||
if (prframe->u.hdr.attrib.iv_len > 0)
|
if (prframe->attrib.iv_len > 0)
|
||||||
recvframe_pull(prframe, prframe->u.hdr.attrib.iv_len);
|
recvframe_pull(prframe, prframe->attrib.iv_len);
|
||||||
|
|
||||||
a_len = prframe->u.hdr.len;
|
a_len = prframe->len;
|
||||||
|
|
||||||
pdata = prframe->u.hdr.rx_data;
|
pdata = prframe->rx_data;
|
||||||
|
|
||||||
while (a_len > ETH_HLEN) {
|
while (a_len > ETH_HLEN) {
|
||||||
/* Offset 12 denote 2 mac address */
|
/* Offset 12 denote 2 mac address */
|
||||||
|
@ -1679,7 +1683,7 @@ static int amsdu_to_msdu(struct adapter *padapter, union recv_frame *prframe)
|
||||||
data_ptr = (u8 *)skb_put(sub_skb, nSubframe_Length);
|
data_ptr = (u8 *)skb_put(sub_skb, nSubframe_Length);
|
||||||
memcpy(data_ptr, pdata, nSubframe_Length);
|
memcpy(data_ptr, pdata, nSubframe_Length);
|
||||||
} else {
|
} else {
|
||||||
sub_skb = skb_clone(prframe->u.hdr.pkt, GFP_ATOMIC);
|
sub_skb = skb_clone(prframe->pkt, GFP_ATOMIC);
|
||||||
if (sub_skb) {
|
if (sub_skb) {
|
||||||
sub_skb->data = pdata;
|
sub_skb->data = pdata;
|
||||||
sub_skb->len = nSubframe_Length;
|
sub_skb->len = nSubframe_Length;
|
||||||
|
@ -1746,7 +1750,7 @@ static int amsdu_to_msdu(struct adapter *padapter, union recv_frame *prframe)
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
|
||||||
prframe->u.hdr.len = 0;
|
prframe->len = 0;
|
||||||
rtw_free_recvframe(prframe, pfree_recv_queue);/* free this recv_frame */
|
rtw_free_recvframe(prframe, pfree_recv_queue);/* free this recv_frame */
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1782,21 +1786,21 @@ static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_n
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, union recv_frame *prframe);
|
int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, struct recv_frame *prframe);
|
||||||
int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, union recv_frame *prframe)
|
int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, struct recv_frame *prframe)
|
||||||
{
|
{
|
||||||
struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &prframe->attrib;
|
||||||
struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
|
struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
|
||||||
struct list_head *phead, *plist;
|
struct list_head *phead, *plist;
|
||||||
union recv_frame *pnextrframe;
|
struct recv_frame *pnextrframe;
|
||||||
struct rx_pkt_attrib *pnextattrib;
|
struct rx_pkt_attrib *pnextattrib;
|
||||||
|
|
||||||
phead = get_list_head(ppending_recvframe_queue);
|
phead = get_list_head(ppending_recvframe_queue);
|
||||||
plist = get_next(phead);
|
plist = get_next(phead);
|
||||||
|
|
||||||
while (rtw_end_of_queue_search(phead, plist) == false) {
|
while (rtw_end_of_queue_search(phead, plist) == false) {
|
||||||
pnextrframe = LIST_CONTAINOR(plist, union recv_frame, u);
|
pnextrframe = LIST_CONTAINOR(plist, struct recv_frame, list);
|
||||||
pnextattrib = &pnextrframe->u.hdr.attrib;
|
pnextattrib = &pnextrframe->attrib;
|
||||||
|
|
||||||
if (SN_LESS(pnextattrib->seq_num, pattrib->seq_num))
|
if (SN_LESS(pnextattrib->seq_num, pattrib->seq_num))
|
||||||
plist = get_next(plist);
|
plist = get_next(plist);
|
||||||
|
@ -1806,16 +1810,16 @@ int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, union rec
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
rtw_list_delete(&(prframe->u.hdr.list));
|
rtw_list_delete(&(prframe->list));
|
||||||
|
|
||||||
rtw_list_insert_tail(&(prframe->u.hdr.list), plist);
|
rtw_list_insert_tail(&(prframe->list), plist);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced)
|
static int recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced)
|
||||||
{
|
{
|
||||||
struct list_head *phead, *plist;
|
struct list_head *phead, *plist;
|
||||||
union recv_frame *prframe;
|
struct recv_frame *prframe;
|
||||||
struct rx_pkt_attrib *pattrib;
|
struct rx_pkt_attrib *pattrib;
|
||||||
int bPktInBuf = false;
|
int bPktInBuf = false;
|
||||||
struct recv_priv *precvpriv = &padapter->recvpriv;
|
struct recv_priv *precvpriv = &padapter->recvpriv;
|
||||||
|
@ -1829,23 +1833,23 @@ static int recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reor
|
||||||
if (rtw_is_list_empty(phead))
|
if (rtw_is_list_empty(phead))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
prframe = LIST_CONTAINOR(plist, union recv_frame, u);
|
prframe = LIST_CONTAINOR(plist, struct recv_frame, list);
|
||||||
pattrib = &prframe->u.hdr.attrib;
|
pattrib = &prframe->attrib;
|
||||||
preorder_ctrl->indicate_seq = pattrib->seq_num;
|
preorder_ctrl->indicate_seq = pattrib->seq_num;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prepare indication list and indication. */
|
/* Prepare indication list and indication. */
|
||||||
/* Check if there is any packet need indicate. */
|
/* Check if there is any packet need indicate. */
|
||||||
while (!rtw_is_list_empty(phead)) {
|
while (!rtw_is_list_empty(phead)) {
|
||||||
prframe = LIST_CONTAINOR(plist, union recv_frame, u);
|
prframe = LIST_CONTAINOR(plist, struct recv_frame, list);
|
||||||
pattrib = &prframe->u.hdr.attrib;
|
pattrib = &prframe->attrib;
|
||||||
|
|
||||||
if (!SN_LESS(preorder_ctrl->indicate_seq, pattrib->seq_num)) {
|
if (!SN_LESS(preorder_ctrl->indicate_seq, pattrib->seq_num)) {
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,
|
RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,
|
||||||
("recv_indicatepkts_in_order: indicate=%d seq=%d amsdu=%d\n",
|
("recv_indicatepkts_in_order: indicate=%d seq=%d amsdu=%d\n",
|
||||||
preorder_ctrl->indicate_seq, pattrib->seq_num, pattrib->amsdu));
|
preorder_ctrl->indicate_seq, pattrib->seq_num, pattrib->amsdu));
|
||||||
plist = get_next(plist);
|
plist = get_next(plist);
|
||||||
rtw_list_delete(&(prframe->u.hdr.list));
|
rtw_list_delete(&(prframe->list));
|
||||||
|
|
||||||
if (SN_EQUAL(preorder_ctrl->indicate_seq, pattrib->seq_num))
|
if (SN_EQUAL(preorder_ctrl->indicate_seq, pattrib->seq_num))
|
||||||
preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) & 0xFFF;
|
preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) & 0xFFF;
|
||||||
|
@ -1874,11 +1878,11 @@ static int recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reor
|
||||||
return bPktInBuf;
|
return bPktInBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int recv_indicatepkt_reorder(struct adapter *padapter, union recv_frame *prframe)
|
static int recv_indicatepkt_reorder(struct adapter *padapter, struct recv_frame *prframe)
|
||||||
{
|
{
|
||||||
int retval = _SUCCESS;
|
int retval = _SUCCESS;
|
||||||
struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &prframe->attrib;
|
||||||
struct recv_reorder_ctrl *preorder_ctrl = prframe->u.hdr.preorder_ctrl;
|
struct recv_reorder_ctrl *preorder_ctrl = prframe->preorder_ctrl;
|
||||||
struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
|
struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
|
||||||
|
|
||||||
if (!pattrib->amsdu) {
|
if (!pattrib->amsdu) {
|
||||||
|
@ -1977,16 +1981,16 @@ void rtw_reordering_ctrl_timeout_handler(void *pcontext)
|
||||||
spin_unlock_bh(&ppending_recvframe_queue->lock);
|
spin_unlock_bh(&ppending_recvframe_queue->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int process_recv_indicatepkts(struct adapter *padapter, union recv_frame *prframe)
|
static int process_recv_indicatepkts(struct adapter *padapter, struct recv_frame *prframe)
|
||||||
{
|
{
|
||||||
int retval = _SUCCESS;
|
int retval = _SUCCESS;
|
||||||
/* struct recv_priv *precvpriv = &padapter->recvpriv; */
|
/* struct recv_priv *precvpriv = &padapter->recvpriv; */
|
||||||
/* struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib; */
|
/* struct rx_pkt_attrib *pattrib = &prframe->attrib; */
|
||||||
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
||||||
struct ht_priv *phtpriv = &pmlmepriv->htpriv;
|
struct ht_priv *phtpriv = &pmlmepriv->htpriv;
|
||||||
|
|
||||||
if (phtpriv->ht_option) { /* B/G/N Mode */
|
if (phtpriv->ht_option) { /* B/G/N Mode */
|
||||||
/* prframe->u.hdr.preorder_ctrl = &precvpriv->recvreorder_ctrl[pattrib->priority]; */
|
/* prframe->preorder_ctrl = &precvpriv->recvreorder_ctrl[pattrib->priority]; */
|
||||||
|
|
||||||
if (recv_indicatepkt_reorder(padapter, prframe) != _SUCCESS) {
|
if (recv_indicatepkt_reorder(padapter, prframe) != _SUCCESS) {
|
||||||
/* including perform A-MPDU Rx Ordering Buffer Control */
|
/* including perform A-MPDU Rx Ordering Buffer Control */
|
||||||
|
@ -2020,10 +2024,10 @@ static int process_recv_indicatepkts(struct adapter *padapter, union recv_frame
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int recv_func_prehandle(struct adapter *padapter, union recv_frame *rframe)
|
static int recv_func_prehandle(struct adapter *padapter, struct recv_frame *rframe)
|
||||||
{
|
{
|
||||||
int ret = _SUCCESS;
|
int ret = _SUCCESS;
|
||||||
struct rx_pkt_attrib *pattrib = &rframe->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &rframe->attrib;
|
||||||
struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
|
struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
|
||||||
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
||||||
|
|
||||||
|
@ -2053,10 +2057,10 @@ exit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int recv_func_posthandle(struct adapter *padapter, union recv_frame *prframe)
|
static int recv_func_posthandle(struct adapter *padapter, struct recv_frame *prframe)
|
||||||
{
|
{
|
||||||
int ret = _SUCCESS;
|
int ret = _SUCCESS;
|
||||||
union recv_frame *orig_prframe = prframe;
|
struct recv_frame *orig_prframe = prframe;
|
||||||
struct recv_priv *precvpriv = &padapter->recvpriv;
|
struct recv_priv *precvpriv = &padapter->recvpriv;
|
||||||
struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
|
struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
|
||||||
|
|
||||||
|
@ -2098,10 +2102,10 @@ _recv_data_drop:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int recv_func(struct adapter *padapter, union recv_frame *rframe)
|
static int recv_func(struct adapter *padapter, struct recv_frame *rframe)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct rx_pkt_attrib *prxattrib = &rframe->u.hdr.attrib;
|
struct rx_pkt_attrib *prxattrib = &rframe->attrib;
|
||||||
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
||||||
struct mlme_priv *mlmepriv = &padapter->mlmepriv;
|
struct mlme_priv *mlmepriv = &padapter->mlmepriv;
|
||||||
struct recv_priv *recvpriv = &padapter->recvpriv;
|
struct recv_priv *recvpriv = &padapter->recvpriv;
|
||||||
|
@ -2109,7 +2113,7 @@ static int recv_func(struct adapter *padapter, union recv_frame *rframe)
|
||||||
/* check if need to handle uc_swdec_pending_queue*/
|
/* check if need to handle uc_swdec_pending_queue*/
|
||||||
if (check_fwstate(mlmepriv, WIFI_STATION_STATE) &&
|
if (check_fwstate(mlmepriv, WIFI_STATION_STATE) &&
|
||||||
psecuritypriv->busetkipkey) {
|
psecuritypriv->busetkipkey) {
|
||||||
union recv_frame *pending_frame;
|
struct recv_frame *pending_frame;
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
|
||||||
pending_frame = rtw_alloc_recvframe(&padapter->recvpriv.uc_swdec_pending_queue);
|
pending_frame = rtw_alloc_recvframe(&padapter->recvpriv.uc_swdec_pending_queue);
|
||||||
|
@ -2148,13 +2152,13 @@ exit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 rtw_recv_entry(union recv_frame *precvframe)
|
s32 rtw_recv_entry(struct recv_frame *precvframe)
|
||||||
{
|
{
|
||||||
struct adapter *padapter;
|
struct adapter *padapter;
|
||||||
struct recv_priv *precvpriv;
|
struct recv_priv *precvpriv;
|
||||||
s32 ret = _SUCCESS;
|
s32 ret = _SUCCESS;
|
||||||
|
|
||||||
padapter = precvframe->u.hdr.adapter;
|
padapter = precvframe->adapter;
|
||||||
|
|
||||||
precvpriv = &padapter->recvpriv;
|
precvpriv = &padapter->recvpriv;
|
||||||
|
|
||||||
|
|
|
@ -212,10 +212,10 @@ void rtw_wep_decrypt(struct adapter *padapter, u8 *precvframe)
|
||||||
u32 keylength;
|
u32 keylength;
|
||||||
u8 *pframe, *payload, *iv, wepkey[16];
|
u8 *pframe, *payload, *iv, wepkey[16];
|
||||||
u8 keyindex;
|
u8 keyindex;
|
||||||
struct rx_pkt_attrib *prxattrib = &(((union recv_frame *)precvframe)->u.hdr.attrib);
|
struct rx_pkt_attrib *prxattrib = &(((struct recv_frame *)precvframe)->attrib);
|
||||||
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
||||||
|
|
||||||
pframe = (unsigned char *)((union recv_frame *)precvframe)->u.hdr.rx_data;
|
pframe = (unsigned char *)((struct recv_frame *)precvframe)->rx_data;
|
||||||
|
|
||||||
/* start to decrypt recvframe */
|
/* start to decrypt recvframe */
|
||||||
if ((prxattrib->encrypt == _WEP40_) || (prxattrib->encrypt == _WEP104_)) {
|
if ((prxattrib->encrypt == _WEP40_) || (prxattrib->encrypt == _WEP104_)) {
|
||||||
|
@ -224,7 +224,7 @@ void rtw_wep_decrypt(struct adapter *padapter, u8 *precvframe)
|
||||||
keylength = psecuritypriv->dot11DefKeylen[keyindex];
|
keylength = psecuritypriv->dot11DefKeylen[keyindex];
|
||||||
memcpy(&wepkey[0], iv, 3);
|
memcpy(&wepkey[0], iv, 3);
|
||||||
memcpy(&wepkey[3], &psecuritypriv->dot11DefKey[keyindex].skey[0], keylength);
|
memcpy(&wepkey[3], &psecuritypriv->dot11DefKey[keyindex].skey[0], keylength);
|
||||||
length = ((union recv_frame *)precvframe)->u.hdr.len-prxattrib->hdrlen-prxattrib->iv_len;
|
length = ((struct recv_frame *)precvframe)->len-prxattrib->hdrlen-prxattrib->iv_len;
|
||||||
|
|
||||||
payload = pframe+prxattrib->iv_len+prxattrib->hdrlen;
|
payload = pframe+prxattrib->iv_len+prxattrib->hdrlen;
|
||||||
|
|
||||||
|
@ -679,11 +679,11 @@ u32 rtw_tkip_decrypt(struct adapter *padapter, u8 *precvframe)
|
||||||
u8 *pframe, *payload, *iv, *prwskey;
|
u8 *pframe, *payload, *iv, *prwskey;
|
||||||
union pn48 dot11txpn;
|
union pn48 dot11txpn;
|
||||||
struct sta_info *stainfo;
|
struct sta_info *stainfo;
|
||||||
struct rx_pkt_attrib *prxattrib = &((union recv_frame *)precvframe)->u.hdr.attrib;
|
struct rx_pkt_attrib *prxattrib = &((struct recv_frame *)precvframe)->attrib;
|
||||||
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
||||||
u32 res = _SUCCESS;
|
u32 res = _SUCCESS;
|
||||||
|
|
||||||
pframe = (unsigned char *)((union recv_frame *)precvframe)->u.hdr.rx_data;
|
pframe = (unsigned char *)((struct recv_frame *)precvframe)->rx_data;
|
||||||
|
|
||||||
/* 4 start to decrypt recvframe */
|
/* 4 start to decrypt recvframe */
|
||||||
if (prxattrib->encrypt == _TKIP_) {
|
if (prxattrib->encrypt == _TKIP_) {
|
||||||
|
@ -703,7 +703,7 @@ u32 rtw_tkip_decrypt(struct adapter *padapter, u8 *precvframe)
|
||||||
|
|
||||||
iv = pframe+prxattrib->hdrlen;
|
iv = pframe+prxattrib->hdrlen;
|
||||||
payload = pframe+prxattrib->iv_len+prxattrib->hdrlen;
|
payload = pframe+prxattrib->iv_len+prxattrib->hdrlen;
|
||||||
length = ((union recv_frame *)precvframe)->u.hdr.len-prxattrib->hdrlen-prxattrib->iv_len;
|
length = ((struct recv_frame *)precvframe)->len-prxattrib->hdrlen-prxattrib->iv_len;
|
||||||
|
|
||||||
GET_TKIP_PN(iv, dot11txpn);
|
GET_TKIP_PN(iv, dot11txpn);
|
||||||
|
|
||||||
|
@ -1505,11 +1505,11 @@ u32 rtw_aes_decrypt(struct adapter *padapter, u8 *precvframe)
|
||||||
int length;
|
int length;
|
||||||
u8 *pframe, *prwskey; /* *payload,*iv */
|
u8 *pframe, *prwskey; /* *payload,*iv */
|
||||||
struct sta_info *stainfo;
|
struct sta_info *stainfo;
|
||||||
struct rx_pkt_attrib *prxattrib = &((union recv_frame *)precvframe)->u.hdr.attrib;
|
struct rx_pkt_attrib *prxattrib = &((struct recv_frame *)precvframe)->attrib;
|
||||||
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
||||||
u32 res = _SUCCESS;
|
u32 res = _SUCCESS;
|
||||||
|
|
||||||
pframe = (unsigned char *)((union recv_frame *)precvframe)->u.hdr.rx_data;
|
pframe = (unsigned char *)((struct recv_frame *)precvframe)->rx_data;
|
||||||
/* 4 start to encrypt each fragment */
|
/* 4 start to encrypt each fragment */
|
||||||
if ((prxattrib->encrypt == _AES_)) {
|
if ((prxattrib->encrypt == _AES_)) {
|
||||||
stainfo = rtw_get_stainfo(&padapter->stapriv, &prxattrib->ta[0]);
|
stainfo = rtw_get_stainfo(&padapter->stapriv, &prxattrib->ta[0]);
|
||||||
|
@ -1533,7 +1533,7 @@ u32 rtw_aes_decrypt(struct adapter *padapter, u8 *precvframe)
|
||||||
} else {
|
} else {
|
||||||
prwskey = &stainfo->dot118021x_UncstKey.skey[0];
|
prwskey = &stainfo->dot118021x_UncstKey.skey[0];
|
||||||
}
|
}
|
||||||
length = ((union recv_frame *)precvframe)->u.hdr.len-prxattrib->hdrlen-prxattrib->iv_len;
|
length = ((struct recv_frame *)precvframe)->len-prxattrib->hdrlen-prxattrib->iv_len;
|
||||||
res = aes_decipher(prwskey, prxattrib->hdrlen, pframe, length);
|
res = aes_decipher(prwskey, prxattrib->hdrlen, pframe, length);
|
||||||
} else {
|
} else {
|
||||||
RT_TRACE(_module_rtl871x_security_c_, _drv_err_, ("rtw_aes_encrypt: stainfo==NULL!!!\n"));
|
RT_TRACE(_module_rtl871x_security_c_, _drv_err_, ("rtw_aes_encrypt: stainfo==NULL!!!\n"));
|
||||||
|
|
|
@ -395,7 +395,7 @@ u32 rtw_free_stainfo(struct adapter *padapter , struct sta_info *psta)
|
||||||
/* for A-MPDU Rx reordering buffer control, cancel reordering_ctrl_timer */
|
/* for A-MPDU Rx reordering buffer control, cancel reordering_ctrl_timer */
|
||||||
for (i = 0; i < 16 ; i++) {
|
for (i = 0; i < 16 ; i++) {
|
||||||
struct list_head *phead, *plist;
|
struct list_head *phead, *plist;
|
||||||
union recv_frame *prframe;
|
struct recv_frame *prframe;
|
||||||
struct __queue *ppending_recvframe_queue;
|
struct __queue *ppending_recvframe_queue;
|
||||||
struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
|
struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
|
||||||
|
|
||||||
|
@ -411,11 +411,11 @@ u32 rtw_free_stainfo(struct adapter *padapter , struct sta_info *psta)
|
||||||
plist = get_next(phead);
|
plist = get_next(phead);
|
||||||
|
|
||||||
while (!rtw_is_list_empty(phead)) {
|
while (!rtw_is_list_empty(phead)) {
|
||||||
prframe = LIST_CONTAINOR(plist, union recv_frame, u);
|
prframe = LIST_CONTAINOR(plist, struct recv_frame, list);
|
||||||
|
|
||||||
plist = get_next(plist);
|
plist = get_next(plist);
|
||||||
|
|
||||||
rtw_list_delete(&(prframe->u.hdr.list));
|
rtw_list_delete(&(prframe->list));
|
||||||
|
|
||||||
rtw_free_recvframe(prframe, pfree_recv_queue);
|
rtw_free_recvframe(prframe, pfree_recv_queue);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
#include <drv_types.h>
|
#include <drv_types.h>
|
||||||
#include <rtl8188e_hal.h>
|
#include <rtl8188e_hal.h>
|
||||||
|
|
||||||
static void process_rssi(struct adapter *padapter, union recv_frame *prframe)
|
static void process_rssi(struct adapter *padapter, struct recv_frame *prframe)
|
||||||
{
|
{
|
||||||
struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &prframe->attrib;
|
||||||
struct signal_stat *signal_stat = &padapter->recvpriv.signal_strength_data;
|
struct signal_stat *signal_stat = &padapter->recvpriv.signal_strength_data;
|
||||||
|
|
||||||
if (signal_stat->update_req) {
|
if (signal_stat->update_req) {
|
||||||
|
@ -39,7 +39,7 @@ static void process_rssi(struct adapter *padapter, union recv_frame *prframe)
|
||||||
signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
|
signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
|
||||||
} /* Process_UI_RSSI_8192C */
|
} /* Process_UI_RSSI_8192C */
|
||||||
|
|
||||||
static void process_link_qual(struct adapter *padapter, union recv_frame *prframe)
|
static void process_link_qual(struct adapter *padapter, struct recv_frame *prframe)
|
||||||
{
|
{
|
||||||
struct rx_pkt_attrib *pattrib;
|
struct rx_pkt_attrib *pattrib;
|
||||||
struct signal_stat *signal_stat;
|
struct signal_stat *signal_stat;
|
||||||
|
@ -47,7 +47,7 @@ static void process_link_qual(struct adapter *padapter, union recv_frame *prfram
|
||||||
if (prframe == NULL || padapter == NULL)
|
if (prframe == NULL || padapter == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pattrib = &prframe->u.hdr.attrib;
|
pattrib = &prframe->attrib;
|
||||||
signal_stat = &padapter->recvpriv.signal_qual_data;
|
signal_stat = &padapter->recvpriv.signal_qual_data;
|
||||||
|
|
||||||
if (signal_stat->update_req) {
|
if (signal_stat->update_req) {
|
||||||
|
@ -63,7 +63,7 @@ static void process_link_qual(struct adapter *padapter, union recv_frame *prfram
|
||||||
|
|
||||||
void rtl8188e_process_phy_info(struct adapter *padapter, void *prframe)
|
void rtl8188e_process_phy_info(struct adapter *padapter, void *prframe)
|
||||||
{
|
{
|
||||||
union recv_frame *precvframe = (union recv_frame *)prframe;
|
struct recv_frame *precvframe = (struct recv_frame *)prframe;
|
||||||
|
|
||||||
/* Check RSSI */
|
/* Check RSSI */
|
||||||
process_rssi(padapter, precvframe);
|
process_rssi(padapter, precvframe);
|
||||||
|
@ -71,7 +71,7 @@ void rtl8188e_process_phy_info(struct adapter *padapter, void *prframe)
|
||||||
process_link_qual(padapter, precvframe);
|
process_link_qual(padapter, precvframe);
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_recvframe_attrib_88e(union recv_frame *precvframe, struct recv_stat *prxstat)
|
void update_recvframe_attrib_88e(struct recv_frame *precvframe, struct recv_stat *prxstat)
|
||||||
{
|
{
|
||||||
struct rx_pkt_attrib *pattrib;
|
struct rx_pkt_attrib *pattrib;
|
||||||
struct recv_stat report;
|
struct recv_stat report;
|
||||||
|
@ -83,7 +83,7 @@ void update_recvframe_attrib_88e(union recv_frame *precvframe, struct recv_stat
|
||||||
report.rxdw4 = prxstat->rxdw4;
|
report.rxdw4 = prxstat->rxdw4;
|
||||||
report.rxdw5 = prxstat->rxdw5;
|
report.rxdw5 = prxstat->rxdw5;
|
||||||
|
|
||||||
pattrib = &precvframe->u.hdr.attrib;
|
pattrib = &precvframe->attrib;
|
||||||
memset(pattrib, 0, sizeof(struct rx_pkt_attrib));
|
memset(pattrib, 0, sizeof(struct rx_pkt_attrib));
|
||||||
|
|
||||||
pattrib->crc_err = (u8)((le32_to_cpu(report.rxdw0) >> 14) & 0x1);;/* u8)prxreport->crc32; */
|
pattrib->crc_err = (u8)((le32_to_cpu(report.rxdw0) >> 14) & 0x1);;/* u8)prxreport->crc32; */
|
||||||
|
@ -136,12 +136,12 @@ void update_recvframe_attrib_88e(union recv_frame *precvframe, struct recv_stat
|
||||||
/*
|
/*
|
||||||
* Notice:
|
* Notice:
|
||||||
* Before calling this function,
|
* Before calling this function,
|
||||||
* precvframe->u.hdr.rx_data should be ready!
|
* precvframe->rx_data should be ready!
|
||||||
*/
|
*/
|
||||||
void update_recvframe_phyinfo_88e(union recv_frame *precvframe, struct phy_stat *pphy_status)
|
void update_recvframe_phyinfo_88e(struct recv_frame *precvframe, struct phy_stat *pphy_status)
|
||||||
{
|
{
|
||||||
struct adapter *padapter = precvframe->u.hdr.adapter;
|
struct adapter *padapter = precvframe->adapter;
|
||||||
struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precvframe->attrib;
|
||||||
struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter);
|
struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter);
|
||||||
struct odm_phy_status_info *pPHYInfo = (struct odm_phy_status_info *)(&pattrib->phy_info);
|
struct odm_phy_status_info *pPHYInfo = (struct odm_phy_status_info *)(&pattrib->phy_info);
|
||||||
u8 *wlanhdr;
|
u8 *wlanhdr;
|
||||||
|
@ -185,17 +185,17 @@ void update_recvframe_phyinfo_88e(union recv_frame *precvframe, struct phy_stat
|
||||||
|
|
||||||
ODM_PhyStatusQuery(&pHalData->odmpriv, pPHYInfo, (u8 *)pphy_status, &(pkt_info), padapter);
|
ODM_PhyStatusQuery(&pHalData->odmpriv, pPHYInfo, (u8 *)pphy_status, &(pkt_info), padapter);
|
||||||
|
|
||||||
precvframe->u.hdr.psta = NULL;
|
precvframe->psta = NULL;
|
||||||
if (pkt_info.bPacketMatchBSSID &&
|
if (pkt_info.bPacketMatchBSSID &&
|
||||||
(check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE))) {
|
(check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE))) {
|
||||||
if (psta) {
|
if (psta) {
|
||||||
precvframe->u.hdr.psta = psta;
|
precvframe->psta = psta;
|
||||||
rtl8188e_process_phy_info(padapter, precvframe);
|
rtl8188e_process_phy_info(padapter, precvframe);
|
||||||
}
|
}
|
||||||
} else if (pkt_info.bPacketToSelf || pkt_info.bPacketBeacon) {
|
} else if (pkt_info.bPacketToSelf || pkt_info.bPacketBeacon) {
|
||||||
if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE)) {
|
if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE)) {
|
||||||
if (psta)
|
if (psta)
|
||||||
precvframe->u.hdr.psta = psta;
|
precvframe->psta = psta;
|
||||||
}
|
}
|
||||||
rtl8188e_process_phy_info(padapter, precvframe);
|
rtl8188e_process_phy_info(padapter, precvframe);
|
||||||
}
|
}
|
||||||
|
|
|
@ -314,7 +314,7 @@ static int recvbuf2recvframe(struct adapter *adapt, struct sk_buff *pskb)
|
||||||
struct recv_stat *prxstat;
|
struct recv_stat *prxstat;
|
||||||
struct phy_stat *pphy_status = NULL;
|
struct phy_stat *pphy_status = NULL;
|
||||||
struct sk_buff *pkt_copy = NULL;
|
struct sk_buff *pkt_copy = NULL;
|
||||||
union recv_frame *precvframe = NULL;
|
struct recv_frame *precvframe = NULL;
|
||||||
struct rx_pkt_attrib *pattrib = NULL;
|
struct rx_pkt_attrib *pattrib = NULL;
|
||||||
struct hal_data_8188e *haldata = GET_HAL_DATA(adapt);
|
struct hal_data_8188e *haldata = GET_HAL_DATA(adapt);
|
||||||
struct recv_priv *precvpriv = &adapt->recvpriv;
|
struct recv_priv *precvpriv = &adapt->recvpriv;
|
||||||
|
@ -340,13 +340,13 @@ static int recvbuf2recvframe(struct adapter *adapt, struct sk_buff *pskb)
|
||||||
goto _exit_recvbuf2recvframe;
|
goto _exit_recvbuf2recvframe;
|
||||||
}
|
}
|
||||||
|
|
||||||
INIT_LIST_HEAD(&precvframe->u.hdr.list);
|
INIT_LIST_HEAD(&precvframe->list);
|
||||||
precvframe->u.hdr.precvbuf = NULL; /* can't access the precvbuf for new arch. */
|
precvframe->precvbuf = NULL; /* can't access the precvbuf for new arch. */
|
||||||
precvframe->u.hdr.len = 0;
|
precvframe->len = 0;
|
||||||
|
|
||||||
update_recvframe_attrib_88e(precvframe, prxstat);
|
update_recvframe_attrib_88e(precvframe, prxstat);
|
||||||
|
|
||||||
pattrib = &precvframe->u.hdr.attrib;
|
pattrib = &precvframe->attrib;
|
||||||
|
|
||||||
if ((pattrib->crc_err) || (pattrib->icv_err)) {
|
if ((pattrib->crc_err) || (pattrib->icv_err)) {
|
||||||
DBG_88E("%s: RX Warning! crc_err=%d icv_err=%d, skip!\n", __func__, pattrib->crc_err, pattrib->icv_err);
|
DBG_88E("%s: RX Warning! crc_err=%d icv_err=%d, skip!\n", __func__, pattrib->crc_err, pattrib->icv_err);
|
||||||
|
@ -393,26 +393,26 @@ static int recvbuf2recvframe(struct adapter *adapt, struct sk_buff *pskb)
|
||||||
pkt_copy = netdev_alloc_skb(adapt->pnetdev, alloc_sz);
|
pkt_copy = netdev_alloc_skb(adapt->pnetdev, alloc_sz);
|
||||||
if (pkt_copy) {
|
if (pkt_copy) {
|
||||||
pkt_copy->dev = adapt->pnetdev;
|
pkt_copy->dev = adapt->pnetdev;
|
||||||
precvframe->u.hdr.pkt = pkt_copy;
|
precvframe->pkt = pkt_copy;
|
||||||
precvframe->u.hdr.rx_head = pkt_copy->data;
|
precvframe->rx_head = pkt_copy->data;
|
||||||
precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz;
|
precvframe->rx_end = pkt_copy->data + alloc_sz;
|
||||||
skb_reserve(pkt_copy, 8 - ((size_t)(pkt_copy->data) & 7));/* force pkt_copy->data at 8-byte alignment address */
|
skb_reserve(pkt_copy, 8 - ((size_t)(pkt_copy->data) & 7));/* force pkt_copy->data at 8-byte alignment address */
|
||||||
skb_reserve(pkt_copy, shift_sz);/* force ip_hdr at 8-byte alignment address according to shift_sz. */
|
skb_reserve(pkt_copy, shift_sz);/* force ip_hdr at 8-byte alignment address according to shift_sz. */
|
||||||
memcpy(pkt_copy->data, (pbuf + pattrib->drvinfo_sz + RXDESC_SIZE), skb_len);
|
memcpy(pkt_copy->data, (pbuf + pattrib->drvinfo_sz + RXDESC_SIZE), skb_len);
|
||||||
precvframe->u.hdr.rx_tail = pkt_copy->data;
|
precvframe->rx_tail = pkt_copy->data;
|
||||||
precvframe->u.hdr.rx_data = pkt_copy->data;
|
precvframe->rx_data = pkt_copy->data;
|
||||||
} else {
|
} else {
|
||||||
if ((pattrib->mfrag == 1) && (pattrib->frag_num == 0)) {
|
if ((pattrib->mfrag == 1) && (pattrib->frag_num == 0)) {
|
||||||
DBG_88E("recvbuf2recvframe: alloc_skb fail , drop frag frame\n");
|
DBG_88E("recvbuf2recvframe: alloc_skb fail , drop frag frame\n");
|
||||||
rtw_free_recvframe(precvframe, pfree_recv_queue);
|
rtw_free_recvframe(precvframe, pfree_recv_queue);
|
||||||
goto _exit_recvbuf2recvframe;
|
goto _exit_recvbuf2recvframe;
|
||||||
}
|
}
|
||||||
precvframe->u.hdr.pkt = skb_clone(pskb, GFP_ATOMIC);
|
precvframe->pkt = skb_clone(pskb, GFP_ATOMIC);
|
||||||
if (precvframe->u.hdr.pkt) {
|
if (precvframe->pkt) {
|
||||||
precvframe->u.hdr.rx_tail = pbuf + pattrib->drvinfo_sz + RXDESC_SIZE;
|
precvframe->rx_tail = pbuf + pattrib->drvinfo_sz + RXDESC_SIZE;
|
||||||
precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_tail;
|
precvframe->rx_head = precvframe->rx_tail;
|
||||||
precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail;
|
precvframe->rx_data = precvframe->rx_tail;
|
||||||
precvframe->u.hdr.rx_end = pbuf + pattrib->drvinfo_sz + RXDESC_SIZE + alloc_sz;
|
precvframe->rx_end = pbuf + pattrib->drvinfo_sz + RXDESC_SIZE + alloc_sz;
|
||||||
} else {
|
} else {
|
||||||
DBG_88E("recvbuf2recvframe: skb_clone fail\n");
|
DBG_88E("recvbuf2recvframe: skb_clone fail\n");
|
||||||
rtw_free_recvframe(precvframe, pfree_recv_queue);
|
rtw_free_recvframe(precvframe, pfree_recv_queue);
|
||||||
|
@ -445,17 +445,17 @@ static int recvbuf2recvframe(struct adapter *adapt, struct sk_buff *pskb)
|
||||||
/* enqueue recvframe to txrtp queue */
|
/* enqueue recvframe to txrtp queue */
|
||||||
if (pattrib->pkt_rpt_type == TX_REPORT1) {
|
if (pattrib->pkt_rpt_type == TX_REPORT1) {
|
||||||
/* CCX-TXRPT ack for xmit mgmt frames. */
|
/* CCX-TXRPT ack for xmit mgmt frames. */
|
||||||
handle_txrpt_ccx_88e(adapt, precvframe->u.hdr.rx_data);
|
handle_txrpt_ccx_88e(adapt, precvframe->rx_data);
|
||||||
} else if (pattrib->pkt_rpt_type == TX_REPORT2) {
|
} else if (pattrib->pkt_rpt_type == TX_REPORT2) {
|
||||||
ODM_RA_TxRPT2Handle_8188E(
|
ODM_RA_TxRPT2Handle_8188E(
|
||||||
&haldata->odmpriv,
|
&haldata->odmpriv,
|
||||||
precvframe->u.hdr.rx_data,
|
precvframe->rx_data,
|
||||||
pattrib->pkt_len,
|
pattrib->pkt_len,
|
||||||
pattrib->MacIDValidEntry[0],
|
pattrib->MacIDValidEntry[0],
|
||||||
pattrib->MacIDValidEntry[1]
|
pattrib->MacIDValidEntry[1]
|
||||||
);
|
);
|
||||||
} else if (pattrib->pkt_rpt_type == HIS_REPORT) {
|
} else if (pattrib->pkt_rpt_type == HIS_REPORT) {
|
||||||
interrupt_handler_8188eu(adapt, pattrib->pkt_len, precvframe->u.hdr.rx_data);
|
interrupt_handler_8188eu(adapt, pattrib->pkt_len, precvframe->rx_data);
|
||||||
}
|
}
|
||||||
rtw_free_recvframe(precvframe, pfree_recv_queue);
|
rtw_free_recvframe(precvframe, pfree_recv_queue);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,18 +26,18 @@
|
||||||
int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter);
|
int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter);
|
||||||
void _rtw_free_recv_priv(struct recv_priv *precvpriv);
|
void _rtw_free_recv_priv(struct recv_priv *precvpriv);
|
||||||
|
|
||||||
s32 rtw_recv_entry(union recv_frame *precv_frame);
|
s32 rtw_recv_entry(struct recv_frame *precv_frame);
|
||||||
int rtw_recv_indicatepkt(struct adapter *adapter, union recv_frame *recv_frame);
|
int rtw_recv_indicatepkt(struct adapter *adapter, struct recv_frame *recv_frame);
|
||||||
void rtw_recv_returnpacket(struct net_device *cnxt, struct sk_buff *retpkt);
|
void rtw_recv_returnpacket(struct net_device *cnxt, struct sk_buff *retpkt);
|
||||||
|
|
||||||
void rtw_hostapd_mlme_rx(struct adapter *padapter, union recv_frame *recv_fr);
|
void rtw_hostapd_mlme_rx(struct adapter *padapter, struct recv_frame *recv_fr);
|
||||||
void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup);
|
void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup);
|
||||||
|
|
||||||
int rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter);
|
int rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter);
|
||||||
void rtw_free_recv_priv(struct recv_priv *precvpriv);
|
void rtw_free_recv_priv(struct recv_priv *precvpriv);
|
||||||
|
|
||||||
int rtw_os_recv_resource_init(struct recv_priv *recvpr, struct adapter *adapt);
|
int rtw_os_recv_resource_init(struct recv_priv *recvpr, struct adapter *adapt);
|
||||||
int rtw_os_recv_resource_alloc(struct adapter *adapt, union recv_frame *recvfr);
|
int rtw_os_recv_resource_alloc(struct adapter *adapt, struct recv_frame *recvfr);
|
||||||
void rtw_os_recv_resource_free(struct recv_priv *precvpriv);
|
void rtw_os_recv_resource_free(struct recv_priv *precvpriv);
|
||||||
|
|
||||||
int rtw_os_recvbuf_resource_alloc(struct adapter *adapt, struct recv_buf *buf);
|
int rtw_os_recvbuf_resource_alloc(struct adapter *adapt, struct recv_buf *buf);
|
||||||
|
|
|
@ -61,9 +61,9 @@ s32 rtl8188eu_init_recv_priv(struct adapter *padapter);
|
||||||
void rtl8188eu_free_recv_priv(struct adapter * padapter);
|
void rtl8188eu_free_recv_priv(struct adapter * padapter);
|
||||||
void rtl8188eu_recv_hdl(struct adapter * padapter, struct recv_buf *precvbuf);
|
void rtl8188eu_recv_hdl(struct adapter * padapter, struct recv_buf *precvbuf);
|
||||||
void rtl8188eu_recv_tasklet(void *priv);
|
void rtl8188eu_recv_tasklet(void *priv);
|
||||||
void rtl8188e_query_rx_phy_status(union recv_frame *fr, struct phy_stat *phy);
|
void rtl8188e_query_rx_phy_status(struct recv_frame *fr, struct phy_stat *phy);
|
||||||
void rtl8188e_process_phy_info(struct adapter * padapter, void *prframe);
|
void rtl8188e_process_phy_info(struct adapter * padapter, void *prframe);
|
||||||
void update_recvframe_phyinfo_88e(union recv_frame *fra, struct phy_stat *phy);
|
void update_recvframe_phyinfo_88e(struct recv_frame *fra, struct phy_stat *phy);
|
||||||
void update_recvframe_attrib_88e(union recv_frame *fra, struct recv_stat *stat);
|
void update_recvframe_attrib_88e(struct recv_frame *fra, struct recv_stat *stat);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -233,13 +233,13 @@ enum SCAN_STATE {
|
||||||
struct mlme_handler {
|
struct mlme_handler {
|
||||||
unsigned int num;
|
unsigned int num;
|
||||||
char *str;
|
char *str;
|
||||||
unsigned int (*func)(struct adapter *adapt, union recv_frame *frame);
|
unsigned int (*func)(struct adapter *adapt, struct recv_frame *frame);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct action_handler {
|
struct action_handler {
|
||||||
unsigned int num;
|
unsigned int num;
|
||||||
char* str;
|
char* str;
|
||||||
unsigned int (*func)(struct adapter *adapt, union recv_frame *frame);
|
unsigned int (*func)(struct adapter *adapt, struct recv_frame *frame);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ss_res {
|
struct ss_res {
|
||||||
|
@ -487,7 +487,7 @@ int allocate_fw_sta_entry(struct adapter *padapter);
|
||||||
void flush_all_cam_entry(struct adapter *padapter);
|
void flush_all_cam_entry(struct adapter *padapter);
|
||||||
|
|
||||||
void site_survey(struct adapter *padapter);
|
void site_survey(struct adapter *padapter);
|
||||||
u8 collect_bss_info(struct adapter *padapter, union recv_frame *precv_frame,
|
u8 collect_bss_info(struct adapter *padapter, struct recv_frame *precv_frame,
|
||||||
struct wlan_bssid_ex *bssid);
|
struct wlan_bssid_ex *bssid);
|
||||||
void update_network(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src,
|
void update_network(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src,
|
||||||
struct adapter *adapter, bool update_ie);
|
struct adapter *adapter, bool update_ie);
|
||||||
|
@ -541,7 +541,7 @@ unsigned int is_ap_in_wep(struct adapter *padapter);
|
||||||
unsigned int should_forbid_n_rate(struct adapter *padapter);
|
unsigned int should_forbid_n_rate(struct adapter *padapter);
|
||||||
|
|
||||||
void report_join_res(struct adapter *padapter, int res);
|
void report_join_res(struct adapter *padapter, int res);
|
||||||
void report_survey_event(struct adapter *padapter, union recv_frame *precv_frame);
|
void report_survey_event(struct adapter *padapter, struct recv_frame *precv_frame);
|
||||||
void report_surveydone_event(struct adapter *padapter);
|
void report_surveydone_event(struct adapter *padapter);
|
||||||
void report_del_sta_event(struct adapter *padapter,
|
void report_del_sta_event(struct adapter *padapter,
|
||||||
unsigned char *addr, unsigned short reason);
|
unsigned char *addr, unsigned short reason);
|
||||||
|
@ -606,46 +606,46 @@ void start_clnt_join(struct adapter *padapter);
|
||||||
void start_create_ibss(struct adapter *padapter);
|
void start_create_ibss(struct adapter *padapter);
|
||||||
|
|
||||||
unsigned int OnAssocReq(struct adapter *padapter,
|
unsigned int OnAssocReq(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnAssocRsp(struct adapter *padapter,
|
unsigned int OnAssocRsp(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnProbeReq(struct adapter *padapter,
|
unsigned int OnProbeReq(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnProbeRsp(struct adapter *padapter,
|
unsigned int OnProbeRsp(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int DoReserved(struct adapter *padapter,
|
unsigned int DoReserved(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnBeacon(struct adapter *padapter,
|
unsigned int OnBeacon(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnAtim(struct adapter *padapter,
|
unsigned int OnAtim(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnDisassoc(struct adapter *padapter,
|
unsigned int OnDisassoc(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnAuth(struct adapter *padapter,
|
unsigned int OnAuth(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnAuthClient(struct adapter *padapter,
|
unsigned int OnAuthClient(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnDeAuth(struct adapter *padapter,
|
unsigned int OnDeAuth(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnAction(struct adapter *padapter,
|
unsigned int OnAction(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
|
|
||||||
unsigned int on_action_spct(struct adapter *padapter,
|
unsigned int on_action_spct(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnAction_qos(struct adapter *padapter,
|
unsigned int OnAction_qos(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnAction_dls(struct adapter *padapter,
|
unsigned int OnAction_dls(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnAction_back(struct adapter *padapter,
|
unsigned int OnAction_back(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int on_action_public(struct adapter *padapter,
|
unsigned int on_action_public(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnAction_ht(struct adapter *padapter,
|
unsigned int OnAction_ht(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnAction_wmm(struct adapter *padapter,
|
unsigned int OnAction_wmm(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
unsigned int OnAction_p2p(struct adapter *padapter,
|
unsigned int OnAction_p2p(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame);
|
struct recv_frame *precv_frame);
|
||||||
|
|
||||||
void mlmeext_joinbss_event_callback(struct adapter *padapter, int join_res);
|
void mlmeext_joinbss_event_callback(struct adapter *padapter, int join_res);
|
||||||
void mlmeext_sta_del_event_callback(struct adapter *padapter);
|
void mlmeext_sta_del_event_callback(struct adapter *padapter);
|
||||||
|
|
|
@ -267,7 +267,7 @@ struct recv_buf {
|
||||||
len = (unsigned int )(tail - data);
|
len = (unsigned int )(tail - data);
|
||||||
|
|
||||||
*/
|
*/
|
||||||
struct recv_frame_hdr {
|
struct recv_frame {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
struct sk_buff *pkt;
|
struct sk_buff *pkt;
|
||||||
struct sk_buff *pkt_newalloc;
|
struct sk_buff *pkt_newalloc;
|
||||||
|
@ -286,23 +286,15 @@ struct recv_frame_hdr {
|
||||||
struct recv_reorder_ctrl *preorder_ctrl;
|
struct recv_reorder_ctrl *preorder_ctrl;
|
||||||
};
|
};
|
||||||
|
|
||||||
union recv_frame {
|
struct recv_frame *_rtw_alloc_recvframe(struct __queue *pfree_recv_queue);
|
||||||
union {
|
struct recv_frame *rtw_alloc_recvframe(struct __queue *pfree_recv_queue);
|
||||||
struct list_head list;
|
void rtw_init_recvframe(struct recv_frame *precvframe,
|
||||||
struct recv_frame_hdr hdr;
|
|
||||||
uint mem[RECVFRAME_HDR_ALIGN>>2];
|
|
||||||
} u;
|
|
||||||
};
|
|
||||||
|
|
||||||
union recv_frame *_rtw_alloc_recvframe(struct __queue *pfree_recv_queue);
|
|
||||||
union recv_frame *rtw_alloc_recvframe(struct __queue *pfree_recv_queue);
|
|
||||||
void rtw_init_recvframe(union recv_frame *precvframe,
|
|
||||||
struct recv_priv *precvpriv);
|
struct recv_priv *precvpriv);
|
||||||
int rtw_free_recvframe(union recv_frame *precvframe,
|
int rtw_free_recvframe(struct recv_frame *precvframe,
|
||||||
struct __queue *pfree_recv_queue);
|
struct __queue *pfree_recv_queue);
|
||||||
#define rtw_dequeue_recvframe(queue) rtw_alloc_recvframe(queue)
|
#define rtw_dequeue_recvframe(queue) rtw_alloc_recvframe(queue)
|
||||||
int _rtw_enqueue_recvframe(union recv_frame *precvframe, struct __queue *queue);
|
int _rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue);
|
||||||
int rtw_enqueue_recvframe(union recv_frame *precvframe, struct __queue *queue);
|
int rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue);
|
||||||
void rtw_free_recvframe_queue(struct __queue *pframequeue,
|
void rtw_free_recvframe_queue(struct __queue *pframequeue,
|
||||||
struct __queue *pfree_recv_queue);
|
struct __queue *pfree_recv_queue);
|
||||||
u32 rtw_free_uc_swdec_pending_queue(struct adapter *adapter);
|
u32 rtw_free_uc_swdec_pending_queue(struct adapter *adapter);
|
||||||
|
@ -312,29 +304,29 @@ struct recv_buf *rtw_dequeue_recvbuf(struct __queue *queue);
|
||||||
|
|
||||||
void rtw_reordering_ctrl_timeout_handler(void *pcontext);
|
void rtw_reordering_ctrl_timeout_handler(void *pcontext);
|
||||||
|
|
||||||
static inline u8 *get_rxmem(union recv_frame *precvframe)
|
static inline u8 *get_rxmem(struct recv_frame *precvframe)
|
||||||
{
|
{
|
||||||
/* always return rx_head... */
|
/* always return rx_head... */
|
||||||
if (precvframe == NULL)
|
if (precvframe == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
return precvframe->u.hdr.rx_head;
|
return precvframe->rx_head;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u8 *get_rx_status(union recv_frame *precvframe)
|
static inline u8 *get_rx_status(struct recv_frame *precvframe)
|
||||||
{
|
{
|
||||||
return get_rxmem(precvframe);
|
return get_rxmem(precvframe);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u8 *get_recvframe_data(union recv_frame *precvframe)
|
static inline u8 *get_recvframe_data(struct recv_frame *precvframe)
|
||||||
{
|
{
|
||||||
/* always return rx_data */
|
/* always return rx_data */
|
||||||
if (precvframe == NULL)
|
if (precvframe == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return precvframe->u.hdr.rx_data;
|
return precvframe->rx_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u8 *recvframe_push(union recv_frame *precvframe, int sz)
|
static inline u8 *recvframe_push(struct recv_frame *precvframe, int sz)
|
||||||
{
|
{
|
||||||
/* append data before rx_data */
|
/* append data before rx_data */
|
||||||
|
|
||||||
|
@ -345,16 +337,16 @@ static inline u8 *recvframe_push(union recv_frame *precvframe, int sz)
|
||||||
*/
|
*/
|
||||||
if (precvframe == NULL)
|
if (precvframe == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
precvframe->u.hdr.rx_data -= sz ;
|
precvframe->rx_data -= sz ;
|
||||||
if (precvframe->u.hdr.rx_data < precvframe->u.hdr.rx_head) {
|
if (precvframe->rx_data < precvframe->rx_head) {
|
||||||
precvframe->u.hdr.rx_data += sz;
|
precvframe->rx_data += sz;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
precvframe->u.hdr.len += sz;
|
precvframe->len += sz;
|
||||||
return precvframe->u.hdr.rx_data;
|
return precvframe->rx_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u8 *recvframe_pull(union recv_frame *precvframe, int sz)
|
static inline u8 *recvframe_pull(struct recv_frame *precvframe, int sz)
|
||||||
{
|
{
|
||||||
/* rx_data += sz; move rx_data sz bytes hereafter */
|
/* rx_data += sz; move rx_data sz bytes hereafter */
|
||||||
|
|
||||||
|
@ -363,16 +355,16 @@ static inline u8 *recvframe_pull(union recv_frame *precvframe, int sz)
|
||||||
|
|
||||||
if (precvframe == NULL)
|
if (precvframe == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
precvframe->u.hdr.rx_data += sz;
|
precvframe->rx_data += sz;
|
||||||
if (precvframe->u.hdr.rx_data > precvframe->u.hdr.rx_tail) {
|
if (precvframe->rx_data > precvframe->rx_tail) {
|
||||||
precvframe->u.hdr.rx_data -= sz;
|
precvframe->rx_data -= sz;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
precvframe->u.hdr.len -= sz;
|
precvframe->len -= sz;
|
||||||
return precvframe->u.hdr.rx_data;
|
return precvframe->rx_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u8 *recvframe_put(union recv_frame *precvframe, int sz)
|
static inline u8 *recvframe_put(struct recv_frame *precvframe, int sz)
|
||||||
{
|
{
|
||||||
/* used for append sz bytes from ptr to rx_tail, update rx_tail
|
/* used for append sz bytes from ptr to rx_tail, update rx_tail
|
||||||
* and return the updated rx_tail to the caller */
|
* and return the updated rx_tail to the caller */
|
||||||
|
@ -381,17 +373,17 @@ static inline u8 *recvframe_put(union recv_frame *precvframe, int sz)
|
||||||
if (precvframe == NULL)
|
if (precvframe == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
precvframe->u.hdr.rx_tail += sz;
|
precvframe->rx_tail += sz;
|
||||||
|
|
||||||
if (precvframe->u.hdr.rx_tail > precvframe->u.hdr.rx_end) {
|
if (precvframe->rx_tail > precvframe->rx_end) {
|
||||||
precvframe->u.hdr.rx_tail -= sz;
|
precvframe->rx_tail -= sz;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
precvframe->u.hdr.len += sz;
|
precvframe->len += sz;
|
||||||
return precvframe->u.hdr.rx_tail;
|
return precvframe->rx_tail;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u8 *recvframe_pull_tail(union recv_frame *precvframe, int sz)
|
static inline u8 *recvframe_pull_tail(struct recv_frame *precvframe, int sz)
|
||||||
{
|
{
|
||||||
/* rmv data from rx_tail (by yitsen) */
|
/* rmv data from rx_tail (by yitsen) */
|
||||||
|
|
||||||
|
@ -401,16 +393,16 @@ static inline u8 *recvframe_pull_tail(union recv_frame *precvframe, int sz)
|
||||||
|
|
||||||
if (precvframe == NULL)
|
if (precvframe == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
precvframe->u.hdr.rx_tail -= sz;
|
precvframe->rx_tail -= sz;
|
||||||
if (precvframe->u.hdr.rx_tail < precvframe->u.hdr.rx_data) {
|
if (precvframe->rx_tail < precvframe->rx_data) {
|
||||||
precvframe->u.hdr.rx_tail += sz;
|
precvframe->rx_tail += sz;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
precvframe->u.hdr.len -= sz;
|
precvframe->len -= sz;
|
||||||
return precvframe->u.hdr.rx_tail;
|
return precvframe->rx_tail;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned char *get_rxbuf_desc(union recv_frame *precvframe)
|
static inline unsigned char *get_rxbuf_desc(struct recv_frame *precvframe)
|
||||||
{
|
{
|
||||||
unsigned char *buf_desc;
|
unsigned char *buf_desc;
|
||||||
|
|
||||||
|
@ -419,20 +411,20 @@ static inline unsigned char *get_rxbuf_desc(union recv_frame *precvframe)
|
||||||
return buf_desc;
|
return buf_desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline union recv_frame *rxmem_to_recvframe(u8 *rxmem)
|
static inline struct recv_frame *rxmem_to_recvframe(u8 *rxmem)
|
||||||
{
|
{
|
||||||
/* due to the design of 2048 bytes alignment of recv_frame,
|
/* due to the design of 2048 bytes alignment of recv_frame,
|
||||||
* we can reference the union recv_frame */
|
* we can reference the struct recv_frame */
|
||||||
/* from any given member of recv_frame. */
|
/* from any given member of recv_frame. */
|
||||||
/* rxmem indicates the any member/address in recv_frame */
|
/* rxmem indicates the any member/address in recv_frame */
|
||||||
|
|
||||||
return (union recv_frame *)(((size_t)rxmem >> RXFRAME_ALIGN) << RXFRAME_ALIGN);
|
return (struct recv_frame *)(((size_t)rxmem >> RXFRAME_ALIGN) << RXFRAME_ALIGN);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline union recv_frame *pkt_to_recvframe(struct sk_buff *pkt)
|
static inline struct recv_frame *pkt_to_recvframe(struct sk_buff *pkt)
|
||||||
{
|
{
|
||||||
u8 *buf_star;
|
u8 *buf_star;
|
||||||
union recv_frame *precv_frame;
|
struct recv_frame *precv_frame;
|
||||||
precv_frame = rxmem_to_recvframe((unsigned char *)buf_star);
|
precv_frame = rxmem_to_recvframe((unsigned char *)buf_star);
|
||||||
|
|
||||||
return precv_frame;
|
return precv_frame;
|
||||||
|
@ -442,23 +434,23 @@ static inline u8 *pkt_to_recvmem(struct sk_buff *pkt)
|
||||||
{
|
{
|
||||||
/* return the rx_head */
|
/* return the rx_head */
|
||||||
|
|
||||||
union recv_frame *precv_frame = pkt_to_recvframe(pkt);
|
struct recv_frame *precv_frame = pkt_to_recvframe(pkt);
|
||||||
|
|
||||||
return precv_frame->u.hdr.rx_head;
|
return precv_frame->rx_head;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u8 *pkt_to_recvdata(struct sk_buff *pkt)
|
static inline u8 *pkt_to_recvdata(struct sk_buff *pkt)
|
||||||
{
|
{
|
||||||
/* return the rx_data */
|
/* return the rx_data */
|
||||||
|
|
||||||
union recv_frame *precv_frame = pkt_to_recvframe(pkt);
|
struct recv_frame *precv_frame = pkt_to_recvframe(pkt);
|
||||||
|
|
||||||
return precv_frame->u.hdr.rx_data;
|
return precv_frame->rx_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int get_recvframe_len(union recv_frame *precvframe)
|
static inline int get_recvframe_len(struct recv_frame *precvframe)
|
||||||
{
|
{
|
||||||
return precvframe->u.hdr.len;
|
return precvframe->len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline s32 translate_percentage_to_dbm(u32 sig_stren_index)
|
static inline s32 translate_percentage_to_dbm(u32 sig_stren_index)
|
||||||
|
@ -476,6 +468,6 @@ struct sta_info;
|
||||||
|
|
||||||
void _rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv);
|
void _rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv);
|
||||||
|
|
||||||
void mgt_dispatcher(struct adapter *padapter, union recv_frame *precv_frame);
|
void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -36,16 +36,16 @@ int rtw_os_recv_resource_init(struct recv_priv *precvpriv,
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* alloc os related resource in union recv_frame */
|
/* alloc os related resource in struct recv_frame */
|
||||||
int rtw_os_recv_resource_alloc(struct adapter *padapter,
|
int rtw_os_recv_resource_alloc(struct adapter *padapter,
|
||||||
union recv_frame *precvframe)
|
struct recv_frame *precvframe)
|
||||||
{
|
{
|
||||||
precvframe->u.hdr.pkt_newalloc = NULL;
|
precvframe->pkt_newalloc = NULL;
|
||||||
precvframe->u.hdr.pkt = NULL;
|
precvframe->pkt = NULL;
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* free os related resource in union recv_frame */
|
/* free os related resource in struct recv_frame */
|
||||||
void rtw_os_recv_resource_free(struct recv_priv *precvpriv)
|
void rtw_os_recv_resource_free(struct recv_priv *precvpriv)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -118,12 +118,12 @@ void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup)
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtw_hostapd_mlme_rx(struct adapter *padapter,
|
void rtw_hostapd_mlme_rx(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame)
|
struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
int rtw_recv_indicatepkt(struct adapter *padapter,
|
int rtw_recv_indicatepkt(struct adapter *padapter,
|
||||||
union recv_frame *precv_frame)
|
struct recv_frame *precv_frame)
|
||||||
{
|
{
|
||||||
struct recv_priv *precvpriv;
|
struct recv_priv *precvpriv;
|
||||||
struct __queue *pfree_recv_queue;
|
struct __queue *pfree_recv_queue;
|
||||||
|
@ -133,7 +133,7 @@ int rtw_recv_indicatepkt(struct adapter *padapter,
|
||||||
precvpriv = &(padapter->recvpriv);
|
precvpriv = &(padapter->recvpriv);
|
||||||
pfree_recv_queue = &(precvpriv->free_recv_queue);
|
pfree_recv_queue = &(precvpriv->free_recv_queue);
|
||||||
|
|
||||||
skb = precv_frame->u.hdr.pkt;
|
skb = precv_frame->pkt;
|
||||||
if (skb == NULL) {
|
if (skb == NULL) {
|
||||||
RT_TRACE(_module_recv_osdep_c_, _drv_err_,
|
RT_TRACE(_module_recv_osdep_c_, _drv_err_,
|
||||||
("rtw_recv_indicatepkt():skb == NULL something wrong!!!!\n"));
|
("rtw_recv_indicatepkt():skb == NULL something wrong!!!!\n"));
|
||||||
|
@ -143,18 +143,18 @@ int rtw_recv_indicatepkt(struct adapter *padapter,
|
||||||
RT_TRACE(_module_recv_osdep_c_, _drv_info_,
|
RT_TRACE(_module_recv_osdep_c_, _drv_info_,
|
||||||
("rtw_recv_indicatepkt():skb != NULL !!!\n"));
|
("rtw_recv_indicatepkt():skb != NULL !!!\n"));
|
||||||
RT_TRACE(_module_recv_osdep_c_, _drv_info_,
|
RT_TRACE(_module_recv_osdep_c_, _drv_info_,
|
||||||
("rtw_recv_indicatepkt():precv_frame->u.hdr.rx_head =%p precv_frame->hdr.rx_data =%p\n",
|
("rtw_recv_indicatepkt():precv_frame->rx_head =%p precv_frame->hdr.rx_data =%p\n",
|
||||||
precv_frame->u.hdr.rx_head, precv_frame->u.hdr.rx_data));
|
precv_frame->rx_head, precv_frame->rx_data));
|
||||||
RT_TRACE(_module_recv_osdep_c_, _drv_info_,
|
RT_TRACE(_module_recv_osdep_c_, _drv_info_,
|
||||||
("precv_frame->hdr.rx_tail =%p precv_frame->u.hdr.rx_end =%p precv_frame->hdr.len =%d\n",
|
("precv_frame->hdr.rx_tail =%p precv_frame->rx_end =%p precv_frame->hdr.len =%d\n",
|
||||||
precv_frame->u.hdr.rx_tail, precv_frame->u.hdr.rx_end,
|
precv_frame->rx_tail, precv_frame->rx_end,
|
||||||
precv_frame->u.hdr.len));
|
precv_frame->len));
|
||||||
|
|
||||||
skb->data = precv_frame->u.hdr.rx_data;
|
skb->data = precv_frame->rx_data;
|
||||||
|
|
||||||
skb_set_tail_pointer(skb, precv_frame->u.hdr.len);
|
skb_set_tail_pointer(skb, precv_frame->len);
|
||||||
|
|
||||||
skb->len = precv_frame->u.hdr.len;
|
skb->len = precv_frame->len;
|
||||||
|
|
||||||
RT_TRACE(_module_recv_osdep_c_, _drv_info_,
|
RT_TRACE(_module_recv_osdep_c_, _drv_info_,
|
||||||
("skb->head =%p skb->data =%p skb->tail =%p skb->end =%p skb->len =%d\n",
|
("skb->head =%p skb->data =%p skb->tail =%p skb->end =%p skb->len =%d\n",
|
||||||
|
@ -165,7 +165,7 @@ int rtw_recv_indicatepkt(struct adapter *padapter,
|
||||||
struct sk_buff *pskb2 = NULL;
|
struct sk_buff *pskb2 = NULL;
|
||||||
struct sta_info *psta = NULL;
|
struct sta_info *psta = NULL;
|
||||||
struct sta_priv *pstapriv = &padapter->stapriv;
|
struct sta_priv *pstapriv = &padapter->stapriv;
|
||||||
struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
|
||||||
int bmcast = IS_MCAST(pattrib->dst);
|
int bmcast = IS_MCAST(pattrib->dst);
|
||||||
|
|
||||||
if (memcmp(pattrib->dst, myid(&padapter->eeprompriv),
|
if (memcmp(pattrib->dst, myid(&padapter->eeprompriv),
|
||||||
|
@ -211,7 +211,7 @@ int rtw_recv_indicatepkt(struct adapter *padapter,
|
||||||
_recv_indicatepkt_end:
|
_recv_indicatepkt_end:
|
||||||
|
|
||||||
/* pointers to NULL before rtw_free_recvframe() */
|
/* pointers to NULL before rtw_free_recvframe() */
|
||||||
precv_frame->u.hdr.pkt = NULL;
|
precv_frame->pkt = NULL;
|
||||||
|
|
||||||
rtw_free_recvframe(precv_frame, pfree_recv_queue);
|
rtw_free_recvframe(precv_frame, pfree_recv_queue);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue