mirror of
https://github.com/chinawrj/rtl8812au
synced 2024-11-10 08:07:18 +00:00
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:
commit
d58f5327df
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user