introduce usb support to mt7615 driver
Subsystems (2)
Lorenzo Bianconi
maintainerv3 cover introduce usb support to mt7615 driver
Introduce support for mt7663u 802.11ac 2x2:2 chipset to mt7615 driver. Create mt7615-common module as container for mmio and usb shared code
Changes since v2:
- rebased ontop of mt76 master branch
- fix license
Changes since v1:
- rebased ontop of mt76 master branch
Lorenzo Bianconi (2):
mt76: mt7615: move core shared code in mt7615-common module
mt76: mt7615: introduce mt7663u support
drivers/net/wireless/mediatek/mt76/Makefile | 2 +- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + .../net/wireless/mediatek/mt76/mt7615/Kconfig | 18 +- .../wireless/mediatek/mt76/mt7615/Makefile | 10 +- .../wireless/mediatek/mt76/mt7615/debugfs.c | 1 + .../net/wireless/mediatek/mt76/mt7615/dma.c | 39 -- .../wireless/mediatek/mt76/mt7615/eeprom.c | 1 + .../net/wireless/mediatek/mt76/mt7615/init.c | 194 +-------- .../net/wireless/mediatek/mt76/mt7615/mac.c | 249 ++++------- .../net/wireless/mediatek/mt76/mt7615/mac.h | 5 +- .../net/wireless/mediatek/mt76/mt7615/main.c | 66 +-- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 18 +- .../net/wireless/mediatek/mt76/mt7615/mcu.h | 5 + .../net/wireless/mediatek/mt76/mt7615/mmio.c | 30 ++ .../wireless/mediatek/mt76/mt7615/mt7615.h | 22 +- .../wireless/mediatek/mt76/mt7615/pci_init.c | 189 +++++++++ .../wireless/mediatek/mt76/mt7615/pci_mac.c | 184 ++++++++ .../net/wireless/mediatek/mt76/mt7615/regs.h | 26 ++ .../net/wireless/mediatek/mt76/mt7615/usb.c | 396 ++++++++++++++++++ .../wireless/mediatek/mt76/mt7615/usb_init.c | 144 +++++++ .../wireless/mediatek/mt76/mt7615/usb_mcu.c | 93 ++++ 21 files changed, 1259 insertions(+), 434 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/pci_init.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/pci_mac.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/usb.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/usb_init.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/usb_mcu.c
Signature · 1 line
2.25.2
Lorenzo Bianconi
maintainerPATCH v3 1/2 mt76: mt7615: move core shared code in mt7615-common module
Create mt7615-common module in order to collect shared code between usb and mmio code. Move the following source files in mt7615-common module:
- main.c
- init.c
- mcu.c
- mac.c
- debugfs.c
- eeprom.c
- trace.c
Create the following source files for mmio only source code and move them in mt7615e module:
- pci_init.c
- dma.c
- pci_mac.c
--- drivers/net/wireless/mediatek/mt76/Makefile | 2 +- .../net/wireless/mediatek/mt76/mt7615/Kconfig | 7 +- .../wireless/mediatek/mt76/mt7615/Makefile | 7 +- .../wireless/mediatek/mt76/mt7615/debugfs.c | 1 + .../net/wireless/mediatek/mt76/mt7615/dma.c | 39 ---- .../wireless/mediatek/mt76/mt7615/eeprom.c | 1 + .../net/wireless/mediatek/mt76/mt7615/init.c | 194 ++------------- .../net/wireless/mediatek/mt76/mt7615/mac.c | 221 ++++-------------- .../net/wireless/mediatek/mt76/mt7615/main.c | 32 +-- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 15 +- .../net/wireless/mediatek/mt76/mt7615/mmio.c | 30 +++ .../wireless/mediatek/mt76/mt7615/mt7615.h | 12 +- .../wireless/mediatek/mt76/mt7615/pci_init.c | 189 +++++++++++++++ .../wireless/mediatek/mt76/mt7615/pci_mac.c | 184 +++++++++++++++ 14 files changed, 503 insertions(+), 431 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/pci_init.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/pci_mac.c
drivers/net/wireless/mediatek/mt76/Makefile +1 -1
@@ -26,4 +26,4 @@ mt76x02-usb-y := mt76x02_usb_mcu.o mt76x02_usb_core.o obj-$(CONFIG_MT76x0_COMMON) += mt76x0/ obj-$(CONFIG_MT76x2_COMMON) += mt76x2/ obj-$(CONFIG_MT7603E) += mt7603/ -obj-$(CONFIG_MT7615E) += mt7615/ +obj-$(CONFIG_MT7615_COMMON) += mt7615/
drivers/net/wireless/mediatek/mt76/mt7615/Kconfig +6 -1
@@ -1,7 +1,12 @@ # SPDX-License-Identifier: GPL-2.0-only + +config MT7615_COMMON + tristate + select MT76_CORE + config MT7615E tristate "MediaTek MT7615E (PCIe) support" - select MT76_CORE + select MT7615_COMMON depends on MAC80211 depends on PCI help
drivers/net/wireless/mediatek/mt76/mt7615/Makefile +5 -2
@@ -1,9 +1,12 @@ #SPDX-License-Identifier: ISC +obj-$(CONFIG_MT7615_COMMON) += mt7615-common.o obj-$(CONFIG_MT7615E) += mt7615e.o CFLAGS_trace.o := -I$(src) -mt7615e-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o mmio.o \ - debugfs.o trace.o +mt7615-common-y := main.o init.o mcu.o eeprom.o mac.o \ + debugfs.o trace.o + +mt7615e-y := pci.o pci_init.o dma.o pci_mac.o mmio.o mt7615e-$(CONFIG_MT7622_WMAC) += soc.o
drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c +1 -0
@@ -325,3 +325,4 @@ int mt7615_init_debugfs(struct mt7615_dev *dev)return 0 ; } +EXPORT_SYMBOL_GPL (mt7615_init_debugfs);
drivers/net/wireless/mediatek/mt76/mt7615/dma.c +0 -39
@@ -94,45 +94,6 @@ mt7615_init_tx_queues(struct mt7615_dev *dev)return 0 ; } -void mt7615_queue_rx_skb (struct mt76_dev *mdev,enum mt76_rxq_id q, -struct sk_buff *skb) -{ - struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76); -__le32 *rxd = (__le32 *)skb->data; -__le32 *end = (__le32 *)&skb->data[skb->len]; -enum rx_pkt_type type; -u16 flag; - - type =FIELD_GET (MT_RXD0_PKT_TYPE ,le32_to_cpu (rxd[0 ])); - flag =FIELD_GET (MT_RXD0_PKT_FLAG ,le32_to_cpu (rxd[0 ])); -if (type ==PKT_TYPE_RX_EVENT && flag ==0x1 ) - type =PKT_TYPE_NORMAL_MCU ; - -switch (type) { -case PKT_TYPE_TXS : -for (rxd++; rxd +7 <= end; rxd +=7 ) -mt7615_mac_add_txs (dev, rxd); -dev_kfree_skb (skb); -break ; -case PKT_TYPE_TXRX_NOTIFY : -mt7615_mac_tx_free (dev, skb); -break ; -case PKT_TYPE_RX_EVENT : -mt7615_mcu_rx_event (dev, skb); -break ; -case PKT_TYPE_NORMAL_MCU : -case PKT_TYPE_NORMAL : -if (!mt7615_mac_fill_rx (dev, skb)) { -mt76_rx (&dev->mt76, q, skb); -return ; - } -/* fall through */ -default : -dev_kfree_skb (skb); -break ; - } -} -static void mt7615_tx_cleanup (struct mt7615_dev *dev) {
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c +1 -0
@@ -297,3 +297,4 @@ int mt7615_eeprom_init(struct mt7615_dev *dev, u32 addr)return 0 ; } +EXPORT_SYMBOL_GPL (mt7615_eeprom_init);
drivers/net/wireless/mediatek/mt76/mt7615/init.c +13 -181
262 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +49 -172
287 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7615/main.c +4 -28
@@ -4,11 +4,10 @@* Author: Roy Luo <[email protected]> * Ryder Lee <[email protected]> * Felix Fietkau <[email protected]> +* Lorenzo Bianconi <[email protected]> */ #include <linux/etherdevice.h> -#include <linux/platform_device.h> -#include <linux/pci.h> #include <linux/module.h> #include "mt7615.h" #include "mcu.h"
@@ -496,6 +495,7 @@ int mt7615_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,return 0 ; } +EXPORT_SYMBOL_GPL (mt7615_mac_sta_add);void mt7615_mac_sta_remove (struct mt76_dev *mdev,struct ieee80211_vif *vif,struct ieee80211_sta *sta)
@@ -512,6 +512,7 @@ void mt7615_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,list_del_init (&msta->poll_list);spin_unlock_bh (&dev->sta_poll_lock); } +EXPORT_SYMBOL_GPL (mt7615_mac_sta_remove); static void mt7615_sta_rate_tbl_update(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
@@ -832,31 +833,6 @@ const struct ieee80211_ops mt7615_ops = { .sched_scan_start = mt7615_start_sched_scan, .sched_scan_stop = mt7615_stop_sched_scan, }; +EXPORT_SYMBOL_GPL (mt7615_ops); -static int __init mt7615_init (void ) -{ -int ret; - - ret =pci_register_driver (&mt7615_pci_driver); -if (ret) -return ret; - -if (IS_ENABLED (CONFIG_MT7622_WMAC )) { - ret =platform_driver_register (&mt7622_wmac_driver); -if (ret) -pci_unregister_driver (&mt7615_pci_driver); - } - -return ret; -} - -static void __exit mt7615_exit(void) -{ -if (IS_ENABLED (CONFIG_MT7622_WMAC )) -platform_driver_unregister (&mt7622_wmac_driver); -pci_unregister_driver (&mt7615_pci_driver); -} - -module_init (mt7615_init); -module_exit (mt7615_exit);MODULE_LICENSE ("Dual BSD/GPL" );
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +11 -4
@@ -152,6 +152,7 @@ void mt7615_mcu_fill_msg(struct mt7615_dev *dev, struct sk_buff *skb,break ; } } +EXPORT_SYMBOL_GPL (mt7615_mcu_fill_msg);static int __mt7615_mcu_msg_send (struct mt7615_dev *dev,struct sk_buff *skb,int cmd,int *wait_seq)
@@ -215,6 +216,7 @@ int mt7615_mcu_wait_response(struct mt7615_dev *dev, int cmd, int seq)return ret; } +EXPORT_SYMBOL_GPL (mt7615_mcu_wait_response); static int mt7615_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
@@ -238,9 +240,8 @@ mt7615_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,return ret; } -static int -mt7615_mcu_msg_send (struct mt76_dev *mdev,int cmd,const void *data, -int len,bool wait_resp) +int mt7615_mcu_msg_send (struct mt76_dev *mdev,int cmd,const void *data, +int len,bool wait_resp) {struct sk_buff *skb;
@@ -250,6 +251,7 @@ mt7615_mcu_msg_send(struct mt76_dev *mdev, int cmd, const void *data,return __mt76_mcu_skb_send_msg (mdev, skb, cmd, wait_resp); } +EXPORT_SYMBOL_GPL (mt7615_mcu_msg_send);static void mt7615_mcu_csa_finish (void *priv,u8 *mac,struct ieee80211_vif *vif)
@@ -1629,11 +1631,12 @@ static int mt7615_mcu_start_firmware(struct mt7615_dev *dev, u32 addr, &req, sizeof(req), true); } -static int mt7615_mcu_restart (struct mt76_dev *dev) +int mt7615_mcu_restart (struct mt76_dev *dev) {return __mt76_mcu_send_msg (dev,MCU_CMD_RESTART_DL_REQ ,NULL ,0 , true); } +EXPORT_SYMBOL_GPL (mt7615_mcu_restart);static int mt7615_mcu_patch_sem_ctrl (struct mt7615_dev *dev,bool get) {
@@ -2165,6 +2168,7 @@ int mt7615_mcu_init(struct mt7615_dev *dev)return 0 ; } +EXPORT_SYMBOL_GPL (mt7615_mcu_init);void mt7615_mcu_exit (struct mt7615_dev *dev) {
@@ -2172,6 +2176,7 @@ void mt7615_mcu_exit(struct mt7615_dev *dev)mt7615_firmware_own (dev);skb_queue_purge (&dev->mt76.mcu.res_q); } +EXPORT_SYMBOL_GPL (mt7615_mcu_exit);int mt7615_mcu_set_eeprom (struct mt7615_dev *dev) {
@@ -2214,6 +2219,7 @@ int mt7615_mcu_set_eeprom(struct mt7615_dev *dev)return __mt76_mcu_skb_send_msg (&dev->mt76, skb,MCU_EXT_CMD_EFUSE_BUFFER_MODE , true); } +EXPORT_SYMBOL_GPL (mt7615_mcu_set_eeprom);int mt7615_mcu_set_mac_enable (struct mt7615_dev *dev,int band,bool enable) {
@@ -2355,6 +2361,7 @@ int mt7615_mcu_del_wtbl_all(struct mt7615_dev *dev)return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_WTBL_UPDATE , &req,sizeof (req), true); } +EXPORT_SYMBOL_GPL (mt7615_mcu_del_wtbl_all); int mt7615_mcu_rdd_cmd(struct mt7615_dev *dev, enum mt7615_rdd_cmd cmd, u8 index,
drivers/net/wireless/mediatek/mt76/mt7615/mmio.c +30 -0
@@ -1,5 +1,7 @@#include <linux/kernel.h> #include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/pci.h> #include "mt7615.h" #include "regs.h"
@@ -190,3 +192,31 @@ int mt7615_mmio_probe(struct device *pdev, void __iomem *mem_base,ieee80211_free_hw (mt76_hw (dev));return ret; } + +static int __init mt7615_init (void ) +{ +int ret; + + ret =pci_register_driver (&mt7615_pci_driver); +if (ret) +return ret; + +if (IS_ENABLED (CONFIG_MT7622_WMAC )) { + ret =platform_driver_register (&mt7622_wmac_driver); +if (ret) +pci_unregister_driver (&mt7615_pci_driver); + } + +return ret; +} + +static void __exit mt7615_exit(void) +{ +if (IS_ENABLED (CONFIG_MT7622_WMAC )) +platform_driver_unregister (&mt7622_wmac_driver); +pci_unregister_driver (&mt7615_pci_driver); +} + +module_init (mt7615_init); +module_exit (mt7615_exit); +MODULE_LICENSE ("Dual BSD/GPL" );
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +9 -3
@@ -342,6 +342,7 @@ mt7615_ext_phy(struct mt7615_dev *dev)return phy->priv; } +extern struct ieee80211_rate mt7615_rates[12 ];extern const struct ieee80211_ops mt7615_ops;extern const u32 mt7615e_reg_map[__MT_BASE_MAX];extern const u32 mt7663e_reg_map[__MT_BASE_MAX];
@@ -419,6 +420,12 @@ static inline bool mt7615_firmware_offload(struct mt7615_dev *dev) }void mt7615_scan_work (struct work_struct *work); +void mt7615_init_txpower (struct mt7615_dev *dev, +struct ieee80211_supported_band *sband); +void mt7615_phy_init (struct mt7615_dev *dev); +void mt7615_mac_init (struct mt7615_dev *dev); + +int mt7615_mcu_restart (struct mt76_dev *dev);void mt7615_update_channel (struct mt76_dev *mdev);bool mt7615_mac_wtbl_update (struct mt7615_dev *dev,int idx,u32 mask);void mt7615_mac_reset_counters (struct mt7615_dev *dev);
@@ -431,9 +438,6 @@ int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi, struct ieee80211_sta *sta, int pid, struct ieee80211_key_conf *key, bool beacon);void mt7615_mac_set_timing (struct mt7615_phy *phy); -int mt7615_mac_fill_rx (struct mt7615_dev *dev,struct sk_buff *skb); -void mt7615_mac_add_txs (struct mt7615_dev *dev,void *data); -void mt7615_mac_tx_free (struct mt7615_dev *dev,struct sk_buff *skb);int mt7615_mac_wtbl_set_key (struct mt7615_dev *dev,struct mt76_wcid *wcid,struct ieee80211_key_conf *key,enum set_key_cmd cmd);
@@ -453,6 +457,8 @@ int mt7615_mac_wtbl_update_key(struct mt7615_dev *dev,void mt7615_mac_reset_work (struct work_struct *work);int mt7615_mcu_wait_response (struct mt7615_dev *dev,int cmd,int seq); +int mt7615_mcu_msg_send (struct mt76_dev *mdev,int cmd,const void *data, +int len,bool wait_resp);int mt7615_mcu_set_dbdc (struct mt7615_dev *dev);int mt7615_mcu_set_eeprom (struct mt7615_dev *dev);int mt7615_mcu_set_mac_enable (struct mt7615_dev *dev,int band,bool enable);
drivers/net/wireless/mediatek/mt76/mt7615/pci_init.c new file +189 -0
189 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7615/pci_mac.c new file +184 -0
184 lines not on this page · raw message
Signature · 1 line
2.25.2
Lorenzo Bianconi
maintainerPATCH v3 2/2 mt76: mt7615: introduce mt7663u support
In reply to Lorenzo BianconiIntroduce support for mt7663u 802.11ac 2x2:2 chipset to mt7615 driver. Main difference respect to pcie code base is the usb code needs to configure wtbl from non-atomic context
--- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + .../net/wireless/mediatek/mt76/mt7615/Kconfig | 11 + .../wireless/mediatek/mt76/mt7615/Makefile | 3 + .../net/wireless/mediatek/mt76/mt7615/mac.c | 28 ++ .../net/wireless/mediatek/mt76/mt7615/mac.h | 5 +- .../net/wireless/mediatek/mt76/mt7615/main.c | 34 ++ .../net/wireless/mediatek/mt76/mt7615/mcu.c | 3 +- .../net/wireless/mediatek/mt76/mt7615/mcu.h | 5 + .../wireless/mediatek/mt76/mt7615/mt7615.h | 10 + .../net/wireless/mediatek/mt76/mt7615/regs.h | 26 ++ .../net/wireless/mediatek/mt76/mt7615/usb.c | 396 ++++++++++++++++++ .../wireless/mediatek/mt76/mt7615/usb_init.c | 144 +++++++ .../wireless/mediatek/mt76/mt7615/usb_mcu.c | 93 ++++ 13 files changed, 756 insertions(+), 3 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/usb.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/usb_init.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/usb_mcu.c
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -285,6 +285,7 @@ enum {MT76_MCU_RESET ,MT76_REMOVED ,MT76_READING_STATS , + MT76_STATE_POWER_OFF, }; struct mt76_hw_cap {
drivers/net/wireless/mediatek/mt76/mt7615/Kconfig +11 -0
@@ -27,3 +27,14 @@ config MT7622_WMAC This adds support for the built-in WMAC on MT7622 SoC devices which has the same feature set as a MT7615, but limited to 2.4 GHz only. + +config MT7663U + tristate "MediaTek MT7663U (USB) support" + select MT76_USB + select MT7615_COMMON + depends on MAC80211 + depends on USB + help + This adds support for MT7663U 802.11ax 2x2:2 wireless devices. + + To compile this driver as a module, choose M here.
drivers/net/wireless/mediatek/mt76/mt7615/Makefile +3 -0
@@ -2,6 +2,7 @@ obj-$(CONFIG_MT7615_COMMON) += mt7615-common.o obj-$(CONFIG_MT7615E) += mt7615e.o +obj-$(CONFIG_MT7663U) += mt7663u.o CFLAGS_trace.o := -I$(src)
@@ -10,3 +11,5 @@ mt7615-common-y := main.o init.o mcu.o eeprom.o mac.o \ mt7615e-y := pci.o pci_init.o dma.o pci_mac.o mmio.o mt7615e-$(CONFIG_MT7622_WMAC) += soc.o + +mt7663u-y := usb.o usb_mcu.o usb_init.o
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +28 -0
@@ -871,6 +871,29 @@ mt7615_mac_update_rate_desc(struct mt7615_phy *phy, struct mt7615_sta *sta, rd->bw = bw; } +static int +mt7615_mac_queue_rate_update (struct mt7615_phy *phy,struct mt7615_sta *sta, +struct ieee80211_tx_rate *probe_rate, +struct ieee80211_tx_rate *rates) +{ +struct mt7615_dev *dev = phy->dev; +struct mt7615_wtbl_desc *wd; + + wd =kzalloc (sizeof (*wd),GFP_ATOMIC ); +if (!wd) +return -ENOMEM ; + + wd->type =MT7615_WTBL_RATE_DESC ; + wd->sta = sta; + +mt7615_mac_update_rate_desc (phy, sta, probe_rate, rates, + &wd->rate); +list_add_tail (&wd->node, &dev->wd_head); +queue_work (dev->mt76.usb.wq, &dev->wtbl_work); + +return 0 ; +} +void mt7615_mac_set_rates (struct mt7615_phy *phy,struct mt7615_sta *sta,struct ieee80211_tx_rate *probe_rate,struct ieee80211_tx_rate *rates)
@@ -880,6 +903,11 @@ void mt7615_mac_set_rates(struct mt7615_phy *phy, struct mt7615_sta *sta,struct mt7615_rate_desc rd;u32 w5, w27, addr; +if (mt76_is_usb (&dev->mt76)) { +mt7615_mac_queue_rate_update (phy, sta, probe_rate, rates); +return ; + } +if (!mt76_poll (dev,MT_WTBL_UPDATE ,MT_WTBL_UPDATE_BUSY ,0 ,5000 ))return ;
drivers/net/wireless/mediatek/mt76/mt7615/mac.h +4 -1
@@ -165,9 +165,12 @@ enum tx_phy_bandwidth {#define MT_CT_INFO_NONE_CIPHER_FRAME BIT(3)#define MT_CT_INFO_HSR2_TX BIT(4) -#define MT_USB_TXD_SIZE (MT_TXD_SIZE + 8 * 4)#define MT_TXD_SIZE (8 * 4) +#define MT_USB_TXD_SIZE (MT_TXD_SIZE + 8 * 4) +#define MT_USB_HDR_SIZE 4 +#define MT_USB_TAIL_SIZE 4 +#define MT_TXD0_P_IDX BIT(31)#define MT_TXD0_Q_IDX GENMASK(30, 26)#define MT_TXD0_UDP_TCP_SUM BIT(24)
drivers/net/wireless/mediatek/mt76/mt7615/main.c +34 -0
@@ -277,6 +277,37 @@ static int mt7615_set_channel(struct mt7615_phy *phy)return ret; } +static int +mt7615_queue_key_update (struct mt7615_dev *dev,enum set_key_cmd cmd, +struct mt7615_sta *msta, +struct ieee80211_key_conf *key) +{ +struct mt7615_wtbl_desc *wd; + + wd =kzalloc (sizeof (*wd),GFP_KERNEL ); +if (!wd) +return -ENOMEM ; + + wd->type =MT7615_WTBL_KEY_DESC ; + wd->sta = msta; + + wd->key.key =kzalloc (key->keylen,GFP_KERNEL ); +if (!wd->key.key) { +kfree (wd); +return -ENOMEM ; + } +memcpy (wd->key.key, key->key, key->keylen); + wd->key.cipher = key->cipher; + wd->key.keyidx = key->keyidx; + wd->key.keylen = key->keylen; + wd->key.cmd = cmd; + +list_add_tail (&wd->node, &dev->wd_head); +queue_work (dev->mt76.usb.wq, &dev->wtbl_work); + +return 0 ; +} +static int mt7615_set_key (struct ieee80211_hw *hw,enum set_key_cmd cmd,struct ieee80211_vif *vif,struct ieee80211_sta *sta,struct ieee80211_key_conf *key)
@@ -325,6 +356,9 @@ static int mt7615_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,mt76_wcid_key_setup (&dev->mt76, wcid, cmd ==SET_KEY ? key :NULL ); +if (mt76_is_usb (&dev->mt76)) +return mt7615_queue_key_update (dev, cmd, msta, key); +return mt7615_mac_wtbl_set_key (dev, wcid, key, cmd); }
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +1 -2
@@ -1598,8 +1598,7 @@ static int mt7615_mcu_send_firmware(struct mt7615_dev *dev, const void *data,int ret =0 , cur_len;while (len >0 ) { - cur_len =min_t (int,4096 -sizeof (struct mt7615_mcu_txd ), - len); + cur_len =min_t (int,4096 - dev->mt76.mcu_ops->headroom, len); ret =__mt76_mcu_send_msg (&dev->mt76,MCU_CMD_FW_SCATTER , data, cur_len, false);
drivers/net/wireless/mediatek/mt76/mt7615/mcu.h +5 -0
@@ -449,6 +449,11 @@ enum { FW_STATE_CR4_RDY = 7 }; +enum { +FW_STATE_PWR_ON =1 , +FW_STATE_N9_RDY =2 , +}; +#define STA_TYPE_STA BIT(0)#define STA_TYPE_AP BIT(1)#define STA_TYPE_ADHOC BIT(2)
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +10 -0
@@ -269,6 +269,9 @@ struct mt7615_dev {struct idr token;u8 fw_ver; + +struct work_struct wtbl_work; +struct list_head wd_head; };enum {
@@ -508,6 +511,13 @@ int mt7615_mcu_apply_tx_dpd(struct mt7615_phy *phy);int mt7615_dfs_init_radar_detector (struct mt7615_phy *phy);int mt7615_init_debugfs (struct mt7615_dev *dev); +int mt7615_mcu_wait_response (struct mt7615_dev *dev,int cmd,int seq); +int __mt7663_load_firmware (struct mt7615_dev *dev); +/* usb */ +void mt7663u_wtbl_work (struct work_struct *work); +int mt7663u_mcu_init (struct mt7615_dev *dev); +int mt7663u_register_device (struct mt7615_dev *dev); +#endif
drivers/net/wireless/mediatek/mt76/mt7615/regs.h +26 -0
@@ -43,6 +43,7 @@ enum mt7615_reg_base {#define MT_TOP_MISC2_FW_STATE GENMASK(2, 0)#define MT7663_TOP_MISC2_FW_STATE GENMASK(3, 1) +#define MT_TOP_MISC2_FW_PWR_ON BIT(1)#define MT_MCU_BASE 0x2000#define MT_MCU (ofs) (MT_MCU_BASE + (ofs))
@@ -58,6 +59,8 @@ enum mt7615_reg_base {#define MT_PCIE_REMAP_BASE_2 ((dev)->reg_map[MT_PCIE_REMAP_BASE2])#define MT_HIF (ofs) ((dev)->reg_map[MT_HIF_BASE] + (ofs)) +#define MT_HIF_RST MT_HIF(0x100) +#define MT_HIF_LOGIC_RST_N BIT(4)#define MT7663_MCU_PCIE_REMAP_2_OFFSET GENMASK(15, 0)#define MT7663_MCU_PCIE_REMAP_2_BASE GENMASK(31, 16)
@@ -483,4 +486,27 @@ enum mt7615_reg_base {#define MT_INFRACFG_MISC 0x700#define MT_INFRACFG_MISC_AP2CONN_WAKE BIT(1) +#define MT_UMAC_BASE 0x7c000000 +#define MT_UMAC (ofs) (MT_UMAC_BASE + (ofs)) +#define MT_UDMA_TX_QSEL MT_UMAC(0x008) +#define MT_FW_DL_EN BIT(3) + +#define MT_UDMA_WLCFG_1 MT_UMAC(0x00c) +#define MT_WL_RX_AGG_PKT_LMT GENMASK(7, 0) +#define MT_WL_TX_TMOUT_LMT GENMASK(27, 8) + +#define MT_UDMA_WLCFG_0 MT_UMAC(0x18) +#define MT_WL_RX_AGG_TO GENMASK(7, 0) +#define MT_WL_RX_AGG_LMT GENMASK(15, 8) +#define MT_WL_TX_TMOUT_FUNC_EN BIT(16) +#define MT_WL_TX_DPH_CHK_EN BIT(17) +#define MT_WL_RX_MPSZ_PAD0 BIT(18) +#define MT_WL_RX_FLUSH BIT(19) +#define MT_TICK_1US_EN BIT(20) +#define MT_WL_RX_AGG_EN BIT(21) +#define MT_WL_RX_EN BIT(22) +#define MT_WL_TX_EN BIT(23) +#define MT_WL_RX_BUSY BIT(30) +#define MT_WL_TX_BUSY BIT(31) +#endif
drivers/net/wireless/mediatek/mt76/mt7615/usb.c new file +396 -0
396 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7615/usb_init.c new file +144 -0
144 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7615/usb_mcu.c new file +93 -0
93 lines not on this page · raw message
Signature · 7 lines
2.25.2 _______________________________________________ Linux-mediatek mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-mediatek