.. | .. |
---|
6 | 6 | * GPL LICENSE SUMMARY |
---|
7 | 7 | * |
---|
8 | 8 | * Copyright(c) 2017 Intel Deutschland GmbH |
---|
9 | | - * Copyright(c) 2018 Intel Corporation |
---|
| 9 | + * Copyright(c) 2018 - 2020 Intel Corporation |
---|
10 | 10 | * |
---|
11 | 11 | * This program is free software; you can redistribute it and/or modify |
---|
12 | 12 | * it under the terms of version 2 of the GNU General Public License as |
---|
.. | .. |
---|
16 | 16 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
17 | 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
---|
18 | 18 | * General Public License for more details. |
---|
19 | | - * |
---|
20 | | - * You should have received a copy of the GNU General Public License |
---|
21 | | - * along with this program; |
---|
22 | 19 | * |
---|
23 | 20 | * The full GNU General Public License is included in this distribution |
---|
24 | 21 | * in the file called COPYING. |
---|
.. | .. |
---|
30 | 27 | * BSD LICENSE |
---|
31 | 28 | * |
---|
32 | 29 | * Copyright(c) 2017 Intel Deutschland GmbH |
---|
33 | | - * Copyright(c) 2018 Intel Corporation |
---|
| 30 | + * Copyright(c) 2018 - 2020 Intel Corporation |
---|
34 | 31 | * All rights reserved. |
---|
35 | 32 | * |
---|
36 | 33 | * Redistribution and use in source and binary forms, with or without |
---|
.. | .. |
---|
64 | 61 | #define __iwl_fw_acpi__ |
---|
65 | 62 | |
---|
66 | 63 | #include <linux/acpi.h> |
---|
| 64 | +#include "fw/api/commands.h" |
---|
| 65 | +#include "fw/api/power.h" |
---|
| 66 | +#include "fw/api/phy.h" |
---|
| 67 | +#include "fw/api/nvm-reg.h" |
---|
| 68 | +#include "fw/img.h" |
---|
| 69 | +#include "iwl-trans.h" |
---|
| 70 | + |
---|
67 | 71 | |
---|
68 | 72 | #define ACPI_WRDS_METHOD "WRDS" |
---|
69 | 73 | #define ACPI_EWRD_METHOD "EWRD" |
---|
70 | 74 | #define ACPI_WGDS_METHOD "WGDS" |
---|
71 | 75 | #define ACPI_WRDD_METHOD "WRDD" |
---|
72 | 76 | #define ACPI_SPLC_METHOD "SPLC" |
---|
| 77 | +#define ACPI_ECKV_METHOD "ECKV" |
---|
| 78 | +#define ACPI_PPAG_METHOD "PPAG" |
---|
| 79 | +#define ACPI_WTAS_METHOD "WTAS" |
---|
73 | 80 | |
---|
74 | 81 | #define ACPI_WIFI_DOMAIN (0x07) |
---|
75 | 82 | |
---|
.. | .. |
---|
82 | 89 | |
---|
83 | 90 | #define ACPI_SAR_NUM_CHAIN_LIMITS 2 |
---|
84 | 91 | #define ACPI_SAR_NUM_SUB_BANDS 5 |
---|
| 92 | +#define ACPI_SAR_NUM_TABLES 1 |
---|
85 | 93 | |
---|
86 | 94 | #define ACPI_WRDS_WIFI_DATA_SIZE (ACPI_SAR_TABLE_SIZE + 2) |
---|
87 | 95 | #define ACPI_EWRD_WIFI_DATA_SIZE ((ACPI_SAR_PROFILE_NUM - 1) * \ |
---|
.. | .. |
---|
89 | 97 | #define ACPI_WGDS_WIFI_DATA_SIZE 19 |
---|
90 | 98 | #define ACPI_WRDD_WIFI_DATA_SIZE 2 |
---|
91 | 99 | #define ACPI_SPLC_WIFI_DATA_SIZE 2 |
---|
| 100 | +#define ACPI_ECKV_WIFI_DATA_SIZE 2 |
---|
92 | 101 | |
---|
93 | | -#define ACPI_WGDS_NUM_BANDS 2 |
---|
| 102 | +/* |
---|
| 103 | + * 1 type, 1 enabled, 1 block list size, 16 block list array |
---|
| 104 | + */ |
---|
| 105 | +#define APCI_WTAS_BLACK_LIST_MAX 16 |
---|
| 106 | +#define ACPI_WTAS_WIFI_DATA_SIZE (3 + APCI_WTAS_BLACK_LIST_MAX) |
---|
| 107 | + |
---|
94 | 108 | #define ACPI_WGDS_TABLE_SIZE 3 |
---|
| 109 | + |
---|
| 110 | +#define ACPI_PPAG_WIFI_DATA_SIZE ((IWL_NUM_CHAIN_LIMITS * \ |
---|
| 111 | + IWL_NUM_SUB_BANDS) + 3) |
---|
| 112 | +#define ACPI_PPAG_WIFI_DATA_SIZE_V2 ((IWL_NUM_CHAIN_LIMITS * \ |
---|
| 113 | + IWL_NUM_SUB_BANDS_V2) + 3) |
---|
| 114 | + |
---|
| 115 | +/* PPAG gain value bounds in 1/8 dBm */ |
---|
| 116 | +#define ACPI_PPAG_MIN_LB -16 |
---|
| 117 | +#define ACPI_PPAG_MAX_LB 24 |
---|
| 118 | +#define ACPI_PPAG_MIN_HB -16 |
---|
| 119 | +#define ACPI_PPAG_MAX_HB 40 |
---|
| 120 | + |
---|
| 121 | +struct iwl_sar_profile { |
---|
| 122 | + bool enabled; |
---|
| 123 | + u8 table[ACPI_SAR_TABLE_SIZE]; |
---|
| 124 | +}; |
---|
| 125 | + |
---|
| 126 | +struct iwl_geo_profile { |
---|
| 127 | + u8 values[ACPI_GEO_TABLE_SIZE]; |
---|
| 128 | +}; |
---|
| 129 | + |
---|
| 130 | +enum iwl_dsm_funcs_rev_0 { |
---|
| 131 | + DSM_FUNC_QUERY = 0, |
---|
| 132 | + DSM_FUNC_DISABLE_SRD = 1, |
---|
| 133 | + DSM_FUNC_ENABLE_INDONESIA_5G2 = 2, |
---|
| 134 | +}; |
---|
| 135 | + |
---|
| 136 | +enum iwl_dsm_values_srd { |
---|
| 137 | + DSM_VALUE_SRD_ACTIVE, |
---|
| 138 | + DSM_VALUE_SRD_PASSIVE, |
---|
| 139 | + DSM_VALUE_SRD_DISABLE, |
---|
| 140 | + DSM_VALUE_SRD_MAX |
---|
| 141 | +}; |
---|
| 142 | + |
---|
| 143 | +enum iwl_dsm_values_indonesia { |
---|
| 144 | + DSM_VALUE_INDONESIA_DISABLE, |
---|
| 145 | + DSM_VALUE_INDONESIA_ENABLE, |
---|
| 146 | + DSM_VALUE_INDONESIA_RESERVED, |
---|
| 147 | + DSM_VALUE_INDONESIA_MAX |
---|
| 148 | +}; |
---|
95 | 149 | |
---|
96 | 150 | #ifdef CONFIG_ACPI |
---|
97 | 151 | |
---|
| 152 | +struct iwl_fw_runtime; |
---|
| 153 | + |
---|
98 | 154 | void *iwl_acpi_get_object(struct device *dev, acpi_string method); |
---|
| 155 | + |
---|
| 156 | +int iwl_acpi_get_dsm_u8(struct device *dev, int rev, int func); |
---|
| 157 | + |
---|
99 | 158 | union acpi_object *iwl_acpi_get_wifi_pkg(struct device *dev, |
---|
100 | 159 | union acpi_object *data, |
---|
101 | | - int data_size); |
---|
| 160 | + int data_size, int *tbl_rev); |
---|
102 | 161 | |
---|
103 | 162 | /** |
---|
104 | 163 | * iwl_acpi_get_mcc - read MCC from ACPI, if available |
---|
.. | .. |
---|
112 | 171 | |
---|
113 | 172 | u64 iwl_acpi_get_pwr_limit(struct device *dev); |
---|
114 | 173 | |
---|
| 174 | +/* |
---|
| 175 | + * iwl_acpi_get_eckv - read external clock validation from ACPI, if available |
---|
| 176 | + * |
---|
| 177 | + * @dev: the struct device |
---|
| 178 | + * @extl_clk: output var (2 bytes) that will get the clk indication. |
---|
| 179 | + * |
---|
| 180 | + * This function tries to read the external clock indication |
---|
| 181 | + * from ACPI if available. |
---|
| 182 | + */ |
---|
| 183 | +int iwl_acpi_get_eckv(struct device *dev, u32 *extl_clk); |
---|
| 184 | + |
---|
| 185 | +int iwl_sar_select_profile(struct iwl_fw_runtime *fwrt, |
---|
| 186 | + __le16 *per_chain, u32 n_tables, u32 n_subbands, |
---|
| 187 | + int prof_a, int prof_b); |
---|
| 188 | + |
---|
| 189 | +int iwl_sar_get_wrds_table(struct iwl_fw_runtime *fwrt); |
---|
| 190 | + |
---|
| 191 | +int iwl_sar_get_ewrd_table(struct iwl_fw_runtime *fwrt); |
---|
| 192 | + |
---|
| 193 | +int iwl_sar_get_wgds_table(struct iwl_fw_runtime *fwrt); |
---|
| 194 | + |
---|
| 195 | +bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt); |
---|
| 196 | + |
---|
| 197 | +int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, |
---|
| 198 | + struct iwl_per_chain_offset *table, u32 n_bands); |
---|
| 199 | + |
---|
| 200 | +int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt, __le32 *block_list_array, |
---|
| 201 | + int *block_list_size); |
---|
| 202 | + |
---|
115 | 203 | #else /* CONFIG_ACPI */ |
---|
116 | 204 | |
---|
117 | 205 | static inline void *iwl_acpi_get_object(struct device *dev, acpi_string method) |
---|
.. | .. |
---|
119 | 207 | return ERR_PTR(-ENOENT); |
---|
120 | 208 | } |
---|
121 | 209 | |
---|
| 210 | +static inline void *iwl_acpi_get_dsm_object(struct device *dev, int rev, |
---|
| 211 | + int func, union acpi_object *args) |
---|
| 212 | +{ |
---|
| 213 | + return ERR_PTR(-ENOENT); |
---|
| 214 | +} |
---|
| 215 | + |
---|
| 216 | +static inline int iwl_acpi_get_dsm_u8(struct device *dev, int rev, int func) |
---|
| 217 | +{ |
---|
| 218 | + return -ENOENT; |
---|
| 219 | +} |
---|
| 220 | + |
---|
122 | 221 | static inline union acpi_object *iwl_acpi_get_wifi_pkg(struct device *dev, |
---|
123 | 222 | union acpi_object *data, |
---|
124 | | - int data_size) |
---|
| 223 | + int data_size, |
---|
| 224 | + int *tbl_rev) |
---|
125 | 225 | { |
---|
126 | 226 | return ERR_PTR(-ENOENT); |
---|
127 | 227 | } |
---|
.. | .. |
---|
136 | 236 | return 0; |
---|
137 | 237 | } |
---|
138 | 238 | |
---|
| 239 | +static inline int iwl_acpi_get_eckv(struct device *dev, u32 *extl_clk) |
---|
| 240 | +{ |
---|
| 241 | + return -ENOENT; |
---|
| 242 | +} |
---|
| 243 | + |
---|
| 244 | +static inline int iwl_sar_select_profile(struct iwl_fw_runtime *fwrt, |
---|
| 245 | + __le16 *per_chain, u32 n_tables, u32 n_subbands, |
---|
| 246 | + int prof_a, int prof_b) |
---|
| 247 | +{ |
---|
| 248 | + return -ENOENT; |
---|
| 249 | +} |
---|
| 250 | + |
---|
| 251 | +static inline int iwl_sar_get_wrds_table(struct iwl_fw_runtime *fwrt) |
---|
| 252 | +{ |
---|
| 253 | + return -ENOENT; |
---|
| 254 | +} |
---|
| 255 | + |
---|
| 256 | +static inline int iwl_sar_get_ewrd_table(struct iwl_fw_runtime *fwrt) |
---|
| 257 | +{ |
---|
| 258 | + return -ENOENT; |
---|
| 259 | +} |
---|
| 260 | + |
---|
| 261 | +static inline int iwl_sar_get_wgds_table(struct iwl_fw_runtime *fwrt) |
---|
| 262 | +{ |
---|
| 263 | + return -ENOENT; |
---|
| 264 | +} |
---|
| 265 | + |
---|
| 266 | +static inline bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt) |
---|
| 267 | +{ |
---|
| 268 | + return false; |
---|
| 269 | +} |
---|
| 270 | + |
---|
| 271 | +static inline int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt, |
---|
| 272 | + __le32 *block_list_array, |
---|
| 273 | + int *block_list_size) |
---|
| 274 | +{ |
---|
| 275 | + return -ENOENT; |
---|
| 276 | +} |
---|
139 | 277 | #endif /* CONFIG_ACPI */ |
---|
140 | 278 | #endif /* __iwl_fw_acpi__ */ |
---|