Commit 11d261f2 authored by Ping-Ke Shih's avatar Ping-Ke Shih Committed by Kalle Valo

rtw89: send broadcast/multicast packets via HIQ if STAs are in sleep mode

If a packet we are going to send is broadcast/multicast and certain STAs
are in sleep mode, a flag IEEE80211_TX_CTL_SEND_AFTER_DTIM is added to
txinfo. Then, this kind of packets must be sent via HIQ instead of regular
AC queues, because they should be sent right after beacon.
Signed-off-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220107034239.22002-11-pkshih@realtek.com
parent 283c3d88
...@@ -380,10 +380,10 @@ rtw89_core_tx_update_mgmt_info(struct rtw89_dev *rtwdev, ...@@ -380,10 +380,10 @@ rtw89_core_tx_update_mgmt_info(struct rtw89_dev *rtwdev,
struct rtw89_tx_desc_info *desc_info = &tx_req->desc_info; struct rtw89_tx_desc_info *desc_info = &tx_req->desc_info;
u8 qsel, ch_dma; u8 qsel, ch_dma;
qsel = RTW89_TX_QSEL_B0_MGMT; qsel = desc_info->hiq ? RTW89_TX_QSEL_B0_HI : RTW89_TX_QSEL_B0_MGMT;
ch_dma = rtw89_core_get_ch_dma(rtwdev, qsel); ch_dma = rtw89_core_get_ch_dma(rtwdev, qsel);
desc_info->qsel = RTW89_TX_QSEL_B0_MGMT; desc_info->qsel = qsel;
desc_info->ch_dma = ch_dma; desc_info->ch_dma = ch_dma;
desc_info->hw_ssn_sel = RTW89_MGMT_HW_SSN_SEL; desc_info->hw_ssn_sel = RTW89_MGMT_HW_SSN_SEL;
desc_info->hw_seq_mode = RTW89_MGMT_HW_SEQ_MODE; desc_info->hw_seq_mode = RTW89_MGMT_HW_SEQ_MODE;
...@@ -537,7 +537,7 @@ rtw89_core_tx_update_data_info(struct rtw89_dev *rtwdev, ...@@ -537,7 +537,7 @@ rtw89_core_tx_update_data_info(struct rtw89_dev *rtwdev,
tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK; tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
tid_indicate = rtw89_core_get_tid_indicate(rtwdev, tid); tid_indicate = rtw89_core_get_tid_indicate(rtwdev, tid);
qsel = rtw89_core_get_qsel(rtwdev, tid); qsel = desc_info->hiq ? RTW89_TX_QSEL_B0_HI : rtw89_core_get_qsel(rtwdev, tid);
ch_dma = rtw89_core_get_ch_dma(rtwdev, qsel); ch_dma = rtw89_core_get_ch_dma(rtwdev, qsel);
desc_info->ch_dma = ch_dma; desc_info->ch_dma = ch_dma;
...@@ -603,6 +603,7 @@ rtw89_core_tx_update_desc_info(struct rtw89_dev *rtwdev, ...@@ -603,6 +603,7 @@ rtw89_core_tx_update_desc_info(struct rtw89_dev *rtwdev,
{ {
struct rtw89_tx_desc_info *desc_info = &tx_req->desc_info; struct rtw89_tx_desc_info *desc_info = &tx_req->desc_info;
struct sk_buff *skb = tx_req->skb; struct sk_buff *skb = tx_req->skb;
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
struct ieee80211_hdr *hdr = (void *)skb->data; struct ieee80211_hdr *hdr = (void *)skb->data;
enum rtw89_core_tx_type tx_type; enum rtw89_core_tx_type tx_type;
enum btc_pkt_type pkt_type; enum btc_pkt_type pkt_type;
...@@ -621,6 +622,7 @@ rtw89_core_tx_update_desc_info(struct rtw89_dev *rtwdev, ...@@ -621,6 +622,7 @@ rtw89_core_tx_update_desc_info(struct rtw89_dev *rtwdev,
desc_info->pkt_size = skb->len; desc_info->pkt_size = skb->len;
desc_info->is_bmc = is_bmc; desc_info->is_bmc = is_bmc;
desc_info->wd_page = true; desc_info->wd_page = true;
desc_info->hiq = info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM;
switch (tx_req->tx_type) { switch (tx_req->tx_type) {
case RTW89_CORE_TX_TYPE_MGMT: case RTW89_CORE_TX_TYPE_MGMT:
......
...@@ -690,6 +690,7 @@ struct rtw89_tx_desc_info { ...@@ -690,6 +690,7 @@ struct rtw89_tx_desc_info {
#define RTW89_MGMT_HW_SSN_SEL 1 #define RTW89_MGMT_HW_SSN_SEL 1
u8 hw_seq_mode; u8 hw_seq_mode;
#define RTW89_MGMT_HW_SEQ_MODE 1 #define RTW89_MGMT_HW_SEQ_MODE 1
bool hiq;
}; };
struct rtw89_core_tx_request { struct rtw89_core_tx_request {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment