1 /****************************************************************************** 2 * 3 * This file is provided under a dual BSD/GPLv2 license. When using or 4 * redistributing this file, you may do so under either license. 5 * 6 * GPL LICENSE SUMMARY 7 * 8 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. 9 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH 10 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH 11 * Copyright(c) 2019 - 2020 Intel Corporation 12 * 13 * This program is free software; you can redistribute it and/or modify 14 * it under the terms of version 2 of the GNU General Public License as 15 * published by the Free Software Foundation. 16 * 17 * This program is distributed in the hope that it will be useful, but 18 * WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 * General Public License for more details. 21 * 22 * The full GNU General Public License is included in this distribution 23 * in the file called COPYING. 24 * 25 * Contact Information: 26 * Intel Linux Wireless <linuxwifi@intel.com> 27 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 28 * 29 * BSD LICENSE 30 * 31 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. 32 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH 33 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH 34 * Copyright(c) 2019 - 2020 Intel Corporation 35 * All rights reserved. 36 * 37 * Redistribution and use in source and binary forms, with or without 38 * modification, are permitted provided that the following conditions 39 * are met: 40 * 41 * * Redistributions of source code must retain the above copyright 42 * notice, this list of conditions and the following disclaimer. 43 * * Redistributions in binary form must reproduce the above copyright 44 * notice, this list of conditions and the following disclaimer in 45 * the documentation and/or other materials provided with the 46 * distribution. 47 * * Neither the name Intel Corporation nor the names of its 48 * contributors may be used to endorse or promote products derived 49 * from this software without specific prior written permission. 50 * 51 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 52 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 53 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 54 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 55 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 56 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 57 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 58 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 59 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 60 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 61 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 62 * 63 *****************************************************************************/ 64 65 #ifndef __iwl_fw_api_phy_h__ 66 #define __iwl_fw_api_phy_h__ 67 68 /** 69 * enum iwl_phy_ops_subcmd_ids - PHY group commands 70 */ 71 enum iwl_phy_ops_subcmd_ids { 72 /** 73 * @CMD_DTS_MEASUREMENT_TRIGGER_WIDE: 74 * Uses either &struct iwl_dts_measurement_cmd or 75 * &struct iwl_ext_dts_measurement_cmd 76 */ 77 CMD_DTS_MEASUREMENT_TRIGGER_WIDE = 0x0, 78 79 /** 80 * @CTDP_CONFIG_CMD: &struct iwl_mvm_ctdp_cmd 81 */ 82 CTDP_CONFIG_CMD = 0x03, 83 84 /** 85 * @TEMP_REPORTING_THRESHOLDS_CMD: &struct temp_report_ths_cmd 86 */ 87 TEMP_REPORTING_THRESHOLDS_CMD = 0x04, 88 89 /** 90 * @GEO_TX_POWER_LIMIT: &struct iwl_geo_tx_power_profiles_cmd 91 */ 92 GEO_TX_POWER_LIMIT = 0x05, 93 94 /** 95 * @PER_PLATFORM_ANT_GAIN_CMD: &struct iwl_ppag_table_cmd 96 */ 97 PER_PLATFORM_ANT_GAIN_CMD = 0x07, 98 99 /** 100 * @CT_KILL_NOTIFICATION: &struct ct_kill_notif 101 */ 102 CT_KILL_NOTIFICATION = 0xFE, 103 104 /** 105 * @DTS_MEASUREMENT_NOTIF_WIDE: 106 * &struct iwl_dts_measurement_notif_v1 or 107 * &struct iwl_dts_measurement_notif_v2 108 */ 109 DTS_MEASUREMENT_NOTIF_WIDE = 0xFF, 110 }; 111 112 /* DTS measurements */ 113 114 enum iwl_dts_measurement_flags { 115 DTS_TRIGGER_CMD_FLAGS_TEMP = BIT(0), 116 DTS_TRIGGER_CMD_FLAGS_VOLT = BIT(1), 117 }; 118 119 /** 120 * struct iwl_dts_measurement_cmd - request DTS temp and/or voltage measurements 121 * 122 * @flags: indicates which measurements we want as specified in 123 * &enum iwl_dts_measurement_flags 124 */ 125 struct iwl_dts_measurement_cmd { 126 __le32 flags; 127 } __packed; /* TEMPERATURE_MEASUREMENT_TRIGGER_CMD_S */ 128 129 /** 130 * enum iwl_dts_control_measurement_mode - DTS measurement type 131 * @DTS_AUTOMATIC: Automatic mode (full SW control). Provide temperature read 132 * back (latest value. Not waiting for new value). Use automatic 133 * SW DTS configuration. 134 * @DTS_REQUEST_READ: Request DTS read. Configure DTS with manual settings, 135 * trigger DTS reading and provide read back temperature read 136 * when available. 137 * @DTS_OVER_WRITE: over-write the DTS temperatures in the SW until next read 138 * @DTS_DIRECT_WITHOUT_MEASURE: DTS returns its latest temperature result, 139 * without measurement trigger. 140 */ 141 enum iwl_dts_control_measurement_mode { 142 DTS_AUTOMATIC = 0, 143 DTS_REQUEST_READ = 1, 144 DTS_OVER_WRITE = 2, 145 DTS_DIRECT_WITHOUT_MEASURE = 3, 146 }; 147 148 /** 149 * enum iwl_dts_used - DTS to use or used for measurement in the DTS request 150 * @DTS_USE_TOP: Top 151 * @DTS_USE_CHAIN_A: chain A 152 * @DTS_USE_CHAIN_B: chain B 153 * @DTS_USE_CHAIN_C: chain C 154 * @XTAL_TEMPERATURE: read temperature from xtal 155 */ 156 enum iwl_dts_used { 157 DTS_USE_TOP = 0, 158 DTS_USE_CHAIN_A = 1, 159 DTS_USE_CHAIN_B = 2, 160 DTS_USE_CHAIN_C = 3, 161 XTAL_TEMPERATURE = 4, 162 }; 163 164 /** 165 * enum iwl_dts_bit_mode - bit-mode to use in DTS request read mode 166 * @DTS_BIT6_MODE: bit 6 mode 167 * @DTS_BIT8_MODE: bit 8 mode 168 */ 169 enum iwl_dts_bit_mode { 170 DTS_BIT6_MODE = 0, 171 DTS_BIT8_MODE = 1, 172 }; 173 174 /** 175 * struct iwl_ext_dts_measurement_cmd - request extended DTS temp measurements 176 * @control_mode: see &enum iwl_dts_control_measurement_mode 177 * @temperature: used when over write DTS mode is selected 178 * @sensor: set temperature sensor to use. See &enum iwl_dts_used 179 * @avg_factor: average factor to DTS in request DTS read mode 180 * @bit_mode: value defines the DTS bit mode to use. See &enum iwl_dts_bit_mode 181 * @step_duration: step duration for the DTS 182 */ 183 struct iwl_ext_dts_measurement_cmd { 184 __le32 control_mode; 185 __le32 temperature; 186 __le32 sensor; 187 __le32 avg_factor; 188 __le32 bit_mode; 189 __le32 step_duration; 190 } __packed; /* XVT_FW_DTS_CONTROL_MEASUREMENT_REQUEST_API_S */ 191 192 /** 193 * struct iwl_dts_measurement_notif_v1 - measurements notification 194 * 195 * @temp: the measured temperature 196 * @voltage: the measured voltage 197 */ 198 struct iwl_dts_measurement_notif_v1 { 199 __le32 temp; 200 __le32 voltage; 201 } __packed; /* TEMPERATURE_MEASUREMENT_TRIGGER_NTFY_S_VER_1*/ 202 203 /** 204 * struct iwl_dts_measurement_notif_v2 - measurements notification 205 * 206 * @temp: the measured temperature 207 * @voltage: the measured voltage 208 * @threshold_idx: the trip index that was crossed 209 */ 210 struct iwl_dts_measurement_notif_v2 { 211 __le32 temp; 212 __le32 voltage; 213 __le32 threshold_idx; 214 } __packed; /* TEMPERATURE_MEASUREMENT_TRIGGER_NTFY_S_VER_2 */ 215 216 /** 217 * struct iwl_dts_measurement_resp - measurements response 218 * 219 * @temp: the measured temperature 220 */ 221 struct iwl_dts_measurement_resp { 222 __le32 temp; 223 } __packed; /* CMD_DTS_MEASUREMENT_RSP_API_S_VER_1 */ 224 225 /** 226 * struct ct_kill_notif - CT-kill entry notification 227 * 228 * @temperature: the current temperature in celsius 229 * @reserved: reserved 230 */ 231 struct ct_kill_notif { 232 __le16 temperature; 233 __le16 reserved; 234 } __packed; /* GRP_PHY_CT_KILL_NTF */ 235 236 /** 237 * enum ctdp_cmd_operation - CTDP command operations 238 * @CTDP_CMD_OPERATION_START: update the current budget 239 * @CTDP_CMD_OPERATION_STOP: stop ctdp 240 * @CTDP_CMD_OPERATION_REPORT: get the average budget 241 */ 242 enum iwl_mvm_ctdp_cmd_operation { 243 CTDP_CMD_OPERATION_START = 0x1, 244 CTDP_CMD_OPERATION_STOP = 0x2, 245 CTDP_CMD_OPERATION_REPORT = 0x4, 246 };/* CTDP_CMD_OPERATION_TYPE_E */ 247 248 /** 249 * struct iwl_mvm_ctdp_cmd - track and manage the FW power consumption budget 250 * 251 * @operation: see &enum iwl_mvm_ctdp_cmd_operation 252 * @budget: the budget in milliwatt 253 * @window_size: defined in API but not used 254 */ 255 struct iwl_mvm_ctdp_cmd { 256 __le32 operation; 257 __le32 budget; 258 __le32 window_size; 259 } __packed; 260 261 #define IWL_MAX_DTS_TRIPS 8 262 263 /** 264 * struct temp_report_ths_cmd - set temperature thresholds 265 * 266 * @num_temps: number of temperature thresholds passed 267 * @thresholds: array with the thresholds to be configured 268 */ 269 struct temp_report_ths_cmd { 270 __le32 num_temps; 271 __le16 thresholds[IWL_MAX_DTS_TRIPS]; 272 } __packed; /* GRP_PHY_TEMP_REPORTING_THRESHOLDS_CMD */ 273 274 #endif /* __iwl_fw_api_phy_h__ */ 275