Commit 433c3990 authored by Amitkumar Karwar's avatar Amitkumar Karwar Committed by John W. Linville

mwifiex: improvement in cfg80211 set_bitrate_mask handler

This patch configures data rates to firmware using bitrate mask
provided by cfg80211.

Earlier we used to only update band information in this handler
which will be used later for ibss network. Due to recent
modifications in ibss join code we don't need to do that.
Signed-off-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarAvinash Patil <patila@marvell.com>
Signed-off-by: default avatarKiran Divekar <dkiran@marvell.com>
Signed-off-by: default avatarBing Zhao <bzhao@marvell.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 05910f4a
...@@ -753,8 +753,8 @@ static const u32 mwifiex_cipher_suites[] = { ...@@ -753,8 +753,8 @@ static const u32 mwifiex_cipher_suites[] = {
/* /*
* CFG802.11 operation handler for setting bit rates. * CFG802.11 operation handler for setting bit rates.
* *
* Function selects legacy bang B/G/BG from corresponding bitrates selection. * Function configures data rates to firmware using bitrate mask
* Currently only 2.4GHz band is supported. * provided by cfg80211.
*/ */
static int mwifiex_cfg80211_set_bitrate_mask(struct wiphy *wiphy, static int mwifiex_cfg80211_set_bitrate_mask(struct wiphy *wiphy,
struct net_device *dev, struct net_device *dev,
...@@ -762,43 +762,36 @@ static int mwifiex_cfg80211_set_bitrate_mask(struct wiphy *wiphy, ...@@ -762,43 +762,36 @@ static int mwifiex_cfg80211_set_bitrate_mask(struct wiphy *wiphy,
const struct cfg80211_bitrate_mask *mask) const struct cfg80211_bitrate_mask *mask)
{ {
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev); struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
int index = 0, mode = 0, i; u16 bitmap_rates[MAX_BITMAP_RATES_SIZE];
struct mwifiex_adapter *adapter = priv->adapter; enum ieee80211_band band;
/* Currently only 2.4GHz is supported */ if (!priv->media_connected) {
for (i = 0; i < mwifiex_band_2ghz.n_bitrates; i++) { dev_err(priv->adapter->dev,
/* "Can not set Tx data rate in disconnected state\n");
* Rates below 6 Mbps in the table are CCK rates; 802.11b return -EINVAL;
* and from 6 they are OFDM; 802.11G
*/
if (mwifiex_rates[i].bitrate == 60) {
index = 1 << i;
break;
}
} }
if (mask->control[IEEE80211_BAND_2GHZ].legacy < index) { band = mwifiex_band_to_radio_type(priv->curr_bss_params.band);
mode = BAND_B;
} else {
mode = BAND_G;
if (mask->control[IEEE80211_BAND_2GHZ].legacy % index)
mode |= BAND_B;
}
if (!((mode | adapter->fw_bands) & ~adapter->fw_bands)) { memset(bitmap_rates, 0, sizeof(bitmap_rates));
adapter->config_bands = mode;
if (priv->bss_mode == NL80211_IFTYPE_ADHOC) {
adapter->adhoc_start_band = mode;
adapter->adhoc_11n_enabled = false;
}
}
adapter->sec_chan_offset = IEEE80211_HT_PARAM_CHA_SEC_NONE;
adapter->channel_type = NL80211_CHAN_NO_HT;
wiphy_debug(wiphy, "info: device configured in 802.11%s%s mode\n", /* Fill HR/DSSS rates. */
(mode & BAND_B) ? "b" : "", (mode & BAND_G) ? "g" : ""); if (band == IEEE80211_BAND_2GHZ)
bitmap_rates[0] = mask->control[band].legacy & 0x000f;
return 0; /* Fill OFDM rates */
if (band == IEEE80211_BAND_2GHZ)
bitmap_rates[1] = (mask->control[band].legacy & 0x0ff0) >> 4;
else
bitmap_rates[1] = mask->control[band].legacy;
/* Fill MCS rates */
bitmap_rates[2] = mask->control[band].mcs[0];
if (priv->adapter->hw_dev_mcs_support == HT_STREAM_2X2)
bitmap_rates[2] |= mask->control[band].mcs[1] << 8;
return mwifiex_send_cmd_sync(priv, HostCmd_CMD_TX_RATE_CFG,
HostCmd_ACT_GEN_SET, 0, bitmap_rates);
} }
/* /*
......
...@@ -678,7 +678,6 @@ struct mwifiex_adapter { ...@@ -678,7 +678,6 @@ struct mwifiex_adapter {
u8 hw_dev_mcs_support; u8 hw_dev_mcs_support;
u8 adhoc_11n_enabled; u8 adhoc_11n_enabled;
u8 sec_chan_offset; u8 sec_chan_offset;
enum nl80211_channel_type channel_type;
struct mwifiex_dbg dbg; struct mwifiex_dbg dbg;
u8 arp_filter[ARP_FILTER_MAX_BUF_SIZE]; u8 arp_filter[ARP_FILTER_MAX_BUF_SIZE];
u32 arp_filter_size; u32 arp_filter_size;
......
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