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