Skip to content

Commit cee3fd2

Browse files
LorenzoBianconinbd168
authored andcommitted
mt76: connac: add 6GHz support to mt76_connac_mcu_set_channel_domain
Configure 6GHz channels defining mcu channel domain. This is a preliminary patch to enable 6GHz band on mt7921 devices. Tested-by: Deren Wu <[email protected]> Signed-off-by: Lorenzo Bianconi <[email protected]> Signed-off-by: Felix Fietkau <[email protected]>
1 parent 212e519 commit cee3fd2

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

drivers/net/wireless/mediatek/mt76/mt76.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,7 @@ struct mt76_phy {
623623
struct mt76_hw_cap cap;
624624
struct mt76_sband sband_2g;
625625
struct mt76_sband sband_5g;
626+
struct mt76_sband sband_6g;
626627

627628
u8 macaddr[ETH_ALEN];
628629

drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ EXPORT_SYMBOL_GPL(mt76_connac_mcu_init_download);
7474

7575
int mt76_connac_mcu_set_channel_domain(struct mt76_phy *phy)
7676
{
77-
struct mt76_dev *dev = phy->dev;
77+
int len, i, n_max_channels, n_2ch = 0, n_5ch = 0, n_6ch = 0;
7878
struct mt76_connac_mcu_channel_domain {
7979
u8 alpha2[4]; /* regulatory_request.alpha2 */
8080
u8 bw_2g; /* BW_20_40M 0
@@ -84,25 +84,29 @@ int mt76_connac_mcu_set_channel_domain(struct mt76_phy *phy)
8484
* BW_20_40_80_8080M 4
8585
*/
8686
u8 bw_5g;
87-
__le16 pad;
87+
u8 bw_6g;
88+
u8 pad;
8889
u8 n_2ch;
8990
u8 n_5ch;
90-
__le16 pad2;
91+
u8 n_6ch;
92+
u8 pad2;
9193
} __packed hdr = {
9294
.bw_2g = 0,
93-
.bw_5g = 3,
95+
.bw_5g = 3, /* BW_20_40_80_160M */
96+
.bw_6g = 3,
9497
};
9598
struct mt76_connac_mcu_chan {
9699
__le16 hw_value;
97100
__le16 pad;
98101
__le32 flags;
99102
} __packed channel;
100-
int len, i, n_max_channels, n_2ch = 0, n_5ch = 0;
103+
struct mt76_dev *dev = phy->dev;
101104
struct ieee80211_channel *chan;
102105
struct sk_buff *skb;
103106

104107
n_max_channels = phy->sband_2g.sband.n_channels +
105-
phy->sband_5g.sband.n_channels;
108+
phy->sband_5g.sband.n_channels +
109+
phy->sband_6g.sband.n_channels;
106110
len = sizeof(hdr) + n_max_channels * sizeof(channel);
107111

108112
skb = mt76_mcu_msg_alloc(dev, NULL, len);
@@ -135,11 +139,24 @@ int mt76_connac_mcu_set_channel_domain(struct mt76_phy *phy)
135139
skb_put_data(skb, &channel, sizeof(channel));
136140
n_5ch++;
137141
}
142+
for (i = 0; i < phy->sband_6g.sband.n_channels; i++) {
143+
chan = &phy->sband_6g.sband.channels[i];
144+
if (chan->flags & IEEE80211_CHAN_DISABLED)
145+
continue;
146+
147+
channel.hw_value = cpu_to_le16(chan->hw_value);
148+
channel.flags = cpu_to_le32(chan->flags);
149+
channel.pad = 0;
150+
151+
skb_put_data(skb, &channel, sizeof(channel));
152+
n_6ch++;
153+
}
138154

139155
BUILD_BUG_ON(sizeof(dev->alpha2) > sizeof(hdr.alpha2));
140156
memcpy(hdr.alpha2, dev->alpha2, sizeof(dev->alpha2));
141157
hdr.n_2ch = n_2ch;
142158
hdr.n_5ch = n_5ch;
159+
hdr.n_6ch = n_6ch;
143160

144161
memcpy(__skb_push(skb, sizeof(hdr)), &hdr, sizeof(hdr));
145162

0 commit comments

Comments
 (0)