qcacmn: Extract meta data from dbr event
Extract meta data from the dbr wmi event. CRs-Fixed: 2219818 Change-Id: Ib19588775060e75017e9777206132a0efeec6223
This commit is contained in:

committed by
nshrivas

parent
3b0f9169c5
commit
3d32949b42
@@ -43,6 +43,8 @@
|
|||||||
#define direct_buf_rx_exit() \
|
#define direct_buf_rx_exit() \
|
||||||
direct_buf_rx_logfl(QDF_TRACE_LEVEL_DEBUG, "exit")
|
direct_buf_rx_logfl(QDF_TRACE_LEVEL_DEBUG, "exit")
|
||||||
|
|
||||||
|
#define DBR_MAX_CHAINS (8)
|
||||||
|
|
||||||
struct wlan_objmgr_psoc;
|
struct wlan_objmgr_psoc;
|
||||||
struct wlan_lmac_if_tx_ops;
|
struct wlan_lmac_if_tx_ops;
|
||||||
|
|
||||||
@@ -50,10 +52,14 @@ struct wlan_lmac_if_tx_ops;
|
|||||||
* struct direct_buf_rx_data - direct buffer rx data
|
* struct direct_buf_rx_data - direct buffer rx data
|
||||||
* @dbr_len: Length of the buffer DMAed
|
* @dbr_len: Length of the buffer DMAed
|
||||||
* @vaddr: Virtual address of the buffer that has DMAed data
|
* @vaddr: Virtual address of the buffer that has DMAed data
|
||||||
|
* @meta_data_valid: Indicates that metadata is valid
|
||||||
|
* @meta_data: Meta data
|
||||||
*/
|
*/
|
||||||
struct direct_buf_rx_data {
|
struct direct_buf_rx_data {
|
||||||
size_t dbr_len;
|
size_t dbr_len;
|
||||||
void *vaddr;
|
void *vaddr;
|
||||||
|
bool meta_data_valid;
|
||||||
|
struct direct_buf_rx_metadata meta_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <qdf_status.h>
|
#include <qdf_status.h>
|
||||||
|
#include <wmi_unified_api.h>
|
||||||
#include <target_if_direct_buf_rx_api.h>
|
#include <target_if_direct_buf_rx_api.h>
|
||||||
#include <wlan_objmgr_cmn.h>
|
#include <wlan_objmgr_cmn.h>
|
||||||
#include <wlan_objmgr_global_obj.h>
|
#include <wlan_objmgr_global_obj.h>
|
||||||
|
@@ -832,6 +832,13 @@ static int target_if_direct_buf_rx_rsp_event_handler(ol_scn_t scn,
|
|||||||
dbr_rsp.dbr_entries = qdf_mem_malloc(dbr_rsp.num_buf_release_entry *
|
dbr_rsp.dbr_entries = qdf_mem_malloc(dbr_rsp.num_buf_release_entry *
|
||||||
sizeof(struct direct_buf_rx_entry));
|
sizeof(struct direct_buf_rx_entry));
|
||||||
|
|
||||||
|
if (dbr_rsp.num_meta_data_entry > dbr_rsp.num_buf_release_entry) {
|
||||||
|
direct_buf_rx_err("More than expected number of metadata");
|
||||||
|
wlan_objmgr_pdev_release_ref(pdev,
|
||||||
|
WLAN_DIRECT_BUF_RX_ID);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < dbr_rsp.num_buf_release_entry; i++) {
|
for (i = 0; i < dbr_rsp.num_buf_release_entry; i++) {
|
||||||
if (wmi_extract_dbr_buf_release_entry(
|
if (wmi_extract_dbr_buf_release_entry(
|
||||||
GET_WMI_HDL_FROM_PSOC(psoc), data_buf, i,
|
GET_WMI_HDL_FROM_PSOC(psoc), data_buf, i,
|
||||||
@@ -851,6 +858,14 @@ static int target_if_direct_buf_rx_rsp_event_handler(ol_scn_t scn,
|
|||||||
WLAN_DIRECT_BUF_RX_ID);
|
WLAN_DIRECT_BUF_RX_ID);
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dbr_data.meta_data_valid = false;
|
||||||
|
if (i < dbr_rsp.num_meta_data_entry) {
|
||||||
|
if (wmi_extract_dbr_buf_metadata(
|
||||||
|
GET_WMI_HDL_FROM_PSOC(psoc), data_buf, i,
|
||||||
|
&dbr_data.meta_data) == QDF_STATUS_SUCCESS)
|
||||||
|
dbr_data.meta_data_valid = true;
|
||||||
|
}
|
||||||
ret = mod_param->dbr_rsp_handler(pdev, &dbr_data);
|
ret = mod_param->dbr_rsp_handler(pdev, &dbr_data);
|
||||||
status = target_if_dbr_replenish_ring(pdev, mod_param,
|
status = target_if_dbr_replenish_ring(pdev, mod_param,
|
||||||
dbr_data.vaddr, cookie);
|
dbr_data.vaddr, cookie);
|
||||||
|
@@ -1830,6 +1830,22 @@ QDF_STATUS wmi_extract_dbr_buf_release_entry(
|
|||||||
void *wmi_hdl,
|
void *wmi_hdl,
|
||||||
uint8_t *evt_buf, uint8_t idx,
|
uint8_t *evt_buf, uint8_t idx,
|
||||||
struct direct_buf_rx_entry *param);
|
struct direct_buf_rx_entry *param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wmi_extract_dbr_buf_metadata: Extract direct buffer metadata
|
||||||
|
*
|
||||||
|
* @wmi_hdl: WMI handle
|
||||||
|
* @evt_buf: Event buffer
|
||||||
|
* @idx: Index of the module for which capability is received
|
||||||
|
* @param: Pointer to direct buffer metadata
|
||||||
|
*
|
||||||
|
* Return: QDF status of operation
|
||||||
|
*/
|
||||||
|
QDF_STATUS wmi_extract_dbr_buf_metadata(
|
||||||
|
void *wmi_hdl,
|
||||||
|
uint8_t *evt_buf, uint8_t idx,
|
||||||
|
struct direct_buf_rx_metadata *param);
|
||||||
|
|
||||||
QDF_STATUS wmi_extract_pdev_utf_event(void *wmi_hdl,
|
QDF_STATUS wmi_extract_pdev_utf_event(void *wmi_hdl,
|
||||||
uint8_t *evt_buf,
|
uint8_t *evt_buf,
|
||||||
struct wmi_host_pdev_utf_event *param);
|
struct wmi_host_pdev_utf_event *param);
|
||||||
|
@@ -8160,6 +8160,15 @@ struct wdsentry {
|
|||||||
#define WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA_SET(dword, val) \
|
#define WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA_SET(dword, val) \
|
||||||
WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA)
|
WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct direct_buf_rx_metadata: direct buffer metadata
|
||||||
|
*
|
||||||
|
* @noisefloor: noisefloor
|
||||||
|
*/
|
||||||
|
struct direct_buf_rx_metadata {
|
||||||
|
int32_t noisefloor[WMI_HOST_MAX_NUM_CHAINS];
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct direct_buf_rx_entry: direct buffer rx release entry structure
|
* struct direct_buf_rx_entry: direct buffer rx release entry structure
|
||||||
*
|
*
|
||||||
@@ -8185,6 +8194,7 @@ struct direct_buf_rx_rsp {
|
|||||||
uint32_t pdev_id;
|
uint32_t pdev_id;
|
||||||
uint32_t mod_id;
|
uint32_t mod_id;
|
||||||
uint32_t num_buf_release_entry;
|
uint32_t num_buf_release_entry;
|
||||||
|
uint32_t num_meta_data_entry;
|
||||||
struct direct_buf_rx_entry *dbr_entries;
|
struct direct_buf_rx_entry *dbr_entries;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1425,6 +1425,11 @@ QDF_STATUS (*extract_dbr_buf_release_entry)(
|
|||||||
uint8_t *evt_buf, uint8_t idx,
|
uint8_t *evt_buf, uint8_t idx,
|
||||||
struct direct_buf_rx_entry *param);
|
struct direct_buf_rx_entry *param);
|
||||||
|
|
||||||
|
QDF_STATUS (*extract_dbr_buf_metadata)(
|
||||||
|
wmi_unified_t wmi_handle,
|
||||||
|
uint8_t *evt_buf, uint8_t idx,
|
||||||
|
struct direct_buf_rx_metadata *param);
|
||||||
|
|
||||||
QDF_STATUS (*extract_pdev_utf_event)(wmi_unified_t wmi_hdl,
|
QDF_STATUS (*extract_pdev_utf_event)(wmi_unified_t wmi_hdl,
|
||||||
uint8_t *evt_buf,
|
uint8_t *evt_buf,
|
||||||
struct wmi_host_pdev_utf_event *param);
|
struct wmi_host_pdev_utf_event *param);
|
||||||
|
@@ -6907,6 +6907,21 @@ QDF_STATUS wmi_extract_dbr_buf_release_entry(
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDF_STATUS wmi_extract_dbr_buf_metadata(
|
||||||
|
void *wmi_hdl,
|
||||||
|
uint8_t *evt_buf, uint8_t idx,
|
||||||
|
struct direct_buf_rx_metadata *param)
|
||||||
|
{
|
||||||
|
wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
|
||||||
|
|
||||||
|
if (wmi_handle->ops->extract_dbr_buf_metadata)
|
||||||
|
return wmi_handle->ops->extract_dbr_buf_metadata(
|
||||||
|
wmi_handle,
|
||||||
|
evt_buf, idx, param);
|
||||||
|
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wmi_extract_pdev_utf_event() -
|
* wmi_extract_pdev_utf_event() -
|
||||||
* extract UTF data from pdev utf event
|
* extract UTF data from pdev utf event
|
||||||
|
@@ -20070,6 +20070,7 @@ static QDF_STATUS extract_dbr_buf_release_fixed_tlv(wmi_unified_t wmi_handle,
|
|||||||
ev->pdev_id);
|
ev->pdev_id);
|
||||||
param->mod_id = ev->mod_id;
|
param->mod_id = ev->mod_id;
|
||||||
param->num_buf_release_entry = ev->num_buf_release_entry;
|
param->num_buf_release_entry = ev->num_buf_release_entry;
|
||||||
|
param->num_meta_data_entry = ev->num_meta_data_entry;
|
||||||
WMI_LOGD("%s:pdev id %d mod id %d num buf release entry %d\n", __func__,
|
WMI_LOGD("%s:pdev id %d mod id %d num buf release entry %d\n", __func__,
|
||||||
param->pdev_id, param->mod_id, param->num_buf_release_entry);
|
param->pdev_id, param->mod_id, param->num_buf_release_entry);
|
||||||
|
|
||||||
@@ -20101,6 +20102,29 @@ static QDF_STATUS extract_dbr_buf_release_entry_tlv(wmi_unified_t wmi_handle,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QDF_STATUS extract_dbr_buf_metadata_tlv(
|
||||||
|
wmi_unified_t wmi_handle, uint8_t *event,
|
||||||
|
uint8_t idx, struct direct_buf_rx_metadata *param)
|
||||||
|
{
|
||||||
|
WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *param_buf;
|
||||||
|
wmi_dma_buf_release_spectral_meta_data *entry;
|
||||||
|
|
||||||
|
param_buf = (WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID_param_tlvs *)event;
|
||||||
|
if (!param_buf)
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
|
||||||
|
entry = ¶m_buf->meta_data[idx];
|
||||||
|
|
||||||
|
if (!entry) {
|
||||||
|
WMI_LOGE("%s: Entry is NULL\n", __func__);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
qdf_mem_copy(param->noisefloor, entry->noise_floor,
|
||||||
|
sizeof(entry->noise_floor));
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* extract_dcs_interference_type_tlv() - extract dcs interference type
|
* extract_dcs_interference_type_tlv() - extract dcs interference type
|
||||||
* from event
|
* from event
|
||||||
@@ -22730,6 +22754,7 @@ struct wmi_ops tlv_ops = {
|
|||||||
extract_dbr_ring_cap_service_ready_ext_tlv,
|
extract_dbr_ring_cap_service_ready_ext_tlv,
|
||||||
.extract_dbr_buf_release_fixed = extract_dbr_buf_release_fixed_tlv,
|
.extract_dbr_buf_release_fixed = extract_dbr_buf_release_fixed_tlv,
|
||||||
.extract_dbr_buf_release_entry = extract_dbr_buf_release_entry_tlv,
|
.extract_dbr_buf_release_entry = extract_dbr_buf_release_entry_tlv,
|
||||||
|
.extract_dbr_buf_metadata = extract_dbr_buf_metadata_tlv,
|
||||||
.extract_pdev_utf_event = extract_pdev_utf_event_tlv,
|
.extract_pdev_utf_event = extract_pdev_utf_event_tlv,
|
||||||
.wmi_set_htc_tx_tag = wmi_set_htc_tx_tag_tlv,
|
.wmi_set_htc_tx_tag = wmi_set_htc_tx_tag_tlv,
|
||||||
.extract_dcs_interference_type = extract_dcs_interference_type_tlv,
|
.extract_dcs_interference_type = extract_dcs_interference_type_tlv,
|
||||||
|
Reference in New Issue
Block a user