diff options
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 119 |
1 files changed, 116 insertions, 3 deletions
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 25958bb7f282..87c5863b17f3 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -18474,6 +18474,108 @@ static int wma_flush_complete_evt_handler(void *handle, return 0; } +#ifdef FEATURE_WLAN_EXTSCAN +/** + * wma_extscan_wow_event_callback() - extscan wow event callback + * @handle: WMA handle + * @event: event buffer + * @len: length of @event buffer + * + * In wow case, the wow event is followed by the payload of the event + * which generated the wow event. + * payload is 4 bytes of length followed by event buffer. the first 4 bytes + * of event buffer is common tlv header, which is a combination + * of tag (higher 2 bytes) and length (lower 2 bytes). The tag is used to + * identify the event which triggered wow event. + * + * @Return: none + */ +static void wma_extscan_wow_event_callback(void *handle, void *event, + uint32_t len) +{ + uint32_t tag = WMITLV_GET_TLVTAG(WMITLV_GET_HDR(event)); + WMA_LOGI("%s: Enter Tag: %d", __func__, tag); + + switch (tag) { + case WMITLV_TAG_STRUC_wmi_extscan_start_stop_event_fixed_param: + { + WMI_EXTSCAN_START_STOP_EVENTID_param_tlvs param; + param.fixed_param = event; + wma_extscan_start_stop_event_handler(handle, + (uint8_t *)¶m, sizeof(param)); + break; + } + + case WMITLV_TAG_STRUC_wmi_extscan_operation_event_fixed_param: + { + WMI_EXTSCAN_OPERATION_EVENTID_param_tlvs param; + param.fixed_param = event; + wma_extscan_operations_event_handler(handle, + (uint8_t *)¶m, sizeof(param)); + break; + } + + case WMITLV_TAG_STRUC_wmi_extscan_table_usage_event_fixed_param: + { + WMI_EXTSCAN_TABLE_USAGE_EVENTID_param_tlvs param; + param.fixed_param = event; + wma_extscan_table_usage_event_handler(handle, + (uint8_t *)¶m, sizeof(param)); + break; + } + + case WMITLV_TAG_STRUC_wmi_extscan_cached_results_event_fixed_param: + { + WMI_EXTSCAN_CACHED_RESULTS_EVENTID_param_tlvs param; + param.fixed_param = event; + wma_extscan_cached_results_event_handler(handle, + (uint8_t *)¶m, sizeof(param)); + break; + } + + case WMITLV_TAG_STRUC_wmi_extscan_wlan_change_results_event_fixed_param: + { + WMI_EXTSCAN_WLAN_CHANGE_RESULTS_EVENTID_param_tlvs param; + param.fixed_param = event; + wma_extscan_change_results_event_handler(handle, + (uint8_t *)¶m, sizeof(param)); + break; + } + + case WMITLV_TAG_STRUC_wmi_extscan_hotlist_match_event_fixed_param: + { + WMI_EXTSCAN_HOTLIST_MATCH_EVENTID_param_tlvs param; + param.fixed_param = event; + wma_extscan_hotlist_match_event_handler(handle, + (uint8_t *)¶m, sizeof(param)); + break; + } + + case WMITLV_TAG_STRUC_wmi_extscan_capabilities_event_fixed_param: + { + WMI_EXTSCAN_CAPABILITIES_EVENTID_param_tlvs param; + param.fixed_param = event; + wma_extscan_capabilities_event_handler(handle, + (uint8_t *)¶m, sizeof(param)); + break; + } + + case WMITLV_TAG_STRUC_wmi_extscan_hotlist_ssid_match_event_fixed_param: + { + WMI_EXTSCAN_HOTLIST_SSID_MATCH_EVENTID_param_tlvs param; + param.fixed_param = event; + wma_extscan_hotlist_ssid_match_event_handler(handle, + (uint8_t *)¶m, sizeof(param)); + break; + } + + default: + WMA_LOGE("%s: Unknown tag: %d", __func__, tag); + break; + } +} +#endif + /* * Handler to catch wow wakeup host event. This event will have * reason why the firmware has woken the host. @@ -18649,9 +18751,20 @@ static int wma_wow_wakeup_host_event(void *handle, u_int8_t *event, } #ifdef FEATURE_WLAN_EXTSCAN case WOW_REASON_EXTSCAN: - { - WMA_LOGD("Host woken up because of extscan reason"); - } + WMA_LOGD("Host woken up because of extscan reason"); + if (param_buf->wow_packet_buffer) { + wow_buf_pkt_len = + *(uint32_t *)param_buf->wow_packet_buffer; + WMA_LOGD("wow_packet_buffer dump"); + vos_trace_hex_dump(VOS_MODULE_ID_WDA, + VOS_TRACE_LEVEL_DEBUG, + param_buf->wow_packet_buffer, + wow_buf_pkt_len); + wma_extscan_wow_event_callback(handle, + (u_int8_t *)(param_buf->wow_packet_buffer + 4), + wow_buf_pkt_len); + } else + WMA_LOGE("wow_packet_buffer is empty"); break; #endif case WOW_REASON_RSSI_BREACH_EVENT: |
