aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwl8k.c
diff options
context:
space:
mode:
authorLennert Buytenhek <buytenh@wantstofly.org>2010-01-12 07:48:17 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-01-12 14:21:13 -0500
commit1349ad2f06f86f41415cf7ffa9e068fd4f89be87 (patch)
tree271309496e4b73f3f2503a4af4704562f4d7acae /drivers/net/wireless/mwl8k.c
parent777ad375d5960e0d2a945a34032b182eb2952d45 (diff)
mwl8k: move responsibility for initialising wiphy bands to GET_HW_SPEC
So that we can make 2.4 GHz and 5 GHz band registration conditional on the capability bitmask returned by the firmware. Signed-off-by: Lennert Buytenhek <buytenh@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/mwl8k.c')
-rw-r--r--drivers/net/wireless/mwl8k.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c
index 37cbfbf21567..a17111f40266 100644
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
@@ -1558,6 +1558,28 @@ static int mwl8k_post_cmd(struct ieee80211_hw *hw, struct mwl8k_cmd_pkt *cmd)
1558} 1558}
1559 1559
1560/* 1560/*
1561 * Setup code shared between STA and AP firmware images.
1562 */
1563static void mwl8k_setup_2ghz_band(struct ieee80211_hw *hw)
1564{
1565 struct mwl8k_priv *priv = hw->priv;
1566
1567 BUILD_BUG_ON(sizeof(priv->channels_24) != sizeof(mwl8k_channels_24));
1568 memcpy(priv->channels_24, mwl8k_channels_24, sizeof(mwl8k_channels_24));
1569
1570 BUILD_BUG_ON(sizeof(priv->rates_24) != sizeof(mwl8k_rates_24));
1571 memcpy(priv->rates_24, mwl8k_rates_24, sizeof(mwl8k_rates_24));
1572
1573 priv->band_24.band = IEEE80211_BAND_2GHZ;
1574 priv->band_24.channels = priv->channels_24;
1575 priv->band_24.n_channels = ARRAY_SIZE(mwl8k_channels_24);
1576 priv->band_24.bitrates = priv->rates_24;
1577 priv->band_24.n_bitrates = ARRAY_SIZE(mwl8k_rates_24);
1578
1579 hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &priv->band_24;
1580}
1581
1582/*
1561 * CMD_GET_HW_SPEC (STA version). 1583 * CMD_GET_HW_SPEC (STA version).
1562 */ 1584 */
1563struct mwl8k_cmd_get_hw_spec_sta { 1585struct mwl8k_cmd_get_hw_spec_sta {
@@ -1671,6 +1693,7 @@ static int mwl8k_cmd_get_hw_spec_sta(struct ieee80211_hw *hw)
1671 priv->num_mcaddrs = le16_to_cpu(cmd->num_mcaddrs); 1693 priv->num_mcaddrs = le16_to_cpu(cmd->num_mcaddrs);
1672 priv->fw_rev = le32_to_cpu(cmd->fw_rev); 1694 priv->fw_rev = le32_to_cpu(cmd->fw_rev);
1673 priv->hw_rev = cmd->hw_rev; 1695 priv->hw_rev = cmd->hw_rev;
1696 mwl8k_setup_2ghz_band(hw);
1674 if (cmd->caps & cpu_to_le32(MWL8K_CAP_MIMO)) 1697 if (cmd->caps & cpu_to_le32(MWL8K_CAP_MIMO))
1675 mwl8k_set_ht_caps(hw, le32_to_cpu(cmd->caps)); 1698 mwl8k_set_ht_caps(hw, le32_to_cpu(cmd->caps));
1676 } 1699 }
@@ -1726,6 +1749,7 @@ static int mwl8k_cmd_get_hw_spec_ap(struct ieee80211_hw *hw)
1726 priv->num_mcaddrs = le16_to_cpu(cmd->num_mcaddrs); 1749 priv->num_mcaddrs = le16_to_cpu(cmd->num_mcaddrs);
1727 priv->fw_rev = le32_to_cpu(cmd->fw_rev); 1750 priv->fw_rev = le32_to_cpu(cmd->fw_rev);
1728 priv->hw_rev = cmd->hw_rev; 1751 priv->hw_rev = cmd->hw_rev;
1752 mwl8k_setup_2ghz_band(hw);
1729 1753
1730 off = le32_to_cpu(cmd->wcbbase0) & 0xffff; 1754 off = le32_to_cpu(cmd->wcbbase0) & 0xffff;
1731 iowrite32(cpu_to_le32(priv->txq[0].txd_dma), priv->sram + off); 1755 iowrite32(cpu_to_le32(priv->txq[0].txd_dma), priv->sram + off);
@@ -3853,17 +3877,6 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
3853 priv->pending_tx_pkts = 0; 3877 priv->pending_tx_pkts = 0;
3854 3878
3855 3879
3856 memcpy(priv->channels_24, mwl8k_channels_24, sizeof(mwl8k_channels_24));
3857 priv->band_24.band = IEEE80211_BAND_2GHZ;
3858 priv->band_24.channels = priv->channels_24;
3859 priv->band_24.n_channels = ARRAY_SIZE(mwl8k_channels_24);
3860 priv->band_24.bitrates = priv->rates_24;
3861 priv->band_24.n_bitrates = ARRAY_SIZE(mwl8k_rates_24);
3862 hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &priv->band_24;
3863
3864 BUILD_BUG_ON(sizeof(priv->rates_24) != sizeof(mwl8k_rates_24));
3865 memcpy(priv->rates_24, mwl8k_rates_24, sizeof(mwl8k_rates_24));
3866
3867 /* 3880 /*
3868 * Extra headroom is the size of the required DMA header 3881 * Extra headroom is the size of the required DMA header
3869 * minus the size of the smallest 802.11 frame (CTS frame). 3882 * minus the size of the smallest 802.11 frame (CTS frame).