wifi: mt76: mt7925: mt7925_mcu_set_chctx rely on mt7925_mcu_bss_rlm_tlv
authorSean Wang <sean.wang@mediatek.com>
Thu, 13 Jun 2024 03:02:17 +0000 (20:02 -0700)
committerFelix Fietkau <nbd@nbd.name>
Tue, 9 Jul 2024 21:01:53 +0000 (23:01 +0200)
make mt7925_mcu_set_chctx rely on mt7925_mcu_bss_rlm_tlv to get rid of
the redundant code.

Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Link: https://patch.msgid.link/20240613030241.5771-24-sean.wang@kernel.org
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7925/mcu.c

index 96b7a9df17d8205118f0872c4e448ceb18f92061..9d56013b2f559ce1c51992da310c8d940ed29817 100644 (file)
@@ -1974,85 +1974,6 @@ void mt7925_mcu_bss_rlm_tlv(struct sk_buff *skb, struct mt76_phy *phy,
                req->sco = 3; /* SCB */
 }
 
-int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif *mvif,
-                        struct ieee80211_chanctx_conf *ctx)
-{
-       struct cfg80211_chan_def *chandef = ctx ? &ctx->def : &phy->chandef;
-       int freq1 = chandef->center_freq1, freq2 = chandef->center_freq2;
-       enum nl80211_band band = chandef->chan->band;
-       struct mt76_dev *mdev = phy->dev;
-       struct {
-               struct {
-                       u8 bss_idx;
-                       u8 pad[3];
-               } __packed hdr;
-               struct rlm_tlv {
-                       __le16 tag;
-                       __le16 len;
-                       u8 control_channel;
-                       u8 center_chan;
-                       u8 center_chan2;
-                       u8 bw;
-                       u8 tx_streams;
-                       u8 rx_streams;
-                       u8 ht_op_info;
-                       u8 sco;
-                       u8 band;
-                       u8 pad[3];
-               } __packed rlm;
-       } __packed rlm_req = {
-               .hdr = {
-                       .bss_idx = mvif->idx,
-               },
-               .rlm = {
-                       .tag = cpu_to_le16(UNI_BSS_INFO_RLM),
-                       .len = cpu_to_le16(sizeof(struct rlm_tlv)),
-                       .control_channel = chandef->chan->hw_value,
-                       .center_chan = ieee80211_frequency_to_channel(freq1),
-                       .center_chan2 = ieee80211_frequency_to_channel(freq2),
-                       .tx_streams = hweight8(phy->antenna_mask),
-                       .ht_op_info = 4, /* set HT 40M allowed */
-                       .rx_streams = hweight8(phy->antenna_mask),
-                       .band = band,
-               },
-       };
-
-       switch (chandef->width) {
-       case NL80211_CHAN_WIDTH_40:
-               rlm_req.rlm.bw = CMD_CBW_40MHZ;
-               break;
-       case NL80211_CHAN_WIDTH_80:
-               rlm_req.rlm.bw = CMD_CBW_80MHZ;
-               break;
-       case NL80211_CHAN_WIDTH_80P80:
-               rlm_req.rlm.bw = CMD_CBW_8080MHZ;
-               break;
-       case NL80211_CHAN_WIDTH_160:
-               rlm_req.rlm.bw = CMD_CBW_160MHZ;
-               break;
-       case NL80211_CHAN_WIDTH_5:
-               rlm_req.rlm.bw = CMD_CBW_5MHZ;
-               break;
-       case NL80211_CHAN_WIDTH_10:
-               rlm_req.rlm.bw = CMD_CBW_10MHZ;
-               break;
-       case NL80211_CHAN_WIDTH_20_NOHT:
-       case NL80211_CHAN_WIDTH_20:
-       default:
-               rlm_req.rlm.bw = CMD_CBW_20MHZ;
-               rlm_req.rlm.ht_op_info = 0;
-               break;
-       }
-
-       if (rlm_req.rlm.control_channel < rlm_req.rlm.center_chan)
-               rlm_req.rlm.sco = 1; /* SCA */
-       else if (rlm_req.rlm.control_channel > rlm_req.rlm.center_chan)
-               rlm_req.rlm.sco = 3; /* SCB */
-
-       return mt76_mcu_send_msg(mdev, MCU_UNI_CMD(BSS_INFO_UPDATE), &rlm_req,
-                                sizeof(rlm_req), true);
-}
-
 static struct sk_buff *
 __mt7925_mcu_alloc_bss_req(struct mt76_dev *dev, struct mt76_vif *mvif, int len)
 {
@@ -2070,6 +1991,22 @@ __mt7925_mcu_alloc_bss_req(struct mt76_dev *dev, struct mt76_vif *mvif, int len)
        return skb;
 }
 
+int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif *mvif,
+                        struct ieee80211_chanctx_conf *ctx)
+{
+       struct sk_buff *skb;
+
+       skb = __mt7925_mcu_alloc_bss_req(phy->dev, mvif,
+                                        MT7925_BSS_UPDATE_MAX_SIZE);
+       if (IS_ERR(skb))
+               return PTR_ERR(skb);
+
+       mt7925_mcu_bss_rlm_tlv(skb, phy, ctx);
+
+       return mt76_mcu_skb_send_msg(phy->dev, skb,
+                                    MCU_UNI_CMD(BSS_INFO_UPDATE), true);
+}
+
 static u8
 mt7925_get_phy_mode_ext(struct mt76_phy *phy, struct ieee80211_vif *vif,
                        enum nl80211_band band, struct ieee80211_sta *sta)