Browse Source

Merge "qcacmn: Add API qdf_nbuf_reset to reset netbuf"

Linux Build Service Account 6 years ago
parent
commit
23a180a185
2 changed files with 52 additions and 0 deletions
  1. 13 0
      qdf/inc/qdf_nbuf.h
  2. 39 0
      qdf/linux/src/i_qdf_nbuf.h

+ 13 - 0
qdf/inc/qdf_nbuf.h

@@ -1569,6 +1569,19 @@ static inline void qdf_nbuf_reserve(qdf_nbuf_t buf, qdf_size_t size)
 	__qdf_nbuf_reserve(buf, size);
 }
 
+/**
+ * qdf_nbuf_reset() - reset the buffer data and pointer
+ * @buf: Network buf instance
+ * @reserve: reserve
+ * @align: align
+ *
+ * Return: none
+ */
+static inline void qdf_nbuf_reset(qdf_nbuf_t buf, int reserve, int align)
+{
+	__qdf_nbuf_reset(buf, reserve, align);
+}
+
 /**
  * qdf_nbuf_peek_header() - return the data pointer & length of the header
  * @buf: Network nbuf

+ 39 - 0
qdf/linux/src/i_qdf_nbuf.h

@@ -897,6 +897,45 @@ static inline struct sk_buff *__qdf_nbuf_copy(struct sk_buff *skb)
 
 #define __qdf_nbuf_reserve      skb_reserve
 
+/**
+ * __qdf_nbuf_reset() - reset the buffer data and pointer
+ * @buf: Network buf instance
+ * @reserve: reserve
+ * @align: align
+ *
+ * Return: none
+ */
+static inline void
+__qdf_nbuf_reset(struct sk_buff *skb, int reserve, int align)
+{
+	int offset;
+
+	skb_push(skb, skb_headroom(skb));
+	skb_put(skb, skb_tailroom(skb));
+	memset(skb->data, 0x0, skb->len);
+	skb_trim(skb, 0);
+	skb_reserve(skb, NET_SKB_PAD);
+	memset(skb->cb, 0x0, sizeof(skb->cb));
+
+	/*
+	 * The default is for netbuf fragments to be interpreted
+	 * as wordstreams rather than bytestreams.
+	 */
+	QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_EFRAG(skb) = 1;
+	QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_NBUF(skb) = 1;
+
+	/*
+	 * Align & make sure that the tail & data are adjusted properly
+	 */
+
+	if (align) {
+		offset = ((unsigned long)skb->data) % align;
+		if (offset)
+			skb_reserve(skb, align - offset);
+	}
+
+	skb_reserve(skb, reserve);
+}
 
 /**
  * __qdf_nbuf_head() - return the pointer the skb's head pointer