The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/dev/iwlwifi/fw/acpi.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
    2 /*
    3  * Copyright (C) 2017 Intel Deutschland GmbH
    4  * Copyright (C) 2018-2022 Intel Corporation
    5  */
    6 #ifndef __iwl_fw_acpi__
    7 #define __iwl_fw_acpi__
    8 
    9 #include <linux/acpi.h>
   10 #include "fw/api/commands.h"
   11 #include "fw/api/power.h"
   12 #include "fw/api/phy.h"
   13 #include "fw/api/nvm-reg.h"
   14 #include "fw/img.h"
   15 #include "iwl-trans.h"
   16 
   17 
   18 #define ACPI_WRDS_METHOD        "WRDS"
   19 #define ACPI_EWRD_METHOD        "EWRD"
   20 #define ACPI_WGDS_METHOD        "WGDS"
   21 #define ACPI_WRDD_METHOD        "WRDD"
   22 #define ACPI_SPLC_METHOD        "SPLC"
   23 #define ACPI_ECKV_METHOD        "ECKV"
   24 #define ACPI_PPAG_METHOD        "PPAG"
   25 #define ACPI_WTAS_METHOD        "WTAS"
   26 
   27 #define ACPI_WIFI_DOMAIN        (0x07)
   28 
   29 #define ACPI_SAR_PROFILE_NUM            4
   30 
   31 #define ACPI_NUM_GEO_PROFILES           3
   32 #define ACPI_NUM_GEO_PROFILES_REV3      8
   33 #define ACPI_GEO_PER_CHAIN_SIZE         3
   34 
   35 #define ACPI_SAR_NUM_CHAINS_REV0        2
   36 #define ACPI_SAR_NUM_CHAINS_REV1        2
   37 #define ACPI_SAR_NUM_CHAINS_REV2        4
   38 #define ACPI_SAR_NUM_SUB_BANDS_REV0     5
   39 #define ACPI_SAR_NUM_SUB_BANDS_REV1     11
   40 #define ACPI_SAR_NUM_SUB_BANDS_REV2     11
   41 
   42 #define ACPI_WRDS_WIFI_DATA_SIZE_REV0   (ACPI_SAR_NUM_CHAINS_REV0 * \
   43                                          ACPI_SAR_NUM_SUB_BANDS_REV0 + 2)
   44 #define ACPI_WRDS_WIFI_DATA_SIZE_REV1   (ACPI_SAR_NUM_CHAINS_REV1 * \
   45                                          ACPI_SAR_NUM_SUB_BANDS_REV1 + 2)
   46 #define ACPI_WRDS_WIFI_DATA_SIZE_REV2   (ACPI_SAR_NUM_CHAINS_REV2 * \
   47                                          ACPI_SAR_NUM_SUB_BANDS_REV2 + 2)
   48 #define ACPI_EWRD_WIFI_DATA_SIZE_REV0   ((ACPI_SAR_PROFILE_NUM - 1) * \
   49                                          ACPI_SAR_NUM_CHAINS_REV0 * \
   50                                          ACPI_SAR_NUM_SUB_BANDS_REV0 + 3)
   51 #define ACPI_EWRD_WIFI_DATA_SIZE_REV1   ((ACPI_SAR_PROFILE_NUM - 1) * \
   52                                          ACPI_SAR_NUM_CHAINS_REV1 * \
   53                                          ACPI_SAR_NUM_SUB_BANDS_REV1 + 3)
   54 #define ACPI_EWRD_WIFI_DATA_SIZE_REV2   ((ACPI_SAR_PROFILE_NUM - 1) * \
   55                                          ACPI_SAR_NUM_CHAINS_REV2 * \
   56                                          ACPI_SAR_NUM_SUB_BANDS_REV2 + 3)
   57 
   58 /* revision 0 and 1 are identical, except for the semantics in the FW */
   59 #define ACPI_GEO_NUM_BANDS_REV0         2
   60 #define ACPI_GEO_NUM_BANDS_REV2         3
   61 #define ACPI_GEO_NUM_CHAINS             2
   62 
   63 #define ACPI_WRDD_WIFI_DATA_SIZE        2
   64 #define ACPI_SPLC_WIFI_DATA_SIZE        2
   65 #define ACPI_ECKV_WIFI_DATA_SIZE        2
   66 
   67 /*
   68  * TAS size: 1 elelment for type,
   69  *           1 element for enabled field,
   70  *           1 element for block list size,
   71  *           16 elements for block list array
   72  */
   73 #define APCI_WTAS_BLACK_LIST_MAX        16
   74 #define ACPI_WTAS_WIFI_DATA_SIZE        (3 + APCI_WTAS_BLACK_LIST_MAX)
   75 #define ACPI_WTAS_ENABLED_MSK           0x1
   76 #define ACPI_WTAS_OVERRIDE_IEC_MSK      0x2
   77 #define ACPI_WTAS_ENABLE_IEC_MSK        0x4
   78 #define ACPI_WTAS_OVERRIDE_IEC_POS      0x1
   79 #define ACPI_WTAS_ENABLE_IEC_POS        0x2
   80 #define ACPI_WTAS_USA_UHB_MSK           BIT(16)
   81 #define ACPI_WTAS_USA_UHB_POS           16
   82 
   83 
   84 #define ACPI_PPAG_WIFI_DATA_SIZE_V1     ((IWL_NUM_CHAIN_LIMITS * \
   85                                           IWL_NUM_SUB_BANDS_V1) + 2)
   86 #define ACPI_PPAG_WIFI_DATA_SIZE_V2     ((IWL_NUM_CHAIN_LIMITS * \
   87                                           IWL_NUM_SUB_BANDS_V2) + 2)
   88 
   89 /* PPAG gain value bounds in 1/8 dBm */
   90 #define ACPI_PPAG_MIN_LB -16
   91 #define ACPI_PPAG_MAX_LB 24
   92 #define ACPI_PPAG_MIN_HB -16
   93 #define ACPI_PPAG_MAX_HB 40
   94 #define ACPI_PPAG_MASK 3
   95 #define IWL_PPAG_ETSI_MASK BIT(0)
   96 
   97 #define IWL_SAR_ENABLE_MSK              BIT(0)
   98 #define IWL_REDUCE_POWER_FLAGS_POS      1
   99 
  100 /*
  101  * The profile for revision 2 is a superset of revision 1, which is in
  102  * turn a superset of revision 0.  So we can store all revisions
  103  * inside revision 2, which is what we represent here.
  104  */
  105 struct iwl_sar_profile_chain {
  106         u8 subbands[ACPI_SAR_NUM_SUB_BANDS_REV2];
  107 };
  108 
  109 struct iwl_sar_profile {
  110         bool enabled;
  111         struct iwl_sar_profile_chain chains[ACPI_SAR_NUM_CHAINS_REV2];
  112 };
  113 
  114 /* Same thing as with SAR, all revisions fit in revision 2 */
  115 struct iwl_geo_profile_band {
  116         u8 max;
  117         u8 chains[ACPI_GEO_NUM_CHAINS];
  118 };
  119 
  120 struct iwl_geo_profile {
  121         struct iwl_geo_profile_band bands[ACPI_GEO_NUM_BANDS_REV2];
  122 };
  123 
  124 /* Same thing as with SAR, all revisions fit in revision 2 */
  125 struct iwl_ppag_chain {
  126         s8 subbands[ACPI_SAR_NUM_SUB_BANDS_REV2];
  127 };
  128 
  129 enum iwl_dsm_funcs_rev_0 {
  130         DSM_FUNC_QUERY = 0,
  131         DSM_FUNC_DISABLE_SRD = 1,
  132         DSM_FUNC_ENABLE_INDONESIA_5G2 = 2,
  133         DSM_FUNC_ENABLE_6E = 3,
  134         DSM_FUNC_11AX_ENABLEMENT = 6,
  135         DSM_FUNC_ENABLE_UNII4_CHAN = 7,
  136         DSM_FUNC_ACTIVATE_CHANNEL = 8,
  137         DSM_FUNC_FORCE_DISABLE_CHANNELS = 9
  138 };
  139 
  140 enum iwl_dsm_values_srd {
  141         DSM_VALUE_SRD_ACTIVE,
  142         DSM_VALUE_SRD_PASSIVE,
  143         DSM_VALUE_SRD_DISABLE,
  144         DSM_VALUE_SRD_MAX
  145 };
  146 
  147 enum iwl_dsm_values_indonesia {
  148         DSM_VALUE_INDONESIA_DISABLE,
  149         DSM_VALUE_INDONESIA_ENABLE,
  150         DSM_VALUE_INDONESIA_RESERVED,
  151         DSM_VALUE_INDONESIA_MAX
  152 };
  153 
  154 /* DSM RFI uses a different GUID, so need separate definitions */
  155 
  156 #define DSM_RFI_FUNC_ENABLE 3
  157 
  158 enum iwl_dsm_values_rfi {
  159         DSM_VALUE_RFI_ENABLE,
  160         DSM_VALUE_RFI_DISABLE,
  161         DSM_VALUE_RFI_MAX
  162 };
  163 
  164 #ifdef CONFIG_ACPI
  165 
  166 struct iwl_fw_runtime;
  167 
  168 extern const guid_t iwl_guid;
  169 extern const guid_t iwl_rfi_guid;
  170 
  171 void *iwl_acpi_get_object(struct device *dev, acpi_string method);
  172 
  173 int iwl_acpi_get_dsm_u8(struct device *dev, int rev, int func,
  174                         const guid_t *guid, u8 *value);
  175 
  176 int iwl_acpi_get_dsm_u32(struct device *dev, int rev, int func,
  177                          const guid_t *guid, u32 *value);
  178 
  179 union acpi_object *iwl_acpi_get_wifi_pkg_range(struct device *dev,
  180                                                union acpi_object *data,
  181                                                int min_data_size,
  182                                                int max_data_size,
  183                                                int *tbl_rev);
  184 /**
  185  * iwl_acpi_get_mcc - read MCC from ACPI, if available
  186  *
  187  * @dev: the struct device
  188  * @mcc: output buffer (3 bytes) that will get the MCC
  189  *
  190  * This function tries to read the current MCC from ACPI if available.
  191  */
  192 int iwl_acpi_get_mcc(struct device *dev, char *mcc);
  193 
  194 u64 iwl_acpi_get_pwr_limit(struct device *dev);
  195 
  196 /*
  197  * iwl_acpi_get_eckv - read external clock validation from ACPI, if available
  198  *
  199  * @dev: the struct device
  200  * @extl_clk: output var (2 bytes) that will get the clk indication.
  201  *
  202  * This function tries to read the external clock indication
  203  * from ACPI if available.
  204  */
  205 int iwl_acpi_get_eckv(struct device *dev, u32 *extl_clk);
  206 
  207 int iwl_sar_select_profile(struct iwl_fw_runtime *fwrt,
  208                            __le16 *per_chain, u32 n_tables, u32 n_subbands,
  209                            int prof_a, int prof_b);
  210 
  211 int iwl_sar_get_wrds_table(struct iwl_fw_runtime *fwrt);
  212 
  213 int iwl_sar_get_ewrd_table(struct iwl_fw_runtime *fwrt);
  214 
  215 int iwl_sar_get_wgds_table(struct iwl_fw_runtime *fwrt);
  216 
  217 bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt);
  218 
  219 int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
  220                      struct iwl_per_chain_offset *table,
  221                      u32 n_bands, u32 n_profiles);
  222 
  223 int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt,
  224                      union iwl_tas_config_cmd *cmd, int fw_ver);
  225 
  226 __le32 iwl_acpi_get_lari_config_bitmap(struct iwl_fw_runtime *fwrt);
  227 
  228 int iwl_acpi_get_ppag_table(struct iwl_fw_runtime *fwrt);
  229 
  230 int iwl_read_ppag_table(struct iwl_fw_runtime *fwrt, union iwl_ppag_table_cmd *cmd,
  231                         int *cmd_size);
  232 
  233 bool iwl_acpi_is_ppag_approved(struct iwl_fw_runtime *fwrt);
  234 
  235 #else /* CONFIG_ACPI */
  236 
  237 static inline void *iwl_acpi_get_object(struct device *dev, acpi_string method)
  238 {
  239         return ERR_PTR(-ENOENT);
  240 }
  241 
  242 static inline void *iwl_acpi_get_dsm_object(struct device *dev, int rev,
  243                                             int func, union acpi_object *args)
  244 {
  245         return ERR_PTR(-ENOENT);
  246 }
  247 
  248 static inline int iwl_acpi_get_dsm_u8(struct device *dev, int rev, int func,
  249                                       const guid_t *guid, u8 *value)
  250 {
  251         return -ENOENT;
  252 }
  253 
  254 static inline int iwl_acpi_get_dsm_u32(struct device *dev, int rev, int func,
  255                                        const guid_t *guid, u32 *value)
  256 {
  257         return -ENOENT;
  258 }
  259 
  260 static inline union acpi_object *
  261 iwl_acpi_get_wifi_pkg_range(struct device *dev,
  262                             union acpi_object *data,
  263                             int min_data_size, int max_data_size,
  264                             int *tbl_rev)
  265 {
  266         return ERR_PTR(-ENOENT);
  267 }
  268 
  269 static inline int iwl_acpi_get_mcc(struct device *dev, char *mcc)
  270 {
  271         return -ENOENT;
  272 }
  273 
  274 static inline u64 iwl_acpi_get_pwr_limit(struct device *dev)
  275 {
  276         return 0;
  277 }
  278 
  279 static inline int iwl_acpi_get_eckv(struct device *dev, u32 *extl_clk)
  280 {
  281         return -ENOENT;
  282 }
  283 
  284 static inline int iwl_sar_select_profile(struct iwl_fw_runtime *fwrt,
  285                            __le16 *per_chain, u32 n_tables, u32 n_subbands,
  286                            int prof_a, int prof_b)
  287 {
  288         return -ENOENT;
  289 }
  290 
  291 static inline int iwl_sar_get_wrds_table(struct iwl_fw_runtime *fwrt)
  292 {
  293         return -ENOENT;
  294 }
  295 
  296 static inline int iwl_sar_get_ewrd_table(struct iwl_fw_runtime *fwrt)
  297 {
  298         return -ENOENT;
  299 }
  300 
  301 static inline int iwl_sar_get_wgds_table(struct iwl_fw_runtime *fwrt)
  302 {
  303         return 1;
  304 }
  305 
  306 static inline bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt)
  307 {
  308         return false;
  309 }
  310 
  311 static inline int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt,
  312                                    union iwl_tas_config_cmd *cmd, int fw_ver)
  313 {
  314         return -ENOENT;
  315 }
  316 
  317 static inline __le32 iwl_acpi_get_lari_config_bitmap(struct iwl_fw_runtime *fwrt)
  318 {
  319         return 0;
  320 }
  321 
  322 static inline int iwl_acpi_get_ppag_table(struct iwl_fw_runtime *fwrt)
  323 {
  324         return -ENOENT;
  325 }
  326 
  327 static inline int iwl_read_ppag_table(struct iwl_fw_runtime *fwrt,
  328                                     union iwl_ppag_table_cmd *cmd, int *cmd_size)
  329 {
  330         return -ENOENT;
  331 }
  332 
  333 static inline bool iwl_acpi_is_ppag_approved(struct iwl_fw_runtime *fwrt)
  334 {
  335         return false;
  336 }
  337 
  338 #endif /* CONFIG_ACPI */
  339 
  340 static inline union acpi_object *
  341 iwl_acpi_get_wifi_pkg(struct device *dev,
  342                       union acpi_object *data,
  343                       int data_size, int *tbl_rev)
  344 {
  345         return iwl_acpi_get_wifi_pkg_range(dev, data, data_size, data_size,
  346                                            tbl_rev);
  347 }
  348 
  349 #endif /* __iwl_fw_acpi__ */

Cache object: 32c1b54d12783e835fb63fa0236dad92


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.