diff --git a/umac/cmn_services/inc/wlan_cmn.h b/umac/cmn_services/inc/wlan_cmn.h index f9eda3e112b5..d54e01e00536 100644 --- a/umac/cmn_services/inc/wlan_cmn.h +++ b/umac/cmn_services/inc/wlan_cmn.h @@ -52,7 +52,6 @@ /* Invalid free descriptor count */ #define WLAN_INVALID_MGMT_DESC_COUNT 0xFFFFFFFF -/* 802.11 cap info */ /* 802.11 cap info */ #define WLAN_CAPINFO_ESS 0x0001 #define WLAN_CAPINFO_IBSS 0x0002 @@ -71,11 +70,11 @@ /* Allowed time to wait for Object creation */ #define WLAN_VDEV_CREATE_TIMEOUT_CNT 300 - /* 25 msec */ +/* 25 msec */ #define WLAN_VDEV_CREATE_TIMEOUT 25 #define WLAN_PDEV_CREATE_TIMEOUT_CNT 300 - /* 25 msec */ +/* 25 msec */ #define WLAN_PDEV_CREATE_TIMEOUT 25 #define WLAN_PSOC_CREATE_TIMEOUT_CNT 300 @@ -97,6 +96,122 @@ #define WLAN_MAC_EID_VENDOR 221 #define WLAN_MAC_EID_EXT 255 +/* VHT capability flags */ +/* B0-B1 Maximum MPDU Length */ +/* A-MSDU Length 3839 octets */ +#define WLAN_VHTCAP_MAX_MPDU_LEN_3839 0x00000000 + /* A-MSDU Length 7991 octets */ +#define WLAN_VHTCAP_MAX_MPDU_LEN_7935 0x00000001 +/* A-MSDU Length 11454 octets */ +#define WLAN_VHTCAP_MAX_MPDU_LEN_11454 0x00000002 + +/* B2-B3 Supported Channel Width */ +/* Does not support 160 or 80+80 */ +#define WLAN_VHTCAP_SUP_CHAN_WIDTH_80 0x00000000 +/* Supports 160 */ +#define WLAN_VHTCAP_SUP_CHAN_WIDTH_160 0x00000004 +/* Support both 160 or 80+80 */ +#define WLAN_VHTCAP_SUP_CHAN_WIDTH_80_160 0x00000008 +/* B2-B3 */ +#define WLAN_VHTCAP_SUP_CHAN_WIDTH_S 2 +#define WLAN_VHTCAP_SUP_CHAN_WIDTH_MASK 0x0000000C +/* B4 RX LDPC */ +#define WLAN_VHTCAP_RX_LDPC 0x00000010 +/* B5 Short GI for 80MHz */ +#define WLAN_VHTCAP_SHORTGI_80 0x00000020 +/* B6 Short GI for 160 and 80+80 MHz */ +#define WLAN_VHTCAP_SHORTGI_160 0x00000040 +/* B7 Tx STBC */ +#define WLAN_VHTCAP_TX_STBC 0x00000080 +#define WLAN_VHTCAP_TX_STBC_S 7 +/* B8-B10 Rx STBC */ +#define WLAN_VHTCAP_RX_STBC 0x00000700 +#define WLAN_VHTCAP_RX_STBC_S 8 +/* B11 SU Beam former capable */ +#define WLAN_VHTCAP_SU_BFORMER 0x00000800 +#define WLAN_VHTCAP_SU_BFORMER_S 11 +/* B12 SU Beam formee capable */ +#define WLAN_VHTCAP_SU_BFORMEE 0x00001000 +#define WLAN_VHTCAP_SU_BFORMEE_S 12 + +/* B13-B15 Compressed steering number of beacomformer Antennas supported */ +#define WLAN_VHTCAP_BF_MAX_ANT 0x0000E000 +#define WLAN_VHTCAP_BF_MAX_ANT_S 13 +/* B13-B15 Beamformee STS Capability */ +#define WLAN_VHTCAP_STS_CAP_S 13 +#define WLAN_VHTCAP_STS_CAP_M 0x7 + +/* B16-B18 Sounding Dimensions */ +#define WLAN_VHTCAP_SOUND_DIM 0x00070000 +#define WLAN_VHTCAP_SOUND_DIM_S 16 +/* B19 MU Beam Former */ +#define WLAN_VHTCAP_MU_BFORMER 0x00080000 +#define WLAN_VHTCAP_MU_BFORMER_S 19 +/* B20 MU Beam Formee */ +#define WLAN_VHTCAP_MU_BFORMEE 0x00100000 +#define WLAN_VHTCAP_MU_BFORMEE_S 20 +/* B21 VHT TXOP PS */ +#define WLAN_VHTCAP_TXOP_PS 0x00200000 +/* B22 +HTC-VHT capable */ +#define WLAN_VHTCAP_PLUS_HTC_VHT 0x00400000 + +#define WLAN_VHTCAP_MAX_AMPDU_LEN_FACTOR 13 +/* B23-B25 maximum AMPDU Length Exponent */ +#define WLAN_VHTCAP_MAX_AMPDU_LEN_EXP 0x03800000 +#define WLAN_VHTCAP_MAX_AMPDU_LEN_EXP_S 23 +/* B26-B27 VHT Link Adaptation capable */ +#define WLAN_VHTCAP_LINK_ADAPT 0x0C000000 +/* Rx Antenna Pattern Consistency Supported */ +#define WLAN_VHTCAP_RX_ANTENNA_PATTERN 0x10000000 +/* Tx Antenna Pattern Consistency Supported */ +#define WLAN_VHTCAP_TX_ANTENNA_PATTERN 0x20000000 +/* B30-B31 Extended NSS Bandwidth Support */ +#define WLAN_VHTCAP_NO_EXT_NSS_BW_SUPPORT 0x00000000 +/* B30-B31 Extended NSS Bandwidth Support */ +#define WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_1 0x40000000 +/* B30-B31 Extended NSS Bandwidth Support */ +#define WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_2 0x80000000 +/* B30-B31 Extended NSS Bandwidth Support */ +#define WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_3 0xC0000000 +#define WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_S 30 +#define WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_MASK 0xC0000000 + +#define WLAN_VHTCAP_EXT_NSS_MASK (WLAN_VHTCAP_SUP_CHAN_WIDTH_MASK |\ + WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_MASK) +/* VHTCAP combinations of "supported channel width" and "ext nss support" + * which determine the NSS value supported by STA for <=80 MHz, 160 MHz + * and 80+80 MHz. The macros to be read as combination of + * "supported channel width" and "ext nss support" followed by NSS for 80MHz, + * 160MHz and 80+80MHz defined as a function of Max VHT NSS supported. + * Ex: WLAN_EXTNSS_MAP_01_80F1_160FDOT5_80P80NONE - To be reas as + * supported channel width = 0 + * ext nss support = 1 + * NSS value for <=80MHz = max_vht_nss * 1 + * NSS value for 160MHz = max_vht_nss * (.5) + * NSS value for 80+80MHz = not supported + */ +#define WLAN_EXTNSS_MAP_00_80F1_160NONE_80P80NONE \ + (WLAN_VHTCAP_SUP_CHAN_WIDTH_80 | WLAN_VHTCAP_NO_EXT_NSS_BW_SUPPORT) +#define WLAN_EXTNSS_MAP_01_80F1_160FDOT5_80P80NONE \ + (WLAN_VHTCAP_SUP_CHAN_WIDTH_80 | WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_1) +#define WLAN_EXTNSS_MAP_02_80F1_160FDOT5_80P80FDOT5 \ + (WLAN_VHTCAP_SUP_CHAN_WIDTH_80 | WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_2) +#define WLAN_EXTNSS_MAP_03_80F1_160FDOT75_80P80FDOT75 \ + (WLAN_VHTCAP_SUP_CHAN_WIDTH_80 | WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_3) +#define WLAN_EXTNSS_MAP_10_80F1_160F1_80P80NONE \ + (WLAN_VHTCAP_SUP_CHAN_WIDTH_160 | WLAN_VHTCAP_NO_EXT_NSS_BW_SUPPORT) +#define WLAN_EXTNSS_MAP_11_80F1_160F1_80P80FDOT5 \ + (WLAN_VHTCAP_SUP_CHAN_WIDTH_160 | WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_1) +#define WLAN_EXTNSS_MAP_12_80F1_160F1_80P80FDOT75 \ + (WLAN_VHTCAP_SUP_CHAN_WIDTH_160 | WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_2) +#define WLAN_EXTNSS_MAP_13_80F2_160F2_80P80F1 \ + (WLAN_VHTCAP_SUP_CHAN_WIDTH_160 | WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_3) +#define WLAN_EXTNSS_MAP_20_80F1_160F1_80P80F1 \ + (WLAN_VHTCAP_SUP_CHAN_WIDTH_80_160 | WLAN_VHTCAP_NO_EXT_NSS_BW_SUPPORT) +#define WLAN_EXTNSS_MAP_23_80F2_160F1_80P80F1 \ + (WLAN_VHTCAP_SUP_CHAN_WIDTH_80_160 | WLAN_VHTCAP_EXT_NSS_BW_SUPPORT_3) + + /** * enum wlan_umac_comp_id - UMAC component id * @WLAN_UMAC_COMP_MLME: MLME @@ -406,4 +521,13 @@ struct wlan_ssid { /* Util API to compare the MAC address */ #define WLAN_ADDR_EQ(a1, a2) qdf_mem_cmp(a1, a2, WLAN_MACADDR_LEN) +#define PSOC_SERVICE_BM_SIZE ((128 + sizeof(uint32_t) - 1) / sizeof(uint32_t)) +#define PSOC_HOST_MAX_NUM_SS (8) +#define PSOC_HOST_MAX_PHY_SIZE (3) +#define PSOC_MAX_HW_MODE (2) +#define PSOC_MAX_MAC_PHY_CAP (5) +#define PSOC_MAX_PHY_REG_CAP (3) +#define PSOC_MAX_CHAINMASK_TABLES (5) + + #endif /* _WLAN_OBJMGR_CMN_H_*/ diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h index 992e95ab48aa..4c87d8733f30 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h @@ -212,6 +212,7 @@ typedef void (*wlan_objmgr_peer_status_handler)( * @WLAN_FD_ID: FILS Discovery * @WLAN_OCB_NB_ID: OCB Northbound operations * @WLAN_OCB_SB_ID: OCB Southbound operations + * @WLAN_INIT_DEINIT_ID: Init deinit module * @WLAN_REF_ID_MAX: Max id used to generate ref count tracking array */ /* New value added to the enum must also be reflected in function @@ -254,6 +255,7 @@ typedef enum { WLAN_FD_ID = 33, WLAN_OCB_NB_ID = 34, WLAN_OCB_SB_ID = 35, + WLAN_INIT_DEINIT_ID = 36, WLAN_REF_ID_MAX, } wlan_objmgr_ref_dbgid; @@ -301,6 +303,9 @@ static inline char *string_from_dbgid(wlan_objmgr_ref_dbgid id) "WLAN_DISA_ID", "WLAN_FTM_ID", "WLAN_FD_ID", + "WLAN_OCB_NB_ID", + "WLAN_OCB_SB_ID", + "WLAN_INIT_DEINIT_ID", "WLAN_REF_ID_MAX" }; return (char *)strings[id]; diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h index 94f7f1bab58c..ab9a01109e52 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h @@ -120,12 +120,14 @@ struct osif_pdev_priv; * @pdev_fw_caps: radio specific FW capabilities * @pdev_feature_caps: radio specific feature capabilities * @pdev_ospriv: OS specific pointer + * @macaddr[]: MAC address * @notified_ap_vdev: ap vdev */ struct wlan_objmgr_pdev_nif { uint32_t pdev_fw_caps; uint32_t pdev_feature_caps; struct pdev_osif_priv *pdev_ospriv; + uint8_t macaddr[WLAN_MACADDR_LEN]; uint8_t notified_ap_vdev; }; @@ -576,10 +578,11 @@ static inline uint8_t wlan_pdev_nif_feat_cap_get(struct wlan_objmgr_pdev *pdev, */ static inline uint8_t *wlan_pdev_get_hw_macaddr(struct wlan_objmgr_pdev *pdev) { - struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev); + if (!pdev) + return NULL; /* This API is invoked with lock acquired, do not add log prints */ - return wlan_psoc_get_hw_macaddr(psoc); + return pdev->pdev_nif.macaddr; } /** @@ -596,11 +599,8 @@ static inline uint8_t *wlan_pdev_get_hw_macaddr(struct wlan_objmgr_pdev *pdev) static inline void wlan_pdev_set_hw_macaddr(struct wlan_objmgr_pdev *pdev, uint8_t *macaddr) { - struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev); - /* This API is invoked with lock acquired, do not add log prints */ - if (psoc != NULL) - wlan_psoc_set_hw_macaddr(psoc, macaddr); + WLAN_ADDR_COPY(pdev->pdev_nif.macaddr, macaddr); } /** diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h index 09695cb9413b..dcd16bd0abef 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h @@ -22,7 +22,6 @@ #ifndef _WLAN_OBJMGR_PSOC_OBJ_H_ #define _WLAN_OBJMGR_PSOC_OBJ_H_ -#include "wlan_objmgr_psoc_service_ready_api.h" #include "wlan_objmgr_cmn.h" #include "wlan_lmac_if_def.h" @@ -109,6 +108,18 @@ #define WLAN_SOC_CEXT_ACS_CHAN_HOP 0x00000020 /* CAPABILITY: the device support STA DFS */ #define WLAN_SOC_CEXT_STADFS 0x00000040 + /* NSS offload capability */ +#define WLAN_SOC_CEXT_NSS_OFFLOAD 0x00000080 + /* SW cal support capability */ +#define WLAN_SOC_CEXT_SW_CAL 0x00000100 + /* Hybrid mode */ +#define WLAN_SOC_CEXT_HYBRID_MODE 0x00000200 + /* TT support */ +#define WLAN_SOC_CEXT_TT_SUPPORT 0x00000400 + /* WMI MGMT REF */ +#define WLAN_SOC_CEXT_WMI_MGMT_REF 0x00000800 + /* Wideband scan */ +#define WLAN_SOC_CEXT_WIDEBAND_SCAN 0x00001000 /* feature_flags */ /* CONF: ATH FF enabled */ @@ -151,7 +162,21 @@ #define WLAN_SOC_F_PWRCNSTRIE 0x00010000 /* STATUS: 11D in used */ #define WLAN_SOC_F_DOT11D 0x00020000 + /* Beacon offload */ +#define WLAN_SOC_F_BCN_OFFLOAD 0x00040000 + /* QWRAP enable */ +#define WLAN_SOC_F_QWRAP_ENABLE 0x00080000 + /* LTEU support */ +#define WLAN_SOC_F_LTEU_SUPPORT 0x00100000 + /* BT coext support */ +#define WLAN_SOC_F_BTCOEX_SUPPORT 0x00200000 + /* HOST 80211 enable*/ +#define WLAN_SOC_F_HOST_80211_ENABLE 0x00400000 +/* PSOC op flags */ + + /* Invalid VHT cap */ +#define WLAN_SOC_OP_VHT_INVALID_CAP 0x00000001 /** * struct wlan_objmgr_psoc_regulatory - Regulatory sub structure of PSOC * @country_code: Country code @@ -196,6 +221,7 @@ struct wlan_objmgr_psoc_user_config { * @soc_fw_caps: FW capabilities * @soc_fw_ext_caps: FW ext capabilities * @soc_feature_caps:Feature capabilities + * @soc_op_flags: Flags to set/reset during operation * @soc_hw_macaddr[]:HW MAC address * @user_config: user config from OS layer */ @@ -205,6 +231,7 @@ struct wlan_objmgr_psoc_nif { uint32_t soc_fw_caps; uint32_t soc_fw_ext_caps; uint32_t soc_feature_caps; + uint32_t soc_op_flags; uint8_t soc_hw_macaddr[WLAN_MACADDR_LEN]; struct wlan_objmgr_psoc_user_config user_config; }; @@ -220,6 +247,7 @@ struct wlan_objmgr_psoc_nif { * @wlan_vdev_list[]: VDEV list * @wlan_vdev_id_map[]: VDEV id map, to allocate free ids * @wlan_peer_count: PEER count + * @max_peer_count: Max no. of peers supported by this PSOC * @peer_list: Peer list * @ref_cnt: Ref count * @ref_id_dbg: Array to track Ref count @@ -236,6 +264,7 @@ struct wlan_objmgr_psoc_objmgr { struct wlan_objmgr_vdev *wlan_vdev_list[WLAN_UMAC_PSOC_MAX_VDEVS]; uint32_t wlan_vdev_id_map[2]; uint16_t wlan_peer_count; + uint16_t max_peer_count; struct wlan_peer_list peer_list; qdf_atomic_t ref_cnt; qdf_atomic_t ref_id_dbg[WLAN_REF_ID_MAX]; @@ -280,10 +309,6 @@ struct wlan_soc_timer { * @obj_status[]: component object status * @obj_state: object state * @tgt_if_handle: target interface handle - * For OL based target it points to wmi handle - * @total_mac_phy: number of mac/phy supported by HW - * @service_param: FW service capability info - * @ext_service_param: extended FW service capability info * @dp_handle: DP module handle * @psoc_lock: psoc lock */ @@ -299,13 +324,37 @@ struct wlan_objmgr_psoc { QDF_STATUS obj_status[WLAN_UMAC_MAX_COMPONENTS]; WLAN_OBJ_STATE obj_state; void *tgt_if_handle; - uint8_t total_mac_phy; - struct wlan_objmgr_psoc_service_ready_param service_param; - struct wlan_objmgr_psoc_ext_service_ready_param ext_service_param; void *dp_handle; qdf_spinlock_t psoc_lock; }; +/** + * struct wlan_psoc_host_hal_reg_capabilities_ext: Below are Reg caps per PHY. + * Please note PHY ID starts with 0. + * @phy_id: phy id starts with 0. + * @eeprom_reg_domain: regdomain value specified in EEPROM + * @eeprom_reg_domain_ext: regdomain + * @regcap1: CAP1 capabilities bit map, see REGDMN_CAP1_ defines + * @regcap2: REGDMN EEPROM CAP, see REGDMN_EEPROM_EEREGCAP_ defines + * @wireless_modes: REGDMN MODE, see REGDMN_MODE_ enum + * @low_2ghz_chan: 2G channel low + * @high_2ghz_chan: 2G channel High + * @low_5ghz_chan: 5G channel low + * @high_5ghz_chan: 5G channel High + */ +struct wlan_psoc_host_hal_reg_capabilities_ext { + uint32_t phy_id; + uint32_t eeprom_reg_domain; + uint32_t eeprom_reg_domain_ext; + uint32_t regcap1; + uint32_t regcap2; + uint32_t wireless_modes; + uint32_t low_2ghz_chan; + uint32_t high_2ghz_chan; + uint32_t low_5ghz_chan; + uint32_t high_5ghz_chan; +}; + /** ** APIs to Create/Delete Global object APIs */ @@ -1016,11 +1065,56 @@ static inline void wlan_psoc_nif_feat_cap_clear(struct wlan_objmgr_psoc *psoc, * Return: 1 (for set) or 0 (for not set) */ static inline uint8_t wlan_psoc_nif_feat_cap_get(struct wlan_objmgr_psoc *psoc, - uint32_t feat_cap) + uint32_t feat_cap) { return (psoc->soc_nif.soc_feature_caps & feat_cap) ? 1 : 0; } +/** + * wlan_psoc_nif_op_flag_get() - get op flags + * @psoc: PSOC object + * @flag: op flag to be checked + * + * API to know, whether particular op flag is set in psoc + * + * Return: 1 (for set) or 0 (for not set) + */ +static inline uint8_t wlan_psoc_nif_op_flag_get(struct wlan_objmgr_psoc *psoc, + uint32_t flag) +{ + return (psoc->soc_nif.soc_op_flags & flag) ? 1 : 0; +} + +/** + * wlan_psoc_nif_op_flag_set() - set op flag + * @psoc: PSOC object + * @flag: op flag to be set + * + * API to set op flag in psoc + * + * Return: void + */ +static inline void wlan_psoc_nif_op_flag_set(struct wlan_objmgr_psoc *psoc, + uint32_t flag) +{ + psoc->soc_nif.soc_op_flags |= flag; +} + +/** + * wlan_psoc_nif_op_flag_clear() - clear op flag + * @psoc: PSOC object + * @flag: op flag to be cleared + * + * API to clear op flag in psoc + * + * Return: void + */ +static inline void wlan_psoc_nif_op_flag_clear(struct wlan_objmgr_psoc *psoc, + uint32_t flag) +{ + psoc->soc_nif.soc_op_flags &= ~flag; +} + /** * wlan_psoc_set_hw_macaddr() - set hw mac addr * @psoc: PSOC object @@ -1154,6 +1248,64 @@ static inline void wlan_psoc_set_qdf_dev( psoc->soc_objmgr.qdf_dev = dev; } +/** + * wlan_psoc_set_max_vdev_count() - set psoc max vdev count + * @psoc: PSOC object + * @vdev count: Max vdev count + * + * API to set Max vdev count + * + * Return: void + */ +static inline void wlan_psoc_set_max_vdev_count(struct wlan_objmgr_psoc *psoc, + uint8_t max_vdev_count) +{ + psoc->soc_objmgr.max_vdev_count = max_vdev_count; +} + +/** + * wlan_psoc_get_max_vdev_count() - get psoc max vdev count + * @psoc: PSOC object + * + * API to set Max vdev count + * + * Return: @vdev count: Max vdev count + */ +static inline uint8_t wlan_psoc_get_max_vdev_count( + struct wlan_objmgr_psoc *psoc) +{ + return psoc->soc_objmgr.max_vdev_count; +} + +/** + * wlan_psoc_set_max_peer_count() - set psoc max peer count + * @psoc: PSOC object + * @peer count: Max peer count + * + * API to set Max peer count + * + * Return: void + */ +static inline void wlan_psoc_set_max_peer_count(struct wlan_objmgr_psoc *psoc, + uint16_t max_peer_count) +{ + psoc->soc_objmgr.max_peer_count = max_peer_count; +} + +/** + * wlan_psoc_get_max_peer_count() - get psoc max peer count + * @psoc: PSOC object + * + * API to set Max peer count + * + * Return: @peer count: Max peer count + */ +static inline uint16_t wlan_psoc_get_max_peer_count( + struct wlan_objmgr_psoc *psoc) +{ + return psoc->soc_objmgr.max_peer_count; +} + /** * DOC: Examples to use PSOC ref count APIs * diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c index 7fb6d64de635..3df88cacbee3 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c @@ -128,7 +128,7 @@ struct wlan_objmgr_pdev *wlan_objmgr_pdev_obj_create( pdev->pdev_objmgr.wlan_vdev_count = 0; pdev->pdev_objmgr.max_vdev_count = WLAN_UMAC_PDEV_MAX_VDEVS; pdev->pdev_objmgr.wlan_peer_count = 0; - pdev->pdev_objmgr.max_peer_count = WLAN_UMAC_PSOC_MAX_PEERS; + pdev->pdev_objmgr.max_peer_count = wlan_psoc_get_max_peer_count(psoc); /* Save HDD/OSIF pointer */ pdev->pdev_nif.pdev_ospriv = osdev_priv; qdf_atomic_init(&pdev->pdev_objmgr.ref_cnt); diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c index d52d74c1e6ad..11dc11a4bb1e 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c @@ -57,6 +57,7 @@ static QDF_STATUS wlan_objmgr_peer_object_status( failure, complete object need to be cleaned up */ } else if ((peer->obj_status[id] == QDF_STATUS_E_NOMEM) || (peer->obj_status[id] == QDF_STATUS_E_FAILURE)) { + obj_mgr_err("Peer comp object(id:%d) alloc fail", id); status = QDF_STATUS_E_FAILURE; break; } diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c index 363407f08290..fa654ba7a5fb 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c @@ -90,16 +90,12 @@ static void wlan_objmgr_psoc_peer_list_deinit(struct wlan_peer_list *peer_list) static QDF_STATUS wlan_objmgr_psoc_obj_free(struct wlan_objmgr_psoc *psoc) { - struct wlan_psoc_host_service_ext_param *ext_param = - &(psoc->ext_service_param.service_ext_param); - /* Detach PSOC from global object's psoc list */ if (wlan_objmgr_psoc_object_detach(psoc) == QDF_STATUS_E_FAILURE) { obj_mgr_err("PSOC object detach failed"); return QDF_STATUS_E_FAILURE; } wlan_objmgr_psoc_peer_list_deinit(&psoc->soc_objmgr.peer_list); - wlan_objmgr_ext_service_ready_chainmask_table_free(ext_param); qdf_spinlock_destroy(&psoc->psoc_lock); qdf_mem_free(psoc); @@ -131,6 +127,7 @@ struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version, objmgr->wlan_vdev_count = 0; objmgr->max_vdev_count = WLAN_UMAC_PSOC_MAX_VDEVS; objmgr->wlan_peer_count = 0; + objmgr->max_peer_count = WLAN_UMAC_PSOC_MAX_PEERS; qdf_atomic_init(&objmgr->ref_cnt); objmgr->print_cnt = 0; /* set phy version, dev_type in psoc */ @@ -417,6 +414,7 @@ QDF_STATUS wlan_objmgr_iterate_obj_list( struct wlan_objmgr_vdev *vdev; struct wlan_objmgr_peer *peer; struct wlan_objmgr_peer *peer_next; + uint16_t max_vdev_cnt; /* If caller requests for lock free opeation, do not acquire, * handler will handle the synchronization @@ -439,7 +437,8 @@ QDF_STATUS wlan_objmgr_iterate_obj_list( break; case WLAN_VDEV_OP: /* Iterate through VDEV list, invoke handler for each vdev */ - for (obj_id = 0; obj_id < WLAN_UMAC_PSOC_MAX_VDEVS; obj_id++) { + max_vdev_cnt = wlan_psoc_get_max_vdev_count(psoc); + for (obj_id = 0; obj_id < max_vdev_cnt; obj_id++) { vdev = objmgr->wlan_vdev_list[obj_id]; if ((vdev != NULL) && (wlan_objmgr_vdev_try_get_ref(vdev, dbg_id) == @@ -501,6 +500,7 @@ QDF_STATUS wlan_objmgr_iterate_obj_list_all( struct wlan_objmgr_vdev *vdev; struct wlan_objmgr_peer *peer; struct wlan_objmgr_peer *peer_next; + uint16_t max_vdev_cnt; /* If caller requests for lock free opeation, do not acquire, * handler will handle the synchronization @@ -522,7 +522,8 @@ QDF_STATUS wlan_objmgr_iterate_obj_list_all( break; case WLAN_VDEV_OP: /* Iterate through VDEV list, invoke handler for each vdev */ - for (obj_id = 0; obj_id < WLAN_UMAC_PSOC_MAX_VDEVS; obj_id++) { + max_vdev_cnt = wlan_psoc_get_max_vdev_count(psoc); + for (obj_id = 0; obj_id < max_vdev_cnt; obj_id++) { vdev = objmgr->wlan_vdev_list[obj_id]; if (vdev != NULL) { wlan_objmgr_vdev_get_ref(vdev, dbg_id); @@ -850,7 +851,7 @@ QDF_STATUS wlan_objmgr_psoc_vdev_detach(struct wlan_objmgr_psoc *psoc, id = vdev->vdev_objmgr.vdev_id; /* Invalid vdev id */ - if (id >= WLAN_UMAC_PSOC_MAX_VDEVS) + if (id >= wlan_psoc_get_max_vdev_count(psoc)) return QDF_STATUS_E_FAILURE; /* * Derive map_index and adjust_ix to find actual DWORD @@ -881,6 +882,7 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_opmode_from_psoc( { struct wlan_objmgr_vdev *vdev = NULL; int vdev_cnt = 0; + uint16_t max_vdev_cnt; /* if PSOC is NULL, return */ if (psoc == NULL) @@ -888,8 +890,9 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_opmode_from_psoc( wlan_psoc_obj_lock(psoc); + max_vdev_cnt = wlan_psoc_get_max_vdev_count(psoc); /* retrieve vdev pointer from vdev list */ - while (vdev_cnt < WLAN_UMAC_PSOC_MAX_VDEVS) { + while (vdev_cnt < max_vdev_cnt) { vdev = psoc->soc_objmgr.wlan_vdev_list[vdev_cnt]; vdev_cnt++; if (vdev == NULL) @@ -921,7 +924,7 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc( if (psoc == NULL) return NULL; /* vdev id is invalid */ - if (vdev_id >= WLAN_UMAC_PSOC_MAX_VDEVS) + if (vdev_id >= wlan_psoc_get_max_vdev_count(psoc)) return NULL; wlan_psoc_obj_lock(psoc); @@ -948,7 +951,7 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_no_state( if (psoc == NULL) return NULL; /* vdev id is invalid */ - if (vdev_id >= WLAN_UMAC_PSOC_MAX_VDEVS) + if (vdev_id >= wlan_psoc_get_max_vdev_count(psoc)) return NULL; wlan_psoc_obj_lock(psoc); @@ -969,14 +972,16 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc( { struct wlan_objmgr_vdev *vdev; uint8_t id; + uint16_t max_vdev_cnt; /* if PSOC is NULL, return */ if (psoc == NULL) return NULL; wlan_psoc_obj_lock(psoc); + max_vdev_cnt = wlan_psoc_get_max_vdev_count(psoc); /* Iterate through PSOC's vdev list */ - for (id = 0; id < WLAN_UMAC_PSOC_MAX_VDEVS; id++) { + for (id = 0; id < max_vdev_cnt; id++) { vdev = psoc->soc_objmgr.wlan_vdev_list[id]; if (vdev == NULL) continue; @@ -1004,14 +1009,16 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state( { struct wlan_objmgr_vdev *vdev; uint8_t id; + uint16_t max_vdev_cnt; /* if PSOC is NULL, return */ if (psoc == NULL) return NULL; wlan_psoc_obj_lock(psoc); + max_vdev_cnt = wlan_psoc_get_max_vdev_count(psoc); /* Iterate through PSOC's vdev list */ - for (id = 0; id < WLAN_UMAC_PSOC_MAX_VDEVS; id++) { + for (id = 0; id < max_vdev_cnt; id++) { vdev = psoc->soc_objmgr.wlan_vdev_list[id]; if (vdev == NULL) continue; @@ -1367,7 +1374,7 @@ QDF_STATUS wlan_objmgr_psoc_peer_attach(struct wlan_objmgr_psoc *psoc, wlan_psoc_obj_lock(psoc); objmgr = &psoc->soc_objmgr; /* Max peer limit is reached, return failure */ - if (objmgr->wlan_peer_count >= WLAN_UMAC_PSOC_MAX_PEERS) { + if (objmgr->wlan_peer_count >= wlan_psoc_get_max_peer_count(psoc)) { wlan_psoc_obj_unlock(psoc); return QDF_STATUS_E_FAILURE; }