mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt7603: control mac stop/start from mac80211
Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
@@ -108,6 +108,9 @@ static inline void mt7603_irq_disable(struct mt7603_dev *dev, u32 mask)
|
|||||||
mt7603_set_irq_mask(dev, mask, 0);
|
mt7603_set_irq_mask(dev, mask, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mt7603_mac_start(struct mt7603_dev *dev);
|
||||||
|
void mt7603_mac_stop(struct mt7603_dev *dev);
|
||||||
|
|
||||||
int mt7603_set_channel(struct mt7603_dev *dev, struct cfg80211_chan_def *def);
|
int mt7603_set_channel(struct mt7603_dev *dev, struct cfg80211_chan_def *def);
|
||||||
int mt7603_mcu_set_channel(struct mt7603_dev *dev);
|
int mt7603_mcu_set_channel(struct mt7603_dev *dev);
|
||||||
int mt7603_mcu_reg_read(struct mt7603_dev *dev, u32 reg, u32 *val, bool rf);
|
int mt7603_mcu_reg_read(struct mt7603_dev *dev, u32 reg, u32 *val, bool rf);
|
||||||
|
|||||||
+15
-13
@@ -92,26 +92,32 @@ mt7603_mac_reset(struct mt7603_dev *dev)
|
|||||||
/* Configure all rx packets to HIF */
|
/* Configure all rx packets to HIF */
|
||||||
mt76_wr(dev, MT_DMA_RCFR0, 0xc0200000);
|
mt76_wr(dev, MT_DMA_RCFR0, 0xc0200000);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mt7603_mac_start(struct mt7603_dev *dev)
|
|
||||||
{
|
|
||||||
wait_for_wpdma(dev);
|
wait_for_wpdma(dev);
|
||||||
udelay(50);
|
udelay(50);
|
||||||
|
|
||||||
mt76_clear(dev, MT_WF_ARB_SCR, MT_WF_ARB_TX_DISABLE | MT_WF_ARB_RX_DISABLE);
|
|
||||||
mt76_wr(dev, MT_WF_ARB_TX_START_0, ~0);
|
|
||||||
mt76_set(dev, MT_WF_ARB_RQCR, MT_WF_ARB_RQCR_RX_START);
|
|
||||||
|
|
||||||
mt76_set(dev, MT_WPDMA_GLO_CFG,
|
mt76_set(dev, MT_WPDMA_GLO_CFG,
|
||||||
MT_WPDMA_GLO_CFG_TX_DMA_EN |
|
MT_WPDMA_GLO_CFG_TX_DMA_EN |
|
||||||
MT_WPDMA_GLO_CFG_RX_DMA_EN);
|
MT_WPDMA_GLO_CFG_RX_DMA_EN);
|
||||||
|
|
||||||
mt7603_irq_enable(dev, MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL);
|
mt7603_irq_enable(dev, MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mt7603_mac_start(struct mt7603_dev *dev)
|
||||||
|
{
|
||||||
|
mt76_clear(dev, MT_WF_ARB_SCR, MT_WF_ARB_TX_DISABLE | MT_WF_ARB_RX_DISABLE);
|
||||||
|
mt76_wr(dev, MT_WF_ARB_TX_START_0, ~0);
|
||||||
|
mt76_set(dev, MT_WF_ARB_RQCR, MT_WF_ARB_RQCR_RX_START);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mt7603_mac_stop(struct mt7603_dev *dev)
|
||||||
|
{
|
||||||
|
mt76_set(dev, MT_WF_ARB_SCR, MT_WF_ARB_TX_DISABLE | MT_WF_ARB_RX_DISABLE);
|
||||||
|
mt76_wr(dev, MT_WF_ARB_TX_START_0, 0);
|
||||||
|
mt76_clear(dev, MT_WF_ARB_RQCR, MT_WF_ARB_RQCR_RX_START);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mt7603_dma_sched_init(struct mt7603_dev *dev)
|
mt7603_dma_sched_init(struct mt7603_dev *dev)
|
||||||
{
|
{
|
||||||
@@ -235,10 +241,6 @@ mt7603_init_hardware(struct mt7603_dev *dev)
|
|||||||
dev->rxfilter = mt76_rr(dev, MT_WF_RFCR);
|
dev->rxfilter = mt76_rr(dev, MT_WF_RFCR);
|
||||||
set_bit(MT76_STATE_INITIALIZED, &dev->mt76.state);
|
set_bit(MT76_STATE_INITIALIZED, &dev->mt76.state);
|
||||||
|
|
||||||
ret = mt7603_mac_start(dev);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
ret = mt7603_mcu_init(dev);
|
ret = mt7603_mcu_init(dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ mt7603_start(struct ieee80211_hw *hw)
|
|||||||
struct mt7603_dev *dev = hw->priv;
|
struct mt7603_dev *dev = hw->priv;
|
||||||
|
|
||||||
mt76_clear(dev, MT_AGG_TMP, GENMASK(31, 16));
|
mt76_clear(dev, MT_AGG_TMP, GENMASK(31, 16));
|
||||||
|
mt7603_mac_start(dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -28,6 +29,7 @@ mt7603_stop(struct ieee80211_hw *hw)
|
|||||||
{
|
{
|
||||||
struct mt7603_dev *dev = hw->priv;
|
struct mt7603_dev *dev = hw->priv;
|
||||||
|
|
||||||
|
mt7603_mac_stop(dev);
|
||||||
mt76_set(dev, MT_AGG_TMP, GENMASK(31, 16));
|
mt76_set(dev, MT_AGG_TMP, GENMASK(31, 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user