xref: /freebsd/sys/contrib/dev/mediatek/mt76/mt76x02_dma.h (revision 6c92544d7c9722a3fe6263134938d1f864c158c5)
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