introduce mt76-connac dependency in mt7915 driver
Subsystems (2)
Lorenzo Bianconi
maintainercover introduce mt76-connac dependency in mt7915 driver
Introduce mt76-connac module dependency in the mt7915 driver and remove duplicated mcu code.
Lorenzo Bianconi (7):
mt76: mt7915: rely on mt76_connac_mcu_alloc_sta_req
mt76: mt7915: rely on mt76_connac_mcu_alloc_wtbl_req
mt76: mt7915: rely on mt76_connac_mcu_add_tlv routine
mt76: connac: move mt76_connac_mcu_get_cipher in common code
mt76: connac: move mt76_connac_chan_bw in common code
mt76: mt7915: rely on mt76_connac_get_phy utilities
mt76: connac: move mt76_connac_mcu_add_key in connac module
.../net/wireless/mediatek/mt76/mt76_connac.h | 29 ++ .../wireless/mediatek/mt76/mt76_connac_mcu.c | 118 ++++- .../wireless/mediatek/mt76/mt76_connac_mcu.h | 60 ++- .../net/wireless/mediatek/mt76/mt7915/Kconfig | 2 +- .../net/wireless/mediatek/mt76/mt7915/main.c | 5 +- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 441 ++++-------------- .../wireless/mediatek/mt76/mt7915/mt7915.h | 17 +- .../net/wireless/mediatek/mt76/mt7921/main.c | 9 +- .../net/wireless/mediatek/mt76/mt7921/mcu.c | 137 +----- .../wireless/mediatek/mt76/mt7921/mt7921.h | 10 +- 10 files changed, 293 insertions(+), 535 deletions(-)
Signature · 1 line
2.33.1
Lorenzo Bianconi
maintainerPATCH 1/7 mt76: mt7915: rely on mt76_connac_mcu_alloc_sta_req
Rely on mt76_connac_mcu_alloc_sta_req routine and remove duplicated code.
Add MT76_CONNAC_LIB module dependency in mt7915 module
--- .../net/wireless/mediatek/mt76/mt76_connac.h | 5 ++ .../wireless/mediatek/mt76/mt76_connac_mcu.c | 10 +-- .../wireless/mediatek/mt76/mt76_connac_mcu.h | 23 ++++++- .../net/wireless/mediatek/mt76/mt7915/Kconfig | 2 +- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 66 +++++++------------ .../wireless/mediatek/mt76/mt7915/mt7915.h | 5 -- 6 files changed, 54 insertions(+), 57 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76_connac.h +5 -0
@@ -100,6 +100,11 @@ static inline bool is_mt7663(struct mt76_dev *dev)return mt76_chip (dev) ==0x7663 ; } +static inline bool is_mt7915 (struct mt76_dev *dev) +{ +return mt76_chip (dev) ==0x7915 ; +} +int mt76_connac_pm_wake (struct mt76_phy *phy,struct mt76_connac_pm *pm);void mt76_connac_power_save_sched (struct mt76_phy *phy,struct mt76_connac_pm *pm);
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +5 -5
@@ -266,19 +266,19 @@ mt76_connac_mcu_add_nested_tlv(struct sk_buff *skb, int tag, int len,EXPORT_SYMBOL_GPL (mt76_connac_mcu_add_nested_tlv);struct sk_buff * -mt76_connac_mcu_alloc_sta_req (struct mt76_dev *dev,struct mt76_vif *mvif, -struct mt76_wcid *wcid) +__mt76_connac_mcu_alloc_sta_req (struct mt76_dev *dev,struct mt76_vif *mvif, +struct mt76_wcid *wcid,int len) {struct sta_req_hdr hdr = { .bss_idx = mvif->idx, - .muar_idx = wcid ? mvif->omac_idx :0 , .is_tlv_append =1 , };struct sk_buff *skb; + hdr.muar_idx =mt76_connac_mcu_get_muar_idx (dev, wcid, mvif);mt76_connac_mcu_get_wlan_idx (dev, wcid, &hdr.wlan_idx_lo, &hdr.wlan_idx_hi); - skb =mt76_mcu_msg_alloc (dev,NULL ,MT76_CONNAC_STA_UPDATE_MAX_SIZE ); + skb =mt76_mcu_msg_alloc (dev,NULL , len);if (!skb)return ERR_PTR (-ENOMEM );
@@ -286,7 +286,7 @@ mt76_connac_mcu_alloc_sta_req(struct mt76_dev *dev, struct mt76_vif *mvif,return skb; } -EXPORT_SYMBOL_GPL (mt76_connac_mcu_alloc_sta_req); +EXPORT_SYMBOL_GPL (__mt76_connac_mcu_alloc_sta_req);struct wtbl_req_hdr * mt76_connac_mcu_alloc_wtbl_req(struct mt76_dev *dev, struct mt76_wcid *wcid,
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +21 -2
@@ -570,6 +570,7 @@ struct wtbl_raw {sizeof (struct sta_rec_muru ) + \sizeof (struct sta_rec_bfee ) + \sizeof (struct sta_rec_ra ) + \ +sizeof (struct sta_rec_sec ) + \sizeof (struct sta_rec_ra_fixed ) + \sizeof (struct sta_rec_he_6g_capa ) + \ sizeof(struct tlv) + \
@@ -1436,7 +1437,7 @@ mt76_connac_mcu_get_wlan_idx(struct mt76_dev *dev, struct mt76_wcid *wcid, { *wlan_idx_hi =0 ; -if (is_mt7921 (dev)) { +if (is_mt7921 (dev) ||is_mt7915 (dev)) { *wlan_idx_lo = wcid ?to_wcid_lo (wcid->idx) :0 ; *wlan_idx_hi = wcid ?to_wcid_hi (wcid->idx) :0 ; }else {
@@ -1444,9 +1445,27 @@ mt76_connac_mcu_get_wlan_idx(struct mt76_dev *dev, struct mt76_wcid *wcid, } } +static inline int +mt76_connac_mcu_get_muar_idx (struct mt76_dev *dev,struct mt76_wcid *wcid, +struct mt76_vif *mvif) +{ +if (is_mt7915 (dev)) +return wcid && wcid->sta ? mvif->omac_idx :0xe ; + +return wcid ? mvif->omac_idx :0 ; +} +struct sk_buff * +__mt76_connac_mcu_alloc_sta_req (struct mt76_dev *dev,struct mt76_vif *mvif, +struct mt76_wcid *wcid,int len); +static inline struct sk_buff *mt76_connac_mcu_alloc_sta_req (struct mt76_dev *dev,struct mt76_vif *mvif, -struct mt76_wcid *wcid); +struct mt76_wcid *wcid) +{ +return __mt76_connac_mcu_alloc_sta_req (dev, mvif, wcid, +MT76_CONNAC_STA_UPDATE_MAX_SIZE ); +} +struct wtbl_req_hdr *mt76_connac_mcu_alloc_wtbl_req (struct mt76_dev *dev,struct mt76_wcid *wcid,int cmd,void *sta_wtbl,struct sk_buff **skb);
drivers/net/wireless/mediatek/mt76/mt7915/Kconfig +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: ISC config MT7915E tristate "MediaTek MT7915E (PCIe) support" - select MT76_CORE + select MT76_CONNAC_LIB depends on MAC80211 depends on PCI help
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +22 -44
153 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +0 -5
@@ -444,11 +444,6 @@ int mt7915_mcu_fw_dbg_ctrl(struct mt7915_dev *dev, u32 module, u8 level);void mt7915_mcu_rx_event (struct mt7915_dev *dev,struct sk_buff *skb);void mt7915_mcu_exit (struct mt7915_dev *dev); -static inline bool is_mt7915 (struct mt76_dev *dev) -{ -return mt76_chip (dev) ==0x7915 ; -} -void mt7915_dual_hif_set_irq_mask (struct mt7915_dev *dev,bool write_reg,u32 clear,u32 set);
Signature · 1 line
2.33.1
Lorenzo Bianconi
maintainerPATCH 3/7 mt76: mt7915: rely on mt76_connac_mcu_add_tlv routine
In reply to Lorenzo BianconiRely on common code available in mt76-connac module and remove mt7915_mcu_add_tlv/mt7915_mcu_add_nested_tlv in mt7915 driver.
--- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 122 +++++++----------- 1 file changed, 45 insertions(+), 77 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +45 -77
@@ -574,39 +574,6 @@ void mt7915_mcu_rx_event(struct mt7915_dev *dev, struct sk_buff *skb)mt76_mcu_rx_event (&dev->mt76, skb); } -static struct tlv * -mt7915_mcu_add_nested_tlv (struct sk_buff *skb,int tag,int len, -void *sta_ntlv,void *sta_wtbl) -{ -struct sta_ntlv_hdr *ntlv_hdr = sta_ntlv; -struct tlv *sta_hdr = sta_wtbl; -struct tlv *ptlv, tlv = { - .tag =cpu_to_le16 (tag), - .len =cpu_to_le16 (len), - }; -u16 ntlv; - - ptlv =skb_put (skb, len); -memcpy (ptlv, &tlv,sizeof (tlv)); - - ntlv =le16_to_cpu (ntlv_hdr->tlv_num); - ntlv_hdr->tlv_num =cpu_to_le16 (ntlv +1 ); - -if (sta_hdr) { -u16 size =le16_to_cpu (sta_hdr->len); - - sta_hdr->len =cpu_to_le16 (size + len); - } - -return ptlv; -} - -static struct tlv * -mt7915_mcu_add_tlv (struct sk_buff *skb,int tag,int len) -{ -return mt7915_mcu_add_nested_tlv (skb, tag, len, skb->data,NULL ); -} -static struct tlv *mt7915_mcu_add_nested_subtlv (struct sk_buff *skb,int sub_tag,int sub_len,__le16 *sub_ntlv,__le16 *len)
@@ -636,7 +603,7 @@ mt7915_mcu_bss_basic_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,u32 type =NETWORK_INFRA ;struct tlv *tlv; - tlv =mt7915_mcu_add_tlv (skb,BSS_INFO_BASIC ,sizeof (*bss)); + tlv =mt76_connac_mcu_add_tlv (skb,BSS_INFO_BASIC ,sizeof (*bss));switch (vif->type) {case NL80211_IFTYPE_MESH_POINT :
@@ -697,7 +664,7 @@ mt7915_mcu_bss_omac_tlv(struct sk_buff *skb, struct ieee80211_vif *vif)u32 type =0 ;u8 idx; - tlv =mt7915_mcu_add_tlv (skb,BSS_INFO_OMAC ,sizeof (*omac)); + tlv =mt76_connac_mcu_add_tlv (skb,BSS_INFO_OMAC ,sizeof (*omac));switch (vif->type) {case NL80211_IFTYPE_MONITOR :
@@ -777,7 +744,7 @@ mt7915_mcu_bss_rfch_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,struct tlv *tlv;int freq1 = chandef->center_freq1; - tlv =mt7915_mcu_add_tlv (skb,BSS_INFO_RF_CH ,sizeof (*ch)); + tlv =mt76_connac_mcu_add_tlv (skb,BSS_INFO_RF_CH ,sizeof (*ch)); ch = (struct bss_info_rf_ch *)tlv; ch->pri_ch = chandef->chan->hw_value;
@@ -814,7 +781,7 @@ mt7915_mcu_bss_ra_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,struct bss_info_ra *ra;struct tlv *tlv; - tlv =mt7915_mcu_add_tlv (skb,BSS_INFO_RA ,sizeof (*ra)); + tlv =mt76_connac_mcu_add_tlv (skb,BSS_INFO_RA ,sizeof (*ra)); ra = (struct bss_info_ra *)tlv; ra->op_mode = vif->type ==NL80211_IFTYPE_AP ;
@@ -844,7 +811,7 @@ mt7915_mcu_bss_he_tlv(struct sk_buff *skb, struct ieee80211_vif *vif, cap =mt7915_get_he_phy_cap (phy, vif); - tlv =mt7915_mcu_add_tlv (skb,BSS_INFO_HE_BASIC ,sizeof (*he)); + tlv =mt76_connac_mcu_add_tlv (skb,BSS_INFO_HE_BASIC ,sizeof (*he)); he = (struct bss_info_he *)tlv; he->he_pe_duration = vif->bss_conf.htc_trig_based_pkt_ext;
@@ -868,7 +835,7 @@ mt7915_mcu_bss_hw_amsdu_tlv(struct sk_buff *skb)struct bss_info_hw_amsdu *amsdu;struct tlv *tlv; - tlv =mt7915_mcu_add_tlv (skb,BSS_INFO_HW_AMSDU ,sizeof (*amsdu)); + tlv =mt76_connac_mcu_add_tlv (skb,BSS_INFO_HW_AMSDU ,sizeof (*amsdu)); amsdu = (struct bss_info_hw_amsdu *)tlv; amsdu->cmp_bitmap_0 =cpu_to_le32 (TXD_CMP_MAP1 );
@@ -890,7 +857,7 @@ mt7915_mcu_bss_ext_tlv(struct sk_buff *skb, struct mt7915_vif *mvif)if (ext_bss_idx <0 )return ; - tlv =mt7915_mcu_add_tlv (skb,BSS_INFO_EXT_BSS ,sizeof (*ext)); + tlv =mt76_connac_mcu_add_tlv (skb,BSS_INFO_EXT_BSS ,sizeof (*ext)); ext = (struct bss_info_ext_bss *)tlv; tsf_offset = ext_bss_idx *BCN_TX_ESTIMATE_TIME ;
@@ -905,7 +872,7 @@ mt7915_mcu_bss_bmc_tlv(struct sk_buff *skb, struct mt7915_phy *phy)enum nl80211_band band = chandef->chan->band;struct tlv *tlv; - tlv =mt7915_mcu_add_tlv (skb,BSS_INFO_BMC_RATE ,sizeof (*bmc)); + tlv =mt76_connac_mcu_add_tlv (skb,BSS_INFO_BMC_RATE ,sizeof (*bmc)); bmc = (struct bss_info_bmc_rate *)tlv;if (band ==NL80211_BAND_2GHZ ) {
@@ -1008,7 +975,7 @@ mt7915_mcu_sta_key_tlv(struct mt7915_sta *msta, struct sk_buff *skb,struct tlv *tlv;u32 len =sizeof (*sec); - tlv =mt7915_mcu_add_tlv (skb,STA_REC_KEY_V2 ,sizeof (*sec)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_KEY_V2 ,sizeof (*sec)); sec = (struct sta_rec_sec *)tlv; sec->add = cmd;
@@ -1096,7 +1063,7 @@ mt7915_mcu_sta_ba_tlv(struct sk_buff *skb,struct sta_rec_ba *ba;struct tlv *tlv; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_BA ,sizeof (*ba)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_BA ,sizeof (*ba)); ba = (struct sta_rec_ba *)tlv; ba->ba_type = tx ?MT_BA_TYPE_ORIGINATOR :MT_BA_TYPE_RECIPIENT ;
@@ -1116,8 +1083,8 @@ mt7915_mcu_wtbl_ba_tlv(struct sk_buff *skb,struct wtbl_ba *ba;struct tlv *tlv; - tlv =mt7915_mcu_add_nested_tlv (skb,WTBL_BA ,sizeof (*ba), - wtbl_tlv, sta_wtbl); + tlv =mt76_connac_mcu_add_nested_tlv (skb,WTBL_BA ,sizeof (*ba), + wtbl_tlv, sta_wtbl); ba = (struct wtbl_ba *)tlv; ba->tid = params->tid;
@@ -1158,8 +1125,8 @@ mt7915_mcu_sta_ba(struct mt7915_dev *dev,if (IS_ERR (skb))return PTR_ERR (skb); - sta_wtbl =mt7915_mcu_add_tlv (skb,STA_REC_WTBL ,sizeof (struct tlv )); - + sta_wtbl =mt76_connac_mcu_add_tlv (skb,STA_REC_WTBL , +sizeof (struct tlv )); wtbl_hdr =mt76_connac_mcu_alloc_wtbl_req (&dev->mt76, &msta->wcid,WTBL_SET , sta_wtbl, &skb);if (IS_ERR (wtbl_hdr))
@@ -1207,9 +1174,9 @@ mt7915_mcu_wtbl_generic_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,struct wtbl_rx *rx;struct tlv *tlv; - tlv =mt7915_mcu_add_nested_tlv (skb,WTBL_GENERIC ,sizeof (*generic), - wtbl_tlv, sta_wtbl); - + tlv =mt76_connac_mcu_add_nested_tlv (skb,WTBL_GENERIC , +sizeof (*generic), + wtbl_tlv, sta_wtbl); generic = (struct wtbl_generic *)tlv;if (sta) {
@@ -1228,9 +1195,8 @@ mt7915_mcu_wtbl_generic_tlv(struct sk_buff *skb, struct ieee80211_vif *vif, generic->muar_idx =0xe ; } - tlv =mt7915_mcu_add_nested_tlv (skb,WTBL_RX ,sizeof (*rx), - wtbl_tlv, sta_wtbl); - + tlv =mt76_connac_mcu_add_nested_tlv (skb,WTBL_RX ,sizeof (*rx), + wtbl_tlv, sta_wtbl); rx = (struct wtbl_rx *)tlv; rx->rca1 = sta ? vif->type !=NL80211_IFTYPE_AP :1 ; rx->rca2 =1 ;
@@ -1246,7 +1212,7 @@ mt7915_mcu_sta_basic_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,struct sta_rec_basic *basic;struct tlv *tlv; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_BASIC ,sizeof (*basic)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_BASIC ,sizeof (*basic)); basic = (struct sta_rec_basic *)tlv; basic->extra_info =cpu_to_le16 (EXTRA_INFO_VER );
@@ -1301,7 +1267,7 @@ mt7915_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,if (!sta->he_cap.has_he)return ; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_HE ,sizeof (*he)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_HE ,sizeof (*he)); he = (struct sta_rec_he *)tlv;
@@ -1438,7 +1404,7 @@ mt7915_mcu_sta_uapsd_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,if (vif->type !=NL80211_IFTYPE_AP || !sta->wme)return ; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_APPS ,sizeof (*uapsd)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_APPS ,sizeof (*uapsd)); uapsd = (struct sta_rec_uapsd *)tlv;if (sta->uapsd_queues &IEEE80211_WMM_IE_STA_QOSINFO_AC_VO ) {
@@ -1476,7 +1442,7 @@ mt7915_mcu_sta_muru_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,if (!sta->vht_cap.vht_supported)return ; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_MURU ,sizeof (*muru)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_MURU ,sizeof (*muru)); muru = (struct sta_rec_muru *)tlv;
@@ -1523,7 +1489,7 @@ mt7915_mcu_sta_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)struct sta_rec_ht *ht;struct tlv *tlv; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_HT ,sizeof (*ht)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_HT ,sizeof (*ht)); ht = (struct sta_rec_ht *)tlv; ht->ht_cap =cpu_to_le16 (sta->ht_cap.cap);
@@ -1538,7 +1504,7 @@ mt7915_mcu_sta_vht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)if (!sta->vht_cap.vht_supported)return ; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_VHT ,sizeof (*vht)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_VHT ,sizeof (*vht)); vht = (struct sta_rec_vht *)tlv; vht->vht_cap =cpu_to_le32 (sta->vht_cap.cap);
@@ -1561,7 +1527,7 @@ mt7915_mcu_sta_amsdu_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,if (!sta->max_amsdu_len)return ; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_HW_AMSDU ,sizeof (*amsdu)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_HW_AMSDU ,sizeof (*amsdu)); amsdu = (struct sta_rec_amsdu *)tlv; amsdu->max_amsdu_num =8 ; amsdu->amsdu_en = true;
@@ -1577,8 +1543,8 @@ mt7915_mcu_wtbl_smps_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,struct wtbl_smps *smps;struct tlv *tlv; - tlv =mt7915_mcu_add_nested_tlv (skb,WTBL_SMPS ,sizeof (*smps), - wtbl_tlv, sta_wtbl); + tlv =mt76_connac_mcu_add_nested_tlv (skb,WTBL_SMPS ,sizeof (*smps), + wtbl_tlv, sta_wtbl); smps = (struct wtbl_smps *)tlv; smps->smps = (sta->smps_mode ==IEEE80211_SMPS_DYNAMIC ); }
@@ -1594,8 +1560,8 @@ mt7915_mcu_wtbl_ht_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,/* wtbl ht */ if (sta->ht_cap.ht_supported) { - tlv =mt7915_mcu_add_nested_tlv (skb,WTBL_HT ,sizeof (*ht), - wtbl_tlv, sta_wtbl); + tlv =mt76_connac_mcu_add_nested_tlv (skb,WTBL_HT ,sizeof (*ht), + wtbl_tlv, sta_wtbl); ht = (struct wtbl_ht *)tlv; ht->ldpc = mvif->cap.ldpc && (sta->ht_cap.cap &IEEE80211_HT_CAP_LDPC_CODING );
@@ -1609,8 +1575,9 @@ mt7915_mcu_wtbl_ht_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,struct wtbl_vht *vht;u8 af; - tlv =mt7915_mcu_add_nested_tlv (skb,WTBL_VHT ,sizeof (*vht), - wtbl_tlv, sta_wtbl); + tlv =mt76_connac_mcu_add_nested_tlv (skb,WTBL_VHT , +sizeof (*vht), wtbl_tlv, + sta_wtbl); vht = (struct wtbl_vht *)tlv; vht->ldpc = mvif->cap.ldpc && (sta->vht_cap.cap &IEEE80211_VHT_CAP_RXLDPC );
@@ -1634,8 +1601,8 @@ mt7915_mcu_wtbl_hdr_trans_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,struct wtbl_hdr_trans *htr =NULL ;struct tlv *tlv; - tlv =mt7915_mcu_add_nested_tlv (skb,WTBL_HDR_TRANS ,sizeof (*htr), - wtbl_tlv, sta_wtbl); + tlv =mt76_connac_mcu_add_nested_tlv (skb,WTBL_HDR_TRANS ,sizeof (*htr), + wtbl_tlv, sta_wtbl); htr = (struct wtbl_hdr_trans *)tlv; htr->no_rx_trans = true;if (vif->type ==NL80211_IFTYPE_STATION )
@@ -1665,7 +1632,7 @@ mt7915_mcu_sta_wtbl_tlv(struct mt7915_dev *dev, struct sk_buff *skb, msta = sta ? (struct mt7915_sta *)sta->drv_priv : &mvif->sta; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_WTBL ,sizeof (struct tlv )); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_WTBL ,sizeof (struct tlv )); wtbl_hdr =mt76_connac_mcu_alloc_wtbl_req (&dev->mt76, &msta->wcid,WTBL_RESET_AND_SET , tlv, &skb);
@@ -1896,7 +1863,7 @@ mt7915_mcu_sta_bfer_tlv(struct mt7915_dev *dev, struct sk_buff *skb,if (!ebf && !dev->ibf)return ; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_BF ,sizeof (*bf)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_BF ,sizeof (*bf)); bf = (struct sta_rec_bf *)tlv;/* he: eBF only, in accordance with spec
@@ -1956,7 +1923,7 @@ mt7915_mcu_sta_bfee_tlv(struct mt7915_dev *dev, struct sk_buff *skb,if (!mt7915_is_ebf_supported (phy, vif, sta, true))return ; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_BFEE ,sizeof (*bfee)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_BFEE ,sizeof (*bfee)); bfee = (struct sta_rec_bfee *)tlv;if (sta->he_cap.has_he) {
@@ -2007,7 +1974,7 @@ int mt7915_mcu_set_fixed_rate_ctrl(struct mt7915_dev *dev,if (IS_ERR (skb))return PTR_ERR (skb); - tlv =mt7915_mcu_add_tlv (skb,STA_REC_RA_UPDATE ,sizeof (*ra)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_RA_UPDATE ,sizeof (*ra)); ra = (struct sta_rec_ra_fixed *)tlv;switch (field) {
@@ -2047,8 +2014,8 @@ int mt7915_mcu_add_smps(struct mt7915_dev *dev, struct ieee80211_vif *vif,if (IS_ERR (skb))return PTR_ERR (skb); - sta_wtbl =mt7915_mcu_add_tlv (skb,STA_REC_WTBL ,sizeof (struct tlv )); - + sta_wtbl =mt76_connac_mcu_add_tlv (skb,STA_REC_WTBL , +sizeof (struct tlv )); wtbl_hdr =mt76_connac_mcu_alloc_wtbl_req (&dev->mt76, &msta->wcid,WTBL_SET , sta_wtbl, &skb);if (IS_ERR (wtbl_hdr))
@@ -2163,7 +2130,7 @@ mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev,u32 supp_rate = sta->supp_rates[band];u32 cap = sta->wme ?STA_CAP_WMM :0 ; - tlv =mt7915_mcu_add_tlv (skb,STA_REC_RA ,sizeof (*ra)); + tlv =mt76_connac_mcu_add_tlv (skb,STA_REC_RA ,sizeof (*ra)); ra = (struct sta_rec_ra *)tlv; ra->valid = true;
@@ -2558,7 +2525,7 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw,if (IS_ERR (rskb))return PTR_ERR (rskb); - tlv =mt7915_mcu_add_tlv (rskb,BSS_INFO_OFFLOAD ,sizeof (*bcn)); + tlv =mt76_connac_mcu_add_tlv (rskb,BSS_INFO_OFFLOAD ,sizeof (*bcn)); bcn = (struct bss_info_bcn *)tlv; bcn->enable = en;
@@ -4167,7 +4134,8 @@ int mt7915_mcu_update_bss_color(struct mt7915_dev *dev, struct ieee80211_vif *viif (IS_ERR (skb))return PTR_ERR (skb); - tlv =mt7915_mcu_add_tlv (skb,BSS_INFO_BSS_COLOR ,sizeof (*bss_color)); + tlv =mt76_connac_mcu_add_tlv (skb,BSS_INFO_BSS_COLOR , +sizeof (*bss_color)); bss_color = (struct bss_info_color *)tlv; bss_color->disable = !he_bss_color->enabled; bss_color->color = he_bss_color->color;
Signature · 1 line
2.33.1
Lorenzo Bianconi
maintainerPATCH 2/7 mt76: mt7915: rely on mt76_connac_mcu_alloc_wtbl_req
In reply to Lorenzo BianconiRely on mt76_connac_mcu_alloc_wtbl_req routine and remove duplicated code.
--- .../wireless/mediatek/mt76/mt76_connac_mcu.c | 8 +++- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 43 ++++--------------- 2 files changed, 15 insertions(+), 36 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +6 -2
@@ -309,8 +309,12 @@ mt76_connac_mcu_alloc_wtbl_req(struct mt76_dev *dev, struct mt76_wcid *wcid, *skb = nskb; } -if (sta_hdr) - sta_hdr->len =cpu_to_le16 (sizeof (hdr)); +if (sta_hdr) { +if (is_mt7915 (dev)) +le16_add_cpu (&sta_hdr->len,sizeof (hdr)); +else + sta_hdr->len =cpu_to_le16 (sizeof (hdr)); + }return skb_put_data (nskb, &hdr,sizeof (hdr)); }
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +9 -34
73 lines not on this page · raw message
Signature · 1 line
2.33.1
Lorenzo Bianconi
maintainerPATCH 4/7 mt76: connac: move mt76_connac_mcu_get_cipher in common code
In reply to Lorenzo BianconiMove mt76_connac_mcu_get_cipher in mt76-connac code and remove duplicated code from mt7921 and mt7915 driver.
--- .../wireless/mediatek/mt76/mt76_connac_mcu.h | 27 +++++++++++++++++ .../net/wireless/mediatek/mt76/mt7915/mcu.c | 29 +------------------ .../net/wireless/mediatek/mt76/mt7921/mcu.c | 29 +------------------ 3 files changed, 29 insertions(+), 56 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +27 -0
@@ -1428,6 +1428,33 @@ struct mt76_connac_config {u8 data[320 ]; } __packed; +static inline enum mcu_cipher_type +mt76_connac_mcu_get_cipher (int cipher) +{ +switch (cipher) { +case WLAN_CIPHER_SUITE_WEP40 : +return MCU_CIPHER_WEP40 ; +case WLAN_CIPHER_SUITE_WEP104 : +return MCU_CIPHER_WEP104 ; +case WLAN_CIPHER_SUITE_TKIP : +return MCU_CIPHER_TKIP ; +case WLAN_CIPHER_SUITE_AES_CMAC : +return MCU_CIPHER_BIP_CMAC_128 ; +case WLAN_CIPHER_SUITE_CCMP : +return MCU_CIPHER_AES_CCMP ; +case WLAN_CIPHER_SUITE_CCMP_256 : +return MCU_CIPHER_CCMP_256 ; +case WLAN_CIPHER_SUITE_GCMP : +return MCU_CIPHER_GCMP ; +case WLAN_CIPHER_SUITE_GCMP_256 : +return MCU_CIPHER_GCMP_256 ; +case WLAN_CIPHER_SUITE_SMS4 : +return MCU_CIPHER_WAPI ; +default : +return MCU_CIPHER_NONE ; + } +} +#define to_wcid_lo (id) FIELD_GET(GENMASK(7, 0), (u16)id)#define to_wcid_hi (id) FIELD_GET(GENMASK(9, 8), (u16)id)
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +1 -28
@@ -85,33 +85,6 @@ struct mt7915_fw_region {#define HE_PHY (p, c) u8_get_bits(c, IEEE80211_HE_PHY_##p)#define HE_MAC (m, c) u8_get_bits(c, IEEE80211_HE_MAC_##m) -static enum mcu_cipher_type -mt7915_mcu_get_cipher (int cipher) -{ -switch (cipher) { -case WLAN_CIPHER_SUITE_WEP40 : -return MCU_CIPHER_WEP40 ; -case WLAN_CIPHER_SUITE_WEP104 : -return MCU_CIPHER_WEP104 ; -case WLAN_CIPHER_SUITE_TKIP : -return MCU_CIPHER_TKIP ; -case WLAN_CIPHER_SUITE_AES_CMAC : -return MCU_CIPHER_BIP_CMAC_128 ; -case WLAN_CIPHER_SUITE_CCMP : -return MCU_CIPHER_AES_CCMP ; -case WLAN_CIPHER_SUITE_CCMP_256 : -return MCU_CIPHER_CCMP_256 ; -case WLAN_CIPHER_SUITE_GCMP : -return MCU_CIPHER_GCMP ; -case WLAN_CIPHER_SUITE_GCMP_256 : -return MCU_CIPHER_GCMP_256 ; -case WLAN_CIPHER_SUITE_SMS4 : -return MCU_CIPHER_WAPI ; -default : -return MCU_CIPHER_NONE ; - } -} -static u8 mt7915_mcu_chan_bw (struct cfg80211_chan_def *chandef) {static const u8 width_to_bw[] = {
@@ -984,7 +957,7 @@ mt7915_mcu_sta_key_tlv(struct mt7915_sta *msta, struct sk_buff *skb,struct sec_key *sec_key;u8 cipher; - cipher =mt7915_mcu_get_cipher (key->cipher); + cipher =mt76_connac_mcu_get_cipher (key->cipher);if (cipher ==MCU_CIPHER_NONE )return -EOPNOTSUPP ;
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +1 -28
@@ -93,33 +93,6 @@ struct mt7921_fw_region {#define PATCH_SEC_ENC_SCRAMBLE_INFO_MASK GENMASK(15, 0)#define PATCH_SEC_ENC_AES_KEY_MASK GENMASK(7, 0) -static enum mcu_cipher_type -mt7921_mcu_get_cipher (int cipher) -{ -switch (cipher) { -case WLAN_CIPHER_SUITE_WEP40 : -return MCU_CIPHER_WEP40 ; -case WLAN_CIPHER_SUITE_WEP104 : -return MCU_CIPHER_WEP104 ; -case WLAN_CIPHER_SUITE_TKIP : -return MCU_CIPHER_TKIP ; -case WLAN_CIPHER_SUITE_AES_CMAC : -return MCU_CIPHER_BIP_CMAC_128 ; -case WLAN_CIPHER_SUITE_CCMP : -return MCU_CIPHER_AES_CCMP ; -case WLAN_CIPHER_SUITE_CCMP_256 : -return MCU_CIPHER_CCMP_256 ; -case WLAN_CIPHER_SUITE_GCMP : -return MCU_CIPHER_GCMP ; -case WLAN_CIPHER_SUITE_GCMP_256 : -return MCU_CIPHER_GCMP_256 ; -case WLAN_CIPHER_SUITE_SMS4 : -return MCU_CIPHER_WAPI ; -default : -return MCU_CIPHER_NONE ; - } -} -static u8 mt7921_mcu_chan_bw (struct cfg80211_chan_def *chandef) {static const u8 width_to_bw[] = {
@@ -483,7 +456,7 @@ mt7921_mcu_sta_key_tlv(struct mt7921_sta *msta, struct sk_buff *skb,struct sec_key *sec_key;u8 cipher; - cipher =mt7921_mcu_get_cipher (key->cipher); + cipher =mt76_connac_mcu_get_cipher (key->cipher);if (cipher ==MCU_CIPHER_NONE )return -EOPNOTSUPP ;
Signature · 1 line
2.33.1
Lorenzo Bianconi
maintainerPATCH 5/7 mt76: connac: move mt76_connac_chan_bw in common code
In reply to Lorenzo BianconiMove mt76_connac_chan_bw in mt76-connac code and remove duplicated code from mt7921 and mt7915 driver.
--- .../net/wireless/mediatek/mt76/mt76_connac.h | 19 +++++++++++++++ .../net/wireless/mediatek/mt76/mt7915/mcu.c | 23 ++----------------- .../net/wireless/mediatek/mt76/mt7921/mcu.c | 21 +---------------- 3 files changed, 22 insertions(+), 41 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76_connac.h +19 -0
@@ -105,6 +105,25 @@ static inline bool is_mt7915(struct mt76_dev *dev)return mt76_chip (dev) ==0x7915 ; } +static inline u8 mt76_connac_chan_bw (struct cfg80211_chan_def *chandef) +{ +static const u8 width_to_bw[] = { + [NL80211_CHAN_WIDTH_40 ] =CMD_CBW_40MHZ , + [NL80211_CHAN_WIDTH_80 ] =CMD_CBW_80MHZ , + [NL80211_CHAN_WIDTH_80P80 ] =CMD_CBW_8080MHZ , + [NL80211_CHAN_WIDTH_160 ] =CMD_CBW_160MHZ , + [NL80211_CHAN_WIDTH_5 ] =CMD_CBW_5MHZ , + [NL80211_CHAN_WIDTH_10 ] =CMD_CBW_10MHZ , + [NL80211_CHAN_WIDTH_20 ] =CMD_CBW_20MHZ , + [NL80211_CHAN_WIDTH_20_NOHT ] =CMD_CBW_20MHZ , + }; + +if (chandef->width >=ARRAY_SIZE (width_to_bw)) +return 0 ; + +return width_to_bw[chandef->width]; +} +int mt76_connac_pm_wake (struct mt76_phy *phy,struct mt76_connac_pm *pm);void mt76_connac_power_save_sched (struct mt76_phy *phy,struct mt76_connac_pm *pm);
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +2 -21
@@ -85,25 +85,6 @@ struct mt7915_fw_region {#define HE_PHY (p, c) u8_get_bits(c, IEEE80211_HE_PHY_##p)#define HE_MAC (m, c) u8_get_bits(c, IEEE80211_HE_MAC_##m) -static u8 mt7915_mcu_chan_bw (struct cfg80211_chan_def *chandef) -{ -static const u8 width_to_bw[] = { - [NL80211_CHAN_WIDTH_40 ] =CMD_CBW_40MHZ , - [NL80211_CHAN_WIDTH_80 ] =CMD_CBW_80MHZ , - [NL80211_CHAN_WIDTH_80P80 ] =CMD_CBW_8080MHZ , - [NL80211_CHAN_WIDTH_160 ] =CMD_CBW_160MHZ , - [NL80211_CHAN_WIDTH_5 ] =CMD_CBW_5MHZ , - [NL80211_CHAN_WIDTH_10 ] =CMD_CBW_10MHZ , - [NL80211_CHAN_WIDTH_20 ] =CMD_CBW_20MHZ , - [NL80211_CHAN_WIDTH_20_NOHT ] =CMD_CBW_20MHZ , - }; - -if (chandef->width >=ARRAY_SIZE (width_to_bw)) -return 0 ; - -return width_to_bw[chandef->width]; -} -static const struct ieee80211_sta_he_cap *mt7915_get_he_phy_cap (struct mt7915_phy *phy,struct ieee80211_vif *vif) {
@@ -722,7 +703,7 @@ mt7915_mcu_bss_rfch_tlv(struct sk_buff *skb, struct ieee80211_vif *vif, ch = (struct bss_info_rf_ch *)tlv; ch->pri_ch = chandef->chan->hw_value; ch->center_ch0 =ieee80211_frequency_to_channel (freq1); - ch->bw =mt7915_mcu_chan_bw (chandef); + ch->bw =mt76_connac_chan_bw (chandef);if (chandef->width ==NL80211_CHAN_WIDTH_80P80 ) {int freq2 = chandef->center_freq2;
@@ -3371,7 +3352,7 @@ int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd) }__packed req = { .control_ch = chandef->chan->hw_value, .center_ch =ieee80211_frequency_to_channel (freq1), - .bw =mt7915_mcu_chan_bw (chandef), + .bw =mt76_connac_chan_bw (chandef), .tx_streams_num =hweight8 (phy->mt76->antenna_mask), .rx_streams = phy->mt76->antenna_mask, .band_idx = ext_phy,
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +1 -20
@@ -93,25 +93,6 @@ struct mt7921_fw_region {#define PATCH_SEC_ENC_SCRAMBLE_INFO_MASK GENMASK(15, 0)#define PATCH_SEC_ENC_AES_KEY_MASK GENMASK(7, 0) -static u8 mt7921_mcu_chan_bw (struct cfg80211_chan_def *chandef) -{ -static const u8 width_to_bw[] = { - [NL80211_CHAN_WIDTH_40 ] =CMD_CBW_40MHZ , - [NL80211_CHAN_WIDTH_80 ] =CMD_CBW_80MHZ , - [NL80211_CHAN_WIDTH_80P80 ] =CMD_CBW_8080MHZ , - [NL80211_CHAN_WIDTH_160 ] =CMD_CBW_160MHZ , - [NL80211_CHAN_WIDTH_5 ] =CMD_CBW_5MHZ , - [NL80211_CHAN_WIDTH_10 ] =CMD_CBW_10MHZ , - [NL80211_CHAN_WIDTH_20 ] =CMD_CBW_20MHZ , - [NL80211_CHAN_WIDTH_20_NOHT ] =CMD_CBW_20MHZ , - }; - -if (chandef->width >=ARRAY_SIZE (width_to_bw)) -return 0 ; - -return width_to_bw[chandef->width]; -} -static int mt7921_mcu_parse_eeprom (struct mt76_dev *dev,struct sk_buff *skb) {
@@ -1019,7 +1000,7 @@ int mt7921_mcu_set_chan_info(struct mt7921_phy *phy, int cmd) }__packed req = { .control_ch = chandef->chan->hw_value, .center_ch =ieee80211_frequency_to_channel (freq1), - .bw =mt7921_mcu_chan_bw (chandef), + .bw =mt76_connac_chan_bw (chandef), .tx_streams_num =hweight8 (phy->mt76->antenna_mask), .rx_streams = phy->mt76->antenna_mask, .band_idx = phy != &dev->phy,
Signature · 1 line
2.33.1
Lorenzo Bianconi
maintainerPATCH 6/7 mt76: mt7915: rely on mt76_connac_get_phy utilities
In reply to Lorenzo BianconiRely on mt76_connac_get_phy_mode and mt76_connac_get_he_phy_cap utility routines in mt7915 driver and remove duplicated code.
--- .../wireless/mediatek/mt76/mt76_connac_mcu.c | 12 +-- .../wireless/mediatek/mt76/mt76_connac_mcu.h | 5 ++ .../net/wireless/mediatek/mt76/mt7915/mcu.c | 77 +++---------------- 3 files changed, 22 insertions(+), 72 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +6 -6
@@ -1149,10 +1149,8 @@ int mt76_connac_mcu_sta_ba(struct mt76_dev *dev, struct mt76_vif *mvif, }EXPORT_SYMBOL_GPL (mt76_connac_mcu_sta_ba); -static u8 -mt76_connac_get_phy_mode (struct mt76_phy *phy,struct ieee80211_vif *vif, -enum nl80211_band band, -struct ieee80211_sta *sta) +u8 mt76_connac_get_phy_mode (struct mt76_phy *phy,struct ieee80211_vif *vif, +enum nl80211_band band,struct ieee80211_sta *sta) {struct mt76_dev *dev = phy->dev;const struct ieee80211_sta_he_cap *he_cap;
@@ -1160,7 +1158,7 @@ mt76_connac_get_phy_mode(struct mt76_phy *phy, struct ieee80211_vif *vif,struct ieee80211_sta_ht_cap *ht_cap;u8 mode =0 ; -if (!is_mt7921 (dev)) +if (!is_mt7921 (dev) && !is_mt7915 (dev))return 0x38 ;if (sta) {
@@ -1199,8 +1197,9 @@ mt76_connac_get_phy_mode(struct mt76_phy *phy, struct ieee80211_vif *vif,return mode; } +EXPORT_SYMBOL_GPL (mt76_connac_get_phy_mode); -static const struct ieee80211_sta_he_cap * +const struct ieee80211_sta_he_cap *mt76_connac_get_he_phy_cap (struct mt76_phy *phy,struct ieee80211_vif *vif) {enum nl80211_band band = phy->chandef.chan->band;
@@ -1210,6 +1209,7 @@ mt76_connac_get_he_phy_cap(struct mt76_phy *phy, struct ieee80211_vif *vif)return ieee80211_get_he_iftype_cap (sband, vif->type); } +EXPORT_SYMBOL_GPL (mt76_connac_get_he_phy_cap);#define DEFAULT_HE_PE_DURATION 4#define DEFAULT_HE_DURATION_RTS_THRES 1023
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +5 -0
@@ -1592,4 +1592,9 @@ int mt76_connac_mcu_set_p2p_oppps(struct ieee80211_hw *hw, struct ieee80211_vif *vif);u32 mt76_connac_mcu_reg_rr (struct mt76_dev *dev,u32 offset);void mt76_connac_mcu_reg_wr (struct mt76_dev *dev,u32 offset,u32 val); + +const struct ieee80211_sta_he_cap * +mt76_connac_get_he_phy_cap (struct mt76_phy *phy,struct ieee80211_vif *vif); +u8 mt76_connac_get_phy_mode (struct mt76_phy *phy,struct ieee80211_vif *vif, +enum nl80211_band band,struct ieee80211_sta *sta);#endif /* __MT76_CONNAC_MCU_H */
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +11 -66
122 lines not on this page · raw message
Signature · 1 line
2.33.1
Lorenzo Bianconi
maintainerPATCH 7/7 mt76: connac: move mt76_connac_mcu_add_key in connac module
In reply to Lorenzo BianconiMove key configuration code shared between mt7921 and mt7915 in mt76-connac module and remove duplicated code.
--- .../net/wireless/mediatek/mt76/mt76_connac.h | 5 ++ .../wireless/mediatek/mt76/mt76_connac_mcu.c | 88 ++++++++++++++++++ .../wireless/mediatek/mt76/mt76_connac_mcu.h | 5 ++ .../net/wireless/mediatek/mt76/mt7915/main.c | 5 +- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 89 ------------------- .../wireless/mediatek/mt76/mt7915/mt7915.h | 12 +-- .../net/wireless/mediatek/mt76/mt7921/main.c | 9 +- .../net/wireless/mediatek/mt76/mt7921/mcu.c | 89 ------------------- .../wireless/mediatek/mt76/mt7921/mt7921.h | 10 +-- 9 files changed, 111 insertions(+), 201 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76_connac.h +5 -0
@@ -83,6 +83,11 @@ struct mt76_connac_coredump {unsigned long last_activity; }; +struct mt76_connac_sta_key_conf { +s8 keyidx; +u8 key[16 ]; +}; +extern const struct wiphy_wowlan_support mt76_connac_wowlan_support;static inline bool is_mt7922 (struct mt76_dev *dev)
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +88 -0
93 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +5 -0
@@ -1597,4 +1597,9 @@ const struct ieee80211_sta_he_cap * mt76_connac_get_he_phy_cap(struct mt76_phy *phy, struct ieee80211_vif *vif);u8 mt76_connac_get_phy_mode (struct mt76_phy *phy,struct ieee80211_vif *vif,enum nl80211_band band,struct ieee80211_sta *sta); + +int mt76_connac_mcu_add_key (struct mt76_dev *dev,struct ieee80211_vif *vif, +struct mt76_connac_sta_key_conf *sta_key_conf, +struct ieee80211_key_conf *key,int mcu_cmd, +struct mt76_wcid *wcid,enum set_key_cmd cmd);#endif /* __MT76_CONNAC_MCU_H */
drivers/net/wireless/mediatek/mt76/mt7915/main.c +3 -2
@@ -415,8 +415,9 @@ static int mt7915_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,mt76_wcid_key_setup (&dev->mt76, wcid, cmd ==SET_KEY ? key :NULL ); - err =mt7915_mcu_add_key (dev, vif, msta, key, cmd); - + err =mt76_connac_mcu_add_key (&dev->mt76, vif, &msta->bip, + key,MCU_EXT_CMD (STA_REC_UPDATE ), + &msta->wcid, cmd); out:mutex_unlock (&dev->mt76.mutex);
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +0 -89
95 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +2 -10
@@ -6,7 +6,7 @@#include <linux/interrupt.h> #include <linux/ktime.h> -#include "../mt76.h" +#include "../mt76_connac.h" #include "regs.h" #define MT7915_MAX_INTERFACES 19
@@ -68,11 +68,6 @@ enum mt7915_rxq_id { MT7915_RXQ_MCU_WA_EXT, }; -struct mt7915_sta_key_conf { -s8 keyidx; -u8 key[16 ]; -}; -struct mt7915_twt_flow {struct list_head list;u64 start_tsf;
@@ -104,7 +99,7 @@ struct mt7915_sta {struct mt76_sta_stats stats; -struct mt7915_sta_key_conf bip; +struct mt76_connac_sta_key_conf bip;struct {u8 flowid_mask;
@@ -387,9 +382,6 @@ int mt7915_mcu_add_tx_ba(struct mt7915_dev *dev,int mt7915_mcu_add_rx_ba (struct mt7915_dev *dev,struct ieee80211_ampdu_params *params,bool add); -int mt7915_mcu_add_key (struct mt7915_dev *dev,struct ieee80211_vif *vif, -struct mt7915_sta *msta,struct ieee80211_key_conf *key, -enum set_key_cmd cmd);int mt7915_mcu_update_bss_color (struct mt7915_dev *dev,struct ieee80211_vif *vif,struct cfg80211_he_bss_color *he_bss_color); int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
drivers/net/wireless/mediatek/mt76/mt7921/main.c +7 -2
@@ -451,13 +451,18 @@ static int mt7921_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,mt76_wcid_key_setup (&dev->mt76, wcid, cmd ==SET_KEY ? key :NULL ); - err =mt7921_mcu_add_key (dev, vif, msta, key, cmd); + err =mt76_connac_mcu_add_key (&dev->mt76, vif, &msta->bip, + key,MCU_UNI_CMD (STA_REC_UPDATE ), + &msta->wcid, cmd);if (err) goto out;if (key->cipher ==WLAN_CIPHER_SUITE_WEP104 || key->cipher ==WLAN_CIPHER_SUITE_WEP40 ) - err =mt7921_mcu_add_key (dev, vif, mvif->wep_sta, key, cmd); + err =mt76_connac_mcu_add_key (&dev->mt76, vif, + &mvif->wep_sta->bip, + key,MCU_UNI_CMD (STA_REC_UPDATE ), + &mvif->wep_sta->wcid, cmd); out:mt7921_mutex_release (dev);
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +0 -89
95 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +1 -9
@@ -89,11 +89,6 @@ enum mt7921_rxq_id { MT7921_RXQ_MCU_WM = 0, }; -struct mt7921_sta_key_conf { -s8 keyidx; -u8 key[16 ]; -}; -struct mt7921_sta {struct mt76_wcid wcid;/* must be first */
@@ -106,7 +101,7 @@ struct mt7921_sta {unsigned long ampdu_state;struct mt76_sta_stats stats; -struct mt7921_sta_key_conf bip; +struct mt76_connac_sta_key_conf bip; };DECLARE_EWMA (rssi,10 ,8 );
@@ -296,9 +291,6 @@ int mt7921_wpdma_reset(struct mt7921_dev *dev, bool force);int mt7921_wpdma_reinit_cond (struct mt7921_dev *dev);void mt7921_dma_cleanup (struct mt7921_dev *dev);int mt7921_run_firmware (struct mt7921_dev *dev); -int mt7921_mcu_add_key (struct mt7921_dev *dev,struct ieee80211_vif *vif, -struct mt7921_sta *msta,struct ieee80211_key_conf *key, -enum set_key_cmd cmd);int mt7921_mcu_sta_update (struct mt7921_dev *dev,struct ieee80211_sta *sta,struct ieee80211_vif *vif,bool enable,enum mt76_sta_info_state state);
Signature · 1 line
2.33.1
Felix Fietkau
maintainerRe: [PATCH 1/7] mt76: mt7915: rely on mt76_connac_mcu_alloc_sta_req
In reply to Lorenzo BianconiQuoted 26 lines · Lorenzo Bianconi
Rely on
mt76_connac_mcu_alloc_sta_reqroutine and remove duplicated code.
AddMT76_CONNAC_LIBmodule dependency in mt7915 moduleSigned-off-by Lorenzo Bianconi <[email protected]>--- .../net/wireless/mediatek/mt76/mt76_connac.h | 5 ++ .../wireless/mediatek/mt76/mt76_connac_mcu.c | 10 +-- .../wireless/mediatek/mt76/mt76_connac_mcu.h | 23 ++++++- .../net/wireless/mediatek/mt76/mt7915/Kconfig | 2 +- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 66 +++++++------------ .../wireless/mediatek/mt76/mt7915/mt7915.h | 5 -- 6 files changed, 54 insertions(+), 57 deletions(-)struct
mt76_connac_pm*pm);drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +1
-2@@ -266,19 +266,19 @@ mt76_connac_mcu_add_nested_tlv(struct sk_buff *skb, int tag, int len,EXPORT_SYMBOL_GPL (mt76_connac_mcu_add_nested_tlv);struct sk_buff * -mt76_connac_mcu_alloc_sta_req (struct mt76_dev *dev,struct mt76_vif *mvif, -struct mt76_wcid *wcid) +__mt76_connac_mcu_alloc_sta_req(struct mt76_dev *dev, struct mt76_vif *mvif,
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c mt76_connac_mcu_add_nested_tlv(struct sk_buff *skb, int tag, int len, · line 278
Quoted 10 lines
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +2
-1+ struct mt76_wcid *wcid, int len) {struct sta_req_hdr hdr = { .bss_idx = mvif->idx, - .muar_idx = wcid ? mvif->omac_idx :0 , .is_tlv_append =1 , };struct sk_buff *skb; + hdr.muar_idx =mt76_connac_mcu_get_muar_idx (dev, wcid, mvif);
No need for a separate inline function if it's only used in this one place.
Quoted 23 lines
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +2
-1@@ -570,6 +570,7 @@ struct wtbl_raw {sizeof (struct sta_rec_muru ) + \sizeof (struct sta_rec_bfee ) + \sizeof (struct sta_rec_ra ) + \ +sizeof (struct sta_rec_sec ) + \sizeof (struct sta_rec_ra_fixed ) + \sizeof (struct sta_rec_he_6g_capa ) + \ sizeof(struct tlv) + \@@ -1436,7 +1437,7 @@ mt76_connac_mcu_get_wlan_idx(struct mt76_dev *dev, struct mt76_wcid *wcid, { *wlan_idx_hi =0 ; -if (is_mt7921 (dev)) { +if (is_mt7921 (dev) ||is_mt7915 (dev)) { *wlan_idx_lo = wcid ?to_wcid_lo (wcid->idx) :0 ; *wlan_idx_hi = wcid ?to_wcid_hi (wcid->idx) :0 ; }else {@@ -1444,9 +1445,27 @@ mt76_connac_mcu_get_wlan_idx(struct mt76_dev *dev, struct mt76_wcid *wcid, }
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h mt76_connac_mcu_get_wlan_idx(struct mt76_dev *dev, struct mt76_wcid *wcid, · line 1455
Quoted 10 lines
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +8
-0} +static inline int +mt76_connac_mcu_get_muar_idx (struct mt76_dev *dev,struct mt76_wcid *wcid, +struct mt76_vif *mvif) +{ +if (is_mt7915 (dev)) +return wcid && wcid->sta ? mvif->omac_idx :0xe ; + +return wcid ? mvif->omac_idx :0 ;
From what I can tell, the broadcast muar index should be 0xe for all chips, not just mt7915. Would make sense to do this in a separate patch before this one though.
- Felix
Felix Fietkau
maintainerRe: [PATCH 2/7] mt76: mt7915: rely on mt76_connac_mcu_alloc_wtbl_req
In reply to Lorenzo BianconiQuoted 18 lines · Lorenzo Bianconi
Rely on
mt76_connac_mcu_alloc_wtbl_reqroutine and remove duplicated code.Signed-off-by Lorenzo Bianconi <[email protected]>--- .../wireless/mediatek/mt76/mt76_connac_mcu.c | 8 +++- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 43 ++++--------------- 2 files changed, 15 insertions(+), 36 deletions(-)drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +0
-1@@ -309,8 +309,12 @@ mt76_connac_mcu_alloc_wtbl_req(struct mt76_dev *dev, struct mt76_wcid *wcid, *skb = nskb; } -if (sta_hdr)
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c mt76_connac_mcu_alloc_wtbl_req(struct mt76_dev *dev, struct mt76_wcid *wcid, · line 320
Quoted 10 lines
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +6
-1- sta_hdr->len =cpu_to_le16 (sizeof (hdr)); +if (sta_hdr) { +if (is_mt7915 (dev)) +le16_add_cpu (&sta_hdr->len,sizeof (hdr)); +else + sta_hdr->len =cpu_to_le16 (sizeof (hdr)); + }return skb_put_data (nskb, &hdr,sizeof (hdr)); }
The change from the len assignment to addition was done as a bugfix in mt7915. I think it's likely that the assignment is buggy in the connac code as well and should be changed to match mt7915.
- Felix