switch mt7615 MCU command format from v1 to v2
Subsystems (2)
Ryder Lee
maintainerv2 cover switch mt7615 MCU command format from v1 to v2
Hi,
This updates command flow to adapt newer firmware version.
Changes since v2:
- check the return value from __mt76_mcu_send_msg.
- rename dev->fw_ver to '2.0'.
- simplify is_v1 expression.
- revise commit messages.
Ryder Lee (7):
mt76: mt7615: simplify mcu_set_bmc flow
mt76: mt7615: simplify mcu_set_sta flow
mt76: mt7615: add a helper to encapsulate sta_rec operation
mt76: mt7615: add starec operating flow for firmware v2
mt76: mt7615: use new tag sta_rec_wtbl
mt76: mt7615: switch mt7615_mcu_set_tx_ba to v2 format
mt76: mt7615: switch mt7615_mcu_set_rx_ba to v2 format
.../net/wireless/mediatek/mt76/mt7615/main.c | 12 +- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 577 +++++++++--------- .../net/wireless/mediatek/mt76/mt7615/mcu.h | 8 +- .../wireless/mediatek/mt76/mt7615/mt7615.h | 20 +- 4 files changed, 310 insertions(+), 307 deletions(-)
Signature · 1 line
2.18.0
Ryder Lee
maintainerPATCH v2 1/7 mt76: mt7615: simplify mcu_set_bmc flow
Move set_bmc_wtbl into sta_rec function to simplify flow.
--- .../net/wireless/mediatek/mt76/mt7615/main.c | 3 +- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 97 ++++++++----------- .../wireless/mediatek/mt76/mt7615/mt7615.h | 6 +- 3 files changed, 45 insertions(+), 61 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/main.c +1 -2
@@ -425,8 +425,7 @@ static void mt7615_bss_info_changed(struct ieee80211_hw *hw,if (changed &BSS_CHANGED_BEACON_ENABLED ) {mt7615_mcu_set_bss_info (dev, vif, info->enable_beacon); -mt7615_mcu_wtbl_bmc (dev, vif, info->enable_beacon); -mt7615_mcu_set_sta_rec_bmc (dev, vif, info->enable_beacon); +mt7615_mcu_set_bmc (dev, vif, info->enable_beacon); } if (changed & (BSS_CHANGED_BEACON |
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +42 -55
131 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +2 -4
@@ -241,14 +241,12 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, struct ieee80211_vif *vif,void mt7615_mac_set_rates (struct mt7615_phy *phy,struct mt7615_sta *sta,struct ieee80211_tx_rate *probe_rate,struct ieee80211_tx_rate *rates); -int mt7615_mcu_wtbl_bmc (struct mt7615_dev *dev,struct ieee80211_vif *vif, -bool enable);int mt7615_mcu_add_wtbl (struct mt7615_dev *dev,struct ieee80211_vif *vif,struct ieee80211_sta *sta);int mt7615_mcu_del_wtbl (struct mt7615_dev *dev,struct ieee80211_sta *sta);int mt7615_mcu_del_wtbl_all (struct mt7615_dev *dev); -int mt7615_mcu_set_sta_rec_bmc (struct mt7615_dev *dev, -struct ieee80211_vif *vif,bool en); +int mt7615_mcu_set_bmc (struct mt7615_dev *dev,struct ieee80211_vif *vif, +bool en);int mt7615_mcu_set_sta_rec (struct mt7615_dev *dev,struct ieee80211_vif *vif,struct ieee80211_sta *sta,bool en); int mt7615_mcu_set_bcn(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
Signature · 1 line
2.18.0
Ryder Lee
maintainerPATCH v2 2/7 mt76: mt7615: simplify mcu_set_sta flow
In reply to Ryder LeeMove mcu_add_wtbl and mcu_set_ht_cap into mcu_set_sta to simplify flow.
--- .../net/wireless/mediatek/mt76/mt7615/main.c | 9 +- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 326 ++++++++---------- .../wireless/mediatek/mt76/mt7615/mt7615.h | 9 +- 3 files changed, 153 insertions(+), 191 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/main.c +2 -7
@@ -466,10 +466,7 @@ int mt7615_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt7615_mac_wtbl_update (dev, idx,MT_WTBL_UPDATE_ADM_COUNT_CLEAR ); -mt7615_mcu_add_wtbl (dev, vif, sta); -mt7615_mcu_set_sta_rec (dev, vif, sta,1 ); -if (sta->ht_cap.ht_supported) -mt7615_mcu_set_ht_cap (dev, vif, sta); +mt7615_mcu_set_sta (dev, vif, sta,1 );return 0 ; }
@@ -480,9 +477,7 @@ void mt7615_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif, struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv; -mt7615_mcu_set_sta_rec (dev, vif, sta,0 ); -mt7615_mcu_del_wtbl (dev, sta); - +mt7615_mcu_set_sta (dev, vif, sta,0 );mt7615_mac_wtbl_update (dev, msta->wcid.idx,MT_WTBL_UPDATE_ADM_COUNT_CLEAR );
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +149 -177
365 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +2 -7
@@ -241,14 +241,11 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, struct ieee80211_vif *vif,void mt7615_mac_set_rates (struct mt7615_phy *phy,struct mt7615_sta *sta,struct ieee80211_tx_rate *probe_rate,struct ieee80211_tx_rate *rates); -int mt7615_mcu_add_wtbl (struct mt7615_dev *dev,struct ieee80211_vif *vif, -struct ieee80211_sta *sta); -int mt7615_mcu_del_wtbl (struct mt7615_dev *dev,struct ieee80211_sta *sta);int mt7615_mcu_del_wtbl_all (struct mt7615_dev *dev);int mt7615_mcu_set_bmc (struct mt7615_dev *dev,struct ieee80211_vif *vif,bool en); -int mt7615_mcu_set_sta_rec (struct mt7615_dev *dev,struct ieee80211_vif *vif, -struct ieee80211_sta *sta,bool en); +int mt7615_mcu_set_sta (struct mt7615_dev *dev,struct ieee80211_vif *vif, +struct ieee80211_sta *sta,bool en);int mt7615_mcu_set_bcn (struct ieee80211_hw *hw,struct ieee80211_vif *vif,int en);int mt7615_mcu_set_channel (struct mt7615_phy *phy);
@@ -260,8 +257,6 @@ int mt7615_mcu_set_tx_ba(struct mt7615_dev *dev,int mt7615_mcu_set_rx_ba (struct mt7615_dev *dev,struct ieee80211_ampdu_params *params,bool add); -int mt7615_mcu_set_ht_cap (struct mt7615_dev *dev,struct ieee80211_vif *vif, -struct ieee80211_sta *sta);void mt7615_mcu_rx_event (struct mt7615_dev *dev,struct sk_buff *skb); int mt7615_mcu_rdd_cmd(struct mt7615_dev *dev, enum mt7615_rdd_cmd cmd, u8 index,
Signature · 1 line
2.18.0
Ryder Lee
maintainerPATCH v2 3/7 mt76: mt7615: add a helper to encapsulate sta_rec operation
In reply to Ryder LeeOperating command is simpler and just as clear
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 122 ++++++++++-------- 1 file changed, 65 insertions(+), 57 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +65 -57
@@ -988,6 +988,33 @@ int mt7615_mcu_del_wtbl_all(struct mt7615_dev *dev) &req, sizeof(req), true); } +static int +mt7615_mcu_send_sta_rec (struct mt7615_dev *dev,u8 *req,u8 *wreq, +u8 wlen,bool enable) +{ +u32 slen = wreq - req; +int ret; + +if (!enable) { + ret =__mt76_mcu_send_msg (&dev->mt76, +MCU_EXT_CMD_STA_REC_UPDATE , + req, slen, true); +if (ret) +return ret; + +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , + wreq, wlen, true); + } + + ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , wreq, + wlen, true); +if (ret) +return ret; + +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , + req, slen, true); +} +int mt7615_mcu_set_bmc (struct mt7615_dev *dev,struct ieee80211_vif *vif,bool en) {
@@ -1029,13 +1056,7 @@ int mt7615_mcu_set_bmc(struct mt7615_dev *dev, }else { req.basic.conn_state =CONN_STATE_DISCONNECT ; req.basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER ); - -__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , - &req, (u8 *)wtbl_hdr - (u8 *)&req, true); - -return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , - (u8 *)wtbl_hdr, buf - (u8 *)wtbl_hdr, - true); + goto out; } wtbl_g = (struct wtbl_generic *)buf;
@@ -1055,11 +1076,9 @@ int mt7615_mcu_set_bmc(struct mt7615_dev *dev, wtbl_hdr->tlv_num =cpu_to_le16 (2 ); -__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , - (u8 *)wtbl_hdr, buf - (u8 *)wtbl_hdr, true); - -return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , - &req, (u8 *)wtbl_hdr - (u8 *)&req, true); +out: +return mt7615_mcu_send_sta_rec (dev, (u8 *)&req, (u8 *)wtbl_hdr, + buf - (u8 *)wtbl_hdr, en); } int mt7615_mcu_set_sta(struct mt7615_dev *dev, struct ieee80211_vif *vif,
@@ -1076,7 +1095,6 @@ int mt7615_mcu_set_sta(struct mt7615_dev *dev, struct ieee80211_vif *vif, .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, },
@@ -1115,49 +1133,38 @@ int mt7615_mcu_set_sta(struct mt7615_dev *dev, struct ieee80211_vif *vif, req.basic.conn_state =CONN_STATE_PORT_SECURE ; req.basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER |EXTRA_INFO_NEW ); - }else { - req.basic.conn_state =CONN_STATE_DISCONNECT ; - req.basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER ); - -/* wtbl reset */ - wtbl_hdr = (struct wtbl_req_hdr *)buf; - buf +=sizeof (*wtbl_hdr); - wtbl_hdr->wlan_idx = msta->wcid.idx; - wtbl_hdr->operation =WTBL_RESET_AND_SET ; - -__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , - &req, req.buf - (u8 *)&req, true); - -return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , - req.buf, buf - req.buf, true); - } - -/* sta_rec ht */ -if (sta->ht_cap.ht_supported) { -struct sta_rec_ht *sta_ht; - sta_ht = (struct sta_rec_ht *)buf; - buf +=sizeof (*sta_ht); - 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); - stlv++; +/* sta_rec ht */ +if (sta->ht_cap.ht_supported) { +struct sta_rec_ht *sta_ht; -/* sta_rec vht */ -if (sta->vht_cap.vht_supported) { -struct sta_rec_vht *sta_vht; - - sta_vht = (struct sta_rec_vht *)buf; - buf +=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 = - sta->vht_cap.vht_mcs.rx_mcs_map; - sta_vht->vht_tx_mcs_map = - sta->vht_cap.vht_mcs.tx_mcs_map; + sta_ht = (struct sta_rec_ht *)buf; + buf +=sizeof (*sta_ht); + 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); stlv++; + +/* sta_rec vht */ +if (sta->vht_cap.vht_supported) { +struct sta_rec_vht *sta_vht; + + sta_vht = (struct sta_rec_vht *)buf; + buf +=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 = + sta->vht_cap.vht_mcs.rx_mcs_map; + sta_vht->vht_tx_mcs_map = + sta->vht_cap.vht_mcs.tx_mcs_map; + stlv++; + } } + }else { + req.basic.conn_state =CONN_STATE_DISCONNECT ; + req.basic.extra_info =cpu_to_le16 (EXTRA_INFO_VER ); }/* wtbl */
@@ -1166,6 +1173,9 @@ int mt7615_mcu_set_sta(struct mt7615_dev *dev, struct ieee80211_vif *vif, wtbl_hdr->wlan_idx = msta->wcid.idx; wtbl_hdr->operation =WTBL_RESET_AND_SET ; +if (!en) + goto out; + wtbl_g = (struct wtbl_generic *)buf; buf +=sizeof (*wtbl_g); wtbl_g->tag =cpu_to_le16 (WTBL_GENERIC );
@@ -1252,14 +1262,12 @@ int mt7615_mcu_set_sta(struct mt7615_dev *dev, struct ieee80211_vif *vif, wtlv++; } +out: wtbl_hdr->tlv_num =cpu_to_le16 (wtlv); req.hdr.tlv_num =cpu_to_le16 (stlv); -__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , (u8 *)wtbl_hdr, - buf - (u8 *)wtbl_hdr, true); - -return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , - &req, (u8 *)wtbl_hdr - (u8 *)&req, true); +return mt7615_mcu_send_sta_rec (dev, (u8 *)&req, (u8 *)wtbl_hdr, + buf - (u8 *)wtbl_hdr, en); } int mt7615_mcu_set_bcn(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
Signature · 1 line
2.18.0
Ryder Lee
maintainerPATCH v2 4/7 mt76: mt7615: add starec operating flow for firmware v2
In reply to Ryder LeeAdd fw_ver in mt7615_dev to check firmware version, and adjust mt7615_mcu_send_sta_rec() to adapt firmware v2 changes.
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 20 +++++++++++++------ .../wireless/mediatek/mt76/mt7615/mt7615.h | 5 +++++ 2 files changed, 19 insertions(+), 6 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +14 -6
@@ -491,6 +491,11 @@ static int mt7615_load_ram(struct mt7615_dev *dev) goto out; } +if (!strncmp (hdr->fw_ver,"2.0" ,6 )) + dev->fw_ver =MT7615_FIRMWARE_V2 ; +else + dev->fw_ver =MT7615_FIRMWARE_V1 ; +release_firmware (fw); ret =request_firmware (&fw,MT7615_FIRMWARE_CR4 , dev->mt76.dev);
@@ -992,10 +997,11 @@ static int mt7615_mcu_send_sta_rec(struct mt7615_dev *dev, u8 *req, u8 *wreq, u8 wlen, bool enable) { - u32 slen = wreq - req; + bool is_v1 = (dev->fw_ver == MT7615_FIRMWARE_V1); +u32 slen = is_v1 ? wreq - req : wreq - req + wlen;int ret; -if (!enable) { +if (is_v1 && !enable) { ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , req, slen, true);
@@ -1006,10 +1012,12 @@ mt7615_mcu_send_sta_rec(struct mt7615_dev *dev, u8 *req, u8 *wreq, wreq, wlen, true); } - ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , wreq, - wlen, true); -if (ret) -return ret; +if (is_v1) { + ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , + wreq, wlen, true); +if (ret) +return ret; + }return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , req, slen, true);
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +5 -0
@@ -30,6 +30,9 @@#define MT7615_FIRMWARE_N9 "mediatek/mt7615_n9.bin"#define MT7615_ROM_PATCH "mediatek/mt7615_rom_patch.bin" +#define MT7615_FIRMWARE_V1 1 +#define MT7615_FIRMWARE_V2 2 +#define MT7615_EEPROM_SIZE 1024#define MT7615_TOKEN_SIZE 4096
@@ -144,6 +147,8 @@ struct mt7615_dev {spinlock_t token_lock;struct idr token; + +u8 fw_ver; };enum {
Signature · 1 line
2.18.0
Ryder Lee
maintainerPATCH v2 5/7 mt76: mt7615: use new tag sta_rec_wtbl
In reply to Ryder LeeIn order to reduce command/event times, newer firmware adds a tag sta_rec_wtbl to take care of WTBL operations.
MCU_EXT_CMD_WTBL_UPDATE is deprecated.
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 22 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7615/mcu.h | 8 ++++--- 2 files changed, 27 insertions(+), 3 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +22 -0
@@ -1045,6 +1045,7 @@ int mt7615_mcu_set_bmc(struct mt7615_dev *dev, .conn_type = cpu_to_le32(CONNECTION_INFRA_BC), }, }; +struct sta_rec_wtbl *wtbl =NULL ;struct wtbl_req_hdr *wtbl_hdr;struct wtbl_generic *wtbl_g;struct wtbl_rx *wtbl_rx;
@@ -1052,6 +1053,13 @@ int mt7615_mcu_set_bmc(struct mt7615_dev *dev,eth_broadcast_addr (req.basic.peer_addr); +if (dev->fw_ver >MT7615_FIRMWARE_V1 ) { + req.hdr.tlv_num =cpu_to_le16 (2 ); + wtbl = (struct sta_rec_wtbl *)buf; + wtbl->tag =cpu_to_le16 (STA_REC_WTBL ); + buf +=sizeof (*wtbl); + } + wtbl_hdr = (struct wtbl_req_hdr *)buf; buf +=sizeof (*wtbl_hdr); wtbl_hdr->wlan_idx = mvif->sta.wcid.idx;
@@ -1085,6 +1093,9 @@ int mt7615_mcu_set_bmc(struct mt7615_dev *dev, wtbl_hdr->tlv_num =cpu_to_le16 (2 ); out: +if (wtbl) + wtbl->len =cpu_to_le16 (buf - (u8 *)wtbl_hdr); +return mt7615_mcu_send_sta_rec (dev, (u8 *)&req, (u8 *)wtbl_hdr, buf - (u8 *)wtbl_hdr, en); }
@@ -1113,6 +1124,7 @@ int mt7615_mcu_set_sta(struct mt7615_dev *dev, struct ieee80211_vif *vif, .aid = cpu_to_le16(sta->aid), }, }; +struct sta_rec_wtbl *wtbl =NULL ;struct wtbl_req_hdr *wtbl_hdr;struct wtbl_generic *wtbl_g;struct wtbl_rx *wtbl_rx;
@@ -1176,6 +1188,13 @@ int mt7615_mcu_set_sta(struct mt7615_dev *dev, struct ieee80211_vif *vif, }/* wtbl */ +if (dev->fw_ver >MT7615_FIRMWARE_V1 ) { + wtbl = (struct sta_rec_wtbl *)buf; + wtbl->tag =cpu_to_le16 (STA_REC_WTBL ); + buf +=sizeof (*wtbl); + stlv++; + } + wtbl_hdr = (struct wtbl_req_hdr *)buf; buf +=sizeof (*wtbl_hdr); wtbl_hdr->wlan_idx = msta->wcid.idx;
@@ -1271,6 +1290,9 @@ int mt7615_mcu_set_sta(struct mt7615_dev *dev, struct ieee80211_vif *vif, } out: +if (wtbl) + wtbl->len =cpu_to_le16 (buf - (u8 *)wtbl_hdr); + wtbl_hdr->tlv_num =cpu_to_le16 (wtlv); req.hdr.tlv_num =cpu_to_le16 (stlv);
drivers/net/wireless/mediatek/mt76/mt7615/mcu.h +5 -3
@@ -506,9 +506,10 @@ struct sta_rec_ba {__le16 winsize; } __packed; -#define MT7615_STA_REC_UPDATE_MAX_SIZE (sizeof(struct sta_rec_basic) + \ - sizeof(struct sta_rec_ht) + \ - sizeof(struct sta_rec_vht)) +struct sta_rec_wtbl { +__le16 tag; +__le16 len; +} __packed;enum {STA_REC_BASIC ,
@@ -523,6 +524,7 @@ enum {STA_REC_HT ,STA_REC_VHT ,STA_REC_APPS , +STA_REC_WTBL =13 , STA_REC_MAX_NUM };
Signature · 1 line
2.18.0
Ryder Lee
maintainerPATCH v2 6/7 mt76: mt7615: switch mt7615_mcu_set_tx_ba to v2 format
In reply to Ryder LeeTo adapt new firmware version.
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 60 ++++++++++--------- 1 file changed, 33 insertions(+), 27 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +33 -27
@@ -1572,28 +1572,11 @@ int mt7615_mcu_set_tx_ba(struct mt7615_dev *dev, {struct mt7615_sta *msta = (struct mt7615_sta *)params->sta->drv_priv;struct mt7615_vif *mvif = msta->vif; -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 = { +u8 buf[MT7615_WTBL_UPDATE_MAX_SIZE ]; + } __packed req = { .hdr = { .bss_idx = mvif->idx, .wlan_idx = msta->wcid.idx,
@@ -1612,7 +1595,32 @@ int mt7615_mcu_set_tx_ba(struct mt7615_dev *dev, .winsize = cpu_to_le16(params->buf_size), }, }; -int ret; +struct sta_rec_wtbl *wtbl =NULL ; +struct wtbl_req_hdr *wtbl_hdr; +struct wtbl_ba *wtbl_ba; +u8 *buf = req.buf; + +if (dev->fw_ver >MT7615_FIRMWARE_V1 ) { + req.hdr.tlv_num =cpu_to_le16 (2 ); + wtbl = (struct sta_rec_wtbl *)buf; + wtbl->tag =cpu_to_le16 (STA_REC_WTBL ); + buf +=sizeof (*wtbl); + } + + wtbl_hdr = (struct wtbl_req_hdr *)buf; + buf +=sizeof (*wtbl_hdr); + wtbl_hdr->wlan_idx = msta->wcid.idx; + wtbl_hdr->operation =WTBL_SET ; + wtbl_hdr->tlv_num =cpu_to_le16 (1 ); + + wtbl_ba = (struct wtbl_ba *)buf; + buf +=sizeof (*wtbl_ba); + wtbl_ba->tag =cpu_to_le16 (WTBL_BA ); + wtbl_ba->len =cpu_to_le16 (sizeof (*wtbl_ba)); + wtbl_ba->tid = params->tid; + wtbl_ba->ba_type =MT_BA_TYPE_ORIGINATOR ; + wtbl_ba->sn = add ?cpu_to_le16 (params->ssn) :0 ; + wtbl_ba->ba_en = add;if (add) {u8 idx, ba_range[] = {4 ,8 ,12 ,24 ,36 ,48 ,54 ,64 };
@@ -1622,16 +1630,14 @@ int mt7615_mcu_set_tx_ba(struct mt7615_dev *dev,break ; } - wtbl_req.ba.ba_winsize_idx = idx; + wtbl_ba->ba_winsize_idx = idx; } - ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , - &wtbl_req,sizeof (wtbl_req), true); -if (ret) -return ret; +if (wtbl) + wtbl->len =cpu_to_le16 (buf - (u8 *)wtbl_hdr); -return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , - &sta_req,sizeof (sta_req), true); +return mt7615_mcu_send_sta_rec (dev, (u8 *)&req, (u8 *)wtbl_hdr, + buf - (u8 *)wtbl_hdr, true); } int mt7615_mcu_set_rx_ba(struct mt7615_dev *dev,
Signature · 1 line
2.18.0
Ryder Lee
maintainerPATCH v2 7/7 mt76: mt7615: switch mt7615_mcu_set_rx_ba to v2 format
In reply to Ryder LeeTo adapt new firmware version.
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 62 ++++++++++--------- 1 file changed, 34 insertions(+), 28 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +34 -28
@@ -1646,29 +1646,11 @@ int mt7615_mcu_set_rx_ba(struct mt7615_dev *dev, {struct mt7615_sta *msta = (struct mt7615_sta *)params->sta->drv_priv;struct mt7615_vif *mvif = msta->vif; -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 = { +u8 buf[MT7615_WTBL_UPDATE_MAX_SIZE ]; + } __packed req = { .hdr = { .bss_idx = mvif->idx, .wlan_idx = msta->wcid.idx,
@@ -1687,17 +1669,41 @@ int mt7615_mcu_set_rx_ba(struct mt7615_dev *dev, .winsize = cpu_to_le16(params->buf_size), }, }; -int ret; +struct sta_rec_wtbl *wtbl =NULL ; +struct wtbl_req_hdr *wtbl_hdr; +struct wtbl_ba *wtbl_ba; +u8 *buf = req.buf; -memcpy (wtbl_req.ba.peer_addr, params->sta->addr,ETH_ALEN ); +if (dev->fw_ver >MT7615_FIRMWARE_V1 ) { + req.hdr.tlv_num =cpu_to_le16 (2 ); + wtbl = (struct sta_rec_wtbl *)buf; + wtbl->tag =cpu_to_le16 (STA_REC_WTBL ); + buf +=sizeof (*wtbl); + } - ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_STA_REC_UPDATE , - &sta_req,sizeof (sta_req), true); -if (ret || !add) -return ret; + wtbl_hdr = (struct wtbl_req_hdr *)buf; + buf +=sizeof (*wtbl_hdr); + wtbl_hdr->wlan_idx = msta->wcid.idx; + wtbl_hdr->operation =WTBL_SET ; + wtbl_hdr->tlv_num =cpu_to_le16 (1 ); -return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , - &wtbl_req,sizeof (wtbl_req), true); + wtbl_ba = (struct wtbl_ba *)buf; + buf +=sizeof (*wtbl_ba); + wtbl_ba->tag =cpu_to_le16 (WTBL_BA ); + wtbl_ba->len =cpu_to_le16 (sizeof (*wtbl_ba)); + wtbl_ba->tid = params->tid; + wtbl_ba->ba_type =MT_BA_TYPE_RECIPIENT ; + wtbl_ba->rst_ba_tid = params->tid; + wtbl_ba->rst_ba_sel =RST_BA_MAC_TID_MATCH ; + wtbl_ba->rst_ba_sb =1 ; + +memcpy (wtbl_ba->peer_addr, params->sta->addr,ETH_ALEN ); + +if (wtbl) + wtbl->len =cpu_to_le16 (buf - (u8 *)wtbl_hdr); + +return mt7615_mcu_send_sta_rec (dev, (u8 *)&req, (u8 *)wtbl_hdr, + buf - (u8 *)wtbl_hdr, add); }int mt7615_mcu_get_temperature (struct mt7615_dev *dev,int index)
Signature · 1 line
2.18.0