summaryrefslogtreecommitdiff
path: root/qcwcn/wifi_hal
diff options
context:
space:
mode:
authorAjit Vaishya <ajitv@codeaurora.org>2017-11-29 19:32:36 +0530
committerRoshan Pius <rpius@google.com>2018-03-30 10:53:43 -0700
commit8d0cc788cf10762d8434292667d1dd305d03b53e (patch)
tree0cf43193a268333555bfc46cf53617217ea4ef1b /qcwcn/wifi_hal
parentf4c59160d3891fde581a58a051fcec1db07a6beb (diff)
downloadwlan-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.h1
-rw-r--r--qcwcn/wifi_hal/wifi_hal.cpp5
-rw-r--r--qcwcn/wifi_hal/wifilogger.cpp59
-rw-r--r--qcwcn/wifi_hal/wifiloggercmd.h6
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,