/* SOCIAL CHANNELS 1, 6, 11 */
                        search_state = WL_P2P_DISC_ST_SEARCH;
                        brcmf_dbg(INFO, "P2P SEARCH PHASE START\n");
-               } else if (dev != NULL && vif->mode == WL_MODE_AP) {
+               } else if (dev != NULL &&
+                          vif->wdev.iftype == NL80211_IFTYPE_P2P_GO) {
                        /* If you are already a GO, then do SEARCH only */
                        brcmf_dbg(INFO, "Already a GO. Do SEARCH Only\n");
                        search_state = WL_P2P_DISC_ST_SEARCH;
        struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
        struct brcmf_cfg80211_vif *vif;
        enum brcmf_fil_p2p_if_types iftype;
-       enum wl_mode mode;
        int err;
 
        if (brcmf_cfg80211_vif_event_armed(cfg))
        switch (type) {
        case NL80211_IFTYPE_P2P_CLIENT:
                iftype = BRCMF_FIL_P2P_IF_CLIENT;
-               mode = WL_MODE_BSS;
                break;
        case NL80211_IFTYPE_P2P_GO:
                iftype = BRCMF_FIL_P2P_IF_GO;
-               mode = WL_MODE_AP;
                break;
        case NL80211_IFTYPE_P2P_DEVICE:
                return brcmf_p2p_create_p2pdev(&cfg->p2p, wiphy,
 
        return err;
 }
 
+static bool brcmf_is_apmode(struct brcmf_cfg80211_vif *vif)
+{
+       enum nl80211_iftype iftype;
+
+       iftype = vif->wdev.iftype;
+       return iftype == NL80211_IFTYPE_AP || iftype == NL80211_IFTYPE_P2P_GO;
+}
+
+static bool brcmf_is_ibssmode(struct brcmf_cfg80211_vif *vif)
+{
+       return vif->wdev.iftype == NL80211_IFTYPE_ADHOC;
+}
+
 static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy,
                                                     const char *name,
                                                     enum nl80211_iftype type,
                          type);
                return -EOPNOTSUPP;
        case NL80211_IFTYPE_ADHOC:
-               vif->mode = WL_MODE_IBSS;
                infra = 0;
                break;
        case NL80211_IFTYPE_STATION:
                         */
                        return 0;
                }
-               vif->mode = WL_MODE_BSS;
                infra = 1;
                break;
        case NL80211_IFTYPE_AP:
        case NL80211_IFTYPE_P2P_GO:
-               vif->mode = WL_MODE_AP;
                ap = 1;
                break;
        default:
                        err = -EAGAIN;
                        goto done;
                }
-               brcmf_dbg(INFO, "IF Type = %s\n", (vif->mode == WL_MODE_IBSS) ?
+               brcmf_dbg(INFO, "IF Type = %s\n", brcmf_is_ibssmode(vif) ?
                          "Adhoc" : "Infra");
        }
        ndev->ieee80211_ptr->iftype = type;
                brcmf_dbg(CONN, "Setting the key index %d\n", key.index);
                memcpy(key.data, params->key, key.len);
 
-               if ((ifp->vif->mode != WL_MODE_AP) &&
+               if (!brcmf_is_apmode(ifp->vif) &&
                    (params->cipher == WLAN_CIPHER_SUITE_TKIP)) {
                        brcmf_dbg(CONN, "Swapping RX/TX MIC key\n");
                        memcpy(keybuf, &key.data[24], sizeof(keybuf));
                brcmf_dbg(CONN, "WLAN_CIPHER_SUITE_WEP104\n");
                break;
        case WLAN_CIPHER_SUITE_TKIP:
-               if (ifp->vif->mode != WL_MODE_AP) {
+               if (!brcmf_is_apmode(ifp->vif)) {
                        brcmf_dbg(CONN, "Swapping RX/TX MIC key\n");
                        memcpy(keybuf, &key.data[24], sizeof(keybuf));
                        memcpy(&key.data[24], &key.data[16], sizeof(keybuf));
        if (!check_vif_up(ifp->vif))
                return -EIO;
 
-       if (ifp->vif->mode == WL_MODE_AP) {
+       if (brcmf_is_apmode(ifp->vif)) {
                memcpy(&sta_info_le, mac, ETH_ALEN);
                err = brcmf_fil_iovar_data_get(ifp, "sta_info",
                                               &sta_info_le,
                }
                brcmf_dbg(TRACE, "STA idle time : %d ms, connected time :%d sec\n",
                          sinfo->inactive_time, sinfo->connected_time);
-       } else if (ifp->vif->mode == WL_MODE_BSS) {
+       } else if (ifp->vif->wdev.iftype == NL80211_IFTYPE_STATION) {
                if (memcmp(mac, bssid, ETH_ALEN)) {
                        brcmf_err("Wrong Mac address cfg_mac-%pM wl_bssid-%pM\n",
                                  mac, bssid);
        return err;
 }
 
-static bool brcmf_is_ibssmode(struct brcmf_cfg80211_vif *vif)
-{
-       return vif->mode == WL_MODE_IBSS;
-}
-
 static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg,
                                 struct brcmf_if *ifp)
 {
        CFG80211_TESTMODE_CMD(brcmf_cfg80211_testmode)
 };
 
-static s32 brcmf_nl80211_iftype_to_mode(enum nl80211_iftype type)
-{
-       switch (type) {
-       case NL80211_IFTYPE_AP_VLAN:
-       case NL80211_IFTYPE_WDS:
-       case NL80211_IFTYPE_MONITOR:
-       case NL80211_IFTYPE_MESH_POINT:
-               return -ENOTSUPP;
-       case NL80211_IFTYPE_ADHOC:
-               return WL_MODE_IBSS;
-       case NL80211_IFTYPE_STATION:
-       case NL80211_IFTYPE_P2P_CLIENT:
-               return WL_MODE_BSS;
-       case NL80211_IFTYPE_AP:
-       case NL80211_IFTYPE_P2P_GO:
-               return WL_MODE_AP;
-       case NL80211_IFTYPE_P2P_DEVICE:
-               return WL_MODE_P2P;
-       case NL80211_IFTYPE_UNSPECIFIED:
-       default:
-               break;
-       }
-
-       return -EINVAL;
-}
-
 static void brcmf_wiphy_pno_params(struct wiphy *wiphy)
 {
        /* scheduled scan settings */
        vif->wdev.wiphy = cfg->wiphy;
        vif->wdev.iftype = type;
 
-       vif->mode = brcmf_nl80211_iftype_to_mode(type);
        vif->pm_block = pm_block;
        vif->roam_off = -1;
 
        s32 err = 0;
        u16 reason;
 
-       if (ifp->vif->mode == WL_MODE_AP) {
+       if (brcmf_is_apmode(ifp->vif)) {
                err = brcmf_notify_connect_status_ap(cfg, ndev, e, data);
        } else if (brcmf_is_linkup(e)) {
                brcmf_dbg(CONN, "Linkup\n");
 
        BRCMF_SCAN_STATUS_SUPPRESS,
 };
 
-/**
- * enum wl_mode - driver mode of virtual interface.
- *
- * @WL_MODE_BSS: connects to BSS.
- * @WL_MODE_IBSS: operate as ad-hoc.
- * @WL_MODE_AP: operate as access-point.
- * @WL_MODE_P2P: provide P2P discovery.
- */
-enum wl_mode {
-       WL_MODE_BSS,
-       WL_MODE_IBSS,
-       WL_MODE_AP,
-       WL_MODE_P2P
-};
-
 /* dongle configuration */
 struct brcmf_cfg80211_conf {
        u32 frag_threshold;
  * @ifp: lower layer interface pointer
  * @wdev: wireless device.
  * @profile: profile information.
- * @mode: operating mode.
  * @roam_off: roaming state.
  * @sme_state: SME state using enum brcmf_vif_status bits.
  * @pm_block: power-management blocked.
        struct brcmf_if *ifp;
        struct wireless_dev wdev;
        struct brcmf_cfg80211_profile profile;
-       s32 mode;
        s32 roam_off;
        unsigned long sme_state;
        bool pm_block;