mirror of
https://github.com/chinawrj/rtl8812au
synced 2024-11-13 01:22:30 +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_UNDER_LINKING | WIFI_UNDER_WPS)
|
||||||
|| check_fwstate(pmlmepriv, WIFI_AP_STATE)
|
|| check_fwstate(pmlmepriv, WIFI_AP_STATE)
|
||||||
|| check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_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)
|
#if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
|
||||||
|| pcfg80211_wdinfo->is_ro_ch
|
|| pcfg80211_wdinfo->is_ro_ch
|
||||||
#elif defined(CONFIG_P2P)
|
#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_UNDER_LINKING | WIFI_UNDER_WPS)
|
||||||
|| check_fwstate(pmlmepriv, WIFI_AP_STATE)
|
|| check_fwstate(pmlmepriv, WIFI_AP_STATE)
|
||||||
|| check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_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)
|
#if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
|
||||||
|| pcfg80211_wdinfo->is_ro_ch
|
|| pcfg80211_wdinfo->is_ro_ch
|
||||||
#endif
|
#endif
|
||||||
|
@ -3608,8 +3608,15 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe)
|
|||||||
if (pattrib->mfrag)
|
if (pattrib->mfrag)
|
||||||
hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_FRAG;
|
hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_FRAG;
|
||||||
|
|
||||||
/* always append FCS */
|
#ifdef CONFIG_RX_PACKET_APPEND_FCS
|
||||||
/* hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_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)
|
if (0)
|
||||||
hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_DATAPAD;
|
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;
|
u32 len = skb->len;
|
||||||
u8 category, action;
|
u8 category, action;
|
||||||
int type = -1;
|
int type = -1;
|
||||||
|
|
||||||
//RTW_INFO(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
|
//RTW_INFO(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
|
||||||
|
|
||||||
if (skb)
|
if (skb)
|
||||||
@ -3923,17 +3923,17 @@ s32 rtw_monitor_xmit_entry(struct sk_buff *skb, struct net_device *ndev)
|
|||||||
fixed_rate = 0;
|
fixed_rate = 0;
|
||||||
fixed_rate += MGN_MCS0;
|
fixed_rate += MGN_MCS0;
|
||||||
}
|
}
|
||||||
if ((mcs_have & 4) &&
|
if ((mcs_have & 4) &&
|
||||||
(iterator.this_arg[1] & 4))
|
(iterator.this_arg[1] & 4))
|
||||||
sgi = 1;
|
sgi = 1;
|
||||||
if ((mcs_have & 1) &&
|
if ((mcs_have & 1) &&
|
||||||
(iterator.this_arg[1] & 1))
|
(iterator.this_arg[1] & 1))
|
||||||
bwidth = 1;
|
bwidth = 1;
|
||||||
if ((mcs_have & 0x10) &&
|
if ((mcs_have & 0x10) &&
|
||||||
(iterator.this_arg[1] & 0x10))
|
(iterator.this_arg[1] & 0x10))
|
||||||
ldpc = 1;
|
ldpc = 1;
|
||||||
if ((mcs_have & 0x20))
|
if ((mcs_have & 0x20))
|
||||||
stbc = (iterator.this_arg[1] >> 5) & 3;
|
stbc = (iterator.this_arg[1] >> 5) & 3;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -3995,9 +3995,9 @@ s32 rtw_monitor_xmit_entry(struct sk_buff *skb, struct net_device *ndev)
|
|||||||
pattrib->ldpc = ldpc;
|
pattrib->ldpc = ldpc;
|
||||||
pattrib->stbc = stbc;
|
pattrib->stbc = stbc;
|
||||||
pattrib->retry_ctrl = (txflags & 0x08)?_FALSE:_TRUE;
|
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;
|
pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
|
||||||
|
|
||||||
pmlmeext->mgnt_seq = GetSequence(pwlanhdr);
|
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 */
|
/* 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 */
|
SET_TX_DESC_HWSEQ_EN_8812(ptxdesc, 1); /* Hw set sequence number */
|
||||||
} else
|
} else
|
||||||
SET_TX_DESC_SEQ_8812(ptxdesc, pattrib->seqnum);
|
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) {
|
if (!pattrib->qos_en) {
|
||||||
/* HW sequence, to fix to use 0 queue. todo: 4AC packets to use auto queue select */
|
/* 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
|
||||||
SET_TX_DESC_HWSEQ_EN_8814A(ptxdesc, 1); // Hw set sequence number
|
|
||||||
else
|
|
||||||
SET_TX_DESC_SEQ_8814A(ptxdesc, pattrib->seqnum);
|
|
||||||
SET_TX_DESC_EN_HWEXSEQ_8814A(ptxdesc, 0);
|
SET_TX_DESC_EN_HWEXSEQ_8814A(ptxdesc, 0);
|
||||||
SET_TX_DESC_DISQSELSEQ_8814A(ptxdesc, 1);
|
SET_TX_DESC_DISQSELSEQ_8814A(ptxdesc, 1);
|
||||||
SET_TX_DESC_HW_SSN_SEL_8814A(ptxdesc, 0);
|
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
|
#ifdef CONFIG_RX_PACKET_APPEND_FCS
|
||||||
if(pattrib->pkt_rpt_type == NORMAL_RX)
|
if (check_fwstate(&padapter->mlmepriv, WIFI_MONITOR_STATE) == _FALSE)
|
||||||
pattrib->pkt_len -= IEEE80211_FCS_LEN;
|
if ((pattrib->pkt_rpt_type == NORMAL_RX) && (pHalData->ReceiveConfig & RCR_APPFCS))
|
||||||
|
pattrib->pkt_len -= IEEE80211_FCS_LEN;
|
||||||
#endif
|
#endif
|
||||||
if(rtw_os_alloc_recvframe(padapter, precvframe,
|
if(rtw_os_alloc_recvframe(padapter, precvframe,
|
||||||
(pbuf + pattrib->shift_sz + pattrib->drvinfo_sz + RXDESC_SIZE), pskb) == _FAIL)
|
(pbuf + pattrib->shift_sz + pattrib->drvinfo_sz + RXDESC_SIZE), pskb) == _FAIL)
|
||||||
|
@ -421,7 +421,7 @@ struct pkt_attrib {
|
|||||||
u8 rate;
|
u8 rate;
|
||||||
u8 intel_proxim;
|
u8 intel_proxim;
|
||||||
u8 retry_ctrl;
|
u8 retry_ctrl;
|
||||||
u8 sw_seq;
|
//u8 sw_seq; // Add support for pre-configured SeqNum via RadioTap
|
||||||
u8 mbssid;
|
u8 mbssid;
|
||||||
u8 ldpc;
|
u8 ldpc;
|
||||||
u8 stbc;
|
u8 stbc;
|
||||||
|
Loading…
Reference in New Issue
Block a user