#ifndef __IF_IWN_CHIP_CFG_H__
#define __IF_IWN_CHIP_CFG_H__
#define IWN_FLG_NEED_PHY_CALIB_DC (1<<0)
#define IWN_FLG_NEED_PHY_CALIB_LO (1<<1)
#define IWN_FLG_NEED_PHY_CALIB_TX_IQ (1<<2)
#define IWN_FLG_NEED_PHY_CALIB_TX_IQ_PERIODIC (1<<3)
#define IWN_FLG_NEED_PHY_CALIB_BASE_BAND (1<<4)
#define IWN_FLG_NEED_PHY_CALIB_TEMP_OFFSET (1<<5)
#define IWN_FLG_NEED_PHY_CALIB_CRYSTAL (1<<6)
#define IWN_FLG_NEED_PHY_CALIB_TEMP_OFFSETv2 (1<<7)
#define IWN_PLCP_ERR_DEFAULT_THRESHOLD 50
#define IWN_PLCP_ERR_LONG_THRESHOLD 100
#define IWN_PLCP_ERR_EXT_LONG_THRESHOLD 200
enum bt_mode_enum {
IWN_BT_NONE,
IWN_BT_SIMPLE,
IWN_BT_ADVANCED
};
struct iwn_base_params {
uint32_t pll_cfg_val;
const uint16_t max_ll_items;
#define IWN_OTP_MAX_LL_ITEMS_1000 (3)
#define IWN_OTP_MAX_LL_ITEMS_6x00 (4)
#define IWN_OTP_MAX_LL_ITEMS_6x50 (7)
#define IWN_OTP_MAX_LL_ITEMS_2x00 (4)
const bool shadow_ram_support;
const bool shadow_reg_enable;
const bool bt_session_2;
const bool bt_sco_disable;
const bool additional_nic_config;
const uint32_t *regulatory_bands;
const bool enhanced_TX_power;
const uint16_t calib_need;
const bool support_hostap;
const bool no_multi_vaps;
uint8_t additional_gp_drv_bit;
enum bt_mode_enum bt_mode;
uint32_t plcp_err_threshold;
};
static const struct iwn_base_params iwn5000_base_params = {
.pll_cfg_val = IWN_ANA_PLL_INIT,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_6x00,
.shadow_ram_support = false,
.shadow_reg_enable = false,
.bt_session_2 = false,
.bt_sco_disable = true,
.additional_nic_config = false,
.regulatory_bands = iwn5000_regulatory_bands,
.enhanced_TX_power = false,
.calib_need =
( IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ_PERIODIC
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND ),
.support_hostap = false,
.no_multi_vaps = true,
.additional_gp_drv_bit = IWN_GP_DRIVER_NONE,
.bt_mode = IWN_BT_NONE,
.plcp_err_threshold = IWN_PLCP_ERR_LONG_THRESHOLD,
};
static const struct iwn_base_params iwn4965_base_params = {
.pll_cfg_val = 0,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_6x00,
.shadow_ram_support = true,
.shadow_reg_enable = false,
.bt_session_2 = false,
.bt_sco_disable = true,
.additional_nic_config = false,
.regulatory_bands = iwn5000_regulatory_bands,
.enhanced_TX_power = false,
.calib_need =
(IWN_FLG_NEED_PHY_CALIB_DC
| IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ_PERIODIC
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND ),
.support_hostap = false,
.no_multi_vaps = true,
.additional_gp_drv_bit = IWN_GP_DRIVER_NONE,
.bt_mode = IWN_BT_SIMPLE,
.plcp_err_threshold = IWN_PLCP_ERR_DEFAULT_THRESHOLD,
};
static const struct iwn_base_params iwn2000_base_params = {
.pll_cfg_val = 0,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_2x00,
.shadow_ram_support = true,
.shadow_reg_enable = false,
.bt_session_2 = false,
.bt_sco_disable = true,
.additional_nic_config = false,
.regulatory_bands = iwn2030_regulatory_bands,
.enhanced_TX_power = true,
.calib_need =
(IWN_FLG_NEED_PHY_CALIB_DC
| IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND
| IWN_FLG_NEED_PHY_CALIB_TEMP_OFFSETv2 ),
.support_hostap = true,
.no_multi_vaps = false,
.additional_gp_drv_bit = IWN_GP_DRIVER_REG_BIT_RADIO_IQ_INVERT,
.bt_mode = IWN_BT_NONE,
.plcp_err_threshold = IWN_PLCP_ERR_DEFAULT_THRESHOLD,
};
static const struct iwn_base_params iwn2030_base_params = {
.pll_cfg_val = 0,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_2x00,
.shadow_ram_support = true,
.shadow_reg_enable = false,
.bt_session_2 = true,
.bt_sco_disable = true,
.additional_nic_config = false,
.regulatory_bands = iwn2030_regulatory_bands,
.enhanced_TX_power = true,
.calib_need =
(IWN_FLG_NEED_PHY_CALIB_DC
| IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND
| IWN_FLG_NEED_PHY_CALIB_TEMP_OFFSETv2 ),
.support_hostap = true,
.no_multi_vaps = false,
.additional_gp_drv_bit = IWN_GP_DRIVER_REG_BIT_RADIO_IQ_INVERT,
.bt_mode = IWN_BT_ADVANCED,
.plcp_err_threshold = IWN_PLCP_ERR_DEFAULT_THRESHOLD,
};
static const struct iwn_base_params iwn1000_base_params = {
.pll_cfg_val = IWN_ANA_PLL_INIT,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_1000,
.shadow_ram_support = false,
.shadow_reg_enable = false,
.bt_session_2 = false,
.bt_sco_disable = false,
.additional_nic_config = false,
.regulatory_bands = iwn5000_regulatory_bands,
.enhanced_TX_power = false,
.calib_need =
( IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ_PERIODIC
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND
),
.support_hostap = false,
.no_multi_vaps = true,
.additional_gp_drv_bit = IWN_GP_DRIVER_NONE,
.bt_mode = IWN_BT_SIMPLE,
.plcp_err_threshold = IWN_PLCP_ERR_EXT_LONG_THRESHOLD,
};
static const struct iwn_base_params iwn_6000_base_params = {
.pll_cfg_val = 0,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_6x00,
.shadow_ram_support = true,
.shadow_reg_enable = true,
.bt_session_2 = false,
.bt_sco_disable = false,
.additional_nic_config = false,
.regulatory_bands = iwn6000_regulatory_bands,
.enhanced_TX_power = true,
.calib_need =
(IWN_FLG_NEED_PHY_CALIB_DC
| IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND ),
.support_hostap = false,
.no_multi_vaps = true,
.additional_gp_drv_bit = IWN_GP_DRIVER_NONE,
.bt_mode = IWN_BT_SIMPLE,
.plcp_err_threshold = IWN_PLCP_ERR_DEFAULT_THRESHOLD,
};
static const struct iwn_base_params iwn_6000i_base_params = {
.pll_cfg_val = 0,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_6x00,
.shadow_ram_support = true,
.shadow_reg_enable = true,
.bt_session_2 = false,
.bt_sco_disable = true,
.additional_nic_config = false,
.regulatory_bands = iwn6000_regulatory_bands,
.enhanced_TX_power = true,
.calib_need =
(IWN_FLG_NEED_PHY_CALIB_DC
| IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND ),
.support_hostap = false,
.no_multi_vaps = true,
.additional_gp_drv_bit = IWN_GP_DRIVER_NONE,
.bt_mode = IWN_BT_SIMPLE,
.plcp_err_threshold = IWN_PLCP_ERR_DEFAULT_THRESHOLD,
};
static const struct iwn_base_params iwn_6000g2_base_params = {
.pll_cfg_val = 0,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_6x00,
.shadow_ram_support = true,
.shadow_reg_enable = true,
.bt_session_2 = false,
.bt_sco_disable = true,
.additional_nic_config = false,
.regulatory_bands = iwn6000_regulatory_bands,
.enhanced_TX_power = true,
.calib_need =
(IWN_FLG_NEED_PHY_CALIB_DC
| IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND
| IWN_FLG_NEED_PHY_CALIB_TEMP_OFFSET ),
.support_hostap = false,
.no_multi_vaps = true,
.additional_gp_drv_bit = 0,
.bt_mode = IWN_BT_SIMPLE,
.plcp_err_threshold = IWN_PLCP_ERR_DEFAULT_THRESHOLD,
};
static const struct iwn_base_params iwn_6050_base_params = {
.pll_cfg_val = 0,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_6x50,
.shadow_ram_support = true,
.shadow_reg_enable = true,
.bt_session_2 = false,
.bt_sco_disable = true,
.additional_nic_config = true,
.regulatory_bands = iwn6000_regulatory_bands,
.enhanced_TX_power = true,
.calib_need =
(IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND ),
.support_hostap = false,
.no_multi_vaps = true,
.additional_gp_drv_bit = IWN_GP_DRIVER_NONE,
.bt_mode = IWN_BT_SIMPLE,
.plcp_err_threshold = IWN_PLCP_ERR_DEFAULT_THRESHOLD,
};
static const struct iwn_base_params iwn_6150_base_params = {
.pll_cfg_val = 0,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_6x50,
.shadow_ram_support = true,
.shadow_reg_enable = true,
.bt_session_2 = false,
.bt_sco_disable = true,
.additional_nic_config = true,
.regulatory_bands = iwn6000_regulatory_bands,
.enhanced_TX_power = true,
.calib_need =
(IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND),
.support_hostap = false,
.no_multi_vaps = true,
.additional_gp_drv_bit = IWN_GP_DRIVER_6050_1X2,
.bt_mode = IWN_BT_SIMPLE,
.plcp_err_threshold = IWN_PLCP_ERR_DEFAULT_THRESHOLD,
};
static const struct iwn_base_params iwn_6000g2b_base_params = {
.pll_cfg_val = 0,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_6x00,
.shadow_ram_support = true,
.shadow_reg_enable = true,
.bt_session_2 = false,
.bt_sco_disable = true,
.additional_nic_config = false,
.regulatory_bands = iwn6000_regulatory_bands,
.enhanced_TX_power = true,
.calib_need =
(IWN_FLG_NEED_PHY_CALIB_DC
| IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND
| IWN_FLG_NEED_PHY_CALIB_TEMP_OFFSET ),
.support_hostap = false,
.no_multi_vaps = true,
.additional_gp_drv_bit = IWN_GP_DRIVER_NONE,
.bt_mode = IWN_BT_ADVANCED,
.plcp_err_threshold = IWN_PLCP_ERR_DEFAULT_THRESHOLD,
};
static const struct iwn_base_params iwn_6235_base_params = {
.pll_cfg_val = 0,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_6x00,
.shadow_ram_support = true,
.shadow_reg_enable = true,
.bt_session_2 = false,
.bt_sco_disable = true,
.additional_nic_config = true,
.regulatory_bands = iwn6000_regulatory_bands,
.enhanced_TX_power = true,
.calib_need =
(IWN_FLG_NEED_PHY_CALIB_DC
| IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND
| IWN_FLG_NEED_PHY_CALIB_TEMP_OFFSET ),
.support_hostap = false,
.no_multi_vaps = true,
.additional_gp_drv_bit = 0,
.bt_mode = IWN_BT_ADVANCED,
.plcp_err_threshold = IWN_PLCP_ERR_DEFAULT_THRESHOLD,
};
static const struct iwn_base_params iwn_5x50_base_params = {
.pll_cfg_val = IWN_ANA_PLL_INIT,
.max_ll_items = IWN_OTP_MAX_LL_ITEMS_6x00,
.shadow_ram_support = true,
.shadow_reg_enable = false,
.bt_session_2 = false,
.bt_sco_disable = true,
.additional_nic_config = false,
.regulatory_bands = iwn5000_regulatory_bands,
.enhanced_TX_power =false,
.calib_need =
(IWN_FLG_NEED_PHY_CALIB_DC
| IWN_FLG_NEED_PHY_CALIB_LO
| IWN_FLG_NEED_PHY_CALIB_TX_IQ
| IWN_FLG_NEED_PHY_CALIB_BASE_BAND ),
.support_hostap = false,
.no_multi_vaps = true,
.additional_gp_drv_bit = IWN_GP_DRIVER_NONE,
.bt_mode = IWN_BT_SIMPLE,
.plcp_err_threshold = IWN_PLCP_ERR_LONG_THRESHOLD,
};
#endif