Commit 727882d6 authored by Abhijeet Kolekar's avatar Abhijeet Kolekar Committed by John W. Linville

iwl3945: use iwl_set_mode in 3945

3945 can now use iwl_set_mode from iwlcore library.
Signed-off-by: default avatarAbhijeet Kolekar <abhijeet.kolekar@intel.com>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 45823531
...@@ -588,33 +588,6 @@ static void iwl_setup_rxon_timing(struct iwl_priv *priv) ...@@ -588,33 +588,6 @@ static void iwl_setup_rxon_timing(struct iwl_priv *priv)
le16_to_cpu(priv->rxon_timing.atim_window)); le16_to_cpu(priv->rxon_timing.atim_window));
} }
static int iwl_set_mode(struct iwl_priv *priv, int mode)
{
iwl_connection_init_rx_config(priv, mode);
if (priv->cfg->ops->hcmd->set_rxon_chain)
priv->cfg->ops->hcmd->set_rxon_chain(priv);
memcpy(priv->staging_rxon.node_addr, priv->mac_addr, ETH_ALEN);
priv->cfg->ops->smgmt->clear_station_table(priv);
/* dont commit rxon if rf-kill is on*/
if (!iwl_is_ready_rf(priv))
return -EAGAIN;
cancel_delayed_work(&priv->scan_check);
if (iwl_scan_cancel_timeout(priv, 100)) {
IWL_WARN(priv, "Aborted scan still in progress after 100ms\n");
IWL_DEBUG_MAC80211(priv, "leaving - scan abort failed.\n");
return -EAGAIN;
}
iwlcore_commit_rxon(priv);
return 0;
}
/****************************************************************************** /******************************************************************************
* *
* Generic RX handler implementations * Generic RX handler implementations
......
...@@ -2339,6 +2339,48 @@ int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb) ...@@ -2339,6 +2339,48 @@ int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
} }
EXPORT_SYMBOL(iwl_mac_beacon_update); EXPORT_SYMBOL(iwl_mac_beacon_update);
int iwl_set_mode(struct iwl_priv *priv, int mode)
{
if (mode == NL80211_IFTYPE_ADHOC) {
const struct iwl_channel_info *ch_info;
ch_info = iwl_get_channel_info(priv,
priv->band,
le16_to_cpu(priv->staging_rxon.channel));
if (!ch_info || !is_channel_ibss(ch_info)) {
IWL_ERR(priv, "channel %d not IBSS channel\n",
le16_to_cpu(priv->staging_rxon.channel));
return -EINVAL;
}
}
iwl_connection_init_rx_config(priv, mode);
if (priv->cfg->ops->hcmd->set_rxon_chain)
priv->cfg->ops->hcmd->set_rxon_chain(priv);
memcpy(priv->staging_rxon.node_addr, priv->mac_addr, ETH_ALEN);
priv->cfg->ops->smgmt->clear_station_table(priv);
/* dont commit rxon if rf-kill is on*/
if (!iwl_is_ready_rf(priv))
return -EAGAIN;
cancel_delayed_work(&priv->scan_check);
if (iwl_scan_cancel_timeout(priv, 100)) {
IWL_WARN(priv, "Aborted scan still in progress after 100ms\n");
IWL_DEBUG_MAC80211(priv, "leaving - scan abort failed.\n");
return -EAGAIN;
}
iwlcore_commit_rxon(priv);
return 0;
}
EXPORT_SYMBOL(iwl_set_mode);
#ifdef CONFIG_PM #ifdef CONFIG_PM
int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state) int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state)
......
...@@ -273,6 +273,7 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw, ...@@ -273,6 +273,7 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw,
u32 changes); u32 changes);
int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb); int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb);
int iwl_commit_rxon(struct iwl_priv *priv); int iwl_commit_rxon(struct iwl_priv *priv);
int iwl_set_mode(struct iwl_priv *priv, int mode);
/***************************************************** /*****************************************************
* RX handlers. * RX handlers.
......
...@@ -570,42 +570,6 @@ static void iwl3945_setup_rxon_timing(struct iwl_priv *priv) ...@@ -570,42 +570,6 @@ static void iwl3945_setup_rxon_timing(struct iwl_priv *priv)
le16_to_cpu(priv->rxon_timing.atim_window)); le16_to_cpu(priv->rxon_timing.atim_window));
} }
static int iwl3945_set_mode(struct iwl_priv *priv, int mode)
{
if (mode == NL80211_IFTYPE_ADHOC) {
const struct iwl_channel_info *ch_info;
ch_info = iwl_get_channel_info(priv,
priv->band,
le16_to_cpu(priv->staging_rxon.channel));
if (!ch_info || !is_channel_ibss(ch_info)) {
IWL_ERR(priv, "channel %d not IBSS channel\n",
le16_to_cpu(priv->staging_rxon.channel));
return -EINVAL;
}
}
iwl_connection_init_rx_config(priv, mode);
priv->cfg->ops->smgmt->clear_station_table(priv);
/* don't commit rxon if rf-kill is on*/
if (!iwl_is_ready_rf(priv))
return -EAGAIN;
cancel_delayed_work(&priv->scan_check);
if (iwl_scan_cancel_timeout(priv, 100)) {
IWL_WARN(priv, "Aborted scan still in progress after 100ms\n");
IWL_DEBUG_MAC80211(priv, "leaving - scan abort failed.\n");
return -EAGAIN;
}
iwlcore_commit_rxon(priv);
return 0;
}
static void iwl3945_build_tx_cmd_hwcrypto(struct iwl_priv *priv, static void iwl3945_build_tx_cmd_hwcrypto(struct iwl_priv *priv,
struct ieee80211_tx_info *info, struct ieee80211_tx_info *info,
struct iwl_cmd *cmd, struct iwl_cmd *cmd,
...@@ -2701,7 +2665,7 @@ static void iwl3945_alive_start(struct iwl_priv *priv) ...@@ -2701,7 +2665,7 @@ static void iwl3945_alive_start(struct iwl_priv *priv)
} }
if (test_and_clear_bit(STATUS_MODE_PENDING, &priv->status)) if (test_and_clear_bit(STATUS_MODE_PENDING, &priv->status))
iwl3945_set_mode(priv, priv->iw_mode); iwl_set_mode(priv, priv->iw_mode);
return; return;
...@@ -3442,7 +3406,7 @@ static int iwl3945_mac_add_interface(struct ieee80211_hw *hw, ...@@ -3442,7 +3406,7 @@ static int iwl3945_mac_add_interface(struct ieee80211_hw *hw,
memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN); memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN);
} }
if (iwl3945_set_mode(priv, conf->type) == -EAGAIN) if (iwl_set_mode(priv, conf->type) == -EAGAIN)
set_bit(STATUS_MODE_PENDING, &priv->status); set_bit(STATUS_MODE_PENDING, &priv->status);
mutex_unlock(&priv->mutex); mutex_unlock(&priv->mutex);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment