xref: /wlan-dirver/qca-wifi-host-cmn/qdf/inc/qdf_nbuf.h (revision 1f55ed1a9f5050d8da228aa8dd3fff7c0242aa71)
1 /*
2  * Copyright (c) 2014-2019 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /**
20  * DOC: qdf_nbuf_public network buffer API
21  * This file defines the network buffer abstraction.
22  */
23 
24 #ifndef _QDF_NBUF_H
25 #define _QDF_NBUF_H
26 
27 #include <qdf_util.h>
28 #include <qdf_types.h>
29 #include <qdf_lock.h>
30 #include <i_qdf_trace.h>
31 #include <i_qdf_nbuf.h>
32 #include <qdf_net_types.h>
33 
34 #define IPA_NBUF_OWNER_ID			0xaa55aa55
35 #define QDF_NBUF_PKT_TRAC_TYPE_EAPOL		0x02
36 #define QDF_NBUF_PKT_TRAC_TYPE_DHCP		0x04
37 #define QDF_NBUF_PKT_TRAC_TYPE_MGMT_ACTION	0x08
38 #define QDF_NBUF_PKT_TRAC_TYPE_ARP		0x10
39 #define QDF_NBUF_PKT_TRAC_TYPE_ICMP		0x20
40 #define QDF_NBUF_PKT_TRAC_TYPE_ICMPv6		0x40
41 
42 #define QDF_NBUF_PKT_TRAC_MAX_STRING		12
43 #define QDF_NBUF_PKT_TRAC_PROTO_STRING		4
44 #define QDF_NBUF_PKT_ERROR			1
45 
46 #define QDF_NBUF_TRAC_IPV4_OFFSET		14
47 #define QDF_NBUF_TRAC_IPV4_HEADER_SIZE		20
48 #define QDF_NBUF_TRAC_DHCP_SRV_PORT		67
49 #define QDF_NBUF_TRAC_DHCP_CLI_PORT		68
50 #define QDF_NBUF_TRAC_ETH_TYPE_OFFSET		12
51 #define QDF_NBUF_TRAC_EAPOL_ETH_TYPE		0x888E
52 #define QDF_NBUF_TRAC_WAPI_ETH_TYPE		0x88b4
53 #define QDF_NBUF_TRAC_ARP_ETH_TYPE		0x0806
54 #define QDF_NBUF_PKT_IPV4_DSCP_MASK     0xFC
55 #define QDF_NBUF_PKT_IPV4_DSCP_SHIFT  0x02
56 #define QDF_NBUF_TRAC_TDLS_ETH_TYPE		0x890D
57 #define QDF_NBUF_TRAC_IPV4_ETH_TYPE     0x0800
58 #define QDF_NBUF_TRAC_IPV6_ETH_TYPE     0x86dd
59 #define QDF_NBUF_DEST_MAC_OFFSET		0
60 #define QDF_NBUF_SRC_MAC_OFFSET			6
61 #define QDF_NBUF_TRAC_IPV4_PROTO_TYPE_OFFSET  23
62 #define QDF_NBUF_TRAC_IPV4_DEST_ADDR_OFFSET   30
63 #define QDF_NBUF_TRAC_IPV6_PROTO_TYPE_OFFSET  20
64 #define QDF_NBUF_TRAC_IPV4_ADDR_MCAST_MASK    0xE0000000
65 #define QDF_NBUF_TRAC_IPV4_ADDR_BCAST_MASK    0xF0000000
66 #define QDF_NBUF_TRAC_IPV6_DEST_ADDR_OFFSET   38
67 #define QDF_NBUF_TRAC_IPV6_DEST_ADDR          0xFF00
68 #define QDF_NBUF_TRAC_IPV6_OFFSET		14
69 #define QDF_NBUF_TRAC_IPV6_HEADER_SIZE   40
70 #define QDF_NBUF_TRAC_ICMP_TYPE         1
71 #define QDF_NBUF_TRAC_TCP_TYPE          6
72 #define QDF_NBUF_TRAC_UDP_TYPE          17
73 #define QDF_NBUF_TRAC_ICMPV6_TYPE       0x3a
74 #define QDF_NBUF_TRAC_DHCP6_SRV_PORT		547
75 #define QDF_NBUF_TRAC_DHCP6_CLI_PORT		546
76 
77 /* EAPOL Related MASK */
78 #define EAPOL_PACKET_TYPE_OFFSET		15
79 #define EAPOL_KEY_INFO_OFFSET			19
80 #define EAPOL_PKT_LEN_OFFSET            16
81 #define EAPOL_KEY_LEN_OFFSET            21
82 #define EAPOL_MASK				0x8013
83 #define EAPOL_M1_BIT_MASK			0x8000
84 #define EAPOL_M2_BIT_MASK			0x0001
85 #define EAPOL_M3_BIT_MASK			0x8013
86 #define EAPOL_M4_BIT_MASK			0x0003
87 
88 /* ARP Related MASK */
89 #define QDF_NBUF_PKT_ARP_OPCODE_OFFSET	20
90 #define QDF_NBUF_PKT_ARPOP_REQ		1
91 #define QDF_NBUF_PKT_ARPOP_REPLY	2
92 #define QDF_NBUF_PKT_ARP_SRC_IP_OFFSET	28
93 #define QDF_NBUF_PKT_ARP_TGT_IP_OFFSET	38
94 
95 /* ICMPv4 Related MASK */
96 #define QDF_NBUF_PKT_ICMPv4_OPCODE_OFFSET	34
97 #define QDF_NBUF_PKT_ICMPv4OP_REQ		0x08
98 #define QDF_NBUF_PKT_ICMPv4OP_REPLY		0x00
99 #define QDF_NBUF_PKT_ICMPv4_SRC_IP_OFFSET	26
100 #define QDF_NBUF_PKT_ICMPv4_TGT_IP_OFFSET	30
101 
102 /* TCP Related MASK */
103 #define QDF_NBUF_PKT_TCP_OPCODE_OFFSET		47
104 #define QDF_NBUF_PKT_TCPOP_SYN			0x02
105 #define QDF_NBUF_PKT_TCPOP_SYN_ACK		0x12
106 #define QDF_NBUF_PKT_TCPOP_ACK			0x10
107 #define QDF_NBUF_PKT_TCP_SRC_PORT_OFFSET	34
108 #define QDF_NBUF_PKT_TCP_DST_PORT_OFFSET	36
109 
110 /* DNS Related MASK */
111 #define QDF_NBUF_PKT_DNS_OVER_UDP_OPCODE_OFFSET	44
112 #define QDF_NBUF_PKT_DNSOP_BITMAP		0xF800
113 #define QDF_NBUF_PKT_DNSOP_STANDARD_QUERY	0x0000
114 #define QDF_NBUF_PKT_DNSOP_STANDARD_RESPONSE	0x8000
115 #define QDF_NBUF_PKT_DNS_SRC_PORT_OFFSET	34
116 #define QDF_NBUF_PKT_DNS_DST_PORT_OFFSET	36
117 #define QDF_NBUF_PKT_DNS_NAME_OVER_UDP_OFFSET	54
118 #define QDF_NBUF_PKT_DNS_STANDARD_PORT		53
119 
120 /* Tracked Packet types */
121 #define QDF_NBUF_TX_PKT_INVALID              0
122 #define QDF_NBUF_TX_PKT_DATA_TRACK           1
123 #define QDF_NBUF_TX_PKT_MGMT_TRACK           2
124 #define QDF_NBUF_RX_PKT_DATA_TRACK           3
125 
126 /* Different Packet states */
127 #define QDF_NBUF_TX_PKT_HDD                  1
128 #define QDF_NBUF_TX_PKT_TXRX_ENQUEUE         2
129 #define QDF_NBUF_TX_PKT_TXRX_DEQUEUE         3
130 #define QDF_NBUF_TX_PKT_TXRX                 4
131 #define QDF_NBUF_TX_PKT_HTT                  5
132 #define QDF_NBUF_TX_PKT_HTC                  6
133 #define QDF_NBUF_TX_PKT_HIF                  7
134 #define QDF_NBUF_TX_PKT_CE                   8
135 #define QDF_NBUF_TX_PKT_FREE                 9
136 #define QDF_NBUF_TX_PKT_STATE_MAX            10
137 #define QDF_NBUF_TX_PKT_LI_DP                11
138 
139 /* qdf_nbuf allocate and map max retry threshold when failed */
140 #define QDF_NBUF_ALLOC_MAP_RETRY_THRESHOLD      20
141 
142 /* Enable flag to print TSO specific prints in datapath */
143 #ifdef TSO_DEBUG_LOG_ENABLE
144 #define TSO_DEBUG(fmt, args ...) \
145 	QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_NONE, \
146 		fmt, ## args)
147 #else
148 #define TSO_DEBUG(fmt, args ...)
149 #endif
150 
151 #define IEEE80211_AMPDU_FLAG    0x01
152 
153 #ifdef GET_MSDU_AGGREGATION
154 #define IEEE80211_AMSDU_FLAG    0x02
155 #endif
156 
157 /**
158  * struct mon_rx_status - This will have monitor mode rx_status extracted from
159  * htt_rx_desc used later to update radiotap information.
160  * @tsft: Time Synchronization Function timer
161  * @ppdu_timestamp: Timestamp in the PPDU_START TLV
162  * @preamble_type: Preamble type in radio header
163  * @chan_freq: Capture channel frequency
164  * @chan_num: Capture channel number
165  * @chan_flags: Bitmap of Channel flags, IEEE80211_CHAN_TURBO,
166  *              IEEE80211_CHAN_CCK...
167  * @ht_flags: HT flags, only present for HT frames.
168  * @vht_flags: VHT flags, only present for VHT frames.
169  * @vht_flag_values1-5: Contains corresponding data for flags field
170  * @he_flags: HE (11ax) flags, only present in HE frames
171  * @he_mu_flags: HE-MU (11ax) flags, only present in HE frames
172  * @he_mu_other_flags: HE-MU-OTHER (11ax) flags, only present in HE frames
173  * @he_sig_A1_known: HE (11ax) sig A1 known field
174  * @he_sig_A2_known: HE (11ax) sig A2 known field
175  * @he_sig_b_common: HE (11ax) sig B common field
176  * @he_sig_b_common_known: HE (11ax) sig B common known field
177  * @l_sig_a_info: L_SIG_A value coming in Rx descriptor
178  * @l_sig_b_info: L_SIG_B value coming in Rx descriptor
179  * @rate: Rate in terms 500Kbps
180  * @rtap_flags: Bit map of available fields in the radiotap
181  * @ant_signal_db: Rx packet RSSI
182  * @nr_ant: Number of Antennas used for streaming
183  * @mcs: MCS index of Rx frame
184  * @ht_mcs: MCS index for HT RX frames
185  * @nss: Number of spatial streams
186  * @bw: bandwidth of rx frame
187  * @is_stbc: Is STBC enabled
188  * @sgi: Rx frame short guard interval
189  * @he_re: HE range extension
190  * @ldpc: ldpc enabled
191  * @beamformed: Is frame beamformed.
192  * @he_sig_b_common_RU[4]: HE (11ax) common RU assignment index
193  * @rssi_comb: Combined RSSI
194  * @duration: 802.11 Duration
195  * @frame_control_info_valid: field indicates if fc value is valid
196  * @frame_control: frame control field
197  * @ast_index: AST table hash index
198  * @tid: QoS traffic tid number
199  * @rs_fcs_err: FCS error flag
200  * @rs_flags: Flags to indicate AMPDU or AMSDU aggregation
201  * @cck_flag: Flag to indicate CCK modulation
202  * @ofdm_flag: Flag to indicate OFDM modulation
203  * @ulofdma_flag: Flag to indicate UL OFDMA PPDU
204  * @he_per_user_1: HE per user info1
205  * @he_per_user_2: HE per user info2
206  * @he_per_user_position: HE per user position info
207  * @he_per_user_known: HE per user known info
208  * @he_flags1: HE flags
209  * @he_flags2: HE flags
210  * @he_RU[4]: HE RU assignment index
211  * @he_data1: HE property of received frame
212  * @he_data2: HE property of received frame
213  * @he_data3: HE property of received frame
214  * @he_data4: HE property of received frame
215  * @he_data5: HE property of received frame
216  * @prev_ppdu_id: ppdu_id in previously received message
217  * @ppdu_id: Id of the PLCP protocol data unit
218  *
219  * The following variables are not coming from the TLVs.
220  * These variables are placeholders for passing information to update_radiotap
221  * function.
222  * @device_id: Device ID coming from sub-system (PCI, AHB etc..)
223  * @chan_noise_floor: Channel Noise Floor for the pdev
224  * @data_sequence_control_info_valid: field to indicate validity of seq control
225  * @first_data_seq_ctrl: Sequence ctrl field of first data frame
226  */
227 struct mon_rx_status {
228 	uint64_t tsft;
229 	uint32_t ppdu_timestamp;
230 	uint32_t preamble_type;
231 	uint16_t chan_freq;
232 	uint16_t chan_num;
233 	uint16_t chan_flags;
234 	uint16_t ht_flags;
235 	uint16_t vht_flags;
236 	uint16_t vht_flag_values6;
237 	uint16_t he_flags;
238 	uint16_t he_mu_flags;
239 	uint16_t he_mu_other_flags;
240 	uint16_t he_sig_A1_known;
241 	uint16_t he_sig_A2_known;
242 	uint16_t he_sig_b_common;
243 	uint16_t he_sig_b_common_known;
244 	uint32_t l_sig_a_info;
245 	uint32_t l_sig_b_info;
246 	uint8_t  rate;
247 	uint8_t  rtap_flags;
248 	uint8_t  ant_signal_db;
249 	uint8_t  nr_ant;
250 	uint8_t  mcs;
251 	uint8_t  ht_mcs;
252 	uint8_t  nss;
253 	uint16_t  tcp_msdu_count;
254 	uint16_t  udp_msdu_count;
255 	uint16_t  other_msdu_count;
256 	uint8_t  bw;
257 	uint8_t  vht_flag_values1;
258 	uint8_t  vht_flag_values2;
259 	uint8_t  vht_flag_values3[4];
260 	uint8_t  vht_flag_values4;
261 	uint8_t  vht_flag_values5;
262 	uint8_t  is_stbc;
263 	uint8_t  sgi;
264 	uint8_t  he_re;
265 	uint8_t  ldpc;
266 	uint8_t  beamformed;
267 	uint8_t  he_sig_b_common_RU[4];
268 	int8_t   rssi_comb;
269 	uint8_t  reception_type;
270 	uint16_t duration;
271 	uint8_t frame_control_info_valid;
272 	uint16_t frame_control;
273 	uint32_t ast_index;
274 	uint32_t tid;
275 	uint8_t  rs_fcs_err;
276 	uint8_t      rs_flags;
277 	uint8_t cck_flag;
278 	uint8_t ofdm_flag;
279 	uint8_t ulofdma_flag;
280 	/* New HE radiotap fields */
281 	uint16_t he_per_user_1;
282 	uint16_t he_per_user_2;
283 	uint8_t he_per_user_position;
284 	uint8_t he_per_user_known;
285 	uint16_t he_flags1;
286 	uint16_t he_flags2;
287 	uint8_t he_RU[4];
288 	uint16_t he_data1;
289 	uint16_t he_data2;
290 	uint16_t he_data3;
291 	uint16_t he_data4;
292 	uint16_t he_data5;
293 	uint16_t he_data6;
294 	uint32_t ppdu_len;
295 	uint32_t prev_ppdu_id;
296 	uint32_t ppdu_id;
297 	uint32_t device_id;
298 	int16_t chan_noise_floor;
299 	uint8_t monitor_direct_used;
300 	uint8_t data_sequence_control_info_valid;
301 	uint16_t first_data_seq_ctrl;
302 };
303 
304 /**
305  * struct qdf_radiotap_vendor_ns - Vendor Namespace header as per
306  * Radiotap spec: https://www.radiotap.org/fields/Vendor%20Namespace.html
307  * @oui: Vendor OUI
308  * @selector: sub_namespace selector
309  * @skip_length: How many bytes of Vendor Namespace data that follows
310  */
311 struct qdf_radiotap_vendor_ns {
312 	uint8_t oui[3];
313 	uint8_t selector;
314 	uint16_t skip_length;
315 } __attribute__((__packed__));
316 
317 /**
318  * strcut qdf_radiotap_vendor_ns_ath - Combined QTI Vendor NS
319  * including the Radiotap specified Vendor Namespace header and
320  * QTI specific Vendor Namespace data
321  * @lsig: L_SIG_A (or L_SIG)
322  * @device_id: Device Identification
323  * @lsig_b: L_SIG_B
324  * @ppdu_start_timestamp: Timestamp from RX_PPDU_START TLV
325  */
326 struct qdf_radiotap_vendor_ns_ath {
327 	struct qdf_radiotap_vendor_ns hdr;
328 	/* QTI specific data follows */
329 	uint32_t lsig;
330 	uint32_t device_id;
331 	uint32_t lsig_b;
332 	uint32_t ppdu_start_timestamp;
333 } __attribute__((__packed__));
334 
335 /* Masks for HE SIG known fields in mon_rx_status structure */
336 #define QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU0	0x00000001
337 #define QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU1	0x00000002
338 #define QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU2	0x00000004
339 #define QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU3	0x00000008
340 #define QDF_MON_STATUS_HE_SIG_B_USER_KNOWN_SIG_B_ALL   0x00fe0000
341 #define QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_SU		0x00000000
342 #define QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_EXT_SU	0x40000000
343 #define QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_TRIG		0xc0000000
344 
345 /* DHCP Related Mask */
346 #define QDF_DHCP_OPTION53			(0x35)
347 #define QDF_DHCP_OPTION53_LENGTH		(1)
348 #define QDF_DHCP_OPTION53_OFFSET		(0x11A)
349 #define QDF_DHCP_OPTION53_LENGTH_OFFSET	(0x11B)
350 #define QDF_DHCP_OPTION53_STATUS_OFFSET	(0x11C)
351 #define DHCP_PKT_LEN_OFFSET           16
352 #define DHCP_TRANSACTION_ID_OFFSET    46
353 #define QDF_DHCP_DISCOVER			(1)
354 #define QDF_DHCP_OFFER				(2)
355 #define QDF_DHCP_REQUEST			(3)
356 #define QDF_DHCP_DECLINE			(4)
357 #define QDF_DHCP_ACK				(5)
358 #define QDF_DHCP_NAK				(6)
359 #define QDF_DHCP_RELEASE			(7)
360 #define QDF_DHCP_INFORM				(8)
361 
362 /* ARP Related Mask */
363 #define ARP_SUB_TYPE_OFFSET  20
364 #define ARP_REQUEST			(1)
365 #define ARP_RESPONSE		(2)
366 
367 /* IPV4 header fields offset values */
368 #define IPV4_PKT_LEN_OFFSET           16
369 #define IPV4_TCP_SEQ_NUM_OFFSET       38
370 #define IPV4_SRC_ADDR_OFFSET          26
371 #define IPV4_DST_ADDR_OFFSET          30
372 #define IPV4_SRC_PORT_OFFSET          34
373 #define IPV4_DST_PORT_OFFSET          36
374 
375 /* IPV4 ICMP Related Mask */
376 #define ICMP_SEQ_NUM_OFFSET           40
377 #define ICMP_SUBTYPE_OFFSET           34
378 #define ICMP_REQUEST                  0x08
379 #define ICMP_RESPONSE                 0x00
380 
381 #define IPV6_ADDR_STR "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:"\
382 			"%02x%02x:%02x%02x"
383 
384 /* IPV6 header fields offset values */
385 #define IPV6_PKT_LEN_OFFSET           18
386 #define IPV6_TCP_SEQ_NUM_OFFSET       58
387 #define IPV6_SRC_ADDR_OFFSET          22
388 #define IPV6_DST_ADDR_OFFSET          38
389 #define IPV6_SRC_PORT_OFFSET          54
390 #define IPV6_DST_PORT_OFFSET          56
391 
392 /* IPV6 ICMPV6 Related Mask */
393 #define ICMPV6_SEQ_NUM_OFFSET         60
394 #define ICMPV6_SUBTYPE_OFFSET         54
395 #define ICMPV6_REQUEST                0x80
396 #define ICMPV6_RESPONSE               0x81
397 #define ICMPV6_RS                     0x85
398 #define ICMPV6_RA                     0x86
399 #define ICMPV6_NS                     0x87
400 #define ICMPV6_NA                     0x88
401 
402 #define QDF_NBUF_IPA_CHECK_MASK		0x80000000
403 
404 /* HE Radiotap data1 Mask */
405 #define QDF_MON_STATUS_HE_SU_FORMAT_TYPE 0x0000
406 #define QDF_MON_STATUS_HE_EXT_SU_FORMAT_TYPE 0x0001
407 #define QDF_MON_STATUS_HE_MU_FORMAT_TYPE 0x0002
408 #define QDF_MON_STATUS_HE_TRIG_FORMAT_TYPE 0x0003
409 
410 
411 #define QDF_MON_STATUS_HE_BEAM_CHANGE_KNOWN 0x0008
412 #define QDF_MON_STATUS_HE_DL_UL_KNOWN 0x0010
413 #define QDF_MON_STATUS_HE_MCS_KNOWN 0x0020
414 #define QDF_MON_STATUS_HE_DCM_KNOWN 0x0040
415 #define QDF_MON_STATUS_HE_CODING_KNOWN 0x0080
416 #define QDF_MON_STATUS_HE_LDPC_EXTRA_SYMBOL_KNOWN 0x0100
417 #define QDF_MON_STATUS_HE_STBC_KNOWN 0x0200
418 #define QDF_MON_STATUS_HE_DATA_BW_RU_KNOWN 0x4000
419 #define QDF_MON_STATUS_HE_DOPPLER_KNOWN 0x8000
420 #define QDF_MON_STATUS_HE_BSS_COLOR_KNOWN 0x0004
421 
422 /* HE Radiotap data2 Mask */
423 #define QDF_MON_STATUS_HE_GI_KNOWN 0x0002
424 #define QDF_MON_STATUS_TXBF_KNOWN 0x0010
425 #define QDF_MON_STATUS_PE_DISAMBIGUITY_KNOWN 0x0020
426 #define QDF_MON_STATUS_TXOP_KNOWN 0x0040
427 #define QDF_MON_STATUS_LTF_SYMBOLS_KNOWN 0x0004
428 #define QDF_MON_STATUS_PRE_FEC_PADDING_KNOWN 0x0008
429 #define QDF_MON_STATUS_MIDABLE_PERIODICITY_KNOWN 0x0080
430 
431 /* HE radiotap data3 shift values */
432 #define QDF_MON_STATUS_BEAM_CHANGE_SHIFT 6
433 #define QDF_MON_STATUS_DL_UL_SHIFT 7
434 #define QDF_MON_STATUS_TRANSMIT_MCS_SHIFT 8
435 #define QDF_MON_STATUS_DCM_SHIFT 12
436 #define QDF_MON_STATUS_CODING_SHIFT 13
437 #define QDF_MON_STATUS_LDPC_EXTRA_SYMBOL_SHIFT 14
438 #define QDF_MON_STATUS_STBC_SHIFT 15
439 
440 /* HE radiotap data4 shift values */
441 #define QDF_MON_STATUS_STA_ID_SHIFT 4
442 
443 /* HE radiotap data5 */
444 #define QDF_MON_STATUS_GI_SHIFT 4
445 #define QDF_MON_STATUS_HE_LTF_SIZE_SHIFT 6
446 #define QDF_MON_STATUS_HE_LTF_SYM_SHIFT 8
447 #define QDF_MON_STATUS_TXBF_SHIFT 14
448 #define QDF_MON_STATUS_PE_DISAMBIGUITY_SHIFT 15
449 #define QDF_MON_STATUS_PRE_FEC_PAD_SHIFT 12
450 
451 /* HE radiotap data6 */
452 #define QDF_MON_STATUS_DOPPLER_SHIFT 4
453 #define QDF_MON_STATUS_TXOP_SHIFT 8
454 
455 /* HE radiotap HE-MU flags1 */
456 #define QDF_MON_STATUS_SIG_B_MCS_KNOWN 0x0010
457 #define QDF_MON_STATUS_SIG_B_DCM_KNOWN 0x0040
458 #define QDF_MON_STATUS_SIG_B_SYM_NUM_KNOWN 0x8000
459 #define QDF_MON_STATUS_RU_0_KNOWN 0x0100
460 #define QDF_MON_STATUS_RU_1_KNOWN 0x0200
461 #define QDF_MON_STATUS_RU_2_KNOWN 0x0400
462 #define QDF_MON_STATUS_RU_3_KNOWN 0x0800
463 #define QDF_MON_STATUS_DCM_FLAG_1_SHIFT 5
464 #define QDF_MON_STATUS_SPATIAL_REUSE_MU_KNOWN 0x0100
465 #define QDF_MON_STATUS_SIG_B_COMPRESSION_FLAG_1_KNOWN 0x4000
466 
467 /* HE radiotap HE-MU flags2 */
468 #define QDF_MON_STATUS_SIG_B_COMPRESSION_FLAG_2_SHIFT 3
469 #define QDF_MON_STATUS_BW_KNOWN 0x0004
470 #define QDF_MON_STATUS_NUM_SIG_B_SYMBOLS_SHIFT 4
471 #define QDF_MON_STATUS_SIG_B_COMPRESSION_FLAG_2_KNOWN 0x0100
472 #define QDF_MON_STATUS_NUM_SIG_B_FLAG_2_SHIFT 9
473 #define QDF_MON_STATUS_LTF_FLAG_2_SYMBOLS_SHIFT 12
474 #define QDF_MON_STATUS_LTF_KNOWN 0x8000
475 
476 /* HE radiotap per_user_1 */
477 #define QDF_MON_STATUS_STA_SPATIAL_SHIFT 11
478 #define QDF_MON_STATUS_TXBF_SHIFT 14
479 #define QDF_MON_STATUS_RESERVED_SET_TO_1_SHIFT 19
480 #define QDF_MON_STATUS_STA_CODING_SHIFT 20
481 
482 /* HE radiotap per_user_2 */
483 #define QDF_MON_STATUS_STA_MCS_SHIFT 4
484 #define QDF_MON_STATUS_STA_DCM_SHIFT 5
485 
486 /* HE radiotap per user known */
487 #define QDF_MON_STATUS_USER_FIELD_POSITION_KNOWN 0x01
488 #define QDF_MON_STATUS_STA_ID_PER_USER_KNOWN 0x02
489 #define QDF_MON_STATUS_STA_NSTS_KNOWN 0x04
490 #define QDF_MON_STATUS_STA_TX_BF_KNOWN 0x08
491 #define QDF_MON_STATUS_STA_SPATIAL_CONFIG_KNOWN 0x10
492 #define QDF_MON_STATUS_STA_MCS_KNOWN 0x20
493 #define QDF_MON_STATUS_STA_DCM_KNOWN 0x40
494 #define QDF_MON_STATUS_STA_CODING_KNOWN 0x80
495 
496 /**
497  * qdf_proto_type - protocol type
498  * @QDF_PROTO_TYPE_DHCP - DHCP
499  * @QDF_PROTO_TYPE_EAPOL - EAPOL
500  * @QDF_PROTO_TYPE_ARP - ARP
501  * @QDF_PROTO_TYPE_MGMT - MGMT
502  * @QDF_PROTO_TYPE_ICMP - ICMP
503  * @QDF_PROTO_TYPE_ICMPv6 - ICMPv6
504  * QDF_PROTO_TYPE_EVENT - EVENT
505  */
506 enum qdf_proto_type {
507 	QDF_PROTO_TYPE_DHCP,
508 	QDF_PROTO_TYPE_EAPOL,
509 	QDF_PROTO_TYPE_ARP,
510 	QDF_PROTO_TYPE_MGMT,
511 	QDF_PROTO_TYPE_ICMP,
512 	QDF_PROTO_TYPE_ICMPv6,
513 	QDF_PROTO_TYPE_EVENT,
514 	QDF_PROTO_TYPE_MAX
515 };
516 
517 /**
518  * qdf_reception_type - reception type used by lithium phy TLV
519  * @QDF_RECEPTION_TYPE_ULOFMDA - UL OFDMA
520  * @QDF_RECEPTION_TYPE_ULMIMO - UL MIMO
521  * @QQDF_RECEPTION_TYPE_FRAMELESS - Frame less
522  * @QDF_RECEPTION_TYPE_OTHER - All the other types
523  */
524 enum qdf_reception_type {
525 	QDF_RECEPTION_TYPE_ULOFMDA,
526 	QDF_RECEPTION_TYPE_ULMIMO,
527 	QDF_RECEPTION_TYPE_OTHER,
528 	QDF_RECEPTION_TYPE_FRAMELESS
529 };
530 
531 /**
532  * cb_ftype - Frame type information in skb cb
533  * @CB_FTYPE_INVALID - Invalid
534  * @CB_FTYPE_MCAST2UCAST - Multicast to Unicast converted packet
535  * @CB_FTYPE_TSO - TCP Segmentation Offload
536  * @CB_FTYPE_TSO_SG - TSO Scatter Gather
537  * @CB_FTYPE_SG - Scatter Gather
538  * @CB_FTYPE_INTRABSS_FWD - Intra BSS forwarding
539  * @CB_FTYPE_RX_INFO - Rx information
540  * @CB_FTYPE_MESH_RX_INFO - Mesh Rx information
541  * @CB_FTYPE_MESH_TX_INFO - Mesh Tx information
542  * @CB_FTYPE_DMS - Directed Multicast Service
543  */
544 enum cb_ftype {
545 	CB_FTYPE_INVALID = 0,
546 	CB_FTYPE_MCAST2UCAST = 1,
547 	CB_FTYPE_TSO = 2,
548 	CB_FTYPE_TSO_SG = 3,
549 	CB_FTYPE_SG = 4,
550 	CB_FTYPE_INTRABSS_FWD = 5,
551 	CB_FTYPE_RX_INFO = 6,
552 	CB_FTYPE_MESH_RX_INFO = 7,
553 	CB_FTYPE_MESH_TX_INFO = 8,
554 	CB_FTYPE_DMS = 9,
555 };
556 
557 /**
558  * qdf_proto_subtype - subtype of packet
559  * @QDF_PROTO_EAPOL_M1 - EAPOL 1/4
560  * @QDF_PROTO_EAPOL_M2 - EAPOL 2/4
561  * @QDF_PROTO_EAPOL_M3 - EAPOL 3/4
562  * @QDF_PROTO_EAPOL_M4 - EAPOL 4/4
563  * @QDF_PROTO_DHCP_DISCOVER - discover
564  * @QDF_PROTO_DHCP_REQUEST - request
565  * @QDF_PROTO_DHCP_OFFER - offer
566  * @QDF_PROTO_DHCP_ACK - ACK
567  * @QDF_PROTO_DHCP_NACK - NACK
568  * @QDF_PROTO_DHCP_RELEASE - release
569  * @QDF_PROTO_DHCP_INFORM - inform
570  * @QDF_PROTO_DHCP_DECLINE - decline
571  * @QDF_PROTO_ARP_REQ - arp request
572  * @QDF_PROTO_ARP_RES - arp response
573  * @QDF_PROTO_ICMP_REQ - icmp request
574  * @QDF_PROTO_ICMP_RES - icmp response
575  * @QDF_PROTO_ICMPV6_REQ - icmpv6 request
576  * @QDF_PROTO_ICMPV6_RES - icmpv6 response
577  * @QDF_PROTO_ICMPV6_RS - icmpv6 rs packet
578  * @QDF_PROTO_ICMPV6_RA - icmpv6 ra packet
579  * @QDF_PROTO_ICMPV6_NS - icmpv6 ns packet
580  * @QDF_PROTO_ICMPV6_NA - icmpv6 na packet
581  * @QDF_PROTO_IPV4_UDP - ipv4 udp
582  * @QDF_PROTO_IPV4_TCP - ipv4 tcp
583  * @QDF_PROTO_IPV6_UDP - ipv6 udp
584  * @QDF_PROTO_IPV6_TCP - ipv6 tcp
585  * @QDF_PROTO_MGMT_ASSOC -assoc
586  * @QDF_PROTO_MGMT_DISASSOC - disassoc
587  * @QDF_PROTO_MGMT_AUTH - auth
588  * @QDF_PROTO_MGMT_DEAUTH - deauth
589  * QDF_ROAM_SYNCH - roam synch indication from fw
590  * QDF_ROAM_COMPLETE - roam complete cmd to fw
591  * QDF_ROAM_EVENTID - roam eventid from fw
592  */
593 enum qdf_proto_subtype {
594 	QDF_PROTO_INVALID,
595 	QDF_PROTO_EAPOL_M1,
596 	QDF_PROTO_EAPOL_M2,
597 	QDF_PROTO_EAPOL_M3,
598 	QDF_PROTO_EAPOL_M4,
599 	QDF_PROTO_DHCP_DISCOVER,
600 	QDF_PROTO_DHCP_REQUEST,
601 	QDF_PROTO_DHCP_OFFER,
602 	QDF_PROTO_DHCP_ACK,
603 	QDF_PROTO_DHCP_NACK,
604 	QDF_PROTO_DHCP_RELEASE,
605 	QDF_PROTO_DHCP_INFORM,
606 	QDF_PROTO_DHCP_DECLINE,
607 	QDF_PROTO_ARP_REQ,
608 	QDF_PROTO_ARP_RES,
609 	QDF_PROTO_ICMP_REQ,
610 	QDF_PROTO_ICMP_RES,
611 	QDF_PROTO_ICMPV6_REQ,
612 	QDF_PROTO_ICMPV6_RES,
613 	QDF_PROTO_ICMPV6_RS,
614 	QDF_PROTO_ICMPV6_RA,
615 	QDF_PROTO_ICMPV6_NS,
616 	QDF_PROTO_ICMPV6_NA,
617 	QDF_PROTO_IPV4_UDP,
618 	QDF_PROTO_IPV4_TCP,
619 	QDF_PROTO_IPV6_UDP,
620 	QDF_PROTO_IPV6_TCP,
621 	QDF_PROTO_MGMT_ASSOC,
622 	QDF_PROTO_MGMT_DISASSOC,
623 	QDF_PROTO_MGMT_AUTH,
624 	QDF_PROTO_MGMT_DEAUTH,
625 	QDF_ROAM_SYNCH,
626 	QDF_ROAM_COMPLETE,
627 	QDF_ROAM_EVENTID,
628 	QDF_PROTO_SUBTYPE_MAX
629 };
630 
631 /**
632  * @qdf_nbuf_t - Platform indepedent packet abstraction
633  */
634 typedef __qdf_nbuf_t qdf_nbuf_t;
635 
636 /**
637  * typedef qdf_nbuf_queue_head_t - Platform indepedent nbuf queue head
638  */
639 typedef __qdf_nbuf_queue_head_t qdf_nbuf_queue_head_t;
640 
641 /**
642  * @qdf_dma_map_cb_t - Dma map callback prototype
643  */
644 typedef void (*qdf_dma_map_cb_t)(void *arg, qdf_nbuf_t buf,
645 				 qdf_dma_map_t dmap);
646 
647 /**
648  * @qdf_nbuf_queue_t - Platform independent packet queue abstraction
649  */
650 typedef __qdf_nbuf_queue_t qdf_nbuf_queue_t;
651 
652 /* BUS/DMA mapping routines */
653 
654 static inline QDF_STATUS
655 qdf_nbuf_dmamap_create(qdf_device_t osdev, qdf_dma_map_t *dmap)
656 {
657 	return __qdf_nbuf_dmamap_create(osdev, dmap);
658 }
659 
660 static inline void
661 qdf_nbuf_dmamap_destroy(qdf_device_t osdev, qdf_dma_map_t dmap)
662 {
663 	__qdf_nbuf_dmamap_destroy(osdev, dmap);
664 }
665 
666 static inline void
667 qdf_nbuf_dmamap_set_cb(qdf_dma_map_t dmap, qdf_dma_map_cb_t cb, void *arg)
668 {
669 	__qdf_nbuf_dmamap_set_cb(dmap, cb, arg);
670 }
671 
672 static inline void
673 qdf_nbuf_set_send_complete_flag(qdf_nbuf_t buf, bool flag)
674 {
675 	__qdf_nbuf_set_send_complete_flag(buf, flag);
676 }
677 
678 #ifdef NBUF_MAP_UNMAP_DEBUG
679 /**
680  * qdf_nbuf_map_check_for_leaks() - check for nbut map leaks
681  *
682  * Check for net buffers that have been mapped, but never unmapped.
683  *
684  * Returns: None
685  */
686 void qdf_nbuf_map_check_for_leaks(void);
687 
688 QDF_STATUS qdf_nbuf_map_debug(qdf_device_t osdev,
689 			      qdf_nbuf_t buf,
690 			      qdf_dma_dir_t dir,
691 			      const char *func,
692 			      uint32_t line);
693 
694 #define qdf_nbuf_map(osdev, buf, dir) \
695 	qdf_nbuf_map_debug(osdev, buf, dir, __func__, __LINE__)
696 
697 void qdf_nbuf_unmap_debug(qdf_device_t osdev,
698 			  qdf_nbuf_t buf,
699 			  qdf_dma_dir_t dir,
700 			  const char *func,
701 			  uint32_t line);
702 
703 #define qdf_nbuf_unmap(osdev, buf, dir) \
704 	qdf_nbuf_unmap_debug(osdev, buf, dir, __func__, __LINE__)
705 
706 QDF_STATUS qdf_nbuf_map_single_debug(qdf_device_t osdev,
707 				     qdf_nbuf_t buf,
708 				     qdf_dma_dir_t dir,
709 				     const char *func,
710 				     uint32_t line);
711 
712 #define qdf_nbuf_map_single(osdev, buf, dir) \
713 	qdf_nbuf_map_single_debug(osdev, buf, dir, __func__, __LINE__)
714 
715 void qdf_nbuf_unmap_single_debug(qdf_device_t osdev,
716 				 qdf_nbuf_t buf,
717 				 qdf_dma_dir_t dir,
718 				 const char *func,
719 				 uint32_t line);
720 
721 #define qdf_nbuf_unmap_single(osdev, buf, dir) \
722 	qdf_nbuf_unmap_single_debug(osdev, buf, dir, __func__, __LINE__)
723 
724 QDF_STATUS qdf_nbuf_map_nbytes_debug(qdf_device_t osdev,
725 				     qdf_nbuf_t buf,
726 				     qdf_dma_dir_t dir,
727 				     int nbytes,
728 				     const char *func,
729 				     uint32_t line);
730 
731 #define qdf_nbuf_map_nbytes(osdev, buf, dir, nbytes) \
732 	qdf_nbuf_map_nbytes_debug(osdev, buf, dir, nbytes, __func__, __LINE__)
733 
734 void qdf_nbuf_unmap_nbytes_debug(qdf_device_t osdev,
735 				 qdf_nbuf_t buf,
736 				 qdf_dma_dir_t dir,
737 				 int nbytes,
738 				 const char *func,
739 				 uint32_t line);
740 
741 #define qdf_nbuf_unmap_nbytes(osdev, buf, dir, nbytes) \
742 	qdf_nbuf_unmap_nbytes_debug(osdev, buf, dir, nbytes, __func__, __LINE__)
743 
744 QDF_STATUS qdf_nbuf_map_nbytes_single_debug(qdf_device_t osdev,
745 					    qdf_nbuf_t buf,
746 					    qdf_dma_dir_t dir,
747 					    int nbytes,
748 					    const char *func,
749 					    uint32_t line);
750 
751 #define qdf_nbuf_map_nbytes_single(osdev, buf, dir, nbytes) \
752 	qdf_nbuf_map_nbytes_single_debug(osdev, buf, dir, nbytes, \
753 					 __func__, __LINE__)
754 
755 void qdf_nbuf_unmap_nbytes_single_debug(qdf_device_t osdev,
756 					qdf_nbuf_t buf,
757 					qdf_dma_dir_t dir,
758 					int nbytes,
759 					const char *func,
760 					uint32_t line);
761 
762 #define qdf_nbuf_unmap_nbytes_single(osdev, buf, dir, nbytes) \
763 	qdf_nbuf_unmap_nbytes_single_debug(osdev, buf, dir, nbytes, \
764 					   __func__, __LINE__)
765 
766 #else /* NBUF_MAP_UNMAP_DEBUG */
767 
768 static inline void qdf_nbuf_map_check_for_leaks(void) {}
769 
770 static inline QDF_STATUS
771 qdf_nbuf_map(qdf_device_t osdev, qdf_nbuf_t buf, qdf_dma_dir_t dir)
772 {
773 	return __qdf_nbuf_map(osdev, buf, dir);
774 }
775 
776 static inline void
777 qdf_nbuf_unmap(qdf_device_t osdev, qdf_nbuf_t buf, qdf_dma_dir_t dir)
778 {
779 	__qdf_nbuf_unmap(osdev, buf, dir);
780 }
781 
782 static inline QDF_STATUS
783 qdf_nbuf_map_single(qdf_device_t osdev, qdf_nbuf_t buf, qdf_dma_dir_t dir)
784 {
785 	return __qdf_nbuf_map_single(osdev, buf, dir);
786 }
787 
788 static inline void
789 qdf_nbuf_unmap_single(qdf_device_t osdev, qdf_nbuf_t buf, qdf_dma_dir_t dir)
790 {
791 	__qdf_nbuf_unmap_single(osdev, buf, dir);
792 }
793 
794 static inline QDF_STATUS
795 qdf_nbuf_map_nbytes(qdf_device_t osdev, qdf_nbuf_t buf,
796 		qdf_dma_dir_t dir, int nbytes)
797 {
798 	return __qdf_nbuf_map_nbytes(osdev, buf, dir, nbytes);
799 }
800 
801 static inline void
802 qdf_nbuf_unmap_nbytes(qdf_device_t osdev,
803 	qdf_nbuf_t buf, qdf_dma_dir_t dir, int nbytes)
804 {
805 	__qdf_nbuf_unmap_nbytes(osdev, buf, dir, nbytes);
806 }
807 
808 static inline QDF_STATUS
809 qdf_nbuf_map_nbytes_single(
810 	qdf_device_t osdev, qdf_nbuf_t buf, qdf_dma_dir_t dir, int nbytes)
811 {
812 	return __qdf_nbuf_map_nbytes_single(osdev, buf, dir, nbytes);
813 }
814 
815 static inline void
816 qdf_nbuf_unmap_nbytes_single(
817 	qdf_device_t osdev, qdf_nbuf_t buf, qdf_dma_dir_t dir, int nbytes)
818 {
819 	return __qdf_nbuf_unmap_nbytes_single(osdev, buf, dir, nbytes);
820 }
821 #endif /* NBUF_MAP_UNMAP_DEBUG */
822 
823 /**
824  * qdf_nbuf_queue_head_dequeue() - dequeue nbuf from the head of queue
825  * @nbuf_queue_head: pointer to nbuf queue head
826  *
827  * Return: pointer to network buffer dequeued
828  */
829 static inline
830 qdf_nbuf_t qdf_nbuf_queue_head_dequeue(qdf_nbuf_queue_head_t *nbuf_queue_head)
831 {
832 	return __qdf_nbuf_queue_head_dequeue(nbuf_queue_head);
833 }
834 
835 /**
836  * qdf_nbuf_queue_head_qlen() - length of the queue
837  * @nbuf_queue_head: pointer to nbuf queue head
838  *
839  * Return: length of queue (number of nbufs) pointed by qdf_nbuf_queue_head_t
840  */
841 static inline
842 uint32_t qdf_nbuf_queue_head_qlen(qdf_nbuf_queue_head_t *nbuf_queue_head)
843 {
844 	return __qdf_nbuf_queue_head_qlen(nbuf_queue_head);
845 }
846 
847 /**
848  * qdf_nbuf_queue_head_enqueue_tail() - enqueue nbuf into queue tail
849  * @nbuf_queue_head: pointer to nbuf queue head
850  * @nbuf: nbuf to be enqueued
851  *
852  * Return: None
853  */
854 static inline
855 void qdf_nbuf_queue_head_enqueue_tail(qdf_nbuf_queue_head_t *nbuf_queue_head,
856 				      qdf_nbuf_t nbuf)
857 {
858 	return __qdf_nbuf_queue_head_enqueue_tail(nbuf_queue_head, nbuf);
859 }
860 
861 /**
862  * qdf_nbuf_queue_head_init() - initialize qdf_nbuf_queue_head_t
863  * @nbuf_queue_head: pointer to nbuf queue head to be initialized
864  *
865  * Return: None
866  */
867 static inline
868 void qdf_nbuf_queue_head_init(qdf_nbuf_queue_head_t *nbuf_queue_head)
869 {
870 	return __qdf_nbuf_queue_head_init(nbuf_queue_head);
871 }
872 
873 /**
874  * qdf_nbuf_queue_head_purge() - purge qdf_nbuf_queue_head_t
875  * @nbuf_queue_head: pointer to nbuf queue head to be purged
876  *
877  * Return: None
878  */
879 static inline
880 void qdf_nbuf_queue_head_purge(qdf_nbuf_queue_head_t *nbuf_queue_head)
881 {
882 	return __qdf_nbuf_queue_head_purge(nbuf_queue_head);
883 }
884 
885 static inline void
886 qdf_nbuf_sync_for_cpu(qdf_device_t osdev, qdf_nbuf_t buf, qdf_dma_dir_t dir)
887 {
888 	__qdf_nbuf_sync_for_cpu(osdev, buf, dir);
889 }
890 
891 static inline int qdf_nbuf_get_num_frags(qdf_nbuf_t buf)
892 {
893 	return __qdf_nbuf_get_num_frags(buf);
894 }
895 
896 /**
897  * qdf_nbuf_get_frag_len() - get fragment length
898  * @buf: Network buffer
899  * @frag_num: Fragment number
900  *
901  * Return: Fragment length
902  */
903 static inline int qdf_nbuf_get_frag_len(qdf_nbuf_t buf, int frag_num)
904 {
905 	QDF_BUG(!(frag_num >= QDF_NBUF_CB_TX_MAX_EXTRA_FRAGS));
906 	return __qdf_nbuf_get_frag_len(buf, frag_num);
907 }
908 
909 /**
910  * qdf_nbuf_get_frag_vaddr() - get fragment virtual address
911  * @buf: Network buffer
912  * @frag_num: Fragment number
913  *
914  * Return: Fragment virtual address
915  */
916 static inline unsigned char *qdf_nbuf_get_frag_vaddr(qdf_nbuf_t buf,
917 			int frag_num)
918 {
919 	QDF_BUG(!(frag_num >= QDF_NBUF_CB_TX_MAX_EXTRA_FRAGS));
920 	return __qdf_nbuf_get_frag_vaddr(buf, frag_num);
921 }
922 
923 /**
924  * qdf_nbuf_get_frag_vaddr_always() - get fragment virtual address
925  * @buf: Network buffer
926  *
927  * Return: Fragment virtual address
928  */
929 static inline unsigned char *
930 qdf_nbuf_get_frag_vaddr_always(qdf_nbuf_t buf)
931 {
932 	return __qdf_nbuf_get_frag_vaddr_always(buf);
933 }
934 
935 /**
936  * qdf_nbuf_get_frag_paddr() - get physical address for skb linear buffer
937  *                              or skb fragment, based on frag_num passed
938  * @buf: Network buffer
939  * @frag_num: Fragment number
940  *
941  * Return: Fragment physical address
942  */
943 static inline qdf_dma_addr_t qdf_nbuf_get_frag_paddr(qdf_nbuf_t buf,
944 			unsigned int frag_num)
945 {
946 	QDF_BUG(!(frag_num >= QDF_NBUF_CB_TX_MAX_EXTRA_FRAGS));
947 	return __qdf_nbuf_get_frag_paddr(buf, frag_num);
948 }
949 
950 /**
951  * qdf_nbuf_get_tx_frag_paddr() - get physical address for skb fragments only
952  * @buf: Network buffer
953  *
954  * Return: Fragment physical address
955  * Usage guideline: Use “qdf_nbuf_frag_map()” to dma map the specific
956  *                  skb fragment , followed by “qdf_nbuf_get_tx_frag_paddr”
957  */
958 static inline qdf_dma_addr_t qdf_nbuf_get_tx_frag_paddr(qdf_nbuf_t buf)
959 {
960 	return __qdf_nbuf_get_tx_frag_paddr(buf);
961 }
962 
963 /**
964  * qdf_nbuf_get_frag_is_wordstream() - is fragment wordstream
965  * @buf: Network buffer
966  * @frag_num: Fragment number
967  *
968  * Return: Fragment wordstream or not
969  */
970 static inline int qdf_nbuf_get_frag_is_wordstream(qdf_nbuf_t buf, int frag_num)
971 {
972 	QDF_BUG(!(frag_num >= QDF_NBUF_CB_TX_MAX_EXTRA_FRAGS));
973 	return __qdf_nbuf_get_frag_is_wordstream(buf, frag_num);
974 }
975 
976 /**
977  * qdf_nbuf_set_frag_is_wordstream() - set fragment wordstream
978  * @buf: Network buffer
979  * @frag_num: Fragment number
980  * @is_wordstream: Wordstream
981  *
982  * Return: none
983  */
984 static inline void
985 qdf_nbuf_set_frag_is_wordstream(qdf_nbuf_t buf,
986 		 int frag_num, int is_wordstream)
987 {
988 	QDF_BUG(!(frag_num >= QDF_NBUF_CB_TX_MAX_EXTRA_FRAGS));
989 	__qdf_nbuf_set_frag_is_wordstream(buf, frag_num, is_wordstream);
990 }
991 
992 static inline void
993 qdf_nbuf_set_vdev_ctx(qdf_nbuf_t buf, uint8_t vdev_id)
994 {
995 	__qdf_nbuf_set_vdev_ctx(buf, vdev_id);
996 }
997 
998 static inline void
999 qdf_nbuf_set_tx_ftype(qdf_nbuf_t buf, enum cb_ftype type)
1000 {
1001 	__qdf_nbuf_set_tx_ftype(buf, type);
1002 }
1003 
1004 static inline void
1005 qdf_nbuf_set_rx_ftype(qdf_nbuf_t buf, enum cb_ftype type)
1006 {
1007 	__qdf_nbuf_set_rx_ftype(buf, type);
1008 }
1009 
1010 
1011 
1012 static inline uint8_t
1013 qdf_nbuf_get_vdev_ctx(qdf_nbuf_t buf)
1014 {
1015 	return  __qdf_nbuf_get_vdev_ctx(buf);
1016 }
1017 
1018 static inline enum cb_ftype qdf_nbuf_get_tx_ftype(qdf_nbuf_t buf)
1019 {
1020 	return  __qdf_nbuf_get_tx_ftype(buf);
1021 }
1022 
1023 static inline enum cb_ftype qdf_nbuf_get_rx_ftype(qdf_nbuf_t buf)
1024 {
1025 	return  __qdf_nbuf_get_rx_ftype(buf);
1026 }
1027 
1028 
1029 static inline qdf_dma_addr_t
1030 qdf_nbuf_mapped_paddr_get(qdf_nbuf_t buf)
1031 {
1032 	return __qdf_nbuf_mapped_paddr_get(buf);
1033 }
1034 
1035 static inline void
1036 qdf_nbuf_mapped_paddr_set(qdf_nbuf_t buf, qdf_dma_addr_t paddr)
1037 {
1038 	__qdf_nbuf_mapped_paddr_set(buf, paddr);
1039 }
1040 
1041 static inline void
1042 qdf_nbuf_frag_push_head(qdf_nbuf_t buf,
1043 			int frag_len, char *frag_vaddr,
1044 			qdf_dma_addr_t frag_paddr)
1045 {
1046 	__qdf_nbuf_frag_push_head(buf, frag_len, frag_vaddr, frag_paddr);
1047 }
1048 
1049 #define qdf_nbuf_num_frags_init(_nbuf) __qdf_nbuf_num_frags_init((_nbuf))
1050 
1051 /**
1052  * qdf_nbuf_set_rx_chfrag_start() - set msdu start bit
1053  * @buf: Network buffer
1054  * @val: 0/1
1055  *
1056  * Return: void
1057  */
1058 static inline void
1059 qdf_nbuf_set_rx_chfrag_start(qdf_nbuf_t buf, uint8_t val)
1060 {
1061 	__qdf_nbuf_set_rx_chfrag_start(buf, val);
1062 }
1063 
1064 /**
1065  * qdf_nbuf_is_rx_chfrag_start() - get msdu start bit
1066  * @buf: Network buffer
1067  *
1068  * Return: integer value - 0/1
1069  */
1070 static inline int qdf_nbuf_is_rx_chfrag_start(qdf_nbuf_t buf)
1071 {
1072 	return __qdf_nbuf_is_rx_chfrag_start(buf);
1073 }
1074 
1075 /**
1076  * qdf_nbuf_set_rx_chfrag_cont() - set msdu continuation bit
1077  * @buf: Network buffer
1078  * @val: 0/1
1079  *
1080  * Return: void
1081  */
1082 static inline void
1083 qdf_nbuf_set_rx_chfrag_cont(qdf_nbuf_t buf, uint8_t val)
1084 {
1085 	__qdf_nbuf_set_rx_chfrag_cont(buf, val);
1086 }
1087 
1088 /**
1089  * qdf_nbuf_is_rx_chfrag_cont() - get msdu continuation bit
1090  * @buf: Network buffer
1091  *
1092  * Return: integer value - 0/1
1093  */
1094 static inline int qdf_nbuf_is_rx_chfrag_cont(qdf_nbuf_t buf)
1095 {
1096 	return __qdf_nbuf_is_rx_chfrag_cont(buf);
1097 }
1098 
1099 /**
1100  * qdf_nbuf_set_rx_chfrag_end() - set msdu end bit
1101  * @buf: Network buffer
1102  * @val: 0/1
1103  *
1104  * Return: void
1105  */
1106 static inline void qdf_nbuf_set_rx_chfrag_end(qdf_nbuf_t buf, uint8_t val)
1107 {
1108 	__qdf_nbuf_set_rx_chfrag_end(buf, val);
1109 }
1110 
1111 /**
1112  * qdf_nbuf_is_rx_chfrag_end() - set msdu end bit
1113  * @buf: Network buffer
1114  *
1115  * Return: integer value - 0/1
1116  */
1117 static inline int qdf_nbuf_is_rx_chfrag_end(qdf_nbuf_t buf)
1118 {
1119 	return __qdf_nbuf_is_rx_chfrag_end(buf);
1120 }
1121 
1122 /**
1123  * qdf_nbuf_set_da_mcbc() - set da is mcbc
1124  * @buf: Network buffer
1125  * @val: 0/1
1126  *
1127  * Return: void
1128  */
1129 static inline void
1130 qdf_nbuf_set_da_mcbc(qdf_nbuf_t buf, uint8_t val)
1131 {
1132 	__qdf_nbuf_set_da_mcbc(buf, val);
1133 }
1134 
1135 /**
1136  * qdf_nbuf_is_da_mcbc() - get da is mcbc bit
1137  * @buf: Network buffer
1138  *
1139  * Return: integer value - 0/1
1140  */
1141 static inline int qdf_nbuf_is_da_mcbc(qdf_nbuf_t buf)
1142 {
1143 	return __qdf_nbuf_is_da_mcbc(buf);
1144 }
1145 
1146 /**
1147  * qdf_nbuf_set_da_valid() - set  da valid bit
1148  * @buf: Network buffer
1149  * @val: 0/1
1150  *
1151  * Return: void
1152  */
1153 static inline void qdf_nbuf_set_da_valid(qdf_nbuf_t buf, uint8_t val)
1154 {
1155 	__qdf_nbuf_set_da_valid(buf, val);
1156 }
1157 
1158 /**
1159  * qdf_nbuf_is_da_valid() - get da valid bit
1160  * @buf: Network buffer
1161  *
1162  * Return: integer value - 0/1
1163  */
1164 static inline int qdf_nbuf_is_da_valid(qdf_nbuf_t buf)
1165 {
1166 	return __qdf_nbuf_is_da_valid(buf);
1167 }
1168 
1169 /**
1170  * qdf_nbuf_set_sa_valid() - set  sa valid bit
1171  * @buf: Network buffer
1172  * @val: 0/1
1173  *
1174  * Return: void
1175  */
1176 static inline void qdf_nbuf_set_sa_valid(qdf_nbuf_t buf, uint8_t val)
1177 {
1178 	__qdf_nbuf_set_sa_valid(buf, val);
1179 }
1180 
1181 /**
1182  * qdf_nbuf_is_sa_valid() - get da valid bit
1183  * @buf: Network buffer
1184  *
1185  * Return: integer value - 0/1
1186  */
1187 static inline int qdf_nbuf_is_sa_valid(qdf_nbuf_t buf)
1188 {
1189 	return __qdf_nbuf_is_sa_valid(buf);
1190 }
1191 
1192 /**
1193  * qdf_nbuf_set_raw_frame() - set  raw_frame bit
1194  * @buf: Network buffer
1195  * @val: 0/1
1196  *
1197  * Return: void
1198  */
1199 static inline void qdf_nbuf_set_raw_frame(qdf_nbuf_t buf, uint8_t val)
1200 {
1201 	__qdf_nbuf_set_raw_frame(buf, val);
1202 }
1203 
1204 /**
1205  * qdf_nbuf_is_raw_frame() -  get raw_frame bit
1206  * @buf: Network buffer
1207  *
1208  * Return: integer value - 0/1
1209  */
1210 static inline int qdf_nbuf_is_raw_frame(qdf_nbuf_t buf)
1211 {
1212 	return __qdf_nbuf_is_raw_frame(buf);
1213 }
1214 
1215 /**
1216  * qdf_nbuf_set_frag_list() - set  frag list bit
1217  * @buf: Network buffer
1218  * @val: 0/1
1219  *
1220  * Return: void
1221  */
1222 static inline void qdf_nbuf_set_is_frag(qdf_nbuf_t buf, uint8_t val)
1223 {
1224 	__qdf_nbuf_set_is_frag(buf, val);
1225 }
1226 
1227 /**
1228  * qdf_nbuf_is_sa_valid() - get da frag list bit
1229  * @buf: Network buffer
1230  *
1231  * Return: integer value - 0/1
1232  */
1233 static inline int qdf_nbuf_is_frag(qdf_nbuf_t buf)
1234 {
1235 	return __qdf_nbuf_is_frag(buf);
1236 }
1237 
1238 /**
1239  * qdf_nbuf_set_tx_chfrag_start() - set msdu start bit
1240  * @buf: Network buffer
1241  * @val: 0/1
1242  *
1243  * Return: void
1244  */
1245 static inline void
1246 qdf_nbuf_set_tx_chfrag_start(qdf_nbuf_t buf, uint8_t val)
1247 {
1248 	__qdf_nbuf_set_tx_chfrag_start(buf, val);
1249 }
1250 
1251 /**
1252  * qdf_nbuf_is_tx_chfrag_start() - get msdu start bit
1253  * @buf: Network buffer
1254  *
1255  * Return: integer value - 0/1
1256  */
1257 static inline int qdf_nbuf_is_tx_chfrag_start(qdf_nbuf_t buf)
1258 {
1259 	return __qdf_nbuf_is_tx_chfrag_start(buf);
1260 }
1261 
1262 /**
1263  * qdf_nbuf_set_tx_chfrag_cont() - set msdu continuation bit
1264  * @buf: Network buffer
1265  * @val: 0/1
1266  *
1267  * Return: void
1268  */
1269 static inline void
1270 qdf_nbuf_set_tx_chfrag_cont(qdf_nbuf_t buf, uint8_t val)
1271 {
1272 	__qdf_nbuf_set_tx_chfrag_cont(buf, val);
1273 }
1274 
1275 /**
1276  * qdf_nbuf_is_tx_chfrag_cont() - get msdu continuation bit
1277  * @buf: Network buffer
1278  *
1279  * Return: integer value - 0/1
1280  */
1281 static inline int qdf_nbuf_is_tx_chfrag_cont(qdf_nbuf_t buf)
1282 {
1283 	return __qdf_nbuf_is_tx_chfrag_cont(buf);
1284 }
1285 
1286 /**
1287  * qdf_nbuf_set_tx_chfrag_end() - set msdu end bit
1288  * @buf: Network buffer
1289  * @val: 0/1
1290  *
1291  * Return: void
1292  */
1293 static inline void qdf_nbuf_set_tx_chfrag_end(qdf_nbuf_t buf, uint8_t val)
1294 {
1295 	__qdf_nbuf_set_tx_chfrag_end(buf, val);
1296 }
1297 
1298 /**
1299  * qdf_nbuf_is_tx_chfrag_end() - set msdu end bit
1300  * @buf: Network buffer
1301  *
1302  * Return: integer value - 0/1
1303  */
1304 static inline int qdf_nbuf_is_tx_chfrag_end(qdf_nbuf_t buf)
1305 {
1306 	return __qdf_nbuf_is_tx_chfrag_end(buf);
1307 }
1308 
1309 static inline void
1310 qdf_nbuf_dma_map_info(qdf_dma_map_t bmap, qdf_dmamap_info_t *sg)
1311 {
1312 	__qdf_nbuf_dma_map_info(bmap, sg);
1313 }
1314 
1315 /**
1316  * qdf_nbuf_is_tso() - is the network buffer a jumbo packet?
1317  * @buf: Network buffer
1318  *
1319  * Return: 1 - this is a jumbo packet 0 - not a jumbo packet
1320  */
1321 static inline uint8_t qdf_nbuf_is_tso(qdf_nbuf_t nbuf)
1322 {
1323 	return __qdf_nbuf_is_tso(nbuf);
1324 }
1325 
1326 /**
1327  * qdf_nbuf_get_users() - function to get the number of users referencing this
1328  * network buffer
1329  *
1330  * @nbuf:   network buffer
1331  *
1332  * Return: number of user references to nbuf.
1333  */
1334 static inline int qdf_nbuf_get_users(qdf_nbuf_t nbuf)
1335 {
1336 	return __qdf_nbuf_get_users(nbuf);
1337 }
1338 
1339 /**
1340  * qdf_nbuf_next() - get the next packet in the linked list
1341  * @buf: Network buffer
1342  *
1343  * This function can be used when nbufs are directly linked into a list,
1344  * rather than using a separate network buffer queue object.
1345  *
1346  * Return: next network buffer in the linked list
1347  */
1348 static inline qdf_nbuf_t qdf_nbuf_next(qdf_nbuf_t buf)
1349 {
1350 	return __qdf_nbuf_next(buf);
1351 }
1352 
1353 #ifdef NBUF_MEMORY_DEBUG
1354 void qdf_net_buf_debug_init(void);
1355 void qdf_net_buf_debug_exit(void);
1356 void qdf_net_buf_debug_clean(void);
1357 void qdf_net_buf_debug_add_node(qdf_nbuf_t net_buf, size_t size,
1358 				const char *func_name, uint32_t line_num);
1359 /**
1360  * qdf_net_buf_debug_update_node() - update nbuf in debug hash table
1361  *
1362  * Return: none
1363  */
1364 void qdf_net_buf_debug_update_node(qdf_nbuf_t net_buf, const char *func_name,
1365 				   uint32_t line_num);
1366 void qdf_net_buf_debug_delete_node(qdf_nbuf_t net_buf);
1367 
1368 /**
1369  * qdf_net_buf_debug_acquire_skb() - acquire skb to avoid memory leak
1370  * @net_buf: Network buf holding head segment (single)
1371  * @func_name: pointer to function name
1372  * @line_num: line number
1373  *
1374  * WLAN driver module's SKB which are allocated by network stack are
1375  * suppose to call this API before freeing it such that the SKB
1376  * is not reported as memory leak.
1377  *
1378  * Return: none
1379  */
1380 void qdf_net_buf_debug_acquire_skb(qdf_nbuf_t net_buf,
1381 				   const char *func_name,
1382 				   uint32_t line_num);
1383 void qdf_net_buf_debug_release_skb(qdf_nbuf_t net_buf);
1384 
1385 /* nbuf allocation rouines */
1386 
1387 #define qdf_nbuf_alloc(d, s, r, a, p) \
1388 	qdf_nbuf_alloc_debug(d, s, r, a, p, __func__, __LINE__)
1389 
1390 qdf_nbuf_t qdf_nbuf_alloc_debug(qdf_device_t osdev, qdf_size_t size,
1391 				int reserve, int align, int prio,
1392 				const char *func, uint32_t line);
1393 
1394 #define qdf_nbuf_free(d) \
1395 	qdf_nbuf_free_debug(d, __func__, __LINE__)
1396 
1397 void qdf_nbuf_free_debug(qdf_nbuf_t nbuf, const char *func, uint32_t line);
1398 
1399 #define qdf_nbuf_clone(buf)     \
1400 	qdf_nbuf_clone_debug(buf, __func__, __LINE__)
1401 
1402 /**
1403  * qdf_nbuf_clone_debug() - clone the nbuf (copy is readonly)
1404  * @buf: nbuf to clone from
1405  * @func_name: pointer to function name
1406  * @line_num: line number
1407  *
1408  * This function clones the nbuf and creates a memory tracking
1409  * node corresponding to that cloned skbuff structure.
1410  *
1411  * Return: cloned buffer
1412  */
1413 static inline qdf_nbuf_t
1414 qdf_nbuf_clone_debug(qdf_nbuf_t buf, const char *func_name, uint32_t line_num)
1415 {
1416 	qdf_nbuf_t cloned_buf;
1417 
1418 	cloned_buf = __qdf_nbuf_clone(buf);
1419 
1420 	/* Store SKB in internal QDF tracking table */
1421 	if (qdf_likely(cloned_buf))
1422 		qdf_net_buf_debug_add_node(cloned_buf, 0, func_name, line_num);
1423 
1424 	return cloned_buf;
1425 }
1426 
1427 #define qdf_nbuf_copy(buf)     \
1428 	qdf_nbuf_copy_debug(buf, __func__, __LINE__)
1429 
1430 /**
1431  * qdf_nbuf_copy_debug() - returns a private copy of the buf
1432  * @buf: nbuf to copy from
1433  * @func_name: pointer to function name
1434  * @line_num: line number
1435  *
1436  * This API returns a private copy of the buf, the buf returned is completely
1437  * modifiable by callers. It also creates a memory tracking node corresponding
1438  * to that new skbuff structure.
1439  *
1440  * Return: copied buffer
1441  */
1442 static inline qdf_nbuf_t
1443 qdf_nbuf_copy_debug(qdf_nbuf_t buf, const char *func_name, uint32_t line_num)
1444 {
1445 	qdf_nbuf_t copied_buf;
1446 
1447 	copied_buf = __qdf_nbuf_copy(buf);
1448 
1449 	/* Store SKB in internal QDF tracking table */
1450 	if (qdf_likely(copied_buf))
1451 		qdf_net_buf_debug_add_node(copied_buf, 0, func_name, line_num);
1452 
1453 	return copied_buf;
1454 }
1455 
1456 #else /* NBUF_MEMORY_DEBUG */
1457 
1458 static inline void qdf_net_buf_debug_init(void) {}
1459 static inline void qdf_net_buf_debug_exit(void) {}
1460 
1461 static inline void qdf_net_buf_debug_acquire_skb(qdf_nbuf_t net_buf,
1462 						 const char *func_name,
1463 						 uint32_t line_num)
1464 {
1465 }
1466 
1467 static inline void qdf_net_buf_debug_release_skb(qdf_nbuf_t net_buf)
1468 {
1469 }
1470 
1471 static inline void
1472 qdf_net_buf_debug_update_node(qdf_nbuf_t net_buf, const char *func_name,
1473 			      uint32_t line_num)
1474 {
1475 }
1476 
1477 /* Nbuf allocation rouines */
1478 
1479 #define qdf_nbuf_alloc(osdev, size, reserve, align, prio) \
1480 	qdf_nbuf_alloc_fl(osdev, size, reserve, align, prio, \
1481 			  __func__, __LINE__)
1482 static inline qdf_nbuf_t
1483 qdf_nbuf_alloc_fl(qdf_device_t osdev, qdf_size_t size, int reserve, int align,
1484 		  int prio, const char *func, uint32_t line)
1485 {
1486 	return __qdf_nbuf_alloc(osdev, size, reserve, align, prio, func, line);
1487 }
1488 
1489 static inline void qdf_nbuf_free(qdf_nbuf_t buf)
1490 {
1491 	if (qdf_likely(buf))
1492 		__qdf_nbuf_free(buf);
1493 }
1494 
1495 /**
1496  * qdf_nbuf_clone() - clone the nbuf (copy is readonly)
1497  * @buf: Pointer to network buffer
1498  *
1499  * This function clones the nbuf and returns new sk_buff
1500  * structure.
1501  *
1502  * Return: cloned skb
1503  */
1504 static inline qdf_nbuf_t qdf_nbuf_clone(qdf_nbuf_t buf)
1505 {
1506 	return __qdf_nbuf_clone(buf);
1507 }
1508 
1509 /**
1510  * qdf_nbuf_copy() - returns a private copy of the buf
1511  * @buf: Pointer to network buffer
1512  *
1513  * This API returns a private copy of the buf, the buf returned is completely
1514  *  modifiable by callers
1515  *
1516  * Return: skb or NULL
1517  */
1518 static inline qdf_nbuf_t qdf_nbuf_copy(qdf_nbuf_t buf)
1519 {
1520 	return __qdf_nbuf_copy(buf);
1521 }
1522 
1523 #endif /* NBUF_MEMORY_DEBUG */
1524 
1525 #ifdef WLAN_FEATURE_FASTPATH
1526 /**
1527  * qdf_nbuf_init_fast() - before put buf into pool,turn it to init state
1528  *
1529  * @buf: buf instance
1530  * Return: data pointer of this buf where new data has to be
1531  *         put, or NULL if there is not enough room in this buf.
1532  */
1533 void qdf_nbuf_init_fast(qdf_nbuf_t nbuf);
1534 #endif /* WLAN_FEATURE_FASTPATH */
1535 
1536 /**
1537  * @qdf_nbuf_list_free() - free a list of nbufs
1538  * @buf_list: A list of nbufs to be freed
1539  *
1540  * Return: none
1541  */
1542 
1543 static inline void qdf_nbuf_list_free(qdf_nbuf_t buf_list)
1544 {
1545 	while (buf_list) {
1546 		qdf_nbuf_t next = qdf_nbuf_next(buf_list);
1547 		qdf_nbuf_free(buf_list);
1548 		buf_list = next;
1549 	}
1550 }
1551 
1552 static inline void qdf_nbuf_tx_free(qdf_nbuf_t buf_list, int tx_err)
1553 {
1554 	qdf_nbuf_list_free(buf_list);
1555 }
1556 
1557 static inline void qdf_nbuf_ref(qdf_nbuf_t buf)
1558 {
1559 	__qdf_nbuf_ref(buf);
1560 }
1561 
1562 static inline int qdf_nbuf_shared(qdf_nbuf_t buf)
1563 {
1564 	return __qdf_nbuf_shared(buf);
1565 }
1566 
1567 static inline QDF_STATUS qdf_nbuf_cat(qdf_nbuf_t dst, qdf_nbuf_t src)
1568 {
1569 	return __qdf_nbuf_cat(dst, src);
1570 }
1571 
1572 /**
1573  * @qdf_nbuf_copy_bits() - return the length of the copy bits for skb
1574  * @skb: SKB pointer
1575  * @offset: offset
1576  * @len: Length
1577  * @to: To
1578  *
1579  * Return: int32_t
1580  */
1581 static inline int32_t
1582 qdf_nbuf_copy_bits(qdf_nbuf_t nbuf, uint32_t offset, uint32_t len, void *to)
1583 {
1584 	return __qdf_nbuf_copy_bits(nbuf, offset, len, to);
1585 }
1586 
1587 
1588 /* nbuf manipulation routines */
1589 
1590 /**
1591  * @qdf_nbuf_head() - return the address of an nbuf's buffer
1592  * @buf: netbuf
1593  *
1594  * Return: head address
1595  */
1596 static inline uint8_t *qdf_nbuf_head(qdf_nbuf_t buf)
1597 {
1598 	return __qdf_nbuf_head(buf);
1599 }
1600 
1601 /**
1602  * qdf_nbuf_data() - Return the address of the start of data within an nbuf
1603  * @buf: Network buffer
1604  *
1605  * Return: Data address
1606  */
1607 static inline uint8_t *qdf_nbuf_data(qdf_nbuf_t buf)
1608 {
1609 	return __qdf_nbuf_data(buf);
1610 }
1611 
1612 /**
1613  * qdf_nbuf_data_addr() - Return the address of skb->data
1614  * @buf: Network buffer
1615  *
1616  * Return: Data address
1617  */
1618 static inline uint8_t *qdf_nbuf_data_addr(qdf_nbuf_t buf)
1619 {
1620 	return __qdf_nbuf_data_addr(buf);
1621 }
1622 
1623 /**
1624  * qdf_nbuf_headroom() - amount of headroom int the current nbuf
1625  * @buf: Network buffer
1626  *
1627  * Return: Amount of head room
1628  */
1629 static inline uint32_t qdf_nbuf_headroom(qdf_nbuf_t buf)
1630 {
1631 	return __qdf_nbuf_headroom(buf);
1632 }
1633 
1634 /**
1635  * qdf_nbuf_tailroom() - amount of tail space available
1636  * @buf: Network buffer
1637  *
1638  * Return: amount of tail room
1639  */
1640 static inline uint32_t qdf_nbuf_tailroom(qdf_nbuf_t buf)
1641 {
1642 	return __qdf_nbuf_tailroom(buf);
1643 }
1644 
1645 /**
1646  * qdf_nbuf_push_head() - push data in the front
1647  * @buf: Network buf instance
1648  * @size: Size to be pushed
1649  *
1650  * Return: New data pointer of this buf after data has been pushed,
1651  *	or NULL if there is not enough room in this buf.
1652  */
1653 static inline uint8_t *qdf_nbuf_push_head(qdf_nbuf_t buf, qdf_size_t size)
1654 {
1655 	return __qdf_nbuf_push_head(buf, size);
1656 }
1657 
1658 /**
1659  * qdf_nbuf_put_tail() - puts data in the end
1660  * @buf: Network buf instance
1661  * @size: Size to be pushed
1662  *
1663  * Return: Data pointer of this buf where new data has to be
1664  *	put, or NULL if there is not enough room in this buf.
1665  */
1666 static inline uint8_t *qdf_nbuf_put_tail(qdf_nbuf_t buf, qdf_size_t size)
1667 {
1668 	return __qdf_nbuf_put_tail(buf, size);
1669 }
1670 
1671 /**
1672  * qdf_nbuf_pull_head() - pull data out from the front
1673  * @buf: Network buf instance
1674  * @size: Size to be popped
1675  *
1676  * Return: New data pointer of this buf after data has been popped,
1677  *	or NULL if there is not sufficient data to pull.
1678  */
1679 static inline uint8_t *qdf_nbuf_pull_head(qdf_nbuf_t buf, qdf_size_t size)
1680 {
1681 	return __qdf_nbuf_pull_head(buf, size);
1682 }
1683 
1684 /**
1685  * qdf_nbuf_trim_tail() - trim data out from the end
1686  * @buf: Network buf instance
1687  * @size: Size to be popped
1688  *
1689  * Return: none
1690  */
1691 static inline void qdf_nbuf_trim_tail(qdf_nbuf_t buf, qdf_size_t size)
1692 {
1693 	__qdf_nbuf_trim_tail(buf, size);
1694 }
1695 
1696 /**
1697  * qdf_nbuf_len() - get the length of the buf
1698  * @buf: Network buf instance
1699  *
1700  * Return: total length of this buf.
1701  */
1702 static inline qdf_size_t qdf_nbuf_len(qdf_nbuf_t buf)
1703 {
1704 	return __qdf_nbuf_len(buf);
1705 }
1706 
1707 /**
1708  * qdf_nbuf_set_pktlen() - set the length of the buf
1709  * @buf: Network buf instance
1710  * @size: Size to be set
1711  *
1712  * Return: none
1713  */
1714 static inline void qdf_nbuf_set_pktlen(qdf_nbuf_t buf, uint32_t len)
1715 {
1716 	__qdf_nbuf_set_pktlen(buf, len);
1717 }
1718 
1719 /**
1720  * qdf_nbuf_reserve() - trim data out from the end
1721  * @buf: Network buf instance
1722  * @size: Size to be popped
1723  *
1724  * Return: none
1725  */
1726 static inline void qdf_nbuf_reserve(qdf_nbuf_t buf, qdf_size_t size)
1727 {
1728 	__qdf_nbuf_reserve(buf, size);
1729 }
1730 
1731 /**
1732  * qdf_nbuf_reset() - reset the buffer data and pointer
1733  * @buf: Network buf instance
1734  * @reserve: reserve
1735  * @align: align
1736  *
1737  * Return: none
1738  */
1739 static inline void qdf_nbuf_reset(qdf_nbuf_t buf, int reserve, int align)
1740 {
1741 	__qdf_nbuf_reset(buf, reserve, align);
1742 }
1743 
1744 /**
1745  * qdf_nbuf_dev_scratch_is_supported() - dev_scratch support for network buffer
1746  *                                       in kernel
1747  *
1748  * Return: true if dev_scratch is supported
1749  *         false if dev_scratch is not supported
1750  */
1751 static inline bool qdf_nbuf_is_dev_scratch_supported(void)
1752 {
1753 	return __qdf_nbuf_is_dev_scratch_supported();
1754 }
1755 
1756 /**
1757  * qdf_nbuf_get_dev_scratch() - get dev_scratch of network buffer
1758  * @buf: Pointer to network buffer
1759  *
1760  * Return: dev_scratch if dev_scratch supported
1761  *         0 if dev_scratch not supported
1762  */
1763 static inline unsigned long qdf_nbuf_get_dev_scratch(qdf_nbuf_t buf)
1764 {
1765 	return __qdf_nbuf_get_dev_scratch(buf);
1766 }
1767 
1768 /**
1769  * qdf_nbuf_set_dev_scratch() - set dev_scratch of network buffer
1770  * @buf: Pointer to network buffer
1771  * @value: value to be set in dev_scratch of network buffer
1772  *
1773  * Return: void
1774  */
1775 static inline void qdf_nbuf_set_dev_scratch(qdf_nbuf_t buf, unsigned long value)
1776 {
1777 	__qdf_nbuf_set_dev_scratch(buf, value);
1778 }
1779 
1780 /**
1781  * qdf_nbuf_peek_header() - return the data pointer & length of the header
1782  * @buf: Network nbuf
1783  * @addr: Data pointer
1784  * @len: Length of the data
1785  *
1786  * Return: none
1787  */
1788 static inline void
1789 qdf_nbuf_peek_header(qdf_nbuf_t buf, uint8_t **addr, uint32_t *len)
1790 {
1791 	__qdf_nbuf_peek_header(buf, addr, len);
1792 }
1793 
1794 /* nbuf queue routines */
1795 
1796 /**
1797  * qdf_nbuf_queue_init() - initialize buf queue
1798  * @head: Network buf queue head
1799  *
1800  * Return: none
1801  */
1802 static inline void qdf_nbuf_queue_init(qdf_nbuf_queue_t *head)
1803 {
1804 	__qdf_nbuf_queue_init(head);
1805 }
1806 
1807 /**
1808  * qdf_nbuf_queue_add() - append a nbuf to the tail of the buf queue
1809  * @head: Network buf queue head
1810  * @buf: Network buf
1811  *
1812  * Return: none
1813  */
1814 static inline void qdf_nbuf_queue_add(qdf_nbuf_queue_t *head, qdf_nbuf_t buf)
1815 {
1816 	__qdf_nbuf_queue_add(head, buf);
1817 }
1818 
1819 /**
1820  * qdf_nbuf_queue_insert_head() - insert nbuf at the head of queue
1821  * @head: Network buf queue head
1822  * @buf: Network buf
1823  *
1824  * Return: none
1825  */
1826 static inline void
1827 qdf_nbuf_queue_insert_head(qdf_nbuf_queue_t *head, qdf_nbuf_t buf)
1828 {
1829 	__qdf_nbuf_queue_insert_head(head, buf);
1830 }
1831 
1832 /**
1833  * qdf_nbuf_queue_remove() - retrieve a buf from the head of the buf queue
1834  * @head: Network buf queue head
1835  *
1836  * Return: The head buf in the buf queue.
1837  */
1838 static inline qdf_nbuf_t qdf_nbuf_queue_remove(qdf_nbuf_queue_t *head)
1839 {
1840 	return __qdf_nbuf_queue_remove(head);
1841 }
1842 
1843 /**
1844  * qdf_nbuf_queue_len() - get the length of the queue
1845  * @head: Network buf queue head
1846  *
1847  * Return: length of the queue
1848  */
1849 static inline uint32_t qdf_nbuf_queue_len(qdf_nbuf_queue_t *head)
1850 {
1851 	return __qdf_nbuf_queue_len(head);
1852 }
1853 
1854 /**
1855  * qdf_nbuf_queue_next() - get the next guy/packet of the given buffer
1856  * @buf: Network buffer
1857  *
1858  * Return: next buffer/packet
1859  */
1860 static inline qdf_nbuf_t qdf_nbuf_queue_next(qdf_nbuf_t buf)
1861 {
1862 	return __qdf_nbuf_queue_next(buf);
1863 }
1864 
1865 /**
1866  * @qdf_nbuf_is_queue_empty() - check if the buf queue is empty
1867  * @nbq: Network buf queue handle
1868  *
1869  * Return: true  if queue is empty
1870  *	   false if queue is not emty
1871  */
1872 static inline bool qdf_nbuf_is_queue_empty(qdf_nbuf_queue_t *nbq)
1873 {
1874 	return __qdf_nbuf_is_queue_empty(nbq);
1875 }
1876 
1877 static inline qdf_nbuf_queue_t *
1878 qdf_nbuf_queue_append(qdf_nbuf_queue_t *dest, qdf_nbuf_queue_t *src)
1879 {
1880 	return __qdf_nbuf_queue_append(dest, src);
1881 }
1882 
1883 static inline void
1884 qdf_nbuf_queue_free(qdf_nbuf_queue_t *head)
1885 {
1886 	__qdf_nbuf_queue_free(head);
1887 }
1888 
1889 static inline qdf_nbuf_t
1890 qdf_nbuf_queue_first(qdf_nbuf_queue_t *head)
1891 {
1892 	return __qdf_nbuf_queue_first(head);
1893 }
1894 
1895 /**
1896  * qdf_nbuf_get_protocol() - return the protocol value of the skb
1897  * @skb: Pointer to network buffer
1898  *
1899  * Return: skb protocol
1900  */
1901 static inline uint16_t qdf_nbuf_get_protocol(struct sk_buff *skb)
1902 {
1903 	return __qdf_nbuf_get_protocol(skb);
1904 }
1905 
1906 /**
1907  * qdf_nbuf_get_ip_summed() - return the ip checksum value of the skb
1908  * @skb: Pointer to network buffer
1909  *
1910  * Return: skb ip_summed
1911  */
1912 static inline uint8_t qdf_nbuf_get_ip_summed(struct sk_buff *skb)
1913 {
1914 	return __qdf_nbuf_get_ip_summed(skb);
1915 }
1916 
1917 /**
1918  * qdf_nbuf_set_ip_summed() - sets the ip_summed value of the skb
1919  * @skb: Pointer to network buffer
1920  * @ip_summed: ip checksum
1921  *
1922  * Return: none
1923  */
1924 static inline void qdf_nbuf_set_ip_summed(struct sk_buff *skb,
1925 	uint8_t ip_summed)
1926 {
1927 	__qdf_nbuf_set_ip_summed(skb, ip_summed);
1928 }
1929 
1930 /**
1931  * qdf_nbuf_set_next() - add a packet to a linked list
1932  * @this_buf: Predecessor buffer
1933  * @next_buf: Successor buffer
1934  *
1935  * This function can be used to directly link nbufs, rather than using
1936  * a separate network buffer queue object.
1937  *
1938  * Return: none
1939  */
1940 static inline void qdf_nbuf_set_next(qdf_nbuf_t this_buf, qdf_nbuf_t next_buf)
1941 {
1942 	__qdf_nbuf_set_next(this_buf, next_buf);
1943 }
1944 
1945 /* nbuf extension routines */
1946 
1947 /**
1948  * qdf_nbuf_set_next_ext() - link extension of this packet contained in a new
1949  *			nbuf
1950  * @this_buf: predecessor buffer
1951  * @next_buf: successor buffer
1952  *
1953  * This function is used to link up many nbufs containing a single logical
1954  * packet - not a collection of packets. Do not use for linking the first
1955  * extension to the head
1956  *
1957  * Return: none
1958  */
1959 static inline void
1960 qdf_nbuf_set_next_ext(qdf_nbuf_t this_buf, qdf_nbuf_t next_buf)
1961 {
1962 	__qdf_nbuf_set_next_ext(this_buf, next_buf);
1963 }
1964 
1965 /**
1966  * qdf_nbuf_next_ext() - get the next packet extension in the linked list
1967  * @buf: Network buffer
1968  *
1969  * Return: Next network buffer in the linked list
1970  */
1971 static inline qdf_nbuf_t qdf_nbuf_next_ext(qdf_nbuf_t buf)
1972 {
1973 	return __qdf_nbuf_next_ext(buf);
1974 }
1975 
1976 /**
1977  * qdf_nbuf_append_ext_list() - link list of packet extensions to the head
1978  *				segment
1979  * @head_buf: Network buf holding head segment (single)
1980  * @ext_list: Network buf list holding linked extensions to the head
1981  * @ext_len: Total length of all buffers in the extension list
1982  *
1983  * This function is used to link up a list of packet extensions (seg1, 2,
1984  * ...) to the nbuf holding the head segment (seg0)
1985  *
1986  * Return: none
1987  */
1988 static inline void
1989 qdf_nbuf_append_ext_list(qdf_nbuf_t head_buf, qdf_nbuf_t ext_list,
1990 			qdf_size_t ext_len)
1991 {
1992 	__qdf_nbuf_append_ext_list(head_buf, ext_list, ext_len);
1993 }
1994 
1995 /**
1996  * qdf_nbuf_get_ext_list() - Get the link to extended nbuf list.
1997  * @head_buf: Network buf holding head segment (single)
1998  *
1999  * This ext_list is populated when we have Jumbo packet, for example in case of
2000  * monitor mode amsdu packet reception, and are stiched using frags_list.
2001  *
2002  * Return: Network buf list holding linked extensions from head buf.
2003  */
2004 static inline qdf_nbuf_t qdf_nbuf_get_ext_list(qdf_nbuf_t head_buf)
2005 {
2006 	return (qdf_nbuf_t)__qdf_nbuf_get_ext_list(head_buf);
2007 }
2008 
2009 /**
2010  * qdf_nbuf_get_tx_cksum() - gets the tx checksum offload demand
2011  * @buf: Network buffer
2012  *
2013  * Return: qdf_nbuf_tx_cksum_t checksum offload demand for the frame
2014  */
2015 static inline qdf_nbuf_tx_cksum_t qdf_nbuf_get_tx_cksum(qdf_nbuf_t buf)
2016 {
2017 	return __qdf_nbuf_get_tx_cksum(buf);
2018 }
2019 
2020 /**
2021  * qdf_nbuf_set_rx_cksum() - drivers that support hw checksumming use this to
2022  *			indicate checksum info to the stack.
2023  * @buf: Network buffer
2024  * @cksum: Checksum
2025  *
2026  * Return: none
2027  */
2028 static inline void
2029 qdf_nbuf_set_rx_cksum(qdf_nbuf_t buf, qdf_nbuf_rx_cksum_t *cksum)
2030 {
2031 	__qdf_nbuf_set_rx_cksum(buf, cksum);
2032 }
2033 
2034 /**
2035  * qdf_nbuf_get_tid() - this function extracts the TID value from nbuf
2036  * @buf: Network buffer
2037  *
2038  * Return: TID value
2039  */
2040 static inline uint8_t qdf_nbuf_get_tid(qdf_nbuf_t buf)
2041 {
2042 	return __qdf_nbuf_get_tid(buf);
2043 }
2044 
2045 /**
2046  * qdf_nbuf_set_tid() - this function sets the TID value in nbuf
2047  * @buf: Network buffer
2048  * @tid: TID value
2049  *
2050  * Return: none
2051  */
2052 static inline void qdf_nbuf_set_tid(qdf_nbuf_t buf, uint8_t tid)
2053 {
2054 	__qdf_nbuf_set_tid(buf, tid);
2055 }
2056 
2057 /**
2058  * qdf_nbuf_get_exemption_type() - this function extracts the exemption type
2059  *				from nbuf
2060  * @buf: Network buffer
2061  *
2062  * Return: Exemption type
2063  */
2064 static inline uint8_t qdf_nbuf_get_exemption_type(qdf_nbuf_t buf)
2065 {
2066 	return __qdf_nbuf_get_exemption_type(buf);
2067 }
2068 
2069 /**
2070  * qdf_nbuf_set_protocol() - this function peeks data into the buffer at given
2071  *			offset
2072  * @buf: Network buffer
2073  * @proto: Protocol
2074  *
2075  * Return: none
2076  */
2077 static inline void qdf_nbuf_set_protocol(qdf_nbuf_t buf, uint16_t proto)
2078 {
2079 	__qdf_nbuf_set_protocol(buf, proto);
2080 }
2081 
2082 /**
2083  * qdf_nbuf_trace_get_proto_type() - this function return packet proto type
2084  * @buf: Network buffer
2085  *
2086  * Return: Packet protocol type
2087  */
2088 static inline uint8_t qdf_nbuf_trace_get_proto_type(qdf_nbuf_t buf)
2089 {
2090 	return __qdf_nbuf_trace_get_proto_type(buf);
2091 }
2092 
2093 /**
2094  * qdf_nbuf_reg_trace_cb() - this function registers protocol trace callback
2095  * @cb_func_ptr: Callback pointer
2096  *
2097  * Return: none
2098  */
2099 static inline void qdf_nbuf_reg_trace_cb(qdf_nbuf_trace_update_t cb_func_ptr)
2100 {
2101 	__qdf_nbuf_reg_trace_cb(cb_func_ptr);
2102 }
2103 
2104 
2105 /**
2106  * qdf_nbuf_set_tx_parallel_dnload_frm() - set tx parallel download
2107  * @buf: Network buffer
2108  * @candi: Candidate of parallel download frame
2109  *
2110  * This function stores a flag specifying this TX frame is suitable for
2111  * downloading though a 2nd TX data pipe that is used for short frames for
2112  * protocols that can accept out-of-order delivery.
2113  *
2114  * Return: none
2115  */
2116 static inline void
2117 qdf_nbuf_set_tx_parallel_dnload_frm(qdf_nbuf_t buf, uint8_t candi)
2118 {
2119 	__qdf_nbuf_set_tx_htt2_frm(buf, candi);
2120 }
2121 
2122 /**
2123  * qdf_nbuf_get_tx_parallel_dnload_frm() - get tx parallel download
2124  * @buf: Network buffer
2125  *
2126  * This function return whether this TX frame is allow to download though a 2nd
2127  * TX data pipe or not.
2128  *
2129  * Return: none
2130  */
2131 static inline uint8_t qdf_nbuf_get_tx_parallel_dnload_frm(qdf_nbuf_t buf)
2132 {
2133 	return __qdf_nbuf_get_tx_htt2_frm(buf);
2134 }
2135 
2136 /**
2137  * qdf_nbuf_get_dhcp_subtype() - get the subtype
2138  *              of DHCP packet.
2139  * @buf: Pointer to DHCP packet buffer
2140  *
2141  * This func. returns the subtype of DHCP packet.
2142  *
2143  * Return: subtype of the DHCP packet.
2144  */
2145 static inline enum qdf_proto_subtype
2146 qdf_nbuf_get_dhcp_subtype(qdf_nbuf_t buf)
2147 {
2148 	return __qdf_nbuf_data_get_dhcp_subtype(qdf_nbuf_data(buf));
2149 }
2150 
2151 /**
2152  * qdf_nbuf_data_get_dhcp_subtype() - get the subtype
2153  *              of DHCP packet.
2154  * @buf: Pointer to DHCP packet data buffer
2155  *
2156  * This func. returns the subtype of DHCP packet.
2157  *
2158  * Return: subtype of the DHCP packet.
2159  */
2160 static inline enum qdf_proto_subtype
2161 qdf_nbuf_data_get_dhcp_subtype(uint8_t *data)
2162 {
2163 	return __qdf_nbuf_data_get_dhcp_subtype(data);
2164 }
2165 
2166 /**
2167  * qdf_nbuf_get_eapol_subtype() - get the subtype
2168  *            of EAPOL packet.
2169  * @buf: Pointer to EAPOL packet buffer
2170  *
2171  * This func. returns the subtype of EAPOL packet.
2172  *
2173  * Return: subtype of the EAPOL packet.
2174  */
2175 static inline enum qdf_proto_subtype
2176 qdf_nbuf_get_eapol_subtype(qdf_nbuf_t buf)
2177 {
2178 	return __qdf_nbuf_data_get_eapol_subtype(qdf_nbuf_data(buf));
2179 }
2180 
2181 /**
2182  * qdf_nbuf_data_get_eapol_subtype() - get the subtype
2183  *            of EAPOL packet.
2184  * @data: Pointer to EAPOL packet data buffer
2185  *
2186  * This func. returns the subtype of EAPOL packet.
2187  *
2188  * Return: subtype of the EAPOL packet.
2189  */
2190 static inline enum qdf_proto_subtype
2191 qdf_nbuf_data_get_eapol_subtype(uint8_t *data)
2192 {
2193 	return __qdf_nbuf_data_get_eapol_subtype(data);
2194 }
2195 
2196 /**
2197  * qdf_nbuf_get_arp_subtype() - get the subtype
2198  *            of ARP packet.
2199  * @buf: Pointer to ARP packet buffer
2200  *
2201  * This func. returns the subtype of ARP packet.
2202  *
2203  * Return: subtype of the ARP packet.
2204  */
2205 static inline enum qdf_proto_subtype
2206 qdf_nbuf_get_arp_subtype(qdf_nbuf_t buf)
2207 {
2208 	return __qdf_nbuf_data_get_arp_subtype(qdf_nbuf_data(buf));
2209 }
2210 
2211 /**
2212  * qdf_nbuf_data_get_arp_subtype() - get the subtype
2213  *            of ARP packet.
2214  * @data: Pointer to ARP packet data buffer
2215  *
2216  * This func. returns the subtype of ARP packet.
2217  *
2218  * Return: subtype of the ARP packet.
2219  */
2220 static inline enum qdf_proto_subtype
2221 qdf_nbuf_data_get_arp_subtype(uint8_t *data)
2222 {
2223 	return __qdf_nbuf_data_get_arp_subtype(data);
2224 }
2225 
2226 /**
2227  * qdf_nbuf_get_icmp_subtype() - get the subtype
2228  *            of IPV4 ICMP packet.
2229  * @buf: Pointer to IPV4 ICMP packet buffer
2230  *
2231  * This func. returns the subtype of ICMP packet.
2232  *
2233  * Return: subtype of the ICMP packet.
2234  */
2235 static inline enum qdf_proto_subtype
2236 qdf_nbuf_get_icmp_subtype(qdf_nbuf_t buf)
2237 {
2238 	return __qdf_nbuf_data_get_icmp_subtype(qdf_nbuf_data(buf));
2239 }
2240 
2241 /**
2242  * qdf_nbuf_data_get_icmp_subtype() - get the subtype
2243  *            of IPV4 ICMP packet.
2244  * @data: Pointer to IPV4 ICMP packet data buffer
2245  *
2246  * This func. returns the subtype of ICMP packet.
2247  *
2248  * Return: subtype of the ICMP packet.
2249  */
2250 static inline enum qdf_proto_subtype
2251 qdf_nbuf_data_get_icmp_subtype(uint8_t *data)
2252 {
2253 	return __qdf_nbuf_data_get_icmp_subtype(data);
2254 }
2255 
2256 /**
2257  * qdf_nbuf_get_icmpv6_subtype() - get the subtype
2258  *            of IPV6 ICMPV6 packet.
2259  * @buf: Pointer to IPV6 ICMPV6 packet buffer
2260  *
2261  * This func. returns the subtype of ICMPV6 packet.
2262  *
2263  * Return: subtype of the ICMPV6 packet.
2264  */
2265 static inline enum qdf_proto_subtype
2266 qdf_nbuf_get_icmpv6_subtype(qdf_nbuf_t buf)
2267 {
2268 	return __qdf_nbuf_data_get_icmpv6_subtype(qdf_nbuf_data(buf));
2269 }
2270 
2271 /**
2272  * qdf_nbuf_data_get_icmpv6_subtype() - get the subtype
2273  *            of IPV6 ICMPV6 packet.
2274  * @data: Pointer to IPV6 ICMPV6 packet data buffer
2275  *
2276  * This func. returns the subtype of ICMPV6 packet.
2277  *
2278  * Return: subtype of the ICMPV6 packet.
2279  */
2280 static inline enum qdf_proto_subtype
2281 qdf_nbuf_data_get_icmpv6_subtype(uint8_t *data)
2282 {
2283 	return __qdf_nbuf_data_get_icmpv6_subtype(data);
2284 }
2285 
2286 /**
2287  * qdf_nbuf_data_get_ipv4_proto() - get the proto type
2288  *            of IPV4 packet.
2289  * @data: Pointer to IPV4 packet data buffer
2290  *
2291  * This func. returns the proto type of IPV4 packet.
2292  *
2293  * Return: proto type of IPV4 packet.
2294  */
2295 static inline uint8_t
2296 qdf_nbuf_data_get_ipv4_proto(uint8_t *data)
2297 {
2298 	return __qdf_nbuf_data_get_ipv4_proto(data);
2299 }
2300 
2301 /**
2302  * qdf_nbuf_data_get_ipv6_proto() - get the proto type
2303  *            of IPV6 packet.
2304  * @data: Pointer to IPV6 packet data buffer
2305  *
2306  * This func. returns the proto type of IPV6 packet.
2307  *
2308  * Return: proto type of IPV6 packet.
2309  */
2310 static inline uint8_t
2311 qdf_nbuf_data_get_ipv6_proto(uint8_t *data)
2312 {
2313 	return __qdf_nbuf_data_get_ipv6_proto(data);
2314 }
2315 
2316 /**
2317  * qdf_nbuf_is_ipv4_pkt() - check if packet is a ipv4 packet or not
2318  * @buf:  buffer
2319  *
2320  * This api is for Tx packets.
2321  *
2322  * Return: true if packet is ipv4 packet
2323  */
2324 static inline
2325 bool qdf_nbuf_is_ipv4_pkt(qdf_nbuf_t buf)
2326 {
2327 	return __qdf_nbuf_data_is_ipv4_pkt(qdf_nbuf_data(buf));
2328 }
2329 
2330 /**
2331  * qdf_nbuf_data_is_ipv4_pkt() - check if packet is a ipv4 packet or not
2332  * @data:  data
2333  *
2334  * This api is for Tx packets.
2335  *
2336  * Return: true if packet is ipv4 packet
2337  */
2338 static inline
2339 bool qdf_nbuf_data_is_ipv4_pkt(uint8_t *data)
2340 {
2341 	return __qdf_nbuf_data_is_ipv4_pkt(data);
2342 }
2343 
2344 /**
2345  * qdf_nbuf_is_ipv4_dhcp_pkt() - check if packet is a dhcp packet or not
2346  * @buf:  buffer
2347  *
2348  * This api is for ipv4 packet.
2349  *
2350  * Return: true if packet is DHCP packet
2351  */
2352 static inline
2353 bool qdf_nbuf_is_ipv4_dhcp_pkt(qdf_nbuf_t buf)
2354 {
2355 	return __qdf_nbuf_data_is_ipv4_dhcp_pkt(qdf_nbuf_data(buf));
2356 }
2357 
2358 /**
2359  * qdf_nbuf_data_is_ipv4_dhcp_pkt() - check if it is DHCP packet.
2360  * @data: Pointer to DHCP packet data buffer
2361  *
2362  * This func. checks whether it is a DHCP packet or not.
2363  *
2364  * Return: true if it is a DHCP packet
2365  *         false if not
2366  */
2367 static inline
2368 bool qdf_nbuf_data_is_ipv4_dhcp_pkt(uint8_t *data)
2369 {
2370 	return __qdf_nbuf_data_is_ipv4_dhcp_pkt(data);
2371 }
2372 
2373 /**
2374  * qdf_nbuf_data_is_ipv6_dhcp_pkt() - check if it is DHCP packet.
2375  * @data: Pointer to DHCP packet data buffer
2376  *
2377  * This func. checks whether it is a DHCP packet or not.
2378  *
2379  * Return: true if it is a DHCP packet
2380  *         false if not
2381  */
2382 static inline
2383 bool qdf_nbuf_is_ipv6_dhcp_pkt(qdf_nbuf_t buf)
2384 {
2385 	return __qdf_nbuf_data_is_ipv6_dhcp_pkt(qdf_nbuf_data(buf));
2386 }
2387 
2388 /**
2389  * qdf_nbuf_is_ipv4_eapol_pkt() - check if packet is a eapol packet or not
2390  * @buf:  buffer
2391  *
2392  * This api is for ipv4 packet.
2393  *
2394  * Return: true if packet is EAPOL packet
2395  */
2396 static inline
2397 bool qdf_nbuf_is_ipv4_eapol_pkt(qdf_nbuf_t buf)
2398 {
2399 	return __qdf_nbuf_data_is_ipv4_eapol_pkt(qdf_nbuf_data(buf));
2400 }
2401 
2402 /**
2403  * qdf_nbuf_data_is_ipv4_eapol_pkt() - check if it is EAPOL packet.
2404  * @data: Pointer to EAPOL packet data buffer
2405  *
2406  * This func. checks whether it is a EAPOL packet or not.
2407  *
2408  * Return: true if it is a EAPOL packet
2409  *         false if not
2410  */
2411 static inline
2412 bool qdf_nbuf_data_is_ipv4_eapol_pkt(uint8_t *data)
2413 {
2414 	return __qdf_nbuf_data_is_ipv4_eapol_pkt(data);
2415 }
2416 
2417 /**
2418  * qdf_nbuf_is_ipv4_wapi_pkt() - check if packet is a wapi packet or not
2419  * @buf:  buffer
2420  *
2421  * This api is for ipv4 packet.
2422  *
2423  * Return: true if packet is WAPI packet
2424  */
2425 static inline
2426 bool qdf_nbuf_is_ipv4_wapi_pkt(qdf_nbuf_t buf)
2427 {
2428 	return __qdf_nbuf_is_ipv4_wapi_pkt(buf);
2429 }
2430 
2431 /**
2432  * qdf_nbuf_is_ipv4_tdls_pkt() - check if packet is a tdls packet or not
2433  * @buf:  buffer
2434  *
2435  * This api is for ipv4 packet.
2436  *
2437  * Return: true if packet is TDLS packet
2438  */
2439 static inline
2440 bool qdf_nbuf_is_ipv4_tdls_pkt(qdf_nbuf_t buf)
2441 {
2442 	return __qdf_nbuf_is_ipv4_tdls_pkt(buf);
2443 }
2444 
2445 /**
2446  * qdf_nbuf_is_ipv4_arp_pkt() - check if packet is a arp packet or not
2447  * @buf:  buffer
2448  *
2449  * This api is for ipv4 packet.
2450  *
2451  * Return: true if packet is ARP packet
2452  */
2453 static inline
2454 bool qdf_nbuf_is_ipv4_arp_pkt(qdf_nbuf_t buf)
2455 {
2456 	return __qdf_nbuf_data_is_ipv4_arp_pkt(qdf_nbuf_data(buf));
2457 }
2458 
2459 /**
2460  * qdf_nbuf_data_is_ipv4_arp_pkt() - check if it is ARP packet.
2461  * @data: Pointer to ARP packet data buffer
2462  *
2463  * This func. checks whether it is a ARP packet or not.
2464  *
2465  * Return: TRUE if it is a ARP packet
2466  *         FALSE if not
2467  */
2468 static inline
2469 bool qdf_nbuf_data_is_ipv4_arp_pkt(uint8_t *data)
2470 {
2471 	return __qdf_nbuf_data_is_ipv4_arp_pkt(data);
2472 }
2473 
2474 /**
2475  * qdf_nbuf_data_is_arp_req() - check if ARP packet is request.
2476  * @buf:  buffer
2477  *
2478  * This func. checks whether it is a ARP request or not.
2479  *
2480  * Return: true if it is a ARP request or FALSE if not
2481  */
2482 static inline
2483 bool qdf_nbuf_data_is_arp_req(qdf_nbuf_t buf)
2484 {
2485 	return __qdf_nbuf_data_is_arp_req(qdf_nbuf_data(buf));
2486 }
2487 
2488 /**
2489  * qdf_nbuf_data_is_arp_rsp() - check if ARP packet is response.
2490  * @buf:  buffer
2491  *
2492  * This func. checks whether it is a ARP response or not.
2493  *
2494  * Return: true if it is a ARP response or FALSE if not
2495  */
2496 static inline
2497 bool qdf_nbuf_data_is_arp_rsp(qdf_nbuf_t buf)
2498 {
2499 	return __qdf_nbuf_data_is_arp_rsp(qdf_nbuf_data(buf));
2500 }
2501 
2502 /**
2503  * qdf_nbuf_data_get_arp_src_ip() - get ARP packet source IP gateway.
2504  * @buf:  buffer
2505  *
2506  * Return: ARP packet source IP value.
2507  */
2508 static inline
2509 uint32_t qdf_nbuf_get_arp_src_ip(qdf_nbuf_t buf)
2510 {
2511 	return __qdf_nbuf_get_arp_src_ip(qdf_nbuf_data(buf));
2512 }
2513 
2514 /**
2515  * qdf_nbuf_data_get_arp_tgt_ip() - get ARP packet target IP gateway.
2516  * @buf:  buffer
2517  *
2518  * Return: ARP packet target IP value.
2519  */
2520 static inline
2521 uint32_t qdf_nbuf_get_arp_tgt_ip(qdf_nbuf_t buf)
2522 {
2523 	return __qdf_nbuf_get_arp_tgt_ip(qdf_nbuf_data(buf));
2524 }
2525 
2526 /**
2527  * qdf_nbuf_get_dns_domain_name() - get dns domain name of required length
2528  * @buf: buffer
2529  * @len: length to copy
2530  *
2531  * Return: dns domain name
2532  */
2533 static inline
2534 uint8_t *qdf_nbuf_get_dns_domain_name(qdf_nbuf_t buf, uint32_t len)
2535 {
2536 	return __qdf_nbuf_get_dns_domain_name(qdf_nbuf_data(buf), len);
2537 }
2538 
2539 /**
2540  * qdf_nbuf_data_is_dns_query() - check if skb data is a dns query
2541  * @buf: buffer
2542  *
2543  * Return: true if packet is dns query packet.
2544  *	   false otherwise.
2545  */
2546 static inline
2547 bool qdf_nbuf_data_is_dns_query(qdf_nbuf_t buf)
2548 {
2549 	return __qdf_nbuf_data_is_dns_query(qdf_nbuf_data(buf));
2550 }
2551 
2552 /**
2553  * qdf_nbuf_data_is_dns_response() - check if skb data is a dns response
2554  * @buf:  buffer
2555  *
2556  * Return: true if packet is dns response packet.
2557  *	   false otherwise.
2558  */
2559 static inline
2560 bool qdf_nbuf_data_is_dns_response(qdf_nbuf_t buf)
2561 {
2562 	return __qdf_nbuf_data_is_dns_response(qdf_nbuf_data(buf));
2563 }
2564 
2565 /**
2566  * qdf_nbuf_data_is_tcp_syn() - check if skb data is a tcp syn
2567  * @buf:  buffer
2568  *
2569  * Return: true if packet is tcp syn packet.
2570  *	   false otherwise.
2571  */
2572 static inline
2573 bool qdf_nbuf_data_is_tcp_syn(qdf_nbuf_t buf)
2574 {
2575 	return __qdf_nbuf_data_is_tcp_syn(qdf_nbuf_data(buf));
2576 }
2577 
2578 /**
2579  * qdf_nbuf_data_is_tcp_syn_ack() - check if skb data is a tcp syn ack
2580  * @buf:  buffer
2581  *
2582  * Return: true if packet is tcp syn ack packet.
2583  *	   false otherwise.
2584  */
2585 static inline
2586 bool qdf_nbuf_data_is_tcp_syn_ack(qdf_nbuf_t buf)
2587 {
2588 	return __qdf_nbuf_data_is_tcp_syn_ack(qdf_nbuf_data(buf));
2589 }
2590 
2591 /**
2592  * qdf_nbuf_data_is_tcp_ack() - check if skb data is a tcp ack
2593  * @buf:  buffer
2594  *
2595  * Return: true if packet is tcp ack packet.
2596  *	   false otherwise.
2597  */
2598 static inline
2599 bool qdf_nbuf_data_is_tcp_ack(qdf_nbuf_t buf)
2600 {
2601 	return __qdf_nbuf_data_is_tcp_ack(qdf_nbuf_data(buf));
2602 }
2603 
2604 /**
2605  * qdf_nbuf_data_get_tcp_src_port() - get tcp src port
2606  * @buf:  buffer
2607  *
2608  * Return: tcp source port value.
2609  */
2610 static inline
2611 uint16_t qdf_nbuf_data_get_tcp_src_port(qdf_nbuf_t buf)
2612 {
2613 	return __qdf_nbuf_data_get_tcp_src_port(qdf_nbuf_data(buf));
2614 }
2615 
2616 /**
2617  * qdf_nbuf_data_get_tcp_dst_port() - get tcp dst port
2618  * @buf:  buffer
2619  *
2620  * Return: tcp destination port value.
2621  */
2622 static inline
2623 uint16_t qdf_nbuf_data_get_tcp_dst_port(qdf_nbuf_t buf)
2624 {
2625 	return __qdf_nbuf_data_get_tcp_dst_port(qdf_nbuf_data(buf));
2626 }
2627 
2628 /**
2629  * qdf_nbuf_data_is_icmpv4_req() - check if ICMPv4 packet is request.
2630  * @buf:  buffer
2631  *
2632  * This func. checks whether it is a ICMPv4 request or not.
2633  *
2634  * Return: true if it is a ICMPv4 request or fALSE if not
2635  */
2636 static inline
2637 bool qdf_nbuf_data_is_icmpv4_req(qdf_nbuf_t buf)
2638 {
2639 	return __qdf_nbuf_data_is_icmpv4_req(qdf_nbuf_data(buf));
2640 }
2641 
2642 /**
2643  * qdf_nbuf_data_is_icmpv4_rsp() - check if ICMPv4 packet is res
2644  * @buf:  buffer
2645  *
2646  * Return: true if packet is icmpv4 response
2647  *	   false otherwise.
2648  */
2649 static inline
2650 bool qdf_nbuf_data_is_icmpv4_rsp(qdf_nbuf_t buf)
2651 {
2652 	return __qdf_nbuf_data_is_icmpv4_rsp(qdf_nbuf_data(buf));
2653 }
2654 
2655 /**
2656  * qdf_nbuf_get_icmpv4_src_ip() - get icmpv4 src IP
2657  * @buf:  buffer
2658  *
2659  * Return: icmpv4 packet source IP value.
2660  */
2661 static inline
2662 uint32_t qdf_nbuf_get_icmpv4_src_ip(qdf_nbuf_t buf)
2663 {
2664 	return __qdf_nbuf_get_icmpv4_src_ip(qdf_nbuf_data(buf));
2665 }
2666 
2667 /**
2668  * qdf_nbuf_data_get_icmpv4_tgt_ip() - get icmpv4 target IP
2669  * @buf:  buffer
2670  *
2671  * Return: icmpv4 packet target IP value.
2672  */
2673 static inline
2674 uint32_t qdf_nbuf_get_icmpv4_tgt_ip(qdf_nbuf_t buf)
2675 {
2676 	return __qdf_nbuf_get_icmpv4_tgt_ip(qdf_nbuf_data(buf));
2677 }
2678 
2679 /**
2680  * qdf_nbuf_is_ipv6_pkt() - check if it is IPV6 packet.
2681  * @buf: Pointer to IPV6 packet buffer
2682  *
2683  * This func. checks whether it is a IPV6 packet or not.
2684  *
2685  * Return: TRUE if it is a IPV6 packet
2686  *         FALSE if not
2687  */
2688 static inline
2689 bool qdf_nbuf_is_ipv6_pkt(qdf_nbuf_t buf)
2690 {
2691 	return __qdf_nbuf_data_is_ipv6_pkt(qdf_nbuf_data(buf));
2692 }
2693 
2694 /**
2695  * qdf_nbuf_data_is_ipv6_pkt() - check if it is IPV6 packet.
2696  * @data: Pointer to IPV6 packet data buffer
2697  *
2698  * This func. checks whether it is a IPV6 packet or not.
2699  *
2700  * Return: TRUE if it is a IPV6 packet
2701  *         FALSE if not
2702  */
2703 static inline
2704 bool qdf_nbuf_data_is_ipv6_pkt(uint8_t *data)
2705 {
2706 	return __qdf_nbuf_data_is_ipv6_pkt(data);
2707 }
2708 
2709 /**
2710  * qdf_nbuf_data_is_ipv4_mcast_pkt() - check if it is IPV4 multicast packet.
2711  * @data: Pointer to IPV4 packet data buffer
2712  *
2713  * This func. checks whether it is a IPV4 multicast packet or not.
2714  *
2715  * Return: TRUE if it is a IPV4 multicast packet
2716  *         FALSE if not
2717  */
2718 static inline
2719 bool qdf_nbuf_data_is_ipv4_mcast_pkt(uint8_t *data)
2720 {
2721 	return __qdf_nbuf_data_is_ipv4_mcast_pkt(data);
2722 }
2723 
2724 /**
2725  * qdf_nbuf_data_is_ipv6_mcast_pkt() - check if it is IPV6 multicast packet.
2726  * @data: Pointer to IPV6 packet data buffer
2727  *
2728  * This func. checks whether it is a IPV6 multicast packet or not.
2729  *
2730  * Return: TRUE if it is a IPV6 multicast packet
2731  *         FALSE if not
2732  */
2733 static inline
2734 bool qdf_nbuf_data_is_ipv6_mcast_pkt(uint8_t *data)
2735 {
2736 	return __qdf_nbuf_data_is_ipv6_mcast_pkt(data);
2737 }
2738 
2739 /**
2740  * qdf_nbuf_is_icmp_pkt() - check if it is IPV4 ICMP packet.
2741  * @buf: Pointer to IPV4 ICMP packet buffer
2742  *
2743  * This func. checks whether it is a ICMP packet or not.
2744  *
2745  * Return: TRUE if it is a ICMP packet
2746  *         FALSE if not
2747  */
2748 static inline
2749 bool qdf_nbuf_is_icmp_pkt(qdf_nbuf_t buf)
2750 {
2751 	return __qdf_nbuf_data_is_icmp_pkt(qdf_nbuf_data(buf));
2752 }
2753 
2754 /**
2755  * qdf_nbuf_data_is_icmp_pkt() - check if it is IPV4 ICMP packet.
2756  * @data: Pointer to IPV4 ICMP packet data buffer
2757  *
2758  * This func. checks whether it is a ICMP packet or not.
2759  *
2760  * Return: TRUE if it is a ICMP packet
2761  *         FALSE if not
2762  */
2763 static inline
2764 bool qdf_nbuf_data_is_icmp_pkt(uint8_t *data)
2765 {
2766 	return __qdf_nbuf_data_is_icmp_pkt(data);
2767 }
2768 
2769 /**
2770  * qdf_nbuf_is_icmpv6_pkt() - check if it is IPV6 ICMPV6 packet.
2771  * @buf: Pointer to IPV6 ICMPV6 packet buffer
2772  *
2773  * This func. checks whether it is a ICMPV6 packet or not.
2774  *
2775  * Return: TRUE if it is a ICMPV6 packet
2776  *         FALSE if not
2777  */
2778 static inline
2779 bool qdf_nbuf_is_icmpv6_pkt(qdf_nbuf_t buf)
2780 {
2781 	return __qdf_nbuf_data_is_icmpv6_pkt(qdf_nbuf_data(buf));
2782 }
2783 
2784 /**
2785  * qdf_nbuf_data_is_icmpv6_pkt() - check if it is IPV6 ICMPV6 packet.
2786  * @data: Pointer to IPV6 ICMPV6 packet data buffer
2787  *
2788  * This func. checks whether it is a ICMPV6 packet or not.
2789  *
2790  * Return: TRUE if it is a ICMPV6 packet
2791  *         FALSE if not
2792  */
2793 static inline
2794 bool qdf_nbuf_data_is_icmpv6_pkt(uint8_t *data)
2795 {
2796 	return __qdf_nbuf_data_is_icmpv6_pkt(data);
2797 }
2798 
2799 /**
2800  * qdf_nbuf_is_ipv4_udp_pkt() - check if it is IPV4 UDP packet.
2801  * @buf: Pointer to IPV4 UDP packet buffer
2802  *
2803  * This func. checks whether it is a IPV4 UDP packet or not.
2804  *
2805  * Return: TRUE if it is a IPV4 UDP packet
2806  *         FALSE if not
2807  */
2808 static inline
2809 bool qdf_nbuf_is_ipv4_udp_pkt(qdf_nbuf_t buf)
2810 {
2811 	return __qdf_nbuf_data_is_ipv4_udp_pkt(qdf_nbuf_data(buf));
2812 }
2813 
2814 /**
2815  * qdf_nbuf_data_is_ipv4_udp_pkt() - check if it is IPV4 UDP packet.
2816  * @data: Pointer to IPV4 UDP packet data buffer
2817  *
2818  * This func. checks whether it is a IPV4 UDP packet or not.
2819  *
2820  * Return: TRUE if it is a IPV4 UDP packet
2821  *         FALSE if not
2822  */
2823 static inline
2824 bool qdf_nbuf_data_is_ipv4_udp_pkt(uint8_t *data)
2825 {
2826 	return __qdf_nbuf_data_is_ipv4_udp_pkt(data);
2827 }
2828 
2829 /**
2830  * qdf_nbuf_is_ipv4_tcp_pkt() - check if it is IPV4 TCP packet.
2831  * @buf: Pointer to IPV4 TCP packet buffer
2832  *
2833  * This func. checks whether it is a IPV4 TCP packet or not.
2834  *
2835  * Return: TRUE if it is a IPV4 TCP packet
2836  *         FALSE if not
2837  */
2838 static inline
2839 bool qdf_nbuf_is_ipv4_tcp_pkt(qdf_nbuf_t buf)
2840 {
2841 	return __qdf_nbuf_data_is_ipv4_tcp_pkt(qdf_nbuf_data(buf));
2842 }
2843 
2844 /**
2845  * qdf_nbuf_data_is_ipv4_tcp_pkt() - check if it is IPV4 TCP packet.
2846  * @data: Pointer to IPV4 TCP packet data buffer
2847  *
2848  * This func. checks whether it is a IPV4 TCP packet or not.
2849  *
2850  * Return: TRUE if it is a IPV4 TCP packet
2851  *         FALSE if not
2852  */
2853 static inline
2854 bool qdf_nbuf_data_is_ipv4_tcp_pkt(uint8_t *data)
2855 {
2856 	return __qdf_nbuf_data_is_ipv4_tcp_pkt(data);
2857 }
2858 
2859 /**
2860  * qdf_nbuf_is_ipv6_udp_pkt() - check if it is IPV6 UDP packet.
2861  * @buf: Pointer to IPV6 UDP packet buffer
2862  *
2863  * This func. checks whether it is a IPV6 UDP packet or not.
2864  *
2865  * Return: TRUE if it is a IPV6 UDP packet
2866  *         FALSE if not
2867  */
2868 static inline
2869 bool qdf_nbuf_is_ipv6_udp_pkt(qdf_nbuf_t buf)
2870 {
2871 	return __qdf_nbuf_data_is_ipv6_udp_pkt(qdf_nbuf_data(buf));
2872 }
2873 
2874 /**
2875  * qdf_nbuf_data_is_ipv6_udp_pkt() - check if it is IPV6 UDP packet.
2876  * @data: Pointer to IPV6 UDP packet data buffer
2877  *
2878  * This func. checks whether it is a IPV6 UDP packet or not.
2879  *
2880  * Return: TRUE if it is a IPV6 UDP packet
2881  *         FALSE if not
2882  */
2883 static inline
2884 bool qdf_nbuf_data_is_ipv6_udp_pkt(uint8_t *data)
2885 {
2886 	return __qdf_nbuf_data_is_ipv6_udp_pkt(data);
2887 }
2888 
2889 /**
2890  * qdf_nbuf_is_ipv6_tcp_pkt() - check if it is IPV6 TCP packet.
2891  * @buf: Pointer to IPV6 TCP packet buffer
2892  *
2893  * This func. checks whether it is a IPV6 TCP packet or not.
2894  *
2895  * Return: TRUE if it is a IPV6 TCP packet
2896  *         FALSE if not
2897  */
2898 static inline
2899 bool qdf_nbuf_is_ipv6_tcp_pkt(qdf_nbuf_t buf)
2900 {
2901 	return __qdf_nbuf_data_is_ipv6_tcp_pkt(qdf_nbuf_data(buf));
2902 }
2903 
2904 /**
2905  * qdf_nbuf_data_is_ipv6_tcp_pkt() - check if it is IPV6 TCP packet.
2906  * @data: Pointer to IPV6 TCP packet data buffer
2907  *
2908  * This func. checks whether it is a IPV6 TCP packet or not.
2909  *
2910  * Return: TRUE if it is a IPV6 TCP packet
2911  *         FALSE if not
2912  */
2913 static inline
2914 bool qdf_nbuf_data_is_ipv6_tcp_pkt(uint8_t *data)
2915 {
2916 	return __qdf_nbuf_data_is_ipv6_tcp_pkt(data);
2917 }
2918 
2919 /**
2920  * qdf_nbuf_is_bcast_pkt() - check if it is broadcast packet.
2921  * @buf: Network buffer
2922  *
2923  * This func. checks whether packet is broadcast or not.
2924  *
2925  * Return: TRUE if it is broadcast packet
2926  *         FALSE if not
2927  */
2928 static inline
2929 bool qdf_nbuf_is_bcast_pkt(qdf_nbuf_t buf)
2930 {
2931 	return __qdf_nbuf_is_bcast_pkt(buf);
2932 }
2933 
2934 /**
2935  * qdf_nbuf_reset_num_frags() - decrement the number of fragments
2936  * @buf: Network buffer
2937  *
2938  * Return: Number of fragments
2939  */
2940 static inline void qdf_nbuf_reset_num_frags(qdf_nbuf_t buf)
2941 {
2942 	__qdf_nbuf_reset_num_frags(buf);
2943 }
2944 
2945 /**
2946  * qdf_dmaaddr_to_32s - return high and low parts of dma_addr
2947  *
2948  * Returns the high and low 32-bits of the DMA addr in the provided ptrs
2949  *
2950  * Return: N/A
2951  */
2952 static inline void qdf_dmaaddr_to_32s(qdf_dma_addr_t dmaaddr,
2953 				      uint32_t *lo, uint32_t *hi)
2954 {
2955 	return __qdf_dmaaddr_to_32s(dmaaddr, lo, hi);
2956 }
2957 
2958 /**
2959  * qdf_nbuf_get_tso_info() - function to divide a jumbo TSO
2960  * network buffer into segments
2961  * @nbuf:   network buffer to be segmented
2962  * @tso_info:  This is the output. The information about the
2963  *      TSO segments will be populated within this.
2964  *
2965  * This function fragments a TCP jumbo packet into smaller
2966  * segments to be transmitted by the driver. It chains the TSO
2967  * segments created into a list.
2968  *
2969  * Return: number of TSO segments
2970  */
2971 static inline uint32_t qdf_nbuf_get_tso_info(qdf_device_t osdev,
2972 		 qdf_nbuf_t nbuf, struct qdf_tso_info_t *tso_info)
2973 {
2974 	return __qdf_nbuf_get_tso_info(osdev, nbuf, tso_info);
2975 }
2976 
2977 /**
2978  * qdf_nbuf_unmap_tso_segment() - function to dma unmap TSO segment element
2979  *
2980  * @osdev: qdf device handle
2981  * @tso_seg: TSO segment element to be unmapped
2982  * @is_last_seg: whether this is last tso seg or not
2983  *
2984  * Return: none
2985  */
2986 static inline void qdf_nbuf_unmap_tso_segment(qdf_device_t osdev,
2987 			  struct qdf_tso_seg_elem_t *tso_seg,
2988 			  bool is_last_seg)
2989 {
2990 	return __qdf_nbuf_unmap_tso_segment(osdev, tso_seg, is_last_seg);
2991 }
2992 
2993 /**
2994  * qdf_nbuf_get_tso_num_seg() - function to calculate the number
2995  * of TCP segments within the TSO jumbo packet
2996  * @nbuf:   TSO jumbo network buffer to be segmented
2997  *
2998  * This function calculates the number of TCP segments that the
2999    network buffer can be divided into.
3000  *
3001  * Return: number of TCP segments
3002  */
3003 static inline uint32_t qdf_nbuf_get_tso_num_seg(qdf_nbuf_t nbuf)
3004 {
3005 	return __qdf_nbuf_get_tso_num_seg(nbuf);
3006 }
3007 
3008 /**
3009  * qdf_nbuf_inc_users() - function to increment the number of
3010  * users referencing this network buffer
3011  *
3012  * @nbuf:   network buffer
3013  *
3014  * This function increments the number of users referencing this
3015  * network buffer
3016  *
3017  * Return: the network buffer
3018  */
3019 static inline qdf_nbuf_t qdf_nbuf_inc_users(qdf_nbuf_t nbuf)
3020 {
3021 	return __qdf_nbuf_inc_users(nbuf);
3022 }
3023 
3024 /**
3025  * qdf_nbuf_data_attr_get() - Get data_attr field from cvg_nbuf_cb
3026  *
3027  * @nbuf: Network buffer (skb on linux)
3028  *
3029  * This function returns the values of data_attr field
3030  * in struct cvg_nbuf_cb{}, to which skb->cb is typecast.
3031  * This value is actually the value programmed in CE descriptor.
3032  *
3033  * Return: Value of data_attr
3034  */
3035 static inline uint32_t qdf_nbuf_data_attr_get(qdf_nbuf_t buf)
3036 {
3037 	return __qdf_nbuf_data_attr_get(buf);
3038 }
3039 
3040 /**
3041  * qdf_nbuf_data_attr_set() - Sets data_attr field in cvg_nbuf_cb
3042  *
3043  * @nbuf: Network buffer (skb on linux)
3044  * @data_attr: Value to be stored cvg_nbuf_cb->data_attr
3045  *
3046  * This function stores the value to be programmed in CE
3047  * descriptor as part skb->cb which is typecast to struct cvg_nbuf_cb{}
3048  *
3049  * Return: void
3050  */
3051 static inline
3052 void qdf_nbuf_data_attr_set(qdf_nbuf_t buf, uint32_t data_attr)
3053 {
3054 	__qdf_nbuf_data_attr_set(buf, data_attr);
3055 }
3056 
3057 /**
3058  * qdf_nbuf_tx_info_get() - Parse skb and get Tx metadata
3059  *
3060  * @nbuf: Network buffer (skb on linux)
3061  *
3062  * This function parses the payload to figure out relevant
3063  * Tx meta-data e.g. whether to enable tx_classify bit
3064  * in CE.
3065  *
3066  * Return:     void
3067  */
3068 #define qdf_nbuf_tx_info_get __qdf_nbuf_tx_info_get
3069 
3070 void qdf_nbuf_set_state(qdf_nbuf_t nbuf, uint8_t current_state);
3071 void qdf_nbuf_tx_desc_count_display(void);
3072 void qdf_nbuf_tx_desc_count_clear(void);
3073 
3074 static inline qdf_nbuf_t
3075 qdf_nbuf_realloc_headroom(qdf_nbuf_t buf, uint32_t headroom)
3076 {
3077 	return __qdf_nbuf_realloc_headroom(buf, headroom);
3078 }
3079 
3080 static inline qdf_nbuf_t
3081 qdf_nbuf_realloc_tailroom(qdf_nbuf_t buf, uint32_t tailroom)
3082 {
3083 	return __qdf_nbuf_realloc_tailroom(buf, tailroom);
3084 }
3085 
3086 static inline qdf_nbuf_t
3087 qdf_nbuf_expand(qdf_nbuf_t buf, uint32_t headroom, uint32_t tailroom)
3088 {
3089 	return __qdf_nbuf_expand(buf, headroom, tailroom);
3090 }
3091 
3092 static inline int
3093 qdf_nbuf_linearize(qdf_nbuf_t buf)
3094 {
3095 	return __qdf_nbuf_linearize(buf);
3096 }
3097 
3098 #ifdef NBUF_MEMORY_DEBUG
3099 #define qdf_nbuf_unshare(d) \
3100 	qdf_nbuf_unshare_debug(d, __func__, __LINE__)
3101 
3102 static inline qdf_nbuf_t
3103 qdf_nbuf_unshare_debug(qdf_nbuf_t buf, const char *func_name, uint32_t line_num)
3104 {
3105 	qdf_nbuf_t unshared_buf;
3106 
3107 	unshared_buf = __qdf_nbuf_unshare(buf);
3108 
3109 	if (qdf_likely(buf != unshared_buf)) {
3110 		qdf_net_buf_debug_delete_node(buf);
3111 
3112 		qdf_net_buf_debug_add_node(unshared_buf, 0,
3113 					   func_name, line_num);
3114 	}
3115 
3116 	return unshared_buf;
3117 }
3118 
3119 #else
3120 static inline qdf_nbuf_t
3121 qdf_nbuf_unshare(qdf_nbuf_t buf)
3122 {
3123 	return __qdf_nbuf_unshare(buf);
3124 }
3125 #endif
3126 
3127 static inline bool
3128 qdf_nbuf_is_cloned(qdf_nbuf_t buf)
3129 {
3130 	return __qdf_nbuf_is_cloned(buf);
3131 }
3132 
3133 static inline void
3134 qdf_nbuf_frag_info(qdf_nbuf_t buf, qdf_sglist_t *sg)
3135 {
3136 	__qdf_nbuf_frag_info(buf, sg);
3137 }
3138 
3139 static inline qdf_nbuf_tx_cksum_t
3140 qdf_nbuf_tx_cksum_info(qdf_nbuf_t buf, uint8_t **hdr_off, uint8_t **where)
3141 {
3142 	return __qdf_nbuf_tx_cksum_info(buf, hdr_off, where);
3143 }
3144 
3145 static inline void qdf_nbuf_reset_ctxt(__qdf_nbuf_t nbuf)
3146 {
3147 	__qdf_nbuf_reset_ctxt(nbuf);
3148 }
3149 
3150 static inline void qdf_nbuf_init(qdf_nbuf_t buf)
3151 {
3152 	__qdf_nbuf_init(buf);
3153 }
3154 
3155 static inline void *qdf_nbuf_network_header(qdf_nbuf_t buf)
3156 {
3157 	return __qdf_nbuf_network_header(buf);
3158 }
3159 
3160 static inline void *qdf_nbuf_transport_header(qdf_nbuf_t buf)
3161 {
3162 	return __qdf_nbuf_transport_header(buf);
3163 }
3164 
3165 static inline qdf_size_t qdf_nbuf_tcp_tso_size(qdf_nbuf_t buf)
3166 {
3167 	return __qdf_nbuf_tcp_tso_size(buf);
3168 }
3169 
3170 static inline void *qdf_nbuf_get_cb(qdf_nbuf_t nbuf)
3171 {
3172 	return __qdf_nbuf_get_cb(nbuf);
3173 }
3174 
3175 static inline uint32_t qdf_nbuf_get_nr_frags(qdf_nbuf_t nbuf)
3176 {
3177 	return __qdf_nbuf_get_nr_frags(nbuf);
3178 }
3179 
3180 static inline qdf_size_t qdf_nbuf_headlen(qdf_nbuf_t buf)
3181 {
3182 	return __qdf_nbuf_headlen(buf);
3183 }
3184 
3185 static inline QDF_STATUS qdf_nbuf_frag_map(qdf_device_t osdev,
3186 	qdf_nbuf_t buf, int offset,
3187 	qdf_dma_dir_t dir, int cur_frag)
3188 {
3189 	return __qdf_nbuf_frag_map(osdev, buf, offset, dir, cur_frag);
3190 }
3191 
3192 static inline bool qdf_nbuf_tso_tcp_v4(qdf_nbuf_t buf)
3193 {
3194 	return __qdf_nbuf_tso_tcp_v4(buf);
3195 }
3196 
3197 static inline bool qdf_nbuf_tso_tcp_v6(qdf_nbuf_t buf)
3198 {
3199 	return __qdf_nbuf_tso_tcp_v6(buf);
3200 }
3201 
3202 static inline uint32_t qdf_nbuf_tcp_seq(qdf_nbuf_t buf)
3203 {
3204 	return __qdf_nbuf_tcp_seq(buf);
3205 }
3206 
3207 static inline qdf_size_t qdf_nbuf_l2l3l4_hdr_len(qdf_nbuf_t buf)
3208 {
3209 	return __qdf_nbuf_l2l3l4_hdr_len(buf);
3210 }
3211 
3212 static inline bool qdf_nbuf_is_nonlinear(qdf_nbuf_t buf)
3213 {
3214 	return __qdf_nbuf_is_nonlinear(buf);
3215 }
3216 
3217 static inline uint32_t
3218 qdf_nbuf_get_frag_size(qdf_nbuf_t buf, uint32_t frag_num)
3219 {
3220 	return __qdf_nbuf_get_frag_size(buf, frag_num);
3221 }
3222 
3223 static inline uint32_t qdf_nbuf_get_priority(qdf_nbuf_t buf)
3224 {
3225 	return __qdf_nbuf_get_priority(buf);
3226 }
3227 
3228 static inline void qdf_nbuf_set_priority(qdf_nbuf_t buf, uint32_t p)
3229 {
3230 	__qdf_nbuf_set_priority(buf, p);
3231 }
3232 
3233 static inline void qdf_nbuf_record_rx_queue(qdf_nbuf_t buf, uint32_t queue_id)
3234 {
3235 	__qdf_nbuf_record_rx_queue(buf, queue_id);
3236 }
3237 
3238 static inline uint16_t
3239 qdf_nbuf_get_queue_mapping(qdf_nbuf_t buf)
3240 {
3241 	return __qdf_nbuf_get_queue_mapping(buf);
3242 }
3243 
3244 static inline uint8_t *
3245 qdf_nbuf_get_priv_ptr(qdf_nbuf_t buf)
3246 {
3247 	return __qdf_nbuf_get_priv_ptr(buf);
3248 }
3249 
3250 /**
3251  * qdf_nbuf_update_radiotap() - update radiotap at head of nbuf.
3252  * @rx_status: rx_status containing required info to update radiotap
3253  * @nbuf: Pointer to nbuf
3254  * @headroom_sz: Available headroom size
3255  *
3256  * Return: radiotap length.
3257  */
3258 unsigned int qdf_nbuf_update_radiotap(struct mon_rx_status *rx_status,
3259 				      qdf_nbuf_t nbuf, uint32_t headroom_sz);
3260 
3261 /**
3262  * qdf_nbuf_mark_wakeup_frame() - mark wakeup frame.
3263  * @buf: Pointer to nbuf
3264  *
3265  * Return: None
3266  */
3267 static inline void
3268 qdf_nbuf_mark_wakeup_frame(qdf_nbuf_t buf)
3269 {
3270 	 __qdf_nbuf_mark_wakeup_frame(buf);
3271 }
3272 
3273 /**
3274  * qdf_nbuf_reg_free_cb - Registers nbuf free callback
3275  * @cb_func_ptr: Callback pointer
3276  *
3277  * This function registers nbuf free callback
3278  *
3279  * Return: void
3280  */
3281 static inline void
3282 qdf_nbuf_reg_free_cb(qdf_nbuf_free_t cb_func_ptr)
3283 {
3284 	 __qdf_nbuf_reg_free_cb(cb_func_ptr);
3285 }
3286 
3287 /**
3288  * qdf_nbuf_set_timestamp() - set the timestamp for frame
3289  *
3290  * @buf: sk buff
3291  *
3292  * Return: void
3293  */
3294 static inline void
3295 qdf_nbuf_set_timestamp(struct sk_buff *skb)
3296 {
3297 	__qdf_nbuf_set_timestamp(skb);
3298 }
3299 
3300 /**
3301  * qdf_nbuf_get_timedelta_ms() - get time difference in ms
3302  *
3303  * @buf: sk buff
3304  *
3305  * Return: time difference ms
3306  */
3307 static inline uint64_t
3308 qdf_nbuf_get_timedelta_ms(struct sk_buff *skb)
3309 {
3310 	return __qdf_nbuf_get_timedelta_ms(skb);
3311 }
3312 
3313 /**
3314  * qdf_nbuf_get_timedelta_us() - get time difference in micro seconds
3315  *
3316  * @buf: sk buff
3317  *
3318  * Return: time difference in micro seconds
3319  */
3320 static inline uint64_t
3321 qdf_nbuf_get_timedelta_us(struct sk_buff *skb)
3322 {
3323 	return __qdf_nbuf_get_timedelta_us(skb);
3324 }
3325 
3326 /**
3327  * qdf_nbuf_count_get() - get global nbuf gauge
3328  *
3329  * Return: global nbuf gauge
3330  */
3331 static inline int qdf_nbuf_count_get(void)
3332 {
3333 	return __qdf_nbuf_count_get();
3334 }
3335 
3336 /**
3337  * qdf_nbuf_count_inc() - increment nbuf global count
3338  *
3339  * @buf: sk buff
3340  *
3341  * Return: void
3342  */
3343 static inline void qdf_nbuf_count_inc(qdf_nbuf_t buf)
3344 {
3345 	return __qdf_nbuf_count_inc(buf);
3346 }
3347 
3348 /**
3349  * qdf_nbuf_count_dec() - decrement nbuf global count
3350  *
3351  * @buf: sk buff
3352  *
3353  * Return: void
3354  */
3355 static inline void qdf_nbuf_count_dec(qdf_nbuf_t buf)
3356 {
3357 	return __qdf_nbuf_count_dec(buf);
3358 }
3359 
3360 /**
3361  * qdf_nbuf_mod_init() - Intialization routine for qdf_nbuf
3362  *
3363  * Return void
3364  */
3365 static inline void qdf_nbuf_mod_init(void)
3366 {
3367 	return __qdf_nbuf_mod_init();
3368 }
3369 
3370 /**
3371  * qdf_nbuf_mod_init() - Unintialization routine for qdf_nbuf
3372  *
3373  * Return void
3374  */
3375 static inline void qdf_nbuf_mod_exit(void)
3376 {
3377 	return __qdf_nbuf_mod_exit();
3378 }
3379 
3380 /**
3381  * qdf_nbuf_orphan() - orphan a nbuf
3382  * @buf: Pointer to network buffer
3383  *
3384  * If a buffer currently has an owner then we call the
3385  * owner's destructor function
3386  *
3387  * Return: void
3388  */
3389 static inline void qdf_nbuf_orphan(qdf_nbuf_t buf)
3390 {
3391 	return __qdf_nbuf_orphan(buf);
3392 }
3393 
3394 #ifdef CONFIG_WIN
3395 #include <i_qdf_nbuf_api_w.h>
3396 #else
3397 #include <i_qdf_nbuf_api_m.h>
3398 #endif
3399 #endif /* _QDF_NBUF_H */
3400