diff options
author | Xi Zhang <xi.zhang@broadcom.com> | 2020-05-26 18:43:47 +0800 |
---|---|---|
committer | Ahmed ElArabawy <arabawy@google.com> | 2020-05-28 23:35:33 -0700 |
commit | d45dd2c7bd271d3dd36e8ba8df0297dbf734dbc8 (patch) | |
tree | 36db083ea6e062674bbd8f48be1efa88f23bffc6 | |
parent | 0c9db076cba0205185c128192b5beed7109e5e34 (diff) | |
download | wlan-d45dd2c7bd271d3dd36e8ba8df0297dbf734dbc8.tar.gz |
WifiHAl: Add error alert support
Bug: 152366765
Test log for beacon lost alert:
01-01 00:11:36.705 8 8 W [08:18:30.889195][dhd][wlan] MACEVENT: WLC_E_LINK DOWN flags:0x0 status:0 reason:1
01-01 00:11:36.736 8 8 W [08:18:30.920297][cfg80211][wlan] wl_notify_connect_status: [wlan0] Mode BSS. event:16 status:0 reason:1
01-01 00:11:36.920 8 8 W : [08:18:31.103883][dhd][wlan] dhd_os_send_alert_message enter
01-01 00:11:36.943 8 8 W [08:18:31.127500][cfg80211][wlan] wl_cfg80211_alert: In : error alert eventing, reason=0x0
05-22 08:18:31.144 2589 3481 I WifiHAL : Got event: 11
05-22 08:18:31.144 2589 3481 I WifiHAL : Initiating alert callback
05-22 08:18:31.145 2808 3434 W WifiVendorHal: onDebugErrorAlert 0
05-22 08:18:31.333 2808 2888 W WifiDiags: captureAlertData: error 0
Change-Id: I4d2fe39941b791035298bc984d1906b01510d2b6
-rwxr-xr-x | bcmdhd/wifi_hal/wifi_logger.cpp | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/bcmdhd/wifi_hal/wifi_logger.cpp b/bcmdhd/wifi_hal/wifi_logger.cpp index e4181e4..a47060c 100755 --- a/bcmdhd/wifi_hal/wifi_logger.cpp +++ b/bcmdhd/wifi_hal/wifi_logger.cpp @@ -83,7 +83,7 @@ typedef enum { LOGGER_ATTRIBUTE_LOG_MIN_DATA_SIZE, LOGGER_ATTRIBUTE_FW_DUMP_LEN, LOGGER_ATTRIBUTE_FW_DUMP_DATA, - // LOGGER_ATTRIBUTE_FW_ERR_CODE, + LOGGER_ATTRIBUTE_FW_ERR_CODE, LOGGER_ATTRIBUTE_RING_DATA, LOGGER_ATTRIBUTE_RING_STATUS, LOGGER_ATTRIBUTE_RING_NUM, @@ -775,7 +775,7 @@ public: wifi_ring_buffer_id ring_id; char *buffer = NULL; int buffer_size = 0; - + bool is_err_alert = false; nlattr *vendor_data = event.get_attribute(NL80211_ATTR_VENDOR_DATA); int len = event.get_vendor_data_len(); @@ -794,15 +794,37 @@ public: } else if (it.get_type() == LOGGER_ATTRIBUTE_RING_DATA) { buffer_size = it.get_len(); buffer = (char *)it.get_data(); - /* } else if (it.get_type() == LOGGER_ATTRIBUTE_FW_ERR_CODE) { + /* Error code is for error alert event only */ mErrCode = it.get_u32(); - */ + is_err_alert = true; } else { ALOGW("Ignoring invalid attribute type = %d, size = %d", it.get_type(), it.get_len()); } } + + if(is_err_alert) { + mBuffSize = sizeof(mErrCode); + if (mBuff) free(mBuff); + mBuff = (char *)malloc(mBuffSize); + if (!mBuff) { + ALOGE("Buffer allocation failed"); + return NL_SKIP; + } + memcpy(mBuff, (char *)&mErrCode, mBuffSize); + ALOGI("Initiating alert callback"); + if (mHandler.on_alert) { + (*mHandler.on_alert)(id(), mBuff, mBuffSize, mErrCode); + } + if (mBuff) { + free(mBuff); + mBuff = NULL; + } + mBuffSize = 0; + return NL_OK; + } + if (mBuffSize) { ALOGD("dump size: %d meta data size: %d", mBuffSize, buffer_size); if (mBuff) free(mBuff); |