diff options
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 90 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-calib.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 93 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-scan.c | 1 |
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 | ||
2975 | static 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 | |||
2996 | static 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 | |||
3051 | err_free_channel_map: | ||
3052 | iwl_free_channel_map(priv); | ||
3053 | err: | ||
3054 | return ret; | ||
3055 | } | ||
3056 | |||
3057 | static 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 | |||
2975 | static struct attribute *iwl_sysfs_entries[] = { | 3065 | static 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 | } |
135 | EXPORT_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 | ||
454 | static 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 | } |
1572 | EXPORT_SYMBOL(iwl_set_hw_params); | 1550 | EXPORT_SYMBOL(iwl_set_hw_params); |
1573 | 1551 | ||
1574 | int 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 | |||
1629 | err_free_channel_map: | ||
1630 | iwl_free_channel_map(priv); | ||
1631 | err: | ||
1632 | return ret; | ||
1633 | } | ||
1634 | EXPORT_SYMBOL(iwl_init_drv); | ||
1635 | |||
1636 | int iwl_set_tx_power(struct iwl_priv *priv, s8 tx_power, bool force) | 1552 | int 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 | } |
1681 | EXPORT_SYMBOL(iwl_set_tx_power); | 1597 | EXPORT_SYMBOL(iwl_set_tx_power); |
1682 | 1598 | ||
1683 | void 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 | } | ||
1690 | EXPORT_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); |
317 | int iwl_hw_nic_init(struct iwl_priv *priv); | 317 | int iwl_hw_nic_init(struct iwl_priv *priv); |
318 | int iwl_set_hw_params(struct iwl_priv *priv); | 318 | int iwl_set_hw_params(struct iwl_priv *priv); |
319 | int iwl_init_drv(struct iwl_priv *priv); | ||
320 | void iwl_uninit_drv(struct iwl_priv *priv); | ||
321 | bool iwl_is_monitor_mode(struct iwl_priv *priv); | 319 | bool iwl_is_monitor_mode(struct iwl_priv *priv); |
322 | void iwl_post_associate(struct iwl_priv *priv); | 320 | void iwl_post_associate(struct iwl_priv *priv); |
323 | void iwl_bss_info_changed(struct ieee80211_hw *hw, | 321 | void 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 | } |
404 | EXPORT_SYMBOL(iwl_init_scan_params); | ||
404 | 405 | ||
405 | static int iwl_scan_initiate(struct iwl_priv *priv) | 406 | static int iwl_scan_initiate(struct iwl_priv *priv) |
406 | { | 407 | { |