1/* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.hardware.thermal@2.0; 18 19import android.hardware.thermal@1.0::types; 20 21/** Device temperature types */ 22enum TemperatureType : @1.0::TemperatureType { 23 USB_PORT = 4, 24 POWER_AMPLIFIER = 5, 25 26 /** Battery Charge Limit - virtual thermal sensors */ 27 BCL_VOLTAGE = 6, 28 BCL_CURRENT = 7, 29 BCL_PERCENTAGE = 8, 30 31 /** Neural Processing Unit */ 32 NPU = 9, 33}; 34 35 36/** Device cooling device types */ 37enum CoolingType : uint32_t { 38 FAN, 39 BATTERY, 40 CPU, 41 GPU, 42 MODEM, 43 NPU, 44 COMPONENT, // for the rest of components 45}; 46 47/** Device throttling severity */ 48enum ThrottlingSeverity : uint32_t { 49 /** 50 * Not under throttling. 51 */ 52 NONE = 0, 53 54 /** 55 * Light throttling where UX is not impacted. 56 */ 57 LIGHT, 58 59 /** 60 * Moderate throttling where UX is not largely impacted. 61 */ 62 MODERATE, 63 64 /** 65 * Severe throttling where UX is largely impacted. 66 * Similar to 1.0 throttlingThreshold. 67 */ 68 SEVERE, 69 70 /** 71 * Platform has done everything to reduce power. 72 */ 73 CRITICAL, 74 75 /** 76 * Key components in platform are shutting down due to thermal condition. 77 * Device functionalities will be limited. 78 */ 79 EMERGENCY, 80 81 /** 82 * Need shutdown immediately. 83 */ 84 SHUTDOWN, 85}; 86 87struct TemperatureThreshold { 88 /** 89 * This temperature's type. 90 */ 91 TemperatureType type; 92 93 /** 94 * Name of this temperature matching the Temperature struct. 95 * All temperatures of the same "type" must have a different "name", 96 * e.g., cpu0, battery. Clients use it to match Temperature struct. 97 */ 98 string name; 99 100 /** 101 * Hot throttling temperature constant for this temperature sensor in 102 * level defined in ThrottlingSeverity including shutdown. Throttling 103 * happens when temperature >= threshold. If not available, set to NAN. 104 * Unit is same as Temperature's value. 105 */ 106 float[ThrottlingSeverity#len] hotThrottlingThresholds; 107 108 /** 109 * Cold throttling temperature constant for this temperature sensor in 110 * level defined in ThrottlingSeverity including shutdown. Throttling 111 * happens when temperature <= threshold. If not available, set to NAN. 112 * Unit is same as Temperature's value. 113 */ 114 float[ThrottlingSeverity#len] coldThrottlingThresholds; 115 116 /** 117 * Threshold temperature above which the VR mode clockrate minimums cannot 118 * be maintained for this device. If not available, set by HAL to NAN. 119 * Unit is same as Temperature's value. 120 */ 121 float vrThrottlingThreshold; 122}; 123 124struct Temperature { 125 /** 126 * This temperature's type. 127 */ 128 TemperatureType type; 129 130 /** 131 * Name of this temperature matching the TemperatureThreshold. 132 * All temperatures of the same "type" must have a different "name", 133 * e.g., cpu0, battery. Clients use it to match with TemperatureThreshold 134 * struct. 135 */ 136 string name; 137 138 /** 139 * For BCL, this is the current reading of the virtual sensor and the unit is 140 * millivolt, milliamp, percentage for BCL_VOLTAGE, BCL_CURRENT and BCL_PERCENTAGE 141 * respectively. For everything else, this is the current temperature in Celsius. 142 * If not available set by HAL to NAN. 143 */ 144 float value; 145 146 /** 147 * The current throttling level of the sensor. 148 */ 149 ThrottlingSeverity throttlingStatus; 150}; 151 152struct CoolingDevice { 153 /** 154 * This cooling device type, CPU, GPU, BATTERY, and etc. 155 */ 156 CoolingType type; 157 158 /** 159 * Name of this cooling device. 160 * All cooling devices of the same "type" must have a different "name". 161 * The name is usually defined in kernel device tree, and this is for client 162 * logging purpose. 163 */ 164 string name; 165 166 /** 167 * Current throttle state of the cooling device. The value can any unsigned integer 168 * numbers between 0 and max_state defined in its driver, usually representing the 169 * associated device's power state. 0 means device is not in throttling, higher value 170 * means deeper throttling. 171 */ 172 uint64_t value; 173}; 174