aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArend van Spriel <arend@broadcom.com>2014-03-15 12:18:21 -0400
committerJohn W. Linville <linville@tuxdriver.com>2014-03-17 13:44:14 -0400
commit967fe2c82dd8f8d16e873ebdf2328ec4d3258930 (patch)
tree688f1bac2080d4c2c011be1e6fb8ecb65ba1b08d
parent8a385ba542dd6d20e3067d486f5f75ff71baa4db (diff)
brcmfmac: remove mode field from brcmf_cfg80211_vif structure
The nl80211 iftype was converted to a mode value and stored in brcmf_cfg80211_vif structure. The value was used only within brcmfmac driver to decide execution of conditional code. Better use wireless_dev::iftype for that as the wdev is contained in the brcmf_cfg80211_vif structure. Reviewed-by: Daniel (Deognyoun) Kim <dekim@broadcom.com> Reviewed-by: Hante Meuleman <meuleman@broadcom.com> Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieterpg@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/p2p.c6
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c60
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h17
3 files changed, 21 insertions, 62 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
index fc4f98b275d7..f3445ac627e4 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
@@ -797,7 +797,8 @@ static s32 brcmf_p2p_run_escan(struct brcmf_cfg80211_info *cfg,
797 /* SOCIAL CHANNELS 1, 6, 11 */ 797 /* SOCIAL CHANNELS 1, 6, 11 */
798 search_state = WL_P2P_DISC_ST_SEARCH; 798 search_state = WL_P2P_DISC_ST_SEARCH;
799 brcmf_dbg(INFO, "P2P SEARCH PHASE START\n"); 799 brcmf_dbg(INFO, "P2P SEARCH PHASE START\n");
800 } else if (dev != NULL && vif->mode == WL_MODE_AP) { 800 } else if (dev != NULL &&
801 vif->wdev.iftype == NL80211_IFTYPE_P2P_GO) {
801 /* If you are already a GO, then do SEARCH only */ 802 /* If you are already a GO, then do SEARCH only */
802 brcmf_dbg(INFO, "Already a GO. Do SEARCH Only\n"); 803 brcmf_dbg(INFO, "Already a GO. Do SEARCH Only\n");
803 search_state = WL_P2P_DISC_ST_SEARCH; 804 search_state = WL_P2P_DISC_ST_SEARCH;
@@ -2256,7 +2257,6 @@ struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name,
2256 struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg)); 2257 struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
2257 struct brcmf_cfg80211_vif *vif; 2258 struct brcmf_cfg80211_vif *vif;
2258 enum brcmf_fil_p2p_if_types iftype; 2259 enum brcmf_fil_p2p_if_types iftype;
2259 enum wl_mode mode;
2260 int err; 2260 int err;
2261 2261
2262 if (brcmf_cfg80211_vif_event_armed(cfg)) 2262 if (brcmf_cfg80211_vif_event_armed(cfg))
@@ -2267,11 +2267,9 @@ struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name,
2267 switch (type) { 2267 switch (type) {
2268 case NL80211_IFTYPE_P2P_CLIENT: 2268 case NL80211_IFTYPE_P2P_CLIENT:
2269 iftype = BRCMF_FIL_P2P_IF_CLIENT; 2269 iftype = BRCMF_FIL_P2P_IF_CLIENT;
2270 mode = WL_MODE_BSS;
2271 break; 2270 break;
2272 case NL80211_IFTYPE_P2P_GO: 2271 case NL80211_IFTYPE_P2P_GO:
2273 iftype = BRCMF_FIL_P2P_IF_GO; 2272 iftype = BRCMF_FIL_P2P_IF_GO;
2274 mode = WL_MODE_AP;
2275 break; 2273 break;
2276 case NL80211_IFTYPE_P2P_DEVICE: 2274 case NL80211_IFTYPE_P2P_DEVICE:
2277 return brcmf_p2p_create_p2pdev(&cfg->p2p, wiphy, 2275 return brcmf_p2p_create_p2pdev(&cfg->p2p, wiphy,
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
index adbd5b733147..9f75afb3baa0 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
@@ -494,6 +494,19 @@ brcmf_configure_arp_offload(struct brcmf_if *ifp, bool enable)
494 return err; 494 return err;
495} 495}
496 496
497static bool brcmf_is_apmode(struct brcmf_cfg80211_vif *vif)
498{
499 enum nl80211_iftype iftype;
500
501 iftype = vif->wdev.iftype;
502 return iftype == NL80211_IFTYPE_AP || iftype == NL80211_IFTYPE_P2P_GO;
503}
504
505static bool brcmf_is_ibssmode(struct brcmf_cfg80211_vif *vif)
506{
507 return vif->wdev.iftype == NL80211_IFTYPE_ADHOC;
508}
509
497static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy, 510static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy,
498 const char *name, 511 const char *name,
499 enum nl80211_iftype type, 512 enum nl80211_iftype type,
@@ -654,7 +667,6 @@ brcmf_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
654 type); 667 type);
655 return -EOPNOTSUPP; 668 return -EOPNOTSUPP;
656 case NL80211_IFTYPE_ADHOC: 669 case NL80211_IFTYPE_ADHOC:
657 vif->mode = WL_MODE_IBSS;
658 infra = 0; 670 infra = 0;
659 break; 671 break;
660 case NL80211_IFTYPE_STATION: 672 case NL80211_IFTYPE_STATION:
@@ -670,12 +682,10 @@ brcmf_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
670 */ 682 */
671 return 0; 683 return 0;
672 } 684 }
673 vif->mode = WL_MODE_BSS;
674 infra = 1; 685 infra = 1;
675 break; 686 break;
676 case NL80211_IFTYPE_AP: 687 case NL80211_IFTYPE_AP:
677 case NL80211_IFTYPE_P2P_GO: 688 case NL80211_IFTYPE_P2P_GO:
678 vif->mode = WL_MODE_AP;
679 ap = 1; 689 ap = 1;
680 break; 690 break;
681 default: 691 default:
@@ -699,7 +709,7 @@ brcmf_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
699 err = -EAGAIN; 709 err = -EAGAIN;
700 goto done; 710 goto done;
701 } 711 }
702 brcmf_dbg(INFO, "IF Type = %s\n", (vif->mode == WL_MODE_IBSS) ? 712 brcmf_dbg(INFO, "IF Type = %s\n", brcmf_is_ibssmode(vif) ?
703 "Adhoc" : "Infra"); 713 "Adhoc" : "Infra");
704 } 714 }
705 ndev->ieee80211_ptr->iftype = type; 715 ndev->ieee80211_ptr->iftype = type;
@@ -1923,7 +1933,7 @@ brcmf_add_keyext(struct wiphy *wiphy, struct net_device *ndev,
1923 brcmf_dbg(CONN, "Setting the key index %d\n", key.index); 1933 brcmf_dbg(CONN, "Setting the key index %d\n", key.index);
1924 memcpy(key.data, params->key, key.len); 1934 memcpy(key.data, params->key, key.len);
1925 1935
1926 if ((ifp->vif->mode != WL_MODE_AP) && 1936 if (!brcmf_is_apmode(ifp->vif) &&
1927 (params->cipher == WLAN_CIPHER_SUITE_TKIP)) { 1937 (params->cipher == WLAN_CIPHER_SUITE_TKIP)) {
1928 brcmf_dbg(CONN, "Swapping RX/TX MIC key\n"); 1938 brcmf_dbg(CONN, "Swapping RX/TX MIC key\n");
1929 memcpy(keybuf, &key.data[24], sizeof(keybuf)); 1939 memcpy(keybuf, &key.data[24], sizeof(keybuf));
@@ -2022,7 +2032,7 @@ brcmf_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
2022 brcmf_dbg(CONN, "WLAN_CIPHER_SUITE_WEP104\n"); 2032 brcmf_dbg(CONN, "WLAN_CIPHER_SUITE_WEP104\n");
2023 break; 2033 break;
2024 case WLAN_CIPHER_SUITE_TKIP: 2034 case WLAN_CIPHER_SUITE_TKIP:
2025 if (ifp->vif->mode != WL_MODE_AP) { 2035 if (!brcmf_is_apmode(ifp->vif)) {
2026 brcmf_dbg(CONN, "Swapping RX/TX MIC key\n"); 2036 brcmf_dbg(CONN, "Swapping RX/TX MIC key\n");
2027 memcpy(keybuf, &key.data[24], sizeof(keybuf)); 2037 memcpy(keybuf, &key.data[24], sizeof(keybuf));
2028 memcpy(&key.data[24], &key.data[16], sizeof(keybuf)); 2038 memcpy(&key.data[24], &key.data[16], sizeof(keybuf));
@@ -2183,7 +2193,7 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
2183 if (!check_vif_up(ifp->vif)) 2193 if (!check_vif_up(ifp->vif))
2184 return -EIO; 2194 return -EIO;
2185 2195
2186 if (ifp->vif->mode == WL_MODE_AP) { 2196 if (brcmf_is_apmode(ifp->vif)) {
2187 memcpy(&sta_info_le, mac, ETH_ALEN); 2197 memcpy(&sta_info_le, mac, ETH_ALEN);
2188 err = brcmf_fil_iovar_data_get(ifp, "sta_info", 2198 err = brcmf_fil_iovar_data_get(ifp, "sta_info",
2189 &sta_info_le, 2199 &sta_info_le,
@@ -2200,7 +2210,7 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
2200 } 2210 }
2201 brcmf_dbg(TRACE, "STA idle time : %d ms, connected time :%d sec\n", 2211 brcmf_dbg(TRACE, "STA idle time : %d ms, connected time :%d sec\n",
2202 sinfo->inactive_time, sinfo->connected_time); 2212 sinfo->inactive_time, sinfo->connected_time);
2203 } else if (ifp->vif->mode == WL_MODE_BSS) { 2213 } else if (ifp->vif->wdev.iftype == NL80211_IFTYPE_STATION) {
2204 if (memcmp(mac, bssid, ETH_ALEN)) { 2214 if (memcmp(mac, bssid, ETH_ALEN)) {
2205 brcmf_err("Wrong Mac address cfg_mac-%pM wl_bssid-%pM\n", 2215 brcmf_err("Wrong Mac address cfg_mac-%pM wl_bssid-%pM\n",
2206 mac, bssid); 2216 mac, bssid);
@@ -2482,11 +2492,6 @@ CleanUp:
2482 return err; 2492 return err;
2483} 2493}
2484 2494
2485static bool brcmf_is_ibssmode(struct brcmf_cfg80211_vif *vif)
2486{
2487 return vif->mode == WL_MODE_IBSS;
2488}
2489
2490static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg, 2495static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg,
2491 struct brcmf_if *ifp) 2496 struct brcmf_if *ifp)
2492{ 2497{
@@ -4259,32 +4264,6 @@ static struct cfg80211_ops wl_cfg80211_ops = {
4259 CFG80211_TESTMODE_CMD(brcmf_cfg80211_testmode) 4264 CFG80211_TESTMODE_CMD(brcmf_cfg80211_testmode)
4260}; 4265};
4261 4266
4262static s32 brcmf_nl80211_iftype_to_mode(enum nl80211_iftype type)
4263{
4264 switch (type) {
4265 case NL80211_IFTYPE_AP_VLAN:
4266 case NL80211_IFTYPE_WDS:
4267 case NL80211_IFTYPE_MONITOR:
4268 case NL80211_IFTYPE_MESH_POINT:
4269 return -ENOTSUPP;
4270 case NL80211_IFTYPE_ADHOC:
4271 return WL_MODE_IBSS;
4272 case NL80211_IFTYPE_STATION:
4273 case NL80211_IFTYPE_P2P_CLIENT:
4274 return WL_MODE_BSS;
4275 case NL80211_IFTYPE_AP:
4276 case NL80211_IFTYPE_P2P_GO:
4277 return WL_MODE_AP;
4278 case NL80211_IFTYPE_P2P_DEVICE:
4279 return WL_MODE_P2P;
4280 case NL80211_IFTYPE_UNSPECIFIED:
4281 default:
4282 break;
4283 }
4284
4285 return -EINVAL;
4286}
4287
4288static void brcmf_wiphy_pno_params(struct wiphy *wiphy) 4267static void brcmf_wiphy_pno_params(struct wiphy *wiphy)
4289{ 4268{
4290 /* scheduled scan settings */ 4269 /* scheduled scan settings */
@@ -4409,7 +4388,6 @@ struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,
4409 vif->wdev.wiphy = cfg->wiphy; 4388 vif->wdev.wiphy = cfg->wiphy;
4410 vif->wdev.iftype = type; 4389 vif->wdev.iftype = type;
4411 4390
4412 vif->mode = brcmf_nl80211_iftype_to_mode(type);
4413 vif->pm_block = pm_block; 4391 vif->pm_block = pm_block;
4414 vif->roam_off = -1; 4392 vif->roam_off = -1;
4415 4393
@@ -4703,7 +4681,7 @@ brcmf_notify_connect_status(struct brcmf_if *ifp,
4703 s32 err = 0; 4681 s32 err = 0;
4704 u16 reason; 4682 u16 reason;
4705 4683
4706 if (ifp->vif->mode == WL_MODE_AP) { 4684 if (brcmf_is_apmode(ifp->vif)) {
4707 err = brcmf_notify_connect_status_ap(cfg, ndev, e, data); 4685 err = brcmf_notify_connect_status_ap(cfg, ndev, e, data);
4708 } else if (brcmf_is_linkup(e)) { 4686 } else if (brcmf_is_linkup(e)) {
4709 brcmf_dbg(CONN, "Linkup\n"); 4687 brcmf_dbg(CONN, "Linkup\n");
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h
index 5715bb0708cf..283c525a44f7 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h
@@ -89,21 +89,6 @@ enum brcmf_scan_status {
89 BRCMF_SCAN_STATUS_SUPPRESS, 89 BRCMF_SCAN_STATUS_SUPPRESS,
90}; 90};
91 91
92/**
93 * enum wl_mode - driver mode of virtual interface.
94 *
95 * @WL_MODE_BSS: connects to BSS.
96 * @WL_MODE_IBSS: operate as ad-hoc.
97 * @WL_MODE_AP: operate as access-point.
98 * @WL_MODE_P2P: provide P2P discovery.
99 */
100enum wl_mode {
101 WL_MODE_BSS,
102 WL_MODE_IBSS,
103 WL_MODE_AP,
104 WL_MODE_P2P
105};
106
107/* dongle configuration */ 92/* dongle configuration */
108struct brcmf_cfg80211_conf { 93struct brcmf_cfg80211_conf {
109 u32 frag_threshold; 94 u32 frag_threshold;
@@ -193,7 +178,6 @@ struct vif_saved_ie {
193 * @ifp: lower layer interface pointer 178 * @ifp: lower layer interface pointer
194 * @wdev: wireless device. 179 * @wdev: wireless device.
195 * @profile: profile information. 180 * @profile: profile information.
196 * @mode: operating mode.
197 * @roam_off: roaming state. 181 * @roam_off: roaming state.
198 * @sme_state: SME state using enum brcmf_vif_status bits. 182 * @sme_state: SME state using enum brcmf_vif_status bits.
199 * @pm_block: power-management blocked. 183 * @pm_block: power-management blocked.
@@ -204,7 +188,6 @@ struct brcmf_cfg80211_vif {
204 struct brcmf_if *ifp; 188 struct brcmf_if *ifp;
205 struct wireless_dev wdev; 189 struct wireless_dev wdev;
206 struct brcmf_cfg80211_profile profile; 190 struct brcmf_cfg80211_profile profile;
207 s32 mode;
208 s32 roam_off; 191 s32 roam_off;
209 unsigned long sme_state; 192 unsigned long sme_state;
210 bool pm_block; 193 bool pm_block;