mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-08 13:34:26 -05:00
mt76: mt7615: simplify mcu_set_bmc flow
Move set_bmc_wtbl into sta_rec function to simplify flow. Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
@@ -427,8 +427,7 @@ static void mt7615_bss_info_changed(struct ieee80211_hw *hw,
|
||||
|
||||
if (changed & BSS_CHANGED_BEACON_ENABLED) {
|
||||
mt7615_mcu_set_bss_info(dev, vif, info->enable_beacon);
|
||||
mt7615_mcu_wtbl_bmc(dev, vif, info->enable_beacon);
|
||||
mt7615_mcu_set_sta_rec_bmc(dev, vif, info->enable_beacon);
|
||||
mt7615_mcu_set_bmc(dev, vif, info->enable_beacon);
|
||||
}
|
||||
|
||||
if (changed & (BSS_CHANGED_BEACON |
|
||||
|
||||
@@ -1107,57 +1107,6 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
mt7615_mcu_add_wtbl_bmc(struct mt7615_dev *dev,
|
||||
struct mt7615_vif *mvif)
|
||||
{
|
||||
struct {
|
||||
struct wtbl_req_hdr hdr;
|
||||
struct wtbl_generic g_wtbl;
|
||||
struct wtbl_rx rx_wtbl;
|
||||
} req = {
|
||||
.hdr = {
|
||||
.wlan_idx = mvif->sta.wcid.idx,
|
||||
.operation = WTBL_RESET_AND_SET,
|
||||
.tlv_num = cpu_to_le16(2),
|
||||
},
|
||||
.g_wtbl = {
|
||||
.tag = cpu_to_le16(WTBL_GENERIC),
|
||||
.len = cpu_to_le16(sizeof(struct wtbl_generic)),
|
||||
.muar_idx = 0xe,
|
||||
},
|
||||
.rx_wtbl = {
|
||||
.tag = cpu_to_le16(WTBL_RX),
|
||||
.len = cpu_to_le16(sizeof(struct wtbl_rx)),
|
||||
.rca1 = 1,
|
||||
.rca2 = 1,
|
||||
.rv = 1,
|
||||
},
|
||||
};
|
||||
eth_broadcast_addr(req.g_wtbl.peer_addr);
|
||||
|
||||
return __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_WTBL_UPDATE,
|
||||
&req, sizeof(req), true);
|
||||
}
|
||||
|
||||
int mt7615_mcu_wtbl_bmc(struct mt7615_dev *dev,
|
||||
struct ieee80211_vif *vif, bool enable)
|
||||
{
|
||||
struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
|
||||
|
||||
if (!enable) {
|
||||
struct wtbl_req_hdr req = {
|
||||
.wlan_idx = mvif->sta.wcid.idx,
|
||||
.operation = WTBL_RESET_AND_SET,
|
||||
};
|
||||
|
||||
return __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_WTBL_UPDATE,
|
||||
&req, sizeof(req), true);
|
||||
}
|
||||
|
||||
return mt7615_mcu_add_wtbl_bmc(dev, mvif);
|
||||
}
|
||||
|
||||
int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
@@ -1217,14 +1166,15 @@ int mt7615_mcu_del_wtbl_all(struct mt7615_dev *dev)
|
||||
&req, sizeof(req), true);
|
||||
}
|
||||
|
||||
int mt7615_mcu_set_sta_rec_bmc(struct mt7615_dev *dev,
|
||||
struct ieee80211_vif *vif, bool en)
|
||||
int mt7615_mcu_set_bmc(struct mt7615_dev *dev,
|
||||
struct ieee80211_vif *vif, bool en)
|
||||
{
|
||||
struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
|
||||
struct {
|
||||
struct sta_req_hdr hdr;
|
||||
struct sta_rec_basic basic;
|
||||
} req = {
|
||||
u8 buf[MT7615_WTBL_UPDATE_MAX_SIZE];
|
||||
} __packed req = {
|
||||
.hdr = {
|
||||
.bss_idx = mvif->idx,
|
||||
.wlan_idx = mvif->sta.wcid.idx,
|
||||
@@ -1238,8 +1188,18 @@ int mt7615_mcu_set_sta_rec_bmc(struct mt7615_dev *dev,
|
||||
.conn_type = cpu_to_le32(CONNECTION_INFRA_BC),
|
||||
},
|
||||
};
|
||||
struct wtbl_req_hdr *wtbl_hdr;
|
||||
struct wtbl_generic *wtbl_g;
|
||||
struct wtbl_rx *wtbl_rx;
|
||||
u8 *buf = req.buf;
|
||||
|
||||
eth_broadcast_addr(req.basic.peer_addr);
|
||||
|
||||
wtbl_hdr = (struct wtbl_req_hdr *)buf;
|
||||
buf += sizeof(*wtbl_hdr);
|
||||
wtbl_hdr->wlan_idx = mvif->sta.wcid.idx;
|
||||
wtbl_hdr->operation = WTBL_RESET_AND_SET;
|
||||
|
||||
if (en) {
|
||||
req.basic.conn_state = CONN_STATE_PORT_SECURE;
|
||||
req.basic.extra_info = cpu_to_le16(EXTRA_INFO_VER |
|
||||
@@ -1247,10 +1207,37 @@ int mt7615_mcu_set_sta_rec_bmc(struct mt7615_dev *dev,
|
||||
} else {
|
||||
req.basic.conn_state = CONN_STATE_DISCONNECT;
|
||||
req.basic.extra_info = cpu_to_le16(EXTRA_INFO_VER);
|
||||
|
||||
__mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_STA_REC_UPDATE,
|
||||
&req, (u8 *)wtbl_hdr - (u8 *)&req, true);
|
||||
|
||||
return __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_WTBL_UPDATE,
|
||||
(u8 *)wtbl_hdr, buf - (u8 *)wtbl_hdr,
|
||||
true);
|
||||
}
|
||||
|
||||
wtbl_g = (struct wtbl_generic *)buf;
|
||||
buf += sizeof(*wtbl_g);
|
||||
wtbl_g->tag = cpu_to_le16(WTBL_GENERIC);
|
||||
wtbl_g->len = cpu_to_le16(sizeof(*wtbl_g));
|
||||
wtbl_g->muar_idx = 0xe;
|
||||
eth_broadcast_addr(wtbl_g->peer_addr);
|
||||
|
||||
wtbl_rx = (struct wtbl_rx *)buf;
|
||||
buf += sizeof(*wtbl_rx);
|
||||
wtbl_rx->tag = cpu_to_le16(WTBL_RX);
|
||||
wtbl_rx->len = cpu_to_le16(sizeof(*wtbl_rx));
|
||||
wtbl_rx->rv = 1;
|
||||
wtbl_rx->rca1 = 1;
|
||||
wtbl_rx->rca2 = 1;
|
||||
|
||||
wtbl_hdr->tlv_num = cpu_to_le16(2);
|
||||
|
||||
__mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_WTBL_UPDATE,
|
||||
(u8 *)wtbl_hdr, buf - (u8 *)wtbl_hdr, true);
|
||||
|
||||
return __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_STA_REC_UPDATE,
|
||||
&req, sizeof(req), true);
|
||||
&req, (u8 *)wtbl_hdr - (u8 *)&req, true);
|
||||
}
|
||||
|
||||
int mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, struct ieee80211_vif *vif,
|
||||
|
||||
@@ -286,14 +286,12 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, struct ieee80211_vif *vif,
|
||||
void mt7615_mac_set_rates(struct mt7615_phy *phy, struct mt7615_sta *sta,
|
||||
struct ieee80211_tx_rate *probe_rate,
|
||||
struct ieee80211_tx_rate *rates);
|
||||
int mt7615_mcu_wtbl_bmc(struct mt7615_dev *dev, struct ieee80211_vif *vif,
|
||||
bool enable);
|
||||
int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
int mt7615_mcu_del_wtbl(struct mt7615_dev *dev, struct ieee80211_sta *sta);
|
||||
int mt7615_mcu_del_wtbl_all(struct mt7615_dev *dev);
|
||||
int mt7615_mcu_set_sta_rec_bmc(struct mt7615_dev *dev,
|
||||
struct ieee80211_vif *vif, bool en);
|
||||
int mt7615_mcu_set_bmc(struct mt7615_dev *dev, struct ieee80211_vif *vif,
|
||||
bool en);
|
||||
int mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta, bool en);
|
||||
int mt7615_mcu_set_bcn(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
|
||||
Reference in New Issue
Block a user