diff options
author | Ajit Vaishya <ajitv@codeaurora.org> | 2017-11-29 19:32:36 +0530 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2018-03-30 10:53:43 -0700 |
commit | 8d0cc788cf10762d8434292667d1dd305d03b53e (patch) | |
tree | 0cf43193a268333555bfc46cf53617217ea4ef1b /qcwcn/wifi_hal | |
parent | f4c59160d3891fde581a58a051fcec1db07a6beb (diff) | |
download | wlan-8d0cc788cf10762d8434292667d1dd305d03b53e.tar.gz |
WiFi-Hal: Add checks on logger capabilities of driver
Check the logger feature capabilities advertized by driver in logger
APIs. Return WIFI_ERROR_NOT_SUPPORTED if the respective feature is
not supported by driver.
CRs-Fixed: 2150998 2174271
Change-Id: Icbac7b9cd34a547c4a371f490bf1ff24b6327dfe
Bug: 71716861
(cherry-picked from 2d4390b47afd8e895d9ecb46c45e98080386fdd8)
Diffstat (limited to 'qcwcn/wifi_hal')
-rw-r--r-- | qcwcn/wifi_hal/common.h | 1 | ||||
-rw-r--r-- | qcwcn/wifi_hal/wifi_hal.cpp | 5 | ||||
-rw-r--r-- | qcwcn/wifi_hal/wifilogger.cpp | 59 | ||||
-rw-r--r-- | qcwcn/wifi_hal/wifiloggercmd.h | 6 |
4 files changed, 70 insertions, 1 deletions
diff --git a/qcwcn/wifi_hal/common.h b/qcwcn/wifi_hal/common.h index 1c10f1f..9e0961c 100644 --- a/qcwcn/wifi_hal/common.h +++ b/qcwcn/wifi_hal/common.h @@ -114,6 +114,7 @@ typedef struct hal_info_s { int num_interfaces; // number of interfaces feature_set supported_feature_set; + u32 supported_logger_feature_set; // add other details int user_sock_arg; struct rb_info rb_infos[NUM_RING_BUFS]; diff --git a/qcwcn/wifi_hal/wifi_hal.cpp b/qcwcn/wifi_hal/wifi_hal.cpp index 3e96fa9..e3e3df5 100644 --- a/qcwcn/wifi_hal/wifi_hal.cpp +++ b/qcwcn/wifi_hal/wifi_hal.cpp @@ -613,6 +613,11 @@ wifi_error wifi_initialize(wifi_handle *handle) ret = WIFI_SUCCESS; } + ret = wifi_get_logger_supported_feature_set(iface_handle, + &info->supported_logger_feature_set); + if (ret != WIFI_SUCCESS) + ALOGE("Failed to get supported logger featur set: %d", ret); + ret = get_firmware_bus_max_size_supported(iface_handle); if (ret != WIFI_SUCCESS) { ALOGE("Failed to get supported bus size, error : %d", ret); diff --git a/qcwcn/wifi_hal/wifilogger.cpp b/qcwcn/wifi_hal/wifilogger.cpp index 9e1a9a7..799b23e 100644 --- a/qcwcn/wifi_hal/wifilogger.cpp +++ b/qcwcn/wifi_hal/wifilogger.cpp @@ -77,6 +77,11 @@ wifi_error wifi_start_logging(wifi_interface_handle iface, hal_info *info = getHalInfo(wifiHandle); int ring_id = 0; + if (!(info->supported_logger_feature_set & LOGGER_RING_BUFFER)) { + ALOGE("%s: Ring buffer logging feature not supported %x", __FUNCTION__, + info->supported_logger_feature_set); + return WIFI_ERROR_NOT_SUPPORTED; + } /* * No request id from caller, so generate one and pass it on to the driver. * Generate one randomly. @@ -161,6 +166,13 @@ wifi_error wifi_get_ring_buffers_status(wifi_interface_handle iface, struct rb_info *rb_info; int rb_id; + /* Check Supported logger capability */ + if (!(info->supported_logger_feature_set & LOGGER_RING_BUFFER)) { + ALOGE("%s: Ring buffer logging feature not supported %x", __FUNCTION__, + info->supported_logger_feature_set); + return WIFI_ERROR_NOT_SUPPORTED; + } + if ((*num_buffers) < NUM_RING_BUFS) { ALOGE("%s: Input num_buffers:%u cannot be accommodated, " "Total ring buffer num:%d", __FUNCTION__, *num_buffers, @@ -277,6 +289,13 @@ wifi_error wifi_get_ring_data(wifi_interface_handle iface, hal_info *info = getHalInfo(wifiHandle); int ring_id = 0; + /* Check Supported logger capability */ + if (!(info->supported_logger_feature_set & LOGGER_RING_BUFFER)) { + ALOGE("%s: Ring buffer logging feature not supported %x", __FUNCTION__, + info->supported_logger_feature_set); + return WIFI_ERROR_NOT_SUPPORTED; + } + ring_id = get_ring_id(info, ring_name); if (ring_id < 0) { ALOGE("%s: Invalid Ring Buffer Name ", __FUNCTION__); @@ -462,6 +481,15 @@ wifi_error wifi_get_firmware_memory_dump(wifi_interface_handle iface, struct nlattr *nlData; interface_info *ifaceInfo = getIfaceInfo(iface); wifi_handle wifiHandle = getWifiHandle(iface); + hal_info *info = getHalInfo(wifiHandle); + + /* Check Supported logger capability */ + if (!(info->supported_logger_feature_set & + WIFI_LOGGER_MEMORY_DUMP_SUPPORTED)) { + ALOGE("%s: Firmware memory dump logging feature not supported %x", + __FUNCTION__, info->supported_logger_feature_set); + return WIFI_ERROR_NOT_SUPPORTED; + } /* No request id from caller, so generate one and pass it on to the driver. * Generate one randomly. @@ -585,6 +613,13 @@ wifi_error wifi_start_pkt_fate_monitoring(wifi_interface_handle iface) wifi_handle wifiHandle = getWifiHandle(iface); hal_info *info = getHalInfo(wifiHandle); + if (!(info->supported_logger_feature_set & + WIFI_LOGGER_PACKET_FATE_SUPPORTED)) { + ALOGE("%s: packet fate logging feature not supported %x", + __FUNCTION__, info->supported_logger_feature_set); + return WIFI_ERROR_NOT_SUPPORTED; + } + if (info->fate_monitoring_enabled == true) { ALOGV("Packet monitoring is already enabled"); return WIFI_SUCCESS; @@ -801,6 +836,12 @@ wifi_error wifi_logger_ring_buffers_init(hal_info *info) { wifi_error ret; + if (!(info->supported_logger_feature_set & LOGGER_RING_BUFFER)) { + ALOGE("%s: Ring buffer logging feature not supported %x", __FUNCTION__, + info->supported_logger_feature_set); + return WIFI_ERROR_NOT_SUPPORTED; + } + ret = rb_init(info, &info->rb_infos[POWER_EVENTS_RB_ID], POWER_EVENTS_RB_ID, POWER_EVENTS_RB_BUF_SIZE, @@ -1342,7 +1383,16 @@ wifi_error wifi_get_driver_memory_dump(wifi_interface_handle iface, size_t fileSize, remaining, readSize; size_t numRecordsRead; char *memBuffer = NULL, *buffer = NULL; + wifi_handle wifiHandle = getWifiHandle(iface); + hal_info *info = getHalInfo(wifiHandle); + /* Check Supported logger capability */ + if (!(info->supported_logger_feature_set & + WIFI_LOGGER_DRIVER_DUMP_SUPPORTED)) { + ALOGE("%s: Driver memory dump logging feature not supported %x", + __FUNCTION__, info->supported_logger_feature_set); + return WIFI_ERROR_NOT_SUPPORTED; + } /* Open File */ fp = fopen(DRIVER_MEMDUMP_FILENAME, "r"); if (fp == NULL) { @@ -1421,6 +1471,15 @@ wifi_error wifi_get_wake_reason_stats(wifi_interface_handle iface, struct nlattr *nlData; interface_info *ifaceInfo = getIfaceInfo(iface); wifi_handle wifiHandle = getWifiHandle(iface); + hal_info *info = getHalInfo(wifiHandle); + + /* Check Supported logger capability */ + if (!(info->supported_logger_feature_set & + WIFI_LOGGER_WAKE_LOCK_SUPPORTED)) { + ALOGE("%s: Wake lock logging feature not supported %x", + __FUNCTION__, info->supported_logger_feature_set); + return WIFI_ERROR_NOT_SUPPORTED; + } /* No request id from caller, so generate one and pass it on to the driver. * Generate it randomly. diff --git a/qcwcn/wifi_hal/wifiloggercmd.h b/qcwcn/wifi_hal/wifiloggercmd.h index 1ce6888..a5d3bbf 100644 --- a/qcwcn/wifi_hal/wifiloggercmd.h +++ b/qcwcn/wifi_hal/wifiloggercmd.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, The Linux Foundation. All rights reserved. +/* Copyright (c) 2015, 2018 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,6 +55,10 @@ extern "C" #define FIRMWARE_PRINTS_RB_BUF_SIZE 32768 #define FIRMWARE_PRINTS_NUM_BUFS 16 +#define LOGGER_RING_BUFFER (WIFI_LOGGER_CONNECT_EVENT_SUPPORTED \ + | WIFI_LOGGER_POWER_EVENT_SUPPORTED \ + | WIFI_LOGGER_PER_PACKET_TX_RX_STATUS_SUPPORTED) + enum rb_info_indices { POWER_EVENTS_RB_ID = 0, CONNECTIVITY_EVENTS_RB_ID = 1, |