diff --git a/fw/htt_stats.h b/fw/htt_stats.h index a68c7236cd4f..ff3bed307d58 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -2103,17 +2103,10 @@ typedef htt_stats_rx_tid_details_tlv htt_rx_tid_stats_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; - /** - * BIT [15: 0] : sw_peer_id - * BIT [31:16] : tid_num - */ - union { - A_UINT32 sw_peer_id__tid_num; - struct { - A_UINT32 sw_peer_id : 16, - tid_num : 16; - }; - }; + /* Lower 4 bytes (bytes 0-3) of the MAC address */ + A_UINT32 peer_mac_addr_31_0; + /* Upper 2 bytes (bytes 4-5) of MAC, and TID (1 byte) */ + A_UINT32 peer_mac_addr_47_32_and_tid_num; /** * BIT [11: 0] : Starting Sequence number of the session, @@ -2245,23 +2238,44 @@ typedef struct { A_UINT32 pn_size; } htt_stats_rx_peer_tid_reo_queue_ba_tlv; -#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_SW_PEER_ID_TID_DWORD_OFFSET 1 - -/* Macros for sw_peer_id and tid_num */ -#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_SW_PEER_ID_M 0x0000ffff -#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_SW_PEER_ID_S 0 -#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_TID_NUM_M 0xffff0000 -#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_TID_NUM_S 16 - -#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_SW_PEER_ID_GET(_var) \ - (((_var) & HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_SW_PEER_ID_M) >> \ - HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_SW_PEER_ID_S) - -#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_SW_PEER_ID_SET(_var, _val) \ +#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MAC_ADDR_SET(_tlv_ptr, _mac_addr_ptr) \ do { \ - HTT_CHECK_SET_VAL(HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_SW_PEER_ID, _val); \ - ((_var) |= ((_val) << HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_SW_PEER_ID_S)); \ + A_UINT32 __packed_mac_47_32; \ + /* Pack MAC addr bytes [0-3] into peer_mac_addr_31_0 */ \ + (_tlv_ptr)->peer_mac_addr_31_0 = (A_UINT32) \ + (((_mac_addr_ptr)[0] << 0) | \ + ((_mac_addr_ptr)[1] << 8) | \ + ((_mac_addr_ptr)[2] << 16) | \ + ((_mac_addr_ptr)[3] << 24)); \ + /* + * Pack MAC addr bytes [4-5] into the LOWER 16 bits of + * peer_mac_addr_47_32_and_tid_num + */ \ + __packed_mac_47_32 = (A_UINT32) \ + (((_mac_addr_ptr)[4] << 0) | \ + ((_mac_addr_ptr)[5] << 8)); \ + /* + * Set lower 16 bits of peer_mac_addr_47_32_and_tid_num, + * preserving upper 16 bits (which includes the TID) if already set + */ \ + (_tlv_ptr)->peer_mac_addr_47_32_and_tid_num &= ~0x0000FFFF; /* Clear existing MAC addr bits (lower 16) */ \ + (_tlv_ptr)->peer_mac_addr_47_32_and_tid_num |= __packed_mac_47_32; \ } while (0) +#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MAC_ADDR_GET(_tlv_ptr, _dest_mac_addr_ptr) \ + do { \ + A_UINT32 __mac_31_0_val = (_tlv_ptr)->peer_mac_addr_31_0; \ + /* Extract MAC bytes [4-5] from the LOWER 16 bits of peer_mac_addr_47_32_and_tid */ \ + A_UINT32 __mac_47_32_val = ((_tlv_ptr)->peer_mac_addr_47_32_and_tid_num) & 0xFFFF; \ + (_dest_mac_addr_ptr)[0] = (A_UINT8)((__mac_31_0_val >> 0) & 0xFF); \ + (_dest_mac_addr_ptr)[1] = (A_UINT8)((__mac_31_0_val >> 8) & 0xFF); \ + (_dest_mac_addr_ptr)[2] = (A_UINT8)((__mac_31_0_val >> 16) & 0xFF); \ + (_dest_mac_addr_ptr)[3] = (A_UINT8)((__mac_31_0_val >> 24) & 0xFF); \ + (_dest_mac_addr_ptr)[4] = (A_UINT8)((__mac_47_32_val >> 0) & 0xFF); \ + (_dest_mac_addr_ptr)[5] = (A_UINT8)((__mac_47_32_val >> 8) & 0xFF); \ + } while (0) + +#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_TID_NUM_M 0x00FF0000 /* Mask for TID_NUM */ +#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_TID_NUM_S 16 /* Shift for TID_NUM */ #define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_TID_NUM_GET(_var) \ (((_var) & HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_TID_NUM_M) >> \