switch mt7615 MCU command format from v1 to v2
Subsystems (2)
Ryder Lee
maintainerPATCH v2 1/7 mt76: mt7615: simplify mcu_set_bmc flow
In reply to Ryder LeeMove 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 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
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
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 6/7 mt76: mt7615: switch mt7615_mcu_set_tx_ba to v2 format
To 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 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 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