mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
wifi: mt76: connac: add IEEE 802.11 fragmentation support for mt7996
Add fragment index into TXD.DW2 to support IEEE 802.11 fragmentation. Signed-off-by: Benjamin Lin <[email protected]> Signed-off-by: Shayne Chen <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
committed by
Felix Fietkau
parent
c4e34c8bb9
commit
bb6a5dbbb7
@@ -197,6 +197,13 @@ enum tx_mgnt_type {
|
||||
MT_TX_ADDBA,
|
||||
};
|
||||
|
||||
enum tx_frag_idx {
|
||||
MT_TX_FRAG_NONE,
|
||||
MT_TX_FRAG_FIRST,
|
||||
MT_TX_FRAG_MID,
|
||||
MT_TX_FRAG_LAST
|
||||
};
|
||||
|
||||
#define MT_CT_INFO_APPLY_TXD BIT(0)
|
||||
#define MT_CT_INFO_COPY_HOST_TXD_ALL BIT(1)
|
||||
#define MT_CT_INFO_MGMT_FRAME BIT(2)
|
||||
|
||||
+11
-2
@@ -746,7 +746,7 @@ mt7996_mac_write_txwi_80211(struct mt7996_dev *dev, __le32 *txwi,
|
||||
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
||||
bool multicast = is_multicast_ether_addr(hdr->addr1);
|
||||
u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
|
||||
__le16 fc = hdr->frame_control;
|
||||
__le16 fc = hdr->frame_control, sc = hdr->seq_ctrl;
|
||||
u8 fc_type, fc_stype;
|
||||
u32 val;
|
||||
|
||||
@@ -780,6 +780,15 @@ mt7996_mac_write_txwi_80211(struct mt7996_dev *dev, __le32 *txwi,
|
||||
val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
|
||||
FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype);
|
||||
|
||||
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);
|
||||
else
|
||||
val |= FIELD_PREP(MT_TXD2_FRAG, MT_TX_FRAG_NONE);
|
||||
|
||||
txwi[2] |= cpu_to_le32(val);
|
||||
|
||||
txwi[3] |= cpu_to_le32(FIELD_PREP(MT_TXD3_BCM, multicast));
|
||||
@@ -789,7 +798,7 @@ mt7996_mac_write_txwi_80211(struct mt7996_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;
|
||||
|
||||
Reference in New Issue
Block a user