Commit 2a4ddaab authored by Abhijeet Kolekar's avatar Abhijeet Kolekar Committed by John W. Linville

iwl3945: add iwl3945_setup_mac

Patch does following,
1) mac80211's shared data is now initialized in iwl3945_setup_mac.
2) Set the rfkill to right state after initialization
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 c8f16138
...@@ -5008,19 +5008,53 @@ static int iwl3945_init_drv(struct iwl_priv *priv) ...@@ -5008,19 +5008,53 @@ static int iwl3945_init_drv(struct iwl_priv *priv)
} }
iwl3945_init_hw_rates(priv, priv->ieee_rates); iwl3945_init_hw_rates(priv, priv->ieee_rates);
return 0;
err_free_channel_map:
iwl_free_channel_map(priv);
err:
return ret;
}
static int iwl3945_setup_mac(struct iwl_priv *priv)
{
int ret;
struct ieee80211_hw *hw = priv->hw;
hw->rate_control_algorithm = "iwl-3945-rs";
hw->sta_data_size = sizeof(struct iwl3945_sta_priv);
/* Tell mac80211 our characteristics */
hw->flags = IEEE80211_HW_SIGNAL_DBM |
IEEE80211_HW_NOISE_DBM;
hw->wiphy->interface_modes =
BIT(NL80211_IFTYPE_STATION) |
BIT(NL80211_IFTYPE_ADHOC);
hw->wiphy->custom_regulatory = true;
/* Default value; 4 EDCA QOS priorities */
hw->queues = 4;
hw->conf.beacon_int = 100;
if (priv->bands[IEEE80211_BAND_2GHZ].n_channels) if (priv->bands[IEEE80211_BAND_2GHZ].n_channels)
priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
&priv->bands[IEEE80211_BAND_2GHZ]; &priv->bands[IEEE80211_BAND_2GHZ];
if (priv->bands[IEEE80211_BAND_5GHZ].n_channels) if (priv->bands[IEEE80211_BAND_5GHZ].n_channels)
priv->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = priv->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
&priv->bands[IEEE80211_BAND_5GHZ]; &priv->bands[IEEE80211_BAND_5GHZ];
return 0; ret = ieee80211_register_hw(priv->hw);
if (ret) {
IWL_ERR(priv, "Failed to register hw (error %d)\n", ret);
return ret;
}
priv->mac80211_registered = 1;
err_free_channel_map: return 0;
iwl_free_channel_map(priv);
err:
return ret;
} }
static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
...@@ -5074,23 +5108,6 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e ...@@ -5074,23 +5108,6 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
priv->debug_level = iwl3945_mod_params.debug; priv->debug_level = iwl3945_mod_params.debug;
atomic_set(&priv->restrict_refcnt, 0); atomic_set(&priv->restrict_refcnt, 0);
#endif #endif
hw->rate_control_algorithm = "iwl-3945-rs";
hw->sta_data_size = sizeof(struct iwl3945_sta_priv);
/* Tell mac80211 our characteristics */
hw->flags = IEEE80211_HW_SIGNAL_DBM |
IEEE80211_HW_NOISE_DBM;
hw->wiphy->interface_modes =
BIT(NL80211_IFTYPE_STATION) |
BIT(NL80211_IFTYPE_ADHOC);
hw->wiphy->custom_regulatory = true;
hw->wiphy->max_scan_ssids = 1;
/* 4 EDCA QOS priorities */
hw->queues = 4;
/*************************** /***************************
* 2. Initializing PCI bus * 2. Initializing PCI bus
...@@ -5221,19 +5238,18 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e ...@@ -5221,19 +5238,18 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
* 9. Setup and Register mac80211 * 9. Setup and Register mac80211
* *******************************/ * *******************************/
err = ieee80211_register_hw(priv->hw); iwl_enable_interrupts(priv);
if (err) {
IWL_ERR(priv, "Failed to register network device: %d\n", err);
goto out_remove_sysfs;
}
priv->hw->conf.beacon_int = 100; err = iwl3945_setup_mac(priv);
priv->mac80211_registered = 1; if (err)
goto out_remove_sysfs;
err = iwl_rfkill_init(priv); err = iwl_rfkill_init(priv);
if (err) if (err)
IWL_ERR(priv, "Unable to initialize RFKILL system. " IWL_ERR(priv, "Unable to initialize RFKILL system. "
"Ignoring error: %d\n", err); "Ignoring error: %d\n", err);
else
iwl_rfkill_set_hw_state(priv);
/* Start monitoring the killswitch */ /* Start monitoring the killswitch */
queue_delayed_work(priv->workqueue, &priv->rfkill_poll, queue_delayed_work(priv->workqueue, &priv->rfkill_poll,
......
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