qcacmn: Add HIF CE RX support to WBUFF

Currently, WBUFF is being used only for WMI TX buffers.
Add HIF CE RX buffers support to WBUFF in an effort to re-use
the copy engine RX buffers instead of freeing/allocating buffers
for every CE RX transaction. This fixes the problem of CE RX
memory fragmentation.

Change-Id: Id9c043a5c5d0882a7994fa03cd8c335555d46b8d
CRs-Fixed: 3534539
This commit is contained in:
Manikanta Pubbisetty
2023-06-15 16:02:25 +05:30
committed by Rahul Choudhary
父節點 9b27c6e104
當前提交 cbe8170798
共有 8 個文件被更改,包括 240 次插入37 次删除

查看文件

@@ -21,6 +21,7 @@
#include "htc_internal.h"
#include "htc_credit_history.h"
#include <qdf_nbuf.h> /* qdf_nbuf_t */
#include <wbuff.h>
#if defined(WLAN_DEBUG) || defined(DEBUG)
void debug_dump_bytes(uint8_t *buffer, uint16_t length, char *pDescription)
@@ -71,6 +72,20 @@ static A_STATUS htc_process_trailer(HTC_TARGET *target,
uint8_t *pBuffer,
int Length, HTC_ENDPOINT_ID FromEndpoint);
#ifdef WLAN_FEATURE_CE_RX_BUFFER_REUSE
static void htc_rx_nbuf_free(qdf_nbuf_t nbuf)
{
nbuf = wbuff_buff_put(nbuf);
if (nbuf)
qdf_nbuf_free(nbuf);
}
#else
static inline void htc_rx_nbuf_free(qdf_nbuf_t nbuf)
{
return qdf_nbuf_free(nbuf);
}
#endif
static void do_recv_completion_pkt(HTC_ENDPOINT *pEndpoint,
HTC_PACKET *pPacket)
{
@@ -80,7 +95,7 @@ static void do_recv_completion_pkt(HTC_ENDPOINT *pEndpoint,
pEndpoint->Id,
pPacket));
if (pPacket)
qdf_nbuf_free(pPacket->pPktContext);
htc_rx_nbuf_free(pPacket->pPktContext);
} else {
AR_DEBUG_PRINTF(ATH_DEBUG_RECV,
("HTC calling ep %d recv callback on packet %pK\n",
@@ -210,7 +225,7 @@ qdf_nbuf_t rx_sg_to_single_netbuf(HTC_TARGET *target)
qdf_mem_copy(anbdata_new, anbdata, qdf_nbuf_len(skb));
qdf_nbuf_put_tail(new_skb, qdf_nbuf_len(skb));
anbdata_new += qdf_nbuf_len(skb);
qdf_nbuf_free(skb);
htc_rx_nbuf_free(skb);
skb = qdf_nbuf_queue_remove(rx_sg_queue);
} while (skb);
@@ -220,7 +235,7 @@ qdf_nbuf_t rx_sg_to_single_netbuf(HTC_TARGET *target)
_failed:
while ((skb = qdf_nbuf_queue_remove(rx_sg_queue)) != NULL)
qdf_nbuf_free(skb);
htc_rx_nbuf_free(skb);
RESET_RX_SG_CONFIG(target);
return NULL;
@@ -478,7 +493,7 @@ QDF_STATUS htc_rx_completion_handler(void *Context, qdf_nbuf_t netbuf,
break;
}
qdf_nbuf_free(netbuf);
htc_rx_nbuf_free(netbuf);
netbuf = NULL;
break;
}
@@ -516,7 +531,7 @@ _out:
#endif
if (netbuf)
qdf_nbuf_free(netbuf);
htc_rx_nbuf_free(netbuf);
return status;