qcacmn: Add support for checksum from FW for pktlog
If the FW sends a pktlog checksum in the FW ready event, store that in pl_dev and use it as buf_hdr.version in the pktlog buffer header. Also, use a new magic value to identify the checksum in the buf_hdr.version field. If the FW does not send the checksum, then the existing magic number and standard version number would be maintained. Change-Id: Ib08c093a9b54495a2c5b7e0e163207f2b1eb4ce2 CRs-Fixed: 2508828
This commit is contained in:

committed by
nshrivas

parent
a33e6a8ea7
commit
3e31e2babd
@@ -215,6 +215,7 @@ struct tgt_info {
|
|||||||
* @sw_version_check: Checks the SW version
|
* @sw_version_check: Checks the SW version
|
||||||
* @smart_log_enable: Enable Smart Logs feature
|
* @smart_log_enable: Enable Smart Logs feature
|
||||||
* @cfr_support_enable: CFR support enable
|
* @cfr_support_enable: CFR support enable
|
||||||
|
* @set_pktlog_checksum: Set the pktlog checksum from FW ready event to pl_dev
|
||||||
*/
|
*/
|
||||||
struct target_ops {
|
struct target_ops {
|
||||||
QDF_STATUS (*ext_resource_config_enable)
|
QDF_STATUS (*ext_resource_config_enable)
|
||||||
@@ -275,6 +276,8 @@ struct target_ops {
|
|||||||
void (*cfr_support_enable)
|
void (*cfr_support_enable)
|
||||||
(struct wlan_objmgr_psoc *psoc,
|
(struct wlan_objmgr_psoc *psoc,
|
||||||
struct target_psoc_info *tgt_info, uint8_t *event);
|
struct target_psoc_info *tgt_info, uint8_t *event);
|
||||||
|
void (*set_pktlog_checksum)
|
||||||
|
(struct wlan_objmgr_pdev *pdev, uint32_t checksum);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -1770,6 +1773,24 @@ static inline void target_if_cfr_support_enable(struct wlan_objmgr_psoc *psoc,
|
|||||||
tgt_hdl->tif_ops->cfr_support_enable(psoc, tgt_hdl, evt_buf);
|
tgt_hdl->tif_ops->cfr_support_enable(psoc, tgt_hdl, evt_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_if_set_pktlog_checksum - Set pktlog checksum
|
||||||
|
* @pdev: pdev object
|
||||||
|
* @tgt_hdl: target_psoc_info pointer
|
||||||
|
* @checksum: checksum received from FW
|
||||||
|
*
|
||||||
|
* API to set pktlog checksum
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static inline void target_if_set_pktlog_checksum(struct wlan_objmgr_pdev *pdev,
|
||||||
|
struct target_psoc_info *tgt_hdl, uint32_t checksum)
|
||||||
|
{
|
||||||
|
if ((tgt_hdl->tif_ops) &&
|
||||||
|
(tgt_hdl->tif_ops->set_pktlog_checksum))
|
||||||
|
tgt_hdl->tif_ops->set_pktlog_checksum(pdev, checksum);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* target_if_atf_cfg_enable - Enable ATF config
|
* target_if_atf_cfg_enable - Enable ATF config
|
||||||
* @psoc: psoc object
|
* @psoc: psoc object
|
||||||
|
@@ -446,6 +446,22 @@ static int init_deinit_ready_event_handler(ol_scn_t scn_handle,
|
|||||||
}
|
}
|
||||||
|
|
||||||
num_radios = target_psoc_get_num_radios(tgt_hdl);
|
num_radios = target_psoc_get_num_radios(tgt_hdl);
|
||||||
|
|
||||||
|
if (ready_ev.pktlog_defs_checksum) {
|
||||||
|
for (i = 0; i < num_radios; i++) {
|
||||||
|
pdev = wlan_objmgr_get_pdev_by_id(psoc, i,
|
||||||
|
WLAN_INIT_DEINIT_ID);
|
||||||
|
if (!pdev) {
|
||||||
|
target_if_err(" PDEV %d is NULL", i);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
target_if_set_pktlog_checksum(pdev, tgt_hdl,
|
||||||
|
ready_ev.
|
||||||
|
pktlog_defs_checksum);
|
||||||
|
wlan_objmgr_pdev_release_ref(pdev, WLAN_INIT_DEINIT_ID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For non-legacy HW, MAC addr list is extracted.
|
* For non-legacy HW, MAC addr list is extracted.
|
||||||
*/
|
*/
|
||||||
|
@@ -7108,6 +7108,10 @@ struct coex_config_params {
|
|||||||
* radar detection, concurrently with using another radio
|
* radar detection, concurrently with using another radio
|
||||||
* chain for non-160 MHz regular operation.
|
* chain for non-160 MHz regular operation.
|
||||||
* @max_ast_index: Max number of AST entries that FW could allocate.
|
* @max_ast_index: Max number of AST entries that FW could allocate.
|
||||||
|
* @pktlog_defs_checksum: checksum computed from the definitions of the enums
|
||||||
|
* and structs used within pktlog traces. This is sent
|
||||||
|
* from the FW as part of FW ready event and needs
|
||||||
|
* to be embedded in the pktlog buffer header as version.
|
||||||
*/
|
*/
|
||||||
struct wmi_host_ready_ev_param {
|
struct wmi_host_ready_ev_param {
|
||||||
uint32_t status;
|
uint32_t status;
|
||||||
@@ -7117,6 +7121,7 @@ struct wmi_host_ready_ev_param {
|
|||||||
uint32_t num_extra_peer;
|
uint32_t num_extra_peer;
|
||||||
bool agile_capability;
|
bool agile_capability;
|
||||||
uint32_t max_ast_index;
|
uint32_t max_ast_index;
|
||||||
|
uint32_t pktlog_defs_checksum;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum bcn_offload_control_param {
|
enum bcn_offload_control_param {
|
||||||
|
@@ -8443,6 +8443,7 @@ static QDF_STATUS extract_ready_event_params_tlv(wmi_unified_t wmi_handle,
|
|||||||
* as per aDFS FR
|
* as per aDFS FR
|
||||||
*/
|
*/
|
||||||
ev_param->max_ast_index = ev->max_ast_index;
|
ev_param->max_ast_index = ev->max_ast_index;
|
||||||
|
ev_param->pktlog_defs_checksum = ev->pktlog_defs_checksum;
|
||||||
ev_param->agile_capability = 1;
|
ev_param->agile_capability = 1;
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
|
Reference in New Issue
Block a user