summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoger Wang <wangroger@google.com>2018-11-02 15:34:39 +0800
committerRoger Wang <wangroger@google.com>2018-12-21 15:59:15 +0800
commitb294c76a0b24aa5f1d22fb14fbd298700fd94302 (patch)
tree12187ee69870027d93b1fc818640112473a882a7
parentb82cc11dca2c21c75b6c90abae49c35603a46261 (diff)
downloadandroid_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.hal13
-rw-r--r--wifi/1.3/default/wifi_chip.cpp19
-rw-r--r--wifi/1.3/default/wifi_chip.h3
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();