root/drivers/net/wireless/ti/wlcore/ini.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * This file is part of wl1271
   4  *
   5  * Copyright (C) 2010 Nokia Corporation
   6  *
   7  * Contact: Luciano Coelho <luciano.coelho@nokia.com>
   8  */
   9 
  10 #ifndef __INI_H__
  11 #define __INI_H__
  12 
  13 #define GENERAL_SETTINGS_DRPW_LPD 0xc0
  14 #define SCRATCH_ENABLE_LPD        BIT(25)
  15 
  16 #define WL1271_INI_MAX_SMART_REFLEX_PARAM 16
  17 
  18 struct wl1271_ini_general_params {
  19         u8 ref_clock;
  20         u8 settling_time;
  21         u8 clk_valid_on_wakeup;
  22         u8 dc2dc_mode;
  23         u8 dual_mode_select;
  24         u8 tx_bip_fem_auto_detect;
  25         u8 tx_bip_fem_manufacturer;
  26         u8 general_settings;
  27         u8 sr_state;
  28         u8 srf1[WL1271_INI_MAX_SMART_REFLEX_PARAM];
  29         u8 srf2[WL1271_INI_MAX_SMART_REFLEX_PARAM];
  30         u8 srf3[WL1271_INI_MAX_SMART_REFLEX_PARAM];
  31 } __packed;
  32 
  33 #define WL128X_INI_MAX_SETTINGS_PARAM 4
  34 
  35 struct wl128x_ini_general_params {
  36         u8 ref_clock;
  37         u8 settling_time;
  38         u8 clk_valid_on_wakeup;
  39         u8 tcxo_ref_clock;
  40         u8 tcxo_settling_time;
  41         u8 tcxo_valid_on_wakeup;
  42         u8 tcxo_ldo_voltage;
  43         u8 xtal_itrim_val;
  44         u8 platform_conf;
  45         u8 dual_mode_select;
  46         u8 tx_bip_fem_auto_detect;
  47         u8 tx_bip_fem_manufacturer;
  48         u8 general_settings[WL128X_INI_MAX_SETTINGS_PARAM];
  49         u8 sr_state;
  50         u8 srf1[WL1271_INI_MAX_SMART_REFLEX_PARAM];
  51         u8 srf2[WL1271_INI_MAX_SMART_REFLEX_PARAM];
  52         u8 srf3[WL1271_INI_MAX_SMART_REFLEX_PARAM];
  53 } __packed;
  54 
  55 #define WL1271_INI_RSSI_PROCESS_COMPENS_SIZE 15
  56 
  57 struct wl1271_ini_band_params_2 {
  58         u8 rx_trace_insertion_loss;
  59         u8 tx_trace_loss;
  60         u8 rx_rssi_process_compens[WL1271_INI_RSSI_PROCESS_COMPENS_SIZE];
  61 } __packed;
  62 
  63 #define WL1271_INI_CHANNEL_COUNT_2 14
  64 
  65 struct wl128x_ini_band_params_2 {
  66         u8 rx_trace_insertion_loss;
  67         u8 tx_trace_loss[WL1271_INI_CHANNEL_COUNT_2];
  68         u8 rx_rssi_process_compens[WL1271_INI_RSSI_PROCESS_COMPENS_SIZE];
  69 } __packed;
  70 
  71 #define WL1271_INI_RATE_GROUP_COUNT 6
  72 
  73 struct wl1271_ini_fem_params_2 {
  74         __le16 tx_bip_ref_pd_voltage;
  75         u8 tx_bip_ref_power;
  76         u8 tx_bip_ref_offset;
  77         u8 tx_per_rate_pwr_limits_normal[WL1271_INI_RATE_GROUP_COUNT];
  78         u8 tx_per_rate_pwr_limits_degraded[WL1271_INI_RATE_GROUP_COUNT];
  79         u8 tx_per_rate_pwr_limits_extreme[WL1271_INI_RATE_GROUP_COUNT];
  80         u8 tx_per_chan_pwr_limits_11b[WL1271_INI_CHANNEL_COUNT_2];
  81         u8 tx_per_chan_pwr_limits_ofdm[WL1271_INI_CHANNEL_COUNT_2];
  82         u8 tx_pd_vs_rate_offsets[WL1271_INI_RATE_GROUP_COUNT];
  83         u8 tx_ibias[WL1271_INI_RATE_GROUP_COUNT];
  84         u8 rx_fem_insertion_loss;
  85         u8 degraded_low_to_normal_thr;
  86         u8 normal_to_degraded_high_thr;
  87 } __packed;
  88 
  89 #define WL128X_INI_RATE_GROUP_COUNT 7
  90 /* low and high temperatures */
  91 #define WL128X_INI_PD_VS_TEMPERATURE_RANGES 2
  92 
  93 struct wl128x_ini_fem_params_2 {
  94         __le16 tx_bip_ref_pd_voltage;
  95         u8 tx_bip_ref_power;
  96         u8 tx_bip_ref_offset;
  97         u8 tx_per_rate_pwr_limits_normal[WL128X_INI_RATE_GROUP_COUNT];
  98         u8 tx_per_rate_pwr_limits_degraded[WL128X_INI_RATE_GROUP_COUNT];
  99         u8 tx_per_rate_pwr_limits_extreme[WL128X_INI_RATE_GROUP_COUNT];
 100         u8 tx_per_chan_pwr_limits_11b[WL1271_INI_CHANNEL_COUNT_2];
 101         u8 tx_per_chan_pwr_limits_ofdm[WL1271_INI_CHANNEL_COUNT_2];
 102         u8 tx_pd_vs_rate_offsets[WL128X_INI_RATE_GROUP_COUNT];
 103         u8 tx_ibias[WL128X_INI_RATE_GROUP_COUNT + 1];
 104         u8 tx_pd_vs_chan_offsets[WL1271_INI_CHANNEL_COUNT_2];
 105         u8 tx_pd_vs_temperature[WL128X_INI_PD_VS_TEMPERATURE_RANGES];
 106         u8 rx_fem_insertion_loss;
 107         u8 degraded_low_to_normal_thr;
 108         u8 normal_to_degraded_high_thr;
 109 } __packed;
 110 
 111 #define WL1271_INI_CHANNEL_COUNT_5 35
 112 #define WL1271_INI_SUB_BAND_COUNT_5 7
 113 
 114 struct wl1271_ini_band_params_5 {
 115         u8 rx_trace_insertion_loss[WL1271_INI_SUB_BAND_COUNT_5];
 116         u8 tx_trace_loss[WL1271_INI_SUB_BAND_COUNT_5];
 117         u8 rx_rssi_process_compens[WL1271_INI_RSSI_PROCESS_COMPENS_SIZE];
 118 } __packed;
 119 
 120 struct wl128x_ini_band_params_5 {
 121         u8 rx_trace_insertion_loss[WL1271_INI_SUB_BAND_COUNT_5];
 122         u8 tx_trace_loss[WL1271_INI_CHANNEL_COUNT_5];
 123         u8 rx_rssi_process_compens[WL1271_INI_RSSI_PROCESS_COMPENS_SIZE];
 124 } __packed;
 125 
 126 struct wl1271_ini_fem_params_5 {
 127         __le16 tx_bip_ref_pd_voltage[WL1271_INI_SUB_BAND_COUNT_5];
 128         u8 tx_bip_ref_power[WL1271_INI_SUB_BAND_COUNT_5];
 129         u8 tx_bip_ref_offset[WL1271_INI_SUB_BAND_COUNT_5];
 130         u8 tx_per_rate_pwr_limits_normal[WL1271_INI_RATE_GROUP_COUNT];
 131         u8 tx_per_rate_pwr_limits_degraded[WL1271_INI_RATE_GROUP_COUNT];
 132         u8 tx_per_rate_pwr_limits_extreme[WL1271_INI_RATE_GROUP_COUNT];
 133         u8 tx_per_chan_pwr_limits_ofdm[WL1271_INI_CHANNEL_COUNT_5];
 134         u8 tx_pd_vs_rate_offsets[WL1271_INI_RATE_GROUP_COUNT];
 135         u8 tx_ibias[WL1271_INI_RATE_GROUP_COUNT];
 136         u8 rx_fem_insertion_loss[WL1271_INI_SUB_BAND_COUNT_5];
 137         u8 degraded_low_to_normal_thr;
 138         u8 normal_to_degraded_high_thr;
 139 } __packed;
 140 
 141 struct wl128x_ini_fem_params_5 {
 142         __le16 tx_bip_ref_pd_voltage[WL1271_INI_SUB_BAND_COUNT_5];
 143         u8 tx_bip_ref_power[WL1271_INI_SUB_BAND_COUNT_5];
 144         u8 tx_bip_ref_offset[WL1271_INI_SUB_BAND_COUNT_5];
 145         u8 tx_per_rate_pwr_limits_normal[WL128X_INI_RATE_GROUP_COUNT];
 146         u8 tx_per_rate_pwr_limits_degraded[WL128X_INI_RATE_GROUP_COUNT];
 147         u8 tx_per_rate_pwr_limits_extreme[WL128X_INI_RATE_GROUP_COUNT];
 148         u8 tx_per_chan_pwr_limits_ofdm[WL1271_INI_CHANNEL_COUNT_5];
 149         u8 tx_pd_vs_rate_offsets[WL128X_INI_RATE_GROUP_COUNT];
 150         u8 tx_ibias[WL128X_INI_RATE_GROUP_COUNT];
 151         u8 tx_pd_vs_chan_offsets[WL1271_INI_CHANNEL_COUNT_5];
 152         u8 tx_pd_vs_temperature[WL1271_INI_SUB_BAND_COUNT_5 *
 153                 WL128X_INI_PD_VS_TEMPERATURE_RANGES];
 154         u8 rx_fem_insertion_loss[WL1271_INI_SUB_BAND_COUNT_5];
 155         u8 degraded_low_to_normal_thr;
 156         u8 normal_to_degraded_high_thr;
 157 } __packed;
 158 
 159 /* NVS data structure */
 160 #define WL1271_INI_NVS_SECTION_SIZE                  468
 161 
 162 /* We have four FEM module types: 0-RFMD, 1-TQS, 2-SKW, 3-TQS_HP */
 163 #define WL1271_INI_FEM_MODULE_COUNT                  4
 164 
 165 /*
 166  * In NVS we only store two FEM module entries -
 167  *        FEM modules 0,2,3 are stored in entry 0
 168  *        FEM module 1 is stored in entry 1
 169  */
 170 #define WL12XX_NVS_FEM_MODULE_COUNT                  2
 171 
 172 #define WL12XX_FEM_TO_NVS_ENTRY(ini_fem_module)      \
 173         ((ini_fem_module) == 1 ? 1 : 0)
 174 
 175 #define WL1271_INI_LEGACY_NVS_FILE_SIZE              800
 176 
 177 struct wl1271_nvs_file {
 178         /* NVS section - must be first! */
 179         u8 nvs[WL1271_INI_NVS_SECTION_SIZE];
 180 
 181         /* INI section */
 182         struct wl1271_ini_general_params general_params;
 183         u8 padding1;
 184         struct wl1271_ini_band_params_2 stat_radio_params_2;
 185         u8 padding2;
 186         struct {
 187                 struct wl1271_ini_fem_params_2 params;
 188                 u8 padding;
 189         } dyn_radio_params_2[WL12XX_NVS_FEM_MODULE_COUNT];
 190         struct wl1271_ini_band_params_5 stat_radio_params_5;
 191         u8 padding3;
 192         struct {
 193                 struct wl1271_ini_fem_params_5 params;
 194                 u8 padding;
 195         } dyn_radio_params_5[WL12XX_NVS_FEM_MODULE_COUNT];
 196 } __packed;
 197 
 198 struct wl128x_nvs_file {
 199         /* NVS section - must be first! */
 200         u8 nvs[WL1271_INI_NVS_SECTION_SIZE];
 201 
 202         /* INI section */
 203         struct wl128x_ini_general_params general_params;
 204         u8 fem_vendor_and_options;
 205         struct wl128x_ini_band_params_2 stat_radio_params_2;
 206         u8 padding2;
 207         struct {
 208                 struct wl128x_ini_fem_params_2 params;
 209                 u8 padding;
 210         } dyn_radio_params_2[WL12XX_NVS_FEM_MODULE_COUNT];
 211         struct wl128x_ini_band_params_5 stat_radio_params_5;
 212         u8 padding3;
 213         struct {
 214                 struct wl128x_ini_fem_params_5 params;
 215                 u8 padding;
 216         } dyn_radio_params_5[WL12XX_NVS_FEM_MODULE_COUNT];
 217 } __packed;
 218 #endif

/* [<][>][^][v][top][bottom][index][help] */