0001
0002
0003
0004
0005
0006 #ifndef __iwl_fh_h__
0007 #define __iwl_fh_h__
0008
0009 #include <linux/types.h>
0010 #include <linux/bitfield.h>
0011
0012 #include "iwl-trans.h"
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #define FH_MEM_LOWER_BOUND (0x1000)
0023 #define FH_MEM_UPPER_BOUND (0x2000)
0024 #define FH_MEM_LOWER_BOUND_GEN2 (0xa06000)
0025 #define FH_MEM_UPPER_BOUND_GEN2 (0xa08000)
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044 #define FH_KW_MEM_ADDR_REG (FH_MEM_LOWER_BOUND + 0x97C)
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061 #define FH_MEM_CBBC_0_15_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0x9D0)
0062 #define FH_MEM_CBBC_0_15_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xA10)
0063 #define FH_MEM_CBBC_16_19_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xBF0)
0064 #define FH_MEM_CBBC_16_19_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xC00)
0065 #define FH_MEM_CBBC_20_31_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xB20)
0066 #define FH_MEM_CBBC_20_31_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xB80)
0067
0068 #define TFH_TFDQ_CBB_TABLE (0x1C00)
0069
0070
0071 static inline unsigned int FH_MEM_CBBC_QUEUE(struct iwl_trans *trans,
0072 unsigned int chnl)
0073 {
0074 if (trans->trans_cfg->use_tfh) {
0075 WARN_ON_ONCE(chnl >= 64);
0076 return TFH_TFDQ_CBB_TABLE + 8 * chnl;
0077 }
0078 if (chnl < 16)
0079 return FH_MEM_CBBC_0_15_LOWER_BOUND + 4 * chnl;
0080 if (chnl < 20)
0081 return FH_MEM_CBBC_16_19_LOWER_BOUND + 4 * (chnl - 16);
0082 WARN_ON_ONCE(chnl >= 32);
0083 return FH_MEM_CBBC_20_31_LOWER_BOUND + 4 * (chnl - 20);
0084 }
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104 #define TFH_TRANSFER_MODE (0x1F40)
0105 #define TFH_TRANSFER_MAX_PENDING_REQ 0xc
0106 #define TFH_CHUNK_SIZE_128 BIT(8)
0107 #define TFH_CHUNK_SPLIT_MODE BIT(10)
0108
0109
0110
0111
0112
0113
0114
0115 #define TFH_TXCMD_UPDATE_CFG (0x1F48)
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129 #define TFH_SRV_DMA_CHNL0_CTRL (0x1F60)
0130 #define TFH_SRV_DMA_SNOOP BIT(0)
0131 #define TFH_SRV_DMA_TO_DRIVER BIT(24)
0132 #define TFH_SRV_DMA_START BIT(31)
0133
0134
0135 #define TFH_SRV_DMA_CHNL0_SRAM_ADDR (0x1F64)
0136
0137
0138 #define TFH_SRV_DMA_CHNL0_DRAM_ADDR (0x1F68)
0139
0140
0141
0142
0143
0144 #define TFH_SRV_DMA_CHNL0_BC (0x1F70)
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215 #define FH_MEM_RSCSR_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xBC0)
0216 #define FH_MEM_RSCSR_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xC00)
0217 #define FH_MEM_RSCSR_CHNL0 (FH_MEM_RSCSR_LOWER_BOUND)
0218
0219
0220
0221
0222
0223
0224 #define FH_RSCSR_CHNL0_STTS_WPTR_REG (FH_MEM_RSCSR_CHNL0)
0225
0226
0227
0228
0229
0230
0231 #define FH_RSCSR_CHNL0_RBDCB_BASE_REG (FH_MEM_RSCSR_CHNL0 + 0x004)
0232
0233
0234
0235
0236
0237
0238
0239 #define FH_RSCSR_CHNL0_RBDCB_WPTR_REG (FH_MEM_RSCSR_CHNL0 + 0x008)
0240 #define FH_RSCSR_CHNL0_WPTR (FH_RSCSR_CHNL0_RBDCB_WPTR_REG)
0241
0242 #define FW_RSCSR_CHNL0_RXDCB_RDPTR_REG (FH_MEM_RSCSR_CHNL0 + 0x00c)
0243 #define FH_RSCSR_CHNL0_RDPTR FW_RSCSR_CHNL0_RXDCB_RDPTR_REG
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271 #define FH_MEM_RCSR_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xC00)
0272 #define FH_MEM_RCSR_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xCC0)
0273 #define FH_MEM_RCSR_CHNL0 (FH_MEM_RCSR_LOWER_BOUND)
0274
0275 #define FH_MEM_RCSR_CHNL0_CONFIG_REG (FH_MEM_RCSR_CHNL0)
0276 #define FH_MEM_RCSR_CHNL0_RBDCB_WPTR (FH_MEM_RCSR_CHNL0 + 0x8)
0277 #define FH_MEM_RCSR_CHNL0_FLUSH_RB_REQ (FH_MEM_RCSR_CHNL0 + 0x10)
0278
0279 #define FH_RCSR_CHNL0_RX_CONFIG_RB_TIMEOUT_MSK (0x00000FF0)
0280 #define FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_MSK (0x00001000)
0281 #define FH_RCSR_CHNL0_RX_CONFIG_SINGLE_FRAME_MSK (0x00008000)
0282 #define FH_RCSR_CHNL0_RX_CONFIG_RB_SIZE_MSK (0x00030000)
0283 #define FH_RCSR_CHNL0_RX_CONFIG_RBDBC_SIZE_MSK (0x00F00000)
0284 #define FH_RCSR_CHNL0_RX_CONFIG_DMA_CHNL_EN_MSK (0xC0000000)
0285
0286 #define FH_RCSR_RX_CONFIG_RBDCB_SIZE_POS (20)
0287 #define FH_RCSR_RX_CONFIG_REG_IRQ_RBTH_POS (4)
0288 #define RX_RB_TIMEOUT (0x11)
0289
0290 #define FH_RCSR_RX_CONFIG_CHNL_EN_PAUSE_VAL (0x00000000)
0291 #define FH_RCSR_RX_CONFIG_CHNL_EN_PAUSE_EOF_VAL (0x40000000)
0292 #define FH_RCSR_RX_CONFIG_CHNL_EN_ENABLE_VAL (0x80000000)
0293
0294 #define FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_4K (0x00000000)
0295 #define FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K (0x00010000)
0296 #define FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_12K (0x00020000)
0297 #define FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_16K (0x00030000)
0298
0299 #define FH_RCSR_CHNL0_RX_IGNORE_RXF_EMPTY (0x00000004)
0300 #define FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_NO_INT_VAL (0x00000000)
0301 #define FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_INT_HOST_VAL (0x00001000)
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316 #define FH_MEM_RSSR_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xC40)
0317 #define FH_MEM_RSSR_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xD00)
0318
0319 #define FH_MEM_RSSR_SHARED_CTRL_REG (FH_MEM_RSSR_LOWER_BOUND)
0320 #define FH_MEM_RSSR_RX_STATUS_REG (FH_MEM_RSSR_LOWER_BOUND + 0x004)
0321 #define FH_MEM_RSSR_RX_ENABLE_ERR_IRQ2DRV\
0322 (FH_MEM_RSSR_LOWER_BOUND + 0x008)
0323
0324 #define FH_RSSR_CHNL0_RX_STATUS_CHNL_IDLE (0x01000000)
0325
0326 #define FH_MEM_TFDIB_REG1_ADDR_BITSHIFT 28
0327 #define FH_MEM_TB_MAX_LENGTH (0x00020000)
0328
0329
0330
0331 #define RFH_Q0_FRBDCB_BA_LSB 0xA08000
0332 #define RFH_Q_FRBDCB_BA_LSB(q) (RFH_Q0_FRBDCB_BA_LSB + (q) * 8)
0333
0334 #define RFH_Q0_FRBDCB_WIDX 0xA08080
0335 #define RFH_Q_FRBDCB_WIDX(q) (RFH_Q0_FRBDCB_WIDX + (q) * 4)
0336
0337 #define RFH_Q0_FRBDCB_WIDX_TRG 0x1C80
0338 #define RFH_Q_FRBDCB_WIDX_TRG(q) (RFH_Q0_FRBDCB_WIDX_TRG + (q) * 4)
0339
0340 #define RFH_Q0_FRBDCB_RIDX 0xA080C0
0341 #define RFH_Q_FRBDCB_RIDX(q) (RFH_Q0_FRBDCB_RIDX + (q) * 4)
0342
0343 #define RFH_Q0_URBDCB_BA_LSB 0xA08100
0344 #define RFH_Q_URBDCB_BA_LSB(q) (RFH_Q0_URBDCB_BA_LSB + (q) * 8)
0345
0346 #define RFH_Q0_URBDCB_WIDX 0xA08180
0347 #define RFH_Q_URBDCB_WIDX(q) (RFH_Q0_URBDCB_WIDX + (q) * 4)
0348 #define RFH_Q0_URBDCB_VAID 0xA081C0
0349 #define RFH_Q_URBDCB_VAID(q) (RFH_Q0_URBDCB_VAID + (q) * 4)
0350
0351 #define RFH_Q0_URBD_STTS_WPTR_LSB 0xA08200
0352 #define RFH_Q_URBD_STTS_WPTR_LSB(q) (RFH_Q0_URBD_STTS_WPTR_LSB + (q) * 8)
0353
0354 #define RFH_Q0_ORB_WPTR_LSB 0xA08280
0355 #define RFH_Q_ORB_WPTR_LSB(q) (RFH_Q0_ORB_WPTR_LSB + (q) * 8)
0356 #define RFH_RBDBUF_RBD0_LSB 0xA08300
0357 #define RFH_RBDBUF_RBD_LSB(q) (RFH_RBDBUF_RBD0_LSB + (q) * 8)
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380 #define RFH_GEN_STATUS 0xA09808
0381 #define RFH_GEN_STATUS_GEN3 0xA07824
0382 #define RBD_FETCH_IDLE BIT(29)
0383 #define SRAM_DMA_IDLE BIT(30)
0384 #define RXF_DMA_IDLE BIT(31)
0385
0386
0387 #define RFH_RXF_DMA_CFG 0xA09820
0388 #define RFH_RXF_DMA_CFG_GEN3 0xA07880
0389
0390 #define RFH_RXF_DMA_RB_SIZE_MASK (0x000F0000)
0391 #define RFH_RXF_DMA_RB_SIZE_POS 16
0392 #define RFH_RXF_DMA_RB_SIZE_1K (0x1 << RFH_RXF_DMA_RB_SIZE_POS)
0393 #define RFH_RXF_DMA_RB_SIZE_2K (0x2 << RFH_RXF_DMA_RB_SIZE_POS)
0394 #define RFH_RXF_DMA_RB_SIZE_4K (0x4 << RFH_RXF_DMA_RB_SIZE_POS)
0395 #define RFH_RXF_DMA_RB_SIZE_8K (0x8 << RFH_RXF_DMA_RB_SIZE_POS)
0396 #define RFH_RXF_DMA_RB_SIZE_12K (0x9 << RFH_RXF_DMA_RB_SIZE_POS)
0397 #define RFH_RXF_DMA_RB_SIZE_16K (0xA << RFH_RXF_DMA_RB_SIZE_POS)
0398 #define RFH_RXF_DMA_RB_SIZE_20K (0xB << RFH_RXF_DMA_RB_SIZE_POS)
0399 #define RFH_RXF_DMA_RB_SIZE_24K (0xC << RFH_RXF_DMA_RB_SIZE_POS)
0400 #define RFH_RXF_DMA_RB_SIZE_28K (0xD << RFH_RXF_DMA_RB_SIZE_POS)
0401 #define RFH_RXF_DMA_RB_SIZE_32K (0xE << RFH_RXF_DMA_RB_SIZE_POS)
0402
0403 #define RFH_RXF_DMA_RBDCB_SIZE_MASK (0x00F00000)
0404 #define RFH_RXF_DMA_RBDCB_SIZE_POS 20
0405 #define RFH_RXF_DMA_RBDCB_SIZE_8 (0x3 << RFH_RXF_DMA_RBDCB_SIZE_POS)
0406 #define RFH_RXF_DMA_RBDCB_SIZE_16 (0x4 << RFH_RXF_DMA_RBDCB_SIZE_POS)
0407 #define RFH_RXF_DMA_RBDCB_SIZE_32 (0x5 << RFH_RXF_DMA_RBDCB_SIZE_POS)
0408 #define RFH_RXF_DMA_RBDCB_SIZE_64 (0x7 << RFH_RXF_DMA_RBDCB_SIZE_POS)
0409 #define RFH_RXF_DMA_RBDCB_SIZE_128 (0x7 << RFH_RXF_DMA_RBDCB_SIZE_POS)
0410 #define RFH_RXF_DMA_RBDCB_SIZE_256 (0x8 << RFH_RXF_DMA_RBDCB_SIZE_POS)
0411 #define RFH_RXF_DMA_RBDCB_SIZE_512 (0x9 << RFH_RXF_DMA_RBDCB_SIZE_POS)
0412 #define RFH_RXF_DMA_RBDCB_SIZE_1024 (0xA << RFH_RXF_DMA_RBDCB_SIZE_POS)
0413 #define RFH_RXF_DMA_RBDCB_SIZE_2048 (0xB << RFH_RXF_DMA_RBDCB_SIZE_POS)
0414 #define RFH_RXF_DMA_MIN_RB_SIZE_MASK (0x03000000)
0415 #define RFH_RXF_DMA_MIN_RB_SIZE_POS 24
0416 #define RFH_RXF_DMA_MIN_RB_4_8 (3 << RFH_RXF_DMA_MIN_RB_SIZE_POS)
0417 #define RFH_RXF_DMA_DROP_TOO_LARGE_MASK (0x04000000)
0418 #define RFH_RXF_DMA_SINGLE_FRAME_MASK (0x20000000)
0419 #define RFH_DMA_EN_MASK (0xC0000000)
0420 #define RFH_DMA_EN_ENABLE_VAL BIT(31)
0421
0422 #define RFH_RXF_RXQ_ACTIVE 0xA0980C
0423
0424 #define RFH_GEN_CFG 0xA09800
0425 #define RFH_GEN_CFG_SERVICE_DMA_SNOOP BIT(0)
0426 #define RFH_GEN_CFG_RFH_DMA_SNOOP BIT(1)
0427 #define RFH_GEN_CFG_RB_CHUNK_SIZE BIT(4)
0428 #define RFH_GEN_CFG_RB_CHUNK_SIZE_128 1
0429 #define RFH_GEN_CFG_RB_CHUNK_SIZE_64 0
0430
0431 #define RFH_GEN_CFG_DEFAULT_RXQ_NUM 0xF00
0432 #define RFH_GEN_CFG_VAL(_n, _v) FIELD_PREP(RFH_GEN_CFG_ ## _n, _v)
0433
0434
0435
0436
0437 #define FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK (0xFFFFFFFF)
0438 #define FH_TFDIB_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0x900)
0439 #define FH_TFDIB_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0x958)
0440 #define FH_TFDIB_CTRL0_REG(_chnl) (FH_TFDIB_LOWER_BOUND + 0x8 * (_chnl))
0441 #define FH_TFDIB_CTRL1_REG(_chnl) (FH_TFDIB_LOWER_BOUND + 0x8 * (_chnl) + 0x4)
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465 #define FH_TCSR_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xD00)
0466 #define FH_TCSR_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xE60)
0467
0468
0469 #define FH_TCSR_CHNL_NUM (8)
0470
0471
0472 #define FH_TCSR_CHNL_TX_CONFIG_REG(_chnl) \
0473 (FH_TCSR_LOWER_BOUND + 0x20 * (_chnl))
0474 #define FH_TCSR_CHNL_TX_CREDIT_REG(_chnl) \
0475 (FH_TCSR_LOWER_BOUND + 0x20 * (_chnl) + 0x4)
0476 #define FH_TCSR_CHNL_TX_BUF_STS_REG(_chnl) \
0477 (FH_TCSR_LOWER_BOUND + 0x20 * (_chnl) + 0x8)
0478
0479 #define FH_TCSR_TX_CONFIG_REG_VAL_MSG_MODE_TXF (0x00000000)
0480 #define FH_TCSR_TX_CONFIG_REG_VAL_MSG_MODE_DRV (0x00000001)
0481
0482 #define FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_DISABLE (0x00000000)
0483 #define FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_ENABLE (0x00000008)
0484
0485 #define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_NOINT (0x00000000)
0486 #define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_ENDTFD (0x00100000)
0487 #define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_IFTFD (0x00200000)
0488
0489 #define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_RTC_NOINT (0x00000000)
0490 #define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_RTC_ENDTFD (0x00400000)
0491 #define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_RTC_IFTFD (0x00800000)
0492
0493 #define FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_PAUSE (0x00000000)
0494 #define FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_PAUSE_EOF (0x40000000)
0495 #define FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE (0x80000000)
0496
0497 #define FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_EMPTY (0x00000000)
0498 #define FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_WAIT (0x00002000)
0499 #define FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_VALID (0x00000003)
0500
0501 #define FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM (20)
0502 #define FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_IDX (12)
0503
0504
0505
0506
0507
0508
0509
0510
0511
0512
0513
0514
0515
0516 #define FH_TSSR_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xEA0)
0517 #define FH_TSSR_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xEC0)
0518
0519 #define FH_TSSR_TX_STATUS_REG (FH_TSSR_LOWER_BOUND + 0x010)
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537
0538 #define FH_TSSR_TX_ERROR_REG (FH_TSSR_LOWER_BOUND + 0x018)
0539 #define FH_TSSR_TX_MSG_CONFIG_REG (FH_TSSR_LOWER_BOUND + 0x008)
0540
0541 #define FH_TSSR_TX_STATUS_REG_MSK_CHNL_IDLE(_chnl) ((1 << (_chnl)) << 16)
0542
0543
0544 #define FH_SRVC_CHNL (9)
0545 #define FH_SRVC_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0x9C8)
0546 #define FH_SRVC_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0x9D0)
0547 #define FH_SRVC_CHNL_SRAM_ADDR_REG(_chnl) \
0548 (FH_SRVC_LOWER_BOUND + ((_chnl) - 9) * 0x4)
0549
0550 #define FH_TX_CHICKEN_BITS_REG (FH_MEM_LOWER_BOUND + 0xE98)
0551 #define FH_TX_TRB_REG(_chan) (FH_MEM_LOWER_BOUND + 0x958 + (_chan) * 4)
0552
0553
0554
0555
0556 #define FH_TX_CHICKEN_BITS_SCD_AUTO_RETRY_EN (0x00000002)
0557
0558 #define RX_POOL_SIZE(rbds) ((rbds) - 1 + \
0559 IWL_MAX_RX_HW_QUEUES * \
0560 (RX_CLAIM_REQ_ALLOC - RX_POST_REQ_ALLOC))
0561
0562 #define RX_QUEUE_CB_SIZE(x) ilog2(x)
0563
0564 #define RX_QUEUE_SIZE 256
0565 #define RX_QUEUE_MASK 255
0566 #define RX_QUEUE_SIZE_LOG 8
0567
0568
0569
0570
0571
0572
0573
0574
0575
0576
0577
0578 struct iwl_rb_status {
0579 __le16 closed_rb_num;
0580 __le16 closed_fr_num;
0581 __le16 finished_rb_num;
0582 __le16 finished_fr_nam;
0583 __le32 __spare;
0584 } __packed;
0585
0586
0587 #define TFD_QUEUE_SIZE_MAX (256)
0588 #define TFD_QUEUE_SIZE_MAX_GEN3 (65536)
0589
0590 #define TFD_QUEUE_CB_SIZE(x) (ilog2(x) - 3)
0591 #define TFD_QUEUE_SIZE_BC_DUP (64)
0592 #define TFD_QUEUE_BC_SIZE (TFD_QUEUE_SIZE_MAX + TFD_QUEUE_SIZE_BC_DUP)
0593 #define TFD_QUEUE_BC_SIZE_GEN3_AX210 1024
0594 #define TFD_QUEUE_BC_SIZE_GEN3_BZ (1024 * 4)
0595 #define IWL_TX_DMA_MASK DMA_BIT_MASK(36)
0596 #define IWL_NUM_OF_TBS 20
0597 #define IWL_TFH_NUM_TBS 25
0598
0599
0600 #define IMR_TFH_SRV_DMA_CHNL0_CTRL 0x00a0a51c
0601 #define IMR_TFH_SRV_DMA_CHNL0_SRAM_ADDR 0x00a0a520
0602 #define IMR_TFH_SRV_DMA_CHNL0_DRAM_ADDR_LSB 0x00a0a524
0603 #define IMR_TFH_SRV_DMA_CHNL0_DRAM_ADDR_MSB 0x00a0a528
0604 #define IMR_TFH_SRV_DMA_CHNL0_BC 0x00a0a52c
0605 #define TFH_SRV_DMA_CHNL0_LEFT_BC 0x00a0a530
0606
0607
0608 #define IMR_RFH_GEN_CFG_SERVICE_DMA_RS_MSK 0x0000000c
0609 #define IMR_RFH_GEN_CFG_SERVICE_DMA_SNOOP_MSK 0x00000002
0610
0611
0612 #define IMR_UREG_CHICK_HALT_UMAC_PERMANENTLY_MSK 0x80000000
0613 #define IMR_UREG_CHICK 0x00d05c00
0614 #define IMR_TFH_SRV_DMA_CHNL0_CTRL_D2S_IRQ_TARGET_POS 0x00800000
0615 #define IMR_TFH_SRV_DMA_CHNL0_CTRL_D2S_RS_MSK 0x00000030
0616 #define IMR_TFH_SRV_DMA_CHNL0_CTRL_D2S_DMA_EN_POS 0x80000000
0617
0618 static inline u8 iwl_get_dma_hi_addr(dma_addr_t addr)
0619 {
0620 return (sizeof(addr) > sizeof(u32) ? upper_32_bits(addr) : 0) & 0xF;
0621 }
0622
0623
0624
0625
0626
0627
0628 enum iwl_tfd_tb_hi_n_len {
0629 TB_HI_N_LEN_ADDR_HI_MSK = 0xf,
0630 TB_HI_N_LEN_LEN_MSK = 0xfff0,
0631 };
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642 struct iwl_tfd_tb {
0643 __le32 lo;
0644 __le16 hi_n_len;
0645 } __packed;
0646
0647
0648
0649
0650
0651
0652
0653
0654
0655 struct iwl_tfh_tb {
0656 __le16 tb_len;
0657 __le64 addr;
0658 } __packed;
0659
0660
0661
0662
0663
0664
0665
0666
0667
0668
0669
0670
0671
0672
0673
0674
0675
0676
0677
0678
0679
0680
0681
0682
0683
0684
0685
0686
0687
0688
0689 struct iwl_tfd {
0690 u8 __reserved1[3];
0691 u8 num_tbs;
0692 struct iwl_tfd_tb tbs[IWL_NUM_OF_TBS];
0693 __le32 __pad;
0694 } __packed;
0695
0696
0697
0698
0699
0700
0701
0702
0703 struct iwl_tfh_tfd {
0704 __le16 num_tbs;
0705 struct iwl_tfh_tb tbs[IWL_TFH_NUM_TBS];
0706 __le32 __pad;
0707 } __packed;
0708
0709
0710 #define IWL_KW_SIZE 0x1000
0711
0712
0713
0714
0715
0716
0717
0718
0719
0720
0721
0722
0723
0724
0725 struct iwlagn_scd_bc_tbl {
0726 __le16 tfd_offset[TFD_QUEUE_BC_SIZE];
0727 } __packed;
0728
0729
0730
0731
0732
0733
0734
0735
0736 struct iwl_gen3_bc_tbl_entry {
0737 __le16 tfd_offset;
0738 } __packed;
0739
0740 #endif