xref: /wlan-driver/qca-wifi-host-cmn/hal/wifi3.0/be/hal_be_rx_tlv.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name #ifndef _HAL_BE_RX_TLV_H_
21*5113495bSYour Name #define _HAL_BE_RX_TLV_H_
22*5113495bSYour Name 
23*5113495bSYour Name #include "hal_api_mon.h"
24*5113495bSYour Name 
25*5113495bSYour Name /*
26*5113495bSYour Name  * Structures & Macros to obtain fields from the TLV's in the Rx packet
27*5113495bSYour Name  * pre-header.
28*5113495bSYour Name  */
29*5113495bSYour Name 
30*5113495bSYour Name #ifdef CONFIG_4_BYTES_TLV_TAG
31*5113495bSYour Name #define TLV_TAG_T uint32_t
32*5113495bSYour Name #else
33*5113495bSYour Name #define TLV_TAG_T uint64_t
34*5113495bSYour Name #endif
35*5113495bSYour Name 
36*5113495bSYour Name #define HAL_RX_BE_PKT_HDR_TLV_LEN		112
37*5113495bSYour Name 
38*5113495bSYour Name #ifndef BIG_ENDIAN_HOST
39*5113495bSYour Name struct rx_pkt_hdr_tlv {
40*5113495bSYour Name 	TLV_TAG_T tag;					/* TLV_TAG_T B */
41*5113495bSYour Name 	uint32_t reserved_0				: 16, /* 4 B */
42*5113495bSYour Name 		 phy_ppdu_id				: 16;
43*5113495bSYour Name 	uint32_t reserved_1a;				/* 4 B */
44*5113495bSYour Name 	char rx_pkt_hdr[HAL_RX_BE_PKT_HDR_TLV_LEN];	/* 112 B */
45*5113495bSYour Name };
46*5113495bSYour Name #else
47*5113495bSYour Name struct rx_pkt_hdr_tlv {
48*5113495bSYour Name 	TLV_TAG_T tag;					/* TLV_TAG_T B */
49*5113495bSYour Name 	uint32_t phy_ppdu_id				: 16, /* 4 B */
50*5113495bSYour Name 		 reserved_0				: 16;
51*5113495bSYour Name 	uint32_t reserved_1a;				/* 4 B */
52*5113495bSYour Name 	char rx_pkt_hdr[HAL_RX_BE_PKT_HDR_TLV_LEN];	/* 112 B */
53*5113495bSYour Name };
54*5113495bSYour Name #endif
55*5113495bSYour Name 
56*5113495bSYour Name 
57*5113495bSYour Name #ifdef CONFIG_WORD_BASED_TLV
58*5113495bSYour Name #ifndef BIG_ENDIAN_HOST
59*5113495bSYour Name struct rx_msdu_end_compact {
60*5113495bSYour Name 	uint32_t sa_sw_peer_id				: 16,
61*5113495bSYour Name 		 sa_idx_timeout				:  1,
62*5113495bSYour Name 		 da_idx_timeout				:  1,
63*5113495bSYour Name 		 to_ds					:  1,
64*5113495bSYour Name 		 tid					:  4,
65*5113495bSYour Name 		 sa_is_valid				:  1,
66*5113495bSYour Name 		 da_is_valid				:  1,
67*5113495bSYour Name 		 da_is_mcbc				:  1,
68*5113495bSYour Name 		 l3_header_padding			:  2,
69*5113495bSYour Name 		 first_msdu				:  1,
70*5113495bSYour Name 		 last_msdu				:  1,
71*5113495bSYour Name 		 fr_ds					:  1,
72*5113495bSYour Name 		 ip_chksum_fail_copy			:  1;
73*5113495bSYour Name 	uint32_t sa_idx					: 16,
74*5113495bSYour Name 		 da_idx_or_sw_peer_id			: 16;
75*5113495bSYour Name 	uint32_t msdu_drop				:  1,
76*5113495bSYour Name 		 reo_destination_indication		:  5,
77*5113495bSYour Name 		 flow_idx				: 20,
78*5113495bSYour Name 		 use_ppe				:  1,
79*5113495bSYour Name 		 mesh_sta				:  2,
80*5113495bSYour Name 		 vlan_ctag_stripped			:  1,
81*5113495bSYour Name 		 vlan_stag_stripped			:  1,
82*5113495bSYour Name 		 fragment_flag				:  1;
83*5113495bSYour Name 	uint32_t fse_metadata				: 32;
84*5113495bSYour Name 	uint32_t cce_metadata				: 16,
85*5113495bSYour Name 		 tcp_udp_chksum				: 16;
86*5113495bSYour Name 	uint32_t aggregation_count			:  8,
87*5113495bSYour Name 		 flow_aggregation_continuation		:  1,
88*5113495bSYour Name 		 fisa_timeout				:  1,
89*5113495bSYour Name 		 tcp_udp_chksum_fail_copy		:  1,
90*5113495bSYour Name 		 msdu_limit_error			:  1,
91*5113495bSYour Name 		 flow_idx_timeout			:  1,
92*5113495bSYour Name 		 flow_idx_invalid			:  1,
93*5113495bSYour Name 		 cce_match				:  1,
94*5113495bSYour Name 		 amsdu_parser_error			:  1,
95*5113495bSYour Name 		 cumulative_ip_length			: 16;
96*5113495bSYour Name 	uint32_t key_id_octet				:  8,
97*5113495bSYour Name 		 reserved_8a				: 24;
98*5113495bSYour Name 	uint32_t reserved_9a				:  6,
99*5113495bSYour Name 		 service_code				:  9,
100*5113495bSYour Name 		 priority_valid				:  1,
101*5113495bSYour Name 		 intra_bss				:  1,
102*5113495bSYour Name 		 dest_chip_id				:  2,
103*5113495bSYour Name 		 multicast_echo				:  1,
104*5113495bSYour Name 		 wds_learning_event			:  1,
105*5113495bSYour Name 		 wds_roaming_event			:  1,
106*5113495bSYour Name 		 wds_keep_alive_event			:  1,
107*5113495bSYour Name 		 dest_chip_pmac_id			:  1,
108*5113495bSYour Name 		 reserved_9b				:  8;
109*5113495bSYour Name 	uint32_t msdu_length				: 14,
110*5113495bSYour Name 		 stbc					:  1,
111*5113495bSYour Name 		 ipsec_esp				:  1,
112*5113495bSYour Name 		 l3_offset				:  7,
113*5113495bSYour Name 		 ipsec_ah				:  1,
114*5113495bSYour Name 		 l4_offset				:  8;
115*5113495bSYour Name 	uint32_t msdu_number				:  8,
116*5113495bSYour Name 		 decap_format				:  2,
117*5113495bSYour Name 		 ipv4_proto				:  1,
118*5113495bSYour Name 		 ipv6_proto				:  1,
119*5113495bSYour Name 		 tcp_proto				:  1,
120*5113495bSYour Name 		 udp_proto				:  1,
121*5113495bSYour Name 		 ip_frag				:  1,
122*5113495bSYour Name 		 tcp_only_ack				:  1,
123*5113495bSYour Name 		 da_is_bcast_mcast			:  1,
124*5113495bSYour Name 		 toeplitz_hash_sel			:  2,
125*5113495bSYour Name 		 ip_fixed_header_valid			:  1,
126*5113495bSYour Name 		 ip_extn_header_valid			:  1,
127*5113495bSYour Name 		 tcp_udp_header_valid			:  1,
128*5113495bSYour Name 		 mesh_control_present			:  1,
129*5113495bSYour Name 		 ldpc					:  1,
130*5113495bSYour Name 		 ip4_protocol_ip6_next_header		:  8;
131*5113495bSYour Name 	uint32_t vlan_ctag_ci				: 16,
132*5113495bSYour Name 		 vlan_stag_ci				: 16;
133*5113495bSYour Name 	uint32_t peer_meta_data				: 32;
134*5113495bSYour Name 	uint32_t user_rssi				:  8,
135*5113495bSYour Name 		 pkt_type				:  4,
136*5113495bSYour Name 		 sgi					:  2,
137*5113495bSYour Name 		 rate_mcs				:  4,
138*5113495bSYour Name 		 receive_bandwidth			:  3,
139*5113495bSYour Name 		 reception_type				:  3,
140*5113495bSYour Name 		 mimo_ss_bitmap				:  7,
141*5113495bSYour Name 		 msdu_done_copy				:  1;
142*5113495bSYour Name 	uint32_t flow_id_toeplitz			: 32;
143*5113495bSYour Name 	uint32_t ppdu_start_timestamp_63_32;
144*5113495bSYour Name 	uint32_t sw_phy_meta_data			: 32;
145*5113495bSYour Name 	uint32_t first_mpdu				:  1,
146*5113495bSYour Name 		 reserved_16a				:  1,
147*5113495bSYour Name 		 mcast_bcast				:  1,
148*5113495bSYour Name 		 ast_index_not_found			:  1,
149*5113495bSYour Name 		 ast_index_timeout			:  1,
150*5113495bSYour Name 		 power_mgmt				:  1,
151*5113495bSYour Name 		 non_qos				:  1,
152*5113495bSYour Name 		 null_data				:  1,
153*5113495bSYour Name 		 mgmt_type				:  1,
154*5113495bSYour Name 		 ctrl_type				:  1,
155*5113495bSYour Name 		 more_data				:  1,
156*5113495bSYour Name 		 eosp					:  1,
157*5113495bSYour Name 		 a_msdu_error				:  1,
158*5113495bSYour Name 		 reserved_16b				:  1,
159*5113495bSYour Name 		 order					:  1,
160*5113495bSYour Name 		 wifi_parser_error			:  1,
161*5113495bSYour Name 		 overflow_err				:  1,
162*5113495bSYour Name 		 msdu_length_err			:  1,
163*5113495bSYour Name 		 tcp_udp_chksum_fail			:  1,
164*5113495bSYour Name 		 ip_chksum_fail				:  1,
165*5113495bSYour Name 		 sa_idx_invalid				:  1,
166*5113495bSYour Name 		 da_idx_invalid				:  1,
167*5113495bSYour Name 		 amsdu_addr_mismatch			:  1,
168*5113495bSYour Name 		 rx_in_tx_decrypt_byp			:  1,
169*5113495bSYour Name 		 encrypt_required			:  1,
170*5113495bSYour Name 		 directed				:  1,
171*5113495bSYour Name 		 buffer_fragment			:  1,
172*5113495bSYour Name 		 mpdu_length_err			:  1,
173*5113495bSYour Name 		 tkip_mic_err				:  1,
174*5113495bSYour Name 		 decrypt_err				:  1,
175*5113495bSYour Name 		 unencrypted_frame_err			:  1,
176*5113495bSYour Name 		 fcs_err				:  1;
177*5113495bSYour Name 	uint32_t reserved_17a				: 10,
178*5113495bSYour Name 		 decrypt_status_code			:  3,
179*5113495bSYour Name 		 rx_bitmap_not_updated			:  1,
180*5113495bSYour Name 		 reserved_17b				: 17,
181*5113495bSYour Name 		 msdu_done				:  1;
182*5113495bSYour Name };
183*5113495bSYour Name 
184*5113495bSYour Name struct rx_mpdu_start_compact {
185*5113495bSYour Name 	uint32_t rx_reo_queue_desc_addr_39_32		:  8,
186*5113495bSYour Name 		 receive_queue_number			: 16,
187*5113495bSYour Name 		 pre_delim_err_warning			:  1,
188*5113495bSYour Name 		 first_delim_err			:  1,
189*5113495bSYour Name 		 reserved_0				:  6;
190*5113495bSYour Name 	uint32_t pn_31_0				: 32;
191*5113495bSYour Name 	uint32_t pn_63_32				: 32;
192*5113495bSYour Name 	uint32_t pn_95_64				: 32;
193*5113495bSYour Name 	uint32_t ast_index				: 16,
194*5113495bSYour Name 		 sw_peer_id				: 16;
195*5113495bSYour Name 	uint32_t mpdu_frame_control_valid		:  1,
196*5113495bSYour Name 		 mpdu_duration_valid			:  1,
197*5113495bSYour Name 		 mac_addr_ad1_valid			:  1,
198*5113495bSYour Name 		 mac_addr_ad2_valid			:  1,
199*5113495bSYour Name 		 mac_addr_ad3_valid			:  1,
200*5113495bSYour Name 		 mac_addr_ad4_valid			:  1,
201*5113495bSYour Name 		 mpdu_sequence_control_valid		:  1,
202*5113495bSYour Name 		 mpdu_qos_control_valid			:  1,
203*5113495bSYour Name 		 mpdu_ht_control_valid			:  1,
204*5113495bSYour Name 		 frame_encryption_info_valid		:  1,
205*5113495bSYour Name 		 mpdu_fragment_number			:  4,
206*5113495bSYour Name 		 more_fragment_flag			:  1,
207*5113495bSYour Name 		 reserved_7a				:  1,
208*5113495bSYour Name 		 fr_ds					:  1,
209*5113495bSYour Name 		 to_ds					:  1,
210*5113495bSYour Name 		 encrypted				:  1,
211*5113495bSYour Name 		 mpdu_retry				:  1,
212*5113495bSYour Name 		 mpdu_sequence_number			: 12;
213*5113495bSYour Name 	uint32_t mpdu_frame_control_field		: 16,
214*5113495bSYour Name 		 mpdu_duration_field			: 16;
215*5113495bSYour Name 	uint32_t mac_addr_ad1_31_0			: 32;
216*5113495bSYour Name 	uint32_t mac_addr_ad1_47_32			: 16,
217*5113495bSYour Name 		 mac_addr_ad2_15_0			: 16;
218*5113495bSYour Name 	uint32_t mac_addr_ad2_47_16			: 32;
219*5113495bSYour Name 	uint32_t mac_addr_ad3_31_0			: 32;
220*5113495bSYour Name 	uint32_t mac_addr_ad3_47_32			: 16,
221*5113495bSYour Name 		 mpdu_sequence_control_field		: 16;
222*5113495bSYour Name };
223*5113495bSYour Name #else
224*5113495bSYour Name struct rx_msdu_end_compact {
225*5113495bSYour Name 	uint32_t ip_chksum_fail_copy			:  1,
226*5113495bSYour Name 		 fr_ds					:  1,
227*5113495bSYour Name 		 last_msdu				:  1,
228*5113495bSYour Name 		 first_msdu				:  1,
229*5113495bSYour Name 		 l3_header_padding			:  2,
230*5113495bSYour Name 		 da_is_mcbc				:  1,
231*5113495bSYour Name 		 da_is_valid				:  1,
232*5113495bSYour Name 		 sa_is_valid				:  1,
233*5113495bSYour Name 		 tid					:  4,
234*5113495bSYour Name 		 to_ds					:  1,
235*5113495bSYour Name 		 da_idx_timeout				:  1,
236*5113495bSYour Name 		 sa_idx_timeout				:  1,
237*5113495bSYour Name 		 sa_sw_peer_id				: 16;
238*5113495bSYour Name 	uint32_t da_idx_or_sw_peer_id			: 16,
239*5113495bSYour Name 		 sa_idx					: 16;
240*5113495bSYour Name 	uint32_t fragment_flag				:  1,
241*5113495bSYour Name 		 vlan_stag_stripped			:  1,
242*5113495bSYour Name 		 vlan_ctag_stripped			:  1,
243*5113495bSYour Name 		 mesh_sta				:  2,
244*5113495bSYour Name 		 use_ppe				:  1,
245*5113495bSYour Name 		 flow_idx				: 20,
246*5113495bSYour Name 		 reo_destination_indication		:  5,
247*5113495bSYour Name 		 msdu_drop				:  1;
248*5113495bSYour Name 	uint32_t fse_metadata				: 32;
249*5113495bSYour Name 	uint32_t tcp_udp_chksum				: 16,
250*5113495bSYour Name 		 cce_metadata				: 16;
251*5113495bSYour Name 	uint32_t cumulative_ip_length			: 16,
252*5113495bSYour Name 		 amsdu_parser_error			:  1,
253*5113495bSYour Name 		 cce_match				:  1,
254*5113495bSYour Name 		 flow_idx_invalid			:  1,
255*5113495bSYour Name 		 flow_idx_timeout			:  1,
256*5113495bSYour Name 		 msdu_limit_error			:  1,
257*5113495bSYour Name 		 tcp_udp_chksum_fail_copy		:  1,
258*5113495bSYour Name 		 fisa_timeout				:  1,
259*5113495bSYour Name 		 flow_aggregation_continuation		:  1,
260*5113495bSYour Name 		 aggregation_count			:  8;
261*5113495bSYour Name 	uint32_t reserved_8a				: 24,
262*5113495bSYour Name 		 key_id_octet				:  8;
263*5113495bSYour Name 	uint32_t reserved_9b				:  8,
264*5113495bSYour Name 		 dest_chip_pmac_id			:  1,
265*5113495bSYour Name 		 wds_keep_alive_event			:  1,
266*5113495bSYour Name 		 wds_roaming_event			:  1,
267*5113495bSYour Name 		 wds_learning_event			:  1,
268*5113495bSYour Name 		 multicast_echo				:  1,
269*5113495bSYour Name 		 dest_chip_id				:  2,
270*5113495bSYour Name 		 intra_bss				:  1,
271*5113495bSYour Name 		 priority_valid				:  1,
272*5113495bSYour Name 		 service_code				:  9,
273*5113495bSYour Name 		 reserved_9a				:  6;
274*5113495bSYour Name 	uint32_t l4_offset				:  8,
275*5113495bSYour Name 		 ipsec_ah				:  1,
276*5113495bSYour Name 		 l3_offset				:  7,
277*5113495bSYour Name 		 ipsec_esp				:  1,
278*5113495bSYour Name 		 stbc					:  1,
279*5113495bSYour Name 		 msdu_length				: 14;
280*5113495bSYour Name 	uint32_t ip4_protocol_ip6_next_header		:  8,
281*5113495bSYour Name 		 ldpc					:  1,
282*5113495bSYour Name 		 mesh_control_present			:  1,
283*5113495bSYour Name 		 tcp_udp_header_valid			:  1,
284*5113495bSYour Name 		 ip_extn_header_valid			:  1,
285*5113495bSYour Name 		 ip_fixed_header_valid			:  1,
286*5113495bSYour Name 		 toeplitz_hash_sel			:  2,
287*5113495bSYour Name 		 da_is_bcast_mcast			:  1,
288*5113495bSYour Name 		 tcp_only_ack				:  1,
289*5113495bSYour Name 		 ip_frag				:  1,
290*5113495bSYour Name 		 udp_proto				:  1,
291*5113495bSYour Name 		 tcp_proto				:  1,
292*5113495bSYour Name 		 ipv6_proto				:  1,
293*5113495bSYour Name 		 ipv4_proto				:  1,
294*5113495bSYour Name 		 decap_format				:  2,
295*5113495bSYour Name 		 msdu_number				:  8;
296*5113495bSYour Name 	uint32_t vlan_stag_ci				: 16,
297*5113495bSYour Name 		 vlan_ctag_ci				: 16;
298*5113495bSYour Name 	uint32_t peer_meta_data				: 32;
299*5113495bSYour Name 	uint32_t msdu_done_copy				:  1,
300*5113495bSYour Name 		 mimo_ss_bitmap				:  7,
301*5113495bSYour Name 		 reception_type				:  3,
302*5113495bSYour Name 		 receive_bandwidth			:  3,
303*5113495bSYour Name 		 rate_mcs				:  4,
304*5113495bSYour Name 		 sgi					:  2,
305*5113495bSYour Name 		 pkt_type				:  4,
306*5113495bSYour Name 		 user_rssi				:  8;
307*5113495bSYour Name 	uint32_t flow_id_toeplitz			: 32;
308*5113495bSYour Name 	uint32_t ppdu_start_timestamp_63_32;
309*5113495bSYour Name 	uint32_t sw_phy_meta_data			: 32;
310*5113495bSYour Name 	uint32_t fcs_err				:  1,
311*5113495bSYour Name 		 unencrypted_frame_err			:  1,
312*5113495bSYour Name 		 decrypt_err				:  1,
313*5113495bSYour Name 		 tkip_mic_err				:  1,
314*5113495bSYour Name 		 mpdu_length_err			:  1,
315*5113495bSYour Name 		 buffer_fragment			:  1,
316*5113495bSYour Name 		 directed				:  1,
317*5113495bSYour Name 		 encrypt_required			:  1,
318*5113495bSYour Name 		 rx_in_tx_decrypt_byp			:  1,
319*5113495bSYour Name 		 amsdu_addr_mismatch			:  1,
320*5113495bSYour Name 		 da_idx_invalid				:  1,
321*5113495bSYour Name 		 sa_idx_invalid				:  1,
322*5113495bSYour Name 		 ip_chksum_fail				:  1,
323*5113495bSYour Name 		 tcp_udp_chksum_fail			:  1,
324*5113495bSYour Name 		 msdu_length_err			:  1,
325*5113495bSYour Name 		 overflow_err				:  1,
326*5113495bSYour Name 		 wifi_parser_error			:  1,
327*5113495bSYour Name 		 order					:  1,
328*5113495bSYour Name 		 reserved_16b				:  1,
329*5113495bSYour Name 		 a_msdu_error				:  1,
330*5113495bSYour Name 		 eosp					:  1,
331*5113495bSYour Name 		 more_data				:  1,
332*5113495bSYour Name 		 ctrl_type				:  1,
333*5113495bSYour Name 		 mgmt_type				:  1,
334*5113495bSYour Name 		 null_data				:  1,
335*5113495bSYour Name 		 non_qos				:  1,
336*5113495bSYour Name 		 power_mgmt				:  1,
337*5113495bSYour Name 		 ast_index_timeout			:  1,
338*5113495bSYour Name 		 ast_index_not_found			:  1,
339*5113495bSYour Name 		 mcast_bcast				:  1,
340*5113495bSYour Name 		 reserved_16a				:  1,
341*5113495bSYour Name 		 first_mpdu				:  1;
342*5113495bSYour Name 	uint32_t msdu_done				:  1,
343*5113495bSYour Name 		 reserved_17b				: 17,
344*5113495bSYour Name 		 rx_bitmap_not_updated			:  1,
345*5113495bSYour Name 		 decrypt_status_code			:  3,
346*5113495bSYour Name 		 reserved_17a				: 10;
347*5113495bSYour Name };
348*5113495bSYour Name 
349*5113495bSYour Name struct rx_mpdu_start_compact {
350*5113495bSYour Name 	uint32_t reserved_0				:  6,
351*5113495bSYour Name 		 first_delim_err			:  1,
352*5113495bSYour Name 		 pre_delim_err_warning			:  1,
353*5113495bSYour Name 		 receive_queue_number			: 16,
354*5113495bSYour Name 		 rx_reo_queue_desc_addr_39_32		:  8;
355*5113495bSYour Name 	uint32_t pn_31_0				: 32;
356*5113495bSYour Name 	uint32_t pn_63_32				: 32;
357*5113495bSYour Name 	uint32_t pn_95_64				: 32;
358*5113495bSYour Name 	uint32_t sw_peer_id				: 16,
359*5113495bSYour Name 		 ast_index				: 16;
360*5113495bSYour Name 	uint32_t mpdu_sequence_number			: 12,
361*5113495bSYour Name 		 mpdu_retry				:  1,
362*5113495bSYour Name 		 encrypted				:  1,
363*5113495bSYour Name 		 to_ds					:  1,
364*5113495bSYour Name 		 fr_ds					:  1,
365*5113495bSYour Name 		 reserved_7a				:  1,
366*5113495bSYour Name 		 more_fragment_flag			:  1,
367*5113495bSYour Name 		 mpdu_fragment_number			:  4,
368*5113495bSYour Name 		 frame_encryption_info_valid		:  1,
369*5113495bSYour Name 		 mpdu_ht_control_valid			:  1,
370*5113495bSYour Name 		 mpdu_qos_control_valid			:  1,
371*5113495bSYour Name 		 mpdu_sequence_control_valid		:  1,
372*5113495bSYour Name 		 mac_addr_ad4_valid			:  1,
373*5113495bSYour Name 		 mac_addr_ad3_valid			:  1,
374*5113495bSYour Name 		 mac_addr_ad2_valid			:  1,
375*5113495bSYour Name 		 mac_addr_ad1_valid			:  1,
376*5113495bSYour Name 		 mpdu_duration_valid			:  1,
377*5113495bSYour Name 		 mpdu_frame_control_valid		:  1;
378*5113495bSYour Name 	uint32_t mpdu_duration_field			: 16,
379*5113495bSYour Name 		 mpdu_frame_control_field		: 16;
380*5113495bSYour Name 	uint32_t mac_addr_ad1_31_0			: 32;
381*5113495bSYour Name 	uint32_t mac_addr_ad2_15_0			: 16,
382*5113495bSYour Name 		 mac_addr_ad1_47_32			: 16;
383*5113495bSYour Name 	uint32_t mac_addr_ad2_47_16			: 32;
384*5113495bSYour Name 	uint32_t mac_addr_ad3_31_0			: 32;
385*5113495bSYour Name 	uint32_t mpdu_sequence_control_field		: 16,
386*5113495bSYour Name 		 mac_addr_ad3_47_32			: 16;
387*5113495bSYour Name };
388*5113495bSYour Name #endif
389*5113495bSYour Name #define RX_BE_PADDING0_BYTES 4
390*5113495bSYour Name 
391*5113495bSYour Name typedef struct rx_mpdu_start_compact hal_rx_mpdu_start_t;
392*5113495bSYour Name typedef struct rx_msdu_end_compact hal_rx_msdu_end_t;
393*5113495bSYour Name 
394*5113495bSYour Name struct rx_mpdu_start_tlv {
395*5113495bSYour Name 	hal_rx_mpdu_start_t rx_mpdu_start;
396*5113495bSYour Name };
397*5113495bSYour Name 
398*5113495bSYour Name struct rx_msdu_end_tlv {
399*5113495bSYour Name 	TLV_TAG_T tag;					/* TLV_TAG_T B */
400*5113495bSYour Name 	hal_rx_msdu_end_t rx_msdu_end;
401*5113495bSYour Name };
402*5113495bSYour Name 
403*5113495bSYour Name struct rx_pkt_tlvs {
404*5113495bSYour Name 	struct rx_msdu_end_tlv   msdu_end_tlv;		/*  80 bytes */
405*5113495bSYour Name 	struct rx_mpdu_start_tlv mpdu_start_tlv;	/*  48 bytes */
406*5113495bSYour Name #ifndef NO_RX_PKT_HDR_TLV
407*5113495bSYour Name 	struct rx_pkt_hdr_tlv	pkt_hdr_tlv;		/* 128 bytes */
408*5113495bSYour Name #endif
409*5113495bSYour Name };
410*5113495bSYour Name 
411*5113495bSYour Name #define HAL_RX_MSDU_END(_rx_pkt_tlv)		\
412*5113495bSYour Name 	(((struct rx_pkt_tlvs *)_rx_pkt_tlv)->msdu_end_tlv.rx_msdu_end)
413*5113495bSYour Name 
414*5113495bSYour Name #define HAL_RX_MPDU_START(_rx_pkt_tlv)	\
415*5113495bSYour Name 	(((struct rx_pkt_tlvs *)_rx_pkt_tlv)->mpdu_start_tlv.	\
416*5113495bSYour Name 			rx_mpdu_start)
417*5113495bSYour Name 
418*5113495bSYour Name #define HAL_RX_TLV_TID_GET(_rx_pkt_tlv) \
419*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).tid
420*5113495bSYour Name 
421*5113495bSYour Name #define HAL_RX_TLV_FIRST_MPDU_GET(_rx_pkt_tlv)          \
422*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).first_mpdu
423*5113495bSYour Name #else /* CONFIG_WORD_BASED_TLV */
424*5113495bSYour Name typedef struct rx_mpdu_start hal_rx_mpdu_start_t;
425*5113495bSYour Name typedef struct rx_msdu_end hal_rx_msdu_end_t;
426*5113495bSYour Name 
427*5113495bSYour Name #define RX_BE_PADDING0_BYTES 8
428*5113495bSYour Name /*
429*5113495bSYour Name  * Each RX descriptor TLV is preceded by sizeof TLV_TAG_T "tag"
430*5113495bSYour Name  */
431*5113495bSYour Name 
432*5113495bSYour Name #ifndef CONFIG_NO_TLV_TAGS
433*5113495bSYour Name struct rx_mpdu_start_tlv {
434*5113495bSYour Name 	TLV_TAG_T tag;
435*5113495bSYour Name 	hal_rx_mpdu_start_t rx_mpdu_start;
436*5113495bSYour Name };
437*5113495bSYour Name 
438*5113495bSYour Name struct rx_msdu_end_tlv {
439*5113495bSYour Name 	TLV_TAG_T tag;
440*5113495bSYour Name 	hal_rx_msdu_end_t rx_msdu_end;
441*5113495bSYour Name };
442*5113495bSYour Name 
443*5113495bSYour Name struct rx_pkt_tlvs {
444*5113495bSYour Name 	struct rx_msdu_end_tlv   msdu_end_tlv;	/* 128 + TLV_TAG_T bytes */
445*5113495bSYour Name 	uint8_t rx_padding0[RX_BE_PADDING0_BYTES];/*  8 bytes */
446*5113495bSYour Name 	struct rx_mpdu_start_tlv mpdu_start_tlv;/*  120 + TLV_TAG_T  bytes */
447*5113495bSYour Name #ifndef NO_RX_PKT_HDR_TLV
448*5113495bSYour Name 	struct rx_pkt_hdr_tlv	pkt_hdr_tlv;		/* 128 bytes */
449*5113495bSYour Name #endif
450*5113495bSYour Name };
451*5113495bSYour Name 
452*5113495bSYour Name #else
453*5113495bSYour Name struct rx_mpdu_start_tlv {
454*5113495bSYour Name 	hal_rx_mpdu_start_t rx_mpdu_start;
455*5113495bSYour Name };
456*5113495bSYour Name 
457*5113495bSYour Name struct rx_msdu_end_tlv {
458*5113495bSYour Name 	hal_rx_msdu_end_t rx_msdu_end;
459*5113495bSYour Name };
460*5113495bSYour Name 
461*5113495bSYour Name struct rx_pkt_tlvs {
462*5113495bSYour Name 	struct rx_msdu_end_tlv   msdu_end_tlv;	/*  128 bytes */
463*5113495bSYour Name 	struct rx_mpdu_start_tlv mpdu_start_tlv;	/*  120 bytes */
464*5113495bSYour Name 	uint8_t rx_padding0[RX_BE_PADDING0_BYTES];	/*  8 bytes */
465*5113495bSYour Name #ifndef NO_RX_PKT_HDR_TLV
466*5113495bSYour Name 	struct rx_pkt_hdr_tlv	 pkt_hdr_tlv;		/* 128 bytes */
467*5113495bSYour Name #endif
468*5113495bSYour Name };
469*5113495bSYour Name #endif /*CONFIG_NO_TLV_TAGS */
470*5113495bSYour Name 
471*5113495bSYour Name #define HAL_RX_MSDU_END(_rx_pkt_tlv)		\
472*5113495bSYour Name 	(((struct rx_pkt_tlvs *)_rx_pkt_tlv)->msdu_end_tlv.rx_msdu_end)
473*5113495bSYour Name 
474*5113495bSYour Name #define HAL_RX_MPDU_START(_rx_pkt_tlv)	\
475*5113495bSYour Name 	(((struct rx_pkt_tlvs *)_rx_pkt_tlv)->mpdu_start_tlv.	\
476*5113495bSYour Name 	   rx_mpdu_start.rx_mpdu_info_details)
477*5113495bSYour Name 
478*5113495bSYour Name #define HAL_RX_REO_QUEUE_DESC_ADDR_31_0_GET(_rx_pkt_tlv)	\
479*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).rx_reo_queue_desc_addr_31_0
480*5113495bSYour Name 
481*5113495bSYour Name #define HAL_RX_TLV_AMPDU_FLAG_GET(_rx_pkt_tlv)		\
482*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).ampdu_flag
483*5113495bSYour Name 
484*5113495bSYour Name #define HAL_RX_TLV_MPDU_PN_127_96_GET(_rx_pkt_tlv)	\
485*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).pn_127_96
486*5113495bSYour Name 
487*5113495bSYour Name #define HAL_RX_TLV_TID_GET(_rx_pkt_tlv) \
488*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).tid
489*5113495bSYour Name 
490*5113495bSYour Name #define HAL_RX_TLV_FIRST_MPDU_GET(_rx_pkt_tlv)		\
491*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).first_mpdu
492*5113495bSYour Name 
493*5113495bSYour Name #define HAL_RX_TLV_L3_TYPE_GET(_rx_pkt_tlv)	\
494*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).l3_type
495*5113495bSYour Name 
496*5113495bSYour Name #define HAL_RX_GET_PPDU_ID(_rx_pkt_tlv)	\
497*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).phy_ppdu_id
498*5113495bSYour Name 
499*5113495bSYour Name #define HAL_RX_TLV_PHY_PPDU_ID_GET(_rx_pkt_tlv)		\
500*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).phy_ppdu_id
501*5113495bSYour Name 
502*5113495bSYour Name #define HAL_RX_GET_FILTER_CATEGORY(_rx_pkt_tlv) \
503*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).rxpcu_mpdu_filter_in_category
504*5113495bSYour Name 
505*5113495bSYour Name #define HAL_RX_TLV_SW_FRAME_GROUP_ID_GET(_rx_pkt_tlv)	\
506*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).sw_frame_group_id
507*5113495bSYour Name 
508*5113495bSYour Name #endif /* CONFIG_WORD_BASED_TLV */
509*5113495bSYour Name 
510*5113495bSYour Name #ifndef NO_RX_PKT_HDR_TLV
511*5113495bSYour Name #define HAL_RX_PKT_HDR_TLV(_rx_pkt_tlv)  \
512*5113495bSYour Name 	(((struct rx_pkt_tlvs *)_rx_pkt_tlv)->pkt_hdr_tlv)
513*5113495bSYour Name 
514*5113495bSYour Name #define HAL_RX_PKT_HDR_TLV_PHY_PPDU_ID_GET(_rx_pkt_tlv)   \
515*5113495bSYour Name 	HAL_RX_PKT_HDR_TLV(_rx_pkt_tlv).phy_ppdu_id
516*5113495bSYour Name #endif
517*5113495bSYour Name 
518*5113495bSYour Name /**
519*5113495bSYour Name  * struct rx_mon_pkt_tlvs - RX packet data structure for DEST ring in the
520*5113495bSYour Name  *			    monitor mode.
521*5113495bSYour Name  * @msdu_end_tlv: MSDU end TLV
522*5113495bSYour Name  * @rx_padding0: Padding bytes
523*5113495bSYour Name  * @mpdu_start_tlv: MPDU start TLV
524*5113495bSYour Name  * @pkt_hdr_tlv: 802.11 packet header TLV
525*5113495bSYour Name  */
526*5113495bSYour Name struct rx_mon_pkt_tlvs {
527*5113495bSYour Name 	struct rx_msdu_end_tlv msdu_end_tlv;		/* 128B + sizeof(tag) */
528*5113495bSYour Name 	uint8_t rx_padding0[RX_BE_PADDING0_BYTES];	/* 8B */
529*5113495bSYour Name 	struct rx_mpdu_start_tlv mpdu_start_tlv;	/* 120B + sizeof(tag) */
530*5113495bSYour Name 	struct rx_pkt_hdr_tlv pkt_hdr_tlv;		/* 120B + sizeof(tag) */
531*5113495bSYour Name };
532*5113495bSYour Name 
533*5113495bSYour Name #define SIZE_OF_DATA_RX_TLV sizeof(struct rx_pkt_tlvs)
534*5113495bSYour Name #define SIZE_OF_MON_DATA_RX_TLV sizeof(struct rx_mon_pkt_tlvs)
535*5113495bSYour Name 
536*5113495bSYour Name #define RX_PKT_TLVS_LEN		SIZE_OF_DATA_RX_TLV
537*5113495bSYour Name #define MON_RX_PKT_TLVS_LEN	SIZE_OF_MON_DATA_RX_TLV
538*5113495bSYour Name 
539*5113495bSYour Name #define RX_PKT_TLV_OFFSET(field) qdf_offsetof(struct rx_pkt_tlvs, field)
540*5113495bSYour Name 
541*5113495bSYour Name #define HAL_RX_TLV_MSDU_DONE_GET(_rx_pkt_tlv)	\
542*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).msdu_done
543*5113495bSYour Name 
544*5113495bSYour Name #define HAL_RX_TLV_DECAP_FORMAT_GET(_rx_pkt_tlv)	\
545*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).decap_format
546*5113495bSYour Name 
547*5113495bSYour Name #ifdef RECEIVE_OFFLOAD
548*5113495bSYour Name #define HAL_RX_TLV_GET_TCP_PURE_ACK(_rx_pkt_tlv) \
549*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).tcp_only_ack
550*5113495bSYour Name 
551*5113495bSYour Name #define HAL_RX_TLV_GET_TCP_PROTO(_rx_pkt_tlv) \
552*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).tcp_proto
553*5113495bSYour Name 
554*5113495bSYour Name #define HAL_RX_TLV_GET_UDP_PROTO(_rx_pkt_tlv) \
555*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).udp_proto
556*5113495bSYour Name 
557*5113495bSYour Name #define HAL_RX_TLV_GET_IPV6(_rx_pkt_tlv) \
558*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).ipv6_proto
559*5113495bSYour Name 
560*5113495bSYour Name #define HAL_RX_TLV_GET_IP_OFFSET(_rx_pkt_tlv) \
561*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).l3_offset
562*5113495bSYour Name 
563*5113495bSYour Name #define HAL_RX_TLV_GET_TCP_OFFSET(_rx_pkt_tlv) \
564*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).l4_offset
565*5113495bSYour Name #endif /* RECEIVE_OFFLOAD */
566*5113495bSYour Name 
567*5113495bSYour Name #define HAL_RX_TLV_GET_FLOW_ID_TOEPLITZ(_rx_pkt_tlv) \
568*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).flow_id_toeplitz
569*5113495bSYour Name 
570*5113495bSYour Name #define HAL_RX_TLV_MSDU_LEN_GET(_rx_pkt_tlv)		\
571*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).msdu_length
572*5113495bSYour Name 
573*5113495bSYour Name #define HAL_RX_TLV_CCE_MATCH_GET(_rx_pkt_tlv)		\
574*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).cce_match
575*5113495bSYour Name 
576*5113495bSYour Name #define HAL_RX_TLV_BW_GET(_rx_pkt_tlv)     \
577*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).receive_bandwidth
578*5113495bSYour Name 
579*5113495bSYour Name #define HAL_RX_TLV_FLOWID_TOEPLITZ_GET(_rx_pkt_tlv)	\
580*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).flow_id_toeplitz
581*5113495bSYour Name 
582*5113495bSYour Name #define HAL_RX_TLV_SGI_GET(_rx_pkt_tlv)	\
583*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).sgi
584*5113495bSYour Name 
585*5113495bSYour Name #define HAL_RX_TLV_RATE_MCS_GET(_rx_pkt_tlv)	\
586*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).rate_mcs
587*5113495bSYour Name 
588*5113495bSYour Name #define HAL_RX_TLV_DECRYPT_STATUS_GET(_rx_pkt_tlv)		\
589*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).decrypt_status_code
590*5113495bSYour Name 
591*5113495bSYour Name #define HAL_RX_TLV_RSSI_GET(_rx_pkt_tlv)	\
592*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).user_rssi
593*5113495bSYour Name 
594*5113495bSYour Name #define HAL_RX_TLV_FREQ_GET(_rx_pkt_tlv)		\
595*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).sw_phy_meta_data
596*5113495bSYour Name 
597*5113495bSYour Name #define HAL_RX_TLV_PKT_TYPE_GET(_rx_pkt_tlv)	\
598*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).pkt_type
599*5113495bSYour Name 
600*5113495bSYour Name #define HAL_RX_TLV_DECRYPT_ERR_GET(_rx_pkt_tlv)	\
601*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).decrypt_err
602*5113495bSYour Name 
603*5113495bSYour Name #define HAL_RX_TLV_MIC_ERR_GET(_rx_pkt_tlv)	\
604*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).tkip_mic_err
605*5113495bSYour Name 
606*5113495bSYour Name #define HAL_RX_TLV_MIMO_SS_BITMAP(_rx_pkt_tlv)\
607*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).mimo_ss_bitmap
608*5113495bSYour Name 
609*5113495bSYour Name #define HAL_RX_TLV_ANT_SIGNAL_DB_GET(_rx_pkt_tlv)	\
610*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).user_rssi
611*5113495bSYour Name 
612*5113495bSYour Name #define HAL_RX_TLV_STBC_GET(_rx_pkt_tlv)	\
613*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).stbc
614*5113495bSYour Name 
615*5113495bSYour Name #define HAL_RX_TLV_RECEPTION_TYPE_GET(_rx_pkt_tlv)	\
616*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).reception_type
617*5113495bSYour Name 
618*5113495bSYour Name #define HAL_RX_TLV_IP_CSUM_FAIL_GET(_rx_pkt_tlv)	\
619*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).ip_chksum_fail
620*5113495bSYour Name 
621*5113495bSYour Name #define HAL_RX_TLV_TCP_UDP_CSUM_FAIL_GET(_rx_pkt_tlv)	\
622*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).tcp_udp_chksum_fail
623*5113495bSYour Name 
624*5113495bSYour Name #define HAL_RX_TLV_MPDU_LEN_ERR_GET(_rx_pkt_tlv)	\
625*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).mpdu_length_err
626*5113495bSYour Name 
627*5113495bSYour Name #define HAL_RX_TLV_MPDU_FCS_ERR_GET(_rx_pkt_tlv)	\
628*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).fcs_err
629*5113495bSYour Name 
630*5113495bSYour Name #define HAL_RX_TLV_IS_MCAST_GET(_rx_pkt_tlv)	\
631*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).mcast_bcast
632*5113495bSYour Name 
633*5113495bSYour Name #ifdef RECEIVE_OFFLOAD
634*5113495bSYour Name /*
635*5113495bSYour Name  * LRO information needed from the TLVs
636*5113495bSYour Name  */
637*5113495bSYour Name #define HAL_RX_TLV_GET_LRO_ELIGIBLE(_rx_pkt_tlv) \
638*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).lro_eligible
639*5113495bSYour Name 
640*5113495bSYour Name #define HAL_RX_TLV_GET_TCP_ACK(_rx_pkt_tlv) \
641*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).tcp_ack_number
642*5113495bSYour Name 
643*5113495bSYour Name #define HAL_RX_TLV_GET_TCP_SEQ(_rx_pkt_tlv) \
644*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).tcp_seq_number
645*5113495bSYour Name 
646*5113495bSYour Name #define HAL_RX_TLV_GET_TCP_WIN(_rx_pkt_tlv) \
647*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).window_size
648*5113495bSYour Name #endif
649*5113495bSYour Name 
650*5113495bSYour Name #define HAL_RX_TLV_L3_TYPE_GET(_rx_pkt_tlv)	\
651*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).l3_type
652*5113495bSYour Name 
653*5113495bSYour Name #ifdef RX_MSDU_END_PEER_META_DATA_OFFSET
654*5113495bSYour Name #define HAL_RX_TLV_MSDU_PEER_META_DATA_GET(_rx_pkt_tlv)	\
655*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).peer_meta_data
656*5113495bSYour Name #endif
657*5113495bSYour Name 
658*5113495bSYour Name #define HAL_RX_TLV_PEER_META_DATA_GET(_rx_pkt_tlv)	\
659*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).peer_meta_data
660*5113495bSYour Name 
661*5113495bSYour Name #define HAL_RX_TLV_KEYID_OCTET_GET(_rx_pkt_tlv)	\
662*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).key_id_octet
663*5113495bSYour Name 
664*5113495bSYour Name #define HAL_RX_MPDU_SEQUENCE_NUMBER_GET(_rx_pkt_tlv)	\
665*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mpdu_sequence_number
666*5113495bSYour Name 
667*5113495bSYour Name #define HAL_RX_TLV_SA_SW_PEER_ID_GET(_rx_pkt_tlv)		\
668*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).sa_sw_peer_id
669*5113495bSYour Name 
670*5113495bSYour Name #define HAL_RX_TLV_L3_HEADER_PADDING_GET(_rx_pkt_tlv)	\
671*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).l3_header_padding
672*5113495bSYour Name 
673*5113495bSYour Name #define HAL_RX_TLV_SA_IDX_GET(_rx_pkt_tlv)	\
674*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).sa_idx
675*5113495bSYour Name 
676*5113495bSYour Name #define HAL_RX_TLV_DA_IDX_GET(_rx_pkt_tlv)	\
677*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).da_idx_or_sw_peer_id
678*5113495bSYour Name 
679*5113495bSYour Name #define HAL_RX_TLV_FIRST_MSDU_GET(_rx_pkt_tlv)	\
680*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).first_msdu
681*5113495bSYour Name 
682*5113495bSYour Name #define HAL_RX_TLV_LAST_MSDU_GET(_rx_pkt_tlv)	\
683*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).last_msdu
684*5113495bSYour Name 
685*5113495bSYour Name #define HAL_RX_TLV_DA_IS_MCBC_GET(_rx_pkt_tlv)	\
686*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).da_is_mcbc
687*5113495bSYour Name 
688*5113495bSYour Name #define HAL_RX_TLV_IS_TKIP_MIC_ERR_GET(_rx_pkt_tlv)	\
689*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).tkip_mic_err
690*5113495bSYour Name 
691*5113495bSYour Name #define HAL_RX_TLV_SA_IS_VALID_GET(_rx_pkt_tlv)	\
692*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).sa_is_valid
693*5113495bSYour Name 
694*5113495bSYour Name #define HAL_RX_TLV_MPDU_ENCRYPTION_INFO_VALID(_rx_pkt_tlv)	\
695*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).frame_encryption_info_valid
696*5113495bSYour Name 
697*5113495bSYour Name #define HAL_RX_TLV_MPDU_PN_31_0_GET(_rx_pkt_tlv)		\
698*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).pn_31_0
699*5113495bSYour Name 
700*5113495bSYour Name #define HAL_RX_TLV_MPDU_PN_63_32_GET(_rx_pkt_tlv)		\
701*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).pn_63_32
702*5113495bSYour Name 
703*5113495bSYour Name #define HAL_RX_TLV_MPDU_PN_95_64_GET(_rx_pkt_tlv)		\
704*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).pn_95_64
705*5113495bSYour Name 
706*5113495bSYour Name #define HAL_RX_TLV_DA_IS_VALID_GET(_rx_pkt_tlv)	\
707*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).da_is_valid
708*5113495bSYour Name 
709*5113495bSYour Name #define HAL_RX_TLV_MPDU_MAC_ADDR_AD4_VALID_GET(_rx_pkt_tlv)		\
710*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad4_valid
711*5113495bSYour Name 
712*5113495bSYour Name #define HAL_RX_TLV_SW_PEER_ID_GET(_rx_pkt_tlv) \
713*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).sw_peer_id
714*5113495bSYour Name 
715*5113495bSYour Name #define HAL_RX_TLV_MPDU_GET_TODS(_rx_pkt_tlv)	\
716*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).to_ds
717*5113495bSYour Name 
718*5113495bSYour Name #define HAL_RX_TLV_MPDU_GET_FROMDS(_rx_pkt_tlv)	\
719*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).fr_ds
720*5113495bSYour Name 
721*5113495bSYour Name #define HAL_RX_TLV_MPDU_GET_FRAME_CONTROL_VALID(_rx_pkt_tlv)	\
722*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mpdu_frame_control_valid
723*5113495bSYour Name 
724*5113495bSYour Name #define HAL_RX_TLV_MPDU_MAC_ADDR_AD1_VALID_GET(_rx_pkt_tlv) \
725*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad1_valid
726*5113495bSYour Name 
727*5113495bSYour Name #define HAL_RX_TLV_MPDU_AD1_31_0_GET(_rx_pkt_tlv)	\
728*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad1_31_0
729*5113495bSYour Name 
730*5113495bSYour Name #define HAL_RX_TLV_MPDU_AD1_47_32_GET(_rx_pkt_tlv)	\
731*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad1_47_32
732*5113495bSYour Name 
733*5113495bSYour Name #define HAL_RX_TLV_MPDU_MAC_ADDR_AD2_VALID_GET(_rx_pkt_tlv) \
734*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad2_valid
735*5113495bSYour Name 
736*5113495bSYour Name #define HAL_RX_TLV_MPDU_AD2_15_0_GET(_rx_pkt_tlv)	\
737*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad2_15_0
738*5113495bSYour Name 
739*5113495bSYour Name #define HAL_RX_TLV_MPDU_AD2_47_16_GET(_rx_pkt_tlv)	\
740*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad2_47_16
741*5113495bSYour Name 
742*5113495bSYour Name #define HAL_RX_TLV_MPDU_MAC_ADDR_AD3_VALID_GET(_rx_pkt_tlv) \
743*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad3_valid
744*5113495bSYour Name 
745*5113495bSYour Name #define HAL_RX_TLV_MPDU_AD3_31_0_GET(_rx_pkt_tlv)	\
746*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad3_31_0
747*5113495bSYour Name 
748*5113495bSYour Name #define HAL_RX_TLV_MPDU_AD3_47_32_GET(_rx_pkt_tlv)	\
749*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad3_47_32
750*5113495bSYour Name 
751*5113495bSYour Name #define HAL_RX_TLV_MPDU_AD4_31_0_GET(_rx_pkt_tlv)	\
752*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad4_31_0
753*5113495bSYour Name 
754*5113495bSYour Name #define HAL_RX_TLV_MPDU_AD4_47_32_GET(_rx_pkt_tlv)	\
755*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mac_addr_ad4_47_32
756*5113495bSYour Name 
757*5113495bSYour Name #define HAL_RX_TLV_MPDU_GET_SEQUENCE_CONTROL_VALID(_rx_pkt_tlv)	\
758*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mpdu_sequence_control_valid
759*5113495bSYour Name 
760*5113495bSYour Name #define HAL_RX_TLV_MPDU_QOS_CONTROL_VALID_GET(_rx_pkt_tlv)	\
761*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mpdu_qos_control_valid
762*5113495bSYour Name 
763*5113495bSYour Name #define HAL_RX_TLV_GET_FC_VALID(_rx_pkt_tlv)	\
764*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mpdu_frame_control_valid
765*5113495bSYour Name 
766*5113495bSYour Name #define HAL_RX_TLV_GET_TO_DS_FLAG(_rx_pkt_tlv)	\
767*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).to_ds
768*5113495bSYour Name 
769*5113495bSYour Name #define HAL_RX_MPDU_GET_FRAME_CONTROL_FIELD(_rx_pkt_tlv)	\
770*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mpdu_frame_control_field
771*5113495bSYour Name 
772*5113495bSYour Name #define HAL_RX_TLV_FLOW_IDX_GET(_rx_pkt_tlv)		\
773*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).flow_idx
774*5113495bSYour Name 
775*5113495bSYour Name #define HAL_RX_TLV_REO_DEST_IND_GET(_rx_pkt_tlv)		\
776*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).reo_destination_indication
777*5113495bSYour Name 
778*5113495bSYour Name #define HAL_RX_TLV_FLOW_IDX_INVALID_GET(_rx_pkt_tlv)	\
779*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).flow_idx_invalid
780*5113495bSYour Name 
781*5113495bSYour Name #define HAL_RX_TLV_FLOW_IDX_TIMEOUT_GET(_rx_pkt_tlv)	\
782*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).flow_idx_timeout
783*5113495bSYour Name 
784*5113495bSYour Name #define HAL_RX_TLV_FSE_METADATA_GET(_rx_pkt_tlv)	\
785*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).fse_metadata
786*5113495bSYour Name 
787*5113495bSYour Name #define HAL_RX_TLV_CCE_METADATA_GET(_rx_pkt_tlv)	\
788*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).cce_metadata
789*5113495bSYour Name 
790*5113495bSYour Name #define HAL_RX_TLV_DECRYPT_STATUS_GET(_rx_pkt_tlv)	\
791*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).decrypt_status_code
792*5113495bSYour Name 
793*5113495bSYour Name #define HAL_RX_TLV_GET_TCP_CHKSUM(_rx_pkt_tlv)	\
794*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).tcp_udp_chksum
795*5113495bSYour Name 
796*5113495bSYour Name #define HAL_RX_TLV_GET_FLOW_AGGR_CONT(_rx_pkt_tlv)	\
797*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).flow_aggregation_continuation
798*5113495bSYour Name 
799*5113495bSYour Name #define HAL_RX_TLV_GET_FLOW_AGGR_COUNT(_rx_pkt_tlv)	\
800*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).aggregation_count
801*5113495bSYour Name 
802*5113495bSYour Name #define HAL_RX_TLV_GET_FISA_TIMEOUT(_rx_pkt_tlv)	\
803*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).fisa_timeout
804*5113495bSYour Name 
805*5113495bSYour Name #define HAL_RX_TLV_GET_FISA_CUMULATIVE_L4_CHECKSUM(_rx_pkt_tlv)	\
806*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).cumulative_l4_checksum
807*5113495bSYour Name 
808*5113495bSYour Name #define HAL_RX_TLV_GET_FISA_CUMULATIVE_IP_LENGTH(_rx_pkt_tlv)	\
809*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).cumulative_ip_length
810*5113495bSYour Name 
811*5113495bSYour Name #define HAL_RX_MPDU_INFO_QOS_CONTROL_VALID_GET(_rx_pkt_tlv) \
812*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).mpdu_qos_control_valid
813*5113495bSYour Name 
814*5113495bSYour Name #define HAL_RX_MSDU_END_SA_SW_PEER_ID_GET(_rx_pkt_tlv)	\
815*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).sa_sw_peer_id
816*5113495bSYour Name 
817*5113495bSYour Name #define HAL_RX_REO_QUEUE_DESC_ADDR_39_32_GET(_rx_pkt_tlv)	\
818*5113495bSYour Name 	HAL_RX_MPDU_START(_rx_pkt_tlv).rx_reo_queue_desc_addr_39_32
819*5113495bSYour Name 
820*5113495bSYour Name #ifdef WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET
821*5113495bSYour Name #define HAL_RX_TLV_FIRST_WAKEUP_PKT_GET(_rx_pkt_tlv)	\
822*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).reserved_1a
823*5113495bSYour Name #endif
824*5113495bSYour Name 
825*5113495bSYour Name /* used by monitor mode for parsing from full TLV */
826*5113495bSYour Name #define HAL_RX_MON_GET_FC_VALID(_rx_mpdu_start)	\
827*5113495bSYour Name 	HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO, MPDU_FRAME_CONTROL_VALID)
828*5113495bSYour Name 
829*5113495bSYour Name #define HAL_RX_MON_GET_TO_DS_FLAG(_rx_mpdu_start)	\
830*5113495bSYour Name 	HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO, TO_DS)
831*5113495bSYour Name 
832*5113495bSYour Name #define HAL_RX_MON_GET_MAC_ADDR2_VALID(_rx_mpdu_start) \
833*5113495bSYour Name 	HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO, MAC_ADDR_AD2_VALID)
834*5113495bSYour Name 
835*5113495bSYour Name static inline
hal_rx_tlv_decap_format_get_be(void * hw_desc_addr)836*5113495bSYour Name uint32_t hal_rx_tlv_decap_format_get_be(void *hw_desc_addr)
837*5113495bSYour Name {
838*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs =
839*5113495bSYour Name 			(struct rx_pkt_tlvs *)hw_desc_addr;
840*5113495bSYour Name 
841*5113495bSYour Name 	return HAL_RX_TLV_DECAP_FORMAT_GET(rx_pkt_tlvs);
842*5113495bSYour Name }
843*5113495bSYour Name 
hal_rx_tlv_msdu_done_get_be(uint8_t * buf)844*5113495bSYour Name static inline uint32_t hal_rx_tlv_msdu_done_get_be(uint8_t *buf)
845*5113495bSYour Name {
846*5113495bSYour Name 	return HAL_RX_TLV_MSDU_DONE_GET(buf);
847*5113495bSYour Name }
848*5113495bSYour Name 
849*5113495bSYour Name /**
850*5113495bSYour Name  * hal_rx_tlv_first_mpdu_get_be() - get first_mpdu bit from rx attention
851*5113495bSYour Name  * @buf: pointer to rx_pkt_tlvs
852*5113495bSYour Name  *
853*5113495bSYour Name  * Return: uint32_t(first_msdu)
854*5113495bSYour Name  */
hal_rx_tlv_first_mpdu_get_be(uint8_t * buf)855*5113495bSYour Name static inline uint32_t hal_rx_tlv_first_mpdu_get_be(uint8_t *buf)
856*5113495bSYour Name {
857*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
858*5113495bSYour Name 
859*5113495bSYour Name 	return HAL_RX_TLV_FIRST_MPDU_GET(rx_pkt_tlvs);
860*5113495bSYour Name }
861*5113495bSYour Name 
862*5113495bSYour Name /**
863*5113495bSYour Name  * hal_rx_msdu_cce_match_get_be() - get CCE match bit from rx attention
864*5113495bSYour Name  * @buf: pointer to rx_pkt_tlvs
865*5113495bSYour Name  *
866*5113495bSYour Name  * Return: CCE match value
867*5113495bSYour Name  */
hal_rx_msdu_cce_match_get_be(uint8_t * buf)868*5113495bSYour Name static inline bool hal_rx_msdu_cce_match_get_be(uint8_t *buf)
869*5113495bSYour Name {
870*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
871*5113495bSYour Name 
872*5113495bSYour Name 	return HAL_RX_TLV_CCE_MATCH_GET(rx_pkt_tlvs);
873*5113495bSYour Name }
874*5113495bSYour Name 
875*5113495bSYour Name #ifdef RX_MSDU_END_PEER_META_DATA_OFFSET
876*5113495bSYour Name /*
877*5113495bSYour Name  * Get peer_meta_data from RX_MSDU_END
878*5113495bSYour Name  */
879*5113495bSYour Name 
hal_rx_msdu_peer_meta_data_get_be(uint8_t * buf)880*5113495bSYour Name static inline uint32_t hal_rx_msdu_peer_meta_data_get_be(uint8_t *buf)
881*5113495bSYour Name {
882*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
883*5113495bSYour Name 
884*5113495bSYour Name 	return HAL_RX_TLV_MSDU_PEER_META_DATA_GET(rx_pkt_tlvs);
885*5113495bSYour Name }
886*5113495bSYour Name #endif
887*5113495bSYour Name 
888*5113495bSYour Name /**
889*5113495bSYour Name  * hal_rx_mpdu_get_addr1_be() - API to check get address1 of the mpdu
890*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headera
891*5113495bSYour Name  * @mac_addr: pointer to mac address
892*5113495bSYour Name  *
893*5113495bSYour Name  * Return: success/failure
894*5113495bSYour Name  */
hal_rx_mpdu_get_addr1_be(uint8_t * buf,uint8_t * mac_addr)895*5113495bSYour Name static inline QDF_STATUS hal_rx_mpdu_get_addr1_be(uint8_t *buf,
896*5113495bSYour Name 						  uint8_t *mac_addr)
897*5113495bSYour Name {
898*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
899*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr1 {
900*5113495bSYour Name 		uint32_t ad1_31_0;
901*5113495bSYour Name 		uint16_t ad1_47_32;
902*5113495bSYour Name 	};
903*5113495bSYour Name 	struct hal_addr1 *addr = (struct hal_addr1 *)mac_addr;
904*5113495bSYour Name 	uint32_t mac_addr_ad1_valid;
905*5113495bSYour Name 
906*5113495bSYour Name 	mac_addr_ad1_valid = HAL_RX_TLV_MPDU_MAC_ADDR_AD1_VALID_GET(
907*5113495bSYour Name 								rx_pkt_tlvs);
908*5113495bSYour Name 
909*5113495bSYour Name 	if (mac_addr_ad1_valid) {
910*5113495bSYour Name 		addr->ad1_31_0 = HAL_RX_TLV_MPDU_AD1_31_0_GET(rx_pkt_tlvs);
911*5113495bSYour Name 		addr->ad1_47_32 = HAL_RX_TLV_MPDU_AD1_47_32_GET(rx_pkt_tlvs);
912*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
913*5113495bSYour Name 	}
914*5113495bSYour Name 
915*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
916*5113495bSYour Name }
917*5113495bSYour Name 
918*5113495bSYour Name #ifndef CONFIG_WORD_BASED_TLV
919*5113495bSYour Name /**
920*5113495bSYour Name  * hal_rx_mpdu_info_ampdu_flag_get_be() - get ampdu flag bit
921*5113495bSYour Name  * from rx mpdu info
922*5113495bSYour Name  * @buf: pointer to rx_pkt_tlvs
923*5113495bSYour Name  *
924*5113495bSYour Name  * Return: ampdu flag
925*5113495bSYour Name  */
hal_rx_mpdu_info_ampdu_flag_get_be(uint8_t * buf)926*5113495bSYour Name static inline bool hal_rx_mpdu_info_ampdu_flag_get_be(uint8_t *buf)
927*5113495bSYour Name {
928*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
929*5113495bSYour Name 
930*5113495bSYour Name 	return !!HAL_RX_TLV_AMPDU_FLAG_GET(rx_pkt_tlvs);
931*5113495bSYour Name }
932*5113495bSYour Name 
933*5113495bSYour Name /**
934*5113495bSYour Name  * hal_rx_get_qdesc_addr_be() - API to get qdesc address of reo
935*5113495bSYour Name  * entrance ring desc
936*5113495bSYour Name  *
937*5113495bSYour Name  * @dst_ring_desc: reo dest ring descriptor (used for Lithium DP)
938*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
939*5113495bSYour Name  * Return: qdesc address in reo destination ring buffer
940*5113495bSYour Name  */
hal_rx_get_qdesc_addr_be(uint8_t * dst_ring_desc,uint8_t * buf)941*5113495bSYour Name static inline uint64_t hal_rx_get_qdesc_addr_be(uint8_t *dst_ring_desc,
942*5113495bSYour Name 						uint8_t *buf)
943*5113495bSYour Name {
944*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
945*5113495bSYour Name 
946*5113495bSYour Name 	return (uint64_t)HAL_RX_REO_QUEUE_DESC_ADDR_31_0_GET(rx_pkt_tlvs);
947*5113495bSYour Name }
948*5113495bSYour Name 
949*5113495bSYour Name /**
950*5113495bSYour Name  * hal_rx_print_pn_be() - Prints the PN of rx packet.
951*5113495bSYour Name  * @buf: rx_tlv_hdr of the received packet
952*5113495bSYour Name  *
953*5113495bSYour Name  * Return: void
954*5113495bSYour Name  */
hal_rx_print_pn_be(uint8_t * buf)955*5113495bSYour Name static inline void hal_rx_print_pn_be(uint8_t *buf)
956*5113495bSYour Name {
957*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
958*5113495bSYour Name 
959*5113495bSYour Name 	uint32_t pn_31_0 = HAL_RX_TLV_MPDU_PN_31_0_GET(rx_pkt_tlvs);
960*5113495bSYour Name 	uint32_t pn_63_32 = HAL_RX_TLV_MPDU_PN_63_32_GET(rx_pkt_tlvs);
961*5113495bSYour Name 	uint32_t pn_95_64 = HAL_RX_TLV_MPDU_PN_95_64_GET(rx_pkt_tlvs);
962*5113495bSYour Name 	uint32_t pn_127_96 = HAL_RX_TLV_MPDU_PN_127_96_GET(rx_pkt_tlvs);
963*5113495bSYour Name 
964*5113495bSYour Name 	hal_debug("PN number pn_127_96 0x%x pn_95_64 0x%x pn_63_32 0x%x pn_31_0 0x%x",
965*5113495bSYour Name 		  pn_127_96, pn_95_64, pn_63_32, pn_31_0);
966*5113495bSYour Name }
967*5113495bSYour Name 
hal_rx_tlv_get_pn_num_be(uint8_t * buf,uint64_t * pn_num)968*5113495bSYour Name static inline void hal_rx_tlv_get_pn_num_be(uint8_t *buf, uint64_t *pn_num)
969*5113495bSYour Name {
970*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
971*5113495bSYour Name 
972*5113495bSYour Name 	pn_num[0] = HAL_RX_TLV_MPDU_PN_31_0_GET(pkt_tlvs);
973*5113495bSYour Name 	pn_num[0] |= ((uint64_t)HAL_RX_TLV_MPDU_PN_63_32_GET(pkt_tlvs) << 32);
974*5113495bSYour Name 
975*5113495bSYour Name 	pn_num[1] = HAL_RX_TLV_MPDU_PN_95_64_GET(pkt_tlvs);
976*5113495bSYour Name 	pn_num[1] |= ((uint64_t)HAL_RX_TLV_MPDU_PN_127_96_GET(pkt_tlvs) << 32);
977*5113495bSYour Name }
978*5113495bSYour Name 
979*5113495bSYour Name /**
980*5113495bSYour Name  * hal_rx_mpdu_get_addr4_be() - API to get address4 of the mpdu
981*5113495bSYour Name  * in the packet
982*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
983*5113495bSYour Name  * @mac_addr: pointer to mac address
984*5113495bSYour Name  *
985*5113495bSYour Name  * Return: success/failure
986*5113495bSYour Name  */
hal_rx_mpdu_get_addr4_be(uint8_t * buf,uint8_t * mac_addr)987*5113495bSYour Name static inline QDF_STATUS hal_rx_mpdu_get_addr4_be(uint8_t *buf,
988*5113495bSYour Name 						  uint8_t *mac_addr)
989*5113495bSYour Name {
990*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
991*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr4 {
992*5113495bSYour Name 		uint32_t ad4_31_0;
993*5113495bSYour Name 		uint16_t ad4_47_32;
994*5113495bSYour Name 	};
995*5113495bSYour Name 	struct hal_addr4 *addr = (struct hal_addr4 *)mac_addr;
996*5113495bSYour Name 	uint32_t mac_addr_ad4_valid;
997*5113495bSYour Name 
998*5113495bSYour Name 	mac_addr_ad4_valid = HAL_RX_TLV_MPDU_MAC_ADDR_AD4_VALID_GET(pkt_tlvs);
999*5113495bSYour Name 
1000*5113495bSYour Name 	if (mac_addr_ad4_valid) {
1001*5113495bSYour Name 		addr->ad4_31_0 = HAL_RX_TLV_MPDU_AD4_31_0_GET(pkt_tlvs);
1002*5113495bSYour Name 		addr->ad4_47_32 = HAL_RX_TLV_MPDU_AD4_47_32_GET(pkt_tlvs);
1003*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
1004*5113495bSYour Name 	}
1005*5113495bSYour Name 
1006*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
1007*5113495bSYour Name }
1008*5113495bSYour Name 
1009*5113495bSYour Name /**
1010*5113495bSYour Name  * hal_rx_priv_info_set_in_tlv_be() - Save the private info to
1011*5113495bSYour Name  *                             the reserved bytes of rx_tlv_hdr
1012*5113495bSYour Name  * @buf: start of rx_tlv_hdr
1013*5113495bSYour Name  * @priv_data: hal_wbm_err_desc_info structure
1014*5113495bSYour Name  * @len: length of the private data
1015*5113495bSYour Name  * Return: void
1016*5113495bSYour Name  */
hal_rx_priv_info_set_in_tlv_be(uint8_t * buf,uint8_t * priv_data,uint32_t len)1017*5113495bSYour Name static inline void hal_rx_priv_info_set_in_tlv_be(uint8_t *buf,
1018*5113495bSYour Name 						  uint8_t *priv_data,
1019*5113495bSYour Name 						  uint32_t len)
1020*5113495bSYour Name {
1021*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1022*5113495bSYour Name 	uint32_t copy_len = (len > RX_BE_PADDING0_BYTES) ?
1023*5113495bSYour Name 			    RX_BE_PADDING0_BYTES : len;
1024*5113495bSYour Name 
1025*5113495bSYour Name 	qdf_mem_copy(pkt_tlvs->rx_padding0, priv_data, copy_len);
1026*5113495bSYour Name }
1027*5113495bSYour Name 
1028*5113495bSYour Name /**
1029*5113495bSYour Name  * hal_rx_priv_info_get_from_tlv_be() - retrieve the private data from
1030*5113495bSYour Name  *                             the reserved bytes of rx_tlv_hdr.
1031*5113495bSYour Name  * @buf: start of rx_tlv_hdr
1032*5113495bSYour Name  * @priv_data: Handle to get the private data, output parameter.
1033*5113495bSYour Name  * @len: length of the private data
1034*5113495bSYour Name  * Return: void
1035*5113495bSYour Name  */
hal_rx_priv_info_get_from_tlv_be(uint8_t * buf,uint8_t * priv_data,uint32_t len)1036*5113495bSYour Name static inline void hal_rx_priv_info_get_from_tlv_be(uint8_t *buf,
1037*5113495bSYour Name 						    uint8_t *priv_data,
1038*5113495bSYour Name 						    uint32_t len)
1039*5113495bSYour Name {
1040*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1041*5113495bSYour Name 	uint32_t copy_len = (len > RX_BE_PADDING0_BYTES) ?
1042*5113495bSYour Name 			    RX_BE_PADDING0_BYTES : len;
1043*5113495bSYour Name 
1044*5113495bSYour Name 	qdf_mem_copy(priv_data, pkt_tlvs->rx_padding0, copy_len);
1045*5113495bSYour Name }
1046*5113495bSYour Name 
1047*5113495bSYour Name /**
1048*5113495bSYour Name  * hal_rx_tlv_l3_type_get_be() - API to get the l3 type from
1049*5113495bSYour Name  *                               rx_msdu_start TLV
1050*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1051*5113495bSYour Name  *
1052*5113495bSYour Name  * Return: uint32_t(l3 type)
1053*5113495bSYour Name  */
hal_rx_tlv_l3_type_get_be(uint8_t * buf)1054*5113495bSYour Name static inline uint32_t hal_rx_tlv_l3_type_get_be(uint8_t *buf)
1055*5113495bSYour Name {
1056*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1057*5113495bSYour Name 
1058*5113495bSYour Name 	return HAL_RX_TLV_L3_TYPE_GET(rx_pkt_tlvs);
1059*5113495bSYour Name }
1060*5113495bSYour Name 
1061*5113495bSYour Name /**
1062*5113495bSYour Name  * hal_rx_hw_desc_get_ppduid_get_be() - retrieve ppdu id
1063*5113495bSYour Name  * @rx_tlv_hdr: start address of rx_pkt_tlvs
1064*5113495bSYour Name  * @rxdma_dst_ring_desc: Rx HW descriptor
1065*5113495bSYour Name  *
1066*5113495bSYour Name  * Return: ppdu id
1067*5113495bSYour Name  */
1068*5113495bSYour Name static inline uint32_t
hal_rx_hw_desc_get_ppduid_get_be(void * rx_tlv_hdr,void * rxdma_dst_ring_desc)1069*5113495bSYour Name hal_rx_hw_desc_get_ppduid_get_be(void *rx_tlv_hdr, void *rxdma_dst_ring_desc)
1070*5113495bSYour Name {
1071*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs =
1072*5113495bSYour Name 					(struct rx_pkt_tlvs *)rx_tlv_hdr;
1073*5113495bSYour Name 
1074*5113495bSYour Name 	return HAL_RX_TLV_PHY_PPDU_ID_GET(rx_pkt_tlvs);
1075*5113495bSYour Name }
1076*5113495bSYour Name 
1077*5113495bSYour Name /**
1078*5113495bSYour Name  * hal_rx_tlv_phy_ppdu_id_get_be() - get phy_ppdu_id value
1079*5113495bSYour Name  * from rx attention
1080*5113495bSYour Name  * @buf: pointer to rx_pkt_tlvs
1081*5113495bSYour Name  *
1082*5113495bSYour Name  * Return: phy_ppdu_id
1083*5113495bSYour Name  */
hal_rx_tlv_phy_ppdu_id_get_be(uint8_t * buf)1084*5113495bSYour Name static inline uint16_t hal_rx_tlv_phy_ppdu_id_get_be(uint8_t *buf)
1085*5113495bSYour Name {
1086*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1087*5113495bSYour Name 
1088*5113495bSYour Name 	return HAL_RX_TLV_PHY_PPDU_ID_GET(rx_pkt_tlvs);
1089*5113495bSYour Name }
1090*5113495bSYour Name 
1091*5113495bSYour Name /**
1092*5113495bSYour Name  * hal_rx_attn_phy_ppdu_id_get_be() - get phy_ppdu_id value
1093*5113495bSYour Name  * from rx attention
1094*5113495bSYour Name  * @buf: pointer to rx_pkt_tlvs
1095*5113495bSYour Name  *
1096*5113495bSYour Name  * Return: phy_ppdu_id
1097*5113495bSYour Name  */
hal_rx_attn_phy_ppdu_id_get_be(uint8_t * buf)1098*5113495bSYour Name static inline uint16_t hal_rx_attn_phy_ppdu_id_get_be(uint8_t *buf)
1099*5113495bSYour Name {
1100*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1101*5113495bSYour Name 	uint16_t phy_ppdu_id;
1102*5113495bSYour Name 
1103*5113495bSYour Name 	phy_ppdu_id = HAL_RX_TLV_PHY_PPDU_ID_GET(rx_pkt_tlvs);
1104*5113495bSYour Name 
1105*5113495bSYour Name 	return phy_ppdu_id;
1106*5113495bSYour Name }
1107*5113495bSYour Name 
1108*5113495bSYour Name static inline uint32_t
hal_rx_get_ppdu_id_be(uint8_t * buf)1109*5113495bSYour Name hal_rx_get_ppdu_id_be(uint8_t *buf)
1110*5113495bSYour Name {
1111*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1112*5113495bSYour Name 
1113*5113495bSYour Name 	return HAL_RX_GET_PPDU_ID(rx_pkt_tlvs);
1114*5113495bSYour Name }
1115*5113495bSYour Name 
1116*5113495bSYour Name /**
1117*5113495bSYour Name  * hal_rx_mpdu_peer_meta_data_set_be() - set peer meta data in RX mpdu start tlv
1118*5113495bSYour Name  * @buf: rx_tlv_hdr of the received packet
1119*5113495bSYour Name  * @peer_mdata: peer meta data to be set.
1120*5113495bSYour Name  *
1121*5113495bSYour Name  * Return: void
1122*5113495bSYour Name  */
1123*5113495bSYour Name static inline void
hal_rx_mpdu_peer_meta_data_set_be(uint8_t * buf,uint32_t peer_mdata)1124*5113495bSYour Name hal_rx_mpdu_peer_meta_data_set_be(uint8_t *buf, uint32_t peer_mdata)
1125*5113495bSYour Name {
1126*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1127*5113495bSYour Name 
1128*5113495bSYour Name 	HAL_RX_TLV_PEER_META_DATA_GET(rx_pkt_tlvs) = peer_mdata;
1129*5113495bSYour Name }
1130*5113495bSYour Name 
1131*5113495bSYour Name /*
1132*5113495bSYour Name  * Get peer_meta_data from RX_MPDU_INFO within RX_MPDU_START
1133*5113495bSYour Name  */
1134*5113495bSYour Name 
hal_rx_mpdu_peer_meta_data_get_be(uint8_t * buf)1135*5113495bSYour Name static inline uint32_t hal_rx_mpdu_peer_meta_data_get_be(uint8_t *buf)
1136*5113495bSYour Name {
1137*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1138*5113495bSYour Name 
1139*5113495bSYour Name 	return HAL_RX_TLV_PEER_META_DATA_GET(rx_pkt_tlvs);
1140*5113495bSYour Name }
1141*5113495bSYour Name 
hal_rx_get_filter_category_be(uint8_t * buf)1142*5113495bSYour Name static inline uint8_t hal_rx_get_filter_category_be(uint8_t *buf)
1143*5113495bSYour Name {
1144*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1145*5113495bSYour Name 
1146*5113495bSYour Name 	return HAL_RX_GET_FILTER_CATEGORY(rx_pkt_tlvs);
1147*5113495bSYour Name }
1148*5113495bSYour Name 
1149*5113495bSYour Name /**
1150*5113495bSYour Name  * hal_rx_is_unicast_be() - check packet is unicast frame or not.
1151*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
1152*5113495bSYour Name  *
1153*5113495bSYour Name  * Return: true on unicast.
1154*5113495bSYour Name  */
hal_rx_is_unicast_be(uint8_t * buf)1155*5113495bSYour Name static inline bool hal_rx_is_unicast_be(uint8_t *buf)
1156*5113495bSYour Name {
1157*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1158*5113495bSYour Name 	uint32_t grp_id;
1159*5113495bSYour Name 
1160*5113495bSYour Name 	grp_id = HAL_RX_TLV_SW_FRAME_GROUP_ID_GET(rx_pkt_tlvs);
1161*5113495bSYour Name 
1162*5113495bSYour Name 	return (HAL_MPDU_SW_FRAME_GROUP_UNICAST_DATA == grp_id) ? true : false;
1163*5113495bSYour Name }
1164*5113495bSYour Name 
1165*5113495bSYour Name #else
1166*5113495bSYour Name #define IS_ADDR_MULTICAST(_a)  (*(_a) & 0x01)
hal_rx_is_unicast_be(uint8_t * buf)1167*5113495bSYour Name static inline bool hal_rx_is_unicast_be(uint8_t *buf)
1168*5113495bSYour Name {
1169*5113495bSYour Name 	uint8_t mac[QDF_MAC_ADDR_SIZE] = {0};
1170*5113495bSYour Name 
1171*5113495bSYour Name 	hal_rx_mpdu_get_addr1_be(buf, &mac[0]);
1172*5113495bSYour Name 
1173*5113495bSYour Name 	return !IS_ADDR_MULTICAST(mac);
1174*5113495bSYour Name }
1175*5113495bSYour Name 
1176*5113495bSYour Name /**
1177*5113495bSYour Name  * hal_rx_priv_info_set_in_tlv_be() - Save the private info to
1178*5113495bSYour Name  *                             the reserved bytes of rx_tlv_hdr
1179*5113495bSYour Name  * @buf: start of rx_tlv_hdr
1180*5113495bSYour Name  * @priv_data: hal_wbm_err_desc_info structure
1181*5113495bSYour Name  * @len: length of the private data
1182*5113495bSYour Name  *
1183*5113495bSYour Name  * Return: void
1184*5113495bSYour Name  */
hal_rx_priv_info_set_in_tlv_be(uint8_t * buf,uint8_t * priv_data,uint32_t len)1185*5113495bSYour Name static inline void hal_rx_priv_info_set_in_tlv_be(uint8_t *buf,
1186*5113495bSYour Name 						  uint8_t *priv_data,
1187*5113495bSYour Name 						  uint32_t len)
1188*5113495bSYour Name {
1189*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1190*5113495bSYour Name 	uint32_t copy_len = (len > RX_BE_PADDING0_BYTES) ?
1191*5113495bSYour Name 			    RX_BE_PADDING0_BYTES : len;
1192*5113495bSYour Name 
1193*5113495bSYour Name 	qdf_mem_copy(&(HAL_RX_MSDU_END(pkt_tlvs).ppdu_start_timestamp_63_32),
1194*5113495bSYour Name 		     priv_data, copy_len);
1195*5113495bSYour Name }
1196*5113495bSYour Name 
1197*5113495bSYour Name /**
1198*5113495bSYour Name  * hal_rx_priv_info_get_from_tlv_be() - retrieve the private data from
1199*5113495bSYour Name  *                             the reserved bytes of rx_tlv_hdr.
1200*5113495bSYour Name  * @buf: start of rx_tlv_hdr
1201*5113495bSYour Name  * @priv_data: Handle to get the private data, output parameter.
1202*5113495bSYour Name  * @len: length of the private data
1203*5113495bSYour Name  *
1204*5113495bSYour Name  * Return: void
1205*5113495bSYour Name  */
hal_rx_priv_info_get_from_tlv_be(uint8_t * buf,uint8_t * priv_data,uint32_t len)1206*5113495bSYour Name static inline void hal_rx_priv_info_get_from_tlv_be(uint8_t *buf,
1207*5113495bSYour Name 						    uint8_t *priv_data,
1208*5113495bSYour Name 						    uint32_t len)
1209*5113495bSYour Name {
1210*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1211*5113495bSYour Name 	uint32_t copy_len = (len > RX_BE_PADDING0_BYTES) ?
1212*5113495bSYour Name 			    RX_BE_PADDING0_BYTES : len;
1213*5113495bSYour Name 
1214*5113495bSYour Name 	qdf_mem_copy(priv_data,
1215*5113495bSYour Name 		     &(HAL_RX_MSDU_END(pkt_tlvs).ppdu_start_timestamp_63_32),
1216*5113495bSYour Name 		     copy_len);
1217*5113495bSYour Name }
1218*5113495bSYour Name 
1219*5113495bSYour Name /**
1220*5113495bSYour Name  * hal_rx_print_pn_be() - Prints the PN of rx packet.
1221*5113495bSYour Name  * @buf: rx_tlv_hdr of the received packet
1222*5113495bSYour Name  *
1223*5113495bSYour Name  * Return: void
1224*5113495bSYour Name  */
hal_rx_print_pn_be(uint8_t * buf)1225*5113495bSYour Name static inline void hal_rx_print_pn_be(uint8_t *buf)
1226*5113495bSYour Name {
1227*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1228*5113495bSYour Name 
1229*5113495bSYour Name 	uint32_t pn_31_0 = HAL_RX_TLV_MPDU_PN_31_0_GET(rx_pkt_tlvs);
1230*5113495bSYour Name 	uint32_t pn_63_32 = HAL_RX_TLV_MPDU_PN_63_32_GET(rx_pkt_tlvs);
1231*5113495bSYour Name 	uint32_t pn_95_64 = HAL_RX_TLV_MPDU_PN_95_64_GET(rx_pkt_tlvs);
1232*5113495bSYour Name 
1233*5113495bSYour Name 	hal_debug("PN number pn_95_64 0x%x pn_63_32 0x%x pn_31_0 0x%x",
1234*5113495bSYour Name 		  pn_95_64, pn_63_32, pn_31_0);
1235*5113495bSYour Name }
1236*5113495bSYour Name 
hal_rx_tlv_get_pn_num_be(uint8_t * buf,uint64_t * pn_num)1237*5113495bSYour Name static inline void hal_rx_tlv_get_pn_num_be(uint8_t *buf, uint64_t *pn_num)
1238*5113495bSYour Name {
1239*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1240*5113495bSYour Name 
1241*5113495bSYour Name 	pn_num[0] = HAL_RX_TLV_MPDU_PN_31_0_GET(pkt_tlvs);
1242*5113495bSYour Name 	pn_num[0] |= ((uint64_t)HAL_RX_TLV_MPDU_PN_63_32_GET(pkt_tlvs) << 32);
1243*5113495bSYour Name 
1244*5113495bSYour Name 	pn_num[1] = HAL_RX_TLV_MPDU_PN_95_64_GET(pkt_tlvs);
1245*5113495bSYour Name }
1246*5113495bSYour Name 
1247*5113495bSYour Name #ifdef NO_RX_PKT_HDR_TLV
1248*5113495bSYour Name static inline uint32_t
hal_rx_get_ppdu_id_be(uint8_t * buf)1249*5113495bSYour Name hal_rx_get_ppdu_id_be(uint8_t *buf)
1250*5113495bSYour Name {
1251*5113495bSYour Name 	/* If CONFIG_WORD_BASED_TLV and NO_RX_PKT_HDR_TLV are enabled
1252*5113495bSYour Name 	 * phy_ppdu_id is not available
1253*5113495bSYour Name 	 */
1254*5113495bSYour Name 	hal_alert_rl("PPDU_ID is not subscribed check build flags");
1255*5113495bSYour Name 	return 0;
1256*5113495bSYour Name }
1257*5113495bSYour Name #else
1258*5113495bSYour Name static inline uint32_t
hal_rx_get_ppdu_id_be(uint8_t * buf)1259*5113495bSYour Name hal_rx_get_ppdu_id_be(uint8_t *buf)
1260*5113495bSYour Name {
1261*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1262*5113495bSYour Name 
1263*5113495bSYour Name 	return HAL_RX_PKT_HDR_TLV_PHY_PPDU_ID_GET(rx_pkt_tlvs);
1264*5113495bSYour Name }
1265*5113495bSYour Name #endif
1266*5113495bSYour Name #endif
1267*5113495bSYour Name 
1268*5113495bSYour Name /**
1269*5113495bSYour Name  * hal_rx_tlv_msdu_len_get_be() - API to get the MSDU length from
1270*5113495bSYour Name  *                                rx_msdu_start TLV
1271*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1272*5113495bSYour Name  *
1273*5113495bSYour Name  * Return: msdu length
1274*5113495bSYour Name  */
hal_rx_tlv_msdu_len_get_be(uint8_t * buf)1275*5113495bSYour Name static inline uint32_t hal_rx_tlv_msdu_len_get_be(uint8_t *buf)
1276*5113495bSYour Name {
1277*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1278*5113495bSYour Name 
1279*5113495bSYour Name 	return HAL_RX_TLV_MSDU_LEN_GET(rx_pkt_tlvs);
1280*5113495bSYour Name }
1281*5113495bSYour Name 
1282*5113495bSYour Name /**
1283*5113495bSYour Name  * hal_rx_tlv_msdu_len_set_be() - API to set the MSDU length from
1284*5113495bSYour Name  *                                rx_msdu_start TLV
1285*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1286*5113495bSYour Name  * @len: msdu length
1287*5113495bSYour Name  *
1288*5113495bSYour Name  * Return: none
1289*5113495bSYour Name  */
hal_rx_tlv_msdu_len_set_be(uint8_t * buf,uint32_t len)1290*5113495bSYour Name static inline void hal_rx_tlv_msdu_len_set_be(uint8_t *buf, uint32_t len)
1291*5113495bSYour Name {
1292*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1293*5113495bSYour Name 
1294*5113495bSYour Name 	HAL_RX_TLV_MSDU_LEN_GET(rx_pkt_tlvs) = len;
1295*5113495bSYour Name }
1296*5113495bSYour Name 
1297*5113495bSYour Name /**
1298*5113495bSYour Name  * hal_rx_tlv_bw_get_be() - API to get the Bandwidth Interval from
1299*5113495bSYour Name  *                          rx_msdu_start
1300*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1301*5113495bSYour Name  *
1302*5113495bSYour Name  * Return: uint32_t(bw)
1303*5113495bSYour Name  */
hal_rx_tlv_bw_get_be(uint8_t * buf)1304*5113495bSYour Name static inline uint32_t hal_rx_tlv_bw_get_be(uint8_t *buf)
1305*5113495bSYour Name {
1306*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1307*5113495bSYour Name 
1308*5113495bSYour Name 	return HAL_RX_TLV_BW_GET(rx_pkt_tlvs);
1309*5113495bSYour Name }
1310*5113495bSYour Name 
1311*5113495bSYour Name /**
1312*5113495bSYour Name  * hal_rx_tlv_toeplitz_get_be() - API to get the toeplitz hash from
1313*5113495bSYour Name  *                                rx_msdu_start TLV
1314*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1315*5113495bSYour Name  *
1316*5113495bSYour Name  * Return: toeplitz hash
1317*5113495bSYour Name  */
hal_rx_tlv_toeplitz_get_be(uint8_t * buf)1318*5113495bSYour Name static inline uint32_t hal_rx_tlv_toeplitz_get_be(uint8_t *buf)
1319*5113495bSYour Name {
1320*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1321*5113495bSYour Name 
1322*5113495bSYour Name 	return HAL_RX_TLV_FLOWID_TOEPLITZ_GET(rx_pkt_tlvs);
1323*5113495bSYour Name }
1324*5113495bSYour Name 
1325*5113495bSYour Name /**
1326*5113495bSYour Name  * hal_rx_tlv_sgi_get_be() - API to get the Short Guard Interval from
1327*5113495bSYour Name  *                           rx_msdu_start TLV
1328*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1329*5113495bSYour Name  *
1330*5113495bSYour Name  * Return: uint32_t(sgi)
1331*5113495bSYour Name  */
hal_rx_tlv_sgi_get_be(uint8_t * buf)1332*5113495bSYour Name static inline uint32_t hal_rx_tlv_sgi_get_be(uint8_t *buf)
1333*5113495bSYour Name {
1334*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1335*5113495bSYour Name 
1336*5113495bSYour Name 	return HAL_RX_TLV_SGI_GET(rx_pkt_tlvs);
1337*5113495bSYour Name }
1338*5113495bSYour Name 
1339*5113495bSYour Name /**
1340*5113495bSYour Name  * hal_rx_tlv_rate_mcs_get_be() - API to get the MCS rate from
1341*5113495bSYour Name  *                                rx_msdu_start TLV
1342*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1343*5113495bSYour Name  *
1344*5113495bSYour Name  * Return: uint32_t(rate_mcs)
1345*5113495bSYour Name  */
hal_rx_tlv_rate_mcs_get_be(uint8_t * buf)1346*5113495bSYour Name static inline uint32_t hal_rx_tlv_rate_mcs_get_be(uint8_t *buf)
1347*5113495bSYour Name {
1348*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1349*5113495bSYour Name 	uint32_t rate_mcs;
1350*5113495bSYour Name 
1351*5113495bSYour Name 	rate_mcs = HAL_RX_TLV_RATE_MCS_GET(rx_pkt_tlvs);
1352*5113495bSYour Name 
1353*5113495bSYour Name 	return rate_mcs;
1354*5113495bSYour Name }
1355*5113495bSYour Name 
1356*5113495bSYour Name /**
1357*5113495bSYour Name  * hal_rx_msdu_get_keyid_be() - API to get the key id of the decrypted packet
1358*5113495bSYour Name  *                              from rx_msdu_end
1359*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1360*5113495bSYour Name  *
1361*5113495bSYour Name  * Return: uint32_t(key id)
1362*5113495bSYour Name  */
1363*5113495bSYour Name 
hal_rx_msdu_get_keyid_be(uint8_t * buf)1364*5113495bSYour Name static inline uint8_t hal_rx_msdu_get_keyid_be(uint8_t *buf)
1365*5113495bSYour Name {
1366*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1367*5113495bSYour Name 	uint32_t keyid_octet;
1368*5113495bSYour Name 
1369*5113495bSYour Name 	keyid_octet = HAL_RX_TLV_KEYID_OCTET_GET(rx_pkt_tlvs);
1370*5113495bSYour Name 
1371*5113495bSYour Name 	return keyid_octet & 0x3;
1372*5113495bSYour Name }
1373*5113495bSYour Name 
1374*5113495bSYour Name /**
1375*5113495bSYour Name  * hal_rx_tlv_get_rssi_be() - API to get the rssi of received pkt from
1376*5113495bSYour Name  *                            rx_msdu_start
1377*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1378*5113495bSYour Name  *
1379*5113495bSYour Name  * Return: uint32_t(rssi)
1380*5113495bSYour Name  */
1381*5113495bSYour Name 
hal_rx_tlv_get_rssi_be(uint8_t * buf)1382*5113495bSYour Name static inline uint32_t hal_rx_tlv_get_rssi_be(uint8_t *buf)
1383*5113495bSYour Name {
1384*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1385*5113495bSYour Name 	uint32_t rssi;
1386*5113495bSYour Name 
1387*5113495bSYour Name 	rssi = HAL_RX_TLV_RSSI_GET(rx_pkt_tlvs);
1388*5113495bSYour Name 
1389*5113495bSYour Name 	return rssi;
1390*5113495bSYour Name }
1391*5113495bSYour Name 
1392*5113495bSYour Name /**
1393*5113495bSYour Name  * hal_rx_tlv_get_freq_be() - API to get the frequency of operating
1394*5113495bSYour Name  *                            channel from rx_msdu_start
1395*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1396*5113495bSYour Name  *
1397*5113495bSYour Name  * Return: uint32_t(frequency)
1398*5113495bSYour Name  */
1399*5113495bSYour Name 
hal_rx_tlv_get_freq_be(uint8_t * buf)1400*5113495bSYour Name static inline uint32_t hal_rx_tlv_get_freq_be(uint8_t *buf)
1401*5113495bSYour Name {
1402*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1403*5113495bSYour Name 	uint32_t freq;
1404*5113495bSYour Name 
1405*5113495bSYour Name 	freq = HAL_RX_TLV_FREQ_GET(rx_pkt_tlvs);
1406*5113495bSYour Name 
1407*5113495bSYour Name 	return freq;
1408*5113495bSYour Name }
1409*5113495bSYour Name 
1410*5113495bSYour Name 
1411*5113495bSYour Name /**
1412*5113495bSYour Name  * hal_rx_tlv_get_pkt_type_be() - API to get the pkt type from
1413*5113495bSYour Name  *                                rx_msdu_start
1414*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1415*5113495bSYour Name  *
1416*5113495bSYour Name  * Return: uint32_t(pkt type)
1417*5113495bSYour Name  */
1418*5113495bSYour Name 
hal_rx_tlv_get_pkt_type_be(uint8_t * buf)1419*5113495bSYour Name static inline uint32_t hal_rx_tlv_get_pkt_type_be(uint8_t *buf)
1420*5113495bSYour Name {
1421*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1422*5113495bSYour Name 	uint32_t pkt_type;
1423*5113495bSYour Name 
1424*5113495bSYour Name 	pkt_type = HAL_RX_TLV_PKT_TYPE_GET(rx_pkt_tlvs);
1425*5113495bSYour Name 
1426*5113495bSYour Name 	return pkt_type;
1427*5113495bSYour Name }
1428*5113495bSYour Name 
1429*5113495bSYour Name /*******************************************************************************
1430*5113495bSYour Name  * RX ERROR APIS
1431*5113495bSYour Name  ******************************************************************************/
1432*5113495bSYour Name 
1433*5113495bSYour Name /**
1434*5113495bSYour Name  * hal_rx_tlv_decrypt_err_get_be() - API to get the Decrypt ERR from
1435*5113495bSYour Name  *                                   rx_mpdu_end TLV
1436*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1437*5113495bSYour Name  *
1438*5113495bSYour Name  * Return: uint32_t(decrypt_err)
1439*5113495bSYour Name  */
hal_rx_tlv_decrypt_err_get_be(uint8_t * buf)1440*5113495bSYour Name static inline uint32_t hal_rx_tlv_decrypt_err_get_be(uint8_t *buf)
1441*5113495bSYour Name {
1442*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1443*5113495bSYour Name 	uint32_t decrypt_err;
1444*5113495bSYour Name 
1445*5113495bSYour Name 	decrypt_err = HAL_RX_TLV_DECRYPT_ERR_GET(rx_pkt_tlvs);
1446*5113495bSYour Name 
1447*5113495bSYour Name 	return decrypt_err;
1448*5113495bSYour Name }
1449*5113495bSYour Name 
1450*5113495bSYour Name /**
1451*5113495bSYour Name  * hal_rx_tlv_mic_err_get_be() - API to get the MIC ERR from rx_tlv TLV
1452*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1453*5113495bSYour Name  *
1454*5113495bSYour Name  * Return: uint32_t(mic_err)
1455*5113495bSYour Name  */
hal_rx_tlv_mic_err_get_be(uint8_t * buf)1456*5113495bSYour Name static inline uint32_t hal_rx_tlv_mic_err_get_be(uint8_t *buf)
1457*5113495bSYour Name {
1458*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1459*5113495bSYour Name 	uint32_t mic_err;
1460*5113495bSYour Name 
1461*5113495bSYour Name 	mic_err = HAL_RX_TLV_MIC_ERR_GET(rx_pkt_tlvs);
1462*5113495bSYour Name 
1463*5113495bSYour Name 	return mic_err;
1464*5113495bSYour Name }
1465*5113495bSYour Name 
1466*5113495bSYour Name /**
1467*5113495bSYour Name  * hal_get_reo_ent_desc_qdesc_addr_be() - API to get qdesc address of
1468*5113495bSYour Name  *                                        reo entrance ring desc
1469*5113495bSYour Name  * @desc: reo entrance ring descriptor
1470*5113495bSYour Name  *
1471*5113495bSYour Name  * Return: qdesc address
1472*5113495bSYour Name  */
hal_get_reo_ent_desc_qdesc_addr_be(uint8_t * desc)1473*5113495bSYour Name static inline uint8_t *hal_get_reo_ent_desc_qdesc_addr_be(uint8_t *desc)
1474*5113495bSYour Name {
1475*5113495bSYour Name 	return desc + REO_ENTRANCE_RING_RX_REO_QUEUE_DESC_ADDR_31_0_OFFSET;
1476*5113495bSYour Name }
1477*5113495bSYour Name 
1478*5113495bSYour Name /**
1479*5113495bSYour Name  * hal_set_reo_ent_desc_reo_dest_ind_be() - API to set reo destination
1480*5113495bSYour Name  *                                          indication of reo entrance ring desc
1481*5113495bSYour Name  * @desc: reo ent ring descriptor
1482*5113495bSYour Name  * @dst_ind: reo destination indication value
1483*5113495bSYour Name  *
1484*5113495bSYour Name  * Return: None
1485*5113495bSYour Name  */
1486*5113495bSYour Name static inline void
hal_set_reo_ent_desc_reo_dest_ind_be(uint8_t * desc,uint32_t dst_ind)1487*5113495bSYour Name hal_set_reo_ent_desc_reo_dest_ind_be(uint8_t *desc, uint32_t dst_ind)
1488*5113495bSYour Name {
1489*5113495bSYour Name 	HAL_RX_FLD_SET(desc, REO_ENTRANCE_RING,
1490*5113495bSYour Name 		       REO_DESTINATION_INDICATION, dst_ind);
1491*5113495bSYour Name }
1492*5113495bSYour Name 
1493*5113495bSYour Name /**
1494*5113495bSYour Name  * hal_rx_mpdu_sequence_number_get_be() - Get mpdu sequence number
1495*5113495bSYour Name  * @buf: pointer to packet buffer
1496*5113495bSYour Name  *
1497*5113495bSYour Name  * Return: mpdu sequence
1498*5113495bSYour Name  */
hal_rx_mpdu_sequence_number_get_be(uint8_t * buf)1499*5113495bSYour Name static inline int hal_rx_mpdu_sequence_number_get_be(uint8_t *buf)
1500*5113495bSYour Name {
1501*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1502*5113495bSYour Name 
1503*5113495bSYour Name 	return HAL_RX_MPDU_SEQUENCE_NUMBER_GET(rx_pkt_tlvs);
1504*5113495bSYour Name }
1505*5113495bSYour Name 
1506*5113495bSYour Name /**
1507*5113495bSYour Name  * hal_rx_msdu_packet_metadata_get_generic_be() - API to get the msdu
1508*5113495bSYour Name  *                                                information from
1509*5113495bSYour Name  *                                                rx_msdu_end TLV
1510*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1511*5113495bSYour Name  * @pkt_msdu_metadata: pointer to the msdu info structure
1512*5113495bSYour Name  */
1513*5113495bSYour Name static inline void
hal_rx_msdu_packet_metadata_get_generic_be(uint8_t * buf,void * pkt_msdu_metadata)1514*5113495bSYour Name hal_rx_msdu_packet_metadata_get_generic_be(uint8_t *buf,
1515*5113495bSYour Name 					   void *pkt_msdu_metadata)
1516*5113495bSYour Name {
1517*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1518*5113495bSYour Name 	struct hal_rx_msdu_metadata *msdu_metadata =
1519*5113495bSYour Name 			(struct hal_rx_msdu_metadata *)pkt_msdu_metadata;
1520*5113495bSYour Name 
1521*5113495bSYour Name 	msdu_metadata->l3_hdr_pad =
1522*5113495bSYour Name 		HAL_RX_TLV_L3_HEADER_PADDING_GET(rx_pkt_tlvs);
1523*5113495bSYour Name 	msdu_metadata->sa_idx = HAL_RX_TLV_SA_IDX_GET(rx_pkt_tlvs);
1524*5113495bSYour Name 	msdu_metadata->da_idx = HAL_RX_TLV_DA_IDX_GET(rx_pkt_tlvs);
1525*5113495bSYour Name 	msdu_metadata->sa_sw_peer_id =
1526*5113495bSYour Name 		HAL_RX_TLV_SA_SW_PEER_ID_GET(rx_pkt_tlvs);
1527*5113495bSYour Name }
1528*5113495bSYour Name 
1529*5113495bSYour Name /**
1530*5113495bSYour Name  * hal_rx_tlv_nss_get_be() - API to get the NSS Interval from
1531*5113495bSYour Name  *                           rx_msdu_start
1532*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1533*5113495bSYour Name  *
1534*5113495bSYour Name  * Return: uint32_t(nss)
1535*5113495bSYour Name  */
hal_rx_tlv_nss_get_be(uint8_t * buf)1536*5113495bSYour Name static inline uint32_t hal_rx_tlv_nss_get_be(uint8_t *buf)
1537*5113495bSYour Name {
1538*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1539*5113495bSYour Name 	uint8_t mimo_ss_bitmap;
1540*5113495bSYour Name 
1541*5113495bSYour Name 	mimo_ss_bitmap = HAL_RX_TLV_MIMO_SS_BITMAP(rx_pkt_tlvs);
1542*5113495bSYour Name 
1543*5113495bSYour Name 	return qdf_get_hweight8(mimo_ss_bitmap);
1544*5113495bSYour Name }
1545*5113495bSYour Name 
1546*5113495bSYour Name #ifdef GET_MSDU_AGGREGATION
1547*5113495bSYour Name #define HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs)\
1548*5113495bSYour Name {\
1549*5113495bSYour Name 	bool first_msdu, last_msdu; \
1550*5113495bSYour Name 	first_msdu = HAL_RX_TLV_FIRST_MSDU_GET(rx_desc);\
1551*5113495bSYour Name 	last_msdu = HAL_RX_TLV_LAST_MSDU_GET(rx_desc);\
1552*5113495bSYour Name 	if (first_msdu && last_msdu)\
1553*5113495bSYour Name 		rs->rs_flags &= (~IEEE80211_AMSDU_FLAG);\
1554*5113495bSYour Name 	else\
1555*5113495bSYour Name 		rs->rs_flags |= (IEEE80211_AMSDU_FLAG); \
1556*5113495bSYour Name } \
1557*5113495bSYour Name 
1558*5113495bSYour Name #define HAL_RX_SET_MSDU_AGGREGATION((rs_mpdu), (rs_ppdu))\
1559*5113495bSYour Name {\
1560*5113495bSYour Name 	if (rs_mpdu->rs_flags & IEEE80211_AMSDU_FLAG)\
1561*5113495bSYour Name 		rs_ppdu->rs_flags |= IEEE80211_AMSDU_FLAG;\
1562*5113495bSYour Name } \
1563*5113495bSYour Name 
1564*5113495bSYour Name #else
1565*5113495bSYour Name #define HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs)
1566*5113495bSYour Name #define HAL_RX_SET_MSDU_AGGREGATION(rs_mpdu, rs_ppdu)
1567*5113495bSYour Name #endif
1568*5113495bSYour Name 
1569*5113495bSYour Name /**
1570*5113495bSYour Name  * hal_rx_mon_hw_desc_get_mpdu_status_be() - Retrieve MPDU status
1571*5113495bSYour Name  * @hw_desc_addr: Start address of Rx HW TLVs
1572*5113495bSYour Name  * @rs: Status for monitor mode
1573*5113495bSYour Name  *
1574*5113495bSYour Name  * Return: void
1575*5113495bSYour Name  */
1576*5113495bSYour Name static inline void
hal_rx_mon_hw_desc_get_mpdu_status_be(void * hw_desc_addr,struct mon_rx_status * rs)1577*5113495bSYour Name hal_rx_mon_hw_desc_get_mpdu_status_be(void *hw_desc_addr,
1578*5113495bSYour Name 				      struct mon_rx_status *rs)
1579*5113495bSYour Name {
1580*5113495bSYour Name 	uint32_t reg_value;
1581*5113495bSYour Name 	struct rx_pkt_tlvs *rx_desc =
1582*5113495bSYour Name 				(struct rx_pkt_tlvs *)hw_desc_addr;
1583*5113495bSYour Name 	const uint32_t sgi_hw_to_cdp[] = {
1584*5113495bSYour Name 		CDP_SGI_0_8_US,
1585*5113495bSYour Name 		CDP_SGI_0_4_US,
1586*5113495bSYour Name 		CDP_SGI_1_6_US,
1587*5113495bSYour Name 		CDP_SGI_3_2_US,
1588*5113495bSYour Name 	};
1589*5113495bSYour Name 
1590*5113495bSYour Name 	HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs);
1591*5113495bSYour Name 
1592*5113495bSYour Name 	rs->ant_signal_db = HAL_RX_TLV_ANT_SIGNAL_DB_GET(rx_desc);
1593*5113495bSYour Name 	rs->is_stbc = HAL_RX_TLV_STBC_GET(rx_desc);
1594*5113495bSYour Name 
1595*5113495bSYour Name 	reg_value = HAL_RX_TLV_SGI_GET(rx_desc);
1596*5113495bSYour Name 	rs->sgi = sgi_hw_to_cdp[reg_value];
1597*5113495bSYour Name 
1598*5113495bSYour Name 	reg_value = HAL_RX_TLV_RECEPTION_TYPE_GET(rx_desc);
1599*5113495bSYour Name 	rs->beamformed = (reg_value == HAL_RX_RECEPTION_TYPE_MU_MIMO) ? 1 : 0;
1600*5113495bSYour Name 	/* TODO: rs->beamformed should be set for SU beamforming also */
1601*5113495bSYour Name }
1602*5113495bSYour Name 
hal_rx_tlv_tid_get_be(uint8_t * buf)1603*5113495bSYour Name static inline uint32_t hal_rx_tlv_tid_get_be(uint8_t *buf)
1604*5113495bSYour Name {
1605*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1606*5113495bSYour Name 	uint32_t tid;
1607*5113495bSYour Name 
1608*5113495bSYour Name 	tid = HAL_RX_TLV_TID_GET(rx_pkt_tlvs);
1609*5113495bSYour Name 
1610*5113495bSYour Name 	return tid;
1611*5113495bSYour Name }
1612*5113495bSYour Name 
1613*5113495bSYour Name /**
1614*5113495bSYour Name  * hal_rx_tlv_reception_type_get_be() - API to get the reception type
1615*5113495bSYour Name  *                                      Interval from rx_msdu_start
1616*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1617*5113495bSYour Name  *
1618*5113495bSYour Name  * Return: uint32_t(reception_type)
1619*5113495bSYour Name  */
1620*5113495bSYour Name static inline
hal_rx_tlv_reception_type_get_be(uint8_t * buf)1621*5113495bSYour Name uint32_t hal_rx_tlv_reception_type_get_be(uint8_t *buf)
1622*5113495bSYour Name {
1623*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1624*5113495bSYour Name 	uint32_t reception_type;
1625*5113495bSYour Name 
1626*5113495bSYour Name 	reception_type = HAL_RX_TLV_RECEPTION_TYPE_GET(rx_pkt_tlvs);
1627*5113495bSYour Name 
1628*5113495bSYour Name 	return reception_type;
1629*5113495bSYour Name }
1630*5113495bSYour Name 
1631*5113495bSYour Name /**
1632*5113495bSYour Name  * hal_rx_msdu_end_da_idx_get_be() - API to get da_idx from
1633*5113495bSYour Name  *                                   rx_msdu_end TLV
1634*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1635*5113495bSYour Name  *
1636*5113495bSYour Name  * Return: da index
1637*5113495bSYour Name  */
hal_rx_msdu_end_da_idx_get_be(uint8_t * buf)1638*5113495bSYour Name static inline uint16_t hal_rx_msdu_end_da_idx_get_be(uint8_t *buf)
1639*5113495bSYour Name {
1640*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1641*5113495bSYour Name 	uint16_t da_idx;
1642*5113495bSYour Name 
1643*5113495bSYour Name 	da_idx = HAL_RX_TLV_DA_IDX_GET(rx_pkt_tlvs);
1644*5113495bSYour Name 
1645*5113495bSYour Name 	return da_idx;
1646*5113495bSYour Name }
1647*5113495bSYour Name 
1648*5113495bSYour Name /**
1649*5113495bSYour Name  * hal_rx_get_rx_fragment_number_be() - Function to retrieve rx fragment number
1650*5113495bSYour Name  * @buf: Network buffer
1651*5113495bSYour Name  *
1652*5113495bSYour Name  * Return: rx fragment number
1653*5113495bSYour Name  */
1654*5113495bSYour Name static inline
hal_rx_get_rx_fragment_number_be(uint8_t * buf)1655*5113495bSYour Name uint8_t hal_rx_get_rx_fragment_number_be(uint8_t *buf)
1656*5113495bSYour Name {
1657*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1658*5113495bSYour Name 
1659*5113495bSYour Name 	/* Return first 4 bits as fragment number */
1660*5113495bSYour Name 	return (HAL_RX_MPDU_SEQUENCE_NUMBER_GET(rx_pkt_tlvs) &
1661*5113495bSYour Name 		DOT11_SEQ_FRAG_MASK);
1662*5113495bSYour Name }
1663*5113495bSYour Name 
1664*5113495bSYour Name /**
1665*5113495bSYour Name  * hal_rx_tlv_da_is_mcbc_get_be() - API to check if pkt is MCBC from
1666*5113495bSYour Name  *                                  rx_msdu_end TLV
1667*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1668*5113495bSYour Name  *
1669*5113495bSYour Name  * Return: da_is_mcbc
1670*5113495bSYour Name  */
1671*5113495bSYour Name static inline uint8_t
hal_rx_tlv_da_is_mcbc_get_be(uint8_t * buf)1672*5113495bSYour Name hal_rx_tlv_da_is_mcbc_get_be(uint8_t *buf)
1673*5113495bSYour Name {
1674*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1675*5113495bSYour Name 
1676*5113495bSYour Name 	return HAL_RX_TLV_DA_IS_MCBC_GET(rx_pkt_tlvs);
1677*5113495bSYour Name }
1678*5113495bSYour Name 
1679*5113495bSYour Name /**
1680*5113495bSYour Name  * hal_rx_tlv_is_tkip_mic_err_get_be() - API to get tkip Mic error
1681*5113495bSYour Name  *                                       from rx_msdu_end TLV
1682*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1683*5113495bSYour Name  *
1684*5113495bSYour Name  * Return: tkip_mic_err
1685*5113495bSYour Name  */
1686*5113495bSYour Name static inline uint8_t
hal_rx_tlv_is_tkip_mic_err_get_be(uint8_t * buf)1687*5113495bSYour Name hal_rx_tlv_is_tkip_mic_err_get_be(uint8_t *buf)
1688*5113495bSYour Name {
1689*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1690*5113495bSYour Name 
1691*5113495bSYour Name 	return HAL_RX_TLV_IS_TKIP_MIC_ERR_GET(rx_pkt_tlvs);
1692*5113495bSYour Name }
1693*5113495bSYour Name 
1694*5113495bSYour Name /**
1695*5113495bSYour Name  * hal_rx_tlv_sa_is_valid_get_be() - API to get the sa_is_valid bit from
1696*5113495bSYour Name  *                                   rx_msdu_end TLV
1697*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1698*5113495bSYour Name  *
1699*5113495bSYour Name  * Return: sa_is_valid bit
1700*5113495bSYour Name  */
1701*5113495bSYour Name static inline uint8_t
hal_rx_tlv_sa_is_valid_get_be(uint8_t * buf)1702*5113495bSYour Name hal_rx_tlv_sa_is_valid_get_be(uint8_t *buf)
1703*5113495bSYour Name {
1704*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1705*5113495bSYour Name 	uint8_t sa_is_valid;
1706*5113495bSYour Name 
1707*5113495bSYour Name 	sa_is_valid = HAL_RX_TLV_SA_IS_VALID_GET(rx_pkt_tlvs);
1708*5113495bSYour Name 
1709*5113495bSYour Name 	return sa_is_valid;
1710*5113495bSYour Name }
1711*5113495bSYour Name 
1712*5113495bSYour Name /**
1713*5113495bSYour Name  * hal_rx_tlv_sa_idx_get_be() - API to get the sa_idx from rx_msdu_end TLV
1714*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1715*5113495bSYour Name  *
1716*5113495bSYour Name  * Return: sa_idx (SA AST index)
1717*5113495bSYour Name  */
1718*5113495bSYour Name static inline
hal_rx_tlv_sa_idx_get_be(uint8_t * buf)1719*5113495bSYour Name uint16_t hal_rx_tlv_sa_idx_get_be(uint8_t *buf)
1720*5113495bSYour Name {
1721*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1722*5113495bSYour Name 	uint16_t sa_idx;
1723*5113495bSYour Name 
1724*5113495bSYour Name 	sa_idx = HAL_RX_TLV_SA_IDX_GET(rx_pkt_tlvs);
1725*5113495bSYour Name 
1726*5113495bSYour Name 	return sa_idx;
1727*5113495bSYour Name }
1728*5113495bSYour Name 
1729*5113495bSYour Name /**
1730*5113495bSYour Name  * hal_rx_desc_is_first_msdu_be() - Check if first msdu
1731*5113495bSYour Name  * @hw_desc_addr: hardware descriptor address
1732*5113495bSYour Name  *
1733*5113495bSYour Name  * Return: 0 - success/ non-zero failure
1734*5113495bSYour Name  */
hal_rx_desc_is_first_msdu_be(void * hw_desc_addr)1735*5113495bSYour Name static inline uint32_t hal_rx_desc_is_first_msdu_be(void *hw_desc_addr)
1736*5113495bSYour Name {
1737*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs =
1738*5113495bSYour Name 				(struct rx_pkt_tlvs *)hw_desc_addr;
1739*5113495bSYour Name 
1740*5113495bSYour Name 	return HAL_RX_TLV_FIRST_MSDU_GET(rx_pkt_tlvs);
1741*5113495bSYour Name }
1742*5113495bSYour Name 
1743*5113495bSYour Name /**
1744*5113495bSYour Name  * hal_rx_tlv_l3_hdr_padding_get_be() - API to get the l3_header padding
1745*5113495bSYour Name  *					from rx_msdu_end TLV
1746*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1747*5113495bSYour Name  *
1748*5113495bSYour Name  * Return: number of l3 header padding bytes
1749*5113495bSYour Name  */
hal_rx_tlv_l3_hdr_padding_get_be(uint8_t * buf)1750*5113495bSYour Name static inline uint32_t hal_rx_tlv_l3_hdr_padding_get_be(uint8_t *buf)
1751*5113495bSYour Name {
1752*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1753*5113495bSYour Name 	uint32_t l3_header_padding;
1754*5113495bSYour Name 
1755*5113495bSYour Name 	l3_header_padding = HAL_RX_TLV_L3_HEADER_PADDING_GET(rx_pkt_tlvs);
1756*5113495bSYour Name 
1757*5113495bSYour Name 	return l3_header_padding;
1758*5113495bSYour Name }
1759*5113495bSYour Name 
1760*5113495bSYour Name /**
1761*5113495bSYour Name  * hal_rx_encryption_info_valid_be() - Returns encryption type.
1762*5113495bSYour Name  * @buf: rx_tlv_hdr of the received packet
1763*5113495bSYour Name  *
1764*5113495bSYour Name  * Return: encryption type
1765*5113495bSYour Name  */
hal_rx_encryption_info_valid_be(uint8_t * buf)1766*5113495bSYour Name static inline uint32_t hal_rx_encryption_info_valid_be(uint8_t *buf)
1767*5113495bSYour Name {
1768*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1769*5113495bSYour Name 	uint32_t encryption_info =
1770*5113495bSYour Name 			HAL_RX_TLV_MPDU_ENCRYPTION_INFO_VALID(rx_pkt_tlvs);
1771*5113495bSYour Name 
1772*5113495bSYour Name 	return encryption_info;
1773*5113495bSYour Name }
1774*5113495bSYour Name 
1775*5113495bSYour Name /**
1776*5113495bSYour Name  * hal_rx_tlv_first_msdu_get_be() - API to get first msdu status from
1777*5113495bSYour Name  *                                  rx_msdu_end TLV
1778*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1779*5113495bSYour Name  *
1780*5113495bSYour Name  * Return: first_msdu
1781*5113495bSYour Name  */
hal_rx_tlv_first_msdu_get_be(uint8_t * buf)1782*5113495bSYour Name static inline uint8_t hal_rx_tlv_first_msdu_get_be(uint8_t *buf)
1783*5113495bSYour Name {
1784*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1785*5113495bSYour Name 	uint8_t first_msdu;
1786*5113495bSYour Name 
1787*5113495bSYour Name 	first_msdu = HAL_RX_TLV_FIRST_MSDU_GET(rx_pkt_tlvs);
1788*5113495bSYour Name 
1789*5113495bSYour Name 	return first_msdu;
1790*5113495bSYour Name }
1791*5113495bSYour Name 
1792*5113495bSYour Name /**
1793*5113495bSYour Name  * hal_rx_tlv_da_is_valid_get_be() - API to check if da is valid from
1794*5113495bSYour Name  *                                   rx_msdu_end TLV
1795*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1796*5113495bSYour Name  *
1797*5113495bSYour Name  * Return: da_is_valid
1798*5113495bSYour Name  */
hal_rx_tlv_da_is_valid_get_be(uint8_t * buf)1799*5113495bSYour Name static inline uint8_t hal_rx_tlv_da_is_valid_get_be(uint8_t *buf)
1800*5113495bSYour Name {
1801*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1802*5113495bSYour Name 	uint8_t da_is_valid;
1803*5113495bSYour Name 
1804*5113495bSYour Name 	da_is_valid = HAL_RX_TLV_DA_IS_VALID_GET(rx_pkt_tlvs);
1805*5113495bSYour Name 
1806*5113495bSYour Name 	return da_is_valid;
1807*5113495bSYour Name }
1808*5113495bSYour Name 
1809*5113495bSYour Name /**
1810*5113495bSYour Name  * hal_rx_tlv_last_msdu_get_be() - API to get last msdu status from
1811*5113495bSYour Name  *                                 rx_msdu_end TLV
1812*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1813*5113495bSYour Name  *
1814*5113495bSYour Name  * Return: last_msdu
1815*5113495bSYour Name  */
hal_rx_tlv_last_msdu_get_be(uint8_t * buf)1816*5113495bSYour Name static inline uint8_t hal_rx_tlv_last_msdu_get_be(uint8_t *buf)
1817*5113495bSYour Name {
1818*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1819*5113495bSYour Name 	uint8_t last_msdu;
1820*5113495bSYour Name 
1821*5113495bSYour Name 	last_msdu = HAL_RX_TLV_LAST_MSDU_GET(rx_pkt_tlvs);
1822*5113495bSYour Name 
1823*5113495bSYour Name 	return last_msdu;
1824*5113495bSYour Name }
1825*5113495bSYour Name 
1826*5113495bSYour Name /**
1827*5113495bSYour Name  * hal_rx_get_mpdu_mac_ad4_valid_be() - Retrieves if mpdu 4th addr is valid
1828*5113495bSYour Name  * @buf: Network buffer
1829*5113495bSYour Name  *
1830*5113495bSYour Name  * Return: value of mpdu 4th address valid field
1831*5113495bSYour Name  */
hal_rx_get_mpdu_mac_ad4_valid_be(uint8_t * buf)1832*5113495bSYour Name static inline bool hal_rx_get_mpdu_mac_ad4_valid_be(uint8_t *buf)
1833*5113495bSYour Name {
1834*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1835*5113495bSYour Name 	bool ad4_valid = 0;
1836*5113495bSYour Name 
1837*5113495bSYour Name 	ad4_valid = HAL_RX_TLV_MPDU_MAC_ADDR_AD4_VALID_GET(rx_pkt_tlvs);
1838*5113495bSYour Name 
1839*5113495bSYour Name 	return ad4_valid;
1840*5113495bSYour Name }
1841*5113495bSYour Name 
1842*5113495bSYour Name /**
1843*5113495bSYour Name  * hal_rx_mpdu_start_sw_peer_id_get_be() - Retrieve sw peer_id
1844*5113495bSYour Name  * @buf: network buffer
1845*5113495bSYour Name  *
1846*5113495bSYour Name  * Return: sw peer_id
1847*5113495bSYour Name  */
hal_rx_mpdu_start_sw_peer_id_get_be(uint8_t * buf)1848*5113495bSYour Name static inline uint32_t hal_rx_mpdu_start_sw_peer_id_get_be(uint8_t *buf)
1849*5113495bSYour Name {
1850*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1851*5113495bSYour Name 
1852*5113495bSYour Name 	return HAL_RX_TLV_SW_PEER_ID_GET(rx_pkt_tlvs);
1853*5113495bSYour Name }
1854*5113495bSYour Name 
1855*5113495bSYour Name /**
1856*5113495bSYour Name  * hal_rx_mpdu_get_to_ds_be() - API to get the tods info
1857*5113495bSYour Name  *                              from rx_mpdu_start
1858*5113495bSYour Name  *
1859*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1860*5113495bSYour Name  * Return: uint32_t(to_ds)
1861*5113495bSYour Name  */
hal_rx_mpdu_get_to_ds_be(uint8_t * buf)1862*5113495bSYour Name static inline uint32_t hal_rx_mpdu_get_to_ds_be(uint8_t *buf)
1863*5113495bSYour Name {
1864*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1865*5113495bSYour Name 
1866*5113495bSYour Name 	return HAL_RX_TLV_MPDU_GET_TODS(rx_pkt_tlvs);
1867*5113495bSYour Name }
1868*5113495bSYour Name 
1869*5113495bSYour Name /**
1870*5113495bSYour Name  * hal_rx_mpdu_get_fr_ds_be() - API to get the from ds info
1871*5113495bSYour Name  *                              from rx_mpdu_start
1872*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1873*5113495bSYour Name  *
1874*5113495bSYour Name  * Return: uint32_t(fr_ds)
1875*5113495bSYour Name  */
hal_rx_mpdu_get_fr_ds_be(uint8_t * buf)1876*5113495bSYour Name static inline uint32_t hal_rx_mpdu_get_fr_ds_be(uint8_t *buf)
1877*5113495bSYour Name {
1878*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1879*5113495bSYour Name 
1880*5113495bSYour Name 	return HAL_RX_TLV_MPDU_GET_FROMDS(rx_pkt_tlvs);
1881*5113495bSYour Name }
1882*5113495bSYour Name 
1883*5113495bSYour Name /**
1884*5113495bSYour Name  * hal_rx_get_mpdu_frame_control_valid_be() - Retrieves mpdu frame
1885*5113495bSYour Name  *                                  control valid
1886*5113495bSYour Name  * @buf: Network buffer
1887*5113495bSYour Name  *
1888*5113495bSYour Name  * Return: value of frame control valid field
1889*5113495bSYour Name  */
hal_rx_get_mpdu_frame_control_valid_be(uint8_t * buf)1890*5113495bSYour Name static inline uint8_t hal_rx_get_mpdu_frame_control_valid_be(uint8_t *buf)
1891*5113495bSYour Name {
1892*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1893*5113495bSYour Name 
1894*5113495bSYour Name 	return HAL_RX_TLV_MPDU_GET_FRAME_CONTROL_VALID(rx_pkt_tlvs);
1895*5113495bSYour Name }
1896*5113495bSYour Name 
1897*5113495bSYour Name /**
1898*5113495bSYour Name  * hal_rx_phy_legacy_get_rssi_be() - API to get RSSI from TLV
1899*5113495bSYour Name  *                                   WIFIPHYRX_RSSI_LEGACY_E
1900*5113495bSYour Name  * @buf: pointer to the start of WIFIPHYRX_RSSI_LEGACY_E TLV
1901*5113495bSYour Name  *
1902*5113495bSYour Name  * Return: value of RSSI
1903*5113495bSYour Name  */
hal_rx_phy_legacy_get_rssi_be(uint8_t * buf)1904*5113495bSYour Name static inline int8_t hal_rx_phy_legacy_get_rssi_be(uint8_t *buf)
1905*5113495bSYour Name {
1906*5113495bSYour Name 	return HAL_RX_GET_64(buf, PHYRX_RSSI_LEGACY, RSSI_COMB);
1907*5113495bSYour Name }
1908*5113495bSYour Name 
1909*5113495bSYour Name /**
1910*5113495bSYour Name  * hal_rx_mpdu_get_addr2_be() - API to check get address2 of the mpdu
1911*5113495bSYour Name  *                              in the packet
1912*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1913*5113495bSYour Name  * @mac_addr: pointer to mac address
1914*5113495bSYour Name  *
1915*5113495bSYour Name  * Return: success/failure
1916*5113495bSYour Name  */
hal_rx_mpdu_get_addr2_be(uint8_t * buf,uint8_t * mac_addr)1917*5113495bSYour Name static inline QDF_STATUS hal_rx_mpdu_get_addr2_be(uint8_t *buf,
1918*5113495bSYour Name 						  uint8_t *mac_addr)
1919*5113495bSYour Name {
1920*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1921*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr2 {
1922*5113495bSYour Name 		uint16_t ad2_15_0;
1923*5113495bSYour Name 		uint32_t ad2_47_16;
1924*5113495bSYour Name 	};
1925*5113495bSYour Name 	struct hal_addr2 *addr = (struct hal_addr2 *)mac_addr;
1926*5113495bSYour Name 	uint32_t mac_addr_ad2_valid;
1927*5113495bSYour Name 
1928*5113495bSYour Name 	mac_addr_ad2_valid = HAL_RX_TLV_MPDU_MAC_ADDR_AD2_VALID_GET(rx_pkt_tlvs);
1929*5113495bSYour Name 
1930*5113495bSYour Name 	if (mac_addr_ad2_valid) {
1931*5113495bSYour Name 		addr->ad2_15_0 = HAL_RX_TLV_MPDU_AD2_15_0_GET(rx_pkt_tlvs);
1932*5113495bSYour Name 		addr->ad2_47_16 = HAL_RX_TLV_MPDU_AD2_47_16_GET(rx_pkt_tlvs);
1933*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
1934*5113495bSYour Name 	}
1935*5113495bSYour Name 
1936*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
1937*5113495bSYour Name }
1938*5113495bSYour Name 
1939*5113495bSYour Name /**
1940*5113495bSYour Name  * hal_rx_mpdu_get_addr3_be() - API to get address3 of the mpdu in the
1941*5113495bSYour Name  *                              packet
1942*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1943*5113495bSYour Name  * @mac_addr: pointer to mac address
1944*5113495bSYour Name  *
1945*5113495bSYour Name  * Return: success/failure
1946*5113495bSYour Name  */
hal_rx_mpdu_get_addr3_be(uint8_t * buf,uint8_t * mac_addr)1947*5113495bSYour Name static inline QDF_STATUS hal_rx_mpdu_get_addr3_be(uint8_t *buf,
1948*5113495bSYour Name 						  uint8_t *mac_addr)
1949*5113495bSYour Name {
1950*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1951*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr3 {
1952*5113495bSYour Name 		uint32_t ad3_31_0;
1953*5113495bSYour Name 		uint16_t ad3_47_32;
1954*5113495bSYour Name 	};
1955*5113495bSYour Name 	struct hal_addr3 *addr = (struct hal_addr3 *)mac_addr;
1956*5113495bSYour Name 	uint32_t mac_addr_ad3_valid;
1957*5113495bSYour Name 
1958*5113495bSYour Name 	mac_addr_ad3_valid = HAL_RX_TLV_MPDU_MAC_ADDR_AD3_VALID_GET(rx_pkt_tlvs);
1959*5113495bSYour Name 
1960*5113495bSYour Name 	if (mac_addr_ad3_valid) {
1961*5113495bSYour Name 		addr->ad3_31_0 = HAL_RX_TLV_MPDU_AD3_31_0_GET(rx_pkt_tlvs);
1962*5113495bSYour Name 		addr->ad3_47_32 = HAL_RX_TLV_MPDU_AD3_47_32_GET(rx_pkt_tlvs);
1963*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
1964*5113495bSYour Name 	}
1965*5113495bSYour Name 
1966*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
1967*5113495bSYour Name }
1968*5113495bSYour Name 
1969*5113495bSYour Name /**
1970*5113495bSYour Name  * hal_rx_get_mpdu_sequence_control_valid_be() - Get mpdu sequence
1971*5113495bSYour Name  *                                               control valid
1972*5113495bSYour Name  * @buf: Network buffer
1973*5113495bSYour Name  *
1974*5113495bSYour Name  * Return: value of sequence control valid field
1975*5113495bSYour Name  */
hal_rx_get_mpdu_sequence_control_valid_be(uint8_t * buf)1976*5113495bSYour Name static inline uint8_t hal_rx_get_mpdu_sequence_control_valid_be(uint8_t *buf)
1977*5113495bSYour Name {
1978*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1979*5113495bSYour Name 
1980*5113495bSYour Name 	return HAL_RX_TLV_MPDU_GET_SEQUENCE_CONTROL_VALID(rx_pkt_tlvs);
1981*5113495bSYour Name }
1982*5113495bSYour Name 
1983*5113495bSYour Name /**
1984*5113495bSYour Name  * hal_rx_tid_get_be() - get tid based on qos control valid.
1985*5113495bSYour Name  * @hal_soc_hdl: hal_soc handle
1986*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
1987*5113495bSYour Name  *
1988*5113495bSYour Name  * Return: tid
1989*5113495bSYour Name  */
hal_rx_tid_get_be(hal_soc_handle_t hal_soc_hdl,uint8_t * buf)1990*5113495bSYour Name static inline uint32_t hal_rx_tid_get_be(hal_soc_handle_t hal_soc_hdl,
1991*5113495bSYour Name 					 uint8_t *buf)
1992*5113495bSYour Name {
1993*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1994*5113495bSYour Name 	uint8_t qos_control_valid =
1995*5113495bSYour Name 			HAL_RX_TLV_MPDU_QOS_CONTROL_VALID_GET(rx_pkt_tlvs);
1996*5113495bSYour Name 
1997*5113495bSYour Name 	if (qos_control_valid)
1998*5113495bSYour Name 		return hal_rx_tlv_tid_get_be(buf);
1999*5113495bSYour Name 
2000*5113495bSYour Name 	return HAL_RX_NON_QOS_TID;
2001*5113495bSYour Name }
2002*5113495bSYour Name 
2003*5113495bSYour Name static inline
hal_rx_get_fc_valid_be(uint8_t * buf)2004*5113495bSYour Name uint8_t hal_rx_get_fc_valid_be(uint8_t *buf)
2005*5113495bSYour Name {
2006*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2007*5113495bSYour Name 
2008*5113495bSYour Name 	return HAL_RX_TLV_GET_FC_VALID(rx_pkt_tlvs);
2009*5113495bSYour Name }
2010*5113495bSYour Name 
hal_rx_get_to_ds_flag_be(uint8_t * buf)2011*5113495bSYour Name static inline uint8_t hal_rx_get_to_ds_flag_be(uint8_t *buf)
2012*5113495bSYour Name {
2013*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2014*5113495bSYour Name 
2015*5113495bSYour Name 	return HAL_RX_TLV_GET_TO_DS_FLAG(rx_pkt_tlvs);
2016*5113495bSYour Name }
2017*5113495bSYour Name 
hal_rx_get_mac_addr2_valid_be(uint8_t * buf)2018*5113495bSYour Name static inline uint8_t hal_rx_get_mac_addr2_valid_be(uint8_t *buf)
2019*5113495bSYour Name {
2020*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2021*5113495bSYour Name 
2022*5113495bSYour Name 	return HAL_RX_TLV_MPDU_MAC_ADDR_AD2_VALID_GET(rx_pkt_tlvs);
2023*5113495bSYour Name }
2024*5113495bSYour Name 
2025*5113495bSYour Name /**
2026*5113495bSYour Name  * hal_rx_msdu_flow_idx_get_be() - API to get flow index from
2027*5113495bSYour Name  *                                 rx_msdu_end TLV
2028*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
2029*5113495bSYour Name  *
2030*5113495bSYour Name  * Return: flow index value from MSDU END TLV
2031*5113495bSYour Name  */
hal_rx_msdu_flow_idx_get_be(uint8_t * buf)2032*5113495bSYour Name static inline uint32_t hal_rx_msdu_flow_idx_get_be(uint8_t *buf)
2033*5113495bSYour Name {
2034*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2035*5113495bSYour Name 
2036*5113495bSYour Name 	return HAL_RX_TLV_FLOW_IDX_GET(pkt_tlvs);
2037*5113495bSYour Name }
2038*5113495bSYour Name 
2039*5113495bSYour Name /**
2040*5113495bSYour Name  * hal_rx_msdu_get_reo_destination_indication_be() - API to get
2041*5113495bSYour Name  *                                                   reo_destination_indication
2042*5113495bSYour Name  *                                                   from rx_msdu_end
2043*5113495bSYour Name  *                                                   TLV
2044*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
2045*5113495bSYour Name  * @reo_destination_indication: pointer to return value of
2046*5113495bSYour Name  *				reo_destination_indication
2047*5113495bSYour Name  *
2048*5113495bSYour Name  * Return: none
2049*5113495bSYour Name  */
2050*5113495bSYour Name static inline void
hal_rx_msdu_get_reo_destination_indication_be(uint8_t * buf,uint32_t * reo_destination_indication)2051*5113495bSYour Name hal_rx_msdu_get_reo_destination_indication_be(uint8_t *buf,
2052*5113495bSYour Name 						uint32_t *reo_destination_indication)
2053*5113495bSYour Name {
2054*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2055*5113495bSYour Name 
2056*5113495bSYour Name 	*reo_destination_indication = HAL_RX_TLV_REO_DEST_IND_GET(pkt_tlvs);
2057*5113495bSYour Name }
2058*5113495bSYour Name 
2059*5113495bSYour Name /**
2060*5113495bSYour Name  * hal_rx_msdu_flow_idx_invalid_be() - API to get flow index invalid
2061*5113495bSYour Name  *                                     from rx_msdu_end TLV
2062*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
2063*5113495bSYour Name  *
2064*5113495bSYour Name  * Return: flow index invalid value from MSDU END TLV
2065*5113495bSYour Name  */
hal_rx_msdu_flow_idx_invalid_be(uint8_t * buf)2066*5113495bSYour Name static inline bool hal_rx_msdu_flow_idx_invalid_be(uint8_t *buf)
2067*5113495bSYour Name {
2068*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2069*5113495bSYour Name 
2070*5113495bSYour Name 	return HAL_RX_TLV_FLOW_IDX_INVALID_GET(pkt_tlvs);
2071*5113495bSYour Name }
2072*5113495bSYour Name 
2073*5113495bSYour Name /**
2074*5113495bSYour Name  * hal_rx_msdu_flow_idx_timeout_be() - API to get flow index timeout
2075*5113495bSYour Name  *                                     from rx_msdu_end TLV
2076*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
2077*5113495bSYour Name  *
2078*5113495bSYour Name  * Return: flow index timeout value from MSDU END TLV
2079*5113495bSYour Name  */
hal_rx_msdu_flow_idx_timeout_be(uint8_t * buf)2080*5113495bSYour Name static inline bool hal_rx_msdu_flow_idx_timeout_be(uint8_t *buf)
2081*5113495bSYour Name {
2082*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2083*5113495bSYour Name 
2084*5113495bSYour Name 	return HAL_RX_TLV_FLOW_IDX_TIMEOUT_GET(pkt_tlvs);
2085*5113495bSYour Name }
2086*5113495bSYour Name 
2087*5113495bSYour Name /**
2088*5113495bSYour Name  * hal_rx_msdu_fse_metadata_get_be() - API to get FSE metadata from
2089*5113495bSYour Name  *                                     rx_msdu_end TLV
2090*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
2091*5113495bSYour Name  *
2092*5113495bSYour Name  * Return: fse metadata value from MSDU END TLV
2093*5113495bSYour Name  */
hal_rx_msdu_fse_metadata_get_be(uint8_t * buf)2094*5113495bSYour Name static inline uint32_t hal_rx_msdu_fse_metadata_get_be(uint8_t *buf)
2095*5113495bSYour Name {
2096*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2097*5113495bSYour Name 
2098*5113495bSYour Name 	return HAL_RX_TLV_FSE_METADATA_GET(pkt_tlvs);
2099*5113495bSYour Name }
2100*5113495bSYour Name 
2101*5113495bSYour Name /**
2102*5113495bSYour Name  * hal_rx_msdu_cce_metadata_get_be() - API to get CCE metadata from
2103*5113495bSYour Name  *                                     rx_msdu_end TLV
2104*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
2105*5113495bSYour Name  *
2106*5113495bSYour Name  * Return: cce_metadata
2107*5113495bSYour Name  */
2108*5113495bSYour Name static inline uint16_t
hal_rx_msdu_cce_metadata_get_be(uint8_t * buf)2109*5113495bSYour Name hal_rx_msdu_cce_metadata_get_be(uint8_t *buf)
2110*5113495bSYour Name {
2111*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2112*5113495bSYour Name 
2113*5113495bSYour Name 	return HAL_RX_TLV_CCE_METADATA_GET(pkt_tlvs);
2114*5113495bSYour Name }
2115*5113495bSYour Name 
2116*5113495bSYour Name /**
2117*5113495bSYour Name  * hal_rx_msdu_get_flow_params_be() - API to get flow index, flow
2118*5113495bSYour Name  *                                    index invalid and flow index
2119*5113495bSYour Name  *                                    timeout from rx_msdu_end TLV
2120*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
2121*5113495bSYour Name  * @flow_invalid: pointer to return value of flow_idx_valid
2122*5113495bSYour Name  * @flow_timeout: pointer to return value of flow_idx_timeout
2123*5113495bSYour Name  * @flow_index: pointer to return value of flow_idx
2124*5113495bSYour Name  *
2125*5113495bSYour Name  * Return: none
2126*5113495bSYour Name  */
2127*5113495bSYour Name static inline void
hal_rx_msdu_get_flow_params_be(uint8_t * buf,bool * flow_invalid,bool * flow_timeout,uint32_t * flow_index)2128*5113495bSYour Name hal_rx_msdu_get_flow_params_be(uint8_t *buf,
2129*5113495bSYour Name 				 bool *flow_invalid,
2130*5113495bSYour Name 				 bool *flow_timeout,
2131*5113495bSYour Name 				 uint32_t *flow_index)
2132*5113495bSYour Name {
2133*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2134*5113495bSYour Name 
2135*5113495bSYour Name 	*flow_invalid = HAL_RX_TLV_FLOW_IDX_INVALID_GET(pkt_tlvs);
2136*5113495bSYour Name 	*flow_timeout = HAL_RX_TLV_FLOW_IDX_TIMEOUT_GET(pkt_tlvs);
2137*5113495bSYour Name 	*flow_index = HAL_RX_TLV_FLOW_IDX_GET(pkt_tlvs);
2138*5113495bSYour Name }
2139*5113495bSYour Name 
2140*5113495bSYour Name /**
2141*5113495bSYour Name  * hal_rx_tlv_get_tcp_chksum_be() - API to get tcp checksum
2142*5113495bSYour Name  * @buf: rx_tlv_hdr
2143*5113495bSYour Name  *
2144*5113495bSYour Name  * Return: tcp checksum
2145*5113495bSYour Name  */
2146*5113495bSYour Name static inline uint16_t
hal_rx_tlv_get_tcp_chksum_be(uint8_t * buf)2147*5113495bSYour Name hal_rx_tlv_get_tcp_chksum_be(uint8_t *buf)
2148*5113495bSYour Name {
2149*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2150*5113495bSYour Name 
2151*5113495bSYour Name 	return HAL_RX_TLV_GET_TCP_CHKSUM(rx_pkt_tlvs);
2152*5113495bSYour Name }
2153*5113495bSYour Name 
2154*5113495bSYour Name /**
2155*5113495bSYour Name  * hal_rx_get_rx_sequence_be() - Function to retrieve rx sequence number
2156*5113495bSYour Name  * @buf: Network buffer
2157*5113495bSYour Name  *
2158*5113495bSYour Name  * Return: rx sequence number
2159*5113495bSYour Name  */
2160*5113495bSYour Name static inline
hal_rx_get_rx_sequence_be(uint8_t * buf)2161*5113495bSYour Name uint16_t hal_rx_get_rx_sequence_be(uint8_t *buf)
2162*5113495bSYour Name {
2163*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2164*5113495bSYour Name 
2165*5113495bSYour Name 	return HAL_RX_MPDU_SEQUENCE_NUMBER_GET(rx_pkt_tlvs);
2166*5113495bSYour Name }
2167*5113495bSYour Name 
2168*5113495bSYour Name #ifdef RECEIVE_OFFLOAD
2169*5113495bSYour Name #ifdef QCA_WIFI_KIWI_V2
2170*5113495bSYour Name static inline
hal_rx_get_fisa_cumulative_l4_checksum_be(uint8_t * buf)2171*5113495bSYour Name uint16_t hal_rx_get_fisa_cumulative_l4_checksum_be(uint8_t *buf)
2172*5113495bSYour Name {
2173*5113495bSYour Name 	/*
2174*5113495bSYour Name 	 * cumulative l4 checksum is not supported in V2 and
2175*5113495bSYour Name 	 * cumulative_l4_checksum field is not present
2176*5113495bSYour Name 	 */
2177*5113495bSYour Name 	return 0;
2178*5113495bSYour Name }
2179*5113495bSYour Name #else
2180*5113495bSYour Name /**
2181*5113495bSYour Name  * hal_rx_get_fisa_cumulative_l4_checksum_be() - Retrieve cumulative
2182*5113495bSYour Name  *                                                 checksum
2183*5113495bSYour Name  * @buf: buffer pointer
2184*5113495bSYour Name  *
2185*5113495bSYour Name  * Return: cumulative checksum
2186*5113495bSYour Name  */
2187*5113495bSYour Name static inline
hal_rx_get_fisa_cumulative_l4_checksum_be(uint8_t * buf)2188*5113495bSYour Name uint16_t hal_rx_get_fisa_cumulative_l4_checksum_be(uint8_t *buf)
2189*5113495bSYour Name {
2190*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2191*5113495bSYour Name 
2192*5113495bSYour Name 	return HAL_RX_TLV_GET_FISA_CUMULATIVE_L4_CHECKSUM(rx_pkt_tlvs);
2193*5113495bSYour Name }
2194*5113495bSYour Name #endif
2195*5113495bSYour Name 
2196*5113495bSYour Name /**
2197*5113495bSYour Name  * hal_rx_get_fisa_cumulative_ip_length_be() - Retrieve cumulative
2198*5113495bSYour Name  *                                               ip length
2199*5113495bSYour Name  * @buf: buffer pointer
2200*5113495bSYour Name  *
2201*5113495bSYour Name  * Return: cumulative length
2202*5113495bSYour Name  */
2203*5113495bSYour Name static inline
hal_rx_get_fisa_cumulative_ip_length_be(uint8_t * buf)2204*5113495bSYour Name uint16_t hal_rx_get_fisa_cumulative_ip_length_be(uint8_t *buf)
2205*5113495bSYour Name {
2206*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2207*5113495bSYour Name 
2208*5113495bSYour Name 	return HAL_RX_TLV_GET_FISA_CUMULATIVE_IP_LENGTH(rx_pkt_tlvs);
2209*5113495bSYour Name }
2210*5113495bSYour Name 
2211*5113495bSYour Name /**
2212*5113495bSYour Name  * hal_rx_get_udp_proto_be() - Retrieve udp proto value
2213*5113495bSYour Name  * @buf: buffer
2214*5113495bSYour Name  *
2215*5113495bSYour Name  * Return: udp proto bit
2216*5113495bSYour Name  */
2217*5113495bSYour Name static inline
hal_rx_get_udp_proto_be(uint8_t * buf)2218*5113495bSYour Name bool hal_rx_get_udp_proto_be(uint8_t *buf)
2219*5113495bSYour Name {
2220*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2221*5113495bSYour Name 
2222*5113495bSYour Name 	return HAL_RX_TLV_GET_UDP_PROTO(rx_pkt_tlvs);
2223*5113495bSYour Name }
2224*5113495bSYour Name #endif
2225*5113495bSYour Name 
2226*5113495bSYour Name /**
2227*5113495bSYour Name  * hal_rx_get_flow_agg_continuation_be() - retrieve flow agg
2228*5113495bSYour Name  *                                           continuation
2229*5113495bSYour Name  * @buf: buffer
2230*5113495bSYour Name  *
2231*5113495bSYour Name  * Return: flow agg
2232*5113495bSYour Name  */
2233*5113495bSYour Name static inline
hal_rx_get_flow_agg_continuation_be(uint8_t * buf)2234*5113495bSYour Name bool hal_rx_get_flow_agg_continuation_be(uint8_t *buf)
2235*5113495bSYour Name {
2236*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2237*5113495bSYour Name 
2238*5113495bSYour Name 	return HAL_RX_TLV_GET_FLOW_AGGR_CONT(rx_pkt_tlvs);
2239*5113495bSYour Name }
2240*5113495bSYour Name 
2241*5113495bSYour Name /**
2242*5113495bSYour Name  * hal_rx_get_flow_agg_count_be()- Retrieve flow agg count
2243*5113495bSYour Name  * @buf: buffer
2244*5113495bSYour Name  *
2245*5113495bSYour Name  * Return: flow agg count
2246*5113495bSYour Name  */
2247*5113495bSYour Name static inline
hal_rx_get_flow_agg_count_be(uint8_t * buf)2248*5113495bSYour Name uint8_t hal_rx_get_flow_agg_count_be(uint8_t *buf)
2249*5113495bSYour Name {
2250*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2251*5113495bSYour Name 
2252*5113495bSYour Name 	return HAL_RX_TLV_GET_FLOW_AGGR_COUNT(rx_pkt_tlvs);
2253*5113495bSYour Name }
2254*5113495bSYour Name 
2255*5113495bSYour Name /**
2256*5113495bSYour Name  * hal_rx_get_fisa_timeout_be() - Retrieve fisa timeout
2257*5113495bSYour Name  * @buf: buffer
2258*5113495bSYour Name  *
2259*5113495bSYour Name  * Return: fisa timeout
2260*5113495bSYour Name  */
2261*5113495bSYour Name static inline
hal_rx_get_fisa_timeout_be(uint8_t * buf)2262*5113495bSYour Name bool hal_rx_get_fisa_timeout_be(uint8_t *buf)
2263*5113495bSYour Name {
2264*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2265*5113495bSYour Name 
2266*5113495bSYour Name 	return HAL_RX_TLV_GET_FISA_TIMEOUT(rx_pkt_tlvs);
2267*5113495bSYour Name }
2268*5113495bSYour Name 
2269*5113495bSYour Name /**
2270*5113495bSYour Name  * hal_rx_mpdu_start_tlv_tag_valid_be () - API to check if RX_MPDU_START
2271*5113495bSYour Name  * tlv tag is valid
2272*5113495bSYour Name  *
2273*5113495bSYour Name  *@rx_tlv_hdr: start address of rx_pkt_tlvs
2274*5113495bSYour Name  *
2275*5113495bSYour Name  * Return: true if RX_MPDU_START is valid, else false.
2276*5113495bSYour Name  */
hal_rx_mpdu_start_tlv_tag_valid_be(void * rx_tlv_hdr)2277*5113495bSYour Name static inline uint8_t hal_rx_mpdu_start_tlv_tag_valid_be(void *rx_tlv_hdr)
2278*5113495bSYour Name {
2279*5113495bSYour Name 	struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)rx_tlv_hdr;
2280*5113495bSYour Name 	uint32_t tlv_tag;
2281*5113495bSYour Name 
2282*5113495bSYour Name 	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(&rx_desc->mpdu_start_tlv);
2283*5113495bSYour Name 
2284*5113495bSYour Name 	return tlv_tag == WIFIRX_MPDU_START_E ? true : false;
2285*5113495bSYour Name }
2286*5113495bSYour Name 
2287*5113495bSYour Name /**
2288*5113495bSYour Name  * hal_rx_msdu_end_offset_get_generic() - API to get the
2289*5113495bSYour Name  * msdu_end structure offset rx_pkt_tlv structure
2290*5113495bSYour Name  *
2291*5113495bSYour Name  * NOTE: API returns offset of msdu_end TLV from structure
2292*5113495bSYour Name  * rx_pkt_tlvs
2293*5113495bSYour Name  */
hal_rx_msdu_end_offset_get_generic(void)2294*5113495bSYour Name static inline uint32_t hal_rx_msdu_end_offset_get_generic(void)
2295*5113495bSYour Name {
2296*5113495bSYour Name 	return RX_PKT_TLV_OFFSET(msdu_end_tlv);
2297*5113495bSYour Name }
2298*5113495bSYour Name 
2299*5113495bSYour Name /**
2300*5113495bSYour Name  * hal_rx_mpdu_start_offset_get_generic() - API to get the
2301*5113495bSYour Name  * mpdu_start structure offset rx_pkt_tlv structure
2302*5113495bSYour Name  *
2303*5113495bSYour Name  * NOTE: API returns offset of attn TLV from structure
2304*5113495bSYour Name  * rx_pkt_tlvs
2305*5113495bSYour Name  */
hal_rx_mpdu_start_offset_get_generic(void)2306*5113495bSYour Name static inline uint32_t hal_rx_mpdu_start_offset_get_generic(void)
2307*5113495bSYour Name {
2308*5113495bSYour Name 	return RX_PKT_TLV_OFFSET(mpdu_start_tlv);
2309*5113495bSYour Name }
2310*5113495bSYour Name 
2311*5113495bSYour Name #ifndef NO_RX_PKT_HDR_TLV
hal_rx_pkt_tlv_offset_get_generic(void)2312*5113495bSYour Name static inline  uint32_t hal_rx_pkt_tlv_offset_get_generic(void)
2313*5113495bSYour Name {
2314*5113495bSYour Name 	return RX_PKT_TLV_OFFSET(pkt_hdr_tlv);
2315*5113495bSYour Name }
2316*5113495bSYour Name #endif
2317*5113495bSYour Name 
2318*5113495bSYour Name #ifdef CONFIG_WORD_BASED_TLV
2319*5113495bSYour Name #define MPDU_START_WMASK 0x074C
2320*5113495bSYour Name #define MSDU_END_WMASK 0x13FC1
2321*5113495bSYour Name 
2322*5113495bSYour Name /**
2323*5113495bSYour Name  * hal_rx_mpdu_start_wmask_get_be() - API to get the mpdu_start_tlv word mask
2324*5113495bSYour Name  *
2325*5113495bSYour Name  * return: Word mask for MPDU start tlv
2326*5113495bSYour Name  */
hal_rx_mpdu_start_wmask_get_be(void)2327*5113495bSYour Name static inline uint32_t hal_rx_mpdu_start_wmask_get_be(void)
2328*5113495bSYour Name {
2329*5113495bSYour Name 	return MPDU_START_WMASK;
2330*5113495bSYour Name }
2331*5113495bSYour Name 
2332*5113495bSYour Name /**
2333*5113495bSYour Name  * hal_rx_msdu_end_wmask_get_be() - API to get the msdu_end_tlv word mask
2334*5113495bSYour Name  *
2335*5113495bSYour Name  * return: Word mask for MSDU end tlv
2336*5113495bSYour Name  */
hal_rx_msdu_end_wmask_get_be(void)2337*5113495bSYour Name static inline uint32_t hal_rx_msdu_end_wmask_get_be(void)
2338*5113495bSYour Name {
2339*5113495bSYour Name 	return MSDU_END_WMASK;
2340*5113495bSYour Name }
2341*5113495bSYour Name #endif
2342*5113495bSYour Name 
2343*5113495bSYour Name #ifdef RECEIVE_OFFLOAD
2344*5113495bSYour Name static inline int
hal_rx_tlv_get_offload_info_be(uint8_t * rx_tlv,struct hal_offload_info * offload_info)2345*5113495bSYour Name hal_rx_tlv_get_offload_info_be(uint8_t *rx_tlv,
2346*5113495bSYour Name 			       struct hal_offload_info *offload_info)
2347*5113495bSYour Name {
2348*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)rx_tlv;
2349*5113495bSYour Name 
2350*5113495bSYour Name 	offload_info->lro_eligible = HAL_RX_TLV_GET_LRO_ELIGIBLE(rx_pkt_tlvs);
2351*5113495bSYour Name 	offload_info->flow_id = HAL_RX_TLV_GET_FLOW_ID_TOEPLITZ(rx_pkt_tlvs);
2352*5113495bSYour Name 	offload_info->ipv6_proto = HAL_RX_TLV_GET_IPV6(rx_pkt_tlvs);
2353*5113495bSYour Name 	offload_info->tcp_proto = HAL_RX_TLV_GET_TCP_PROTO(rx_pkt_tlvs);
2354*5113495bSYour Name 
2355*5113495bSYour Name 	if (offload_info->tcp_proto) {
2356*5113495bSYour Name 		offload_info->tcp_pure_ack =
2357*5113495bSYour Name 				HAL_RX_TLV_GET_TCP_PURE_ACK(rx_pkt_tlvs);
2358*5113495bSYour Name 		offload_info->tcp_offset =
2359*5113495bSYour Name 				HAL_RX_TLV_GET_TCP_OFFSET(rx_pkt_tlvs);
2360*5113495bSYour Name 		offload_info->tcp_win = HAL_RX_TLV_GET_TCP_WIN(rx_pkt_tlvs);
2361*5113495bSYour Name 		offload_info->tcp_seq_num = HAL_RX_TLV_GET_TCP_SEQ(rx_pkt_tlvs);
2362*5113495bSYour Name 		offload_info->tcp_ack_num = HAL_RX_TLV_GET_TCP_ACK(rx_pkt_tlvs);
2363*5113495bSYour Name 	}
2364*5113495bSYour Name 	return 0;
2365*5113495bSYour Name }
2366*5113495bSYour Name 
hal_rx_get_proto_params_be(uint8_t * buf,void * proto_params)2367*5113495bSYour Name static inline int hal_rx_get_proto_params_be(uint8_t *buf, void *proto_params)
2368*5113495bSYour Name {
2369*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2370*5113495bSYour Name 	struct hal_proto_params *param =
2371*5113495bSYour Name 				(struct hal_proto_params *)proto_params;
2372*5113495bSYour Name 
2373*5113495bSYour Name 	param->tcp_proto = HAL_RX_TLV_GET_TCP_PROTO(rx_pkt_tlvs);
2374*5113495bSYour Name 	param->udp_proto = HAL_RX_TLV_GET_UDP_PROTO(rx_pkt_tlvs);
2375*5113495bSYour Name 	param->ipv6_proto = HAL_RX_TLV_GET_IPV6(rx_pkt_tlvs);
2376*5113495bSYour Name 
2377*5113495bSYour Name 	return 0;
2378*5113495bSYour Name }
2379*5113495bSYour Name 
hal_rx_get_l3_l4_offsets_be(uint8_t * buf,uint32_t * l3_hdr_offset,uint32_t * l4_hdr_offset)2380*5113495bSYour Name static inline int hal_rx_get_l3_l4_offsets_be(uint8_t *buf,
2381*5113495bSYour Name 					      uint32_t *l3_hdr_offset,
2382*5113495bSYour Name 					      uint32_t *l4_hdr_offset)
2383*5113495bSYour Name {
2384*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2385*5113495bSYour Name 
2386*5113495bSYour Name 	*l3_hdr_offset = HAL_RX_TLV_GET_IP_OFFSET(rx_pkt_tlvs);
2387*5113495bSYour Name 	*l4_hdr_offset = HAL_RX_TLV_GET_TCP_OFFSET(rx_pkt_tlvs);
2388*5113495bSYour Name 
2389*5113495bSYour Name 	return 0;
2390*5113495bSYour Name }
2391*5113495bSYour Name #endif
2392*5113495bSYour Name 
2393*5113495bSYour Name /**
2394*5113495bSYour Name * hal_rx_msdu_start_msdu_len_get_be() - API to get the MSDU length from
2395*5113495bSYour Name *                                       rx_msdu_start TLV
2396*5113495bSYour Name * @buf: pointer to the start of RX PKT TLV headers
2397*5113495bSYour Name *
2398*5113495bSYour Name * Return: msdu length
2399*5113495bSYour Name */
hal_rx_msdu_start_msdu_len_get_be(uint8_t * buf)2400*5113495bSYour Name static inline uint32_t hal_rx_msdu_start_msdu_len_get_be(uint8_t *buf)
2401*5113495bSYour Name {
2402*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2403*5113495bSYour Name 	uint32_t msdu_len;
2404*5113495bSYour Name 
2405*5113495bSYour Name 	msdu_len = HAL_RX_TLV_MSDU_LEN_GET(rx_pkt_tlvs);
2406*5113495bSYour Name 
2407*5113495bSYour Name 	return msdu_len;
2408*5113495bSYour Name }
2409*5113495bSYour Name 
2410*5113495bSYour Name /**
2411*5113495bSYour Name  * hal_rx_get_frame_ctrl_field_be() - Function to retrieve frame control field
2412*5113495bSYour Name  * @buf: Network buffer
2413*5113495bSYour Name  *
2414*5113495bSYour Name  * Return: frame control field
2415*5113495bSYour Name  */
hal_rx_get_frame_ctrl_field_be(uint8_t * buf)2416*5113495bSYour Name static inline uint16_t hal_rx_get_frame_ctrl_field_be(uint8_t *buf)
2417*5113495bSYour Name {
2418*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2419*5113495bSYour Name 	uint16_t frame_ctrl = 0;
2420*5113495bSYour Name 
2421*5113495bSYour Name 	frame_ctrl = HAL_RX_MPDU_GET_FRAME_CONTROL_FIELD(rx_pkt_tlvs);
2422*5113495bSYour Name 
2423*5113495bSYour Name 	return frame_ctrl;
2424*5113495bSYour Name }
2425*5113495bSYour Name 
2426*5113495bSYour Name /**
2427*5113495bSYour Name  * hal_rx_tlv_get_is_decrypted_be() - API to get the decrypt status of
2428*5113495bSYour Name  *                                    the packet from msdu_end
2429*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
2430*5113495bSYour Name  *
2431*5113495bSYour Name  * Return: uint32_t(decryt status)
2432*5113495bSYour Name  */
hal_rx_tlv_get_is_decrypted_be(uint8_t * buf)2433*5113495bSYour Name static inline uint32_t hal_rx_tlv_get_is_decrypted_be(uint8_t *buf)
2434*5113495bSYour Name {
2435*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2436*5113495bSYour Name 	uint32_t is_decrypt = 0;
2437*5113495bSYour Name 	uint32_t decrypt_status;
2438*5113495bSYour Name 
2439*5113495bSYour Name 	decrypt_status = HAL_RX_TLV_DECRYPT_STATUS_GET(rx_pkt_tlvs);
2440*5113495bSYour Name 
2441*5113495bSYour Name 	if (!decrypt_status)
2442*5113495bSYour Name 		is_decrypt = 1;
2443*5113495bSYour Name 
2444*5113495bSYour Name 	return is_decrypt;
2445*5113495bSYour Name }
2446*5113495bSYour Name 
2447*5113495bSYour Name #ifdef NO_RX_PKT_HDR_TLV
2448*5113495bSYour Name /**
2449*5113495bSYour Name  * hal_rx_pkt_hdr_get_be() - API to get 80211 header
2450*5113495bSYour Name  * @buf: start of rx_pkt_tlv
2451*5113495bSYour Name  *
2452*5113495bSYour Name  * If NO_RX_PKT_HDR_TLV is enabled, then this API assume caller gives a raw
2453*5113495bSYour Name  * data, get 80211 header from packet data directly.
2454*5113495bSYour Name  * If NO_RX_PKT_HDR_TLV is disabled, then get it from rx_pkt_hdr_tlv in
2455*5113495bSYour Name  * rx_pkt_tlvs.
2456*5113495bSYour Name  *
2457*5113495bSYour Name  * Return: pointer to start of 80211 header
2458*5113495bSYour Name  */
hal_rx_pkt_hdr_get_be(uint8_t * buf)2459*5113495bSYour Name static inline uint8_t *hal_rx_pkt_hdr_get_be(uint8_t *buf)
2460*5113495bSYour Name {
2461*5113495bSYour Name 	return buf + RX_PKT_TLVS_LEN;
2462*5113495bSYour Name }
2463*5113495bSYour Name #else
hal_rx_pkt_hdr_get_be(uint8_t * buf)2464*5113495bSYour Name static inline uint8_t *hal_rx_pkt_hdr_get_be(uint8_t *buf)
2465*5113495bSYour Name {
2466*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2467*5113495bSYour Name 
2468*5113495bSYour Name 	return pkt_tlvs->pkt_hdr_tlv.rx_pkt_hdr;
2469*5113495bSYour Name }
2470*5113495bSYour Name #endif
2471*5113495bSYour Name 
2472*5113495bSYour Name /**
2473*5113495bSYour Name  * hal_rx_tlv_csum_err_get_be() - Get IP and tcp-udp checksum fail flag
2474*5113495bSYour Name  * @rx_tlv_hdr: start address of rx_tlv_hdr
2475*5113495bSYour Name  * @ip_csum_err: buffer to return ip_csum_fail flag
2476*5113495bSYour Name  * @tcp_udp_csum_err: placeholder to return tcp-udp checksum fail flag
2477*5113495bSYour Name  *
2478*5113495bSYour Name  * Return: None
2479*5113495bSYour Name  */
2480*5113495bSYour Name static inline void
hal_rx_tlv_csum_err_get_be(uint8_t * rx_tlv_hdr,uint32_t * ip_csum_err,uint32_t * tcp_udp_csum_err)2481*5113495bSYour Name hal_rx_tlv_csum_err_get_be(uint8_t *rx_tlv_hdr, uint32_t *ip_csum_err,
2482*5113495bSYour Name 			   uint32_t *tcp_udp_csum_err)
2483*5113495bSYour Name {
2484*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs =
2485*5113495bSYour Name 					(struct rx_pkt_tlvs *)rx_tlv_hdr;
2486*5113495bSYour Name 
2487*5113495bSYour Name 	*ip_csum_err = HAL_RX_TLV_IP_CSUM_FAIL_GET(rx_pkt_tlvs);
2488*5113495bSYour Name 	*tcp_udp_csum_err = HAL_RX_TLV_TCP_UDP_CSUM_FAIL_GET(rx_pkt_tlvs);
2489*5113495bSYour Name }
2490*5113495bSYour Name 
2491*5113495bSYour Name static inline
hal_rx_tlv_mpdu_len_err_get_be(void * hw_desc_addr)2492*5113495bSYour Name uint32_t hal_rx_tlv_mpdu_len_err_get_be(void *hw_desc_addr)
2493*5113495bSYour Name {
2494*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs =
2495*5113495bSYour Name 				(struct rx_pkt_tlvs *)hw_desc_addr;
2496*5113495bSYour Name 
2497*5113495bSYour Name 	return HAL_RX_TLV_MPDU_LEN_ERR_GET(rx_pkt_tlvs);
2498*5113495bSYour Name }
2499*5113495bSYour Name 
2500*5113495bSYour Name static inline
hal_rx_tlv_mpdu_fcs_err_get_be(void * hw_desc_addr)2501*5113495bSYour Name uint32_t hal_rx_tlv_mpdu_fcs_err_get_be(void *hw_desc_addr)
2502*5113495bSYour Name {
2503*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs =
2504*5113495bSYour Name 				(struct rx_pkt_tlvs *)hw_desc_addr;
2505*5113495bSYour Name 
2506*5113495bSYour Name 	return HAL_RX_TLV_MPDU_FCS_ERR_GET(rx_pkt_tlvs);
2507*5113495bSYour Name }
2508*5113495bSYour Name 
2509*5113495bSYour Name /**
2510*5113495bSYour Name  * hal_rx_get_rx_more_frag_bit() - Function to retrieve more fragment bit
2511*5113495bSYour Name  * @buf: Network buffer
2512*5113495bSYour Name  *
2513*5113495bSYour Name  * Return: rx more fragment bit
2514*5113495bSYour Name  */
2515*5113495bSYour Name static inline
hal_rx_get_rx_more_frag_bit(uint8_t * buf)2516*5113495bSYour Name uint8_t hal_rx_get_rx_more_frag_bit(uint8_t *buf)
2517*5113495bSYour Name {
2518*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2519*5113495bSYour Name 	uint16_t frame_ctrl = 0;
2520*5113495bSYour Name 
2521*5113495bSYour Name 	frame_ctrl = HAL_RX_MPDU_GET_FRAME_CONTROL_FIELD(pkt_tlvs) >>
2522*5113495bSYour Name 		DOT11_FC1_MORE_FRAG_OFFSET;
2523*5113495bSYour Name 
2524*5113495bSYour Name 	/* more fragment bit if at offset bit 4 */
2525*5113495bSYour Name 	return frame_ctrl;
2526*5113495bSYour Name }
2527*5113495bSYour Name 
2528*5113495bSYour Name /**
2529*5113495bSYour Name  * hal_rx_msdu_is_wlan_mcast_generic_be() - Check if the buffer is for
2530*5113495bSYour Name  *                                          multicast address
2531*5113495bSYour Name  * @nbuf: Network buffer
2532*5113495bSYour Name  *
2533*5113495bSYour Name  * Return: flag to indicate whether the nbuf has MC/BC address
2534*5113495bSYour Name  */
hal_rx_msdu_is_wlan_mcast_generic_be(qdf_nbuf_t nbuf)2535*5113495bSYour Name static inline uint32_t hal_rx_msdu_is_wlan_mcast_generic_be(qdf_nbuf_t nbuf)
2536*5113495bSYour Name {
2537*5113495bSYour Name 	uint8_t *buf = qdf_nbuf_data(nbuf);
2538*5113495bSYour Name 
2539*5113495bSYour Name 	return HAL_RX_TLV_IS_MCAST_GET(buf);;
2540*5113495bSYour Name }
2541*5113495bSYour Name 
2542*5113495bSYour Name /**
2543*5113495bSYour Name  * hal_rx_msdu_start_msdu_len_set_be() - API to set the MSDU length
2544*5113495bSYour Name  *                                       from rx_msdu_start TLV
2545*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
2546*5113495bSYour Name  * @len: msdu length
2547*5113495bSYour Name  *
2548*5113495bSYour Name  * Return: none
2549*5113495bSYour Name  */
2550*5113495bSYour Name static inline void
hal_rx_msdu_start_msdu_len_set_be(uint8_t * buf,uint32_t len)2551*5113495bSYour Name hal_rx_msdu_start_msdu_len_set_be(uint8_t *buf, uint32_t len)
2552*5113495bSYour Name {
2553*5113495bSYour Name 	HAL_RX_TLV_MSDU_LEN_GET(buf) = len;
2554*5113495bSYour Name }
2555*5113495bSYour Name 
2556*5113495bSYour Name /**
2557*5113495bSYour Name  * hal_rx_mpdu_start_mpdu_qos_control_valid_get_be() -
2558*5113495bSYour Name  *                                    Retrieve qos control valid bit from the tlv.
2559*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
2560*5113495bSYour Name  *
2561*5113495bSYour Name  * Return: qos control value.
2562*5113495bSYour Name  */
2563*5113495bSYour Name static inline uint32_t
hal_rx_mpdu_start_mpdu_qos_control_valid_get_be(uint8_t * buf)2564*5113495bSYour Name hal_rx_mpdu_start_mpdu_qos_control_valid_get_be(uint8_t *buf)
2565*5113495bSYour Name {
2566*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2567*5113495bSYour Name 
2568*5113495bSYour Name 	return HAL_RX_MPDU_INFO_QOS_CONTROL_VALID_GET(pkt_tlvs);
2569*5113495bSYour Name }
2570*5113495bSYour Name 
2571*5113495bSYour Name /**
2572*5113495bSYour Name  * hal_rx_msdu_end_sa_sw_peer_id_get_be() - API to get the
2573*5113495bSYour Name  * sa_sw_peer_id from rx_msdu_end TLV
2574*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
2575*5113495bSYour Name  *
2576*5113495bSYour Name  * Return: sa_sw_peer_id index
2577*5113495bSYour Name  */
2578*5113495bSYour Name static inline uint32_t
hal_rx_msdu_end_sa_sw_peer_id_get_be(uint8_t * buf)2579*5113495bSYour Name hal_rx_msdu_end_sa_sw_peer_id_get_be(uint8_t *buf)
2580*5113495bSYour Name {
2581*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
2582*5113495bSYour Name 
2583*5113495bSYour Name 	hal_rx_msdu_end_t *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
2584*5113495bSYour Name 
2585*5113495bSYour Name 	return HAL_RX_MSDU_END_SA_SW_PEER_ID_GET(msdu_end);
2586*5113495bSYour Name }
2587*5113495bSYour Name 
2588*5113495bSYour Name /**
2589*5113495bSYour Name  * hal_rx_parse_eht_sig_hdr_be()
2590*5113495bSYour Name  *				    - process eht sig header
2591*5113495bSYour Name  * @hal_soc: HAL soc handle
2592*5113495bSYour Name  * @tlv: pointer to EHT SIG TLV buffer
2593*5113495bSYour Name  * @ppdu_info_handle: pointer to ppdu_info
2594*5113495bSYour Name  *
2595*5113495bSYour Name  * Return: None
2596*5113495bSYour Name  */
2597*5113495bSYour Name static inline
hal_rx_parse_eht_sig_hdr_be(struct hal_soc * hal_soc,uint8_t * tlv,void * ppdu_info_handle)2598*5113495bSYour Name void hal_rx_parse_eht_sig_hdr_be(struct hal_soc *hal_soc, uint8_t *tlv,
2599*5113495bSYour Name 				 void *ppdu_info_handle)
2600*5113495bSYour Name {
2601*5113495bSYour Name }
2602*5113495bSYour Name #endif /* _HAL_BE_RX_TLV_H_ */
2603