|
@@ -1825,10 +1825,16 @@ static u8 wl12xx_get_role_type(struct wl1271 *wl)
|
|
|
{
|
|
|
switch (wl->bss_type) {
|
|
|
case BSS_TYPE_AP_BSS:
|
|
|
- return WL1271_ROLE_AP;
|
|
|
+ if (wl->p2p)
|
|
|
+ return WL1271_ROLE_P2P_GO;
|
|
|
+ else
|
|
|
+ return WL1271_ROLE_AP;
|
|
|
|
|
|
case BSS_TYPE_STA_BSS:
|
|
|
- return WL1271_ROLE_STA;
|
|
|
+ if (wl->p2p)
|
|
|
+ return WL1271_ROLE_P2P_CL;
|
|
|
+ else
|
|
|
+ return WL1271_ROLE_STA;
|
|
|
|
|
|
case BSS_TYPE_IBSS:
|
|
|
return WL1271_ROLE_IBSS;
|
|
@@ -1850,7 +1856,7 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
|
|
|
bool booted = false;
|
|
|
|
|
|
wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
|
|
|
- vif->type, vif->addr);
|
|
|
+ ieee80211_vif_type_p2p(vif), vif->addr);
|
|
|
|
|
|
mutex_lock(&wl->mutex);
|
|
|
if (wl->vif) {
|
|
@@ -1870,7 +1876,10 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- switch (vif->type) {
|
|
|
+ switch (ieee80211_vif_type_p2p(vif)) {
|
|
|
+ case NL80211_IFTYPE_P2P_CLIENT:
|
|
|
+ wl->p2p = 1;
|
|
|
+ /* fall-through */
|
|
|
case NL80211_IFTYPE_STATION:
|
|
|
wl->bss_type = BSS_TYPE_STA_BSS;
|
|
|
wl->set_bss_type = BSS_TYPE_STA_BSS;
|
|
@@ -1879,6 +1888,9 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
|
|
|
wl->bss_type = BSS_TYPE_IBSS;
|
|
|
wl->set_bss_type = BSS_TYPE_STA_BSS;
|
|
|
break;
|
|
|
+ case NL80211_IFTYPE_P2P_GO:
|
|
|
+ wl->p2p = 1;
|
|
|
+ /* fall-through */
|
|
|
case NL80211_IFTYPE_AP:
|
|
|
wl->bss_type = BSS_TYPE_AP_BSS;
|
|
|
break;
|
|
@@ -2074,6 +2086,7 @@ deinit:
|
|
|
wl->ssid_len = 0;
|
|
|
wl->bss_type = MAX_BSS_TYPE;
|
|
|
wl->set_bss_type = MAX_BSS_TYPE;
|
|
|
+ wl->p2p = 0;
|
|
|
wl->band = IEEE80211_BAND_2GHZ;
|
|
|
|
|
|
wl->rx_counter = 0;
|
|
@@ -4514,7 +4527,8 @@ int wl1271_init_ieee80211(struct wl1271 *wl)
|
|
|
wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
|
|
|
|
|
|
wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
|
|
|
- BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
|
|
|
+ BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP) |
|
|
|
+ BIT(NL80211_IFTYPE_P2P_CLIENT) | BIT(NL80211_IFTYPE_P2P_GO);
|
|
|
wl->hw->wiphy->max_scan_ssids = 1;
|
|
|
wl->hw->wiphy->max_sched_scan_ssids = 16;
|
|
|
wl->hw->wiphy->max_match_sets = 16;
|