mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
wifi: mt76: mt7921: move dma shared code in mt792x-lib module
Reduce duplicated code moving dma shared code in mt792x-lib module. Signed-off-by: Lorenzo Bianconi <[email protected]> Signed-off-by: Deren Wu <[email protected]> Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
committed by
Felix Fietkau
parent
de7b907212
commit
c68ee8a64b
+97
-1
@@ -4,7 +4,7 @@
|
||||
#include <linux/module.h>
|
||||
|
||||
#include "mt792x.h"
|
||||
#include "mt792x_regs.h"
|
||||
#include "dma.h"
|
||||
|
||||
void mt792x_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
|
||||
struct sk_buff *skb)
|
||||
@@ -465,5 +465,101 @@ void mt792x_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt792x_set_coverage_class);
|
||||
|
||||
int mt792x_dma_disable(struct mt792x_dev *dev, bool force)
|
||||
{
|
||||
/* disable WFDMA0 */
|
||||
mt76_clear(dev, MT_WFDMA0_GLO_CFG,
|
||||
MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN |
|
||||
MT_WFDMA0_GLO_CFG_CSR_DISP_BASE_PTR_CHAIN_EN |
|
||||
MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
|
||||
MT_WFDMA0_GLO_CFG_OMIT_RX_INFO |
|
||||
MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
|
||||
|
||||
if (!mt76_poll_msec_tick(dev, MT_WFDMA0_GLO_CFG,
|
||||
MT_WFDMA0_GLO_CFG_TX_DMA_BUSY |
|
||||
MT_WFDMA0_GLO_CFG_RX_DMA_BUSY, 0, 100, 1))
|
||||
return -ETIMEDOUT;
|
||||
|
||||
/* disable dmashdl */
|
||||
mt76_clear(dev, MT_WFDMA0_GLO_CFG_EXT0,
|
||||
MT_WFDMA0_CSR_TX_DMASHDL_ENABLE);
|
||||
mt76_set(dev, MT_DMASHDL_SW_CONTROL, MT_DMASHDL_DMASHDL_BYPASS);
|
||||
|
||||
if (force) {
|
||||
/* reset */
|
||||
mt76_clear(dev, MT_WFDMA0_RST,
|
||||
MT_WFDMA0_RST_DMASHDL_ALL_RST |
|
||||
MT_WFDMA0_RST_LOGIC_RST);
|
||||
|
||||
mt76_set(dev, MT_WFDMA0_RST,
|
||||
MT_WFDMA0_RST_DMASHDL_ALL_RST |
|
||||
MT_WFDMA0_RST_LOGIC_RST);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt792x_dma_disable);
|
||||
|
||||
void mt792x_dma_cleanup(struct mt792x_dev *dev)
|
||||
{
|
||||
/* disable */
|
||||
mt76_clear(dev, MT_WFDMA0_GLO_CFG,
|
||||
MT_WFDMA0_GLO_CFG_TX_DMA_EN |
|
||||
MT_WFDMA0_GLO_CFG_RX_DMA_EN |
|
||||
MT_WFDMA0_GLO_CFG_CSR_DISP_BASE_PTR_CHAIN_EN |
|
||||
MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
|
||||
MT_WFDMA0_GLO_CFG_OMIT_RX_INFO |
|
||||
MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
|
||||
|
||||
mt76_poll_msec_tick(dev, MT_WFDMA0_GLO_CFG,
|
||||
MT_WFDMA0_GLO_CFG_TX_DMA_BUSY |
|
||||
MT_WFDMA0_GLO_CFG_RX_DMA_BUSY, 0, 100, 1);
|
||||
|
||||
/* reset */
|
||||
mt76_clear(dev, MT_WFDMA0_RST,
|
||||
MT_WFDMA0_RST_DMASHDL_ALL_RST |
|
||||
MT_WFDMA0_RST_LOGIC_RST);
|
||||
|
||||
mt76_set(dev, MT_WFDMA0_RST,
|
||||
MT_WFDMA0_RST_DMASHDL_ALL_RST |
|
||||
MT_WFDMA0_RST_LOGIC_RST);
|
||||
|
||||
mt76_dma_cleanup(&dev->mt76);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt792x_dma_cleanup);
|
||||
|
||||
int mt792x_poll_rx(struct napi_struct *napi, int budget)
|
||||
{
|
||||
struct mt792x_dev *dev;
|
||||
int done;
|
||||
|
||||
dev = container_of(napi->dev, struct mt792x_dev, mt76.napi_dev);
|
||||
|
||||
if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) {
|
||||
napi_complete(napi);
|
||||
queue_work(dev->mt76.wq, &dev->pm.wake_work);
|
||||
return 0;
|
||||
}
|
||||
done = mt76_dma_rx_poll(napi, budget);
|
||||
mt76_connac_pm_unref(&dev->mphy, &dev->pm);
|
||||
|
||||
return done;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt792x_poll_rx);
|
||||
|
||||
int mt792x_wfsys_reset(struct mt792x_dev *dev, u32 addr)
|
||||
{
|
||||
mt76_clear(dev, addr, WFSYS_SW_RST_B);
|
||||
msleep(50);
|
||||
mt76_set(dev, addr, WFSYS_SW_RST_B);
|
||||
|
||||
if (!__mt76_poll_msec(&dev->mt76, addr, WFSYS_SW_INIT_DONE,
|
||||
WFSYS_SW_INIT_DONE, 500))
|
||||
return -ETIMEDOUT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt792x_wfsys_reset);
|
||||
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
MODULE_AUTHOR("Lorenzo Bianconi <[email protected]>");
|
||||
|
||||
Reference in New Issue
Block a user