| /* 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 |