mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 23:24:22 -04:00
qcacld-3.0: Check for max allowed STA vdevs in change interface API
In FW CFG_TGT_DEFAULT_MAX_STA_VDEVS considers total no of STA and P2P-CLI vdevs. Check CFG_TGT_DEFAULT_MAX_STA_VDEVS in change interface APIs for P2P CLI case. Change-Id: I195d1cdda2d66f3187698254accf4bc3646d78c2 CRs-Fixed: 2701798
This commit is contained in:
parent
7d713f4ae4
commit
10c77d2379
3 changed files with 38 additions and 13 deletions
|
|
@ -4466,4 +4466,13 @@ void hdd_init_start_completion(void);
|
|||
*/
|
||||
int hdd_update_phymode(struct hdd_adapter *adapter, eCsrPhyMode phymode,
|
||||
enum band_info band, uint32_t chwidth);
|
||||
|
||||
/**
|
||||
* hdd_max_sta_vdev_count_reached() - check sta vdev count
|
||||
* @hdd_ctx: global hdd context
|
||||
*
|
||||
* Return: true if vdev limit reached
|
||||
*/
|
||||
bool hdd_max_sta_vdev_count_reached(struct hdd_context *hdd_ctx);
|
||||
|
||||
#endif /* end #if !defined(WLAN_HDD_MAIN_H) */
|
||||
|
|
|
|||
|
|
@ -16603,6 +16603,13 @@ static int __wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy,
|
|||
qdf_opmode_str(adapter->device_mode),
|
||||
qdf_opmode_str(new_mode));
|
||||
|
||||
if ((new_mode == QDF_STA_MODE || new_mode == QDF_P2P_CLIENT_MODE) &&
|
||||
(adapter->device_mode != QDF_STA_MODE &&
|
||||
adapter->device_mode != QDF_P2P_CLIENT_MODE)) {
|
||||
if (hdd_max_sta_vdev_count_reached(adapter->hdd_ctx))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
errno = hdd_trigger_psoc_idle_restart(hdd_ctx);
|
||||
if (errno) {
|
||||
hdd_err("Failed to restart psoc; errno:%d", errno);
|
||||
|
|
|
|||
|
|
@ -6044,6 +6044,27 @@ static u8 hdd_get_mode_specific_interface_count(struct hdd_context *hdd_ctx,
|
|||
return intf_count;
|
||||
}
|
||||
|
||||
bool hdd_max_sta_vdev_count_reached(struct hdd_context *hdd_ctx)
|
||||
{
|
||||
u8 intf_count;
|
||||
|
||||
/*
|
||||
* Check for max no of supported STA/P2PCLI VDEVs before
|
||||
* creating another one.
|
||||
*/
|
||||
intf_count = hdd_get_mode_specific_interface_count(hdd_ctx,
|
||||
QDF_STA_MODE);
|
||||
intf_count += hdd_get_mode_specific_interface_count(hdd_ctx,
|
||||
QDF_P2P_CLIENT_MODE);
|
||||
if (CFG_TGT_DEFAULT_MAX_STA_VDEVS &&
|
||||
(intf_count >= CFG_TGT_DEFAULT_MAX_STA_VDEVS)) {
|
||||
hdd_err("Max limit reached sta vdev-current %d max %d",
|
||||
intf_count, CFG_TGT_DEFAULT_MAX_STA_VDEVS);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_open_adapter() - open and setup the hdd adatper
|
||||
* @hdd_ctx: global hdd context
|
||||
|
|
@ -6066,7 +6087,6 @@ struct hdd_adapter *hdd_open_adapter(struct hdd_context *hdd_ctx, uint8_t sessio
|
|||
{
|
||||
struct net_device *ndev = NULL;
|
||||
struct hdd_adapter *adapter = NULL;
|
||||
u8 intf_count = 0;
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
|
||||
if (hdd_ctx->current_intf_count >= WLAN_MAX_VDEVS) {
|
||||
|
|
@ -6116,19 +6136,8 @@ struct hdd_adapter *hdd_open_adapter(struct hdd_context *hdd_ctx, uint8_t sessio
|
|||
/* fall through */
|
||||
case QDF_P2P_CLIENT_MODE:
|
||||
|
||||
/* Check for max no of supported STA/P2PCLI VDEVs before
|
||||
* creating another one.
|
||||
*/
|
||||
intf_count += hdd_get_mode_specific_interface_count(hdd_ctx,
|
||||
QDF_STA_MODE);
|
||||
intf_count += hdd_get_mode_specific_interface_count(hdd_ctx,
|
||||
QDF_P2P_CLIENT_MODE);
|
||||
if (CFG_TGT_DEFAULT_MAX_STA_VDEVS &&
|
||||
(intf_count >= CFG_TGT_DEFAULT_MAX_STA_VDEVS)) {
|
||||
hdd_err("Max limit reached sta vdev-current %d max %d",
|
||||
intf_count, CFG_TGT_DEFAULT_MAX_STA_VDEVS);
|
||||
if (hdd_max_sta_vdev_count_reached(hdd_ctx))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* fall through */
|
||||
case QDF_P2P_DEVICE_MODE:
|
||||
|
|
|
|||
Loading…
Reference in a new issue