mt76: introduce connac3_mac support
Subsystems (2)
Lorenzo Bianconi
maintainerv4 cover mt76: introduce connac3_mac support
Introduce connac3_mac in mt76_connac library to reuse mac code shared between WiFi7 chipsets.
Move the following common mac fields in mt76_struct/mt76_wcid:
- sta_poll_list
- sta_poll_lock
- poll_list
- ampdu_state
Move the following routines in mt76-connac lib since they are shared between mt7915 and mt7921:
- mt76_connac2_tx_check_aggr
- mt76_connac2_txwi_free
- mt76_connac2_tx_token_put
Changes since v3:
- rebase on top of mt76 main tree
Changes since v2:
- move back the some mt7996 mac routines in mt7996 folder for the moment. Changes since v1:
- rebase on top wireless-next tree
- fix connac3_mac library
- fix compilation warnings
Lorenzo Bianconi (15):
wifi: mt76: mt7915: move sta_poll_list and sta_poll_lock in mt76_dev
wifi: mt76: mt7603: rely on shared sta_poll_list and sta_poll_lock
wifi: mt76: mt7615: rely on shared sta_poll_list and sta_poll_lock
wifi: mt76: mt7996: rely on shared sta_poll_list and sta_poll_lock
wifi: mt76: mt7921: rely on shared sta_poll_list and sta_poll_lock
wifi: mt76: mt7915: move poll_list in mt76_wcid
wifi: mt76: mt7603: rely on shared poll_list field
wifi: mt76: mt7615: rely on shared poll_list field
wifi: mt76: mt7996: rely on shared poll_list field
wifi: mt76: mt7921: rely on shared poll_list field
wifi: mt76: move ampdu_state in mt76_wcid
mt76: connac: move more mt7921/mt7915 mac shared code in connac lib
wifi: mt76: move rate info in mt76_vif
wifi: mt76: connac: move connac3 definitions in mt76_connac3_mac.h
wifi: mt76: connac: add connac3 mac library
drivers/net/wireless/mediatek/mt76/Makefile | 2 +- drivers/net/wireless/mediatek/mt76/mac80211.c | 2 + drivers/net/wireless/mediatek/mt76/mt76.h | 9 + .../net/wireless/mediatek/mt76/mt7603/init.c | 2 - .../net/wireless/mediatek/mt76/mt7603/mac.c | 22 +- .../net/wireless/mediatek/mt76/mt7603/main.c | 20 +- .../wireless/mediatek/mt76/mt7603/mt7603.h | 4 - .../net/wireless/mediatek/mt76/mt7615/init.c | 2 - .../net/wireless/mediatek/mt76/mt7615/mac.c | 31 +- .../net/wireless/mediatek/mt76/mt7615/main.c | 20 +- .../wireless/mediatek/mt76/mt7615/mt7615.h | 4 - .../net/wireless/mediatek/mt76/mt76_connac.h | 10 +- .../wireless/mediatek/mt76/mt76_connac3_mac.c | 182 ++++++++++ .../wireless/mediatek/mt76/mt76_connac3_mac.h | 325 ++++++++++++++++++ .../wireless/mediatek/mt76/mt76_connac_mac.c | 82 +++++ .../net/wireless/mediatek/mt76/mt7915/init.c | 4 +- .../net/wireless/mediatek/mt76/mt7915/mac.c | 140 ++------ .../net/wireless/mediatek/mt76/mt7915/main.c | 30 +- .../wireless/mediatek/mt76/mt7915/mt7915.h | 5 - .../net/wireless/mediatek/mt76/mt7921/init.c | 2 - .../net/wireless/mediatek/mt76/mt7921/mac.c | 101 ++---- .../net/wireless/mediatek/mt76/mt7921/main.c | 26 +- .../wireless/mediatek/mt76/mt7921/mt7921.h | 9 - .../net/wireless/mediatek/mt76/mt7921/pci.c | 2 +- .../wireless/mediatek/mt76/mt7921/pci_mac.c | 16 +- .../net/wireless/mediatek/mt76/mt7996/init.c | 2 - .../net/wireless/mediatek/mt76/mt7996/mac.c | 242 ++----------- .../net/wireless/mediatek/mt76/mt7996/mac.h | 315 +---------------- .../net/wireless/mediatek/mt76/mt7996/main.c | 40 +-- .../net/wireless/mediatek/mt76/mt7996/mcu.c | 2 +- .../wireless/mediatek/mt76/mt7996/mt7996.h | 8 - 31 files changed, 797 insertions(+), 864 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt76_connac3_mac.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt76_connac3_mac.h
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 1/15 wifi: mt76: mt7915: move sta_poll_list and sta_poll_lock in mt76_dev
sta_poll_list and sta_poll_lock are used by most of the drivers, so move them in mt76_dev structure.
--- drivers/net/wireless/mediatek/mt76/mac80211.c | 2 + drivers/net/wireless/mediatek/mt76/mt76.h | 3 ++ .../net/wireless/mediatek/mt76/mt7915/init.c | 2 - .../net/wireless/mediatek/mt76/mt7915/mac.c | 47 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7915/main.c | 12 ++--- .../wireless/mediatek/mt76/mt7915/mt7915.h | 2 - 6 files changed, 36 insertions(+), 32 deletions(-)
drivers/net/wireless/mediatek/mt76/mac80211.c +2 -0
@@ -661,6 +661,8 @@ mt76_alloc_device(struct device *pdev, unsigned int size,idr_init (&dev->rx_token);INIT_LIST_HEAD (&dev->wcid_list); +INIT_LIST_HEAD (&dev->sta_poll_list); +spin_lock_init (&dev->sta_poll_lock);INIT_LIST_HEAD (&dev->txwi_cache);INIT_LIST_HEAD (&dev->rxwi_cache);
drivers/net/wireless/mediatek/mt76/mt76.h +3 -0
@@ -823,6 +823,9 @@ struct mt76_dev {struct mt76_wcid __rcu *wcid[MT76_N_WCIDS ];struct list_head wcid_list; +struct list_head sta_poll_list; +spinlock_t sta_poll_lock; +u32 rev;struct tasklet_struct pre_tbtt_tasklet;
drivers/net/wireless/mediatek/mt76/mt7915/init.c +0 -2
@@ -1185,9 +1185,7 @@ int mt7915_register_device(struct mt7915_dev *dev)INIT_WORK (&dev->rc_work, mt7915_mac_sta_rc_work);INIT_DELAYED_WORK (&dev->mphy.mac_work, mt7915_mac_work);INIT_LIST_HEAD (&dev->sta_rc_list); -INIT_LIST_HEAD (&dev->sta_poll_list);INIT_LIST_HEAD (&dev->twt_list); -spin_lock_init (&dev->sta_poll_lock);init_waitqueue_head (&dev->reset_wait);INIT_WORK (&dev->reset_work, mt7915_mac_reset_work);
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +25 -22
113 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/main.c +6 -6
@@ -308,10 +308,10 @@ static void mt7915_remove_interface(struct ieee80211_hw *hw, phy->omac_mask &= ~BIT_ULL (mvif->mt76.omac_idx);mutex_unlock (&dev->mt76.mutex); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid); }
@@ -740,12 +740,12 @@ void mt7915_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,for (i =0 ; i <ARRAY_SIZE (msta->twt.flow); i++)mt7915_mac_twt_teardown_flow (dev, msta, i); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list);if (!list_empty (&msta->rc_list))list_del_init (&msta->rc_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&mdev->sta_poll_lock); } static void mt7915_tx(struct ieee80211_hw *hw,
@@ -1100,11 +1100,11 @@ static void mt7915_sta_rc_work(void *data, struct ieee80211_sta *sta)struct mt7915_dev *dev = msta->vif->phy->dev;u32 *changed = data; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); msta->changed |= *changed;if (list_empty (&msta->rc_list))list_add_tail (&msta->rc_list, &dev->sta_rc_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); } static void mt7915_sta_rc_update(struct ieee80211_hw *hw,
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +0 -2
@@ -274,9 +274,7 @@ struct mt7915_dev {#endif struct list_head sta_rc_list; -struct list_head sta_poll_list;struct list_head twt_list; -spinlock_t sta_poll_lock;u32 hw_pattern;
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 2/15 wifi: mt76: mt7603: rely on shared sta_poll_list and sta_poll_lock
In reply to Lorenzo BianconiRely on sta_poll_list and sta_poll_lock fields in mt76_dev structure and get rid of private copies.
--- .../net/wireless/mediatek/mt76/mt7603/init.c | 2 -- .../net/wireless/mediatek/mt76/mt7603/mac.c | 18 +++++++++--------- .../net/wireless/mediatek/mt76/mt7603/main.c | 8 ++++---- .../net/wireless/mediatek/mt76/mt7603/mt7603.h | 3 --- 4 files changed, 13 insertions(+), 18 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7603/init.c +0 -2
@@ -500,8 +500,6 @@ int mt7603_register_device(struct mt7603_dev *dev) bus_ops->rmw = mt7603_rmw; dev->mt76.bus = bus_ops; -INIT_LIST_HEAD (&dev->sta_poll_list); -spin_lock_init (&dev->sta_poll_lock);spin_lock_init (&dev->ps_lock);INIT_DELAYED_WORK (&dev->mphy.mac_work, mt7603_mac_work);
drivers/net/wireless/mediatek/mt76/mt7603/mac.c +9 -9
@@ -412,16 +412,16 @@ void mt7603_mac_sta_poll(struct mt7603_dev *dev)while (1 ) {bool clear = false; -spin_lock_bh (&dev->sta_poll_lock); -if (list_empty (&dev->sta_poll_list)) { -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +if (list_empty (&dev->mt76.sta_poll_list)) { +spin_unlock_bh (&dev->mt76.sta_poll_lock);break ; } - msta = list_first_entry(&dev->sta_poll_list, struct mt7603_sta, - poll_list); + msta =list_first_entry (&dev->mt76.sta_poll_list, + struct mt7603_sta, poll_list);list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); addr =mt7603_wtbl4_addr (msta->wcid.idx);for (i =0 ; i <4 ; i++) {
@@ -1268,9 +1268,9 @@ void mt7603_mac_add_txs(struct mt7603_dev *dev, void *data) sta =wcid_to_sta (wcid);if (list_empty (&msta->poll_list)) { -spin_lock_bh (&dev->sta_poll_lock); -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); }if (mt7603_mac_add_txs_skb (dev, msta, pid, txs_data))
drivers/net/wireless/mediatek/mt76/mt7603/main.c +4 -4
@@ -100,10 +100,10 @@ mt7603_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)rcu_assign_pointer (dev->mt76.wcid[idx],NULL ); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mutex_lock (&dev->mt76.mutex); dev->mt76.vif_mask &= ~BIT_ULL (mvif->idx);
@@ -388,10 +388,10 @@ mt7603_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt7603_filter_tx (dev, wcid->idx, true);spin_unlock_bh (&dev->ps_lock); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&mdev->sta_poll_lock);mt7603_wtbl_clear (dev, wcid->idx); }
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +0 -3
@@ -110,9 +110,6 @@ struct mt7603_dev {u32 rxfilter; -struct list_head sta_poll_list; -spinlock_t sta_poll_lock; -struct mt7603_sta global_sta;u32 agc0, agc3;
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 3/15 wifi: mt76: mt7615: rely on shared sta_poll_list and sta_poll_lock
In reply to Lorenzo BianconiRely on sta_poll_list and sta_poll_lock fields in mt76_dev structure and get rid of private copies.
--- .../net/wireless/mediatek/mt76/mt7615/init.c | 2 -- .../net/wireless/mediatek/mt76/mt7615/mac.c | 23 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7615/main.c | 8 +++---- .../wireless/mediatek/mt76/mt7615/mt7615.h | 3 --- 4 files changed, 16 insertions(+), 20 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/init.c +0 -2
@@ -628,8 +628,6 @@ void mt7615_init_device(struct mt7615_dev *dev)INIT_DELAYED_WORK (&dev->coredump.work, mt7615_coredump_work);skb_queue_head_init (&dev->phy.scan_event_list);skb_queue_head_init (&dev->coredump.msg_list); -INIT_LIST_HEAD (&dev->sta_poll_list); -spin_lock_init (&dev->sta_poll_lock);init_waitqueue_head (&dev->reset_wait);init_waitqueue_head (&dev->phy.roc_wait);
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +12 -11
@@ -387,10 +387,11 @@ static int mt7615_mac_fill_rx(struct mt7615_dev *dev, struct sk_buff *skb)struct mt7615_sta *msta; msta = container_of(status->wcid, struct mt7615_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); } if (mt76_is_mmio(&dev->mt76) && (rxd0 & csum_mask) == csum_mask &&
@@ -905,9 +906,9 @@ void mt7615_mac_sta_poll(struct mt7615_dev *dev)int i;INIT_LIST_HEAD (&sta_poll_list); -spin_lock_bh (&dev->sta_poll_lock); -list_splice_init (&dev->sta_poll_list, &sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +list_splice_init (&dev->mt76.sta_poll_list, &sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);while (!list_empty (&sta_poll_list)) {bool clear = false;
@@ -915,9 +916,9 @@ void mt7615_mac_sta_poll(struct mt7615_dev *dev) msta = list_first_entry(&sta_poll_list, struct mt7615_sta, poll_list); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); addr =mt7615_mac_wtbl_addr (dev, msta->wcid.idx) +19 *4 ;
@@ -1514,10 +1515,10 @@ static void mt7615_mac_add_txs(struct mt7615_dev *dev, void *data) msta = container_of(wcid, struct mt7615_sta, wcid); sta =wcid_to_sta (wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);if (mt7615_mac_add_txs_skb (dev, msta, pid, txs_data)) goto out;
drivers/net/wireless/mediatek/mt76/mt7615/main.c +4 -4
@@ -274,10 +274,10 @@ static void mt7615_remove_interface(struct ieee80211_hw *hw,mt7615_mutex_release (dev); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &mvif->sta.wcid); }
@@ -705,10 +705,10 @@ void mt7615_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (vif->type ==NL80211_IFTYPE_STATION && !sta->tdls)mt7615_mcu_add_bss_info (phy, vif, sta, false); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&mdev->sta_poll_lock);mt76_connac_power_save_sched (phy->mt76, &dev->pm); }
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +0 -3
@@ -262,9 +262,6 @@ struct mt7615_dev {wait_queue_head_t reset_wait;u32 reset_state; -struct list_head sta_poll_list; -spinlock_t sta_poll_lock; -struct {u8 n_pulses;u32 period;
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 4/15 wifi: mt76: mt7996: rely on shared sta_poll_list and sta_poll_lock
In reply to Lorenzo BianconiRely on sta_poll_list and sta_poll_lock fields in mt76_dev structure and get rid of private copies.
--- .../net/wireless/mediatek/mt76/mt7996/init.c | 2 - .../net/wireless/mediatek/mt76/mt7996/mac.c | 40 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7996/main.c | 12 +++--- .../wireless/mediatek/mt76/mt7996/mt7996.h | 2 - 4 files changed, 27 insertions(+), 29 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7996/init.c +0 -2
@@ -856,9 +856,7 @@ int mt7996_register_device(struct mt7996_dev *dev)INIT_WORK (&dev->rc_work, mt7996_mac_sta_rc_work);INIT_DELAYED_WORK (&dev->mphy.mac_work, mt7996_mac_work);INIT_LIST_HEAD (&dev->sta_rc_list); -INIT_LIST_HEAD (&dev->sta_poll_list);INIT_LIST_HEAD (&dev->twt_list); -spin_lock_init (&dev->sta_poll_lock);init_waitqueue_head (&dev->reset_wait);INIT_WORK (&dev->reset_work, mt7996_mac_reset_work);
drivers/net/wireless/mediatek/mt76/mt7996/mac.c +21 -19
@@ -111,9 +111,9 @@ static void mt7996_mac_sta_poll(struct mt7996_dev *dev)LIST_HEAD (sta_poll_list);int i; -spin_lock_bh (&dev->sta_poll_lock); -list_splice_init (&dev->sta_poll_list, &sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +list_splice_init (&dev->mt76.sta_poll_list, &sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);rcu_read_lock ();
@@ -124,15 +124,15 @@ static void mt7996_mac_sta_poll(struct mt7996_dev *dev)s8 rssi[4 ];u8 bw; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&sta_poll_list)) { -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);break ; } msta =list_first_entry (&sta_poll_list, struct mt7996_sta, poll_list);list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); idx = msta->wcid.idx;
@@ -681,10 +681,11 @@ mt7996_mac_fill_rx(struct mt7996_dev *dev, struct sk_buff *skb)struct mt7996_sta *msta; msta = container_of(status->wcid, struct mt7996_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); } status->freq = mphy->chandef.chan->center_freq;
@@ -1291,10 +1292,11 @@ mt7996_mac_tx_free(struct mt7996_dev *dev, void *data, int len)continue ; msta = container_of(wcid, struct mt7996_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &mdev->sta_poll_list); +spin_unlock_bh (&mdev->sta_poll_lock);continue ; }
@@ -1499,10 +1501,10 @@ static void mt7996_mac_add_txs(struct mt7996_dev *dev, void *data)if (!wcid->sta) goto out; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); out:rcu_read_unlock ();
@@ -2325,7 +2327,7 @@ void mt7996_mac_sta_rc_work(struct work_struct *work)u32 changed;LIST_HEAD (list); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);list_splice_init (&dev->sta_rc_list, &list);while (!list_empty (&list)) {
@@ -2333,7 +2335,7 @@ void mt7996_mac_sta_rc_work(struct work_struct *work)list_del_init (&msta->rc_list); changed = msta->changed; msta->changed =0 ; -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); sta = container_of((void *)msta, struct ieee80211_sta, drv_priv); vif = container_of((void *)msta->vif, struct ieee80211_vif, drv_priv);
@@ -2345,10 +2347,10 @@ void mt7996_mac_sta_rc_work(struct work_struct *work)/* TODO: smps change */ -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); } -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); }void mt7996_mac_work (struct work_struct *work)
drivers/net/wireless/mediatek/mt76/mt7996/main.c +6 -6
@@ -263,10 +263,10 @@ static void mt7996_remove_interface(struct ieee80211_hw *hw, phy->omac_mask &= ~BIT_ULL (mvif->mt76.omac_idx);mutex_unlock (&dev->mt76.mutex); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid); }
@@ -689,12 +689,12 @@ void mt7996_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,for (i =0 ; i <ARRAY_SIZE (msta->twt.flow); i++)mt7996_mac_twt_teardown_flow (dev, msta, i); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list);if (!list_empty (&msta->rc_list))list_del_init (&msta->rc_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&mdev->sta_poll_lock); } static void mt7996_tx(struct ieee80211_hw *hw,
@@ -1005,11 +1005,11 @@ static void mt7996_sta_rc_work(void *data, struct ieee80211_sta *sta)struct mt7996_dev *dev = msta->vif->phy->dev;u32 *changed = data; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); msta->changed |= *changed;if (list_empty (&msta->rc_list))list_add_tail (&msta->rc_list, &dev->sta_rc_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); } static void mt7996_sta_rc_update(struct ieee80211_hw *hw,
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h +0 -2
@@ -224,9 +224,7 @@ struct mt7996_dev {#endif struct list_head sta_rc_list; -struct list_head sta_poll_list;struct list_head twt_list; -spinlock_t sta_poll_lock;u32 hw_pattern;
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 5/15 wifi: mt76: mt7921: rely on shared sta_poll_list and sta_poll_lock
In reply to Lorenzo BianconiRely on sta_poll_list and sta_poll_lock fields in mt76_dev structure and get rid of private copies.
--- .../net/wireless/mediatek/mt76/mt7921/init.c | 2 -- .../net/wireless/mediatek/mt76/mt7921/mac.c | 32 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7921/main.c | 8 ++--- .../wireless/mediatek/mt76/mt7921/mt7921.h | 3 -- 4 files changed, 21 insertions(+), 24 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7921/init.c +0 -2
@@ -456,8 +456,6 @@ int mt7921_register_device(struct mt7921_dev *dev)#endif skb_queue_head_init (&dev->phy.scan_event_list);skb_queue_head_init (&dev->coredump.msg_list); -INIT_LIST_HEAD (&dev->sta_poll_list); -spin_lock_init (&dev->sta_poll_lock);INIT_WORK (&dev->reset_work, mt7921_mac_reset_work);INIT_WORK (&dev->init_work, mt7921_init_work);
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +17 -15
@@ -68,9 +68,9 @@ static void mt7921_mac_sta_poll(struct mt7921_dev *dev)s8 rssi[4 ];int i; -spin_lock_bh (&dev->sta_poll_lock); -list_splice_init (&dev->sta_poll_list, &sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock); +list_splice_init (&dev->mt76.sta_poll_list, &sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock);while (true) {bool clear = false;
@@ -78,15 +78,15 @@ static void mt7921_mac_sta_poll(struct mt7921_dev *dev)u16 idx;u8 bw; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&sta_poll_list)) { -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);break ; } msta =list_first_entry (&sta_poll_list, struct mt7921_sta, poll_list);list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock); idx = msta->wcid.idx; addr =mt7921_mac_wtbl_lmac_addr (idx,MT_WTBL_AC0_CTT_OFFSET );
@@ -280,10 +280,11 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)if (status->wcid) { msta = container_of(status->wcid, struct mt7921_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); }mt7921_get_status_freq_info (dev, mphy, status, chfreq);
@@ -566,10 +567,10 @@ void mt7921_mac_add_txs(struct mt7921_dev *dev, void *data)if (!wcid->sta) goto out; -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +spin_unlock_bh (&dev->mt76.sta_poll_lock); out:rcu_read_unlock ();
@@ -647,10 +648,11 @@ static void mt7921_mac_tx_free(struct mt7921_dev *dev, void *data, int len)continue ; msta = container_of(wcid, struct mt7921_sta, wcid); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&mdev->sta_poll_lock);if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->sta_poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +list_add_tail (&msta->poll_list, + &mdev->sta_poll_list); +spin_unlock_bh (&mdev->sta_poll_lock);continue ; }
drivers/net/wireless/mediatek/mt76/mt7921/main.c +4 -4
@@ -357,10 +357,10 @@ static void mt7921_remove_interface(struct ieee80211_hw *hw, phy->omac_mask &= ~BIT_ULL (mvif->mt76.omac_idx);mt7921_mutex_release (dev); -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid); }
@@ -842,10 +842,10 @@ void mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif, mvif->ctx); } -spin_lock_bh (&dev->sta_poll_lock); +spin_lock_bh (&dev->mt76.sta_poll_lock);if (!list_empty (&msta->poll_list))list_del_init (&msta->poll_list); -spin_unlock_bh (&dev->sta_poll_lock); +spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_connac_power_save_sched (&dev->mphy, &dev->pm); }
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +0 -3
@@ -274,9 +274,6 @@ struct mt7921_dev { bool hw_init_done:1; bool fw_assert:1; -struct list_head sta_poll_list; -spinlock_t sta_poll_lock; -struct work_struct init_work;u8 fw_debug;
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 6/15 wifi: mt76: mt7915: move poll_list in mt76_wcid
In reply to Lorenzo Bianconipoll_list field is used by most of the drivers, so move it in mt76_wcid structure.
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 ++ .../net/wireless/mediatek/mt76/mt7915/mac.c | 20 +++++++++---------- .../net/wireless/mediatek/mt76/mt7915/main.c | 12 +++++------ .../wireless/mediatek/mt76/mt7915/mt7915.h | 1 - 4 files changed, 18 insertions(+), 17 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +2 -0
@@ -336,6 +336,8 @@ struct mt76_wcid {struct idr pktid;struct mt76_sta_stats stats; + +struct list_head poll_list; };struct mt76_txq {
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +10 -10
@@ -124,8 +124,8 @@ static void mt7915_mac_sta_poll(struct mt7915_dev *dev)break ; } msta =list_first_entry (&sta_poll_list, - struct mt7915_sta, poll_list); -list_del_init (&msta->poll_list); + struct mt7915_sta, wcid.poll_list); +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); idx = msta->wcid.idx;
@@ -327,8 +327,8 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb,if (status->wcid) { msta = container_of(status->wcid, struct mt7915_sta, wcid);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); }
@@ -894,8 +894,8 @@ mt7915_txwi_free(struct mt7915_dev *dev, struct mt76_txwi_cache *t, sta = container_of((void *)msta, struct ieee80211_sta, drv_priv);spin_lock_bh (&mdev->sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &mdev->sta_poll_list);spin_unlock_bh (&mdev->sta_poll_lock); }
@@ -990,8 +990,8 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len) msta = container_of(wcid, struct mt7915_sta, wcid);spin_lock_bh (&mdev->sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &mdev->sta_poll_list);spin_unlock_bh (&mdev->sta_poll_lock);continue ;
@@ -1103,8 +1103,8 @@ static void mt7915_mac_add_txs(struct mt7915_dev *dev, void *data) goto out;spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); out:
drivers/net/wireless/mediatek/mt76/mt7915/main.c +6 -6
@@ -248,7 +248,7 @@ static int mt7915_add_interface(struct ieee80211_hw *hw, idx =MT7915_WTBL_RESERVED - mvif->mt76.idx;INIT_LIST_HEAD (&mvif->sta.rc_list); -INIT_LIST_HEAD (&mvif->sta.poll_list); +INIT_LIST_HEAD (&mvif->sta.wcid.poll_list); mvif->sta.wcid.idx = idx; mvif->sta.wcid.phy_idx = ext_phy; mvif->sta.wcid.hw_key_idx =-1 ;
@@ -309,8 +309,8 @@ static void mt7915_remove_interface(struct ieee80211_hw *hw,mutex_unlock (&dev->mt76.mutex);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid);
@@ -705,7 +705,7 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,return -ENOSPC ;INIT_LIST_HEAD (&msta->rc_list); -INIT_LIST_HEAD (&msta->poll_list); +INIT_LIST_HEAD (&msta->wcid.poll_list); msta->vif = mvif; msta->wcid.sta =1 ; msta->wcid.idx = idx;
@@ -741,8 +741,8 @@ void mt7915_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt7915_mac_twt_teardown_flow (dev, msta, i);spin_lock_bh (&mdev->sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);if (!list_empty (&msta->rc_list))list_del_init (&msta->rc_list);spin_unlock_bh (&mdev->sta_poll_lock);
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +0 -1
@@ -136,7 +136,6 @@ struct mt7915_sta {struct mt7915_vif *vif; -struct list_head poll_list;struct list_head rc_list;u32 airtime_ac[8 ];
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 7/15 wifi: mt76: mt7603: rely on shared poll_list field
In reply to Lorenzo BianconiRely on poll_list field in mt76_wcid structure and get rid of private copy.
--- drivers/net/wireless/mediatek/mt76/mt7603/mac.c | 8 ++++---- drivers/net/wireless/mediatek/mt76/mt7603/main.c | 12 ++++++------ drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h | 1 - 3 files changed, 10 insertions(+), 11 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7603/mac.c +4 -4
@@ -419,8 +419,8 @@ void mt7603_mac_sta_poll(struct mt7603_dev *dev) } msta =list_first_entry (&dev->mt76.sta_poll_list, - struct mt7603_sta, poll_list); -list_del_init (&msta->poll_list); + struct mt7603_sta, wcid.poll_list); +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); addr =mt7603_wtbl4_addr (msta->wcid.idx);
@@ -1267,9 +1267,9 @@ void mt7603_mac_add_txs(struct mt7603_dev *dev, void *data) msta = container_of(wcid, struct mt7603_sta, wcid); sta =wcid_to_sta (wcid); -if (list_empty (&msta->poll_list)) { +if (list_empty (&msta->wcid.poll_list)) {spin_lock_bh (&dev->mt76.sta_poll_lock); -list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); }
drivers/net/wireless/mediatek/mt76/mt7603/main.c +6 -6
@@ -66,7 +66,7 @@ mt7603_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) idx =MT7603_WTBL_RESERVED -1 - mvif->idx; dev->mt76.vif_mask |=BIT_ULL (mvif->idx); -INIT_LIST_HEAD (&mvif->sta.poll_list); +INIT_LIST_HEAD (&mvif->sta.wcid.poll_list); mvif->sta.wcid.idx = idx; mvif->sta.wcid.hw_key_idx =-1 ;mt76_packet_id_init (&mvif->sta.wcid);
@@ -101,8 +101,8 @@ mt7603_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)rcu_assign_pointer (dev->mt76.wcid[idx],NULL );spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mutex_lock (&dev->mt76.mutex);
@@ -351,7 +351,7 @@ mt7603_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (idx <0 )return -ENOSPC ; -INIT_LIST_HEAD (&msta->poll_list); +INIT_LIST_HEAD (&msta->wcid.poll_list);__skb_queue_head_init (&msta->psq); msta->ps = ~0 ; msta->smps = ~0 ;
@@ -389,8 +389,8 @@ mt7603_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,spin_unlock_bh (&dev->ps_lock);spin_lock_bh (&mdev->sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&mdev->sta_poll_lock);mt7603_wtbl_clear (dev, wcid->idx);
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +0 -1
@@ -64,7 +64,6 @@ struct mt7603_sta {struct mt7603_vif *vif; -struct list_head poll_list;u32 tx_airtime_ac[4 ];struct sk_buff_head psq;
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 8/15 wifi: mt76: mt7615: rely on shared poll_list field
In reply to Lorenzo BianconiRely on poll_list field in mt76_wcid structure and get rid of private copy.
--- drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 12 ++++++------ drivers/net/wireless/mediatek/mt76/mt7615/main.c | 12 ++++++------ drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h | 1 - 3 files changed, 12 insertions(+), 13 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +6 -6
@@ -388,8 +388,8 @@ static int mt7615_mac_fill_rx(struct mt7615_dev *dev, struct sk_buff *skb) msta = container_of(status->wcid, struct mt7615_sta, wcid);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); }
@@ -914,10 +914,10 @@ void mt7615_mac_sta_poll(struct mt7615_dev *dev)bool clear = false; msta = list_first_entry(&sta_poll_list, struct mt7615_sta, - poll_list); + wcid.poll_list);spin_lock_bh (&dev->mt76.sta_poll_lock); -list_del_init (&msta->poll_list); +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); addr =mt7615_mac_wtbl_addr (dev, msta->wcid.idx) +19 *4 ;
@@ -1516,8 +1516,8 @@ static void mt7615_mac_add_txs(struct mt7615_dev *dev, void *data) sta =wcid_to_sta (wcid);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);if (mt7615_mac_add_txs_skb (dev, msta, pid, txs_data))
drivers/net/wireless/mediatek/mt76/mt7615/main.c +6 -6
@@ -222,7 +222,7 @@ static int mt7615_add_interface(struct ieee80211_hw *hw, idx =MT7615_WTBL_RESERVED - mvif->mt76.idx; -INIT_LIST_HEAD (&mvif->sta.poll_list); +INIT_LIST_HEAD (&mvif->sta.wcid.poll_list); mvif->sta.wcid.idx = idx; mvif->sta.wcid.phy_idx = mvif->mt76.band_idx; mvif->sta.wcid.hw_key_idx =-1 ;
@@ -275,8 +275,8 @@ static void mt7615_remove_interface(struct ieee80211_hw *hw,mt7615_mutex_release (dev);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &mvif->sta.wcid);
@@ -657,7 +657,7 @@ int mt7615_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (idx <0 )return -ENOSPC ; -INIT_LIST_HEAD (&msta->poll_list); +INIT_LIST_HEAD (&msta->wcid.poll_list); msta->vif = mvif; msta->wcid.sta =1 ; msta->wcid.idx = idx;
@@ -706,8 +706,8 @@ void mt7615_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt7615_mcu_add_bss_info (phy, vif, sta, false);spin_lock_bh (&mdev->sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&mdev->sta_poll_lock);mt76_connac_power_save_sched (phy->mt76, &dev->pm);
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +0 -1
@@ -125,7 +125,6 @@ struct mt7615_sta {struct mt7615_vif *vif; -struct list_head poll_list;u32 airtime_ac[8 ];struct ieee80211_tx_rate rates[4 ];
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 9/15 wifi: mt76: mt7996: rely on shared poll_list field
In reply to Lorenzo BianconiRely on poll_list field in mt76_wcid structure and get rid of private copy.
--- drivers/net/wireless/mediatek/mt76/mt7996/mac.c | 16 ++++++++-------- drivers/net/wireless/mediatek/mt76/mt7996/main.c | 12 ++++++------ .../net/wireless/mediatek/mt76/mt7996/mt7996.h | 1 - 3 files changed, 14 insertions(+), 15 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7996/mac.c +8 -8
@@ -130,8 +130,8 @@ static void mt7996_mac_sta_poll(struct mt7996_dev *dev)break ; } msta =list_first_entry (&sta_poll_list, - struct mt7996_sta, poll_list); -list_del_init (&msta->poll_list); + struct mt7996_sta, wcid.poll_list); +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); idx = msta->wcid.idx;
@@ -682,8 +682,8 @@ mt7996_mac_fill_rx(struct mt7996_dev *dev, struct sk_buff *skb) msta = container_of(status->wcid, struct mt7996_sta, wcid);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); }
@@ -1293,8 +1293,8 @@ mt7996_mac_tx_free(struct mt7996_dev *dev, void *data, int len) msta = container_of(wcid, struct mt7996_sta, wcid);spin_lock_bh (&mdev->sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &mdev->sta_poll_list);spin_unlock_bh (&mdev->sta_poll_lock);continue ;
@@ -1502,8 +1502,8 @@ static void mt7996_mac_add_txs(struct mt7996_dev *dev, void *data) goto out;spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); out:
drivers/net/wireless/mediatek/mt76/mt7996/main.c +6 -6
@@ -202,7 +202,7 @@ static int mt7996_add_interface(struct ieee80211_hw *hw, idx =MT7996_WTBL_RESERVED - mvif->mt76.idx;INIT_LIST_HEAD (&mvif->sta.rc_list); -INIT_LIST_HEAD (&mvif->sta.poll_list); +INIT_LIST_HEAD (&mvif->sta.wcid.poll_list); mvif->sta.wcid.idx = idx; mvif->sta.wcid.phy_idx = band_idx; mvif->sta.wcid.hw_key_idx =-1 ;
@@ -264,8 +264,8 @@ static void mt7996_remove_interface(struct ieee80211_hw *hw,mutex_unlock (&dev->mt76.mutex);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid);
@@ -654,7 +654,7 @@ int mt7996_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,return -ENOSPC ;INIT_LIST_HEAD (&msta->rc_list); -INIT_LIST_HEAD (&msta->poll_list); +INIT_LIST_HEAD (&msta->wcid.poll_list); msta->vif = mvif; msta->wcid.sta =1 ; msta->wcid.idx = idx;
@@ -690,8 +690,8 @@ void mt7996_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt7996_mac_twt_teardown_flow (dev, msta, i);spin_lock_bh (&mdev->sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);if (!list_empty (&msta->rc_list))list_del_init (&msta->rc_list);spin_unlock_bh (&mdev->sta_poll_lock);
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h +0 -1
@@ -103,7 +103,6 @@ struct mt7996_sta {struct mt7996_vif *vif; -struct list_head poll_list;struct list_head rc_list;u32 airtime_ac[8 ];
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 10/15 wifi: mt76: mt7921: rely on shared poll_list field
In reply to Lorenzo BianconiRely on poll_list field in mt76_wcid structure and get rid of private copy.
--- drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 16 ++++++++-------- drivers/net/wireless/mediatek/mt76/mt7921/main.c | 12 ++++++------ .../net/wireless/mediatek/mt76/mt7921/mt7921.h | 1 - 3 files changed, 14 insertions(+), 15 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +8 -8
@@ -84,8 +84,8 @@ static void mt7921_mac_sta_poll(struct mt7921_dev *dev)break ; } msta =list_first_entry (&sta_poll_list, - struct mt7921_sta, poll_list); -list_del_init (&msta->poll_list); + struct mt7921_sta, wcid.poll_list); +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); idx = msta->wcid.idx;
@@ -281,8 +281,8 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)if (status->wcid) { msta = container_of(status->wcid, struct mt7921_sta, wcid);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); }
@@ -568,8 +568,8 @@ void mt7921_mac_add_txs(struct mt7921_dev *dev, void *data) goto out;spin_lock_bh (&dev->mt76.sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, &dev->mt76.sta_poll_list); +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &dev->mt76.sta_poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock); out:
@@ -649,8 +649,8 @@ static void mt7921_mac_tx_free(struct mt7921_dev *dev, void *data, int len) msta = container_of(wcid, struct mt7921_sta, wcid);spin_lock_bh (&mdev->sta_poll_lock); -if (list_empty (&msta->poll_list)) -list_add_tail (&msta->poll_list, +if (list_empty (&msta->wcid.poll_list)) +list_add_tail (&msta->wcid.poll_list, &mdev->sta_poll_list);spin_unlock_bh (&mdev->sta_poll_lock);continue ;
drivers/net/wireless/mediatek/mt76/mt7921/main.c +6 -6
@@ -313,7 +313,7 @@ static int mt7921_add_interface(struct ieee80211_hw *hw, idx =MT7921_WTBL_RESERVED - mvif->mt76.idx; -INIT_LIST_HEAD (&mvif->sta.poll_list); +INIT_LIST_HEAD (&mvif->sta.wcid.poll_list); mvif->sta.wcid.idx = idx; mvif->sta.wcid.phy_idx = mvif->mt76.band_idx; mvif->sta.wcid.hw_key_idx =-1 ;
@@ -358,8 +358,8 @@ static void mt7921_remove_interface(struct ieee80211_hw *hw,mt7921_mutex_release (dev);spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_packet_id_flush (&dev->mt76, &msta->wcid);
@@ -764,7 +764,7 @@ int mt7921_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (idx <0 )return -ENOSPC ; -INIT_LIST_HEAD (&msta->poll_list); +INIT_LIST_HEAD (&msta->wcid.poll_list); msta->vif = mvif; msta->wcid.sta =1 ; msta->wcid.idx = idx;
@@ -843,8 +843,8 @@ void mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif, }spin_lock_bh (&dev->mt76.sta_poll_lock); -if (!list_empty (&msta->poll_list)) -list_del_init (&msta->poll_list); +if (!list_empty (&msta->wcid.poll_list)) +list_del_init (&msta->wcid.poll_list);spin_unlock_bh (&dev->mt76.sta_poll_lock);mt76_connac_power_save_sched (&dev->mphy, &dev->pm);
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +0 -1
@@ -150,7 +150,6 @@ struct mt7921_sta {struct mt7921_vif *vif; -struct list_head poll_list;u32 airtime_ac[8 ];int ack_signal;
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 11/15 wifi: mt76: move ampdu_state in mt76_wcid
In reply to Lorenzo Bianconiampdu_state field is used by most of the drivers, so move it in mt76_wcid structure.
--- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7915/main.c | 6 +++--- drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h | 1 - drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7921/main.c | 6 +++--- drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h | 1 - drivers/net/wireless/mediatek/mt76/mt7996/mac.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7996/main.c | 6 +++--- drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h | 1 - 10 files changed, 13 insertions(+), 15 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -316,6 +316,7 @@ struct mt76_wcid {int inactive_count;struct rate_info rate; +unsigned long ampdu_state;u16 idx;u8 hw_key_idx;
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +1 -1
@@ -863,7 +863,7 @@ mt7915_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)return ; msta = (struct mt7915_sta *)sta->drv_priv; -if (!test_and_set_bit (tid, &msta->ampdu_state)) +if (!test_and_set_bit (tid, &msta->wcid.ampdu_state))ieee80211_start_tx_ba_session (sta, tid,0 ); }
drivers/net/wireless/mediatek/mt76/mt7915/main.c +3 -3
@@ -827,16 +827,16 @@ mt7915_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,case IEEE80211_AMPDU_TX_STOP_FLUSH :case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state); ret =mt7915_mcu_add_tx_ba (dev, params, false);break ;case IEEE80211_AMPDU_TX_START : -set_bit (tid, &msta->ampdu_state); +set_bit (tid, &msta->wcid.ampdu_state); ret =IEEE80211_AMPDU_TX_START_IMMEDIATE ;break ;case IEEE80211_AMPDU_TX_STOP_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state); ret =mt7915_mcu_add_tx_ba (dev, params, false);ieee80211_stop_tx_ba_cb_irqsafe (vif, sta->addr, tid);break ;
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +0 -1
@@ -144,7 +144,6 @@ struct mt7915_sta {unsigned long changed;unsigned long jiffies; -unsigned long ampdu_state;struct mt76_connac_sta_key_conf bip;struct {
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +1 -1
@@ -531,7 +531,7 @@ static void mt7921_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)return ; msta = (struct mt7921_sta *)sta->drv_priv; -if (!test_and_set_bit (tid, &msta->ampdu_state)) +if (!test_and_set_bit (tid, &msta->wcid.ampdu_state))ieee80211_start_tx_ba_session (sta, tid,0 ); }
drivers/net/wireless/mediatek/mt76/mt7921/main.c +3 -3
@@ -954,16 +954,16 @@ mt7921_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,case IEEE80211_AMPDU_TX_STOP_FLUSH :case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state);mt7921_mcu_uni_tx_ba (dev, params, false);break ;case IEEE80211_AMPDU_TX_START : -set_bit (tid, &msta->ampdu_state); +set_bit (tid, &msta->wcid.ampdu_state); ret =IEEE80211_AMPDU_TX_START_IMMEDIATE ;break ;case IEEE80211_AMPDU_TX_STOP_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state);mt7921_mcu_uni_tx_ba (dev, params, false);ieee80211_stop_tx_ba_cb_irqsafe (vif, sta->addr, tid);break ;
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +0 -1
@@ -156,7 +156,6 @@ struct mt7921_sta {struct ewma_avg_signal avg_ack_signal;unsigned long last_txs; -unsigned long ampdu_state;struct mt76_connac_sta_key_conf bip; };
drivers/net/wireless/mediatek/mt76/mt7996/mac.c +1 -1
@@ -1204,7 +1204,7 @@ mt7996_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)return ; msta = (struct mt7996_sta *)sta->drv_priv; -if (!test_and_set_bit (tid, &msta->ampdu_state)) +if (!test_and_set_bit (tid, &msta->wcid.ampdu_state))ieee80211_start_tx_ba_session (sta, tid,0 ); }
drivers/net/wireless/mediatek/mt76/mt7996/main.c +3 -3
@@ -774,16 +774,16 @@ mt7996_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,case IEEE80211_AMPDU_TX_STOP_FLUSH :case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state); ret =mt7996_mcu_add_tx_ba (dev, params, false);break ;case IEEE80211_AMPDU_TX_START : -set_bit (tid, &msta->ampdu_state); +set_bit (tid, &msta->wcid.ampdu_state); ret =IEEE80211_AMPDU_TX_START_IMMEDIATE ;break ;case IEEE80211_AMPDU_TX_STOP_CONT : mtxq->aggr = false; -clear_bit (tid, &msta->ampdu_state); +clear_bit (tid, &msta->wcid.ampdu_state); ret =mt7996_mcu_add_tx_ba (dev, params, false);ieee80211_stop_tx_ba_cb_irqsafe (vif, sta->addr, tid);break ;
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h +0 -1
@@ -111,7 +111,6 @@ struct mt7996_sta {unsigned long changed;unsigned long jiffies; -unsigned long ampdu_state;struct mt76_connac_sta_key_conf bip;
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 12/15 mt76: connac: move more mt7921/mt7915 mac shared code in connac lib
In reply to Lorenzo BianconiMove the following routines in mt76-connac lib since they are shared between mt7915 and mt7921:
- mt76_connac2_tx_check_aggr
- mt76_connac2_txwi_free
- mt76_connac2_tx_token_put
--- .../net/wireless/mediatek/mt76/mt76_connac.h | 5 + .../wireless/mediatek/mt76/mt76_connac_mac.c | 82 +++++++++++++++++ .../net/wireless/mediatek/mt76/mt7915/init.c | 2 +- .../net/wireless/mediatek/mt76/mt7915/mac.c | 91 +------------------ .../wireless/mediatek/mt76/mt7915/mt7915.h | 1 - .../net/wireless/mediatek/mt76/mt7921/mac.c | 59 +----------- .../wireless/mediatek/mt76/mt7921/mt7921.h | 4 - .../net/wireless/mediatek/mt76/mt7921/pci.c | 2 +- .../wireless/mediatek/mt76/mt7921/pci_mac.c | 16 +--- 9 files changed, 96 insertions(+), 166 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76_connac.h +5 -0
@@ -419,5 +419,10 @@ int mt76_connac2_mac_fill_rx_rate(struct mt76_dev *dev,struct mt76_rx_status *status, struct ieee80211_supported_band *sband, __le32 *rxv, u8 *mode); +void mt76_connac2_tx_check_aggr (struct ieee80211_sta *sta,__le32 *txwi); +void mt76_connac2_txwi_free (struct mt76_dev *dev,struct mt76_txwi_cache *t, +struct ieee80211_sta *sta, +struct list_head *free_list); +void mt76_connac2_tx_token_put (struct mt76_dev *dev);#endif /* __MT76_CONNAC_H */
drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c +82 -0
85 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/init.c +1 -1
@@ -1166,7 +1166,7 @@ static void mt7915_unregister_ext_phy(struct mt7915_dev *dev)static void mt7915_stop_hardware (struct mt7915_dev *dev) {mt7915_mcu_exit (dev); -mt7915_tx_token_put (dev); +mt76_connac2_tx_token_put (&dev->mt76);mt7915_dma_cleanup (dev);tasklet_disable (&dev->mt76.irq_tasklet);
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +4 -87
127 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +0 -1
@@ -555,7 +555,6 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr, enum mt76_txq_id qid, struct mt76_wcid *wcid, struct ieee80211_sta *sta, struct mt76_tx_info *tx_info); -void mt7915_tx_token_put (struct mt7915_dev *dev);void mt7915_queue_rx_skb (struct mt76_dev *mdev,enum mt76_rxq_id q,struct sk_buff *skb,u32 *info);bool mt7915_rx_check (struct mt76_dev *mdev,void *data,int len);
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +2 -57
83 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +0 -4
@@ -442,7 +442,6 @@ int mt7921e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr, struct mt76_tx_info *tx_info);void mt7921_tx_worker (struct mt76_worker *w); -void mt7921_tx_token_put (struct mt7921_dev *dev);bool mt7921_rx_check (struct mt76_dev *mdev,void *data,int len);void mt7921_queue_rx_skb (struct mt76_dev *mdev,enum mt76_rxq_id q,struct sk_buff *skb,u32 *info);
@@ -475,9 +474,6 @@ int mt7921_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif, void *data, int len);int mt7921_testmode_dump (struct ieee80211_hw *hw,struct sk_buff *msg,struct netlink_callback *cb,void *data,int len); -void mt7921_txwi_free (struct mt7921_dev *dev,struct mt76_txwi_cache *t, -struct ieee80211_sta *sta,bool clear_status, -struct list_head *free_list);int mt7921_mcu_parse_response (struct mt76_dev *mdev,int cmd,struct sk_buff *skb,int seq);
drivers/net/wireless/mediatek/mt76/mt7921/pci.c +1 -1
@@ -115,7 +115,7 @@ static void mt7921e_unregister_device(struct mt7921_dev *dev)cancel_work_sync (&pm->wake_work);cancel_work_sync (&dev->reset_work); -mt7921_tx_token_put (dev); +mt76_connac2_tx_token_put (&dev->mt76);__mt7921_mcu_drv_pmctrl (dev);mt7921_dma_cleanup (dev);mt7921_wfsys_reset (dev);
drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c +1 -15
@@ -53,20 +53,6 @@ int mt7921e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,return 0 ; } -void mt7921_tx_token_put (struct mt7921_dev *dev) -{ -struct mt76_txwi_cache *txwi; -int id; - -spin_lock_bh (&dev->mt76.token_lock); -idr_for_each_entry (&dev->mt76.token, txwi, id) { -mt7921_txwi_free (dev, txwi,NULL , false,NULL ); - dev->mt76.token_count--; - } -spin_unlock_bh (&dev->mt76.token_lock); -idr_destroy (&dev->mt76.token); -} -int mt7921e_mac_reset (struct mt7921_dev *dev) {int i, err;
@@ -91,7 +77,7 @@ int mt7921e_mac_reset(struct mt7921_dev *dev)napi_disable (&dev->mt76.napi[MT_RXQ_MCU_WA ]);napi_disable (&dev->mt76.tx_napi); -mt7921_tx_token_put (dev); +mt76_connac2_tx_token_put (&dev->mt76);idr_init (&dev->mt76.token);mt7921_wpdma_reset (dev, true);
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 13/15 wifi: mt76: move rate info in mt76_vif
In reply to Lorenzo BianconiThis is a preliminary patch to introduce mt76_connac3 mac library used by WiFi7 chipsets (e.g. mt7996).
--- drivers/net/wireless/mediatek/mt76/mt76.h | 3 +++ drivers/net/wireless/mediatek/mt76/mt7996/mac.c | 10 +++++----- drivers/net/wireless/mediatek/mt76/mt7996/main.c | 10 +++++----- drivers/net/wireless/mediatek/mt76/mt7996/mcu.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h | 4 ---- 5 files changed, 14 insertions(+), 15 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +3 -0
@@ -705,6 +705,9 @@ struct mt76_vif {u8 wmm_idx;u8 scan_seq_num;u8 cipher; +u8 basic_rates_idx; +u8 mcast_rates_idx; +u8 beacon_rates_idx; };struct mt76_phy {
drivers/net/wireless/mediatek/mt76/mt7996/mac.c +5 -5
@@ -1013,7 +1013,7 @@ void mt7996_mac_write_txwi(struct mt7996_dev *dev, __le32 *txwi,u8 band_idx = (info->hw_queue &MT_TX_HW_QUEUE_PHY ) >>2 ;u8 p_fmt, q_idx, omac_idx =0 , wmm_idx =0 ;bool is_8023 = info->flags &IEEE80211_TX_CTL_HW_80211_ENCAP ; -struct mt7996_vif *mvif; +struct mt76_vif *mvif;u16 tx_count =15 ;u32 val; bool beacon = !!(changed & (BSS_CHANGED_BEACON |
@@ -1021,11 +1021,11 @@ void mt7996_mac_write_txwi(struct mt7996_dev *dev, __le32 *txwi,bool inband_disc = !!(changed & (BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |BSS_CHANGED_FILS_DISCOVERY )); - mvif = vif ? (struct mt7996_vif *)vif->drv_priv :NULL ; + mvif = vif ? (struct mt76_vif *)vif->drv_priv :NULL ;if (mvif) { - omac_idx = mvif->mt76.omac_idx; - wmm_idx = mvif->mt76.wmm_idx; - band_idx = mvif->mt76.band_idx; + omac_idx = mvif->omac_idx; + wmm_idx = mvif->wmm_idx; + band_idx = mvif->band_idx; }if (inband_disc) {
drivers/net/wireless/mediatek/mt76/mt7996/main.c +5 -5
@@ -223,9 +223,9 @@ static int mt7996_add_interface(struct ieee80211_hw *hw, vif->offload_flags |=IEEE80211_OFFLOAD_ENCAP_4ADDR ;if (phy->mt76->chandef.chan->band !=NL80211_BAND_2GHZ ) - mvif->basic_rates_idx =MT7996_BASIC_RATES_TBL +4 ; + mvif->mt76.basic_rates_idx =MT7996_BASIC_RATES_TBL +4 ;else - mvif->basic_rates_idx =MT7996_BASIC_RATES_TBL ; + mvif->mt76.basic_rates_idx =MT7996_BASIC_RATES_TBL ;mt7996_init_bitrate_mask (vif);
@@ -505,7 +505,7 @@ static u8 mt7996_get_rates_table(struct ieee80211_hw *hw, struct ieee80211_vif *vif, bool beacon, bool mcast) { - struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv; + struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;struct mt76_phy *mphy = hw->priv;u16 rate;u8 i, idx, ht;
@@ -517,7 +517,7 @@ mt7996_get_rates_table(struct ieee80211_hw *hw, struct ieee80211_vif *vif,struct mt7996_dev *dev =mt7996_hw_dev (hw);/* must odd index */ - idx =MT7996_BEACON_RATES_TBL +2 * (mvif->mt76.idx %20 ); + idx =MT7996_BEACON_RATES_TBL +2 * (mvif->idx %20 );mt7996_mac_set_fixed_rate_table (dev, idx, rate);return idx; }
@@ -555,7 +555,7 @@ static void mt7996_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_bss_conf *info, u64 changed) { -struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv; +struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;struct mt7996_phy *phy =mt7996_hw_phy (hw);struct mt7996_dev *dev =mt7996_hw_dev (hw);
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c +1 -1
@@ -604,7 +604,7 @@ static void mt7996_mcu_bss_bmc_tlv(struct sk_buff *skb, struct ieee80211_vif *vif, struct mt7996_phy *phy) { - struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv; + struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;struct bss_rate_tlv *bmc;struct cfg80211_chan_def *chandef = &phy->mt76->chandef;enum nl80211_band band = chandef->chan->band;
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h +0 -4
@@ -128,10 +128,6 @@ struct mt7996_vif {struct ieee80211_tx_queue_params queue_params[IEEE80211_NUM_ACS ];struct cfg80211_bitrate_mask bitrate_mask; - -u8 basic_rates_idx; -u8 mcast_rates_idx; -u8 beacon_rates_idx; };/* crash-dump */
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 14/15 wifi: mt76: connac: move connac3 definitions in mt76_connac3_mac.h
In reply to Lorenzo BianconiConnac3 mac definitions are shared between WiFi7 chipsets so move them in mt76_connac3_mac.h
--- .../wireless/mediatek/mt76/mt76_connac3_mac.h | 325 ++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7996/mac.h | 315 +---------------- 2 files changed, 326 insertions(+), 314 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt76_connac3_mac.h
drivers/net/wireless/mediatek/mt76/mt76_connac3_mac.h new file +325 -0
@@ -0,0 +1,325 @@ +/* SPDX-License-Identifier: ISC */ +/* Copyright (C) 2023 MediaTek Inc. */ + +#ifndef __MT76_CONNAC3_MAC_H +#define __MT76_CONNAC3_MAC_H + +#define MT_CT_PARSE_LEN 72 +#define MT_CT_DMA_BUF_NUM 2 + +#define MT_RXD0_LENGTH GENMASK(15, 0) +#define MT_RXD0_PKT_FLAG GENMASK(19, 16) +#define MT_RXD0_PKT_TYPE GENMASK(31, 27) + +#define MT_RXD0_MESH BIT(18) +#define MT_RXD0_MHCP BIT(19) +#define MT_RXD0_NORMAL_ETH_TYPE_OFS GENMASK(22, 16) +#define MT_RXD0_NORMAL_IP_SUM BIT(23) +#define MT_RXD0_NORMAL_UDP_TCP_SUM BIT(24) + +#define MT_RXD0_SW_PKT_TYPE_MASK GENMASK(31, 16) +#define MT_RXD0_SW_PKT_TYPE_MAP 0x380F +#define MT_RXD0_SW_PKT_TYPE_FRAME 0x3801 + +/* RXD DW1 */ +#define MT_RXD1_NORMAL_WLAN_IDX GENMASK(11, 0) +#define MT_RXD1_NORMAL_GROUP_1 BIT(16) +#define MT_RXD1_NORMAL_GROUP_2 BIT(17) +#define MT_RXD1_NORMAL_GROUP_3 BIT(18) +#define MT_RXD1_NORMAL_GROUP_4 BIT(19) +#define MT_RXD1_NORMAL_GROUP_5 BIT(20) +#define MT_RXD1_NORMAL_KEY_ID GENMASK(22, 21) +#define MT_RXD1_NORMAL_CM BIT(23) +#define MT_RXD1_NORMAL_CLM BIT(24) +#define MT_RXD1_NORMAL_ICV_ERR BIT(25) +#define MT_RXD1_NORMAL_TKIP_MIC_ERR BIT(26) +#define MT_RXD1_NORMAL_BAND_IDX GENMASK(28, 27) +#define MT_RXD1_NORMAL_SPP_EN BIT(29) +#define MT_RXD1_NORMAL_ADD_OM BIT(30) +#define MT_RXD1_NORMAL_SEC_DONE BIT(31) + +/* RXD DW2 */ +#define MT_RXD2_NORMAL_BSSID GENMASK(5, 0) +#define MT_RXD2_NORMAL_MAC_HDR_LEN GENMASK(12, 8) +#define MT_RXD2_NORMAL_HDR_TRANS BIT(7) +#define MT_RXD2_NORMAL_HDR_OFFSET GENMASK(15, 13) +#define MT_RXD2_NORMAL_SEC_MODE GENMASK(20, 16) +#define MT_RXD2_NORMAL_MU_BAR BIT(21) +#define MT_RXD2_NORMAL_SW_BIT BIT(22) +#define MT_RXD2_NORMAL_AMSDU_ERR BIT(23) +#define MT_RXD2_NORMAL_MAX_LEN_ERROR BIT(24) +#define MT_RXD2_NORMAL_HDR_TRANS_ERROR BIT(25) +#define MT_RXD2_NORMAL_INT_FRAME BIT(26) +#define MT_RXD2_NORMAL_FRAG BIT(27) +#define MT_RXD2_NORMAL_NULL_FRAME BIT(28) +#define MT_RXD2_NORMAL_NDATA BIT(29) +#define MT_RXD2_NORMAL_NON_AMPDU BIT(30) +#define MT_RXD2_NORMAL_BF_REPORT BIT(31) + +/* RXD DW3 */ +#define MT_RXD3_NORMAL_RXV_SEQ GENMASK(7, 0) +#define MT_RXD3_NORMAL_CH_FREQ GENMASK(15, 8) +#define MT_RXD3_NORMAL_ADDR_TYPE GENMASK(17, 16) +#define MT_RXD3_NORMAL_U2M BIT(0) +#define MT_RXD3_NORMAL_HTC_VLD BIT(18) +#define MT_RXD3_NORMAL_BEACON_MC BIT(20) +#define MT_RXD3_NORMAL_BEACON_UC BIT(21) +#define MT_RXD3_NORMAL_CO_ANT BIT(22) +#define MT_RXD3_NORMAL_FCS_ERR BIT(24) +#define MT_RXD3_NORMAL_VLAN2ETH BIT(31) + +/* RXD DW4 */ +#define MT_RXD4_NORMAL_PAYLOAD_FORMAT GENMASK(1, 0) +#define MT_RXD4_FIRST_AMSDU_FRAME GENMASK(1, 0) +#define MT_RXD4_MID_AMSDU_FRAME BIT(1) +#define MT_RXD4_LAST_AMSDU_FRAME BIT(0) + +#define MT_RXV_HDR_BAND_IDX BIT(24) + +/* RXD GROUP4 */ +#define MT_RXD8_FRAME_CONTROL GENMASK(15, 0) + +#define MT_RXD10_SEQ_CTRL GENMASK(15, 0) +#define MT_RXD10_QOS_CTL GENMASK(31, 16) + +#define MT_RXD11_HT_CONTROL GENMASK(31, 0) + +/* P-RXV */ +#define MT_PRXV_TX_RATE GENMASK(6, 0) +#define MT_PRXV_TX_DCM BIT(4) +#define MT_PRXV_TX_ER_SU_106T BIT(5) +#define MT_PRXV_NSTS GENMASK(10, 7) +#define MT_PRXV_TXBF BIT(11) +#define MT_PRXV_HT_AD_CODE BIT(12) +#define MT_PRXV_HE_RU_ALLOC GENMASK(30, 22) +#define MT_PRXV_RCPI3 GENMASK(31, 24) +#define MT_PRXV_RCPI2 GENMASK(23, 16) +#define MT_PRXV_RCPI1 GENMASK(15, 8) +#define MT_PRXV_RCPI0 GENMASK(7, 0) +#define MT_PRXV_HT_SHORT_GI GENMASK(4, 3) +#define MT_PRXV_HT_STBC GENMASK(10, 9) +#define MT_PRXV_TX_MODE GENMASK(14, 11) +#define MT_PRXV_FRAME_MODE GENMASK(2, 0) +#define MT_PRXV_DCM BIT(5) + +/* C-RXV */ +#define MT_CRXV_HE_NUM_USER GENMASK(26, 20) +#define MT_CRXV_HE_LTF_SIZE GENMASK(28, 27) +#define MT_CRXV_HE_LDPC_EXT_SYM BIT(30) + +#define MT_CRXV_HE_PE_DISAMBIG BIT(1) +#define MT_CRXV_HE_UPLINK BIT(2) + +#define MT_CRXV_HE_MU_AID GENMASK(27, 17) +#define MT_CRXV_HE_BEAM_CHNG BIT(29) + +#define MT_CRXV_HE_DOPPLER BIT(0) +#define MT_CRXV_HE_BSS_COLOR GENMASK(15, 10) +#define MT_CRXV_HE_TXOP_DUR GENMASK(19, 17) + +#define MT_CRXV_HE_SR_MASK GENMASK(11, 8) +#define MT_CRXV_HE_SR1_MASK GENMASK(16, 12) +#define MT_CRXV_HE_SR2_MASK GENMASK(20, 17) +#define MT_CRXV_HE_SR3_MASK GENMASK(24, 21) + +#define MT_CRXV_HE_RU0 GENMASK(8, 0) +#define MT_CRXV_HE_RU1 GENMASK(17, 9) +#define MT_CRXV_HE_RU2 GENMASK(26, 18) +#define MT_CRXV_HE_RU3_L GENMASK(31, 27) +#define MT_CRXV_HE_RU3_H GENMASK(3, 0) + +enum tx_header_format { +MT_HDR_FORMAT_802_3 , +MT_HDR_FORMAT_CMD , +MT_HDR_FORMAT_802_11 , +MT_HDR_FORMAT_802_11_EXT , +}; + +enum tx_pkt_type { +MT_TX_TYPE_CT , +MT_TX_TYPE_SF , +MT_TX_TYPE_CMD , +MT_TX_TYPE_FW , +}; + +enum tx_port_idx { +MT_TX_PORT_IDX_LMAC , +MT_TX_PORT_IDX_MCU +}; + +enum tx_mcu_port_q_idx { +MT_TX_MCU_PORT_RX_Q0 =0x20 , +MT_TX_MCU_PORT_RX_Q1 , +MT_TX_MCU_PORT_RX_Q2 , +MT_TX_MCU_PORT_RX_Q3 , +MT_TX_MCU_PORT_RX_FWDL =0x3e +}; + +enum tx_mgnt_type { +MT_TX_NORMAL , +MT_TX_TIMING , +MT_TX_ADDBA , +}; + +#define MT_CT_INFO_APPLY_TXD BIT(0) +#define MT_CT_INFO_COPY_HOST_TXD_ALL BIT(1) +#define MT_CT_INFO_MGMT_FRAME BIT(2) +#define MT_CT_INFO_NONE_CIPHER_FRAME BIT(3) +#define MT_CT_INFO_HSR2_TX BIT(4) +#define MT_CT_INFO_FROM_HOST BIT(7) + +#define MT_TXD_SIZE (8 * 4) + +#define MT_TXD0_Q_IDX GENMASK(31, 25) +#define MT_TXD0_PKT_FMT GENMASK(24, 23) +#define MT_TXD0_ETH_TYPE_OFFSET GENMASK(22, 16) +#define MT_TXD0_TX_BYTES GENMASK(15, 0) + +#define MT_TXD1_FIXED_RATE BIT(31) +#define MT_TXD1_OWN_MAC GENMASK(30, 25) +#define MT_TXD1_TID GENMASK(24, 21) +#define MT_TXD1_BIP BIT(24) +#define MT_TXD1_ETH_802_3 BIT(20) +#define MT_TXD1_HDR_INFO GENMASK(20, 16) +#define MT_TXD1_HDR_FORMAT GENMASK(15, 14) +#define MT_TXD1_TGID GENMASK(13, 12) +#define MT_TXD1_WLAN_IDX GENMASK(11, 0) + +#define MT_TXD2_POWER_OFFSET GENMASK(31, 26) +#define MT_TXD2_MAX_TX_TIME GENMASK(25, 16) +#define MT_TXD2_FRAG GENMASK(15, 14) +#define MT_TXD2_HTC_VLD BIT(13) +#define MT_TXD2_DURATION BIT(12) +#define MT_TXD2_HDR_PAD GENMASK(11, 10) +#define MT_TXD2_RTS BIT(9) +#define MT_TXD2_OWN_MAC_MAP BIT(8) +#define MT_TXD2_BF_TYPE GENMASK(6, 7) +#define MT_TXD2_FRAME_TYPE GENMASK(5, 4) +#define MT_TXD2_SUB_TYPE GENMASK(3, 0) + +#define MT_TXD3_SN_VALID BIT(31) +#define MT_TXD3_PN_VALID BIT(30) +#define MT_TXD3_SW_POWER_MGMT BIT(29) +#define MT_TXD3_BA_DISABLE BIT(28) +#define MT_TXD3_SEQ GENMASK(27, 16) +#define MT_TXD3_REM_TX_COUNT GENMASK(15, 11) +#define MT_TXD3_TX_COUNT GENMASK(10, 6) +#define MT_TXD3_HW_AMSDU BIT(5) +#define MT_TXD3_BCM BIT(4) +#define MT_TXD3_EEOSP BIT(3) +#define MT_TXD3_EMRD BIT(2) +#define MT_TXD3_PROTECT_FRAME BIT(1) +#define MT_TXD3_NO_ACK BIT(0) + +#define MT_TXD4_PN_LOW GENMASK(31, 0) + +#define MT_TXD5_PN_HIGH GENMASK(31, 16) +#define MT_TXD5_FL BIT(15) +#define MT_TXD5_BYPASS_TBB BIT(14) +#define MT_TXD5_BYPASS_RBB BIT(13) +#define MT_TXD5_BSS_COLOR_ZERO BIT(12) +#define MT_TXD5_TX_STATUS_HOST BIT(10) +#define MT_TXD5_TX_STATUS_MCU BIT(9) +#define MT_TXD5_TX_STATUS_FMT BIT(8) +#define MT_TXD5_PID GENMASK(7, 0) + +#define MT_TXD6_TX_SRC GENMASK(31, 30) +#define MT_TXD6_VTA BIT(28) +#define MT_TXD6_BW GENMASK(25, 22) +#define MT_TXD6_TX_RATE GENMASK(21, 16) +#define MT_TXD6_TIMESTAMP_OFS_EN BIT(15) +#define MT_TXD6_TIMESTAMP_OFS_IDX GENMASK(14, 10) +#define MT_TXD6_MSDU_CNT GENMASK(9, 4) +#define MT_TXD6_DIS_MAT BIT(3) +#define MT_TXD6_DAS BIT(2) +#define MT_TXD6_AMSDU_CAP BIT(1) + +#define MT_TXD7_TXD_LEN GENMASK(31, 30) +#define MT_TXD7_IP_SUM BIT(29) +#define MT_TXD7_DROP_BY_SDO BIT(28) +#define MT_TXD7_MAC_TXD BIT(27) +#define MT_TXD7_CTXD BIT(26) +#define MT_TXD7_CTXD_CNT GENMASK(25, 22) +#define MT_TXD7_UDP_TCP_SUM BIT(15) +#define MT_TXD7_TX_TIME GENMASK(9, 0) + +#define MT_TX_RATE_STBC BIT(14) +#define MT_TX_RATE_NSS GENMASK(13, 10) +#define MT_TX_RATE_MODE GENMASK(9, 6) +#define MT_TX_RATE_SU_EXT_TONE BIT(5) +#define MT_TX_RATE_DCM BIT(4) +/* VHT/HE only use bits 0-3 */ +#define MT_TX_RATE_IDX GENMASK(5, 0) + +#define MT_TXFREE0_PKT_TYPE GENMASK(31, 27) +#define MT_TXFREE0_MSDU_CNT GENMASK(25, 16) +#define MT_TXFREE0_RX_BYTE GENMASK(15, 0) + +#define MT_TXFREE1_VER GENMASK(18, 16) + +#define MT_TXFREE_INFO_PAIR BIT(31) +#define MT_TXFREE_INFO_HEADER BIT(30) +#define MT_TXFREE_INFO_WLAN_ID GENMASK(23, 12) +#define MT_TXFREE_INFO_MSDU_ID GENMASK(14, 0) +#define MT_TXFREE_INFO_COUNT GENMASK(27, 24) +#define MT_TXFREE_INFO_STAT GENMASK(29, 28) + +#define MT_TXS0_BW GENMASK(31, 29) +#define MT_TXS0_TID GENMASK(28, 26) +#define MT_TXS0_AMPDU BIT(25) +#define MT_TXS0_TXS_FORMAT GENMASK(24, 23) +#define MT_TXS0_BA_ERROR BIT(22) +#define MT_TXS0_PS_FLAG BIT(21) +#define MT_TXS0_TXOP_TIMEOUT BIT(20) +#define MT_TXS0_BIP_ERROR BIT(19) + +#define MT_TXS0_QUEUE_TIMEOUT BIT(18) +#define MT_TXS0_RTS_TIMEOUT BIT(17) +#define MT_TXS0_ACK_TIMEOUT BIT(16) +#define MT_TXS0_ACK_ERROR_MASK GENMASK(18, 16) + +#define MT_TXS0_TX_STATUS_HOST BIT(15) +#define MT_TXS0_TX_STATUS_MCU BIT(14) +#define MT_TXS0_TX_RATE GENMASK(13, 0) + +#define MT_TXS1_SEQNO GENMASK(31, 20) +#define MT_TXS1_RESP_RATE GENMASK(19, 16) +#define MT_TXS1_RXV_SEQNO GENMASK(15, 8) +#define MT_TXS1_TX_POWER_DBM GENMASK(7, 0) + +#define MT_TXS2_BF_STATUS GENMASK(31, 30) +#define MT_TXS2_BAND GENMASK(29, 28) +#define MT_TXS2_WCID GENMASK(27, 16) +#define MT_TXS2_TX_DELAY GENMASK(15, 0) + +#define MT_TXS3_PID GENMASK(31, 24) +#define MT_TXS3_RATE_STBC BIT(7) +#define MT_TXS3_FIXED_RATE BIT(6) +#define MT_TXS3_SRC GENMASK(5, 4) +#define MT_TXS3_SHARED_ANTENNA BIT(3) +#define MT_TXS3_LAST_TX_RATE GENMASK(2, 0) + +#define MT_TXS4_TIMESTAMP GENMASK(31, 0) + +#define MT_TXS5_F0_FINAL_MPDU BIT(31) +#define MT_TXS5_F0_QOS BIT(30) +#define MT_TXS5_F0_TX_COUNT GENMASK(29, 25) +#define MT_TXS5_F0_FRONT_TIME GENMASK(24, 0) +#define MT_TXS5_F1_MPDU_TX_COUNT GENMASK(31, 24) +#define MT_TXS5_F1_MPDU_TX_BYTES GENMASK(23, 0) + +#define MT_TXS6_F0_NOISE_3 GENMASK(31, 24) +#define MT_TXS6_F0_NOISE_2 GENMASK(23, 16) +#define MT_TXS6_F0_NOISE_1 GENMASK(15, 8) +#define MT_TXS6_F0_NOISE_0 GENMASK(7, 0) +#define MT_TXS6_F1_MPDU_FAIL_COUNT GENMASK(31, 24) +#define MT_TXS6_F1_MPDU_FAIL_BYTES GENMASK(23, 0) + +#define MT_TXS7_F0_RCPI_3 GENMASK(31, 24) +#define MT_TXS7_F0_RCPI_2 GENMASK(23, 16) +#define MT_TXS7_F0_RCPI_1 GENMASK(15, 8) +#define MT_TXS7_F0_RCPI_0 GENMASK(7, 0) +#define MT_TXS7_F1_MPDU_RETRY_COUNT GENMASK(31, 24) +#define MT_TXS7_F1_MPDU_RETRY_BYTES GENMASK(23, 0) + +#endif /* __MT76_CONNAC3_MAC_H */
drivers/net/wireless/mediatek/mt76/mt7996/mac.h +1 -314
321 lines not on this page · raw message
Signature · 1 line
2.41.0
Lorenzo Bianconi
maintainerPATCH v4 15/15 wifi: mt76: connac: add connac3 mac library
In reply to Lorenzo BianconiIntroduce connac3_mac in mt76_connac library to reuse mac code shared between WiFi7 chipsets. So far connac3 library contains just radiotap parsing code.
--- drivers/net/wireless/mediatek/mt76/Makefile | 2 +- .../net/wireless/mediatek/mt76/mt76_connac.h | 3 + .../wireless/mediatek/mt76/mt76_connac3_mac.c | 182 ++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7996/mac.c | 180 +---------------- 4 files changed, 187 insertions(+), 180 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt76_connac3_mac.c
drivers/net/wireless/mediatek/mt76/Makefile +1 -1
@@ -27,7 +27,7 @@ mt76x02-lib-y := mt76x02_util.o mt76x02_mac.o mt76x02_mcu.o \ mt76x02-usb-y := mt76x02_usb_mcu.o mt76x02_usb_core.o -mt76-connac-lib-y := mt76_connac_mcu.o mt76_connac_mac.o +mt76-connac-lib-y := mt76_connac_mcu.o mt76_connac_mac.o mt76_connac3_mac.o obj-$(CONFIG_MT76x0_COMMON) += mt76x0/ obj-$(CONFIG_MT76x2_COMMON) += mt76x2/
drivers/net/wireless/mediatek/mt76/mt76_connac.h +3 -0
@@ -425,4 +425,7 @@ void mt76_connac2_txwi_free(struct mt76_dev *dev, struct mt76_txwi_cache *t, struct list_head *free_list);void mt76_connac2_tx_token_put (struct mt76_dev *dev); +/* connac3 */ +void mt76_connac3_mac_decode_he_radiotap (struct sk_buff *skb,__le32 *rxv, +u8 mode);#endif /* __MT76_CONNAC_H */
drivers/net/wireless/mediatek/mt76/mt76_connac3_mac.c new file +182 -0
182 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7996/mac.c +1 -179
198 lines not on this page · raw message
Signature · 1 line
2.41.0