qcacmn: REO queue ref enhancement for Waikiki

In WIN BE chipsets, replace the REO tid
queue programming in FW via WMI with writing to a
Host managed table shared by HW and SW. REO HW will
pick the tid queue address from the table indexed by
peer id and tid number.

Change-Id: I8107ca5116425538329b11ae3519f02b32573bac
This commit is contained in:
Sumedh Baikady
2021-11-01 16:39:34 -07:00
committed by Madan Koyyalamudi
parent e54c2ef953
commit e4d9b0c2d7
17 changed files with 623 additions and 112 deletions

View File

@@ -1028,6 +1028,13 @@ struct hal_hw_txrx_ops {
#ifdef QCA_MONITOR_2_0_SUPPORT
void (*hal_txmon_status_free_buffer)(qdf_frag_t status_frag);
#endif /* QCA_MONITOR_2_0_SUPPORT */
void (*hal_reo_shared_qaddr_setup)(hal_soc_handle_t hal_soc_hdl);
void (*hal_reo_shared_qaddr_init)(hal_soc_handle_t hal_soc_hdl);
void (*hal_reo_shared_qaddr_detach)(hal_soc_handle_t hal_soc_hdl);
void (*hal_reo_shared_qaddr_write)(hal_soc_handle_t hal_soc_hdl,
uint16_t peer_id,
int tid,
qdf_dma_addr_t hw_qdesc_paddr);
};
/**
@@ -1084,6 +1091,22 @@ struct hal_reg_write_fail_history {
};
#endif
/**
* struct reo_queue_ref_table - Reo qref LUT addr
* @mlo_reo_qref_table_vaddr: MLO table vaddr
* @non_mlo_reo_qref_table_vaddr: Non MLO table vaddr
* @mlo_reo_qref_table_paddr: MLO table paddr
* @non_mlo_reo_qref_table_paddr: Non MLO table paddr
* @reo_qref_table_en: Enable flag
*/
struct reo_queue_ref_table {
uint64_t *mlo_reo_qref_table_vaddr;
uint64_t *non_mlo_reo_qref_table_vaddr;
qdf_dma_addr_t mlo_reo_qref_table_paddr;
qdf_dma_addr_t non_mlo_reo_qref_table_paddr;
uint8_t reo_qref_table_en;
};
/**
* struct hal_soc - HAL context to be used to access SRNG APIs
* (currently used by data path and
@@ -1165,6 +1188,8 @@ struct hal_soc {
#endif
/* flag to indicate cmn dmac rings in berryllium */
bool dmac_cmn_src_rxbuf_ring;
/* Reo queue ref table items */
struct reo_queue_ref_table reo_qref;
};
#if defined(FEATURE_HAL_DELAYED_REG_WRITE)
@@ -1227,4 +1252,14 @@ struct hal_srng *hal_ring_handle_to_hal_srng(hal_ring_handle_t hal_ring)
{
return (struct hal_srng *)hal_ring;
}
/* Size of REO queue reference table in Host
* 2k peers * 17 tids * 8bytes(rx_reo_queue_reference)
* = 278528 bytes
*/
#define REO_QUEUE_REF_NON_ML_TABLE_SIZE 278528
/* Calculated based on 512 MLO peers */
#define REO_QUEUE_REF_ML_TABLE_SIZE 69632
#define HAL_ML_PEER_ID_START 0x2000
#define HAL_PEER_ID_IS_MLO(peer_id) ((peer_id) & HAL_ML_PEER_ID_START)
#endif /* _HAL_INTERNAL_H_ */