| From 7b7d9e3ef08ce5526d43d657cb717b471002b087 Mon Sep 17 00:00:00 2001 |
| From: Benjamin Lin <benjamin-jw.lin@mediatek.com> |
| Date: Wed, 3 Apr 2024 14:05:59 +0800 |
| Subject: [PATCH] wifi: mt76: mt7915: add support for IEEE 802.11 fragmentation |
| |
| Add fragmentation index into TXD.DW2 to support IEEE 802.11 fragmentation. |
| |
| Signed-off-by: Benjamin Lin <benjamin-jw.lin@mediatek.com> |
| --- |
| mt76_connac2_mac.h | 7 +++++++ |
| mt76_connac_mac.c | 10 +++++++++- |
| 2 files changed, 16 insertions(+), 1 deletion(-) |
| |
| diff --git a/mt76_connac2_mac.h b/mt76_connac2_mac.h |
| index 5f13211..eb47653 100644 |
| --- a/mt76_connac2_mac.h |
| +++ b/mt76_connac2_mac.h |
| @@ -355,4 +355,11 @@ enum tx_port_idx { |
| MT_TX_PORT_IDX_MCU |
| }; |
| |
| +enum tx_frag_idx { |
| + MT_TX_FRAG_NONE, |
| + MT_TX_FRAG_FIRST, |
| + MT_TX_FRAG_MID, |
| + MT_TX_FRAG_LAST |
| +}; |
| + |
| #endif /* __MT76_CONNAC2_MAC_H */ |
| diff --git a/mt76_connac_mac.c b/mt76_connac_mac.c |
| index 630c640..d7d602a 100644 |
| --- a/mt76_connac_mac.c |
| +++ b/mt76_connac_mac.c |
| @@ -391,6 +391,7 @@ mt76_connac2_mac_write_txwi_80211(struct mt76_dev *dev, __le32 *txwi, |
| bool multicast = is_multicast_ether_addr(hdr->addr1); |
| u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK; |
| __le16 fc = hdr->frame_control; |
| + __le16 sc = hdr->seq_ctrl; |
| u8 fc_type, fc_stype; |
| u32 val; |
| |
| @@ -432,6 +433,13 @@ mt76_connac2_mac_write_txwi_80211(struct mt76_dev *dev, __le32 *txwi, |
| info->flags & IEEE80211_TX_CTL_USE_MINRATE) |
| val |= MT_TXD2_FIX_RATE; |
| |
| + if (ieee80211_has_morefrags(fc) && ieee80211_is_first_frag(sc)) |
| + val |= FIELD_PREP(MT_TXD2_FRAG, MT_TX_FRAG_FIRST); |
| + else if (ieee80211_has_morefrags(fc) && !ieee80211_is_first_frag(sc)) |
| + val |= FIELD_PREP(MT_TXD2_FRAG, MT_TX_FRAG_MID); |
| + else if (!ieee80211_has_morefrags(fc) && !ieee80211_is_first_frag(sc)) |
| + val |= FIELD_PREP(MT_TXD2_FRAG, MT_TX_FRAG_LAST); |
| + |
| txwi[2] |= cpu_to_le32(val); |
| |
| if (ieee80211_is_beacon(fc)) { |
| @@ -440,7 +448,7 @@ mt76_connac2_mac_write_txwi_80211(struct mt76_dev *dev, __le32 *txwi, |
| } |
| |
| if (info->flags & IEEE80211_TX_CTL_INJECTED) { |
| - u16 seqno = le16_to_cpu(hdr->seq_ctrl); |
| + u16 seqno = le16_to_cpu(sc); |
| |
| if (ieee80211_is_back_req(hdr->frame_control)) { |
| struct ieee80211_bar *bar; |
| -- |
| 2.18.0 |
| |