Merge pull request #107 from kimocoder/v5.1.5

* FCS fixes for 8812 and 8814 (thanks to j-forristal)
  * Removed pre-configured SeqNum via RadioTap
  * Fixed power savings breaking monitor mode
This commit is contained in:
Christian B 2018-03-27 15:05:11 +02:00 committed by GitHub
commit d58f5327df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 24 additions and 17 deletions

View File

@ -219,6 +219,7 @@ bool rtw_pwr_unassociated_idle(_adapter *adapter)
|| check_fwstate(pmlmepriv, WIFI_UNDER_LINKING | WIFI_UNDER_WPS)
|| check_fwstate(pmlmepriv, WIFI_AP_STATE)
|| check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE)
|| check_fwstate(pmlmepriv, WIFI_MONITOR_STATE)
#if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
|| pcfg80211_wdinfo->is_ro_ch
#elif defined(CONFIG_P2P)
@ -618,6 +619,7 @@ u8 PS_RDY_CHECK(_adapter *padapter)
|| check_fwstate(pmlmepriv, WIFI_UNDER_LINKING | WIFI_UNDER_WPS)
|| check_fwstate(pmlmepriv, WIFI_AP_STATE)
|| check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE)
|| check_fwstate(pmlmepriv, WIFI_MONITOR_STATE)
#if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
|| pcfg80211_wdinfo->is_ro_ch
#endif

View File

@ -3608,8 +3608,15 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe)
if (pattrib->mfrag)
hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_FRAG;
/* always append FCS */
/* hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_FCS; */
#ifdef CONFIG_RX_PACKET_APPEND_FCS
// Start by always indicating FCS is there:
hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_FCS;
// Next, test for prior conditions that will remove FCS, and update flag accordingly:
if(check_fwstate(&padapter->mlmepriv,WIFI_MONITOR_STATE) == _FALSE)
if((pattrib->pkt_rpt_type == NORMAL_RX) && (pHalData->ReceiveConfig & RCR_APPFCS))
hdr_buf[rt_len] &= ~IEEE80211_RADIOTAP_F_FCS;
#endif
if (0)
hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_DATAPAD;

View File

@ -3875,7 +3875,7 @@ s32 rtw_monitor_xmit_entry(struct sk_buff *skb, struct net_device *ndev)
u32 len = skb->len;
u8 category, action;
int type = -1;
//RTW_INFO(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
if (skb)
@ -3923,17 +3923,17 @@ s32 rtw_monitor_xmit_entry(struct sk_buff *skb, struct net_device *ndev)
fixed_rate = 0;
fixed_rate += MGN_MCS0;
}
if ((mcs_have & 4) &&
if ((mcs_have & 4) &&
(iterator.this_arg[1] & 4))
sgi = 1;
if ((mcs_have & 1) &&
if ((mcs_have & 1) &&
(iterator.this_arg[1] & 1))
bwidth = 1;
if ((mcs_have & 0x10) &&
if ((mcs_have & 0x10) &&
(iterator.this_arg[1] & 0x10))
ldpc = 1;
if ((mcs_have & 0x20))
stbc = (iterator.this_arg[1] >> 5) & 3;
stbc = (iterator.this_arg[1] >> 5) & 3;
}
break;
@ -3995,9 +3995,9 @@ s32 rtw_monitor_xmit_entry(struct sk_buff *skb, struct net_device *ndev)
pattrib->ldpc = ldpc;
pattrib->stbc = stbc;
pattrib->retry_ctrl = (txflags & 0x08)?_FALSE:_TRUE;
pattrib->sw_seq = (txflags & 0x10)?_TRUE:_FALSE;
// pattrib->sw_seq = (txflags & 0x10)?_TRUE:_FALSE; // Adds support for pre-configured SeqNum via RadioTap
pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
pmlmeext->mgnt_seq = GetSequence(pwlanhdr);

View File

@ -112,7 +112,7 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz , u8 ba
/* offset 12 */
if (!pattrib->qos_en && pattrib->sw_seq == _FALSE) {
if (!pattrib->qos_en) {
SET_TX_DESC_HWSEQ_EN_8812(ptxdesc, 1); /* Hw set sequence number */
} else
SET_TX_DESC_SEQ_8812(ptxdesc, pattrib->seqnum);

View File

@ -118,10 +118,7 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz ,u8 bag
if (!pattrib->qos_en) {
/* HW sequence, to fix to use 0 queue. todo: 4AC packets to use auto queue select */
if (pattrib->sw_seq == _FALSE)
SET_TX_DESC_HWSEQ_EN_8814A(ptxdesc, 1); // Hw set sequence number
else
SET_TX_DESC_SEQ_8814A(ptxdesc, pattrib->seqnum);
SET_TX_DESC_HWSEQ_EN_8814A(ptxdesc, 1); // Hw set sequence number
SET_TX_DESC_EN_HWEXSEQ_8814A(ptxdesc, 0);
SET_TX_DESC_DISQSELSEQ_8814A(ptxdesc, 1);
SET_TX_DESC_HW_SSN_SEL_8814A(ptxdesc, 0);

View File

@ -357,8 +357,9 @@ int recvbuf2recvframe(PADAPTER padapter, void *ptr)
}
#ifdef CONFIG_RX_PACKET_APPEND_FCS
if(pattrib->pkt_rpt_type == NORMAL_RX)
pattrib->pkt_len -= IEEE80211_FCS_LEN;
if (check_fwstate(&padapter->mlmepriv, WIFI_MONITOR_STATE) == _FALSE)
if ((pattrib->pkt_rpt_type == NORMAL_RX) && (pHalData->ReceiveConfig & RCR_APPFCS))
pattrib->pkt_len -= IEEE80211_FCS_LEN;
#endif
if(rtw_os_alloc_recvframe(padapter, precvframe,
(pbuf + pattrib->shift_sz + pattrib->drvinfo_sz + RXDESC_SIZE), pskb) == _FAIL)

View File

@ -421,7 +421,7 @@ struct pkt_attrib {
u8 rate;
u8 intel_proxim;
u8 retry_ctrl;
u8 sw_seq;
//u8 sw_seq; // Add support for pre-configured SeqNum via RadioTap
u8 mbssid;
u8 ldpc;
u8 stbc;