use standard signature for mt7615 mcu api
Subsystems (2)
Lorenzo Bianconi
maintainercover use standard signature for mt7615 mcu api
Introduce mt76_mcu_ops data structure in mt7615 mcu code in order to reuse the code with other bus types and unify the code with mt7603 driver
Changes since RFC:
- rebase ontop of https://patchwork.kernel.org/patch/10928753/
- fix net_type initialization in mt7615_mcu_set_bss_info
Lorenzo Bianconi (17):
mt7615: mcu: simplify __mt7615_mcu_set_wtbl
mt7615: mcu: simplify __mt7615_mcu_set_sta_rec
mt7615: mcu: remove bss_info_convert_vif_type routine
mt7615: mcu: use proper msg size in mt7615_mcu_add_wtbl_bmc
mt7615: mcu: use proper msg size in mt7615_mcu_add_wtbl
mt7615: mcu: unify mt7615_mcu_add_wtbl_bmc and mt7615_mcu_del_wtbl_bmc
mt7615: mcu: remove unused parameter in mt7615_mcu_del_wtbl
mt7615: remove query from mt7615_mcu_msg_send signature
mt7615: remove dest from mt7615_mcu_msg_send signature
mt7615: mcu: remove skb_ret from mt7615_mcu_msg_send
mt7615: mcu: unify __mt7615_mcu_set_dev_info and
mt7615_mcu_set_dev_info
mt7615: mcu: do not use function pointers whenever possible
mt7615: mcu: remove unused structure in mcu.h
mt7615: mcu: use standard signature for mt7615_mcu_msg_send
mt7615: initialize mt76_mcu_ops data structure
mt7615: mcu: init mcu_restart function pointer
mt7615: mcu: run __mt76_mcu_send_msg in mt7615_mcu_send_firmware
.../net/wireless/mediatek/mt76/mt7615/main.c | 17 +- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 1147 ++++++++--------- .../net/wireless/mediatek/mt76/mt7615/mcu.h | 49 +- .../wireless/mediatek/mt76/mt7615/mt7615.h | 11 +- 4 files changed, 556 insertions(+), 668 deletions(-)
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 1/17 mt7615: mcu: simplify __mt7615_mcu_set_wtbl
Do not loop over cmd payload in __mt7615_mcu_set_wtbl since it is already done in before running __mt7615_mcu_set_wtbl (e.g. mt7615_mcu_set_wtbl_key)
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 62 ++++++++----------- 1 file changed, 26 insertions(+), 36 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +26 -36
@@ -918,37 +918,24 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, struct ieee80211_vif *vif,return __mt7615_mcu_set_bss_info (dev, &bss_info); } -static int __mt7615_mcu_set_wtbl (struct mt7615_dev *dev,int wlan_idx, -int operation,void *buf,int buf_len) +static int +__mt7615_mcu_set_wtbl (struct mt7615_dev *dev,int wlan_idx, +int operation,int ntlv,void *buf, +int buf_len) {struct req_hdr {u8 wlan_idx;u8 operation;__le16 tlv_num;u8 rsv[4 ]; - } __packed req_hdr = {0}; -struct tlv { -__le16 tag; -__le16 len; -u8 buf[0 ]; - } __packed; + } __packed req_hdr = { + .wlan_idx = wlan_idx, + .operation = operation, + .tlv_num =cpu_to_le16 (ntlv), + };struct sk_buff *skb; -u16 tlv_num =0 ; -int offset =0 ; - -while (offset < buf_len) { -struct tlv *tlv = (struct tlv *)((u8 *)buf + offset); - - tlv_num++; - offset += tlv->len; - } skb =mt7615_mcu_msg_alloc (NULL ,sizeof (req_hdr) + buf_len); - - req_hdr.wlan_idx = wlan_idx; - req_hdr.operation = operation; - req_hdr.tlv_num =cpu_to_le16 (tlv_num); -memcpy (skb_put (skb,sizeof (req_hdr)), &req_hdr,sizeof (req_hdr));if (buf && buf_len)
@@ -1015,8 +1002,8 @@ int mt7615_mcu_set_wtbl_key(struct mt7615_dev *dev, int wcid, wtbl_sec_key.key_len =sizeof (wtbl_sec_key.key_material); } -return __mt7615_mcu_set_wtbl (dev, wcid,WTBL_SET , &wtbl_sec_key, - buf_len); +return __mt7615_mcu_set_wtbl (dev, wcid,WTBL_SET ,1 , + &wtbl_sec_key, buf_len); }int mt7615_mcu_add_wtbl_bmc (struct mt7615_dev *dev,struct ieee80211_vif *vif)
@@ -1047,7 +1034,8 @@ int mt7615_mcu_add_wtbl_bmc(struct mt7615_dev *dev, struct ieee80211_vif *vif) wtbl_rx->rv =1 ; ret =__mt7615_mcu_set_wtbl (dev, mvif->sta.wcid.idx, -WTBL_RESET_AND_SET , buf, buf_len); +WTBL_RESET_AND_SET ,2 , buf, + buf_len);kfree (buf);return ret;
@@ -1058,7 +1046,7 @@ int mt7615_mcu_del_wtbl_bmc(struct mt7615_dev *dev, struct ieee80211_vif *vif)struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;return __mt7615_mcu_set_wtbl (dev, mvif->sta.wcid.idx, -WTBL_RESET_AND_SET ,NULL ,0 ); +WTBL_RESET_AND_SET ,0 ,NULL ,0 ); } int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
@@ -1092,8 +1080,8 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif, wtbl_rx->rca2 =1 ; wtbl_rx->rv =1 ; - ret =__mt7615_mcu_set_wtbl (dev, msta->wcid.idx, -WTBL_RESET_AND_SET , buf, buf_len); + ret =__mt7615_mcu_set_wtbl (dev, msta->wcid.idx,WTBL_RESET_AND_SET , +2 , buf, buf_len);kfree (buf);return ret;
@@ -1105,12 +1093,12 @@ int mt7615_mcu_del_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;return __mt7615_mcu_set_wtbl (dev, msta->wcid.idx, -WTBL_RESET_AND_SET ,NULL ,0 ); +WTBL_RESET_AND_SET ,0 ,NULL ,0 ); }int mt7615_mcu_del_wtbl_all (struct mt7615_dev *dev) { -return __mt7615_mcu_set_wtbl (dev,0 ,WTBL_RESET_ALL ,NULL ,0 ); +return __mt7615_mcu_set_wtbl (dev,0 ,WTBL_RESET_ALL ,0 ,NULL ,0 ); } static int __mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, int bss_idx,
@@ -1367,7 +1355,7 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,struct wtbl_ht *wtbl_ht;struct wtbl_raw *wtbl_raw;struct sta_rec_ht *sta_rec_ht; -int buf_len, ret; +int buf_len, ret, ntlv =2 ;u32 msk, val =0 ;u8 *buf;
@@ -1400,6 +1388,7 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif, wtbl_vht->len =cpu_to_le16 (sizeof (*wtbl_vht)); wtbl_vht->ldpc = sta->vht_cap.cap &IEEE80211_VHT_CAP_RXLDPC ; wtbl_vht->vht =1 ; + ntlv++;if (sta->vht_cap.cap &IEEE80211_VHT_CAP_SHORT_GI_80 ) val |=MT_WTBL_W5_SHORT_GI_80 ;
@@ -1416,6 +1405,7 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif, wtbl_smps->tag =cpu_to_le16 (WTBL_SMPS ); wtbl_smps->len =cpu_to_le16 (sizeof (*wtbl_smps)); wtbl_smps->smps =1 ; + ntlv++; }/* sgi */
@@ -1431,8 +1421,8 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif, wtbl_raw->msk =cpu_to_le32 (~msk); wtbl_raw->val =cpu_to_le32 (val); - ret =__mt7615_mcu_set_wtbl (dev, msta->wcid.idx,WTBL_SET , buf, - buf_len); + ret =__mt7615_mcu_set_wtbl (dev, msta->wcid.idx,WTBL_SET , ntlv, + buf, buf_len);if (ret) {kfree (buf);return ret;
@@ -1501,8 +1491,8 @@ int mt7615_mcu_set_tx_ba(struct mt7615_dev *dev, wtbl_ba.ba_winsize_idx = idx; } - ret =__mt7615_mcu_set_wtbl (dev, msta->wcid.idx,WTBL_SET , &wtbl_ba, - buf_len); + ret =__mt7615_mcu_set_wtbl (dev, msta->wcid.idx,WTBL_SET ,1 , + &wtbl_ba, buf_len);if (ret)return ret;
@@ -1561,7 +1551,7 @@ int mt7615_mcu_set_rx_ba(struct mt7615_dev *dev, wtbl_ba.rst_ba_sb =1 ;return __mt7615_mcu_set_wtbl (dev, msta->wcid.idx,WTBL_SET , - &wtbl_ba, buf_len); +1 , &wtbl_ba, buf_len); } void mt7615_mcu_set_rates(struct mt7615_dev *dev, struct mt7615_sta *sta,
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 2/17 mt7615: mcu: simplify __mt7615_mcu_set_sta_rec
In reply to Lorenzo BianconiDo not loop over cmd payload in __mt7615_mcu_set_sta_rec since it is already done in before running __mt7615_mcu_set_sta_rec (e.g. mt7615_mcu_set_sta_rec)
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 51 ++++++++----------- 1 file changed, 21 insertions(+), 30 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +21 -30
@@ -1101,9 +1101,10 @@ int mt7615_mcu_del_wtbl_all(struct mt7615_dev *dev)return __mt7615_mcu_set_wtbl (dev,0 ,WTBL_RESET_ALL ,0 ,NULL ,0 ); } -static int __mt7615_mcu_set_sta_rec (struct mt7615_dev *dev,int bss_idx, -int wlan_idx,int muar_idx,void *buf, -int buf_len) +static int +__mt7615_mcu_set_sta_rec (struct mt7615_dev *dev,int bss_idx, +int wlan_idx,int muar_idx,int ntlv, +void *buf,int buf_len) {struct req_hdr {u8 bss_idx;
@@ -1112,31 +1113,16 @@ static int __mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, int bss_idx,u8 is_tlv_append;u8 muar_idx;u8 rsv[2 ]; - }__packed req_hdr = {0 }; -struct tlv { -__le16 tag; -__le16 len; -u8 buf[0 ]; - } __packed; + }__packed req_hdr = { + .bss_idx = bss_idx, + .wlan_idx = wlan_idx, + .tlv_num =cpu_to_le16 (ntlv), + .is_tlv_append = !!ntlv, + .muar_idx = muar_idx, + };struct sk_buff *skb; -u16 tlv_num =0 ; -int offset =0 ; - -while (offset < buf_len) { -struct tlv *tlv = (struct tlv *)((u8 *)buf + offset); - - tlv_num++; - offset += tlv->len; - } skb =mt7615_mcu_msg_alloc (NULL ,sizeof (req_hdr) + buf_len); - - req_hdr.bss_idx = bss_idx; - req_hdr.wlan_idx = wlan_idx; - req_hdr.tlv_num =cpu_to_le16 (tlv_num); - req_hdr.is_tlv_append = tlv_num ?1 :0 ; - req_hdr.muar_idx = muar_idx; -memcpy (skb_put (skb,sizeof (req_hdr)), &req_hdr,sizeof (req_hdr));if (buf && buf_len)
@@ -1167,7 +1153,7 @@ int mt7615_mcu_set_sta_rec_bmc(struct mt7615_dev *dev, }return __mt7615_mcu_set_sta_rec (dev, mvif->idx, mvif->sta.wcid.idx, - mvif->omac_idx, &sta_rec_basic, + mvif->omac_idx,1 , &sta_rec_basic, buf_len); }
@@ -1216,7 +1202,7 @@ int mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, struct ieee80211_vif *vif, }return __mt7615_mcu_set_sta_rec (dev, mvif->idx, msta->wcid.idx, - mvif->omac_idx, &sta_rec_basic, + mvif->omac_idx,1 , &sta_rec_basic, buf_len); }
@@ -1435,6 +1421,7 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif, sta_rec_ht->tag =cpu_to_le16 (STA_REC_HT ); sta_rec_ht->len =cpu_to_le16 (sizeof (*sta_rec_ht)); sta_rec_ht->ht_cap =cpu_to_le16 (sta->ht_cap.cap); + ntlv =1 ;if (sta->vht_cap.vht_supported) {struct sta_rec_vht *sta_rec_vht;
@@ -1448,10 +1435,12 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,cpu_to_le16 (sta->vht_cap.vht_mcs.rx_mcs_map); sta_rec_vht->vht_tx_mcs_map =cpu_to_le16 (sta->vht_cap.vht_mcs.tx_mcs_map); + ntlv++; } ret =__mt7615_mcu_set_sta_rec (dev, mvif->idx, msta->wcid.idx, - mvif->omac_idx, buf, buf_len); + mvif->omac_idx, ntlv, buf, + buf_len);kfree (buf);return ret; }
@@ -1508,7 +1497,8 @@ int mt7615_mcu_set_tx_ba(struct mt7615_dev *dev, sta_rec_ba.winsize =cpu_to_le16 (ba_size);return __mt7615_mcu_set_sta_rec (dev, mvif->idx, msta->wcid.idx, - mvif->omac_idx, &sta_rec_ba, buf_len); + mvif->omac_idx,1 , &sta_rec_ba, + buf_len); } int mt7615_mcu_set_rx_ba(struct mt7615_dev *dev,
@@ -1535,7 +1525,8 @@ int mt7615_mcu_set_rx_ba(struct mt7615_dev *dev, sta_rec_ba.winsize =cpu_to_le16 (params->buf_size); ret =__mt7615_mcu_set_sta_rec (dev, mvif->idx, msta->wcid.idx, - mvif->omac_idx, &sta_rec_ba, buf_len); + mvif->omac_idx,1 , &sta_rec_ba, + buf_len);if (ret || !add)return ret;
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 3/17 mt7615: mcu: remove bss_info_convert_vif_type routine
In reply to Lorenzo BianconiRemove bss_info_convert_vif_type routine since it is run just in mt7615_mcu_set_bss_info and the switch over vif->type is already there. Simplify mt7615_mcu_set_bss_info routine
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 73 +++++++------------ 1 file changed, 27 insertions(+), 46 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +27 -46
@@ -842,39 +842,28 @@ static int __mt7615_mcu_set_bss_info(struct mt7615_dev *dev, MCU_Q_SET, MCU_S2D_H2N, NULL); } -static void bss_info_convert_vif_type (enum nl80211_iftype type, -u32 *network_type,u32 *conn_type) -{ -switch (type) { -case NL80211_IFTYPE_AP : -if (network_type) - *network_type =NETWORK_INFRA ; -if (conn_type) - *conn_type =CONNECTION_INFRA_AP ; -break ; -case NL80211_IFTYPE_STATION : -if (network_type) - *network_type =NETWORK_INFRA ; -if (conn_type) - *conn_type =CONNECTION_INFRA_STA ; -break ; -default : -WARN_ON (1 ); -break ; - }; -} - -int mt7615_mcu_set_bss_info (struct mt7615_dev *dev,struct ieee80211_vif *vif, -int en) +int mt7615_mcu_set_bss_info (struct mt7615_dev *dev, +struct ieee80211_vif *vif,int en) {struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv; -struct bss_info bss_info = {0 }; -u8 bmc_tx_wlan_idx =0 ; -u32 network_type =0 , conn_type =0 ; +struct bss_info bss_info = { + .bss_idx = mvif->idx, + .omac_idx = mvif->omac_idx, + .band_idx = mvif->band_idx, + .bcn_interval = vif->bss_conf.beacon_int, + .dtim_period = vif->bss_conf.dtim_period, + .enable = en, + .feature =BIT (BSS_INFO_BASIC ), + .wmm_idx = mvif->wmm_idx, + }; -if (vif->type ==NL80211_IFTYPE_AP ) { - bmc_tx_wlan_idx = mvif->sta.wcid.idx; - }else if (vif->type ==NL80211_IFTYPE_STATION ) { +switch (vif->type) { +case NL80211_IFTYPE_AP : + bss_info.bmc_tx_wlan_idx = mvif->sta.wcid.idx; + bss_info.network_type =NETWORK_INFRA ; + bss_info.conn_type =CONNECTION_INFRA_AP ; +break ; +case NL80211_IFTYPE_STATION : {/* find the unicast entry for sta mode bmc tx */ struct ieee80211_sta *ap_sta;struct mt7615_sta *msta;
@@ -888,27 +877,19 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, struct ieee80211_vif *vif, } msta = (struct mt7615_sta *)ap_sta->drv_priv; - bmc_tx_wlan_idx = msta->wcid.idx; + bss_info.bmc_tx_wlan_idx = msta->wcid.idx; + bss_info.network_type =NETWORK_INFRA ; + bss_info.conn_type =CONNECTION_INFRA_STA ;rcu_read_unlock (); - }else { +break ; + } +default :WARN_ON (1 ); +break ; } - -bss_info_convert_vif_type (vif->type, &network_type, &conn_type); - - bss_info.bss_idx = mvif->idx;memcpy (bss_info.bssid, vif->bss_conf.bssid,ETH_ALEN ); - bss_info.omac_idx = mvif->omac_idx; - bss_info.band_idx = mvif->band_idx; - bss_info.bmc_tx_wlan_idx = bmc_tx_wlan_idx; - bss_info.wmm_idx = mvif->wmm_idx; - bss_info.network_type = network_type; - bss_info.conn_type = conn_type; - bss_info.bcn_interval = vif->bss_conf.beacon_int; - bss_info.dtim_period = vif->bss_conf.dtim_period; - bss_info.enable = en; - bss_info.feature =BIT (BSS_INFO_BASIC ); +if (en) { bss_info.feature |=BIT (BSS_INFO_OMAC );if (mvif->omac_idx >EXT_BSSID_START )
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 4/17 mt7615: mcu: use proper msg size in mt7615_mcu_add_wtbl_bmc
In reply to Lorenzo BianconiUse proper mcu message size in mt7615_mcu_add_wtbl_bmc and do not allocate a huge buffer. Moreover use stack memory instead of heap one
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 54 +++++++++---------- 1 file changed, 24 insertions(+), 30 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +24 -30
@@ -987,39 +987,33 @@ int mt7615_mcu_set_wtbl_key(struct mt7615_dev *dev, int wcid, &wtbl_sec_key, buf_len); } -int mt7615_mcu_add_wtbl_bmc (struct mt7615_dev *dev,struct ieee80211_vif *vif) +int mt7615_mcu_add_wtbl_bmc (struct mt7615_dev *dev, +struct ieee80211_vif *vif) {struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv; -struct wtbl_generic *wtbl_generic; -struct wtbl_rx *wtbl_rx; -int buf_len, ret; -u8 *buf; - - buf =kzalloc (MT7615_WTBL_UPDATE_MAX_SIZE ,GFP_KERNEL ); -if (!buf) -return -ENOMEM ; - - wtbl_generic = (struct wtbl_generic *)buf; - buf_len =sizeof (*wtbl_generic); - wtbl_generic->tag =cpu_to_le16 (WTBL_GENERIC ); - wtbl_generic->len =cpu_to_le16 (buf_len); -eth_broadcast_addr (wtbl_generic->peer_addr); - wtbl_generic->muar_idx =0xe ; - - wtbl_rx = (struct wtbl_rx *)(buf + buf_len); - buf_len +=sizeof (*wtbl_rx); - wtbl_rx->tag =cpu_to_le16 (WTBL_RX ); - wtbl_rx->len =cpu_to_le16 (sizeof (*wtbl_rx)); - wtbl_rx->rca1 =1 ; - wtbl_rx->rca2 =1 ; - wtbl_rx->rv =1 ; - - ret =__mt7615_mcu_set_wtbl (dev, mvif->sta.wcid.idx, -WTBL_RESET_AND_SET ,2 , buf, - buf_len); +struct { +struct wtbl_generic g_wtbl; +struct wtbl_rx rx_wtbl; + } data = { + .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 (data.g_wtbl.peer_addr); -kfree (buf); -return ret; +return __mt7615_mcu_set_wtbl (dev, mvif->sta.wcid.idx, +WTBL_RESET_AND_SET ,2 , &data, +sizeof (struct wtbl_generic ) + +sizeof (struct wtbl_rx )); }int mt7615_mcu_del_wtbl_bmc (struct mt7615_dev *dev,struct ieee80211_vif *vif)
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 5/17 mt7615: mcu: use proper msg size in mt7615_mcu_add_wtbl
In reply to Lorenzo BianconiUse proper mcu message size in mt7615_mcu_add_wtbl and do not allocate a huge buffer. Moreover use stack memory instead of heap one
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 54 +++++++++---------- 1 file changed, 24 insertions(+), 30 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +24 -30
@@ -1029,37 +1029,31 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif, {struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv; -struct wtbl_generic *wtbl_generic; -struct wtbl_rx *wtbl_rx; -int buf_len, ret; -u8 *buf; - - buf =kzalloc (MT7615_WTBL_UPDATE_MAX_SIZE ,GFP_KERNEL ); -if (!buf) -return -ENOMEM ; - - wtbl_generic = (struct wtbl_generic *)buf; - buf_len =sizeof (*wtbl_generic); - wtbl_generic->tag =cpu_to_le16 (WTBL_GENERIC ); - wtbl_generic->len =cpu_to_le16 (buf_len); -memcpy (wtbl_generic->peer_addr, sta->addr,ETH_ALEN ); - wtbl_generic->muar_idx = mvif->omac_idx; - wtbl_generic->qos = sta->wme; - wtbl_generic->partial_aid =cpu_to_le16 (sta->aid); - - wtbl_rx = (struct wtbl_rx *)(buf + buf_len); - buf_len +=sizeof (*wtbl_rx); - wtbl_rx->tag =cpu_to_le16 (WTBL_RX ); - wtbl_rx->len =cpu_to_le16 (sizeof (*wtbl_rx)); - wtbl_rx->rca1 = (vif->type ==NL80211_IFTYPE_AP ) ?0 :1 ; - wtbl_rx->rca2 =1 ; - wtbl_rx->rv =1 ; - - ret =__mt7615_mcu_set_wtbl (dev, msta->wcid.idx,WTBL_RESET_AND_SET , -2 , buf, buf_len); +struct { +struct wtbl_generic g_wtbl; +struct wtbl_rx rx_wtbl; + } data = { + .g_wtbl = { + .tag =cpu_to_le16 (WTBL_GENERIC ), + .len =cpu_to_le16 (sizeof (struct wtbl_generic )), + .muar_idx = mvif->omac_idx, + .qos = sta->wme, + .partial_aid =cpu_to_le16 (sta->aid), + }, + .rx_wtbl = { + .tag =cpu_to_le16 (WTBL_RX ), + .len =cpu_to_le16 (sizeof (struct wtbl_rx )), + .rca1 = vif->type !=NL80211_IFTYPE_AP , + .rca2 =1 , + .rv =1 , + }, + }; +memcpy (data.g_wtbl.peer_addr, sta->addr,ETH_ALEN ); -kfree (buf); -return ret; +return __mt7615_mcu_set_wtbl (dev, msta->wcid.idx, +WTBL_RESET_AND_SET ,2 , &data, +sizeof (struct wtbl_generic ) + +sizeof (struct wtbl_rx )); } int mt7615_mcu_del_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 6/17 mt7615: mcu: unify mt7615_mcu_add_wtbl_bmc and mt7615_mcu_del_wtbl_bmc
In reply to Lorenzo BianconiRemove duplicated code in mt7615_bss_info_changed
--- drivers/net/wireless/mediatek/mt76/mt7615/main.c | 15 ++++----------- drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 12 ++++++++---- .../net/wireless/mediatek/mt76/mt7615/mt7615.h | 4 ++-- 3 files changed, 14 insertions(+), 17 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/main.c +4 -11
@@ -290,17 +290,10 @@ static void mt7615_bss_info_changed(struct ieee80211_hw *hw,*/ if (changed &BSS_CHANGED_BEACON_ENABLED ) { -if (info->enable_beacon) { -mt7615_mcu_set_bss_info (dev, vif,1 ); -mt7615_mcu_add_wtbl_bmc (dev, vif); -mt7615_mcu_set_sta_rec_bmc (dev, vif,1 ); -mt7615_mcu_set_bcn (dev, vif,1 ); - }else { -mt7615_mcu_set_sta_rec_bmc (dev, vif,0 ); -mt7615_mcu_del_wtbl_bmc (dev, vif); -mt7615_mcu_set_bss_info (dev, vif,0 ); -mt7615_mcu_set_bcn (dev, vif,0 ); - } +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_bcn (dev, vif, info->enable_beacon); }mutex_unlock (&dev->mt76.mutex);
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +8 -4
@@ -987,10 +987,10 @@ int mt7615_mcu_set_wtbl_key(struct mt7615_dev *dev, int wcid, &wtbl_sec_key, buf_len); } -int mt7615_mcu_add_wtbl_bmc (struct mt7615_dev *dev, -struct ieee80211_vif *vif) +static int +mt7615_mcu_add_wtbl_bmc (struct mt7615_dev *dev, +struct mt7615_vif *mvif) { -struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;struct {struct wtbl_generic g_wtbl;struct wtbl_rx rx_wtbl;
@@ -1016,10 +1016,14 @@ int mt7615_mcu_add_wtbl_bmc(struct mt7615_dev *dev, sizeof(struct wtbl_rx)); } -int mt7615_mcu_del_wtbl_bmc (struct mt7615_dev *dev,struct ieee80211_vif *vif) +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) +return mt7615_mcu_add_wtbl_bmc (dev, mvif); +return __mt7615_mcu_set_wtbl (dev, mvif->sta.wcid.idx,WTBL_RESET_AND_SET ,0 ,NULL ,0 ); }
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +2 -2
@@ -118,8 +118,8 @@ int mt7615_mcu_set_wtbl_key(struct mt7615_dev *dev, int wcid,void mt7615_mcu_set_rates (struct mt7615_dev *dev,struct mt7615_sta *sta,struct ieee80211_tx_rate *probe_rate,struct ieee80211_tx_rate *rates); -int mt7615_mcu_add_wtbl_bmc (struct mt7615_dev *dev,struct ieee80211_vif *vif); -int mt7615_mcu_del_wtbl_bmc (struct mt7615_dev *dev,struct ieee80211_vif *vif); +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_vif *vif,
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 7/17 mt7615: mcu: remove unused parameter in mt7615_mcu_del_wtbl
In reply to Lorenzo BianconiRemove unused vif parameter in mt7615_mcu_del_wtbl signature
--- drivers/net/wireless/mediatek/mt76/mt7615/main.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/main.c +1 -1
@@ -336,7 +336,7 @@ void mt7615_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif, struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);mt7615_mcu_set_sta_rec (dev, vif, sta,0 ); -mt7615_mcu_del_wtbl (dev, vif, sta); +mt7615_mcu_del_wtbl (dev, sta); } static void mt7615_sta_rate_tbl_update(struct ieee80211_hw *hw,
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +1 -1
@@ -1060,7 +1060,7 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif, sizeof(struct wtbl_rx)); } -int mt7615_mcu_del_wtbl (struct mt7615_dev *dev,struct ieee80211_vif *vif, +int mt7615_mcu_del_wtbl (struct mt7615_dev *dev,struct ieee80211_sta *sta) {struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +1 -2
@@ -122,8 +122,7 @@ 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_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);
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 8/17 mt7615: remove query from mt7615_mcu_msg_send signature
In reply to Lorenzo BianconiRemove query parameter from mt7615_mcu_msg_send routine signature since it can be obtained from cmd value
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 53 +++++++++---------- 1 file changed, 26 insertions(+), 27 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +26 -27
@@ -49,7 +49,7 @@ struct mt7615_fw_trailer {#define FW_START_WORKING_PDA_CR4 BIT(2)static int __mt7615_mcu_msg_send (struct mt7615_dev *dev,struct sk_buff *skb, -int cmd,int query,int dest,int *wait_seq) +int cmd,int dest,int *wait_seq) {struct mt7615_mcu_txd *mcu_txd;u8 seq, q_idx, pkt_fmt;
@@ -94,15 +94,14 @@ static int __mt7615_mcu_msg_send(struct mt7615_dev *dev, struct sk_buff *skb, mcu_txd->seq = seq;if (cmd <0 ) { + mcu_txd->set_query =MCU_Q_NA ; mcu_txd->cid = -cmd; }else { mcu_txd->cid =MCU_CMD_EXT_CID ; + mcu_txd->set_query =MCU_Q_SET ; mcu_txd->ext_cid = cmd; -if (query !=MCU_Q_NA ) - mcu_txd->ext_cid_ack =1 ; + mcu_txd->ext_cid_ack =1 ; } - - mcu_txd->set_query = query; mcu_txd->s2d_index = dest;if (wait_seq)
@@ -116,9 +115,9 @@ static int __mt7615_mcu_msg_send(struct mt7615_dev *dev, struct sk_buff *skb,return mt76_tx_queue_skb_raw (dev, qid, skb,0 ); } -static int mt7615_mcu_msg_send (struct mt7615_dev *dev,struct sk_buff *skb, -int cmd,int query,int dest, -struct sk_buff **skb_ret) +static int +mt7615_mcu_msg_send (struct mt7615_dev *dev,struct sk_buff *skb, +int cmd,int dest,struct sk_buff **skb_ret) {unsigned long expires = jiffies +10 *HZ ;struct mt7615_mcu_rxd *rxd;
@@ -126,7 +125,7 @@ static int mt7615_mcu_msg_send(struct mt7615_dev *dev, struct sk_buff *skb,mutex_lock (&dev->mt76.mmio.mcu.mutex); - ret =__mt7615_mcu_msg_send (dev, skb, cmd, query, dest, &seq); + ret =__mt7615_mcu_msg_send (dev, skb, cmd, dest, &seq);if (ret) goto out;
@@ -179,7 +178,7 @@ static int mt7615_mcu_init_download(struct mt7615_dev *dev, u32 addr,struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req));return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_TARGET_ADDRESS_LEN_REQ , -MCU_Q_NA ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); } static int mt7615_mcu_send_firmware(struct mt7615_dev *dev, const void *data,
@@ -197,7 +196,7 @@ static int mt7615_mcu_send_firmware(struct mt7615_dev *dev, const void *data,return -ENOMEM ; ret =__mt7615_mcu_msg_send (dev, skb, -MCU_CMD_FW_SCATTER , -MCU_Q_NA ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL );if (ret)break ;
@@ -221,7 +220,7 @@ static int mt7615_mcu_start_firmware(struct mt7615_dev *dev, u32 addr,struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req));return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_FW_START_REQ , -MCU_Q_NA ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); }static int mt7615_mcu_restart (struct mt7615_dev *dev)
@@ -229,7 +228,7 @@ static int mt7615_mcu_restart(struct mt7615_dev *dev)struct sk_buff *skb =mt7615_mcu_msg_alloc (NULL ,0 );return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_RESTART_DL_REQ , -MCU_Q_NA ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); }static int mt7615_mcu_patch_sem_ctrl (struct mt7615_dev *dev,bool get)
@@ -249,7 +248,7 @@ static int mt7615_mcu_patch_sem_ctrl(struct mt7615_dev *dev, bool get)int ret; ret =mt7615_mcu_msg_send (dev, skb, -MCU_CMD_PATCH_SEM_CONTROL , -MCU_Q_NA ,MCU_S2D_H2N , &skb_ret); +MCU_S2D_H2N , &skb_ret);if (ret) goto out;
@@ -272,7 +271,7 @@ static int mt7615_mcu_start_patch(struct mt7615_dev *dev)struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req));return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_PATCH_FINISH_REQ , -MCU_Q_NA ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); }static int mt7615_driver_own (struct mt7615_dev *dev)
@@ -559,7 +558,7 @@ int mt7615_mcu_set_eeprom(struct mt7615_dev *dev) data[off -MT_EE_NIC_CONF_0 ].val = eep[off];return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_EFUSE_BUFFER_MODE , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); }int mt7615_mcu_init_mac (struct mt7615_dev *dev)
@@ -575,7 +574,7 @@ int mt7615_mcu_init_mac(struct mt7615_dev *dev)struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req));return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_MAC_INIT_CTRL , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); }int mt7615_mcu_set_rts_thresh (struct mt7615_dev *dev,u32 val)
@@ -595,7 +594,7 @@ int mt7615_mcu_set_rts_thresh(struct mt7615_dev *dev, u32 val)struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req));return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PROTECT_CTRL , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); } int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue,
@@ -634,7 +633,7 @@ int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue, skb =mt7615_mcu_msg_alloc (&req,sizeof (req));return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_EDCA_UPDATE , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); }int mt7615_mcu_ctrl_pm_state (struct mt7615_dev *dev,int enter)
@@ -665,7 +664,7 @@ int mt7615_mcu_ctrl_pm_state(struct mt7615_dev *dev, int enter)struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req));return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PM_STATE_CTRL , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); } static int __mt7615_mcu_set_dev_info(struct mt7615_dev *dev,
@@ -713,7 +712,7 @@ static int __mt7615_mcu_set_dev_info(struct mt7615_dev *dev,memcpy (skb_push (skb,sizeof (req_hdr)), &req_hdr,sizeof (req_hdr));return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_DEV_INFO_UPDATE , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); } int mt7615_mcu_set_dev_info(struct mt7615_dev *dev, struct ieee80211_vif *vif,
@@ -839,7 +838,7 @@ static int __mt7615_mcu_set_bss_info(struct mt7615_dev *dev, bss_info_tag_handler[i].handler (dev, bss_info, skb);return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BSS_INFO_UPDATE , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); } int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
@@ -923,7 +922,7 @@ __mt7615_mcu_set_wtbl(struct mt7615_dev *dev, int wlan_idx,memcpy (skb_put (skb, buf_len), buf, buf_len);return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_WTBL_UPDATE , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); } static enum mt7615_cipher_type
@@ -1102,7 +1101,7 @@ __mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, int bss_idx,memcpy (skb_put (skb, buf_len), buf, buf_len);return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_STA_REC_UPDATE , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); } int mt7615_mcu_set_sta_rec_bmc(struct mt7615_dev *dev,
@@ -1231,7 +1230,7 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif, skb =mt7615_mcu_msg_alloc (&req,sizeof (req));return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BCN_OFFLOAD , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); }int mt7615_mcu_set_channel (struct mt7615_dev *dev)
@@ -1297,13 +1296,13 @@ int mt7615_mcu_set_channel(struct mt7615_dev *dev) skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); ret =mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_CHANNEL_SWITCH , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL );if (ret)return ret; skb =mt7615_mcu_msg_alloc (&req,sizeof (req));return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_SET_RX_PATH , -MCU_Q_SET ,MCU_S2D_H2N ,NULL ); +MCU_S2D_H2N ,NULL ); } int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 9/17 mt7615: remove dest from mt7615_mcu_msg_send signature
In reply to Lorenzo BianconiRemove dest parameter from mt7615_mcu_msg_send/__mt7615_mcu_msg_send routine signature since it can is always set to MCU_S2D_H2N
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 56 ++++++++----------- 1 file changed, 22 insertions(+), 34 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +22 -34
@@ -49,7 +49,7 @@ struct mt7615_fw_trailer {#define FW_START_WORKING_PDA_CR4 BIT(2)static int __mt7615_mcu_msg_send (struct mt7615_dev *dev,struct sk_buff *skb, -int cmd,int dest,int *wait_seq) +int cmd,int *wait_seq) {struct mt7615_mcu_txd *mcu_txd;u8 seq, q_idx, pkt_fmt;
@@ -102,7 +102,7 @@ static int __mt7615_mcu_msg_send(struct mt7615_dev *dev, struct sk_buff *skb, mcu_txd->ext_cid = cmd; mcu_txd->ext_cid_ack =1 ; } - mcu_txd->s2d_index = dest; + mcu_txd->s2d_index =MCU_S2D_H2N ;if (wait_seq) *wait_seq = seq;
@@ -117,7 +117,7 @@ static int __mt7615_mcu_msg_send(struct mt7615_dev *dev, struct sk_buff *skb,static int mt7615_mcu_msg_send (struct mt7615_dev *dev,struct sk_buff *skb, -int cmd,int dest,struct sk_buff **skb_ret) +int cmd,struct sk_buff **skb_ret) {unsigned long expires = jiffies +10 *HZ ;struct mt7615_mcu_rxd *rxd;
@@ -125,7 +125,7 @@ mt7615_mcu_msg_send(struct mt7615_dev *dev, struct sk_buff *skb,mutex_lock (&dev->mt76.mmio.mcu.mutex); - ret =__mt7615_mcu_msg_send (dev, skb, cmd, dest, &seq); + ret =__mt7615_mcu_msg_send (dev, skb, cmd, &seq);if (ret) goto out;
@@ -178,7 +178,7 @@ static int mt7615_mcu_init_download(struct mt7615_dev *dev, u32 addr,struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req));return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_TARGET_ADDRESS_LEN_REQ , -MCU_S2D_H2N ,NULL ); +NULL ); } static int mt7615_mcu_send_firmware(struct mt7615_dev *dev, const void *data,
@@ -196,7 +196,7 @@ static int mt7615_mcu_send_firmware(struct mt7615_dev *dev, const void *data,return -ENOMEM ; ret =__mt7615_mcu_msg_send (dev, skb, -MCU_CMD_FW_SCATTER , -MCU_S2D_H2N ,NULL ); +NULL );if (ret)break ;
@@ -219,16 +219,14 @@ static int mt7615_mcu_start_firmware(struct mt7615_dev *dev, u32 addr, };struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_FW_START_REQ , -MCU_S2D_H2N ,NULL ); +return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_FW_START_REQ ,NULL ); }static int mt7615_mcu_restart (struct mt7615_dev *dev) {struct sk_buff *skb =mt7615_mcu_msg_alloc (NULL ,0 ); -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_RESTART_DL_REQ , -MCU_S2D_H2N ,NULL ); +return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_RESTART_DL_REQ ,NULL ); }static int mt7615_mcu_patch_sem_ctrl (struct mt7615_dev *dev,bool get)
@@ -248,7 +246,7 @@ static int mt7615_mcu_patch_sem_ctrl(struct mt7615_dev *dev, bool get)int ret; ret =mt7615_mcu_msg_send (dev, skb, -MCU_CMD_PATCH_SEM_CONTROL , -MCU_S2D_H2N , &skb_ret); + &skb_ret);if (ret) goto out;
@@ -270,8 +268,7 @@ static int mt7615_mcu_start_patch(struct mt7615_dev *dev) };struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_PATCH_FINISH_REQ , -MCU_S2D_H2N ,NULL ); +return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_PATCH_FINISH_REQ ,NULL ); }static int mt7615_driver_own (struct mt7615_dev *dev)
@@ -558,7 +555,7 @@ int mt7615_mcu_set_eeprom(struct mt7615_dev *dev) data[off -MT_EE_NIC_CONF_0 ].val = eep[off];return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_EFUSE_BUFFER_MODE , -MCU_S2D_H2N ,NULL ); +NULL ); }int mt7615_mcu_init_mac (struct mt7615_dev *dev)
@@ -573,8 +570,7 @@ int mt7615_mcu_init_mac(struct mt7615_dev *dev) };struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_MAC_INIT_CTRL , -MCU_S2D_H2N ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_MAC_INIT_CTRL ,NULL ); }int mt7615_mcu_set_rts_thresh (struct mt7615_dev *dev,u32 val)
@@ -593,8 +589,7 @@ int mt7615_mcu_set_rts_thresh(struct mt7615_dev *dev, u32 val) };struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PROTECT_CTRL , -MCU_S2D_H2N ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PROTECT_CTRL ,NULL ); } int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue,
@@ -632,8 +627,7 @@ int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue, } skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_EDCA_UPDATE , -MCU_S2D_H2N ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_EDCA_UPDATE ,NULL ); }int mt7615_mcu_ctrl_pm_state (struct mt7615_dev *dev,int enter)
@@ -663,8 +657,7 @@ int mt7615_mcu_ctrl_pm_state(struct mt7615_dev *dev, int enter) };struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PM_STATE_CTRL , -MCU_S2D_H2N ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PM_STATE_CTRL ,NULL ); } static int __mt7615_mcu_set_dev_info(struct mt7615_dev *dev,
@@ -712,7 +705,7 @@ static int __mt7615_mcu_set_dev_info(struct mt7615_dev *dev,memcpy (skb_push (skb,sizeof (req_hdr)), &req_hdr,sizeof (req_hdr));return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_DEV_INFO_UPDATE , -MCU_S2D_H2N ,NULL ); +NULL ); } int mt7615_mcu_set_dev_info(struct mt7615_dev *dev, struct ieee80211_vif *vif,
@@ -838,7 +831,7 @@ static int __mt7615_mcu_set_bss_info(struct mt7615_dev *dev, bss_info_tag_handler[i].handler (dev, bss_info, skb);return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BSS_INFO_UPDATE , -MCU_S2D_H2N ,NULL ); +NULL ); } int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
@@ -921,8 +914,7 @@ __mt7615_mcu_set_wtbl(struct mt7615_dev *dev, int wlan_idx,if (buf && buf_len)memcpy (skb_put (skb, buf_len), buf, buf_len); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_WTBL_UPDATE , -MCU_S2D_H2N ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_WTBL_UPDATE ,NULL ); } static enum mt7615_cipher_type
@@ -1100,8 +1092,7 @@ __mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, int bss_idx,if (buf && buf_len)memcpy (skb_put (skb, buf_len), buf, buf_len); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_STA_REC_UPDATE , -MCU_S2D_H2N ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_STA_REC_UPDATE ,NULL ); } int mt7615_mcu_set_sta_rec_bmc(struct mt7615_dev *dev,
@@ -1229,8 +1220,7 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif,dev_kfree_skb (skb); skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BCN_OFFLOAD , -MCU_S2D_H2N ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BCN_OFFLOAD ,NULL ); }int mt7615_mcu_set_channel (struct mt7615_dev *dev)
@@ -1295,14 +1285,12 @@ int mt7615_mcu_set_channel(struct mt7615_dev *dev)memset (req.txpower_sku,0x3f ,49 ); skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); - ret =mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_CHANNEL_SWITCH , -MCU_S2D_H2N ,NULL ); + ret =mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_CHANNEL_SWITCH ,NULL );if (ret)return ret; skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_SET_RX_PATH , -MCU_S2D_H2N ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_SET_RX_PATH ,NULL ); } int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 10/17 mt7615: mcu: remove skb_ret from mt7615_mcu_msg_send
In reply to Lorenzo BianconiRemove skb_ret parameter from mt7615_mcu_msg_send signature since it is actually used just by mt7615_mcu_patch_sem_ctrl. This is a prelimanry patch to use mt76 common mcu API
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 77 ++++++------------- 1 file changed, 24 insertions(+), 53 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +24 -53
@@ -116,8 +116,7 @@ static int __mt7615_mcu_msg_send(struct mt7615_dev *dev, struct sk_buff *skb, }static int -mt7615_mcu_msg_send (struct mt7615_dev *dev,struct sk_buff *skb, -int cmd,struct sk_buff **skb_ret) +mt7615_mcu_msg_send (struct mt7615_dev *dev,struct sk_buff *skb,int cmd) {unsigned long expires = jiffies +10 *HZ ;struct mt7615_mcu_rxd *rxd;
@@ -142,18 +141,11 @@ mt7615_mcu_msg_send(struct mt7615_dev *dev, struct sk_buff *skb,if (seq != rxd->seq)continue ; -if (skb_ret) { -int hdr_len =sizeof (*rxd); - -if (!test_bit (MT76_STATE_MCU_RUNNING , - &dev->mt76.state)) - hdr_len -=4 ; -skb_pull (skb, hdr_len); - *skb_ret = skb; - }else { -dev_kfree_skb (skb); +if (cmd == -MCU_CMD_PATCH_SEM_CONTROL ) { +skb_pull (skb,sizeof (*rxd) -4 ); + ret = *skb->data; } - +dev_kfree_skb (skb);break ; }
@@ -177,8 +169,7 @@ static int mt7615_mcu_init_download(struct mt7615_dev *dev, u32 addr, };struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_TARGET_ADDRESS_LEN_REQ , -NULL ); +return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_TARGET_ADDRESS_LEN_REQ ); } static int mt7615_mcu_send_firmware(struct mt7615_dev *dev, const void *data,
@@ -219,43 +210,26 @@ static int mt7615_mcu_start_firmware(struct mt7615_dev *dev, u32 addr, };struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_FW_START_REQ ,NULL ); +return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_FW_START_REQ ); }static int mt7615_mcu_restart (struct mt7615_dev *dev) {struct sk_buff *skb =mt7615_mcu_msg_alloc (NULL ,0 ); -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_RESTART_DL_REQ ,NULL ); +return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_RESTART_DL_REQ ); }static int mt7615_mcu_patch_sem_ctrl (struct mt7615_dev *dev,bool get) {struct { -__le32 operation; +__le32 op; } req = { - .operation =cpu_to_le32 (get ?PATCH_SEM_GET : -PATCH_SEM_RELEASE ), + .op =cpu_to_le32 (get ?PATCH_SEM_GET :PATCH_SEM_RELEASE ), }; -struct event { -u8 status; -u8 reserved[3 ]; - } *resp;struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -struct sk_buff *skb_ret; -int ret; - ret =mt7615_mcu_msg_send (dev, skb, -MCU_CMD_PATCH_SEM_CONTROL , - &skb_ret); -if (ret) - goto out; - - resp = (struct event *)(skb_ret->data); - ret = resp->status; -dev_kfree_skb (skb_ret); - -out: -return ret; +return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_PATCH_SEM_CONTROL ); }static int mt7615_mcu_start_patch (struct mt7615_dev *dev)
@@ -268,7 +242,7 @@ static int mt7615_mcu_start_patch(struct mt7615_dev *dev) };struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_PATCH_FINISH_REQ ,NULL ); +return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_PATCH_FINISH_REQ ); }static int mt7615_driver_own (struct mt7615_dev *dev)
@@ -554,8 +528,7 @@ int mt7615_mcu_set_eeprom(struct mt7615_dev *dev)for (off =MT_EE_NIC_CONF_0 ; off < __MT_EE_MAX; off++) data[off -MT_EE_NIC_CONF_0 ].val = eep[off]; -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_EFUSE_BUFFER_MODE , -NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_EFUSE_BUFFER_MODE ); }int mt7615_mcu_init_mac (struct mt7615_dev *dev)
@@ -570,7 +543,7 @@ int mt7615_mcu_init_mac(struct mt7615_dev *dev) };struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_MAC_INIT_CTRL ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_MAC_INIT_CTRL ); }int mt7615_mcu_set_rts_thresh (struct mt7615_dev *dev,u32 val)
@@ -589,7 +562,7 @@ int mt7615_mcu_set_rts_thresh(struct mt7615_dev *dev, u32 val) };struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PROTECT_CTRL ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PROTECT_CTRL ); } int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue,
@@ -627,7 +600,7 @@ int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue, } skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_EDCA_UPDATE ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_EDCA_UPDATE ); }int mt7615_mcu_ctrl_pm_state (struct mt7615_dev *dev,int enter)
@@ -657,7 +630,7 @@ int mt7615_mcu_ctrl_pm_state(struct mt7615_dev *dev, int enter) };struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PM_STATE_CTRL ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PM_STATE_CTRL ); } static int __mt7615_mcu_set_dev_info(struct mt7615_dev *dev,
@@ -704,8 +677,7 @@ static int __mt7615_mcu_set_dev_info(struct mt7615_dev *dev,memcpy (skb_push (skb,sizeof (req_hdr)), &req_hdr,sizeof (req_hdr)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_DEV_INFO_UPDATE , -NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_DEV_INFO_UPDATE ); } int mt7615_mcu_set_dev_info(struct mt7615_dev *dev, struct ieee80211_vif *vif,
@@ -830,8 +802,7 @@ static int __mt7615_mcu_set_bss_info(struct mt7615_dev *dev, bss_info_tag_handler[i].handler) bss_info_tag_handler[i].handler (dev, bss_info, skb); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BSS_INFO_UPDATE , -NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BSS_INFO_UPDATE ); } int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
@@ -914,7 +885,7 @@ __mt7615_mcu_set_wtbl(struct mt7615_dev *dev, int wlan_idx,if (buf && buf_len)memcpy (skb_put (skb, buf_len), buf, buf_len); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_WTBL_UPDATE ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_WTBL_UPDATE ); } static enum mt7615_cipher_type
@@ -1092,7 +1063,7 @@ __mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, int bss_idx,if (buf && buf_len)memcpy (skb_put (skb, buf_len), buf, buf_len); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_STA_REC_UPDATE ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_STA_REC_UPDATE ); } int mt7615_mcu_set_sta_rec_bmc(struct mt7615_dev *dev,
@@ -1220,7 +1191,7 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif,dev_kfree_skb (skb); skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BCN_OFFLOAD ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BCN_OFFLOAD ); }int mt7615_mcu_set_channel (struct mt7615_dev *dev)
@@ -1285,12 +1256,12 @@ int mt7615_mcu_set_channel(struct mt7615_dev *dev)memset (req.txpower_sku,0x3f ,49 ); skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); - ret =mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_CHANNEL_SWITCH ,NULL ); + ret =mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_CHANNEL_SWITCH );if (ret)return ret; skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_SET_RX_PATH ,NULL ); +return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_SET_RX_PATH ); } int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 11/17 mt7615: mcu: unify __mt7615_mcu_set_dev_info and mt7615_mcu_set_dev_info
In reply to Lorenzo BianconiUnify mt7615_mcu_set_dev_info and __mt7615_mcu_set_dev_info since the latter is run just by mt7615_mcu_set_dev_info
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 91 ++++++++----------- .../wireless/mediatek/mt76/mt7615/mt7615.h | 4 +- 2 files changed, 38 insertions(+), 57 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +36 -55
@@ -633,68 +633,49 @@ int mt7615_mcu_ctrl_pm_state(struct mt7615_dev *dev, int enter)return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PM_STATE_CTRL ); } -static int __mt7615_mcu_set_dev_info (struct mt7615_dev *dev, -struct dev_info *dev_info) +int mt7615_mcu_set_dev_info (struct mt7615_dev *dev, +struct ieee80211_vif *vif,bool enable) { -struct req_hdr { -u8 omac_idx; -u8 band_idx; -__le16 tlv_num; -u8 is_tlv_append; -u8 rsv[3 ]; - } __packed req_hdr = {0}; -struct req_tlv { -__le16 tag; -__le16 len; -u8 active; -u8 band_idx; -u8 omac_addr[ETH_ALEN ]; - } __packed; -struct sk_buff *skb; -u16 tlv_num =0 ; - - skb =mt7615_mcu_msg_alloc (NULL ,sizeof (req_hdr) + -sizeof (struct req_tlv )); -skb_reserve (skb,sizeof (req_hdr)); - -if (dev_info->feature &BIT (DEV_INFO_ACTIVE )) { -struct req_tlv req_tlv = { +struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv; +struct { +struct req_hdr { +u8 omac_idx; +u8 band_idx; +__le16 tlv_num; +u8 is_tlv_append; +u8 rsv[3 ]; + } __packed hdr; +struct req_tlv { +__le16 tag; +__le16 len; +u8 active; +u8 band_idx; +u8 omac_addr[ETH_ALEN ]; + } __packed tlv; + } data = { + .hdr = { + .omac_idx = mvif->omac_idx, + .band_idx = mvif->band_idx, + .tlv_num =cpu_to_le16 (1 ), + .is_tlv_append =1 , + }, + .tlv = { .tag =cpu_to_le16 (DEV_INFO_ACTIVE ), - .len =cpu_to_le16 (sizeof (req_tlv)), - .active = dev_info->enable, - .band_idx = dev_info->band_idx, - }; -memcpy (req_tlv.omac_addr, dev_info->omac_addr,ETH_ALEN ); -memcpy (skb_put (skb,sizeof (req_tlv)), &req_tlv, -sizeof (req_tlv)); - tlv_num++; - } - - req_hdr.omac_idx = dev_info->omac_idx; - req_hdr.band_idx = dev_info->band_idx; - req_hdr.tlv_num =cpu_to_le16 (tlv_num); - req_hdr.is_tlv_append = tlv_num ?1 :0 ; + .len =cpu_to_le16 (sizeof (struct req_tlv )), + .active = enable, + .band_idx = mvif->band_idx, + }, + }; +struct sk_buff *skb; -memcpy (skb_push (skb,sizeof (req_hdr)), &req_hdr,sizeof (req_hdr)); +memcpy (data.tlv.omac_addr, vif->addr,ETH_ALEN ); + skb =mt7615_mcu_msg_alloc (&data,sizeof (data)); +if (!skb) +return -ENOMEM ;return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_DEV_INFO_UPDATE ); } -int mt7615_mcu_set_dev_info (struct mt7615_dev *dev,struct ieee80211_vif *vif, -int en) -{ -struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv; -struct dev_info dev_info = {0 }; - - dev_info.omac_idx = mvif->omac_idx; -memcpy (dev_info.omac_addr, vif->addr,ETH_ALEN ); - dev_info.band_idx = mvif->band_idx; - dev_info.enable = en; - dev_info.feature =BIT (DEV_INFO_ACTIVE ); - -return __mt7615_mcu_set_dev_info (dev, &dev_info); -} -static void bss_info_omac_handler (struct mt7615_dev *dev,struct bss_info *bss_info,struct sk_buff *skb)
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +2 -2
@@ -108,8 +108,8 @@ int mt7615_eeprom_init(struct mt7615_dev *dev);int mt7615_dma_init (struct mt7615_dev *dev);void mt7615_dma_cleanup (struct mt7615_dev *dev);int mt7615_mcu_init (struct mt7615_dev *dev); -int mt7615_mcu_set_dev_info (struct mt7615_dev *dev,struct ieee80211_vif *vif, -int en); +int mt7615_mcu_set_dev_info (struct mt7615_dev *dev, +struct ieee80211_vif *vif,bool enable);int mt7615_mcu_set_bss_info (struct mt7615_dev *dev,struct ieee80211_vif *vif,int en); int mt7615_mcu_set_wtbl_key(struct mt7615_dev *dev, int wcid,
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 12/17 mt7615: mcu: do not use function pointers whenever possible
In reply to Lorenzo BianconiRemove function pointers in mt7615_mcu_set_bss_info and run function directly. Moreover remove __mt7615_mcu_set_bss_info since it is run just by mt7615_mcu_set_bss_info and remove duplicated istructions
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 220 +++++++++--------- 1 file changed, 105 insertions(+), 115 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +105 -115
@@ -676,154 +676,107 @@ int mt7615_mcu_set_dev_info(struct mt7615_dev *dev,return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_DEV_INFO_UPDATE ); } -static void bss_info_omac_handler (struct mt7615_dev *dev, -struct bss_info *bss_info, -struct sk_buff *skb) +static void +mt7615_mcu_bss_info_omac_header (struct mt7615_vif *mvif,u8 *data, +u32 conn_type) { -struct bss_info_omac tlv = {0 }; - - tlv.tag =cpu_to_le16 (BSS_INFO_OMAC ); - tlv.len =cpu_to_le16 (sizeof (tlv)); - tlv.hw_bss_idx = (bss_info->omac_idx >EXT_BSSID_START ) ? -HW_BSSID_0 : bss_info->omac_idx; - tlv.omac_idx = bss_info->omac_idx; - tlv.band_idx = bss_info->band_idx; - tlv.conn_type =cpu_to_le32 (bss_info->conn_type); - -memcpy (skb_put (skb,sizeof (tlv)), &tlv,sizeof (tlv)); +struct bss_info_omac *hdr = (struct bss_info_omac *)data; +u8 idx; + + idx = mvif->omac_idx >EXT_BSSID_START ?HW_BSSID_0 : mvif->omac_idx; + hdr->tag =cpu_to_le16 (BSS_INFO_OMAC ); + hdr->len =cpu_to_le16 (sizeof (struct bss_info_omac )); + hdr->hw_bss_idx = idx; + hdr->omac_idx = mvif->omac_idx; + hdr->band_idx = mvif->band_idx; + hdr->conn_type =cpu_to_le32 (conn_type); } -static void bss_info_basic_handler (struct mt7615_dev *dev, -struct bss_info *bss_info, -struct sk_buff *skb) +static void +mt7615_mcu_bss_info_basic_header (struct ieee80211_vif *vif,u8 *data, +u32 net_type,u8 tx_wlan_idx, +bool enable) { -struct bss_info_basic tlv = {0 }; - - tlv.tag =cpu_to_le16 (BSS_INFO_BASIC ); - tlv.len =cpu_to_le16 (sizeof (tlv)); - tlv.network_type =cpu_to_le32 (bss_info->network_type); - tlv.active = bss_info->enable; - tlv.bcn_interval =cpu_to_le16 (bss_info->bcn_interval); -memcpy (tlv.bssid, bss_info->bssid,ETH_ALEN ); - tlv.wmm_idx = bss_info->wmm_idx; - tlv.dtim_period = bss_info->dtim_period; - tlv.bmc_tx_wlan_idx = bss_info->bmc_tx_wlan_idx; - -memcpy (skb_put (skb,sizeof (tlv)), &tlv,sizeof (tlv)); +struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv; +struct bss_info_basic *hdr = (struct bss_info_basic *)data; + + hdr->tag =cpu_to_le16 (BSS_INFO_BASIC ); + hdr->len =cpu_to_le16 (sizeof (struct bss_info_basic )); + hdr->network_type =cpu_to_le32 (net_type); + hdr->active = enable; + hdr->bcn_interval =cpu_to_le16 (vif->bss_conf.beacon_int); +memcpy (hdr->bssid, vif->bss_conf.bssid,ETH_ALEN ); + hdr->wmm_idx = mvif->wmm_idx; + hdr->dtim_period = vif->bss_conf.dtim_period; + hdr->bmc_tx_wlan_idx = tx_wlan_idx; } -static void bss_info_ext_bss_handler (struct mt7615_dev *dev, -struct bss_info *bss_info, -struct sk_buff *skb) +static void +mt7615_mcu_bss_info_ext_header (struct mt7615_vif *mvif,u8 *data) {/* SIFS 20us + 512 byte beacon tranmitted by 1Mbps (3906us) */ #define BCN_TX_ESTIMATE_TIME (4096 + 20) -struct bss_info_ext_bss tlv = {0 }; +struct bss_info_ext_bss *hdr = (struct bss_info_ext_bss *)data;int ext_bss_idx; - ext_bss_idx = bss_info->omac_idx -EXT_BSSID_START ; - + ext_bss_idx = mvif->omac_idx -EXT_BSSID_START ;if (ext_bss_idx <0 )return ; - tlv.tag =cpu_to_le16 (BSS_INFO_EXT_BSS ); - tlv.len =cpu_to_le16 (sizeof (tlv)); - tlv.mbss_tsf_offset = ext_bss_idx *BCN_TX_ESTIMATE_TIME ; - -memcpy (skb_put (skb,sizeof (tlv)), &tlv,sizeof (tlv)); + hdr->tag =cpu_to_le16 (BSS_INFO_EXT_BSS ); + hdr->len =cpu_to_le16 (sizeof (struct bss_info_ext_bss )); + hdr->mbss_tsf_offset = ext_bss_idx *BCN_TX_ESTIMATE_TIME ; } -static struct bss_info_tag_handler bss_info_tag_handler[] = { - {BSS_INFO_OMAC ,sizeof (struct bss_info_omac ), bss_info_omac_handler}, - {BSS_INFO_BASIC ,sizeof (struct bss_info_basic ), bss_info_basic_handler}, - {BSS_INFO_RF_CH ,sizeof (struct bss_info_rf_ch ),NULL }, - {BSS_INFO_PM ,0 ,NULL }, - {BSS_INFO_UAPSD ,0 ,NULL }, - {BSS_INFO_ROAM_DETECTION ,0 ,NULL }, - {BSS_INFO_LQ_RM ,0 ,NULL }, - {BSS_INFO_EXT_BSS ,sizeof (struct bss_info_ext_bss ), bss_info_ext_bss_handler}, - {BSS_INFO_BMC_INFO ,0 ,NULL }, - {BSS_INFO_SYNC_MODE ,0 ,NULL }, - {BSS_INFO_RA ,0 ,NULL }, - {BSS_INFO_MAX_NUM ,0 ,NULL }, -}; - -static int __mt7615_mcu_set_bss_info (struct mt7615_dev *dev, -struct bss_info *bss_info) +int mt7615_mcu_set_bss_info (struct mt7615_dev *dev, +struct ieee80211_vif *vif,int en) { +struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;struct req_hdr {u8 bss_idx;u8 rsv0;__le16 tlv_num;u8 is_tlv_append;u8 rsv1[3 ]; - } __packed req_hdr = {0}; + } __packed; +int len =sizeof (struct req_hdr ) +sizeof (struct bss_info_basic ); +int ret, i, features =BIT (BSS_INFO_BASIC ), ntlv =1 ; +u32 conn_type =0 , net_type =NETWORK_INFRA ; +u8 *buf, *data, tx_wlan_idx =0 ; +struct req_hdr *hdr;struct sk_buff *skb; -u16 tlv_num =0 ; -u32 size =0 ; -int i; -for (i =0 ; i <BSS_INFO_MAX_NUM ; i++) -if ((BIT (bss_info_tag_handler[i].tag) & bss_info->feature) && - bss_info_tag_handler[i].handler) { - tlv_num++; - size += bss_info_tag_handler[i].len; +if (en) { + len +=sizeof (struct bss_info_omac ); + features |=BIT (BSS_INFO_OMAC ); +if (mvif->omac_idx >EXT_BSSID_START ) { + len +=sizeof (struct bss_info_ext_bss ); + features |=BIT (BSS_INFO_EXT_BSS ); + ntlv++; } - - skb =mt7615_mcu_msg_alloc (NULL ,sizeof (req_hdr) + size); - - req_hdr.bss_idx = bss_info->bss_idx; - req_hdr.tlv_num =cpu_to_le16 (tlv_num); - req_hdr.is_tlv_append = tlv_num ?1 :0 ; - -memcpy (skb_put (skb,sizeof (req_hdr)), &req_hdr,sizeof (req_hdr)); - -for (i =0 ; i <BSS_INFO_MAX_NUM ; i++) -if ((BIT (bss_info_tag_handler[i].tag) & bss_info->feature) && - bss_info_tag_handler[i].handler) - bss_info_tag_handler[i].handler (dev, bss_info, skb); - -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BSS_INFO_UPDATE ); -} - -int mt7615_mcu_set_bss_info (struct mt7615_dev *dev, -struct ieee80211_vif *vif,int en) -{ -struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv; -struct bss_info bss_info = { - .bss_idx = mvif->idx, - .omac_idx = mvif->omac_idx, - .band_idx = mvif->band_idx, - .bcn_interval = vif->bss_conf.beacon_int, - .dtim_period = vif->bss_conf.dtim_period, - .enable = en, - .feature =BIT (BSS_INFO_BASIC ), - .wmm_idx = mvif->wmm_idx, - }; + ntlv++; + }switch (vif->type) {case NL80211_IFTYPE_AP : - bss_info.bmc_tx_wlan_idx = mvif->sta.wcid.idx; - bss_info.network_type =NETWORK_INFRA ; - bss_info.conn_type =CONNECTION_INFRA_AP ; + tx_wlan_idx = mvif->sta.wcid.idx; + conn_type =CONNECTION_INFRA_AP ;break ;case NL80211_IFTYPE_STATION : { -/* find the unicast entry for sta mode bmc tx */ -struct ieee80211_sta *ap_sta; +struct ieee80211_sta *sta;struct mt7615_sta *msta;rcu_read_lock (); - ap_sta =ieee80211_find_sta (vif, vif->bss_conf.bssid); -if (!ap_sta) { + sta =ieee80211_find_sta (vif, vif->bss_conf.bssid); +if (!sta) {rcu_read_unlock ();return -EINVAL ; } - msta = (struct mt7615_sta *)ap_sta->drv_priv; - bss_info.bmc_tx_wlan_idx = msta->wcid.idx; - bss_info.network_type =NETWORK_INFRA ; - bss_info.conn_type =CONNECTION_INFRA_STA ; + msta = (struct mt7615_sta *)sta->drv_priv; + tx_wlan_idx = msta->wcid.idx; + conn_type =CONNECTION_INFRA_STA ;rcu_read_unlock ();break ;
@@ -832,15 +785,52 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,WARN_ON (1 );break ; } -memcpy (bss_info.bssid, vif->bss_conf.bssid,ETH_ALEN ); -if (en) { - bss_info.feature |=BIT (BSS_INFO_OMAC ); -if (mvif->omac_idx >EXT_BSSID_START ) - bss_info.feature |=BIT (BSS_INFO_EXT_BSS ); + buf =kzalloc (len,GFP_KERNEL ); +if (!buf) +return -ENOMEM ; + + hdr = (struct req_hdr *)buf; + hdr->bss_idx = mvif->idx; + hdr->tlv_num =cpu_to_le16 (ntlv); + hdr->is_tlv_append =1 ; + + data = buf +sizeof (*hdr); +for (i =0 ; i <BSS_INFO_MAX_NUM ; i++) { +int tag =max_t (int,ffs (features &BIT (i)) -1 ,0 ); + +switch (tag) { +case BSS_INFO_OMAC : +mt7615_mcu_bss_info_omac_header (mvif, data, + conn_type); + data +=sizeof (struct bss_info_omac ); +break ; +case BSS_INFO_BASIC : +mt7615_mcu_bss_info_basic_header (vif, data, net_type, + tx_wlan_idx, en); + data +=sizeof (struct bss_info_basic ); +break ; +case BSS_INFO_EXT_BSS : +mt7615_mcu_bss_info_ext_header (mvif, data); + data +=sizeof (struct bss_info_ext_bss ); +break ; +default : +break ; + } + } + + skb =mt7615_mcu_msg_alloc (buf, len); +if (!skb) { + ret = -ENOMEM ; + goto out; } -return __mt7615_mcu_set_bss_info (dev, &bss_info); + ret =mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BSS_INFO_UPDATE ); + +out: +kfree (buf); + +return ret; } static int
Signature · 1 line
2.20.1
Re: [PATCH 12/17] mt7615: mcu: do not use function pointers whenever possible
Quoted 18 lines
Remove function pointers in
mt7615_mcu_set_bss_infoand run function directly. Moreover remove__mt7615_mcu_set_bss_infosince it is run just bymt7615_mcu_set_bss_infoand remove duplicated istructionsSigned-off-by Lorenzo Bianconi <[email protected]>--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 220 +++++++++--------- 1 file changed, 105 insertions(+), 115 deletions(-)drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +0
-0@@ -676,154 +676,107 @@ int mt7615_mcu_set_dev_info(struct mt7615_dev *dev,return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_DEV_INFO_UPDATE ); }
[...]
Quoted 13 lines
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +3
-5@@ -832,15 +785,52 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,WARN_ON (1 );break ; } -memcpy (bss_info.bssid, vif->bss_conf.bssid,ETH_ALEN ); -if (en) { - bss_info.feature |=BIT (BSS_INFO_OMAC ); -if (mvif->omac_idx >EXT_BSSID_START ) - bss_info.feature |=BIT (BSS_INFO_EXT_BSS ); + buf =kzalloc (len,GFP_KERNEL ); +if (!buf) +return -ENOMEM ;
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, · line 801
Quoted 10 lines
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +10
-0+ + hdr = (struct req_hdr *)buf; + hdr->bss_idx = mvif->idx; + hdr->tlv_num =cpu_to_le16 (ntlv); + hdr->is_tlv_append =1 ; + + data = buf +sizeof (*hdr); +for (i =0 ; i <BSS_INFO_MAX_NUM ; i++) { +int tag =max_t (int,ffs (features &BIT (i)) -1 ,0 ); +
Ops, I found an issue here, it should be:
int tag = ffs(features & BIT(i)) - 1;
@Felix: do I need to resubmit the whole series or just a fix for this patch?
Regards,
Lorenzo
Quoted 39 lines
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +30
-2+switch (tag) { +case BSS_INFO_OMAC : +mt7615_mcu_bss_info_omac_header (mvif, data, + conn_type); + data +=sizeof (struct bss_info_omac ); +break ; +case BSS_INFO_BASIC : +mt7615_mcu_bss_info_basic_header (vif, data, net_type, + tx_wlan_idx, en); + data +=sizeof (struct bss_info_basic ); +break ; +case BSS_INFO_EXT_BSS : +mt7615_mcu_bss_info_ext_header (mvif, data); + data +=sizeof (struct bss_info_ext_bss ); +break ; +default : +break ; + } + } + + skb =mt7615_mcu_msg_alloc (buf, len); +if (!skb) { + ret = -ENOMEM ; + goto out; } -return __mt7615_mcu_set_bss_info (dev, &bss_info); + ret =mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BSS_INFO_UPDATE ); + +out: +kfree (buf); + +return ret; } static int --2.20.1
Lorenzo Bianconi
maintainerPATCH 13/17 mt7615: mcu: remove unused structure in mcu.h
In reply to Lorenzo BianconiRemove following struct no longer used:
- dev_info
- bss_info
- bss_info_tag_handler
--- .../net/wireless/mediatek/mt76/mt7615/mcu.h | 30 ------------------- 1 file changed, 30 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.h +0 -30
@@ -131,41 +131,11 @@ enum {#define CONN_STATE_CONNECT 1#define CONN_STATE_PORT_SECURE 2 -struct dev_info { -u8 omac_idx; -u8 omac_addr[ETH_ALEN ]; -u8 band_idx; -u8 enable; -u32 feature; -}; -enum {DEV_INFO_ACTIVE ,DEV_INFO_MAX_NUM }; -struct bss_info { -u8 bss_idx; -u8 bssid[ETH_ALEN ]; -u8 omac_idx; -u8 band_idx; -u8 bmc_tx_wlan_idx;/* for bmc tx (sta mode use uc entry) */ -u8 wmm_idx; -u32 network_type; -u32 conn_type; -u16 bcn_interval; -u8 dtim_period; -u8 enable; -u32 feature; -}; - -struct bss_info_tag_handler { -u32 tag; -u32 len; -void (*handler)(struct mt7615_dev *dev, -struct bss_info *bss_info,struct sk_buff *skb); -}; -struct bss_info_omac {__le16 tag;__le16 len;
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 14/17 mt7615: mcu: use standard signature for mt7615_mcu_msg_send
In reply to Lorenzo BianconiUse mt76 common signature for mt7615_mcu_msg_send. Move skb allocation in mt7615_mcu_msg_send and remove duplicated code. Remove __mt7615_mcu_set_wtbl and __mt7615_mcu_set_sta_rec since now are used just to send mcu msgs. This is a preliminary patch for mt7615-mt7603 mcu code unification
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 614 +++++++++--------- .../net/wireless/mediatek/mt76/mt7615/mcu.h | 19 +- 2 files changed, 337 insertions(+), 296 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +319 -295
@@ -57,9 +57,6 @@ static int __mt7615_mcu_msg_send(struct mt7615_dev *dev, struct sk_buff *skb,u32 val;__le32 *txd; -if (!skb) -return -EINVAL ; - seq = ++dev->mt76.mmio.mcu.msg_seq &0xf ;if (!seq) seq = ++dev->mt76.mmio.mcu.msg_seq &0xf ;
@@ -116,19 +113,25 @@ static int __mt7615_mcu_msg_send(struct mt7615_dev *dev, struct sk_buff *skb, }static int -mt7615_mcu_msg_send (struct mt7615_dev *dev,struct sk_buff *skb,int cmd) +mt7615_mcu_msg_send (struct mt7615_dev *dev,int cmd,const void *data, +int len,bool wait_resp) {unsigned long expires = jiffies +10 *HZ ;struct mt7615_mcu_rxd *rxd; +struct sk_buff *skb;int ret, seq; + skb =mt7615_mcu_msg_alloc (data, len); +if (!skb) +return -ENOMEM ; +mutex_lock (&dev->mt76.mmio.mcu.mutex); ret =__mt7615_mcu_msg_send (dev, skb, cmd, &seq);if (ret) goto out; -while (1 ) { +while (wait_resp) { skb =mt76_mcu_get_response (&dev->mt76, expires);if (!skb) { dev_err(dev->mt76.dev, "Message %d (seq %d) timeout\n",
@@ -167,9 +170,9 @@ static int mt7615_mcu_init_download(struct mt7615_dev *dev, u32 addr, .len = cpu_to_le32(len), .mode = cpu_to_le32(mode), }; -struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_TARGET_ADDRESS_LEN_REQ ); +return mt7615_mcu_msg_send (dev, -MCU_CMD_TARGET_ADDRESS_LEN_REQ , + &req,sizeof (req), true); } static int mt7615_mcu_send_firmware(struct mt7615_dev *dev, const void *data,
@@ -208,16 +211,15 @@ static int mt7615_mcu_start_firmware(struct mt7615_dev *dev, u32 addr, .option = cpu_to_le32(option), .addr = cpu_to_le32(addr), }; -struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_FW_START_REQ ); +return mt7615_mcu_msg_send (dev, -MCU_CMD_FW_START_REQ , + &req,sizeof (req), true); }static int mt7615_mcu_restart (struct mt7615_dev *dev) { -struct sk_buff *skb =mt7615_mcu_msg_alloc (NULL ,0 ); - -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_RESTART_DL_REQ ); +return mt7615_mcu_msg_send (dev, -MCU_CMD_RESTART_DL_REQ , +NULL ,0 , true); }static int mt7615_mcu_patch_sem_ctrl (struct mt7615_dev *dev,bool get)
@@ -227,9 +229,9 @@ static int mt7615_mcu_patch_sem_ctrl(struct mt7615_dev *dev, bool get) } req = { .op = cpu_to_le32(get ? PATCH_SEM_GET : PATCH_SEM_RELEASE), }; -struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_PATCH_SEM_CONTROL ); +return mt7615_mcu_msg_send (dev, -MCU_CMD_PATCH_SEM_CONTROL , + &req,sizeof (req), true); }static int mt7615_mcu_start_patch (struct mt7615_dev *dev)
@@ -240,9 +242,9 @@ static int mt7615_mcu_start_patch(struct mt7615_dev *dev) } req = { .check_crc = 0, }; -struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb, -MCU_CMD_PATCH_FINISH_REQ ); +return mt7615_mcu_msg_send (dev, -MCU_CMD_PATCH_FINISH_REQ , + &req,sizeof (req), true); }static int mt7615_driver_own (struct mt7615_dev *dev)
@@ -502,9 +504,6 @@ void mt7615_mcu_exit(struct mt7615_dev *dev)int mt7615_mcu_set_eeprom (struct mt7615_dev *dev) { -struct req_data { -u8 val; - } __packed;struct {u8 buffer_mode;u8 pad;
@@ -513,22 +512,22 @@ int mt7615_mcu_set_eeprom(struct mt7615_dev *dev) .buffer_mode = 1, .len = __MT_EE_MAX - MT_EE_NIC_CONF_0, }; -struct sk_buff *skb; -struct req_data *data; -const int size = (__MT_EE_MAX -MT_EE_NIC_CONF_0 ) * -sizeof (struct req_data ); -u8 *eep = (u8 *)dev->mt76.eeprom.data; -u16 off; +int ret, len =sizeof (req_hdr) + __MT_EE_MAX -MT_EE_NIC_CONF_0 ; +u8 *req, *eep = (u8 *)dev->mt76.eeprom.data; + + req =kzalloc (len,GFP_KERNEL ); +if (!req) +return -ENOMEM ; - skb =mt7615_mcu_msg_alloc (NULL , size +sizeof (req_hdr)); -memcpy (skb_put (skb,sizeof (req_hdr)), &req_hdr,sizeof (req_hdr)); - data = (struct req_data *)skb_put (skb, size); -memset (data,0 , size); +memcpy (req, &req_hdr,sizeof (req_hdr)); +memcpy (req +sizeof (req_hdr), eep +MT_EE_NIC_CONF_0 , + __MT_EE_MAX -MT_EE_NIC_CONF_0 ); -for (off =MT_EE_NIC_CONF_0 ; off < __MT_EE_MAX; off++) - data[off -MT_EE_NIC_CONF_0 ].val = eep[off]; + ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_EFUSE_BUFFER_MODE , + req, len, true); +kfree (req); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_EFUSE_BUFFER_MODE ); +return ret; }int mt7615_mcu_init_mac (struct mt7615_dev *dev)
@@ -541,9 +540,9 @@ int mt7615_mcu_init_mac(struct mt7615_dev *dev) .enable = 1, .band = 0, }; -struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_MAC_INIT_CTRL ); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_MAC_INIT_CTRL , + &req,sizeof (req), true); }int mt7615_mcu_set_rts_thresh (struct mt7615_dev *dev,u32 val)
@@ -560,9 +559,9 @@ int mt7615_mcu_set_rts_thresh(struct mt7615_dev *dev, u32 val) .len_thresh = cpu_to_le32(val), .pkt_thresh = cpu_to_le32(0x2), }; -struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PROTECT_CTRL ); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_PROTECT_CTRL , + &req,sizeof (req), true); } int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue,
@@ -588,7 +587,6 @@ int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue, .aifs = params->aifs, .txop = cpu_to_le16(params->txop), }; -struct sk_buff *skb;if (params->cw_min) { req.valid |=WMM_CW_MIN_SET ;
@@ -599,8 +597,8 @@ int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue, req.cw_max =cpu_to_le16 (params->cw_max); } - skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_EDCA_UPDATE ); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_EDCA_UPDATE , + &req,sizeof (req), true); }int mt7615_mcu_ctrl_pm_state (struct mt7615_dev *dev,int enter)
@@ -628,9 +626,9 @@ int mt7615_mcu_ctrl_pm_state(struct mt7615_dev *dev, int enter) .pm_state = (enter) ? ENTER_PM_STATE : EXIT_PM_STATE, .band_idx = 0, }; -struct sk_buff *skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_PM_STATE_CTRL ); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_PM_STATE_CTRL , + &req,sizeof (req), true); } int mt7615_mcu_set_dev_info(struct mt7615_dev *dev,
@@ -666,14 +664,10 @@ int mt7615_mcu_set_dev_info(struct mt7615_dev *dev, .band_idx = mvif->band_idx, }, }; -struct sk_buff *skb;memcpy (data.tlv.omac_addr, vif->addr,ETH_ALEN ); - skb =mt7615_mcu_msg_alloc (&data,sizeof (data)); -if (!skb) -return -ENOMEM ; - -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_DEV_INFO_UPDATE ); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_DEV_INFO_UPDATE , + &data,sizeof (data), true); } static void
@@ -744,7 +738,6 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,u32 conn_type =0 , net_type =NETWORK_INFRA ;u8 *buf, *data, tx_wlan_idx =0 ;struct req_hdr *hdr; -struct sk_buff *skb;if (en) { len +=sizeof (struct bss_info_omac );
@@ -819,46 +812,13 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, } } - skb =mt7615_mcu_msg_alloc (buf, len); -if (!skb) { - ret = -ENOMEM ; - goto out; - } - - ret =mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BSS_INFO_UPDATE ); - -out: + ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_BSS_INFO_UPDATE , + buf, len, true);kfree (buf);return ret; } -static int -__mt7615_mcu_set_wtbl (struct mt7615_dev *dev,int wlan_idx, -int operation,int ntlv,void *buf, -int buf_len) -{ -struct req_hdr { -u8 wlan_idx; -u8 operation; -__le16 tlv_num; -u8 rsv[4 ]; - } __packed req_hdr = { - .wlan_idx = wlan_idx, - .operation = operation, - .tlv_num =cpu_to_le16 (ntlv), - }; -struct sk_buff *skb; - - skb =mt7615_mcu_msg_alloc (NULL ,sizeof (req_hdr) + buf_len); -memcpy (skb_put (skb,sizeof (req_hdr)), &req_hdr,sizeof (req_hdr)); - -if (buf && buf_len) -memcpy (skb_put (skb, buf_len), buf, buf_len); - -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_WTBL_UPDATE ); -} -static enum mt7615_cipher_type mt7615_get_key_info (struct ieee80211_key_conf *key,u8 *key_data) {
@@ -896,28 +856,38 @@ int mt7615_mcu_set_wtbl_key(struct mt7615_dev *dev, int wcid, struct ieee80211_key_conf *key, enum set_key_cmd cmd) { -struct wtbl_sec_key wtbl_sec_key = {0 }; -int buf_len =sizeof (struct wtbl_sec_key ); -u8 cipher; - - wtbl_sec_key.tag =cpu_to_le16 (WTBL_SEC_KEY ); - wtbl_sec_key.len =cpu_to_le16 (buf_len); - wtbl_sec_key.add = cmd; +struct { +struct wtbl_req_hdr hdr; +struct wtbl_sec_key key; + } req = { + .hdr = { + .wlan_idx = wcid, + .operation =WTBL_SET , + .tlv_num =cpu_to_le16 (1 ), + }, + .key = { + .tag =cpu_to_le16 (WTBL_SEC_KEY ), + .len =cpu_to_le16 (sizeof (struct wtbl_sec_key )), + .add = cmd, + }, + };if (cmd ==SET_KEY ) { - cipher =mt7615_get_key_info (key, wtbl_sec_key.key_material); +u8 cipher; + + cipher =mt7615_get_key_info (key, req.key.key_material);if (cipher ==MT_CIPHER_NONE && key)return -EOPNOTSUPP ; - wtbl_sec_key.cipher_id = cipher; - wtbl_sec_key.key_id = key->keyidx; - wtbl_sec_key.key_len = key->keylen; + req.key.cipher_id = cipher; + req.key.key_id = key->keyidx; + req.key.key_len = key->keylen; }else { - wtbl_sec_key.key_len =sizeof (wtbl_sec_key.key_material); + req.key.key_len =sizeof (req.key.key_material); } -return __mt7615_mcu_set_wtbl (dev, wcid,WTBL_SET ,1 , - &wtbl_sec_key, buf_len); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , + &req,sizeof (req), true); } static int
@@ -925,9 +895,15 @@ 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; - } data = { + } 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 )),
@@ -941,12 +917,10 @@ mt7615_mcu_add_wtbl_bmc(struct mt7615_dev *dev, .rv = 1, }, }; -eth_broadcast_addr (data.g_wtbl.peer_addr); +eth_broadcast_addr (req.g_wtbl.peer_addr); -return __mt7615_mcu_set_wtbl (dev, mvif->sta.wcid.idx, -WTBL_RESET_AND_SET ,2 , &data, -sizeof (struct wtbl_generic ) + -sizeof (struct wtbl_rx )); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , + &req,sizeof (req), true); } int mt7615_mcu_wtbl_bmc(struct mt7615_dev *dev,
@@ -954,11 +928,17 @@ int mt7615_mcu_wtbl_bmc(struct mt7615_dev *dev, {struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv; -if (enable) -return mt7615_mcu_add_wtbl_bmc (dev, mvif); +if (!enable) { +struct wtbl_req_hdr req = { + .wlan_idx = mvif->sta.wcid.idx, + .operation =WTBL_RESET_AND_SET , + }; -return __mt7615_mcu_set_wtbl (dev, mvif->sta.wcid.idx, -WTBL_RESET_AND_SET ,0 ,NULL ,0 ); +return mt7615_mcu_msg_send (dev,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,
@@ -967,9 +947,15 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;struct { +struct wtbl_req_hdr hdr;struct wtbl_generic g_wtbl;struct wtbl_rx rx_wtbl; - } data = { + } req = { + .hdr = { + .wlan_idx = msta->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 )),
@@ -985,81 +971,69 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif, .rv = 1, }, }; -memcpy (data.g_wtbl.peer_addr, sta->addr,ETH_ALEN ); +memcpy (req.g_wtbl.peer_addr, sta->addr,ETH_ALEN ); -return __mt7615_mcu_set_wtbl (dev, msta->wcid.idx, -WTBL_RESET_AND_SET ,2 , &data, -sizeof (struct wtbl_generic ) + -sizeof (struct wtbl_rx )); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , + &req,sizeof (req), true); }int mt7615_mcu_del_wtbl (struct mt7615_dev *dev,struct ieee80211_sta *sta) {struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv; +struct wtbl_req_hdr req = { + .wlan_idx = msta->wcid.idx, + .operation =WTBL_RESET_AND_SET , + }; -return __mt7615_mcu_set_wtbl (dev, msta->wcid.idx, -WTBL_RESET_AND_SET ,0 ,NULL ,0 ); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , + &req,sizeof (req), true); }int mt7615_mcu_del_wtbl_all (struct mt7615_dev *dev) { -return __mt7615_mcu_set_wtbl (dev,0 ,WTBL_RESET_ALL ,0 ,NULL ,0 ); -} - -static int -__mt7615_mcu_set_sta_rec (struct mt7615_dev *dev,int bss_idx, -int wlan_idx,int muar_idx,int ntlv, -void *buf,int buf_len) -{ -struct req_hdr { -u8 bss_idx; -u8 wlan_idx; -__le16 tlv_num; -u8 is_tlv_append; -u8 muar_idx; -u8 rsv[2 ]; - } __packed req_hdr = { - .bss_idx = bss_idx, - .wlan_idx = wlan_idx, - .tlv_num =cpu_to_le16 (ntlv), - .is_tlv_append = !!ntlv, - .muar_idx = muar_idx, +struct wtbl_req_hdr req = { + .operation =WTBL_RESET_ALL , }; -struct sk_buff *skb; - - skb =mt7615_mcu_msg_alloc (NULL ,sizeof (req_hdr) + buf_len); -memcpy (skb_put (skb,sizeof (req_hdr)), &req_hdr,sizeof (req_hdr)); - -if (buf && buf_len) -memcpy (skb_put (skb, buf_len), buf, buf_len); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_STA_REC_UPDATE ); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , + &req,sizeof (req), true); }int mt7615_mcu_set_sta_rec_bmc (struct mt7615_dev *dev,struct ieee80211_vif *vif,bool en) {struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv; -struct sta_rec_basic sta_rec_basic = {0 }; -int buf_len =sizeof (struct sta_rec_basic ); +struct { +struct sta_req_hdr hdr; +struct sta_rec_basic basic; + } req = { + .hdr = { + .bss_idx = mvif->idx, + .wlan_idx = mvif->sta.wcid.idx, + .tlv_num =cpu_to_le16 (1 ), + .is_tlv_append =1 , + .muar_idx = mvif->omac_idx, + }, + .basic = { + .tag =cpu_to_le16 (STA_REC_BASIC ), + .len =cpu_to_le16 (sizeof (struct sta_rec_basic )), + .conn_type =cpu_to_le32 (CONNECTION_INFRA_BC ), + }, + }; +eth_broadcast_addr (req.basic.peer_addr); - sta_rec_basic.tag =cpu_to_le16 (STA_REC_BASIC ); - sta_rec_basic.len =cpu_to_le16 (buf_len); - sta_rec_basic.conn_type =cpu_to_le32 (CONNECTION_INFRA_BC ); -eth_broadcast_addr (sta_rec_basic.peer_addr);if (en) { - sta_rec_basic.conn_state =CONN_STATE_PORT_SECURE ; - sta_rec_basic.extra_info = -cpu_to_le16 (EXTRA_INFO_VER |EXTRA_INFO_NEW ); + req.basic.conn_state =CONN_STATE_PORT_SECURE ; + req.basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER | +EXTRA_INFO_NEW ); }else { - sta_rec_basic.conn_state =CONN_STATE_DISCONNECT ; - sta_rec_basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER ); + req.basic.conn_state =CONN_STATE_DISCONNECT ; + req.basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER ); } -return __mt7615_mcu_set_sta_rec (dev, mvif->idx, mvif->sta.wcid.idx, - mvif->omac_idx,1 , &sta_rec_basic, - buf_len); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_STA_REC_UPDATE , + &req,sizeof (req), true); }static void sta_rec_convert_vif_type (enum nl80211_iftype type,u32 *conn_type)
@@ -1084,36 +1058,49 @@ int mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, struct ieee80211_vif *vif, {struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv; -struct sta_rec_basic sta_rec_basic = {0 }; -int buf_len =sizeof (struct sta_rec_basic );u32 conn_type =0 ; -sta_rec_convert_vif_type (vif->type, &conn_type); +struct { +struct sta_req_hdr hdr; +struct sta_rec_basic basic; + } req = { + .hdr = { + .bss_idx = mvif->idx, + .wlan_idx = msta->wcid.idx, + .tlv_num =cpu_to_le16 (1 ), + .is_tlv_append =1 , + .muar_idx = mvif->omac_idx, + }, + .basic = { + .tag =cpu_to_le16 (STA_REC_BASIC ), + .len =cpu_to_le16 (sizeof (struct sta_rec_basic )), + .qos = sta->wme, + .aid =cpu_to_le16 (sta->aid), + }, + }; +memcpy (req.basic.peer_addr, sta->addr,ETH_ALEN ); - sta_rec_basic.tag =cpu_to_le16 (STA_REC_BASIC ); - sta_rec_basic.len =cpu_to_le16 (buf_len); - sta_rec_basic.conn_type =cpu_to_le32 (conn_type); - sta_rec_basic.qos = sta->wme; - sta_rec_basic.aid =cpu_to_le16 (sta->aid); -memcpy (sta_rec_basic.peer_addr, sta->addr,ETH_ALEN ); +sta_rec_convert_vif_type (vif->type, &conn_type); + req.basic.conn_type =cpu_to_le32 (conn_type);if (en) { - sta_rec_basic.conn_state =CONN_STATE_PORT_SECURE ; - sta_rec_basic.extra_info = -cpu_to_le16 (EXTRA_INFO_VER |EXTRA_INFO_NEW ); + req.basic.conn_state =CONN_STATE_PORT_SECURE ; + req.basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER | +EXTRA_INFO_NEW ); }else { - sta_rec_basic.conn_state =CONN_STATE_DISCONNECT ; - sta_rec_basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER ); + req.basic.conn_state =CONN_STATE_DISCONNECT ; + req.basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER ); } -return __mt7615_mcu_set_sta_rec (dev, mvif->idx, msta->wcid.idx, - mvif->omac_idx,1 , &sta_rec_basic, - buf_len); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_STA_REC_UPDATE , + &req,sizeof (req), true); }int mt7615_mcu_set_bcn (struct mt7615_dev *dev,struct ieee80211_vif *vif,int en) { +struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv; +struct mt76_wcid *wcid = &dev->mt76.global_wcid;struct req {u8 omac_idx;u8 enable;
@@ -1129,14 +1116,18 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif,/* bss color change */ u8 bcc_cnt;__le16 bcc_ie_pos; - }__packed req = {0 }; -struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv; -struct mt76_wcid *wcid = &dev->mt76.global_wcid; -struct sk_buff *skb; + }__packed req = { + .omac_idx = mvif->omac_idx, + .enable = en, + .wlan_idx = wcid->idx, + .band_idx = mvif->band_idx, +/* pky_type: 0 for bcn, 1 for tim */ + .pkt_type =0 , + };u16 tim_off, tim_len; +struct sk_buff *skb; skb =ieee80211_beacon_get_tim (mt76_hw (dev), vif, &tim_off, &tim_len); -if (!skb)return -EINVAL ;
@@ -1149,20 +1140,13 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif,mt7615_mac_write_txwi (dev, (__le32 *)(req.pkt), skb, wcid,NULL ,0 ,NULL );memcpy (req.pkt +MT_TXD_SIZE , skb->data, skb->len); - - req.omac_idx = mvif->omac_idx; - req.enable = en; - req.wlan_idx = wcid->idx; - req.band_idx = mvif->band_idx; -/* pky_type: 0 for bcn, 1 for tim */ - req.pkt_type =0 ; req.pkt_len =cpu_to_le16 (MT_TXD_SIZE + skb->len); req.tim_ie_pos =cpu_to_le16 (MT_TXD_SIZE + tim_off);dev_kfree_skb (skb); - skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_BCN_OFFLOAD ); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_BCN_OFFLOAD , + &req,sizeof (req), true); }int mt7615_mcu_set_channel (struct mt7615_dev *dev)
@@ -1187,7 +1171,6 @@ int mt7615_mcu_set_channel(struct mt7615_dev *dev)u8 txpower_sku[53 ];u8 rsv2[3 ]; } req = {0}; -struct sk_buff *skb;int ret; req.control_chan = chdef->chan->hw_value;
@@ -1223,16 +1206,15 @@ int mt7615_mcu_set_channel(struct mt7615_dev *dev)default : req.bw =CMD_CBW_20MHZ ; } -memset (req.txpower_sku,0x3f ,49 ); - skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); - ret =mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_CHANNEL_SWITCH ); + ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_CHANNEL_SWITCH , + &req,sizeof (req), true);if (ret)return ret; - skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); -return mt7615_mcu_msg_send (dev, skb,MCU_EXT_CMD_SET_RX_PATH ); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_SET_RX_PATH , + &req,sizeof (req), true); } int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,
@@ -1240,9 +1222,11 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif, {struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv; -struct wtbl_ht *wtbl_ht; +struct wtbl_req_hdr *wtbl_hdr; +struct sta_req_hdr *sta_hdr;struct wtbl_raw *wtbl_raw; -struct sta_rec_ht *sta_rec_ht; +struct sta_rec_ht *sta_ht; +struct wtbl_ht *wtbl_ht;int buf_len, ret, ntlv =2 ;u32 msk, val =0 ;u8 *buf;
@@ -1251,15 +1235,20 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,if (!buf)return -ENOMEM ; + wtbl_hdr = (struct wtbl_req_hdr *)buf; + wtbl_hdr->wlan_idx = msta->wcid.idx; + wtbl_hdr->operation =WTBL_SET ; + buf_len =sizeof (*wtbl_hdr); +/* ht basic */ - buf_len =sizeof (*wtbl_ht); - wtbl_ht = (struct wtbl_ht *)buf; + wtbl_ht = (struct wtbl_ht *)(buf + buf_len); wtbl_ht->tag =cpu_to_le16 (WTBL_HT ); wtbl_ht->len =cpu_to_le16 (sizeof (*wtbl_ht)); wtbl_ht->ht =1 ; wtbl_ht->ldpc = sta->ht_cap.cap &IEEE80211_HT_CAP_LDPC_CODING ; wtbl_ht->af = sta->ht_cap.ampdu_factor; wtbl_ht->mm = sta->ht_cap.ampdu_density; + buf_len +=sizeof (*wtbl_ht);if (sta->ht_cap.cap &IEEE80211_HT_CAP_SGI_20 ) val |=MT_WTBL_W5_SHORT_GI_20 ;
@@ -1309,41 +1298,48 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif, wtbl_raw->msk =cpu_to_le32 (~msk); wtbl_raw->val =cpu_to_le32 (val); - ret =__mt7615_mcu_set_wtbl (dev, msta->wcid.idx,WTBL_SET , ntlv, - buf, buf_len); -if (ret) { -kfree (buf); -return ret; - } + wtbl_hdr->tlv_num =cpu_to_le16 (ntlv); + ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , + buf, buf_len, true); +if (ret) + goto out;memset (buf,0 ,MT7615_WTBL_UPDATE_MAX_SIZE ); - buf_len =sizeof (*sta_rec_ht); - sta_rec_ht = (struct sta_rec_ht *)buf; - sta_rec_ht->tag =cpu_to_le16 (STA_REC_HT ); - sta_rec_ht->len =cpu_to_le16 (sizeof (*sta_rec_ht)); - sta_rec_ht->ht_cap =cpu_to_le16 (sta->ht_cap.cap); - ntlv =1 ; + sta_hdr = (struct sta_req_hdr *)buf; + sta_hdr->bss_idx = mvif->idx; + sta_hdr->wlan_idx = msta->wcid.idx; + sta_hdr->is_tlv_append =1 ; + ntlv = sta->vht_cap.vht_supported ?2 :1 ; + sta_hdr->tlv_num =cpu_to_le16 (ntlv); + sta_hdr->muar_idx = mvif->omac_idx; + buf_len =sizeof (*sta_hdr); + + sta_ht = (struct sta_rec_ht *)(buf + buf_len); + sta_ht->tag =cpu_to_le16 (STA_REC_HT ); + sta_ht->len =cpu_to_le16 (sizeof (*sta_ht)); + sta_ht->ht_cap =cpu_to_le16 (sta->ht_cap.cap); + buf_len +=sizeof (*sta_ht);if (sta->vht_cap.vht_supported) { -struct sta_rec_vht *sta_rec_vht; - - sta_rec_vht = (struct sta_rec_vht *)(buf + buf_len); - buf_len +=sizeof (*sta_rec_vht); - sta_rec_vht->tag =cpu_to_le16 (STA_REC_VHT ); - sta_rec_vht->len =cpu_to_le16 (sizeof (*sta_rec_vht)); - sta_rec_vht->vht_cap =cpu_to_le32 (sta->vht_cap.cap); - sta_rec_vht->vht_rx_mcs_map = +struct sta_rec_vht *sta_vht; + + sta_vht = (struct sta_rec_vht *)(buf + buf_len); + buf_len +=sizeof (*sta_vht); + sta_vht->tag =cpu_to_le16 (STA_REC_VHT ); + sta_vht->len =cpu_to_le16 (sizeof (*sta_vht)); + sta_vht->vht_cap =cpu_to_le32 (sta->vht_cap.cap); + sta_vht->vht_rx_mcs_map =cpu_to_le16 (sta->vht_cap.vht_mcs.rx_mcs_map); - sta_rec_vht->vht_tx_mcs_map = + sta_vht->vht_tx_mcs_map =cpu_to_le16 (sta->vht_cap.vht_mcs.tx_mcs_map); - ntlv++; } - ret =__mt7615_mcu_set_sta_rec (dev, mvif->idx, msta->wcid.idx, - mvif->omac_idx, ntlv, buf, - buf_len); + ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_STA_REC_UPDATE , + buf, buf_len, true); +out:kfree (buf); +return ret; }
@@ -1351,100 +1347,128 @@ int mt7615_mcu_set_tx_ba(struct mt7615_dev *dev, struct ieee80211_ampdu_params *params, bool add) { -struct ieee80211_sta *sta = params->sta; -struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv; +struct mt7615_sta *msta = (struct mt7615_sta *)params->sta->drv_priv;struct mt7615_vif *mvif = msta->vif; -u8 ba_range[8 ] = {4 ,8 ,12 ,24 ,36 ,48 ,54 ,64 }; -u16 tid = params->tid; -u16 ba_size = params->buf_size; -u16 ssn = params->ssn; -struct wtbl_ba wtbl_ba = {0 }; -struct sta_rec_ba sta_rec_ba = {0 }; -int ret, buf_len; - - buf_len =sizeof (struct wtbl_ba ); - - wtbl_ba.tag =cpu_to_le16 (WTBL_BA ); - wtbl_ba.len =cpu_to_le16 (buf_len); - wtbl_ba.tid = tid; - wtbl_ba.ba_type =MT_BA_TYPE_ORIGINATOR ; +struct { +struct wtbl_req_hdr hdr; +struct wtbl_ba ba; + } wtbl_req = { + .hdr = { + .wlan_idx = msta->wcid.idx, + .operation =WTBL_SET , + .tlv_num =cpu_to_le16 (1 ), + }, + .ba = { + .tag =cpu_to_le16 (WTBL_BA ), + .len =cpu_to_le16 (sizeof (struct wtbl_ba )), + .tid = params->tid, + .ba_type =MT_BA_TYPE_ORIGINATOR , + .sn = add ?cpu_to_le16 (params->ssn) :0 , + .ba_en = add, + }, + }; +struct { +struct sta_req_hdr hdr; +struct sta_rec_ba ba; + } sta_req = { + .hdr = { + .bss_idx = mvif->idx, + .wlan_idx = msta->wcid.idx, + .tlv_num =cpu_to_le16 (1 ), + .is_tlv_append =1 , + .muar_idx = mvif->omac_idx, + }, + .ba = { + .tag =cpu_to_le16 (STA_REC_BA ), + .len =cpu_to_le16 (sizeof (struct sta_rec_ba )), + .tid = params->tid, + .ba_type =MT_BA_TYPE_ORIGINATOR , + .amsdu = params->amsdu, + .ba_en = add << params->tid, + .ssn =cpu_to_le16 (params->ssn), + .winsize =cpu_to_le16 (params->buf_size), + }, + }; +int ret;if (add) { -u8 idx; +u8 idx, ba_range[] = {4 ,8 ,12 ,24 ,36 ,48 ,54 ,64 };for (idx =7 ; idx >0 ; idx--) { -if (ba_size >= ba_range[idx]) +if (params->buf_size >= ba_range[idx])break ; } - wtbl_ba.sn =cpu_to_le16 (ssn); - wtbl_ba.ba_en =1 ; - wtbl_ba.ba_winsize_idx = idx; + wtbl_req.ba.ba_winsize_idx = idx; } - ret =__mt7615_mcu_set_wtbl (dev, msta->wcid.idx,WTBL_SET ,1 , - &wtbl_ba, buf_len); + ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , + &wtbl_req,sizeof (wtbl_req), true);if (ret)return ret; - buf_len =sizeof (struct sta_rec_ba ); - - sta_rec_ba.tag =cpu_to_le16 (STA_REC_BA ); - sta_rec_ba.len =cpu_to_le16 (buf_len); - sta_rec_ba.tid = tid; - sta_rec_ba.ba_type =MT_BA_TYPE_ORIGINATOR ; - sta_rec_ba.amsdu = params->amsdu; - sta_rec_ba.ba_en = add << tid; - sta_rec_ba.ssn =cpu_to_le16 (ssn); - sta_rec_ba.winsize =cpu_to_le16 (ba_size); - -return __mt7615_mcu_set_sta_rec (dev, mvif->idx, msta->wcid.idx, - mvif->omac_idx,1 , &sta_rec_ba, - buf_len); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_STA_REC_UPDATE , + &sta_req,sizeof (sta_req), true); }int mt7615_mcu_set_rx_ba (struct mt7615_dev *dev,struct ieee80211_ampdu_params *params,bool add) { -struct ieee80211_sta *sta = params->sta; -struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv; +struct mt7615_sta *msta = (struct mt7615_sta *)params->sta->drv_priv;struct mt7615_vif *mvif = msta->vif; -u16 tid = params->tid; -struct wtbl_ba wtbl_ba = {0 }; -struct sta_rec_ba sta_rec_ba = {0 }; -int ret, buf_len; - - buf_len =sizeof (struct sta_rec_ba ); - - sta_rec_ba.tag =cpu_to_le16 (STA_REC_BA ); - sta_rec_ba.len =cpu_to_le16 (buf_len); - sta_rec_ba.tid = tid; - sta_rec_ba.ba_type =MT_BA_TYPE_RECIPIENT ; - sta_rec_ba.amsdu = params->amsdu; - sta_rec_ba.ba_en = add << tid; - sta_rec_ba.ssn =cpu_to_le16 (params->ssn); - sta_rec_ba.winsize =cpu_to_le16 (params->buf_size); - - ret =__mt7615_mcu_set_sta_rec (dev, mvif->idx, msta->wcid.idx, - mvif->omac_idx,1 , &sta_rec_ba, - buf_len); -if (ret || !add) -return ret; +struct { +struct wtbl_req_hdr hdr; +struct wtbl_ba ba; + } wtbl_req = { + .hdr = { + .wlan_idx = msta->wcid.idx, + .operation =WTBL_SET , + .tlv_num =cpu_to_le16 (1 ), + }, + .ba = { + .tag =cpu_to_le16 (WTBL_BA ), + .len =cpu_to_le16 (sizeof (struct wtbl_ba )), + .tid = params->tid, + .ba_type =MT_BA_TYPE_RECIPIENT , + .rst_ba_tid = params->tid, + .rst_ba_sel =RST_BA_MAC_TID_MATCH , + .rst_ba_sb =1 , + }, + }; +struct { +struct sta_req_hdr hdr; +struct sta_rec_ba ba; + } sta_req = { + .hdr = { + .bss_idx = mvif->idx, + .wlan_idx = msta->wcid.idx, + .tlv_num =cpu_to_le16 (1 ), + .is_tlv_append =1 , + .muar_idx = mvif->omac_idx, + }, + .ba = { + .tag =cpu_to_le16 (STA_REC_BA ), + .len =cpu_to_le16 (sizeof (struct sta_rec_ba )), + .tid = params->tid, + .ba_type =MT_BA_TYPE_RECIPIENT , + .amsdu = params->amsdu, + .ba_en = add << params->tid, + .ssn =cpu_to_le16 (params->ssn), + .winsize =cpu_to_le16 (params->buf_size), + }, + }; +int ret; - buf_len =sizeof (struct wtbl_ba ); +memcpy (wtbl_req.ba.peer_addr, params->sta->addr,ETH_ALEN ); - wtbl_ba.tag =cpu_to_le16 (WTBL_BA ); - wtbl_ba.len =cpu_to_le16 (buf_len); - wtbl_ba.tid = tid; - wtbl_ba.ba_type =MT_BA_TYPE_RECIPIENT ; -memcpy (wtbl_ba.peer_addr, sta->addr,ETH_ALEN ); - wtbl_ba.rst_ba_tid = tid; - wtbl_ba.rst_ba_sel =RST_BA_MAC_TID_MATCH ; - wtbl_ba.rst_ba_sb =1 ; + ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_STA_REC_UPDATE , + &sta_req,sizeof (sta_req), true); +if (ret || !add) +return ret; -return __mt7615_mcu_set_wtbl (dev, msta->wcid.idx,WTBL_SET , -1 , &wtbl_ba, buf_len); +return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , + &wtbl_req,sizeof (wtbl_req), true); } void mt7615_mcu_set_rates(struct mt7615_dev *dev, struct mt7615_sta *sta,
drivers/net/wireless/mediatek/mt76/mt7615/mcu.h +18 -1
@@ -201,6 +201,13 @@ enum {WTBL_RESET_ALL }; +struct wtbl_req_hdr { +u8 wlan_idx; +u8 operation; +__le16 tlv_num; +u8 rsv[4 ]; +} __packed; +struct wtbl_generic {__le16 tag;__le16 len;
@@ -366,7 +373,8 @@ struct wtbl_raw {__le32 val; } __packed; -#define MT7615_WTBL_UPDATE_MAX_SIZE (sizeof(struct wtbl_generic) + \ +#define MT7615_WTBL_UPDATE_MAX_SIZE (sizeof(struct wtbl_req_hdr) + \ + sizeof(struct wtbl_generic) + \ sizeof(struct wtbl_rx) + \ sizeof(struct wtbl_ht) + \ sizeof(struct wtbl_vht) + \
@@ -400,6 +408,15 @@ enum {WTBL_MAX_NUM }; +struct sta_req_hdr { +u8 bss_idx; +u8 wlan_idx; +__le16 tlv_num; +u8 is_tlv_append; +u8 muar_idx; +u8 rsv[2 ]; +} __packed; +struct sta_rec_basic {__le16 tag;__le16 len;
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 15/17 mt7615: initialize mt76_mcu_ops data structure
In reply to Lorenzo BianconiUse __mt76_mcu_send_msg wrapper instead of mt7615_mcu_msg_send. This is a preliminary patch for mt7615-mt7603 mcu code unification
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 74 ++++++++++--------- 1 file changed, 40 insertions(+), 34 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +40 -34
@@ -113,9 +113,10 @@ static int __mt7615_mcu_msg_send(struct mt7615_dev *dev, struct sk_buff *skb, }static int -mt7615_mcu_msg_send (struct mt7615_dev *dev,int cmd,const void *data, +mt7615_mcu_msg_send (struct mt76_dev *mdev,int cmd,const void *data,int len,bool wait_resp) { + struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);unsigned long expires = jiffies +10 *HZ ;struct mt7615_mcu_rxd *rxd;struct sk_buff *skb;
@@ -125,16 +126,16 @@ mt7615_mcu_msg_send(struct mt7615_dev *dev, int cmd, const void *data,if (!skb)return -ENOMEM ; -mutex_lock (&dev->mt76.mmio.mcu.mutex); +mutex_lock (&mdev->mmio.mcu.mutex); ret =__mt7615_mcu_msg_send (dev, skb, cmd, &seq);if (ret) goto out;while (wait_resp) { - skb =mt76_mcu_get_response (&dev->mt76, expires); + skb =mt76_mcu_get_response (mdev, expires);if (!skb) { -dev_err (dev->mt76.dev,"Message %d (seq %d) timeout\n" , +dev_err (mdev->dev,"Message %d (seq %d) timeout\n" , cmd, seq); ret = -ETIMEDOUT ;break ;
@@ -153,7 +154,7 @@ mt7615_mcu_msg_send(struct mt7615_dev *dev, int cmd, const void *data, } out: -mutex_unlock (&dev->mt76.mmio.mcu.mutex); +mutex_unlock (&mdev->mmio.mcu.mutex);return ret; }
@@ -171,7 +172,7 @@ static int mt7615_mcu_init_download(struct mt7615_dev *dev, u32 addr, .mode = cpu_to_le32(mode), }; -return mt7615_mcu_msg_send (dev, -MCU_CMD_TARGET_ADDRESS_LEN_REQ , +return __mt76_mcu_send_msg (&dev->mt76, -MCU_CMD_TARGET_ADDRESS_LEN_REQ , &req,sizeof (req), true); }
@@ -212,13 +213,13 @@ static int mt7615_mcu_start_firmware(struct mt7615_dev *dev, u32 addr, .addr = cpu_to_le32(addr), }; -return mt7615_mcu_msg_send (dev, -MCU_CMD_FW_START_REQ , +return __mt76_mcu_send_msg (&dev->mt76, -MCU_CMD_FW_START_REQ , &req,sizeof (req), true); }static int mt7615_mcu_restart (struct mt7615_dev *dev) { -return mt7615_mcu_msg_send (dev, -MCU_CMD_RESTART_DL_REQ , +return __mt76_mcu_send_msg (&dev->mt76, -MCU_CMD_RESTART_DL_REQ ,NULL ,0 , true); }
@@ -230,7 +231,7 @@ static int mt7615_mcu_patch_sem_ctrl(struct mt7615_dev *dev, bool get) .op = cpu_to_le32(get ? PATCH_SEM_GET : PATCH_SEM_RELEASE), }; -return mt7615_mcu_msg_send (dev, -MCU_CMD_PATCH_SEM_CONTROL , +return __mt76_mcu_send_msg (&dev->mt76, -MCU_CMD_PATCH_SEM_CONTROL , &req,sizeof (req), true); }
@@ -243,7 +244,7 @@ static int mt7615_mcu_start_patch(struct mt7615_dev *dev) .check_crc = 0, }; -return mt7615_mcu_msg_send (dev, -MCU_CMD_PATCH_FINISH_REQ , +return __mt76_mcu_send_msg (&dev->mt76, -MCU_CMD_PATCH_FINISH_REQ , &req,sizeof (req), true); }
@@ -480,8 +481,13 @@ static int mt7615_load_firmware(struct mt7615_dev *dev)int mt7615_mcu_init (struct mt7615_dev *dev) { +static const struct mt76_mcu_ops mt7615_mcu_ops = { + .mcu_send_msg = mt7615_mcu_msg_send, + };int ret; + dev->mt76.mcu_ops = &mt7615_mcu_ops, + ret =mt7615_driver_own (dev);if (ret)return ret;
@@ -523,7 +529,7 @@ int mt7615_mcu_set_eeprom(struct mt7615_dev *dev)memcpy (req +sizeof (req_hdr), eep +MT_EE_NIC_CONF_0 , __MT_EE_MAX -MT_EE_NIC_CONF_0 ); - ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_EFUSE_BUFFER_MODE , + ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_EFUSE_BUFFER_MODE , req, len, true);kfree (req);
@@ -541,7 +547,7 @@ int mt7615_mcu_init_mac(struct mt7615_dev *dev) .band = 0, }; -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_MAC_INIT_CTRL , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_MAC_INIT_CTRL , &req,sizeof (req), true); }
@@ -560,7 +566,7 @@ int mt7615_mcu_set_rts_thresh(struct mt7615_dev *dev, u32 val) .pkt_thresh = cpu_to_le32(0x2), }; -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_PROTECT_CTRL , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_PROTECT_CTRL , &req,sizeof (req), true); }
@@ -597,7 +603,7 @@ int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue, req.cw_max =cpu_to_le16 (params->cw_max); } -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_EDCA_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_EDCA_UPDATE , &req,sizeof (req), true); }
@@ -627,7 +633,7 @@ int mt7615_mcu_ctrl_pm_state(struct mt7615_dev *dev, int enter) .band_idx = 0, }; -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_PM_STATE_CTRL , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_PM_STATE_CTRL , &req,sizeof (req), true); }
@@ -666,7 +672,7 @@ int mt7615_mcu_set_dev_info(struct mt7615_dev *dev, };memcpy (data.tlv.omac_addr, vif->addr,ETH_ALEN ); -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_DEV_INFO_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_DEV_INFO_UPDATE , &data,sizeof (data), true); }
@@ -812,7 +818,7 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, } } - ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_BSS_INFO_UPDATE , + ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_BSS_INFO_UPDATE , buf, len, true);kfree (buf);
@@ -886,7 +892,7 @@ int mt7615_mcu_set_wtbl_key(struct mt7615_dev *dev, int wcid, req.key.key_len =sizeof (req.key.key_material); } -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , &req,sizeof (req), true); }
@@ -919,7 +925,7 @@ mt7615_mcu_add_wtbl_bmc(struct mt7615_dev *dev, };eth_broadcast_addr (req.g_wtbl.peer_addr); -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , &req,sizeof (req), true); }
@@ -934,7 +940,7 @@ int mt7615_mcu_wtbl_bmc(struct mt7615_dev *dev, .operation = WTBL_RESET_AND_SET, }; -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , &req,sizeof (req), true); }
@@ -973,7 +979,7 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif, };memcpy (req.g_wtbl.peer_addr, sta->addr,ETH_ALEN ); -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , &req,sizeof (req), true); }
@@ -986,7 +992,7 @@ int mt7615_mcu_del_wtbl(struct mt7615_dev *dev, .operation = WTBL_RESET_AND_SET, }; -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , &req,sizeof (req), true); }
@@ -996,7 +1002,7 @@ int mt7615_mcu_del_wtbl_all(struct mt7615_dev *dev) .operation = WTBL_RESET_ALL, }; -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , &req,sizeof (req), true); }
@@ -1032,7 +1038,7 @@ int mt7615_mcu_set_sta_rec_bmc(struct mt7615_dev *dev, req.basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER ); } -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_STA_REC_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , &req,sizeof (req), true); }
@@ -1092,7 +1098,7 @@ int mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, struct ieee80211_vif *vif, req.basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER ); } -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_STA_REC_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , &req,sizeof (req), true); }
@@ -1145,7 +1151,7 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif,dev_kfree_skb (skb); -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_BCN_OFFLOAD , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_BCN_OFFLOAD , &req,sizeof (req), true); }
@@ -1208,12 +1214,12 @@ int mt7615_mcu_set_channel(struct mt7615_dev *dev) }memset (req.txpower_sku,0x3f ,49 ); - ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_CHANNEL_SWITCH , + ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_CHANNEL_SWITCH , &req,sizeof (req), true);if (ret)return ret; -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_SET_RX_PATH , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_SET_RX_PATH , &req,sizeof (req), true); }
@@ -1299,7 +1305,7 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif, wtbl_raw->val =cpu_to_le32 (val); wtbl_hdr->tlv_num =cpu_to_le16 (ntlv); - ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , + ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , buf, buf_len, true);if (ret) goto out;
@@ -1335,7 +1341,7 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,cpu_to_le16 (sta->vht_cap.vht_mcs.tx_mcs_map); } - ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_STA_REC_UPDATE , + ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , buf, buf_len, true); out:kfree (buf);
@@ -1402,12 +1408,12 @@ int mt7615_mcu_set_tx_ba(struct mt7615_dev *dev, wtbl_req.ba.ba_winsize_idx = idx; } - ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , + ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , &wtbl_req,sizeof (wtbl_req), true);if (ret)return ret; -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_STA_REC_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , &sta_req,sizeof (sta_req), true); }
@@ -1462,12 +1468,12 @@ int mt7615_mcu_set_rx_ba(struct mt7615_dev *dev,memcpy (wtbl_req.ba.peer_addr, params->sta->addr,ETH_ALEN ); - ret =mt7615_mcu_msg_send (dev,MCU_EXT_CMD_STA_REC_UPDATE , + ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , &sta_req,sizeof (sta_req), true);if (ret || !add)return ret; -return mt7615_mcu_msg_send (dev,MCU_EXT_CMD_WTBL_UPDATE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , &wtbl_req,sizeof (wtbl_req), true); }
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 16/17 mt7615: mcu: init mcu_restart function pointer
In reply to Lorenzo BianconiUse common function wrapper in mt7615_mcu_exit since the code is shared with m7603 driver
--- drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +5 -4
@@ -217,10 +217,10 @@ static int mt7615_mcu_start_firmware(struct mt7615_dev *dev, u32 addr, &req, sizeof(req), true); } -static int mt7615_mcu_restart (struct mt7615_dev *dev) +static int mt7615_mcu_restart (struct mt76_dev *dev) { -return __mt76_mcu_send_msg (&dev->mt76, -MCU_CMD_RESTART_DL_REQ , -NULL ,0 , true); +return __mt76_mcu_send_msg (dev, -MCU_CMD_RESTART_DL_REQ ,NULL , +0 , true); }static int mt7615_mcu_patch_sem_ctrl (struct mt7615_dev *dev,bool get)
@@ -483,6 +483,7 @@ int mt7615_mcu_init(struct mt7615_dev *dev) {static const struct mt76_mcu_ops mt7615_mcu_ops = { .mcu_send_msg = mt7615_mcu_msg_send, + .mcu_restart = mt7615_mcu_restart, };int ret;
@@ -503,7 +504,7 @@ int mt7615_mcu_init(struct mt7615_dev *dev)void mt7615_mcu_exit (struct mt7615_dev *dev) { -mt7615_mcu_restart (dev); +__mt76_mcu_restart (&dev->mt76);mt76_wr (dev,MT_CFG_LPCR_HOST ,MT_CFG_LPCR_HOST_FW_OWN );skb_queue_purge (&dev->mt76.mmio.mcu.res_q); }
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH 17/17 mt7615: mcu: run __mt76_mcu_send_msg in mt7615_mcu_send_firmware
In reply to Lorenzo BianconiRun __mt76_mcu_send_msg instead of __mt7615_mcu_msg_send and remove duplicated code.
--- drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +5 -10
@@ -179,19 +179,14 @@ static int mt7615_mcu_init_download(struct mt7615_dev *dev, u32 addr,static int mt7615_mcu_send_firmware (struct mt7615_dev *dev,const void *data,int len) { -struct sk_buff *skb; -int ret =0 ; +int ret =0 , cur_len;while (len >0 ) { -int cur_len =min_t (int,4096 -sizeof (struct mt7615_mcu_txd ), - len); - - skb =mt7615_mcu_msg_alloc (data, cur_len); -if (!skb) -return -ENOMEM ; + cur_len =min_t (int,4096 -sizeof (struct mt7615_mcu_txd ), + len); - ret =__mt7615_mcu_msg_send (dev, skb, -MCU_CMD_FW_SCATTER , -NULL ); + ret =__mt76_mcu_send_msg (&dev->mt76, -MCU_CMD_FW_SCATTER , + data, cur_len, false);if (ret)break ;
Signature · 1 line
2.20.1
Felix Fietkau
maintainerQuoted 20 lines · Lorenzo Bianconi
Introduce
mt76_mcu_opsdata structure in mt7615 mcu code in order to reuse the code with other bus types and unify the code with mt7603 driverChanges since RFC:
- rebase ontop of https://patchwork.kernel.org/patch/10928753/
- fixnet_typeinitialization inmt7615_mcu_set_bss_infoLorenzo Bianconi (17):
mt7615: mcu: simplify__mt7615_mcu_set_wtbl
mt7615: mcu: simplify__mt7615_mcu_set_sta_rec
mt7615: mcu: removebss_info_convert_vif_typeroutine
mt7615: mcu: use proper msg size inmt7615_mcu_add_wtbl_bmc
mt7615: mcu: use proper msg size inmt7615_mcu_add_wtbl
mt7615: mcu: unifymt7615_mcu_add_wtbl_bmcandmt7615_mcu_del_wtbl_bmc
mt7615: mcu: remove unused parameter inmt7615_mcu_del_wtbl
mt7615: remove query frommt7615_mcu_msg_sendsignature
mt7615: remove dest frommt7615_mcu_msg_sendsignature
mt7615: mcu: removeskb_retfrommt7615_mcu_msg_send
mt7615: mcu: unify__mt7615_mcu_set_dev_infoand
Quoted 7 lines
mt7615_mcu_set_dev_infomt7615: mcu: do not use function pointers whenever possible
mt7615: mcu: remove unused structure inmcu.h
mt7615: mcu: use standard signature formt7615_mcu_msg_send
mt7615: initializemt76_mcu_opsdata structure
mt7615: mcu: initmcu_restartfunction pointer
mt7615: mcu: run__mt76_mcu_send_msginmt7615_mcu_send_firmware
Applied (including updated patch 12/17), thanks.
- Felix