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 static const struct ieee80211_iface_limit
wlan_hdd_sta_iface_limit[] = { wlan_hdd_sta_iface_limit[] = {
{ {
.max = 3, /* p2p0 is a STA as well */ .max = 2,
.types = BIT(NL80211_IFTYPE_STATION), .types = BIT(NL80211_IFTYPE_STATION),
}, },
}; };
@@ -601,7 +601,7 @@ static const struct ieee80211_iface_limit
static const struct ieee80211_iface_limit static const struct ieee80211_iface_limit
wlan_hdd_ap_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), .types = BIT(NL80211_IFTYPE_AP),
}, },
}; };
@@ -619,13 +619,11 @@ static const struct ieee80211_iface_limit
}, },
}; };
/* STA + AP combination */
static const struct ieee80211_iface_limit static const struct ieee80211_iface_limit
wlan_hdd_sta_ap_iface_limit[] = { wlan_hdd_sta_ap_iface_limit[] = {
{ {
/* We need 1 extra STA interface for OBSS scan when SAP starts .max = 1,
* with HT40 in STA+SAP concurrency mode
*/
.max = (1 + SAP_MAX_OBSS_STA_CNT),
.types = BIT(NL80211_IFTYPE_STATION), .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 static const struct ieee80211_iface_limit
wlan_hdd_sta_p2p_iface_limit[] = { wlan_hdd_sta_p2p_iface_limit[] = {
{ {
/* One reserved for dedicated P2PDEV usage */ .max = 1,
.max = 2,
.types = BIT(NL80211_IFTYPE_STATION) .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 static const struct ieee80211_iface_limit
wlan_hdd_sta_ap_p2pgo_iface_limit[] = { wlan_hdd_sta_ap_p2p_iface_limit[] = {
/* Support for AP+P2PGO interfaces */
{ {
.max = 2, .max = 1,
.types = BIT(NL80211_IFTYPE_STATION) .types = BIT(NL80211_IFTYPE_STATION)
}, },
{ {
.max = 1, .max = 1,
.types = BIT(NL80211_IFTYPE_P2P_GO) .types = BIT(NL80211_IFTYPE_P2P_GO) | BIT(NL80211_IFTYPE_P2P_CLIENT)
}, },
{ {
.max = 1, .max = 1,
.types = BIT(NL80211_IFTYPE_AP) .types = BIT(NL80211_IFTYPE_AP)
} },
}; };
/* SAP + P2P combination */ /* SAP + P2P combination */
static const struct ieee80211_iface_limit static const struct ieee80211_iface_limit
wlan_hdd_sap_p2p_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 interface in SAP+P2P can be GO/CLI.
* The p2p connection can be formed on p2p0 or p2p-p2p0-x. * 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 */ /* P2P + P2P combination */
static const struct ieee80211_iface_limit static const struct ieee80211_iface_limit
wlan_hdd_p2p_p2p_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. /* The p2p interface in P2P+P2P can be GO/CLI.
* For P2P+P2P, the new interfaces are formed on p2p-p2p0-x. * 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 static struct ieee80211_iface_combination
wlan_hdd_iface_combination[] = { wlan_hdd_iface_combination[] = {
/* STA */ /* STA */
{ {
.limits = wlan_hdd_sta_iface_limit, .limits = wlan_hdd_sta_iface_limit,
.num_different_channels = 2, .num_different_channels = 2,
.max_interfaces = 3, .max_interfaces = 2,
.n_limits = ARRAY_SIZE(wlan_hdd_sta_iface_limit), .n_limits = ARRAY_SIZE(wlan_hdd_sta_iface_limit),
}, },
/* AP */ /* AP */
{ {
.limits = wlan_hdd_ap_iface_limit, .limits = wlan_hdd_ap_iface_limit,
.num_different_channels = 2, .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), .n_limits = ARRAY_SIZE(wlan_hdd_ap_iface_limit),
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)) || \ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)) || \
defined(CFG80211_BEACON_INTERVAL_BACKPORT) defined(CFG80211_BEACON_INTERVAL_BACKPORT)
@@ -747,7 +763,7 @@ static struct ieee80211_iface_combination
{ {
.limits = wlan_hdd_sta_ap_iface_limit, .limits = wlan_hdd_sta_ap_iface_limit,
.num_different_channels = 2, .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), .n_limits = ARRAY_SIZE(wlan_hdd_sta_ap_iface_limit),
.beacon_int_infra_match = true, .beacon_int_infra_match = true,
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)) || \ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)) || \
@@ -755,33 +771,31 @@ static struct ieee80211_iface_combination
.beacon_int_min_gcd = 1, .beacon_int_min_gcd = 1,
#endif #endif
}, },
/* STA + P2P */ /* STA + P2P + P2P */
{ {
.limits = wlan_hdd_sta_p2p_iface_limit, .limits = wlan_hdd_sta_p2p_iface_limit,
.num_different_channels = 2, .num_different_channels = 2,
/* one interface reserved for P2PDEV dedicated usage */ .max_interfaces = 3,
.max_interfaces = 4,
.n_limits = ARRAY_SIZE(wlan_hdd_sta_p2p_iface_limit), .n_limits = ARRAY_SIZE(wlan_hdd_sta_p2p_iface_limit),
.beacon_int_infra_match = true, .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 /* we can allow 3 channels for three different persona
* but due to firmware limitation, allow max 2 concrnt channels. * but due to firmware limitation, allow max 2 concrnt channels.
*/ */
.num_different_channels = 2, .num_different_channels = 2,
/* one interface reserved for P2PDEV dedicated usage */ .max_interfaces = 3,
.max_interfaces = 4, .n_limits = ARRAY_SIZE(wlan_hdd_sta_ap_p2p_iface_limit),
.n_limits = ARRAY_SIZE(wlan_hdd_sta_ap_p2pgo_iface_limit),
.beacon_int_infra_match = true, .beacon_int_infra_match = true,
}, },
/* SAP + P2P */ /* SAP + P2P */
{ {
.limits = wlan_hdd_sap_p2p_iface_limit, .limits = wlan_hdd_sap_p2p_iface_limit,
.num_different_channels = 2, .num_different_channels = 2,
/* 1-p2p0 + 1-SAP + 1-P2P (on p2p0 or p2p-p2p0-x) */ /* 1-SAP + 1-P2P */
.max_interfaces = 3, .max_interfaces = 2,
.n_limits = ARRAY_SIZE(wlan_hdd_sap_p2p_iface_limit), .n_limits = ARRAY_SIZE(wlan_hdd_sap_p2p_iface_limit),
.beacon_int_infra_match = true, .beacon_int_infra_match = true,
}, },
@@ -789,8 +803,8 @@ static struct ieee80211_iface_combination
{ {
.limits = wlan_hdd_p2p_p2p_iface_limit, .limits = wlan_hdd_p2p_p2p_iface_limit,
.num_different_channels = 2, .num_different_channels = 2,
/* 1-p2p0 + 2-P2P (on p2p-p2p0-x) */ /* 2-P2P */
.max_interfaces = 3, .max_interfaces = 2,
.n_limits = ARRAY_SIZE(wlan_hdd_p2p_p2p_iface_limit), .n_limits = ARRAY_SIZE(wlan_hdd_p2p_p2p_iface_limit),
.beacon_int_infra_match = true, .beacon_int_infra_match = true,
}, },
@@ -801,6 +815,21 @@ static struct ieee80211_iface_combination
.num_different_channels = 2, .num_different_channels = 2,
.n_limits = ARRAY_SIZE(wlan_hdd_mon_iface_limit), .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; static struct cfg80211_ops wlan_hdd_cfg80211_ops;