linux/drivers/net/wireless/intel/iwlwifi/iwl-eeprom-parse.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
   2/*
   3 * Copyright (C) 2005-2014, 2018 Intel Corporation
   4 * Copyright (C) 2015 Intel Mobile Communications GmbH
   5 */
   6#ifndef __iwl_eeprom_parse_h__
   7#define __iwl_eeprom_parse_h__
   8
   9#include <linux/types.h>
  10#include <linux/if_ether.h>
  11#include <net/cfg80211.h>
  12#include "iwl-trans.h"
  13
  14struct iwl_nvm_data {
  15        int n_hw_addrs;
  16        u8 hw_addr[ETH_ALEN];
  17
  18        u8 calib_version;
  19        __le16 calib_voltage;
  20
  21        __le16 raw_temperature;
  22        __le16 kelvin_temperature;
  23        __le16 kelvin_voltage;
  24        __le16 xtal_calib[2];
  25
  26        bool sku_cap_band_24ghz_enable;
  27        bool sku_cap_band_52ghz_enable;
  28        bool sku_cap_11n_enable;
  29        bool sku_cap_11ac_enable;
  30        bool sku_cap_11ax_enable;
  31        bool sku_cap_amt_enable;
  32        bool sku_cap_ipan_enable;
  33        bool sku_cap_mimo_disabled;
  34
  35        u16 radio_cfg_type;
  36        u8 radio_cfg_step;
  37        u8 radio_cfg_dash;
  38        u8 radio_cfg_pnum;
  39        u8 valid_tx_ant, valid_rx_ant;
  40
  41        u32 nvm_version;
  42        s8 max_tx_pwr_half_dbm;
  43
  44        bool lar_enabled;
  45        bool vht160_supported;
  46        struct ieee80211_supported_band bands[NUM_NL80211_BANDS];
  47
  48        /*
  49         * iftype data for low (2.4 GHz) and high (5 and 6 GHz) bands,
  50         * we can use the same for 5 and 6 GHz bands because they have
  51         * the same data
  52         */
  53        struct {
  54                struct ieee80211_sband_iftype_data low[2];
  55                struct ieee80211_sband_iftype_data high[2];
  56        } iftd;
  57
  58        struct ieee80211_channel channels[];
  59};
  60
  61/**
  62 * iwl_parse_eeprom_data - parse EEPROM data and return values
  63 *
  64 * @dev: device pointer we're parsing for, for debug only
  65 * @cfg: device configuration for parsing and overrides
  66 * @eeprom: the EEPROM data
  67 * @eeprom_size: length of the EEPROM data
  68 *
  69 * This function parses all EEPROM values we need and then
  70 * returns a (newly allocated) struct containing all the
  71 * relevant values for driver use. The struct must be freed
  72 * later with iwl_free_nvm_data().
  73 */
  74struct iwl_nvm_data *
  75iwl_parse_eeprom_data(struct iwl_trans *trans, const struct iwl_cfg *cfg,
  76                      const u8 *eeprom, size_t eeprom_size);
  77
  78int iwl_init_sband_channels(struct iwl_nvm_data *data,
  79                            struct ieee80211_supported_band *sband,
  80                            int n_channels, enum nl80211_band band);
  81
  82void iwl_init_ht_hw_capab(struct iwl_trans *trans,
  83                          struct iwl_nvm_data *data,
  84                          struct ieee80211_sta_ht_cap *ht_info,
  85                          enum nl80211_band band,
  86                          u8 tx_chains, u8 rx_chains);
  87
  88#endif /* __iwl_eeprom_parse_h__ */
  89