Loading fw/htt.h +123 −45 Original line number Diff line number Diff line Loading @@ -206,9 +206,10 @@ * 3.82 Add WIN_SIZE field to HTT_T2H_MSG_TYPE_RX_DELBA msg. * 3.83 Shrink seq_idx field in HTT PPDU ID from 3 bits to 2. * 3.84 Add fisa_control_bits_v2 def. * 3.85 Add HTT_RX_PEER_META_DATA defs. */ #define HTT_CURRENT_VERSION_MAJOR 3 #define HTT_CURRENT_VERSION_MINOR 84 #define HTT_CURRENT_VERSION_MINOR 85 #define HTT_NUM_TX_FRAG_DESC 1024 Loading Loading @@ -251,42 +252,6 @@ */ #define HTT_T2H_MSG_TYPE_RC_UPDATE_IND DEPRECATED_HTT_T2H_MSG_TYPE_RC_UPDATE_IND /* HTT Access Category values */ enum HTT_AC_WMM { /* WMM Access Categories */ HTT_AC_WMM_BE = 0x0, HTT_AC_WMM_BK = 0x1, HTT_AC_WMM_VI = 0x2, HTT_AC_WMM_VO = 0x3, HTT_NUM_AC_WMM = 0x4, /* extension Access Categories */ HTT_AC_EXT_NON_QOS = 0x4, HTT_AC_EXT_UCAST_MGMT = 0x5, HTT_AC_EXT_MCAST_DATA = 0x6, HTT_AC_EXT_MCAST_MGMT = 0x7, }; enum HTT_AC_WMM_MASK { /* WMM Access Categories */ HTT_AC_WMM_BE_MASK = (1 << HTT_AC_WMM_BE), HTT_AC_WMM_BK_MASK = (1 << HTT_AC_WMM_BK), HTT_AC_WMM_VI_MASK = (1 << HTT_AC_WMM_VI), HTT_AC_WMM_VO_MASK = (1 << HTT_AC_WMM_VO), /* extension Access Categories */ HTT_AC_EXT_NON_QOS_MASK = (1 << HTT_AC_EXT_NON_QOS), HTT_AC_EXT_UCAST_MGMT_MASK = (1 << HTT_AC_EXT_UCAST_MGMT), HTT_AC_EXT_MCAST_DATA_MASK = (1 << HTT_AC_EXT_MCAST_DATA), HTT_AC_EXT_MCAST_MGMT_MASK = (1 << HTT_AC_EXT_MCAST_MGMT), }; #define HTT_AC_MASK_WMM \ (HTT_AC_WMM_BE_MASK | HTT_AC_WMM_BK_MASK | \ HTT_AC_WMM_VI_MASK | HTT_AC_WMM_VO_MASK) #define HTT_AC_MASK_EXT \ (HTT_AC_EXT_NON_QOS_MASK | HTT_AC_EXT_UCAST_MGMT_MASK | \ HTT_AC_EXT_MCAST_DATA_MASK | HTT_AC_EXT_MCAST_MGMT_MASK) #define HTT_AC_MASK_ALL (HTT_AC_MASK_WMM | HTT_AC_MASK_EXT) /* * htt_dbg_stats_type - * bit positions for each stats type within a stats type bitmask Loading Loading @@ -12662,14 +12627,6 @@ typedef enum { HTT_PEER_TYPE_ROAMOFFLOAD_TEMP = 128, /* Temporarily created during offload roam */ } HTT_PEER_TYPE; /** 2 word representation of MAC addr */ typedef struct { /** upper 4 bytes of MAC address */ A_UINT32 mac_addr31to0; /** lower 2 bytes of MAC address */ A_UINT32 mac_addr47to32; } htt_mac_addr; /** macro to convert MAC address from char array to HTT word format */ #define HTT_CHAR_ARRAY_TO_MAC_ADDR(c_macaddr, phtt_mac_addr) do { \ (phtt_mac_addr)->mac_addr31to0 = \ Loading Loading @@ -14182,5 +14139,126 @@ PREPACK struct htt_ppdu_id { ((_var) |= ((_val) << HTT_PPDU_ID_SEQ_CMD_TYPE_S)); \ } while (0) /** * @brief target -> RX PEER METADATA V0 format * Host will know the peer metadata version from the wmi_service_ready_ext2 * message from target, and will confirm to the target which peer metadata * version to use in the wmi_init message. * * The following diagram shows the format of the RX PEER METADATA. * * |31 24|23 16|15 8|7 0| * |-----------------------------------------------------------------------| * | Reserved | VDEV ID | PEER ID | * |-----------------------------------------------------------------------| */ PREPACK struct htt_rx_peer_metadata_v0 { A_UINT32 peer_id: 16, vdev_id: 8, reserved1: 8; } POSTPACK; #define HTT_RX_PEER_META_DATA_V0_PEER_ID_S 0 #define HTT_RX_PEER_META_DATA_V0_PEER_ID_M 0x0000ffff #define HTT_RX_PEER_META_DATA_V0_PEER_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V0_PEER_ID_M) >> HTT_RX_PEER_META_DATA_V0_PEER_ID_S) #define HTT_RX_PEER_META_DATA_V0_PEER_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V0_PEER_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V0_PEER_ID_S)); \ } while (0) #define HTT_RX_PEER_META_DATA_V0_VDEV_ID_S 16 #define HTT_RX_PEER_META_DATA_V0_VDEV_ID_M 0x00ff0000 #define HTT_RX_PEER_META_DATA_V0_VDEV_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V0_VDEV_ID_M) >> HTT_RX_PEER_META_DATA_V0_VDEV_ID_S) #define HTT_RX_PEER_META_DATA_V0_VDEV_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V0_VDEV_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V0_VDEV_ID_S)); \ } while (0) /** * @brief target -> RX PEER METADATA V1 format * Host will know the peer metadata version from the wmi_service_ready_ext2 * message from target, and will confirm to the target which peer metadata * version to use in the wmi_init message. * * The following diagram shows the format of the RX PEER METADATA V1 format. * * |31 29|28 26|25 24|23 16|15 14| 13 |12 0| * |-----------------------------------------------------------------------| * |Rsvd2|CHIP ID|LMAC ID| VDEV ID |Rsvd1|ML PEER| SW PEER ID/ML PEER ID| * |-----------------------------------------------------------------------| */ PREPACK struct htt_rx_peer_metadata_v1 { A_UINT32 peer_id: 13, ml_peer_valid: 1, reserved1: 2, vdev_id: 8, lmac_id: 2, chip_id: 3, reserved2: 3; } POSTPACK; #define HTT_RX_PEER_META_DATA_V1_PEER_ID_S 0 #define HTT_RX_PEER_META_DATA_V1_PEER_ID_M 0x00001fff #define HTT_RX_PEER_META_DATA_V1_PEER_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V1_PEER_ID_M) >> HTT_RX_PEER_META_DATA_V1_PEER_ID_S) #define HTT_RX_PEER_META_DATA_V1_PEER_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_PEER_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_PEER_ID_S)); \ } while (0) #define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_S 13 #define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_M 0x00002000 #define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_M) >> HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_S) #define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_S)); \ } while (0) #define HTT_RX_PEER_META_DATA_V1_VDEV_ID_S 16 #define HTT_RX_PEER_META_DATA_V1_VDEV_ID_M 0x00ff0000 #define HTT_RX_PEER_META_DATA_V1_VDEV_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V1_VDEV_ID_M) >> HTT_RX_PEER_META_DATA_V1_VDEV_ID_S) #define HTT_RX_PEER_META_DATA_V1_VDEV_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_VDEV_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_VDEV_ID_S)); \ } while (0) #define HTT_RX_PEER_META_DATA_V1_LMAC_ID_S 24 #define HTT_RX_PEER_META_DATA_V1_LMAC_ID_M 0x03000000 #define HTT_RX_PEER_META_DATA_V1_LMAC_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V1_LMAC_ID_M) >> HTT_RX_PEER_META_DATA_V1_LMAC_ID_S) #define HTT_RX_PEER_META_DATA_V1_LMAC_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_LMAC_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_LMAC_ID_S)); \ } while (0) #define HTT_RX_PEER_META_DATA_V1_CHIP_ID_S 26 #define HTT_RX_PEER_META_DATA_V1_CHIP_ID_M 0x1c000000 #define HTT_RX_PEER_META_DATA_V1_CHIP_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V1_CHIP_ID_M) >> HTT_RX_PEER_META_DATA_V1_CHIP_ID_S) #define HTT_RX_PEER_META_DATA_V1_CHIP_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_CHIP_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_CHIP_ID_S)); \ } while (0) #endif fw/htt_common.h +50 −1 Original line number Diff line number Diff line /* * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * Copyright (c) 2012-2016, 2020 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * Loading Loading @@ -34,6 +34,8 @@ #ifndef _HTT_COMMON_H_ #define _HTT_COMMON_H_ #include <htt_deps.h> /* A_UINT32 */ enum htt_sec_type { htt_sec_type_none, htt_sec_type_wep128, Loading Loading @@ -128,4 +130,51 @@ enum htt_pkt_type { #define HTT_TX_IPA_NEW_MSDU_ID_SPACE_BEGIN 8192 /* = 0x2000 = b10,0000,0000,0000 */ #define TGT_RX2TX_NEW_MSDU_ID_SPACE_BEGIN 12288 /* = 0x3000 = b11,0000,0000,0000 */ /* HTT Access Category values */ enum HTT_AC_WMM { /* WMM Access Categories */ HTT_AC_WMM_BE = 0x0, HTT_AC_WMM_BK = 0x1, HTT_AC_WMM_VI = 0x2, HTT_AC_WMM_VO = 0x3, HTT_NUM_AC_WMM = 0x4, /* extension Access Categories */ HTT_AC_EXT_NON_QOS = 0x4, HTT_AC_EXT_UCAST_MGMT = 0x5, HTT_AC_EXT_MCAST_DATA = 0x6, HTT_AC_EXT_MCAST_MGMT = 0x7, }; enum HTT_AC_WMM_MASK { /* WMM Access Categories */ HTT_AC_WMM_BE_MASK = (1 << HTT_AC_WMM_BE), HTT_AC_WMM_BK_MASK = (1 << HTT_AC_WMM_BK), HTT_AC_WMM_VI_MASK = (1 << HTT_AC_WMM_VI), HTT_AC_WMM_VO_MASK = (1 << HTT_AC_WMM_VO), /* extension Access Categories */ HTT_AC_EXT_NON_QOS_MASK = (1 << HTT_AC_EXT_NON_QOS), HTT_AC_EXT_UCAST_MGMT_MASK = (1 << HTT_AC_EXT_UCAST_MGMT), HTT_AC_EXT_MCAST_DATA_MASK = (1 << HTT_AC_EXT_MCAST_DATA), HTT_AC_EXT_MCAST_MGMT_MASK = (1 << HTT_AC_EXT_MCAST_MGMT), }; #define HTT_AC_MASK_WMM \ (HTT_AC_WMM_BE_MASK | HTT_AC_WMM_BK_MASK | \ HTT_AC_WMM_VI_MASK | HTT_AC_WMM_VO_MASK) #define HTT_AC_MASK_EXT \ (HTT_AC_EXT_NON_QOS_MASK | HTT_AC_EXT_UCAST_MGMT_MASK | \ HTT_AC_EXT_MCAST_DATA_MASK | HTT_AC_EXT_MCAST_MGMT_MASK) #define HTT_AC_MASK_ALL (HTT_AC_MASK_WMM | HTT_AC_MASK_EXT) /** 2 word representation of MAC addr */ typedef struct { /** upper 4 bytes of MAC address */ A_UINT32 mac_addr31to0; /** lower 2 bytes of MAC address */ A_UINT32 mac_addr47to32; } htt_mac_addr; #define HTT_STATS_MAX_CHAINS 8 #endif /* _HTT_COMMON_H_ */ fw/htt_deps.h +5 −0 Original line number Diff line number Diff line Loading @@ -33,10 +33,15 @@ #define _HTT_DEPS_H_ #include <a_types.h> /* A_UINT32 */ #ifndef QCA_WIFI_WIFISTATS_EXTBUILD #include <a_osapi.h> /* PREPACK, POSTPACK */ #endif #ifdef ATHR_WIN_NWF #pragma warning(disable:4214) /* bit field types other than int */ #endif #include "wlan_defs.h" #endif /* _HTT_DEPS_H_ */ fw/htt_ppdu_stats.h +23 −5 Original line number Diff line number Diff line Loading @@ -25,8 +25,8 @@ #include <htt.h> #include <htt_stats.h> #include <htt_common.h> /* HTT_STATS_MAX_CHAINS */ #define HTT_STATS_MAX_CHAINS 8 #define HTT_STATS_NUM_SUPPORTED_BW_SMART_ANTENNA 4 /* 20, 40, 80, 160 MHz */ #define HTT_BA_64_BIT_MAP_SIZE_DWORDS 2 Loading Loading @@ -1745,6 +1745,19 @@ typedef enum HTT_PPDU_STATS_RESP_TYPE HTT_PPDU_STATS_RESP_TYPE; ((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_RTS_FAILURE_S)); \ } while (0) #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_M 0x00040000 #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S 18 #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_GET(_var) \ (((_var) & HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_M) >> \ HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S) #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_SET (_var , _val) \ do { \ HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX, _val); \ ((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S)); \ } while (0) #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_M 0xffffffff #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_S 0 Loading Loading @@ -1868,11 +1881,15 @@ typedef struct { * BIT [ 15: 13] :- medium protection type * BIT [ 16: 16] :- rts_success * BIT [ 17: 17] :- rts_failure * BIT [ 31: 18] :- reserved * BIT [ 18: 18] :- pream_punc_tx * BIT [ 31: 19] :- reserved */ union { A_UINT32 resp_type_is_ampdu__short_retry__long_retry; /* older name */ A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure; /* newer name */ /* older names */ A_UINT32 resp_type_is_ampdu__short_retry__long_retry; A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure; /* newest name */ A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure__pream_punc_tx; struct { /* bitfield names */ A_UINT32 long_retries: 4, short_retries: 4, Loading @@ -1881,7 +1898,8 @@ typedef struct { mprot_type: 3, rts_success: 1, rts_failure: 1, reserved0: 14; pream_punc_tx: 1, reserved0: 13; }; }; Loading fw/htt_stats.h +239 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,8 @@ #ifndef __HTT_STATS_H__ #define __HTT_STATS_H__ #include <htt.h> #include <htt_deps.h> /* A_UINT32 */ #include <htt_common.h> /* * htt_dbg_ext_stats_type - Loading Loading @@ -375,6 +376,22 @@ enum htt_dbg_ext_stats_type { */ HTT_DBG_EXT_PKTLOG_AND_HTT_RING_STATS = 35, /* HTT_DBG_EXT_STATS_DLPAGER_STATS * PARAMS: * * RESP MSG: * - htt_dlpager_stats_t */ HTT_DBG_EXT_STATS_DLPAGER_STATS = 36, /* HTT_DBG_EXT_PHY_COUNTERS_AND_PHY_STATS * PARAMS: * - No Params * RESP MSG: * - htt_phy_counters_and_phy_stats_t */ HTT_DBG_EXT_PHY_COUNTERS_AND_PHY_STATS = 37, /* keep this last */ HTT_DBG_NUM_EXT_STATS = 256, Loading Loading @@ -520,6 +537,10 @@ typedef enum { HTT_STATS_STA_UL_OFDMA_STATS_TAG = 117, /* htt_sta_ul_ofdma_stats_tlv */ HTT_STATS_VDEV_RTT_RESP_STATS_TAG = 118, /* htt_vdev_rtt_resp_stats_tlv */ HTT_STATS_PKTLOG_AND_HTT_RING_STATS_TAG = 119, /* htt_pktlog_and_htt_ring_stats_tlv */ HTT_STATS_DLPAGER_STATS_TAG = 120, /* htt_dlpager_stats_tlv */ HTT_STATS_PHY_COUNTERS_TAG = 121, /* htt_phy_counters_tlv */ HTT_STATS_PHY_STATS_TAG = 122, /* htt_phy_stats_tlv */ HTT_STATS_MAX_TAG, } htt_tlv_tag_t; Loading Loading @@ -5145,5 +5166,222 @@ typedef struct { A_UINT32 pktlog_sw_events_drop_cnt; } htt_pktlog_and_htt_ring_stats_tlv; #define HTT_DLPAGER_STATS_MAX_HIST 10 #define HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_M 0x000000FF #define HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_S 0 #define HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_M 0x0000FF00 #define HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_S 8 #define HTT_DLPAGER_TOTAL_LOCKED_PAGES_M 0x0000FFFF #define HTT_DLPAGER_TOTAL_LOCKED_PAGES_S 0 #define HTT_DLPAGER_TOTAL_FREE_PAGES_M 0xFFFF0000 #define HTT_DLPAGER_TOTAL_FREE_PAGES_S 16 #define HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_M 0x0000FFFF #define HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_S 0 #define HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_M 0xFFFF0000 #define HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_S 16 #define HTT_DLPAGER_ASYNC_LOCK_PAGE_COUNT_GET(_var) \ (((_var) & HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_M) >> \ HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_S) #define HTT_DLPAGER_ASYNC_LOCK_PAGE_COUNT_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT, _val); \ ((_var) &= ~(HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_M));\ ((_var) |= ((_val) << HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_S)); \ } while (0) #define HTT_DLPAGER_SYNC_LOCK_PAGE_COUNT_GET(_var) \ (((_var) & HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_M) >> \ HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_S) #define HTT_DLPAGER_SYNC_LOCK_PAGE_COUNT_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT, _val); \ ((_var) &= ~(HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_M));\ ((_var) |= ((_val) << HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_S)); \ } while (0) #define HTT_DLPAGER_TOTAL_LOCKED_PAGES_GET(_var) \ (((_var) & HTT_DLPAGER_TOTAL_LOCKED_PAGES_M) >> \ HTT_DLPAGER_TOTAL_LOCKED_PAGES_S) #define HTT_DLPAGER_TOTAL_LOCKED_PAGES_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_TOTAL_LOCKED_PAGES, _val); \ ((_var) &= ~(HTT_DLPAGER_TOTAL_LOCKED_PAGES_M)); \ ((_var) |= ((_val) << HTT_DLPAGER_TOTAL_LOCKED_PAGES_S)); \ } while (0) #define HTT_DLPAGER_TOTAL_FREE_PAGES_GET(_var) \ (((_var) & HTT_DLPAGER_TOTAL_FREE_PAGES_M) >> \ HTT_DLPAGER_TOTAL_FREE_PAGES_S) #define HTT_DLPAGER_TOTAL_FREE_PAGES_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_TOTAL_FREE_PAGES, _val); \ ((_var) &= ~(HTT_DLPAGER_TOTAL_FREE_PAGES_M)); \ ((_var) |= ((_val) << HTT_DLPAGER_TOTAL_FREE_PAGES_S)); \ } while (0) #define HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_GET(_var) \ (((_var) & HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_M) >> \ HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_S) #define HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_LAST_LOCKED_PAGE_IDX, _val); \ ((_var) &= ~(HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_M)); \ ((_var) |= ((_val) << HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_S)); \ } while (0) #define HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_GET(_var) \ (((_var) & HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_M) >> \ HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_S) #define HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX, _val); \ ((_var) &= ~(HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_M)); \ ((_var) |= ((_val) << HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_S)); \ } while (0) enum { HTT_STATS_PAGE_LOCKED = 0, HTT_STATS_PAGE_UNLOCKED = 1, HTT_STATS_NUM_PAGE_LOCK_STATES }; /* dlPagerStats structure * Number of lock/unlock pages with last 10 lock/unlock occurrences are recorded */ typedef struct{ /* msg_dword_1 bitfields: * async_lock : 8, * sync_lock : 8, * reserved : 16; */ A_UINT32 msg_dword_1; /* mst_dword_2 bitfields: * total_locked_pages : 16, * total_free_pages : 16; */ A_UINT32 msg_dword_2; /* msg_dword_3 bitfields: * last_locked_page_idx : 16, * last_unlocked_page_idx : 16; */ A_UINT32 msg_dword_3; struct { A_UINT32 page_num; A_UINT32 num_of_pages; /* timestamp is in microsecond units, from SoC timer clock */ A_UINT32 timestamp_lsbs; A_UINT32 timestamp_msbs; } last_pages_info[HTT_STATS_NUM_PAGE_LOCK_STATES][HTT_DLPAGER_STATS_MAX_HIST]; } htt_dl_pager_stats_tlv; /* NOTE: * This structure is for documentation, and cannot be safely used directly. * Instead, use the constituent TLV structures to fill/parse. * STATS_TYPE : HTT_DBG_EXT_STATS_DLPAGER_STATS * TLV_TAGS: * - HTT_STATS_DLPAGER_STATS_TAG */ typedef struct { htt_tlv_hdr_t tlv_hdr; htt_dl_pager_stats_tlv dl_pager_stats; } htt_dlpager_stats_t; /*======= PHY STATS ====================*/ /* * STATS TYPE : HTT_DBG_EXT_PHY_COUNTERS_AND_PHY_STATS * TLV_TAGS: * - HTT_STATS_PHY_COUNTERS_TAG * - HTT_STATS_PHY_STATS_TAG */ #define HTT_MAX_RX_PKT_CNT 8 #define HTT_MAX_RX_PKT_CRC_PASS_CNT 8 #define HTT_MAX_PER_BLK_ERR_CNT 20 #define HTT_MAX_RX_OTA_ERR_CNT 14 typedef struct { /* number of RXTD OFDMA OTA error counts except power surge and drop */ A_UINT32 rx_ofdma_timing_err_cnt; /* rx_cck_fail_cnt: * number of cck error counts due to rx reception failure because of * timing error in cck */ A_UINT32 rx_cck_fail_cnt; /* number of times tx abort initiated by mac */ A_UINT32 mactx_abort_cnt; /* number of times rx abort initiated by mac */ A_UINT32 macrx_abort_cnt; /* number of times tx abort initiated by phy */ A_UINT32 phytx_abort_cnt; /* number of times rx abort initiated by phy */ A_UINT32 phyrx_abort_cnt; /* number of rx defered count initiated by phy */ A_UINT32 phyrx_defer_abort_cnt; /* number of sizing events generated at LSTF */ A_UINT32 rx_gain_adj_lstf_event_cnt; /* a.k.a sizing1 */ /* number of sizing events generated at non-legacy LTF */ A_UINT32 rx_gain_adj_non_legacy_cnt; /* a.k.a sizing2 */ /* rx_pkt_cnt - * Received EOP (end-of-packet) count per packet type; * [0] = 11a; [1] = 11b; [2] = 11n; [3] = 11ac; [4] = 11ax; [5] = GF * [6-7]=RSVD */ A_UINT32 rx_pkt_cnt[HTT_MAX_RX_PKT_CNT]; /* rx_pkt_crc_pass_cnt - * Received EOP (end-of-packet) count per packet type; * [0] = 11a; [1] = 11b; [2] = 11n; [3] = 11ac; [4] = 11ax; [5] = GF * [6-7]=RSVD */ A_UINT32 rx_pkt_crc_pass_cnt[HTT_MAX_RX_PKT_CRC_PASS_CNT]; /* per_blk_err_cnt - * Error count per error source; * [0] = unknown; [1] = LSIG; [2] = HTSIG; [3] = VHTSIG; [4] = HESIG; * [5] = RXTD_OTA; [6] = RXTD_FATAL; [7] = DEMF; [8] = ROBE; * [9] = PMI; [10] = TXFD; [11] = TXTD; [12] = PHYRF * [13-19]=RSVD */ A_UINT32 per_blk_err_cnt[HTT_MAX_PER_BLK_ERR_CNT]; /* rx_ota_err_cnt - * RXTD OTA (over-the-air) error count per error reason; * [0] = voting fail; [1] = weak det fail; [2] = strong sig fail; * [3] = cck fail; [4] = power surge; [5] = power drop; * [6] = btcf timing timeout error; [7] = btcf packet detect error; * [8] = coarse timing timeout error * [9-13]=RSVD */ A_UINT32 rx_ota_err_cnt[HTT_MAX_RX_OTA_ERR_CNT]; } htt_phy_counters_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; /* per chain hw noise floor values in dBm */ A_INT32 nf_chain[HTT_STATS_MAX_CHAINS]; /* number of false radars detected */ A_UINT32 false_radar_cnt; /* number of channel switches happened due to radar detection */ A_UINT32 radar_cs_cnt; /* ani_level - * ANI level (noise interference) corresponds to the channel * the desense levels range from -5 to 15 in dB units, * higher values indicating more noise interference. */ A_INT32 ani_level; } htt_phy_stats_tlv; /* NOTE: * This structure is for documentation, and cannot be safely used directly. * Instead, use the constituent TLV structures to fill/parse. */ typedef struct { htt_phy_counters_tlv phy_counters; htt_phy_stats_tlv phy_stats; } htt_phy_counters_and_phy_stats_t; #endif /* __HTT_STATS_H__ */ Loading
fw/htt.h +123 −45 Original line number Diff line number Diff line Loading @@ -206,9 +206,10 @@ * 3.82 Add WIN_SIZE field to HTT_T2H_MSG_TYPE_RX_DELBA msg. * 3.83 Shrink seq_idx field in HTT PPDU ID from 3 bits to 2. * 3.84 Add fisa_control_bits_v2 def. * 3.85 Add HTT_RX_PEER_META_DATA defs. */ #define HTT_CURRENT_VERSION_MAJOR 3 #define HTT_CURRENT_VERSION_MINOR 84 #define HTT_CURRENT_VERSION_MINOR 85 #define HTT_NUM_TX_FRAG_DESC 1024 Loading Loading @@ -251,42 +252,6 @@ */ #define HTT_T2H_MSG_TYPE_RC_UPDATE_IND DEPRECATED_HTT_T2H_MSG_TYPE_RC_UPDATE_IND /* HTT Access Category values */ enum HTT_AC_WMM { /* WMM Access Categories */ HTT_AC_WMM_BE = 0x0, HTT_AC_WMM_BK = 0x1, HTT_AC_WMM_VI = 0x2, HTT_AC_WMM_VO = 0x3, HTT_NUM_AC_WMM = 0x4, /* extension Access Categories */ HTT_AC_EXT_NON_QOS = 0x4, HTT_AC_EXT_UCAST_MGMT = 0x5, HTT_AC_EXT_MCAST_DATA = 0x6, HTT_AC_EXT_MCAST_MGMT = 0x7, }; enum HTT_AC_WMM_MASK { /* WMM Access Categories */ HTT_AC_WMM_BE_MASK = (1 << HTT_AC_WMM_BE), HTT_AC_WMM_BK_MASK = (1 << HTT_AC_WMM_BK), HTT_AC_WMM_VI_MASK = (1 << HTT_AC_WMM_VI), HTT_AC_WMM_VO_MASK = (1 << HTT_AC_WMM_VO), /* extension Access Categories */ HTT_AC_EXT_NON_QOS_MASK = (1 << HTT_AC_EXT_NON_QOS), HTT_AC_EXT_UCAST_MGMT_MASK = (1 << HTT_AC_EXT_UCAST_MGMT), HTT_AC_EXT_MCAST_DATA_MASK = (1 << HTT_AC_EXT_MCAST_DATA), HTT_AC_EXT_MCAST_MGMT_MASK = (1 << HTT_AC_EXT_MCAST_MGMT), }; #define HTT_AC_MASK_WMM \ (HTT_AC_WMM_BE_MASK | HTT_AC_WMM_BK_MASK | \ HTT_AC_WMM_VI_MASK | HTT_AC_WMM_VO_MASK) #define HTT_AC_MASK_EXT \ (HTT_AC_EXT_NON_QOS_MASK | HTT_AC_EXT_UCAST_MGMT_MASK | \ HTT_AC_EXT_MCAST_DATA_MASK | HTT_AC_EXT_MCAST_MGMT_MASK) #define HTT_AC_MASK_ALL (HTT_AC_MASK_WMM | HTT_AC_MASK_EXT) /* * htt_dbg_stats_type - * bit positions for each stats type within a stats type bitmask Loading Loading @@ -12662,14 +12627,6 @@ typedef enum { HTT_PEER_TYPE_ROAMOFFLOAD_TEMP = 128, /* Temporarily created during offload roam */ } HTT_PEER_TYPE; /** 2 word representation of MAC addr */ typedef struct { /** upper 4 bytes of MAC address */ A_UINT32 mac_addr31to0; /** lower 2 bytes of MAC address */ A_UINT32 mac_addr47to32; } htt_mac_addr; /** macro to convert MAC address from char array to HTT word format */ #define HTT_CHAR_ARRAY_TO_MAC_ADDR(c_macaddr, phtt_mac_addr) do { \ (phtt_mac_addr)->mac_addr31to0 = \ Loading Loading @@ -14182,5 +14139,126 @@ PREPACK struct htt_ppdu_id { ((_var) |= ((_val) << HTT_PPDU_ID_SEQ_CMD_TYPE_S)); \ } while (0) /** * @brief target -> RX PEER METADATA V0 format * Host will know the peer metadata version from the wmi_service_ready_ext2 * message from target, and will confirm to the target which peer metadata * version to use in the wmi_init message. * * The following diagram shows the format of the RX PEER METADATA. * * |31 24|23 16|15 8|7 0| * |-----------------------------------------------------------------------| * | Reserved | VDEV ID | PEER ID | * |-----------------------------------------------------------------------| */ PREPACK struct htt_rx_peer_metadata_v0 { A_UINT32 peer_id: 16, vdev_id: 8, reserved1: 8; } POSTPACK; #define HTT_RX_PEER_META_DATA_V0_PEER_ID_S 0 #define HTT_RX_PEER_META_DATA_V0_PEER_ID_M 0x0000ffff #define HTT_RX_PEER_META_DATA_V0_PEER_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V0_PEER_ID_M) >> HTT_RX_PEER_META_DATA_V0_PEER_ID_S) #define HTT_RX_PEER_META_DATA_V0_PEER_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V0_PEER_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V0_PEER_ID_S)); \ } while (0) #define HTT_RX_PEER_META_DATA_V0_VDEV_ID_S 16 #define HTT_RX_PEER_META_DATA_V0_VDEV_ID_M 0x00ff0000 #define HTT_RX_PEER_META_DATA_V0_VDEV_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V0_VDEV_ID_M) >> HTT_RX_PEER_META_DATA_V0_VDEV_ID_S) #define HTT_RX_PEER_META_DATA_V0_VDEV_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V0_VDEV_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V0_VDEV_ID_S)); \ } while (0) /** * @brief target -> RX PEER METADATA V1 format * Host will know the peer metadata version from the wmi_service_ready_ext2 * message from target, and will confirm to the target which peer metadata * version to use in the wmi_init message. * * The following diagram shows the format of the RX PEER METADATA V1 format. * * |31 29|28 26|25 24|23 16|15 14| 13 |12 0| * |-----------------------------------------------------------------------| * |Rsvd2|CHIP ID|LMAC ID| VDEV ID |Rsvd1|ML PEER| SW PEER ID/ML PEER ID| * |-----------------------------------------------------------------------| */ PREPACK struct htt_rx_peer_metadata_v1 { A_UINT32 peer_id: 13, ml_peer_valid: 1, reserved1: 2, vdev_id: 8, lmac_id: 2, chip_id: 3, reserved2: 3; } POSTPACK; #define HTT_RX_PEER_META_DATA_V1_PEER_ID_S 0 #define HTT_RX_PEER_META_DATA_V1_PEER_ID_M 0x00001fff #define HTT_RX_PEER_META_DATA_V1_PEER_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V1_PEER_ID_M) >> HTT_RX_PEER_META_DATA_V1_PEER_ID_S) #define HTT_RX_PEER_META_DATA_V1_PEER_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_PEER_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_PEER_ID_S)); \ } while (0) #define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_S 13 #define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_M 0x00002000 #define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_M) >> HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_S) #define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_S)); \ } while (0) #define HTT_RX_PEER_META_DATA_V1_VDEV_ID_S 16 #define HTT_RX_PEER_META_DATA_V1_VDEV_ID_M 0x00ff0000 #define HTT_RX_PEER_META_DATA_V1_VDEV_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V1_VDEV_ID_M) >> HTT_RX_PEER_META_DATA_V1_VDEV_ID_S) #define HTT_RX_PEER_META_DATA_V1_VDEV_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_VDEV_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_VDEV_ID_S)); \ } while (0) #define HTT_RX_PEER_META_DATA_V1_LMAC_ID_S 24 #define HTT_RX_PEER_META_DATA_V1_LMAC_ID_M 0x03000000 #define HTT_RX_PEER_META_DATA_V1_LMAC_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V1_LMAC_ID_M) >> HTT_RX_PEER_META_DATA_V1_LMAC_ID_S) #define HTT_RX_PEER_META_DATA_V1_LMAC_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_LMAC_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_LMAC_ID_S)); \ } while (0) #define HTT_RX_PEER_META_DATA_V1_CHIP_ID_S 26 #define HTT_RX_PEER_META_DATA_V1_CHIP_ID_M 0x1c000000 #define HTT_RX_PEER_META_DATA_V1_CHIP_ID_GET(_var) \ (((_var) & HTT_RX_PEER_META_DATA_V1_CHIP_ID_M) >> HTT_RX_PEER_META_DATA_V1_CHIP_ID_S) #define HTT_RX_PEER_META_DATA_V1_CHIP_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_CHIP_ID, _val); \ ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_CHIP_ID_S)); \ } while (0) #endif
fw/htt_common.h +50 −1 Original line number Diff line number Diff line /* * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * Copyright (c) 2012-2016, 2020 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * Loading Loading @@ -34,6 +34,8 @@ #ifndef _HTT_COMMON_H_ #define _HTT_COMMON_H_ #include <htt_deps.h> /* A_UINT32 */ enum htt_sec_type { htt_sec_type_none, htt_sec_type_wep128, Loading Loading @@ -128,4 +130,51 @@ enum htt_pkt_type { #define HTT_TX_IPA_NEW_MSDU_ID_SPACE_BEGIN 8192 /* = 0x2000 = b10,0000,0000,0000 */ #define TGT_RX2TX_NEW_MSDU_ID_SPACE_BEGIN 12288 /* = 0x3000 = b11,0000,0000,0000 */ /* HTT Access Category values */ enum HTT_AC_WMM { /* WMM Access Categories */ HTT_AC_WMM_BE = 0x0, HTT_AC_WMM_BK = 0x1, HTT_AC_WMM_VI = 0x2, HTT_AC_WMM_VO = 0x3, HTT_NUM_AC_WMM = 0x4, /* extension Access Categories */ HTT_AC_EXT_NON_QOS = 0x4, HTT_AC_EXT_UCAST_MGMT = 0x5, HTT_AC_EXT_MCAST_DATA = 0x6, HTT_AC_EXT_MCAST_MGMT = 0x7, }; enum HTT_AC_WMM_MASK { /* WMM Access Categories */ HTT_AC_WMM_BE_MASK = (1 << HTT_AC_WMM_BE), HTT_AC_WMM_BK_MASK = (1 << HTT_AC_WMM_BK), HTT_AC_WMM_VI_MASK = (1 << HTT_AC_WMM_VI), HTT_AC_WMM_VO_MASK = (1 << HTT_AC_WMM_VO), /* extension Access Categories */ HTT_AC_EXT_NON_QOS_MASK = (1 << HTT_AC_EXT_NON_QOS), HTT_AC_EXT_UCAST_MGMT_MASK = (1 << HTT_AC_EXT_UCAST_MGMT), HTT_AC_EXT_MCAST_DATA_MASK = (1 << HTT_AC_EXT_MCAST_DATA), HTT_AC_EXT_MCAST_MGMT_MASK = (1 << HTT_AC_EXT_MCAST_MGMT), }; #define HTT_AC_MASK_WMM \ (HTT_AC_WMM_BE_MASK | HTT_AC_WMM_BK_MASK | \ HTT_AC_WMM_VI_MASK | HTT_AC_WMM_VO_MASK) #define HTT_AC_MASK_EXT \ (HTT_AC_EXT_NON_QOS_MASK | HTT_AC_EXT_UCAST_MGMT_MASK | \ HTT_AC_EXT_MCAST_DATA_MASK | HTT_AC_EXT_MCAST_MGMT_MASK) #define HTT_AC_MASK_ALL (HTT_AC_MASK_WMM | HTT_AC_MASK_EXT) /** 2 word representation of MAC addr */ typedef struct { /** upper 4 bytes of MAC address */ A_UINT32 mac_addr31to0; /** lower 2 bytes of MAC address */ A_UINT32 mac_addr47to32; } htt_mac_addr; #define HTT_STATS_MAX_CHAINS 8 #endif /* _HTT_COMMON_H_ */
fw/htt_deps.h +5 −0 Original line number Diff line number Diff line Loading @@ -33,10 +33,15 @@ #define _HTT_DEPS_H_ #include <a_types.h> /* A_UINT32 */ #ifndef QCA_WIFI_WIFISTATS_EXTBUILD #include <a_osapi.h> /* PREPACK, POSTPACK */ #endif #ifdef ATHR_WIN_NWF #pragma warning(disable:4214) /* bit field types other than int */ #endif #include "wlan_defs.h" #endif /* _HTT_DEPS_H_ */
fw/htt_ppdu_stats.h +23 −5 Original line number Diff line number Diff line Loading @@ -25,8 +25,8 @@ #include <htt.h> #include <htt_stats.h> #include <htt_common.h> /* HTT_STATS_MAX_CHAINS */ #define HTT_STATS_MAX_CHAINS 8 #define HTT_STATS_NUM_SUPPORTED_BW_SMART_ANTENNA 4 /* 20, 40, 80, 160 MHz */ #define HTT_BA_64_BIT_MAP_SIZE_DWORDS 2 Loading Loading @@ -1745,6 +1745,19 @@ typedef enum HTT_PPDU_STATS_RESP_TYPE HTT_PPDU_STATS_RESP_TYPE; ((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_RTS_FAILURE_S)); \ } while (0) #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_M 0x00040000 #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S 18 #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_GET(_var) \ (((_var) & HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_M) >> \ HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S) #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_SET (_var , _val) \ do { \ HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX, _val); \ ((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S)); \ } while (0) #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_M 0xffffffff #define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_S 0 Loading Loading @@ -1868,11 +1881,15 @@ typedef struct { * BIT [ 15: 13] :- medium protection type * BIT [ 16: 16] :- rts_success * BIT [ 17: 17] :- rts_failure * BIT [ 31: 18] :- reserved * BIT [ 18: 18] :- pream_punc_tx * BIT [ 31: 19] :- reserved */ union { A_UINT32 resp_type_is_ampdu__short_retry__long_retry; /* older name */ A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure; /* newer name */ /* older names */ A_UINT32 resp_type_is_ampdu__short_retry__long_retry; A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure; /* newest name */ A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure__pream_punc_tx; struct { /* bitfield names */ A_UINT32 long_retries: 4, short_retries: 4, Loading @@ -1881,7 +1898,8 @@ typedef struct { mprot_type: 3, rts_success: 1, rts_failure: 1, reserved0: 14; pream_punc_tx: 1, reserved0: 13; }; }; Loading
fw/htt_stats.h +239 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,8 @@ #ifndef __HTT_STATS_H__ #define __HTT_STATS_H__ #include <htt.h> #include <htt_deps.h> /* A_UINT32 */ #include <htt_common.h> /* * htt_dbg_ext_stats_type - Loading Loading @@ -375,6 +376,22 @@ enum htt_dbg_ext_stats_type { */ HTT_DBG_EXT_PKTLOG_AND_HTT_RING_STATS = 35, /* HTT_DBG_EXT_STATS_DLPAGER_STATS * PARAMS: * * RESP MSG: * - htt_dlpager_stats_t */ HTT_DBG_EXT_STATS_DLPAGER_STATS = 36, /* HTT_DBG_EXT_PHY_COUNTERS_AND_PHY_STATS * PARAMS: * - No Params * RESP MSG: * - htt_phy_counters_and_phy_stats_t */ HTT_DBG_EXT_PHY_COUNTERS_AND_PHY_STATS = 37, /* keep this last */ HTT_DBG_NUM_EXT_STATS = 256, Loading Loading @@ -520,6 +537,10 @@ typedef enum { HTT_STATS_STA_UL_OFDMA_STATS_TAG = 117, /* htt_sta_ul_ofdma_stats_tlv */ HTT_STATS_VDEV_RTT_RESP_STATS_TAG = 118, /* htt_vdev_rtt_resp_stats_tlv */ HTT_STATS_PKTLOG_AND_HTT_RING_STATS_TAG = 119, /* htt_pktlog_and_htt_ring_stats_tlv */ HTT_STATS_DLPAGER_STATS_TAG = 120, /* htt_dlpager_stats_tlv */ HTT_STATS_PHY_COUNTERS_TAG = 121, /* htt_phy_counters_tlv */ HTT_STATS_PHY_STATS_TAG = 122, /* htt_phy_stats_tlv */ HTT_STATS_MAX_TAG, } htt_tlv_tag_t; Loading Loading @@ -5145,5 +5166,222 @@ typedef struct { A_UINT32 pktlog_sw_events_drop_cnt; } htt_pktlog_and_htt_ring_stats_tlv; #define HTT_DLPAGER_STATS_MAX_HIST 10 #define HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_M 0x000000FF #define HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_S 0 #define HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_M 0x0000FF00 #define HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_S 8 #define HTT_DLPAGER_TOTAL_LOCKED_PAGES_M 0x0000FFFF #define HTT_DLPAGER_TOTAL_LOCKED_PAGES_S 0 #define HTT_DLPAGER_TOTAL_FREE_PAGES_M 0xFFFF0000 #define HTT_DLPAGER_TOTAL_FREE_PAGES_S 16 #define HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_M 0x0000FFFF #define HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_S 0 #define HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_M 0xFFFF0000 #define HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_S 16 #define HTT_DLPAGER_ASYNC_LOCK_PAGE_COUNT_GET(_var) \ (((_var) & HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_M) >> \ HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_S) #define HTT_DLPAGER_ASYNC_LOCK_PAGE_COUNT_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT, _val); \ ((_var) &= ~(HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_M));\ ((_var) |= ((_val) << HTT_DLPAGER_ASYNC_LOCKED_PAGE_COUNT_S)); \ } while (0) #define HTT_DLPAGER_SYNC_LOCK_PAGE_COUNT_GET(_var) \ (((_var) & HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_M) >> \ HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_S) #define HTT_DLPAGER_SYNC_LOCK_PAGE_COUNT_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT, _val); \ ((_var) &= ~(HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_M));\ ((_var) |= ((_val) << HTT_DLPAGER_SYNC_LOCKED_PAGE_COUNT_S)); \ } while (0) #define HTT_DLPAGER_TOTAL_LOCKED_PAGES_GET(_var) \ (((_var) & HTT_DLPAGER_TOTAL_LOCKED_PAGES_M) >> \ HTT_DLPAGER_TOTAL_LOCKED_PAGES_S) #define HTT_DLPAGER_TOTAL_LOCKED_PAGES_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_TOTAL_LOCKED_PAGES, _val); \ ((_var) &= ~(HTT_DLPAGER_TOTAL_LOCKED_PAGES_M)); \ ((_var) |= ((_val) << HTT_DLPAGER_TOTAL_LOCKED_PAGES_S)); \ } while (0) #define HTT_DLPAGER_TOTAL_FREE_PAGES_GET(_var) \ (((_var) & HTT_DLPAGER_TOTAL_FREE_PAGES_M) >> \ HTT_DLPAGER_TOTAL_FREE_PAGES_S) #define HTT_DLPAGER_TOTAL_FREE_PAGES_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_TOTAL_FREE_PAGES, _val); \ ((_var) &= ~(HTT_DLPAGER_TOTAL_FREE_PAGES_M)); \ ((_var) |= ((_val) << HTT_DLPAGER_TOTAL_FREE_PAGES_S)); \ } while (0) #define HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_GET(_var) \ (((_var) & HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_M) >> \ HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_S) #define HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_LAST_LOCKED_PAGE_IDX, _val); \ ((_var) &= ~(HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_M)); \ ((_var) |= ((_val) << HTT_DLPAGER_LAST_LOCKED_PAGE_IDX_S)); \ } while (0) #define HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_GET(_var) \ (((_var) & HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_M) >> \ HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_S) #define HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX, _val); \ ((_var) &= ~(HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_M)); \ ((_var) |= ((_val) << HTT_DLPAGER_LAST_UNLOCKED_PAGE_IDX_S)); \ } while (0) enum { HTT_STATS_PAGE_LOCKED = 0, HTT_STATS_PAGE_UNLOCKED = 1, HTT_STATS_NUM_PAGE_LOCK_STATES }; /* dlPagerStats structure * Number of lock/unlock pages with last 10 lock/unlock occurrences are recorded */ typedef struct{ /* msg_dword_1 bitfields: * async_lock : 8, * sync_lock : 8, * reserved : 16; */ A_UINT32 msg_dword_1; /* mst_dword_2 bitfields: * total_locked_pages : 16, * total_free_pages : 16; */ A_UINT32 msg_dword_2; /* msg_dword_3 bitfields: * last_locked_page_idx : 16, * last_unlocked_page_idx : 16; */ A_UINT32 msg_dword_3; struct { A_UINT32 page_num; A_UINT32 num_of_pages; /* timestamp is in microsecond units, from SoC timer clock */ A_UINT32 timestamp_lsbs; A_UINT32 timestamp_msbs; } last_pages_info[HTT_STATS_NUM_PAGE_LOCK_STATES][HTT_DLPAGER_STATS_MAX_HIST]; } htt_dl_pager_stats_tlv; /* NOTE: * This structure is for documentation, and cannot be safely used directly. * Instead, use the constituent TLV structures to fill/parse. * STATS_TYPE : HTT_DBG_EXT_STATS_DLPAGER_STATS * TLV_TAGS: * - HTT_STATS_DLPAGER_STATS_TAG */ typedef struct { htt_tlv_hdr_t tlv_hdr; htt_dl_pager_stats_tlv dl_pager_stats; } htt_dlpager_stats_t; /*======= PHY STATS ====================*/ /* * STATS TYPE : HTT_DBG_EXT_PHY_COUNTERS_AND_PHY_STATS * TLV_TAGS: * - HTT_STATS_PHY_COUNTERS_TAG * - HTT_STATS_PHY_STATS_TAG */ #define HTT_MAX_RX_PKT_CNT 8 #define HTT_MAX_RX_PKT_CRC_PASS_CNT 8 #define HTT_MAX_PER_BLK_ERR_CNT 20 #define HTT_MAX_RX_OTA_ERR_CNT 14 typedef struct { /* number of RXTD OFDMA OTA error counts except power surge and drop */ A_UINT32 rx_ofdma_timing_err_cnt; /* rx_cck_fail_cnt: * number of cck error counts due to rx reception failure because of * timing error in cck */ A_UINT32 rx_cck_fail_cnt; /* number of times tx abort initiated by mac */ A_UINT32 mactx_abort_cnt; /* number of times rx abort initiated by mac */ A_UINT32 macrx_abort_cnt; /* number of times tx abort initiated by phy */ A_UINT32 phytx_abort_cnt; /* number of times rx abort initiated by phy */ A_UINT32 phyrx_abort_cnt; /* number of rx defered count initiated by phy */ A_UINT32 phyrx_defer_abort_cnt; /* number of sizing events generated at LSTF */ A_UINT32 rx_gain_adj_lstf_event_cnt; /* a.k.a sizing1 */ /* number of sizing events generated at non-legacy LTF */ A_UINT32 rx_gain_adj_non_legacy_cnt; /* a.k.a sizing2 */ /* rx_pkt_cnt - * Received EOP (end-of-packet) count per packet type; * [0] = 11a; [1] = 11b; [2] = 11n; [3] = 11ac; [4] = 11ax; [5] = GF * [6-7]=RSVD */ A_UINT32 rx_pkt_cnt[HTT_MAX_RX_PKT_CNT]; /* rx_pkt_crc_pass_cnt - * Received EOP (end-of-packet) count per packet type; * [0] = 11a; [1] = 11b; [2] = 11n; [3] = 11ac; [4] = 11ax; [5] = GF * [6-7]=RSVD */ A_UINT32 rx_pkt_crc_pass_cnt[HTT_MAX_RX_PKT_CRC_PASS_CNT]; /* per_blk_err_cnt - * Error count per error source; * [0] = unknown; [1] = LSIG; [2] = HTSIG; [3] = VHTSIG; [4] = HESIG; * [5] = RXTD_OTA; [6] = RXTD_FATAL; [7] = DEMF; [8] = ROBE; * [9] = PMI; [10] = TXFD; [11] = TXTD; [12] = PHYRF * [13-19]=RSVD */ A_UINT32 per_blk_err_cnt[HTT_MAX_PER_BLK_ERR_CNT]; /* rx_ota_err_cnt - * RXTD OTA (over-the-air) error count per error reason; * [0] = voting fail; [1] = weak det fail; [2] = strong sig fail; * [3] = cck fail; [4] = power surge; [5] = power drop; * [6] = btcf timing timeout error; [7] = btcf packet detect error; * [8] = coarse timing timeout error * [9-13]=RSVD */ A_UINT32 rx_ota_err_cnt[HTT_MAX_RX_OTA_ERR_CNT]; } htt_phy_counters_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; /* per chain hw noise floor values in dBm */ A_INT32 nf_chain[HTT_STATS_MAX_CHAINS]; /* number of false radars detected */ A_UINT32 false_radar_cnt; /* number of channel switches happened due to radar detection */ A_UINT32 radar_cs_cnt; /* ani_level - * ANI level (noise interference) corresponds to the channel * the desense levels range from -5 to 15 in dB units, * higher values indicating more noise interference. */ A_INT32 ani_level; } htt_phy_stats_tlv; /* NOTE: * This structure is for documentation, and cannot be safely used directly. * Instead, use the constituent TLV structures to fill/parse. */ typedef struct { htt_phy_counters_tlv phy_counters; htt_phy_stats_tlv phy_stats; } htt_phy_counters_and_phy_stats_t; #endif /* __HTT_STATS_H__ */