add set_coverage support to mt7615 driver
Subsystems (2)
Lorenzo Bianconi
maintainerv4 cover add set_coverage support to mt7615 driver
Add the capability to configure ack timeout and slottime to mt7615 driver. Fix coverage_class definition in mt76x02 driver.
Set 0 as minimum configurable value for coverage_class since mt76 does not support dynack.
Changes since v3:
- init slottime even for ext phy
Changes since v2:
- rebase on top of mt7615D support (DBDC)
- add DBDC support to mt7615_mac_set_timing
Changes since v1:
- drop patch 2/3 'mt76: move coverage_class and slottime in mt76_dev'
- set 0 as minimum configurable value for coverage_class
Lorenzo Bianconi (3):
mt76: mt76x02: fix coverage_class type
mt76: mt7603: set 0 as min coverage_class value
mt76: mt7615: add set_coverage class support
.../net/wireless/mediatek/mt76/mt7603/main.c | 2 +- .../net/wireless/mediatek/mt76/mt7615/init.c | 3 + .../net/wireless/mediatek/mt76/mt7615/mac.c | 61 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7615/main.c | 21 +++++++ .../wireless/mediatek/mt76/mt7615/mt7615.h | 7 +++ .../net/wireless/mediatek/mt76/mt7615/regs.h | 21 +++++++ drivers/net/wireless/mediatek/mt76/mt76x02.h | 2 +- .../net/wireless/mediatek/mt76/mt76x02_util.c | 2 +- 8 files changed, 116 insertions(+), 3 deletions(-)
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH v4 1/3 mt76: mt76x02: fix coverage_class type
Fix coverage_class type in mt76x02_dev data structure since coverage_class can be negative to enable dynack (just supported by ath9k). Set 0 as minimum value for coverage_class
--- drivers/net/wireless/mediatek/mt76/mt76x02.h | 2 +- drivers/net/wireless/mediatek/mt76/mt76x02_util.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76x02.h +1 -1
@@ -116,7 +116,7 @@ struct mt76x02_dev {bool no_2ghz; -u8 coverage_class; +s16 coverage_class;u8 slottime;struct mt76x02_dfs_pattern_detector dfs_pd;
drivers/net/wireless/mediatek/mt76/mt76x02_util.c +1 -1
@@ -545,7 +545,7 @@ void mt76x02_set_coverage_class(struct ieee80211_hw *hw,struct mt76x02_dev *dev = hw->priv;mutex_lock (&dev->mt76.mutex); - dev->coverage_class = coverage_class; + dev->coverage_class =max_t (s16, coverage_class,0 );mt76x02_set_tx_ackto (dev);mutex_unlock (&dev->mt76.mutex); }
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH v4 2/3 mt76: mt7603: set 0 as min coverage_class value
In reply to Lorenzo BianconiSet 0 as minimum configurable value for coverage_class since mt76 does not support dynack
--- drivers/net/wireless/mediatek/mt76/mt7603/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/mediatek/mt76/mt7603/main.c +1 -1
@@ -642,7 +642,7 @@ mt7603_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class) {struct mt7603_dev *dev = hw->priv; - dev->coverage_class = coverage_class; + dev->coverage_class =max_t (s16, coverage_class,0 );mt7603_mac_set_timing (dev); }
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH v4 3/3 mt76: mt7615: add set_coverage class support
In reply to Lorenzo BianconiAdd the capability to configure acktimeout for mt7615 driver. Moreover configure slottime according to the value provided by mac80211
--- .../net/wireless/mediatek/mt76/mt7615/init.c | 3 + .../net/wireless/mediatek/mt76/mt7615/mac.c | 61 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7615/main.c | 21 +++++++ .../wireless/mediatek/mt76/mt7615/mt7615.h | 7 +++ .../net/wireless/mediatek/mt76/mt7615/regs.h | 21 +++++++ 5 files changed, 113 insertions(+)
drivers/net/wireless/mediatek/mt76/mt7615/init.c +3 -0
@@ -259,6 +259,7 @@ mt7615_regd_notifier(struct wiphy *wiphy,static void mt7615_init_wiphy (struct ieee80211_hw *hw) { +struct mt7615_phy *phy =mt7615_hw_phy (hw);struct wiphy *wiphy = hw->wiphy; hw->queues =4 ;
@@ -266,6 +267,8 @@ mt7615_init_wiphy(struct ieee80211_hw *hw) hw->max_report_rates =7 ; hw->max_rate_tries =11 ; + phy->slottime =9 ; + hw->sta_data_size =sizeof (struct mt7615_sta ); hw->vif_data_size =sizeof (struct mt7615_vif );
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +61 -0
67 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7615/main.c +21 -0
@@ -230,6 +230,7 @@ static int mt7615_set_channel(struct mt7615_phy *phy) (ext_phy *MT_CHFREQ_DBDC_IDX ) | phy->chfreq_seq); +mt7615_mac_set_timing (phy); ret =mt7615_dfs_init_radar_detector (phy);mt7615_mac_cca_stats_reset (phy);
@@ -406,6 +407,16 @@ static void mt7615_bss_info_changed(struct ieee80211_hw *hw,if (changed &BSS_CHANGED_ASSOC )mt7615_mcu_set_bss_info (dev, vif, info->assoc); +if (changed &BSS_CHANGED_ERP_SLOT ) { +int slottime = info->use_short_slot ?9 :20 ; +struct mt7615_phy *phy =mt7615_hw_phy (hw); + +if (slottime != phy->slottime) { + phy->slottime = slottime; +mt7615_mac_set_timing (phy); + } + } +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);
@@ -602,6 +613,15 @@ mt7615_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,return ret; } +static void +mt7615_set_coverage_class (struct ieee80211_hw *hw,s16 coverage_class) +{ +struct mt7615_phy *phy =mt7615_hw_phy (hw); + + phy->coverage_class =max_t (s16, coverage_class,0 ); +mt7615_mac_set_timing (phy); +} +const struct ieee80211_ops mt7615_ops = { .tx = mt7615_tx, .start = mt7615_start,
@@ -625,4 +645,5 @@ const struct ieee80211_ops mt7615_ops = { .channel_switch_beacon = mt7615_channel_switch_beacon, .get_survey = mt76_get_survey, .get_antenna = mt76_get_antenna, + .set_coverage_class = mt7615_set_coverage_class, };
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +7 -0
@@ -40,6 +40,9 @@#define MT_CHFREQ_DBDC_IDX BIT(6)#define MT_CHFREQ_SEQ GENMASK(5, 0) +#define MT7615_CFEND_RATE_DEFAULT 0x69/* chip default (24M) */ +#define MT7615_CFEND_RATE_11B 0x03/* 11B LP, 11M */ +struct mt7615_vif ;struct mt7615_sta ;
@@ -97,6 +100,9 @@ struct mt7615_phy {u16 chainmask; +s16 coverage_class; +u8 slottime; +u8 chfreq_seq;u8 rdd_state;int dfs_state;
@@ -283,6 +289,7 @@ int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi, struct sk_buff *skb, struct mt76_wcid *wcid, struct ieee80211_sta *sta, int pid, struct ieee80211_key_conf *key); +void mt7615_mac_set_timing (struct mt7615_phy *phy);int mt7615_mac_fill_rx (struct mt7615_dev *dev,struct sk_buff *skb);void mt7615_mac_add_txs (struct mt7615_dev *dev,void *data);void mt7615_mac_tx_free (struct mt7615_dev *dev,struct sk_buff *skb);
drivers/net/wireless/mediatek/mt76/mt7615/regs.h +21 -0
@@ -162,14 +162,35 @@#define MT_AGG_SCR MT_WF_AGG(0x0fc)#define MT_AGG_SCR_NLNAV_MID_PTEC_DIS BIT(3) +#define MT_WF_ARB_BASE 0x20c00 +#define MT_WF_ARB (ofs) (MT_WF_ARB_BASE + (ofs)) + +#define MT_ARB_SCR MT_WF_ARB(0x080) +#define MT_ARB_SCR_TX0_DISABLE BIT(8) +#define MT_ARB_SCR_RX0_DISABLE BIT(9) +#define MT_ARB_SCR_TX1_DISABLE BIT(10) +#define MT_ARB_SCR_RX1_DISABLE BIT(11) +#define MT_WF_TMAC_BASE 0x21000#define MT_WF_TMAC (ofs) (MT_WF_TMAC_BASE + (ofs)) +#define MT_TMAC_CDTR MT_WF_TMAC(0x090) +#define MT_TMAC_ODTR MT_WF_TMAC(0x094) +#define MT_TIMEOUT_VAL_PLCP GENMASK(15, 0) +#define MT_TIMEOUT_VAL_CCA GENMASK(31, 16) +#define MT_TMAC_TRCR0 MT_WF_TMAC(0x09c)#define MT_TMAC_TRCR1 MT_WF_TMAC(0x070)#define MT_TMAC_TRCR_CCA_SEL GENMASK(31, 30)#define MT_TMAC_TRCR_SEC_CCA_SEL GENMASK(29, 28) +#define MT_TMAC_ICR0 MT_WF_TMAC(0x0a4) +#define MT_TMAC_ICR1 MT_WF_TMAC(0x074) +#define MT_IFS_EIFS GENMASK(8, 0) +#define MT_IFS_RIFS GENMASK(14, 10) +#define MT_IFS_SIFS GENMASK(22, 16) +#define MT_IFS_SLOT GENMASK(30, 24) +#define MT_TMAC_CTCR0 MT_WF_TMAC(0x0f4)#define MT_TMAC_CTCR0_INS_DDLMT_REFTIME GENMASK(5, 0)#define MT_TMAC_CTCR0_INS_DDLMT_DENSITY GENMASK(15, 12)
Signature · 1 line
2.21.0