Sfoglia il codice sorgente

qcacmn: Reorganize the tx & rx member of skb->cb structure

The current tx & rx member of skb->cb structure has lot of common members
duplicated across win & mcl sub structures.
The common members are now moved out
and new members are added as per the requirement.
Also the members are organized to avoid additional padding
and fit within the 48 byte boundary for both 32bit & 64 bit platforms.

Change-Id: I27abc95d51127513cf2e7e9657a4ee84324b2cc9
CRs-Fixed: 2120295
Vivek 7 anni fa
parent
commit
de90e59667

+ 14 - 14
dp/wifi3.0/dp_rx.c

@@ -265,10 +265,10 @@ dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list,
 		 * as this is a non-amsdu pkt and RAW mode simulation expects
 		 * these bit s to be 0 for non-amsdu pkt.
 		 */
-		if (qdf_nbuf_is_chfrag_start(nbuf) &&
-			 qdf_nbuf_is_chfrag_end(nbuf)) {
-			qdf_nbuf_set_chfrag_start(nbuf, 0);
-			qdf_nbuf_set_chfrag_end(nbuf, 0);
+		if (qdf_nbuf_is_rx_chfrag_start(nbuf) &&
+			 qdf_nbuf_is_rx_chfrag_end(nbuf)) {
+			qdf_nbuf_set_rx_chfrag_start(nbuf, 0);
+			qdf_nbuf_set_rx_chfrag_end(nbuf, 0);
 		}
 
 		nbuf = next;
@@ -471,10 +471,10 @@ void dp_rx_fill_mesh_stats(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
 	}
 
 	rx_info->rs_flags = MESH_RXHDR_VER1;
-	if (qdf_nbuf_is_chfrag_start(nbuf))
+	if (qdf_nbuf_is_rx_chfrag_start(nbuf))
 		rx_info->rs_flags |= MESH_RX_FIRST_MSDU;
 
-	if (qdf_nbuf_is_chfrag_end(nbuf))
+	if (qdf_nbuf_is_rx_chfrag_end(nbuf))
 		rx_info->rs_flags |= MESH_RX_LAST_MSDU;
 
 	if (hal_rx_attn_msdu_get_is_decrypted(rx_tlv_hdr)) {
@@ -496,7 +496,7 @@ void dp_rx_fill_mesh_stats(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
 	rx_info->rs_ratephy1 = rate_mcs | (nss << 0x8) | (pkt_type << 16) |
 				(bw << 24);
 
-	qdf_nbuf_set_fctx_type(nbuf, (void *)rx_info, CB_FTYPE_MESH_RX_INFO);
+	qdf_nbuf_set_rx_fctx_type(nbuf, (void *)rx_info, CB_FTYPE_MESH_RX_INFO);
 
 	QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_DEBUG,
 		FL("Mesh rx stats: flags %x, rssi %x, chn %x, rate %x, kix %x"),
@@ -821,10 +821,10 @@ void dp_rx_sg_create(qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr,
 			uint16_t *frag_list_len, qdf_nbuf_t *head_frag_nbuf,
 			qdf_nbuf_t *frag_list_head, qdf_nbuf_t *frag_list_tail)
 {
-	if (qdf_unlikely(qdf_nbuf_is_chfrag_cont(nbuf))) {
+	if (qdf_unlikely(qdf_nbuf_is_rx_chfrag_cont(nbuf))) {
 		if (!(*is_first_frag)) {
 			*is_first_frag = 1;
-			qdf_nbuf_set_chfrag_start(nbuf, 1);
+			qdf_nbuf_set_rx_chfrag_start(nbuf, 1);
 			*mpdu_len = hal_rx_msdu_start_msdu_len_get(rx_tlv_hdr);
 
 			dp_rx_adjust_nbuf_len(nbuf, mpdu_len);
@@ -840,7 +840,7 @@ void dp_rx_sg_create(qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr,
 		}
 	} else {
 		if (qdf_unlikely(*is_first_frag)) {
-			qdf_nbuf_set_chfrag_start(nbuf, 0);
+			qdf_nbuf_set_rx_chfrag_start(nbuf, 0);
 			dp_rx_adjust_nbuf_len(nbuf, mpdu_len);
 			qdf_nbuf_pull_head(nbuf,
 					RX_PKT_TLVS_LEN);
@@ -1033,13 +1033,13 @@ dp_rx_process(struct dp_intr *int_ctx, void *hal_ring, uint32_t quota)
 		 * nbuf->cb
 		 */
 		if (msdu_desc_info.msdu_flags & HAL_MSDU_F_FIRST_MSDU_IN_MPDU)
-			qdf_nbuf_set_chfrag_start(rx_desc->nbuf, 1);
+			qdf_nbuf_set_rx_chfrag_start(rx_desc->nbuf, 1);
 
 		if (msdu_desc_info.msdu_flags & HAL_MSDU_F_MSDU_CONTINUATION)
-			qdf_nbuf_set_chfrag_cont(rx_desc->nbuf, 1);
+			qdf_nbuf_set_rx_chfrag_cont(rx_desc->nbuf, 1);
 
 		if (msdu_desc_info.msdu_flags & HAL_MSDU_F_LAST_MSDU_IN_MPDU)
-			qdf_nbuf_set_chfrag_end(rx_desc->nbuf, 1);
+			qdf_nbuf_set_rx_chfrag_end(rx_desc->nbuf, 1);
 
 		DP_STATS_INC_PKT(peer, rx.rcvd_reo[ring_id], 1,
 				qdf_nbuf_len(rx_desc->nbuf));
@@ -1068,7 +1068,7 @@ fail:
 		 * across multiple buffers, let us not decrement quota
 		 * till we reap all buffers of that MSDU.
 		 */
-		if (qdf_likely(!qdf_nbuf_is_chfrag_cont(rx_desc->nbuf)))
+		if (qdf_likely(!qdf_nbuf_is_rx_chfrag_cont(rx_desc->nbuf)))
 			quota -= 1;
 
 

+ 1 - 1
dp/wifi3.0/dp_rx.h

@@ -357,7 +357,7 @@ dp_rx_wds_srcport_learn(struct dp_soc *soc,
 	uint8_t wds_src_mac[IEEE80211_ADDR_LEN];
 
 	/* Do wds source port learning only if it is a 4-address mpdu */
-	if (!(qdf_nbuf_is_chfrag_start(nbuf) &&
+	if (!(qdf_nbuf_is_rx_chfrag_start(nbuf) &&
 		hal_rx_get_mpdu_mac_ad4_valid(rx_tlv_hdr)))
 		return;
 

+ 4 - 4
dp/wifi3.0/dp_rx_err.c

@@ -279,7 +279,7 @@ dp_rx_chain_msdus(struct dp_soc *soc, qdf_nbuf_t nbuf,
 	struct dp_pdev *dp_pdev = soc->pdev_list[mac_id];
 
 	if (hal_rx_msdu_end_first_msdu_get(rx_desc->rx_buf_start)) {
-		qdf_nbuf_set_chfrag_start(rx_desc->nbuf, 1);
+		qdf_nbuf_set_rx_chfrag_start(rx_desc->nbuf, 1);
 		dp_pdev->invalid_peer_head_msdu = NULL;
 		dp_pdev->invalid_peer_tail_msdu = NULL;
 
@@ -289,7 +289,7 @@ dp_rx_chain_msdus(struct dp_soc *soc, qdf_nbuf_t nbuf,
 	}
 
 	if (hal_rx_msdu_end_last_msdu_get(rx_desc->rx_buf_start)) {
-		qdf_nbuf_set_chfrag_end(rx_desc->nbuf, 1);
+		qdf_nbuf_set_rx_chfrag_end(rx_desc->nbuf, 1);
 		mpdu_done = true;
 	}
 
@@ -644,8 +644,8 @@ dp_rx_err_deliver(struct dp_soc *soc, struct dp_rx_desc *rx_desc,
 	 */
 	qdf_nbuf_pull_head(nbuf, (l2_hdr_offset + RX_PKT_TLVS_LEN));
 
-	qdf_nbuf_set_chfrag_start(nbuf, 1);
-	qdf_nbuf_set_chfrag_end(nbuf, 1);
+	qdf_nbuf_set_rx_chfrag_start(nbuf, 1);
+	qdf_nbuf_set_rx_chfrag_end(nbuf, 1);
 	if (dp_rx_filter_mesh_packets(vdev, nbuf,
 				rx_desc->rx_buf_start)
 			== QDF_STATUS_SUCCESS) {

+ 58 - 0
qdf/inc/i_qdf_nbuf_api_m.h

@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2014-2017 The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: i_qdf_nbuf_api_m.h
+ *
+ * Platform specific qdf_nbuf_public network buffer API
+ * This file defines the network buffer abstraction.
+ * Included by qdf_nbuf.h and should not be included
+ * directly from other files.
+ */
+
+#ifndef _QDF_NBUF_M_H
+#define _QDF_NBUF_M_H
+
+static inline int qdf_nbuf_ipa_owned_get(qdf_nbuf_t buf)
+{
+	return __qdf_nbuf_ipa_owned_get(buf);
+}
+
+static inline void qdf_nbuf_ipa_owned_set(qdf_nbuf_t buf)
+{
+	__qdf_nbuf_ipa_owned_set(buf);
+}
+
+static inline void qdf_nbuf_ipa_owned_clear(qdf_nbuf_t buf)
+{
+	__qdf_nbuf_ipa_owned_clear(buf);
+}
+
+static inline int qdf_nbuf_ipa_priv_get(qdf_nbuf_t buf)
+{
+	return __qdf_nbuf_ipa_priv_get(buf);
+}
+
+static inline void qdf_nbuf_ipa_priv_set(qdf_nbuf_t buf, uint32_t priv)
+{
+
+	QDF_BUG(!(priv & QDF_NBUF_IPA_CHECK_MASK));
+	__qdf_nbuf_ipa_priv_set(buf, priv);
+}
+
+#endif /* _QDF_NBUF_M_H */

+ 67 - 0
qdf/inc/i_qdf_nbuf_api_w.h

@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2014-2017 The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: i_qdf_nbuf_api_w.h
+ *
+ * Platform specific qdf_nbuf_public network buffer API
+ * This file defines the network buffer abstraction.
+ * Included by qdf_nbuf.h and should not be included
+ * directly from other files.
+ */
+
+#ifndef _QDF_NBUF_W_H
+#define _QDF_NBUF_W_H
+
+static inline void *qdf_nbuf_get_tx_fctx(qdf_nbuf_t buf)
+{
+	return  __qdf_nbuf_get_tx_fctx(buf);
+}
+
+static inline void *qdf_nbuf_get_rx_fctx(qdf_nbuf_t buf)
+{
+	return  __qdf_nbuf_get_rx_fctx(buf);
+}
+
+
+static inline void
+qdf_nbuf_set_tx_fctx_type(qdf_nbuf_t buf, void *ctx, uint8_t type)
+{
+	__qdf_nbuf_set_tx_fctx_type(buf, ctx, type);
+}
+
+static inline void
+qdf_nbuf_set_rx_fctx_type(qdf_nbuf_t buf, void *ctx, uint8_t type)
+{
+	__qdf_nbuf_set_rx_fctx_type(buf, ctx, type);
+}
+
+
+static inline void *
+qdf_nbuf_get_ext_cb(qdf_nbuf_t buf)
+{
+	return  __qdf_nbuf_get_ext_cb(buf);
+}
+
+static inline void
+qdf_nbuf_set_ext_cb(qdf_nbuf_t buf, void *ref)
+{
+	__qdf_nbuf_set_ext_cb(buf, ref);
+}
+
+#endif /* _QDF_NBUF_W_H */

+ 103 - 95
qdf/inc/qdf_nbuf.h

@@ -36,8 +36,8 @@
 #include <qdf_util.h>
 #include <qdf_types.h>
 #include <qdf_lock.h>
-#include <i_qdf_nbuf.h>
 #include <i_qdf_trace.h>
+#include <i_qdf_nbuf.h>
 #include <qdf_net_types.h>
 
 #define IPA_NBUF_OWNER_ID			0xaa55aa55
@@ -541,33 +541,6 @@ static inline int qdf_nbuf_get_frag_is_wordstream(qdf_nbuf_t buf, int frag_num)
 	return __qdf_nbuf_get_frag_is_wordstream(buf, frag_num);
 }
 
-static inline int qdf_nbuf_ipa_owned_get(qdf_nbuf_t buf)
-{
-	return __qdf_nbuf_ipa_owned_get(buf);
-}
-
-static inline void qdf_nbuf_ipa_owned_set(qdf_nbuf_t buf)
-{
-	__qdf_nbuf_ipa_owned_set(buf);
-}
-
-static inline void qdf_nbuf_ipa_owned_clear(qdf_nbuf_t buf)
-{
-	__qdf_nbuf_ipa_owned_clear(buf);
-}
-
-static inline int qdf_nbuf_ipa_priv_get(qdf_nbuf_t buf)
-{
-	return __qdf_nbuf_ipa_priv_get(buf);
-}
-
-static inline void qdf_nbuf_ipa_priv_set(qdf_nbuf_t buf, uint32_t priv)
-{
-
-	QDF_BUG(!(priv & QDF_NBUF_IPA_CHECK_MASK));
-	__qdf_nbuf_ipa_priv_set(buf, priv);
-}
-
 /**
  * qdf_nbuf_set_frag_is_wordstream() - set fragment wordstream
  * @buf: Network buffer
@@ -591,22 +564,18 @@ qdf_nbuf_set_vdev_ctx(qdf_nbuf_t buf, uint8_t vdev_id)
 }
 
 static inline void
-qdf_nbuf_set_ftype(qdf_nbuf_t buf, uint8_t type)
+qdf_nbuf_set_tx_ftype(qdf_nbuf_t buf, uint8_t type)
 {
-	__qdf_nbuf_set_ftype(buf, type);
+	__qdf_nbuf_set_tx_ftype(buf, type);
 }
 
 static inline void
-qdf_nbuf_set_ext_cb(qdf_nbuf_t buf, void *ref)
+qdf_nbuf_set_rx_ftype(qdf_nbuf_t buf, uint8_t type)
 {
-	__qdf_nbuf_set_ext_cb(buf, ref);
+	__qdf_nbuf_set_rx_ftype(buf, type);
 }
 
-static inline void
-qdf_nbuf_set_fctx_type(qdf_nbuf_t buf, void *ctx, uint8_t type)
-{
-	__qdf_nbuf_set_fctx_type(buf, ctx, type);
-}
+
 
 static inline uint8_t
 qdf_nbuf_get_vdev_ctx(qdf_nbuf_t buf)
@@ -614,21 +583,16 @@ qdf_nbuf_get_vdev_ctx(qdf_nbuf_t buf)
 	return  __qdf_nbuf_get_vdev_ctx(buf);
 }
 
-static inline void *qdf_nbuf_get_fctx(qdf_nbuf_t buf)
+static inline uint8_t qdf_nbuf_get_tx_ftype(qdf_nbuf_t buf)
 {
-	return  __qdf_nbuf_get_fctx(buf);
+	return  __qdf_nbuf_get_tx_ftype(buf);
 }
 
-static inline uint8_t qdf_nbuf_get_ftype(qdf_nbuf_t buf)
+static inline uint8_t qdf_nbuf_get_rx_ftype(qdf_nbuf_t buf)
 {
-	return  __qdf_nbuf_get_ftype(buf);
+	return  __qdf_nbuf_get_rx_ftype(buf);
 }
 
-static inline void *
-qdf_nbuf_get_ext_cb(qdf_nbuf_t buf)
-{
-	return  __qdf_nbuf_get_ext_cb(buf);
-}
 
 static inline qdf_dma_addr_t
 qdf_nbuf_mapped_paddr_get(qdf_nbuf_t buf)
@@ -653,74 +617,145 @@ qdf_nbuf_frag_push_head(qdf_nbuf_t buf,
 #define qdf_nbuf_num_frags_init(_nbuf) __qdf_nbuf_num_frags_init((_nbuf))
 
 /**
- * qdf_nbuf_set_chfrag_start() - set msdu start bit
+ * qdf_nbuf_set_rx_chfrag_start() - set msdu start bit
  * @buf: Network buffer
  * @val: 0/1
  *
  * Return: void
  */
 static inline void
-qdf_nbuf_set_chfrag_start(qdf_nbuf_t buf, uint8_t val)
+qdf_nbuf_set_rx_chfrag_start(qdf_nbuf_t buf, uint8_t val)
 {
-	__qdf_nbuf_set_chfrag_start(buf, val);
+	__qdf_nbuf_set_rx_chfrag_start(buf, val);
 }
 
 /**
- * qdf_nbuf_is_chfrag_start() - get msdu start bit
+ * qdf_nbuf_is_rx_chfrag_start() - get msdu start bit
  * @buf: Network buffer
  *
  * Return: integer value - 0/1
  */
-static inline int qdf_nbuf_is_chfrag_start(qdf_nbuf_t buf)
+static inline int qdf_nbuf_is_rx_chfrag_start(qdf_nbuf_t buf)
 {
-	return __qdf_nbuf_is_chfrag_start(buf);
+	return __qdf_nbuf_is_rx_chfrag_start(buf);
 }
 
 /**
- * qdf_nbuf_set_chfrag_cont() - set msdu continuation bit
+ * qdf_nbuf_set_rx_chfrag_cont() - set msdu continuation bit
  * @buf: Network buffer
  * @val: 0/1
  *
  * Return: void
  */
 static inline void
-qdf_nbuf_set_chfrag_cont(qdf_nbuf_t buf, uint8_t val)
+qdf_nbuf_set_rx_chfrag_cont(qdf_nbuf_t buf, uint8_t val)
 {
-	__qdf_nbuf_set_chfrag_cont(buf, val);
+	__qdf_nbuf_set_rx_chfrag_cont(buf, val);
 }
 
 /**
- * qdf_nbuf_is_chfrag_cont() - get msdu continuation bit
+ * qdf_nbuf_is_rx_chfrag_cont() - get msdu continuation bit
  * @buf: Network buffer
  *
  * Return: integer value - 0/1
  */
-static inline int qdf_nbuf_is_chfrag_cont(qdf_nbuf_t buf)
+static inline int qdf_nbuf_is_rx_chfrag_cont(qdf_nbuf_t buf)
 {
-	return __qdf_nbuf_is_chfrag_cont(buf);
+	return __qdf_nbuf_is_rx_chfrag_cont(buf);
 }
 
 /**
- * qdf_nbuf_set_chfrag_end() - set msdu end bit
+ * qdf_nbuf_set_rx_chfrag_end() - set msdu end bit
  * @buf: Network buffer
  * @val: 0/1
  *
  * Return: void
  */
-static inline void qdf_nbuf_set_chfrag_end(qdf_nbuf_t buf, uint8_t val)
+static inline void qdf_nbuf_set_rx_chfrag_end(qdf_nbuf_t buf, uint8_t val)
 {
-	__qdf_nbuf_set_chfrag_end(buf, val);
+	__qdf_nbuf_set_rx_chfrag_end(buf, val);
 }
 
 /**
- * qdf_nbuf_is_chfrag_end() - set msdu end bit
+ * qdf_nbuf_is_rx_chfrag_end() - set msdu end bit
  * @buf: Network buffer
  *
  * Return: integer value - 0/1
  */
-static inline int qdf_nbuf_is_chfrag_end(qdf_nbuf_t buf)
+static inline int qdf_nbuf_is_rx_chfrag_end(qdf_nbuf_t buf)
 {
-	return __qdf_nbuf_is_chfrag_end(buf);
+	return __qdf_nbuf_is_rx_chfrag_end(buf);
+}
+
+/**
+ * qdf_nbuf_set_tx_chfrag_start() - set msdu start bit
+ * @buf: Network buffer
+ * @val: 0/1
+ *
+ * Return: void
+ */
+static inline void
+qdf_nbuf_set_tx_chfrag_start(qdf_nbuf_t buf, uint8_t val)
+{
+	__qdf_nbuf_set_tx_chfrag_start(buf, val);
+}
+
+/**
+ * qdf_nbuf_is_tx_chfrag_start() - get msdu start bit
+ * @buf: Network buffer
+ *
+ * Return: integer value - 0/1
+ */
+static inline int qdf_nbuf_is_tx_chfrag_start(qdf_nbuf_t buf)
+{
+	return __qdf_nbuf_is_tx_chfrag_start(buf);
+}
+
+/**
+ * qdf_nbuf_set_tx_chfrag_cont() - set msdu continuation bit
+ * @buf: Network buffer
+ * @val: 0/1
+ *
+ * Return: void
+ */
+static inline void
+qdf_nbuf_set_tx_chfrag_cont(qdf_nbuf_t buf, uint8_t val)
+{
+	__qdf_nbuf_set_tx_chfrag_cont(buf, val);
+}
+
+/**
+ * qdf_nbuf_is_tx_chfrag_cont() - get msdu continuation bit
+ * @buf: Network buffer
+ *
+ * Return: integer value - 0/1
+ */
+static inline int qdf_nbuf_is_tx_chfrag_cont(qdf_nbuf_t buf)
+{
+	return __qdf_nbuf_is_tx_chfrag_cont(buf);
+}
+
+/**
+ * qdf_nbuf_set_tx_chfrag_end() - set msdu end bit
+ * @buf: Network buffer
+ * @val: 0/1
+ *
+ * Return: void
+ */
+static inline void qdf_nbuf_set_tx_chfrag_end(qdf_nbuf_t buf, uint8_t val)
+{
+	__qdf_nbuf_set_tx_chfrag_end(buf, val);
+}
+
+/**
+ * qdf_nbuf_is_tx_chfrag_end() - set msdu end bit
+ * @buf: Network buffer
+ *
+ * Return: integer value - 0/1
+ */
+static inline int qdf_nbuf_is_tx_chfrag_end(qdf_nbuf_t buf)
+{
+	return __qdf_nbuf_is_tx_chfrag_end(buf);
 }
 
 static inline void
@@ -2429,36 +2464,9 @@ qdf_nbuf_get_timedelta_us(struct sk_buff *skb)
 	return __qdf_nbuf_get_timedelta_us(skb);
 }
 
-#ifdef CONFIG_MCL
-/**
- * qdf_nbuf_init_replenish_timer - Initialize the alloc replenish timer
- *
- * This function initializes the nbuf alloc fail replenish timer.
- *
- * Return: void
- */
-static inline void
-qdf_nbuf_init_replenish_timer(void)
-{
-	__qdf_nbuf_init_replenish_timer();
-}
-
-/**
- * qdf_nbuf_deinit_replenish_timer - Deinitialize the alloc replenish timer
- *
- * This function deinitializes the nbuf alloc fail replenish timer.
- *
- * Return: void
- */
-static inline void
-qdf_nbuf_deinit_replenish_timer(void)
-{
-	__qdf_nbuf_deinit_replenish_timer();
-}
+#ifdef CONFIG_WIN
+#include <i_qdf_nbuf_api_w.h>
 #else
-
-static inline void qdf_nbuf_init_replenish_timer(void) {}
-static inline void qdf_nbuf_deinit_replenish_timer(void) {}
-#endif /* CONFIG_MCL */
-
+#include <i_qdf_nbuf_api_m.h>
+#endif
 #endif /* _QDF_NBUF_H */

+ 239 - 334
qdf/linux/src/i_qdf_nbuf.h

@@ -90,47 +90,94 @@ typedef union {
  *      consistently so: do not use any conditional compile flags
  *   3. Split into a common part followed by a tx/rx overlay
  *   4. There is only one extra frag, which represents the HTC/HTT header
- *
- * @common.paddr   : physical addressed retrived by dma_map of nbuf->data
- * @rx.lro_flags   : hardware assisted flags:
- *   @rx.lro_eligible    : flag to indicate whether the MSDU is LRO eligible
- *   @rx.tcp_proto       : L4 protocol is TCP
- *   @rx.tcp_pure_ack    : A TCP ACK packet with no payload
- *   @rx.ipv6_proto      : L3 protocol is IPV6
- *   @rx.ip_offset       : offset to IP header
- *   @rx.tcp_offset      : offset to TCP header
- *   @rx.tcp_udp_chksum  : L4 payload checksum
- *   @rx.tcp_seq_num     : TCP sequence number
- *   @rx.tcp_ack_num     : TCP ACK number
- *   @rx.flow_id_toeplitz: 32-bit 5-tuple Toeplitz hash
- *   @rx.lro_ctx         : LRO context
- * @tx.extra_frag  : represent HTC/HTT header
- * @tx.efrag.vaddr       : virtual address of ~
- * @tx.efrag.paddr       : physical/DMA address of ~
- * @tx.efrag.len         : length of efrag pointed by the above pointers
- * @tx.efrag.num         : number of extra frags ( 0 or 1)
- * @tx.efrag.flags.nbuf  : flag, nbuf payload to be swapped (wordstream)
- * @tx.efrag.flags.efrag : flag, efrag payload to be swapped (wordstream)
- * @tx.efrag.flags.chfrag_start: used by WIN
- * @tx.efrags.flags.chfrag_end:   used by WIN
- * @tx.data_attr   : value that is programmed into CE descr, includes:
+ *   5. "ext_cb_pt" must be the first member in both TX and RX unions
+ *      for the priv_cb_w since it must be at same offset for both
+ *      TX and RX union
+ *
+ * @paddr   : physical addressed retrived by dma_map of nbuf->data
+ *
+ * @rx.dev.priv_cb_w.ext_cb_ptr: extended cb pointer
+ * @rx.dev.priv_cb_w.fctx      : ctx to handle special pkts defined by ftype
+ * @rx.dev.priv_cb_w.reserved1 : reserved
+ * @rx.dev.priv_cb_w.reserved2 : reserved
+ *
+ * @rx.dev.priv_cb_m.tcp_seq_num     : TCP sequence number
+ * @rx.dev.priv_cb_m.tcp_ack_num     : TCP ACK number
+ * @rx.dev.priv_cb_m.lro_ctx         : LRO context
+ * @rx.dev.priv_cb_m.map_index       :
+ * @rx.dev.priv_cb_m.reserved        : reserved
+ *
+ * @rx.lro_eligible        : flag to indicate whether the MSDU is LRO eligible
+ * @rx.peer_cached_buf_frm : peer cached buffer
+ * @rx.tcp_proto           : L4 protocol is TCP
+ * @rx.tcp_pure_ack        : A TCP ACK packet with no payload
+ * @rx.ipv6_proto          : L3 protocol is IPV6
+ * @rx.ip_offset           : offset to IP header
+ * @rx.tcp_offset          : offset to TCP header
+ * @rx_ctx_id              : Rx context id
+ *
+ * @rx.tcp_udp_chksum  : L4 payload checksum
+ * @rx.tcp_wim         : TCP window size
+ *
+ * @rx.flow_id         : 32bit flow id
+ *
+ * @rx.flag_chfrag_start : first MSDU in an AMSDU
+ * @rx.flag_chfrag_cont  : middle or part of MSDU in an AMSDU
+ * @rx.flag_chfrag_end   : last MSDU in an AMSDU
+ * @rx.rsrvd             : reserved
+ *
+ * @rx.trace       : combined structure for DP and protocol trace
+ * @rx.trace.packet_state: {NBUF_TX_PKT_[(HDD)|(TXRX_ENQUEUE)|(TXRX_DEQUEUE)|
+ *                       +          (TXRX)|(HTT)|(HTC)|(HIF)|(CE)|(FREE)]
+ * @rx.trace.dp_trace       : flag (Datapath trace)
+ * @rx.trace.rsrvd          : enable packet logging
+ *
+ * @rx.ftype              : mcast2ucast, TSO, SG, MESH
+ * @rx.reserved           : reserved
+ *
+ * @tx.dev.priv_cb_w.fctx       : ctx to handle special pkts defined by ftype
+ * @tx.dev.priv_cb_w.ext_cb_ptr : extended cb pointer
+ *
+ * @tx.dev.priv_cb_w.data_attr : value that is programmed in CE descr, includes
  *                 + (1) CE classification enablement bit
  *                 + (2) packet type (802.3 or Ethernet type II)
  *                 + (3) packet offset (usually length of HTC/HTT descr)
+ * @tx.dev.priv_cb_m.ipa.owned : packet owned by IPA
+ * @tx.dev.priv_cb_m.ipa.priv  : private data, used by IPA
+ * @tx.dev.priv_cb_m.desc_id   : tx desc id, used to sync between host and fw
+ * @tx.dev.priv_cb_m.mgmt_desc_id  : mgmt descriptor for tx completion cb
+ * @tx.dev.priv_cb_m.reserved  : reserved
+ *
+ * @tx.ftype             : mcast2ucast, TSO, SG, MESH
+ * @tx.vdev_id           : vdev (for protocol trace)
+ * @tx.len               : length of efrag pointed by the above pointers
+ *
+ * @tx.flags.bits.flag_efrag  : flag, efrag payload to be swapped (wordstream)
+ * @tx.flags.bits.num         : number of extra frags ( 0 or 1)
+ * @tx.flags.bits.nbuf        : flag, nbuf payload to be swapped (wordstream)
+ * @tx.flags.bits.flag_chfrag_start : first MSDU in an AMSDU
+ * @tx.flags.bits.flag_chfrag_cont  : middle or part of MSDU in an AMSDU
+ * @tx.flags.bits.flag_chfrag_end   : last MSDU in an AMSDU
+ * @tx.flags.bits.flag_ext_header   : extended flags
+ * @tx.flags.bits.reserved          : reserved
  * @tx.trace       : combined structure for DP and protocol trace
  * @tx.trace.packet_state: {NBUF_TX_PKT_[(HDD)|(TXRX_ENQUEUE)|(TXRX_DEQUEUE)|
- *                       +               (TXRX)|(HTT)|(HTC)|(HIF)|(CE)|(FREE)]
- * @tx.trace.packet_track: {NBUF_TX_PKT_[(DATA)|(MGMT)]_TRACK}
- * @tx.trace.proto_type  : bitmap of NBUF_PKT_TRAC_TYPE[(EAPOL)|(DHCP)|
- *                       +                              (MGMT_ACTION)] - 4 bits
- * @tx.trace.dp_trace    : flag (Datapath trace)
- * @tx.trace.htt2_frm    : flag (high-latency path only)
- * @tx.trace.vdev_id     : vdev (for protocol trace)
- * @tx.ipa.owned   : packet owned by IPA
- * @tx.ipa.priv    : private data, used by IPA
- * @tx.desc_id     : tx desc id, used to sync between host and fw
- * @tx.mgmt_desc_id     : used to get mgmt descriptor for tx completion cb
+ *                       +          (TXRX)|(HTT)|(HTC)|(HIF)|(CE)|(FREE)]
+ * @tx.trace.is_packet_priv :
+ * @tx.trace.packet_track   : {NBUF_TX_PKT_[(DATA)|(MGMT)]_TRACK}
+ * @tx.trace.proto_type     : bitmap of NBUF_PKT_TRAC_TYPE[(EAPOL)|(DHCP)|
+ *                          + (MGMT_ACTION)] - 4 bits
+ * @tx.trace.dp_trace       : flag (Datapath trace)
+ * @tx.trace.is_bcast       : flag (Broadcast packet)
+ * @tx.trace.is_mcast       : flag (Multicast packet)
+ * @tx.trace.packet_type    : flag (Packet type)
+ * @tx.trace.htt2_frm       : flag (high-latency path only)
+ * @tx.trace.print          : enable packet logging
+ *
+ * @tx.vaddr             : virtual address of ~
+ * @tx.paddr             : physical/DMA address of ~
  */
+
 struct qdf_nbuf_cb {
 	/* common */
 	qdf_paddr_t paddr; /* of skb->data */
@@ -138,6 +185,21 @@ struct qdf_nbuf_cb {
 	union {
 		/* Note: MAX: 40 bytes */
 		struct {
+			union {
+				struct {
+					void *ext_cb_ptr;
+					void *fctx;
+					uint32_t reserved1;
+					uint32_t reserved2;
+				} priv_cb_w;
+				struct {
+					uint32_t tcp_seq_num;
+					uint32_t tcp_ack_num;
+					unsigned char *lro_ctx;
+					uint32_t map_index;
+					uint32_t reserved;
+				} priv_cb_m;
+			} dev;
 			uint32_t lro_eligible:1,
 				peer_cached_buf_frm:1,
 				tcp_proto:1,
@@ -148,94 +210,69 @@ struct qdf_nbuf_cb {
 				rx_ctx_id:4;
 			uint32_t tcp_udp_chksum:16,
 				tcp_win:16;
-			uint32_t tcp_seq_num;
-			uint32_t tcp_ack_num;
-			uint32_t flow_id_toeplitz;
-			uint32_t map_index;
-			unsigned char *lro_ctx;
+			uint32_t flow_id;
+			uint8_t flag_chfrag_start:1,
+				flag_chfrag_cont:1,
+				flag_chfrag_end:1,
+				rsrvd:5;
 			union {
 				uint8_t packet_state;
 				uint8_t dp_trace:1,
-						rsrvd:7;
+					rsrvd:1;
 			} trace;
+			uint8_t ftype;
+			uint8_t reserved;
 		} rx;
 
 		/* Note: MAX: 40 bytes */
 		struct {
-			unsigned char *vaddr;
-			qdf_paddr_t paddr;
 			union {
 				struct {
-					uint16_t len;
-					union {
-						struct {
-							uint8_t flag_efrag:1,
-								flag_nbuf:1,
-								num:1,
-								flag_chfrag_start:1,
-								flag_chfrag_cont:1,
-								flag_chfrag_end:1,
-								flag_ext_header:1,
-								reserved:1;
-						} bits;
-						uint8_t u8;
-					} flags;
-					uint8_t ftype;
-					uint8_t vdev_id;
-					struct {
-						uint8_t packet_state:7,
-						is_packet_priv:1;
-						uint8_t packet_track:4,
-							proto_type:4;
-						uint8_t dp_trace:1,
-							is_bcast:1,
-							is_mcast:1,
-							packet_type:3,
-						/* used only for hl*/
-							htt2_frm:1,
-							print:1;
-					} trace;
-					void *fctx;
 					void *ext_cb_ptr;
-				} win;
+					void *fctx;
+				} priv_cb_w;
 				struct {
-					uint16_t len;
-					union {
-						struct {
-							uint8_t flag_efrag:1,
-								flag_nbuf:1,
-								num:1,
-								flag_chfrag_start:1,
-								flag_chfrag_cont:1,
-								flag_chfrag_end:1,
-								flag_ext_header:1,
-								reserved:1;
-						} bits;
-						uint8_t u8;
-					} flags;
-					uint8_t ftype;
 					uint32_t data_attr;
-					struct{
-						uint8_t packet_state;
-						uint8_t packet_track:4,
-							proto_type:4;
-						uint8_t dp_trace:1,
-							is_bcast:1,
-							is_mcast:1,
-							packet_type:3,
-							/* used only for hl*/
-							htt2_frm:1,
-							print:1;
-						uint8_t vdev_id;
-					} trace;
 					struct {
 						uint32_t owned:1,
 							priv:31;
 					} ipa;
 					uint16_t desc_id;
 					uint16_t mgmt_desc_id;
-				} mcl;
+					uint32_t reserved;
+				} priv_cb_m;
 			} dev;
+			uint8_t ftype;
+			uint8_t vdev_id;
+			uint16_t len;
+			union {
+				struct {
+					uint8_t flag_efrag:1,
+						flag_nbuf:1,
+						num:1,
+						flag_chfrag_start:1,
+						flag_chfrag_cont:1,
+						flag_chfrag_end:1,
+						flag_ext_header:1,
+						reserved:1;
+				} bits;
+				uint8_t u8;
+			} flags;
+			struct {
+				uint8_t packet_state:7,
+					is_packet_priv:1;
+				uint8_t packet_track:4,
+					proto_type:4;
+				uint8_t dp_trace:1,
+					is_bcast:1,
+					is_mcast:1,
+					packet_type:3,
+					/* used only for hl*/
+					htt2_frm:1,
+					print:1;
+			} trace;
+			unsigned char *vaddr;
+			qdf_paddr_t paddr;
 		} tx;
 	} u;
 }; /* struct qdf_nbuf_cb: MAX 48 bytes */
@@ -257,12 +294,6 @@ QDF_COMPILE_TIME_ASSERT(qdf_nbuf_cb_size,
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.lro_eligible)
 #define QDF_NBUF_CB_RX_PEER_CACHED_FRM(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.peer_cached_buf_frm)
-#define QDF_NBUF_CB_RX_LRO_DESC(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.lro_desc)
-#define QDF_NBUF_CB_RX_LRO_CTX(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.lro_ctx)
-#define QDF_NBUF_CB_RX_CTX_ID(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.rx_ctx_id)
 #define QDF_NBUF_CB_RX_TCP_PROTO(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.tcp_proto)
 #define QDF_NBUF_CB_RX_TCP_PURE_ACK(skb) \
@@ -273,204 +304,124 @@ QDF_COMPILE_TIME_ASSERT(qdf_nbuf_cb_size,
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.ip_offset)
 #define QDF_NBUF_CB_RX_TCP_OFFSET(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.tcp_offset)
+#define QDF_NBUF_CB_RX_CTX_ID(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.rx_ctx_id)
+
 #define QDF_NBUF_CB_RX_TCP_CHKSUM(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.tcp_udp_chksum)
-#define QDF_NBUF_CB_RX_TCP_OFFSET(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.tcp_offset)
 #define QDF_NBUF_CB_RX_TCP_WIN(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.tcp_win)
-#define QDF_NBUF_CB_RX_TCP_SEQ_NUM(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.tcp_seq_num)
-#define QDF_NBUF_CB_RX_TCP_ACK_NUM(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.tcp_ack_num)
-#define QDF_NBUF_CB_RX_FLOW_ID_TOEPLITZ(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.flow_id_toeplitz)
+
+#define QDF_NBUF_CB_RX_FLOW_ID(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.flow_id)
+
+#define QDF_NBUF_CB_RX_PACKET_STATE(skb)\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.trace.packet_state)
 #define QDF_NBUF_CB_RX_DP_TRACE(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.trace.dp_trace)
 
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_VADDR(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.vaddr)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_PADDR(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.paddr.dma_addr)
+#define QDF_NBUF_CB_RX_FTYPE(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.ftype)
 
-#ifdef CONFIG_WIN
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_LEN(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.len)
-#define QDF_NBUF_CB_TX_NUM_EXTRA_FRAGS(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.flags.bits.num)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_FLAGS(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.flags.u8)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_START(skb) \
+#define QDF_NBUF_CB_RX_CHFRAG_START(skb) \
 	(((struct qdf_nbuf_cb *) \
-	((skb)->cb))->u.tx.dev.win.flags.bits.flag_chfrag_start)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_CONT(skb) \
-	(((struct qdf_nbuf_cb *) \
-	((skb)->cb))->u.tx.dev.win.flags.bits.flag_chfrag_cont)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_END(skb) \
-		(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.win.flags.bits.flag_chfrag_end)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_EXT_HEADER(skb) \
-		(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.win.flags.bits.flag_ext_header)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_EFRAG(skb) \
-	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.win.flags.bits.flag_efrag)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_NBUF(skb) \
+	((skb)->cb))->u.rx.flag_chfrag_start)
+#define QDF_NBUF_CB_RX_CHFRAG_CONT(skb) \
 	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.win.flags.bits.flag_nbuf)
-#else
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_LEN(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.len)
-#define QDF_NBUF_CB_TX_NUM_EXTRA_FRAGS(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.flags.bits.num)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_FLAGS(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.flags.u8)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_START(skb) \
-	(((struct qdf_nbuf_cb *) \
-	((skb)->cb))->u.tx.dev.mcl.flags.bits.flag_chfrag_start)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_CONT(skb) \
-	(((struct qdf_nbuf_cb *) \
-	((skb)->cb))->u.tx.dev.mcl.flags.bits.flag_chfrag_cont)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_END(skb) \
+	((skb)->cb))->u.rx.flag_chfrag_cont)
+#define QDF_NBUF_CB_RX_CHFRAG_END(skb) \
 		(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.mcl.flags.bits.flag_chfrag_end)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_EXT_HEADER(skb) \
-		(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.mcl.flags.bits.flag_ext_header)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_EFRAG(skb) \
-	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.mcl.flags.bits.flag_efrag)
-#define QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_NBUF(skb) \
-	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.mcl.flags.bits.flag_nbuf)
-#endif
+		((skb)->cb))->u.rx.flag_chfrag_end)
 
-#define QDF_NBUF_CB_TX_DATA_ATTR(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.data_attr)
 #define QDF_NBUF_UPDATE_TX_PKT_COUNT(skb, PACKET_STATE) \
 	qdf_nbuf_set_state(skb, PACKET_STATE)
 
+#define QDF_NBUF_CB_TX_DATA_ATTR(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.priv_cb_m.data_attr)
 
-#define QDF_NBUF_CB_TX_IPA_OWNED(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.owned)
-
-#define QDF_NBUF_CB_TX_IPA_PRIV(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.priv)
-
+#define QDF_NBUF_CB_TX_FTYPE(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.ftype)
 
-#define QDF_NBUF_CB_TX_FCTX(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.fctx)
 
+#define QDF_NBUF_CB_TX_EXTRA_FRAG_LEN(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.len)
 #define QDF_NBUF_CB_TX_VDEV_CTX(skb) \
-		(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.vdev_id)
-
-#define QDF_NBUF_CB_TX_EXT_CB(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.ext_cb_ptr)
-
-#ifndef CONFIG_WIN
-
-#define QDF_NBUF_CB_TX_IS_PACKET_PRIV(skb) \
-	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.mcl.trace.is_packet_priv)
+		(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.vdev_id)
 
-#define QDF_NBUF_CB_TX_DESC_ID(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.desc_id)
-
-#define QDF_NBUF_CB_MGMT_TXRX_DESC_ID(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.mgmt_desc_id)
-
-#define QDF_NBUF_CB_TX_PACKET_STATE(skb) \
-	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.mcl.trace.packet_state)
-#define QDF_NBUF_CB_TX_PACKET_TRACK(skb) \
+/* Tx Flags Accessor Macros*/
+#define QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_EFRAG(skb) \
 	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.mcl.trace.packet_track)
-#define QDF_NBUF_CB_TX_PROTO_TYPE(skb) \
+		((skb)->cb))->u.tx.flags.bits.flag_efrag)
+#define QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_NBUF(skb) \
 	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.mcl.trace.proto_type)
-#define QDF_NBUF_GET_PACKET_TRACK(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.packet_track)
-#define QDF_NBUF_CB_TX_DP_TRACE(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.dp_trace)
-#define QDF_NBUF_CB_DP_TRACE_PRINT(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.print)
-#define QDF_NBUF_CB_TX_HL_HTT2_FRM(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.htt2_frm)
-#define QDF_NBUF_CB_TX_VDEV_ID(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.vdev_id)
-
-#define QDF_NBUF_CB_GET_IS_BCAST(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.is_bcast)
-#define QDF_NBUF_CB_GET_IS_MCAST(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.is_mcast)
-#define QDF_NBUF_CB_GET_PACKET_TYPE(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.packet_type)
-
-#define QDF_NBUF_CB_SET_BCAST(skb) \
+		((skb)->cb))->u.tx.flags.bits.flag_nbuf)
+#define QDF_NBUF_CB_TX_NUM_EXTRA_FRAGS(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.flags.bits.num)
+#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_START(skb) \
 	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.mcl.trace.is_bcast = true)
-#define QDF_NBUF_CB_SET_MCAST(skb) \
+	((skb)->cb))->u.tx.flags.bits.flag_chfrag_start)
+#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_CONT(skb) \
 	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.mcl.trace.is_mcast = true)
-#define QDF_NBUF_CB_TX_FTYPE(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ftype)
-
-#else
-
-#define QDF_NBUF_CB_TX_DESC_ID(skb)\
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.desc_id)
+	((skb)->cb))->u.tx.flags.bits.flag_chfrag_cont)
+#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_END(skb) \
+		(((struct qdf_nbuf_cb *) \
+		((skb)->cb))->u.tx.flags.bits.flag_chfrag_end)
+#define QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_EXT_HEADER(skb) \
+		(((struct qdf_nbuf_cb *) \
+		((skb)->cb))->u.tx.flags.bits.flag_ext_header)
+#define QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_FLAGS(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.flags.u8)
+/* End of Tx Flags Accessor Macros */
 
+/* Tx trace accessor macros */
 #define QDF_NBUF_CB_TX_PACKET_STATE(skb)\
 	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.win.trace.packet_state)
+		((skb)->cb))->u.tx.trace.packet_state)
 
 #define QDF_NBUF_CB_TX_IS_PACKET_PRIV(skb) \
 	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.win.trace.is_packet_priv)
+		((skb)->cb))->u.tx.trace.is_packet_priv)
 
 #define QDF_NBUF_CB_TX_PACKET_TRACK(skb)\
 	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.win.trace.packet_track)
+		((skb)->cb))->u.tx.trace.packet_track)
 
 #define QDF_NBUF_CB_TX_PROTO_TYPE(skb)\
 	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.win.trace.proto_type)
-
-#define QDF_NBUF_GET_PACKET_TRACK(skb)\
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.packet_track)
+		((skb)->cb))->u.tx.trace.proto_type)
 
 #define QDF_NBUF_CB_TX_DP_TRACE(skb)\
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.trace.dp_trace)
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.trace.dp_trace)
 
 #define QDF_NBUF_CB_DP_TRACE_PRINT(skb)	\
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.trace.print)
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.trace.print)
 
 #define QDF_NBUF_CB_TX_HL_HTT2_FRM(skb)	\
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.trace.htt2_frm)
-
-#define QDF_NBUF_CB_TX_VDEV_ID(skb)\
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.trace.vdev_id)
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.trace.htt2_frm)
 
 #define QDF_NBUF_CB_GET_IS_BCAST(skb)\
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.trace.is_bcast)
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.trace.is_bcast)
 
 #define QDF_NBUF_CB_GET_IS_MCAST(skb)\
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.trace.is_mcast)
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.trace.is_mcast)
 
 #define QDF_NBUF_CB_GET_PACKET_TYPE(skb)\
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.trace.packet_type)
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.trace.packet_type)
 
 #define QDF_NBUF_CB_SET_BCAST(skb) \
 	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.win.trace.is_bcast = true)
+		((skb)->cb))->u.tx.trace.is_bcast = true)
 
 #define QDF_NBUF_CB_SET_MCAST(skb) \
 	(((struct qdf_nbuf_cb *) \
-		((skb)->cb))->u.tx.dev.win.trace.is_mcast = true)
+		((skb)->cb))->u.tx.trace.is_mcast = true)
+/* End of Tx trace accessor macros */
 
-#define QDF_NBUF_CB_TX_FTYPE(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.ftype)
-#endif
+
+#define QDF_NBUF_CB_TX_EXTRA_FRAG_VADDR(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.vaddr)
+#define QDF_NBUF_CB_TX_EXTRA_FRAG_PADDR(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.paddr.dma_addr)
 
 /* assume the OS provides a single fragment */
 #define __qdf_nbuf_get_num_frags(skb)		   \
@@ -542,49 +493,62 @@ typedef void (*qdf_nbuf_free_t)(__qdf_nbuf_t);
 #define __qdf_nbuf_get_vdev_ctx(skb) \
 	QDF_NBUF_CB_TX_VDEV_CTX((skb))
 
-#define __qdf_nbuf_set_ftype(skb, type) \
+#define __qdf_nbuf_set_tx_ftype(skb, type) \
 	do { \
 		QDF_NBUF_CB_TX_FTYPE((skb)) = (type); \
 	} while (0)
 
-#define __qdf_nbuf_set_fctx_type(skb, ctx, type) \
+#define __qdf_nbuf_get_tx_ftype(skb) \
+		 QDF_NBUF_CB_TX_FTYPE((skb))
+
+
+#define __qdf_nbuf_set_rx_ftype(skb, type) \
 	do { \
-		QDF_NBUF_CB_TX_FCTX((skb)) = (ctx);	\
-		QDF_NBUF_CB_TX_FTYPE((skb)) = (type); \
+		QDF_NBUF_CB_RX_FTYPE((skb)) = (type); \
 	} while (0)
 
-#define __qdf_nbuf_get_fctx(skb) \
-		 QDF_NBUF_CB_TX_FCTX((skb))
+#define __qdf_nbuf_get_rx_ftype(skb) \
+		 QDF_NBUF_CB_RX_FTYPE((skb))
 
-#define __qdf_nbuf_get_ftype(skb) \
-		 QDF_NBUF_CB_TX_FTYPE((skb))
+#define __qdf_nbuf_set_rx_chfrag_start(skb, val) \
+	((QDF_NBUF_CB_RX_CHFRAG_START((skb))) = val)
 
-#define __qdf_nbuf_set_ext_cb(skb, ref) \
+#define __qdf_nbuf_is_rx_chfrag_start(skb) \
+	(QDF_NBUF_CB_RX_CHFRAG_START((skb)))
+
+#define __qdf_nbuf_set_rx_chfrag_cont(skb, val) \
 	do { \
-		QDF_NBUF_CB_TX_EXT_CB((skb)) = (ref); \
+		(QDF_NBUF_CB_RX_CHFRAG_CONT((skb))) = val; \
 	} while (0)
 
-#define __qdf_nbuf_get_ext_cb(skb) \
-	QDF_NBUF_CB_TX_EXT_CB((skb))
+#define __qdf_nbuf_is_rx_chfrag_cont(skb) \
+	(QDF_NBUF_CB_RX_CHFRAG_CONT((skb)))
+
+#define __qdf_nbuf_set_rx_chfrag_end(skb, val) \
+	((QDF_NBUF_CB_RX_CHFRAG_END((skb))) = val)
 
-#define __qdf_nbuf_set_chfrag_start(skb, val) \
+#define __qdf_nbuf_is_rx_chfrag_end(skb) \
+	(QDF_NBUF_CB_RX_CHFRAG_END((skb)))
+
+
+#define __qdf_nbuf_set_tx_chfrag_start(skb, val) \
 	((QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_START((skb))) = val)
 
-#define __qdf_nbuf_is_chfrag_start(skb) \
+#define __qdf_nbuf_is_tx_chfrag_start(skb) \
 	(QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_START((skb)))
 
-#define __qdf_nbuf_set_chfrag_cont(skb, val) \
+#define __qdf_nbuf_set_tx_chfrag_cont(skb, val) \
 	do { \
 		(QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_CONT((skb))) = val; \
 	} while (0)
 
-#define __qdf_nbuf_is_chfrag_cont(skb) \
+#define __qdf_nbuf_is_tx_chfrag_cont(skb) \
 	(QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_CONT((skb)))
 
-#define __qdf_nbuf_set_chfrag_end(skb, val) \
+#define __qdf_nbuf_set_tx_chfrag_end(skb, val) \
 	((QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_END((skb))) = val)
 
-#define __qdf_nbuf_is_chfrag_end(skb) \
+#define __qdf_nbuf_is_tx_chfrag_end(skb) \
 	(QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_CHFRAG_END((skb)))
 
 #define __qdf_nbuf_trace_set_proto_type(skb, proto_type)  \
@@ -598,21 +562,6 @@ typedef void (*qdf_nbuf_free_t)(__qdf_nbuf_t);
 #define __qdf_nbuf_data_attr_set(skb, data_attr) \
 	(QDF_NBUF_CB_TX_DATA_ATTR(skb) = (data_attr))
 
-#define __qdf_nbuf_ipa_owned_get(skb) \
-	QDF_NBUF_CB_TX_IPA_OWNED(skb)
-
-#define __qdf_nbuf_ipa_owned_set(skb) \
-	(QDF_NBUF_CB_TX_IPA_OWNED(skb) = 1)
-
-#define __qdf_nbuf_ipa_owned_clear(skb) \
-	(QDF_NBUF_CB_TX_IPA_OWNED(skb) = 0)
-
-#define __qdf_nbuf_ipa_priv_get(skb)	\
-	QDF_NBUF_CB_TX_IPA_PRIV(skb)
-
-#define __qdf_nbuf_ipa_priv_set(skb, priv) \
-	(QDF_NBUF_CB_TX_IPA_PRIV(skb) = (priv))
-
 /**
  * __qdf_nbuf_num_frags_init() - init extra frags
  * @skb: sk buffer
@@ -697,10 +646,6 @@ enum qdf_proto_subtype  __qdf_nbuf_data_get_icmp_subtype(uint8_t *data);
 enum qdf_proto_subtype  __qdf_nbuf_data_get_icmpv6_subtype(uint8_t *data);
 uint8_t __qdf_nbuf_data_get_ipv4_proto(uint8_t *data);
 uint8_t __qdf_nbuf_data_get_ipv6_proto(uint8_t *data);
-#ifdef CONFIG_MCL
-void __qdf_nbuf_init_replenish_timer(void);
-void __qdf_nbuf_deinit_replenish_timer(void);
-#endif
 
 /**
  * __qdf_to_status() - OS to QDF status conversion
@@ -800,29 +745,6 @@ static inline uint32_t __qdf_nbuf_tailroom(struct sk_buff *skb)
 	return skb_tailroom(skb);
 }
 
-/**
- * __qdf_nbuf_push_head() - Push data in the front
- * @skb: Pointer to network buffer
- * @size: size to be pushed
- *
- * Return: New data pointer of this buf after data has been pushed,
- *         or NULL if there is not enough room in this buf.
- */
-#ifdef CONFIG_MCL
-static inline uint8_t *__qdf_nbuf_push_head(struct sk_buff *skb, size_t size)
-{
-	if (QDF_NBUF_CB_PADDR(skb))
-		QDF_NBUF_CB_PADDR(skb) -= size;
-
-	return skb_push(skb, size);
-}
-#else
-static inline uint8_t *__qdf_nbuf_push_head(struct sk_buff *skb, size_t size)
-{
-	return skb_push(skb, size);
-}
-#endif
-
 /**
  * __qdf_nbuf_put_tail() - Puts data in the end
  * @skb: Pointer to network buffer
@@ -843,28 +765,6 @@ static inline uint8_t *__qdf_nbuf_put_tail(struct sk_buff *skb, size_t size)
 	return skb_put(skb, size);
 }
 
-/**
- * __qdf_nbuf_pull_head() - pull data out from the front
- * @skb: Pointer to network buffer
- * @size: size to be popped
- *
- * Return: New data pointer of this buf after data has been popped,
- *	   or NULL if there is not sufficient data to pull.
- */
-#ifdef CONFIG_MCL
-static inline uint8_t *__qdf_nbuf_pull_head(struct sk_buff *skb, size_t size)
-{
-	if (QDF_NBUF_CB_PADDR(skb))
-		QDF_NBUF_CB_PADDR(skb) += size;
-
-	return skb_pull(skb, size);
-}
-#else
-static inline uint8_t *__qdf_nbuf_pull_head(struct sk_buff *skb, size_t size)
-{
-	return skb_pull(skb, size);
-}
-#endif
 /**
  * __qdf_nbuf_trim_tail() - trim data out from the end
  * @skb: Pointer to network buffer
@@ -1898,4 +1798,9 @@ __qdf_nbuf_get_timedelta_us(struct sk_buff *skb)
 {
 	return ktime_to_us(net_timedelta(skb->tstamp));
 }
+#ifdef CONFIG_WIN
+#include <i_qdf_nbuf_w.h>
+#else
+#include <i_qdf_nbuf_m.h>
+#endif
 #endif /*_I_QDF_NET_BUF_H */

+ 125 - 0
qdf/linux/src/i_qdf_nbuf_m.h

@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2014-2017 The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: i_qdf_nbuf_m.h
+ *
+ * This file provides platform specific nbuf API's.
+ * Included by i_qdf_nbuf.h and should not be included
+ * directly from other files.
+ */
+
+#ifndef _I_QDF_NBUF_M_H
+#define _I_QDF_NBUF_M_H
+
+#define QDF_NBUF_CB_RX_TCP_SEQ_NUM(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m.tcp_seq_num)
+#define QDF_NBUF_CB_RX_TCP_ACK_NUM(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m.tcp_ack_num)
+#define QDF_NBUF_CB_RX_LRO_CTX(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m.lro_ctx)
+
+#define QDF_NBUF_CB_TX_IPA_OWNED(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.priv_cb_m.ipa.owned)
+#define QDF_NBUF_CB_TX_IPA_PRIV(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.priv_cb_m.ipa.priv)
+#define QDF_NBUF_CB_TX_DESC_ID(skb)\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.priv_cb_m.desc_id)
+#define QDF_NBUF_CB_MGMT_TXRX_DESC_ID(skb)\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.priv_cb_m.mgmt_desc_id)
+
+#define __qdf_nbuf_ipa_owned_get(skb) \
+	QDF_NBUF_CB_TX_IPA_OWNED(skb)
+
+#define __qdf_nbuf_ipa_owned_set(skb) \
+	(QDF_NBUF_CB_TX_IPA_OWNED(skb) = 1)
+
+#define __qdf_nbuf_ipa_owned_clear(skb) \
+	(QDF_NBUF_CB_TX_IPA_OWNED(skb) = 0)
+
+#define __qdf_nbuf_ipa_priv_get(skb)	\
+	QDF_NBUF_CB_TX_IPA_PRIV(skb)
+
+#define __qdf_nbuf_ipa_priv_set(skb, priv) \
+	(QDF_NBUF_CB_TX_IPA_PRIV(skb) = (priv))
+
+
+
+void __qdf_nbuf_init_replenish_timer(void);
+void __qdf_nbuf_deinit_replenish_timer(void);
+
+/**
+ * __qdf_nbuf_push_head() - Push data in the front
+ * @skb: Pointer to network buffer
+ * @size: size to be pushed
+ *
+ * Return: New data pointer of this buf after data has been pushed,
+ *         or NULL if there is not enough room in this buf.
+ */
+static inline uint8_t *__qdf_nbuf_push_head(struct sk_buff *skb, size_t size)
+{
+	if (QDF_NBUF_CB_PADDR(skb))
+		QDF_NBUF_CB_PADDR(skb) -= size;
+
+	return skb_push(skb, size);
+}
+
+
+/**
+ * __qdf_nbuf_pull_head() - pull data out from the front
+ * @skb: Pointer to network buffer
+ * @size: size to be popped
+ *
+ * Return: New data pointer of this buf after data has been popped,
+ *	   or NULL if there is not sufficient data to pull.
+ */
+static inline uint8_t *__qdf_nbuf_pull_head(struct sk_buff *skb, size_t size)
+{
+	if (QDF_NBUF_CB_PADDR(skb))
+		QDF_NBUF_CB_PADDR(skb) += size;
+
+	return skb_pull(skb, size);
+}
+
+/**
+ * qdf_nbuf_init_replenish_timer - Initialize the alloc replenish timer
+ *
+ * This function initializes the nbuf alloc fail replenish timer.
+ *
+ * Return: void
+ */
+static inline void
+qdf_nbuf_init_replenish_timer(void)
+{
+	__qdf_nbuf_init_replenish_timer();
+}
+
+/**
+ * qdf_nbuf_deinit_replenish_timer - Deinitialize the alloc replenish timer
+ *
+ * This function deinitializes the nbuf alloc fail replenish timer.
+ *
+ * Return: void
+ */
+static inline void
+qdf_nbuf_deinit_replenish_timer(void)
+{
+	__qdf_nbuf_deinit_replenish_timer();
+}
+
+#endif /*_I_QDF_NBUF_M_H */

+ 100 - 0
qdf/linux/src/i_qdf_nbuf_w.h

@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2014-2017 The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: i_qdf_nbuf_w.h
+ *
+ * This file provides platform specific nbuf API's.
+ * Included by i_qdf_nbuf.h and should not be included
+ * directly from other files.
+ */
+
+#ifndef _I_QDF_NBUF_W_H
+#define _I_QDF_NBUF_W_H
+
+/* ext_cb accesor macros and internal API's */
+
+#define QDF_NBUF_CB_EXT_CB(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.priv_cb_w.ext_cb_ptr)
+
+#define __qdf_nbuf_set_ext_cb(skb, ref) \
+	do { \
+		QDF_NBUF_CB_EXT_CB((skb)) = (ref); \
+	} while (0)
+
+#define __qdf_nbuf_get_ext_cb(skb) \
+	QDF_NBUF_CB_EXT_CB((skb))
+
+/* fctx accesor macros and internal API's*/
+
+#define QDF_NBUF_CB_RX_FCTX(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_w.fctx)
+
+#define QDF_NBUF_CB_TX_FCTX(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.priv_cb_w.fctx)
+
+#define __qdf_nbuf_set_rx_fctx_type(skb, ctx, type) \
+	do { \
+		QDF_NBUF_CB_RX_FCTX((skb)) = (ctx); \
+		QDF_NBUF_CB_RX_FTYPE((skb)) = (type); \
+	} while (0)
+
+#define __qdf_nbuf_get_rx_fctx(skb) \
+		 QDF_NBUF_CB_RX_FCTX((skb))
+
+#define __qdf_nbuf_set_tx_fctx_type(skb, ctx, type) \
+	do { \
+		QDF_NBUF_CB_TX_FCTX((skb)) = (ctx); \
+		QDF_NBUF_CB_TX_FTYPE((skb)) = (type); \
+	} while (0)
+
+#define __qdf_nbuf_get_tx_fctx(skb) \
+		 QDF_NBUF_CB_TX_FCTX((skb))
+
+
+
+/**
+ * __qdf_nbuf_push_head() - Push data in the front
+ * @skb: Pointer to network buffer
+ * @size: size to be pushed
+ *
+ * Return: New data pointer of this buf after data has been pushed,
+ *         or NULL if there is not enough room in this buf.
+ */
+static inline uint8_t *__qdf_nbuf_push_head(struct sk_buff *skb, size_t size)
+{
+	return skb_push(skb, size);
+}
+
+/**
+ * __qdf_nbuf_pull_head() - pull data out from the front
+ * @skb: Pointer to network buffer
+ * @size: size to be popped
+ *
+ * Return: New data pointer of this buf after data has been popped,
+ * or NULL if there is not sufficient data to pull.
+ */
+static inline uint8_t *__qdf_nbuf_pull_head(struct sk_buff *skb, size_t size)
+{
+	return skb_pull(skb, size);
+}
+
+static inline void qdf_nbuf_init_replenish_timer(void) {}
+static inline void qdf_nbuf_deinit_replenish_timer(void) {}
+
+#endif /*_I_QDF_NBUF_W_H */

+ 0 - 1
qdf/linux/src/qdf_nbuf.c

@@ -3222,7 +3222,6 @@ void __qdf_nbuf_reg_free_cb(qdf_nbuf_free_t cb_func_ptr)
 void qdf_nbuf_classify_pkt(struct sk_buff *skb)
 {
 	struct ethhdr *eh = (struct ethhdr *)skb->data;
-	qdf_mem_set(skb->cb, sizeof(skb->cb), 0);
 
 	/* check destination mac address is broadcast/multicast */
 	if (is_broadcast_ether_addr((uint8_t *)eh))