qcacmn: Add support for Direct Link refill ring
Add support and ops for initialization and deinitialization of Direct Link refill ring. Change-Id: I2c7018c4f8411fb7a590cfbb8b991f9152b22397 CRs-Fixed: 3316656
This commit is contained in:

committed by
Madan Koyyalamudi

parent
4fb2121bbe
commit
99615e170d
@@ -573,6 +573,13 @@ int htt_srng_setup(struct htt_soc *soc, int mac_id,
|
||||
(lmac_id * HAL_MAX_RINGS_PER_LMAC))) {
|
||||
htt_ring_id = HTT_RXDMA_HOST_BUF_RING;
|
||||
htt_ring_type = HTT_SW_TO_HW_RING;
|
||||
#ifdef FEATURE_DIRECT_LINK
|
||||
} else if (srng_params.ring_id ==
|
||||
(HAL_SRNG_WMAC1_RX_DIRECT_LINK_SW_REFILL_RING +
|
||||
(lmac_id * HAL_MAX_RINGS_PER_LMAC))) {
|
||||
htt_ring_id = HTT_LPASS_TO_FW_RXBUF_RING;
|
||||
htt_ring_type = HTT_SW_TO_SW_RING;
|
||||
#endif
|
||||
} else {
|
||||
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: Ring %d currently not supported",
|
||||
|
@@ -46,6 +46,19 @@
|
||||
|
||||
#define INVALID_WBM_RING_NUM 0xF
|
||||
|
||||
#ifdef FEATURE_DIRECT_LINK
|
||||
#define DIRECT_LINK_REFILL_RING_ENTRIES 64
|
||||
#ifdef IPA_OFFLOAD
|
||||
#ifdef IPA_WDI3_VLAN_SUPPORT
|
||||
#define DIRECT_LINK_REFILL_RING_IDX 4
|
||||
#else
|
||||
#define DIRECT_LINK_REFILL_RING_IDX 3
|
||||
#endif
|
||||
#else
|
||||
#define DIRECT_LINK_REFILL_RING_IDX 2
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* struct htt_dbgfs_cfg - structure to maintain required htt data
|
||||
* @msg_word: htt msg sent to upper layer
|
||||
* @m: qdf debugfs file pointer
|
||||
@@ -4256,4 +4269,40 @@ void dp_rx_err_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
||||
* return: None
|
||||
*/
|
||||
void dp_pdev_update_fast_rx_flag(struct dp_soc *soc, struct dp_pdev *pdev);
|
||||
|
||||
#ifdef FEATURE_DIRECT_LINK
|
||||
/*
|
||||
* dp_setup_direct_link_refill_ring(): Setup direct link refill ring for pdev
|
||||
* @soc_hdl: DP SOC handle
|
||||
* @pdev_id: pdev id
|
||||
*
|
||||
* Return: Handle to SRNG
|
||||
*/
|
||||
struct dp_srng *dp_setup_direct_link_refill_ring(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id);
|
||||
|
||||
/*
|
||||
* dp_destroy_direct_link_refill_ring(): Destroy direct link refill ring for
|
||||
* pdev
|
||||
* @soc_hdl: DP SOC handle
|
||||
* @pdev_id: pdev id
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void dp_destroy_direct_link_refill_ring(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id);
|
||||
#else
|
||||
static inline
|
||||
struct dp_srng *dp_setup_direct_link_refill_ring(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline
|
||||
void dp_destroy_direct_link_refill_ring(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
#endif /* #ifndef _DP_INTERNAL_H_ */
|
||||
|
@@ -17157,3 +17157,54 @@ static QDF_STATUS dp_pdev_init_wifi3(struct cdp_soc_t *txrx_soc,
|
||||
return dp_pdev_init(txrx_soc, htc_handle, qdf_osdev, pdev_id);
|
||||
}
|
||||
|
||||
#ifdef FEATURE_DIRECT_LINK
|
||||
struct dp_srng *dp_setup_direct_link_refill_ring(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id)
|
||||
{
|
||||
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
|
||||
struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
|
||||
|
||||
if (!pdev) {
|
||||
dp_err("DP pdev is NULL");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (dp_srng_alloc(soc, &pdev->rx_refill_buf_ring4,
|
||||
RXDMA_BUF, DIRECT_LINK_REFILL_RING_ENTRIES, false)) {
|
||||
dp_err("SRNG alloc failed for rx_refill_buf_ring4");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (dp_srng_init(soc, &pdev->rx_refill_buf_ring4,
|
||||
RXDMA_BUF, DIRECT_LINK_REFILL_RING_IDX, 0)) {
|
||||
dp_err("SRNG init failed for rx_refill_buf_ring4");
|
||||
dp_srng_free(soc, &pdev->rx_refill_buf_ring4);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (htt_srng_setup(soc->htt_handle, pdev_id,
|
||||
pdev->rx_refill_buf_ring4.hal_srng, RXDMA_BUF)) {
|
||||
dp_srng_deinit(soc, &pdev->rx_refill_buf_ring4, RXDMA_BUF,
|
||||
DIRECT_LINK_REFILL_RING_IDX);
|
||||
dp_srng_free(soc, &pdev->rx_refill_buf_ring4);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return &pdev->rx_refill_buf_ring4;
|
||||
}
|
||||
|
||||
void dp_destroy_direct_link_refill_ring(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id)
|
||||
{
|
||||
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
|
||||
struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
|
||||
|
||||
if (!pdev) {
|
||||
dp_err("DP pdev is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
dp_srng_deinit(soc, &pdev->rx_refill_buf_ring4, RXDMA_BUF, 0);
|
||||
dp_srng_free(soc, &pdev->rx_refill_buf_ring4);
|
||||
}
|
||||
#endif
|
||||
|
@@ -2948,6 +2948,11 @@ struct dp_pdev {
|
||||
struct dp_srng rx_refill_buf_ring3;
|
||||
#endif
|
||||
|
||||
#ifdef FEATURE_DIRECT_LINK
|
||||
/* Fourth ring used to replenish rx buffers */
|
||||
struct dp_srng rx_refill_buf_ring4;
|
||||
#endif
|
||||
|
||||
/* Empty ring used by firmware to post rx buffers to the MAC */
|
||||
struct dp_srng rx_mac_buf_ring[MAX_RX_MAC_RINGS];
|
||||
|
||||
|
@@ -283,10 +283,11 @@ enum hal_srng_ring_id {
|
||||
HAL_SRNG_WMAC1_SW2RXDMA0_BUF2,
|
||||
#ifdef IPA_WDI3_VLAN_SUPPORT
|
||||
HAL_SRNG_WMAC1_SW2RXDMA0_BUF3,
|
||||
#endif
|
||||
#endif
|
||||
HAL_SRNG_WMAC1_SW2RXDMA1_BUF,
|
||||
#else
|
||||
HAL_SRNG_WMAC1_SW2RXDMA1_BUF,
|
||||
#ifdef FEATURE_DIRECT_LINK
|
||||
HAL_SRNG_WMAC1_RX_DIRECT_LINK_SW_REFILL_RING,
|
||||
#endif
|
||||
HAL_SRNG_WMAC1_SW2RXDMA2_BUF,
|
||||
HAL_SRNG_WMAC1_SW2RXDMA0_STATBUF,
|
||||
|
@@ -2606,7 +2606,9 @@ struct hal_hw_srng_config hw_srng_table_kiwi[] = {
|
||||
},
|
||||
{ /* RXDMA_BUF */
|
||||
.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA0_BUF0,
|
||||
#ifdef IPA_OFFLOAD
|
||||
#if defined(IPA_OFFLOAD) && defined(FEATURE_DIRECT_LINK)
|
||||
.max_rings = 4,
|
||||
#elif defined(IPA_OFFLOAD) || defined(FEATURE_DIRECT_LINK)
|
||||
.max_rings = 3,
|
||||
#else
|
||||
.max_rings = 2,
|
||||
|
Reference in New Issue
Block a user