diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 53cd44d1f8..3352148424 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -592,7 +592,7 @@ static const struct ieee80211_txrx_stypes static const struct ieee80211_iface_limit wlan_hdd_sta_iface_limit[] = { { - .max = 3, /* p2p0 is a STA as well */ + .max = 2, .types = BIT(NL80211_IFTYPE_STATION), }, }; @@ -601,7 +601,7 @@ static const struct ieee80211_iface_limit static const struct ieee80211_iface_limit wlan_hdd_ap_iface_limit[] = { { - .max = (QDF_MAX_NO_OF_SAP_MODE + SAP_MAX_OBSS_STA_CNT), + .max = (QDF_MAX_NO_OF_SAP_MODE), .types = BIT(NL80211_IFTYPE_AP), }, }; @@ -619,13 +619,11 @@ static const struct ieee80211_iface_limit }, }; +/* STA + AP combination */ static const struct ieee80211_iface_limit wlan_hdd_sta_ap_iface_limit[] = { { - /* We need 1 extra STA interface for OBSS scan when SAP starts - * with HT40 in STA+SAP concurrency mode - */ - .max = (1 + SAP_MAX_OBSS_STA_CNT), + .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, { @@ -634,12 +632,11 @@ static const struct ieee80211_iface_limit }, }; -/* STA + P2P combination */ +/* STA + P2P + P2P combination */ static const struct ieee80211_iface_limit wlan_hdd_sta_p2p_iface_limit[] = { { - /* One reserved for dedicated P2PDEV usage */ - .max = 2, + .max = 1, .types = BIT(NL80211_IFTYPE_STATION) }, { @@ -651,32 +648,26 @@ static const struct ieee80211_iface_limit }, }; -/* STA + AP + P2PGO combination */ +/* STA + AP + P2P combination */ static const struct ieee80211_iface_limit -wlan_hdd_sta_ap_p2pgo_iface_limit[] = { - /* Support for AP+P2PGO interfaces */ +wlan_hdd_sta_ap_p2p_iface_limit[] = { { - .max = 2, + .max = 1, .types = BIT(NL80211_IFTYPE_STATION) }, { .max = 1, - .types = BIT(NL80211_IFTYPE_P2P_GO) + .types = BIT(NL80211_IFTYPE_P2P_GO) | BIT(NL80211_IFTYPE_P2P_CLIENT) }, { .max = 1, .types = BIT(NL80211_IFTYPE_AP) - } + }, }; /* SAP + P2P combination */ static const struct ieee80211_iface_limit wlan_hdd_sap_p2p_iface_limit[] = { - { - /* 1 dedicated for p2p0 which is a STA type */ - .max = 1, - .types = BIT(NL80211_IFTYPE_STATION) - }, { /* The p2p interface in SAP+P2P can be GO/CLI. * The p2p connection can be formed on p2p0 or p2p-p2p0-x. @@ -694,11 +685,6 @@ wlan_hdd_sap_p2p_iface_limit[] = { /* P2P + P2P combination */ static const struct ieee80211_iface_limit wlan_hdd_p2p_p2p_iface_limit[] = { - { - /* 1 dedicated for p2p0 which is a STA type */ - .max = 1, - .types = BIT(NL80211_IFTYPE_STATION) - }, { /* The p2p interface in P2P+P2P can be GO/CLI. * For P2P+P2P, the new interfaces are formed on p2p-p2p0-x. @@ -716,20 +702,50 @@ static const struct ieee80211_iface_limit }, }; +/* STA + NAN disc combination */ +static const struct ieee80211_iface_limit + wlan_hdd_sta_nan_iface_limit[] = { + { + /* STA */ + .max = 1, + .types = BIT(NL80211_IFTYPE_STATION) + }, + { + /* NAN */ + .max = 1, + .types = BIT(NL80211_IFTYPE_NAN), + }, +}; + +/* SAP + NAN disc combination */ +static const struct ieee80211_iface_limit + wlan_hdd_sap_nan_iface_limit[] = { + { + /* SAP */ + .max = 1, + .types = BIT(NL80211_IFTYPE_AP) + }, + { + /* NAN */ + .max = 1, + .types = BIT(NL80211_IFTYPE_NAN), + }, +}; + static struct ieee80211_iface_combination wlan_hdd_iface_combination[] = { /* STA */ { .limits = wlan_hdd_sta_iface_limit, .num_different_channels = 2, - .max_interfaces = 3, + .max_interfaces = 2, .n_limits = ARRAY_SIZE(wlan_hdd_sta_iface_limit), }, /* AP */ { .limits = wlan_hdd_ap_iface_limit, .num_different_channels = 2, - .max_interfaces = (SAP_MAX_OBSS_STA_CNT + QDF_MAX_NO_OF_SAP_MODE), + .max_interfaces = (QDF_MAX_NO_OF_SAP_MODE), .n_limits = ARRAY_SIZE(wlan_hdd_ap_iface_limit), #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)) || \ defined(CFG80211_BEACON_INTERVAL_BACKPORT) @@ -747,7 +763,7 @@ static struct ieee80211_iface_combination { .limits = wlan_hdd_sta_ap_iface_limit, .num_different_channels = 2, - .max_interfaces = (1 + SAP_MAX_OBSS_STA_CNT + QDF_MAX_NO_OF_SAP_MODE), + .max_interfaces = (1 + QDF_MAX_NO_OF_SAP_MODE), .n_limits = ARRAY_SIZE(wlan_hdd_sta_ap_iface_limit), .beacon_int_infra_match = true, #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)) || \ @@ -755,33 +771,31 @@ static struct ieee80211_iface_combination .beacon_int_min_gcd = 1, #endif }, - /* STA + P2P */ + /* STA + P2P + P2P */ { .limits = wlan_hdd_sta_p2p_iface_limit, .num_different_channels = 2, - /* one interface reserved for P2PDEV dedicated usage */ - .max_interfaces = 4, + .max_interfaces = 3, .n_limits = ARRAY_SIZE(wlan_hdd_sta_p2p_iface_limit), .beacon_int_infra_match = true, }, - /* STA + P2P GO + SAP */ + /* STA + P2P + SAP */ { - .limits = wlan_hdd_sta_ap_p2pgo_iface_limit, + .limits = wlan_hdd_sta_ap_p2p_iface_limit, /* we can allow 3 channels for three different persona * but due to firmware limitation, allow max 2 concrnt channels. */ .num_different_channels = 2, - /* one interface reserved for P2PDEV dedicated usage */ - .max_interfaces = 4, - .n_limits = ARRAY_SIZE(wlan_hdd_sta_ap_p2pgo_iface_limit), + .max_interfaces = 3, + .n_limits = ARRAY_SIZE(wlan_hdd_sta_ap_p2p_iface_limit), .beacon_int_infra_match = true, }, /* SAP + P2P */ { .limits = wlan_hdd_sap_p2p_iface_limit, .num_different_channels = 2, - /* 1-p2p0 + 1-SAP + 1-P2P (on p2p0 or p2p-p2p0-x) */ - .max_interfaces = 3, + /* 1-SAP + 1-P2P */ + .max_interfaces = 2, .n_limits = ARRAY_SIZE(wlan_hdd_sap_p2p_iface_limit), .beacon_int_infra_match = true, }, @@ -789,8 +803,8 @@ static struct ieee80211_iface_combination { .limits = wlan_hdd_p2p_p2p_iface_limit, .num_different_channels = 2, - /* 1-p2p0 + 2-P2P (on p2p-p2p0-x) */ - .max_interfaces = 3, + /* 2-P2P */ + .max_interfaces = 2, .n_limits = ARRAY_SIZE(wlan_hdd_p2p_p2p_iface_limit), .beacon_int_infra_match = true, }, @@ -801,6 +815,21 @@ static struct ieee80211_iface_combination .num_different_channels = 2, .n_limits = ARRAY_SIZE(wlan_hdd_mon_iface_limit), }, + /* NAN + STA */ + { + .limits = wlan_hdd_sta_nan_iface_limit, + .max_interfaces = 2, + .num_different_channels = 2, + .n_limits = ARRAY_SIZE(wlan_hdd_sta_nan_iface_limit), + }, + /* NAN + SAP */ + { + .limits = wlan_hdd_sap_nan_iface_limit, + .num_different_channels = 2, + .max_interfaces = 2, + .n_limits = ARRAY_SIZE(wlan_hdd_sap_nan_iface_limit), + .beacon_int_infra_match = true, + }, }; static struct cfg80211_ops wlan_hdd_cfg80211_ops;