0001
0002
0003
0004
0005
0006 #ifndef ATH11K_DP_H
0007 #define ATH11K_DP_H
0008
0009 #include "hal_rx.h"
0010
0011 #define MAX_RXDMA_PER_PDEV 2
0012
0013 struct ath11k_base;
0014 struct ath11k_peer;
0015 struct ath11k_dp;
0016 struct ath11k_vif;
0017 struct hal_tcl_status_ring;
0018 struct ath11k_ext_irq_grp;
0019
0020 struct dp_rx_tid {
0021 u8 tid;
0022 u32 *vaddr;
0023 dma_addr_t paddr;
0024 u32 size;
0025 u32 ba_win_sz;
0026 bool active;
0027
0028
0029 u32 cur_sn;
0030 u16 last_frag_no;
0031 u16 rx_frag_bitmap;
0032
0033 struct sk_buff_head rx_frags;
0034 struct hal_reo_dest_ring *dst_ring_desc;
0035
0036
0037 struct timer_list frag_timer;
0038 struct ath11k_base *ab;
0039 };
0040
0041 #define DP_REO_DESC_FREE_THRESHOLD 64
0042 #define DP_REO_DESC_FREE_TIMEOUT_MS 1000
0043 #define DP_MON_PURGE_TIMEOUT_MS 100
0044 #define DP_MON_SERVICE_BUDGET 128
0045
0046 struct dp_reo_cache_flush_elem {
0047 struct list_head list;
0048 struct dp_rx_tid data;
0049 unsigned long ts;
0050 };
0051
0052 struct dp_reo_cmd {
0053 struct list_head list;
0054 struct dp_rx_tid data;
0055 int cmd_num;
0056 void (*handler)(struct ath11k_dp *, void *,
0057 enum hal_reo_cmd_status status);
0058 };
0059
0060 struct dp_srng {
0061 u32 *vaddr_unaligned;
0062 u32 *vaddr;
0063 dma_addr_t paddr_unaligned;
0064 dma_addr_t paddr;
0065 int size;
0066 u32 ring_id;
0067 u8 cached;
0068 };
0069
0070 struct dp_rxdma_ring {
0071 struct dp_srng refill_buf_ring;
0072 struct idr bufs_idr;
0073
0074 spinlock_t idr_lock;
0075 int bufs_max;
0076 };
0077
0078 #define ATH11K_TX_COMPL_NEXT(x) (((x) + 1) % DP_TX_COMP_RING_SIZE)
0079
0080 struct dp_tx_ring {
0081 u8 tcl_data_ring_id;
0082 struct dp_srng tcl_data_ring;
0083 struct dp_srng tcl_comp_ring;
0084 struct idr txbuf_idr;
0085
0086 spinlock_t tx_idr_lock;
0087 struct hal_wbm_release_ring *tx_status;
0088 int tx_status_head;
0089 int tx_status_tail;
0090 };
0091
0092 enum dp_mon_status_buf_state {
0093
0094 DP_MON_STATUS_MATCH,
0095
0096 DP_MON_STATUS_NO_DMA,
0097
0098 DP_MON_STATUS_LAG,
0099
0100 DP_MON_STATUS_LEAD,
0101
0102 DP_MON_STATUS_REPLINISH,
0103 };
0104
0105 struct ath11k_pdev_mon_stats {
0106 u32 status_ppdu_state;
0107 u32 status_ppdu_start;
0108 u32 status_ppdu_end;
0109 u32 status_ppdu_compl;
0110 u32 status_ppdu_start_mis;
0111 u32 status_ppdu_end_mis;
0112 u32 status_ppdu_done;
0113 u32 dest_ppdu_done;
0114 u32 dest_mpdu_done;
0115 u32 dest_mpdu_drop;
0116 u32 dup_mon_linkdesc_cnt;
0117 u32 dup_mon_buf_cnt;
0118 u32 dest_mon_stuck;
0119 u32 dest_mon_not_reaped;
0120 };
0121
0122 struct dp_full_mon_mpdu {
0123 struct list_head list;
0124 struct sk_buff *head;
0125 struct sk_buff *tail;
0126 };
0127
0128 struct dp_link_desc_bank {
0129 void *vaddr_unaligned;
0130 void *vaddr;
0131 dma_addr_t paddr_unaligned;
0132 dma_addr_t paddr;
0133 u32 size;
0134 };
0135
0136
0137 #define DP_LINK_DESC_ALLOC_SIZE_THRESH 0x200000
0138 #define DP_LINK_DESC_BANKS_MAX 8
0139
0140 #define DP_RX_DESC_COOKIE_INDEX_MAX 0x3ffff
0141 #define DP_RX_DESC_COOKIE_POOL_ID_MAX 0x1c0000
0142 #define DP_RX_DESC_COOKIE_MAX \
0143 (DP_RX_DESC_COOKIE_INDEX_MAX | DP_RX_DESC_COOKIE_POOL_ID_MAX)
0144 #define DP_NOT_PPDU_ID_WRAP_AROUND 20000
0145
0146 enum ath11k_dp_ppdu_state {
0147 DP_PPDU_STATUS_START,
0148 DP_PPDU_STATUS_DONE,
0149 };
0150
0151 struct ath11k_mon_data {
0152 struct dp_link_desc_bank link_desc_banks[DP_LINK_DESC_BANKS_MAX];
0153 struct hal_rx_mon_ppdu_info mon_ppdu_info;
0154
0155 u32 mon_ppdu_status;
0156 u32 mon_last_buf_cookie;
0157 u64 mon_last_linkdesc_paddr;
0158 u16 chan_noise_floor;
0159 bool hold_mon_dst_ring;
0160 enum dp_mon_status_buf_state buf_state;
0161 dma_addr_t mon_status_paddr;
0162 struct dp_full_mon_mpdu *mon_mpdu;
0163 struct hal_sw_mon_ring_entries sw_mon_entries;
0164 struct ath11k_pdev_mon_stats rx_mon_stats;
0165
0166 spinlock_t mon_lock;
0167 struct sk_buff_head rx_status_q;
0168 };
0169
0170 struct ath11k_pdev_dp {
0171 u32 mac_id;
0172 u32 mon_dest_ring_stuck_cnt;
0173 atomic_t num_tx_pending;
0174 wait_queue_head_t tx_empty_waitq;
0175 struct dp_rxdma_ring rx_refill_buf_ring;
0176 struct dp_srng rx_mac_buf_ring[MAX_RXDMA_PER_PDEV];
0177 struct dp_srng rxdma_err_dst_ring[MAX_RXDMA_PER_PDEV];
0178 struct dp_srng rxdma_mon_dst_ring;
0179 struct dp_srng rxdma_mon_desc_ring;
0180
0181 struct dp_rxdma_ring rxdma_mon_buf_ring;
0182 struct dp_rxdma_ring rx_mon_status_refill_ring[MAX_RXDMA_PER_PDEV];
0183 struct ieee80211_rx_status rx_status;
0184 struct ath11k_mon_data mon_data;
0185 };
0186
0187 #define DP_NUM_CLIENTS_MAX 64
0188 #define DP_AVG_TIDS_PER_CLIENT 2
0189 #define DP_NUM_TIDS_MAX (DP_NUM_CLIENTS_MAX * DP_AVG_TIDS_PER_CLIENT)
0190 #define DP_AVG_MSDUS_PER_FLOW 128
0191 #define DP_AVG_FLOWS_PER_TID 2
0192 #define DP_AVG_MPDUS_PER_TID_MAX 128
0193 #define DP_AVG_MSDUS_PER_MPDU 4
0194
0195 #define DP_RX_HASH_ENABLE 1
0196
0197 #define DP_BA_WIN_SZ_MAX 256
0198
0199 #define DP_TCL_NUM_RING_MAX 3
0200 #define DP_TCL_NUM_RING_MAX_QCA6390 1
0201
0202 #define DP_IDLE_SCATTER_BUFS_MAX 16
0203
0204 #define DP_WBM_RELEASE_RING_SIZE 64
0205 #define DP_TCL_DATA_RING_SIZE 512
0206 #define DP_TX_COMP_RING_SIZE 32768
0207 #define DP_TX_IDR_SIZE DP_TX_COMP_RING_SIZE
0208 #define DP_TCL_CMD_RING_SIZE 32
0209 #define DP_TCL_STATUS_RING_SIZE 32
0210 #define DP_REO_DST_RING_MAX 4
0211 #define DP_REO_DST_RING_SIZE 2048
0212 #define DP_REO_REINJECT_RING_SIZE 32
0213 #define DP_RX_RELEASE_RING_SIZE 1024
0214 #define DP_REO_EXCEPTION_RING_SIZE 128
0215 #define DP_REO_CMD_RING_SIZE 128
0216 #define DP_REO_STATUS_RING_SIZE 2048
0217 #define DP_RXDMA_BUF_RING_SIZE 4096
0218 #define DP_RXDMA_REFILL_RING_SIZE 2048
0219 #define DP_RXDMA_ERR_DST_RING_SIZE 1024
0220 #define DP_RXDMA_MON_STATUS_RING_SIZE 1024
0221 #define DP_RXDMA_MONITOR_BUF_RING_SIZE 4096
0222 #define DP_RXDMA_MONITOR_DST_RING_SIZE 2048
0223 #define DP_RXDMA_MONITOR_DESC_RING_SIZE 4096
0224
0225 #define DP_RX_BUFFER_SIZE 2048
0226 #define DP_RX_BUFFER_SIZE_LITE 1024
0227 #define DP_RX_BUFFER_ALIGN_SIZE 128
0228
0229 #define DP_RXDMA_BUF_COOKIE_BUF_ID GENMASK(17, 0)
0230 #define DP_RXDMA_BUF_COOKIE_PDEV_ID GENMASK(20, 18)
0231
0232 #define DP_HW2SW_MACID(mac_id) ((mac_id) ? ((mac_id) - 1) : 0)
0233 #define DP_SW2HW_MACID(mac_id) ((mac_id) + 1)
0234
0235 #define DP_TX_DESC_ID_MAC_ID GENMASK(1, 0)
0236 #define DP_TX_DESC_ID_MSDU_ID GENMASK(18, 2)
0237 #define DP_TX_DESC_ID_POOL_ID GENMASK(20, 19)
0238
0239 #define ATH11K_SHADOW_DP_TIMER_INTERVAL 20
0240 #define ATH11K_SHADOW_CTRL_TIMER_INTERVAL 10
0241
0242 struct ath11k_hp_update_timer {
0243 struct timer_list timer;
0244 bool started;
0245 bool init;
0246 u32 tx_num;
0247 u32 timer_tx_num;
0248 u32 ring_id;
0249 u32 interval;
0250 struct ath11k_base *ab;
0251 };
0252
0253 struct ath11k_dp {
0254 struct ath11k_base *ab;
0255 enum ath11k_htc_ep_id eid;
0256 struct completion htt_tgt_version_received;
0257 u8 htt_tgt_ver_major;
0258 u8 htt_tgt_ver_minor;
0259 struct dp_link_desc_bank link_desc_banks[DP_LINK_DESC_BANKS_MAX];
0260 struct dp_srng wbm_idle_ring;
0261 struct dp_srng wbm_desc_rel_ring;
0262 struct dp_srng tcl_cmd_ring;
0263 struct dp_srng tcl_status_ring;
0264 struct dp_srng reo_reinject_ring;
0265 struct dp_srng rx_rel_ring;
0266 struct dp_srng reo_except_ring;
0267 struct dp_srng reo_cmd_ring;
0268 struct dp_srng reo_status_ring;
0269 struct dp_srng reo_dst_ring[DP_REO_DST_RING_MAX];
0270 struct dp_tx_ring tx_ring[DP_TCL_NUM_RING_MAX];
0271 struct hal_wbm_idle_scatter_list scatter_list[DP_IDLE_SCATTER_BUFS_MAX];
0272 struct list_head reo_cmd_list;
0273 struct list_head reo_cmd_cache_flush_list;
0274 struct list_head dp_full_mon_mpdu_list;
0275 u32 reo_cmd_cache_flush_count;
0276
0277
0278
0279
0280
0281
0282 spinlock_t reo_cmd_lock;
0283 struct ath11k_hp_update_timer reo_cmd_timer;
0284 struct ath11k_hp_update_timer tx_ring_timer[DP_TCL_NUM_RING_MAX];
0285 };
0286
0287
0288
0289 #define HTT_TCL_META_DATA_TYPE BIT(0)
0290 #define HTT_TCL_META_DATA_VALID_HTT BIT(1)
0291
0292
0293 #define HTT_TCL_META_DATA_VDEV_ID GENMASK(9, 2)
0294 #define HTT_TCL_META_DATA_PDEV_ID GENMASK(11, 10)
0295 #define HTT_TCL_META_DATA_HOST_INSPECTED BIT(12)
0296
0297
0298 #define HTT_TCL_META_DATA_PEER_ID GENMASK(15, 2)
0299
0300 #define HTT_TX_WBM_COMP_STATUS_OFFSET 8
0301
0302
0303 #define HTT_TX_WBM_COMP_INFO0_STATUS GENMASK(12, 9)
0304 #define HTT_TX_WBM_COMP_INFO0_REINJECT_REASON GENMASK(16, 13)
0305 #define HTT_TX_WBM_COMP_INFO0_REINJECT_REASON GENMASK(16, 13)
0306
0307 #define HTT_TX_WBM_COMP_INFO1_ACK_RSSI GENMASK(31, 24)
0308
0309 struct htt_tx_wbm_completion {
0310 u32 info0;
0311 u32 info1;
0312 u32 info2;
0313 u32 info3;
0314 } __packed;
0315
0316 enum htt_h2t_msg_type {
0317 HTT_H2T_MSG_TYPE_VERSION_REQ = 0,
0318 HTT_H2T_MSG_TYPE_SRING_SETUP = 0xb,
0319 HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG = 0xc,
0320 HTT_H2T_MSG_TYPE_EXT_STATS_CFG = 0x10,
0321 HTT_H2T_MSG_TYPE_PPDU_STATS_CFG = 0x11,
0322 HTT_H2T_MSG_TYPE_RX_FULL_MONITOR_MODE = 0x17,
0323 };
0324
0325 #define HTT_VER_REQ_INFO_MSG_ID GENMASK(7, 0)
0326
0327 struct htt_ver_req_cmd {
0328 u32 ver_reg_info;
0329 } __packed;
0330
0331 enum htt_srng_ring_type {
0332 HTT_HW_TO_SW_RING,
0333 HTT_SW_TO_HW_RING,
0334 HTT_SW_TO_SW_RING,
0335 };
0336
0337 enum htt_srng_ring_id {
0338 HTT_RXDMA_HOST_BUF_RING,
0339 HTT_RXDMA_MONITOR_STATUS_RING,
0340 HTT_RXDMA_MONITOR_BUF_RING,
0341 HTT_RXDMA_MONITOR_DESC_RING,
0342 HTT_RXDMA_MONITOR_DEST_RING,
0343 HTT_HOST1_TO_FW_RXBUF_RING,
0344 HTT_HOST2_TO_FW_RXBUF_RING,
0345 HTT_RXDMA_NON_MONITOR_DEST_RING,
0346 };
0347
0348
0349
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
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
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471
0472
0473
0474
0475 #define HTT_SRNG_SETUP_CMD_INFO0_MSG_TYPE GENMASK(7, 0)
0476 #define HTT_SRNG_SETUP_CMD_INFO0_PDEV_ID GENMASK(15, 8)
0477 #define HTT_SRNG_SETUP_CMD_INFO0_RING_ID GENMASK(23, 16)
0478 #define HTT_SRNG_SETUP_CMD_INFO0_RING_TYPE GENMASK(31, 24)
0479
0480 #define HTT_SRNG_SETUP_CMD_INFO1_RING_SIZE GENMASK(15, 0)
0481 #define HTT_SRNG_SETUP_CMD_INFO1_RING_ENTRY_SIZE GENMASK(23, 16)
0482 #define HTT_SRNG_SETUP_CMD_INFO1_RING_LOOP_CNT_DIS BIT(25)
0483 #define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_MSI_SWAP BIT(27)
0484 #define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_HOST_FW_SWAP BIT(28)
0485 #define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_TLV_SWAP BIT(29)
0486
0487 #define HTT_SRNG_SETUP_CMD_INTR_INFO_BATCH_COUNTER_THRESH GENMASK(14, 0)
0488 #define HTT_SRNG_SETUP_CMD_INTR_INFO_SW_INTR_MODE BIT(15)
0489 #define HTT_SRNG_SETUP_CMD_INTR_INFO_INTR_TIMER_THRESH GENMASK(31, 16)
0490
0491 #define HTT_SRNG_SETUP_CMD_INFO2_INTR_LOW_THRESH GENMASK(15, 0)
0492 #define HTT_SRNG_SETUP_CMD_INFO2_PRE_FETCH_TIMER_CFG BIT(16)
0493 #define HTT_SRNG_SETUP_CMD_INFO2_RESPONSE_REQUIRED BIT(19)
0494
0495 struct htt_srng_setup_cmd {
0496 u32 info0;
0497 u32 ring_base_addr_lo;
0498 u32 ring_base_addr_hi;
0499 u32 info1;
0500 u32 ring_head_off32_remote_addr_lo;
0501 u32 ring_head_off32_remote_addr_hi;
0502 u32 ring_tail_off32_remote_addr_lo;
0503 u32 ring_tail_off32_remote_addr_hi;
0504 u32 ring_msi_addr_lo;
0505 u32 ring_msi_addr_hi;
0506 u32 msi_data;
0507 u32 intr_info;
0508 u32 info2;
0509 } __packed;
0510
0511
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537
0538
0539
0540
0541
0542
0543
0544 struct htt_ppdu_stats_cfg_cmd {
0545 u32 msg;
0546 } __packed;
0547
0548 #define HTT_PPDU_STATS_CFG_MSG_TYPE GENMASK(7, 0)
0549 #define HTT_PPDU_STATS_CFG_SOC_STATS BIT(8)
0550 #define HTT_PPDU_STATS_CFG_PDEV_ID GENMASK(15, 9)
0551 #define HTT_PPDU_STATS_CFG_TLV_TYPE_BITMASK GENMASK(31, 16)
0552
0553 enum htt_ppdu_stats_tag_type {
0554 HTT_PPDU_STATS_TAG_COMMON,
0555 HTT_PPDU_STATS_TAG_USR_COMMON,
0556 HTT_PPDU_STATS_TAG_USR_RATE,
0557 HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_64,
0558 HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_256,
0559 HTT_PPDU_STATS_TAG_SCH_CMD_STATUS,
0560 HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON,
0561 HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_64,
0562 HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_256,
0563 HTT_PPDU_STATS_TAG_USR_COMPLTN_ACK_BA_STATUS,
0564 HTT_PPDU_STATS_TAG_USR_COMPLTN_FLUSH,
0565 HTT_PPDU_STATS_TAG_USR_COMMON_ARRAY,
0566 HTT_PPDU_STATS_TAG_INFO,
0567 HTT_PPDU_STATS_TAG_TX_MGMTCTRL_PAYLOAD,
0568
0569
0570 HTT_PPDU_STATS_TAG_MAX,
0571 };
0572
0573 #define HTT_PPDU_STATS_TAG_DEFAULT (BIT(HTT_PPDU_STATS_TAG_COMMON) \
0574 | BIT(HTT_PPDU_STATS_TAG_USR_COMMON) \
0575 | BIT(HTT_PPDU_STATS_TAG_USR_RATE) \
0576 | BIT(HTT_PPDU_STATS_TAG_SCH_CMD_STATUS) \
0577 | BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON) \
0578 | BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_ACK_BA_STATUS) \
0579 | BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_FLUSH) \
0580 | BIT(HTT_PPDU_STATS_TAG_USR_COMMON_ARRAY))
0581
0582 #define HTT_PPDU_STATS_TAG_PKTLOG (BIT(HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_64) | \
0583 BIT(HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_256) | \
0584 BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_64) | \
0585 BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_256) | \
0586 BIT(HTT_PPDU_STATS_TAG_INFO) | \
0587 BIT(HTT_PPDU_STATS_TAG_TX_MGMTCTRL_PAYLOAD) | \
0588 HTT_PPDU_STATS_TAG_DEFAULT)
0589
0590
0591
0592
0593
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627
0628
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644
0645
0646
0647
0648
0649
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660 #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_MSG_TYPE GENMASK(7, 0)
0661 #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID GENMASK(15, 8)
0662 #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_RING_ID GENMASK(23, 16)
0663 #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_SS BIT(24)
0664 #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PS BIT(25)
0665
0666 #define HTT_RX_RING_SELECTION_CFG_CMD_INFO1_BUF_SIZE GENMASK(15, 0)
0667
0668 enum htt_rx_filter_tlv_flags {
0669 HTT_RX_FILTER_TLV_FLAGS_MPDU_START = BIT(0),
0670 HTT_RX_FILTER_TLV_FLAGS_MSDU_START = BIT(1),
0671 HTT_RX_FILTER_TLV_FLAGS_RX_PACKET = BIT(2),
0672 HTT_RX_FILTER_TLV_FLAGS_MSDU_END = BIT(3),
0673 HTT_RX_FILTER_TLV_FLAGS_MPDU_END = BIT(4),
0674 HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER = BIT(5),
0675 HTT_RX_FILTER_TLV_FLAGS_PER_MSDU_HEADER = BIT(6),
0676 HTT_RX_FILTER_TLV_FLAGS_ATTENTION = BIT(7),
0677 HTT_RX_FILTER_TLV_FLAGS_PPDU_START = BIT(8),
0678 HTT_RX_FILTER_TLV_FLAGS_PPDU_END = BIT(9),
0679 HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS = BIT(10),
0680 HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT = BIT(11),
0681 HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE = BIT(12),
0682 };
0683
0684 enum htt_rx_mgmt_pkt_filter_tlv_flags0 {
0685 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(0),
0686 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(1),
0687 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(2),
0688 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(3),
0689 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(4),
0690 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(5),
0691 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(6),
0692 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(7),
0693 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(8),
0694 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(9),
0695 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(10),
0696 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(11),
0697 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(12),
0698 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(13),
0699 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(14),
0700 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(15),
0701 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(16),
0702 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(17),
0703 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(18),
0704 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(19),
0705 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(20),
0706 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(21),
0707 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(22),
0708 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(23),
0709 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(24),
0710 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(25),
0711 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(26),
0712 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(27),
0713 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(28),
0714 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(29),
0715 };
0716
0717 enum htt_rx_mgmt_pkt_filter_tlv_flags1 {
0718 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(0),
0719 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(1),
0720 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(2),
0721 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(3),
0722 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(4),
0723 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(5),
0724 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(6),
0725 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(7),
0726 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(8),
0727 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(9),
0728 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(10),
0729 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(11),
0730 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(12),
0731 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(13),
0732 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(14),
0733 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(15),
0734 HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(16),
0735 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(17),
0736 };
0737
0738 enum htt_rx_ctrl_pkt_filter_tlv_flags2 {
0739 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(0),
0740 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(1),
0741 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(2),
0742 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(3),
0743 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(4),
0744 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(5),
0745 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(6),
0746 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(7),
0747 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(8),
0748 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(9),
0749 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(10),
0750 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(11),
0751 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(12),
0752 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(13),
0753 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(14),
0754 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(15),
0755 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(16),
0756 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(17),
0757 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(18),
0758 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(19),
0759 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(20),
0760 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(21),
0761 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(22),
0762 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(23),
0763 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(24),
0764 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(25),
0765 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(26),
0766 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(27),
0767 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(28),
0768 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(29),
0769 };
0770
0771 enum htt_rx_ctrl_pkt_filter_tlv_flags3 {
0772 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(0),
0773 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(1),
0774 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(2),
0775 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(3),
0776 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(4),
0777 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(5),
0778 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(6),
0779 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(7),
0780 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(8),
0781 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(9),
0782 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(10),
0783 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(11),
0784 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(12),
0785 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(13),
0786 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(14),
0787 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(15),
0788 HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(16),
0789 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(17),
0790 };
0791
0792 enum htt_rx_data_pkt_filter_tlv_flasg3 {
0793 HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(18),
0794 HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(19),
0795 HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(20),
0796 HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(21),
0797 HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(22),
0798 HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(23),
0799 HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(24),
0800 HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(25),
0801 HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(26),
0802 };
0803
0804 #define HTT_RX_FP_MGMT_FILTER_FLAGS0 \
0805 (HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \
0806 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \
0807 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \
0808 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \
0809 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \
0810 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \
0811 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \
0812 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \
0813 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM)
0814
0815 #define HTT_RX_MD_MGMT_FILTER_FLAGS0 \
0816 (HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \
0817 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \
0818 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \
0819 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \
0820 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \
0821 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \
0822 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \
0823 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \
0824 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM)
0825
0826 #define HTT_RX_MO_MGMT_FILTER_FLAGS0 \
0827 (HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \
0828 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \
0829 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \
0830 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \
0831 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \
0832 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \
0833 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \
0834 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \
0835 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM)
0836
0837 #define HTT_RX_FP_MGMT_FILTER_FLAGS1 (HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \
0838 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \
0839 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \
0840 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \
0841 | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK)
0842
0843 #define HTT_RX_MD_MGMT_FILTER_FLAGS1 (HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \
0844 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \
0845 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \
0846 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \
0847 | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK)
0848
0849 #define HTT_RX_MO_MGMT_FILTER_FLAGS1 (HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \
0850 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \
0851 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \
0852 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \
0853 | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK)
0854
0855 #define HTT_RX_FP_CTRL_FILTER_FLASG2 (HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \
0856 | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \
0857 | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BA)
0858
0859 #define HTT_RX_MD_CTRL_FILTER_FLASG2 (HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \
0860 | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \
0861 | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BA)
0862
0863 #define HTT_RX_MO_CTRL_FILTER_FLASG2 (HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \
0864 | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \
0865 | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BA)
0866
0867 #define HTT_RX_FP_CTRL_FILTER_FLASG3 (HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \
0868 | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \
0869 | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \
0870 | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \
0871 | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \
0872 | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK)
0873
0874 #define HTT_RX_MD_CTRL_FILTER_FLASG3 (HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \
0875 | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \
0876 | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \
0877 | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \
0878 | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \
0879 | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK)
0880
0881 #define HTT_RX_MO_CTRL_FILTER_FLASG3 (HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \
0882 | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \
0883 | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \
0884 | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \
0885 | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \
0886 | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK)
0887
0888 #define HTT_RX_FP_DATA_FILTER_FLASG3 (HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_MCAST \
0889 | HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_UCAST \
0890 | HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA)
0891
0892 #define HTT_RX_MD_DATA_FILTER_FLASG3 (HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_MCAST \
0893 | HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_UCAST \
0894 | HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA)
0895
0896 #define HTT_RX_MO_DATA_FILTER_FLASG3 (HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_MCAST \
0897 | HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_UCAST \
0898 | HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA)
0899
0900 #define HTT_RX_MON_FP_MGMT_FILTER_FLAGS0 \
0901 (HTT_RX_FP_MGMT_FILTER_FLAGS0 | \
0902 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7)
0903
0904 #define HTT_RX_MON_MO_MGMT_FILTER_FLAGS0 \
0905 (HTT_RX_MO_MGMT_FILTER_FLAGS0 | \
0906 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7)
0907
0908 #define HTT_RX_MON_FP_MGMT_FILTER_FLAGS1 \
0909 (HTT_RX_FP_MGMT_FILTER_FLAGS1 | \
0910 HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15)
0911
0912 #define HTT_RX_MON_MO_MGMT_FILTER_FLAGS1 \
0913 (HTT_RX_MO_MGMT_FILTER_FLAGS1 | \
0914 HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15)
0915
0916 #define HTT_RX_MON_FP_CTRL_FILTER_FLASG2 \
0917 (HTT_RX_FP_CTRL_FILTER_FLASG2 | \
0918 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 | \
0919 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 | \
0920 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER | \
0921 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 | \
0922 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL | \
0923 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP | \
0924 HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT)
0925
0926 #define HTT_RX_MON_MO_CTRL_FILTER_FLASG2 \
0927 (HTT_RX_MO_CTRL_FILTER_FLASG2 | \
0928 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 | \
0929 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 | \
0930 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER | \
0931 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 | \
0932 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL | \
0933 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP | \
0934 HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT)
0935
0936 #define HTT_RX_MON_FP_CTRL_FILTER_FLASG3 HTT_RX_FP_CTRL_FILTER_FLASG3
0937
0938 #define HTT_RX_MON_MO_CTRL_FILTER_FLASG3 HTT_RX_MO_CTRL_FILTER_FLASG3
0939
0940 #define HTT_RX_MON_FP_DATA_FILTER_FLASG3 HTT_RX_FP_DATA_FILTER_FLASG3
0941
0942 #define HTT_RX_MON_MO_DATA_FILTER_FLASG3 HTT_RX_MO_DATA_FILTER_FLASG3
0943
0944 #define HTT_RX_MON_FILTER_TLV_FLAGS \
0945 (HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \
0946 HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \
0947 HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \
0948 HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS | \
0949 HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT | \
0950 HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE)
0951
0952 #define HTT_RX_MON_FILTER_TLV_FLAGS_MON_STATUS_RING \
0953 (HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \
0954 HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \
0955 HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \
0956 HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS | \
0957 HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT | \
0958 HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE)
0959
0960 #define HTT_RX_MON_FILTER_TLV_FLAGS_MON_BUF_RING \
0961 (HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \
0962 HTT_RX_FILTER_TLV_FLAGS_MSDU_START | \
0963 HTT_RX_FILTER_TLV_FLAGS_RX_PACKET | \
0964 HTT_RX_FILTER_TLV_FLAGS_MSDU_END | \
0965 HTT_RX_FILTER_TLV_FLAGS_MPDU_END | \
0966 HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER | \
0967 HTT_RX_FILTER_TLV_FLAGS_PER_MSDU_HEADER | \
0968 HTT_RX_FILTER_TLV_FLAGS_ATTENTION)
0969
0970 struct htt_rx_ring_selection_cfg_cmd {
0971 u32 info0;
0972 u32 info1;
0973 u32 pkt_type_en_flags0;
0974 u32 pkt_type_en_flags1;
0975 u32 pkt_type_en_flags2;
0976 u32 pkt_type_en_flags3;
0977 u32 rx_filter_tlv;
0978 } __packed;
0979
0980 struct htt_rx_ring_tlv_filter {
0981 u32 rx_filter;
0982 u32 pkt_filter_flags0;
0983 u32 pkt_filter_flags1;
0984 u32 pkt_filter_flags2;
0985 u32 pkt_filter_flags3;
0986 };
0987
0988 #define HTT_RX_FULL_MON_MODE_CFG_CMD_INFO0_MSG_TYPE GENMASK(7, 0)
0989 #define HTT_RX_FULL_MON_MODE_CFG_CMD_INFO0_PDEV_ID GENMASK(15, 8)
0990
0991 #define HTT_RX_FULL_MON_MODE_CFG_CMD_CFG_ENABLE BIT(0)
0992 #define HTT_RX_FULL_MON_MODE_CFG_CMD_CFG_ZERO_MPDUS_END BIT(1)
0993 #define HTT_RX_FULL_MON_MODE_CFG_CMD_CFG_NON_ZERO_MPDUS_END BIT(2)
0994 #define HTT_RX_FULL_MON_MODE_CFG_CMD_CFG_RELEASE_RING GENMASK(10, 3)
0995
0996
0997
0998
0999
1000
1001
1002
1003 enum htt_rx_full_mon_release_ring {
1004 HTT_RX_MON_RING_REO,
1005 HTT_RX_MON_RING_FW,
1006 HTT_RX_MON_RING_SW,
1007 HTT_RX_MON_RING_RELEASE,
1008 };
1009
1010 struct htt_rx_full_monitor_mode_cfg_cmd {
1011 u32 info0;
1012 u32 cfg;
1013 } __packed;
1014
1015
1016
1017 enum htt_t2h_msg_type {
1018 HTT_T2H_MSG_TYPE_VERSION_CONF,
1019 HTT_T2H_MSG_TYPE_PEER_MAP = 0x3,
1020 HTT_T2H_MSG_TYPE_PEER_UNMAP = 0x4,
1021 HTT_T2H_MSG_TYPE_RX_ADDBA = 0x5,
1022 HTT_T2H_MSG_TYPE_PKTLOG = 0x8,
1023 HTT_T2H_MSG_TYPE_SEC_IND = 0xb,
1024 HTT_T2H_MSG_TYPE_PEER_MAP2 = 0x1e,
1025 HTT_T2H_MSG_TYPE_PEER_UNMAP2 = 0x1f,
1026 HTT_T2H_MSG_TYPE_PPDU_STATS_IND = 0x1d,
1027 HTT_T2H_MSG_TYPE_EXT_STATS_CONF = 0x1c,
1028 HTT_T2H_MSG_TYPE_BKPRESSURE_EVENT_IND = 0x24,
1029 };
1030
1031 #define HTT_TARGET_VERSION_MAJOR 3
1032
1033 #define HTT_T2H_MSG_TYPE GENMASK(7, 0)
1034 #define HTT_T2H_VERSION_CONF_MINOR GENMASK(15, 8)
1035 #define HTT_T2H_VERSION_CONF_MAJOR GENMASK(23, 16)
1036
1037 struct htt_t2h_version_conf_msg {
1038 u32 version;
1039 } __packed;
1040
1041 #define HTT_T2H_PEER_MAP_INFO_VDEV_ID GENMASK(15, 8)
1042 #define HTT_T2H_PEER_MAP_INFO_PEER_ID GENMASK(31, 16)
1043 #define HTT_T2H_PEER_MAP_INFO1_MAC_ADDR_H16 GENMASK(15, 0)
1044 #define HTT_T2H_PEER_MAP_INFO1_HW_PEER_ID GENMASK(31, 16)
1045 #define HTT_T2H_PEER_MAP_INFO2_AST_HASH_VAL GENMASK(15, 0)
1046 #define HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_M BIT(16)
1047 #define HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_S 16
1048
1049 struct htt_t2h_peer_map_event {
1050 u32 info;
1051 u32 mac_addr_l32;
1052 u32 info1;
1053 u32 info2;
1054 } __packed;
1055
1056 #define HTT_T2H_PEER_UNMAP_INFO_VDEV_ID HTT_T2H_PEER_MAP_INFO_VDEV_ID
1057 #define HTT_T2H_PEER_UNMAP_INFO_PEER_ID HTT_T2H_PEER_MAP_INFO_PEER_ID
1058 #define HTT_T2H_PEER_UNMAP_INFO1_MAC_ADDR_H16 \
1059 HTT_T2H_PEER_MAP_INFO1_MAC_ADDR_H16
1060 #define HTT_T2H_PEER_MAP_INFO1_NEXT_HOP_M HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_M
1061 #define HTT_T2H_PEER_MAP_INFO1_NEXT_HOP_S HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_S
1062
1063 struct htt_t2h_peer_unmap_event {
1064 u32 info;
1065 u32 mac_addr_l32;
1066 u32 info1;
1067 } __packed;
1068
1069 struct htt_resp_msg {
1070 union {
1071 struct htt_t2h_version_conf_msg version_msg;
1072 struct htt_t2h_peer_map_event peer_map_ev;
1073 struct htt_t2h_peer_unmap_event peer_unmap_ev;
1074 };
1075 } __packed;
1076
1077 #define HTT_BACKPRESSURE_EVENT_PDEV_ID_M GENMASK(15, 8)
1078 #define HTT_BACKPRESSURE_EVENT_RING_TYPE_M GENMASK(23, 16)
1079 #define HTT_BACKPRESSURE_EVENT_RING_ID_M GENMASK(31, 24)
1080
1081 #define HTT_BACKPRESSURE_EVENT_HP_M GENMASK(15, 0)
1082 #define HTT_BACKPRESSURE_EVENT_TP_M GENMASK(31, 16)
1083
1084 #define HTT_BACKPRESSURE_UMAC_RING_TYPE 0
1085 #define HTT_BACKPRESSURE_LMAC_RING_TYPE 1
1086
1087 enum htt_backpressure_umac_ringid {
1088 HTT_SW_RING_IDX_REO_REO2SW1_RING,
1089 HTT_SW_RING_IDX_REO_REO2SW2_RING,
1090 HTT_SW_RING_IDX_REO_REO2SW3_RING,
1091 HTT_SW_RING_IDX_REO_REO2SW4_RING,
1092 HTT_SW_RING_IDX_REO_WBM2REO_LINK_RING,
1093 HTT_SW_RING_IDX_REO_REO2TCL_RING,
1094 HTT_SW_RING_IDX_REO_REO2FW_RING,
1095 HTT_SW_RING_IDX_REO_REO_RELEASE_RING,
1096 HTT_SW_RING_IDX_WBM_PPE_RELEASE_RING,
1097 HTT_SW_RING_IDX_TCL_TCL2TQM_RING,
1098 HTT_SW_RING_IDX_WBM_TQM_RELEASE_RING,
1099 HTT_SW_RING_IDX_WBM_REO_RELEASE_RING,
1100 HTT_SW_RING_IDX_WBM_WBM2SW0_RELEASE_RING,
1101 HTT_SW_RING_IDX_WBM_WBM2SW1_RELEASE_RING,
1102 HTT_SW_RING_IDX_WBM_WBM2SW2_RELEASE_RING,
1103 HTT_SW_RING_IDX_WBM_WBM2SW3_RELEASE_RING,
1104 HTT_SW_RING_IDX_REO_REO_CMD_RING,
1105 HTT_SW_RING_IDX_REO_REO_STATUS_RING,
1106 HTT_SW_UMAC_RING_IDX_MAX,
1107 };
1108
1109 enum htt_backpressure_lmac_ringid {
1110 HTT_SW_RING_IDX_FW2RXDMA_BUF_RING,
1111 HTT_SW_RING_IDX_FW2RXDMA_STATUS_RING,
1112 HTT_SW_RING_IDX_FW2RXDMA_LINK_RING,
1113 HTT_SW_RING_IDX_SW2RXDMA_BUF_RING,
1114 HTT_SW_RING_IDX_WBM2RXDMA_LINK_RING,
1115 HTT_SW_RING_IDX_RXDMA2FW_RING,
1116 HTT_SW_RING_IDX_RXDMA2SW_RING,
1117 HTT_SW_RING_IDX_RXDMA2RELEASE_RING,
1118 HTT_SW_RING_IDX_RXDMA2REO_RING,
1119 HTT_SW_RING_IDX_MONITOR_STATUS_RING,
1120 HTT_SW_RING_IDX_MONITOR_BUF_RING,
1121 HTT_SW_RING_IDX_MONITOR_DESC_RING,
1122 HTT_SW_RING_IDX_MONITOR_DEST_RING,
1123 HTT_SW_LMAC_RING_IDX_MAX,
1124 };
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168 #define HTT_T2H_PPDU_STATS_INFO_PDEV_ID GENMASK(11, 10)
1169 #define HTT_T2H_PPDU_STATS_INFO_PAYLOAD_SIZE GENMASK(31, 16)
1170
1171 struct ath11k_htt_ppdu_stats_msg {
1172 u32 info;
1173 u32 ppdu_id;
1174 u32 timestamp;
1175 u32 rsvd;
1176 u8 data[];
1177 } __packed;
1178
1179 struct htt_tlv {
1180 u32 header;
1181 u8 value[];
1182 } __packed;
1183
1184 #define HTT_TLV_TAG GENMASK(11, 0)
1185 #define HTT_TLV_LEN GENMASK(23, 12)
1186
1187 enum HTT_PPDU_STATS_BW {
1188 HTT_PPDU_STATS_BANDWIDTH_5MHZ = 0,
1189 HTT_PPDU_STATS_BANDWIDTH_10MHZ = 1,
1190 HTT_PPDU_STATS_BANDWIDTH_20MHZ = 2,
1191 HTT_PPDU_STATS_BANDWIDTH_40MHZ = 3,
1192 HTT_PPDU_STATS_BANDWIDTH_80MHZ = 4,
1193 HTT_PPDU_STATS_BANDWIDTH_160MHZ = 5,
1194 HTT_PPDU_STATS_BANDWIDTH_DYN = 6,
1195 };
1196
1197 #define HTT_PPDU_STATS_CMN_FLAGS_FRAME_TYPE_M GENMASK(7, 0)
1198 #define HTT_PPDU_STATS_CMN_FLAGS_QUEUE_TYPE_M GENMASK(15, 8)
1199
1200 #define HTT_PPDU_STATS_CMN_FLAGS_BW_M GENMASK(19, 16)
1201
1202 struct htt_ppdu_stats_common {
1203 u32 ppdu_id;
1204 u16 sched_cmdid;
1205 u8 ring_id;
1206 u8 num_users;
1207 u32 flags;
1208 u32 chain_mask;
1209 u32 fes_duration_us;
1210 u32 ppdu_sch_eval_start_tstmp_us;
1211 u32 ppdu_sch_end_tstmp_us;
1212 u32 ppdu_start_tstmp_us;
1213
1214
1215
1216 u16 phy_mode;
1217 u16 bw_mhz;
1218 } __packed;
1219
1220 enum htt_ppdu_stats_gi {
1221 HTT_PPDU_STATS_SGI_0_8_US,
1222 HTT_PPDU_STATS_SGI_0_4_US,
1223 HTT_PPDU_STATS_SGI_1_6_US,
1224 HTT_PPDU_STATS_SGI_3_2_US,
1225 };
1226
1227 #define HTT_PPDU_STATS_USER_RATE_INFO0_USER_POS_M GENMASK(3, 0)
1228 #define HTT_PPDU_STATS_USER_RATE_INFO0_MU_GROUP_ID_M GENMASK(11, 4)
1229
1230 #define HTT_PPDU_STATS_USER_RATE_INFO1_RESP_TYPE_VALD_M BIT(0)
1231 #define HTT_PPDU_STATS_USER_RATE_INFO1_PPDU_TYPE_M GENMASK(5, 1)
1232
1233 #define HTT_PPDU_STATS_USER_RATE_FLAGS_LTF_SIZE_M GENMASK(1, 0)
1234 #define HTT_PPDU_STATS_USER_RATE_FLAGS_STBC_M BIT(2)
1235 #define HTT_PPDU_STATS_USER_RATE_FLAGS_HE_RE_M BIT(3)
1236 #define HTT_PPDU_STATS_USER_RATE_FLAGS_TXBF_M GENMASK(7, 4)
1237 #define HTT_PPDU_STATS_USER_RATE_FLAGS_BW_M GENMASK(11, 8)
1238 #define HTT_PPDU_STATS_USER_RATE_FLAGS_NSS_M GENMASK(15, 12)
1239 #define HTT_PPDU_STATS_USER_RATE_FLAGS_MCS_M GENMASK(19, 16)
1240 #define HTT_PPDU_STATS_USER_RATE_FLAGS_PREAMBLE_M GENMASK(23, 20)
1241 #define HTT_PPDU_STATS_USER_RATE_FLAGS_GI_M GENMASK(27, 24)
1242 #define HTT_PPDU_STATS_USER_RATE_FLAGS_DCM_M BIT(28)
1243 #define HTT_PPDU_STATS_USER_RATE_FLAGS_LDPC_M BIT(29)
1244
1245 #define HTT_USR_RATE_PREAMBLE(_val) \
1246 FIELD_GET(HTT_PPDU_STATS_USER_RATE_FLAGS_PREAMBLE_M, _val)
1247 #define HTT_USR_RATE_BW(_val) \
1248 FIELD_GET(HTT_PPDU_STATS_USER_RATE_FLAGS_BW_M, _val)
1249 #define HTT_USR_RATE_NSS(_val) \
1250 FIELD_GET(HTT_PPDU_STATS_USER_RATE_FLAGS_NSS_M, _val)
1251 #define HTT_USR_RATE_MCS(_val) \
1252 FIELD_GET(HTT_PPDU_STATS_USER_RATE_FLAGS_MCS_M, _val)
1253 #define HTT_USR_RATE_GI(_val) \
1254 FIELD_GET(HTT_PPDU_STATS_USER_RATE_FLAGS_GI_M, _val)
1255 #define HTT_USR_RATE_DCM(_val) \
1256 FIELD_GET(HTT_PPDU_STATS_USER_RATE_FLAGS_DCM_M, _val)
1257
1258 #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_LTF_SIZE_M GENMASK(1, 0)
1259 #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_STBC_M BIT(2)
1260 #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_HE_RE_M BIT(3)
1261 #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_TXBF_M GENMASK(7, 4)
1262 #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_BW_M GENMASK(11, 8)
1263 #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_NSS_M GENMASK(15, 12)
1264 #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_MCS_M GENMASK(19, 16)
1265 #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_PREAMBLE_M GENMASK(23, 20)
1266 #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_GI_M GENMASK(27, 24)
1267 #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_DCM_M BIT(28)
1268 #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_LDPC_M BIT(29)
1269
1270 struct htt_ppdu_stats_user_rate {
1271 u8 tid_num;
1272 u8 reserved0;
1273 u16 sw_peer_id;
1274 u32 info0;
1275 u16 ru_end;
1276 u16 ru_start;
1277 u16 resp_ru_end;
1278 u16 resp_ru_start;
1279 u32 info1;
1280 u32 rate_flags;
1281
1282 u32 resp_rate_flags;
1283 } __packed;
1284
1285 #define HTT_PPDU_STATS_TX_INFO_FLAGS_RATECODE_M GENMASK(7, 0)
1286 #define HTT_PPDU_STATS_TX_INFO_FLAGS_IS_AMPDU_M BIT(8)
1287 #define HTT_PPDU_STATS_TX_INFO_FLAGS_BA_ACK_FAILED_M GENMASK(10, 9)
1288 #define HTT_PPDU_STATS_TX_INFO_FLAGS_BW_M GENMASK(13, 11)
1289 #define HTT_PPDU_STATS_TX_INFO_FLAGS_SGI_M BIT(14)
1290 #define HTT_PPDU_STATS_TX_INFO_FLAGS_PEERID_M GENMASK(31, 16)
1291
1292 #define HTT_TX_INFO_IS_AMSDU(_flags) \
1293 FIELD_GET(HTT_PPDU_STATS_TX_INFO_FLAGS_IS_AMPDU_M, _flags)
1294 #define HTT_TX_INFO_BA_ACK_FAILED(_flags) \
1295 FIELD_GET(HTT_PPDU_STATS_TX_INFO_FLAGS_BA_ACK_FAILED_M, _flags)
1296 #define HTT_TX_INFO_RATECODE(_flags) \
1297 FIELD_GET(HTT_PPDU_STATS_TX_INFO_FLAGS_RATECODE_M, _flags)
1298 #define HTT_TX_INFO_PEERID(_flags) \
1299 FIELD_GET(HTT_PPDU_STATS_TX_INFO_FLAGS_PEERID_M, _flags)
1300
1301 struct htt_tx_ppdu_stats_info {
1302 struct htt_tlv tlv_hdr;
1303 u32 tx_success_bytes;
1304 u32 tx_retry_bytes;
1305 u32 tx_failed_bytes;
1306 u32 flags;
1307 u16 tx_success_msdus;
1308 u16 tx_retry_msdus;
1309 u16 tx_failed_msdus;
1310 u16 tx_duration;
1311 } __packed;
1312
1313 enum htt_ppdu_stats_usr_compln_status {
1314 HTT_PPDU_STATS_USER_STATUS_OK,
1315 HTT_PPDU_STATS_USER_STATUS_FILTERED,
1316 HTT_PPDU_STATS_USER_STATUS_RESP_TIMEOUT,
1317 HTT_PPDU_STATS_USER_STATUS_RESP_MISMATCH,
1318 HTT_PPDU_STATS_USER_STATUS_ABORT,
1319 };
1320
1321 #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_LONG_RETRY_M GENMASK(3, 0)
1322 #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_SHORT_RETRY_M GENMASK(7, 4)
1323 #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_IS_AMPDU_M BIT(8)
1324 #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_RESP_TYPE_M GENMASK(12, 9)
1325
1326 #define HTT_USR_CMPLTN_IS_AMPDU(_val) \
1327 FIELD_GET(HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_IS_AMPDU_M, _val)
1328 #define HTT_USR_CMPLTN_LONG_RETRY(_val) \
1329 FIELD_GET(HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_LONG_RETRY_M, _val)
1330 #define HTT_USR_CMPLTN_SHORT_RETRY(_val) \
1331 FIELD_GET(HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_SHORT_RETRY_M, _val)
1332
1333 struct htt_ppdu_stats_usr_cmpltn_cmn {
1334 u8 status;
1335 u8 tid_num;
1336 u16 sw_peer_id;
1337
1338 u32 ack_rssi;
1339 u16 mpdu_tried;
1340 u16 mpdu_success;
1341 u32 flags;
1342 } __packed;
1343
1344 #define HTT_PPDU_STATS_ACK_BA_INFO_NUM_MPDU_M GENMASK(8, 0)
1345 #define HTT_PPDU_STATS_ACK_BA_INFO_NUM_MSDU_M GENMASK(24, 9)
1346 #define HTT_PPDU_STATS_ACK_BA_INFO_TID_NUM GENMASK(31, 25)
1347
1348 #define HTT_PPDU_STATS_NON_QOS_TID 16
1349
1350 struct htt_ppdu_stats_usr_cmpltn_ack_ba_status {
1351 u32 ppdu_id;
1352 u16 sw_peer_id;
1353 u16 reserved0;
1354 u32 info;
1355 u16 current_seq;
1356 u16 start_seq;
1357 u32 success_bytes;
1358 } __packed;
1359
1360 struct htt_ppdu_stats_usr_cmn_array {
1361 struct htt_tlv tlv_hdr;
1362 u32 num_ppdu_stats;
1363
1364
1365
1366
1367
1368 struct htt_tx_ppdu_stats_info tx_ppdu_info[];
1369 } __packed;
1370
1371 struct htt_ppdu_user_stats {
1372 u16 peer_id;
1373 u32 tlv_flags;
1374 bool is_valid_peer_id;
1375 struct htt_ppdu_stats_user_rate rate;
1376 struct htt_ppdu_stats_usr_cmpltn_cmn cmpltn_cmn;
1377 struct htt_ppdu_stats_usr_cmpltn_ack_ba_status ack_ba;
1378 };
1379
1380 #define HTT_PPDU_STATS_MAX_USERS 8
1381 #define HTT_PPDU_DESC_MAX_DEPTH 16
1382
1383 struct htt_ppdu_stats {
1384 struct htt_ppdu_stats_common common;
1385 struct htt_ppdu_user_stats user_stats[HTT_PPDU_STATS_MAX_USERS];
1386 };
1387
1388 struct htt_ppdu_stats_info {
1389 u32 ppdu_id;
1390 struct htt_ppdu_stats ppdu_stats;
1391 struct list_head list;
1392 };
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428 struct htt_pktlog_msg {
1429 u32 hdr;
1430 u8 payload[];
1431 };
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511 struct htt_ext_stats_cfg_hdr {
1512 u8 msg_type;
1513 u8 pdev_mask;
1514 u8 stats_type;
1515 u8 reserved;
1516 } __packed;
1517
1518 struct htt_ext_stats_cfg_cmd {
1519 struct htt_ext_stats_cfg_hdr hdr;
1520 u32 cfg_param0;
1521 u32 cfg_param1;
1522 u32 cfg_param2;
1523 u32 cfg_param3;
1524 u32 reserved;
1525 u32 cookie_lsb;
1526 u32 cookie_msb;
1527 } __packed;
1528
1529
1530 #define HTT_STAT_DEFAULT_RESET_START_OFFSET 0
1531 #define HTT_STAT_DEFAULT_CFG0_ALL_HWQS 0xffffffff
1532 #define HTT_STAT_DEFAULT_CFG0_ALL_TXQS 0xffffffff
1533 #define HTT_STAT_DEFAULT_CFG0_ALL_CMDQS 0xffff
1534 #define HTT_STAT_DEFAULT_CFG0_ALL_RINGS 0xffff
1535 #define HTT_STAT_DEFAULT_CFG0_ACTIVE_PEERS 0xff
1536 #define HTT_STAT_DEFAULT_CFG0_CCA_CUMULATIVE 0x00
1537 #define HTT_STAT_DEFAULT_CFG0_ACTIVE_VDEVS 0x00
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558 #define HTT_STAT_PEER_INFO_MAC_ADDR BIT(0)
1559 #define HTT_STAT_DEFAULT_PEER_REQ_TYPE 0x7f
1560
1561
1562 struct htt_ext_stats_cfg_params {
1563 u32 cfg0;
1564 u32 cfg1;
1565 u32 cfg2;
1566 u32 cfg3;
1567 };
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644 #define HTT_T2H_EXT_STATS_INFO1_DONE BIT(11)
1645 #define HTT_T2H_EXT_STATS_INFO1_LENGTH GENMASK(31, 16)
1646
1647 struct ath11k_htt_extd_stats_msg {
1648 u32 info0;
1649 u64 cookie;
1650 u32 info1;
1651 u8 data[];
1652 } __packed;
1653
1654 #define HTT_MAC_ADDR_L32_0 GENMASK(7, 0)
1655 #define HTT_MAC_ADDR_L32_1 GENMASK(15, 8)
1656 #define HTT_MAC_ADDR_L32_2 GENMASK(23, 16)
1657 #define HTT_MAC_ADDR_L32_3 GENMASK(31, 24)
1658 #define HTT_MAC_ADDR_H16_0 GENMASK(7, 0)
1659 #define HTT_MAC_ADDR_H16_1 GENMASK(15, 8)
1660
1661 struct htt_mac_addr {
1662 u32 mac_addr_l32;
1663 u32 mac_addr_h16;
1664 };
1665
1666 static inline void ath11k_dp_get_mac_addr(u32 addr_l32, u16 addr_h16, u8 *addr)
1667 {
1668 if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) {
1669 addr_l32 = swab32(addr_l32);
1670 addr_h16 = swab16(addr_h16);
1671 }
1672
1673 memcpy(addr, &addr_l32, 4);
1674 memcpy(addr + 4, &addr_h16, ETH_ALEN - 4);
1675 }
1676
1677 int ath11k_dp_service_srng(struct ath11k_base *ab,
1678 struct ath11k_ext_irq_grp *irq_grp,
1679 int budget);
1680 int ath11k_dp_htt_connect(struct ath11k_dp *dp);
1681 void ath11k_dp_vdev_tx_attach(struct ath11k *ar, struct ath11k_vif *arvif);
1682 void ath11k_dp_free(struct ath11k_base *ab);
1683 int ath11k_dp_alloc(struct ath11k_base *ab);
1684 int ath11k_dp_pdev_alloc(struct ath11k_base *ab);
1685 void ath11k_dp_pdev_pre_alloc(struct ath11k_base *ab);
1686 void ath11k_dp_pdev_free(struct ath11k_base *ab);
1687 int ath11k_dp_tx_htt_srng_setup(struct ath11k_base *ab, u32 ring_id,
1688 int mac_id, enum hal_ring_type ring_type);
1689 int ath11k_dp_peer_setup(struct ath11k *ar, int vdev_id, const u8 *addr);
1690 void ath11k_dp_peer_cleanup(struct ath11k *ar, int vdev_id, const u8 *addr);
1691 void ath11k_dp_srng_cleanup(struct ath11k_base *ab, struct dp_srng *ring);
1692 int ath11k_dp_srng_setup(struct ath11k_base *ab, struct dp_srng *ring,
1693 enum hal_ring_type type, int ring_num,
1694 int mac_id, int num_entries);
1695 void ath11k_dp_link_desc_cleanup(struct ath11k_base *ab,
1696 struct dp_link_desc_bank *desc_bank,
1697 u32 ring_type, struct dp_srng *ring);
1698 int ath11k_dp_link_desc_setup(struct ath11k_base *ab,
1699 struct dp_link_desc_bank *link_desc_banks,
1700 u32 ring_type, struct hal_srng *srng,
1701 u32 n_link_desc);
1702 void ath11k_dp_shadow_start_timer(struct ath11k_base *ab,
1703 struct hal_srng *srng,
1704 struct ath11k_hp_update_timer *update_timer);
1705 void ath11k_dp_shadow_stop_timer(struct ath11k_base *ab,
1706 struct ath11k_hp_update_timer *update_timer);
1707 void ath11k_dp_shadow_init_timer(struct ath11k_base *ab,
1708 struct ath11k_hp_update_timer *update_timer,
1709 u32 interval, u32 ring_id);
1710 void ath11k_dp_stop_shadow_timers(struct ath11k_base *ab);
1711
1712 #endif