diff options
| author | Nandini Suresh <snandini@codeaurora.org> | 2017-08-02 13:12:04 -0700 |
|---|---|---|
| committer | snandini <snandini@codeaurora.org> | 2017-09-19 01:40:51 -0700 |
| commit | bb3c4d4af7665e6c5ec76e8df5138014e02c6e52 (patch) | |
| tree | a20855ded8e0ad12741230515ee6a9ad0091cdb5 | |
| parent | ba6e18c6e9d6cea355abdd555e2994d2c3d3b391 (diff) | |
adding wdi_ipa.h to git repository
adding wdi_ipa.h to git repository
Change-Id: I0525f344e9b857f7472ce683bd4995c486353574
CRs-Fixed: 2107764
| -rw-r--r-- | fw/wdi_ipa.h | 1465 |
1 files changed, 1465 insertions, 0 deletions
diff --git a/fw/wdi_ipa.h b/fw/wdi_ipa.h new file mode 100644 index 000000000000..9870426ce414 --- /dev/null +++ b/fw/wdi_ipa.h @@ -0,0 +1,1465 @@ +/* + * Copyright (c) 2011-2017 The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/** + * @file wdi_ipa.h + * + * @details WIFI <-> IPA direct data-path interface related definitions. + */ + +#ifndef _WDI_IPA_H_ +#define _WDI_IPA_H_ + +#if defined(ATH_TARGET) +#include <osapi.h> /* A_UINT32 */ + +#else + +#if defined(IPA_TARGET) +typedef unsigned int A_UINT32 +typedef unsigned char A_UINT8 +#define A_ASSERT(__bool) \ + do { \ + if (0 == (__bool)) { \ + while(1); \ + } \ + } while(0) +#define A_COMPILE_TIME_ASSERT(assertion_name, predicate) \ + typedef char assertion_name[(predicate) ? 1 : -1]; +#define PREPACK +#define POSTPACK + +#else + +#include <a_types.h> /* A_UINT32 */ +#include <a_osapi.h> /* PREPACK, POSTPACK */ + +#endif /* IPA_TARGET */ + +#endif /* ATH_TARGET */ + + +#ifndef offsetof +#define offsetof(type, field) ((unsigned int)(&((type *)0)->field)) +#endif + +/* + * WDI_IPA version history: + * 1.0 initial numbered version + */ +#define WDI_IPA_CURRENT_VERSION_MAJOR 1 +#define WDI_IPA_CURRENT_VERSION_MINOR 1 + + +#define WDI_IPA_CHECK_SET_VAL(field, val) \ + A_ASSERT(!((val) & ~((field ## _M) >> (field ## _S)))) + + + + +/** + * @brief WDI_IPA TX_FRAG_DESC + * + * |31 24|23 16|15 8|7 0| + * |----------------+----------------+----------------+----------------| + * | frag buf ptr | + * |-------------------------------------------------------------------| + * | Reserved | frag len | + * |-------------------------------------------------------------------| + * | 0 | + * |-------------------------------------------------------------------| + * + * Header fields: + * Header fields: + * - FRAG_BUF_PTR + * Bits 31:0 + * Purpose: Specify pointer to the starting of Ethernet Packet + * - FRAG_LEN + * Bits 15:0 + * Purpose: Specify total length of the Ethernet Packet. + * - 0 + * Bits 31:0 + * Purpose: fixed value 0, it is used for indicating WIFI HW + * that Ethernet Packet is contained in ONE fragment. + * + */ + +#define WDI_IPA_TX_FRAG_DESC_SZ 12 /* bytes */ + +#define WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_M 0xffffffff +#define WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_S 0 + +#define WDI_IPA_TX_FRAG_DESC_FRAG_LEN_M 0x0000ffff +#define WDI_IPA_TX_FRAG_DESC_FRAG_LEN_S 0 + +#define WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_GET(_var) \ + (((_var) & WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_M) >> \ + WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_S) +#define WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR, _val); \ + ((_var) &= (WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_M)); \ + ((_var) |= ((_val) << WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_S)); \ } while(0) + +#define WDI_IPA_TX_FRAG_DESC_FRAG_LEN_GET(_var) \ + (((_var) & WDI_IPA_TX_FRAG_DESC_FRAG_LEN_M) >> \ + WDI_IPA_TX_FRAG_DESC_FRAG_LEN_S) +#define WDI_IPA_TX_FRAG_DESC_FRAG_LEN_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_FRAG_DESC_FRAG_LEN, _val); \ + ((_var) &= (WDI_IPA_TX_FRAG_DESC_FRAG_LEN_M)); \ + ((_var) |= ((_val) << WDI_IPA_TX_FRAG_DESC_FRAG_LEN_S)); \ } while(0) + +PREPACK struct wdi_ipa_tx_frag_desc_t +{ + A_UINT32 frag_buf_ptr; /* word 0 */ + + A_UINT32 /* word 1 */ + frag_len: 16, + reserved: 16; + + A_UINT32 fixed_val_zero; /* word 2 */ +} POSTPACK; + + + +/** + * @brief WDI_IPA TX_HTT_DESC is same as HTT TX Msdu descriptor (defined in + * htt.h). TX_HTT_DESC fields are opaque to IPA uC, so we just need + * to define size of the descriptor in wdi_ipa.h. Host WLAN driver + * and WIFI FW uses htt.h for the bit-field definitions. + * + */ +#define WDI_IPA_TX_HTT_DESC_SZ 16 /* bytes */ + + + +/** + * @brief WDI_IPA TX_IPA_DESC + * + * |31 24|23 16|15 8|7 0| + * |----------------+----------------+----------------+----------------| + * | Reserved | vdev id | + * |-------------------------------------------------------------------| + * + * Header fields: + * Header fields: + * - VDEV_ID + * Bits 23:16 + * Purpose: Specifies the SoftAP VDEV interface, pertaining to the packet + * filled by IPA HW. + */ + +#define WDI_IPA_TX_IPA_DESC_SZ 4 /* bytes */ + +#define WDI_IPA_TX_IPA_DESC_VDEV_ID_M 0x000000ff +#define WDI_IPA_TX_IPA_DESC_VDEV_ID_S 0 + +#define WDI_IPA_TX_IPA_DESC_VDEV_ID_GET(_var) \ + (((_var) & WDI_IPA_TX_IPA_DESC_VDEV_ID_M) >> \ + WDI_IPA_TX_IPA_DESC_VDEV_ID_S) +#define WDI_IPA_TX_IPA_DESC_VDEV_ID_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_IPA_DESC_VDEV_ID, _val); \ + ((_var) &= (WDI_IPA_TX_IPA_DESC_VDEV_ID_M)); \ + ((_var) |= ((_val) << WDI_IPA_TX_IPA_DESC_VDEV_ID_S)); \ + } while(0) + +PREPACK struct wdi_ipa_tx_ipa_desc_t +{ + A_UINT32 /* word 0 */ + vdev_id: 8, + reserved: 24; +} POSTPACK; + + +#define WDI_IPA_TX_ETHR_PKT_MAX_SZ 1518 /* bytes */ + +PREPACK struct wdi_ipa_tx_pkt_buf_t +{ + A_UINT8 htt_desc[WDI_IPA_TX_HTT_DESC_SZ]; + struct wdi_ipa_tx_frag_desc_t frag_desc; + struct wdi_ipa_tx_ipa_desc_t ipa_desc; + A_UINT8 ethr_pkt[WDI_IPA_TX_ETHR_PKT_MAX_SZ]; +} POSTPACK; + +#define WDI_IPA_TX_PKT_BUF_MAX_SZ 2048 /* bytes */ +A_COMPILE_TIME_ASSERT(verify_pkt_buf_sz, + sizeof(struct wdi_ipa_tx_pkt_buf_t)<=WDI_IPA_TX_PKT_BUF_MAX_SZ); +#define WDI_IPA_TX_PKT_POOL_SZ 1023 /* packets */ + + + +/** + * @brief WDI_IPA TX_CE_DESC + * + * |31 24|23 16|15 8|7 0| + * |----------------+----------------+----------------+----------------| + * | src ptr | + * |-------------------------------------------------------------------| + * | meta data |S|G| src buf len | + * |-------------------------------------------------------------------| + * + * Header fields: + * Header fields: + * - SRC_PTR + * Bits 31:0 + * Purpose: Specify pointer to the starting of Pacet Buf + * - SRC_BUF_LEN + * Bits 15:0 + * Purpose: Specify number of bytes to be copied by Copy Engine + * - G + * Bits 16 + * Purpose: Enable gather of multiple CE descriptors to one destination + * Always 0 (disable) for WDI_IPA data path + * - S + * Bits 17 + * Purpose: Enable byte swap for endian conversation. + * Always 0 (disable) for WDI_IPA data path. + * META_DATA + * Bits 31:18 + * Purpose: unused + */ + +#define WDI_IPA_TX_CE_DESC_SZ 8 /* bytes */ + +#define WDI_IPA_TX_CE_DESC_SRC_PTR_M 0xffffffff +#define WDI_IPA_TX_CE_DESC_SRC_PTR_S 0 + +#define WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_M 0x0000ffff +#define WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_S 0 + +#define WDI_IPA_TX_CE_DESC_G_M 0x00010000 +#define WDI_IPA_TX_CE_DESC_G_S 16 + +#define WDI_IPA_TX_CE_DESC_S_M 0x00020000 +#define WDI_IPA_TX_CE_DESC_S_S 17 + +#define WDI_IPA_TX_CE_DESC_META_DATA_M 0xFFFC0000 +#define WDI_IPA_TX_CE_DESC_META_DATA_S 18 + +#define WDI_IPA_TX_CE_DESC_SRC_PTR_GET(_var) \ + (((_var) & WDI_IPA_TX_CE_DESC_SRC_PTR_M) >> \ + WDI_IPA_TX_CE_DESC_SRC_PTR_S) +#define WDI_IPA_TX_CE_DESC_SRC_PTR_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_CE_DESC_SRC_PTR, _val); \ + ((_var) &= (WDI_IPA_TX_CE_DESC_SRC_PTR_M)); \ + ((_var) |= ((_val) << WDI_IPA_TX_CE_DESC_SRC_PTR_S)); \ + } while(0) + +#define WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_GET(_var) \ + (((_var) & WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_M) >> \ + WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_S) +#define WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_CE_DESC_SRC_BUF_LEN, _val); \ + ((_var) &= (WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_M)); \ + ((_var) |= ((_val) << WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_S)); \ + } while(0) + +#define WDI_IPA_TX_CE_DESC_G_GET(_var) \ + (((_var) & WDI_IPA_TX_CE_DESC_G_M) >> \ + WDI_IPA_TX_CE_DESC_G_S) +#define WDI_IPA_TX_CE_DESC_G_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_CE_DESC_G, _val); \ + ((_var) &= (WDI_IPA_TX_CE_DESC_G_M)); \ + ((_var) |= ((_val) << WDI_IPA_TX_CE_DESC_G_S)); \ + } while(0) + +#define WDI_IPA_TX_CE_DESC_S_GET(_var) \ + (((_var) & WDI_IPA_TX_CE_DESC_S_M) >> \ + WDI_IPA_TX_CE_DESC_S_S) +#define WDI_IPA_TX_CE_DESC_S_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_CE_DESC_S, _val); \ + ((_var) &= (WDI_IPA_TX_CE_DESC_S_M)); \ + ((_var) |= ((_val) << WDI_IPA_TX_CE_DESC_S_S)); \ + } while(0) + +#define WDI_IPA_TX_CE_DESC_META_DATA_GET(_var) \ + (((_var) & WDI_IPA_TX_CE_DESC_META_DATA_M) >> \ + WDI_IPA_TX_CE_DESC_META_DATA_S) +#define WDI_IPA_TX_CE_DESC_META_DATA_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_CE_DESC_META_DATA, _val); \ + ((_var) &= (WDI_IPA_TX_CE_DESC_META_DATA_M)); \ + ((_var) |= ((_val) << WDI_IPA_TX_CE_DESC_META_DATA_S)); \ + } while(0) + +PREPACK struct wdi_ipa_tx_ce_desc_t +{ + A_UINT32 src_ptr; /* word 0 */ + A_UINT32 /* word 1 */ + src_buf_len: 16, + g: 1, + s: 1, + meta_data: 14; +} POSTPACK; + + +#define WDI_IPA_TX_CE_RING_SZ 1024 /* no. of desc */ +#define WDI_IPA_TX_INITIAL_PKT_HDR_SZ 28 +#define WDI_IPA_TX_CE_FIXED_BUF_LEN (WDI_IPA_TX_FRAG_DESC_SZ + \ + WDI_IPA_TX_HTT_DESC_SZ + \ + WDI_IPA_TX_IPA_DESC_SZ + \ + WDI_IPA_TX_INITIAL_PKT_HDR_SZ) + + +/* Verify that CE ring size is power of 2 */ +A_COMPILE_TIME_ASSERT(verify_ce_ring_sz, + ((WDI_IPA_TX_CE_RING_SZ) ^ (WDI_IPA_TX_CE_RING_SZ-1)) == + ((WDI_IPA_TX_CE_RING_SZ<<1)-1)); + +A_COMPILE_TIME_ASSERT(verify_pkt_pool_sz, + WDI_IPA_TX_PKT_POOL_SZ < WDI_IPA_TX_CE_RING_SZ); + + +/** + * @brief WDI_IPA TX_COMP_DESC + * + * |31 24|23 16|15 8|7 0| + * |----------------+----------------+----------------+----------------| + * | Packet Buf Ptr | + * |-------------------------------------------------------------------| + * + * Header fields: + * Header fields: + * - PKT_BUF_PTR + * Bits 31:0 + * Purpose: Specify pointer to Packet Buf, which is being freed + * after TX comp + */ + + +#define WDI_IPA_TX_COMP_DESC_SZ 4 /* bytes */ + +#define WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_M 0xffffffff +#define WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_S 0 + +#define WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_GET(_var) \ + (((_var) & WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_M) >> \ + WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_S) +#define WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR, _val);\ + ((_var) &= (WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_M)); \ + ((_var) |= ((_val) << WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_S)); \ + } while(0) + +PREPACK struct wdi_ipa_tx_comp_desc_t +{ + A_UINT32 pkt_buf_ptr; /* word 0 */ +} POSTPACK; + +#define WDI_IPA_TX_COMP_RING_SZ 1024 /* no. of desc */ +/* Verify that TX COMP ring size is power of 2 */ +A_COMPILE_TIME_ASSERT(verify_tx_comp_ring_sz, + ((WDI_IPA_TX_COMP_RING_SZ) ^ (WDI_IPA_TX_COMP_RING_SZ-1)) == + ((WDI_IPA_TX_COMP_RING_SZ<<1)-1)); + +A_COMPILE_TIME_ASSERT(verify_Pkt_pool_sz, + WDI_IPA_TX_PKT_POOL_SZ < WDI_IPA_TX_COMP_RING_SZ); + + + +/** + * @brief WDI_IPA RX_IND_DESC + * + * |31 24|23 16|15 8|7 0| + * |----------------+----------------+----------------+----------------| + * | Packet Ptr | + * |-------------------------------------------------------------------| + * | Reserved | vdev id | Packet Length | + * |-------------------------------------------------------------------| + * + * Header fields: + * Header fields: + * - PKT_PTR + * Bits 31:0 + * Purpose: Specify pointer to starting of Ethernet Packet + * - PKT_LENGTH + * Bits 15:0 + * Purpose: Specify length Ethernet Packet + * - VDEV_ID + * Bits 23:16 + * Purpose: Specify the VDEV ID corrsponding the the packet + */ + + +#define WDI_IPA_RX_IND_DESC_SZ 8 /* bytes */ + +#define WDI_IPA_RX_IND_DESC_PKT_PTR_M 0xffffffff +#define WDI_IPA_RX_IND_DESC_PKT_PTR_S 0 + +#define WDI_IPA_RX_IND_DESC_PKT_LEN_M 0x0000ffff +#define WDI_IPA_RX_IND_DESC_PKT_LEN_S 0 + +#define WDI_IPA_RX_IND_DESC_VDEV_ID_M 0x00ff0000 +#define WDI_IPA_RX_IND_DESC_VDEV_ID_S 16 + +#define WDI_IPA_RX_IND_DESC_PKT_PTR_GET(_var) \ + (((_var) & WDI_IPA_RX_IND_DESC_PKT_PTR_M) >> \ + WDI_IPA_RX_IND_DESC_PKT_PTR_S) +#define WDI_IPA_RX_IND_DESC_PKT_PTR_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_RX_IND_DESC_PKT_PTR, _val);\ + ((_var) &= (WDI_IPA_RX_IND_DESC_PKT_PTR_M)); \ + ((_var) |= ((_val) << WDI_IPA_RX_IND_DESC_PKT_PTR_S)); \ + } while(0) + +#define WDI_IPA_RX_IND_DESC_PKT_LEN_GET(_var) \ + (((_var) & WDI_IPA_RX_IND_DESC_PKT_LEN_M) >> \ + WDI_IPA_RX_IND_DESC_PKT_LEN_S) +#define WDI_IPA_RX_IND_DESC_PKT_LEN_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_RX_IND_DESC_PKT_LEN, _val);\ + ((_var) &= (WDI_IPA_RX_IND_DESC_PKT_LEN_M)); \ + ((_var) |= ((_val) << WDI_IPA_RX_IND_DESC_PKT_LEN_S)); \ + } while(0) + +#define WDI_IPA_RX_IND_DESC_VDEV_ID_GET(_var) \ + (((_var) & WDI_IPA_RX_IND_DESC_VDEV_ID_M) >> \ + WDI_IPA_RX_IND_DESC_VDEV_ID_S) +#define WDI_IPA_RX_IND_DESC_VDEV_ID_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WDI_IPA_RX_IND_DESC_VDEV_ID, _val);\ + ((_var) &= (WDI_IPA_RX_IND_DESC_VDEV_ID_M)); \ + ((_var) |= ((_val) << WDI_IPA_RX_IND_DESC_VDEV_ID_S)); \ + } while(0) + + +PREPACK struct wdi_ipa_rx_ind_desc_t +{ + A_UINT32 pkt_ptr; /* word 0 */ + A_UINT32 /* word 1 */ + pkt_len:16, + vdev_id:8, + reserved:8; +} POSTPACK; + +#define WDI_IPA_RX_IND_RING_SZ 512 /* no. of desc */ +/* Verify that RX IND ring size is power of 2 */ +A_COMPILE_TIME_ASSERT(verify_rx_ind_ring_sz, + ((WDI_IPA_RX_IND_RING_SZ) ^ (WDI_IPA_RX_IND_RING_SZ-1)) == + ((WDI_IPA_RX_IND_RING_SZ<<1)-1)); + +/** + * @brief WLAN_WDI_IPA_DBG_STATS + * + * |31 24|23 16|15 8|7 0| + * |----------------+----------------+----------------+----------------| + * | tx comp ring base | + * |-------------------------------------------------------------------| + * | tx comp ring size | + * |-------------------------------------------------------------------| + * | tx comp ring dbell addr | + * |-------------------------------------------------------------------| + * | tx comp ring dbell ind val | + * |-------------------------------------------------------------------| + * | tx comp ring dbell cached val | + * |-------------------------------------------------------------------| + * | tx pkts enqueued | + * |-------------------------------------------------------------------| + * | tx pkts completed | + * |-------------------------------------------------------------------| + * | tx is suspend | + * |-------------------------------------------------------------------| + * | reserved0 | + * |-------------------------------------------------------------------| + * | rx ind ring base | + * |-------------------------------------------------------------------| + * | rx ind ring size | + * |-------------------------------------------------------------------| + * | rx ind ring dbell addr | + * |-------------------------------------------------------------------| + * | rx ind ring dbell ind val | + * |-------------------------------------------------------------------| + * | rx ind ring dbell cached val | + * |-------------------------------------------------------------------| + * | rx ind ring rdidx addr | + * |-------------------------------------------------------------------| + * | rx ind ring rd idx cached val | + * |-------------------------------------------------------------------| + * | rx refill idx | + * |-------------------------------------------------------------------| + * | rx num pkts indicated | + * |-------------------------------------------------------------------| + * | rx buf refilled | + * |-------------------------------------------------------------------| + * | rx num ind drop no space | + * |-------------------------------------------------------------------| + * | rx num ind drop no buf | + * |-------------------------------------------------------------------| + * | rx is suspend | + * |-------------------------------------------------------------------| + * | reserved1 | + * |-------------------------------------------------------------------| + * + * Header fields: + * Header fields: + * - TX_COMP_RING_BASE + * Bits 31:0 + * Purpose: Specifies TX_COMP RING base in DDR + * - TX_COMP_RING_SIZE + * Bits 31:0 + * Purpose: Specifies TX_COMP RING size in terms of elements + * - TX_COMP_RING_DBELL ADDR + * Bits 31:0 + * Purpose: Specifies DBELL ADDR for updating TX COMP RING write index + * - TX_COMP_RING_DBELL_IND_VAL + * Bits 31:0 + * Purpose: Specifies latest TX COMP RING write index written to + * Dbell address. + * - TX_COMP_RING_DBELL_CACHED_VAL + * Bits 31:0 + * Purpose: Specifies WLAN maintained latest TX COMP RING write index + * - TX_PKTS_ENQUEUED + * Bits 31:0 + * Purpose: Specifies total number of packets queued for transmission from + * WDI_IPA path + * - TX_PKTS_COMPLETED + * Bits 31:0 + * Purpose: Specifies total number of packets completed on WDI_IPA path + * - TX_IS_SUSPEND + * Bits 31:0 + * Purpose: Specifies whether WDI_IPA TX is suspended or not. + * - RX_IND_RING_BASE + * Bits 31:0 + * Purpose: Specifies RX_IND Ring base in DDR. + * - RX_IND_RING_SIZE + * Bits 31:0 + * Purpose: Specifies RX_IND Ring size in terms of elements. + * - RX_IND_RING_DBELL_ADDR + * Bits 31:0 + * Purpose: Specifies DBELL ADDR for updating RX_IND WR idx. + * - RX_IND_RING_DBELL_IND_VAL + * Bits 31:0 + * Purpose: Specifies latest RX IND RING write index written to + * Dbell address. + * - RX_IND_RING_DBELL_CACHED_VAL + * Bits 31:0 + * Purpose: Specifies WLAN maintained latest RX IND RING write index + * - RX_IND_RING_RDIDX_ADDR + * Bits 31:0 + * Purpose: Specifies ADDR where RX_IND Read Index is updated. + * - RX_IND_RING_RDIDX_CACHED_VAL + * Bits 31:0 + * Purpose: Specifies WLAN maintained latest RX IND Read index. + * - RX_REFILL_IDX + * Bits 31:0 + * Purpose: Specifies IDX upto which buffers are recycled from RX IND ring. + * - RX_NUM_PKTS_INDICATED + * Bits 31:0 + * Purpose: Specifies total number of RX pakets indicated on WDI_IPA path. + * - RX_NUM_BUF_REFILLED + * Bits 31:0 + * Purpose: Specifies total number of RX buffers recycled on WDI_IPA path. + * - RX_NUM_IND_DROPS_NO_SPACE + * Bits 31:0 + * Purpose: Specifies number of times RX packets dropped as + * not enough space in RX_IND ring + * - RX_NUM_IND_DROPS_NO_BUF + * Bits 31:0 + * Purpose: Specifies number of times RX packets dropped as + * not enough buffers available on WLAN + * - RX_IS_SUSPEND + * Bits 31:0 + * Purpose: Specifies whether WDI_IPA RX path is in suspend or not + */ + +#define WLAN_WDI_IPA_DBG_STATS_SZ 92 /* bytes */ + +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RESERVED0_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RESERVED0_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_S 0x0 + +#define WLAN_WDI_IPA_DBG_STATS_RESERVED1_M 0xffffffff +#define WLAN_WDI_IPA_DBG_STATS_RESERVED1_S 0x0 + + +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_M) >> \ + WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_S) +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_M) >> \ + WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_S) +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_M) >> \ + WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_S) +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_M) >> \ + WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_S) +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_S )); \ + } while(0) + + +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_M) >> \ + WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_S) +#define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_S )); \ + } while(0) + + +#define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_M) >> \ + WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_S) +#define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_M) >> \ + WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_S) +#define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_M) >> \ + WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_S) +#define WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RESERVED0_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RESERVED0_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RESERVED0_S) +#define WLAN_WDI_IPA_DBG_STATS_RESERVED0_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RESERVED0, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RESERVED0_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RESERVED0_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_S )); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_S)); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_S) +#define WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_S)); \ + } while(0) + +#define WLAN_WDI_IPA_DBG_STATS_RESERVED1_GET(_var) \ + (((_var) & WLAN_WDI_IPA_DBG_STATS_RESERVED1_M) >> \ + WLAN_WDI_IPA_DBG_STATS_RESERVED1_S) +#define WLAN_WDI_IPA_DBG_STATS_RESERVED1_SET(_var, _val) \ + do { \ + WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RESERVED1, _val);\ + ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RESERVED1_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RESERVED1_S )); \ + } while(0) + + +PREPACK struct wlan_wdi_ipa_dbg_stats_t +{ + A_UINT32 tx_comp_ring_base; /* word 0 */ + A_UINT32 tx_comp_ring_size; /* word 1 */ + A_UINT32 tx_comp_ring_dbell_addr; /* word 2 */ + A_UINT32 tx_comp_ring_dbell_ind_val; /* word 3 */ + A_UINT32 tx_comp_ring_dbell_cached_val; /* word 4 */ + A_UINT32 tx_pkts_enqueued; /* word 5 */ + A_UINT32 tx_pkts_completed; /* word 6 */ + A_UINT32 tx_is_suspend; /* word 7 */ + A_UINT32 reserved0; /* word 8 */ + + A_UINT32 rx_ind_ring_base; /* word 9 */ + A_UINT32 rx_ind_ring_size; /* word 10 */ + A_UINT32 rx_ind_ring_dbell_addr; /* word 11 */ + A_UINT32 rx_ind_ring_dbell_ind_val; /* word 12 */ + A_UINT32 rx_ind_ring_dbell_cached_val; /* word 13 */ + A_UINT32 rx_ind_ring_rdidx_addr; /* word 14 */ + A_UINT32 rx_ind_ring_rdidx_cached_val; /* word 15 */ + A_UINT32 rx_refill_idx; /* word 16 */ + A_UINT32 rx_num_pkts_indicated; /* word 17 */ + A_UINT32 rx_buf_refilled; /* word 18 */ + A_UINT32 rx_num_ind_drops_no_space; /* word 19 */ + A_UINT32 rx_num_ind_drops_no_buf; /* word 20 */ + A_UINT32 rx_is_suspend; /* word 21 */ + A_UINT32 reserved1; /* word 22 */ +} POSTPACK; + +/** + * @brief WLAN_WDI_IPA_GET_SHARING_STATS_REQ + * + * |31 24|23 16|15 8|7 0| + * |----------------+----------------+----------------+----------------| + * | reserved | reset_stats | + * |-------------------------------------------------------------------| + * Header fields: + * - RESET_STATS + * Bits 7:0 + * Purpose: when 1, FW clears sharing stats + * - RESERVED + * Bits 31:8 + * Purpose: reserved bits + **/ + +#define WLAN_WDI_IPA_GET_SHARING_STATS_REQ_SZ 4 /* bytes */ + +#define WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_M 0x000000ff +#define WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_S)); \ + } while(0) + +PREPACK struct wlan_wdi_ipa_get_sharing_stats_req_t { + A_UINT32 reset_stats:8, + reserved:24; +} POSTPACK; + +/* + * Response-type specific info for HTT_WDI_IPA_OPCODE_GET_SHARING_STATS + * + */ +/** + * @brief WLAN_WDI_IPA_GET_SHARING_STATS_RESP + * + * |31 24|23 16|15 8|7 0| + * |----------------+----------------+----------------+----------------| + * | ipv4_rx_packets_lo | + * |-------------------------------------------------------------------| + * | ipv4_rx_packets_hi | + * |-------------------------------------------------------------------| + * | ipv4_rx_bytes_lo | + * |-------------------------------------------------------------------| + * | ipv4_rx_bytes_lo | + * |-------------------------------------------------------------------| + * | ipv6_rx_packets_lo | + * |-------------------------------------------------------------------| + * | ipv6_rx_packets_hi | + * |-------------------------------------------------------------------| + * | ipv6_rx_bytes_lo | + * |-------------------------------------------------------------------| + * | ipv6_rx_bytes_hi | + * |-------------------------------------------------------------------| + * | ipv4_tx_packets_lo | + * |-------------------------------------------------------------------| + * | ipv4_tx_packets_hi | + * |-------------------------------------------------------------------| + * | ipv4_tx_bytes_lo | + * |-------------------------------------------------------------------| + * | ipv4_tx_bytes_lo | + * |-------------------------------------------------------------------| + * | ipv6_tx_packets_lo | + * |-------------------------------------------------------------------| + * | ipv6_tx_packets_hi | + * |-------------------------------------------------------------------| + * | ipv6_tx_bytes_lo | + * |-------------------------------------------------------------------| + * | ipv6_tx_bytes_hi | + * |-------------------------------------------------------------------| + * + * Header fields: + * - ipv4_rx_packets_lo + * Bits 31:0 + * Purpose: number of IPv4 RX packets, low 32-bit + * - ipv4_rx_packets_hi + * Bits 31:0 + * Purpose: number of IPv4 RX packets, high 32-bit + * - ipv4_rx_bytes_lo + * Bits 31:0 + * Purpose: bytes of IPv4 RX packets, low 32-bit + * - ipv4_rx_bytes_lo + * Bits 31:0 + * Purpose: bytes of IPv4 RX packets, low 32-bit + * - ipv6_rx_packets_lo + * Bits 31:0 + * Purpose: number of IPv6 RX packets, low 32-bit + * - ipv6_rx_packets_hi + * Bits 31:0 + * Purpose: number of IPv6 RX packets, high 32-bit + * - ipv6_rx_bytes_lo + * Bits 31:0 + * Purpose: bytes of IPv6 RX packets, low 32-bit + * - ipv6_rx_bytes_lo + * Bits 31:0 + * Purpose: bytes of IPv6 RX packets, low 32-bit + * - ipv4_tx_packets_lo + * Bits 31:0 + * Purpose: number of IPv4 TX packets, low 32-bit + * - ipv4_tx_packets_hi + * Bits 31:0 + * Purpose: number of IPv4 TX packets, high 32-bit + * - ipv4_tx_bytes_lo + * Bits 31:0 + * Purpose: bytes of IPv4 TX packets, low 32-bit + * - ipv4_tx_bytes_lo + * Bits 31:0 + * Purpose: bytes of IPv4 TX packets, low 32-bit + * - ipv6_tx_packets_lo + * Bits 31:0 + * Purpose: number of IPv6 TX packets, low 32-bit + * - ipv6_tx_packets_hi + * Bits 31:0 + * Purpose: number of IPv6 TX packets, high 32-bit + * - ipv6_tx_bytes_lo + * Bits 31:0 + * Purpose: bytes of IPv6 TX packets, low 32-bit + * - ipv6_tx_bytes_lo + * Bits 31:0 + * Purpose: bytes of IPv6 TX packets, low 32-bit + * + **/ + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_SZ 64 /* bytes */ + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_M 0xffffffff +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_S 0x0 + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_S)); \ + } while(0) + +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_GET(_var) \ + (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_M) >> \ + WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_S) +#define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_S)); \ + } while(0) + +PREPACK struct wlan_wdi_ipa_get_sharing_stats_resp_t { + A_UINT32 ipv4_rx_packets_lo; + A_UINT32 ipv4_rx_packets_hi; + A_UINT32 ipv4_rx_bytes_lo; + A_UINT32 ipv4_rx_bytes_hi; + A_UINT32 ipv6_rx_packets_lo; + A_UINT32 ipv6_rx_packets_hi; + A_UINT32 ipv6_rx_bytes_lo; + A_UINT32 ipv6_rx_bytes_hi; + + A_UINT32 ipv4_tx_packets_lo; + A_UINT32 ipv4_tx_packets_hi; + A_UINT32 ipv4_tx_bytes_lo; + A_UINT32 ipv4_tx_bytes_hi; + A_UINT32 ipv6_tx_packets_lo; + A_UINT32 ipv6_tx_packets_hi; + A_UINT32 ipv6_tx_bytes_lo; + A_UINT32 ipv6_tx_bytes_hi; +} POSTPACK; + +/** + * @brief WLAN_WDI_IPA_SET_QUOTA_REQ + * + * |31 24|23 16|15 8|7 0| + * |----------------+----------------+----------------+----------------| + * | reserved | set_quota | + * |-------------------------------------------------------------------| + * | quota_lo | + * |-------------------------------------------------------------------| + * | quota_hi | + * |-------------------------------------------------------------------| + * Header fields: + * - set_quota + * Bits 7:0 + * Purpose: when 1, FW configures quota and starts quota monitoring. when 0, FW stops. + * - RESERVED + * Bits 31:8 + * Purpose: reserved bits + * - quota_lo + * Bits 31:0 + * Purpose: bytes of quota to be set, low 32-bit. + * It is accumulated number of bytes from when quota is configured. + * - quota_hi + * Bits 31:0 + * Purpose: bytes of quota to be set, high 32-bit + **/ + +#define WLAN_WDI_IPA_SET_QUOTA_REQ_SZ 12 /* bytes */ + +#define WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_M 0x000000ff +#define WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_S 0x0 + +#define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_M 0xffffffff +#define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_S 0x0 + +#define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_M 0xffffffff +#define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_S 0x0 + +#define WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_GET(_var) \ + (((_var) & WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_M) >> \ + WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_S) +#define WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_S)); \ + } while(0) + +#define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_GET(_var) \ + (((_var) & WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_M) >> \ + WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_S) +#define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_S)); \ + } while(0) + +#define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_GET(_var) \ + (((_var) & WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_M) >> \ + WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_S) +#define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_S)); \ + } while(0) + +PREPACK struct wlan_wdi_ipa_set_quota_req_t { + A_UINT32 set_quota:8, + reserved:24; + A_UINT32 quota_lo; + A_UINT32 quota_hi; +} POSTPACK; + +/** + * @brief WLAN_WDI_IPA_SET_QUOTA_RESP + * + * |31 24|23 16|15 8|7 0| + * |----------------+----------------+----------------+----------------| + * | reserved | success | + * |-------------------------------------------------------------------| + * | total_bytes_lo | + * |-------------------------------------------------------------------| + * | total_bytes_hi | + * |-------------------------------------------------------------------| + * Header fields: + * - success + * Bits 7:0 + * Purpose: when 1, FW successfully sets the quota. + * when 0, FW rejects because quota is smaller than current total + * bytes. + * - total_bytes_lo + * Bits 31:0 + * Purpose: total bytes so far when the quota is configured, low 32-bit. + * It is accumulated number of bytes when quota is configured. + * - total_bytes_hi + * Bits 31:0 + * Purpose: total bytes, high 32-bit + **/ + +#define WLAN_WDI_IPA_SET_QUOTA_RESP_SZ 12 /* bytes */ + +#define WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_M 0x000000ff +#define WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_S 0x0 + +#define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_M 0xffffffff +#define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_S 0x0 + +#define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_M 0xffffffff +#define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_S 0x0 + +#define WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_GET(_var) \ + (((_var) & WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_M) >> \ + WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_S) +#define WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_S)); \ + } while(0) + +#define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_GET(_var) \ + (((_var) & WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_M) >> \ + WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_S) +#define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_S)); \ + } while(0) + +#define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_GET(_var) \ + (((_var) & WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_M) >> \ + WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_S) +#define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_S)); \ + } while(0) + +PREPACK struct wlan_wdi_ipa_set_quota_resp_t { + A_UINT32 success:8, + reserved:24; + A_UINT32 total_bytes_lo; + A_UINT32 total_bytes_hi; +} POSTPACK; + +/** + * @brief WLAN_WDI_IPA_QUOTA_IND_T + * + * |31 24|23 16|15 8|7 0| + * |----------------+----------------+----------------+----------------| + * | total_bytes_lo | + * |-------------------------------------------------------------------| + * | total_bytes_hi | + * |-------------------------------------------------------------------| + * Header fields: + * - total_bytes_lo + * Bits 31:0 + * Purpose: accumulated bytes of packets through sharing interface + * when reaching to quota, low 32-bit + * - total_bytes_hi + * Bits 31:0 + * Purpose: total bytes, high 32-bit + **/ + +#define WLAN_WDI_IPA_QUOTA_IND_SZ 8 /* bytes */ + +#define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_M 0xffffffff +#define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_S 0x0 + +#define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_M 0xffffffff +#define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_S 0x0 + +#define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_GET(_var) \ + (((_var) & WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_M) >> \ + WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_S) +#define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_S)); \ + } while(0) + +#define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_GET(_var) \ + (((_var) & WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_M) >> \ + WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_S) +#define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_SET(_var, _val) \ + do { \ + ((_var) &= (WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_M)); \ + ((_var) |= ((_val) << WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_S)); \ + } while(0) + +PREPACK struct wlan_wdi_ipa_quota_ind_t { + A_UINT32 total_bytes_lo; + A_UINT32 total_bytes_hi; +} POSTPACK; + +#endif /* _WDI_IPA_H_ */ |
