From 0eacfc8f9e637722c41df934349241cee65f74c9 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Fri, 20 Nov 2020 12:16:35 +0100 Subject: [PATCH] sm8250-common: power: Rebase on LA.UM.9.12.r1-09000-SMxx50.0 --- common.mk | 2 +- power/Android.mk | 25 ++-- power/Power.cpp | 132 +++++++++++--------- power/Power.h | 54 +++----- power/android.hardware.power-service.rc | 4 + power/android.hardware.power@1.2-service.rc | 4 - power/{service.cpp => main.cpp} | 64 +++------- power/power-common-old.h | 50 ++++++++ sepolicy/private/file_contexts | 2 +- 9 files changed, 182 insertions(+), 155 deletions(-) create mode 100644 power/android.hardware.power-service.rc delete mode 100644 power/android.hardware.power@1.2-service.rc rename power/{service.cpp => main.cpp} (55%) create mode 100644 power/power-common-old.h diff --git a/common.mk b/common.mk index ea51105..64f1cd8 100644 --- a/common.mk +++ b/common.mk @@ -169,7 +169,7 @@ PRODUCT_COPY_FILES += \ # Power PRODUCT_PACKAGES += \ - android.hardware.power@1.2-service.oneplus_kona + android.hardware.power-service.oneplus_kona # PowerShare PRODUCT_PACKAGES += \ diff --git a/power/Android.mk b/power/Android.mk index 2468996..78ab2b0 100644 --- a/power/Android.mk +++ b/power/Android.mk @@ -2,17 +2,21 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -LOCAL_MODULE := android.hardware.power@1.2-service.oneplus_kona -LOCAL_MODULE_TAGS := optional +LOCAL_MODULE := android.hardware.power-service.oneplus_kona +LOCAL_MODULE_TAGS := optional LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT)/vendor_overlay/$(PRODUCT_TARGET_VNDK_VERSION)/bin LOCAL_MODULE_RELATIVE_PATH := hw -LOCAL_MODULE_STEM := android.hardware.power@1.2-service +LOCAL_MODULE_STEM := android.hardware.power-service LOCAL_CFLAGS += \ -Wno-unused-parameter \ -Wno-unused-variable +ifeq ($(TARGET_USES_INTERACTION_BOOST),true) + LOCAL_CFLAGS += -DINTERACTION_BOOST +endif + LOCAL_C_INCLUDES := \ external/libxml2/include \ external/icu/icu4c/source/common @@ -24,23 +28,22 @@ LOCAL_HEADER_LIBRARIES += \ LOCAL_SRC_FILES := \ hint-data.c \ list.c \ + main.cpp \ metadata-parser.c \ power-common.c \ Power.cpp \ powerhintparser.c \ - service.cpp \ utils.c LOCAL_REQUIRED_MODULES := \ - android.hardware.power@1.2-service.oneplus_kona.rc + android.hardware.power-service.oneplus_kona.rc LOCAL_SHARED_LIBRARIES := \ - android.hardware.power@1.2 \ + android.hardware.power-ndk_platform \ libbase \ + libbinder_ndk \ libcutils \ libdl \ - libhidlbase \ - libhidltransport \ liblog \ libutils \ libxml2 @@ -49,13 +52,13 @@ include $(BUILD_EXECUTABLE) include $(CLEAR_VARS) -LOCAL_MODULE := android.hardware.power@1.2-service.oneplus_kona.rc +LOCAL_MODULE := android.hardware.power-service.oneplus_kona.rc LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT)/vendor_overlay/$(PRODUCT_TARGET_VNDK_VERSION)/etc/init -LOCAL_MODULE_STEM := android.hardware.power@1.2-service.rc +LOCAL_MODULE_STEM := android.hardware.power-service.rc -LOCAL_SRC_FILES := android.hardware.power@1.2-service.rc +LOCAL_SRC_FILES := android.hardware.power-service.rc include $(BUILD_PREBUILT) diff --git a/power/Power.cpp b/power/Power.cpp index ac28844..9744e4f 100644 --- a/power/Power.cpp +++ b/power/Power.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -29,83 +29,101 @@ #define LOG_TAG "QTI PowerHAL" -#include -#include -#include #include "Power.h" -#include "power-common.h" +#include +#include + +#include + +#include +#include +#include + +using ::aidl::android::hardware::power::BnPower; +using ::aidl::android::hardware::power::IPower; +using ::aidl::android::hardware::power::Mode; +using ::aidl::android::hardware::power::Boost; + +using ::ndk::ScopedAStatus; +using ::ndk::SharedRefBase; + +namespace aidl { namespace android { namespace hardware { namespace power { -namespace V1_2 { -namespace implementation { +namespace impl { -using ::android::base::WriteStringToFile; -using ::android::hardware::power::V1_0::Feature; -using ::android::hardware::power::V1_0::PowerHint; -using ::android::hardware::power::V1_0::PowerStatePlatformSleepState; -using ::android::hardware::power::V1_0::Status; -using ::android::hardware::power::V1_1::PowerStateSubsystem; -using ::android::hardware::hidl_vec; -using ::android::hardware::Return; -using ::android::hardware::Void; - -Power::Power() { - power_init(); +void setInteractive(bool interactive) { + set_interactive(interactive ? 1:0); } -Return Power::setInteractive(bool interactive) { - set_interactive(interactive ? 1:0); - return Void(); -} - -Return Power::powerHint(PowerHint_1_0 hint, int32_t data) { - - power_hint(static_cast(hint), data ? (&data) : NULL); - return Void(); -} - -Return Power::setFeature(Feature feature, bool activate) { - switch (feature) { - case Feature::POWER_FEATURE_DOUBLE_TAP_TO_WAKE: - WriteStringToFile(activate ? "1" : "0", "/proc/touchpanel/double_tap_enable", true); +ndk::ScopedAStatus Power::setMode(Mode type, bool enabled) { + LOG(INFO) << "Power setMode: " << static_cast(type) << " to: " << enabled; + switch(type){ + case Mode::DOUBLE_TAP_TO_WAKE: + ::android::base::WriteStringToFile(enabled ? "1" : "0", + "/proc/touchpanel/double_tap_enable", true); + break; + case Mode::LOW_POWER: + case Mode::LAUNCH: + case Mode::EXPENSIVE_RENDERING: + case Mode::DEVICE_IDLE: + case Mode::DISPLAY_INACTIVE: + case Mode::AUDIO_STREAMING_LOW_LATENCY: + case Mode::CAMERA_STREAMING_SECURE: + case Mode::CAMERA_STREAMING_LOW: + case Mode::CAMERA_STREAMING_MID: + case Mode::CAMERA_STREAMING_HIGH: + case Mode::VR: + LOG(INFO) << "Mode " << static_cast(type) << "Not Supported"; + break; + case Mode::INTERACTIVE: + setInteractive(enabled); + power_hint(POWER_HINT_INTERACTION, NULL); + break; + case Mode::SUSTAINED_PERFORMANCE: + case Mode::FIXED_PERFORMANCE: + power_hint(POWER_HINT_SUSTAINED_PERFORMANCE, NULL); break; default: + LOG(INFO) << "Mode " << static_cast(type) << "Not Supported"; break; } - return Void(); + return ndk::ScopedAStatus::ok(); } -Return Power::getPlatformLowPowerStats(getPlatformLowPowerStats_cb _hidl_cb) { +ndk::ScopedAStatus Power::isModeSupported(Mode type, bool* _aidl_return) { + LOG(INFO) << "Power isModeSupported: " << static_cast(type); - hidl_vec states; - states.resize(0); - - _hidl_cb(states, Status::SUCCESS); - return Void(); + switch(type){ + case Mode::DOUBLE_TAP_TO_WAKE: + case Mode::INTERACTIVE: + case Mode::SUSTAINED_PERFORMANCE: + case Mode::FIXED_PERFORMANCE: + *_aidl_return = true; + break; + default: + *_aidl_return = false; + break; + } + return ndk::ScopedAStatus::ok(); } -Return Power::getSubsystemLowPowerStats(getSubsystemLowPowerStats_cb _hidl_cb) { - - hidl_vec subsystems; - - _hidl_cb(subsystems, Status::SUCCESS); - return Void(); +ndk::ScopedAStatus Power::setBoost(Boost type, int32_t durationMs) { + LOG(INFO) << "Power setBoost: " << static_cast(type) + << ", duration: " << durationMs; + return ndk::ScopedAStatus::ok(); } -Return Power::powerHintAsync(PowerHint_1_0 hint, int32_t data) { - - return powerHint(hint, data); +ndk::ScopedAStatus Power::isBoostSupported(Boost type, bool* _aidl_return) { + LOG(INFO) << "Power isBoostSupported: " << static_cast(type); + *_aidl_return = false; + return ndk::ScopedAStatus::ok(); } -Return Power::powerHintAsync_1_2(PowerHint_1_2 hint, int32_t data) { - - return powerHint(static_cast (hint), data); -} - -} // namespace implementation -} // namespace V1_2 +} // namespace impl } // namespace power } // namespace hardware } // namespace android +} // namespace aidl diff --git a/power/Power.h b/power/Power.h index a787590..c7c42b0 100644 --- a/power/Power.h +++ b/power/Power.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -27,48 +27,32 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef ANDROID_HARDWARE_POWER_V1_2_POWER_H -#define ANDROID_HARDWARE_POWER_V1_2_POWER_H +#ifndef ANDROID_HARDWARE_POWER_POWER_H +#define ANDROID_HARDWARE_POWER_POWER_H -#include -#include -#include -#include +#include +#include "power-common.h" +namespace aidl { namespace android { namespace hardware { namespace power { -namespace V1_2 { -namespace implementation { +namespace impl { -using ::android::hardware::power::V1_0::Feature; -using PowerHint_1_0 = ::android::hardware::power::V1_0::PowerHint; -using PowerHint_1_2 = ::android::hardware::power::V1_2::PowerHint; -using ::android::hardware::power::V1_2::IPower; -using ::android::hardware::Return; -using ::android::hardware::Void; - -struct Power : public IPower { - // Methods from ::android::hardware::power::V1_0::IPower follow. - - Power(); - - Return setInteractive(bool interactive) override; - Return powerHint(PowerHint_1_0 hint, int32_t data) override; - Return setFeature(Feature feature, bool activate) override; - Return getPlatformLowPowerStats(getPlatformLowPowerStats_cb _hidl_cb) override; - - // Methods from ::android::hardware::power::V1_1::IPower follow - Return getSubsystemLowPowerStats(getSubsystemLowPowerStats_cb _hidl_cb) override; - Return powerHintAsync(PowerHint_1_0 hint, int32_t data) override; - // Methods from ::android::hardware::power::V1_2::IPower follow - Return powerHintAsync_1_2(PowerHint_1_2 hint, int32_t data) override; +class Power : public BnPower { + public: + Power() : BnPower(){ + power_init(); + } + ndk::ScopedAStatus setMode(Mode type, bool enabled) override; + ndk::ScopedAStatus isModeSupported(Mode type, bool* _aidl_return) override; + ndk::ScopedAStatus setBoost(Boost type, int32_t durationMs) override; + ndk::ScopedAStatus isBoostSupported(Boost type, bool* _aidl_return) override; }; -} // namespace implementation -} // namespace V1_2 +} // namespace impl } // namespace power } // namespace hardware } // namespace android - -#endif // ANDROID_HARDWARE_POWER_V1_2_POWER_H +} // namespace aidl +#endif // ANDROID_HARDWARE_POWER_POWER_H diff --git a/power/android.hardware.power-service.rc b/power/android.hardware.power-service.rc new file mode 100644 index 0000000..7885506 --- /dev/null +++ b/power/android.hardware.power-service.rc @@ -0,0 +1,4 @@ +service vendor.power /vendor/bin/hw/android.hardware.power-service + class hal + user system + group system diff --git a/power/android.hardware.power@1.2-service.rc b/power/android.hardware.power@1.2-service.rc deleted file mode 100644 index 8a1c347..0000000 --- a/power/android.hardware.power@1.2-service.rc +++ /dev/null @@ -1,4 +0,0 @@ -service vendor.power-hal-1-2 /vendor/bin/hw/android.hardware.power@1.2-service - class hal - user system - group system diff --git a/power/service.cpp b/power/main.cpp similarity index 55% rename from power/service.cpp rename to power/main.cpp index 902c661..5909b71 100644 --- a/power/service.cpp +++ b/power/main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2020, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -27,55 +27,27 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#define LOG_TAG "android.hardware.power@1.2-service" - -#include -#include -#include #include "Power.h" -using android::sp; -using android::status_t; -using android::OK; +#include +#include +#include -// libhwbinder: -using android::hardware::configureRpcThreadpool; -using android::hardware::joinRpcThreadpool; - -// Generated HIDL files -using android::hardware::power::V1_2::IPower; -using android::hardware::power::V1_2::implementation::Power; +using aidl::android::hardware::power::impl::Power; int main() { - - status_t status; - android::sp service = nullptr; - - ALOGI("Power HAL Service 1.2 is starting."); - - service = new Power(); - if (service == nullptr) { - ALOGE("Can not create an instance of Power HAL interface."); - - goto shutdown; + ABinderProcess_setThreadPoolMaxThreadCount(0); + std::shared_ptr vib = ndk::SharedRefBase::make(); + const std::string instance = std::string() + Power::descriptor + "/default"; + LOG(INFO) << "Instance " << instance; + if(vib){ + binder_status_t status = AServiceManager_addService(vib->asBinder().get(), instance.c_str()); + LOG(INFO) << "Status " << status; + if(status != STATUS_OK){ + LOG(ERROR) << "Could not register" << instance; + } } - configureRpcThreadpool(1, true /*callerWillJoin*/); - - status = service->registerAsService(); - if (status != OK) { - ALOGE("Could not register service for Power HAL(%d).", status); - goto shutdown; - } - - ALOGI("Power Service is ready"); - joinRpcThreadpool(); - //Should not pass this line - -shutdown: - // In normal operation, we don't expect the thread pool to exit - - ALOGE("Power Service is shutting down"); - return 1; -} - + ABinderProcess_joinThreadPool(); + return 1; // should not reach +} \ No newline at end of file diff --git a/power/power-common-old.h b/power/power-common-old.h new file mode 100644 index 0000000..e374e46 --- /dev/null +++ b/power/power-common-old.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2013, 2018 The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#define NODE_MAX (64) + +#define SCALING_GOVERNOR_PATH "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" +#define DCVS_CPU0_SLACK_MAX_NODE "/sys/module/msm_dcvs/cores/cpu0/slack_time_max_us" +#define DCVS_CPU0_SLACK_MIN_NODE "/sys/module/msm_dcvs/cores/cpu0/slack_time_min_us" +#define MPDECISION_SLACK_MAX_NODE "/sys/module/msm_mpdecision/slack_time_max_us" +#define MPDECISION_SLACK_MIN_NODE "/sys/module/msm_mpdecision/slack_time_min_us" +#define SCALING_MIN_FREQ "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq" +#define ONDEMAND_GOVERNOR "ondemand" +#define INTERACTIVE_GOVERNOR "interactive" +#define MSMDCVS_GOVERNOR "msm-dcvs" +#define SCHEDUTIL_GOVERNOR "schedutil" + +#define HINT_HANDLED (0) +#define HINT_NONE (-1) + +enum CPU_GOV_CHECK { + CPU0 = 0, + CPU1 = 1, + CPU2 = 2, + CPU3 = 3 +}; diff --git a/sepolicy/private/file_contexts b/sepolicy/private/file_contexts index 3e368d5..a98226b 100644 --- a/sepolicy/private/file_contexts +++ b/sepolicy/private/file_contexts @@ -9,7 +9,7 @@ /sys/devices/platform/soc/soc:goodix_fp/proximity_state u:object_r:sysfs_fpc_proximity:s0 # HALs -/(product|system/product)/vendor_overlay/[0-9]+/bin/hw/android\.hardware\.power@1\.2-service u:object_r:hal_power_default_exec:s0 +/(product|system/product)/vendor_overlay/[0-9]+/bin/hw/android\.hardware\.power-service u:object_r:hal_power_default_exec:s0 /system/bin/hw/lineage\.biometrics\.fingerprint\.inscreen@1.0-service\.oneplus_kona u:object_r:hal_fod_kona_exec:s0 /system/bin/hw/lineage\.livedisplay@2\.0-service\.oneplus_kona u:object_r:hal_livedisplay_kona_exec:s0 /system/bin/hw/lineage\.powershare@1\.0-service\.oneplus_kona u:object_r:hal_powershare_kona_exec:s0