aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHante Meuleman <meuleman@broadcom.com>2013-02-06 12:40:44 -0500
committerJohn W. Linville <linville@tuxdriver.com>2013-02-08 14:51:34 -0500
commit1701261d070e2077867fd08efe7b5977e3a130f9 (patch)
tree9206f7b65feb90b036861e85f301f542426e6961
parent7ee296027871c15aee7e1e48c372f854a837cd36 (diff)
brcmfmac: Use single function for channel to chanspec.
Simplify code by using single function for converting channel to chanspec. No need to set 40MHz flags, as they are not needed for correct working in FW. Reviewed-by: Arend Van Spriel <arend@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Reviewed-by: Piotr Haber <phaber@broadcom.com> Signed-off-by: Hante Meuleman <meuleman@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c63
1 files changed, 21 insertions, 42 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
index 544257a52779..153924ecc890 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
@@ -393,16 +393,9 @@ static u16 channel_to_chanspec(struct ieee80211_channel *ch)
393 else 393 else
394 chanspec |= WL_CHANSPEC_BAND_5G; 394 chanspec |= WL_CHANSPEC_BAND_5G;
395 395
396 if (ch->flags & IEEE80211_CHAN_NO_HT40) { 396 chanspec |= WL_CHANSPEC_BW_20;
397 chanspec |= WL_CHANSPEC_BW_20; 397 chanspec |= WL_CHANSPEC_CTL_SB_NONE;
398 chanspec |= WL_CHANSPEC_CTL_SB_NONE; 398
399 } else {
400 chanspec |= WL_CHANSPEC_BW_40;
401 if (ch->flags & IEEE80211_CHAN_NO_HT40PLUS)
402 chanspec |= WL_CHANSPEC_CTL_SB_LOWER;
403 else
404 chanspec |= WL_CHANSPEC_CTL_SB_UPPER;
405 }
406 return chanspec; 399 return chanspec;
407} 400}
408 401
@@ -933,31 +926,6 @@ static void brcmf_init_prof(struct brcmf_cfg80211_profile *prof)
933 memset(prof, 0, sizeof(*prof)); 926 memset(prof, 0, sizeof(*prof));
934} 927}
935 928
936static void brcmf_ch_to_chanspec(int ch, struct brcmf_join_params *join_params,
937 size_t *join_params_size)
938{
939 u16 chanspec = 0;
940
941 if (ch != 0) {
942 if (ch <= CH_MAX_2G_CHANNEL)
943 chanspec |= WL_CHANSPEC_BAND_2G;
944 else
945 chanspec |= WL_CHANSPEC_BAND_5G;
946
947 chanspec |= WL_CHANSPEC_BW_20;
948 chanspec |= WL_CHANSPEC_CTL_SB_NONE;
949
950 *join_params_size += BRCMF_ASSOC_PARAMS_FIXED_SIZE +
951 sizeof(u16);
952
953 chanspec |= (ch & WL_CHANSPEC_CHAN_MASK);
954 join_params->params_le.chanspec_list[0] = cpu_to_le16(chanspec);
955 join_params->params_le.chanspec_num = cpu_to_le32(1);
956
957 brcmf_dbg(CONN, "channel %d, chanspec %#X\n", ch, chanspec);
958 }
959}
960
961static void brcmf_link_down(struct brcmf_cfg80211_vif *vif) 929static void brcmf_link_down(struct brcmf_cfg80211_vif *vif)
962{ 930{
963 s32 err = 0; 931 s32 err = 0;
@@ -988,6 +956,7 @@ brcmf_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
988 s32 err = 0; 956 s32 err = 0;
989 s32 wsec = 0; 957 s32 wsec = 0;
990 s32 bcnprd; 958 s32 bcnprd;
959 u16 chanspec;
991 960
992 brcmf_dbg(TRACE, "Enter\n"); 961 brcmf_dbg(TRACE, "Enter\n");
993 if (!check_vif_up(ifp->vif)) 962 if (!check_vif_up(ifp->vif))
@@ -1091,8 +1060,11 @@ brcmf_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
1091 params->chandef.chan->center_freq); 1060 params->chandef.chan->center_freq);
1092 if (params->channel_fixed) { 1061 if (params->channel_fixed) {
1093 /* adding chanspec */ 1062 /* adding chanspec */
1094 brcmf_ch_to_chanspec(cfg->channel, 1063 chanspec = channel_to_chanspec(params->chandef.chan);
1095 &join_params, &join_params_size); 1064 join_params.params_le.chanspec_list[0] =
1065 cpu_to_le16(chanspec);
1066 join_params.params_le.chanspec_num = cpu_to_le32(1);
1067 join_params_size += sizeof(join_params.params_le);
1096 } 1068 }
1097 1069
1098 /* set channel for starter */ 1070 /* set channel for starter */
@@ -1404,6 +1376,7 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
1404 struct brcmf_join_params join_params; 1376 struct brcmf_join_params join_params;
1405 size_t join_params_size; 1377 size_t join_params_size;
1406 struct brcmf_ssid ssid; 1378 struct brcmf_ssid ssid;
1379 u16 chanspec;
1407 1380
1408 s32 err = 0; 1381 s32 err = 0;
1409 1382
@@ -1421,10 +1394,13 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
1421 if (chan) { 1394 if (chan) {
1422 cfg->channel = 1395 cfg->channel =
1423 ieee80211_frequency_to_channel(chan->center_freq); 1396 ieee80211_frequency_to_channel(chan->center_freq);
1424 brcmf_dbg(CONN, "channel (%d), center_req (%d)\n", 1397 chanspec = channel_to_chanspec(chan);
1425 cfg->channel, chan->center_freq); 1398 brcmf_dbg(CONN, "channel=%d, center_req=%d, chanspec=0x%04x\n",
1426 } else 1399 cfg->channel, chan->center_freq, chanspec);
1400 } else {
1427 cfg->channel = 0; 1401 cfg->channel = 0;
1402 chanspec = 0;
1403 }
1428 1404
1429 brcmf_dbg(INFO, "ie (%p), ie_len (%zd)\n", sme->ie, sme->ie_len); 1405 brcmf_dbg(INFO, "ie (%p), ie_len (%zd)\n", sme->ie, sme->ie_len);
1430 1406
@@ -1473,8 +1449,11 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
1473 brcmf_dbg(CONN, "ssid \"%s\", len (%d)\n", 1449 brcmf_dbg(CONN, "ssid \"%s\", len (%d)\n",
1474 ssid.SSID, ssid.SSID_len); 1450 ssid.SSID, ssid.SSID_len);
1475 1451
1476 brcmf_ch_to_chanspec(cfg->channel, 1452 if (cfg->channel) {
1477 &join_params, &join_params_size); 1453 join_params.params_le.chanspec_list[0] = cpu_to_le16(chanspec);
1454 join_params.params_le.chanspec_num = cpu_to_le32(1);
1455 join_params_size += sizeof(join_params.params_le);
1456 }
1478 err = brcmf_fil_cmd_data_set(ifp, BRCMF_C_SET_SSID, 1457 err = brcmf_fil_cmd_data_set(ifp, BRCMF_C_SET_SSID,
1479 &join_params, join_params_size); 1458 &join_params, join_params_size);
1480 if (err) 1459 if (err)