qcacld-3.0: Refine interface combinations advertised in wiphy

Currently, interface combinations are advertised as part of wiphy
registration but some of them lead to 3-port/4-port. Refine the
concurrencies to advertise only supported combinations as below,
1. Remove SAP+SAP_MAX_OBSS_STA combination
2. Remove the "reserved STA iface which was added to support
   P2P device". No need to indicate any additional interface count
   for P2P_DEVICE mode as driver doesn't advertise dedicated
   P2P_DEVICE support.
3. Add NAN+STA and NAN+SAP combinations also.

Change-Id: I7ed594c2b719c243cbe38794b877f77240024620
CRs-Fixed: 3226284
This commit is contained in:
Aravind Kishore Sukla
2022-07-07 07:10:08 -07:00
committed by Madan Koyyalamudi
parent 5fee5caae3
commit 7e7cdb3d96

View File

@@ -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;