aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c90
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-calib.c1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c93
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.h2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-scan.c1
5 files changed, 92 insertions, 95 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 0cb95bfd15a5..2814565fa3b4 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2972,6 +2972,96 @@ static void iwl_cancel_deferred_work(struct iwl_priv *priv)
2972 del_timer_sync(&priv->statistics_periodic); 2972 del_timer_sync(&priv->statistics_periodic);
2973} 2973}
2974 2974
2975static void iwl_init_hw_rates(struct iwl_priv *priv,
2976 struct ieee80211_rate *rates)
2977{
2978 int i;
2979
2980 for (i = 0; i < IWL_RATE_COUNT_LEGACY; i++) {
2981 rates[i].bitrate = iwl_rates[i].ieee * 5;
2982 rates[i].hw_value = i; /* Rate scaling will work on indexes */
2983 rates[i].hw_value_short = i;
2984 rates[i].flags = 0;
2985 if ((i >= IWL_FIRST_CCK_RATE) && (i <= IWL_LAST_CCK_RATE)) {
2986 /*
2987 * If CCK != 1M then set short preamble rate flag.
2988 */
2989 rates[i].flags |=
2990 (iwl_rates[i].plcp == IWL_RATE_1M_PLCP) ?
2991 0 : IEEE80211_RATE_SHORT_PREAMBLE;
2992 }
2993 }
2994}
2995
2996static int iwl_init_drv(struct iwl_priv *priv)
2997{
2998 int ret;
2999
3000 priv->ibss_beacon = NULL;
3001
3002 spin_lock_init(&priv->lock);
3003 spin_lock_init(&priv->sta_lock);
3004 spin_lock_init(&priv->hcmd_lock);
3005
3006 INIT_LIST_HEAD(&priv->free_frames);
3007
3008 mutex_init(&priv->mutex);
3009
3010 /* Clear the driver's (not device's) station table */
3011 iwl_clear_stations_table(priv);
3012
3013 priv->ieee_channels = NULL;
3014 priv->ieee_rates = NULL;
3015 priv->band = IEEE80211_BAND_2GHZ;
3016
3017 priv->iw_mode = NL80211_IFTYPE_STATION;
3018
3019 /* Choose which receivers/antennas to use */
3020 if (priv->cfg->ops->hcmd->set_rxon_chain)
3021 priv->cfg->ops->hcmd->set_rxon_chain(priv);
3022
3023 iwl_init_scan_params(priv);
3024
3025 iwl_reset_qos(priv);
3026
3027 priv->qos_data.qos_active = 0;
3028 priv->qos_data.qos_cap.val = 0;
3029
3030 priv->rates_mask = IWL_RATES_MASK;
3031 /* Set the tx_power_user_lmt to the lowest power level
3032 * this value will get overwritten by channel max power avg
3033 * from eeprom */
3034 priv->tx_power_user_lmt = IWL_TX_POWER_TARGET_POWER_MIN;
3035
3036 ret = iwl_init_channel_map(priv);
3037 if (ret) {
3038 IWL_ERR(priv, "initializing regulatory failed: %d\n", ret);
3039 goto err;
3040 }
3041
3042 ret = iwlcore_init_geos(priv);
3043 if (ret) {
3044 IWL_ERR(priv, "initializing geos failed: %d\n", ret);
3045 goto err_free_channel_map;
3046 }
3047 iwl_init_hw_rates(priv, priv->ieee_rates);
3048
3049 return 0;
3050
3051err_free_channel_map:
3052 iwl_free_channel_map(priv);
3053err:
3054 return ret;
3055}
3056
3057static void iwl_uninit_drv(struct iwl_priv *priv)
3058{
3059 iwl_calib_free_results(priv);
3060 iwlcore_free_geos(priv);
3061 iwl_free_channel_map(priv);
3062 kfree(priv->scan);
3063}
3064
2975static struct attribute *iwl_sysfs_entries[] = { 3065static struct attribute *iwl_sysfs_entries[] = {
2976 &dev_attr_flags.attr, 3066 &dev_attr_flags.attr,
2977 &dev_attr_filter_flags.attr, 3067 &dev_attr_filter_flags.attr,
diff --git a/drivers/net/wireless/iwlwifi/iwl-calib.c b/drivers/net/wireless/iwlwifi/iwl-calib.c
index 1f801eb9fbff..d994de7438d8 100644
--- a/drivers/net/wireless/iwlwifi/iwl-calib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-calib.c
@@ -132,6 +132,7 @@ void iwl_calib_free_results(struct iwl_priv *priv)
132 priv->calib_results[i].buf_len = 0; 132 priv->calib_results[i].buf_len = 0;
133 } 133 }
134} 134}
135EXPORT_SYMBOL(iwl_calib_free_results);
135 136
136/***************************************************************************** 137/*****************************************************************************
137 * RUNTIME calibrations framework 138 * RUNTIME calibrations framework
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index addc9ad5a5c6..256c9a49fa3b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -451,28 +451,6 @@ static void iwlcore_init_ht_hw_capab(const struct iwl_priv *priv,
451 } 451 }
452} 452}
453 453
454static void iwlcore_init_hw_rates(struct iwl_priv *priv,
455 struct ieee80211_rate *rates)
456{
457 int i;
458
459 for (i = 0; i < IWL_RATE_COUNT_LEGACY; i++) {
460 rates[i].bitrate = iwl_rates[i].ieee * 5;
461 rates[i].hw_value = i; /* Rate scaling will work on indexes */
462 rates[i].hw_value_short = i;
463 rates[i].flags = 0;
464 if ((i >= IWL_FIRST_CCK_RATE) && (i <= IWL_LAST_CCK_RATE)) {
465 /*
466 * If CCK != 1M then set short preamble rate flag.
467 */
468 rates[i].flags |=
469 (iwl_rates[i].plcp == IWL_RATE_1M_PLCP) ?
470 0 : IEEE80211_RATE_SHORT_PREAMBLE;
471 }
472 }
473}
474
475
476/** 454/**
477 * iwlcore_init_geos - Initialize mac80211's geo/channel info based from eeprom 455 * iwlcore_init_geos - Initialize mac80211's geo/channel info based from eeprom
478 */ 456 */
@@ -1571,68 +1549,6 @@ int iwl_set_hw_params(struct iwl_priv *priv)
1571} 1549}
1572EXPORT_SYMBOL(iwl_set_hw_params); 1550EXPORT_SYMBOL(iwl_set_hw_params);
1573 1551
1574int iwl_init_drv(struct iwl_priv *priv)
1575{
1576 int ret;
1577
1578 priv->ibss_beacon = NULL;
1579
1580 spin_lock_init(&priv->lock);
1581 spin_lock_init(&priv->sta_lock);
1582 spin_lock_init(&priv->hcmd_lock);
1583
1584 INIT_LIST_HEAD(&priv->free_frames);
1585
1586 mutex_init(&priv->mutex);
1587
1588 /* Clear the driver's (not device's) station table */
1589 iwl_clear_stations_table(priv);
1590
1591 priv->ieee_channels = NULL;
1592 priv->ieee_rates = NULL;
1593 priv->band = IEEE80211_BAND_2GHZ;
1594
1595 priv->iw_mode = NL80211_IFTYPE_STATION;
1596
1597 /* Choose which receivers/antennas to use */
1598 if (priv->cfg->ops->hcmd->set_rxon_chain)
1599 priv->cfg->ops->hcmd->set_rxon_chain(priv);
1600
1601 iwl_init_scan_params(priv);
1602
1603 iwl_reset_qos(priv);
1604
1605 priv->qos_data.qos_active = 0;
1606 priv->qos_data.qos_cap.val = 0;
1607
1608 priv->rates_mask = IWL_RATES_MASK;
1609 /* Set the tx_power_user_lmt to the lowest power level
1610 * this value will get overwritten by channel max power avg
1611 * from eeprom */
1612 priv->tx_power_user_lmt = IWL_TX_POWER_TARGET_POWER_MIN;
1613
1614 ret = iwl_init_channel_map(priv);
1615 if (ret) {
1616 IWL_ERR(priv, "initializing regulatory failed: %d\n", ret);
1617 goto err;
1618 }
1619
1620 ret = iwlcore_init_geos(priv);
1621 if (ret) {
1622 IWL_ERR(priv, "initializing geos failed: %d\n", ret);
1623 goto err_free_channel_map;
1624 }
1625 iwlcore_init_hw_rates(priv, priv->ieee_rates);
1626
1627 return 0;
1628
1629err_free_channel_map:
1630 iwl_free_channel_map(priv);
1631err:
1632 return ret;
1633}
1634EXPORT_SYMBOL(iwl_init_drv);
1635
1636int iwl_set_tx_power(struct iwl_priv *priv, s8 tx_power, bool force) 1552int iwl_set_tx_power(struct iwl_priv *priv, s8 tx_power, bool force)
1637{ 1553{
1638 int ret = 0; 1554 int ret = 0;
@@ -1680,15 +1596,6 @@ int iwl_set_tx_power(struct iwl_priv *priv, s8 tx_power, bool force)
1680} 1596}
1681EXPORT_SYMBOL(iwl_set_tx_power); 1597EXPORT_SYMBOL(iwl_set_tx_power);
1682 1598
1683void iwl_uninit_drv(struct iwl_priv *priv)
1684{
1685 iwl_calib_free_results(priv);
1686 iwlcore_free_geos(priv);
1687 iwl_free_channel_map(priv);
1688 kfree(priv->scan);
1689}
1690EXPORT_SYMBOL(iwl_uninit_drv);
1691
1692#define ICT_COUNT (PAGE_SIZE/sizeof(u32)) 1599#define ICT_COUNT (PAGE_SIZE/sizeof(u32))
1693 1600
1694/* Free dram table */ 1601/* Free dram table */
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index b875dcfca2d6..ddf0998fb752 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -316,8 +316,6 @@ void iwl_configure_filter(struct ieee80211_hw *hw,
316 unsigned int *total_flags, u64 multicast); 316 unsigned int *total_flags, u64 multicast);
317int iwl_hw_nic_init(struct iwl_priv *priv); 317int iwl_hw_nic_init(struct iwl_priv *priv);
318int iwl_set_hw_params(struct iwl_priv *priv); 318int iwl_set_hw_params(struct iwl_priv *priv);
319int iwl_init_drv(struct iwl_priv *priv);
320void iwl_uninit_drv(struct iwl_priv *priv);
321bool iwl_is_monitor_mode(struct iwl_priv *priv); 319bool iwl_is_monitor_mode(struct iwl_priv *priv);
322void iwl_post_associate(struct iwl_priv *priv); 320void iwl_post_associate(struct iwl_priv *priv);
323void iwl_bss_info_changed(struct ieee80211_hw *hw, 321void iwl_bss_info_changed(struct ieee80211_hw *hw,
diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c
index 4fca65a2fe9c..1eb0d0bf1fe4 100644
--- a/drivers/net/wireless/iwlwifi/iwl-scan.c
+++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
@@ -401,6 +401,7 @@ void iwl_init_scan_params(struct iwl_priv *priv)
401 if (!priv->scan_tx_ant[IEEE80211_BAND_2GHZ]) 401 if (!priv->scan_tx_ant[IEEE80211_BAND_2GHZ])
402 priv->scan_tx_ant[IEEE80211_BAND_2GHZ] = ant_idx; 402 priv->scan_tx_ant[IEEE80211_BAND_2GHZ] = ant_idx;
403} 403}
404EXPORT_SYMBOL(iwl_init_scan_params);
404 405
405static int iwl_scan_initiate(struct iwl_priv *priv) 406static int iwl_scan_initiate(struct iwl_priv *priv)
406{ 407{