Merge branch 'wireless-next-2.6' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6
Conflicts: drivers/net/wireless/iwlwifi/iwl-1000.c drivers/net/wireless/iwlwifi/iwl-6000.c drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c drivers/net/wireless/iwlwifi/iwl-core.h
This commit is contained in:
commit
17b3c17ecd
|
@ -147,7 +147,11 @@ static int iwl1000_hw_set_hw_params(struct iwl_priv *priv)
|
||||||
priv->hw_params.rx_wrt_ptr_reg = FH_RSCSR_CHNL0_WPTR;
|
priv->hw_params.rx_wrt_ptr_reg = FH_RSCSR_CHNL0_WPTR;
|
||||||
|
|
||||||
priv->hw_params.tx_chains_num = num_of_ant(priv->cfg->valid_tx_ant);
|
priv->hw_params.tx_chains_num = num_of_ant(priv->cfg->valid_tx_ant);
|
||||||
priv->hw_params.rx_chains_num = num_of_ant(priv->cfg->valid_rx_ant);
|
if (priv->cfg->rx_with_siso_diversity)
|
||||||
|
priv->hw_params.rx_chains_num = 1;
|
||||||
|
else
|
||||||
|
priv->hw_params.rx_chains_num =
|
||||||
|
num_of_ant(priv->cfg->valid_rx_ant);
|
||||||
priv->hw_params.valid_tx_ant = priv->cfg->valid_tx_ant;
|
priv->hw_params.valid_tx_ant = priv->cfg->valid_tx_ant;
|
||||||
priv->hw_params.valid_rx_ant = priv->cfg->valid_rx_ant;
|
priv->hw_params.valid_rx_ant = priv->cfg->valid_rx_ant;
|
||||||
|
|
||||||
|
@ -272,60 +276,49 @@ static struct iwl_ht_params iwl1000_ht_params = {
|
||||||
.use_rts_for_aggregation = true, /* use rts/cts protection */
|
.use_rts_for_aggregation = true, /* use rts/cts protection */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define IWL_DEVICE_1000 \
|
||||||
|
.fw_name_pre = IWL1000_FW_PRE, \
|
||||||
|
.ucode_api_max = IWL1000_UCODE_API_MAX, \
|
||||||
|
.ucode_api_min = IWL1000_UCODE_API_MIN, \
|
||||||
|
.eeprom_ver = EEPROM_1000_EEPROM_VERSION, \
|
||||||
|
.eeprom_calib_ver = EEPROM_1000_TX_POWER_VERSION, \
|
||||||
|
.ops = &iwl1000_ops, \
|
||||||
|
.mod_params = &iwlagn_mod_params, \
|
||||||
|
.base_params = &iwl1000_base_params, \
|
||||||
|
.led_mode = IWL_LED_BLINK
|
||||||
|
|
||||||
struct iwl_cfg iwl1000_bgn_cfg = {
|
struct iwl_cfg iwl1000_bgn_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Wireless-N 1000 BGN",
|
.name = "Intel(R) Centrino(R) Wireless-N 1000 BGN",
|
||||||
.fw_name_pre = IWL1000_FW_PRE,
|
IWL_DEVICE_1000,
|
||||||
.ucode_api_max = IWL1000_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL1000_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_1000_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_1000_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl1000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl1000_base_params,
|
|
||||||
.ht_params = &iwl1000_ht_params,
|
.ht_params = &iwl1000_ht_params,
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl1000_bg_cfg = {
|
struct iwl_cfg iwl1000_bg_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Wireless-N 1000 BG",
|
.name = "Intel(R) Centrino(R) Wireless-N 1000 BG",
|
||||||
.fw_name_pre = IWL1000_FW_PRE,
|
IWL_DEVICE_1000,
|
||||||
.ucode_api_max = IWL1000_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL1000_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_1000_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_1000_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl1000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl1000_base_params,
|
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define IWL_DEVICE_100 \
|
||||||
|
.fw_name_pre = IWL100_FW_PRE, \
|
||||||
|
.ucode_api_max = IWL100_UCODE_API_MAX, \
|
||||||
|
.ucode_api_min = IWL100_UCODE_API_MIN, \
|
||||||
|
.eeprom_ver = EEPROM_1000_EEPROM_VERSION, \
|
||||||
|
.eeprom_calib_ver = EEPROM_1000_TX_POWER_VERSION, \
|
||||||
|
.ops = &iwl1000_ops, \
|
||||||
|
.mod_params = &iwlagn_mod_params, \
|
||||||
|
.base_params = &iwl1000_base_params, \
|
||||||
|
.led_mode = IWL_LED_RF_STATE, \
|
||||||
|
.rx_with_siso_diversity = true
|
||||||
|
|
||||||
struct iwl_cfg iwl100_bgn_cfg = {
|
struct iwl_cfg iwl100_bgn_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Wireless-N 100 BGN",
|
.name = "Intel(R) Centrino(R) Wireless-N 100 BGN",
|
||||||
.fw_name_pre = IWL100_FW_PRE,
|
IWL_DEVICE_100,
|
||||||
.ucode_api_max = IWL100_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL100_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_1000_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_1000_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl1000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl1000_base_params,
|
|
||||||
.ht_params = &iwl1000_ht_params,
|
.ht_params = &iwl1000_ht_params,
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl100_bg_cfg = {
|
struct iwl_cfg iwl100_bg_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Wireless-N 100 BG",
|
.name = "Intel(R) Centrino(R) Wireless-N 100 BG",
|
||||||
.fw_name_pre = IWL100_FW_PRE,
|
IWL_DEVICE_100,
|
||||||
.ucode_api_max = IWL100_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL100_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_1000_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_1000_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl1000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl1000_base_params,
|
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_FIRMWARE(IWL1000_MODULE_FIRMWARE(IWL1000_UCODE_API_MAX));
|
MODULE_FIRMWARE(IWL1000_MODULE_FIRMWARE(IWL1000_UCODE_API_MAX));
|
||||||
|
|
|
@ -520,65 +520,44 @@ static struct iwl_ht_params iwl5000_ht_params = {
|
||||||
.use_rts_for_aggregation = true, /* use rts/cts protection */
|
.use_rts_for_aggregation = true, /* use rts/cts protection */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define IWL_DEVICE_5000 \
|
||||||
|
.fw_name_pre = IWL5000_FW_PRE, \
|
||||||
|
.ucode_api_max = IWL5000_UCODE_API_MAX, \
|
||||||
|
.ucode_api_min = IWL5000_UCODE_API_MIN, \
|
||||||
|
.eeprom_ver = EEPROM_5000_EEPROM_VERSION, \
|
||||||
|
.eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION, \
|
||||||
|
.ops = &iwl5000_ops, \
|
||||||
|
.mod_params = &iwlagn_mod_params, \
|
||||||
|
.base_params = &iwl5000_base_params, \
|
||||||
|
.led_mode = IWL_LED_BLINK
|
||||||
|
|
||||||
struct iwl_cfg iwl5300_agn_cfg = {
|
struct iwl_cfg iwl5300_agn_cfg = {
|
||||||
.name = "Intel(R) Ultimate N WiFi Link 5300 AGN",
|
.name = "Intel(R) Ultimate N WiFi Link 5300 AGN",
|
||||||
.fw_name_pre = IWL5000_FW_PRE,
|
IWL_DEVICE_5000,
|
||||||
.ucode_api_max = IWL5000_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL5000_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_5000_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl5000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl5000_base_params,
|
|
||||||
.ht_params = &iwl5000_ht_params,
|
.ht_params = &iwl5000_ht_params,
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl5100_bgn_cfg = {
|
struct iwl_cfg iwl5100_bgn_cfg = {
|
||||||
.name = "Intel(R) WiFi Link 5100 BGN",
|
.name = "Intel(R) WiFi Link 5100 BGN",
|
||||||
.fw_name_pre = IWL5000_FW_PRE,
|
IWL_DEVICE_5000,
|
||||||
.ucode_api_max = IWL5000_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL5000_UCODE_API_MIN,
|
|
||||||
.valid_tx_ant = ANT_B, /* .cfg overwrite */
|
.valid_tx_ant = ANT_B, /* .cfg overwrite */
|
||||||
.valid_rx_ant = ANT_AB, /* .cfg overwrite */
|
.valid_rx_ant = ANT_AB, /* .cfg overwrite */
|
||||||
.eeprom_ver = EEPROM_5000_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl5000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl5000_base_params,
|
|
||||||
.ht_params = &iwl5000_ht_params,
|
.ht_params = &iwl5000_ht_params,
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl5100_abg_cfg = {
|
struct iwl_cfg iwl5100_abg_cfg = {
|
||||||
.name = "Intel(R) WiFi Link 5100 ABG",
|
.name = "Intel(R) WiFi Link 5100 ABG",
|
||||||
.fw_name_pre = IWL5000_FW_PRE,
|
IWL_DEVICE_5000,
|
||||||
.ucode_api_max = IWL5000_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL5000_UCODE_API_MIN,
|
|
||||||
.valid_tx_ant = ANT_B, /* .cfg overwrite */
|
.valid_tx_ant = ANT_B, /* .cfg overwrite */
|
||||||
.valid_rx_ant = ANT_AB, /* .cfg overwrite */
|
.valid_rx_ant = ANT_AB, /* .cfg overwrite */
|
||||||
.eeprom_ver = EEPROM_5000_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl5000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl5000_base_params,
|
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl5100_agn_cfg = {
|
struct iwl_cfg iwl5100_agn_cfg = {
|
||||||
.name = "Intel(R) WiFi Link 5100 AGN",
|
.name = "Intel(R) WiFi Link 5100 AGN",
|
||||||
.fw_name_pre = IWL5000_FW_PRE,
|
IWL_DEVICE_5000,
|
||||||
.ucode_api_max = IWL5000_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL5000_UCODE_API_MIN,
|
|
||||||
.valid_tx_ant = ANT_B, /* .cfg overwrite */
|
.valid_tx_ant = ANT_B, /* .cfg overwrite */
|
||||||
.valid_rx_ant = ANT_AB, /* .cfg overwrite */
|
.valid_rx_ant = ANT_AB, /* .cfg overwrite */
|
||||||
.eeprom_ver = EEPROM_5000_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl5000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl5000_base_params,
|
|
||||||
.ht_params = &iwl5000_ht_params,
|
.ht_params = &iwl5000_ht_params,
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl5350_agn_cfg = {
|
struct iwl_cfg iwl5350_agn_cfg = {
|
||||||
|
@ -593,35 +572,32 @@ struct iwl_cfg iwl5350_agn_cfg = {
|
||||||
.base_params = &iwl5000_base_params,
|
.base_params = &iwl5000_base_params,
|
||||||
.ht_params = &iwl5000_ht_params,
|
.ht_params = &iwl5000_ht_params,
|
||||||
.led_mode = IWL_LED_BLINK,
|
.led_mode = IWL_LED_BLINK,
|
||||||
|
.internal_wimax_coex = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define IWL_DEVICE_5150 \
|
||||||
|
.fw_name_pre = IWL5150_FW_PRE, \
|
||||||
|
.ucode_api_max = IWL5150_UCODE_API_MAX, \
|
||||||
|
.ucode_api_min = IWL5150_UCODE_API_MIN, \
|
||||||
|
.eeprom_ver = EEPROM_5050_EEPROM_VERSION, \
|
||||||
|
.eeprom_calib_ver = EEPROM_5050_TX_POWER_VERSION, \
|
||||||
|
.ops = &iwl5150_ops, \
|
||||||
|
.mod_params = &iwlagn_mod_params, \
|
||||||
|
.base_params = &iwl5000_base_params, \
|
||||||
|
.need_dc_calib = true, \
|
||||||
|
.led_mode = IWL_LED_BLINK, \
|
||||||
|
.internal_wimax_coex = true
|
||||||
|
|
||||||
struct iwl_cfg iwl5150_agn_cfg = {
|
struct iwl_cfg iwl5150_agn_cfg = {
|
||||||
.name = "Intel(R) WiMAX/WiFi Link 5150 AGN",
|
.name = "Intel(R) WiMAX/WiFi Link 5150 AGN",
|
||||||
.fw_name_pre = IWL5150_FW_PRE,
|
IWL_DEVICE_5150,
|
||||||
.ucode_api_max = IWL5150_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL5150_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_5050_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_5050_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl5150_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl5000_base_params,
|
|
||||||
.ht_params = &iwl5000_ht_params,
|
.ht_params = &iwl5000_ht_params,
|
||||||
.need_dc_calib = true,
|
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl5150_abg_cfg = {
|
struct iwl_cfg iwl5150_abg_cfg = {
|
||||||
.name = "Intel(R) WiMAX/WiFi Link 5150 ABG",
|
.name = "Intel(R) WiMAX/WiFi Link 5150 ABG",
|
||||||
.fw_name_pre = IWL5150_FW_PRE,
|
IWL_DEVICE_5150,
|
||||||
.ucode_api_max = IWL5150_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL5150_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_5050_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_5050_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl5150_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl5000_base_params,
|
|
||||||
.need_dc_calib = true,
|
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_FIRMWARE(IWL5000_MODULE_FIRMWARE(IWL5000_UCODE_API_MAX));
|
MODULE_FIRMWARE(IWL5000_MODULE_FIRMWARE(IWL5000_UCODE_API_MAX));
|
||||||
|
|
|
@ -182,7 +182,11 @@ static int iwl6000_hw_set_hw_params(struct iwl_priv *priv)
|
||||||
priv->hw_params.rx_wrt_ptr_reg = FH_RSCSR_CHNL0_WPTR;
|
priv->hw_params.rx_wrt_ptr_reg = FH_RSCSR_CHNL0_WPTR;
|
||||||
|
|
||||||
priv->hw_params.tx_chains_num = num_of_ant(priv->cfg->valid_tx_ant);
|
priv->hw_params.tx_chains_num = num_of_ant(priv->cfg->valid_tx_ant);
|
||||||
priv->hw_params.rx_chains_num = num_of_ant(priv->cfg->valid_rx_ant);
|
if (priv->cfg->rx_with_siso_diversity)
|
||||||
|
priv->hw_params.rx_chains_num = 1;
|
||||||
|
else
|
||||||
|
priv->hw_params.rx_chains_num =
|
||||||
|
num_of_ant(priv->cfg->valid_rx_ant);
|
||||||
priv->hw_params.valid_tx_ant = priv->cfg->valid_tx_ant;
|
priv->hw_params.valid_tx_ant = priv->cfg->valid_tx_ant;
|
||||||
priv->hw_params.valid_rx_ant = priv->cfg->valid_rx_ant;
|
priv->hw_params.valid_rx_ant = priv->cfg->valid_rx_ant;
|
||||||
|
|
||||||
|
@ -511,7 +515,7 @@ static struct iwl_base_params iwl6050_base_params = {
|
||||||
.chain_noise_calib_by_driver = true,
|
.chain_noise_calib_by_driver = true,
|
||||||
.shadow_reg_enable = true,
|
.shadow_reg_enable = true,
|
||||||
};
|
};
|
||||||
static struct iwl_base_params iwl6000_coex_base_params = {
|
static struct iwl_base_params iwl6000_g2_base_params = {
|
||||||
.eeprom_size = OTP_LOW_IMAGE_SIZE,
|
.eeprom_size = OTP_LOW_IMAGE_SIZE,
|
||||||
.num_of_queues = IWLAGN_NUM_QUEUES,
|
.num_of_queues = IWLAGN_NUM_QUEUES,
|
||||||
.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
|
.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
|
||||||
|
@ -520,7 +524,7 @@ static struct iwl_base_params iwl6000_coex_base_params = {
|
||||||
.use_bsm = false,
|
.use_bsm = false,
|
||||||
.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
|
.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
|
||||||
.shadow_ram_support = true,
|
.shadow_ram_support = true,
|
||||||
.led_compensation = 51,
|
.led_compensation = 57,
|
||||||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||||
.supports_idle = true,
|
.supports_idle = true,
|
||||||
.adv_thermal_throttle = true,
|
.adv_thermal_throttle = true,
|
||||||
|
@ -550,243 +554,156 @@ static struct iwl_bt_params iwl6000_bt_params = {
|
||||||
.bt_sco_disable = true,
|
.bt_sco_disable = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define IWL_DEVICE_6005 \
|
||||||
|
.fw_name_pre = IWL6000G2A_FW_PRE, \
|
||||||
|
.ucode_api_max = IWL6000G2_UCODE_API_MAX, \
|
||||||
|
.ucode_api_min = IWL6000G2_UCODE_API_MIN, \
|
||||||
|
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, \
|
||||||
|
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, \
|
||||||
|
.ops = &iwl6000_ops, \
|
||||||
|
.mod_params = &iwlagn_mod_params, \
|
||||||
|
.base_params = &iwl6000_g2_base_params, \
|
||||||
|
.need_dc_calib = true, \
|
||||||
|
.need_temp_offset_calib = true, \
|
||||||
|
.led_mode = IWL_LED_RF_STATE
|
||||||
|
|
||||||
struct iwl_cfg iwl6005_2agn_cfg = {
|
struct iwl_cfg iwl6005_2agn_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N 6205 AGN",
|
.name = "Intel(R) Centrino(R) Advanced-N 6205 AGN",
|
||||||
.fw_name_pre = IWL6000G2A_FW_PRE,
|
IWL_DEVICE_6005,
|
||||||
.ucode_api_max = IWL6000G2_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000G2_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_base_params,
|
|
||||||
.ht_params = &iwl6000_ht_params,
|
.ht_params = &iwl6000_ht_params,
|
||||||
.need_dc_calib = true,
|
|
||||||
.need_temp_offset_calib = true,
|
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6005_2abg_cfg = {
|
struct iwl_cfg iwl6005_2abg_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N 6205 ABG",
|
.name = "Intel(R) Centrino(R) Advanced-N 6205 ABG",
|
||||||
.fw_name_pre = IWL6000G2A_FW_PRE,
|
IWL_DEVICE_6005,
|
||||||
.ucode_api_max = IWL6000G2_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000G2_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_base_params,
|
|
||||||
.need_dc_calib = true,
|
|
||||||
.need_temp_offset_calib = true,
|
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6005_2bg_cfg = {
|
struct iwl_cfg iwl6005_2bg_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N 6205 BG",
|
.name = "Intel(R) Centrino(R) Advanced-N 6205 BG",
|
||||||
.fw_name_pre = IWL6000G2A_FW_PRE,
|
IWL_DEVICE_6005,
|
||||||
.ucode_api_max = IWL6000G2_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000G2_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_base_params,
|
|
||||||
.need_dc_calib = true,
|
|
||||||
.need_temp_offset_calib = true,
|
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define IWL_DEVICE_6030 \
|
||||||
|
.fw_name_pre = IWL6000G2B_FW_PRE, \
|
||||||
|
.ucode_api_max = IWL6000G2_UCODE_API_MAX, \
|
||||||
|
.ucode_api_min = IWL6000G2_UCODE_API_MIN, \
|
||||||
|
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, \
|
||||||
|
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, \
|
||||||
|
.ops = &iwl6000g2b_ops, \
|
||||||
|
.mod_params = &iwlagn_mod_params, \
|
||||||
|
.base_params = &iwl6000_g2_base_params, \
|
||||||
|
.bt_params = &iwl6000_bt_params, \
|
||||||
|
.need_dc_calib = true, \
|
||||||
|
.need_temp_offset_calib = true, \
|
||||||
|
.led_mode = IWL_LED_RF_STATE, \
|
||||||
|
.adv_pm = true, \
|
||||||
|
/* \
|
||||||
|
*Due to bluetooth, we transmit 2.4 GHz probes \
|
||||||
|
* only on antenna A \
|
||||||
|
*/ \
|
||||||
|
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A
|
||||||
|
|
||||||
struct iwl_cfg iwl6030_2agn_cfg = {
|
struct iwl_cfg iwl6030_2agn_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N 6230 AGN",
|
.name = "Intel(R) Centrino(R) Advanced-N 6230 AGN",
|
||||||
.fw_name_pre = IWL6000G2B_FW_PRE,
|
IWL_DEVICE_6030,
|
||||||
.ucode_api_max = IWL6000G2_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000G2_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000g2b_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_coex_base_params,
|
|
||||||
.bt_params = &iwl6000_bt_params,
|
|
||||||
.ht_params = &iwl6000_ht_params,
|
.ht_params = &iwl6000_ht_params,
|
||||||
.need_dc_calib = true,
|
|
||||||
.need_temp_offset_calib = true,
|
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.adv_pm = true,
|
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6030_2abg_cfg = {
|
struct iwl_cfg iwl6030_2abg_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N 6230 ABG",
|
.name = "Intel(R) Centrino(R) Advanced-N 6230 ABG",
|
||||||
.fw_name_pre = IWL6000G2B_FW_PRE,
|
IWL_DEVICE_6030,
|
||||||
.ucode_api_max = IWL6000G2_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000G2_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000g2b_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_coex_base_params,
|
|
||||||
.bt_params = &iwl6000_bt_params,
|
|
||||||
.need_dc_calib = true,
|
|
||||||
.need_temp_offset_calib = true,
|
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.adv_pm = true,
|
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6030_2bgn_cfg = {
|
struct iwl_cfg iwl6030_2bgn_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N 6230 BGN",
|
.name = "Intel(R) Centrino(R) Advanced-N 6230 BGN",
|
||||||
.fw_name_pre = IWL6000G2B_FW_PRE,
|
IWL_DEVICE_6030,
|
||||||
.ucode_api_max = IWL6000G2_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000G2_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000g2b_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_coex_base_params,
|
|
||||||
.bt_params = &iwl6000_bt_params,
|
|
||||||
.ht_params = &iwl6000_ht_params,
|
.ht_params = &iwl6000_ht_params,
|
||||||
.need_dc_calib = true,
|
|
||||||
.need_temp_offset_calib = true,
|
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.adv_pm = true,
|
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6030_2bg_cfg = {
|
struct iwl_cfg iwl6030_2bg_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N 6230 BG",
|
.name = "Intel(R) Centrino(R) Advanced-N 6230 BG",
|
||||||
.fw_name_pre = IWL6000G2B_FW_PRE,
|
IWL_DEVICE_6030,
|
||||||
.ucode_api_max = IWL6000G2_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000G2_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000g2b_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_coex_base_params,
|
|
||||||
.bt_params = &iwl6000_bt_params,
|
|
||||||
.need_dc_calib = true,
|
|
||||||
.need_temp_offset_calib = true,
|
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.adv_pm = true,
|
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl1030_bgn_cfg = {
|
struct iwl_cfg iwl1030_bgn_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Wireless-N 1030 BGN",
|
.name = "Intel(R) Centrino(R) Wireless-N 1030 BGN",
|
||||||
.fw_name_pre = IWL6000G2B_FW_PRE,
|
IWL_DEVICE_6030,
|
||||||
.ucode_api_max = IWL6000G2_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000G2_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000g2b_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_coex_base_params,
|
|
||||||
.bt_params = &iwl6000_bt_params,
|
|
||||||
.ht_params = &iwl6000_ht_params,
|
.ht_params = &iwl6000_ht_params,
|
||||||
.need_dc_calib = true,
|
|
||||||
.need_temp_offset_calib = true,
|
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.adv_pm = true,
|
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl1030_bg_cfg = {
|
struct iwl_cfg iwl1030_bg_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Wireless-N 1030 BG",
|
.name = "Intel(R) Centrino(R) Wireless-N 1030 BG",
|
||||||
.fw_name_pre = IWL6000G2B_FW_PRE,
|
IWL_DEVICE_6030,
|
||||||
.ucode_api_max = IWL6000G2_UCODE_API_MAX,
|
};
|
||||||
.ucode_api_min = IWL6000G2_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
|
struct iwl_cfg iwl130_bgn_cfg = {
|
||||||
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
|
.name = "Intel(R) Centrino(R) Wireless-N 130 BGN",
|
||||||
.ops = &iwl6000g2b_ops,
|
IWL_DEVICE_6030,
|
||||||
.mod_params = &iwlagn_mod_params,
|
.ht_params = &iwl6000_ht_params,
|
||||||
.base_params = &iwl6000_coex_base_params,
|
.rx_with_siso_diversity = true,
|
||||||
.bt_params = &iwl6000_bt_params,
|
};
|
||||||
.need_dc_calib = true,
|
|
||||||
.need_temp_offset_calib = true,
|
struct iwl_cfg iwl130_bg_cfg = {
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
.name = "Intel(R) Centrino(R) Wireless-N 130 BG",
|
||||||
.adv_pm = true,
|
IWL_DEVICE_6030,
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
.rx_with_siso_diversity = true,
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "i": Internal configuration, use internal Power Amplifier
|
* "i": Internal configuration, use internal Power Amplifier
|
||||||
*/
|
*/
|
||||||
|
#define IWL_DEVICE_6000i \
|
||||||
|
.fw_name_pre = IWL6000_FW_PRE, \
|
||||||
|
.ucode_api_max = IWL6000_UCODE_API_MAX, \
|
||||||
|
.ucode_api_min = IWL6000_UCODE_API_MIN, \
|
||||||
|
.valid_tx_ant = ANT_BC, /* .cfg overwrite */ \
|
||||||
|
.valid_rx_ant = ANT_BC, /* .cfg overwrite */ \
|
||||||
|
.eeprom_ver = EEPROM_6000_EEPROM_VERSION, \
|
||||||
|
.eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION, \
|
||||||
|
.ops = &iwl6000_ops, \
|
||||||
|
.mod_params = &iwlagn_mod_params, \
|
||||||
|
.base_params = &iwl6000_base_params, \
|
||||||
|
.pa_type = IWL_PA_INTERNAL, \
|
||||||
|
.led_mode = IWL_LED_BLINK
|
||||||
|
|
||||||
struct iwl_cfg iwl6000i_2agn_cfg = {
|
struct iwl_cfg iwl6000i_2agn_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N 6200 AGN",
|
.name = "Intel(R) Centrino(R) Advanced-N 6200 AGN",
|
||||||
.fw_name_pre = IWL6000_FW_PRE,
|
IWL_DEVICE_6000i,
|
||||||
.ucode_api_max = IWL6000_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000_UCODE_API_MIN,
|
|
||||||
.valid_tx_ant = ANT_BC, /* .cfg overwrite */
|
|
||||||
.valid_rx_ant = ANT_BC, /* .cfg overwrite */
|
|
||||||
.eeprom_ver = EEPROM_6000_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_base_params,
|
|
||||||
.ht_params = &iwl6000_ht_params,
|
.ht_params = &iwl6000_ht_params,
|
||||||
.pa_type = IWL_PA_INTERNAL,
|
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6000i_2abg_cfg = {
|
struct iwl_cfg iwl6000i_2abg_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N 6200 ABG",
|
.name = "Intel(R) Centrino(R) Advanced-N 6200 ABG",
|
||||||
.fw_name_pre = IWL6000_FW_PRE,
|
IWL_DEVICE_6000i,
|
||||||
.ucode_api_max = IWL6000_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000_UCODE_API_MIN,
|
|
||||||
.valid_tx_ant = ANT_BC, /* .cfg overwrite */
|
|
||||||
.valid_rx_ant = ANT_BC, /* .cfg overwrite */
|
|
||||||
.eeprom_ver = EEPROM_6000_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_base_params,
|
|
||||||
.pa_type = IWL_PA_INTERNAL,
|
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6000i_2bg_cfg = {
|
struct iwl_cfg iwl6000i_2bg_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N 6200 BG",
|
.name = "Intel(R) Centrino(R) Advanced-N 6200 BG",
|
||||||
.fw_name_pre = IWL6000_FW_PRE,
|
IWL_DEVICE_6000i,
|
||||||
.ucode_api_max = IWL6000_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000_UCODE_API_MIN,
|
|
||||||
.valid_tx_ant = ANT_BC, /* .cfg overwrite */
|
|
||||||
.valid_rx_ant = ANT_BC, /* .cfg overwrite */
|
|
||||||
.eeprom_ver = EEPROM_6000_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_base_params,
|
|
||||||
.pa_type = IWL_PA_INTERNAL,
|
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define IWL_DEVICE_6050 \
|
||||||
|
.fw_name_pre = IWL6050_FW_PRE, \
|
||||||
|
.ucode_api_max = IWL6050_UCODE_API_MAX, \
|
||||||
|
.ucode_api_min = IWL6050_UCODE_API_MIN, \
|
||||||
|
.ops = &iwl6050_ops, \
|
||||||
|
.eeprom_ver = EEPROM_6050_EEPROM_VERSION, \
|
||||||
|
.eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION, \
|
||||||
|
.mod_params = &iwlagn_mod_params, \
|
||||||
|
.base_params = &iwl6050_base_params, \
|
||||||
|
.need_dc_calib = true, \
|
||||||
|
.led_mode = IWL_LED_BLINK, \
|
||||||
|
.internal_wimax_coex = true
|
||||||
|
|
||||||
struct iwl_cfg iwl6050_2agn_cfg = {
|
struct iwl_cfg iwl6050_2agn_cfg = {
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 AGN",
|
.name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 AGN",
|
||||||
.fw_name_pre = IWL6050_FW_PRE,
|
IWL_DEVICE_6050,
|
||||||
.ucode_api_max = IWL6050_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6050_UCODE_API_MIN,
|
|
||||||
.ops = &iwl6050_ops,
|
|
||||||
.eeprom_ver = EEPROM_6050_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6050_base_params,
|
|
||||||
.ht_params = &iwl6000_ht_params,
|
.ht_params = &iwl6000_ht_params,
|
||||||
.need_dc_calib = true,
|
};
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
|
struct iwl_cfg iwl6050_2abg_cfg = {
|
||||||
|
.name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 ABG",
|
||||||
|
IWL_DEVICE_6050,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6150_bgn_cfg = {
|
struct iwl_cfg iwl6150_bgn_cfg = {
|
||||||
|
@ -802,21 +719,7 @@ struct iwl_cfg iwl6150_bgn_cfg = {
|
||||||
.ht_params = &iwl6000_ht_params,
|
.ht_params = &iwl6000_ht_params,
|
||||||
.need_dc_calib = true,
|
.need_dc_calib = true,
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
.led_mode = IWL_LED_RF_STATE,
|
||||||
.use_new_eeprom_reading = true,
|
.internal_wimax_coex = true,
|
||||||
};
|
|
||||||
|
|
||||||
struct iwl_cfg iwl6050_2abg_cfg = {
|
|
||||||
.name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 ABG",
|
|
||||||
.fw_name_pre = IWL6050_FW_PRE,
|
|
||||||
.ucode_api_max = IWL6050_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6050_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6050_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6050_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6050_base_params,
|
|
||||||
.need_dc_calib = true,
|
|
||||||
.led_mode = IWL_LED_BLINK,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6000_3agn_cfg = {
|
struct iwl_cfg iwl6000_3agn_cfg = {
|
||||||
|
@ -834,45 +737,6 @@ struct iwl_cfg iwl6000_3agn_cfg = {
|
||||||
.led_mode = IWL_LED_BLINK,
|
.led_mode = IWL_LED_BLINK,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl130_bgn_cfg = {
|
|
||||||
.name = "Intel(R) Centrino(R) Wireless-N 130 BGN",
|
|
||||||
.fw_name_pre = IWL6000G2B_FW_PRE,
|
|
||||||
.ucode_api_max = IWL6000G2_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000G2_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000g2b_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_coex_base_params,
|
|
||||||
.bt_params = &iwl6000_bt_params,
|
|
||||||
.ht_params = &iwl6000_ht_params,
|
|
||||||
.need_dc_calib = true,
|
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.adv_pm = true,
|
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct iwl_cfg iwl130_bg_cfg = {
|
|
||||||
.name = "Intel(R) Centrino(R) Wireless-N 130 BG",
|
|
||||||
.fw_name_pre = IWL6000G2B_FW_PRE,
|
|
||||||
.ucode_api_max = IWL6000G2_UCODE_API_MAX,
|
|
||||||
.ucode_api_min = IWL6000G2_UCODE_API_MIN,
|
|
||||||
.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
|
|
||||||
.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
|
|
||||||
.ops = &iwl6000g2b_ops,
|
|
||||||
.mod_params = &iwlagn_mod_params,
|
|
||||||
.base_params = &iwl6000_coex_base_params,
|
|
||||||
.bt_params = &iwl6000_bt_params,
|
|
||||||
.need_dc_calib = true,
|
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
|
||||||
.adv_pm = true,
|
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
|
||||||
.use_new_eeprom_reading = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
|
MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
|
||||||
MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX));
|
MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX));
|
||||||
MODULE_FIRMWARE(IWL6000G2A_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX));
|
MODULE_FIRMWARE(IWL6000G2A_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX));
|
||||||
|
|
|
@ -856,6 +856,9 @@ ssize_t iwl_ucode_bt_stats_read(struct file *file,
|
||||||
if (!iwl_is_alive(priv))
|
if (!iwl_is_alive(priv))
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
|
|
||||||
|
if (!priv->bt_enable_flag)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
/* make request to uCode to retrieve statistics information */
|
/* make request to uCode to retrieve statistics information */
|
||||||
mutex_lock(&priv->mutex);
|
mutex_lock(&priv->mutex);
|
||||||
ret = iwl_send_statistics_request(priv, CMD_SYNC, false);
|
ret = iwl_send_statistics_request(priv, CMD_SYNC, false);
|
||||||
|
|
|
@ -75,109 +75,6 @@
|
||||||
#include "iwl-agn.h"
|
#include "iwl-agn.h"
|
||||||
#include "iwl-io.h"
|
#include "iwl-io.h"
|
||||||
|
|
||||||
/************************** EEPROM BANDS ****************************
|
|
||||||
*
|
|
||||||
* The iwl_eeprom_band definitions below provide the mapping from the
|
|
||||||
* EEPROM contents to the specific channel number supported for each
|
|
||||||
* band.
|
|
||||||
*
|
|
||||||
* For example, iwl_priv->eeprom.band_3_channels[4] from the band_3
|
|
||||||
* definition below maps to physical channel 42 in the 5.2GHz spectrum.
|
|
||||||
* The specific geography and calibration information for that channel
|
|
||||||
* is contained in the eeprom map itself.
|
|
||||||
*
|
|
||||||
* During init, we copy the eeprom information and channel map
|
|
||||||
* information into priv->channel_info_24/52 and priv->channel_map_24/52
|
|
||||||
*
|
|
||||||
* channel_map_24/52 provides the index in the channel_info array for a
|
|
||||||
* given channel. We have to have two separate maps as there is channel
|
|
||||||
* overlap with the 2.4GHz and 5.2GHz spectrum as seen in band_1 and
|
|
||||||
* band_2
|
|
||||||
*
|
|
||||||
* A value of 0xff stored in the channel_map indicates that the channel
|
|
||||||
* is not supported by the hardware at all.
|
|
||||||
*
|
|
||||||
* A value of 0xfe in the channel_map indicates that the channel is not
|
|
||||||
* valid for Tx with the current hardware. This means that
|
|
||||||
* while the system can tune and receive on a given channel, it may not
|
|
||||||
* be able to associate or transmit any frames on that
|
|
||||||
* channel. There is no corresponding channel information for that
|
|
||||||
* entry.
|
|
||||||
*
|
|
||||||
*********************************************************************/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* struct iwl_txpwr_section: eeprom section information
|
|
||||||
* @offset: indirect address into eeprom image
|
|
||||||
* @count: number of "struct iwl_eeprom_enhanced_txpwr" in this section
|
|
||||||
* @band: band type for the section
|
|
||||||
* @is_common - true: common section, false: channel section
|
|
||||||
* @is_cck - true: cck section, false: not cck section
|
|
||||||
* @is_ht_40 - true: all channel in the section are HT40 channel,
|
|
||||||
* false: legacy or HT 20 MHz
|
|
||||||
* ignore if it is common section
|
|
||||||
* @iwl_eeprom_section_channel: channel array in the section,
|
|
||||||
* ignore if common section
|
|
||||||
*/
|
|
||||||
struct iwl_txpwr_section {
|
|
||||||
u32 offset;
|
|
||||||
u8 count;
|
|
||||||
enum ieee80211_band band;
|
|
||||||
bool is_common;
|
|
||||||
bool is_cck;
|
|
||||||
bool is_ht40;
|
|
||||||
u8 iwl_eeprom_section_channel[EEPROM_MAX_TXPOWER_SECTION_ELEMENTS];
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* section 1 - 3 are regulatory tx power apply to all channels based on
|
|
||||||
* modulation: CCK, OFDM
|
|
||||||
* Band: 2.4GHz, 5.2GHz
|
|
||||||
* section 4 - 10 are regulatory tx power apply to specified channels
|
|
||||||
* For example:
|
|
||||||
* 1L - Channel 1 Legacy
|
|
||||||
* 1HT - Channel 1 HT
|
|
||||||
* (1,+1) - Channel 1 HT40 "_above_"
|
|
||||||
*
|
|
||||||
* Section 1: all CCK channels
|
|
||||||
* Section 2: all 2.4 GHz OFDM (Legacy, HT and HT40) channels
|
|
||||||
* Section 3: all 5.2 GHz OFDM (Legacy, HT and HT40) channels
|
|
||||||
* Section 4: 2.4 GHz 20MHz channels: 1L, 1HT, 2L, 2HT, 10L, 10HT, 11L, 11HT
|
|
||||||
* Section 5: 2.4 GHz 40MHz channels: (1,+1) (2,+1) (6,+1) (7,+1) (9,+1)
|
|
||||||
* Section 6: 5.2 GHz 20MHz channels: 36L, 64L, 100L, 36HT, 64HT, 100HT
|
|
||||||
* Section 7: 5.2 GHz 40MHz channels: (36,+1) (60,+1) (100,+1)
|
|
||||||
* Section 8: 2.4 GHz channel: 13L, 13HT
|
|
||||||
* Section 9: 2.4 GHz channel: 140L, 140HT
|
|
||||||
* Section 10: 2.4 GHz 40MHz channels: (132,+1) (44,+1)
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static const struct iwl_txpwr_section enhinfo[] = {
|
|
||||||
{ EEPROM_LB_CCK_20_COMMON, 1, IEEE80211_BAND_2GHZ, true, true, false },
|
|
||||||
{ EEPROM_LB_OFDM_COMMON, 3, IEEE80211_BAND_2GHZ, true, false, false },
|
|
||||||
{ EEPROM_HB_OFDM_COMMON, 3, IEEE80211_BAND_5GHZ, true, false, false },
|
|
||||||
{ EEPROM_LB_OFDM_20_BAND, 8, IEEE80211_BAND_2GHZ,
|
|
||||||
false, false, false,
|
|
||||||
{1, 1, 2, 2, 10, 10, 11, 11 } },
|
|
||||||
{ EEPROM_LB_OFDM_HT40_BAND, 5, IEEE80211_BAND_2GHZ,
|
|
||||||
false, false, true,
|
|
||||||
{ 1, 2, 6, 7, 9 } },
|
|
||||||
{ EEPROM_HB_OFDM_20_BAND, 6, IEEE80211_BAND_5GHZ,
|
|
||||||
false, false, false,
|
|
||||||
{ 36, 64, 100, 36, 64, 100 } },
|
|
||||||
{ EEPROM_HB_OFDM_HT40_BAND, 3, IEEE80211_BAND_5GHZ,
|
|
||||||
false, false, true,
|
|
||||||
{ 36, 60, 100 } },
|
|
||||||
{ EEPROM_LB_OFDM_20_CHANNEL_13, 2, IEEE80211_BAND_2GHZ,
|
|
||||||
false, false, false,
|
|
||||||
{ 13, 13 } },
|
|
||||||
{ EEPROM_HB_OFDM_20_CHANNEL_140, 2, IEEE80211_BAND_5GHZ,
|
|
||||||
false, false, false,
|
|
||||||
{ 140, 140 } },
|
|
||||||
{ EEPROM_HB_OFDM_HT40_BAND_1, 2, IEEE80211_BAND_5GHZ,
|
|
||||||
false, false, true,
|
|
||||||
{ 132, 44 } },
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* EEPROM related functions
|
* EEPROM related functions
|
||||||
|
@ -306,15 +203,6 @@ static s8 iwl_get_max_txpower_avg(struct iwl_priv *priv,
|
||||||
{
|
{
|
||||||
s8 max_txpower_avg = 0; /* (dBm) */
|
s8 max_txpower_avg = 0; /* (dBm) */
|
||||||
|
|
||||||
IWL_DEBUG_INFO(priv, "%d - "
|
|
||||||
"chain_a: %d dB chain_b: %d dB "
|
|
||||||
"chain_c: %d dB mimo2: %d dB mimo3: %d dB\n",
|
|
||||||
element,
|
|
||||||
enhanced_txpower[element].chain_a_max >> 1,
|
|
||||||
enhanced_txpower[element].chain_b_max >> 1,
|
|
||||||
enhanced_txpower[element].chain_c_max >> 1,
|
|
||||||
enhanced_txpower[element].mimo2_max >> 1,
|
|
||||||
enhanced_txpower[element].mimo3_max >> 1);
|
|
||||||
/* Take the highest tx power from any valid chains */
|
/* Take the highest tx power from any valid chains */
|
||||||
if ((priv->cfg->valid_tx_ant & ANT_A) &&
|
if ((priv->cfg->valid_tx_ant & ANT_A) &&
|
||||||
(enhanced_txpower[element].chain_a_max > max_txpower_avg))
|
(enhanced_txpower[element].chain_a_max > max_txpower_avg))
|
||||||
|
@ -344,157 +232,6 @@ static s8 iwl_get_max_txpower_avg(struct iwl_priv *priv,
|
||||||
return (max_txpower_avg & 0x01) + (max_txpower_avg >> 1);
|
return (max_txpower_avg & 0x01) + (max_txpower_avg >> 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* iwl_update_common_txpower: update channel tx power
|
|
||||||
* update tx power per band based on EEPROM enhanced tx power info.
|
|
||||||
*/
|
|
||||||
static s8 iwl_update_common_txpower(struct iwl_priv *priv,
|
|
||||||
struct iwl_eeprom_enhanced_txpwr *enhanced_txpower,
|
|
||||||
int section, int element, s8 *max_txpower_in_half_dbm)
|
|
||||||
{
|
|
||||||
struct iwl_channel_info *ch_info;
|
|
||||||
int ch;
|
|
||||||
bool is_ht40 = false;
|
|
||||||
s8 max_txpower_avg; /* (dBm) */
|
|
||||||
|
|
||||||
/* it is common section, contain all type (Legacy, HT and HT40)
|
|
||||||
* based on the element in the section to determine
|
|
||||||
* is it HT 40 or not
|
|
||||||
*/
|
|
||||||
if (element == EEPROM_TXPOWER_COMMON_HT40_INDEX)
|
|
||||||
is_ht40 = true;
|
|
||||||
max_txpower_avg =
|
|
||||||
iwl_get_max_txpower_avg(priv, enhanced_txpower,
|
|
||||||
element, max_txpower_in_half_dbm);
|
|
||||||
|
|
||||||
ch_info = priv->channel_info;
|
|
||||||
|
|
||||||
for (ch = 0; ch < priv->channel_count; ch++) {
|
|
||||||
/* find matching band and update tx power if needed */
|
|
||||||
if ((ch_info->band == enhinfo[section].band) &&
|
|
||||||
(ch_info->max_power_avg < max_txpower_avg) &&
|
|
||||||
(!is_ht40)) {
|
|
||||||
/* Update regulatory-based run-time data */
|
|
||||||
ch_info->max_power_avg = ch_info->curr_txpow =
|
|
||||||
max_txpower_avg;
|
|
||||||
ch_info->scan_power = max_txpower_avg;
|
|
||||||
}
|
|
||||||
if ((ch_info->band == enhinfo[section].band) && is_ht40 &&
|
|
||||||
(ch_info->ht40_max_power_avg < max_txpower_avg)) {
|
|
||||||
/* Update regulatory-based run-time data */
|
|
||||||
ch_info->ht40_max_power_avg = max_txpower_avg;
|
|
||||||
}
|
|
||||||
ch_info++;
|
|
||||||
}
|
|
||||||
return max_txpower_avg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* iwl_update_channel_txpower: update channel tx power
|
|
||||||
* update channel tx power based on EEPROM enhanced tx power info.
|
|
||||||
*/
|
|
||||||
static s8 iwl_update_channel_txpower(struct iwl_priv *priv,
|
|
||||||
struct iwl_eeprom_enhanced_txpwr *enhanced_txpower,
|
|
||||||
int section, int element, s8 *max_txpower_in_half_dbm)
|
|
||||||
{
|
|
||||||
struct iwl_channel_info *ch_info;
|
|
||||||
int ch;
|
|
||||||
u8 channel;
|
|
||||||
s8 max_txpower_avg; /* (dBm) */
|
|
||||||
|
|
||||||
channel = enhinfo[section].iwl_eeprom_section_channel[element];
|
|
||||||
max_txpower_avg =
|
|
||||||
iwl_get_max_txpower_avg(priv, enhanced_txpower,
|
|
||||||
element, max_txpower_in_half_dbm);
|
|
||||||
|
|
||||||
ch_info = priv->channel_info;
|
|
||||||
for (ch = 0; ch < priv->channel_count; ch++) {
|
|
||||||
/* find matching channel and update tx power if needed */
|
|
||||||
if (ch_info->channel == channel) {
|
|
||||||
if ((ch_info->max_power_avg < max_txpower_avg) &&
|
|
||||||
(!enhinfo[section].is_ht40)) {
|
|
||||||
/* Update regulatory-based run-time data */
|
|
||||||
ch_info->max_power_avg = max_txpower_avg;
|
|
||||||
ch_info->curr_txpow = max_txpower_avg;
|
|
||||||
ch_info->scan_power = max_txpower_avg;
|
|
||||||
}
|
|
||||||
if ((enhinfo[section].is_ht40) &&
|
|
||||||
(ch_info->ht40_max_power_avg < max_txpower_avg)) {
|
|
||||||
/* Update regulatory-based run-time data */
|
|
||||||
ch_info->ht40_max_power_avg = max_txpower_avg;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ch_info++;
|
|
||||||
}
|
|
||||||
return max_txpower_avg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* iwlcore_eeprom_enhanced_txpower: process enhanced tx power info
|
|
||||||
*/
|
|
||||||
static void iwlcore_eeprom_enhanced_txpower_old(struct iwl_priv *priv)
|
|
||||||
{
|
|
||||||
int eeprom_section_count = 0;
|
|
||||||
int section, element;
|
|
||||||
struct iwl_eeprom_enhanced_txpwr *enhanced_txpower;
|
|
||||||
u32 offset;
|
|
||||||
s8 max_txpower_avg; /* (dBm) */
|
|
||||||
s8 max_txpower_in_half_dbm; /* (half-dBm) */
|
|
||||||
|
|
||||||
/* Loop through all the sections
|
|
||||||
* adjust bands and channel's max tx power
|
|
||||||
* Set the tx_power_user_lmt to the highest power
|
|
||||||
* supported by any channels and chains
|
|
||||||
*/
|
|
||||||
for (section = 0; section < ARRAY_SIZE(enhinfo); section++) {
|
|
||||||
eeprom_section_count = enhinfo[section].count;
|
|
||||||
offset = enhinfo[section].offset;
|
|
||||||
enhanced_txpower = (struct iwl_eeprom_enhanced_txpwr *)
|
|
||||||
iwl_eeprom_query_addr(priv, offset);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* check for valid entry -
|
|
||||||
* different version of EEPROM might contain different set
|
|
||||||
* of enhanced tx power table
|
|
||||||
* always check for valid entry before process
|
|
||||||
* the information
|
|
||||||
*/
|
|
||||||
if (!(enhanced_txpower->flags || enhanced_txpower->channel) ||
|
|
||||||
enhanced_txpower->delta_20_in_40)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
for (element = 0; element < eeprom_section_count; element++) {
|
|
||||||
if (enhinfo[section].is_common)
|
|
||||||
max_txpower_avg =
|
|
||||||
iwl_update_common_txpower(priv,
|
|
||||||
enhanced_txpower, section,
|
|
||||||
element,
|
|
||||||
&max_txpower_in_half_dbm);
|
|
||||||
else
|
|
||||||
max_txpower_avg =
|
|
||||||
iwl_update_channel_txpower(priv,
|
|
||||||
enhanced_txpower, section,
|
|
||||||
element,
|
|
||||||
&max_txpower_in_half_dbm);
|
|
||||||
|
|
||||||
/* Update the tx_power_user_lmt to the highest power
|
|
||||||
* supported by any channel */
|
|
||||||
if (max_txpower_avg > priv->tx_power_user_lmt)
|
|
||||||
priv->tx_power_user_lmt = max_txpower_avg;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Update the tx_power_lmt_in_half_dbm to
|
|
||||||
* the highest power supported by any channel
|
|
||||||
*/
|
|
||||||
if (max_txpower_in_half_dbm >
|
|
||||||
priv->tx_power_lmt_in_half_dbm)
|
|
||||||
priv->tx_power_lmt_in_half_dbm =
|
|
||||||
max_txpower_in_half_dbm;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
iwlcore_eeprom_enh_txp_read_element(struct iwl_priv *priv,
|
iwlcore_eeprom_enh_txp_read_element(struct iwl_priv *priv,
|
||||||
struct iwl_eeprom_enhanced_txpwr *txp,
|
struct iwl_eeprom_enhanced_txpwr *txp,
|
||||||
|
@ -533,7 +270,10 @@ iwlcore_eeprom_enh_txp_read_element(struct iwl_priv *priv,
|
||||||
#define EEPROM_TXP_ENTRY_LEN sizeof(struct iwl_eeprom_enhanced_txpwr)
|
#define EEPROM_TXP_ENTRY_LEN sizeof(struct iwl_eeprom_enhanced_txpwr)
|
||||||
#define EEPROM_TXP_SZ_OFFS (0x00 | INDIRECT_ADDRESS | INDIRECT_TXP_LIMIT_SIZE)
|
#define EEPROM_TXP_SZ_OFFS (0x00 | INDIRECT_ADDRESS | INDIRECT_TXP_LIMIT_SIZE)
|
||||||
|
|
||||||
static void iwlcore_eeprom_enhanced_txpower_new(struct iwl_priv *priv)
|
#define TXP_CHECK_AND_PRINT(x) ((txp->flags & IWL_EEPROM_ENH_TXP_FL_##x) \
|
||||||
|
? # x " " : "")
|
||||||
|
|
||||||
|
void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
struct iwl_eeprom_enhanced_txpwr *txp_array, *txp;
|
struct iwl_eeprom_enhanced_txpwr *txp_array, *txp;
|
||||||
int idx, entries;
|
int idx, entries;
|
||||||
|
@ -547,13 +287,39 @@ static void iwlcore_eeprom_enhanced_txpower_new(struct iwl_priv *priv)
|
||||||
entries = le16_to_cpup(txp_len) * 2 / EEPROM_TXP_ENTRY_LEN;
|
entries = le16_to_cpup(txp_len) * 2 / EEPROM_TXP_ENTRY_LEN;
|
||||||
|
|
||||||
txp_array = (void *) iwlagn_eeprom_query_addr(priv, EEPROM_TXP_OFFS);
|
txp_array = (void *) iwlagn_eeprom_query_addr(priv, EEPROM_TXP_OFFS);
|
||||||
|
|
||||||
for (idx = 0; idx < entries; idx++) {
|
for (idx = 0; idx < entries; idx++) {
|
||||||
txp = &txp_array[idx];
|
txp = &txp_array[idx];
|
||||||
|
|
||||||
/* skip invalid entries */
|
/* skip invalid entries */
|
||||||
if (!(txp->flags & IWL_EEPROM_ENH_TXP_FL_VALID))
|
if (!(txp->flags & IWL_EEPROM_ENH_TXP_FL_VALID))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
IWL_DEBUG_EEPROM(priv, "%s %d:\t %s%s%s%s%s%s%s%s (0x%02x)\n",
|
||||||
|
(txp->channel && (txp->flags &
|
||||||
|
IWL_EEPROM_ENH_TXP_FL_COMMON_TYPE)) ?
|
||||||
|
"Common " : (txp->channel) ?
|
||||||
|
"Channel" : "Common",
|
||||||
|
(txp->channel),
|
||||||
|
TXP_CHECK_AND_PRINT(VALID),
|
||||||
|
TXP_CHECK_AND_PRINT(BAND_52G),
|
||||||
|
TXP_CHECK_AND_PRINT(OFDM),
|
||||||
|
TXP_CHECK_AND_PRINT(40MHZ),
|
||||||
|
TXP_CHECK_AND_PRINT(HT_AP),
|
||||||
|
TXP_CHECK_AND_PRINT(RES1),
|
||||||
|
TXP_CHECK_AND_PRINT(RES2),
|
||||||
|
TXP_CHECK_AND_PRINT(COMMON_TYPE),
|
||||||
|
txp->flags);
|
||||||
|
IWL_DEBUG_EEPROM(priv, "\t\t chain_A: 0x%02x "
|
||||||
|
"chain_B: 0X%02x chain_C: 0X%02x\n",
|
||||||
|
txp->chain_a_max, txp->chain_b_max,
|
||||||
|
txp->chain_c_max);
|
||||||
|
IWL_DEBUG_EEPROM(priv, "\t\t MIMO2: 0x%02x "
|
||||||
|
"MIMO3: 0x%02x High 20_on_40: 0x%02x "
|
||||||
|
"Low 20_on_40: 0x%02x\n",
|
||||||
|
txp->mimo2_max, txp->mimo3_max,
|
||||||
|
((txp->delta_20_in_40 & 0xf0) >> 4),
|
||||||
|
(txp->delta_20_in_40 & 0x0f));
|
||||||
|
|
||||||
max_txp_avg = iwl_get_max_txpower_avg(priv, txp_array, idx,
|
max_txp_avg = iwl_get_max_txpower_avg(priv, txp_array, idx,
|
||||||
&max_txp_avg_halfdbm);
|
&max_txp_avg_halfdbm);
|
||||||
|
|
||||||
|
@ -569,11 +335,3 @@ static void iwlcore_eeprom_enhanced_txpower_new(struct iwl_priv *priv)
|
||||||
iwlcore_eeprom_enh_txp_read_element(priv, txp, max_txp_avg);
|
iwlcore_eeprom_enh_txp_read_element(priv, txp, max_txp_avg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv)
|
|
||||||
{
|
|
||||||
if (priv->cfg->use_new_eeprom_reading)
|
|
||||||
iwlcore_eeprom_enhanced_txpower_new(priv);
|
|
||||||
else
|
|
||||||
iwlcore_eeprom_enhanced_txpower_old(priv);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1845,6 +1845,7 @@ void iwlagn_send_advance_bt_config(struct iwl_priv *priv)
|
||||||
bt_cmd.flags |= IWLAGN_BT_FLAG_CHANNEL_INHIBITION;
|
bt_cmd.flags |= IWLAGN_BT_FLAG_CHANNEL_INHIBITION;
|
||||||
IWL_DEBUG_INFO(priv, "BT coex flag: 0X%x\n", bt_cmd.flags);
|
IWL_DEBUG_INFO(priv, "BT coex flag: 0X%x\n", bt_cmd.flags);
|
||||||
}
|
}
|
||||||
|
priv->bt_enable_flag = bt_cmd.flags;
|
||||||
if (priv->bt_full_concurrent)
|
if (priv->bt_full_concurrent)
|
||||||
memcpy(bt_cmd.bt3_lookup_table, iwlagn_concurrent_lookup,
|
memcpy(bt_cmd.bt3_lookup_table, iwlagn_concurrent_lookup,
|
||||||
sizeof(iwlagn_concurrent_lookup));
|
sizeof(iwlagn_concurrent_lookup));
|
||||||
|
|
|
@ -2873,6 +2873,8 @@ void iwl_rs_rate_init(struct iwl_priv *priv, struct ieee80211_sta *sta, u8 sta_i
|
||||||
lq_sta->last_txrate_idx += IWL_FIRST_OFDM_RATE;
|
lq_sta->last_txrate_idx += IWL_FIRST_OFDM_RATE;
|
||||||
lq_sta->is_agg = 0;
|
lq_sta->is_agg = 0;
|
||||||
|
|
||||||
|
lq_sta->dbg_fixed_rate = 0;
|
||||||
|
|
||||||
rs_initialize_lq(priv, conf, sta, lq_sta);
|
rs_initialize_lq(priv, conf, sta, lq_sta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -518,7 +518,14 @@ void iwlagn_bss_info_changed(struct ieee80211_hw *hw,
|
||||||
|
|
||||||
mutex_lock(&priv->mutex);
|
mutex_lock(&priv->mutex);
|
||||||
|
|
||||||
if (WARN_ON(!ctx->vif)) {
|
if (unlikely(!iwl_is_ready(priv))) {
|
||||||
|
IWL_DEBUG_MAC80211(priv, "leave - not ready\n");
|
||||||
|
mutex_unlock(&priv->mutex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unlikely(!ctx->vif)) {
|
||||||
|
IWL_DEBUG_MAC80211(priv, "leave - vif is NULL\n");
|
||||||
mutex_unlock(&priv->mutex);
|
mutex_unlock(&priv->mutex);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1237,7 +1237,6 @@ static int iwlagn_tx_status_reply_compressed_ba(struct iwl_priv *priv,
|
||||||
int i, sh, ack;
|
int i, sh, ack;
|
||||||
u16 seq_ctl = le16_to_cpu(ba_resp->seq_ctl);
|
u16 seq_ctl = le16_to_cpu(ba_resp->seq_ctl);
|
||||||
u16 scd_flow = le16_to_cpu(ba_resp->scd_flow);
|
u16 scd_flow = le16_to_cpu(ba_resp->scd_flow);
|
||||||
u64 bitmap, sent_bitmap;
|
|
||||||
int successes = 0;
|
int successes = 0;
|
||||||
struct ieee80211_tx_info *info;
|
struct ieee80211_tx_info *info;
|
||||||
|
|
||||||
|
@ -1278,6 +1277,8 @@ static int iwlagn_tx_status_reply_compressed_ba(struct iwl_priv *priv,
|
||||||
IWL_DEBUG_HT(priv, "agg frames sent:%d, acked:%d\n",
|
IWL_DEBUG_HT(priv, "agg frames sent:%d, acked:%d\n",
|
||||||
ba_resp->txed, ba_resp->txed_2_done);
|
ba_resp->txed, ba_resp->txed_2_done);
|
||||||
} else {
|
} else {
|
||||||
|
u64 bitmap, sent_bitmap;
|
||||||
|
|
||||||
/* don't use 64-bit values for now */
|
/* don't use 64-bit values for now */
|
||||||
bitmap = le64_to_cpu(ba_resp->bitmap) >> sh;
|
bitmap = le64_to_cpu(ba_resp->bitmap) >> sh;
|
||||||
|
|
||||||
|
@ -1298,7 +1299,11 @@ static int iwlagn_tx_status_reply_compressed_ba(struct iwl_priv *priv,
|
||||||
sent_bitmap >>= 1;
|
sent_bitmap >>= 1;
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IWL_DEBUG_TX_REPLY(priv, "Bitmap %llx\n",
|
||||||
|
(unsigned long long)bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
info = IEEE80211_SKB_CB(priv->txq[scd_flow].txb[agg->start_idx].skb);
|
info = IEEE80211_SKB_CB(priv->txq[scd_flow].txb[agg->start_idx].skb);
|
||||||
memset(&info->status, 0, sizeof(info->status));
|
memset(&info->status, 0, sizeof(info->status));
|
||||||
info->flags |= IEEE80211_TX_STAT_ACK;
|
info->flags |= IEEE80211_TX_STAT_ACK;
|
||||||
|
@ -1313,8 +1318,6 @@ static int iwlagn_tx_status_reply_compressed_ba(struct iwl_priv *priv,
|
||||||
}
|
}
|
||||||
iwlagn_hwrate_to_tx_control(priv, agg->rate_n_flags, info);
|
iwlagn_hwrate_to_tx_control(priv, agg->rate_n_flags, info);
|
||||||
|
|
||||||
IWL_DEBUG_TX_REPLY(priv, "Bitmap %llx\n", (unsigned long long)bitmap);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -957,6 +957,22 @@ void iwl_irq_handle_error(struct iwl_priv *priv)
|
||||||
/* Cancel currently queued command. */
|
/* Cancel currently queued command. */
|
||||||
clear_bit(STATUS_HCMD_ACTIVE, &priv->status);
|
clear_bit(STATUS_HCMD_ACTIVE, &priv->status);
|
||||||
|
|
||||||
|
/* W/A for WiFi/WiMAX coex and WiMAX own the RF */
|
||||||
|
if (priv->cfg->internal_wimax_coex &&
|
||||||
|
(!(iwl_read_prph(priv, APMG_CLK_CTRL_REG) &
|
||||||
|
APMS_CLK_VAL_MRB_FUNC_MODE) ||
|
||||||
|
(iwl_read_prph(priv, APMG_PS_CTRL_REG) &
|
||||||
|
APMG_PS_CTRL_VAL_RESET_REQ))) {
|
||||||
|
wake_up_interruptible(&priv->wait_command_queue);
|
||||||
|
/*
|
||||||
|
*Keep the restart process from trying to send host
|
||||||
|
* commands by clearing the INIT status bit
|
||||||
|
*/
|
||||||
|
clear_bit(STATUS_READY, &priv->status);
|
||||||
|
IWL_ERR(priv, "RF is used by WiMAX\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
IWL_ERR(priv, "Loaded firmware version: %s\n",
|
IWL_ERR(priv, "Loaded firmware version: %s\n",
|
||||||
priv->hw->wiphy->fw_version);
|
priv->hw->wiphy->fw_version);
|
||||||
|
|
||||||
|
@ -1207,6 +1223,7 @@ void iwl_send_bt_config(struct iwl_priv *priv)
|
||||||
else
|
else
|
||||||
bt_cmd.flags = BT_COEX_ENABLE;
|
bt_cmd.flags = BT_COEX_ENABLE;
|
||||||
|
|
||||||
|
priv->bt_enable_flag = bt_cmd.flags;
|
||||||
IWL_DEBUG_INFO(priv, "BT coex %s\n",
|
IWL_DEBUG_INFO(priv, "BT coex %s\n",
|
||||||
(bt_cmd.flags == BT_COEX_DISABLE) ? "disable" : "active");
|
(bt_cmd.flags == BT_COEX_DISABLE) ? "disable" : "active");
|
||||||
|
|
||||||
|
|
|
@ -364,6 +364,8 @@ struct iwl_ht_params {
|
||||||
* @scan_antennas: available antenna for scan operation
|
* @scan_antennas: available antenna for scan operation
|
||||||
* @led_mode: 0=blinking, 1=On(RF On)/Off(RF Off)
|
* @led_mode: 0=blinking, 1=On(RF On)/Off(RF Off)
|
||||||
* @adv_pm: advance power management
|
* @adv_pm: advance power management
|
||||||
|
* @rx_with_siso_diversity: 1x1 device with rx antenna diversity
|
||||||
|
* @internal_wimax_coex: internal wifi/wimax combo device
|
||||||
*
|
*
|
||||||
* We enable the driver to be backward compatible wrt API version. The
|
* We enable the driver to be backward compatible wrt API version. The
|
||||||
* driver specifies which APIs it supports (with @ucode_api_max being the
|
* driver specifies which APIs it supports (with @ucode_api_max being the
|
||||||
|
@ -412,7 +414,8 @@ struct iwl_cfg {
|
||||||
u8 scan_tx_antennas[IEEE80211_NUM_BANDS];
|
u8 scan_tx_antennas[IEEE80211_NUM_BANDS];
|
||||||
enum iwl_led_mode led_mode;
|
enum iwl_led_mode led_mode;
|
||||||
const bool adv_pm;
|
const bool adv_pm;
|
||||||
const bool use_new_eeprom_reading; /* temporary, remove later */
|
const bool rx_with_siso_diversity;
|
||||||
|
const bool internal_wimax_coex;
|
||||||
};
|
};
|
||||||
|
|
||||||
/***************************
|
/***************************
|
||||||
|
|
|
@ -120,6 +120,7 @@ static inline void iwl_dbgfs_unregister(struct iwl_priv *priv)
|
||||||
/* 0x000000F0 - 0x00000010 */
|
/* 0x000000F0 - 0x00000010 */
|
||||||
#define IWL_DL_MACDUMP (1 << 4)
|
#define IWL_DL_MACDUMP (1 << 4)
|
||||||
#define IWL_DL_HCMD_DUMP (1 << 5)
|
#define IWL_DL_HCMD_DUMP (1 << 5)
|
||||||
|
#define IWL_DL_EEPROM (1 << 6)
|
||||||
#define IWL_DL_RADIO (1 << 7)
|
#define IWL_DL_RADIO (1 << 7)
|
||||||
/* 0x00000F00 - 0x00000100 */
|
/* 0x00000F00 - 0x00000100 */
|
||||||
#define IWL_DL_POWER (1 << 8)
|
#define IWL_DL_POWER (1 << 8)
|
||||||
|
@ -164,6 +165,7 @@ static inline void iwl_dbgfs_unregister(struct iwl_priv *priv)
|
||||||
#define IWL_DEBUG_WEP(p, f, a...) IWL_DEBUG(p, IWL_DL_WEP, f, ## a)
|
#define IWL_DEBUG_WEP(p, f, a...) IWL_DEBUG(p, IWL_DL_WEP, f, ## a)
|
||||||
#define IWL_DEBUG_HC(p, f, a...) IWL_DEBUG(p, IWL_DL_HCMD, f, ## a)
|
#define IWL_DEBUG_HC(p, f, a...) IWL_DEBUG(p, IWL_DL_HCMD, f, ## a)
|
||||||
#define IWL_DEBUG_HC_DUMP(p, f, a...) IWL_DEBUG(p, IWL_DL_HCMD_DUMP, f, ## a)
|
#define IWL_DEBUG_HC_DUMP(p, f, a...) IWL_DEBUG(p, IWL_DL_HCMD_DUMP, f, ## a)
|
||||||
|
#define IWL_DEBUG_EEPROM(p, f, a...) IWL_DEBUG(p, IWL_DL_EEPROM, f, ## a)
|
||||||
#define IWL_DEBUG_CALIB(p, f, a...) IWL_DEBUG(p, IWL_DL_CALIB, f, ## a)
|
#define IWL_DEBUG_CALIB(p, f, a...) IWL_DEBUG(p, IWL_DL_CALIB, f, ## a)
|
||||||
#define IWL_DEBUG_FW(p, f, a...) IWL_DEBUG(p, IWL_DL_FW, f, ## a)
|
#define IWL_DEBUG_FW(p, f, a...) IWL_DEBUG(p, IWL_DL_FW, f, ## a)
|
||||||
#define IWL_DEBUG_RF_KILL(p, f, a...) IWL_DEBUG(p, IWL_DL_RF_KILL, f, ## a)
|
#define IWL_DEBUG_RF_KILL(p, f, a...) IWL_DEBUG(p, IWL_DL_RF_KILL, f, ## a)
|
||||||
|
|
|
@ -1567,6 +1567,13 @@ static ssize_t iwl_dbgfs_bt_traffic_read(struct file *file,
|
||||||
const size_t bufsz = sizeof(buf);
|
const size_t bufsz = sizeof(buf);
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
|
|
||||||
|
if (!priv->bt_enable_flag) {
|
||||||
|
pos += scnprintf(buf + pos, bufsz - pos, "BT coex disabled\n");
|
||||||
|
ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
pos += scnprintf(buf + pos, bufsz - pos, "BT enable flag: 0x%x\n",
|
||||||
|
priv->bt_enable_flag);
|
||||||
pos += scnprintf(buf + pos, bufsz - pos, "BT in %s mode\n",
|
pos += scnprintf(buf + pos, bufsz - pos, "BT in %s mode\n",
|
||||||
priv->bt_full_concurrent ? "full concurrency" : "3-wire");
|
priv->bt_full_concurrent ? "full concurrency" : "3-wire");
|
||||||
pos += scnprintf(buf + pos, bufsz - pos, "BT status: %s, "
|
pos += scnprintf(buf + pos, bufsz - pos, "BT status: %s, "
|
||||||
|
|
|
@ -1468,6 +1468,7 @@ struct iwl_priv {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* bt coex */
|
/* bt coex */
|
||||||
|
u8 bt_enable_flag;
|
||||||
u8 bt_status;
|
u8 bt_status;
|
||||||
u8 bt_traffic_load, last_bt_traffic_load;
|
u8 bt_traffic_load, last_bt_traffic_load;
|
||||||
bool bt_ch_announce;
|
bool bt_ch_announce;
|
||||||
|
|
|
@ -147,7 +147,7 @@ static int iwl_eeprom_verify_signature(struct iwl_priv *priv)
|
||||||
u32 gp = iwl_read32(priv, CSR_EEPROM_GP) & CSR_EEPROM_GP_VALID_MSK;
|
u32 gp = iwl_read32(priv, CSR_EEPROM_GP) & CSR_EEPROM_GP_VALID_MSK;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
IWL_DEBUG_INFO(priv, "EEPROM signature=0x%08x\n", gp);
|
IWL_DEBUG_EEPROM(priv, "EEPROM signature=0x%08x\n", gp);
|
||||||
switch (gp) {
|
switch (gp) {
|
||||||
case CSR_EEPROM_GP_BAD_SIG_EEP_GOOD_SIG_OTP:
|
case CSR_EEPROM_GP_BAD_SIG_EEP_GOOD_SIG_OTP:
|
||||||
if (priv->nvm_device_type != NVM_DEVICE_TYPE_OTP) {
|
if (priv->nvm_device_type != NVM_DEVICE_TYPE_OTP) {
|
||||||
|
@ -354,7 +354,7 @@ static int iwl_find_otp_image(struct iwl_priv *priv,
|
||||||
*/
|
*/
|
||||||
valid_addr = next_link_addr;
|
valid_addr = next_link_addr;
|
||||||
next_link_addr = le16_to_cpu(link_value) * sizeof(u16);
|
next_link_addr = le16_to_cpu(link_value) * sizeof(u16);
|
||||||
IWL_DEBUG_INFO(priv, "OTP blocks %d addr 0x%x\n",
|
IWL_DEBUG_EEPROM(priv, "OTP blocks %d addr 0x%x\n",
|
||||||
usedblocks, next_link_addr);
|
usedblocks, next_link_addr);
|
||||||
if (iwl_read_otp_word(priv, next_link_addr, &link_value))
|
if (iwl_read_otp_word(priv, next_link_addr, &link_value))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -374,7 +374,7 @@ static int iwl_find_otp_image(struct iwl_priv *priv,
|
||||||
} while (usedblocks <= priv->cfg->base_params->max_ll_items);
|
} while (usedblocks <= priv->cfg->base_params->max_ll_items);
|
||||||
|
|
||||||
/* OTP has no valid blocks */
|
/* OTP has no valid blocks */
|
||||||
IWL_DEBUG_INFO(priv, "OTP has no valid blocks\n");
|
IWL_DEBUG_EEPROM(priv, "OTP has no valid blocks\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -414,7 +414,7 @@ int iwl_eeprom_init(struct iwl_priv *priv)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
/* allocate eeprom */
|
/* allocate eeprom */
|
||||||
sz = priv->cfg->base_params->eeprom_size;
|
sz = priv->cfg->base_params->eeprom_size;
|
||||||
IWL_DEBUG_INFO(priv, "NVM size = %d\n", sz);
|
IWL_DEBUG_EEPROM(priv, "NVM size = %d\n", sz);
|
||||||
priv->eeprom = kzalloc(sz, GFP_KERNEL);
|
priv->eeprom = kzalloc(sz, GFP_KERNEL);
|
||||||
if (!priv->eeprom) {
|
if (!priv->eeprom) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
@ -492,7 +492,7 @@ int iwl_eeprom_init(struct iwl_priv *priv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IWL_DEBUG_INFO(priv, "NVM Type: %s, version: 0x%x\n",
|
IWL_DEBUG_EEPROM(priv, "NVM Type: %s, version: 0x%x\n",
|
||||||
(priv->nvm_device_type == NVM_DEVICE_TYPE_OTP)
|
(priv->nvm_device_type == NVM_DEVICE_TYPE_OTP)
|
||||||
? "OTP" : "EEPROM",
|
? "OTP" : "EEPROM",
|
||||||
iwl_eeprom_query16(priv, EEPROM_VERSION));
|
iwl_eeprom_query16(priv, EEPROM_VERSION));
|
||||||
|
@ -594,7 +594,7 @@ static int iwl_mod_ht40_chan_info(struct iwl_priv *priv,
|
||||||
if (!is_channel_valid(ch_info))
|
if (!is_channel_valid(ch_info))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
IWL_DEBUG_INFO(priv, "HT40 Ch. %d [%sGHz] %s%s%s%s%s(0x%02x %ddBm):"
|
IWL_DEBUG_EEPROM(priv, "HT40 Ch. %d [%sGHz] %s%s%s%s%s(0x%02x %ddBm):"
|
||||||
" Ad-Hoc %ssupported\n",
|
" Ad-Hoc %ssupported\n",
|
||||||
ch_info->channel,
|
ch_info->channel,
|
||||||
is_channel_a_band(ch_info) ?
|
is_channel_a_band(ch_info) ?
|
||||||
|
@ -634,11 +634,11 @@ int iwl_init_channel_map(struct iwl_priv *priv)
|
||||||
struct iwl_channel_info *ch_info;
|
struct iwl_channel_info *ch_info;
|
||||||
|
|
||||||
if (priv->channel_count) {
|
if (priv->channel_count) {
|
||||||
IWL_DEBUG_INFO(priv, "Channel map already initialized.\n");
|
IWL_DEBUG_EEPROM(priv, "Channel map already initialized.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
IWL_DEBUG_INFO(priv, "Initializing regulatory info from EEPROM\n");
|
IWL_DEBUG_EEPROM(priv, "Initializing regulatory info from EEPROM\n");
|
||||||
|
|
||||||
priv->channel_count =
|
priv->channel_count =
|
||||||
ARRAY_SIZE(iwl_eeprom_band_1) +
|
ARRAY_SIZE(iwl_eeprom_band_1) +
|
||||||
|
@ -647,7 +647,8 @@ int iwl_init_channel_map(struct iwl_priv *priv)
|
||||||
ARRAY_SIZE(iwl_eeprom_band_4) +
|
ARRAY_SIZE(iwl_eeprom_band_4) +
|
||||||
ARRAY_SIZE(iwl_eeprom_band_5);
|
ARRAY_SIZE(iwl_eeprom_band_5);
|
||||||
|
|
||||||
IWL_DEBUG_INFO(priv, "Parsing data for %d channels.\n", priv->channel_count);
|
IWL_DEBUG_EEPROM(priv, "Parsing data for %d channels.\n",
|
||||||
|
priv->channel_count);
|
||||||
|
|
||||||
priv->channel_info = kzalloc(sizeof(struct iwl_channel_info) *
|
priv->channel_info = kzalloc(sizeof(struct iwl_channel_info) *
|
||||||
priv->channel_count, GFP_KERNEL);
|
priv->channel_count, GFP_KERNEL);
|
||||||
|
@ -686,7 +687,8 @@ int iwl_init_channel_map(struct iwl_priv *priv)
|
||||||
IEEE80211_CHAN_NO_HT40;
|
IEEE80211_CHAN_NO_HT40;
|
||||||
|
|
||||||
if (!(is_channel_valid(ch_info))) {
|
if (!(is_channel_valid(ch_info))) {
|
||||||
IWL_DEBUG_INFO(priv, "Ch. %d Flags %x [%sGHz] - "
|
IWL_DEBUG_EEPROM(priv,
|
||||||
|
"Ch. %d Flags %x [%sGHz] - "
|
||||||
"No traffic\n",
|
"No traffic\n",
|
||||||
ch_info->channel,
|
ch_info->channel,
|
||||||
ch_info->flags,
|
ch_info->flags,
|
||||||
|
@ -702,7 +704,8 @@ int iwl_init_channel_map(struct iwl_priv *priv)
|
||||||
ch_info->scan_power = eeprom_ch_info[ch].max_power_avg;
|
ch_info->scan_power = eeprom_ch_info[ch].max_power_avg;
|
||||||
ch_info->min_power = 0;
|
ch_info->min_power = 0;
|
||||||
|
|
||||||
IWL_DEBUG_INFO(priv, "Ch. %d [%sGHz] %s%s%s%s%s%s(0x%02x %ddBm):"
|
IWL_DEBUG_EEPROM(priv, "Ch. %d [%sGHz] "
|
||||||
|
"%s%s%s%s%s%s(0x%02x %ddBm):"
|
||||||
" Ad-Hoc %ssupported\n",
|
" Ad-Hoc %ssupported\n",
|
||||||
ch_info->channel,
|
ch_info->channel,
|
||||||
is_channel_a_band(ch_info) ?
|
is_channel_a_band(ch_info) ?
|
||||||
|
|
|
@ -231,59 +231,6 @@ struct iwl_eeprom_enhanced_txpwr {
|
||||||
#define EEPROM_6000_REG_BAND_24_HT40_CHANNELS ((0x80)\
|
#define EEPROM_6000_REG_BAND_24_HT40_CHANNELS ((0x80)\
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 14 bytes */
|
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 14 bytes */
|
||||||
|
|
||||||
/* 6000 and up regulatory tx power - indirect access */
|
|
||||||
/* max. elements per section */
|
|
||||||
#define EEPROM_MAX_TXPOWER_SECTION_ELEMENTS (8)
|
|
||||||
#define EEPROM_TXPOWER_COMMON_HT40_INDEX (2)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Partition the enhanced tx power portion of eeprom image into
|
|
||||||
* 10 sections based on band, modulation, frequency and channel
|
|
||||||
*
|
|
||||||
* Section 1: all CCK channels
|
|
||||||
* Section 2: all 2.4 GHz OFDM (Legacy, HT and HT40 ) channels
|
|
||||||
* Section 3: all 5.2 GHz OFDM (Legacy, HT and HT40) channels
|
|
||||||
* Section 4: 2.4 GHz 20MHz channels: 1, 2, 10, 11. Both Legacy and HT
|
|
||||||
* Section 5: 2.4 GHz 40MHz channels: 1, 2, 6, 7, 9, (_above_)
|
|
||||||
* Section 6: 5.2 GHz 20MHz channels: 36, 64, 100, both Legacy and HT
|
|
||||||
* Section 7: 5.2 GHz 40MHz channels: 36, 60, 100 (_above_)
|
|
||||||
* Section 8: 2.4 GHz channel 13, Both Legacy and HT
|
|
||||||
* Section 9: 2.4 GHz channel 140, Both Legacy and HT
|
|
||||||
* Section 10: 2.4 GHz 40MHz channels: 132, 44 (_above_)
|
|
||||||
*/
|
|
||||||
/* 2.4 GHz band: CCK */
|
|
||||||
#define EEPROM_LB_CCK_20_COMMON ((0xA8)\
|
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 8 bytes */
|
|
||||||
/* 2.4 GHz band: 20MHz-Legacy, 20MHz-HT, 40MHz-HT */
|
|
||||||
#define EEPROM_LB_OFDM_COMMON ((0xB0)\
|
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 24 bytes */
|
|
||||||
/* 5.2 GHz band: 20MHz-Legacy, 20MHz-HT, 40MHz-HT */
|
|
||||||
#define EEPROM_HB_OFDM_COMMON ((0xC8)\
|
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 24 bytes */
|
|
||||||
/* 2.4GHz band channels:
|
|
||||||
* 1Legacy, 1HT, 2Legacy, 2HT, 10Legacy, 10HT, 11Legacy, 11HT */
|
|
||||||
#define EEPROM_LB_OFDM_20_BAND ((0xE0)\
|
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 64 bytes */
|
|
||||||
/* 2.4 GHz band HT40 channels: (1,+1) (2,+1) (6,+1) (7,+1) (9,+1) */
|
|
||||||
#define EEPROM_LB_OFDM_HT40_BAND ((0x120)\
|
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 40 bytes */
|
|
||||||
/* 5.2GHz band channels: 36Legacy, 36HT, 64Legacy, 64HT, 100Legacy, 100HT */
|
|
||||||
#define EEPROM_HB_OFDM_20_BAND ((0x148)\
|
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 48 bytes */
|
|
||||||
/* 5.2 GHz band HT40 channels: (36,+1) (60,+1) (100,+1) */
|
|
||||||
#define EEPROM_HB_OFDM_HT40_BAND ((0x178)\
|
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 24 bytes */
|
|
||||||
/* 2.4 GHz band, channnel 13: Legacy, HT */
|
|
||||||
#define EEPROM_LB_OFDM_20_CHANNEL_13 ((0x190)\
|
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 16 bytes */
|
|
||||||
/* 5.2 GHz band, channnel 140: Legacy, HT */
|
|
||||||
#define EEPROM_HB_OFDM_20_CHANNEL_140 ((0x1A0)\
|
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 16 bytes */
|
|
||||||
/* 5.2 GHz band, HT40 channnels (132,+1) (44,+1) */
|
|
||||||
#define EEPROM_HB_OFDM_HT40_BAND_1 ((0x1B0)\
|
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 16 bytes */
|
|
||||||
|
|
||||||
|
|
||||||
/* 5050 Specific */
|
/* 5050 Specific */
|
||||||
#define EEPROM_5050_TX_POWER_VERSION (4)
|
#define EEPROM_5050_TX_POWER_VERSION (4)
|
||||||
#define EEPROM_5050_EEPROM_VERSION (0x21E)
|
#define EEPROM_5050_EEPROM_VERSION (0x21E)
|
||||||
|
|
|
@ -83,10 +83,10 @@
|
||||||
#define APMG_DIGITAL_SVR_REG (APMG_BASE + 0x0058)
|
#define APMG_DIGITAL_SVR_REG (APMG_BASE + 0x0058)
|
||||||
#define APMG_ANALOG_SVR_REG (APMG_BASE + 0x006C)
|
#define APMG_ANALOG_SVR_REG (APMG_BASE + 0x006C)
|
||||||
|
|
||||||
|
#define APMS_CLK_VAL_MRB_FUNC_MODE (0x00000001)
|
||||||
#define APMG_CLK_VAL_DMA_CLK_RQT (0x00000200)
|
#define APMG_CLK_VAL_DMA_CLK_RQT (0x00000200)
|
||||||
#define APMG_CLK_VAL_BSM_CLK_RQT (0x00000800)
|
#define APMG_CLK_VAL_BSM_CLK_RQT (0x00000800)
|
||||||
|
|
||||||
|
|
||||||
#define APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS (0x00400000)
|
#define APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS (0x00400000)
|
||||||
#define APMG_PS_CTRL_VAL_RESET_REQ (0x04000000)
|
#define APMG_PS_CTRL_VAL_RESET_REQ (0x04000000)
|
||||||
#define APMG_PS_CTRL_MSK_PWR_SRC (0x03000000)
|
#define APMG_PS_CTRL_MSK_PWR_SRC (0x03000000)
|
||||||
|
|
Loading…
Reference in New Issue