203 lines
8.5 KiB
C
Executable file
203 lines
8.5 KiB
C
Executable file
/******************************************************************************
|
|
*
|
|
* Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
|
|
*
|
|
******************************************************************************/
|
|
#ifndef _SCSC_WIFILOGGER_H_
|
|
#define _SCSC_WIFILOGGER_H_
|
|
/**
|
|
* Internal Reference docs for WiFi-Logger subsystem
|
|
*
|
|
* SC-507043-SW -- Android Wi-Fi Logger architecture
|
|
* SC-507780-DD -- Android Enhanced Logging
|
|
* WiFiLogger Core Driver Requirements and Design
|
|
*
|
|
* This is the CONSUMER API as implemented by scsc_wifilogger driver:
|
|
* the framework and WiFi HAL are the final consumer of WiFi logger provided
|
|
* data but this API is directly used by our driver NetLink layer to
|
|
* configure and start/stop Android Enhanced Logging - WiFi Logger.
|
|
*
|
|
* Workflow is as follows:
|
|
*
|
|
* - framework invokes wifi_logger.h exported methods implemented by WiFi HAL
|
|
* - WiFi HAL wifi_logger module translates wifi_logger.h requests into
|
|
* NetLink vendor messages dispatched to out driver
|
|
* - our SCSC netlink layer driver translates back NetLink received messages
|
|
* into invokations of methods exported by this driver into the current
|
|
* header file
|
|
* - this driver, manages all the basic ring operations, providing:
|
|
* + this consumer API used to configure and start/stop the data-consuming
|
|
* reader-process that pushes data up to the framework through the NetLink
|
|
* channel
|
|
* + a producer API that will be used to push data/record into the rings
|
|
* + all the machinery needed to create and manage multiple rings
|
|
*
|
|
* As a consequence this file's types and methods definitions closely resembles
|
|
* the interface and types defined in:
|
|
*
|
|
* hardware/libhardware_legacy/include/hardware_legacy/wifi_logger.h
|
|
* hardware/libhardware_legacy/include/hardware_legacy/wifi_hal.h
|
|
*
|
|
* Some function arguments, deemed un-needed in the driver layer, have been
|
|
* removed from function prototypes, and all the names have been prefixed
|
|
* with "scsc_".
|
|
*
|
|
* Types' definitions are splitted into scsc_wifilogger_types.h dedicated
|
|
* header since they will be used also by core implementation.
|
|
*
|
|
*/
|
|
#include "scsc_wifilogger_types.h"
|
|
|
|
/**
|
|
* API to collect a firmware version string.
|
|
* - Caller is responsible to allocate / free a buffer to retrieve firmware
|
|
* version info.
|
|
* - Max string will be at most 256 bytes.
|
|
*/
|
|
wifi_error scsc_wifi_get_firmware_version(char *buffer, int buffer_size);
|
|
|
|
/**
|
|
* API to collect a driver version string.
|
|
* - Caller is responsible to allocate / free a buffer to retrieve driver
|
|
* version info.
|
|
* - Max string will be at most 256 bytes.
|
|
*/
|
|
wifi_error scsc_wifi_get_driver_version(char *buffer, int buffer_size);
|
|
|
|
/**
|
|
* API to get the status of all ring buffers supported by driver.
|
|
* - Caller is responsible to allocate / free ring buffer status.
|
|
* - Maximum no of ring buffer would be 10.
|
|
*/
|
|
wifi_error scsc_wifi_get_ring_buffers_status(u32 *num_rings,
|
|
struct scsc_wifi_ring_buffer_status *status);
|
|
|
|
/**
|
|
* API to retrieve the current supportive features.
|
|
* - An integer variable is enough to have bit mapping info by caller.
|
|
*/
|
|
wifi_error scsc_wifi_get_logger_supported_feature_set(unsigned int *support);
|
|
|
|
|
|
/**
|
|
* API to set/reset the log handler for getting ring data
|
|
* - Only a single instance of log handler can be instantiated for each
|
|
* ring buffer.
|
|
*/
|
|
wifi_error scsc_wifi_set_log_handler(on_ring_buffer_data handler, void *ctx);
|
|
wifi_error scsc_wifi_reset_log_handler(void);
|
|
|
|
/**
|
|
* API to set/reset the alert handler for the alert case in Wi-Fi Chip
|
|
* - Only a single instance of alert handler can be instantiated.
|
|
*/
|
|
wifi_error scsc_wifi_set_alert_handler(on_alert handler, void *ctx);
|
|
wifi_error scsc_wifi_reset_alert_handler(void);
|
|
|
|
/* API for framework to indicate driver has to upload and drain all data
|
|
* of a given ring
|
|
*/
|
|
wifi_error scsc_wifi_get_ring_data(char *ring_name);
|
|
|
|
/**
|
|
* API to trigger the debug collection.
|
|
* Unless his API is invoked - logging is not triggered.
|
|
* - Verbose_level 0 corresponds to no collection,
|
|
* and it makes log handler stop by no more events from driver.
|
|
* - Verbose_level 1 correspond to normal log level, with minimal user impact.
|
|
* This is the default value.
|
|
* - Verbose_level 2 are enabled when user is lazily trying to reproduce
|
|
* a problem, wifi performances and power can be impacted but device should
|
|
* not otherwise be significantly impacted.
|
|
* - Verbose_level 3+ are used when trying to actively debug a problem.
|
|
*
|
|
* ring_name represent the name of the ring for which data
|
|
* collection shall start.
|
|
*
|
|
* flags: TBD parameter used to enable/disable specific events
|
|
* on a ring
|
|
* max_interval: maximum interval in seconds for driver to
|
|
* invoke on_ring_buffer_data,
|
|
* ignore if zero
|
|
* min_data_size: minimum data size in buffer for driver to
|
|
* invoke on_ring_buffer_data,
|
|
* ignore if zero
|
|
*/
|
|
wifi_error scsc_wifi_start_logging(u32 verbose_level, u32 flags, u32 max_interval_sec,
|
|
u32 min_data_size, char *ring_name);
|
|
|
|
/**
|
|
* API to collect a firmware memory dump for a given iface by async memdump event.
|
|
* - Triggered by Alerthandler, esp. when FW problem or FW health check happens
|
|
* - Caller is responsible to store fw dump data into a local,
|
|
* e.g., /data/misc/wifi/alertdump-1.bin
|
|
*/
|
|
wifi_error scsc_wifi_get_firmware_memory_dump(on_firmware_memory_dump handler, void *ctx);
|
|
|
|
/**
|
|
* API to collect driver state.
|
|
*
|
|
* Framework will call this API soon before or after (but not
|
|
* concurrently with) wifi_get_firmware_memory_dump(). Capturing
|
|
* firmware and driver dumps is intended to help identify
|
|
* inconsistent state between these components.
|
|
*
|
|
* - In response to this call, HAL implementation should make one or
|
|
* more calls to callbacks.on_driver_memory_dump(). Framework will
|
|
* copy data out of the received |buffer|s, and concatenate the
|
|
* contents thereof.
|
|
* - HAL implemention will indicate completion of the driver memory
|
|
* dump by returning from this call.
|
|
*/
|
|
wifi_error scsc_wifi_get_driver_memory_dump(on_driver_memory_dump handler, void *ctx);
|
|
|
|
/**
|
|
* API to start packet fate monitoring.
|
|
* - Once stared, monitoring should remain active until HAL is unloaded.
|
|
* - When HAL is unloaded, all packet fate buffers should be cleared.
|
|
*/
|
|
wifi_error scsc_wifi_start_pkt_fate_monitoring(void);
|
|
|
|
/**
|
|
* API to retrieve fates of outbound packets.
|
|
* - HAL implementation should fill |tx_report_bufs| with fates of
|
|
* _first_ min(n_requested_fates, actual packets) frames
|
|
* transmitted for the most recent association. The fate reports
|
|
* should follow the same order as their respective packets.
|
|
* - HAL implementation may choose (but is not required) to include
|
|
* reports for management frames.
|
|
* - Packets reported by firmware, but not recognized by driver,
|
|
* should be included. However, the ordering of the corresponding
|
|
* reports is at the discretion of HAL implementation.
|
|
* - Framework may call this API multiple times for the same association.
|
|
* - Framework will ensure |n_requested_fates <= MAX_FATE_LOG_LEN|.
|
|
* - Framework will allocate and free the referenced storage.
|
|
* - is_user - to indicate if buffer passed is a user buffer
|
|
*/
|
|
wifi_error scsc_wifi_get_tx_pkt_fates(wifi_tx_report *tx_report_bufs,
|
|
size_t n_requested_fates,
|
|
size_t *n_provided_fates,
|
|
bool is_user);
|
|
|
|
/**
|
|
* API to retrieve fates of inbound packets.
|
|
* - HAL implementation should fill |rx_report_bufs| with fates of
|
|
* _first_ min(n_requested_fates, actual packets) frames
|
|
* received for the most recent association. The fate reports
|
|
* should follow the same order as their respective packets.
|
|
* - HAL implementation may choose (but is not required) to include
|
|
* reports for management frames.
|
|
* - Packets reported by firmware, but not recognized by driver,
|
|
* should be included. However, the ordering of the corresponding
|
|
* reports is at the discretion of HAL implementation.
|
|
* - Framework may call this API multiple times for the same association.
|
|
* - Framework will ensure |n_requested_fates <= MAX_FATE_LOG_LEN|.
|
|
* - Framework will allocate and free the referenced storage.
|
|
* - is_user - to indicate if buffer passed is a user buffer
|
|
*/
|
|
wifi_error scsc_wifi_get_rx_pkt_fates(wifi_rx_report *rx_report_bufs,
|
|
size_t n_requested_fates,
|
|
size_t *n_provided_fates,
|
|
bool is_user);
|
|
|
|
#endif /*_SCSC_WIFILOGGER_H_*/
|