mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 08:36:12 -04:00
qcacmn: Support multiple srng per module in DBR
It required to support multiple srng per module in direct buffer rx component.So extend the array "dbr_mod_param" in dbr pdev object and let it to support two more srngs per module. Change-Id: Ia2c649dacc3787cdc13b06f0b22c1c175fb451cc CRs-Fixed: 2523365
This commit is contained in:
parent
285561b9ab
commit
fe2a6185ad
4 changed files with 139 additions and 47 deletions
|
|
@ -138,12 +138,13 @@ void target_if_direct_buf_rx_register_tx_ops(
|
|||
* @mod_id: module id indicating the module using direct buffer rx framework
|
||||
* @paddr: Physical address of buffer for which cookie info is required
|
||||
* @cookie: cookie will be returned in this param
|
||||
* @srng_id: srng ID
|
||||
*
|
||||
* Return: QDF status of operation
|
||||
*/
|
||||
QDF_STATUS target_if_dbr_cookie_lookup(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t mod_id, qdf_dma_addr_t paddr,
|
||||
uint32_t *cookie);
|
||||
uint32_t *cookie, uint8_t srng_id);
|
||||
|
||||
/**
|
||||
* target_if_dbr_buf_release() - Notify direct buf that a previously provided
|
||||
|
|
@ -152,10 +153,11 @@ QDF_STATUS target_if_dbr_cookie_lookup(struct wlan_objmgr_pdev *pdev,
|
|||
* @mod_id: module id indicating the module using direct buffer rx framework
|
||||
* @paddr: Physical address of buffer for which cookie info is required
|
||||
* @cookie: cookie value corresponding to the paddr
|
||||
* @srng_id: srng ID
|
||||
*
|
||||
* Return: QDF status of operation
|
||||
*/
|
||||
QDF_STATUS target_if_dbr_buf_release(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t mod_id, qdf_dma_addr_t paddr,
|
||||
uint32_t cookie);
|
||||
uint32_t cookie, uint8_t srng_id);
|
||||
#endif /* _TARGET_IF_DIRECT_BUF_RX_API_H_ */
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ static QDF_STATUS populate_dbr_cap_mod_param(struct wlan_objmgr_pdev *pdev,
|
|||
|
||||
num_dbr_ring_caps = target_psoc_get_num_dbr_ring_caps(tgt_psoc_info);
|
||||
dbr_ring_cap = target_psoc_get_dbr_ring_caps(tgt_psoc_info);
|
||||
pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
|
||||
pdev_id = mod_param->pdev_id;
|
||||
|
||||
for (cap_idx = 0; cap_idx < num_dbr_ring_caps; cap_idx++) {
|
||||
if (dbr_ring_cap[cap_idx].pdev_id == pdev_id) {
|
||||
|
|
@ -170,10 +170,13 @@ QDF_STATUS target_if_direct_buf_rx_pdev_create_handler(
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
direct_buf_rx_info("sring number = %d", DBR_SRNG_NUM);
|
||||
dbr_pdev_obj->dbr_mod_param = qdf_mem_malloc(num_modules *
|
||||
DBR_SRNG_NUM *
|
||||
sizeof(struct direct_buf_rx_module_param));
|
||||
|
||||
if (!dbr_pdev_obj->dbr_mod_param) {
|
||||
direct_buf_rx_err("alloc dbr mod param fail");
|
||||
wlan_objmgr_pdev_component_obj_detach(pdev,
|
||||
WLAN_TARGET_IF_COMP_DIRECT_BUF_RX,
|
||||
dbr_pdev_obj);
|
||||
|
|
@ -181,7 +184,6 @@ QDF_STATUS target_if_direct_buf_rx_pdev_create_handler(
|
|||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
@ -190,7 +192,7 @@ QDF_STATUS target_if_direct_buf_rx_pdev_destroy_handler(
|
|||
{
|
||||
struct direct_buf_rx_pdev_obj *dbr_pdev_obj;
|
||||
QDF_STATUS status;
|
||||
uint8_t num_modules, mod_idx;
|
||||
uint8_t num_modules, mod_idx, srng_id;
|
||||
|
||||
if (!pdev) {
|
||||
direct_buf_rx_err("pdev context passed is null");
|
||||
|
|
@ -206,8 +208,11 @@ QDF_STATUS target_if_direct_buf_rx_pdev_destroy_handler(
|
|||
}
|
||||
|
||||
num_modules = dbr_pdev_obj->num_modules;
|
||||
for (mod_idx = 0; mod_idx < num_modules; mod_idx++)
|
||||
target_if_deinit_dbr_ring(pdev, dbr_pdev_obj, mod_idx);
|
||||
for (mod_idx = 0; mod_idx < num_modules; mod_idx++) {
|
||||
for (srng_id = 0; srng_id < DBR_SRNG_NUM; srng_id++)
|
||||
target_if_deinit_dbr_ring(pdev, dbr_pdev_obj,
|
||||
mod_idx, srng_id);
|
||||
}
|
||||
|
||||
qdf_mem_free(dbr_pdev_obj->dbr_mod_param);
|
||||
dbr_pdev_obj->dbr_mod_param = NULL;
|
||||
|
|
@ -495,7 +500,7 @@ static QDF_STATUS target_if_dbr_init_ring(struct wlan_objmgr_pdev *pdev,
|
|||
ring_params.num_entries = num_entries;
|
||||
srng = hal_srng_setup(dbr_psoc_obj->hal_soc, DIR_BUF_RX_DMA_SRC,
|
||||
mod_param->mod_id,
|
||||
wlan_objmgr_pdev_get_pdev_id(pdev), &ring_params);
|
||||
mod_param->pdev_id, &ring_params);
|
||||
|
||||
if (!srng) {
|
||||
direct_buf_rx_err("srng setup failed");
|
||||
|
|
@ -585,7 +590,7 @@ static QDF_STATUS target_if_dbr_cfg_tgt(struct wlan_objmgr_pdev *pdev,
|
|||
}
|
||||
|
||||
direct_buf_rx_debug("Sending DBR Ring CFG to target");
|
||||
dbr_cfg_req.pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
|
||||
dbr_cfg_req.pdev_id = mod_param->pdev_id;
|
||||
/* Module ID numbering starts from 1 in FW. need to fix it */
|
||||
dbr_cfg_req.mod_id = mod_param->mod_id;
|
||||
dbr_cfg_req.base_paddr_lo = (uint64_t)dbr_ring_cfg->base_paddr_aligned
|
||||
|
|
@ -625,19 +630,20 @@ static QDF_STATUS target_if_dbr_cfg_tgt(struct wlan_objmgr_pdev *pdev,
|
|||
|
||||
static QDF_STATUS target_if_init_dbr_ring(struct wlan_objmgr_pdev *pdev,
|
||||
struct direct_buf_rx_pdev_obj *dbr_pdev_obj,
|
||||
enum DBR_MODULE mod_id)
|
||||
enum DBR_MODULE mod_id, uint8_t srng_id)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
struct direct_buf_rx_module_param *mod_param;
|
||||
|
||||
direct_buf_rx_info("Init DBR ring for module %d", mod_id);
|
||||
direct_buf_rx_info("Init DBR ring for module %d, srng %d",
|
||||
mod_id, srng_id);
|
||||
|
||||
if (!dbr_pdev_obj) {
|
||||
direct_buf_rx_err("dir buf rx object is null");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
mod_param = &(dbr_pdev_obj->dbr_mod_param[mod_id]);
|
||||
mod_param = &(dbr_pdev_obj->dbr_mod_param[mod_id][srng_id]);
|
||||
|
||||
if (!mod_param) {
|
||||
direct_buf_rx_err("dir buf rx module param is null");
|
||||
|
|
@ -647,6 +653,8 @@ static QDF_STATUS target_if_init_dbr_ring(struct wlan_objmgr_pdev *pdev,
|
|||
direct_buf_rx_info("mod_param %pK", mod_param);
|
||||
|
||||
mod_param->mod_id = mod_id;
|
||||
mod_param->pdev_id = dbr_get_pdev_id(
|
||||
srng_id, wlan_objmgr_pdev_get_pdev_id(pdev));
|
||||
|
||||
/* Initialize DMA ring now */
|
||||
status = target_if_dbr_init_srng(pdev, mod_param);
|
||||
|
|
@ -665,7 +673,7 @@ static QDF_STATUS target_if_init_dbr_ring(struct wlan_objmgr_pdev *pdev,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
dbr_srng_init_failed:
|
||||
target_if_deinit_dbr_ring(pdev, dbr_pdev_obj, mod_id);
|
||||
target_if_deinit_dbr_ring(pdev, dbr_pdev_obj, mod_id, srng_id);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
@ -679,6 +687,8 @@ QDF_STATUS target_if_direct_buf_rx_module_register(
|
|||
QDF_STATUS status;
|
||||
struct direct_buf_rx_pdev_obj *dbr_pdev_obj;
|
||||
struct dbr_module_config *config = NULL;
|
||||
struct direct_buf_rx_module_param *mod_param;
|
||||
uint8_t srng_id;
|
||||
|
||||
if (!pdev) {
|
||||
direct_buf_rx_err("pdev context passed is null");
|
||||
|
|
@ -715,13 +725,19 @@ QDF_STATUS target_if_direct_buf_rx_module_register(
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
config = &dbr_pdev_obj->dbr_mod_param[mod_id].dbr_config;
|
||||
dbr_pdev_obj->dbr_mod_param[mod_id].dbr_rsp_handler =
|
||||
dbr_rsp_handler;
|
||||
*config = *dbr_config;
|
||||
for (srng_id = 0; srng_id < DBR_SRNG_NUM; srng_id++) {
|
||||
mod_param = &dbr_pdev_obj->dbr_mod_param[mod_id][srng_id];
|
||||
config = &mod_param->dbr_config;
|
||||
mod_param->dbr_rsp_handler = dbr_rsp_handler;
|
||||
*config = *dbr_config;
|
||||
|
||||
status = target_if_init_dbr_ring(pdev, dbr_pdev_obj,
|
||||
(enum DBR_MODULE)mod_id);
|
||||
status = target_if_init_dbr_ring(pdev, dbr_pdev_obj,
|
||||
(enum DBR_MODULE)mod_id,
|
||||
srng_id);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
direct_buf_rx_err("init dbr ring fail, srng_id %d, status %d",
|
||||
srng_id, status);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
|
@ -731,6 +747,7 @@ QDF_STATUS target_if_direct_buf_rx_module_unregister(
|
|||
{
|
||||
QDF_STATUS status;
|
||||
struct direct_buf_rx_pdev_obj *dbr_pdev_obj;
|
||||
uint8_t srng_id;
|
||||
|
||||
if (!pdev) {
|
||||
direct_buf_rx_err("pdev context passed is null");
|
||||
|
|
@ -763,7 +780,11 @@ QDF_STATUS target_if_direct_buf_rx_module_unregister(
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
status = target_if_deinit_dbr_ring(pdev, dbr_pdev_obj, mod_id);
|
||||
for (srng_id = 0; srng_id < DBR_SRNG_NUM; srng_id++) {
|
||||
status = target_if_deinit_dbr_ring(pdev, dbr_pdev_obj,
|
||||
mod_id, srng_id);
|
||||
direct_buf_rx_info("status %d", status);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
|
@ -787,7 +808,7 @@ static void *target_if_dbr_vaddr_lookup(
|
|||
|
||||
QDF_STATUS target_if_dbr_cookie_lookup(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t mod_id, qdf_dma_addr_t paddr,
|
||||
uint32_t *cookie)
|
||||
uint32_t *cookie, uint8_t srng_id)
|
||||
{
|
||||
struct direct_buf_rx_buf_info *dbr_buf_pool;
|
||||
struct direct_buf_rx_ring_cfg *dbr_ring_cfg;
|
||||
|
|
@ -802,7 +823,7 @@ QDF_STATUS target_if_dbr_cookie_lookup(struct wlan_objmgr_pdev *pdev,
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
mod_param = &dbr_pdev_obj->dbr_mod_param[mod_id];
|
||||
mod_param = &dbr_pdev_obj->dbr_mod_param[mod_id][srng_id];
|
||||
if (!mod_param) {
|
||||
direct_buf_rx_err("dir buf rx module param is null");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
|
@ -824,7 +845,7 @@ QDF_STATUS target_if_dbr_cookie_lookup(struct wlan_objmgr_pdev *pdev,
|
|||
|
||||
QDF_STATUS target_if_dbr_buf_release(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t mod_id, qdf_dma_addr_t paddr,
|
||||
uint32_t cookie)
|
||||
uint32_t cookie, uint8_t srng_id)
|
||||
{
|
||||
struct direct_buf_rx_module_param *mod_param;
|
||||
struct direct_buf_rx_pdev_obj *dbr_pdev_obj;
|
||||
|
|
@ -838,7 +859,7 @@ QDF_STATUS target_if_dbr_buf_release(struct wlan_objmgr_pdev *pdev,
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
mod_param = &dbr_pdev_obj->dbr_mod_param[mod_id];
|
||||
mod_param = &dbr_pdev_obj->dbr_mod_param[mod_id][srng_id];
|
||||
if (!mod_param) {
|
||||
direct_buf_rx_err("dir buf rx module param is null");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
|
@ -904,6 +925,50 @@ static QDF_STATUS target_if_get_dbr_data(struct wlan_objmgr_pdev *pdev,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#ifdef DBR_MULTI_SRNG_ENABLE
|
||||
/**
|
||||
* dbr_get_pdev_and_srng_id() - get pdev object and srng id
|
||||
*
|
||||
* @psoc: pointer to psoc object
|
||||
* @pdev_id: pdev id from wmi_pdev_dma_ring_buf_release eventid
|
||||
* @srng_id: pointer to return srng id
|
||||
*
|
||||
* Return : pointer to pdev
|
||||
*/
|
||||
struct wlan_objmgr_pdev *
|
||||
dbr_get_pdev_and_srng_id(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
|
||||
uint8_t *srng_id)
|
||||
{
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
wlan_objmgr_ref_dbgid dbr_mod_id = WLAN_DIRECT_BUF_RX_ID;
|
||||
|
||||
pdev = wlan_objmgr_get_pdev_by_id(psoc, pdev_id, dbr_mod_id);
|
||||
if (!pdev) {
|
||||
pdev = wlan_objmgr_get_pdev_by_id(psoc, TGT_WMI_PDEV_ID_SOC,
|
||||
dbr_mod_id);
|
||||
if (pdev) {
|
||||
direct_buf_rx_info("update srng id from %d to %d",
|
||||
*srng_id, pdev_id);
|
||||
*srng_id = pdev_id;
|
||||
}
|
||||
}
|
||||
|
||||
return pdev;
|
||||
}
|
||||
#else
|
||||
struct wlan_objmgr_pdev *
|
||||
dbr_get_pdev_and_srng_id(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
|
||||
uint8_t *srng_id)
|
||||
{
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
wlan_objmgr_ref_dbgid dbr_mod_id = WLAN_DIRECT_BUF_RX_ID;
|
||||
|
||||
pdev = wlan_objmgr_get_pdev_by_id(psoc, pdev_id, dbr_mod_id);
|
||||
|
||||
return pdev;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int target_if_direct_buf_rx_rsp_event_handler(ol_scn_t scn,
|
||||
uint8_t *data_buf,
|
||||
uint32_t data_len)
|
||||
|
|
@ -921,6 +986,7 @@ static int target_if_direct_buf_rx_rsp_event_handler(ol_scn_t scn,
|
|||
struct direct_buf_rx_module_param *mod_param;
|
||||
struct wmi_unified *wmi_handle;
|
||||
wlan_objmgr_ref_dbgid dbr_mod_id = WLAN_DIRECT_BUF_RX_ID;
|
||||
uint8_t srng_id = 0;
|
||||
|
||||
direct_buf_rx_enter();
|
||||
|
||||
|
|
@ -945,9 +1011,11 @@ static int target_if_direct_buf_rx_rsp_event_handler(ol_scn_t scn,
|
|||
direct_buf_rx_info("Num buf release entry = %d",
|
||||
dbr_rsp.num_buf_release_entry);
|
||||
|
||||
pdev = wlan_objmgr_get_pdev_by_id(psoc, dbr_rsp.pdev_id, dbr_mod_id);
|
||||
if (!pdev) {
|
||||
direct_buf_rx_err("pdev is null");
|
||||
pdev = dbr_get_pdev_and_srng_id(psoc, (uint8_t)dbr_rsp.pdev_id,
|
||||
&srng_id);
|
||||
if (!pdev || (srng_id >= DBR_SRNG_NUM)) {
|
||||
direct_buf_rx_err("invalid pdev or srng, pdev %pK, srng %d",
|
||||
pdev, srng_id);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
|
|
@ -965,7 +1033,7 @@ static int target_if_direct_buf_rx_rsp_event_handler(ol_scn_t scn,
|
|||
wlan_objmgr_pdev_release_ref(pdev, dbr_mod_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
mod_param = &(dbr_pdev_obj->dbr_mod_param[dbr_rsp.mod_id]);
|
||||
mod_param = &(dbr_pdev_obj->dbr_mod_param[dbr_rsp.mod_id][srng_id]);
|
||||
|
||||
if (!mod_param) {
|
||||
direct_buf_rx_err("dir buf rx module param is null");
|
||||
|
|
@ -1043,12 +1111,12 @@ static QDF_STATUS target_if_dbr_empty_ring(struct wlan_objmgr_pdev *pdev,
|
|||
dbr_ring_cap = mod_param->dbr_ring_cap;
|
||||
dbr_buf_pool = mod_param->dbr_buf_pool;
|
||||
|
||||
direct_buf_rx_info("dbr_ring_cfg %pK, dbr_ring_cap %pK dbr_buf_pool %pK",
|
||||
direct_buf_rx_debug("dbr_ring_cfg %pK, ring_cap %pK buf_pool %pK",
|
||||
dbr_ring_cfg, dbr_ring_cap, dbr_buf_pool);
|
||||
|
||||
for (idx = 0; idx < dbr_ring_cfg->num_ptr - 1; idx++) {
|
||||
direct_buf_rx_info("dbr buf pool unmap and free for ptr %d",
|
||||
idx);
|
||||
direct_buf_rx_debug("dbr buf pool unmap and free for ptr %d",
|
||||
idx);
|
||||
qdf_mem_unmap_nbytes_single(dbr_psoc_obj->osdev,
|
||||
(qdf_dma_addr_t)dbr_buf_pool[idx].paddr,
|
||||
QDF_DMA_FROM_DEVICE,
|
||||
|
|
@ -1115,12 +1183,12 @@ static QDF_STATUS target_if_dbr_deinit_srng(
|
|||
|
||||
QDF_STATUS target_if_deinit_dbr_ring(struct wlan_objmgr_pdev *pdev,
|
||||
struct direct_buf_rx_pdev_obj *dbr_pdev_obj,
|
||||
enum DBR_MODULE mod_id)
|
||||
enum DBR_MODULE mod_id, uint8_t srng_id)
|
||||
{
|
||||
struct direct_buf_rx_module_param *mod_param;
|
||||
|
||||
direct_buf_rx_enter();
|
||||
mod_param = &(dbr_pdev_obj->dbr_mod_param[mod_id]);
|
||||
mod_param = &(dbr_pdev_obj->dbr_mod_param[mod_id][srng_id]);
|
||||
|
||||
if (!mod_param) {
|
||||
direct_buf_rx_err("dir buf rx module param is null");
|
||||
|
|
@ -1187,6 +1255,7 @@ QDF_STATUS target_if_direct_buf_rx_print_ring_stat(
|
|||
struct direct_buf_rx_module_param *mod_param;
|
||||
struct direct_buf_rx_ring_cfg *dbr_ring_cfg;
|
||||
uint8_t num_modules, mod_idx;
|
||||
uint8_t srng_id;
|
||||
|
||||
if (!pdev) {
|
||||
direct_buf_rx_err("pdev is null");
|
||||
|
|
@ -1204,14 +1273,17 @@ QDF_STATUS target_if_direct_buf_rx_print_ring_stat(
|
|||
direct_buf_rx_err("| Module ID | Module | Head Idx | Tail Idx |");
|
||||
direct_buf_rx_err("--------------------------------------------------");
|
||||
for (mod_idx = 0; mod_idx < num_modules; mod_idx++) {
|
||||
mod_param = &dbr_pdev_obj->dbr_mod_param[mod_idx];
|
||||
dbr_ring_cfg = mod_param->dbr_ring_cfg;
|
||||
srng = dbr_ring_cfg->srng;
|
||||
hal_get_sw_hptp(hal_soc, srng, &tp, &hp);
|
||||
direct_buf_rx_err("|%11d|%14s|%10x|%10x|",
|
||||
mod_idx,
|
||||
g_dbr_module_name[mod_idx].module_name_str,
|
||||
hp, tp);
|
||||
for (srng_id = 0; srng_id < DBR_SRNG_NUM; srng_id++) {
|
||||
mod_param =
|
||||
&dbr_pdev_obj->dbr_mod_param[mod_idx][srng_id];
|
||||
dbr_ring_cfg = mod_param->dbr_ring_cfg;
|
||||
srng = dbr_ring_cfg->srng;
|
||||
hal_get_sw_hptp(hal_soc, srng, &tp, &hp);
|
||||
direct_buf_rx_err("|%11d|%14s|%10x|%10x|",
|
||||
mod_idx, g_dbr_module_name[mod_idx].
|
||||
module_name_str,
|
||||
hp, tp);
|
||||
}
|
||||
}
|
||||
direct_buf_rx_err("--------------------------------------------------");
|
||||
|
||||
|
|
@ -1221,7 +1293,7 @@ QDF_STATUS target_if_direct_buf_rx_print_ring_stat(
|
|||
QDF_STATUS
|
||||
target_if_direct_buf_rx_get_ring_params(struct wlan_objmgr_pdev *pdev,
|
||||
struct module_ring_params *param,
|
||||
int mod_id)
|
||||
uint8_t mod_id, uint8_t srng_id)
|
||||
{
|
||||
struct direct_buf_rx_pdev_obj *dbr_pdev_obj;
|
||||
struct direct_buf_rx_module_param *dbr_mod_param;
|
||||
|
|
@ -1239,7 +1311,13 @@ target_if_direct_buf_rx_get_ring_params(struct wlan_objmgr_pdev *pdev,
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
dbr_mod_param = &dbr_pdev_obj->dbr_mod_param[mod_id];
|
||||
if ((mod_id >= DBR_MODULE_MAX) || (srng_id >= DBR_SRNG_NUM)) {
|
||||
direct_buf_rx_err("invalid params, mod id %d, srng id %d",
|
||||
mod_id, srng_id);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
dbr_mod_param = &dbr_pdev_obj->dbr_mod_param[mod_id][srng_id];
|
||||
param->num_bufs = dbr_mod_param->dbr_ring_cfg->num_ptr;
|
||||
param->buf_size = dbr_mod_param->dbr_ring_cfg->buf_size;
|
||||
|
||||
|
|
|
|||
|
|
@ -29,6 +29,14 @@ struct direct_buf_rx_data;
|
|||
|
||||
#define DBR_RING_BASE_ALIGN 8
|
||||
|
||||
#ifdef DBR_MULTI_SRNG_ENABLE
|
||||
#define DBR_SRNG_NUM 2
|
||||
#define dbr_get_pdev_id(srng_id, pdev_id) (srng_id)
|
||||
#else
|
||||
#define DBR_SRNG_NUM 1
|
||||
#define dbr_get_pdev_id(srng_id, pdev_id) (pdev_id)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* struct direct_buf_rx_info - direct buffer rx operation info struct
|
||||
* @cookie: SW cookie used to get the virtual address
|
||||
|
|
@ -83,6 +91,7 @@ struct direct_buf_rx_ring_cap {
|
|||
/**
|
||||
* struct direct_buf_rx_module_param - DMA module param
|
||||
* @mod_id: Module ID
|
||||
* @pdev_id: pdev ID
|
||||
* @dbr_config: Pointer to dirct buf rx module configuration struct
|
||||
* @dbr_ring_cap: Pointer to direct buf rx ring capabilities struct
|
||||
* @dbr_ring_cfg: Pointer to direct buf rx ring config struct
|
||||
|
|
@ -91,6 +100,7 @@ struct direct_buf_rx_ring_cap {
|
|||
*/
|
||||
struct direct_buf_rx_module_param {
|
||||
enum DBR_MODULE mod_id;
|
||||
uint8_t pdev_id;
|
||||
struct dbr_module_config dbr_config;
|
||||
struct direct_buf_rx_ring_cap *dbr_ring_cap;
|
||||
struct direct_buf_rx_ring_cfg *dbr_ring_cfg;
|
||||
|
|
@ -106,7 +116,7 @@ struct direct_buf_rx_module_param {
|
|||
*/
|
||||
struct direct_buf_rx_pdev_obj {
|
||||
uint32_t num_modules;
|
||||
struct direct_buf_rx_module_param *dbr_mod_param;
|
||||
struct direct_buf_rx_module_param (*dbr_mod_param)[DBR_SRNG_NUM];
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -211,12 +221,13 @@ QDF_STATUS target_if_direct_buf_rx_psoc_destroy_handler(
|
|||
* @pdev: pointer to pdev object
|
||||
* @dbr_pdev_obj: pointer to direct buffer rx module pdev obj
|
||||
* @mod_id: module id indicating the module using direct buffer rx framework
|
||||
* @srng_id: srng ID
|
||||
*
|
||||
* Return : QDF status of operation
|
||||
*/
|
||||
QDF_STATUS target_if_deinit_dbr_ring(struct wlan_objmgr_pdev *pdev,
|
||||
struct direct_buf_rx_pdev_obj *dbr_pdev_obj,
|
||||
enum DBR_MODULE mod_id);
|
||||
enum DBR_MODULE mod_id, uint8_t srng_id);
|
||||
/**
|
||||
* target_if_direct_buf_rx_module_register() - Function to register to direct
|
||||
* buffer rx module
|
||||
|
|
@ -253,10 +264,11 @@ QDF_STATUS target_if_direct_buf_rx_module_unregister(
|
|||
* @pdev: pointer to pdev object
|
||||
* @module_ring_params: pointer to store ring params
|
||||
* @mod_id: module idindicating module using direct buffer rx framework
|
||||
* @srng_id: srng ID
|
||||
*/
|
||||
QDF_STATUS
|
||||
target_if_direct_buf_rx_get_ring_params(struct wlan_objmgr_pdev *pdev,
|
||||
struct module_ring_params *param,
|
||||
int mod_id);
|
||||
uint8_t mod_id, uint8_t srng_id);
|
||||
|
||||
#endif /* _TARGET_IF_DIRECT_BUF_RX_MAIN_H_ */
|
||||
|
|
|
|||
|
|
@ -613,7 +613,7 @@ struct wlan_lmac_if_direct_buf_rx_tx_ops {
|
|||
QDF_STATUS (*direct_buf_rx_get_ring_params)
|
||||
(struct wlan_objmgr_pdev *pdev,
|
||||
struct module_ring_params *param,
|
||||
int module_id);
|
||||
uint8_t module_id, uint8_t srng_id);
|
||||
};
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue