diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index e36b3115fc5d..f86950dccb78 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -7460,8 +7460,8 @@ enum hdd_link_speed_rpt_type { #define CFG_SAP_MAX_NO_PEERS "gSoftApMaxPeers" #define CFG_SAP_MAX_NO_PEERS_MIN (1) -#define CFG_SAP_MAX_NO_PEERS_MAX (32) -#define CFG_SAP_MAX_NO_PEERS_DEFAULT (32) +#define CFG_SAP_MAX_NO_PEERS_MAX (SIR_SAP_MAX_NUM_PEERS) +#define CFG_SAP_MAX_NO_PEERS_DEFAULT (SIR_SAP_MAX_NUM_PEERS) /* * diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 253d5e52d9cc..6342ff1cee4f 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -59,6 +59,8 @@ typedef struct sAniSirGlobal *tpAniSirGlobal; #include #include "wlan_policy_mgr_api.h" +#define SIR_MAX_SUPPORTED_BSS 5 + #define OFFSET_OF(structType, fldName) (&((structType *)0)->fldName) /* / Max supported channel list */ @@ -130,6 +132,9 @@ typedef uint8_t tSirVersionString[SIR_VERSION_STRING_LEN]; /* Maximum peer station number query one time */ #define MAX_PEER_STA 12 +/* Maximum number of peers for SAP */ +#define SIR_SAP_MAX_NUM_PEERS 32 + /** * enum sir_conn_update_reason: Reason for conc connection update * @SIR_UPDATE_REASON_SET_OPER_CHAN: Set probable operating channel diff --git a/core/mac/src/pe/lim/lim_session.c b/core/mac/src/pe/lim/lim_session.c index f8317fcc1da4..79fe6723efa7 100644 --- a/core/mac/src/pe/lim/lim_session.c +++ b/core/mac/src/pe/lim/lim_session.c @@ -47,6 +47,10 @@ #include "sch_api.h" #include "lim_send_messages.h" + +static struct sDphHashNode + g_dph_node_array[SIR_MAX_SUPPORTED_BSS][SIR_SAP_MAX_NUM_PEERS + 1]; + /*-------------------------------------------------------------------------- \brief pe_init_beacon_params() - Initialize the beaconParams structure @@ -427,17 +431,7 @@ pe_create_session(tpAniSirGlobal pMac, uint8_t *bssid, uint8_t *sessionId, return NULL; } - session_ptr->dph.dphHashTable.pDphNodeArray = - qdf_mem_malloc(sizeof(tDphHashNode) * (numSta + 1)); - if (NULL == session_ptr->dph.dphHashTable.pDphNodeArray) { - pe_err("memory allocate failed!"); - qdf_mem_free(session_ptr->dph.dphHashTable.pHashTable); - session_ptr->dph.dphHashTable. - pHashTable = NULL; - return NULL; - } - - + session_ptr->dph.dphHashTable.pDphNodeArray = g_dph_node_array[i]; session_ptr->dph.dphHashTable.size = numSta + 1; dph_hash_table_class_init(pMac, &session_ptr->dph.dphHashTable); session_ptr->gpLimPeerIdxpool = qdf_mem_malloc( @@ -446,7 +440,9 @@ pe_create_session(tpAniSirGlobal pMac, uint8_t *bssid, uint8_t *sessionId, if (NULL == session_ptr->gpLimPeerIdxpool) { pe_err("memory allocate failed!"); qdf_mem_free(session_ptr->dph.dphHashTable.pHashTable); - qdf_mem_free(session_ptr->dph.dphHashTable.pDphNodeArray); + qdf_mem_zero(session_ptr->dph.dphHashTable.pDphNodeArray, + sizeof(struct sDphHashNode) * + (SIR_SAP_MAX_NUM_PEERS + 1)); session_ptr->dph.dphHashTable.pHashTable = NULL; session_ptr->dph.dphHashTable.pDphNodeArray = NULL; return NULL; @@ -501,7 +497,10 @@ pe_create_session(tpAniSirGlobal pMac, uint8_t *bssid, uint8_t *sessionId, || (NULL == session_ptr->pSchBeaconFrameEnd)) { pe_err("memory allocate failed!"); qdf_mem_free(session_ptr->dph.dphHashTable.pHashTable); - qdf_mem_free(session_ptr->dph.dphHashTable.pDphNodeArray); + qdf_mem_zero( + session_ptr->dph.dphHashTable.pDphNodeArray, + sizeof(struct sDphHashNode) * + (SIR_SAP_MAX_NUM_PEERS + 1)); qdf_mem_free(session_ptr->gpLimPeerIdxpool); qdf_mem_free(session_ptr->pSchProbeRspTemplate); qdf_mem_free(session_ptr->pSchBeaconFrameBegin); @@ -737,7 +736,9 @@ void pe_delete_session(tpAniSirGlobal mac_ctx, tpPESession session) } if (session->dph.dphHashTable.pDphNodeArray != NULL) { - qdf_mem_free(session->dph.dphHashTable.pDphNodeArray); + qdf_mem_zero(session->dph.dphHashTable.pDphNodeArray, + sizeof(struct sDphHashNode) * + (SIR_SAP_MAX_NUM_PEERS + 1)); session->dph.dphHashTable.pDphNodeArray = NULL; } diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index 8d179fd2abe9..8b7babbe5438 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -53,7 +53,7 @@ /* session ID invalid */ #define CSR_SESSION_ID_INVALID 0xFF /* No of sessions to be supported, and a session is for Infra, IBSS or BT-AMP */ -#define CSR_ROAM_SESSION_MAX 5 +#define CSR_ROAM_SESSION_MAX SIR_MAX_SUPPORTED_BSS #define CSR_IS_SESSION_VALID(pMac, sessionId) \ (((sessionId) < CSR_ROAM_SESSION_MAX) && \ ((pMac)->roam.roamSession[(sessionId)].sessionActive)) diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 87126c4199b1..9552d7dbf570 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -88,7 +88,7 @@ #else #define WMA_MAX_SUPPORTED_STAS 12 #endif -#define WMA_MAX_SUPPORTED_BSS 5 +#define WMA_MAX_SUPPORTED_BSS SIR_MAX_SUPPORTED_BSS #define WMA_MAX_MGMT_MPDU_LEN 2000