1*6c92544dSBjoern A. Zeeb /* SPDX-License-Identifier: ISC */
2*6c92544dSBjoern A. Zeeb /*
3*6c92544dSBjoern A. Zeeb * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
4*6c92544dSBjoern A. Zeeb */
5*6c92544dSBjoern A. Zeeb
6*6c92544dSBjoern A. Zeeb #ifndef __MT76x02_DMA_H
7*6c92544dSBjoern A. Zeeb #define __MT76x02_DMA_H
8*6c92544dSBjoern A. Zeeb
9*6c92544dSBjoern A. Zeeb #include "mt76x02.h"
10*6c92544dSBjoern A. Zeeb #include "dma.h"
11*6c92544dSBjoern A. Zeeb
12*6c92544dSBjoern A. Zeeb #define MT_TXD_INFO_LEN GENMASK(15, 0)
13*6c92544dSBjoern A. Zeeb #define MT_TXD_INFO_NEXT_VLD BIT(16)
14*6c92544dSBjoern A. Zeeb #define MT_TXD_INFO_TX_BURST BIT(17)
15*6c92544dSBjoern A. Zeeb #define MT_TXD_INFO_80211 BIT(19)
16*6c92544dSBjoern A. Zeeb #define MT_TXD_INFO_TSO BIT(20)
17*6c92544dSBjoern A. Zeeb #define MT_TXD_INFO_CSO BIT(21)
18*6c92544dSBjoern A. Zeeb #define MT_TXD_INFO_WIV BIT(24)
19*6c92544dSBjoern A. Zeeb #define MT_TXD_INFO_QSEL GENMASK(26, 25)
20*6c92544dSBjoern A. Zeeb #define MT_TXD_INFO_DPORT GENMASK(29, 27)
21*6c92544dSBjoern A. Zeeb #define MT_TXD_INFO_TYPE GENMASK(31, 30)
22*6c92544dSBjoern A. Zeeb
23*6c92544dSBjoern A. Zeeb #define MT_RX_FCE_INFO_LEN GENMASK(13, 0)
24*6c92544dSBjoern A. Zeeb #define MT_RX_FCE_INFO_SELF_GEN BIT(15)
25*6c92544dSBjoern A. Zeeb #define MT_RX_FCE_INFO_CMD_SEQ GENMASK(19, 16)
26*6c92544dSBjoern A. Zeeb #define MT_RX_FCE_INFO_EVT_TYPE GENMASK(23, 20)
27*6c92544dSBjoern A. Zeeb #define MT_RX_FCE_INFO_PCIE_INTR BIT(24)
28*6c92544dSBjoern A. Zeeb #define MT_RX_FCE_INFO_QSEL GENMASK(26, 25)
29*6c92544dSBjoern A. Zeeb #define MT_RX_FCE_INFO_D_PORT GENMASK(29, 27)
30*6c92544dSBjoern A. Zeeb #define MT_RX_FCE_INFO_TYPE GENMASK(31, 30)
31*6c92544dSBjoern A. Zeeb
32*6c92544dSBjoern A. Zeeb /* MCU request message header */
33*6c92544dSBjoern A. Zeeb #define MT_MCU_MSG_LEN GENMASK(15, 0)
34*6c92544dSBjoern A. Zeeb #define MT_MCU_MSG_CMD_SEQ GENMASK(19, 16)
35*6c92544dSBjoern A. Zeeb #define MT_MCU_MSG_CMD_TYPE GENMASK(26, 20)
36*6c92544dSBjoern A. Zeeb #define MT_MCU_MSG_PORT GENMASK(29, 27)
37*6c92544dSBjoern A. Zeeb #define MT_MCU_MSG_TYPE GENMASK(31, 30)
38*6c92544dSBjoern A. Zeeb #define MT_MCU_MSG_TYPE_CMD BIT(30)
39*6c92544dSBjoern A. Zeeb
40*6c92544dSBjoern A. Zeeb #define MT_RX_HEADROOM 32
41*6c92544dSBjoern A. Zeeb #define MT76X02_RX_RING_SIZE 256
42*6c92544dSBjoern A. Zeeb
43*6c92544dSBjoern A. Zeeb enum dma_msg_port {
44*6c92544dSBjoern A. Zeeb WLAN_PORT,
45*6c92544dSBjoern A. Zeeb CPU_RX_PORT,
46*6c92544dSBjoern A. Zeeb CPU_TX_PORT,
47*6c92544dSBjoern A. Zeeb HOST_PORT,
48*6c92544dSBjoern A. Zeeb VIRTUAL_CPU_RX_PORT,
49*6c92544dSBjoern A. Zeeb VIRTUAL_CPU_TX_PORT,
50*6c92544dSBjoern A. Zeeb DISCARD,
51*6c92544dSBjoern A. Zeeb };
52*6c92544dSBjoern A. Zeeb
53*6c92544dSBjoern A. Zeeb static inline bool
mt76x02_wait_for_wpdma(struct mt76_dev * dev,int timeout)54*6c92544dSBjoern A. Zeeb mt76x02_wait_for_wpdma(struct mt76_dev *dev, int timeout)
55*6c92544dSBjoern A. Zeeb {
56*6c92544dSBjoern A. Zeeb return __mt76_poll(dev, MT_WPDMA_GLO_CFG,
57*6c92544dSBjoern A. Zeeb MT_WPDMA_GLO_CFG_TX_DMA_BUSY |
58*6c92544dSBjoern A. Zeeb MT_WPDMA_GLO_CFG_RX_DMA_BUSY,
59*6c92544dSBjoern A. Zeeb 0, timeout);
60*6c92544dSBjoern A. Zeeb }
61*6c92544dSBjoern A. Zeeb
62*6c92544dSBjoern A. Zeeb int mt76x02_dma_init(struct mt76x02_dev *dev);
63*6c92544dSBjoern A. Zeeb void mt76x02_dma_disable(struct mt76x02_dev *dev);
64*6c92544dSBjoern A. Zeeb
65*6c92544dSBjoern A. Zeeb #endif /* __MT76x02_DMA_H */
66