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:

committed by
Rahul Choudhary

父節點
9b27c6e104
當前提交
cbe8170798
@@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user