/* Copyright (c) 2012, 2014, The Linux Foundation. All rights reserved. * Copyright (C) 2018 The LineageOS Project * * 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. * */ #ifdef __cplusplus extern "C" { #endif #define FAILED -1 #define SUCCESS 0 #define INDEFINITE_DURATION 0 /* Hints sent to perf HAL from power HAL * These have to be kept in sync with Perf HAL side definitions */ #define VENDOR_HINT_DISPLAY_OFF 0x00001040 #define VENDOR_HINT_DISPLAY_ON 0x00001041 #define VENDOR_HINT_SCROLL_BOOST 0x00001080 #define VENDOR_HINT_FIRST_LAUNCH_BOOST 0x00001081 enum SCROLL_BOOST_TYPE { SCROLL_VERTICAL = 1, SCROLL_HORIZONTAL = 2, SCROLL_PANEL_VIEW = 3, SCROLL_PREFILING = 4, }; enum LAUNCH_BOOST_TYPE { LAUNCH_BOOST_V1 = 1, LAUNCH_BOOST_V2 = 2, LAUNCH_BOOST_V3 = 3, }; enum SCREEN_DISPLAY_TYPE { DISPLAY_OFF = 0x00FF, }; enum PWR_CLSP_TYPE { ALL_CPUS_PWR_CLPS_DIS = 0x101, }; /* For CPUx min freq, the leftmost byte * represents the CPU and the * rightmost byte represents the frequency * All intermediate frequencies on the * device are supported. The hex value * passed into PerfLock will be multiplied * by 10^5. This frequency or the next * highest frequency available will be set * * For example, if 1.4 Ghz is required on * CPU0, use 0x20E * * If the highest available frequency * on the device is required, use * CPUx_MIN_FREQ_TURBO_MAX * where x represents the CPU */ enum CPU0_MIN_FREQ_LVL { CPU0_MIN_FREQ_NONTURBO_MAX = 0x20A, CPU0_MIN_FREQ_TURBO_MAX = 0x2FE, }; enum CPU1_MIN_FREQ_LVL { CPU1_MIN_FREQ_NONTURBO_MAX = 0x30A, CPU1_MIN_FREQ_TURBO_MAX = 0x3FE, }; enum CPU2_MIN_FREQ_LVL { CPU2_MIN_FREQ_NONTURBO_MAX = 0x40A, CPU2_MIN_FREQ_TURBO_MAX = 0x4FE, }; enum CPU3_MIN_FREQ_LVL { CPU3_MIN_FREQ_NONTURBO_MAX = 0x50A, CPU3_MIN_FREQ_TURBO_MAX = 0x5FE, }; enum CPU0_MAX_FREQ_LVL { CPU0_MAX_FREQ_NONTURBO_MAX = 0x150A, }; enum CPU1_MAX_FREQ_LVL { CPU1_MAX_FREQ_NONTURBO_MAX = 0x160A, }; enum CPU2_MAX_FREQ_LVL { CPU2_MAX_FREQ_NONTURBO_MAX = 0x170A, }; enum CPU3_MAX_FREQ_LVL { CPU3_MAX_FREQ_NONTURBO_MAX = 0x180A, }; enum MIN_CPUS_ONLINE_LVL { CPUS_ONLINE_MIN_2 = 0x702, CPUS_ONLINE_MIN_3 = 0x703, CPUS_ONLINE_MIN_4 = 0x704, CPUS_ONLINE_MPD_OVERRIDE = 0x777, CPUS_ONLINE_MAX = 0x7FF, }; enum MAX_CPUS_ONLINE_LVL { CPUS_ONLINE_MAX_LIMIT_1 = 0x8FE, CPUS_ONLINE_MAX_LIMIT_2 = 0x8FD, CPUS_ONLINE_MAX_LIMIT_3 = 0x8FC, CPUS_ONLINE_MAX_LIMIT_4 = 0x8FB, CPUS_ONLINE_MAX_LIMIT_MAX = 0x8FB, }; enum SAMPLING_RATE_LVL { MS_500 = 0xBCD, MS_50 = 0xBFA, MS_20 = 0xBFD, }; enum INTERACTIVE_TIMER_RATE_LVL { TR_MS_500 = 0xECD, TR_MS_100 = 0xEF5, TR_MS_50 = 0xEFA, TR_MS_30 = 0xEFC, TR_MS_20 = 0xEFD, }; /* This timer rate applicable to cpu0 across 8939 series chipset */ enum INTERACTIVE_TIMER_RATE_LVL_CPU0_8939 { TR_MS_CPU0_500 = 0x30CD, TR_MS_CPU0_100 = 0x30F5, TR_MS_CPU0_50 = 0x30FA, TR_MS_CPU0_30 = 0x30FC, TR_MS_CPU0_20 = 0x30FD, }; /* This timer rate applicable to cpu4 across 8939 series chipset */ enum INTERACTIVE_TIMER_RATE_LVL_CPU4_8939 { TR_MS_CPU4_500 = 0x3BCD, TR_MS_CPU4_100 = 0x3BF5, TR_MS_CPU4_50 = 0x3BFA, TR_MS_CPU4_30 = 0x3BFC, TR_MS_CPU4_20 = 0x3BFD, }; /* This timer rate applicable to big.little arch */ enum INTERACTIVE_TIMER_RATE_LVL_BIG_LITTLE { BIG_LITTLE_TR_MS_100 = 0x64, BIG_LITTLE_TR_MS_50 = 0x32, BIG_LITTLE_TR_MS_40 = 0x28, BIG_LITTLE_TR_MS_30 = 0x1E, BIG_LITTLE_TR_MS_20 = 0x14, }; /* INTERACTIVE opcodes */ enum INTERACTIVE_OPCODES { INT_OP_CLUSTER0_TIMER_RATE = 0x41424000, INT_OP_CLUSTER1_TIMER_RATE = 0x41424100, INT_OP_CLUSTER0_USE_SCHED_LOAD = 0x41430000, INT_OP_CLUSTER1_USE_SCHED_LOAD = 0x41430100, INT_OP_CLUSTER0_USE_MIGRATION_NOTIF = 0x41434000, INT_OP_CLUSTER1_USE_MIGRATION_NOTIF = 0x41434100, INT_OP_NOTIFY_ON_MIGRATE = 0x4241C000 }; enum INTERACTIVE_HISPEED_FREQ_LVL { HS_FREQ_1026 = 0xF0A, HS_FREQ_800 = 0xF08, }; enum INTERACTIVE_HISPEED_LOAD_LVL { HISPEED_LOAD_90 = 0x105A, }; enum SYNC_FREQ_LVL { SYNC_FREQ_300 = 0x1103, SYNC_FREQ_600 = 0X1106, SYNC_FREQ_384 = 0x1103, SYNC_FREQ_NONTURBO_MAX = 0x110A, SYNC_FREQ_TURBO = 0x110F, }; enum OPTIMAL_FREQ_LVL { OPTIMAL_FREQ_300 = 0x1203, OPTIMAL_FREQ_600 = 0x1206, OPTIMAL_FREQ_384 = 0x1203, OPTIMAL_FREQ_NONTURBO_MAX = 0x120A, OPTIMAL_FREQ_TURBO = 0x120F, }; enum SCREEN_PWR_CLPS_LVL { PWR_CLPS_DIS = 0x1300, PWR_CLPS_ENA = 0x1301, }; enum THREAD_MIGRATION_LVL { THREAD_MIGRATION_SYNC_OFF = 0x1400, }; enum INTERACTIVE_IO_BUSY_LVL { INTERACTIVE_IO_BUSY_OFF = 0x1B00, INTERACTIVE_IO_BUSY_ON = 0x1B01, }; enum SCHED_BOOST_LVL { SCHED_BOOST_ON = 0x1E01, }; enum CPU4_MIN_FREQ_LVL { CPU4_MIN_FREQ_NONTURBO_MAX = 0x1F0A, CPU4_MIN_FREQ_TURBO_MAX = 0x1FFE, }; enum CPU5_MIN_FREQ_LVL { CPU5_MIN_FREQ_NONTURBO_MAX = 0x200A, CPU5_MIN_FREQ_TURBO_MAX = 0x20FE, }; enum CPU6_MIN_FREQ_LVL { CPU6_MIN_FREQ_NONTURBO_MAX = 0x210A, CPU6_MIN_FREQ_TURBO_MAX = 0x21FE, }; enum CPU7_MIN_FREQ_LVL { CPU7_MIN_FREQ_NONTURBO_MAX = 0x220A, CPU7_MIN_FREQ_TURBO_MAX = 0x22FE, }; enum CPU4_MAX_FREQ_LVL { CPU4_MAX_FREQ_NONTURBO_MAX = 0x230A, }; enum CPU5_MAX_FREQ_LVL { CPU5_MAX_FREQ_NONTURBO_MAX = 0x240A, }; enum CPU6_MAX_FREQ_LVL { CPU6_MAX_FREQ_NONTURBO_MAX = 0x250A, }; enum CPU7_MAX_FREQ_LVL { CPU7_MAX_FREQ_NONTURBO_MAX = 0x260A, }; enum SCHED_PREFER_IDLE { SCHED_PREFER_IDLE_DIS = 0x3E01, }; enum SCHED_MIGRATE_COST_CHNG { SCHED_MIGRATE_COST_SET = 0x3F01, }; /** * MPCTL v3 opcodes */ /* 0x1 */ enum POWER_COLLAPSE { ALL_CPUS_PWR_CLPS_DIS_V3 = 0x40400000, }; /* 0x2 */ enum CPUFREQ { MIN_FREQ_BIG_CORE_0 = 0x40800000, MIN_FREQ_BIG_CORE_0_RESIDX = 0x40802000, MIN_FREQ_LITTLE_CORE_0 = 0x40800100, MIN_FREQ_LITTLE_CORE_0_RESIDX = 0x40802100, MAX_FREQ_BIG_CORE_0 = 0x40804000, MAX_FREQ_BIG_CORE_0_RESIDX = 0x40806000, MAX_FREQ_LITTLE_CORE_0 = 0x40804100, MAX_FREQ_LITTLE_CORE_0_RESIDX = 0x40806100, }; /* 0x3 */ enum SCHED { SCHED_BOOST_ON_V3 = 0x40C00000, SCHED_PREFER_IDLE_DIS_V3 = 0x40C04000, SCHED_MIGRATE_COST_SET_V3 = 0x40C08000, SCHED_SMALL_TASK = 0x40C0C000, SCHED_MOSTLY_IDLE_LOAD = 0x40C10000, SCHED_MOSTLY_IDLE_NR_RUN = 0x40C14000, SCHED_GROUP_ON = 0x40C28000, SCHED_SPILL_NR_RUN = 0x40C2C000, SCHED_RESTRICT_CLUSTER_SPILL = 0x40C34000, SCHED_GROUP_UP_MIGRATE = 0x40C54000, SCHED_GROUP_DOWN_MIGRATE = 0x40C58000, }; /* 0x4 */ enum CORE_HOTPLUG { CPUS_ONLINE_MIN_BIG = 0x41000000, CPUS_ONLINE_MAX_BIG = 0x41004000, CPUS_ONLINE_MIN_LITTLE = 0x41000100, CPUS_ONLINE_MAX_LITTLE = 0x41004100, }; /* 0x5 */ enum INTERACTIVE { ABOVE_HISPEED_DELAY_BIG = 0x41400000, ABOVE_HISPEED_DELAY_BIG_RESIDX = 0x41402000, GO_HISPEED_LOAD_BIG = 0x41410000, HISPEED_FREQ_BIG = 0x41414000, TARGET_LOADS_BIG = 0x41420000, IGNORE_HISPEED_NOTIF_BIG = 0x41438000, ABOVE_HISPEED_DELAY_LITTLE = 0x41400100, ABOVE_HISPEED_DELAY_LITTLE_RESIDX = 0x41402100, GO_HISPEED_LOAD_LITTLE = 0x41410100, HISPEED_FREQ_LITTLE = 0x41414100, TARGET_LOADS_LITTLE = 0x41420100, IGNORE_HISPEED_NOTIF_LITTLE = 0x41438100, }; /* 0x6 */ enum CPUBW_HWMON { CPUBW_HWMON_MIN_FREQ = 0x41800000, CPUBW_HWMON_MIN_FREQ_RESIDX = 0x41802000, CPUBW_HWMON_HYST_OPT = 0x4180C000, LOW_POWER_CEIL_MBPS = 0x41810000, LOW_POWER_IO_PERCENT = 0x41814000, CPUBW_HWMON_SAMPLE_MS = 0x41820000, }; /* 0xA */ enum GPU { GPU_MIN_POWER_LEVEL = 0x42804000, GPU_MAX_POWER_LEVEL = 0x42808000, GPU_MIN_FREQ = 0x4280C000, GPU_MIN_FREQ_RESIDX = 0x4280E000, GPU_MAX_FREQ = 0x42810000, GPU_MAX_FREQ_RESIDX = 0x42812000, GPUBW_MIN_FREQ = 0x42814000, GPUBW_MAX_FREQ = 0x42818000, }; #ifdef __cplusplus } #endif