0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef _DXE_H_
0018 #define _DXE_H_
0019
0020 #include "wcn36xx.h"
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #define WCN36XX_DXE_MEM_REG 0
0032
0033 #define WCN36XX_CCU_DXE_INT_SELECT_RIVA 0x310
0034 #define WCN36XX_CCU_DXE_INT_SELECT_PRONTO 0x10dc
0035
0036
0037 #define WCN36xx_DXE_CTRL_VLD BIT(0)
0038
0039 #define WCN36xx_DXE_CTRL_EOP BIT(3)
0040
0041 #define WCN36xx_DXE_CTRL_BDH BIT(4)
0042
0043 #define WCN36xx_DXE_CTRL_SIQ BIT(5)
0044
0045 #define WCN36xx_DXE_CTRL_DIQ BIT(6)
0046
0047 #define WCN36xx_DXE_CTRL_PIQ BIT(7)
0048
0049 #define WCN36xx_DXE_CTRL_PDU_REL BIT(8)
0050
0051 #define WCN36xx_DXE_CTRL_STOP BIT(16)
0052
0053 #define WCN36xx_DXE_CTRL_INT BIT(17)
0054
0055 #define WCN36xx_DXE_CTRL_SWAP BIT(20)
0056
0057 #define WCN36xx_DXE_CTRL_ENDIANNESS BIT(21)
0058
0059
0060 #define WCN36xx_DXE_CTRL_XTYPE_SHIFT 1
0061 #define WCN36xx_DXE_CTRL_XTYPE_MASK GENMASK(2, WCN36xx_DXE_CTRL_XTYPE_SHIFT)
0062 #define WCN36xx_DXE_CTRL_XTYPE_SET(x) ((x) << WCN36xx_DXE_CTRL_XTYPE_SHIFT)
0063
0064
0065 #define WCN36xx_DXE_CTRL_BTHLD_SEL_SHIFT 9
0066 #define WCN36xx_DXE_CTRL_BTHLD_SEL_MASK GENMASK(12, WCN36xx_DXE_CTRL_BTHLD_SEL_SHIFT)
0067 #define WCN36xx_DXE_CTRL_BTHLD_SEL_SET(x) ((x) << WCN36xx_DXE_CTRL_BTHLD_SEL_SHIFT)
0068
0069
0070 #define WCN36xx_DXE_CTRL_PRIO_SHIFT 13
0071 #define WCN36xx_DXE_CTRL_PRIO_MASK GENMASK(15, WCN36xx_DXE_CTRL_PRIO_SHIFT)
0072 #define WCN36xx_DXE_CTRL_PRIO_SET(x) ((x) << WCN36xx_DXE_CTRL_PRIO_SHIFT)
0073
0074
0075 #define WCN36xx_DXE_CTRL_BDT_IDX_SHIFT 18
0076 #define WCN36xx_DXE_CTRL_BDT_IDX_MASK GENMASK(19, WCN36xx_DXE_CTRL_BDT_IDX_SHIFT)
0077 #define WCN36xx_DXE_CTRL_BDT_IDX_SET(x) ((x) << WCN36xx_DXE_CTRL_BDT_IDX_SHIFT)
0078
0079
0080
0081 #define WCN36xx_DXE_XTYPE_H2H (0)
0082
0083 #define WCN36xx_DXE_XTYPE_H2B (2)
0084
0085 #define WCN36xx_DXE_XTYPE_B2H (3)
0086
0087 #define WCN36XX_DXE_CTRL_TX_L (WCN36xx_DXE_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_H2B) | \
0088 WCN36xx_DXE_CTRL_DIQ | WCN36xx_DXE_CTRL_BTHLD_SEL_SET(5) | \
0089 WCN36xx_DXE_CTRL_PRIO_SET(4) | WCN36xx_DXE_CTRL_INT | \
0090 WCN36xx_DXE_CTRL_SWAP | WCN36xx_DXE_CTRL_ENDIANNESS)
0091
0092 #define WCN36XX_DXE_CTRL_TX_H (WCN36xx_DXE_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_H2B) | \
0093 WCN36xx_DXE_CTRL_DIQ | WCN36xx_DXE_CTRL_BTHLD_SEL_SET(7) | \
0094 WCN36xx_DXE_CTRL_PRIO_SET(6) | WCN36xx_DXE_CTRL_INT | \
0095 WCN36xx_DXE_CTRL_SWAP | WCN36xx_DXE_CTRL_ENDIANNESS)
0096
0097 #define WCN36XX_DXE_CTRL_RX_L (WCN36xx_DXE_CTRL_VLD | \
0098 WCN36xx_DXE_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_B2H) | \
0099 WCN36xx_DXE_CTRL_EOP | WCN36xx_DXE_CTRL_SIQ | \
0100 WCN36xx_DXE_CTRL_PDU_REL | WCN36xx_DXE_CTRL_BTHLD_SEL_SET(6) | \
0101 WCN36xx_DXE_CTRL_PRIO_SET(5) | WCN36xx_DXE_CTRL_INT | \
0102 WCN36xx_DXE_CTRL_SWAP)
0103
0104 #define WCN36XX_DXE_CTRL_RX_H (WCN36xx_DXE_CTRL_VLD | \
0105 WCN36xx_DXE_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_B2H) | \
0106 WCN36xx_DXE_CTRL_EOP | WCN36xx_DXE_CTRL_SIQ | \
0107 WCN36xx_DXE_CTRL_PDU_REL | WCN36xx_DXE_CTRL_BTHLD_SEL_SET(8) | \
0108 WCN36xx_DXE_CTRL_PRIO_SET(6) | WCN36xx_DXE_CTRL_INT | \
0109 WCN36xx_DXE_CTRL_SWAP)
0110
0111 #define WCN36XX_DXE_CTRL_TX_H_BD (WCN36xx_DXE_CTRL_VLD | \
0112 WCN36xx_DXE_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_H2B) | \
0113 WCN36xx_DXE_CTRL_DIQ | WCN36xx_DXE_CTRL_BTHLD_SEL_SET(7) | \
0114 WCN36xx_DXE_CTRL_PRIO_SET(6) | WCN36xx_DXE_CTRL_SWAP | \
0115 WCN36xx_DXE_CTRL_ENDIANNESS)
0116
0117 #define WCN36XX_DXE_CTRL_TX_H_SKB (WCN36xx_DXE_CTRL_VLD | \
0118 WCN36xx_DXE_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_H2B) | \
0119 WCN36xx_DXE_CTRL_EOP | WCN36xx_DXE_CTRL_DIQ | \
0120 WCN36xx_DXE_CTRL_BTHLD_SEL_SET(7) | WCN36xx_DXE_CTRL_PRIO_SET(6) | \
0121 WCN36xx_DXE_CTRL_INT | WCN36xx_DXE_CTRL_SWAP | \
0122 WCN36xx_DXE_CTRL_ENDIANNESS)
0123
0124 #define WCN36XX_DXE_CTRL_TX_L_BD (WCN36xx_DXE_CTRL_VLD | \
0125 WCN36xx_DXE_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_H2B) | \
0126 WCN36xx_DXE_CTRL_DIQ | WCN36xx_DXE_CTRL_BTHLD_SEL_SET(5) | \
0127 WCN36xx_DXE_CTRL_PRIO_SET(4) | WCN36xx_DXE_CTRL_SWAP | \
0128 WCN36xx_DXE_CTRL_ENDIANNESS)
0129
0130 #define WCN36XX_DXE_CTRL_TX_L_SKB (WCN36xx_DXE_CTRL_VLD | \
0131 WCN36xx_DXE_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_H2B) | \
0132 WCN36xx_DXE_CTRL_EOP | WCN36xx_DXE_CTRL_DIQ | \
0133 WCN36xx_DXE_CTRL_BTHLD_SEL_SET(5) | WCN36xx_DXE_CTRL_PRIO_SET(4) | \
0134 WCN36xx_DXE_CTRL_INT | WCN36xx_DXE_CTRL_SWAP | \
0135 WCN36xx_DXE_CTRL_ENDIANNESS)
0136
0137
0138 #define WCN36XX_DXE_WQ_TX_L 0x17
0139 #define WCN36XX_DXE_WQ_TX_H 0x17
0140 #define WCN36XX_DXE_WQ_RX_L 0xB
0141 #define WCN36XX_DXE_WQ_RX_H 0x4
0142
0143
0144 #define WCN36xx_DXE_CH_CTRL_EN BIT(0)
0145
0146 #define WCN36xx_DXE_CH_CTRL_EOP BIT(3)
0147
0148 #define WCN36xx_DXE_CH_CTRL_BDH BIT(4)
0149
0150 #define WCN36xx_DXE_CH_CTRL_SIQ BIT(5)
0151
0152 #define WCN36xx_DXE_CH_CTRL_DIQ BIT(6)
0153
0154 #define WCN36xx_DXE_CH_CTRL_PIQ BIT(7)
0155
0156 #define WCN36xx_DXE_CH_CTRL_PDU_REL BIT(8)
0157
0158 #define WCN36xx_DXE_CH_CTRL_STOP BIT(16)
0159
0160 #define WCN36xx_DXE_CH_CTRL_INE_ED BIT(17)
0161
0162 #define WCN36xx_DXE_CH_CTRL_INE_ERR BIT(18)
0163
0164 #define WCN36xx_DXE_CH_CTRL_INE_DONE BIT(19)
0165
0166 #define WCN36xx_DXE_CH_CTRL_EDEN BIT(20)
0167
0168 #define WCN36xx_DXE_CH_CTRL_EDVEN BIT(21)
0169
0170 #define WCN36xx_DXE_CH_CTRL_ENDIANNESS BIT(26)
0171
0172 #define WCN36xx_DXE_CH_CTRL_ABORT BIT(27)
0173
0174 #define WCN36xx_DXE_CH_CTRL_DFMT BIT(28)
0175
0176 #define WCN36xx_DXE_CH_CTRL_SWAP BIT(31)
0177
0178
0179 #define WCN36xx_DXE_CH_CTRL_XTYPE_SHIFT 1
0180 #define WCN36xx_DXE_CH_CTRL_XTYPE_MASK GENMASK(2, WCN36xx_DXE_CH_CTRL_XTYPE_SHIFT)
0181 #define WCN36xx_DXE_CH_CTRL_XTYPE_SET(x) ((x) << WCN36xx_DXE_CH_CTRL_XTYPE_SHIFT)
0182
0183
0184 #define WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SHIFT 9
0185 #define WCN36xx_DXE_CH_CTRL_BTHLD_SEL_MASK GENMASK(12, WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SHIFT)
0186 #define WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SET(x) ((x) << WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SHIFT)
0187
0188
0189 #define WCN36xx_DXE_CH_CTRL_PRIO_SHIFT 13
0190 #define WCN36xx_DXE_CH_CTRL_PRIO_MASK GENMASK(15, WCN36xx_DXE_CH_CTRL_PRIO_SHIFT)
0191 #define WCN36xx_DXE_CH_CTRL_PRIO_SET(x) ((x) << WCN36xx_DXE_CH_CTRL_PRIO_SHIFT)
0192
0193
0194 #define WCN36xx_DXE_CH_CTRL_SEL_SHIFT 22
0195 #define WCN36xx_DXE_CH_CTRL_SEL_MASK GENMASK(25, WCN36xx_DXE_CH_CTRL_SEL_SHIFT)
0196 #define WCN36xx_DXE_CH_CTRL_SEL_SET(x) ((x) << WCN36xx_DXE_CH_CTRL_SEL_SHIFT)
0197
0198
0199 #define WCN36xx_DXE_CH_CTRL_BDT_IDX_SHIFT 29
0200 #define WCN36xx_DXE_CH_CTRL_BDT_IDX_MASK GENMASK(30, WCN36xx_DXE_CH_CTRL_BDT_IDX_SHIFT)
0201 #define WCN36xx_DXE_CH_CTRL_BDT_IDX_SET(x) ((x) << WCN36xx_DXE_CH_CTRL_BDT_IDX_SHIFT)
0202
0203
0204 #define WCN36XX_DXE_CH_DEFAULT_CTL_RX_L (WCN36xx_DXE_CH_CTRL_EN | \
0205 WCN36xx_DXE_CH_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_B2H) | \
0206 WCN36xx_DXE_CH_CTRL_EOP | WCN36xx_DXE_CH_CTRL_SIQ | \
0207 WCN36xx_DXE_CH_CTRL_PDU_REL | WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SET(6) | \
0208 WCN36xx_DXE_CH_CTRL_PRIO_SET(5) | WCN36xx_DXE_CH_CTRL_INE_ED | \
0209 WCN36xx_DXE_CH_CTRL_INE_ERR | WCN36xx_DXE_CH_CTRL_INE_DONE | \
0210 WCN36xx_DXE_CH_CTRL_EDEN | WCN36xx_DXE_CH_CTRL_EDVEN | \
0211 WCN36xx_DXE_CH_CTRL_SEL_SET(1) | WCN36xx_DXE_CH_CTRL_ENDIANNESS | \
0212 WCN36xx_DXE_CH_CTRL_SWAP)
0213
0214 #define WCN36XX_DXE_CH_DEFAULT_CTL_RX_H (WCN36xx_DXE_CH_CTRL_EN | \
0215 WCN36xx_DXE_CH_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_B2H) | \
0216 WCN36xx_DXE_CH_CTRL_EOP | WCN36xx_DXE_CH_CTRL_SIQ | \
0217 WCN36xx_DXE_CH_CTRL_PDU_REL | WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SET(8) | \
0218 WCN36xx_DXE_CH_CTRL_PRIO_SET(6) | WCN36xx_DXE_CH_CTRL_INE_ED | \
0219 WCN36xx_DXE_CH_CTRL_INE_ERR | WCN36xx_DXE_CH_CTRL_INE_DONE | \
0220 WCN36xx_DXE_CH_CTRL_EDEN | WCN36xx_DXE_CH_CTRL_EDVEN | \
0221 WCN36xx_DXE_CH_CTRL_SEL_SET(3) | WCN36xx_DXE_CH_CTRL_ENDIANNESS | \
0222 WCN36xx_DXE_CH_CTRL_SWAP)
0223
0224 #define WCN36XX_DXE_CH_DEFAULT_CTL_TX_H (WCN36xx_DXE_CH_CTRL_EN | \
0225 WCN36xx_DXE_CH_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_H2B) | \
0226 WCN36xx_DXE_CH_CTRL_EOP | WCN36xx_DXE_CH_CTRL_DIQ | \
0227 WCN36xx_DXE_CH_CTRL_PDU_REL | WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SET(7) | \
0228 WCN36xx_DXE_CH_CTRL_PRIO_SET(6) | WCN36xx_DXE_CH_CTRL_INE_ED | \
0229 WCN36xx_DXE_CH_CTRL_INE_ERR | WCN36xx_DXE_CH_CTRL_INE_DONE | \
0230 WCN36xx_DXE_CH_CTRL_EDEN | WCN36xx_DXE_CH_CTRL_EDVEN | \
0231 WCN36xx_DXE_CH_CTRL_SEL_SET(4) | WCN36xx_DXE_CH_CTRL_ENDIANNESS | \
0232 WCN36xx_DXE_CH_CTRL_SWAP)
0233
0234 #define WCN36XX_DXE_CH_DEFAULT_CTL_TX_L (WCN36xx_DXE_CH_CTRL_EN | \
0235 WCN36xx_DXE_CH_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_H2B) | \
0236 WCN36xx_DXE_CH_CTRL_EOP | WCN36xx_DXE_CH_CTRL_DIQ | \
0237 WCN36xx_DXE_CH_CTRL_PDU_REL | WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SET(5) | \
0238 WCN36xx_DXE_CH_CTRL_PRIO_SET(4) | WCN36xx_DXE_CH_CTRL_INE_ED | \
0239 WCN36xx_DXE_CH_CTRL_INE_ERR | WCN36xx_DXE_CH_CTRL_INE_DONE | \
0240 WCN36xx_DXE_CH_CTRL_EDEN | WCN36xx_DXE_CH_CTRL_EDVEN | \
0241 WCN36xx_DXE_CH_CTRL_SEL_SET(0) | WCN36xx_DXE_CH_CTRL_ENDIANNESS | \
0242 WCN36xx_DXE_CH_CTRL_SWAP)
0243
0244
0245 #define WCN36XX_DXE_MEM_CSR (WCN36XX_DXE_MEM_REG + 0x00)
0246 #define WCN36XX_DXE_REG_CSR_RESET (WCN36XX_DXE_MEM_REG + 0x00)
0247 #define WCN36XX_DXE_ENCH_ADDR (WCN36XX_DXE_MEM_REG + 0x04)
0248 #define WCN36XX_DXE_REG_CH_EN (WCN36XX_DXE_MEM_REG + 0x08)
0249 #define WCN36XX_DXE_REG_CH_DONE (WCN36XX_DXE_MEM_REG + 0x0C)
0250 #define WCN36XX_DXE_REG_CH_ERR (WCN36XX_DXE_MEM_REG + 0x10)
0251 #define WCN36XX_DXE_INT_MASK_REG (WCN36XX_DXE_MEM_REG + 0x18)
0252 #define WCN36XX_DXE_INT_SRC_RAW_REG (WCN36XX_DXE_MEM_REG + 0x20)
0253
0254
0255 #define WCN36XX_DXE_INT_CH4_MASK 0x00000010
0256 #define WCN36XX_DXE_INT_CH3_MASK 0x00000008
0257
0258 #define WCN36XX_DXE_INT_CH1_MASK 0x00000002
0259 #define WCN36XX_DXE_INT_CH0_MASK 0x00000001
0260 #define WCN36XX_DXE_0_INT_CLR (WCN36XX_DXE_MEM_REG + 0x30)
0261 #define WCN36XX_DXE_0_INT_ED_CLR (WCN36XX_DXE_MEM_REG + 0x34)
0262 #define WCN36XX_DXE_0_INT_DONE_CLR (WCN36XX_DXE_MEM_REG + 0x38)
0263 #define WCN36XX_DXE_0_INT_ERR_CLR (WCN36XX_DXE_MEM_REG + 0x3C)
0264
0265 #define WCN36XX_CH_STAT_INT_DONE_MASK 0x00008000
0266 #define WCN36XX_CH_STAT_INT_ERR_MASK 0x00004000
0267 #define WCN36XX_CH_STAT_INT_ED_MASK 0x00002000
0268
0269 #define WCN36XX_DXE_0_CH0_STATUS (WCN36XX_DXE_MEM_REG + 0x404)
0270 #define WCN36XX_DXE_0_CH1_STATUS (WCN36XX_DXE_MEM_REG + 0x444)
0271 #define WCN36XX_DXE_0_CH2_STATUS (WCN36XX_DXE_MEM_REG + 0x484)
0272 #define WCN36XX_DXE_0_CH3_STATUS (WCN36XX_DXE_MEM_REG + 0x4C4)
0273 #define WCN36XX_DXE_0_CH4_STATUS (WCN36XX_DXE_MEM_REG + 0x504)
0274
0275 #define WCN36XX_DXE_REG_RESET 0x5c89
0276
0277
0278 #define WCN36XX_DXE_BMU_WQ_RX_LOW 0xB
0279 #define WCN36XX_DXE_BMU_WQ_RX_HIGH 0x4
0280
0281 #define WCN36XX_DXE_TX_LOW_OFFSET 0x400
0282 #define WCN36XX_DXE_TX_HIGH_OFFSET 0x500
0283 #define WCN36XX_DXE_RX_LOW_OFFSET 0x440
0284 #define WCN36XX_DXE_RX_HIGH_OFFSET 0x4C0
0285
0286
0287 #define WCN36XX_DXE_CH_NEXT_DESC_ADDR 0x001C
0288 #define WCN36XX_DXE_CH_NEXT_DESC_ADDR_TX_L (WCN36XX_DXE_MEM_REG + \
0289 WCN36XX_DXE_TX_LOW_OFFSET + \
0290 WCN36XX_DXE_CH_NEXT_DESC_ADDR)
0291 #define WCN36XX_DXE_CH_NEXT_DESC_ADDR_TX_H (WCN36XX_DXE_MEM_REG + \
0292 WCN36XX_DXE_TX_HIGH_OFFSET + \
0293 WCN36XX_DXE_CH_NEXT_DESC_ADDR)
0294 #define WCN36XX_DXE_CH_NEXT_DESC_ADDR_RX_L (WCN36XX_DXE_MEM_REG + \
0295 WCN36XX_DXE_RX_LOW_OFFSET + \
0296 WCN36XX_DXE_CH_NEXT_DESC_ADDR)
0297 #define WCN36XX_DXE_CH_NEXT_DESC_ADDR_RX_H (WCN36XX_DXE_MEM_REG + \
0298 WCN36XX_DXE_RX_HIGH_OFFSET + \
0299 WCN36XX_DXE_CH_NEXT_DESC_ADDR)
0300
0301
0302 #define WCN36XX_DXE_CH_SRC_ADDR 0x000C
0303 #define WCN36XX_DXE_CH_SRC_ADDR_RX_L (WCN36XX_DXE_MEM_REG + \
0304 WCN36XX_DXE_RX_LOW_OFFSET + \
0305 WCN36XX_DXE_CH_SRC_ADDR)
0306 #define WCN36XX_DXE_CH_SRC_ADDR_RX_H (WCN36XX_DXE_MEM_REG + \
0307 WCN36XX_DXE_RX_HIGH_OFFSET + \
0308 WCN36XX_DXE_CH_SRC_ADDR)
0309
0310
0311 #define WCN36XX_DXE_CH_DEST_ADDR 0x0014
0312 #define WCN36XX_DXE_CH_DEST_ADDR_TX_L (WCN36XX_DXE_MEM_REG + \
0313 WCN36XX_DXE_TX_LOW_OFFSET + \
0314 WCN36XX_DXE_CH_DEST_ADDR)
0315 #define WCN36XX_DXE_CH_DEST_ADDR_TX_H (WCN36XX_DXE_MEM_REG + \
0316 WCN36XX_DXE_TX_HIGH_OFFSET + \
0317 WCN36XX_DXE_CH_DEST_ADDR)
0318 #define WCN36XX_DXE_CH_DEST_ADDR_RX_L (WCN36XX_DXE_MEM_REG + \
0319 WCN36XX_DXE_RX_LOW_OFFSET + \
0320 WCN36XX_DXE_CH_DEST_ADDR)
0321 #define WCN36XX_DXE_CH_DEST_ADDR_RX_H (WCN36XX_DXE_MEM_REG + \
0322 WCN36XX_DXE_RX_HIGH_OFFSET + \
0323 WCN36XX_DXE_CH_DEST_ADDR)
0324
0325
0326 #define WCN36XX_DXE_CH_STATUS_REG_ADDR 0x0004
0327 #define WCN36XX_DXE_CH_STATUS_REG_ADDR_TX_L (WCN36XX_DXE_MEM_REG + \
0328 WCN36XX_DXE_TX_LOW_OFFSET + \
0329 WCN36XX_DXE_CH_STATUS_REG_ADDR)
0330 #define WCN36XX_DXE_CH_STATUS_REG_ADDR_TX_H (WCN36XX_DXE_MEM_REG + \
0331 WCN36XX_DXE_TX_HIGH_OFFSET + \
0332 WCN36XX_DXE_CH_STATUS_REG_ADDR)
0333 #define WCN36XX_DXE_CH_STATUS_REG_ADDR_RX_L (WCN36XX_DXE_MEM_REG + \
0334 WCN36XX_DXE_RX_LOW_OFFSET + \
0335 WCN36XX_DXE_CH_STATUS_REG_ADDR)
0336 #define WCN36XX_DXE_CH_STATUS_REG_ADDR_RX_H (WCN36XX_DXE_MEM_REG + \
0337 WCN36XX_DXE_RX_HIGH_OFFSET + \
0338 WCN36XX_DXE_CH_STATUS_REG_ADDR)
0339
0340
0341
0342 #define WCN36XX_DXE_REG_CTL_RX_L (WCN36XX_DXE_MEM_REG + \
0343 WCN36XX_DXE_RX_LOW_OFFSET)
0344 #define WCN36XX_DXE_REG_CTL_RX_H (WCN36XX_DXE_MEM_REG + \
0345 WCN36XX_DXE_RX_HIGH_OFFSET)
0346 #define WCN36XX_DXE_REG_CTL_TX_H (WCN36XX_DXE_MEM_REG + \
0347 WCN36XX_DXE_TX_HIGH_OFFSET)
0348 #define WCN36XX_DXE_REG_CTL_TX_L (WCN36XX_DXE_MEM_REG + \
0349 WCN36XX_DXE_TX_LOW_OFFSET)
0350
0351 #define WCN36XX_SMSM_WLAN_TX_ENABLE 0x00000400
0352 #define WCN36XX_SMSM_WLAN_TX_RINGS_EMPTY 0x00000200
0353
0354
0355
0356 #define WCN36XX_INT_MASK_CHAN_TX_L 0x00000001
0357 #define WCN36XX_INT_MASK_CHAN_RX_L 0x00000002
0358 #define WCN36XX_INT_MASK_CHAN_RX_H 0x00000008
0359 #define WCN36XX_INT_MASK_CHAN_TX_H 0x00000010
0360
0361 #define WCN36XX_BD_CHUNK_SIZE 128
0362
0363 #define WCN36XX_PKT_SIZE 0xF20
0364 enum wcn36xx_dxe_ch_type {
0365 WCN36XX_DXE_CH_TX_L,
0366 WCN36XX_DXE_CH_TX_H,
0367 WCN36XX_DXE_CH_RX_L,
0368 WCN36XX_DXE_CH_RX_H
0369 };
0370
0371
0372 enum wcn36xx_dxe_ch_desc_num {
0373 WCN36XX_DXE_CH_DESC_NUMB_TX_L = 128,
0374 WCN36XX_DXE_CH_DESC_NUMB_TX_H = 10,
0375 WCN36XX_DXE_CH_DESC_NUMB_RX_L = 512,
0376 WCN36XX_DXE_CH_DESC_NUMB_RX_H = 40
0377 };
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406 struct wcn36xx_dxe_desc {
0407 u32 ctrl;
0408 u32 fr_len;
0409
0410 u32 src_addr_l;
0411 u32 dst_addr_l;
0412 u32 phy_next_l;
0413 u32 src_addr_h;
0414 u32 dst_addr_h;
0415 u32 phy_next_h;
0416 } __packed;
0417
0418
0419 struct wcn36xx_dxe_ctl {
0420 struct wcn36xx_dxe_ctl *next;
0421 struct wcn36xx_dxe_desc *desc;
0422 unsigned int desc_phy_addr;
0423 int ctl_blk_order;
0424 struct sk_buff *skb;
0425 void *bd_cpu_addr;
0426 dma_addr_t bd_phy_addr;
0427 };
0428
0429 struct wcn36xx_dxe_ch {
0430 spinlock_t lock;
0431 enum wcn36xx_dxe_ch_type ch_type;
0432 void *cpu_addr;
0433 dma_addr_t dma_addr;
0434 enum wcn36xx_dxe_ch_desc_num desc_num;
0435
0436 struct wcn36xx_dxe_ctl *head_blk_ctl;
0437 struct wcn36xx_dxe_ctl *tail_blk_ctl;
0438
0439
0440 u32 dxe_wq;
0441 u32 ctrl_bd;
0442 u32 ctrl_skb;
0443 u32 reg_ctrl;
0444 u32 def_ctrl;
0445 };
0446
0447
0448 struct wcn36xx_dxe_mem_pool {
0449 int chunk_size;
0450 void *virt_addr;
0451 dma_addr_t phy_addr;
0452 };
0453
0454 struct wcn36xx_tx_bd;
0455 struct wcn36xx_vif;
0456 int wcn36xx_dxe_allocate_mem_pools(struct wcn36xx *wcn);
0457 void wcn36xx_dxe_free_mem_pools(struct wcn36xx *wcn);
0458 void wcn36xx_dxe_rx_frame(struct wcn36xx *wcn);
0459 int wcn36xx_dxe_alloc_ctl_blks(struct wcn36xx *wcn);
0460 void wcn36xx_dxe_free_ctl_blks(struct wcn36xx *wcn);
0461 int wcn36xx_dxe_init(struct wcn36xx *wcn);
0462 void wcn36xx_dxe_deinit(struct wcn36xx *wcn);
0463 int wcn36xx_dxe_init_channels(struct wcn36xx *wcn);
0464 int wcn36xx_dxe_tx_frame(struct wcn36xx *wcn,
0465 struct wcn36xx_vif *vif_priv,
0466 struct wcn36xx_tx_bd *bd,
0467 struct sk_buff *skb,
0468 bool is_low);
0469 int wcn36xx_dxe_tx_flush(struct wcn36xx *wcn);
0470 void wcn36xx_dxe_tx_ack_ind(struct wcn36xx *wcn, u32 status);
0471 #endif