Commit de869f81 authored by MeiChia Chiu's avatar MeiChia Chiu Committed by Felix Fietkau

wifi: mt76: update beacon size limitation

To accommodate 11v MBSSID IE and support maximum 16 MBSSIDs, expand the
beacon size limitation for beacon and inband discovery commands.
Co-developed-by: default avatarPeter Chiu <chui-hao.chiu@mediatek.com>
Signed-off-by: default avatarPeter Chiu <chui-hao.chiu@mediatek.com>
Co-developed-by: default avatarMoney Wang <money.wang@mediatek.com>
Signed-off-by: default avatarMoney Wang <money.wang@mediatek.com>
Signed-off-by: default avatarMeiChia Chiu <meichia.chiu@mediatek.com>
Signed-off-by: default avatarShayne Chen <shayne.chen@mediatek.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent e35f43aa
...@@ -658,11 +658,13 @@ static void mt7915_bss_info_changed(struct ieee80211_hw *hw, ...@@ -658,11 +658,13 @@ static void mt7915_bss_info_changed(struct ieee80211_hw *hw,
mt7915_update_bss_color(hw, vif, &info->he_bss_color); mt7915_update_bss_color(hw, vif, &info->he_bss_color);
if (changed & (BSS_CHANGED_BEACON | if (changed & (BSS_CHANGED_BEACON |
BSS_CHANGED_BEACON_ENABLED | BSS_CHANGED_BEACON_ENABLED))
BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |
BSS_CHANGED_FILS_DISCOVERY))
mt7915_mcu_add_beacon(hw, vif, info->enable_beacon, changed); mt7915_mcu_add_beacon(hw, vif, info->enable_beacon, changed);
if (changed & (BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |
BSS_CHANGED_FILS_DISCOVERY))
mt7915_mcu_add_inband_discov(dev, vif, changed);
if (set_bss_info == 0) if (set_bss_info == 0)
mt7915_mcu_add_bss_info(phy, vif, false); mt7915_mcu_add_bss_info(phy, vif, false);
if (set_sta == 0) if (set_sta == 0)
......
...@@ -1882,10 +1882,9 @@ mt7915_mcu_beacon_cont(struct mt7915_dev *dev, struct ieee80211_vif *vif, ...@@ -1882,10 +1882,9 @@ mt7915_mcu_beacon_cont(struct mt7915_dev *dev, struct ieee80211_vif *vif,
memcpy(buf + MT_TXD_SIZE, skb->data, skb->len); memcpy(buf + MT_TXD_SIZE, skb->data, skb->len);
} }
static void int
mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vif, mt7915_mcu_add_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vif,
struct sk_buff *rskb, struct bss_info_bcn *bcn, u32 changed)
u32 changed)
{ {
#define OFFLOAD_TX_MODE_SU BIT(0) #define OFFLOAD_TX_MODE_SU BIT(0)
#define OFFLOAD_TX_MODE_MU BIT(1) #define OFFLOAD_TX_MODE_MU BIT(1)
...@@ -1895,14 +1894,27 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi ...@@ -1895,14 +1894,27 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
struct cfg80211_chan_def *chandef = &mvif->phy->mt76->chandef; struct cfg80211_chan_def *chandef = &mvif->phy->mt76->chandef;
enum nl80211_band band = chandef->chan->band; enum nl80211_band band = chandef->chan->band;
struct mt76_wcid *wcid = &dev->mt76.global_wcid; struct mt76_wcid *wcid = &dev->mt76.global_wcid;
struct bss_info_bcn *bcn;
struct bss_info_inband_discovery *discov; struct bss_info_inband_discovery *discov;
struct ieee80211_tx_info *info; struct ieee80211_tx_info *info;
struct sk_buff *skb = NULL; struct sk_buff *rskb, *skb = NULL;
struct tlv *tlv; struct tlv *tlv, *sub_tlv;
bool ext_phy = phy != &dev->phy; bool ext_phy = phy != &dev->phy;
u8 *buf, interval; u8 *buf, interval;
int len; int len;
if (vif->bss_conf.nontransmitted)
return 0;
rskb = __mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76, NULL,
MT7915_MAX_BSS_OFFLOAD_SIZE);
if (IS_ERR(rskb))
return PTR_ERR(rskb);
tlv = mt76_connac_mcu_add_tlv(rskb, BSS_INFO_OFFLOAD, sizeof(*bcn));
bcn = (struct bss_info_bcn *)tlv;
bcn->enable = true;
if (changed & BSS_CHANGED_FILS_DISCOVERY && if (changed & BSS_CHANGED_FILS_DISCOVERY &&
vif->bss_conf.fils_discovery.max_interval) { vif->bss_conf.fils_discovery.max_interval) {
interval = vif->bss_conf.fils_discovery.max_interval; interval = vif->bss_conf.fils_discovery.max_interval;
...@@ -1914,26 +1926,25 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi ...@@ -1914,26 +1926,25 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
} }
if (!skb) if (!skb)
return; return -EINVAL;
info = IEEE80211_SKB_CB(skb); info = IEEE80211_SKB_CB(skb);
info->control.vif = vif; info->control.vif = vif;
info->band = band; info->band = band;
info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, ext_phy); info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, ext_phy);
len = sizeof(*discov) + MT_TXD_SIZE + skb->len; len = sizeof(*discov) + MT_TXD_SIZE + skb->len;
len = (len & 0x3) ? ((len | 0x3) + 1) : len; len = (len & 0x3) ? ((len | 0x3) + 1) : len;
if (len > (MT7915_MAX_BSS_OFFLOAD_SIZE - rskb->len)) { if (skb->len > MT7915_MAX_BEACON_SIZE) {
dev_err(dev->mt76.dev, "inband discovery size limit exceed\n"); dev_err(dev->mt76.dev, "inband discovery size limit exceed\n");
dev_kfree_skb(skb); dev_kfree_skb(skb);
return; return -EINVAL;
} }
tlv = mt7915_mcu_add_nested_subtlv(rskb, BSS_INFO_BCN_DISCOV, sub_tlv = mt7915_mcu_add_nested_subtlv(rskb, BSS_INFO_BCN_DISCOV,
len, &bcn->sub_ntlv, &bcn->len); len, &bcn->sub_ntlv, &bcn->len);
discov = (struct bss_info_inband_discovery *)tlv; discov = (struct bss_info_inband_discovery *)sub_tlv;
discov->tx_mode = OFFLOAD_TX_MODE_SU; discov->tx_mode = OFFLOAD_TX_MODE_SU;
/* 0: UNSOL PROBE RESP, 1: FILS DISCOV */ /* 0: UNSOL PROBE RESP, 1: FILS DISCOV */
discov->tx_type = !!(changed & BSS_CHANGED_FILS_DISCOVERY); discov->tx_type = !!(changed & BSS_CHANGED_FILS_DISCOVERY);
...@@ -1941,13 +1952,16 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi ...@@ -1941,13 +1952,16 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
discov->prob_rsp_len = cpu_to_le16(MT_TXD_SIZE + skb->len); discov->prob_rsp_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
discov->enable = true; discov->enable = true;
buf = (u8 *)tlv + sizeof(*discov); buf = (u8 *)sub_tlv + sizeof(*discov);
mt7915_mac_write_txwi(&dev->mt76, (__le32 *)buf, skb, wcid, 0, NULL, mt7915_mac_write_txwi(&dev->mt76, (__le32 *)buf, skb, wcid, 0, NULL,
0, changed); 0, changed);
memcpy(buf + MT_TXD_SIZE, skb->data, skb->len); memcpy(buf + MT_TXD_SIZE, skb->data, skb->len);
dev_kfree_skb(skb); dev_kfree_skb(skb);
return mt76_mcu_skb_send_msg(&phy->dev->mt76, rskb,
MCU_EXT_CMD(BSS_INFO_UPDATE), true);
} }
int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif, int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
...@@ -1983,7 +1997,7 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif, ...@@ -1983,7 +1997,7 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
if (!skb) if (!skb)
return -EINVAL; return -EINVAL;
if (skb->len > MT7915_MAX_BEACON_SIZE - MT_TXD_SIZE) { if (skb->len > MT7915_MAX_BEACON_SIZE) {
dev_err(dev->mt76.dev, "Bcn size limit exceed\n"); dev_err(dev->mt76.dev, "Bcn size limit exceed\n");
dev_kfree_skb(skb); dev_kfree_skb(skb);
return -EINVAL; return -EINVAL;
...@@ -1997,11 +2011,6 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif, ...@@ -1997,11 +2011,6 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
mt7915_mcu_beacon_cont(dev, vif, rskb, skb, bcn, &offs); mt7915_mcu_beacon_cont(dev, vif, rskb, skb, bcn, &offs);
dev_kfree_skb(skb); dev_kfree_skb(skb);
if (changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP ||
changed & BSS_CHANGED_FILS_DISCOVERY)
mt7915_mcu_beacon_inband_discov(dev, vif, rskb,
bcn, changed);
out: out:
return mt76_mcu_skb_send_msg(&phy->dev->mt76, rskb, return mt76_mcu_skb_send_msg(&phy->dev->mt76, rskb,
MCU_EXT_CMD(BSS_INFO_UPDATE), true); MCU_EXT_CMD(BSS_INFO_UPDATE), true);
......
...@@ -495,10 +495,14 @@ enum { ...@@ -495,10 +495,14 @@ enum {
SER_RECOVER SER_RECOVER
}; };
#define MT7915_MAX_BEACON_SIZE 512 #define MT7915_MAX_BEACON_SIZE 1308
#define MT7915_MAX_INBAND_FRAME_SIZE 256 #define MT7915_BEACON_UPDATE_SIZE (sizeof(struct sta_req_hdr) + \
#define MT7915_MAX_BSS_OFFLOAD_SIZE (MT7915_MAX_BEACON_SIZE + \ sizeof(struct bss_info_bcn) + \
MT7915_MAX_INBAND_FRAME_SIZE + \ sizeof(struct bss_info_bcn_cntdwn) + \
sizeof(struct bss_info_bcn_mbss) + \
MT_TXD_SIZE + \
sizeof(struct bss_info_bcn_cont))
#define MT7915_MAX_BSS_OFFLOAD_SIZE (MT7915_MAX_BEACON_SIZE + \
MT7915_BEACON_UPDATE_SIZE) MT7915_BEACON_UPDATE_SIZE)
#define MT7915_BSS_UPDATE_MAX_SIZE (sizeof(struct sta_req_hdr) + \ #define MT7915_BSS_UPDATE_MAX_SIZE (sizeof(struct sta_req_hdr) + \
...@@ -511,12 +515,6 @@ enum { ...@@ -511,12 +515,6 @@ enum {
sizeof(struct bss_info_bmc_rate) +\ sizeof(struct bss_info_bmc_rate) +\
sizeof(struct bss_info_ext_bss)) sizeof(struct bss_info_ext_bss))
#define MT7915_BEACON_UPDATE_SIZE (sizeof(struct sta_req_hdr) + \
sizeof(struct bss_info_bcn_cntdwn) + \
sizeof(struct bss_info_bcn_mbss) + \
sizeof(struct bss_info_bcn_cont) + \
sizeof(struct bss_info_inband_discovery))
static inline s8 static inline s8
mt7915_get_power_bound(struct mt7915_phy *phy, s8 txpower) mt7915_get_power_bound(struct mt7915_phy *phy, s8 txpower)
{ {
......
...@@ -449,6 +449,8 @@ int mt7915_mcu_add_rx_ba(struct mt7915_dev *dev, ...@@ -449,6 +449,8 @@ int mt7915_mcu_add_rx_ba(struct mt7915_dev *dev,
bool add); bool add);
int mt7915_mcu_update_bss_color(struct mt7915_dev *dev, struct ieee80211_vif *vif, int mt7915_mcu_update_bss_color(struct mt7915_dev *dev, struct ieee80211_vif *vif,
struct cfg80211_he_bss_color *he_bss_color); struct cfg80211_he_bss_color *he_bss_color);
int mt7915_mcu_add_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vif,
u32 changed);
int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif, int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
int enable, u32 changed); int enable, u32 changed);
int mt7915_mcu_add_obss_spr(struct mt7915_phy *phy, struct ieee80211_vif *vif, int mt7915_mcu_add_obss_spr(struct mt7915_phy *phy, struct ieee80211_vif *vif,
......
...@@ -615,8 +615,8 @@ static void mt7996_bss_info_changed(struct ieee80211_hw *hw, ...@@ -615,8 +615,8 @@ static void mt7996_bss_info_changed(struct ieee80211_hw *hw,
mt7996_mcu_add_beacon(hw, vif, info->enable_beacon); mt7996_mcu_add_beacon(hw, vif, info->enable_beacon);
} }
if (changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP || if (changed & (BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |
changed & BSS_CHANGED_FILS_DISCOVERY) BSS_CHANGED_FILS_DISCOVERY))
mt7996_mcu_beacon_inband_discov(dev, vif, changed); mt7996_mcu_beacon_inband_discov(dev, vif, changed);
if (changed & BSS_CHANGED_MU_GROUPS) if (changed & BSS_CHANGED_MU_GROUPS)
......
...@@ -2221,7 +2221,7 @@ mt7996_mcu_beacon_cont(struct mt7996_dev *dev, struct ieee80211_vif *vif, ...@@ -2221,7 +2221,7 @@ mt7996_mcu_beacon_cont(struct mt7996_dev *dev, struct ieee80211_vif *vif,
bcn->bcc_ie_pos = cpu_to_le16(offset - 3); bcn->bcc_ie_pos = cpu_to_le16(offset - 3);
} }
buf = (u8 *)bcn + sizeof(*bcn) - MAX_BEACON_SIZE; buf = (u8 *)bcn + sizeof(*bcn);
mt7996_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, NULL, 0, 0, mt7996_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, NULL, 0, 0,
BSS_CHANGED_BEACON); BSS_CHANGED_BEACON);
...@@ -2239,28 +2239,21 @@ int mt7996_mcu_add_beacon(struct ieee80211_hw *hw, ...@@ -2239,28 +2239,21 @@ int mt7996_mcu_add_beacon(struct ieee80211_hw *hw,
struct sk_buff *skb, *rskb; struct sk_buff *skb, *rskb;
struct tlv *tlv; struct tlv *tlv;
struct bss_bcn_content_tlv *bcn; struct bss_bcn_content_tlv *bcn;
int len;
if (vif->bss_conf.nontransmitted) if (vif->bss_conf.nontransmitted)
return 0; return 0;
rskb = __mt7996_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76, rskb = __mt7996_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
MT7996_BEACON_UPDATE_SIZE); MT7996_MAX_BSS_OFFLOAD_SIZE);
if (IS_ERR(rskb)) if (IS_ERR(rskb))
return PTR_ERR(rskb); return PTR_ERR(rskb);
tlv = mt7996_mcu_add_uni_tlv(rskb,
UNI_BSS_INFO_BCN_CONTENT, sizeof(*bcn));
bcn = (struct bss_bcn_content_tlv *)tlv;
bcn->enable = en;
if (!en)
goto out;
skb = ieee80211_beacon_get_template(hw, vif, &offs, 0); skb = ieee80211_beacon_get_template(hw, vif, &offs, 0);
if (!skb) if (!skb)
return -EINVAL; return -EINVAL;
if (skb->len > MAX_BEACON_SIZE - MT_TXD_SIZE) { if (skb->len > MT7996_MAX_BEACON_SIZE) {
dev_err(dev->mt76.dev, "Bcn size limit exceed\n"); dev_err(dev->mt76.dev, "Bcn size limit exceed\n");
dev_kfree_skb(skb); dev_kfree_skb(skb);
return -EINVAL; return -EINVAL;
...@@ -2269,11 +2262,18 @@ int mt7996_mcu_add_beacon(struct ieee80211_hw *hw, ...@@ -2269,11 +2262,18 @@ int mt7996_mcu_add_beacon(struct ieee80211_hw *hw,
info = IEEE80211_SKB_CB(skb); info = IEEE80211_SKB_CB(skb);
info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, phy->mt76->band_idx); info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, phy->mt76->band_idx);
len = sizeof(*bcn) + MT_TXD_SIZE + skb->len;
tlv = mt7996_mcu_add_uni_tlv(rskb, UNI_BSS_INFO_BCN_CONTENT, len);
bcn = (struct bss_bcn_content_tlv *)tlv;
bcn->enable = en;
if (!en)
goto out;
mt7996_mcu_beacon_cont(dev, vif, rskb, skb, bcn, &offs); mt7996_mcu_beacon_cont(dev, vif, rskb, skb, bcn, &offs);
mt7996_mcu_beacon_mbss(rskb, skb, vif, bcn, &offs); mt7996_mcu_beacon_mbss(rskb, skb, vif, bcn, &offs);
mt7996_mcu_beacon_cntdwn(vif, rskb, skb, &offs); mt7996_mcu_beacon_cntdwn(vif, rskb, skb, &offs);
dev_kfree_skb(skb);
out: out:
dev_kfree_skb(skb);
return mt76_mcu_skb_send_msg(&phy->dev->mt76, rskb, return mt76_mcu_skb_send_msg(&phy->dev->mt76, rskb,
MCU_WMWA_UNI_CMD(BSS_INFO_UPDATE), true); MCU_WMWA_UNI_CMD(BSS_INFO_UPDATE), true);
} }
...@@ -2294,9 +2294,13 @@ int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev, ...@@ -2294,9 +2294,13 @@ int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev,
struct sk_buff *rskb, *skb = NULL; struct sk_buff *rskb, *skb = NULL;
struct tlv *tlv; struct tlv *tlv;
u8 *buf, interval; u8 *buf, interval;
int len;
if (vif->bss_conf.nontransmitted)
return 0;
rskb = __mt7996_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76, rskb = __mt7996_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
MT7996_INBAND_FRAME_SIZE); MT7996_MAX_BSS_OFFLOAD_SIZE);
if (IS_ERR(rskb)) if (IS_ERR(rskb))
return PTR_ERR(rskb); return PTR_ERR(rskb);
...@@ -2313,7 +2317,7 @@ int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev, ...@@ -2313,7 +2317,7 @@ int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev,
if (!skb) if (!skb)
return -EINVAL; return -EINVAL;
if (skb->len > MAX_INBAND_FRAME_SIZE - MT_TXD_SIZE) { if (skb->len > MT7996_MAX_BEACON_SIZE) {
dev_err(dev->mt76.dev, "inband discovery size limit exceed\n"); dev_err(dev->mt76.dev, "inband discovery size limit exceed\n");
dev_kfree_skb(skb); dev_kfree_skb(skb);
return -EINVAL; return -EINVAL;
...@@ -2324,7 +2328,9 @@ int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev, ...@@ -2324,7 +2328,9 @@ int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev,
info->band = band; info->band = band;
info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, phy->mt76->band_idx); info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, phy->mt76->band_idx);
tlv = mt7996_mcu_add_uni_tlv(rskb, UNI_BSS_INFO_OFFLOAD, sizeof(*discov)); len = sizeof(*discov) + MT_TXD_SIZE + skb->len;
tlv = mt7996_mcu_add_uni_tlv(rskb, UNI_BSS_INFO_OFFLOAD, len);
discov = (struct bss_inband_discovery_tlv *)tlv; discov = (struct bss_inband_discovery_tlv *)tlv;
discov->tx_mode = OFFLOAD_TX_MODE_SU; discov->tx_mode = OFFLOAD_TX_MODE_SU;
...@@ -2335,7 +2341,7 @@ int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev, ...@@ -2335,7 +2341,7 @@ int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev,
discov->enable = true; discov->enable = true;
discov->wcid = cpu_to_le16(MT7996_WTBL_RESERVED); discov->wcid = cpu_to_le16(MT7996_WTBL_RESERVED);
buf = (u8 *)tlv + sizeof(*discov) - MAX_INBAND_FRAME_SIZE; buf = (u8 *)tlv + sizeof(*discov);
mt7996_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, NULL, 0, 0, changed); mt7996_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, NULL, 0, 0, changed);
......
...@@ -270,8 +270,6 @@ struct bss_inband_discovery_tlv { ...@@ -270,8 +270,6 @@ struct bss_inband_discovery_tlv {
u8 enable; u8 enable;
__le16 wcid; __le16 wcid;
__le16 prob_rsp_len; __le16 prob_rsp_len;
#define MAX_INBAND_FRAME_SIZE 512
u8 pkt[MAX_INBAND_FRAME_SIZE];
} __packed; } __packed;
struct bss_bcn_content_tlv { struct bss_bcn_content_tlv {
...@@ -283,8 +281,6 @@ struct bss_bcn_content_tlv { ...@@ -283,8 +281,6 @@ struct bss_bcn_content_tlv {
u8 enable; u8 enable;
u8 type; u8 type;
__le16 pkt_len; __le16 pkt_len;
#define MAX_BEACON_SIZE 512
u8 pkt[MAX_BEACON_SIZE];
} __packed; } __packed;
struct bss_bcn_cntdwn_tlv { struct bss_bcn_cntdwn_tlv {
...@@ -591,13 +587,14 @@ enum { ...@@ -591,13 +587,14 @@ enum {
sizeof(struct sta_rec_hdr_trans) + \ sizeof(struct sta_rec_hdr_trans) + \
sizeof(struct tlv)) sizeof(struct tlv))
#define MT7996_MAX_BEACON_SIZE 1342
#define MT7996_BEACON_UPDATE_SIZE (sizeof(struct bss_req_hdr) + \ #define MT7996_BEACON_UPDATE_SIZE (sizeof(struct bss_req_hdr) + \
sizeof(struct bss_bcn_content_tlv) + \ sizeof(struct bss_bcn_content_tlv) + \
MT_TXD_SIZE + \
sizeof(struct bss_bcn_cntdwn_tlv) + \ sizeof(struct bss_bcn_cntdwn_tlv) + \
sizeof(struct bss_bcn_mbss_tlv)) sizeof(struct bss_bcn_mbss_tlv))
#define MT7996_MAX_BSS_OFFLOAD_SIZE (MT7996_MAX_BEACON_SIZE + \
#define MT7996_INBAND_FRAME_SIZE (sizeof(struct bss_req_hdr) + \ MT7996_BEACON_UPDATE_SIZE)
sizeof(struct bss_inband_discovery_tlv))
enum { enum {
UNI_BAND_CONFIG_RADIO_ENABLE, UNI_BAND_CONFIG_RADIO_ENABLE,
......
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