Fix radiotap header for 8814au chipset

This commit is contained in:
kimocoder 2019-11-11 02:36:13 +01:00
parent 2293742a84
commit 54ed666a16
2 changed files with 15 additions and 12 deletions

2
88XXau.mod Normal file

File diff suppressed because one or more lines are too long

View File

@ -4018,6 +4018,12 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe,
rtap_hdr = (struct ieee80211_radiotap_header *)&hdr_buf[0];
rtap_hdr->it_version = PKTHDR_RADIOTAP_VERSION;
#ifdef CONFIG_RTL8814A
/* RTL8814AU rx descriptor has no bandwidth, ldpc, stbc and sgi info */
/* fixup bandwidth */
pattrib->bw = pattrib->phy_info.band_width & 0x03;
#endif
/* tsft */
if (pattrib->tsfl) {
u64 tmp_64bit;
@ -4140,13 +4146,15 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe,
hdr_buf[rt_len + 1] |= (pattrib->bw & 0x03);
/* guard interval */
#ifndef CONFIG_RTL8814A
hdr_buf[rt_len] |= BIT2;
hdr_buf[rt_len + 1] |= (pattrib->sgi & 0x01) << 2;
#endif
/* STBC */
#ifndef CONFIG_RTL8814A
hdr_buf[rt_len] |= BIT5;
hdr_buf[rt_len + 1] |= (pattrib->stbc & 0x03) << 5;
#endif
rt_len += 2;
/* MCS rate index */
@ -4179,7 +4187,9 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe,
hdr_buf[rt_len + 2] |= (pattrib->sgi & 0x01) << 2;
/* LDPC extra OFDM symbol */
#ifndef CONFIG_RTL8814A
tmp_16bit |= BIT4;
#endif
hdr_buf[rt_len + 2] |= (pattrib->ldpc & 0x01) << 4;
memcpy(&hdr_buf[rt_len], &tmp_16bit, 2);
@ -4516,29 +4526,23 @@ exit:
return ret;
}
s32 rtw_recv_entry(union recv_frame *precvframe)
{
_adapter *padapter;
struct recv_priv *precvpriv;
s32 ret = _SUCCESS;
padapter = precvframe->u.hdr.adapter;
precvpriv = &padapter->recvpriv;
ret = recv_func(padapter, precvframe);
if (ret == _FAIL) {
goto _recv_entry_drop;
}
precvpriv->rx_pkts++;
return ret;
_recv_entry_drop:
@ -4548,8 +4552,6 @@ _recv_entry_drop:
padapter->mppriv.rx_pktloss = precvpriv->rx_drop;
#endif
return ret;
}
@ -4884,7 +4886,7 @@ void rx_query_phy_status(
precvframe->u.hdr.psta = psta;
rx_process_phy_info(padapter, precvframe);
}
} else
} else
#endif
{
if (psta)
@ -5087,4 +5089,3 @@ void dump_rx_bh_tk(void *sel, struct recv_priv *recv)
);
}
#endif /* DBG_RX_BH_TRACKING */