diff options
-rw-r--r-- | drivers/net/wireless/mwl8k.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c index 6e8c126aa5e0..382ef4305a3e 100644 --- a/drivers/net/wireless/mwl8k.c +++ b/drivers/net/wireless/mwl8k.c | |||
@@ -1666,11 +1666,14 @@ struct mwl8k_cmd_get_hw_spec_sta { | |||
1666 | #define MWL8K_CAP_DELAY_BA 0x00003000 | 1666 | #define MWL8K_CAP_DELAY_BA 0x00003000 |
1667 | #define MWL8K_CAP_MIMO 0x00000200 | 1667 | #define MWL8K_CAP_MIMO 0x00000200 |
1668 | #define MWL8K_CAP_40MHZ 0x00000100 | 1668 | #define MWL8K_CAP_40MHZ 0x00000100 |
1669 | #define MWL8K_CAP_BAND_MASK 0x00000007 | ||
1670 | #define MWL8K_CAP_5GHZ 0x00000004 | ||
1671 | #define MWL8K_CAP_2GHZ4 0x00000001 | ||
1669 | 1672 | ||
1670 | static void mwl8k_set_ht_caps(struct ieee80211_hw *hw, u32 cap) | 1673 | static void |
1674 | mwl8k_set_ht_caps(struct ieee80211_hw *hw, | ||
1675 | struct ieee80211_supported_band *band, u32 cap) | ||
1671 | { | 1676 | { |
1672 | struct mwl8k_priv *priv = hw->priv; | ||
1673 | struct ieee80211_supported_band *band = &priv->band_24; | ||
1674 | int rx_streams; | 1677 | int rx_streams; |
1675 | int tx_streams; | 1678 | int tx_streams; |
1676 | 1679 | ||
@@ -1716,6 +1719,24 @@ static void mwl8k_set_ht_caps(struct ieee80211_hw *hw, u32 cap) | |||
1716 | } | 1719 | } |
1717 | } | 1720 | } |
1718 | 1721 | ||
1722 | static void | ||
1723 | mwl8k_set_caps(struct ieee80211_hw *hw, u32 caps) | ||
1724 | { | ||
1725 | struct mwl8k_priv *priv = hw->priv; | ||
1726 | |||
1727 | if ((caps & MWL8K_CAP_2GHZ4) || !(caps & MWL8K_CAP_BAND_MASK)) { | ||
1728 | mwl8k_setup_2ghz_band(hw); | ||
1729 | if (caps & MWL8K_CAP_MIMO) | ||
1730 | mwl8k_set_ht_caps(hw, &priv->band_24, caps); | ||
1731 | } | ||
1732 | |||
1733 | if (caps & MWL8K_CAP_5GHZ) { | ||
1734 | mwl8k_setup_5ghz_band(hw); | ||
1735 | if (caps & MWL8K_CAP_MIMO) | ||
1736 | mwl8k_set_ht_caps(hw, &priv->band_50, caps); | ||
1737 | } | ||
1738 | } | ||
1739 | |||
1719 | static int mwl8k_cmd_get_hw_spec_sta(struct ieee80211_hw *hw) | 1740 | static int mwl8k_cmd_get_hw_spec_sta(struct ieee80211_hw *hw) |
1720 | { | 1741 | { |
1721 | struct mwl8k_priv *priv = hw->priv; | 1742 | struct mwl8k_priv *priv = hw->priv; |
@@ -1746,9 +1767,7 @@ static int mwl8k_cmd_get_hw_spec_sta(struct ieee80211_hw *hw) | |||
1746 | priv->num_mcaddrs = le16_to_cpu(cmd->num_mcaddrs); | 1767 | priv->num_mcaddrs = le16_to_cpu(cmd->num_mcaddrs); |
1747 | priv->fw_rev = le32_to_cpu(cmd->fw_rev); | 1768 | priv->fw_rev = le32_to_cpu(cmd->fw_rev); |
1748 | priv->hw_rev = cmd->hw_rev; | 1769 | priv->hw_rev = cmd->hw_rev; |
1749 | mwl8k_setup_2ghz_band(hw); | 1770 | mwl8k_set_caps(hw, le32_to_cpu(cmd->caps)); |
1750 | if (cmd->caps & cpu_to_le32(MWL8K_CAP_MIMO)) | ||
1751 | mwl8k_set_ht_caps(hw, le32_to_cpu(cmd->caps)); | ||
1752 | } | 1771 | } |
1753 | 1772 | ||
1754 | kfree(cmd); | 1773 | kfree(cmd); |