diff --git a/device.mk b/device.mk index 2b542f67..117a16f6 100644 --- a/device.mk +++ b/device.mk @@ -5,17 +5,6 @@ # SPDX-License-Identifier: Apache-2.0 # -# Voice packs for Text-To-Speech -PRODUCT_COPY_FILES += \ - device/google/gs-common/tts/ja-jp/ja-jp-x-multi-r55.zvoice:$(TARGET_COPY_OUT_PRODUCT)/tts/google/ja-jp/ja-jp-x-multi-r55.zvoice \ - device/google/gs-common/tts/fr-fr/fr-fr-x-multi-r57.zvoice:$(TARGET_COPY_OUT_PRODUCT)/tts/google/fr-fr/fr-fr-x-multi-r57.zvoice \ - device/google/gs-common/tts/de-de/de-de-x-multi-r57.zvoice:$(TARGET_COPY_OUT_PRODUCT)/tts/google/de-de/de-de-x-multi-r57.zvoice \ - device/google/gs-common/tts/it-it/it-it-x-multi-r54.zvoice:$(TARGET_COPY_OUT_PRODUCT)/tts/google/it-it/it-it-x-multi-r54.zvoice \ - device/google/gs-common/tts/es-es/es-es-x-multi-r56.zvoice:$(TARGET_COPY_OUT_PRODUCT)/tts/google/es-es/es-es-x-multi-r56.zvoice - -PRODUCT_SOONG_NAMESPACES += \ - device/google/gs-common/powerstats - # Disable OMX PRODUCT_PROPERTY_OVERRIDES += \ vendor.media.omx=0 @@ -29,84 +18,37 @@ PRODUCT_COPY_FILES += \ DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE += \ device/google/gs-common/vintf/framework_compatibility_matrix.xml -# Platform watchdogd -PRODUCT_PACKAGES += gs_watchdogd -PRODUCT_SOONG_NAMESPACES += \ - device/google/gs-common/gs_watchdogd - # sscoredump PRODUCT_PROPERTY_OVERRIDES += vendor.debug.ssrdump.type=sscoredump -# SoC -PRODUCT_PACKAGES += dump_soc - # Modem PRODUCT_PACKAGES += dump_modem -PRODUCT_PACKAGES += dump_modemlog - -# AoC -PRODUCT_PACKAGES += dump_aoc - -# If AoC Daemon is not present on this build, load firmware at boot via rc -PRODUCT_COPY_FILES += \ - device/google/gs-common/aoc/conf/init.aoc.daemon.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.aoc.rc - -# Trusty -PRODUCT_PACKAGES += dump_trusty.sh - -# Storage -PRODUCT_PACKAGES += dump_storage # Thermal -PRODUCT_PACKAGES += dump_thermal.sh - PRODUCT_PACKAGES += android.hardware.thermal-service.pixel # Thermal utils PRODUCT_PACKAGES += thermal_symlinks -# Performance -PRODUCT_PACKAGES += dump_perf - # Ensure enough free space to create zram backing device PRODUCT_PRODUCT_PROPERTIES += \ ro.zram_backing_device_min_free_mb=1536 -#include device/google/gs-common/pixel_metrics/pixel_metrics.mk -PRODUCT_PACKAGES += dump_pixel_metrics - -#include device/google/gs-common/soc/freq.mk -PRODUCT_PACKAGES += dump_devfreq - -#include device/google/gs-common/display/dump_exynos_display.mk -PRODUCT_PACKAGES += dump_exynos_display - -#include device/google/gs-common/gear/dumpstate/aidl.mk -PRODUCT_PACKAGES += android.hardware.dumpstate-service - -#include device/google/gs-common/widevine/widevine.mk +# DRM PRODUCT_PACKAGES += \ android.hardware.drm-service.clearkey -#include device/google/gs-common/misc_writer/misc_writer.mk +# misc_writer PRODUCT_PACKAGES += \ misc_writer -#include device/google/gs-common/bootctrl/bootctrl_aidl.mk +# Boot control PRODUCT_PACKAGES += \ android.hardware.boot-service.default-pixel \ android.hardware.boot-service.default_recovery-pixel PRODUCT_SOONG_NAMESPACES += device/google/gs-common/bootctrl/aidl -#include device/google/gs-common/fingerprint/fingerprint.mk -PRODUCT_PACKAGES += dump_fingerprint - -#include device/google/gs-common/power/power.mk -PRODUCT_PACKAGES += init.power-gs.rc - -PRODUCT_PACKAGES += dump_power - TARGET_BOARD_PLATFORM := gs101 AB_OTA_POSTINSTALL_CONFIG += \ @@ -125,8 +67,7 @@ PRODUCT_SOONG_NAMESPACES += \ hardware/google/av \ hardware/google/interfaces \ hardware/google/pixel \ - device/google/gs101 \ - device/google/gs101/powerstats + device/google/gs101 # OEM Unlock reporting PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \ @@ -194,7 +135,7 @@ include hardware/google/pixel/PixelLogger/PixelLogger.mk # HWUI TARGET_USES_VULKAN = true -#include device/google/gs-common/gpu/gpu.mk +# GPU PRODUCT_PACKAGES += gpu_probe # Install the OpenCL ICD Loader @@ -265,11 +206,6 @@ PRODUCT_PACKAGES += \ fstab.gs101-fips \ fstab.gs101-fips.vendor_ramdisk -# Shell scripts -PRODUCT_PACKAGES += \ - insmod.sh \ - init.common.cfg - # Insmod config files PRODUCT_COPY_FILES += \ $(call find-copy-subdir-files,init.insmod.*.cfg,$(TARGET_KERNEL_DIR),$(TARGET_COPY_OUT_VENDOR_DLKM)/etc) @@ -357,17 +293,10 @@ PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_policy=2 PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_exclusive_policy=2 PRODUCT_PROPERTY_OVERRIDES += aaudio.hw_burst_min_usec=2000 -# Lyric Camera HAL settings +# Camera PRODUCT_SOONG_NAMESPACES += \ hardware/google/camera -# Init-time log settings for Google 3A -PRODUCT_PACKAGES += libg3a_standalone_gabc_rc -PRODUCT_PACKAGES += libg3a_standalone_gaf_rc -PRODUCT_PACKAGES += libg3a_standalone_ghawb_rc - -PRODUCT_PACKAGES += lyric_preview_dis_xml - DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE += \ device/google/gs-common/camera/device_framework_matrix_product.xml @@ -520,9 +449,6 @@ PRODUCT_PACKAGES += \ $(call inherit-product, system/core/trusty/trusty-storage.mk) $(call inherit-product, system/core/trusty/trusty-base.mk) -# Trusty Metrics Daemon -PRODUCT_PACKAGES += trusty_metricsd - PRODUCT_PACKAGES += \ android.hardware.graphics.composer@2.4-service @@ -565,8 +491,6 @@ PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \ Iwlan -PRODUCT_PACKAGES += dump_sensors - PRODUCT_COPY_FILES += \ device/google/gs101/default-permissions.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/default-permissions/default-permissions.xml \ device/google/gs101/component-overrides.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sysconfig/component-overrides.xml diff --git a/dumpstate/Android.bp b/dumpstate/Android.bp deleted file mode 100644 index c0fa4e1c..00000000 --- a/dumpstate/Android.bp +++ /dev/null @@ -1,21 +0,0 @@ -package { - default_applicable_licenses: ["Android-Apache-2.0"], -} - -cc_binary { - name: "dump_power", - srcs: ["dump_power.cpp"], - cflags: [ - "-Wall", - "-Wextra", - "-Werror", - ], - shared_libs: [ - "libbase", - "libdump", - "libdumpstateutil", - ], - vendor: true, - relative_install_path: "dump", - init_rc: ["dump_power.rc"], -} diff --git a/dumpstate/README.txt b/dumpstate/README.txt deleted file mode 100644 index b279bdaf..00000000 --- a/dumpstate/README.txt +++ /dev/null @@ -1 +0,0 @@ -Please refer to go/pixel-recycle to modularize your code in this space. diff --git a/dumpstate/dump_power.cpp b/dumpstate/dump_power.cpp deleted file mode 100644 index b522cf7c..00000000 --- a/dumpstate/dump_power.cpp +++ /dev/null @@ -1,788 +0,0 @@ - -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "DumpstateUtil.h" -void printTitle(const char *msg) { - printf("\n------ %s ------\n", msg); -} -int getCommandOutput(const char *cmd, std::string *output) { - char buffer[1024]; - FILE *pipe = popen(cmd, "r"); - if (!pipe) { - return -1; - } - while (fgets(buffer, sizeof buffer, pipe) != NULL) { - *output += buffer; - } - pclose(pipe); - if (output->back() == '\n') - output->pop_back(); - return 0; -} -bool isValidFile(const char *file) { - FILE *fp = fopen(file, "r"); - if (fp != NULL) { - fclose(fp); - return true; - } - return false; -} -bool isValidDir(const char *directory) { - DIR *dir = opendir(directory); - if (dir == NULL) - return false; - - closedir(dir); - return true; -} -bool isUserBuild() { - return ::android::os::dumpstate::PropertiesHelper::IsUserBuild(); -} -int getFilesInDir(const char *directory, std::vector *files) { - std::string content; - struct dirent *entry; - DIR *dir = opendir(directory); - if (dir == NULL) - return -1; - files->clear(); - while ((entry = readdir(dir)) != NULL) - files->push_back(entry->d_name); - closedir(dir); - sort(files->begin(), files->end()); - return 0; -} -void dumpPowerStatsTimes() { - const char *title = "Power Stats Times"; - char rBuff[128]; - struct timespec rTs; - struct sysinfo info; - int ret; - printTitle(title); - sysinfo(&info); - const time_t boottime = time(NULL) - info.uptime; - ret = clock_gettime(CLOCK_REALTIME, &rTs); - if (ret) - return; - struct tm *nowTime = std::localtime(&rTs.tv_sec); - std::strftime(rBuff, sizeof(rBuff), "%m/%d/%Y %H:%M:%S", nowTime); - printf("Boot: %s", ctime(&boottime)); - printf("Now: %s\n", rBuff); -} -int readContentsOfDir(const char* title, const char* directory, const char* strMatch, - bool useStrMatch = false, bool printDirectory = false) { - std::vector files; - std::string content; - std::string fileLocation; - int ret; - ret = getFilesInDir(directory, &files); - if (ret < 0) - return ret; - printTitle(title); - for (auto &file : files) { - if (useStrMatch && std::string::npos == std::string(file).find(strMatch)) { - continue; - } - fileLocation = std::string(directory) + std::string(file); - if (!android::base::ReadFileToString(fileLocation, &content)) { - continue; - } - if (printDirectory) { - printf("\n\n%s\n", fileLocation.c_str()); - } - if (content.back() == '\n') - content.pop_back(); - printf("%s\n", content.c_str()); - } - return 0; -} -void dumpAcpmStats() { - const char* acpmDir = "/sys/devices/platform/acpm_stats/"; - const char* statsSubStr = "_stats"; - const char* acpmTitle = "ACPM stats"; - readContentsOfDir(acpmTitle, acpmDir, statsSubStr, true, true); -} -void dumpPowerSupplyStats() { - const char* dumpList[][2] = { - {"CPU PM stats", "/sys/devices/system/cpu/cpupm/cpupm/time_in_state"}, - {"Power supply property battery", "/sys/class/power_supply/battery/uevent"}, - {"Power supply property dc", "/sys/class/power_supply/dc/uevent"}, - {"Power supply property gcpm", "/sys/class/power_supply/gcpm/uevent"}, - {"Power supply property gcpm_pps", "/sys/class/power_supply/gcpm_pps/uevent"}, - {"Power supply property main-charger", "/sys/class/power_supply/main-charger/uevent"}, - {"Power supply property pca9468-mains", "/sys/class/power_supply/pca9468-mains/uevent"}, - {"Power supply property tcpm", "/sys/class/power_supply/tcpm-source-psy-i2c-max77759tcpc/uevent"}, - {"Power supply property usb", "/sys/class/power_supply/usb/uevent"}, - {"Power supply property wireless", "/sys/class/power_supply/wireless/uevent"}, - }; - for (const auto &row : dumpList) { - dumpFileContent(row[0], row[1]); - } -} -void dumpMaxFg() { - const char *maxfgLoc = "/sys/class/power_supply/maxfg"; - const char *maxfg [][2] = { - {"Power supply property maxfg", "/sys/class/power_supply/maxfg/uevent"}, - {"m5_state", "/sys/class/power_supply/maxfg/m5_model_state"}, - {"maxfg registers", "/sys/class/power_supply/maxfg/registers_dump"}, - {"maxfg logbuffer", "/dev/logbuffer_maxfg"}, - {"maxfg_monitor logbuffer", "/dev/logbuffer_maxfg_monitor"}, - }; - std::string content; - if (isValidDir(maxfgLoc)) { - for (const auto &row : maxfg) { - dumpFileContent(row[0], row[1]); - } - } -} -void dumpPowerSupplyDock() { - const char* powerSupplyPropertyDockTitle = "Power supply property dock"; - const char* powerSupplyPropertyDockFile = "/sys/class/power_supply/dock/uevent"; - dumpFileContent(powerSupplyPropertyDockTitle, powerSupplyPropertyDockFile); -} -void dumpLogBufferTcpm() { - const char* logbufferTcpmTitle = "Logbuffer TCPM"; - const char* logbufferTcpmFile = "/dev/logbuffer_tcpm"; - const char* debugTcpmFile = "/sys/kernel/debug/tcpm"; - const char* tcpmLogTitle = "TCPM logs"; - const char* tcpmFile = "/sys/kernel/debug/tcpm"; - const char* tcpmFileAlt = "/sys/kernel/debug/usb/tcpm"; - int retCode; - dumpFileContent(logbufferTcpmTitle, logbufferTcpmFile); - retCode = readContentsOfDir(tcpmLogTitle, isValidFile(debugTcpmFile) ? tcpmFile : tcpmFileAlt, - NULL); - if (retCode < 0) - printTitle(tcpmLogTitle); -} -void dumpTcpc() { - int ret; - const char* max77759TcpcHead = "TCPC"; - const char* i2cSubDirMatch = "i2c-"; - const char* directory = "/sys/devices/platform/10d60000.hsi2c/"; - const char* max77759Tcpc [][2] { - {"registers:", "/i2c-max77759tcpc/registers"}, - {"frs:", "/i2c-max77759tcpc/frs"}, - {"auto_discharge:", "/i2c-max77759tcpc/auto_discharge"}, - {"bcl2_enabled:", "/i2c-max77759tcpc/bcl2_enabled"}, - {"cc_toggle_enable:", "/i2c-max77759tcpc/cc_toggle_enable"}, - {"containment_detection:", "/i2c-max77759tcpc/containment_detection"}, - {"containment_detection_status:", "/i2c-max77759tcpc/containment_detection_status"}, - }; - std::vector files; - std::string content; - printTitle(max77759TcpcHead); - ret = getFilesInDir(directory, &files); - if (ret < 0) { - for (auto &tcpcVal : max77759Tcpc) - printf("%s\n", tcpcVal[0]); - return; - } - for (auto &file : files) { - for (auto &tcpcVal : max77759Tcpc) { - printf("%s ", tcpcVal[0]); - if (std::string::npos == std::string(file).find(i2cSubDirMatch)) { - continue; - } - std::string fileName = directory + file + "/" + std::string(tcpcVal[1]); - if (!android::base::ReadFileToString(fileName, &content)) { - continue; - } - printf("%s\n", content.c_str()); - } - } -} -void dumpPdEngine() { - const char* pdEngine [][2] { - {"PD Engine", "/dev/logbuffer_usbpd"}, - {"PPS-google_cpm logbuffer", "/dev/logbuffer_cpm"}, - {"PPS-pca9468 logbuffer", "/dev/logbuffer_pca9468"}, - }; - for (const auto &row : pdEngine) { - dumpFileContent(row[0], row[1]); - } -} -void dumpBatteryHealth() { - const char* batteryHealth [][2] { - {"Battery Health", "/sys/class/power_supply/battery/health_index_stats"}, - {"Battery Health SoC Residency", "/sys/class/power_supply/battery/swelling_data"}, - {"BMS", "/dev/logbuffer_ssoc"}, - {"TTF", "/dev/logbuffer_ttf"}, - {"TTF details", "/sys/class/power_supply/battery/ttf_details"}, - {"TTF stats", "/sys/class/power_supply/battery/ttf_stats"}, - {"aacr_state", "/sys/class/power_supply/battery/aacr_state"}, - {"maxq", "/dev/logbuffer_maxq"}, - {"TEMP/DOCK-DEFEND", "/dev/logbuffer_bd"}, - }; - for (const auto &row : batteryHealth) { - dumpFileContent(row[0], row[1]); - } -} -void dumpBatteryDefend() { - const char* defendConfig [][3] { - {"TRICKLE-DEFEND Config", - "/sys/devices/platform/google,battery/power_supply/battery/", "bd_"}, - {"DWELL-DEFEND Config", "/sys/devices/platform/google,charger/", "charge_s"}, - {"TEMP-DEFEND Config", "/sys/devices/platform/google,charger/", "bd_"}, - }; - std::vector files; - struct dirent *entry; - std::string content; - std::string fileLocation; - for (auto &config : defendConfig) { - DIR *dir = opendir(config[1]); - if (dir == NULL) - continue; - printTitle(config[0]); - while ((entry = readdir(dir)) != NULL) { - if (std::string(entry->d_name).find(config[2]) != std::string::npos && - strncmp(config[2], entry->d_name, strlen(config[2])) == 0) { - files.push_back(entry->d_name); - } - } - closedir(dir); - sort(files.begin(), files.end()); - for (auto &file : files) { - fileLocation = std::string(config[1]) + std::string(file); - if (!android::base::ReadFileToString(fileLocation, &content) || content.empty()) { - content = "\n"; - } - printf("%s: %s", file.c_str(), content.c_str()); - if (content.back() != '\n') - printf("\n"); - } - files.clear(); - } -} -void dumpBatteryCaretaker() { - const char* aacpConfig [][3] { - {"AACP Version", - "/sys/devices/platform/google,battery/power_supply/battery/", "aacp_"}, - {"AACR Config", - "/sys/devices/platform/google,battery/power_supply/battery/", "aacr_"}, - {"AAFV Config", - "/sys/devices/platform/google,battery/power_supply/battery/", "aafv_"}, - {"AACT Config", - "/sys/devices/platform/google,battery/power_supply/battery/", "aact_"}, - {"AACC", - "/sys/devices/platform/google,battery/power_supply/battery/", "aacc"}, - }; - std::vector files; - struct dirent *entry; - std::string content; - std::string fileLocation; - for (auto &config : aacpConfig) { - DIR *dir = opendir(config[1]); - if (dir == NULL) - continue; - printTitle(config[0]); - while ((entry = readdir(dir)) != NULL) { - if (std::string(entry->d_name).find(config[2]) != std::string::npos && - strncmp(config[2], entry->d_name, strlen(config[2])) == 0) { - files.push_back(entry->d_name); - } - } - closedir(dir); - sort(files.begin(), files.end()); - for (auto &file : files) { - fileLocation = std::string(config[1]) + std::string(file); - if (!android::base::ReadFileToString(fileLocation, &content) || content.empty()) { - content = "\n"; - } - printf("%s: %s", file.c_str(), content.c_str()); - if (content.back() != '\n') - printf("\n"); - } - files.clear(); - } -} -void printValuesOfDirectory(const char *directory, std::string debugfs, const char *strMatch) { - std::vector files; - auto info = directory; - std::string content; - struct dirent *entry; - DIR *dir = opendir(debugfs.c_str()); - if (dir == NULL) - return; - - printTitle((debugfs + std::string(strMatch) + "/" + std::string(info)).c_str()); - while ((entry = readdir(dir)) != NULL) - if (std::string(entry->d_name).find(strMatch) != std::string::npos) - files.push_back(entry->d_name); - closedir(dir); - - sort(files.begin(), files.end()); - - for (auto &file : files) { - std::string fileDirectory = debugfs + file; - std::string fileLocation = fileDirectory + "/" + std::string(info); - if (!android::base::ReadFileToString(fileLocation, &content)) { - content = "\n"; - } - - printf("%s:\n%s", fileDirectory.c_str(), content.c_str()); - - if (content.back() != '\n') - printf("\n"); - } - files.clear(); -} -void dumpChg() { - const std::string pmic_bus = "/sys/devices/platform/10d50000.hsi2c/i2c-12/12-0066"; - const char* chg_reg_dump_file = "/sys/class/power_supply/main-charger/device/registers_dump"; - const std::string chg_name_cmd = "/sys/class/power_supply/main-charger/device/name"; - const std::string pmic_name_cmd = pmic_bus + "/name"; - const std::string pmic_reg_dump_file = pmic_bus + "/registers_dump"; - const std::string reg_dump_str = " registers dump"; - const char* chgConfig [][2] { - {"DC_registers dump", "/sys/class/power_supply/pca9468-mains/device/registers_dump"}, - }; - std::string chg_name; - std::string pmic_name; - - printf("\n"); - - int ret = android::base::ReadFileToString(chg_name_cmd, &chg_name); - if (ret && !chg_name.empty()) { - chg_name.erase(chg_name.length() - 1); // remove new line - const std::string chg_reg_dump_title = chg_name + reg_dump_str; - - /* CHG reg dump */ - dumpFileContent(chg_reg_dump_title.c_str(), chg_reg_dump_file); - } - - ret = android::base::ReadFileToString(pmic_name_cmd, &pmic_name); - if (ret && !pmic_name.empty()) { - pmic_name.erase(pmic_name.length() - 1); // remove new line - const std::string pmic_reg_dump_title = pmic_name + reg_dump_str; - - /* PMIC reg dump */ - dumpFileContent(pmic_reg_dump_title.c_str(), pmic_reg_dump_file.c_str()); - } - - for (auto &config : chgConfig) { - dumpFileContent(config[0], config[1]); - } -} -void dumpChgUserDebug() { - const std::string debugfs = "/d/"; - const char *maxFgDir = "/d/maxfg"; - const char *maxFgStrMatch = "maxfg"; - const char *chgTblName = "Charging table dump"; - const char *chgTblDir = "/d/google_battery/chg_raw_profile"; - - const char *maxFgInfo [] { - "fg_model", - "algo_ver", - "model_ok", - }; - - if (isUserBuild()) - return; - - dumpFileContent(chgTblName, chgTblDir); - - if (isValidDir(maxFgDir)) { - for (auto & directory : maxFgInfo) { - printValuesOfDirectory(directory, debugfs, maxFgStrMatch); - } - } -} -void dumpBatteryEeprom() { - const char *title = "Battery EEPROM"; - const char *files[] { - "/sys/devices/platform/10970000.hsi2c/i2c-8/8-0050/eeprom", - }; - std::string result; - std::string xxdCmd; - printTitle(title); - for (auto &file : files) { - if (!isValidFile(file)) - continue; - xxdCmd = "xxd " + std::string(file); - int ret = getCommandOutput(xxdCmd.c_str(), &result); - if (ret < 0) - return; - printf("%s\n", result.c_str()); - } -} -void dumpChargerStats() { - const char *chgStatsTitle = "Charger Stats"; - const char *chgStatsLocation = "/sys/class/power_supply/battery/charge_details"; - const char *chargerStats [][3] { - {"Google Charger", "/sys/kernel/debug/google_charger/", "pps_"}, - {"Google Battery", "/sys/kernel/debug/google_battery/", "ssoc_"}, - }; - std::vector files; - std::string content; - struct dirent *entry; - dumpFileContent(chgStatsTitle, chgStatsLocation); - if (isUserBuild()) - return; - for (auto &stat : chargerStats) { - DIR *dir = opendir(stat[1]); - if (dir == NULL) - return; - printTitle(stat[0]); - while ((entry = readdir(dir)) != NULL) - if (std::string(entry->d_name).find(stat[2]) != std::string::npos) - files.push_back(entry->d_name); - closedir(dir); - sort(files.begin(), files.end()); - for (auto &file : files) { - std::string fileLocation = std::string(stat[1]) + file; - if (!android::base::ReadFileToString(fileLocation, &content)) { - content = "\n"; - } - printf("%s: %s", file.c_str(), content.c_str()); - if (content.back() != '\n') - printf("\n"); - } - files.clear(); - } -} -void dumpWlcLogs() { - const char *dumpWlcList [][2] { - {"WLC Logs", "/dev/logbuffer_wireless"}, - {"WLC VER", "/sys/class/power_supply/wireless/device/version"}, - {"WLC STATUS", "/sys/class/power_supply/wireless/device/status"}, - {"WLC FW Version", "/sys/class/power_supply/wireless/device/fw_rev"}, - {"RTX", "/dev/logbuffer_rtx"}, - }; - for (auto &row : dumpWlcList) { - if (!isValidFile(row[1])) - printTitle(row[0]); - dumpFileContent(row[0], row[1]); - } -} -void dumpGvoteables() { - const char *directory = "/sys/kernel/debug/gvotables/"; - const char *statusName = "/status"; - const char *title = "gvotables"; - std::string content; - std::vector files; - int ret; - if (isUserBuild()) - return; - ret = getFilesInDir(directory, &files); - if (ret < 0) - return; - printTitle(title); - for (auto &file : files) { - std::string fileLocation = std::string(directory) + file + std::string(statusName); - if (!android::base::ReadFileToString(fileLocation, &content)) { - continue; - } - printf("%s: %s", file.c_str(), content.c_str()); - if (content.back() != '\n') - printf("\n"); - } - files.clear(); -} -void dumpMitigation() { - const char *mitigationList [][2] { - {"Lastmeal" , "/data/vendor/mitigation/lastmeal.txt"}, - {"Thismeal" , "/data/vendor/mitigation/thismeal.txt"}, - }; - for (auto &row : mitigationList) { - if (!isValidFile(row[1])) - printTitle(row[0]); - dumpFileContent(row[0], row[1]); - } -} -void dumpMitigationStats() { - int ret; - const char *directory = "/sys/devices/virtual/pmic/mitigation/last_triggered_count/"; - const char *capacityDirectory = "/sys/devices/virtual/pmic/mitigation/last_triggered_capacity/"; - const char *timestampDirectory = - "/sys/devices/virtual/pmic/mitigation/last_triggered_timestamp/"; - const char *voltageDirectory = "/sys/devices/virtual/pmic/mitigation/last_triggered_voltage/"; - const char *capacitySuffix = "_cap"; - const char *timeSuffix = "_time"; - const char *voltageSuffix = "_volt"; - const char *countSuffix = "_count"; - const char *title = "Mitigation Stats"; - std::vector files; - std::string content; - std::string fileLocation; - std::string source; - std::string subModuleName; - int count; - int soc; - int time; - int voltage; - ret = getFilesInDir(directory, &files); - if (ret < 0) - return; - printTitle(title); - printf("Source\t\tCount\tSOC\tTime\tVoltage\n"); - for (auto &file : files) { - fileLocation = std::string(directory) + std::string(file); - if (!android::base::ReadFileToString(fileLocation, &content)) { - continue; - } - ret = atoi(android::base::Trim(content).c_str()); - if (ret == -1) - continue; - count = ret; - subModuleName = std::string(file); - subModuleName.erase(subModuleName.find(countSuffix), strlen(countSuffix)); - fileLocation = std::string(capacityDirectory) + std::string(subModuleName) + - std::string(capacitySuffix); - if (!android::base::ReadFileToString(fileLocation, &content)) { - continue; - } - ret = atoi(android::base::Trim(content).c_str()); - if (ret == -1) - continue; - soc = ret; - fileLocation = std::string(timestampDirectory) + std::string(subModuleName) + - std::string(timeSuffix); - if (!android::base::ReadFileToString(fileLocation, &content)) { - continue; - } - ret = atoi(android::base::Trim(content).c_str()); - if (ret == -1) - continue; - time = ret; - fileLocation = std::string(voltageDirectory) + std::string(subModuleName) + - std::string(voltageSuffix); - if (!android::base::ReadFileToString(fileLocation, &content)) { - continue; - } - ret = atoi(android::base::Trim(content).c_str()); - if (ret == -1) - continue; - voltage = ret; - printf("%s \t%i\t%i\t%i\t%i\n", subModuleName.c_str(), count, soc, time, voltage); - } -} -void dumpMitigationDirs() { - const int paramCount = 4; - const char *titles[] = { - "Clock Divider Ratio", - "Clock Stats", - "Triggered Level", - "Instruction", - }; - const char *directories[] = { - "/sys/devices/virtual/pmic/mitigation/clock_ratio/", - "/sys/devices/virtual/pmic/mitigation/clock_stats/", - "/sys/devices/virtual/pmic/mitigation/triggered_lvl/", - "/sys/devices/virtual/pmic/mitigation/instruction/", - }; - const char *paramSuffix[] = {"_ratio", "_stats", "_lvl", ""}; - const char *titleRowVal[] = { - "Source\t\tRatio", - "Source\t\tStats", - "Source\t\tLevel", - "", - }; - const int eraseCnt[] = {6, 6, 4, 0}; - const bool useTitleRow[] = {true, true, true, false}; - std::vector files; - std::string content; - std::string fileLocation; - std::string source; - std::string subModuleName; - std::string readout; - for (int i = 0; i < paramCount; i++) { - printTitle(titles[i]); - if (useTitleRow[i]) { - printf("%s\n", titleRowVal[i]); - } - getFilesInDir(directories[i], &files); - for (auto &file : files) { - fileLocation = std::string(directories[i]) + std::string(file); - if (!android::base::ReadFileToString(fileLocation, &content)) { - continue; - } - readout = android::base::Trim(content); - subModuleName = std::string(file); - subModuleName.erase(subModuleName.find(paramSuffix[i]), eraseCnt[i]); - if (useTitleRow[i]) { - printf("%s \t%s\n", subModuleName.c_str(), readout.c_str()); - } else { - printf("%s=%s\n", subModuleName.c_str(), readout.c_str()); - } - } - } -} -void dumpIrqDurationCounts() { - const char *title = "IRQ Duration Counts"; - const char *colNames = "Source\t\t\t\tlt_5ms_cnt\tbt_5ms_to_10ms_cnt\tgt_10ms_cnt\tCode" - "\tCurrent Threshold (uA)\tCurrent Reading (uA)\n"; - const int nonOdpmChannelCnt = 9; - const int odpmChCnt = 12; - enum Duration { - LT_5MS, - BT_5MS_10MS, - GT_10MS, - DUR_MAX, - }; - const char *irqDurDirectories[] = { - "/sys/devices/virtual/pmic/mitigation/irq_dur_cnt/less_than_5ms_count", - "/sys/devices/virtual/pmic/mitigation/irq_dur_cnt/between_5ms_to_10ms_count", - "/sys/devices/virtual/pmic/mitigation/irq_dur_cnt/greater_than_10ms_count", - }; - enum PowerWarn { - MAIN, - SUB, - PWRWARN_MAX, - }; - const char *pwrwarnDirectories[] = { - "/sys/devices/virtual/pmic/mitigation/main_pwrwarn/", - "/sys/devices/virtual/pmic/mitigation/sub_pwrwarn/", - }; - const char *lpfCurrentDirs[] = { - "/sys/devices/platform/acpm_mfd_bus@15500000/i2c-1/1-001f/s2mpg14-meter/" - "s2mpg14-odpm/iio:device1/lpf_current", - "/sys/devices/platform/acpm_mfd_bus@15510000/i2c-0/0-002f/s2mpg15-meter/" - "s2mpg15-odpm/iio:device0/lpf_current", - }; - bool titlesInitialized = false; - std::vector channelNames; - std::vector channelData[DUR_MAX]; - std::vector pwrwarnThreshold[PWRWARN_MAX]; - std::vector pwrwarnCode[PWRWARN_MAX]; - std::vector lpfCurrentVals[PWRWARN_MAX]; - std::vector files; - std::string content; - std::string token; - std::string tokenCh; - std::string fileLocation; - for (int i = 0; i < DUR_MAX; i++) { - if (!android::base::ReadFileToString(irqDurDirectories[i], &content)) { - return; - } - std::istringstream tokenStream(content); - while (std::getline(tokenStream, token, '\n')) { - if (!titlesInitialized) { - tokenCh = token; - tokenCh.erase(tokenCh.find(':'), tokenCh.length()); - channelNames.push_back(tokenCh); - } - // there is a space after the ':' which needs to be removed - token.erase(0, token.find(':') + 1); - channelData[i].push_back(token); - } - if (!titlesInitialized) - titlesInitialized = true; - } - for (int i = 0; i < PWRWARN_MAX; i++) { - getFilesInDir(pwrwarnDirectories[i], &files); - for (auto &file : files) { - fileLocation = std::string(pwrwarnDirectories[i]) + std::string(file); - if (!android::base::ReadFileToString(fileLocation, &content)) { - continue; - } - std::string readout; - readout = android::base::Trim(content); - std::string readoutThreshold = readout; - readoutThreshold.erase(0, readoutThreshold.find('=') + 1); - std::string readoutCode = readout; - readoutCode.erase(readoutCode.find('='), readoutCode.length()); - pwrwarnThreshold[i].push_back(readoutThreshold); - pwrwarnCode[i].push_back(readoutCode); - } - } - for (int i = 0; i < PWRWARN_MAX; i++) { - if (!android::base::ReadFileToString(lpfCurrentDirs[i], &content)) { - continue; - } - std::istringstream tokenStream(content); - bool first = true; - while (std::getline(tokenStream, token, '\n')) { - token.erase(0, token.find(' ')); - if (first) { - first = false; - continue; - } - lpfCurrentVals[i].push_back(token); - } - } - printTitle(title); - printf("%s", colNames); - for (uint i = 0; i < channelNames.size(); i++) { - std::string code = ""; - std::string threshold = ""; - std::string current = ""; - std::string ltDataMsg = ""; - std::string btDataMsg = ""; - std::string gtDataMsg = ""; - int pmicSel = 0; - int offset = 0; - std::string channelNameSuffix = " \t"; - if (i >= nonOdpmChannelCnt) { - offset = nonOdpmChannelCnt; - if (i >= (odpmChCnt + nonOdpmChannelCnt)) { - pmicSel = 1; - offset = odpmChCnt + nonOdpmChannelCnt; - } - channelNameSuffix = ""; - code = pwrwarnCode[pmicSel][i - offset]; - threshold = pwrwarnThreshold[pmicSel][i - offset]; - current = lpfCurrentVals[pmicSel][i - offset]; - } - if (i < channelData[0].size()) - ltDataMsg = channelData[0][i]; - if (i < channelData[1].size()) - btDataMsg = channelData[1][i]; - if (i < channelData[2].size()) - gtDataMsg = channelData[2][i]; - std::string adjustedChannelName = channelNames[i] + channelNameSuffix; - printf("%s \t%s\t\t%s\t\t\t%s\t\t%s \t%s \t\t%s\n", - adjustedChannelName.c_str(), - ltDataMsg.c_str(), - btDataMsg.c_str(), - gtDataMsg.c_str(), - code.c_str(), - threshold.c_str(), - current.c_str()); - } -} -int main() { - dumpPowerStatsTimes(); - dumpAcpmStats(); - dumpPowerSupplyStats(); - dumpMaxFg(); - dumpPowerSupplyDock(); - dumpLogBufferTcpm(); - dumpTcpc(); - dumpPdEngine(); - dumpBatteryHealth(); - dumpBatteryDefend(); - dumpBatteryCaretaker(); - dumpChg(); - dumpChgUserDebug(); - dumpBatteryEeprom(); - dumpChargerStats(); - dumpWlcLogs(); - dumpGvoteables(); - dumpMitigation(); - dumpMitigationStats(); - dumpMitigationDirs(); - dumpIrqDurationCounts(); -} diff --git a/dumpstate/dump_power.rc b/dumpstate/dump_power.rc deleted file mode 100644 index 3ccc2f3c..00000000 --- a/dumpstate/dump_power.rc +++ /dev/null @@ -1,131 +0,0 @@ -on init - # Dump maxfg - chown system system /sys/class/power_supply/maxfg/m5_model_state - chown system system /sys/class/power_supply/maxfg_base/model_state - chown system system /sys/class/power_supply/max77779fg/model_state - - # Dump eeprom - chown system system /sys/devices/platform/10c90000.hsi2c/i2c-9/9-0050/eeprom - chown system system /sys/devices/platform/10ca0000.hsi2c/i2c-10/10-0050/eeprom - - chown system system /dev/battery_history - chmod 0644 /dev/battery_history - - chown system system /dev/maxfg_history - chmod 0644 /dev/maxfg_history - - # Charge stats (write 0) - chown system system /sys/class/power_supply/battery/charge_stats - - # Pca Charge stats (write 0) - chown system system /sys/class/power_supply/dc-mains/device/chg_stats - - # Wireless Charge stats (write 0) - chown system system /sys/class/power_supply/wireless/device/charge_stats - - # Thermal Charge stats (write 0) - chown system system /sys/devices/platform/google,charger/thermal_stats - - # Google Charger stats (write 0) - chown system system /sys/devices/platform/google,charger/charge_stats - - # Permission for wireless charging - chown system system /sys/class/power_supply/wireless/capacity - chown system system /sys/class/power_supply/wireless/device/rtx - chown system system /sys/class/power_supply/wireless/device/rxdata - chown system system /sys/class/power_supply/wireless/device/txdata - chown system system /sys/class/power_supply/wireless/device/rxlen - chown system system /sys/class/power_supply/wireless/device/txlen - chown system system /sys/class/power_supply/wireless/device/ccreset - chown system system /sys/class/power_supply/wireless/device/status - chown system system /sys/class/power_supply/wireless/device/version - chown system system /sys/class/power_supply/wireless/device/features - chown system system /sys/class/power_supply/wireless/device/authtype - chown system system /sys/class/power_supply/wireless/device/authstart - - # Adaptive charge - chown system system /sys/class/power_supply/battery/charge_deadline - - # Charging policy - chown system system /sys/class/power_supply/battery/charging_policy - - # BatteryHealthData - chown system system /sys/class/power_supply/battery/first_usage_date - - # Battery Defender - chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_cnt - chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_dry_run - chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_enable - chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_recharge_soc - chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_reset_sec - chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_clear - chown system system /sys/devices/platform/google,battery/power_supply/battery/health_safety_margin - chown system system /sys/devices/platform/google,battery/power_supply/battery/swelling_data - chown system system /sys/devices/platform/google,charger/bd_drainto_soc - chown system system /sys/devices/platform/google,charger/bd_recharge_soc - chown system system /sys/devices/platform/google,charger/bd_recharge_voltage - chown system system /sys/devices/platform/google,charger/bd_resume_abs_temp - chown system system /sys/devices/platform/google,charger/bd_resume_soc - chown system system /sys/devices/platform/google,charger/bd_resume_temp - chown system system /sys/devices/platform/google,charger/bd_resume_time - chown system system /sys/devices/platform/google,charger/bd_temp_dry_run - chown system system /sys/devices/platform/google,charger/bd_temp_enable - chown system system /sys/devices/platform/google,charger/bd_trigger_temp - chown system system /sys/devices/platform/google,charger/bd_trigger_time - chown system system /sys/devices/platform/google,charger/bd_trigger_voltage - chown system system /sys/devices/platform/google,charger/bd_clear - chown system system /sys/devices/platform/google,charger/charge_start_level - chown system system /sys/devices/platform/google,charger/charge_stop_level - chown system system /sys/devices/platform/google,cpm/dc_ctl - # Important to include dd_state as it's used in battery defender in charger mode - chown system system /sys/devices/platform/google,charger/dd_state - chown system system /sys/devices/platform/google,charger/dd_settings - - # for parsing thismeal.bin - chown system system /vendor/bin/hw/battery_mitigation - -on early-boot - # Wait for insmod_sh to finish all common modules - wait_for_prop vendor.common.modules.ready 1 - - # logbuffer - chown system system /dev/logbuffer_maxfg - chown system system /dev/logbuffer_maxfg_monitor - chown system system /dev/logbuffer_max77779fg - chown system system /dev/logbuffer_max77779fg_monitor - chown system system /dev/logbuffer_maxfg_base - chown system system /dev/logbuffer_maxfg_secondary - chown system system /dev/logbuffer_maxfg_base_monitor - chown system system /dev/logbuffer_maxfg_secondary_monitor - chown system system /dev/logbuffer_maxq - chown system system /dev/logbuffer_rtx - chown system system /dev/logbuffer_ssoc - chown system system /dev/logbuffer_ttf - chown system system /dev/logbuffer_tcpm - chown system system /dev/logbuffer_usbpd - chown system system /dev/logbuffer_pogo_transport - chown system system /dev/logbuffer_wireless - chown system system /dev/logbuffer_pca9468 - chown system system /dev/logbuffer_ln8411 - chown system system /dev/logbuffer_cpm - chown system system /dev/logbuffer_wc68 - chown system system /dev/logbuffer_max77779_fwupdate - -on property:sys.boot_completed=1 - # gvotables for dumpstate - chown system system /sys/kernel/debug/gvotables - - # Permission for wireless charging - chown system system /sys/class/power_supply/wireless/capacity - chown system system /sys/class/power_supply/wireless/device/rtx - chown system system /sys/class/power_supply/wireless/device/rxdata - chown system system /sys/class/power_supply/wireless/device/txdata - chown system system /sys/class/power_supply/wireless/device/rxlen - chown system system /sys/class/power_supply/wireless/device/txlen - chown system system /sys/class/power_supply/wireless/device/ccreset - chown system system /sys/class/power_supply/wireless/device/status - chown system system /sys/class/power_supply/wireless/device/version - chown system system /sys/class/power_supply/wireless/device/authstart - - # write serialno to battery path for pairing - write /sys/class/power_supply/battery/dev_sn ${ro.boot.serialno} diff --git a/powerstats/Android.bp b/powerstats/Android.bp deleted file mode 100644 index f5a58755..00000000 --- a/powerstats/Android.bp +++ /dev/null @@ -1,38 +0,0 @@ -// -// SPDX-FileCopyrightText: 2020 The Android Open Source Project -// SPDX-License-Identifier: Apache-2.0 -// - -soong_namespace { - imports: [ - "hardware/google/pixel", - "device/google/gs-common/powerstats", - ], -} - -package { - // See: http://go/android-license-faq - // A large-scale-change added 'default_applicable_licenses' to import - // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license" - // to get the below license kinds: - // SPDX-license-identifier-Apache-2.0 - default_applicable_licenses: [ - "//device/google/gs101:device_google_gs101_license", - ], -} - -cc_library { - name: "android.hardware.power.stats-impl.gs101", - vendor_available: true, - export_include_dirs: ["include"], - defaults: ["powerstats_pixel_defaults"], - - srcs: [ - "*.cpp", - ], - - shared_libs: [ - "android.hardware.power.stats-impl.gs-common", - "android.hardware.power.stats-impl.pixel", - ], -} diff --git a/powerstats/Gs101CommonDataProviders.cpp b/powerstats/Gs101CommonDataProviders.cpp deleted file mode 100644 index 85bbbc45..00000000 --- a/powerstats/Gs101CommonDataProviders.cpp +++ /dev/null @@ -1,719 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include "AocStateResidencyDataProvider.h" -#include "DevfreqStateResidencyDataProvider.h" -#include -#include "DvfsStateResidencyDataProvider.h" -#include "UfsStateResidencyDataProvider.h" -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -using aidl::android::hardware::power::stats::AocStateResidencyDataProvider; -using aidl::android::hardware::power::stats::DevfreqStateResidencyDataProvider; -using aidl::android::hardware::power::stats::DisplayMrrStateResidencyDataProvider; -using aidl::android::hardware::power::stats::DvfsStateResidencyDataProvider; -using aidl::android::hardware::power::stats::UfsStateResidencyDataProvider; -using aidl::android::hardware::power::stats::EnergyConsumerType; -using aidl::android::hardware::power::stats::GenericStateResidencyDataProvider; -using aidl::android::hardware::power::stats::IioEnergyMeterDataProvider; -using aidl::android::hardware::power::stats::PixelStateResidencyDataProvider; -using aidl::android::hardware::power::stats::PowerStatsEnergyConsumer; - -constexpr char kBootHwSoCRev[] = "ro.boot.hw.soc.rev"; - -void addAoC(std::shared_ptr p) { - // AoC clock is synced from "libaoc.c" - static const uint64_t AOC_CLOCK = 4096; - std::string prefix = "/sys/devices/platform/19000000.aoc/control/"; - - // Add AoC cores (a32, ff1, hf0, and hf1) - std::vector> coreIds = { - {"AoC-A32", prefix + "a32_"}, - {"AoC-FF1", prefix + "ff1_"}, - {"AoC-HF1", prefix + "hf1_"}, - {"AoC-HF0", prefix + "hf0_"}, - }; - std::vector> coreStates = { - {"DWN", "off"}, {"RET", "retention"}, {"WFI", "wfi"}}; - p->addStateResidencyDataProvider(std::make_unique(coreIds, - coreStates, AOC_CLOCK)); - - // Add AoC voltage stats - std::vector> voltageIds = { - {"AoC-Voltage", prefix + "voltage_"}, - }; - std::vector> voltageStates = {{"NOM", "nominal"}, - {"SUD", "super_underdrive"}, - {"UUD", "ultra_underdrive"}, - {"UD", "underdrive"}}; - p->addStateResidencyDataProvider( - std::make_unique(voltageIds, voltageStates, AOC_CLOCK)); - - // Add AoC monitor mode - std::vector> monitorIds = { - {"AoC", prefix + "monitor_"}, - }; - std::vector> monitorStates = { - {"MON", "mode"}, - }; - p->addStateResidencyDataProvider( - std::make_unique(monitorIds, monitorStates, AOC_CLOCK)); - - // Add AoC restart count - const GenericStateResidencyDataProvider::StateResidencyConfig restartCountConfig = { - .entryCountSupported = true, - .entryCountPrefix = "", - .totalTimeSupported = false, - .lastEntrySupported = false, - }; - const std::vector> restartCountHeaders = { - std::make_pair("RESTART", ""), - }; - std::vector cfgs; - cfgs.emplace_back( - generateGenericStateResidencyConfigs(restartCountConfig, restartCountHeaders), - "AoC-Count", ""); - p->addStateResidencyDataProvider(std::make_unique( - "/sys/devices/platform/19000000.aoc/restart_count", cfgs)); -} - -void addDvfsStats(std::shared_ptr p) { - // A constant to represent the number of nanoseconds in one millisecond - const int NS_TO_MS = 1000000; - - std::vector cfgs; - - cfgs.push_back({"MIF", { - std::make_pair("3172MHz", "3172000"), - std::make_pair("2730MHz", "2730000"), - std::make_pair("2535MHz", "2535000"), - std::make_pair("2288MHz", "2288000"), - std::make_pair("2028MHz", "2028000"), - std::make_pair("1716MHz", "1716000"), - std::make_pair("1539MHz", "1539000"), - std::make_pair("1352MHz", "1352000"), - std::make_pair("1014MHz", "1014000"), - std::make_pair("845MHz", "845000"), - std::make_pair("676MHz", "676000"), - std::make_pair("546MHz", "546000"), - std::make_pair("421MHz", "421000"), - std::make_pair("0MHz", "0"), - }}); - - cfgs.push_back({"CL1", { - std::make_pair("2466MHz", "2466000"), - std::make_pair("2393MHz", "2393000"), - std::make_pair("2348MHz", "2348000"), - std::make_pair("2253MHz", "2253000"), - std::make_pair("2130MHz", "2130000"), - std::make_pair("1999MHz", "1999000"), - std::make_pair("1836MHz", "1836000"), - std::make_pair("1663MHz", "1663000"), - std::make_pair("1491MHz", "1491000"), - std::make_pair("1328MHz", "1328000"), - std::make_pair("1197MHz", "1197000"), - std::make_pair("1024MHz", "1024000"), - std::make_pair("910MHz", "910000"), - std::make_pair("799MHz", "799000"), - std::make_pair("696MHz", "696000"), - std::make_pair("533MHz", "533000"), - std::make_pair("400MHz", "400000"), - std::make_pair("0MHz", "0"), - }}); - - // B0/B1 chips have different DVFS operating points than A0/A1 SoC - const int socRev = android::base::GetIntProperty(kBootHwSoCRev, 0); - if (socRev >= 2) { - cfgs.push_back({"CL0", { - std::make_pair("2196MHz", "2196000"), - std::make_pair("2098MHz", "2098000"), - std::make_pair("2024MHz", "2024000"), - std::make_pair("1950MHz", "1950000"), - std::make_pair("1803MHz", "1803000"), - std::make_pair("1704MHz", "1704000"), - std::make_pair("1598MHz", "1598000"), - std::make_pair("1401MHz", "1401000"), - std::make_pair("1328MHz", "1328000"), - std::make_pair("1197MHz", "1197000"), - std::make_pair("1098MHz", "1098000"), - std::make_pair("930MHz", "930000"), - std::make_pair("738MHz", "738000"), - std::make_pair("574MHz", "574000"), - std::make_pair("300MHz", "300000"), - std::make_pair("0MHz", "0"), - }}); - - cfgs.push_back({"CL2", { - std::make_pair("3195MHz", "3195000"), - std::make_pair("3097MHz", "3097000"), - std::make_pair("2950MHz", "2950000"), - std::make_pair("2850MHz", "2850000"), - std::make_pair("2802MHz", "2802000"), - std::make_pair("2704MHz", "2704000"), - std::make_pair("2630MHz", "2630000"), - std::make_pair("2507MHz", "2507000"), - std::make_pair("2401MHz", "2401000"), - std::make_pair("2252MHz", "2252000"), - std::make_pair("2188MHz", "2188000"), - std::make_pair("2048MHz", "2048000"), - std::make_pair("1826MHz", "1826000"), - std::make_pair("1745MHz", "1745000"), - std::make_pair("1582MHz", "1582000"), - std::make_pair("1426MHz", "1426000"), - std::make_pair("1277MHz", "1277000"), - std::make_pair("1106MHz", "1106000"), - std::make_pair("984MHz", "984000"), - std::make_pair("851MHz", "851000"), - std::make_pair("500MHz", "500000"), - std::make_pair("0MHz", "0"), - }}); - - cfgs.push_back({"TPU", { - std::make_pair("1230MHz", "1230000"), - std::make_pair("1066MHz", "1066000"), - std::make_pair("800MHz", "800000"), - std::make_pair("500MHz", "500000"), - std::make_pair("226MHz", "226000"), - std::make_pair("RET_SLOW", "6"), - std::make_pair("S_OFF", "5"), - std::make_pair("S_SLOW", "4"), - std::make_pair("DS_FAST", "3"), - std::make_pair("DS_SLOW", "2"), - std::make_pair("DS_OFF", "1"), - std::make_pair("OFF", "0"), - }}); - } else { - cfgs.push_back({"CL0", { - std::make_pair("2196MHz", "2196000"), - std::make_pair("2098MHz", "2098000"), - std::make_pair("2024MHz", "2024000"), - std::make_pair("1950MHz", "1950000"), - std::make_pair("1868MHz", "1868000"), - std::make_pair("1745MHz", "1745000"), - std::make_pair("1598MHz", "1598000"), - std::make_pair("1459MHz", "1459000"), - std::make_pair("1328MHz", "1328000"), - std::make_pair("1197MHz", "1197000"), - std::make_pair("1098MHz", "1098000"), - std::make_pair("889MHz", "889000"), - std::make_pair("738MHz", "738000"), - std::make_pair("574MHz", "574000"), - std::make_pair("300MHz", "300000"), - std::make_pair("0MHz", "0"), - }}); - - cfgs.push_back({"CL2", { - std::make_pair("3195MHz", "3195000"), - std::make_pair("3097MHz", "3097000"), - std::make_pair("2999MHz", "2999000"), - std::make_pair("2900MHz", "2900000"), - std::make_pair("2802MHz", "2802000"), - std::make_pair("2704MHz", "2704000"), - std::make_pair("2630MHz", "2630000"), - std::make_pair("2507MHz", "2507000"), - std::make_pair("2302MHz", "2302000"), - std::make_pair("2188MHz", "2188000"), - std::make_pair("2048MHz", "2048000"), - std::make_pair("1901MHz", "1901000"), - std::make_pair("1745MHz", "1745000"), - std::make_pair("1582MHz", "1582000"), - std::make_pair("1426MHz", "1426000"), - std::make_pair("1237MHz", "1237000"), - std::make_pair("1106MHz", "1106000"), - std::make_pair("984MHz", "984000"), - std::make_pair("848MHz", "848000"), - std::make_pair("500MHz", "500000"), - std::make_pair("0MHz", "0"), - }}); - - cfgs.push_back({"TPU", { - std::make_pair("1393MHz", "1393000"), - std::make_pair("1180MHz", "1180000"), - std::make_pair("1049MHz", "1049000"), - std::make_pair("967MHz", "967000"), - std::make_pair("721MHz", "721000"), - std::make_pair("648MHz", "648000"), - std::make_pair("455MHz", "455000"), - std::make_pair("250MHz", "250000"), - std::make_pair("RET_SLOW", "6"), - std::make_pair("S_OFF", "5"), - std::make_pair("S_SLOW", "4"), - std::make_pair("DS_FAST", "3"), - std::make_pair("DS_SLOW", "2"), - std::make_pair("DS_OFF", "1"), - std::make_pair("OFF", "0"), - }}); - } - - p->addStateResidencyDataProvider(std::make_unique( - "/sys/devices/platform/acpm_stats/fvp_stats", NS_TO_MS, cfgs)); -} - -void addSoC(std::shared_ptr p) { - // A constant to represent the number of nanoseconds in one millisecond. - const int NS_TO_MS = 1000000; - - // ACPM stats are reported in nanoseconds. The transform function - // converts nanoseconds to milliseconds. - std::function acpmNsToMs = [](uint64_t a) { return a / NS_TO_MS; }; - const GenericStateResidencyDataProvider::StateResidencyConfig lpmStateConfig = { - .entryCountSupported = true, - .entryCountPrefix = "success_count:", - .totalTimeSupported = true, - .totalTimePrefix = "total_time_ns:", - .totalTimeTransform = acpmNsToMs, - .lastEntrySupported = true, - .lastEntryPrefix = "last_entry_time_ns:", - .lastEntryTransform = acpmNsToMs, - }; - const GenericStateResidencyDataProvider::StateResidencyConfig downStateConfig = { - .entryCountSupported = true, - .entryCountPrefix = "down_count:", - .totalTimeSupported = true, - .totalTimePrefix = "total_down_time_ns:", - .totalTimeTransform = acpmNsToMs, - .lastEntrySupported = true, - .lastEntryPrefix = "last_down_time_ns:", - .lastEntryTransform = acpmNsToMs, - }; - const GenericStateResidencyDataProvider::StateResidencyConfig reqStateConfig = { - .entryCountSupported = true, - .entryCountPrefix = "req_up_count:", - .totalTimeSupported = true, - .totalTimePrefix = "total_req_up_time_ns:", - .totalTimeTransform = acpmNsToMs, - .lastEntrySupported = true, - .lastEntryPrefix = "last_req_up_time_ns:", - .lastEntryTransform = acpmNsToMs, - - }; - const std::vector> powerStateHeaders = { - std::make_pair("SICD", "SICD"), - std::make_pair("SLEEP", "SLEEP"), - std::make_pair("SLEEP_SLCMON", "SLEEP_SLCMON"), - std::make_pair("STOP", "STOP"), - }; - const std::vector> mifReqStateHeaders = { - std::make_pair("AOC", "AOC"), - std::make_pair("GSA", "GSA"), - }; - const std::vector> slcReqStateHeaders = { - std::make_pair("AOC", "AOC"), - }; - - std::vector cfgs; - cfgs.emplace_back(generateGenericStateResidencyConfigs(lpmStateConfig, powerStateHeaders), - "LPM", "LPM:"); - cfgs.emplace_back(generateGenericStateResidencyConfigs(downStateConfig, powerStateHeaders), - "MIF", "MIF:"); - cfgs.emplace_back(generateGenericStateResidencyConfigs(reqStateConfig, mifReqStateHeaders), - "MIF-REQ", "MIF_REQ:"); - cfgs.emplace_back(generateGenericStateResidencyConfigs(downStateConfig, powerStateHeaders), - "SLC", "SLC:"); - cfgs.emplace_back(generateGenericStateResidencyConfigs(reqStateConfig, slcReqStateHeaders), - "SLC-REQ", "SLC_REQ:"); - - p->addStateResidencyDataProvider(std::make_unique( - "/sys/devices/platform/acpm_stats/soc_stats", cfgs)); -} - -void setEnergyMeter(std::shared_ptr p) { - std::vector deviceNames { "s2mpg10-odpm", "s2mpg11-odpm" }; - p->setEnergyMeterDataProvider(std::make_unique(deviceNames, true)); -} - -void addCPUclusters(std::shared_ptr p) { - // A constant to represent the number of nanoseconds in one millisecond. - const int NS_TO_MS = 1000000; - - std::function acpmNsToMs = [](uint64_t a) { return a / NS_TO_MS; }; - const GenericStateResidencyDataProvider::StateResidencyConfig cpuStateConfig = { - .entryCountSupported = true, - .entryCountPrefix = "down_count:", - .totalTimeSupported = true, - .totalTimePrefix = "total_down_time_ns:", - .totalTimeTransform = acpmNsToMs, - .lastEntrySupported = true, - .lastEntryPrefix = "last_down_time_ns:", - .lastEntryTransform = acpmNsToMs, - }; - - const std::vector> cpuStateHeaders = { - std::make_pair("DOWN", ""), - }; - - std::vector cfgs; - for (std::string name : {"CORE00", "CORE01", "CORE02", "CORE03", "CORE10", "CORE11", - "CORE20", "CORE21", "CLUSTER0", "CLUSTER1", "CLUSTER2"}) { - cfgs.emplace_back(generateGenericStateResidencyConfigs(cpuStateConfig, cpuStateHeaders), - name, name); - } - - p->addStateResidencyDataProvider(std::make_unique( - "/sys/devices/platform/acpm_stats/core_stats", cfgs)); - - p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p, - EnergyConsumerType::CPU_CLUSTER, "CPUCL0", {"S4M_VDD_CPUCL0"})); - p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p, - EnergyConsumerType::CPU_CLUSTER, "CPUCL1", {"S3M_VDD_CPUCL1"})); - p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p, - EnergyConsumerType::CPU_CLUSTER, "CPUCL2", {"S2M_VDD_CPUCL2"})); -} - -void addGPU(std::shared_ptr p) { - // Add gpu energy consumer - std::map stateCoeffs; - const int socRev = android::base::GetIntProperty(kBootHwSoCRev, 0); - - // B0/B1 chips have different GPU DVFS operating points than A0/A1 SoC - if (socRev >= 2) { - stateCoeffs = { - {"151000", 642}, - {"202000", 890}, - {"251000", 1102}, - {"302000", 1308}, - {"351000", 1522}, - {"400000", 1772}, - {"471000", 2105}, - {"510000", 2292}, - {"572000", 2528}, - {"701000", 3127}, - {"762000", 3452}, - {"848000", 4044}}; - } else { - stateCoeffs = { - {"151000", 843}, - {"302000", 1529}, - {"455000", 2298}, - {"572000", 2866}, - {"670000", 3191}}; - } - - p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterAndAttrConsumer(p, - EnergyConsumerType::OTHER, "GPU", {"S2S_VDD_G3D"}, - {{UID_TIME_IN_STATE, "/sys/devices/platform/1c500000.mali/uid_time_in_state"}}, - stateCoeffs)); - - p->addStateResidencyDataProvider(std::make_unique("GPU", - "/sys/bus/platform/devices/1c500000.mali")); -} - -void addMobileRadio(std::shared_ptr p) -{ - // A constant to represent the number of microseconds in one millisecond. - const int US_TO_MS = 1000; - - // modem power_stats are reported in microseconds. The transform function - // converts microseconds to milliseconds. - std::function modemUsToMs = [](uint64_t a) { return a / US_TO_MS; }; - const GenericStateResidencyDataProvider::StateResidencyConfig powerStateConfig = { - .entryCountSupported = true, - .entryCountPrefix = "count:", - .totalTimeSupported = true, - .totalTimePrefix = "duration_usec:", - .totalTimeTransform = modemUsToMs, - .lastEntrySupported = true, - .lastEntryPrefix = "last_entry_timestamp_usec:", - .lastEntryTransform = modemUsToMs, - }; - const std::vector> powerStateHeaders = { - std::make_pair("SLEEP", "SLEEP:"), - }; - - std::vector cfgs; - cfgs.emplace_back(generateGenericStateResidencyConfigs(powerStateConfig, powerStateHeaders), - "MODEM", ""); - - p->addStateResidencyDataProvider(std::make_unique( - "/sys/devices/platform/cpif/modem/power_stats", cfgs)); - - p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p, - EnergyConsumerType::MOBILE_RADIO, "MODEM", {"VSYS_PWR_MODEM", "VSYS_PWR_RFFE"})); -} - -void addGNSS(std::shared_ptr p) -{ - // A constant to represent the number of microseconds in one millisecond. - const int US_TO_MS = 1000; - - // gnss power_stats are reported in microseconds. The transform function - // converts microseconds to milliseconds. - std::function gnssUsToMs = [](uint64_t a) { return a / US_TO_MS; }; - - const GenericStateResidencyDataProvider::StateResidencyConfig gnssStateConfig = { - .entryCountSupported = true, - .entryCountPrefix = "count:", - .totalTimeSupported = true, - .totalTimePrefix = "duration_usec:", - .totalTimeTransform = gnssUsToMs, - .lastEntrySupported = true, - .lastEntryPrefix = "last_entry_timestamp_usec:", - .lastEntryTransform = gnssUsToMs, - }; - - const std::vector> gnssStateHeaders = { - std::make_pair("ON", "GPS_ON:"), - std::make_pair("OFF", "GPS_OFF:"), - }; - - std::vector cfgs; - cfgs.emplace_back(generateGenericStateResidencyConfigs(gnssStateConfig, gnssStateHeaders), - "GPS", ""); - - p->addStateResidencyDataProvider(std::make_unique( - "/dev/bbd_pwrstat", cfgs)); - - p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p, - EnergyConsumerType::GNSS, "GPS", {"L9S_GNSS_CORE"})); -} - -void addPCIe(std::shared_ptr p) { - // Add PCIe power entities for Modem and WiFi - const GenericStateResidencyDataProvider::StateResidencyConfig pcieStateConfig = { - .entryCountSupported = true, - .entryCountPrefix = "Cumulative count:", - .totalTimeSupported = true, - .totalTimePrefix = "Cumulative duration msec:", - .lastEntrySupported = true, - .lastEntryPrefix = "Last entry timestamp msec:", - }; - const std::vector> pcieStateHeaders = { - std::make_pair("UP", "Link up:"), - std::make_pair("DOWN", "Link down:"), - }; - - // Add PCIe - Modem - const std::vector pcieModemCfgs = { - {generateGenericStateResidencyConfigs(pcieStateConfig, pcieStateHeaders), "PCIe-Modem", - "Version: 1"} - }; - - p->addStateResidencyDataProvider(std::make_unique( - "/sys/devices/platform/11920000.pcie/power_stats", pcieModemCfgs)); - - // Add PCIe - WiFi - const std::vector pcieWifiCfgs = { - {generateGenericStateResidencyConfigs(pcieStateConfig, pcieStateHeaders), - "PCIe-WiFi", "Version: 1"} - }; - - p->addStateResidencyDataProvider(std::make_unique( - "/sys/devices/platform/14520000.pcie/power_stats", pcieWifiCfgs)); -} - -void addWifi(std::shared_ptr p) { - // The transform function converts microseconds to milliseconds. - std::function usecToMs = [](uint64_t a) { return a / 1000; }; - const GenericStateResidencyDataProvider::StateResidencyConfig stateConfig = { - .entryCountSupported = true, - .entryCountPrefix = "count:", - .totalTimeSupported = true, - .totalTimePrefix = "duration_usec:", - .totalTimeTransform = usecToMs, - .lastEntrySupported = true, - .lastEntryPrefix = "last_entry_timestamp_usec:", - .lastEntryTransform = usecToMs, - }; - const GenericStateResidencyDataProvider::StateResidencyConfig pcieStateConfig = { - .entryCountSupported = true, - .entryCountPrefix = "count:", - .totalTimeSupported = true, - .totalTimePrefix = "duration_usec:", - .totalTimeTransform = usecToMs, - .lastEntrySupported = false, - }; - - const std::vector> stateHeaders = { - std::make_pair("AWAKE", "AWAKE:"), - std::make_pair("ASLEEP", "ASLEEP:"), - - }; - const std::vector> pcieStateHeaders = { - std::make_pair("L0", "L0:"), - std::make_pair("L1", "L1:"), - std::make_pair("L1_1", "L1_1:"), - std::make_pair("L1_2", "L1_2:"), - std::make_pair("L2", "L2:"), - }; - - const std::vector cfgs = { - {generateGenericStateResidencyConfigs(stateConfig, stateHeaders), "WIFI", "WIFI"}, - {generateGenericStateResidencyConfigs(pcieStateConfig, pcieStateHeaders), "WIFI-PCIE", - "WIFI-PCIE"} - }; - - p->addStateResidencyDataProvider(std::make_unique("/sys/wifi/power_stats", - cfgs)); -} - -void addUfs(std::shared_ptr p) { - p->addStateResidencyDataProvider(std::make_unique("/sys/bus/platform/devices/14700000.ufs/ufs_stats/")); -} - -void addPowerDomains(std::shared_ptr p) { - // A constant to represent the number of nanoseconds in one millisecond. - const int NS_TO_MS = 1000000; - - std::function acpmNsToMs = [](uint64_t a) { return a / NS_TO_MS; }; - const GenericStateResidencyDataProvider::StateResidencyConfig cpuStateConfig = { - .entryCountSupported = true, - .entryCountPrefix = "on_count:", - .totalTimeSupported = true, - .totalTimePrefix = "total_on_time_ns:", - .totalTimeTransform = acpmNsToMs, - .lastEntrySupported = true, - .lastEntryPrefix = "last_on_time_ns:", - .lastEntryTransform = acpmNsToMs, - }; - - const std::vector> cpuStateHeaders = { - std::make_pair("ON", ""), - }; - - std::vector cfgs; - for (std::string name : {"pd-tpu", "pd-bo", "pd-tnr", "pd-gdc", "pd-mcsc", "pd-ipp", - "pd-g3aa", "pd-dns", "pd-itp", "pd-pdp", "pd-csis", - "pd-mfc", "pd-g2d", "pd-dpu", "pd-disp", "pd-hsi0", - "pd-embedded_g3d", "pd-g3d", "pd-eh"}) { - cfgs.emplace_back(generateGenericStateResidencyConfigs(cpuStateConfig, cpuStateHeaders), - name, name + ":"); - } - - p->addStateResidencyDataProvider(std::make_unique( - "/sys/devices/platform/acpm_stats/pd_stats", cfgs)); -} - -void addDevfreq(std::shared_ptr p) { - p->addStateResidencyDataProvider(std::make_unique( - "INT", - "/sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int")); - - p->addStateResidencyDataProvider(std::make_unique( - "INTCAM", - "/sys/devices/platform/17000030.devfreq_intcam/devfreq/17000030.devfreq_intcam")); - - p->addStateResidencyDataProvider(std::make_unique( - "DISP", - "/sys/devices/platform/17000040.devfreq_disp/devfreq/17000040.devfreq_disp")); - - p->addStateResidencyDataProvider(std::make_unique( - "CAM", - "/sys/devices/platform/17000050.devfreq_cam/devfreq/17000050.devfreq_cam")); - - p->addStateResidencyDataProvider(std::make_unique( - "TNR", - "/sys/devices/platform/17000060.devfreq_tnr/devfreq/17000060.devfreq_tnr")); - - p->addStateResidencyDataProvider(std::make_unique( - "MFC", - "/sys/devices/platform/17000070.devfreq_mfc/devfreq/17000070.devfreq_mfc")); - - p->addStateResidencyDataProvider(std::make_unique( - "BO", - "/sys/devices/platform/17000080.devfreq_bo/devfreq/17000080.devfreq_bo")); -} - -void addTPU(std::shared_ptr p) { - std::map stateCoeffs; - - stateCoeffs = { - {"226000", 49.25}, - {"500000", 73.80}, - {"800000", 86.99}, - {"1066000", 103.93}, - {"1230000", 108.10}}; - - p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterAndAttrConsumer(p, - EnergyConsumerType::OTHER, "TPU", {"S10M_VDD_TPU"}, - {{UID_TIME_IN_STATE, "/sys/class/edgetpu/edgetpu-soc/device/tpu_usage"}}, - stateCoeffs)); -} - -/** - * Unlike other data providers, which source power entity state residency data from the kernel, - * this data provider acts as a general-purpose channel for state residency data providers - * that live in user space. Entities are defined here and user space clients of this provider's - * vendor service register callbacks to provide state residency data for their given pwoer entity. - */ -void addPixelStateResidencyDataProvider(std::shared_ptr p) { - - auto pixelSdp = std::make_unique(); - - pixelSdp->addEntity("Bluetooth", {{0, "Idle"}, {1, "Active"}, {2, "Tx"}, {3, "Rx"}}); - - pixelSdp->start(); - - p->addStateResidencyDataProvider(std::move(pixelSdp)); -} - -void addDisplayMrr(std::shared_ptr p) { - p->addStateResidencyDataProvider(std::make_unique( - "Display", "/sys/class/drm/card0/device/primary-panel/")); -} - -void addGs101CommonDataProviders(std::shared_ptr p) { - setEnergyMeter(p); - - addPixelStateResidencyDataProvider(p); - addAoC(p); - addDvfsStats(p); - addSoC(p); - addCPUclusters(p); - addGPU(p); - addMobileRadio(p); - addGNSS(p); - addPCIe(p); - addWifi(p); - addUfs(p); - addPowerDomains(p); - addDevfreq(p); - addTPU(p); -} - -void addNFC(std::shared_ptr p, const std::string& path) { - const GenericStateResidencyDataProvider::StateResidencyConfig nfcStateConfig = { - .entryCountSupported = true, - .entryCountPrefix = "Cumulative count:", - .totalTimeSupported = true, - .totalTimePrefix = "Cumulative duration msec:", - .lastEntrySupported = true, - .lastEntryPrefix = "Last entry timestamp msec:", - }; - const std::vector> nfcStateHeaders = { - std::make_pair("IDLE", "Idle mode:"), - std::make_pair("ACTIVE", "Active mode:"), - std::make_pair("ACTIVE-RW", "Active Reader/Writer mode:"), - }; - - std::vector cfgs; - cfgs.emplace_back(generateGenericStateResidencyConfigs(nfcStateConfig, nfcStateHeaders), - "NFC", "NFC subsystem"); - - p->addStateResidencyDataProvider(std::make_unique( - path, cfgs)); -} diff --git a/powerstats/include/Gs101CommonDataProviders.h b/powerstats/include/Gs101CommonDataProviders.h deleted file mode 100644 index 469d5143..00000000 --- a/powerstats/include/Gs101CommonDataProviders.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include - -using aidl::android::hardware::power::stats::PowerStats; - -void addGs101CommonDataProviders(std::shared_ptr p); - -void addDisplayMrr(std::shared_ptr p); -void addNFC(std::shared_ptr p, const std::string& path);