|
@@ -72,72 +72,14 @@ static const u16 iwl5000_default_queue_to_tx_fifo[] = {
|
|
|
IWL_TX_FIFO_HCCA_2
|
|
|
};
|
|
|
|
|
|
-int iwl5000_apm_init(struct iwl_priv *priv)
|
|
|
-{
|
|
|
- int ret = 0;
|
|
|
-
|
|
|
- iwl_set_bit(priv, CSR_GIO_CHICKEN_BITS,
|
|
|
- CSR_GIO_CHICKEN_BITS_REG_BIT_DIS_L0S_EXIT_TIMER);
|
|
|
-
|
|
|
- /* disable L0s without affecting L1 :don't wait for ICH L0s bug W/A) */
|
|
|
- iwl_set_bit(priv, CSR_GIO_CHICKEN_BITS,
|
|
|
- CSR_GIO_CHICKEN_BITS_REG_BIT_L1A_NO_L0S_RX);
|
|
|
-
|
|
|
- /* Set FH wait threshold to maximum (HW error during stress W/A) */
|
|
|
- iwl_set_bit(priv, CSR_DBG_HPET_MEM_REG, CSR_DBG_HPET_MEM_REG_VAL);
|
|
|
-
|
|
|
- /* enable HAP INTA to move device L1a -> L0s */
|
|
|
- iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
|
|
|
- CSR_HW_IF_CONFIG_REG_BIT_HAP_WAKE_L1A);
|
|
|
-
|
|
|
- if (priv->cfg->need_pll_cfg)
|
|
|
- iwl_set_bit(priv, CSR_ANA_PLL_CFG, CSR50_ANA_PLL_CFG_VAL);
|
|
|
-
|
|
|
- /* set "initialization complete" bit to move adapter
|
|
|
- * D0U* --> D0A* state */
|
|
|
- iwl_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE);
|
|
|
-
|
|
|
- /* wait for clock stabilization */
|
|
|
- ret = iwl_poll_bit(priv, CSR_GP_CNTRL,
|
|
|
- CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY,
|
|
|
- CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, 25000);
|
|
|
- if (ret < 0) {
|
|
|
- IWL_DEBUG_INFO(priv, "Failed to init the card\n");
|
|
|
- return ret;
|
|
|
- }
|
|
|
-
|
|
|
- /* enable DMA */
|
|
|
- iwl_write_prph(priv, APMG_CLK_EN_REG, APMG_CLK_VAL_DMA_CLK_RQT);
|
|
|
-
|
|
|
- udelay(20);
|
|
|
-
|
|
|
- /* disable L1-Active */
|
|
|
- iwl_set_bits_prph(priv, APMG_PCIDEV_STT_REG,
|
|
|
- APMG_PCIDEV_STT_VAL_L1_ACT_DIS);
|
|
|
-
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
/* NIC configuration for 5000 series */
|
|
|
void iwl5000_nic_config(struct iwl_priv *priv)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
u16 radio_cfg;
|
|
|
- u16 lctl;
|
|
|
|
|
|
spin_lock_irqsave(&priv->lock, flags);
|
|
|
|
|
|
- lctl = iwl_pcie_link_ctl(priv);
|
|
|
-
|
|
|
- /* HW bug W/A */
|
|
|
- /* L1-ASPM is enabled by BIOS */
|
|
|
- if ((lctl & PCI_CFG_LINK_CTRL_VAL_L1_EN) == PCI_CFG_LINK_CTRL_VAL_L1_EN)
|
|
|
- /* L1-APSM enabled: disable L0S */
|
|
|
- iwl_set_bit(priv, CSR_GIO_REG, CSR_GIO_REG_VAL_L0S_ENABLED);
|
|
|
- else
|
|
|
- /* L1-ASPM disabled: enable L0S */
|
|
|
- iwl_clear_bit(priv, CSR_GIO_REG, CSR_GIO_REG_VAL_L0S_ENABLED);
|
|
|
-
|
|
|
radio_cfg = iwl_eeprom_query16(priv, EEPROM_RADIO_CONFIG);
|
|
|
|
|
|
/* write radio config values to register */
|
|
@@ -1488,7 +1430,7 @@ struct iwl_lib_ops iwl5000_lib = {
|
|
|
.send_tx_power = iwl5000_send_tx_power,
|
|
|
.update_chain_flags = iwl_update_chain_flags,
|
|
|
.apm_ops = {
|
|
|
- .init = iwl5000_apm_init,
|
|
|
+ .init = iwl_apm_init,
|
|
|
.stop = iwl_apm_stop,
|
|
|
.config = iwl5000_nic_config,
|
|
|
.set_pwr_src = iwl_set_pwr_src,
|
|
@@ -1539,7 +1481,7 @@ static struct iwl_lib_ops iwl5150_lib = {
|
|
|
.send_tx_power = iwl5000_send_tx_power,
|
|
|
.update_chain_flags = iwl_update_chain_flags,
|
|
|
.apm_ops = {
|
|
|
- .init = iwl5000_apm_init,
|
|
|
+ .init = iwl_apm_init,
|
|
|
.stop = iwl_apm_stop,
|
|
|
.config = iwl5000_nic_config,
|
|
|
.set_pwr_src = iwl_set_pwr_src,
|
|
@@ -1607,7 +1549,9 @@ struct iwl_cfg iwl5300_agn_cfg = {
|
|
|
.mod_params = &iwl50_mod_params,
|
|
|
.valid_tx_ant = ANT_ABC,
|
|
|
.valid_rx_ant = ANT_ABC,
|
|
|
- .need_pll_cfg = true,
|
|
|
+ .pll_cfg_val = CSR50_ANA_PLL_CFG_VAL,
|
|
|
+ .set_l0s = true,
|
|
|
+ .use_bsm = false,
|
|
|
.ht_greenfield_support = true,
|
|
|
.led_compensation = 51,
|
|
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
|
@@ -1628,7 +1572,9 @@ struct iwl_cfg iwl5100_bg_cfg = {
|
|
|
.mod_params = &iwl50_mod_params,
|
|
|
.valid_tx_ant = ANT_B,
|
|
|
.valid_rx_ant = ANT_AB,
|
|
|
- .need_pll_cfg = true,
|
|
|
+ .pll_cfg_val = CSR50_ANA_PLL_CFG_VAL,
|
|
|
+ .set_l0s = true,
|
|
|
+ .use_bsm = false,
|
|
|
.ht_greenfield_support = true,
|
|
|
.led_compensation = 51,
|
|
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
|
@@ -1649,7 +1595,9 @@ struct iwl_cfg iwl5100_abg_cfg = {
|
|
|
.mod_params = &iwl50_mod_params,
|
|
|
.valid_tx_ant = ANT_B,
|
|
|
.valid_rx_ant = ANT_AB,
|
|
|
- .need_pll_cfg = true,
|
|
|
+ .pll_cfg_val = CSR50_ANA_PLL_CFG_VAL,
|
|
|
+ .set_l0s = true,
|
|
|
+ .use_bsm = false,
|
|
|
.ht_greenfield_support = true,
|
|
|
.led_compensation = 51,
|
|
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
|
@@ -1670,7 +1618,9 @@ struct iwl_cfg iwl5100_agn_cfg = {
|
|
|
.mod_params = &iwl50_mod_params,
|
|
|
.valid_tx_ant = ANT_B,
|
|
|
.valid_rx_ant = ANT_AB,
|
|
|
- .need_pll_cfg = true,
|
|
|
+ .pll_cfg_val = CSR50_ANA_PLL_CFG_VAL,
|
|
|
+ .set_l0s = true,
|
|
|
+ .use_bsm = false,
|
|
|
.ht_greenfield_support = true,
|
|
|
.led_compensation = 51,
|
|
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
|
@@ -1691,7 +1641,9 @@ struct iwl_cfg iwl5350_agn_cfg = {
|
|
|
.mod_params = &iwl50_mod_params,
|
|
|
.valid_tx_ant = ANT_ABC,
|
|
|
.valid_rx_ant = ANT_ABC,
|
|
|
- .need_pll_cfg = true,
|
|
|
+ .pll_cfg_val = CSR50_ANA_PLL_CFG_VAL,
|
|
|
+ .set_l0s = true,
|
|
|
+ .use_bsm = false,
|
|
|
.ht_greenfield_support = true,
|
|
|
.led_compensation = 51,
|
|
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
|
@@ -1712,7 +1664,9 @@ struct iwl_cfg iwl5150_agn_cfg = {
|
|
|
.mod_params = &iwl50_mod_params,
|
|
|
.valid_tx_ant = ANT_A,
|
|
|
.valid_rx_ant = ANT_AB,
|
|
|
- .need_pll_cfg = true,
|
|
|
+ .pll_cfg_val = CSR50_ANA_PLL_CFG_VAL,
|
|
|
+ .set_l0s = true,
|
|
|
+ .use_bsm = false,
|
|
|
.ht_greenfield_support = true,
|
|
|
.led_compensation = 51,
|
|
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|