unify txwi parsing between mt76x0 and mt76x2 drivers
Subsystems (2)
cover unify txwi parsing between mt76x0 and mt76x2 drivers
Move mt76x02_mac_write_txwi routine in mt76x02-lib module in order to unify txwi parsing between mt76x0 and mt76x2 drivers.
For rxwi unification we need to merge mt76x2_dev and mt76x0_dev in mt76x02_dev and remove duplicated code
Changes since RFC:
- drop patch 1/5 ("mt76: introduce is_mt76x2 routine")
- use chainmask in mt76x02_mac_write_txwi instead of is_mt76x2 routine
Lorenzo Bianconi (4):
mt76: move mt76x02_tx_get_max_txpwr_adj in mt76x02_util.c
mt76: add get_tx_txpwr_adj function pointer to mt76_driver_ops
mt76: move mt76x02_mac_write_txwi in mt76x02-lib module
mt76: usb: use mt76x02u_tx_prepare_skb to fill txwi
drivers/net/wireless/mediatek/mt76/mt76.h | 4 +- .../wireless/mediatek/mt76/mt76x0/mt76x0.h | 5 -- .../net/wireless/mediatek/mt76/mt76x0/tx.c | 38 ---------- .../net/wireless/mediatek/mt76/mt76x0/usb.c | 17 +---- .../net/wireless/mediatek/mt76/mt76x02_mac.c | 72 +++++++++++++++++-- .../net/wireless/mediatek/mt76/mt76x02_mac.h | 8 +-- .../net/wireless/mediatek/mt76/mt76x02_usb.h | 5 +- .../wireless/mediatek/mt76/mt76x02_usb_core.c | 38 +++++++++- .../net/wireless/mediatek/mt76/mt76x02_util.c | 45 +++++++++++- .../net/wireless/mediatek/mt76/mt76x02_util.h | 2 + .../wireless/mediatek/mt76/mt76x2/Makefile | 2 +- .../net/wireless/mediatek/mt76/mt76x2/mac.c | 60 ---------------- .../net/wireless/mediatek/mt76/mt76x2/mac.h | 3 - .../wireless/mediatek/mt76/mt76x2/mt76x2.h | 4 +- .../wireless/mediatek/mt76/mt76x2/mt76x2u.h | 4 -- .../wireless/mediatek/mt76/mt76x2/pci_init.c | 2 +- .../wireless/mediatek/mt76/mt76x2/pci_mac.c | 2 +- .../wireless/mediatek/mt76/mt76x2/pci_tx.c | 2 +- .../net/wireless/mediatek/mt76/mt76x2/tx.c | 46 +----------- .../wireless/mediatek/mt76/mt76x2/usb_core.c | 53 -------------- .../wireless/mediatek/mt76/mt76x2/usb_init.c | 3 +- 21 files changed, 167 insertions(+), 248 deletions(-) delete mode 100644 drivers/net/wireless/mediatek/mt76/mt76x2/usb_core.c
Signature · 1 line
2.17.1
PATCH 1/4 mt76: move mt76x02_tx_get_max_txpwr_adj in mt76x02_util.c
Move mt76x02_tx_get_max_txpwr_adj routine in mt76x02-lib module since now both mt76x0 and mt76x2 drivers read rate tx power gain from rate_power data structure. Moreover remove get_max_txpwr_adj function pointer from mt76_driver_ops data structure
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 - .../net/wireless/mediatek/mt76/mt76x02_util.c | 45 +++++++++++++++++-- .../net/wireless/mediatek/mt76/mt76x02_util.h | 2 + .../net/wireless/mediatek/mt76/mt76x2/mac.c | 2 +- .../wireless/mediatek/mt76/mt76x2/mt76x2.h | 2 - .../wireless/mediatek/mt76/mt76x2/pci_init.c | 1 - .../net/wireless/mediatek/mt76/mt76x2/tx.c | 42 ----------------- 7 files changed, 45 insertions(+), 51 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +0 -2
@@ -262,8 +262,6 @@ struct mt76_driver_ops {void (*sta_ps)(struct mt76_dev *dev,struct ieee80211_sta *sta,bool ps); -s8 (*get_max_txpwr_adj)(struct mt76_dev *dev, -const struct ieee80211_tx_rate *rate); };struct mt76_channel_state {
drivers/net/wireless/mediatek/mt76/mt76x02_util.c +42 -3
57 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt76x02_util.h +2 -0
@@ -45,6 +45,8 @@ int mt76x02_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,void mt76x02_sta_rate_tbl_update (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_sta *sta); +s8 mt76x02_tx_get_max_txpwr_adj (struct mt76_dev *dev, +const struct ieee80211_tx_rate *rate);int mt76x02_insert_hdr_pad (struct sk_buff *skb);void mt76x02_remove_hdr_pad (struct sk_buff *skb,int len);void mt76x02_tx_complete (struct mt76_dev *dev,struct sk_buff *skb);
drivers/net/wireless/mediatek/mt76/mt76x2/mac.c +1 -1
@@ -96,7 +96,7 @@ void mt76x2_mac_write_txwi(struct mt76x2_dev *dev, struct mt76x02_txwi *txwi, nss = wcid->tx_rate_nss; }else { txwi->rate =mt76x02_mac_tx_rate_val (&dev->mt76, rate, &nss); - max_txpwr_adj =mt76x2_tx_get_max_txpwr_adj (&dev->mt76, rate); + max_txpwr_adj =mt76x02_tx_get_max_txpwr_adj (&dev->mt76, rate); }spin_unlock_bh (&dev->mt76.lock);
drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h +0 -2
@@ -176,8 +176,6 @@ void mt76x2_sta_ps(struct mt76_dev *dev, struct ieee80211_sta *sta, bool ps);void mt76x2_update_channel (struct mt76_dev *mdev); -s8 mt76x2_tx_get_max_txpwr_adj (struct mt76_dev *dev, -const struct ieee80211_tx_rate *rate);s8 mt76x2_tx_get_txpwr_adj (struct mt76x2_dev *dev,s8 txpwr,s8 max_txpwr_adj);void mt76x2_tx_set_txpwr_auto (struct mt76x2_dev *dev,s8 txpwr);
drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c +0 -1
@@ -362,7 +362,6 @@ struct mt76x2_dev *mt76x2_alloc_device(struct device *pdev) .rx_skb = mt76x2_queue_rx_skb, .rx_poll_complete = mt76x2_rx_poll_complete, .sta_ps = mt76x2_sta_ps, - .get_max_txpwr_adj = mt76x2_tx_get_max_txpwr_adj, };struct mt76x2_dev *dev;struct mt76_dev *mdev;
drivers/net/wireless/mediatek/mt76/mt76x2/tx.c +0 -42
48 lines not on this page · raw message
Signature · 1 line
2.17.1
PATCH 2/4 mt76: add get_tx_txpwr_adj function pointer to mt76_driver_ops
In reply to Lorenzo BianconiAdd get_tx_txpwr_adj function pointer to mt76_driver_ops data structure as a preliminary patch to unify txwi configuration between mt76x0 and mt76x2 drivers since tpc is currently supported just by mt76x2 driver
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 ++ drivers/net/wireless/mediatek/mt76/mt76x2/mac.c | 2 +- drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h | 2 +- drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c | 1 + drivers/net/wireless/mediatek/mt76/mt76x2/tx.c | 6 ++++-- 5 files changed, 9 insertions(+), 4 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +2 -0
@@ -262,6 +262,8 @@ struct mt76_driver_ops {void (*sta_ps)(struct mt76_dev *dev,struct ieee80211_sta *sta,bool ps); +s8 (*get_tx_txpwr_adj)(struct mt76_dev *dev,s8 txpwr, +s8 max_txpwr_adj); };struct mt76_channel_state {
drivers/net/wireless/mediatek/mt76/mt76x2/mac.c +1 -1
@@ -100,7 +100,7 @@ void mt76x2_mac_write_txwi(struct mt76x2_dev *dev, struct mt76x02_txwi *txwi, }spin_unlock_bh (&dev->mt76.lock); - txpwr_adj =mt76x2_tx_get_txpwr_adj (dev, dev->mt76.txpower_conf, + txpwr_adj =mt76x2_tx_get_txpwr_adj (&dev->mt76, dev->mt76.txpower_conf, max_txpwr_adj); txwi->ctl2 =FIELD_PREP (MT_TX_PWR_ADJ , txpwr_adj);
drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h +1 -1
@@ -176,7 +176,7 @@ void mt76x2_sta_ps(struct mt76_dev *dev, struct ieee80211_sta *sta, bool ps);void mt76x2_update_channel (struct mt76_dev *mdev); -s8 mt76x2_tx_get_txpwr_adj (struct mt76x2_dev *dev,s8 txpwr,s8 max_txpwr_adj); +s8 mt76x2_tx_get_txpwr_adj (struct mt76_dev *mdev,s8 txpwr,s8 max_txpwr_adj);void mt76x2_tx_set_txpwr_auto (struct mt76x2_dev *dev,s8 txpwr);
drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c +1 -0
@@ -362,6 +362,7 @@ struct mt76x2_dev *mt76x2_alloc_device(struct device *pdev) .rx_skb = mt76x2_queue_rx_skb, .rx_poll_complete = mt76x2_rx_poll_complete, .sta_ps = mt76x2_sta_ps, + .get_tx_txpwr_adj = mt76x2_tx_get_txpwr_adj, };struct mt76x2_dev *dev;struct mt76_dev *mdev;
drivers/net/wireless/mediatek/mt76/mt76x2/tx.c +4 -2
@@ -47,8 +47,10 @@ void mt76x2_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control, }EXPORT_SYMBOL_GPL (mt76x2_tx); -s8 mt76x2_tx_get_txpwr_adj (struct mt76x2_dev *dev,s8 txpwr,s8 max_txpwr_adj) +s8 mt76x2_tx_get_txpwr_adj (struct mt76_dev *mdev,s8 txpwr,s8 max_txpwr_adj) { + struct mt76x2_dev *dev = container_of(mdev, struct mt76x2_dev, mt76); + txpwr =min_t (s8, txpwr, dev->mt76.txpower_conf); txpwr -= (dev->target_power + dev->target_power_delta[0 ]); txpwr =min_t (s8, txpwr, max_txpwr_adj);
@@ -66,7 +68,7 @@ void mt76x2_tx_set_txpwr_auto(struct mt76x2_dev *dev, s8 txpwr) {s8 txpwr_adj; - txpwr_adj =mt76x2_tx_get_txpwr_adj (dev, txpwr, + txpwr_adj =mt76x2_tx_get_txpwr_adj (&dev->mt76, txpwr, dev->mt76.rate_power.ofdm[4 ]);mt76_rmw_field (dev,MT_PROT_AUTO_TX_CFG ,MT_PROT_AUTO_TX_CFG_PROT_PADJ , txpwr_adj);
Signature · 1 line
2.17.1
PATCH 3/4 mt76: move mt76x02_mac_write_txwi in mt76x02-lib module
In reply to Lorenzo BianconiMove mt76x02_mac_write_txwi in mt76x02_mac.c since it is shared between mt76x0 and mt76x2 drivers. This is a preliminary patch to unify txwi configuration between mt76x0 and mt76x2 drivers
--- .../net/wireless/mediatek/mt76/mt76x02_mac.c | 63 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt76x02_mac.h | 3 + .../net/wireless/mediatek/mt76/mt76x2/mac.c | 60 ------------------ .../net/wireless/mediatek/mt76/mt76x2/mac.h | 3 - .../wireless/mediatek/mt76/mt76x2/pci_mac.c | 2 +- .../wireless/mediatek/mt76/mt76x2/pci_tx.c | 2 +- .../wireless/mediatek/mt76/mt76x2/usb_core.c | 3 +- 7 files changed, 69 insertions(+), 67 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76x02_mac.c +63 -0
@@ -18,6 +18,7 @@#include "mt76.h" #include "mt76x02_regs.h" #include "mt76x02_mac.h" +#include "mt76x02_util.h" enum mt76x02_cipher_type mt76x02_mac_get_key_info (struct ieee80211_key_conf *key,u8 *key_data)
@@ -341,6 +342,68 @@ mt76x02_mac_process_tx_rate(struct ieee80211_tx_rate *txrate, u16 rate,return 0 ; } +void mt76x02_mac_write_txwi (struct mt76_dev *dev,struct mt76x02_txwi *txwi, +struct sk_buff *skb,struct mt76_wcid *wcid, +struct ieee80211_sta *sta,int len) +{ +struct ieee80211_tx_info *info =IEEE80211_SKB_CB (skb); +struct ieee80211_tx_rate *rate = &info->control.rates[0 ]; +struct ieee80211_key_conf *key = info->control.hw_key; +u16 rate_ht_mask =FIELD_PREP (MT_RXWI_RATE_PHY ,BIT (1 ) |BIT (2 )); +u8 nss; +s8 txpwr_adj, max_txpwr_adj; +u8 ccmp_pn[8 ], nstreams = dev->chainmask &0xf ; + +memset (txwi,0 ,sizeof (*txwi)); + +if (wcid) + txwi->wcid = wcid->idx; +else + txwi->wcid =0xff ; + + txwi->pktid =1 ; + +if (wcid && wcid->sw_iv && key) { +u64 pn =atomic64_inc_return (&key->tx_pn); + ccmp_pn[0 ] = pn; + ccmp_pn[1 ] = pn >>8 ; + ccmp_pn[2 ] =0 ; + ccmp_pn[3 ] =0x20 | (key->keyidx <<6 ); + ccmp_pn[4 ] = pn >>16 ; + ccmp_pn[5 ] = pn >>24 ; + ccmp_pn[6 ] = pn >>32 ; + ccmp_pn[7 ] = pn >>40 ; + txwi->iv = *((__le32 *)&ccmp_pn[0 ]); + txwi->eiv = *((__le32 *)&ccmp_pn[1 ]); + } + +spin_lock_bh (&dev->lock); +if (wcid && (rate->idx <0 || !rate->count)) { + txwi->rate = wcid->tx_rate; + max_txpwr_adj = wcid->max_txpwr_adj; + nss = wcid->tx_rate_nss; + }else { + txwi->rate =mt76x02_mac_tx_rate_val (dev, rate, &nss); + max_txpwr_adj =mt76x02_tx_get_max_txpwr_adj (dev, rate); + } +spin_unlock_bh (&dev->lock); + +if (dev->drv->get_tx_txpwr_adj) { + txpwr_adj = dev->drv->get_tx_txpwr_adj (dev, dev->txpower_conf, + max_txpwr_adj); + txwi->ctl2 =FIELD_PREP (MT_TX_PWR_ADJ , txpwr_adj); + } + +if (nstreams >1 &&mt76_rev (dev) >=MT76XX_REV_E4 ) + txwi->txstream =0x13 ; +else if (nstreams >1 &&mt76_rev (dev) >=MT76XX_REV_E3 && + !(txwi->rate &cpu_to_le16 (rate_ht_mask))) + txwi->txstream =0x93 ; + +mt76x02_mac_fill_txwi (txwi, skb, sta, len, nss); +} +EXPORT_SYMBOL_GPL (mt76x02_mac_write_txwi); + static void mt76x02_mac_fill_tx_status(struct mt76_dev *dev, struct ieee80211_tx_info *info,
drivers/net/wireless/mediatek/mt76/mt76x02_mac.h +3 -0
@@ -203,4 +203,7 @@ void mt76x02_send_tx_status(struct mt76_dev *dev,int mt76x02_mac_process_rate (struct mt76_rx_status *status,u16 rate);void mt76x02_mac_setaddr (struct mt76_dev *dev,u8 *addr); +void mt76x02_mac_write_txwi (struct mt76_dev *dev,struct mt76x02_txwi *txwi, +struct sk_buff *skb,struct mt76_wcid *wcid, +struct ieee80211_sta *sta,int len);#endif
drivers/net/wireless/mediatek/mt76/mt76x2/mac.c +0 -60
66 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt76x2/mac.h +0 -3
@@ -48,9 +48,6 @@ void mt76x2_mac_set_bssid(struct mt76x2_dev *dev, u8 idx, const u8 *addr);int mt76x2_mac_process_rx (struct mt76x2_dev *dev,struct sk_buff *skb,void *rxi); -void mt76x2_mac_write_txwi (struct mt76x2_dev *dev,struct mt76x02_txwi *txwi, -struct sk_buff *skb,struct mt76_wcid *wcid, -struct ieee80211_sta *sta,int len);int mt76x2_mac_set_beacon (struct mt76x2_dev *dev,u8 vif_idx,struct sk_buff *skb);
drivers/net/wireless/mediatek/mt76/mt76x2/pci_mac.c +1 -1
@@ -106,7 +106,7 @@ mt76_write_beacon(struct mt76x2_dev *dev, int offset, struct sk_buff *skb)if (WARN_ON_ONCE (beacon_len < skb->len +sizeof (struct mt76x02_txwi )))return -ENOSPC ; -mt76x2_mac_write_txwi (dev, &txwi, skb,NULL ,NULL , skb->len); +mt76x02_mac_write_txwi (&dev->mt76, &txwi, skb,NULL ,NULL , skb->len);mt76_wr_copy (dev, offset, &txwi,sizeof (txwi)); offset +=sizeof (txwi);
drivers/net/wireless/mediatek/mt76/mt76x2/pci_tx.c +1 -1
@@ -37,7 +37,7 @@ int mt76x2_tx_prepare_skb(struct mt76_dev *mdev, void *txwi,if (q == &dev->mt76.q_tx[MT_TXQ_PSD ] && wcid && wcid->idx <128 )mt76x02_mac_wcid_set_drop (&dev->mt76, wcid->idx, false); -mt76x2_mac_write_txwi (dev, txwi, skb, wcid, sta, skb->len); +mt76x02_mac_write_txwi (mdev, txwi, skb, wcid, sta, skb->len); ret =mt76x02_insert_hdr_pad (skb);if (ret <0 )
drivers/net/wireless/mediatek/mt76/mt76x2/usb_core.c +1 -2
@@ -36,7 +36,6 @@ int mt76x2u_tx_prepare_skb(struct mt76_dev *mdev, void *data, struct mt76_wcid *wcid, struct ieee80211_sta *sta, u32 *tx_info) { - struct mt76x2_dev *dev = container_of(mdev, struct mt76x2_dev, mt76); struct mt76x02_txwi *txwi;int err, len = skb->len;
@@ -47,7 +46,7 @@ int mt76x2u_tx_prepare_skb(struct mt76_dev *mdev, void *data,mt76x02_insert_hdr_pad (skb); txwi =skb_push (skb,sizeof (struct mt76x02_txwi )); -mt76x2_mac_write_txwi (dev, txwi, skb, wcid, sta, len); +mt76x02_mac_write_txwi (mdev, txwi, skb, wcid, sta, len);return mt76x02u_set_txinfo (skb, wcid,q2ep (q->hw_idx)); }
Signature · 1 line
2.17.1
PATCH 4/4 mt76: usb: use mt76x02u_tx_prepare_skb to fill txwi
In reply to Lorenzo BianconiUse mt76x02u_tx_prepare_skb routine to fill txwi in mt76x2u and mt76x0u driver and remove duplicated code. Moreover add static qualifier to mt76x02_mac_tx_rate_val and mt76x02_mac_fill_txwi routines
--- .../wireless/mediatek/mt76/mt76x0/mt76x0.h | 5 -- .../net/wireless/mediatek/mt76/mt76x0/tx.c | 38 -------------- .../net/wireless/mediatek/mt76/mt76x0/usb.c | 17 +----- .../net/wireless/mediatek/mt76/mt76x02_mac.c | 9 ++-- .../net/wireless/mediatek/mt76/mt76x02_mac.h | 5 -- .../net/wireless/mediatek/mt76/mt76x02_usb.h | 5 +- .../wireless/mediatek/mt76/mt76x02_usb_core.c | 38 +++++++++++++- .../wireless/mediatek/mt76/mt76x2/Makefile | 2 +- .../wireless/mediatek/mt76/mt76x2/mt76x2u.h | 4 -- .../wireless/mediatek/mt76/mt76x2/usb_core.c | 52 ------------------- .../wireless/mediatek/mt76/mt76x2/usb_init.c | 3 +- 11 files changed, 48 insertions(+), 130 deletions(-) delete mode 100644 drivers/net/wireless/mediatek/mt76/mt76x2/usb_core.c
drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h +0 -5
@@ -168,11 +168,6 @@ void mt76x0_mac_set_ampdu_factor(struct mt76x0_dev *dev);/* TX */ void mt76x0_tx (struct ieee80211_hw *hw,struct ieee80211_tx_control *control,struct sk_buff *skb); -struct mt76x02_txwi * -mt76x0_push_txwi (struct mt76x0_dev *dev,struct sk_buff *skb, -struct ieee80211_sta *sta,struct mt76_wcid *wcid, -int pkt_len); -void mt76x0_queue_rx_skb (struct mt76_dev *mdev,enum mt76_rxq_id q,struct sk_buff *skb);
drivers/net/wireless/mediatek/mt76/mt76x0/tx.c +0 -38
@@ -17,44 +17,6 @@#include "../mt76x02_util.h" #include "../mt76x02_usb.h" -struct mt76x02_txwi * -mt76x0_push_txwi (struct mt76x0_dev *dev,struct sk_buff *skb, -struct ieee80211_sta *sta,struct mt76_wcid *wcid, -int pkt_len) -{ -struct ieee80211_tx_info *info =IEEE80211_SKB_CB (skb); -struct ieee80211_tx_rate *rate = &info->control.rates[0 ]; -struct mt76x02_txwi *txwi; -unsigned long flags; -u16 rate_ctl; -u8 nss; - - txwi = (struct mt76x02_txwi *)skb_push (skb,sizeof (struct mt76x02_txwi )); -memset (txwi,0 ,sizeof (*txwi)); - -if (!wcid->tx_rate_set) -ieee80211_get_tx_rates (info->control.vif, sta, skb, - info->control.rates,1 ); - -spin_lock_irqsave (&dev->mt76.lock, flags); -if (rate->idx <0 || !rate->count) { - rate_ctl = wcid->tx_rate; - nss = wcid->tx_rate_nss; - }else { - rate_ctl =mt76x02_mac_tx_rate_val (&dev->mt76, rate, &nss); - } -spin_unlock_irqrestore (&dev->mt76.lock, flags); - - txwi->wcid = wcid->idx; - txwi->rate =cpu_to_le16 (rate_ctl); - txwi->pktid = (!(info->flags &IEEE80211_TX_CTL_NO_ACK )) ?1 :0 ; - -mt76x02_mac_fill_txwi (txwi, skb, sta, pkt_len, nss); - -return txwi; -} -EXPORT_SYMBOL_GPL (mt76x0_push_txwi); -void mt76x0_tx (struct ieee80211_hw *hw,struct ieee80211_tx_control *control,struct sk_buff *skb) {
drivers/net/wireless/mediatek/mt76/mt76x0/usb.c +1 -16
@@ -159,21 +159,6 @@ static const struct ieee80211_ops mt76x0u_ops = { .wake_tx_queue = mt76_wake_tx_queue, }; -static int mt76x0u_tx_prepare_skb (struct mt76_dev *mdev,void *data, -struct sk_buff *skb,struct mt76_queue *q, -struct mt76_wcid *wcid,struct ieee80211_sta *sta, -u32 *tx_info) -{ - struct mt76x0_dev *dev = container_of(mdev, struct mt76x0_dev, mt76); -struct mt76x02_txwi *txwi; -int len = skb->len; - -mt76x02_insert_hdr_pad (skb); - txwi =mt76x0_push_txwi (dev, skb, sta, wcid, len); - -return mt76x02u_set_txinfo (skb, wcid,q2ep (q->hw_idx)); -} -static int mt76x0u_register_device (struct mt76x0_dev *dev) {struct ieee80211_hw *hw = dev->mt76.hw;
@@ -230,7 +215,7 @@ static int mt76x0u_probe(struct usb_interface *usb_intf, const struct usb_device_id *id) {static const struct mt76_driver_ops drv_ops = { - .tx_prepare_skb = mt76x0u_tx_prepare_skb, + .tx_prepare_skb = mt76x02u_tx_prepare_skb, .tx_complete_skb = mt76x02_tx_complete_skb, .tx_status_data = mt76x02_tx_status_data, .rx_skb = mt76x0_queue_rx_skb,
drivers/net/wireless/mediatek/mt76/mt76x02_mac.c +4 -5
@@ -157,8 +157,9 @@ void mt76x02_txq_init(struct mt76_dev *dev, struct ieee80211_txq *txq) }EXPORT_SYMBOL_GPL (mt76x02_txq_init); -void mt76x02_mac_fill_txwi (struct mt76x02_txwi *txwi,struct sk_buff *skb, -struct ieee80211_sta *sta,int len,u8 nss) +static void +mt76x02_mac_fill_txwi (struct mt76x02_txwi *txwi,struct sk_buff *skb, +struct ieee80211_sta *sta,int len,u8 nss) {struct ieee80211_tx_info *info =IEEE80211_SKB_CB (skb);struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
@@ -197,9 +198,8 @@ void mt76x02_mac_fill_txwi(struct mt76x02_txwi *txwi, struct sk_buff *skb, txwi->flags |=cpu_to_le16 (txwi_flags); txwi->len_ctl =cpu_to_le16 (len); } -EXPORT_SYMBOL_GPL (mt76x02_mac_fill_txwi); -__le16 +static __le16 mt76x02_mac_tx_rate_val (struct mt76_dev *dev,const struct ieee80211_tx_rate *rate,u8 *nss_val) {
@@ -249,7 +249,6 @@ mt76x02_mac_tx_rate_val(struct mt76_dev *dev, *nss_val = nss;return cpu_to_le16 (rateval); } -EXPORT_SYMBOL_GPL (mt76x02_mac_tx_rate_val);void mt76x02_mac_wcid_set_rate (struct mt76_dev *dev,struct mt76_wcid *wcid,const struct ieee80211_tx_rate *rate)
drivers/net/wireless/mediatek/mt76/mt76x02_mac.h +0 -5
@@ -180,8 +180,6 @@ static inline bool mt76x02_wait_for_mac(struct mt76_dev *dev) }void mt76x02_txq_init (struct mt76_dev *dev,struct ieee80211_txq *txq); -void mt76x02_mac_fill_txwi (struct mt76x02_txwi *txwi,struct sk_buff *skb, -struct ieee80211_sta *sta,int len,u8 nss);enum mt76x02_cipher_type mt76x02_mac_get_key_info (struct ieee80211_key_conf *key,u8 *key_data);
@@ -193,9 +191,6 @@ void mt76x02_mac_wcid_setup(struct mt76_dev *dev, u8 idx, u8 vif_idx, u8 *mac);void mt76x02_mac_wcid_set_drop (struct mt76_dev *dev,u8 idx,bool drop);void mt76x02_mac_wcid_set_rate (struct mt76_dev *dev,struct mt76_wcid *wcid,const struct ieee80211_tx_rate *rate); -__le16 -mt76x02_mac_tx_rate_val (struct mt76_dev *dev, -const struct ieee80211_tx_rate *rate,u8 *nss_val);bool mt76x02_mac_load_tx_status (struct mt76_dev *dev,struct mt76x02_tx_status *stat); void mt76x02_send_tx_status(struct mt76_dev *dev,
drivers/net/wireless/mediatek/mt76/mt76x02_usb.h +4 -1
@@ -25,5 +25,8 @@ int mt76x02u_mcu_fw_send_data(struct mt76_dev *dev, const void *data, int data_len, u32 max_payload, u32 offset);int mt76x02u_skb_dma_info (struct sk_buff *skb,int port,u32 flags); -int mt76x02u_set_txinfo (struct sk_buff *skb,struct mt76_wcid *wcid,u8 ep); +int mt76x02u_tx_prepare_skb (struct mt76_dev *dev,void *data, +struct sk_buff *skb,struct mt76_queue *q, +struct mt76_wcid *wcid,struct ieee80211_sta *sta, +u32 *tx_info);#endif /* __MT76x02_USB_H */
drivers/net/wireless/mediatek/mt76/mt76x02_usb_core.c +36 -2
@@ -16,6 +16,19 @@#include "mt76.h" #include "mt76x02_dma.h" +#include "mt76x02_mac.h" +#include "mt76x02_util.h" + +static int mt76x02u_check_skb_rooms (struct sk_buff *skb) +{ +int hdr_len =ieee80211_get_hdrlen_from_skb (skb); +u32 need_head; + + need_head =sizeof (struct mt76x02_txwi ) +MT_DMA_HDR_LEN ; +if (hdr_len %4 ) + need_head +=2 ; +return skb_cow (skb, need_head); +}int mt76x02u_skb_dma_info (struct sk_buff *skb,int port,u32 flags) {
@@ -50,7 +63,8 @@ int mt76x02u_skb_dma_info(struct sk_buff *skb, int port, u32 flags)return 0 ; } -int mt76x02u_set_txinfo (struct sk_buff *skb,struct mt76_wcid *wcid,u8 ep) +static int +mt76x02u_set_txinfo (struct sk_buff *skb,struct mt76_wcid *wcid,u8 ep) {struct ieee80211_tx_info *info =IEEE80211_SKB_CB (skb);enum mt76_qsel qsel;
@@ -69,4 +83,24 @@ int mt76x02u_set_txinfo(struct sk_buff *skb, struct mt76_wcid *wcid, u8 ep)return mt76x02u_skb_dma_info (skb,WLAN_PORT , flags); } -EXPORT_SYMBOL_GPL (mt76x02u_set_txinfo); + +int mt76x02u_tx_prepare_skb (struct mt76_dev *dev,void *data, +struct sk_buff *skb,struct mt76_queue *q, +struct mt76_wcid *wcid,struct ieee80211_sta *sta, +u32 *tx_info) +{ +struct mt76x02_txwi *txwi; +int err, len = skb->len; + + err =mt76x02u_check_skb_rooms (skb); +if (err <0 ) +return -ENOMEM ; + +mt76x02_insert_hdr_pad (skb); + + txwi =skb_push (skb,sizeof (struct mt76x02_txwi )); +mt76x02_mac_write_txwi (dev, txwi, skb, wcid, sta, len); + +return mt76x02u_set_txinfo (skb, wcid,q2ep (q->hw_idx)); +} +EXPORT_SYMBOL_GPL (mt76x02u_tx_prepare_skb);
drivers/net/wireless/mediatek/mt76/mt76x2/Makefile +1 -1
@@ -13,6 +13,6 @@ mt76x2e-y := \ mt76x2u-y := \ usb.o usb_init.o usb_main.o usb_mac.o usb_mcu.o \ - usb_phy.o usb_core.o + usb_phy.o CFLAGS_pci_trace.o := -I$(src)
drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2u.h +0 -4
@@ -55,10 +55,6 @@ int mt76x2u_mcu_fw_init(struct mt76x2_dev *dev);int mt76x2u_alloc_queues (struct mt76x2_dev *dev);void mt76x2u_queues_deinit (struct mt76x2_dev *dev);void mt76x2u_stop_queues (struct mt76x2_dev *dev); -int mt76x2u_tx_prepare_skb (struct mt76_dev *mdev,void *data, -struct sk_buff *skb,struct mt76_queue *q, -struct mt76_wcid *wcid,struct ieee80211_sta *sta, -u32 *tx_info);int mt76x2u_skb_dma_info (struct sk_buff *skb,enum dma_msg_port port,u32 flags);
drivers/net/wireless/mediatek/mt76/mt76x2/usb_core.c deleted +0 -52
52 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt76x2/usb_init.c +2 -1
@@ -20,6 +20,7 @@#include "../mt76x02_util.h" #include "../mt76x02_phy.h" #include "eeprom.h" +#include "../mt76x02_usb.h" static void mt76x2u_init_dma (struct mt76x2_dev *dev) {
@@ -137,7 +138,7 @@ static int mt76x2u_init_eeprom(struct mt76x2_dev *dev)struct mt76x2_dev *mt76x2u_alloc_device (struct device *pdev) {static const struct mt76_driver_ops drv_ops = { - .tx_prepare_skb = mt76x2u_tx_prepare_skb, + .tx_prepare_skb = mt76x02u_tx_prepare_skb, .tx_complete_skb = mt76x02_tx_complete_skb, .tx_status_data = mt76x02_tx_status_data, .rx_skb = mt76x2_queue_rx_skb,
Signature · 1 line
2.17.1
Quoted 4 lines · Lorenzo Bianconi
Move
mt76x02_mac_write_txwiroutine in mt76x02-lib module in order to unify txwi parsing between mt76x0 and mt76x2 drivers.
For rxwi unification we need to mergemt76x2_devandmt76x0_devinmt76x02_devand remove duplicated code
Merged, thanks.
- Felix