Path: blob/main/sys/contrib/dev/athk/ath12k/dp_htt.h
283314 views
/* SPDX-License-Identifier: BSD-3-Clause-Clear */1/*2* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.3* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.4*/56#ifndef ATH12K_DP_HTT_H7#define ATH12K_DP_HTT_H89struct ath12k_dp;1011/* HTT definitions */12#define HTT_TAG_TCL_METADATA_VERSION 51314#define HTT_TCL_META_DATA_TYPE GENMASK(1, 0)15#define HTT_TCL_META_DATA_VALID_HTT BIT(2)1617/* vdev meta data */18#define HTT_TCL_META_DATA_VDEV_ID GENMASK(10, 3)19#define HTT_TCL_META_DATA_PDEV_ID GENMASK(12, 11)20#define HTT_TCL_META_DATA_HOST_INSPECTED_MISSION BIT(13)2122/* peer meta data */23#define HTT_TCL_META_DATA_PEER_ID GENMASK(15, 3)2425/* Global sequence number */26#define HTT_TCL_META_DATA_TYPE_GLOBAL_SEQ_NUM 327#define HTT_TCL_META_DATA_GLOBAL_SEQ_HOST_INSPECTED BIT(2)28#define HTT_TCL_META_DATA_GLOBAL_SEQ_NUM GENMASK(14, 3)29#define HTT_TX_MLO_MCAST_HOST_REINJECT_BASE_VDEV_ID 1283031/* HTT tx completion is overlaid in wbm_release_ring */32#define HTT_TX_WBM_COMP_INFO0_STATUS GENMASK(16, 13)33#define HTT_TX_WBM_COMP_INFO1_REINJECT_REASON GENMASK(3, 0)34#define HTT_TX_WBM_COMP_INFO1_EXCEPTION_FRAME BIT(4)3536#define HTT_TX_WBM_COMP_INFO2_ACK_RSSI GENMASK(31, 24)3738#define HTT_TARGET_VERSION_TIMEOUT_HZ (3 * HZ)3940struct htt_tx_wbm_completion {41__le32 rsvd0[2];42__le32 info0;43__le32 info1;44__le32 info2;45__le32 info3;46__le32 info4;47__le32 rsvd1;4849} __packed;5051enum htt_h2t_msg_type {52HTT_H2T_MSG_TYPE_VERSION_REQ = 0,53HTT_H2T_MSG_TYPE_SRING_SETUP = 0xb,54HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG = 0xc,55HTT_H2T_MSG_TYPE_EXT_STATS_CFG = 0x10,56HTT_H2T_MSG_TYPE_PPDU_STATS_CFG = 0x11,57HTT_H2T_MSG_TYPE_VDEV_TXRX_STATS_CFG = 0x1a,58HTT_H2T_MSG_TYPE_TX_MONITOR_CFG = 0x1b,59};6061#define HTT_VER_REQ_INFO_MSG_ID GENMASK(7, 0)62#define HTT_OPTION_TCL_METADATA_VER_V1 163#define HTT_OPTION_TCL_METADATA_VER_V2 264#define HTT_OPTION_TAG GENMASK(7, 0)65#define HTT_OPTION_LEN GENMASK(15, 8)66#define HTT_OPTION_VALUE GENMASK(31, 16)67#define HTT_TCL_METADATA_VER_SZ 46869struct htt_ver_req_cmd {70__le32 ver_reg_info;71__le32 tcl_metadata_version;72} __packed;7374enum htt_srng_ring_type {75HTT_HW_TO_SW_RING,76HTT_SW_TO_HW_RING,77HTT_SW_TO_SW_RING,78};7980enum htt_srng_ring_id {81HTT_RXDMA_HOST_BUF_RING,82HTT_RXDMA_MONITOR_STATUS_RING,83HTT_RXDMA_MONITOR_BUF_RING,84HTT_RXDMA_MONITOR_DESC_RING,85HTT_RXDMA_MONITOR_DEST_RING,86HTT_HOST1_TO_FW_RXBUF_RING,87HTT_HOST2_TO_FW_RXBUF_RING,88HTT_RXDMA_NON_MONITOR_DEST_RING,89HTT_RXDMA_HOST_BUF_RING2,90HTT_TX_MON_HOST2MON_BUF_RING,91HTT_TX_MON_MON2HOST_DEST_RING,92HTT_RX_MON_HOST2MON_BUF_RING,93HTT_RX_MON_MON2HOST_DEST_RING,94};9596/* host -> target HTT_SRING_SETUP message97*98* After target is booted up, Host can send SRING setup message for99* each host facing LMAC SRING. Target setups up HW registers based100* on setup message and confirms back to Host if response_required is set.101* Host should wait for confirmation message before sending new SRING102* setup message103*104* The message would appear as follows:105*106* |31 24|23 20|19|18 16|15|14 8|7 0|107* |--------------- +-----------------+----------------+------------------|108* | ring_type | ring_id | pdev_id | msg_type |109* |----------------------------------------------------------------------|110* | ring_base_addr_lo |111* |----------------------------------------------------------------------|112* | ring_base_addr_hi |113* |----------------------------------------------------------------------|114* |ring_misc_cfg_flag|ring_entry_size| ring_size |115* |----------------------------------------------------------------------|116* | ring_head_offset32_remote_addr_lo |117* |----------------------------------------------------------------------|118* | ring_head_offset32_remote_addr_hi |119* |----------------------------------------------------------------------|120* | ring_tail_offset32_remote_addr_lo |121* |----------------------------------------------------------------------|122* | ring_tail_offset32_remote_addr_hi |123* |----------------------------------------------------------------------|124* | ring_msi_addr_lo |125* |----------------------------------------------------------------------|126* | ring_msi_addr_hi |127* |----------------------------------------------------------------------|128* | ring_msi_data |129* |----------------------------------------------------------------------|130* | intr_timer_th |IM| intr_batch_counter_th |131* |----------------------------------------------------------------------|132* | reserved |RR|PTCF| intr_low_threshold |133* |----------------------------------------------------------------------|134* Where135* IM = sw_intr_mode136* RR = response_required137* PTCF = prefetch_timer_cfg138*139* The message is interpreted as follows:140* dword0 - b'0:7 - msg_type: This will be set to141* HTT_H2T_MSG_TYPE_SRING_SETUP142* b'8:15 - pdev_id:143* 0 (for rings at SOC/UMAC level),144* 1/2/3 mac id (for rings at LMAC level)145* b'16:23 - ring_id: identify which ring is to setup,146* more details can be got from enum htt_srng_ring_id147* b'24:31 - ring_type: identify type of host rings,148* more details can be got from enum htt_srng_ring_type149* dword1 - b'0:31 - ring_base_addr_lo: Lower 32bits of ring base address150* dword2 - b'0:31 - ring_base_addr_hi: Upper 32bits of ring base address151* dword3 - b'0:15 - ring_size: size of the ring in unit of 4-bytes words152* b'16:23 - ring_entry_size: Size of each entry in 4-byte word units153* b'24:31 - ring_misc_cfg_flag: Valid only for HW_TO_SW_RING and154* SW_TO_HW_RING.155* Refer to HTT_SRING_SETUP_RING_MISC_CFG_RING defs.156* dword4 - b'0:31 - ring_head_off32_remote_addr_lo:157* Lower 32 bits of memory address of the remote variable158* storing the 4-byte word offset that identifies the head159* element within the ring.160* (The head offset variable has type u32.)161* Valid for HW_TO_SW and SW_TO_SW rings.162* dword5 - b'0:31 - ring_head_off32_remote_addr_hi:163* Upper 32 bits of memory address of the remote variable164* storing the 4-byte word offset that identifies the head165* element within the ring.166* (The head offset variable has type u32.)167* Valid for HW_TO_SW and SW_TO_SW rings.168* dword6 - b'0:31 - ring_tail_off32_remote_addr_lo:169* Lower 32 bits of memory address of the remote variable170* storing the 4-byte word offset that identifies the tail171* element within the ring.172* (The tail offset variable has type u32.)173* Valid for HW_TO_SW and SW_TO_SW rings.174* dword7 - b'0:31 - ring_tail_off32_remote_addr_hi:175* Upper 32 bits of memory address of the remote variable176* storing the 4-byte word offset that identifies the tail177* element within the ring.178* (The tail offset variable has type u32.)179* Valid for HW_TO_SW and SW_TO_SW rings.180* dword8 - b'0:31 - ring_msi_addr_lo: Lower 32bits of MSI cfg address181* valid only for HW_TO_SW_RING and SW_TO_HW_RING182* dword9 - b'0:31 - ring_msi_addr_hi: Upper 32bits of MSI cfg address183* valid only for HW_TO_SW_RING and SW_TO_HW_RING184* dword10 - b'0:31 - ring_msi_data: MSI data185* Refer to HTT_SRING_SETUP_RING_MSC_CFG_xxx defs186* valid only for HW_TO_SW_RING and SW_TO_HW_RING187* dword11 - b'0:14 - intr_batch_counter_th:188* batch counter threshold is in units of 4-byte words.189* HW internally maintains and increments batch count.190* (see SRING spec for detail description).191* When batch count reaches threshold value, an interrupt192* is generated by HW.193* b'15 - sw_intr_mode:194* This configuration shall be static.195* Only programmed at power up.196* 0: generate pulse style sw interrupts197* 1: generate level style sw interrupts198* b'16:31 - intr_timer_th:199* The timer init value when timer is idle or is200* initialized to start downcounting.201* In 8us units (to cover a range of 0 to 524 ms)202* dword12 - b'0:15 - intr_low_threshold:203* Used only by Consumer ring to generate ring_sw_int_p.204* Ring entries low threshold water mark, that is used205* in combination with the interrupt timer as well as206* the clearing of the level interrupt.207* b'16:18 - prefetch_timer_cfg:208* Used only by Consumer ring to set timer mode to209* support Application prefetch handling.210* The external tail offset/pointer will be updated211* at following intervals:212* 3'b000: (Prefetch feature disabled; used only for debug)213* 3'b001: 1 usec214* 3'b010: 4 usec215* 3'b011: 8 usec (default)216* 3'b100: 16 usec217* Others: Reserved218* b'19 - response_required:219* Host needs HTT_T2H_MSG_TYPE_SRING_SETUP_DONE as response220* b'20:31 - reserved: reserved for future use221*/222223#define HTT_SRNG_SETUP_CMD_INFO0_MSG_TYPE GENMASK(7, 0)224#define HTT_SRNG_SETUP_CMD_INFO0_PDEV_ID GENMASK(15, 8)225#define HTT_SRNG_SETUP_CMD_INFO0_RING_ID GENMASK(23, 16)226#define HTT_SRNG_SETUP_CMD_INFO0_RING_TYPE GENMASK(31, 24)227228#define HTT_SRNG_SETUP_CMD_INFO1_RING_SIZE GENMASK(15, 0)229#define HTT_SRNG_SETUP_CMD_INFO1_RING_ENTRY_SIZE GENMASK(23, 16)230#define HTT_SRNG_SETUP_CMD_INFO1_RING_LOOP_CNT_DIS BIT(25)231#define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_MSI_SWAP BIT(27)232#define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_HOST_FW_SWAP BIT(28)233#define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_TLV_SWAP BIT(29)234235#define HTT_SRNG_SETUP_CMD_INTR_INFO_BATCH_COUNTER_THRESH GENMASK(14, 0)236#define HTT_SRNG_SETUP_CMD_INTR_INFO_SW_INTR_MODE BIT(15)237#define HTT_SRNG_SETUP_CMD_INTR_INFO_INTR_TIMER_THRESH GENMASK(31, 16)238239#define HTT_SRNG_SETUP_CMD_INFO2_INTR_LOW_THRESH GENMASK(15, 0)240#define HTT_SRNG_SETUP_CMD_INFO2_PRE_FETCH_TIMER_CFG GENMASK(18, 16)241#define HTT_SRNG_SETUP_CMD_INFO2_RESPONSE_REQUIRED BIT(19)242243struct htt_srng_setup_cmd {244__le32 info0;245__le32 ring_base_addr_lo;246__le32 ring_base_addr_hi;247__le32 info1;248__le32 ring_head_off32_remote_addr_lo;249__le32 ring_head_off32_remote_addr_hi;250__le32 ring_tail_off32_remote_addr_lo;251__le32 ring_tail_off32_remote_addr_hi;252__le32 ring_msi_addr_lo;253__le32 ring_msi_addr_hi;254__le32 msi_data;255__le32 intr_info;256__le32 info2;257} __packed;258259/* host -> target FW PPDU_STATS config message260*261* @details262* The following field definitions describe the format of the HTT host263* to target FW for PPDU_STATS_CFG msg.264* The message allows the host to configure the PPDU_STATS_IND messages265* produced by the target.266*267* |31 24|23 16|15 8|7 0|268* |-----------------------------------------------------------|269* | REQ bit mask | pdev_mask | msg type |270* |-----------------------------------------------------------|271* Header fields:272* - MSG_TYPE273* Bits 7:0274* Purpose: identifies this is a req to configure ppdu_stats_ind from target275* Value: 0x11276* - PDEV_MASK277* Bits 8:15278* Purpose: identifies which pdevs this PPDU stats configuration applies to279* Value: This is a overloaded field, refer to usage and interpretation of280* PDEV in interface document.281* Bit 8 : Reserved for SOC stats282* Bit 9 - 15 : Indicates PDEV_MASK in DBDC283* Indicates MACID_MASK in DBS284* - REQ_TLV_BIT_MASK285* Bits 16:31286* Purpose: each set bit indicates the corresponding PPDU stats TLV type287* needs to be included in the target's PPDU_STATS_IND messages.288* Value: refer htt_ppdu_stats_tlv_tag_t <<<???289*290*/291292struct htt_ppdu_stats_cfg_cmd {293__le32 msg;294} __packed;295296#define HTT_PPDU_STATS_CFG_MSG_TYPE GENMASK(7, 0)297#define HTT_PPDU_STATS_CFG_SOC_STATS BIT(8)298#define HTT_PPDU_STATS_CFG_PDEV_ID GENMASK(15, 9)299#define HTT_PPDU_STATS_CFG_TLV_TYPE_BITMASK GENMASK(31, 16)300301enum htt_ppdu_stats_tag_type {302HTT_PPDU_STATS_TAG_COMMON,303HTT_PPDU_STATS_TAG_USR_COMMON,304HTT_PPDU_STATS_TAG_USR_RATE,305HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_64,306HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_256,307HTT_PPDU_STATS_TAG_SCH_CMD_STATUS,308HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON,309HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_64,310HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_256,311HTT_PPDU_STATS_TAG_USR_COMPLTN_ACK_BA_STATUS,312HTT_PPDU_STATS_TAG_USR_COMPLTN_FLUSH,313HTT_PPDU_STATS_TAG_USR_COMMON_ARRAY,314HTT_PPDU_STATS_TAG_INFO,315HTT_PPDU_STATS_TAG_TX_MGMTCTRL_PAYLOAD,316317/* New TLV's are added above to this line */318HTT_PPDU_STATS_TAG_MAX,319};320321#define HTT_PPDU_STATS_TAG_DEFAULT (BIT(HTT_PPDU_STATS_TAG_COMMON) \322| BIT(HTT_PPDU_STATS_TAG_USR_COMMON) \323| BIT(HTT_PPDU_STATS_TAG_USR_RATE) \324| BIT(HTT_PPDU_STATS_TAG_SCH_CMD_STATUS) \325| BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON) \326| BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_ACK_BA_STATUS) \327| BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_FLUSH) \328| BIT(HTT_PPDU_STATS_TAG_USR_COMMON_ARRAY))329330#define HTT_PPDU_STATS_TAG_PKTLOG (BIT(HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_64) | \331BIT(HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_256) | \332BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_64) | \333BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_256) | \334BIT(HTT_PPDU_STATS_TAG_INFO) | \335BIT(HTT_PPDU_STATS_TAG_TX_MGMTCTRL_PAYLOAD) | \336HTT_PPDU_STATS_TAG_DEFAULT)337338enum htt_stats_internal_ppdu_frametype {339HTT_STATS_PPDU_FTYPE_CTRL,340HTT_STATS_PPDU_FTYPE_DATA,341HTT_STATS_PPDU_FTYPE_BAR,342HTT_STATS_PPDU_FTYPE_MAX343};344345/* HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG Message346*347* details:348* HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG message is sent by host to349* configure RXDMA rings.350* The configuration is per ring based and includes both packet subtypes351* and PPDU/MPDU TLVs.352*353* The message would appear as follows:354*355* |31 29|28|27|26|25|24|23 16|15 8|7 0|356* |-------+--+--+--+--+--+-----------+----------------+---------------|357* | rsvd1 |ED|DT|OV|PS|SS| ring_id | pdev_id | msg_type |358* |-------------------------------------------------------------------|359* | rsvd2 | ring_buffer_size |360* |-------------------------------------------------------------------|361* | packet_type_enable_flags_0 |362* |-------------------------------------------------------------------|363* | packet_type_enable_flags_1 |364* |-------------------------------------------------------------------|365* | packet_type_enable_flags_2 |366* |-------------------------------------------------------------------|367* | packet_type_enable_flags_3 |368* |-------------------------------------------------------------------|369* | tlv_filter_in_flags |370* |-------------------------------------------------------------------|371* Where:372* PS = pkt_swap373* SS = status_swap374* The message is interpreted as follows:375* dword0 - b'0:7 - msg_type: This will be set to376* HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG377* b'8:15 - pdev_id:378* 0 (for rings at SOC/UMAC level),379* 1/2/3 mac id (for rings at LMAC level)380* b'16:23 - ring_id : Identify the ring to configure.381* More details can be got from enum htt_srng_ring_id382* b'24 - status_swap: 1 is to swap status TLV383* b'25 - pkt_swap: 1 is to swap packet TLV384* b'26 - rx_offset_valid (OV): flag to indicate rx offsets385* configuration fields are valid386* b'27 - drop_thresh_valid (DT): flag to indicate if the387* rx_drop_threshold field is valid388* b'28 - rx_mon_global_en: Enable/Disable global register389* configuration in Rx monitor module.390* b'29:31 - rsvd1: reserved for future use391* dword1 - b'0:16 - ring_buffer_size: size of buffers referenced by rx ring,392* in byte units.393* Valid only for HW_TO_SW_RING and SW_TO_HW_RING394* - b'16:31 - rsvd2: Reserved for future use395* dword2 - b'0:31 - packet_type_enable_flags_0:396* Enable MGMT packet from 0b0000 to 0b1001397* bits from low to high: FP, MD, MO - 3 bits398* FP: Filter_Pass399* MD: Monitor_Direct400* MO: Monitor_Other401* 10 mgmt subtypes * 3 bits -> 30 bits402* Refer to PKT_TYPE_ENABLE_FLAG0_xxx_MGMT_xxx defs403* dword3 - b'0:31 - packet_type_enable_flags_1:404* Enable MGMT packet from 0b1010 to 0b1111405* bits from low to high: FP, MD, MO - 3 bits406* Refer to PKT_TYPE_ENABLE_FLAG1_xxx_MGMT_xxx defs407* dword4 - b'0:31 - packet_type_enable_flags_2:408* Enable CTRL packet from 0b0000 to 0b1001409* bits from low to high: FP, MD, MO - 3 bits410* Refer to PKT_TYPE_ENABLE_FLAG2_xxx_CTRL_xxx defs411* dword5 - b'0:31 - packet_type_enable_flags_3:412* Enable CTRL packet from 0b1010 to 0b1111,413* MCAST_DATA, UCAST_DATA, NULL_DATA414* bits from low to high: FP, MD, MO - 3 bits415* Refer to PKT_TYPE_ENABLE_FLAG3_xxx_CTRL_xxx defs416* dword6 - b'0:31 - tlv_filter_in_flags:417* Filter in Attention/MPDU/PPDU/Header/User tlvs418* Refer to CFG_TLV_FILTER_IN_FLAG defs419*/420421#define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_MSG_TYPE GENMASK(7, 0)422#define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID GENMASK(15, 8)423#define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_RING_ID GENMASK(23, 16)424#define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_SS BIT(24)425#define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PS BIT(25)426#define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_OFFSET_VALID BIT(26)427#define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_DROP_THRES_VAL BIT(27)428#define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_EN_RXMON BIT(28)429430#define HTT_RX_RING_SELECTION_CFG_CMD_INFO1_BUF_SIZE GENMASK(15, 0)431#define HTT_RX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_MGMT GENMASK(18, 16)432#define HTT_RX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_CTRL GENMASK(21, 19)433#define HTT_RX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_DATA GENMASK(24, 22)434435#define HTT_RX_RING_SELECTION_CFG_CMD_INFO2_DROP_THRESHOLD GENMASK(9, 0)436#define HTT_RX_RING_SELECTION_CFG_CMD_INFO2_EN_LOG_MGMT_TYPE BIT(17)437#define HTT_RX_RING_SELECTION_CFG_CMD_INFO2_EN_CTRL_TYPE BIT(18)438#define HTT_RX_RING_SELECTION_CFG_CMD_INFO2_EN_LOG_DATA_TYPE BIT(19)439440#define HTT_RX_RING_SELECTION_CFG_CMD_INFO3_EN_TLV_PKT_OFFSET BIT(0)441#define HTT_RX_RING_SELECTION_CFG_CMD_INFO3_PKT_TLV_OFFSET GENMASK(14, 1)442443#define HTT_RX_RING_SELECTION_CFG_RX_PACKET_OFFSET GENMASK(15, 0)444#define HTT_RX_RING_SELECTION_CFG_RX_HEADER_OFFSET GENMASK(31, 16)445#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_OFFSET GENMASK(15, 0)446#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_OFFSET GENMASK(31, 16)447#define HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_OFFSET GENMASK(15, 0)448#define HTT_RX_RING_SELECTION_CFG_RX_MSDU_START_OFFSET GENMASK(31, 16)449#define HTT_RX_RING_SELECTION_CFG_RX_ATTENTION_OFFSET GENMASK(15, 0)450451#define HTT_RX_RING_SELECTION_CFG_WORD_MASK_COMPACT_SET BIT(23)452#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_MASK GENMASK(15, 0)453#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_MASK GENMASK(18, 16)454#define HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_MASK GENMASK(16, 0)455456enum htt_rx_filter_tlv_flags {457HTT_RX_FILTER_TLV_FLAGS_MPDU_START = BIT(0),458HTT_RX_FILTER_TLV_FLAGS_MSDU_START = BIT(1),459HTT_RX_FILTER_TLV_FLAGS_RX_PACKET = BIT(2),460HTT_RX_FILTER_TLV_FLAGS_MSDU_END = BIT(3),461HTT_RX_FILTER_TLV_FLAGS_MPDU_END = BIT(4),462HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER = BIT(5),463HTT_RX_FILTER_TLV_FLAGS_PER_MSDU_HEADER = BIT(6),464HTT_RX_FILTER_TLV_FLAGS_ATTENTION = BIT(7),465HTT_RX_FILTER_TLV_FLAGS_PPDU_START = BIT(8),466HTT_RX_FILTER_TLV_FLAGS_PPDU_END = BIT(9),467HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS = BIT(10),468HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT = BIT(11),469HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE = BIT(12),470HTT_RX_FILTER_TLV_FLAGS_PPDU_START_USER_INFO = BIT(13),471};472473enum htt_rx_mgmt_pkt_filter_tlv_flags0 {474HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(0),475HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(1),476HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(2),477HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(3),478HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(4),479HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(5),480HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(6),481HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(7),482HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(8),483HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(9),484HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(10),485HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(11),486HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(12),487HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(13),488HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(14),489HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(15),490HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(16),491HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(17),492HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(18),493HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(19),494HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(20),495HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(21),496HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(22),497HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(23),498HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(24),499HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(25),500HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(26),501HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(27),502HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(28),503HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(29),504};505506enum htt_rx_mgmt_pkt_filter_tlv_flags1 {507HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(0),508HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(1),509HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(2),510HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(3),511HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(4),512HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(5),513HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(6),514HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(7),515HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(8),516HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(9),517HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(10),518HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(11),519HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(12),520HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(13),521HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(14),522HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(15),523HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(16),524HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(17),525};526527enum htt_rx_ctrl_pkt_filter_tlv_flags2 {528HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(0),529HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(1),530HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(2),531HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(3),532HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(4),533HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(5),534HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(6),535HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(7),536HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(8),537HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(9),538HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(10),539HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(11),540HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(12),541HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(13),542HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(14),543HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(15),544HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(16),545HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(17),546HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(18),547HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(19),548HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(20),549HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(21),550HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(22),551HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(23),552HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(24),553HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(25),554HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(26),555HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(27),556HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(28),557HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(29),558};559560enum htt_rx_ctrl_pkt_filter_tlv_flags3 {561HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(0),562HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(1),563HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(2),564HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(3),565HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(4),566HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(5),567HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(6),568HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(7),569HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(8),570HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(9),571HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(10),572HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(11),573HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(12),574HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(13),575HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(14),576HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(15),577HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(16),578HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(17),579};580581enum htt_rx_data_pkt_filter_tlv_flasg3 {582HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(18),583HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(19),584HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(20),585HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(21),586HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(22),587HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(23),588HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(24),589HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(25),590HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(26),591};592593#define HTT_RX_FP_MGMT_FILTER_FLAGS0 \594(HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \595| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \596| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \597| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \598| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \599| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \600| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \601| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \602| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM)603604#define HTT_RX_MD_MGMT_FILTER_FLAGS0 \605(HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \606| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \607| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \608| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \609| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \610| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \611| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \612| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \613| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM)614615#define HTT_RX_MO_MGMT_FILTER_FLAGS0 \616(HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \617| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \618| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \619| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \620| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \621| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \622| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \623| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \624| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM)625626#define HTT_RX_FP_MGMT_FILTER_FLAGS1 (HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \627| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \628| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \629| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \630| HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK)631632#define HTT_RX_MD_MGMT_FILTER_FLAGS1 (HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \633| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \634| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \635| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \636| HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK)637638#define HTT_RX_MO_MGMT_FILTER_FLAGS1 (HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \639| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \640| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \641| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \642| HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK)643644#define HTT_RX_FP_CTRL_FILTER_FLASG2 (HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \645| HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \646| HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BA)647648#define HTT_RX_MD_CTRL_FILTER_FLASG2 (HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \649| HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \650| HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BA)651652#define HTT_RX_MO_CTRL_FILTER_FLASG2 (HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \653| HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \654| HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BA)655656#define HTT_RX_FP_CTRL_FILTER_FLASG3 (HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \657| HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \658| HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \659| HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \660| HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \661| HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK)662663#define HTT_RX_MD_CTRL_FILTER_FLASG3 (HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \664| HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \665| HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \666| HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \667| HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \668| HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK)669670#define HTT_RX_MO_CTRL_FILTER_FLASG3 (HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \671| HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \672| HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \673| HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \674| HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \675| HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK)676677#define HTT_RX_FP_DATA_FILTER_FLASG3 (HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_MCAST \678| HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_UCAST \679| HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA)680681#define HTT_RX_MD_DATA_FILTER_FLASG3 (HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_MCAST \682| HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_UCAST \683| HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA)684685#define HTT_RX_MO_DATA_FILTER_FLASG3 (HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_MCAST \686| HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_UCAST \687| HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA)688689#define HTT_RX_MON_FP_MGMT_FILTER_FLAGS0 \690(HTT_RX_FP_MGMT_FILTER_FLAGS0 | \691HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7)692693#define HTT_RX_MON_MO_MGMT_FILTER_FLAGS0 \694(HTT_RX_MO_MGMT_FILTER_FLAGS0 | \695HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7)696697#define HTT_RX_MON_FP_MGMT_FILTER_FLAGS1 \698(HTT_RX_FP_MGMT_FILTER_FLAGS1 | \699HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15)700701#define HTT_RX_MON_MO_MGMT_FILTER_FLAGS1 \702(HTT_RX_MO_MGMT_FILTER_FLAGS1 | \703HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15)704705#define HTT_RX_MON_FP_CTRL_FILTER_FLASG2 \706(HTT_RX_FP_CTRL_FILTER_FLASG2 | \707HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 | \708HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 | \709HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER | \710HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 | \711HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL | \712HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP | \713HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT)714715#define HTT_RX_MON_MO_CTRL_FILTER_FLASG2 \716(HTT_RX_MO_CTRL_FILTER_FLASG2 | \717HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 | \718HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 | \719HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER | \720HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 | \721HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL | \722HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP | \723HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT)724725#define HTT_RX_MON_FP_CTRL_FILTER_FLASG3 HTT_RX_FP_CTRL_FILTER_FLASG3726727#define HTT_RX_MON_MO_CTRL_FILTER_FLASG3 HTT_RX_MO_CTRL_FILTER_FLASG3728729#define HTT_RX_MON_FP_DATA_FILTER_FLASG3 HTT_RX_FP_DATA_FILTER_FLASG3730731#define HTT_RX_MON_MO_DATA_FILTER_FLASG3 HTT_RX_MO_DATA_FILTER_FLASG3732733#define HTT_RX_MON_FILTER_TLV_FLAGS \734(HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \735HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \736HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \737HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS | \738HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT | \739HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE)740741#define HTT_RX_MON_FILTER_TLV_FLAGS_MON_STATUS_RING \742(HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \743HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \744HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \745HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS | \746HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT | \747HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE)748749#define HTT_RX_MON_FILTER_TLV_FLAGS_MON_BUF_RING \750(HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \751HTT_RX_FILTER_TLV_FLAGS_MSDU_START | \752HTT_RX_FILTER_TLV_FLAGS_RX_PACKET | \753HTT_RX_FILTER_TLV_FLAGS_MSDU_END | \754HTT_RX_FILTER_TLV_FLAGS_MPDU_END | \755HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER | \756HTT_RX_FILTER_TLV_FLAGS_PER_MSDU_HEADER | \757HTT_RX_FILTER_TLV_FLAGS_ATTENTION)758759#define HTT_RX_MON_FILTER_TLV_FLAGS_MON_DEST_RING \760(HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \761HTT_RX_FILTER_TLV_FLAGS_MSDU_START | \762HTT_RX_FILTER_TLV_FLAGS_RX_PACKET | \763HTT_RX_FILTER_TLV_FLAGS_MSDU_END | \764HTT_RX_FILTER_TLV_FLAGS_MPDU_END | \765HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER | \766HTT_RX_FILTER_TLV_FLAGS_PER_MSDU_HEADER | \767HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \768HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \769HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS | \770HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT | \771HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE | \772HTT_RX_FILTER_TLV_FLAGS_PPDU_START_USER_INFO)773774/* msdu start. mpdu end, attention, rx hdr tlv's are not subscribed */775#define HTT_RX_TLV_FLAGS_RXDMA_RING \776(HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \777HTT_RX_FILTER_TLV_FLAGS_RX_PACKET | \778HTT_RX_FILTER_TLV_FLAGS_MSDU_END)779780#define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_MSG_TYPE GENMASK(7, 0)781#define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID GENMASK(15, 8)782783struct htt_rx_ring_selection_cfg_cmd {784__le32 info0;785__le32 info1;786__le32 pkt_type_en_flags0;787__le32 pkt_type_en_flags1;788__le32 pkt_type_en_flags2;789__le32 pkt_type_en_flags3;790__le32 rx_filter_tlv;791__le32 rx_packet_offset;792__le32 rx_mpdu_offset;793__le32 rx_msdu_offset;794__le32 rx_attn_offset;795__le32 info2;796__le32 reserved[2];797__le32 rx_mpdu_start_end_mask;798__le32 rx_msdu_end_word_mask;799__le32 info3;800} __packed;801802#define HTT_RX_RING_TLV_DROP_THRESHOLD_VALUE 32803#define HTT_RX_RING_DEFAULT_DMA_LENGTH 0x7804#define HTT_RX_RING_PKT_TLV_OFFSET 0x1805806struct htt_rx_ring_tlv_filter {807u32 rx_filter; /* see htt_rx_filter_tlv_flags */808u32 pkt_filter_flags0; /* MGMT */809u32 pkt_filter_flags1; /* MGMT */810u32 pkt_filter_flags2; /* CTRL */811u32 pkt_filter_flags3; /* DATA */812bool offset_valid;813u16 rx_packet_offset;814u16 rx_header_offset;815u16 rx_mpdu_end_offset;816u16 rx_mpdu_start_offset;817u16 rx_msdu_end_offset;818u16 rx_msdu_start_offset;819u16 rx_attn_offset;820u16 rx_mpdu_start_wmask;821u16 rx_mpdu_end_wmask;822u32 rx_msdu_end_wmask;823u32 conf_len_ctrl;824u32 conf_len_mgmt;825u32 conf_len_data;826u16 rx_drop_threshold;827bool enable_log_mgmt_type;828bool enable_log_ctrl_type;829bool enable_log_data_type;830bool enable_rx_tlv_offset;831u16 rx_tlv_offset;832bool drop_threshold_valid;833bool rxmon_disable;834};835836#define HTT_STATS_FRAME_CTRL_TYPE_MGMT 0x0837#define HTT_STATS_FRAME_CTRL_TYPE_CTRL 0x1838#define HTT_STATS_FRAME_CTRL_TYPE_DATA 0x2839#define HTT_STATS_FRAME_CTRL_TYPE_RESV 0x3840841#define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_MSG_TYPE GENMASK(7, 0)842#define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID GENMASK(15, 8)843#define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_RING_ID GENMASK(23, 16)844#define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_SS BIT(24)845#define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_PS BIT(25)846847#define HTT_TX_RING_SELECTION_CFG_CMD_INFO1_RING_BUFF_SIZE GENMASK(15, 0)848#define HTT_TX_RING_SELECTION_CFG_CMD_INFO1_PKT_TYPE GENMASK(18, 16)849#define HTT_TX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_MGMT GENMASK(21, 19)850#define HTT_TX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_CTRL GENMASK(24, 22)851#define HTT_TX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_DATA GENMASK(27, 25)852853#define HTT_TX_RING_SELECTION_CFG_CMD_INFO2_PKT_TYPE_EN_FLAG GENMASK(2, 0)854855struct htt_tx_ring_selection_cfg_cmd {856__le32 info0;857__le32 info1;858__le32 info2;859__le32 tlv_filter_mask_in0;860__le32 tlv_filter_mask_in1;861__le32 tlv_filter_mask_in2;862__le32 tlv_filter_mask_in3;863__le32 reserved[3];864} __packed;865866#define HTT_TX_RING_TLV_FILTER_MGMT_DMA_LEN GENMASK(3, 0)867#define HTT_TX_RING_TLV_FILTER_CTRL_DMA_LEN GENMASK(7, 4)868#define HTT_TX_RING_TLV_FILTER_DATA_DMA_LEN GENMASK(11, 8)869870#define HTT_TX_MON_FILTER_HYBRID_MODE \871(HTT_TX_FILTER_TLV_FLAGS0_RESPONSE_START_STATUS | \872HTT_TX_FILTER_TLV_FLAGS0_RESPONSE_END_STATUS | \873HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START | \874HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_END | \875HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START_PPDU | \876HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_USER_PPDU | \877HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_ACK_OR_BA | \878HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_1K_BA | \879HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START_PROT | \880HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_PROT | \881HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_USER_RESPONSE | \882HTT_TX_FILTER_TLV_FLAGS0_RECEIVED_RESPONSE_INFO | \883HTT_TX_FILTER_TLV_FLAGS0_RECEIVED_RESPONSE_INFO_PART2)884885struct htt_tx_ring_tlv_filter {886u32 tx_mon_downstream_tlv_flags;887u32 tx_mon_upstream_tlv_flags0;888u32 tx_mon_upstream_tlv_flags1;889u32 tx_mon_upstream_tlv_flags2;890bool tx_mon_mgmt_filter;891bool tx_mon_data_filter;892bool tx_mon_ctrl_filter;893u16 tx_mon_pkt_dma_len;894} __packed;895896enum htt_tx_mon_upstream_tlv_flags0 {897HTT_TX_FILTER_TLV_FLAGS0_RESPONSE_START_STATUS = BIT(1),898HTT_TX_FILTER_TLV_FLAGS0_RESPONSE_END_STATUS = BIT(2),899HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START = BIT(3),900HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_END = BIT(4),901HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START_PPDU = BIT(5),902HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_USER_PPDU = BIT(6),903HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_ACK_OR_BA = BIT(7),904HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_1K_BA = BIT(8),905HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START_PROT = BIT(9),906HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_PROT = BIT(10),907HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_USER_RESPONSE = BIT(11),908HTT_TX_FILTER_TLV_FLAGS0_RX_FRAME_BITMAP_ACK = BIT(12),909HTT_TX_FILTER_TLV_FLAGS0_RX_FRAME_1K_BITMAP_ACK = BIT(13),910HTT_TX_FILTER_TLV_FLAGS0_COEX_TX_STATUS = BIT(14),911HTT_TX_FILTER_TLV_FLAGS0_RECEIVED_RESPONSE_INFO = BIT(15),912HTT_TX_FILTER_TLV_FLAGS0_RECEIVED_RESPONSE_INFO_PART2 = BIT(16),913};914915#define HTT_TX_FILTER_TLV_FLAGS2_TXPCU_PHYTX_OTHER_TRANSMIT_INFO32 BIT(11)916917/* HTT message target->host */918919enum htt_t2h_msg_type {920HTT_T2H_MSG_TYPE_VERSION_CONF,921HTT_T2H_MSG_TYPE_PEER_MAP = 0x3,922HTT_T2H_MSG_TYPE_PEER_UNMAP = 0x4,923HTT_T2H_MSG_TYPE_RX_ADDBA = 0x5,924HTT_T2H_MSG_TYPE_PKTLOG = 0x8,925HTT_T2H_MSG_TYPE_SEC_IND = 0xb,926HTT_T2H_MSG_TYPE_PEER_MAP2 = 0x1e,927HTT_T2H_MSG_TYPE_PEER_UNMAP2 = 0x1f,928HTT_T2H_MSG_TYPE_PPDU_STATS_IND = 0x1d,929HTT_T2H_MSG_TYPE_EXT_STATS_CONF = 0x1c,930HTT_T2H_MSG_TYPE_BKPRESSURE_EVENT_IND = 0x24,931HTT_T2H_MSG_TYPE_MLO_TIMESTAMP_OFFSET_IND = 0x28,932HTT_T2H_MSG_TYPE_PEER_MAP3 = 0x2b,933HTT_T2H_MSG_TYPE_VDEV_TXRX_STATS_PERIODIC_IND = 0x2c,934};935936#define HTT_TARGET_VERSION_MAJOR 3937938#define HTT_T2H_MSG_TYPE GENMASK(7, 0)939#define HTT_T2H_VERSION_CONF_MINOR GENMASK(15, 8)940#define HTT_T2H_VERSION_CONF_MAJOR GENMASK(23, 16)941942struct htt_t2h_version_conf_msg {943__le32 version;944} __packed;945946#define HTT_T2H_PEER_MAP_INFO_VDEV_ID GENMASK(15, 8)947#define HTT_T2H_PEER_MAP_INFO_PEER_ID GENMASK(31, 16)948#define HTT_T2H_PEER_MAP_INFO1_MAC_ADDR_H16 GENMASK(15, 0)949#define HTT_T2H_PEER_MAP_INFO1_HW_PEER_ID GENMASK(31, 16)950#define HTT_T2H_PEER_MAP_INFO2_AST_HASH_VAL GENMASK(15, 0)951#define HTT_T2H_PEER_MAP3_INFO2_HW_PEER_ID GENMASK(15, 0)952#define HTT_T2H_PEER_MAP3_INFO2_AST_HASH_VAL GENMASK(31, 16)953#define HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_M BIT(16)954#define HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_S 16955956struct htt_t2h_peer_map_event {957__le32 info;958__le32 mac_addr_l32;959__le32 info1;960__le32 info2;961} __packed;962963#define HTT_T2H_PEER_UNMAP_INFO_VDEV_ID HTT_T2H_PEER_MAP_INFO_VDEV_ID964#define HTT_T2H_PEER_UNMAP_INFO_PEER_ID HTT_T2H_PEER_MAP_INFO_PEER_ID965#define HTT_T2H_PEER_UNMAP_INFO1_MAC_ADDR_H16 \966HTT_T2H_PEER_MAP_INFO1_MAC_ADDR_H16967#define HTT_T2H_PEER_MAP_INFO1_NEXT_HOP_M HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_M968#define HTT_T2H_PEER_MAP_INFO1_NEXT_HOP_S HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_S969970struct htt_t2h_peer_unmap_event {971__le32 info;972__le32 mac_addr_l32;973__le32 info1;974} __packed;975976struct htt_resp_msg {977union {978struct htt_t2h_version_conf_msg version_msg;979struct htt_t2h_peer_map_event peer_map_ev;980struct htt_t2h_peer_unmap_event peer_unmap_ev;981};982} __packed;983984#define HTT_VDEV_GET_STATS_U64(msg_l32, msg_u32)\985(((u64)__le32_to_cpu(msg_u32) << 32) | (__le32_to_cpu(msg_l32)))986#define HTT_T2H_VDEV_STATS_PERIODIC_MSG_TYPE GENMASK(7, 0)987#define HTT_T2H_VDEV_STATS_PERIODIC_PDEV_ID GENMASK(15, 8)988#define HTT_T2H_VDEV_STATS_PERIODIC_NUM_VDEV GENMASK(23, 16)989#define HTT_T2H_VDEV_STATS_PERIODIC_PAYLOAD_BYTES GENMASK(15, 0)990#define HTT_VDEV_TXRX_STATS_COMMON_TLV 0991#define HTT_VDEV_TXRX_STATS_HW_STATS_TLV 1992993struct htt_t2h_vdev_txrx_stats_ind {994__le32 vdev_id;995__le32 rx_msdu_byte_cnt_lo;996__le32 rx_msdu_byte_cnt_hi;997__le32 rx_msdu_cnt_lo;998__le32 rx_msdu_cnt_hi;999__le32 tx_msdu_byte_cnt_lo;1000__le32 tx_msdu_byte_cnt_hi;1001__le32 tx_msdu_cnt_lo;1002__le32 tx_msdu_cnt_hi;1003__le32 tx_retry_cnt_lo;1004__le32 tx_retry_cnt_hi;1005__le32 tx_retry_byte_cnt_lo;1006__le32 tx_retry_byte_cnt_hi;1007__le32 tx_drop_cnt_lo;1008__le32 tx_drop_cnt_hi;1009__le32 tx_drop_byte_cnt_lo;1010__le32 tx_drop_byte_cnt_hi;1011__le32 msdu_ttl_cnt_lo;1012__le32 msdu_ttl_cnt_hi;1013__le32 msdu_ttl_byte_cnt_lo;1014__le32 msdu_ttl_byte_cnt_hi;1015} __packed;10161017struct htt_t2h_vdev_common_stats_tlv {1018__le32 soc_drop_count_lo;1019__le32 soc_drop_count_hi;1020} __packed;10211022/* ppdu stats1023*1024* @details1025* The following field definitions describe the format of the HTT target1026* to host ppdu stats indication message.1027*1028*1029* |31 16|15 12|11 10|9 8|7 0 |1030* |----------------------------------------------------------------------|1031* | payload_size | rsvd |pdev_id|mac_id | msg type |1032* |----------------------------------------------------------------------|1033* | ppdu_id |1034* |----------------------------------------------------------------------|1035* | Timestamp in us |1036* |----------------------------------------------------------------------|1037* | reserved |1038* |----------------------------------------------------------------------|1039* | type-specific stats info |1040* | (see htt_ppdu_stats.h) |1041* |----------------------------------------------------------------------|1042* Header fields:1043* - MSG_TYPE1044* Bits 7:01045* Purpose: Identifies this is a PPDU STATS indication1046* message.1047* Value: 0x1d1048* - mac_id1049* Bits 9:81050* Purpose: mac_id of this ppdu_id1051* Value: 0-31052* - pdev_id1053* Bits 11:101054* Purpose: pdev_id of this ppdu_id1055* Value: 0-31056* 0 (for rings at SOC level),1057* 1/2/3 PDEV -> 0/1/21058* - payload_size1059* Bits 31:161060* Purpose: total tlv size1061* Value: payload_size in bytes1062*/10631064#define HTT_T2H_PPDU_STATS_INFO_PDEV_ID GENMASK(11, 10)1065#define HTT_T2H_PPDU_STATS_INFO_PAYLOAD_SIZE GENMASK(31, 16)10661067struct ath12k_htt_ppdu_stats_msg {1068__le32 info;1069__le32 ppdu_id;1070__le32 timestamp;1071__le32 rsvd;1072u8 data[];1073} __packed;10741075struct htt_tlv {1076__le32 header;1077u8 value[];1078} __packed;10791080#define HTT_TLV_TAG GENMASK(11, 0)1081#define HTT_TLV_LEN GENMASK(23, 12)10821083enum HTT_PPDU_STATS_BW {1084HTT_PPDU_STATS_BANDWIDTH_5MHZ = 0,1085HTT_PPDU_STATS_BANDWIDTH_10MHZ = 1,1086HTT_PPDU_STATS_BANDWIDTH_20MHZ = 2,1087HTT_PPDU_STATS_BANDWIDTH_40MHZ = 3,1088HTT_PPDU_STATS_BANDWIDTH_80MHZ = 4,1089HTT_PPDU_STATS_BANDWIDTH_160MHZ = 5, /* includes 80+80 */1090HTT_PPDU_STATS_BANDWIDTH_DYN = 6,1091};10921093#define HTT_PPDU_STATS_CMN_FLAGS_FRAME_TYPE_M GENMASK(7, 0)1094#define HTT_PPDU_STATS_CMN_FLAGS_QUEUE_TYPE_M GENMASK(15, 8)1095/* bw - HTT_PPDU_STATS_BW */1096#define HTT_PPDU_STATS_CMN_FLAGS_BW_M GENMASK(19, 16)10971098struct htt_ppdu_stats_common {1099__le32 ppdu_id;1100__le16 sched_cmdid;1101u8 ring_id;1102u8 num_users;1103__le32 flags; /* %HTT_PPDU_STATS_COMMON_FLAGS_*/1104__le32 chain_mask;1105__le32 fes_duration_us; /* frame exchange sequence */1106__le32 ppdu_sch_eval_start_tstmp_us;1107__le32 ppdu_sch_end_tstmp_us;1108__le32 ppdu_start_tstmp_us;1109/* BIT [15 : 0] - phy mode (WLAN_PHY_MODE) with which ppdu was transmitted1110* BIT [31 : 16] - bandwidth (in MHz) with which ppdu was transmitted1111*/1112__le16 phy_mode;1113__le16 bw_mhz;1114} __packed;11151116enum htt_ppdu_stats_gi {1117HTT_PPDU_STATS_SGI_0_8_US,1118HTT_PPDU_STATS_SGI_0_4_US,1119HTT_PPDU_STATS_SGI_1_6_US,1120HTT_PPDU_STATS_SGI_3_2_US,1121};11221123#define HTT_PPDU_STATS_USER_RATE_INFO0_USER_POS_M GENMASK(3, 0)1124#define HTT_PPDU_STATS_USER_RATE_INFO0_MU_GROUP_ID_M GENMASK(11, 4)11251126enum HTT_PPDU_STATS_PPDU_TYPE {1127HTT_PPDU_STATS_PPDU_TYPE_SU,1128HTT_PPDU_STATS_PPDU_TYPE_MU_MIMO,1129HTT_PPDU_STATS_PPDU_TYPE_MU_OFDMA,1130HTT_PPDU_STATS_PPDU_TYPE_MU_MIMO_OFDMA,1131HTT_PPDU_STATS_PPDU_TYPE_UL_TRIG,1132HTT_PPDU_STATS_PPDU_TYPE_BURST_BCN,1133HTT_PPDU_STATS_PPDU_TYPE_UL_BSR_RESP,1134HTT_PPDU_STATS_PPDU_TYPE_UL_BSR_TRIG,1135HTT_PPDU_STATS_PPDU_TYPE_UL_RESP,1136HTT_PPDU_STATS_PPDU_TYPE_MAX1137};11381139#define HTT_PPDU_STATS_USER_RATE_INFO1_RESP_TYPE_VALD_M BIT(0)1140#define HTT_PPDU_STATS_USER_RATE_INFO1_PPDU_TYPE_M GENMASK(5, 1)11411142#define HTT_PPDU_STATS_USER_RATE_FLAGS_LTF_SIZE_M GENMASK(1, 0)1143#define HTT_PPDU_STATS_USER_RATE_FLAGS_STBC_M BIT(2)1144#define HTT_PPDU_STATS_USER_RATE_FLAGS_HE_RE_M BIT(3)1145#define HTT_PPDU_STATS_USER_RATE_FLAGS_TXBF_M GENMASK(7, 4)1146#define HTT_PPDU_STATS_USER_RATE_FLAGS_BW_M GENMASK(11, 8)1147#define HTT_PPDU_STATS_USER_RATE_FLAGS_NSS_M GENMASK(15, 12)1148#define HTT_PPDU_STATS_USER_RATE_FLAGS_MCS_M GENMASK(19, 16)1149#define HTT_PPDU_STATS_USER_RATE_FLAGS_PREAMBLE_M GENMASK(23, 20)1150#define HTT_PPDU_STATS_USER_RATE_FLAGS_GI_M GENMASK(27, 24)1151#define HTT_PPDU_STATS_USER_RATE_FLAGS_DCM_M BIT(28)1152#define HTT_PPDU_STATS_USER_RATE_FLAGS_LDPC_M BIT(29)11531154#define HTT_USR_RATE_PPDU_TYPE(_val) \1155le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_INFO1_PPDU_TYPE_M)1156#define HTT_USR_RATE_PREAMBLE(_val) \1157le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_PREAMBLE_M)1158#define HTT_USR_RATE_BW(_val) \1159le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_BW_M)1160#define HTT_USR_RATE_NSS(_val) \1161le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_NSS_M)1162#define HTT_USR_RATE_MCS(_val) \1163le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_MCS_M)1164#define HTT_USR_RATE_GI(_val) \1165le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_GI_M)1166#define HTT_USR_RATE_DCM(_val) \1167le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_DCM_M)11681169#define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_LTF_SIZE_M GENMASK(1, 0)1170#define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_STBC_M BIT(2)1171#define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_HE_RE_M BIT(3)1172#define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_TXBF_M GENMASK(7, 4)1173#define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_BW_M GENMASK(11, 8)1174#define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_NSS_M GENMASK(15, 12)1175#define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_MCS_M GENMASK(19, 16)1176#define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_PREAMBLE_M GENMASK(23, 20)1177#define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_GI_M GENMASK(27, 24)1178#define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_DCM_M BIT(28)1179#define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_LDPC_M BIT(29)11801181struct htt_ppdu_stats_user_rate {1182u8 tid_num;1183u8 reserved0;1184__le16 sw_peer_id;1185__le32 info0; /* %HTT_PPDU_STATS_USER_RATE_INFO0_*/1186__le16 ru_end;1187__le16 ru_start;1188__le16 resp_ru_end;1189__le16 resp_ru_start;1190__le32 info1; /* %HTT_PPDU_STATS_USER_RATE_INFO1_ */1191__le32 rate_flags; /* %HTT_PPDU_STATS_USER_RATE_FLAGS_ */1192/* Note: resp_rate_info is only valid for if resp_type is UL */1193__le32 resp_rate_flags; /* %HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_ */1194} __packed;11951196#define HTT_PPDU_STATS_TX_INFO_FLAGS_RATECODE_M GENMASK(7, 0)1197#define HTT_PPDU_STATS_TX_INFO_FLAGS_IS_AMPDU_M BIT(8)1198#define HTT_PPDU_STATS_TX_INFO_FLAGS_BA_ACK_FAILED_M GENMASK(10, 9)1199#define HTT_PPDU_STATS_TX_INFO_FLAGS_BW_M GENMASK(13, 11)1200#define HTT_PPDU_STATS_TX_INFO_FLAGS_SGI_M BIT(14)1201#define HTT_PPDU_STATS_TX_INFO_FLAGS_PEERID_M GENMASK(31, 16)12021203#define HTT_TX_INFO_IS_AMSDU(_flags) \1204u32_get_bits(_flags, HTT_PPDU_STATS_TX_INFO_FLAGS_IS_AMPDU_M)1205#define HTT_TX_INFO_BA_ACK_FAILED(_flags) \1206u32_get_bits(_flags, HTT_PPDU_STATS_TX_INFO_FLAGS_BA_ACK_FAILED_M)1207#define HTT_TX_INFO_RATECODE(_flags) \1208u32_get_bits(_flags, HTT_PPDU_STATS_TX_INFO_FLAGS_RATECODE_M)1209#define HTT_TX_INFO_PEERID(_flags) \1210u32_get_bits(_flags, HTT_PPDU_STATS_TX_INFO_FLAGS_PEERID_M)12111212enum htt_ppdu_stats_usr_compln_status {1213HTT_PPDU_STATS_USER_STATUS_OK,1214HTT_PPDU_STATS_USER_STATUS_FILTERED,1215HTT_PPDU_STATS_USER_STATUS_RESP_TIMEOUT,1216HTT_PPDU_STATS_USER_STATUS_RESP_MISMATCH,1217HTT_PPDU_STATS_USER_STATUS_ABORT,1218};12191220#define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_LONG_RETRY_M GENMASK(3, 0)1221#define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_SHORT_RETRY_M GENMASK(7, 4)1222#define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_IS_AMPDU_M BIT(8)1223#define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_RESP_TYPE_M GENMASK(12, 9)12241225#define HTT_USR_CMPLTN_IS_AMPDU(_val) \1226le32_get_bits(_val, HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_IS_AMPDU_M)1227#define HTT_USR_CMPLTN_LONG_RETRY(_val) \1228le32_get_bits(_val, HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_LONG_RETRY_M)1229#define HTT_USR_CMPLTN_SHORT_RETRY(_val) \1230le32_get_bits(_val, HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_SHORT_RETRY_M)12311232struct htt_ppdu_stats_usr_cmpltn_cmn {1233u8 status;1234u8 tid_num;1235__le16 sw_peer_id;1236/* RSSI value of last ack packet (units = dB above noise floor) */1237__le32 ack_rssi;1238__le16 mpdu_tried;1239__le16 mpdu_success;1240__le32 flags; /* %HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_LONG_RETRIES*/1241} __packed;12421243#define HTT_PPDU_STATS_ACK_BA_INFO_NUM_MPDU_M GENMASK(8, 0)1244#define HTT_PPDU_STATS_ACK_BA_INFO_NUM_MSDU_M GENMASK(24, 9)1245#define HTT_PPDU_STATS_ACK_BA_INFO_TID_NUM GENMASK(31, 25)12461247#define HTT_PPDU_STATS_NON_QOS_TID 1612481249struct htt_ppdu_stats_usr_cmpltn_ack_ba_status {1250__le32 ppdu_id;1251__le16 sw_peer_id;1252__le16 reserved0;1253__le32 info; /* %HTT_PPDU_STATS_USR_CMPLTN_CMN_INFO_ */1254__le16 current_seq;1255__le16 start_seq;1256__le32 success_bytes;1257} __packed;12581259struct htt_ppdu_user_stats {1260u16 peer_id;1261u16 delay_ba;1262u32 tlv_flags;1263bool is_valid_peer_id;1264struct htt_ppdu_stats_user_rate rate;1265struct htt_ppdu_stats_usr_cmpltn_cmn cmpltn_cmn;1266struct htt_ppdu_stats_usr_cmpltn_ack_ba_status ack_ba;1267};12681269#define HTT_PPDU_STATS_MAX_USERS 81270#define HTT_PPDU_DESC_MAX_DEPTH 1612711272struct htt_ppdu_stats {1273struct htt_ppdu_stats_common common;1274struct htt_ppdu_user_stats user_stats[HTT_PPDU_STATS_MAX_USERS];1275};12761277struct htt_ppdu_stats_info {1278u32 tlv_bitmap;1279u32 ppdu_id;1280u32 frame_type;1281u32 frame_ctrl;1282u32 delay_ba;1283u32 bar_num_users;1284struct htt_ppdu_stats ppdu_stats;1285struct list_head list;1286};12871288/* @brief target -> host MLO offset indiciation message1289*1290* @details1291* The following field definitions describe the format of the HTT target1292* to host mlo offset indication message.1293*1294*1295* |31 29|28 |26|25 22|21 16|15 13|12 10 |9 8|7 0|1296* |---------------------------------------------------------------------|1297* | rsvd1 | mac_freq |chip_id |pdev_id|msgtype|1298* |---------------------------------------------------------------------|1299* | sync_timestamp_lo_us |1300* |---------------------------------------------------------------------|1301* | sync_timestamp_hi_us |1302* |---------------------------------------------------------------------|1303* | mlo_offset_lo |1304* |---------------------------------------------------------------------|1305* | mlo_offset_hi |1306* |---------------------------------------------------------------------|1307* | mlo_offset_clcks |1308* |---------------------------------------------------------------------|1309* | rsvd2 | mlo_comp_clks |mlo_comp_us |1310* |---------------------------------------------------------------------|1311* | rsvd3 |mlo_comp_timer |1312* |---------------------------------------------------------------------|1313* Header fields1314* - MSG_TYPE1315* Bits 7:01316* Purpose: Identifies this is a MLO offset indication msg1317* - PDEV_ID1318* Bits 9:81319* Purpose: Pdev of this MLO offset1320* - CHIP_ID1321* Bits 12:101322* Purpose: chip_id of this MLO offset1323* - MAC_FREQ1324* Bits 28:131325* - SYNC_TIMESTAMP_LO_US1326* Purpose: clock frequency of the mac HW block in MHz1327* Bits: 31:01328* Purpose: lower 32 bits of the WLAN global time stamp at which1329* last sync interrupt was received1330* - SYNC_TIMESTAMP_HI_US1331* Bits: 31:01332* Purpose: upper 32 bits of WLAN global time stamp at which1333* last sync interrupt was received1334* - MLO_OFFSET_LO1335* Bits: 31:01336* Purpose: lower 32 bits of the MLO offset in us1337* - MLO_OFFSET_HI1338* Bits: 31:01339* Purpose: upper 32 bits of the MLO offset in us1340* - MLO_COMP_US1341* Bits: 15:01342* Purpose: MLO time stamp compensation applied in us1343* - MLO_COMP_CLCKS1344* Bits: 25:161345* Purpose: MLO time stamp compensation applied in clock ticks1346* - MLO_COMP_TIMER1347* Bits: 21:01348* Purpose: Periodic timer at which compensation is applied1349*/13501351#define HTT_T2H_MLO_OFFSET_INFO_MSG_TYPE GENMASK(7, 0)1352#define HTT_T2H_MLO_OFFSET_INFO_PDEV_ID GENMASK(9, 8)13531354struct ath12k_htt_mlo_offset_msg {1355__le32 info;1356__le32 sync_timestamp_lo_us;1357__le32 sync_timestamp_hi_us;1358__le32 mlo_offset_hi;1359__le32 mlo_offset_lo;1360__le32 mlo_offset_clks;1361__le32 mlo_comp_clks;1362__le32 mlo_comp_timer;1363} __packed;13641365/* @brief host -> target FW extended statistics retrieve1366*1367* @details1368* The following field definitions describe the format of the HTT host1369* to target FW extended stats retrieve message.1370* The message specifies the type of stats the host wants to retrieve.1371*1372* |31 24|23 16|15 8|7 0|1373* |-----------------------------------------------------------|1374* | reserved | stats type | pdev_mask | msg type |1375* |-----------------------------------------------------------|1376* | config param [0] |1377* |-----------------------------------------------------------|1378* | config param [1] |1379* |-----------------------------------------------------------|1380* | config param [2] |1381* |-----------------------------------------------------------|1382* | config param [3] |1383* |-----------------------------------------------------------|1384* | reserved |1385* |-----------------------------------------------------------|1386* | cookie LSBs |1387* |-----------------------------------------------------------|1388* | cookie MSBs |1389* |-----------------------------------------------------------|1390* Header fields:1391* - MSG_TYPE1392* Bits 7:01393* Purpose: identifies this is a extended stats upload request message1394* Value: 0x101395* - PDEV_MASK1396* Bits 8:151397* Purpose: identifies the mask of PDEVs to retrieve stats from1398* Value: This is a overloaded field, refer to usage and interpretation of1399* PDEV in interface document.1400* Bit 8 : Reserved for SOC stats1401* Bit 9 - 15 : Indicates PDEV_MASK in DBDC1402* Indicates MACID_MASK in DBS1403* - STATS_TYPE1404* Bits 23:161405* Purpose: identifies which FW statistics to upload1406* Value: Defined by htt_dbg_ext_stats_type (see htt_stats.h)1407* - Reserved1408* Bits 31:241409* - CONFIG_PARAM [0]1410* Bits 31:01411* Purpose: give an opaque configuration value to the specified stats type1412* Value: stats-type specific configuration value1413* Refer to htt_stats.h for interpretation for each stats sub_type1414* - CONFIG_PARAM [1]1415* Bits 31:01416* Purpose: give an opaque configuration value to the specified stats type1417* Value: stats-type specific configuration value1418* Refer to htt_stats.h for interpretation for each stats sub_type1419* - CONFIG_PARAM [2]1420* Bits 31:01421* Purpose: give an opaque configuration value to the specified stats type1422* Value: stats-type specific configuration value1423* Refer to htt_stats.h for interpretation for each stats sub_type1424* - CONFIG_PARAM [3]1425* Bits 31:01426* Purpose: give an opaque configuration value to the specified stats type1427* Value: stats-type specific configuration value1428* Refer to htt_stats.h for interpretation for each stats sub_type1429* - Reserved [31:0] for future use.1430* - COOKIE_LSBS1431* Bits 31:01432* Purpose: Provide a mechanism to match a target->host stats confirmation1433* message with its preceding host->target stats request message.1434* Value: LSBs of the opaque cookie specified by the host-side requestor1435* - COOKIE_MSBS1436* Bits 31:01437* Purpose: Provide a mechanism to match a target->host stats confirmation1438* message with its preceding host->target stats request message.1439* Value: MSBs of the opaque cookie specified by the host-side requestor1440*/14411442struct htt_ext_stats_cfg_hdr {1443u8 msg_type;1444u8 pdev_mask;1445u8 stats_type;1446u8 reserved;1447} __packed;14481449struct htt_ext_stats_cfg_cmd {1450struct htt_ext_stats_cfg_hdr hdr;1451__le32 cfg_param0;1452__le32 cfg_param1;1453__le32 cfg_param2;1454__le32 cfg_param3;1455__le32 reserved;1456__le32 cookie_lsb;1457__le32 cookie_msb;1458} __packed;14591460/* htt stats config default params */1461#define HTT_STAT_DEFAULT_RESET_START_OFFSET 01462#define HTT_STAT_DEFAULT_CFG0_ALL_HWQS 0xffffffff1463#define HTT_STAT_DEFAULT_CFG0_ALL_TXQS 0xffffffff1464#define HTT_STAT_DEFAULT_CFG0_ALL_CMDQS 0xffff1465#define HTT_STAT_DEFAULT_CFG0_ALL_RINGS 0xffff1466#define HTT_STAT_DEFAULT_CFG0_ACTIVE_PEERS 0xff1467#define HTT_STAT_DEFAULT_CFG0_CCA_CUMULATIVE 0x001468#define HTT_STAT_DEFAULT_CFG0_ACTIVE_VDEVS 0x0014691470/* HTT_DBG_EXT_STATS_PEER_INFO1471* PARAMS:1472* @config_param0:1473* [Bit0] - [0] for sw_peer_id, [1] for mac_addr based request1474* [Bit15 : Bit 1] htt_peer_stats_req_mode_t1475* [Bit31 : Bit16] sw_peer_id1476* @config_param1:1477* peer_stats_req_type_mask:32 (enum htt_peer_stats_tlv_enum)1478* 0 bit htt_peer_stats_cmn_tlv1479* 1 bit htt_peer_details_tlv1480* 2 bit htt_tx_peer_rate_stats_tlv1481* 3 bit htt_rx_peer_rate_stats_tlv1482* 4 bit htt_tx_tid_stats_tlv/htt_tx_tid_stats_v1_tlv1483* 5 bit htt_rx_tid_stats_tlv1484* 6 bit htt_msdu_flow_stats_tlv1485* @config_param2: [Bit31 : Bit0] mac_addr31to01486* @config_param3: [Bit15 : Bit0] mac_addr47to321487* [Bit31 : Bit16] reserved1488*/1489#define HTT_STAT_PEER_INFO_MAC_ADDR BIT(0)1490#define HTT_STAT_DEFAULT_PEER_REQ_TYPE 0x7f14911492/* Used to set different configs to the specified stats type.*/1493struct htt_ext_stats_cfg_params {1494u32 cfg0;1495u32 cfg1;1496u32 cfg2;1497u32 cfg3;1498};14991500enum vdev_stats_offload_timer_duration {1501ATH12K_STATS_TIMER_DUR_500MS = 1,1502ATH12K_STATS_TIMER_DUR_1SEC = 2,1503ATH12K_STATS_TIMER_DUR_2SEC = 3,1504};15051506#define ATH12K_HTT_MAC_ADDR_L32_0 GENMASK(7, 0)1507#define ATH12K_HTT_MAC_ADDR_L32_1 GENMASK(15, 8)1508#define ATH12K_HTT_MAC_ADDR_L32_2 GENMASK(23, 16)1509#define ATH12K_HTT_MAC_ADDR_L32_3 GENMASK(31, 24)1510#define ATH12K_HTT_MAC_ADDR_H16_0 GENMASK(7, 0)1511#define ATH12K_HTT_MAC_ADDR_H16_1 GENMASK(15, 8)15121513struct htt_mac_addr {1514__le32 mac_addr_l32;1515__le32 mac_addr_h16;1516} __packed;15171518int ath12k_dp_htt_connect(struct ath12k_dp *dp);1519int ath12k_dp_tx_htt_srng_setup(struct ath12k_base *ab, u32 ring_id,1520int mac_id, enum hal_ring_type ring_type);15211522void ath12k_dp_htt_htc_t2h_msg_handler(struct ath12k_base *ab,1523struct sk_buff *skb);1524int ath12k_dp_htt_tlv_iter(struct ath12k_base *ab, const void *ptr, size_t len,1525int (*iter)(struct ath12k_base *ar, u16 tag, u16 len,1526const void *ptr, void *data),1527void *data);1528int ath12k_dp_tx_htt_h2t_ver_req_msg(struct ath12k_base *ab);1529int ath12k_dp_tx_htt_h2t_ppdu_stats_req(struct ath12k *ar, u32 mask);1530int1531ath12k_dp_tx_htt_h2t_ext_stats_req(struct ath12k *ar, u8 type,1532struct htt_ext_stats_cfg_params *cfg_params,1533u64 cookie);1534int ath12k_dp_tx_htt_rx_monitor_mode_ring_config(struct ath12k *ar, bool reset);15351536int ath12k_dp_tx_htt_rx_filter_setup(struct ath12k_base *ab, u32 ring_id,1537int mac_id, enum hal_ring_type ring_type,1538int rx_buf_size,1539struct htt_rx_ring_tlv_filter *tlv_filter);1540int ath12k_dp_tx_htt_tx_filter_setup(struct ath12k_base *ab, u32 ring_id,1541int mac_id, enum hal_ring_type ring_type,1542int tx_buf_size,1543struct htt_tx_ring_tlv_filter *htt_tlv_filter);1544int ath12k_dp_tx_htt_monitor_mode_ring_config(struct ath12k *ar, bool reset);1545#endif154615471548