1 // SPDX-License-Identifier: GPL-2.0-only
4 #ifndef __MTK_WED_PRIV_H
5 #define __MTK_WED_PRIV_H
7 #include <linux/soc/mediatek/mtk_wed.h>
8 #include <linux/debugfs.h>
9 #include <linux/regmap.h>
10 #include <linux/netdevice.h>
12 #include "mtk_wed_regs.h"
17 struct mtk_wed_soc_data {
21 u32 reset_idx_tx_mask;
22 u32 reset_idx_rx_mask;
24 u32 tx_ring_desc_size;
28 struct mtk_wed_amsdu {
34 const struct mtk_wed_soc_data *soc;
35 struct device_node *node;
38 struct regmap *hifsys;
42 struct regmap *mirror;
43 struct dentry *debugfs_dir;
44 struct mtk_wed_device *wed_dev;
45 struct mtk_wed_wo *wed_wo;
46 struct mtk_wed_amsdu *wed_amsdu;
56 struct mtk_wdma_info {
64 #ifdef CONFIG_NET_MEDIATEK_SOC_WED
65 static inline bool mtk_wed_is_v1(struct mtk_wed_hw *hw)
67 return hw->version == 1;
70 static inline bool mtk_wed_is_v2(struct mtk_wed_hw *hw)
72 return hw->version == 2;
75 static inline bool mtk_wed_is_v3(struct mtk_wed_hw *hw)
77 return hw->version == 3;
80 static inline bool mtk_wed_is_v3_or_greater(struct mtk_wed_hw *hw)
82 return hw->version > 2;
86 wed_w32(struct mtk_wed_device *dev, u32 reg, u32 val)
88 regmap_write(dev->hw->regs, reg, val);
92 wed_r32(struct mtk_wed_device *dev, u32 reg)
96 regmap_read(dev->hw->regs, reg, &val);
102 wdma_w32(struct mtk_wed_device *dev, u32 reg, u32 val)
104 writel(val, dev->hw->wdma + reg);
108 wdma_r32(struct mtk_wed_device *dev, u32 reg)
110 return readl(dev->hw->wdma + reg);
114 wpdma_tx_r32(struct mtk_wed_device *dev, int ring, u32 reg)
116 if (!dev->tx_ring[ring].wpdma)
119 return readl(dev->tx_ring[ring].wpdma + reg);
123 wpdma_tx_w32(struct mtk_wed_device *dev, int ring, u32 reg, u32 val)
125 if (!dev->tx_ring[ring].wpdma)
128 writel(val, dev->tx_ring[ring].wpdma + reg);
132 wpdma_rx_r32(struct mtk_wed_device *dev, int ring, u32 reg)
134 if (!dev->rx_ring[ring].wpdma)
137 return readl(dev->rx_ring[ring].wpdma + reg);
141 wpdma_rx_w32(struct mtk_wed_device *dev, int ring, u32 reg, u32 val)
143 if (!dev->rx_ring[ring].wpdma)
146 writel(val, dev->rx_ring[ring].wpdma + reg);
150 wpdma_txfree_r32(struct mtk_wed_device *dev, u32 reg)
152 if (!dev->txfree_ring.wpdma)
155 return readl(dev->txfree_ring.wpdma + reg);
159 wpdma_txfree_w32(struct mtk_wed_device *dev, u32 reg, u32 val)
161 if (!dev->txfree_ring.wpdma)
164 writel(val, dev->txfree_ring.wpdma + reg);
167 static inline u32 mtk_wed_get_pcie_base(struct mtk_wed_device *dev)
169 if (!mtk_wed_is_v3_or_greater(dev->hw))
170 return MTK_WED_PCIE_BASE;
172 switch (dev->hw->index) {
174 return MTK_WED_PCIE_BASE1;
176 return MTK_WED_PCIE_BASE2;
178 return MTK_WED_PCIE_BASE0;
182 void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
183 void __iomem *wdma, phys_addr_t wdma_phy,
185 void mtk_wed_exit(void);
186 int mtk_wed_flow_add(int index);
187 void mtk_wed_flow_remove(int index);
188 void mtk_wed_fe_reset(void);
189 void mtk_wed_fe_reset_complete(void);
192 mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
193 void __iomem *wdma, phys_addr_t wdma_phy,
201 static inline int mtk_wed_flow_add(int index)
205 static inline void mtk_wed_flow_remove(int index)
209 static inline void mtk_wed_fe_reset(void)
213 static inline void mtk_wed_fe_reset_complete(void)
218 #ifdef CONFIG_DEBUG_FS
219 void mtk_wed_hw_add_debugfs(struct mtk_wed_hw *hw);
221 static inline void mtk_wed_hw_add_debugfs(struct mtk_wed_hw *hw)