Loading wifi/1.3/IWifiChip.hal +13 −0 Original line number Original line Diff line number Diff line Loading @@ -66,4 +66,17 @@ interface IWifiChip extends @1.2::IWifiChip { * as gaming and virtual reality applications. * as gaming and virtual reality applications. */ */ setLatencyMode(LatencyMode mode) generates (WifiStatus status); 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); }; }; wifi/1.3/default/wifi_chip.cpp +17 −2 Original line number Original line Diff line number Diff line Loading @@ -37,8 +37,8 @@ using android::hardware::wifi::V1_0::IfaceType; using android::hardware::wifi::V1_0::IWifiChip; using android::hardware::wifi::V1_0::IWifiChip; constexpr char kCpioMagic[] = "070701"; constexpr char kCpioMagic[] = "070701"; constexpr size_t kMaxBufferSizeBytes = 1024 * 1024; constexpr size_t kMaxBufferSizeBytes = 1024 * 1024 * 3; constexpr uint32_t kMaxRingBufferFileAgeSeconds = 60 * 60; constexpr uint32_t kMaxRingBufferFileAgeSeconds = 60 * 60 * 10; constexpr uint32_t kMaxRingBufferFileNum = 20; constexpr uint32_t kMaxRingBufferFileNum = 20; constexpr char kTombstoneFolderPath[] = "/data/vendor/tombstones/wifi/"; constexpr char kTombstoneFolderPath[] = "/data/vendor/tombstones/wifi/"; Loading Loading @@ -515,6 +515,13 @@ Return<void> WifiChip::forceDumpToDebugRingBuffer( hidl_status_cb, ring_name); 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( Return<void> WifiChip::stopLoggingToDebugRingBuffer( stopLoggingToDebugRingBuffer_cb hidl_status_cb) { stopLoggingToDebugRingBuffer_cb hidl_status_cb) { return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, Loading Loading @@ -1000,6 +1007,14 @@ WifiStatus WifiChip::forceDumpToDebugRingBufferInternal( return createWifiStatusFromLegacyError(legacy_status); 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() { WifiStatus WifiChip::stopLoggingToDebugRingBufferInternal() { legacy_hal::wifi_error legacy_status = legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->deregisterRingBufferCallbackHandler( legacy_hal_.lock()->deregisterRingBufferCallbackHandler( Loading wifi/1.3/default/wifi_chip.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -126,6 +126,8 @@ class WifiChip : public V1_3::IWifiChip { Return<void> forceDumpToDebugRingBuffer( Return<void> forceDumpToDebugRingBuffer( const hidl_string& ring_name, const hidl_string& ring_name, forceDumpToDebugRingBuffer_cb hidl_status_cb) override; forceDumpToDebugRingBuffer_cb hidl_status_cb) override; Return<void> flushRingBufferToFile( flushRingBufferToFile_cb hidl_status_cb) override; Return<void> stopLoggingToDebugRingBuffer( Return<void> stopLoggingToDebugRingBuffer( stopLoggingToDebugRingBuffer_cb hidl_status_cb) override; stopLoggingToDebugRingBuffer_cb hidl_status_cb) override; Return<void> getDebugHostWakeReasonStats( Return<void> getDebugHostWakeReasonStats( Loading Loading @@ -198,6 +200,7 @@ class WifiChip : public V1_3::IWifiChip { WifiDebugRingBufferVerboseLevel verbose_level, WifiDebugRingBufferVerboseLevel verbose_level, uint32_t max_interval_in_sec, uint32_t min_data_size_in_bytes); uint32_t max_interval_in_sec, uint32_t min_data_size_in_bytes); WifiStatus forceDumpToDebugRingBufferInternal(const hidl_string& ring_name); WifiStatus forceDumpToDebugRingBufferInternal(const hidl_string& ring_name); WifiStatus flushRingBufferToFileInternal(); WifiStatus stopLoggingToDebugRingBufferInternal(); WifiStatus stopLoggingToDebugRingBufferInternal(); std::pair<WifiStatus, WifiDebugHostWakeReasonStats> std::pair<WifiStatus, WifiDebugHostWakeReasonStats> getDebugHostWakeReasonStatsInternal(); getDebugHostWakeReasonStatsInternal(); Loading Loading
wifi/1.3/IWifiChip.hal +13 −0 Original line number Original line Diff line number Diff line Loading @@ -66,4 +66,17 @@ interface IWifiChip extends @1.2::IWifiChip { * as gaming and virtual reality applications. * as gaming and virtual reality applications. */ */ setLatencyMode(LatencyMode mode) generates (WifiStatus status); 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); }; };
wifi/1.3/default/wifi_chip.cpp +17 −2 Original line number Original line Diff line number Diff line Loading @@ -37,8 +37,8 @@ using android::hardware::wifi::V1_0::IfaceType; using android::hardware::wifi::V1_0::IWifiChip; using android::hardware::wifi::V1_0::IWifiChip; constexpr char kCpioMagic[] = "070701"; constexpr char kCpioMagic[] = "070701"; constexpr size_t kMaxBufferSizeBytes = 1024 * 1024; constexpr size_t kMaxBufferSizeBytes = 1024 * 1024 * 3; constexpr uint32_t kMaxRingBufferFileAgeSeconds = 60 * 60; constexpr uint32_t kMaxRingBufferFileAgeSeconds = 60 * 60 * 10; constexpr uint32_t kMaxRingBufferFileNum = 20; constexpr uint32_t kMaxRingBufferFileNum = 20; constexpr char kTombstoneFolderPath[] = "/data/vendor/tombstones/wifi/"; constexpr char kTombstoneFolderPath[] = "/data/vendor/tombstones/wifi/"; Loading Loading @@ -515,6 +515,13 @@ Return<void> WifiChip::forceDumpToDebugRingBuffer( hidl_status_cb, ring_name); 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( Return<void> WifiChip::stopLoggingToDebugRingBuffer( stopLoggingToDebugRingBuffer_cb hidl_status_cb) { stopLoggingToDebugRingBuffer_cb hidl_status_cb) { return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, Loading Loading @@ -1000,6 +1007,14 @@ WifiStatus WifiChip::forceDumpToDebugRingBufferInternal( return createWifiStatusFromLegacyError(legacy_status); 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() { WifiStatus WifiChip::stopLoggingToDebugRingBufferInternal() { legacy_hal::wifi_error legacy_status = legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->deregisterRingBufferCallbackHandler( legacy_hal_.lock()->deregisterRingBufferCallbackHandler( Loading
wifi/1.3/default/wifi_chip.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -126,6 +126,8 @@ class WifiChip : public V1_3::IWifiChip { Return<void> forceDumpToDebugRingBuffer( Return<void> forceDumpToDebugRingBuffer( const hidl_string& ring_name, const hidl_string& ring_name, forceDumpToDebugRingBuffer_cb hidl_status_cb) override; forceDumpToDebugRingBuffer_cb hidl_status_cb) override; Return<void> flushRingBufferToFile( flushRingBufferToFile_cb hidl_status_cb) override; Return<void> stopLoggingToDebugRingBuffer( Return<void> stopLoggingToDebugRingBuffer( stopLoggingToDebugRingBuffer_cb hidl_status_cb) override; stopLoggingToDebugRingBuffer_cb hidl_status_cb) override; Return<void> getDebugHostWakeReasonStats( Return<void> getDebugHostWakeReasonStats( Loading Loading @@ -198,6 +200,7 @@ class WifiChip : public V1_3::IWifiChip { WifiDebugRingBufferVerboseLevel verbose_level, WifiDebugRingBufferVerboseLevel verbose_level, uint32_t max_interval_in_sec, uint32_t min_data_size_in_bytes); uint32_t max_interval_in_sec, uint32_t min_data_size_in_bytes); WifiStatus forceDumpToDebugRingBufferInternal(const hidl_string& ring_name); WifiStatus forceDumpToDebugRingBufferInternal(const hidl_string& ring_name); WifiStatus flushRingBufferToFileInternal(); WifiStatus stopLoggingToDebugRingBufferInternal(); WifiStatus stopLoggingToDebugRingBufferInternal(); std::pair<WifiStatus, WifiDebugHostWakeReasonStats> std::pair<WifiStatus, WifiDebugHostWakeReasonStats> getDebugHostWakeReasonStatsInternal(); getDebugHostWakeReasonStatsInternal(); Loading