|
@@ -361,76 +361,6 @@ static void iwl3945_unset_hw_params(struct iwl_priv *priv)
|
|
|
priv->shared_phys);
|
|
|
}
|
|
|
|
|
|
-#define MAX_UCODE_BEACON_INTERVAL 1024
|
|
|
-#define INTEL_CONN_LISTEN_INTERVAL cpu_to_le16(0xA)
|
|
|
-
|
|
|
-static __le16 iwl3945_adjust_beacon_interval(u16 beacon_val)
|
|
|
-{
|
|
|
- u16 new_val = 0;
|
|
|
- u16 beacon_factor = 0;
|
|
|
-
|
|
|
- beacon_factor =
|
|
|
- (beacon_val + MAX_UCODE_BEACON_INTERVAL)
|
|
|
- / MAX_UCODE_BEACON_INTERVAL;
|
|
|
- new_val = beacon_val / beacon_factor;
|
|
|
-
|
|
|
- return cpu_to_le16(new_val);
|
|
|
-}
|
|
|
-
|
|
|
-static void iwl3945_setup_rxon_timing(struct iwl_priv *priv)
|
|
|
-{
|
|
|
- u64 interval_tm_unit;
|
|
|
- u64 tsf, result;
|
|
|
- unsigned long flags;
|
|
|
- struct ieee80211_conf *conf = NULL;
|
|
|
- u16 beacon_int = 0;
|
|
|
-
|
|
|
- conf = ieee80211_get_hw_conf(priv->hw);
|
|
|
-
|
|
|
- spin_lock_irqsave(&priv->lock, flags);
|
|
|
- priv->rxon_timing.timestamp = cpu_to_le64(priv->timestamp);
|
|
|
- priv->rxon_timing.listen_interval = INTEL_CONN_LISTEN_INTERVAL;
|
|
|
-
|
|
|
- tsf = priv->timestamp;
|
|
|
-
|
|
|
- beacon_int = priv->beacon_int;
|
|
|
- spin_unlock_irqrestore(&priv->lock, flags);
|
|
|
-
|
|
|
- if (priv->iw_mode == NL80211_IFTYPE_STATION) {
|
|
|
- if (beacon_int == 0) {
|
|
|
- priv->rxon_timing.beacon_interval = cpu_to_le16(100);
|
|
|
- priv->rxon_timing.beacon_init_val = cpu_to_le32(102400);
|
|
|
- } else {
|
|
|
- priv->rxon_timing.beacon_interval =
|
|
|
- cpu_to_le16(beacon_int);
|
|
|
- priv->rxon_timing.beacon_interval =
|
|
|
- iwl3945_adjust_beacon_interval(
|
|
|
- le16_to_cpu(priv->rxon_timing.beacon_interval));
|
|
|
- }
|
|
|
-
|
|
|
- priv->rxon_timing.atim_window = 0;
|
|
|
- } else {
|
|
|
- priv->rxon_timing.beacon_interval =
|
|
|
- iwl3945_adjust_beacon_interval(
|
|
|
- priv->vif->bss_conf.beacon_int);
|
|
|
- /* TODO: we need to get atim_window from upper stack
|
|
|
- * for now we set to 0 */
|
|
|
- priv->rxon_timing.atim_window = 0;
|
|
|
- }
|
|
|
-
|
|
|
- interval_tm_unit =
|
|
|
- (le16_to_cpu(priv->rxon_timing.beacon_interval) * 1024);
|
|
|
- result = do_div(tsf, interval_tm_unit);
|
|
|
- priv->rxon_timing.beacon_init_val =
|
|
|
- cpu_to_le32((u32) ((u64) interval_tm_unit - result));
|
|
|
-
|
|
|
- IWL_DEBUG_ASSOC(priv,
|
|
|
- "beacon interval %d beacon timer %d beacon tim %d\n",
|
|
|
- le16_to_cpu(priv->rxon_timing.beacon_interval),
|
|
|
- le32_to_cpu(priv->rxon_timing.beacon_init_val),
|
|
|
- le16_to_cpu(priv->rxon_timing.atim_window));
|
|
|
-}
|
|
|
-
|
|
|
static void iwl3945_build_tx_cmd_hwcrypto(struct iwl_priv *priv,
|
|
|
struct ieee80211_tx_info *info,
|
|
|
struct iwl_cmd *cmd,
|
|
@@ -3066,7 +2996,7 @@ void iwl3945_post_associate(struct iwl_priv *priv)
|
|
|
iwlcore_commit_rxon(priv);
|
|
|
|
|
|
memset(&priv->rxon_timing, 0, sizeof(struct iwl_rxon_time_cmd));
|
|
|
- iwl3945_setup_rxon_timing(priv);
|
|
|
+ iwl_setup_rxon_timing(priv);
|
|
|
rc = iwl_send_cmd_pdu(priv, REPLY_RXON_TIMING,
|
|
|
sizeof(priv->rxon_timing), &priv->rxon_timing);
|
|
|
if (rc)
|
|
@@ -3261,7 +3191,7 @@ void iwl3945_config_ap(struct iwl_priv *priv)
|
|
|
|
|
|
/* RXON Timing */
|
|
|
memset(&priv->rxon_timing, 0, sizeof(struct iwl_rxon_time_cmd));
|
|
|
- iwl3945_setup_rxon_timing(priv);
|
|
|
+ iwl_setup_rxon_timing(priv);
|
|
|
rc = iwl_send_cmd_pdu(priv, REPLY_RXON_TIMING,
|
|
|
sizeof(priv->rxon_timing),
|
|
|
&priv->rxon_timing);
|