qcacld-3.0: Update Datastall callbacks definition

Update definitions for datastall callback which posts
DataStall Events.

Change-Id: I1aadb438afeafe1f13114b1472b2280f0f713db4
CRs-Fixed: 2563194
Cette révision appartient à :
Alok Kumar
2019-11-11 11:34:37 +05:30
révisé par nshrivas
Parent a6bdc6f28d
révision 939ca50cf2
3 fichiers modifiés avec 67 ajouts et 26 suppressions

Voir le fichier

@@ -5318,9 +5318,7 @@ static void ol_txrx_post_data_stall_event(
enum data_stall_log_recovery_type recovery_type)
{
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
struct scheduler_msg msg = {0};
QDF_STATUS status;
struct data_stall_event_info *data_stall_info;
struct data_stall_event_info data_stall_info;
ol_txrx_pdev_handle pdev;
if (qdf_unlikely(!soc)) {
@@ -5335,32 +5333,27 @@ static void ol_txrx_post_data_stall_event(
return;
}
data_stall_info = qdf_mem_malloc(sizeof(*data_stall_info));
if (!data_stall_info)
if (!pdev->data_stall_detect_callback) {
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
"%s: data stall cb not registered", __func__);
return;
}
data_stall_info->indicator = indicator;
data_stall_info->data_stall_type = data_stall_type;
data_stall_info->vdev_id_bitmap = vdev_id_bitmap;
data_stall_info->pdev_id = pdev_id;
data_stall_info->recovery_type = recovery_type;
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_DEBUG,
"%s: data_stall_type: %x pdev_id: %d",
__func__, data_stall_type, pdev_id);
if (data_stall_info->data_stall_type ==
data_stall_info.indicator = indicator;
data_stall_info.data_stall_type = data_stall_type;
data_stall_info.vdev_id_bitmap = vdev_id_bitmap;
data_stall_info.pdev_id = pdev_id;
data_stall_info.recovery_type = recovery_type;
if (data_stall_info.data_stall_type ==
DATA_STALL_LOG_FW_RX_REFILL_FAILED)
htt_log_rx_ring_info(pdev->htt_pdev);
sys_build_message_header(SYS_MSG_ID_DATA_STALL_MSG, &msg);
/* Save callback and data */
msg.callback = pdev->data_stall_detect_callback;
msg.bodyptr = data_stall_info;
msg.bodyval = 0;
status = scheduler_post_message(QDF_MODULE_ID_TXRX,
QDF_MODULE_ID_HDD,
QDF_MODULE_ID_SYS, &msg);
if (status != QDF_STATUS_SUCCESS)
qdf_mem_free(data_stall_info);
pdev->data_stall_detect_callback(&data_stall_info);
}
void

Voir le fichier

@@ -13275,12 +13275,15 @@ static int __wlan_hdd_cfg80211_get_nud_stats(struct wiphy *wiphy,
/* send NUD failure event only when ARP tracking is enabled. */
if (cdp_cfg_get(soc, cfg_dp_enable_data_stall) &&
(pkt_type_bitmap & CONNECTIVITY_CHECK_SET_ARP))
(pkt_type_bitmap & CONNECTIVITY_CHECK_SET_ARP)) {
QDF_TRACE(QDF_MODULE_ID_HDD_DATA, QDF_TRACE_LEVEL_ERROR,
"Data stall due to NUD failure");
cdp_post_data_stall_event(soc,
DATA_STALL_LOG_INDICATOR_FRAMEWORK,
DATA_STALL_LOG_NUD_FAILURE,
OL_TXRX_PDEV_ID, 0XFF,
DATA_STALL_LOG_RECOVERY_TRIGGER_PDR);
}
mac_handle = hdd_ctx->mac_handle;
if (sme_set_nud_debug_stats_cb(mac_handle, hdd_get_nud_stats_cb,

Voir le fichier

@@ -22,7 +22,10 @@
* WLAN Host Device Driver Data Stall detection API implementation
*/
#include <wlan_qct_sys.h>
#include <scheduler_api.h>
#include "wlan_hdd_data_stall_detection.h"
#include "wlan_hdd_main.h"
#include "cdp_txrx_cmn.h"
#include "cdp_txrx_misc.h"
#include "ol_txrx_types.h"
@@ -47,6 +50,7 @@ static void hdd_data_stall_send_event(uint32_t reason)
struct host_event_wlan_datastall);
qdf_mem_zero(&sta_data_stall, sizeof(sta_data_stall));
sta_data_stall.reason = reason;
hdd_debug("Posting data stall event %x", reason);
WLAN_HOST_DIAG_EVENT_REPORT(&sta_data_stall, EVENT_WLAN_STA_DATASTALL);
}
#else
@@ -55,6 +59,20 @@ static inline void hdd_data_stall_send_event(uint32_t reason)
}
#endif
/**
* hdd_data_stall_process_event() - Process data stall event
* @message: data stall message
*
* Process data stall message
*
* Return: void
*/
static void hdd_data_stall_process_event(
struct data_stall_event_info *data_stall_info)
{
hdd_data_stall_send_event(data_stall_info->data_stall_type);
}
/**
* hdd_data_stall_process_cb() - Process data stall message
* @message: data stall message
@@ -64,9 +82,34 @@ static inline void hdd_data_stall_send_event(uint32_t reason)
* Return: void
*/
static void hdd_data_stall_process_cb(
struct data_stall_event_info *data_stall_info)
struct data_stall_event_info *info)
{
hdd_data_stall_send_event(data_stall_info->data_stall_type);
struct scheduler_msg msg = {0};
struct data_stall_event_info *data_stall_event_info;
QDF_STATUS status;
data_stall_event_info = qdf_mem_malloc(sizeof(*data_stall_event_info));
if (!data_stall_event_info)
return;
data_stall_event_info->data_stall_type = info->data_stall_type;
data_stall_event_info->indicator = info->indicator;
data_stall_event_info->pdev_id = info->pdev_id;
data_stall_event_info->recovery_type = info->recovery_type;
data_stall_event_info->vdev_id_bitmap = info->vdev_id_bitmap;
sys_build_message_header(SYS_MSG_ID_DATA_STALL_MSG, &msg);
/* Save callback and data */
msg.callback = hdd_data_stall_process_event;
msg.bodyptr = data_stall_event_info;
msg.bodyval = 0;
status = scheduler_post_message(QDF_MODULE_ID_HDD,
QDF_MODULE_ID_HDD,
QDF_MODULE_ID_SYS, &msg);
if (status != QDF_STATUS_SUCCESS)
qdf_mem_free(data_stall_event_info);
}
int hdd_register_data_stall_detect_cb(void)
@@ -75,6 +118,7 @@ int hdd_register_data_stall_detect_cb(void)
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
/* Register the data stall callback */
hdd_debug("Register data stall detect callback");
status = cdp_data_stall_cb_register(soc, OL_TXRX_PDEV_ID,
hdd_data_stall_process_cb);
return qdf_status_to_os_return(status);
@@ -86,6 +130,7 @@ int hdd_deregister_data_stall_detect_cb(void)
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
/* De-Register the data stall callback */
hdd_debug("De-Register data stall detect callback");
status = cdp_data_stall_cb_deregister(soc, OL_TXRX_PDEV_ID,
hdd_data_stall_process_cb);
return qdf_status_to_os_return(status);