diff options
author | Roger Wang <wangroger@google.com> | 2018-11-02 15:34:39 +0800 |
---|---|---|
committer | Roger Wang <wangroger@google.com> | 2018-12-21 15:59:15 +0800 |
commit | b294c76a0b24aa5f1d22fb14fbd298700fd94302 (patch) | |
tree | 12187ee69870027d93b1fc818640112473a882a7 | |
parent | b82cc11dca2c21c75b6c90abae49c35603a46261 (diff) | |
download | android_hardware_interfaces-b294c76a0b24aa5f1d22fb14fbd298700fd94302.tar.gz android_hardware_interfaces-b294c76a0b24aa5f1d22fb14fbd298700fd94302.tar.bz2 android_hardware_interfaces-b294c76a0b24aa5f1d22fb14fbd298700fd94302.zip |
wifi(implementation): API to flush HAL ringbuffer to files
Wlan log does not include correct timestamp while
taking bug report. Flush HAL ringbuffe to files
directly when issue happen.
Bug: 118854557
Test: Builds and wifi works
Change-Id: Ic9a6b7470f943f1498428e8b0d40b117b2ff04e6
-rw-r--r-- | wifi/1.3/IWifiChip.hal | 13 | ||||
-rw-r--r-- | wifi/1.3/default/wifi_chip.cpp | 19 | ||||
-rw-r--r-- | wifi/1.3/default/wifi_chip.h | 3 |
3 files changed, 33 insertions, 2 deletions
diff --git a/wifi/1.3/IWifiChip.hal b/wifi/1.3/IWifiChip.hal index 74d527d83..be00ee555 100644 --- a/wifi/1.3/IWifiChip.hal +++ b/wifi/1.3/IWifiChip.hal @@ -66,4 +66,17 @@ interface IWifiChip extends @1.2::IWifiChip { * as gaming and virtual reality applications. */ setLatencyMode(LatencyMode mode) generates (WifiStatus status); + + /** + * API to flush debug ring buffer data to files. + * + * Force flush debug ring buffer using IBase::debug. + * This API help to collect firmware/driver/pkt logs. + * + * @return status WifiStatus of the operation. + * Possible status codes: + * |WifiStatusCode.SUCCESS|, + * |WifiStatusCode.UNKNOWN| + */ + flushRingBufferToFile() generates (WifiStatus status); }; diff --git a/wifi/1.3/default/wifi_chip.cpp b/wifi/1.3/default/wifi_chip.cpp index dd6bd7c02..1f1aa9522 100644 --- a/wifi/1.3/default/wifi_chip.cpp +++ b/wifi/1.3/default/wifi_chip.cpp @@ -37,8 +37,8 @@ using android::hardware::wifi::V1_0::IfaceType; using android::hardware::wifi::V1_0::IWifiChip; constexpr char kCpioMagic[] = "070701"; -constexpr size_t kMaxBufferSizeBytes = 1024 * 1024; -constexpr uint32_t kMaxRingBufferFileAgeSeconds = 60 * 60; +constexpr size_t kMaxBufferSizeBytes = 1024 * 1024 * 3; +constexpr uint32_t kMaxRingBufferFileAgeSeconds = 60 * 60 * 10; constexpr uint32_t kMaxRingBufferFileNum = 20; constexpr char kTombstoneFolderPath[] = "/data/vendor/tombstones/wifi/"; @@ -515,6 +515,13 @@ Return<void> WifiChip::forceDumpToDebugRingBuffer( hidl_status_cb, ring_name); } +Return<void> WifiChip::flushRingBufferToFile( + flushRingBufferToFile_cb hidl_status_cb) { + return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, + &WifiChip::flushRingBufferToFileInternal, + hidl_status_cb); +} + Return<void> WifiChip::stopLoggingToDebugRingBuffer( stopLoggingToDebugRingBuffer_cb hidl_status_cb) { return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, @@ -1000,6 +1007,14 @@ WifiStatus WifiChip::forceDumpToDebugRingBufferInternal( return createWifiStatusFromLegacyError(legacy_status); } +WifiStatus WifiChip::flushRingBufferToFileInternal() { + if (!writeRingbufferFilesInternal()) { + LOG(ERROR) << "Error writing files to flash"; + return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); + } + return createWifiStatus(WifiStatusCode::SUCCESS); +} + WifiStatus WifiChip::stopLoggingToDebugRingBufferInternal() { legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->deregisterRingBufferCallbackHandler( diff --git a/wifi/1.3/default/wifi_chip.h b/wifi/1.3/default/wifi_chip.h index 669524030..d14ced62c 100644 --- a/wifi/1.3/default/wifi_chip.h +++ b/wifi/1.3/default/wifi_chip.h @@ -126,6 +126,8 @@ class WifiChip : public V1_3::IWifiChip { Return<void> forceDumpToDebugRingBuffer( const hidl_string& ring_name, forceDumpToDebugRingBuffer_cb hidl_status_cb) override; + Return<void> flushRingBufferToFile( + flushRingBufferToFile_cb hidl_status_cb) override; Return<void> stopLoggingToDebugRingBuffer( stopLoggingToDebugRingBuffer_cb hidl_status_cb) override; Return<void> getDebugHostWakeReasonStats( @@ -198,6 +200,7 @@ class WifiChip : public V1_3::IWifiChip { WifiDebugRingBufferVerboseLevel verbose_level, uint32_t max_interval_in_sec, uint32_t min_data_size_in_bytes); WifiStatus forceDumpToDebugRingBufferInternal(const hidl_string& ring_name); + WifiStatus flushRingBufferToFileInternal(); WifiStatus stopLoggingToDebugRingBufferInternal(); std::pair<WifiStatus, WifiDebugHostWakeReasonStats> getDebugHostWakeReasonStatsInternal(); |