xref: /wlan-dirver/qca-wifi-host-cmn/qdf/inc/qdf_nbuf.h (revision 1397a33f48ea6455be40871470b286e535820eb8)
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 of the calling function
1406  * @line: line number of the callsite
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 qdf_nbuf_t qdf_nbuf_clone_debug(qdf_nbuf_t buf, const char *func,
1414 				uint32_t line);
1415 
1416 #define qdf_nbuf_copy(buf)     \
1417 	qdf_nbuf_copy_debug(buf, __func__, __LINE__)
1418 
1419 /**
1420  * qdf_nbuf_copy_debug() - returns a private copy of the buf
1421  * @buf: nbuf to copy from
1422  * @func: name of the calling function
1423  * @line: line number of the callsite
1424  *
1425  * This API returns a private copy of the buf, the buf returned is completely
1426  * modifiable by callers. It also creates a memory tracking node corresponding
1427  * to that new skbuff structure.
1428  *
1429  * Return: copied buffer
1430  */
1431 qdf_nbuf_t qdf_nbuf_copy_debug(qdf_nbuf_t buf, const char *func, uint32_t line);
1432 
1433 #else /* NBUF_MEMORY_DEBUG */
1434 
1435 static inline void qdf_net_buf_debug_init(void) {}
1436 static inline void qdf_net_buf_debug_exit(void) {}
1437 
1438 static inline void qdf_net_buf_debug_acquire_skb(qdf_nbuf_t net_buf,
1439 						 const char *func_name,
1440 						 uint32_t line_num)
1441 {
1442 }
1443 
1444 static inline void qdf_net_buf_debug_release_skb(qdf_nbuf_t net_buf)
1445 {
1446 }
1447 
1448 static inline void
1449 qdf_net_buf_debug_update_node(qdf_nbuf_t net_buf, const char *func_name,
1450 			      uint32_t line_num)
1451 {
1452 }
1453 
1454 /* Nbuf allocation rouines */
1455 
1456 #define qdf_nbuf_alloc(osdev, size, reserve, align, prio) \
1457 	qdf_nbuf_alloc_fl(osdev, size, reserve, align, prio, \
1458 			  __func__, __LINE__)
1459 static inline qdf_nbuf_t
1460 qdf_nbuf_alloc_fl(qdf_device_t osdev, qdf_size_t size, int reserve, int align,
1461 		  int prio, const char *func, uint32_t line)
1462 {
1463 	return __qdf_nbuf_alloc(osdev, size, reserve, align, prio, func, line);
1464 }
1465 
1466 static inline void qdf_nbuf_free(qdf_nbuf_t buf)
1467 {
1468 	if (qdf_likely(buf))
1469 		__qdf_nbuf_free(buf);
1470 }
1471 
1472 /**
1473  * qdf_nbuf_clone() - clone the nbuf (copy is readonly)
1474  * @buf: Pointer to network buffer
1475  *
1476  * This function clones the nbuf and returns new sk_buff
1477  * structure.
1478  *
1479  * Return: cloned skb
1480  */
1481 static inline qdf_nbuf_t qdf_nbuf_clone(qdf_nbuf_t buf)
1482 {
1483 	return __qdf_nbuf_clone(buf);
1484 }
1485 
1486 /**
1487  * qdf_nbuf_copy() - returns a private copy of the buf
1488  * @buf: Pointer to network buffer
1489  *
1490  * This API returns a private copy of the buf, the buf returned is completely
1491  *  modifiable by callers
1492  *
1493  * Return: skb or NULL
1494  */
1495 static inline qdf_nbuf_t qdf_nbuf_copy(qdf_nbuf_t buf)
1496 {
1497 	return __qdf_nbuf_copy(buf);
1498 }
1499 
1500 #endif /* NBUF_MEMORY_DEBUG */
1501 
1502 #ifdef WLAN_FEATURE_FASTPATH
1503 /**
1504  * qdf_nbuf_init_fast() - before put buf into pool,turn it to init state
1505  *
1506  * @buf: buf instance
1507  * Return: data pointer of this buf where new data has to be
1508  *         put, or NULL if there is not enough room in this buf.
1509  */
1510 void qdf_nbuf_init_fast(qdf_nbuf_t nbuf);
1511 #endif /* WLAN_FEATURE_FASTPATH */
1512 
1513 /**
1514  * @qdf_nbuf_list_free() - free a list of nbufs
1515  * @buf_list: A list of nbufs to be freed
1516  *
1517  * Return: none
1518  */
1519 
1520 static inline void qdf_nbuf_list_free(qdf_nbuf_t buf_list)
1521 {
1522 	while (buf_list) {
1523 		qdf_nbuf_t next = qdf_nbuf_next(buf_list);
1524 		qdf_nbuf_free(buf_list);
1525 		buf_list = next;
1526 	}
1527 }
1528 
1529 static inline void qdf_nbuf_tx_free(qdf_nbuf_t buf_list, int tx_err)
1530 {
1531 	qdf_nbuf_list_free(buf_list);
1532 }
1533 
1534 static inline void qdf_nbuf_ref(qdf_nbuf_t buf)
1535 {
1536 	__qdf_nbuf_ref(buf);
1537 }
1538 
1539 static inline int qdf_nbuf_shared(qdf_nbuf_t buf)
1540 {
1541 	return __qdf_nbuf_shared(buf);
1542 }
1543 
1544 static inline QDF_STATUS qdf_nbuf_cat(qdf_nbuf_t dst, qdf_nbuf_t src)
1545 {
1546 	return __qdf_nbuf_cat(dst, src);
1547 }
1548 
1549 /**
1550  * @qdf_nbuf_copy_bits() - return the length of the copy bits for skb
1551  * @skb: SKB pointer
1552  * @offset: offset
1553  * @len: Length
1554  * @to: To
1555  *
1556  * Return: int32_t
1557  */
1558 static inline int32_t
1559 qdf_nbuf_copy_bits(qdf_nbuf_t nbuf, uint32_t offset, uint32_t len, void *to)
1560 {
1561 	return __qdf_nbuf_copy_bits(nbuf, offset, len, to);
1562 }
1563 
1564 
1565 /* nbuf manipulation routines */
1566 
1567 /**
1568  * @qdf_nbuf_head() - return the address of an nbuf's buffer
1569  * @buf: netbuf
1570  *
1571  * Return: head address
1572  */
1573 static inline uint8_t *qdf_nbuf_head(qdf_nbuf_t buf)
1574 {
1575 	return __qdf_nbuf_head(buf);
1576 }
1577 
1578 /**
1579  * qdf_nbuf_data() - Return the address of the start of data within an nbuf
1580  * @buf: Network buffer
1581  *
1582  * Return: Data address
1583  */
1584 static inline uint8_t *qdf_nbuf_data(qdf_nbuf_t buf)
1585 {
1586 	return __qdf_nbuf_data(buf);
1587 }
1588 
1589 /**
1590  * qdf_nbuf_data_addr() - Return the address of skb->data
1591  * @buf: Network buffer
1592  *
1593  * Return: Data address
1594  */
1595 static inline uint8_t *qdf_nbuf_data_addr(qdf_nbuf_t buf)
1596 {
1597 	return __qdf_nbuf_data_addr(buf);
1598 }
1599 
1600 /**
1601  * qdf_nbuf_headroom() - amount of headroom int the current nbuf
1602  * @buf: Network buffer
1603  *
1604  * Return: Amount of head room
1605  */
1606 static inline uint32_t qdf_nbuf_headroom(qdf_nbuf_t buf)
1607 {
1608 	return __qdf_nbuf_headroom(buf);
1609 }
1610 
1611 /**
1612  * qdf_nbuf_tailroom() - amount of tail space available
1613  * @buf: Network buffer
1614  *
1615  * Return: amount of tail room
1616  */
1617 static inline uint32_t qdf_nbuf_tailroom(qdf_nbuf_t buf)
1618 {
1619 	return __qdf_nbuf_tailroom(buf);
1620 }
1621 
1622 /**
1623  * qdf_nbuf_push_head() - push data in the front
1624  * @buf: Network buf instance
1625  * @size: Size to be pushed
1626  *
1627  * Return: New data pointer of this buf after data has been pushed,
1628  *	or NULL if there is not enough room in this buf.
1629  */
1630 static inline uint8_t *qdf_nbuf_push_head(qdf_nbuf_t buf, qdf_size_t size)
1631 {
1632 	return __qdf_nbuf_push_head(buf, size);
1633 }
1634 
1635 /**
1636  * qdf_nbuf_put_tail() - puts data in the end
1637  * @buf: Network buf instance
1638  * @size: Size to be pushed
1639  *
1640  * Return: Data pointer of this buf where new data has to be
1641  *	put, or NULL if there is not enough room in this buf.
1642  */
1643 static inline uint8_t *qdf_nbuf_put_tail(qdf_nbuf_t buf, qdf_size_t size)
1644 {
1645 	return __qdf_nbuf_put_tail(buf, size);
1646 }
1647 
1648 /**
1649  * qdf_nbuf_pull_head() - pull data out from the front
1650  * @buf: Network buf instance
1651  * @size: Size to be popped
1652  *
1653  * Return: New data pointer of this buf after data has been popped,
1654  *	or NULL if there is not sufficient data to pull.
1655  */
1656 static inline uint8_t *qdf_nbuf_pull_head(qdf_nbuf_t buf, qdf_size_t size)
1657 {
1658 	return __qdf_nbuf_pull_head(buf, size);
1659 }
1660 
1661 /**
1662  * qdf_nbuf_trim_tail() - trim data out from the end
1663  * @buf: Network buf instance
1664  * @size: Size to be popped
1665  *
1666  * Return: none
1667  */
1668 static inline void qdf_nbuf_trim_tail(qdf_nbuf_t buf, qdf_size_t size)
1669 {
1670 	__qdf_nbuf_trim_tail(buf, size);
1671 }
1672 
1673 /**
1674  * qdf_nbuf_len() - get the length of the buf
1675  * @buf: Network buf instance
1676  *
1677  * Return: total length of this buf.
1678  */
1679 static inline qdf_size_t qdf_nbuf_len(qdf_nbuf_t buf)
1680 {
1681 	return __qdf_nbuf_len(buf);
1682 }
1683 
1684 /**
1685  * qdf_nbuf_set_pktlen() - set the length of the buf
1686  * @buf: Network buf instance
1687  * @size: Size to be set
1688  *
1689  * Return: none
1690  */
1691 static inline void qdf_nbuf_set_pktlen(qdf_nbuf_t buf, uint32_t len)
1692 {
1693 	__qdf_nbuf_set_pktlen(buf, len);
1694 }
1695 
1696 /**
1697  * qdf_nbuf_reserve() - trim data out from the end
1698  * @buf: Network buf instance
1699  * @size: Size to be popped
1700  *
1701  * Return: none
1702  */
1703 static inline void qdf_nbuf_reserve(qdf_nbuf_t buf, qdf_size_t size)
1704 {
1705 	__qdf_nbuf_reserve(buf, size);
1706 }
1707 
1708 /**
1709  * qdf_nbuf_reset() - reset the buffer data and pointer
1710  * @buf: Network buf instance
1711  * @reserve: reserve
1712  * @align: align
1713  *
1714  * Return: none
1715  */
1716 static inline void qdf_nbuf_reset(qdf_nbuf_t buf, int reserve, int align)
1717 {
1718 	__qdf_nbuf_reset(buf, reserve, align);
1719 }
1720 
1721 /**
1722  * qdf_nbuf_dev_scratch_is_supported() - dev_scratch support for network buffer
1723  *                                       in kernel
1724  *
1725  * Return: true if dev_scratch is supported
1726  *         false if dev_scratch is not supported
1727  */
1728 static inline bool qdf_nbuf_is_dev_scratch_supported(void)
1729 {
1730 	return __qdf_nbuf_is_dev_scratch_supported();
1731 }
1732 
1733 /**
1734  * qdf_nbuf_get_dev_scratch() - get dev_scratch of network buffer
1735  * @buf: Pointer to network buffer
1736  *
1737  * Return: dev_scratch if dev_scratch supported
1738  *         0 if dev_scratch not supported
1739  */
1740 static inline unsigned long qdf_nbuf_get_dev_scratch(qdf_nbuf_t buf)
1741 {
1742 	return __qdf_nbuf_get_dev_scratch(buf);
1743 }
1744 
1745 /**
1746  * qdf_nbuf_set_dev_scratch() - set dev_scratch of network buffer
1747  * @buf: Pointer to network buffer
1748  * @value: value to be set in dev_scratch of network buffer
1749  *
1750  * Return: void
1751  */
1752 static inline void qdf_nbuf_set_dev_scratch(qdf_nbuf_t buf, unsigned long value)
1753 {
1754 	__qdf_nbuf_set_dev_scratch(buf, value);
1755 }
1756 
1757 /**
1758  * qdf_nbuf_peek_header() - return the data pointer & length of the header
1759  * @buf: Network nbuf
1760  * @addr: Data pointer
1761  * @len: Length of the data
1762  *
1763  * Return: none
1764  */
1765 static inline void
1766 qdf_nbuf_peek_header(qdf_nbuf_t buf, uint8_t **addr, uint32_t *len)
1767 {
1768 	__qdf_nbuf_peek_header(buf, addr, len);
1769 }
1770 
1771 /* nbuf queue routines */
1772 
1773 /**
1774  * qdf_nbuf_queue_init() - initialize buf queue
1775  * @head: Network buf queue head
1776  *
1777  * Return: none
1778  */
1779 static inline void qdf_nbuf_queue_init(qdf_nbuf_queue_t *head)
1780 {
1781 	__qdf_nbuf_queue_init(head);
1782 }
1783 
1784 /**
1785  * qdf_nbuf_queue_add() - append a nbuf to the tail of the buf queue
1786  * @head: Network buf queue head
1787  * @buf: Network buf
1788  *
1789  * Return: none
1790  */
1791 static inline void qdf_nbuf_queue_add(qdf_nbuf_queue_t *head, qdf_nbuf_t buf)
1792 {
1793 	__qdf_nbuf_queue_add(head, buf);
1794 }
1795 
1796 /**
1797  * qdf_nbuf_queue_insert_head() - insert nbuf at the head of queue
1798  * @head: Network buf queue head
1799  * @buf: Network buf
1800  *
1801  * Return: none
1802  */
1803 static inline void
1804 qdf_nbuf_queue_insert_head(qdf_nbuf_queue_t *head, qdf_nbuf_t buf)
1805 {
1806 	__qdf_nbuf_queue_insert_head(head, buf);
1807 }
1808 
1809 /**
1810  * qdf_nbuf_queue_remove() - retrieve a buf from the head of the buf queue
1811  * @head: Network buf queue head
1812  *
1813  * Return: The head buf in the buf queue.
1814  */
1815 static inline qdf_nbuf_t qdf_nbuf_queue_remove(qdf_nbuf_queue_t *head)
1816 {
1817 	return __qdf_nbuf_queue_remove(head);
1818 }
1819 
1820 /**
1821  * qdf_nbuf_queue_len() - get the length of the queue
1822  * @head: Network buf queue head
1823  *
1824  * Return: length of the queue
1825  */
1826 static inline uint32_t qdf_nbuf_queue_len(qdf_nbuf_queue_t *head)
1827 {
1828 	return __qdf_nbuf_queue_len(head);
1829 }
1830 
1831 /**
1832  * qdf_nbuf_queue_next() - get the next guy/packet of the given buffer
1833  * @buf: Network buffer
1834  *
1835  * Return: next buffer/packet
1836  */
1837 static inline qdf_nbuf_t qdf_nbuf_queue_next(qdf_nbuf_t buf)
1838 {
1839 	return __qdf_nbuf_queue_next(buf);
1840 }
1841 
1842 /**
1843  * @qdf_nbuf_is_queue_empty() - check if the buf queue is empty
1844  * @nbq: Network buf queue handle
1845  *
1846  * Return: true  if queue is empty
1847  *	   false if queue is not emty
1848  */
1849 static inline bool qdf_nbuf_is_queue_empty(qdf_nbuf_queue_t *nbq)
1850 {
1851 	return __qdf_nbuf_is_queue_empty(nbq);
1852 }
1853 
1854 static inline qdf_nbuf_queue_t *
1855 qdf_nbuf_queue_append(qdf_nbuf_queue_t *dest, qdf_nbuf_queue_t *src)
1856 {
1857 	return __qdf_nbuf_queue_append(dest, src);
1858 }
1859 
1860 static inline void
1861 qdf_nbuf_queue_free(qdf_nbuf_queue_t *head)
1862 {
1863 	__qdf_nbuf_queue_free(head);
1864 }
1865 
1866 static inline qdf_nbuf_t
1867 qdf_nbuf_queue_first(qdf_nbuf_queue_t *head)
1868 {
1869 	return __qdf_nbuf_queue_first(head);
1870 }
1871 
1872 /**
1873  * qdf_nbuf_get_protocol() - return the protocol value of the skb
1874  * @skb: Pointer to network buffer
1875  *
1876  * Return: skb protocol
1877  */
1878 static inline uint16_t qdf_nbuf_get_protocol(struct sk_buff *skb)
1879 {
1880 	return __qdf_nbuf_get_protocol(skb);
1881 }
1882 
1883 /**
1884  * qdf_nbuf_get_ip_summed() - return the ip checksum value of the skb
1885  * @skb: Pointer to network buffer
1886  *
1887  * Return: skb ip_summed
1888  */
1889 static inline uint8_t qdf_nbuf_get_ip_summed(struct sk_buff *skb)
1890 {
1891 	return __qdf_nbuf_get_ip_summed(skb);
1892 }
1893 
1894 /**
1895  * qdf_nbuf_set_ip_summed() - sets the ip_summed value of the skb
1896  * @skb: Pointer to network buffer
1897  * @ip_summed: ip checksum
1898  *
1899  * Return: none
1900  */
1901 static inline void qdf_nbuf_set_ip_summed(struct sk_buff *skb,
1902 	uint8_t ip_summed)
1903 {
1904 	__qdf_nbuf_set_ip_summed(skb, ip_summed);
1905 }
1906 
1907 /**
1908  * qdf_nbuf_set_next() - add a packet to a linked list
1909  * @this_buf: Predecessor buffer
1910  * @next_buf: Successor buffer
1911  *
1912  * This function can be used to directly link nbufs, rather than using
1913  * a separate network buffer queue object.
1914  *
1915  * Return: none
1916  */
1917 static inline void qdf_nbuf_set_next(qdf_nbuf_t this_buf, qdf_nbuf_t next_buf)
1918 {
1919 	__qdf_nbuf_set_next(this_buf, next_buf);
1920 }
1921 
1922 /* nbuf extension routines */
1923 
1924 /**
1925  * qdf_nbuf_set_next_ext() - link extension of this packet contained in a new
1926  *			nbuf
1927  * @this_buf: predecessor buffer
1928  * @next_buf: successor buffer
1929  *
1930  * This function is used to link up many nbufs containing a single logical
1931  * packet - not a collection of packets. Do not use for linking the first
1932  * extension to the head
1933  *
1934  * Return: none
1935  */
1936 static inline void
1937 qdf_nbuf_set_next_ext(qdf_nbuf_t this_buf, qdf_nbuf_t next_buf)
1938 {
1939 	__qdf_nbuf_set_next_ext(this_buf, next_buf);
1940 }
1941 
1942 /**
1943  * qdf_nbuf_next_ext() - get the next packet extension in the linked list
1944  * @buf: Network buffer
1945  *
1946  * Return: Next network buffer in the linked list
1947  */
1948 static inline qdf_nbuf_t qdf_nbuf_next_ext(qdf_nbuf_t buf)
1949 {
1950 	return __qdf_nbuf_next_ext(buf);
1951 }
1952 
1953 /**
1954  * qdf_nbuf_append_ext_list() - link list of packet extensions to the head
1955  *				segment
1956  * @head_buf: Network buf holding head segment (single)
1957  * @ext_list: Network buf list holding linked extensions to the head
1958  * @ext_len: Total length of all buffers in the extension list
1959  *
1960  * This function is used to link up a list of packet extensions (seg1, 2,
1961  * ...) to the nbuf holding the head segment (seg0)
1962  *
1963  * Return: none
1964  */
1965 static inline void
1966 qdf_nbuf_append_ext_list(qdf_nbuf_t head_buf, qdf_nbuf_t ext_list,
1967 			qdf_size_t ext_len)
1968 {
1969 	__qdf_nbuf_append_ext_list(head_buf, ext_list, ext_len);
1970 }
1971 
1972 /**
1973  * qdf_nbuf_get_ext_list() - Get the link to extended nbuf list.
1974  * @head_buf: Network buf holding head segment (single)
1975  *
1976  * This ext_list is populated when we have Jumbo packet, for example in case of
1977  * monitor mode amsdu packet reception, and are stiched using frags_list.
1978  *
1979  * Return: Network buf list holding linked extensions from head buf.
1980  */
1981 static inline qdf_nbuf_t qdf_nbuf_get_ext_list(qdf_nbuf_t head_buf)
1982 {
1983 	return (qdf_nbuf_t)__qdf_nbuf_get_ext_list(head_buf);
1984 }
1985 
1986 /**
1987  * qdf_nbuf_get_tx_cksum() - gets the tx checksum offload demand
1988  * @buf: Network buffer
1989  *
1990  * Return: qdf_nbuf_tx_cksum_t checksum offload demand for the frame
1991  */
1992 static inline qdf_nbuf_tx_cksum_t qdf_nbuf_get_tx_cksum(qdf_nbuf_t buf)
1993 {
1994 	return __qdf_nbuf_get_tx_cksum(buf);
1995 }
1996 
1997 /**
1998  * qdf_nbuf_set_rx_cksum() - drivers that support hw checksumming use this to
1999  *			indicate checksum info to the stack.
2000  * @buf: Network buffer
2001  * @cksum: Checksum
2002  *
2003  * Return: none
2004  */
2005 static inline void
2006 qdf_nbuf_set_rx_cksum(qdf_nbuf_t buf, qdf_nbuf_rx_cksum_t *cksum)
2007 {
2008 	__qdf_nbuf_set_rx_cksum(buf, cksum);
2009 }
2010 
2011 /**
2012  * qdf_nbuf_get_tid() - this function extracts the TID value from nbuf
2013  * @buf: Network buffer
2014  *
2015  * Return: TID value
2016  */
2017 static inline uint8_t qdf_nbuf_get_tid(qdf_nbuf_t buf)
2018 {
2019 	return __qdf_nbuf_get_tid(buf);
2020 }
2021 
2022 /**
2023  * qdf_nbuf_set_tid() - this function sets the TID value in nbuf
2024  * @buf: Network buffer
2025  * @tid: TID value
2026  *
2027  * Return: none
2028  */
2029 static inline void qdf_nbuf_set_tid(qdf_nbuf_t buf, uint8_t tid)
2030 {
2031 	__qdf_nbuf_set_tid(buf, tid);
2032 }
2033 
2034 /**
2035  * qdf_nbuf_get_exemption_type() - this function extracts the exemption type
2036  *				from nbuf
2037  * @buf: Network buffer
2038  *
2039  * Return: Exemption type
2040  */
2041 static inline uint8_t qdf_nbuf_get_exemption_type(qdf_nbuf_t buf)
2042 {
2043 	return __qdf_nbuf_get_exemption_type(buf);
2044 }
2045 
2046 /**
2047  * qdf_nbuf_set_protocol() - this function peeks data into the buffer at given
2048  *			offset
2049  * @buf: Network buffer
2050  * @proto: Protocol
2051  *
2052  * Return: none
2053  */
2054 static inline void qdf_nbuf_set_protocol(qdf_nbuf_t buf, uint16_t proto)
2055 {
2056 	__qdf_nbuf_set_protocol(buf, proto);
2057 }
2058 
2059 /**
2060  * qdf_nbuf_trace_get_proto_type() - this function return packet proto type
2061  * @buf: Network buffer
2062  *
2063  * Return: Packet protocol type
2064  */
2065 static inline uint8_t qdf_nbuf_trace_get_proto_type(qdf_nbuf_t buf)
2066 {
2067 	return __qdf_nbuf_trace_get_proto_type(buf);
2068 }
2069 
2070 /**
2071  * qdf_nbuf_reg_trace_cb() - this function registers protocol trace callback
2072  * @cb_func_ptr: Callback pointer
2073  *
2074  * Return: none
2075  */
2076 static inline void qdf_nbuf_reg_trace_cb(qdf_nbuf_trace_update_t cb_func_ptr)
2077 {
2078 	__qdf_nbuf_reg_trace_cb(cb_func_ptr);
2079 }
2080 
2081 
2082 /**
2083  * qdf_nbuf_set_tx_parallel_dnload_frm() - set tx parallel download
2084  * @buf: Network buffer
2085  * @candi: Candidate of parallel download frame
2086  *
2087  * This function stores a flag specifying this TX frame is suitable for
2088  * downloading though a 2nd TX data pipe that is used for short frames for
2089  * protocols that can accept out-of-order delivery.
2090  *
2091  * Return: none
2092  */
2093 static inline void
2094 qdf_nbuf_set_tx_parallel_dnload_frm(qdf_nbuf_t buf, uint8_t candi)
2095 {
2096 	__qdf_nbuf_set_tx_htt2_frm(buf, candi);
2097 }
2098 
2099 /**
2100  * qdf_nbuf_get_tx_parallel_dnload_frm() - get tx parallel download
2101  * @buf: Network buffer
2102  *
2103  * This function return whether this TX frame is allow to download though a 2nd
2104  * TX data pipe or not.
2105  *
2106  * Return: none
2107  */
2108 static inline uint8_t qdf_nbuf_get_tx_parallel_dnload_frm(qdf_nbuf_t buf)
2109 {
2110 	return __qdf_nbuf_get_tx_htt2_frm(buf);
2111 }
2112 
2113 /**
2114  * qdf_nbuf_get_dhcp_subtype() - get the subtype
2115  *              of DHCP packet.
2116  * @buf: Pointer to DHCP packet buffer
2117  *
2118  * This func. returns the subtype of DHCP packet.
2119  *
2120  * Return: subtype of the DHCP packet.
2121  */
2122 static inline enum qdf_proto_subtype
2123 qdf_nbuf_get_dhcp_subtype(qdf_nbuf_t buf)
2124 {
2125 	return __qdf_nbuf_data_get_dhcp_subtype(qdf_nbuf_data(buf));
2126 }
2127 
2128 /**
2129  * qdf_nbuf_data_get_dhcp_subtype() - get the subtype
2130  *              of DHCP packet.
2131  * @buf: Pointer to DHCP packet data buffer
2132  *
2133  * This func. returns the subtype of DHCP packet.
2134  *
2135  * Return: subtype of the DHCP packet.
2136  */
2137 static inline enum qdf_proto_subtype
2138 qdf_nbuf_data_get_dhcp_subtype(uint8_t *data)
2139 {
2140 	return __qdf_nbuf_data_get_dhcp_subtype(data);
2141 }
2142 
2143 /**
2144  * qdf_nbuf_get_eapol_subtype() - get the subtype
2145  *            of EAPOL packet.
2146  * @buf: Pointer to EAPOL packet buffer
2147  *
2148  * This func. returns the subtype of EAPOL packet.
2149  *
2150  * Return: subtype of the EAPOL packet.
2151  */
2152 static inline enum qdf_proto_subtype
2153 qdf_nbuf_get_eapol_subtype(qdf_nbuf_t buf)
2154 {
2155 	return __qdf_nbuf_data_get_eapol_subtype(qdf_nbuf_data(buf));
2156 }
2157 
2158 /**
2159  * qdf_nbuf_data_get_eapol_subtype() - get the subtype
2160  *            of EAPOL packet.
2161  * @data: Pointer to EAPOL packet data buffer
2162  *
2163  * This func. returns the subtype of EAPOL packet.
2164  *
2165  * Return: subtype of the EAPOL packet.
2166  */
2167 static inline enum qdf_proto_subtype
2168 qdf_nbuf_data_get_eapol_subtype(uint8_t *data)
2169 {
2170 	return __qdf_nbuf_data_get_eapol_subtype(data);
2171 }
2172 
2173 /**
2174  * qdf_nbuf_get_arp_subtype() - get the subtype
2175  *            of ARP packet.
2176  * @buf: Pointer to ARP packet buffer
2177  *
2178  * This func. returns the subtype of ARP packet.
2179  *
2180  * Return: subtype of the ARP packet.
2181  */
2182 static inline enum qdf_proto_subtype
2183 qdf_nbuf_get_arp_subtype(qdf_nbuf_t buf)
2184 {
2185 	return __qdf_nbuf_data_get_arp_subtype(qdf_nbuf_data(buf));
2186 }
2187 
2188 /**
2189  * qdf_nbuf_data_get_arp_subtype() - get the subtype
2190  *            of ARP packet.
2191  * @data: Pointer to ARP packet data buffer
2192  *
2193  * This func. returns the subtype of ARP packet.
2194  *
2195  * Return: subtype of the ARP packet.
2196  */
2197 static inline enum qdf_proto_subtype
2198 qdf_nbuf_data_get_arp_subtype(uint8_t *data)
2199 {
2200 	return __qdf_nbuf_data_get_arp_subtype(data);
2201 }
2202 
2203 /**
2204  * qdf_nbuf_get_icmp_subtype() - get the subtype
2205  *            of IPV4 ICMP packet.
2206  * @buf: Pointer to IPV4 ICMP packet buffer
2207  *
2208  * This func. returns the subtype of ICMP packet.
2209  *
2210  * Return: subtype of the ICMP packet.
2211  */
2212 static inline enum qdf_proto_subtype
2213 qdf_nbuf_get_icmp_subtype(qdf_nbuf_t buf)
2214 {
2215 	return __qdf_nbuf_data_get_icmp_subtype(qdf_nbuf_data(buf));
2216 }
2217 
2218 /**
2219  * qdf_nbuf_data_get_icmp_subtype() - get the subtype
2220  *            of IPV4 ICMP packet.
2221  * @data: Pointer to IPV4 ICMP packet data buffer
2222  *
2223  * This func. returns the subtype of ICMP packet.
2224  *
2225  * Return: subtype of the ICMP packet.
2226  */
2227 static inline enum qdf_proto_subtype
2228 qdf_nbuf_data_get_icmp_subtype(uint8_t *data)
2229 {
2230 	return __qdf_nbuf_data_get_icmp_subtype(data);
2231 }
2232 
2233 /**
2234  * qdf_nbuf_get_icmpv6_subtype() - get the subtype
2235  *            of IPV6 ICMPV6 packet.
2236  * @buf: Pointer to IPV6 ICMPV6 packet buffer
2237  *
2238  * This func. returns the subtype of ICMPV6 packet.
2239  *
2240  * Return: subtype of the ICMPV6 packet.
2241  */
2242 static inline enum qdf_proto_subtype
2243 qdf_nbuf_get_icmpv6_subtype(qdf_nbuf_t buf)
2244 {
2245 	return __qdf_nbuf_data_get_icmpv6_subtype(qdf_nbuf_data(buf));
2246 }
2247 
2248 /**
2249  * qdf_nbuf_data_get_icmpv6_subtype() - get the subtype
2250  *            of IPV6 ICMPV6 packet.
2251  * @data: Pointer to IPV6 ICMPV6 packet data buffer
2252  *
2253  * This func. returns the subtype of ICMPV6 packet.
2254  *
2255  * Return: subtype of the ICMPV6 packet.
2256  */
2257 static inline enum qdf_proto_subtype
2258 qdf_nbuf_data_get_icmpv6_subtype(uint8_t *data)
2259 {
2260 	return __qdf_nbuf_data_get_icmpv6_subtype(data);
2261 }
2262 
2263 /**
2264  * qdf_nbuf_data_get_ipv4_proto() - get the proto type
2265  *            of IPV4 packet.
2266  * @data: Pointer to IPV4 packet data buffer
2267  *
2268  * This func. returns the proto type of IPV4 packet.
2269  *
2270  * Return: proto type of IPV4 packet.
2271  */
2272 static inline uint8_t
2273 qdf_nbuf_data_get_ipv4_proto(uint8_t *data)
2274 {
2275 	return __qdf_nbuf_data_get_ipv4_proto(data);
2276 }
2277 
2278 /**
2279  * qdf_nbuf_data_get_ipv6_proto() - get the proto type
2280  *            of IPV6 packet.
2281  * @data: Pointer to IPV6 packet data buffer
2282  *
2283  * This func. returns the proto type of IPV6 packet.
2284  *
2285  * Return: proto type of IPV6 packet.
2286  */
2287 static inline uint8_t
2288 qdf_nbuf_data_get_ipv6_proto(uint8_t *data)
2289 {
2290 	return __qdf_nbuf_data_get_ipv6_proto(data);
2291 }
2292 
2293 /**
2294  * qdf_nbuf_is_ipv4_pkt() - check if packet is a ipv4 packet or not
2295  * @buf:  buffer
2296  *
2297  * This api is for Tx packets.
2298  *
2299  * Return: true if packet is ipv4 packet
2300  */
2301 static inline
2302 bool qdf_nbuf_is_ipv4_pkt(qdf_nbuf_t buf)
2303 {
2304 	return __qdf_nbuf_data_is_ipv4_pkt(qdf_nbuf_data(buf));
2305 }
2306 
2307 /**
2308  * qdf_nbuf_data_is_ipv4_pkt() - check if packet is a ipv4 packet or not
2309  * @data:  data
2310  *
2311  * This api is for Tx packets.
2312  *
2313  * Return: true if packet is ipv4 packet
2314  */
2315 static inline
2316 bool qdf_nbuf_data_is_ipv4_pkt(uint8_t *data)
2317 {
2318 	return __qdf_nbuf_data_is_ipv4_pkt(data);
2319 }
2320 
2321 /**
2322  * qdf_nbuf_is_ipv4_dhcp_pkt() - check if packet is a dhcp packet or not
2323  * @buf:  buffer
2324  *
2325  * This api is for ipv4 packet.
2326  *
2327  * Return: true if packet is DHCP packet
2328  */
2329 static inline
2330 bool qdf_nbuf_is_ipv4_dhcp_pkt(qdf_nbuf_t buf)
2331 {
2332 	return __qdf_nbuf_data_is_ipv4_dhcp_pkt(qdf_nbuf_data(buf));
2333 }
2334 
2335 /**
2336  * qdf_nbuf_data_is_ipv4_dhcp_pkt() - check if it is DHCP packet.
2337  * @data: Pointer to DHCP packet data buffer
2338  *
2339  * This func. checks whether it is a DHCP packet or not.
2340  *
2341  * Return: true if it is a DHCP packet
2342  *         false if not
2343  */
2344 static inline
2345 bool qdf_nbuf_data_is_ipv4_dhcp_pkt(uint8_t *data)
2346 {
2347 	return __qdf_nbuf_data_is_ipv4_dhcp_pkt(data);
2348 }
2349 
2350 /**
2351  * qdf_nbuf_data_is_ipv6_dhcp_pkt() - check if it is DHCP packet.
2352  * @data: Pointer to DHCP packet data buffer
2353  *
2354  * This func. checks whether it is a DHCP packet or not.
2355  *
2356  * Return: true if it is a DHCP packet
2357  *         false if not
2358  */
2359 static inline
2360 bool qdf_nbuf_is_ipv6_dhcp_pkt(qdf_nbuf_t buf)
2361 {
2362 	return __qdf_nbuf_data_is_ipv6_dhcp_pkt(qdf_nbuf_data(buf));
2363 }
2364 
2365 /**
2366  * qdf_nbuf_is_ipv4_eapol_pkt() - check if packet is a eapol packet or not
2367  * @buf:  buffer
2368  *
2369  * This api is for ipv4 packet.
2370  *
2371  * Return: true if packet is EAPOL packet
2372  */
2373 static inline
2374 bool qdf_nbuf_is_ipv4_eapol_pkt(qdf_nbuf_t buf)
2375 {
2376 	return __qdf_nbuf_data_is_ipv4_eapol_pkt(qdf_nbuf_data(buf));
2377 }
2378 
2379 /**
2380  * qdf_nbuf_data_is_ipv4_eapol_pkt() - check if it is EAPOL packet.
2381  * @data: Pointer to EAPOL packet data buffer
2382  *
2383  * This func. checks whether it is a EAPOL packet or not.
2384  *
2385  * Return: true if it is a EAPOL packet
2386  *         false if not
2387  */
2388 static inline
2389 bool qdf_nbuf_data_is_ipv4_eapol_pkt(uint8_t *data)
2390 {
2391 	return __qdf_nbuf_data_is_ipv4_eapol_pkt(data);
2392 }
2393 
2394 /**
2395  * qdf_nbuf_is_ipv4_wapi_pkt() - check if packet is a wapi packet or not
2396  * @buf:  buffer
2397  *
2398  * This api is for ipv4 packet.
2399  *
2400  * Return: true if packet is WAPI packet
2401  */
2402 static inline
2403 bool qdf_nbuf_is_ipv4_wapi_pkt(qdf_nbuf_t buf)
2404 {
2405 	return __qdf_nbuf_is_ipv4_wapi_pkt(buf);
2406 }
2407 
2408 /**
2409  * qdf_nbuf_is_ipv4_tdls_pkt() - check if packet is a tdls packet or not
2410  * @buf:  buffer
2411  *
2412  * This api is for ipv4 packet.
2413  *
2414  * Return: true if packet is TDLS packet
2415  */
2416 static inline
2417 bool qdf_nbuf_is_ipv4_tdls_pkt(qdf_nbuf_t buf)
2418 {
2419 	return __qdf_nbuf_is_ipv4_tdls_pkt(buf);
2420 }
2421 
2422 /**
2423  * qdf_nbuf_is_ipv4_arp_pkt() - check if packet is a arp packet or not
2424  * @buf:  buffer
2425  *
2426  * This api is for ipv4 packet.
2427  *
2428  * Return: true if packet is ARP packet
2429  */
2430 static inline
2431 bool qdf_nbuf_is_ipv4_arp_pkt(qdf_nbuf_t buf)
2432 {
2433 	return __qdf_nbuf_data_is_ipv4_arp_pkt(qdf_nbuf_data(buf));
2434 }
2435 
2436 /**
2437  * qdf_nbuf_data_is_ipv4_arp_pkt() - check if it is ARP packet.
2438  * @data: Pointer to ARP packet data buffer
2439  *
2440  * This func. checks whether it is a ARP packet or not.
2441  *
2442  * Return: TRUE if it is a ARP packet
2443  *         FALSE if not
2444  */
2445 static inline
2446 bool qdf_nbuf_data_is_ipv4_arp_pkt(uint8_t *data)
2447 {
2448 	return __qdf_nbuf_data_is_ipv4_arp_pkt(data);
2449 }
2450 
2451 /**
2452  * qdf_nbuf_data_is_arp_req() - check if ARP packet is request.
2453  * @buf:  buffer
2454  *
2455  * This func. checks whether it is a ARP request or not.
2456  *
2457  * Return: true if it is a ARP request or FALSE if not
2458  */
2459 static inline
2460 bool qdf_nbuf_data_is_arp_req(qdf_nbuf_t buf)
2461 {
2462 	return __qdf_nbuf_data_is_arp_req(qdf_nbuf_data(buf));
2463 }
2464 
2465 /**
2466  * qdf_nbuf_data_is_arp_rsp() - check if ARP packet is response.
2467  * @buf:  buffer
2468  *
2469  * This func. checks whether it is a ARP response or not.
2470  *
2471  * Return: true if it is a ARP response or FALSE if not
2472  */
2473 static inline
2474 bool qdf_nbuf_data_is_arp_rsp(qdf_nbuf_t buf)
2475 {
2476 	return __qdf_nbuf_data_is_arp_rsp(qdf_nbuf_data(buf));
2477 }
2478 
2479 /**
2480  * qdf_nbuf_data_get_arp_src_ip() - get ARP packet source IP gateway.
2481  * @buf:  buffer
2482  *
2483  * Return: ARP packet source IP value.
2484  */
2485 static inline
2486 uint32_t qdf_nbuf_get_arp_src_ip(qdf_nbuf_t buf)
2487 {
2488 	return __qdf_nbuf_get_arp_src_ip(qdf_nbuf_data(buf));
2489 }
2490 
2491 /**
2492  * qdf_nbuf_data_get_arp_tgt_ip() - get ARP packet target IP gateway.
2493  * @buf:  buffer
2494  *
2495  * Return: ARP packet target IP value.
2496  */
2497 static inline
2498 uint32_t qdf_nbuf_get_arp_tgt_ip(qdf_nbuf_t buf)
2499 {
2500 	return __qdf_nbuf_get_arp_tgt_ip(qdf_nbuf_data(buf));
2501 }
2502 
2503 /**
2504  * qdf_nbuf_get_dns_domain_name() - get dns domain name of required length
2505  * @buf: buffer
2506  * @len: length to copy
2507  *
2508  * Return: dns domain name
2509  */
2510 static inline
2511 uint8_t *qdf_nbuf_get_dns_domain_name(qdf_nbuf_t buf, uint32_t len)
2512 {
2513 	return __qdf_nbuf_get_dns_domain_name(qdf_nbuf_data(buf), len);
2514 }
2515 
2516 /**
2517  * qdf_nbuf_data_is_dns_query() - check if skb data is a dns query
2518  * @buf: buffer
2519  *
2520  * Return: true if packet is dns query packet.
2521  *	   false otherwise.
2522  */
2523 static inline
2524 bool qdf_nbuf_data_is_dns_query(qdf_nbuf_t buf)
2525 {
2526 	return __qdf_nbuf_data_is_dns_query(qdf_nbuf_data(buf));
2527 }
2528 
2529 /**
2530  * qdf_nbuf_data_is_dns_response() - check if skb data is a dns response
2531  * @buf:  buffer
2532  *
2533  * Return: true if packet is dns response packet.
2534  *	   false otherwise.
2535  */
2536 static inline
2537 bool qdf_nbuf_data_is_dns_response(qdf_nbuf_t buf)
2538 {
2539 	return __qdf_nbuf_data_is_dns_response(qdf_nbuf_data(buf));
2540 }
2541 
2542 /**
2543  * qdf_nbuf_data_is_tcp_syn() - check if skb data is a tcp syn
2544  * @buf:  buffer
2545  *
2546  * Return: true if packet is tcp syn packet.
2547  *	   false otherwise.
2548  */
2549 static inline
2550 bool qdf_nbuf_data_is_tcp_syn(qdf_nbuf_t buf)
2551 {
2552 	return __qdf_nbuf_data_is_tcp_syn(qdf_nbuf_data(buf));
2553 }
2554 
2555 /**
2556  * qdf_nbuf_data_is_tcp_syn_ack() - check if skb data is a tcp syn ack
2557  * @buf:  buffer
2558  *
2559  * Return: true if packet is tcp syn ack packet.
2560  *	   false otherwise.
2561  */
2562 static inline
2563 bool qdf_nbuf_data_is_tcp_syn_ack(qdf_nbuf_t buf)
2564 {
2565 	return __qdf_nbuf_data_is_tcp_syn_ack(qdf_nbuf_data(buf));
2566 }
2567 
2568 /**
2569  * qdf_nbuf_data_is_tcp_ack() - check if skb data is a tcp ack
2570  * @buf:  buffer
2571  *
2572  * Return: true if packet is tcp ack packet.
2573  *	   false otherwise.
2574  */
2575 static inline
2576 bool qdf_nbuf_data_is_tcp_ack(qdf_nbuf_t buf)
2577 {
2578 	return __qdf_nbuf_data_is_tcp_ack(qdf_nbuf_data(buf));
2579 }
2580 
2581 /**
2582  * qdf_nbuf_data_get_tcp_src_port() - get tcp src port
2583  * @buf:  buffer
2584  *
2585  * Return: tcp source port value.
2586  */
2587 static inline
2588 uint16_t qdf_nbuf_data_get_tcp_src_port(qdf_nbuf_t buf)
2589 {
2590 	return __qdf_nbuf_data_get_tcp_src_port(qdf_nbuf_data(buf));
2591 }
2592 
2593 /**
2594  * qdf_nbuf_data_get_tcp_dst_port() - get tcp dst port
2595  * @buf:  buffer
2596  *
2597  * Return: tcp destination port value.
2598  */
2599 static inline
2600 uint16_t qdf_nbuf_data_get_tcp_dst_port(qdf_nbuf_t buf)
2601 {
2602 	return __qdf_nbuf_data_get_tcp_dst_port(qdf_nbuf_data(buf));
2603 }
2604 
2605 /**
2606  * qdf_nbuf_data_is_icmpv4_req() - check if ICMPv4 packet is request.
2607  * @buf:  buffer
2608  *
2609  * This func. checks whether it is a ICMPv4 request or not.
2610  *
2611  * Return: true if it is a ICMPv4 request or fALSE if not
2612  */
2613 static inline
2614 bool qdf_nbuf_data_is_icmpv4_req(qdf_nbuf_t buf)
2615 {
2616 	return __qdf_nbuf_data_is_icmpv4_req(qdf_nbuf_data(buf));
2617 }
2618 
2619 /**
2620  * qdf_nbuf_data_is_icmpv4_rsp() - check if ICMPv4 packet is res
2621  * @buf:  buffer
2622  *
2623  * Return: true if packet is icmpv4 response
2624  *	   false otherwise.
2625  */
2626 static inline
2627 bool qdf_nbuf_data_is_icmpv4_rsp(qdf_nbuf_t buf)
2628 {
2629 	return __qdf_nbuf_data_is_icmpv4_rsp(qdf_nbuf_data(buf));
2630 }
2631 
2632 /**
2633  * qdf_nbuf_get_icmpv4_src_ip() - get icmpv4 src IP
2634  * @buf:  buffer
2635  *
2636  * Return: icmpv4 packet source IP value.
2637  */
2638 static inline
2639 uint32_t qdf_nbuf_get_icmpv4_src_ip(qdf_nbuf_t buf)
2640 {
2641 	return __qdf_nbuf_get_icmpv4_src_ip(qdf_nbuf_data(buf));
2642 }
2643 
2644 /**
2645  * qdf_nbuf_data_get_icmpv4_tgt_ip() - get icmpv4 target IP
2646  * @buf:  buffer
2647  *
2648  * Return: icmpv4 packet target IP value.
2649  */
2650 static inline
2651 uint32_t qdf_nbuf_get_icmpv4_tgt_ip(qdf_nbuf_t buf)
2652 {
2653 	return __qdf_nbuf_get_icmpv4_tgt_ip(qdf_nbuf_data(buf));
2654 }
2655 
2656 /**
2657  * qdf_nbuf_is_ipv6_pkt() - check if it is IPV6 packet.
2658  * @buf: Pointer to IPV6 packet buffer
2659  *
2660  * This func. checks whether it is a IPV6 packet or not.
2661  *
2662  * Return: TRUE if it is a IPV6 packet
2663  *         FALSE if not
2664  */
2665 static inline
2666 bool qdf_nbuf_is_ipv6_pkt(qdf_nbuf_t buf)
2667 {
2668 	return __qdf_nbuf_data_is_ipv6_pkt(qdf_nbuf_data(buf));
2669 }
2670 
2671 /**
2672  * qdf_nbuf_data_is_ipv6_pkt() - check if it is IPV6 packet.
2673  * @data: Pointer to IPV6 packet data buffer
2674  *
2675  * This func. checks whether it is a IPV6 packet or not.
2676  *
2677  * Return: TRUE if it is a IPV6 packet
2678  *         FALSE if not
2679  */
2680 static inline
2681 bool qdf_nbuf_data_is_ipv6_pkt(uint8_t *data)
2682 {
2683 	return __qdf_nbuf_data_is_ipv6_pkt(data);
2684 }
2685 
2686 /**
2687  * qdf_nbuf_data_is_ipv4_mcast_pkt() - check if it is IPV4 multicast packet.
2688  * @data: Pointer to IPV4 packet data buffer
2689  *
2690  * This func. checks whether it is a IPV4 multicast packet or not.
2691  *
2692  * Return: TRUE if it is a IPV4 multicast packet
2693  *         FALSE if not
2694  */
2695 static inline
2696 bool qdf_nbuf_data_is_ipv4_mcast_pkt(uint8_t *data)
2697 {
2698 	return __qdf_nbuf_data_is_ipv4_mcast_pkt(data);
2699 }
2700 
2701 /**
2702  * qdf_nbuf_data_is_ipv6_mcast_pkt() - check if it is IPV6 multicast packet.
2703  * @data: Pointer to IPV6 packet data buffer
2704  *
2705  * This func. checks whether it is a IPV6 multicast packet or not.
2706  *
2707  * Return: TRUE if it is a IPV6 multicast packet
2708  *         FALSE if not
2709  */
2710 static inline
2711 bool qdf_nbuf_data_is_ipv6_mcast_pkt(uint8_t *data)
2712 {
2713 	return __qdf_nbuf_data_is_ipv6_mcast_pkt(data);
2714 }
2715 
2716 /**
2717  * qdf_nbuf_is_icmp_pkt() - check if it is IPV4 ICMP packet.
2718  * @buf: Pointer to IPV4 ICMP packet buffer
2719  *
2720  * This func. checks whether it is a ICMP packet or not.
2721  *
2722  * Return: TRUE if it is a ICMP packet
2723  *         FALSE if not
2724  */
2725 static inline
2726 bool qdf_nbuf_is_icmp_pkt(qdf_nbuf_t buf)
2727 {
2728 	return __qdf_nbuf_data_is_icmp_pkt(qdf_nbuf_data(buf));
2729 }
2730 
2731 /**
2732  * qdf_nbuf_data_is_icmp_pkt() - check if it is IPV4 ICMP packet.
2733  * @data: Pointer to IPV4 ICMP packet data buffer
2734  *
2735  * This func. checks whether it is a ICMP packet or not.
2736  *
2737  * Return: TRUE if it is a ICMP packet
2738  *         FALSE if not
2739  */
2740 static inline
2741 bool qdf_nbuf_data_is_icmp_pkt(uint8_t *data)
2742 {
2743 	return __qdf_nbuf_data_is_icmp_pkt(data);
2744 }
2745 
2746 /**
2747  * qdf_nbuf_is_icmpv6_pkt() - check if it is IPV6 ICMPV6 packet.
2748  * @buf: Pointer to IPV6 ICMPV6 packet buffer
2749  *
2750  * This func. checks whether it is a ICMPV6 packet or not.
2751  *
2752  * Return: TRUE if it is a ICMPV6 packet
2753  *         FALSE if not
2754  */
2755 static inline
2756 bool qdf_nbuf_is_icmpv6_pkt(qdf_nbuf_t buf)
2757 {
2758 	return __qdf_nbuf_data_is_icmpv6_pkt(qdf_nbuf_data(buf));
2759 }
2760 
2761 /**
2762  * qdf_nbuf_data_is_icmpv6_pkt() - check if it is IPV6 ICMPV6 packet.
2763  * @data: Pointer to IPV6 ICMPV6 packet data buffer
2764  *
2765  * This func. checks whether it is a ICMPV6 packet or not.
2766  *
2767  * Return: TRUE if it is a ICMPV6 packet
2768  *         FALSE if not
2769  */
2770 static inline
2771 bool qdf_nbuf_data_is_icmpv6_pkt(uint8_t *data)
2772 {
2773 	return __qdf_nbuf_data_is_icmpv6_pkt(data);
2774 }
2775 
2776 /**
2777  * qdf_nbuf_is_ipv4_udp_pkt() - check if it is IPV4 UDP packet.
2778  * @buf: Pointer to IPV4 UDP packet buffer
2779  *
2780  * This func. checks whether it is a IPV4 UDP packet or not.
2781  *
2782  * Return: TRUE if it is a IPV4 UDP packet
2783  *         FALSE if not
2784  */
2785 static inline
2786 bool qdf_nbuf_is_ipv4_udp_pkt(qdf_nbuf_t buf)
2787 {
2788 	return __qdf_nbuf_data_is_ipv4_udp_pkt(qdf_nbuf_data(buf));
2789 }
2790 
2791 /**
2792  * qdf_nbuf_data_is_ipv4_udp_pkt() - check if it is IPV4 UDP packet.
2793  * @data: Pointer to IPV4 UDP packet data buffer
2794  *
2795  * This func. checks whether it is a IPV4 UDP packet or not.
2796  *
2797  * Return: TRUE if it is a IPV4 UDP packet
2798  *         FALSE if not
2799  */
2800 static inline
2801 bool qdf_nbuf_data_is_ipv4_udp_pkt(uint8_t *data)
2802 {
2803 	return __qdf_nbuf_data_is_ipv4_udp_pkt(data);
2804 }
2805 
2806 /**
2807  * qdf_nbuf_is_ipv4_tcp_pkt() - check if it is IPV4 TCP packet.
2808  * @buf: Pointer to IPV4 TCP packet buffer
2809  *
2810  * This func. checks whether it is a IPV4 TCP packet or not.
2811  *
2812  * Return: TRUE if it is a IPV4 TCP packet
2813  *         FALSE if not
2814  */
2815 static inline
2816 bool qdf_nbuf_is_ipv4_tcp_pkt(qdf_nbuf_t buf)
2817 {
2818 	return __qdf_nbuf_data_is_ipv4_tcp_pkt(qdf_nbuf_data(buf));
2819 }
2820 
2821 /**
2822  * qdf_nbuf_data_is_ipv4_tcp_pkt() - check if it is IPV4 TCP packet.
2823  * @data: Pointer to IPV4 TCP packet data buffer
2824  *
2825  * This func. checks whether it is a IPV4 TCP packet or not.
2826  *
2827  * Return: TRUE if it is a IPV4 TCP packet
2828  *         FALSE if not
2829  */
2830 static inline
2831 bool qdf_nbuf_data_is_ipv4_tcp_pkt(uint8_t *data)
2832 {
2833 	return __qdf_nbuf_data_is_ipv4_tcp_pkt(data);
2834 }
2835 
2836 /**
2837  * qdf_nbuf_is_ipv6_udp_pkt() - check if it is IPV6 UDP packet.
2838  * @buf: Pointer to IPV6 UDP packet buffer
2839  *
2840  * This func. checks whether it is a IPV6 UDP packet or not.
2841  *
2842  * Return: TRUE if it is a IPV6 UDP packet
2843  *         FALSE if not
2844  */
2845 static inline
2846 bool qdf_nbuf_is_ipv6_udp_pkt(qdf_nbuf_t buf)
2847 {
2848 	return __qdf_nbuf_data_is_ipv6_udp_pkt(qdf_nbuf_data(buf));
2849 }
2850 
2851 /**
2852  * qdf_nbuf_data_is_ipv6_udp_pkt() - check if it is IPV6 UDP packet.
2853  * @data: Pointer to IPV6 UDP packet data buffer
2854  *
2855  * This func. checks whether it is a IPV6 UDP packet or not.
2856  *
2857  * Return: TRUE if it is a IPV6 UDP packet
2858  *         FALSE if not
2859  */
2860 static inline
2861 bool qdf_nbuf_data_is_ipv6_udp_pkt(uint8_t *data)
2862 {
2863 	return __qdf_nbuf_data_is_ipv6_udp_pkt(data);
2864 }
2865 
2866 /**
2867  * qdf_nbuf_is_ipv6_tcp_pkt() - check if it is IPV6 TCP packet.
2868  * @buf: Pointer to IPV6 TCP packet buffer
2869  *
2870  * This func. checks whether it is a IPV6 TCP packet or not.
2871  *
2872  * Return: TRUE if it is a IPV6 TCP packet
2873  *         FALSE if not
2874  */
2875 static inline
2876 bool qdf_nbuf_is_ipv6_tcp_pkt(qdf_nbuf_t buf)
2877 {
2878 	return __qdf_nbuf_data_is_ipv6_tcp_pkt(qdf_nbuf_data(buf));
2879 }
2880 
2881 /**
2882  * qdf_nbuf_data_is_ipv6_tcp_pkt() - check if it is IPV6 TCP packet.
2883  * @data: Pointer to IPV6 TCP packet data buffer
2884  *
2885  * This func. checks whether it is a IPV6 TCP packet or not.
2886  *
2887  * Return: TRUE if it is a IPV6 TCP packet
2888  *         FALSE if not
2889  */
2890 static inline
2891 bool qdf_nbuf_data_is_ipv6_tcp_pkt(uint8_t *data)
2892 {
2893 	return __qdf_nbuf_data_is_ipv6_tcp_pkt(data);
2894 }
2895 
2896 /**
2897  * qdf_nbuf_is_bcast_pkt() - check if it is broadcast packet.
2898  * @buf: Network buffer
2899  *
2900  * This func. checks whether packet is broadcast or not.
2901  *
2902  * Return: TRUE if it is broadcast packet
2903  *         FALSE if not
2904  */
2905 static inline
2906 bool qdf_nbuf_is_bcast_pkt(qdf_nbuf_t buf)
2907 {
2908 	return __qdf_nbuf_is_bcast_pkt(buf);
2909 }
2910 
2911 /**
2912  * qdf_nbuf_reset_num_frags() - decrement the number of fragments
2913  * @buf: Network buffer
2914  *
2915  * Return: Number of fragments
2916  */
2917 static inline void qdf_nbuf_reset_num_frags(qdf_nbuf_t buf)
2918 {
2919 	__qdf_nbuf_reset_num_frags(buf);
2920 }
2921 
2922 /**
2923  * qdf_dmaaddr_to_32s - return high and low parts of dma_addr
2924  *
2925  * Returns the high and low 32-bits of the DMA addr in the provided ptrs
2926  *
2927  * Return: N/A
2928  */
2929 static inline void qdf_dmaaddr_to_32s(qdf_dma_addr_t dmaaddr,
2930 				      uint32_t *lo, uint32_t *hi)
2931 {
2932 	return __qdf_dmaaddr_to_32s(dmaaddr, lo, hi);
2933 }
2934 
2935 /**
2936  * qdf_nbuf_get_tso_info() - function to divide a jumbo TSO
2937  * network buffer into segments
2938  * @nbuf:   network buffer to be segmented
2939  * @tso_info:  This is the output. The information about the
2940  *      TSO segments will be populated within this.
2941  *
2942  * This function fragments a TCP jumbo packet into smaller
2943  * segments to be transmitted by the driver. It chains the TSO
2944  * segments created into a list.
2945  *
2946  * Return: number of TSO segments
2947  */
2948 static inline uint32_t qdf_nbuf_get_tso_info(qdf_device_t osdev,
2949 		 qdf_nbuf_t nbuf, struct qdf_tso_info_t *tso_info)
2950 {
2951 	return __qdf_nbuf_get_tso_info(osdev, nbuf, tso_info);
2952 }
2953 
2954 /**
2955  * qdf_nbuf_unmap_tso_segment() - function to dma unmap TSO segment element
2956  *
2957  * @osdev: qdf device handle
2958  * @tso_seg: TSO segment element to be unmapped
2959  * @is_last_seg: whether this is last tso seg or not
2960  *
2961  * Return: none
2962  */
2963 static inline void qdf_nbuf_unmap_tso_segment(qdf_device_t osdev,
2964 			  struct qdf_tso_seg_elem_t *tso_seg,
2965 			  bool is_last_seg)
2966 {
2967 	return __qdf_nbuf_unmap_tso_segment(osdev, tso_seg, is_last_seg);
2968 }
2969 
2970 /**
2971  * qdf_nbuf_get_tso_num_seg() - function to calculate the number
2972  * of TCP segments within the TSO jumbo packet
2973  * @nbuf:   TSO jumbo network buffer to be segmented
2974  *
2975  * This function calculates the number of TCP segments that the
2976    network buffer can be divided into.
2977  *
2978  * Return: number of TCP segments
2979  */
2980 static inline uint32_t qdf_nbuf_get_tso_num_seg(qdf_nbuf_t nbuf)
2981 {
2982 	return __qdf_nbuf_get_tso_num_seg(nbuf);
2983 }
2984 
2985 /**
2986  * qdf_nbuf_inc_users() - function to increment the number of
2987  * users referencing this network buffer
2988  *
2989  * @nbuf:   network buffer
2990  *
2991  * This function increments the number of users referencing this
2992  * network buffer
2993  *
2994  * Return: the network buffer
2995  */
2996 static inline qdf_nbuf_t qdf_nbuf_inc_users(qdf_nbuf_t nbuf)
2997 {
2998 	return __qdf_nbuf_inc_users(nbuf);
2999 }
3000 
3001 /**
3002  * qdf_nbuf_data_attr_get() - Get data_attr field from cvg_nbuf_cb
3003  *
3004  * @nbuf: Network buffer (skb on linux)
3005  *
3006  * This function returns the values of data_attr field
3007  * in struct cvg_nbuf_cb{}, to which skb->cb is typecast.
3008  * This value is actually the value programmed in CE descriptor.
3009  *
3010  * Return: Value of data_attr
3011  */
3012 static inline uint32_t qdf_nbuf_data_attr_get(qdf_nbuf_t buf)
3013 {
3014 	return __qdf_nbuf_data_attr_get(buf);
3015 }
3016 
3017 /**
3018  * qdf_nbuf_data_attr_set() - Sets data_attr field in cvg_nbuf_cb
3019  *
3020  * @nbuf: Network buffer (skb on linux)
3021  * @data_attr: Value to be stored cvg_nbuf_cb->data_attr
3022  *
3023  * This function stores the value to be programmed in CE
3024  * descriptor as part skb->cb which is typecast to struct cvg_nbuf_cb{}
3025  *
3026  * Return: void
3027  */
3028 static inline
3029 void qdf_nbuf_data_attr_set(qdf_nbuf_t buf, uint32_t data_attr)
3030 {
3031 	__qdf_nbuf_data_attr_set(buf, data_attr);
3032 }
3033 
3034 /**
3035  * qdf_nbuf_tx_info_get() - Parse skb and get Tx metadata
3036  *
3037  * @nbuf: Network buffer (skb on linux)
3038  *
3039  * This function parses the payload to figure out relevant
3040  * Tx meta-data e.g. whether to enable tx_classify bit
3041  * in CE.
3042  *
3043  * Return:     void
3044  */
3045 #define qdf_nbuf_tx_info_get __qdf_nbuf_tx_info_get
3046 
3047 void qdf_nbuf_set_state(qdf_nbuf_t nbuf, uint8_t current_state);
3048 void qdf_nbuf_tx_desc_count_display(void);
3049 void qdf_nbuf_tx_desc_count_clear(void);
3050 
3051 static inline qdf_nbuf_t
3052 qdf_nbuf_realloc_headroom(qdf_nbuf_t buf, uint32_t headroom)
3053 {
3054 	return __qdf_nbuf_realloc_headroom(buf, headroom);
3055 }
3056 
3057 static inline qdf_nbuf_t
3058 qdf_nbuf_realloc_tailroom(qdf_nbuf_t buf, uint32_t tailroom)
3059 {
3060 	return __qdf_nbuf_realloc_tailroom(buf, tailroom);
3061 }
3062 
3063 static inline qdf_nbuf_t
3064 qdf_nbuf_expand(qdf_nbuf_t buf, uint32_t headroom, uint32_t tailroom)
3065 {
3066 	return __qdf_nbuf_expand(buf, headroom, tailroom);
3067 }
3068 
3069 static inline int
3070 qdf_nbuf_linearize(qdf_nbuf_t buf)
3071 {
3072 	return __qdf_nbuf_linearize(buf);
3073 }
3074 
3075 #ifdef NBUF_MEMORY_DEBUG
3076 #define qdf_nbuf_unshare(d) \
3077 	qdf_nbuf_unshare_debug(d, __func__, __LINE__)
3078 
3079 static inline qdf_nbuf_t
3080 qdf_nbuf_unshare_debug(qdf_nbuf_t buf, const char *func_name, uint32_t line_num)
3081 {
3082 	qdf_nbuf_t unshared_buf;
3083 
3084 	unshared_buf = __qdf_nbuf_unshare(buf);
3085 
3086 	if (qdf_likely(buf != unshared_buf)) {
3087 		qdf_net_buf_debug_delete_node(buf);
3088 
3089 		qdf_net_buf_debug_add_node(unshared_buf, 0,
3090 					   func_name, line_num);
3091 	}
3092 
3093 	return unshared_buf;
3094 }
3095 
3096 #else
3097 static inline qdf_nbuf_t
3098 qdf_nbuf_unshare(qdf_nbuf_t buf)
3099 {
3100 	return __qdf_nbuf_unshare(buf);
3101 }
3102 #endif
3103 
3104 static inline bool
3105 qdf_nbuf_is_cloned(qdf_nbuf_t buf)
3106 {
3107 	return __qdf_nbuf_is_cloned(buf);
3108 }
3109 
3110 static inline void
3111 qdf_nbuf_frag_info(qdf_nbuf_t buf, qdf_sglist_t *sg)
3112 {
3113 	__qdf_nbuf_frag_info(buf, sg);
3114 }
3115 
3116 static inline qdf_nbuf_tx_cksum_t
3117 qdf_nbuf_tx_cksum_info(qdf_nbuf_t buf, uint8_t **hdr_off, uint8_t **where)
3118 {
3119 	return __qdf_nbuf_tx_cksum_info(buf, hdr_off, where);
3120 }
3121 
3122 static inline void qdf_nbuf_reset_ctxt(__qdf_nbuf_t nbuf)
3123 {
3124 	__qdf_nbuf_reset_ctxt(nbuf);
3125 }
3126 
3127 static inline void qdf_nbuf_init(qdf_nbuf_t buf)
3128 {
3129 	__qdf_nbuf_init(buf);
3130 }
3131 
3132 static inline void *qdf_nbuf_network_header(qdf_nbuf_t buf)
3133 {
3134 	return __qdf_nbuf_network_header(buf);
3135 }
3136 
3137 static inline void *qdf_nbuf_transport_header(qdf_nbuf_t buf)
3138 {
3139 	return __qdf_nbuf_transport_header(buf);
3140 }
3141 
3142 static inline qdf_size_t qdf_nbuf_tcp_tso_size(qdf_nbuf_t buf)
3143 {
3144 	return __qdf_nbuf_tcp_tso_size(buf);
3145 }
3146 
3147 static inline void *qdf_nbuf_get_cb(qdf_nbuf_t nbuf)
3148 {
3149 	return __qdf_nbuf_get_cb(nbuf);
3150 }
3151 
3152 static inline uint32_t qdf_nbuf_get_nr_frags(qdf_nbuf_t nbuf)
3153 {
3154 	return __qdf_nbuf_get_nr_frags(nbuf);
3155 }
3156 
3157 static inline qdf_size_t qdf_nbuf_headlen(qdf_nbuf_t buf)
3158 {
3159 	return __qdf_nbuf_headlen(buf);
3160 }
3161 
3162 static inline QDF_STATUS qdf_nbuf_frag_map(qdf_device_t osdev,
3163 	qdf_nbuf_t buf, int offset,
3164 	qdf_dma_dir_t dir, int cur_frag)
3165 {
3166 	return __qdf_nbuf_frag_map(osdev, buf, offset, dir, cur_frag);
3167 }
3168 
3169 static inline bool qdf_nbuf_tso_tcp_v4(qdf_nbuf_t buf)
3170 {
3171 	return __qdf_nbuf_tso_tcp_v4(buf);
3172 }
3173 
3174 static inline bool qdf_nbuf_tso_tcp_v6(qdf_nbuf_t buf)
3175 {
3176 	return __qdf_nbuf_tso_tcp_v6(buf);
3177 }
3178 
3179 static inline uint32_t qdf_nbuf_tcp_seq(qdf_nbuf_t buf)
3180 {
3181 	return __qdf_nbuf_tcp_seq(buf);
3182 }
3183 
3184 static inline qdf_size_t qdf_nbuf_l2l3l4_hdr_len(qdf_nbuf_t buf)
3185 {
3186 	return __qdf_nbuf_l2l3l4_hdr_len(buf);
3187 }
3188 
3189 static inline bool qdf_nbuf_is_nonlinear(qdf_nbuf_t buf)
3190 {
3191 	return __qdf_nbuf_is_nonlinear(buf);
3192 }
3193 
3194 static inline uint32_t
3195 qdf_nbuf_get_frag_size(qdf_nbuf_t buf, uint32_t frag_num)
3196 {
3197 	return __qdf_nbuf_get_frag_size(buf, frag_num);
3198 }
3199 
3200 static inline uint32_t qdf_nbuf_get_priority(qdf_nbuf_t buf)
3201 {
3202 	return __qdf_nbuf_get_priority(buf);
3203 }
3204 
3205 static inline void qdf_nbuf_set_priority(qdf_nbuf_t buf, uint32_t p)
3206 {
3207 	__qdf_nbuf_set_priority(buf, p);
3208 }
3209 
3210 static inline void qdf_nbuf_record_rx_queue(qdf_nbuf_t buf, uint32_t queue_id)
3211 {
3212 	__qdf_nbuf_record_rx_queue(buf, queue_id);
3213 }
3214 
3215 static inline uint16_t
3216 qdf_nbuf_get_queue_mapping(qdf_nbuf_t buf)
3217 {
3218 	return __qdf_nbuf_get_queue_mapping(buf);
3219 }
3220 
3221 static inline uint8_t *
3222 qdf_nbuf_get_priv_ptr(qdf_nbuf_t buf)
3223 {
3224 	return __qdf_nbuf_get_priv_ptr(buf);
3225 }
3226 
3227 /**
3228  * qdf_nbuf_update_radiotap() - update radiotap at head of nbuf.
3229  * @rx_status: rx_status containing required info to update radiotap
3230  * @nbuf: Pointer to nbuf
3231  * @headroom_sz: Available headroom size
3232  *
3233  * Return: radiotap length.
3234  */
3235 unsigned int qdf_nbuf_update_radiotap(struct mon_rx_status *rx_status,
3236 				      qdf_nbuf_t nbuf, uint32_t headroom_sz);
3237 
3238 /**
3239  * qdf_nbuf_mark_wakeup_frame() - mark wakeup frame.
3240  * @buf: Pointer to nbuf
3241  *
3242  * Return: None
3243  */
3244 static inline void
3245 qdf_nbuf_mark_wakeup_frame(qdf_nbuf_t buf)
3246 {
3247 	 __qdf_nbuf_mark_wakeup_frame(buf);
3248 }
3249 
3250 /**
3251  * qdf_nbuf_reg_free_cb - Registers nbuf free callback
3252  * @cb_func_ptr: Callback pointer
3253  *
3254  * This function registers nbuf free callback
3255  *
3256  * Return: void
3257  */
3258 static inline void
3259 qdf_nbuf_reg_free_cb(qdf_nbuf_free_t cb_func_ptr)
3260 {
3261 	 __qdf_nbuf_reg_free_cb(cb_func_ptr);
3262 }
3263 
3264 /**
3265  * qdf_nbuf_set_timestamp() - set the timestamp for frame
3266  *
3267  * @buf: sk buff
3268  *
3269  * Return: void
3270  */
3271 static inline void
3272 qdf_nbuf_set_timestamp(struct sk_buff *skb)
3273 {
3274 	__qdf_nbuf_set_timestamp(skb);
3275 }
3276 
3277 /**
3278  * qdf_nbuf_get_timedelta_ms() - get time difference in ms
3279  *
3280  * @buf: sk buff
3281  *
3282  * Return: time difference ms
3283  */
3284 static inline uint64_t
3285 qdf_nbuf_get_timedelta_ms(struct sk_buff *skb)
3286 {
3287 	return __qdf_nbuf_get_timedelta_ms(skb);
3288 }
3289 
3290 /**
3291  * qdf_nbuf_get_timedelta_us() - get time difference in micro seconds
3292  *
3293  * @buf: sk buff
3294  *
3295  * Return: time difference in micro seconds
3296  */
3297 static inline uint64_t
3298 qdf_nbuf_get_timedelta_us(struct sk_buff *skb)
3299 {
3300 	return __qdf_nbuf_get_timedelta_us(skb);
3301 }
3302 
3303 /**
3304  * qdf_nbuf_count_get() - get global nbuf gauge
3305  *
3306  * Return: global nbuf gauge
3307  */
3308 static inline int qdf_nbuf_count_get(void)
3309 {
3310 	return __qdf_nbuf_count_get();
3311 }
3312 
3313 /**
3314  * qdf_nbuf_count_inc() - increment nbuf global count
3315  *
3316  * @buf: sk buff
3317  *
3318  * Return: void
3319  */
3320 static inline void qdf_nbuf_count_inc(qdf_nbuf_t buf)
3321 {
3322 	return __qdf_nbuf_count_inc(buf);
3323 }
3324 
3325 /**
3326  * qdf_nbuf_count_dec() - decrement nbuf global count
3327  *
3328  * @buf: sk buff
3329  *
3330  * Return: void
3331  */
3332 static inline void qdf_nbuf_count_dec(qdf_nbuf_t buf)
3333 {
3334 	return __qdf_nbuf_count_dec(buf);
3335 }
3336 
3337 /**
3338  * qdf_nbuf_mod_init() - Intialization routine for qdf_nbuf
3339  *
3340  * Return void
3341  */
3342 static inline void qdf_nbuf_mod_init(void)
3343 {
3344 	return __qdf_nbuf_mod_init();
3345 }
3346 
3347 /**
3348  * qdf_nbuf_mod_init() - Unintialization routine for qdf_nbuf
3349  *
3350  * Return void
3351  */
3352 static inline void qdf_nbuf_mod_exit(void)
3353 {
3354 	return __qdf_nbuf_mod_exit();
3355 }
3356 
3357 /**
3358  * qdf_nbuf_orphan() - orphan a nbuf
3359  * @buf: Pointer to network buffer
3360  *
3361  * If a buffer currently has an owner then we call the
3362  * owner's destructor function
3363  *
3364  * Return: void
3365  */
3366 static inline void qdf_nbuf_orphan(qdf_nbuf_t buf)
3367 {
3368 	return __qdf_nbuf_orphan(buf);
3369 }
3370 
3371 #ifdef CONFIG_WIN
3372 #include <i_qdf_nbuf_api_w.h>
3373 #else
3374 #include <i_qdf_nbuf_api_m.h>
3375 #endif
3376 #endif /* _QDF_NBUF_H */
3377