Loading Kbuild +2 −5 Original line number Diff line number Diff line Loading @@ -2629,6 +2629,7 @@ cppflags-$(CONFIG_HDD_INIT_WITH_RTNL_LOCK) += -DCONFIG_HDD_INIT_WITH_RTNL_LOCK cppflags-$(CONFIG_WLAN_CONV_SPECTRAL_ENABLE) += -DWLAN_CONV_SPECTRAL_ENABLE cppflags-$(CONFIG_WLAN_CFR_ENABLE) += -DWLAN_CFR_ENABLE cppflags-$(CONFIG_WLAN_ENH_CFR_ENABLE) += -DWLAN_ENH_CFR_ENABLE cppflags-$(CONFIG_WLAN_ENH_CFR_ENABLE) += -DWLAN_CFR_PM cppflags-$(CONFIG_WLAN_CFR_ENABLE) += -DCFR_USE_FIXED_FOLDER cppflags-$(CONFIG_DIRECT_BUF_RX_ENABLE) += -DDIRECT_BUF_RX_ENABLE cppflags-$(CONFIG_WMI_DBR_SUPPORT) += -DWMI_DBR_SUPPORT Loading Loading @@ -2690,7 +2691,7 @@ cppflags-$(CONFIG_WLAN_FEATURE_RX_SOFTIRQ_TIME_LIMIT) += -DWLAN_FEATURE_RX_SOFTI cppflags-$(CONFIG_FEATURE_HAL_DELAYED_REG_WRITE) += -DFEATURE_HAL_DELAYED_REG_WRITE cppflags-$(CONFIG_FEATURE_HAL_DELAYED_REG_WRITE_V2) += -DFEATURE_HAL_DELAYED_REG_WRITE_V2 cppflags-$(CONFIG_QCA_OL_DP_SRNG_LOCK_LESS_ACCESS) += -DQCA_OL_DP_SRNG_LOCK_LESS_ACCESS cppflags-$(CONFIG_SHADOW_WRITE_DELAY) += -DSHADOW_WRITE_DELAY cppflags-$(CONFIG_PLD_USB_CNSS) += -DCONFIG_PLD_USB_CNSS cppflags-$(CONFIG_PLD_SDIO_CNSS2) += -DCONFIG_PLD_SDIO_CNSS2 Loading Loading @@ -3314,10 +3315,6 @@ cppflags-y += -DSYSTEM_PM_CHECK cppflags-y += -DDISABLE_EAPOL_INTRABSS_FWD endif ifeq ($(CONFIG_TX_AGGREGATION_SIZE_ENABLE), y) cppflags-y += -DTX_AGGREGATION_SIZE_ENABLE endif # Enable Low latency optimisation mode cppflags-$(CONFIG_WLAN_FEATURE_LL_MODE) += -DWLAN_FEATURE_LL_MODE Loading components/cp_stats/dispatcher/inc/wlan_cp_stats_mc_ucfg_api.h +2 −2 Original line number Diff line number Diff line Loading @@ -55,9 +55,9 @@ * @params: array pointer to store peer twt session parameters, should contain * mac_addr and dialog id of a peer for which twt session stats to be retrieved * * Return: QDF_STATUS_SUCCESS upon success, else qdf error values * Return: total number of valid twt session */ QDF_STATUS int ucfg_twt_get_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, struct wmi_host_twt_session_stats_info *param); #endif /* WLAN_SUPPORT_TWT */ Loading components/cp_stats/dispatcher/src/wlan_cp_stats_mc_ucfg_api.c +106 −87 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ #ifdef WLAN_SUPPORT_TWT #include <wlan_mlme_twt_public_struct.h> #endif #include <wlan_mlme_api.h> #ifdef WLAN_SUPPORT_TWT Loading @@ -46,6 +47,7 @@ * @input_dialog_id: input dialog id * @dest_param: Pointer to copy twt session parameters when a peer with * given dialog id is found * @num_twt_session: Pointer holding total number of valid twt session * * Return: Success if stats are copied for a peer with given dialog, * else failure Loading @@ -54,11 +56,11 @@ static QDF_STATUS ucfg_twt_get_peer_session_param_by_dlg_id(struct peer_mc_cp_stats *mc_stats, uint32_t input_dialog_id, struct wmi_host_twt_session_stats_info *dest_param) *dest_param, int *num_twt_session) { struct wmi_host_twt_session_stats_info *src_param; uint32_t event_type; int i, num_session = 0; int i = 0; QDF_STATUS qdf_status = QDF_STATUS_E_INVAL; if (!mc_stats || !dest_param) Loading @@ -75,11 +77,11 @@ ucfg_twt_get_peer_session_param_by_dlg_id(struct peer_mc_cp_stats *mc_stats, if ((event_type == HOST_TWT_SESSION_SETUP) || (event_type == HOST_TWT_SESSION_UPDATE)) { qdf_mem_copy(&dest_param[num_session], src_param, qdf_mem_copy(&dest_param[*num_twt_session], src_param, sizeof(*src_param)); qdf_status = QDF_STATUS_SUCCESS; num_session += 1; if (num_session >= TWT_PEER_MAX_SESSIONS) *num_twt_session += 1; if (*num_twt_session >= TWT_PEER_MAX_SESSIONS) break; } } Loading @@ -95,9 +97,9 @@ ucfg_twt_get_peer_session_param_by_dlg_id(struct peer_mc_cp_stats *mc_stats, * @dialog_id: dialog id of peer for which twt session params to be retrieved * @params: pointer to store peer twt session parameters * * Return: Retuns QDF_STATUS_SUCCESS upon success, else qdf error values * Return: total number of valid twt session */ static QDF_STATUS static int ucfg_twt_get_single_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, uint8_t *mac_addr, uint32_t dialog_id, struct wmi_host_twt_session_stats_info Loading @@ -107,27 +109,30 @@ ucfg_twt_get_single_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, struct peer_cp_stats *peer_cp_stats_priv; struct peer_mc_cp_stats *peer_mc_stats; QDF_STATUS qdf_status = QDF_STATUS_E_INVAL; int num_twt_session = 0; if (!psoc_obj || !params) return qdf_status; return num_twt_session; peer = wlan_objmgr_get_peer_by_mac(psoc_obj, mac_addr, WLAN_CP_STATS_ID); if (!peer) return qdf_status; return num_twt_session; peer_cp_stats_priv = wlan_cp_stats_get_peer_stats_obj(peer); if (!peer_cp_stats_priv) { wlan_objmgr_peer_release_ref(peer, WLAN_CP_STATS_ID); return qdf_status; return num_twt_session; } wlan_cp_stats_peer_obj_lock(peer_cp_stats_priv); peer_mc_stats = peer_cp_stats_priv->peer_stats; qdf_status = ucfg_twt_get_peer_session_param_by_dlg_id(peer_mc_stats, qdf_status = ucfg_twt_get_peer_session_param_by_dlg_id( peer_mc_stats, dialog_id, params); params, &num_twt_session); if (QDF_IS_STATUS_ERROR(qdf_status)) { qdf_err("No TWT session for " QDF_MAC_ADDR_FMT " dialog_id %d", QDF_MAC_ADDR_REF(mac_addr), dialog_id); Loading @@ -136,7 +141,7 @@ ucfg_twt_get_single_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, wlan_cp_stats_peer_obj_unlock(peer_cp_stats_priv); wlan_objmgr_peer_release_ref(peer, WLAN_CP_STATS_ID); return qdf_status; return num_twt_session; } /** Loading @@ -144,7 +149,7 @@ ucfg_twt_get_single_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, * a peer if twt session is valid * @mc_cp_stats: pointer to peer specific stats * @param: Pointer to copy twt session parameters * @num_twt_sessions: Pointer holding total number of valid twt sessions * @num_twt_sessions Pointer holding total number of valid twt sessions * * Return: QDF_STATUS success if valid twt session parameters are obtained * else other qdf error values Loading @@ -152,7 +157,7 @@ ucfg_twt_get_single_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, static QDF_STATUS ucfg_twt_get_peer_session_param(struct peer_mc_cp_stats *mc_cp_stats, struct wmi_host_twt_session_stats_info *params, int *num_twt_sessions) int *num_twt_session) { struct wmi_host_twt_session_stats_info *twt_params; QDF_STATUS qdf_status = QDF_STATUS_E_INVAL; Loading @@ -169,12 +174,10 @@ ucfg_twt_get_peer_session_param(struct peer_mc_cp_stats *mc_cp_stats, /* Check twt session is established */ if ((event_type == HOST_TWT_SESSION_SETUP) || (event_type == HOST_TWT_SESSION_UPDATE)) { qdf_mem_copy(¶ms[*num_twt_sessions], twt_params, qdf_mem_copy(¶ms[*num_twt_session], twt_params, sizeof(*twt_params)); qdf_status = QDF_STATUS_SUCCESS; *num_twt_sessions += 1; if (*num_twt_sessions >= TWT_PSOC_MAX_SESSIONS) break; *num_twt_session += 1; } } return qdf_status; Loading @@ -184,96 +187,108 @@ ucfg_twt_get_peer_session_param(struct peer_mc_cp_stats *mc_cp_stats, * ucfg_twt_get_all_peer_session_params()- Retrieves twt session parameters * of all peers with valid twt session * @psoc_obj: psoc object * @vdvev_id: vdev_id * @params: array of pointer to store peer twt session parameters * * Return: Retuns QDF_STATUS_SUCCESS upon success, else qdf error values * Return: total number of valid twt sessions */ static QDF_STATUS static int ucfg_twt_get_all_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, uint8_t vdev_id, struct wmi_host_twt_session_stats_info *params) { struct wlan_objmgr_psoc_objmgr *psoc_objmgr; struct wlan_objmgr_peer *peer_obj; struct wlan_peer_list *peer_list; struct peer_cp_stats *cp_stats_peer_obj; qdf_list_t *peer_list; struct wlan_objmgr_peer *peer, *peer_next; struct wlan_objmgr_vdev *vdev; struct peer_cp_stats *cp_stats_peer_obj, *peer_cp_stat_prv; struct peer_mc_cp_stats *mc_cp_stats; struct peer_cp_stats *peer_cp_stat_prv; QDF_STATUS qdf_status = QDF_STATUS_E_INVAL; qdf_list_t *obj_list; int i, num_sessions = 0; int num_twt_session = 0; enum QDF_OPMODE opmode; int sap_max_peer; if (!psoc_obj || !params) return qdf_status; if (!psoc_obj) { cp_stats_err("psoc is NULL"); return num_twt_session; } /* psoc obj lock should be taken before peer list lock */ wlan_psoc_obj_lock(psoc_obj); psoc_objmgr = &psoc_obj->soc_objmgr; /* List is empty, return */ if (!psoc_objmgr->wlan_peer_count) { wlan_psoc_obj_unlock(psoc_obj); return qdf_status; vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc_obj, vdev_id, WLAN_CP_STATS_ID); if (!vdev) { cp_stats_err("vdev is NULL, vdev_id: %d", vdev_id); return num_twt_session; } wlan_mlme_get_sap_max_peers(psoc_obj, &sap_max_peer); opmode = wlan_vdev_mlme_get_opmode(vdev); peer_list = &vdev->vdev_objmgr.wlan_peer_list; if (!peer_list) { wlan_objmgr_vdev_release_ref(vdev, WLAN_CP_STATS_ID); cp_stats_err("Peer list for vdev obj is NULL"); return num_twt_session; } peer_list = &psoc_objmgr->peer_list; qdf_spin_lock_bh(&peer_list->peer_list_lock); peer = wlan_vdev_peer_list_peek_active_head(vdev, peer_list, WLAN_CP_STATS_ID); /* Iterate through peer_list to find a peer with valid twt sessions */ for (i = 0; i < WLAN_PEER_HASHSIZE; i++) { obj_list = &peer_list->peer_hash[i]; peer_obj = wlan_psoc_peer_list_peek_head(obj_list); while (peer_obj) { cp_stats_peer_obj = wlan_objmgr_peer_get_comp_private_obj (peer_obj, WLAN_UMAC_COMP_CP_STATS); while (peer) { cp_stats_peer_obj = wlan_objmgr_peer_get_comp_private_obj( peer, WLAN_UMAC_COMP_CP_STATS); mc_cp_stats = NULL; if (cp_stats_peer_obj) mc_cp_stats = cp_stats_peer_obj->peer_stats; peer_cp_stat_prv = wlan_cp_stats_get_peer_stats_obj(peer_obj); wlan_cp_stats_get_peer_stats_obj(peer); if (peer_cp_stat_prv && mc_cp_stats) { wlan_cp_stats_peer_obj_lock(peer_cp_stat_prv); ucfg_twt_get_peer_session_param(mc_cp_stats, params, &num_sessions); &num_twt_session); wlan_cp_stats_peer_obj_unlock(peer_cp_stat_prv); } if (num_sessions >= TWT_PSOC_MAX_SESSIONS) if (opmode == QDF_STA_MODE && num_twt_session >= TWT_PEER_MAX_SESSIONS) goto done; /* Get next peer */ peer_obj = wlan_peer_get_next_peer_of_psoc(obj_list, peer_obj); } if (opmode == QDF_SAP_MODE && num_twt_session >= (sap_max_peer * TWT_PEER_MAX_SESSIONS)) goto done; peer_next = wlan_peer_get_next_active_peer_of_vdev( vdev, peer_list, peer, WLAN_CP_STATS_ID); peer = peer_next; } done: /* If atleast one peer with valid twt session is found return success */ if (num_sessions) qdf_status = QDF_STATUS_SUCCESS; else qdf_err("Unable to find a peer with twt session established"); if (!num_twt_session) cp_stats_err("Unable to find a peer with twt session established"); qdf_spin_unlock_bh(&peer_list->peer_list_lock); wlan_psoc_obj_unlock(psoc_obj); return qdf_status; wlan_objmgr_vdev_release_ref(vdev, WLAN_CP_STATS_ID); return num_twt_session; } QDF_STATUS int ucfg_twt_get_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, struct wmi_host_twt_session_stats_info *params) { uint8_t *mac_addr; uint32_t dialog_id; uint8_t vdev_id; int num_twt_session = 0; if (!psoc_obj || !params) return QDF_STATUS_E_INVAL; return num_twt_session; mac_addr = params[0].peer_mac; dialog_id = params[0].dialog_id; vdev_id = params[0].vdev_id; /* * Currently for STA case, twt_get_params nl is sending only dialog_id Loading @@ -284,14 +299,18 @@ ucfg_twt_get_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, * ucfg_twt_get_peer_session_params. */ if (!QDF_IS_ADDR_BROADCAST(mac_addr)) return ucfg_twt_get_single_peer_session_params(psoc_obj, num_twt_session = ucfg_twt_get_single_peer_session_params( psoc_obj, mac_addr, dialog_id, params); else return ucfg_twt_get_all_peer_session_params(psoc_obj, params); num_twt_session = ucfg_twt_get_all_peer_session_params( psoc_obj, vdev_id, params); return QDF_STATUS_E_INVAL; return num_twt_session; } #endif /* WLAN_SUPPORT_TWT */ Loading components/ipa/core/inc/wlan_ipa_main.h +14 −0 Original line number Diff line number Diff line Loading @@ -513,6 +513,20 @@ void ipa_flush_pending_vdev_events(struct wlan_objmgr_pdev *pdev, */ bool ipa_is_ready(void); /** * ipa_init_deinit_lock() - lock ipa init deinit lock * * Return: None */ void ipa_init_deinit_lock(void); /** * ipa_init_deinit_unlock() - unlock ipa init deinit lock * * Return: None */ void ipa_init_deinit_unlock(void); #else /* Not IPA_OFFLOAD */ typedef QDF_STATUS (*wlan_ipa_softap_xmit)(qdf_nbuf_t nbuf, qdf_netdev_t dev); typedef void (*wlan_ipa_send_to_nw)(qdf_nbuf_t nbuf, qdf_netdev_t dev); Loading components/ipa/core/inc/wlan_ipa_priv.h +0 −1 Original line number Diff line number Diff line Loading @@ -686,7 +686,6 @@ struct wlan_ipa_priv { qdf_mc_timer_t rt_debug_fill_timer; qdf_mutex_t rt_debug_lock; qdf_mutex_t ipa_lock; qdf_mutex_t init_deinit_lock; uint8_t vdev_to_iface[WLAN_IPA_MAX_SESSION]; bool vdev_offload_enabled[WLAN_IPA_MAX_SESSION]; Loading Loading
Kbuild +2 −5 Original line number Diff line number Diff line Loading @@ -2629,6 +2629,7 @@ cppflags-$(CONFIG_HDD_INIT_WITH_RTNL_LOCK) += -DCONFIG_HDD_INIT_WITH_RTNL_LOCK cppflags-$(CONFIG_WLAN_CONV_SPECTRAL_ENABLE) += -DWLAN_CONV_SPECTRAL_ENABLE cppflags-$(CONFIG_WLAN_CFR_ENABLE) += -DWLAN_CFR_ENABLE cppflags-$(CONFIG_WLAN_ENH_CFR_ENABLE) += -DWLAN_ENH_CFR_ENABLE cppflags-$(CONFIG_WLAN_ENH_CFR_ENABLE) += -DWLAN_CFR_PM cppflags-$(CONFIG_WLAN_CFR_ENABLE) += -DCFR_USE_FIXED_FOLDER cppflags-$(CONFIG_DIRECT_BUF_RX_ENABLE) += -DDIRECT_BUF_RX_ENABLE cppflags-$(CONFIG_WMI_DBR_SUPPORT) += -DWMI_DBR_SUPPORT Loading Loading @@ -2690,7 +2691,7 @@ cppflags-$(CONFIG_WLAN_FEATURE_RX_SOFTIRQ_TIME_LIMIT) += -DWLAN_FEATURE_RX_SOFTI cppflags-$(CONFIG_FEATURE_HAL_DELAYED_REG_WRITE) += -DFEATURE_HAL_DELAYED_REG_WRITE cppflags-$(CONFIG_FEATURE_HAL_DELAYED_REG_WRITE_V2) += -DFEATURE_HAL_DELAYED_REG_WRITE_V2 cppflags-$(CONFIG_QCA_OL_DP_SRNG_LOCK_LESS_ACCESS) += -DQCA_OL_DP_SRNG_LOCK_LESS_ACCESS cppflags-$(CONFIG_SHADOW_WRITE_DELAY) += -DSHADOW_WRITE_DELAY cppflags-$(CONFIG_PLD_USB_CNSS) += -DCONFIG_PLD_USB_CNSS cppflags-$(CONFIG_PLD_SDIO_CNSS2) += -DCONFIG_PLD_SDIO_CNSS2 Loading Loading @@ -3314,10 +3315,6 @@ cppflags-y += -DSYSTEM_PM_CHECK cppflags-y += -DDISABLE_EAPOL_INTRABSS_FWD endif ifeq ($(CONFIG_TX_AGGREGATION_SIZE_ENABLE), y) cppflags-y += -DTX_AGGREGATION_SIZE_ENABLE endif # Enable Low latency optimisation mode cppflags-$(CONFIG_WLAN_FEATURE_LL_MODE) += -DWLAN_FEATURE_LL_MODE Loading
components/cp_stats/dispatcher/inc/wlan_cp_stats_mc_ucfg_api.h +2 −2 Original line number Diff line number Diff line Loading @@ -55,9 +55,9 @@ * @params: array pointer to store peer twt session parameters, should contain * mac_addr and dialog id of a peer for which twt session stats to be retrieved * * Return: QDF_STATUS_SUCCESS upon success, else qdf error values * Return: total number of valid twt session */ QDF_STATUS int ucfg_twt_get_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, struct wmi_host_twt_session_stats_info *param); #endif /* WLAN_SUPPORT_TWT */ Loading
components/cp_stats/dispatcher/src/wlan_cp_stats_mc_ucfg_api.c +106 −87 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ #ifdef WLAN_SUPPORT_TWT #include <wlan_mlme_twt_public_struct.h> #endif #include <wlan_mlme_api.h> #ifdef WLAN_SUPPORT_TWT Loading @@ -46,6 +47,7 @@ * @input_dialog_id: input dialog id * @dest_param: Pointer to copy twt session parameters when a peer with * given dialog id is found * @num_twt_session: Pointer holding total number of valid twt session * * Return: Success if stats are copied for a peer with given dialog, * else failure Loading @@ -54,11 +56,11 @@ static QDF_STATUS ucfg_twt_get_peer_session_param_by_dlg_id(struct peer_mc_cp_stats *mc_stats, uint32_t input_dialog_id, struct wmi_host_twt_session_stats_info *dest_param) *dest_param, int *num_twt_session) { struct wmi_host_twt_session_stats_info *src_param; uint32_t event_type; int i, num_session = 0; int i = 0; QDF_STATUS qdf_status = QDF_STATUS_E_INVAL; if (!mc_stats || !dest_param) Loading @@ -75,11 +77,11 @@ ucfg_twt_get_peer_session_param_by_dlg_id(struct peer_mc_cp_stats *mc_stats, if ((event_type == HOST_TWT_SESSION_SETUP) || (event_type == HOST_TWT_SESSION_UPDATE)) { qdf_mem_copy(&dest_param[num_session], src_param, qdf_mem_copy(&dest_param[*num_twt_session], src_param, sizeof(*src_param)); qdf_status = QDF_STATUS_SUCCESS; num_session += 1; if (num_session >= TWT_PEER_MAX_SESSIONS) *num_twt_session += 1; if (*num_twt_session >= TWT_PEER_MAX_SESSIONS) break; } } Loading @@ -95,9 +97,9 @@ ucfg_twt_get_peer_session_param_by_dlg_id(struct peer_mc_cp_stats *mc_stats, * @dialog_id: dialog id of peer for which twt session params to be retrieved * @params: pointer to store peer twt session parameters * * Return: Retuns QDF_STATUS_SUCCESS upon success, else qdf error values * Return: total number of valid twt session */ static QDF_STATUS static int ucfg_twt_get_single_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, uint8_t *mac_addr, uint32_t dialog_id, struct wmi_host_twt_session_stats_info Loading @@ -107,27 +109,30 @@ ucfg_twt_get_single_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, struct peer_cp_stats *peer_cp_stats_priv; struct peer_mc_cp_stats *peer_mc_stats; QDF_STATUS qdf_status = QDF_STATUS_E_INVAL; int num_twt_session = 0; if (!psoc_obj || !params) return qdf_status; return num_twt_session; peer = wlan_objmgr_get_peer_by_mac(psoc_obj, mac_addr, WLAN_CP_STATS_ID); if (!peer) return qdf_status; return num_twt_session; peer_cp_stats_priv = wlan_cp_stats_get_peer_stats_obj(peer); if (!peer_cp_stats_priv) { wlan_objmgr_peer_release_ref(peer, WLAN_CP_STATS_ID); return qdf_status; return num_twt_session; } wlan_cp_stats_peer_obj_lock(peer_cp_stats_priv); peer_mc_stats = peer_cp_stats_priv->peer_stats; qdf_status = ucfg_twt_get_peer_session_param_by_dlg_id(peer_mc_stats, qdf_status = ucfg_twt_get_peer_session_param_by_dlg_id( peer_mc_stats, dialog_id, params); params, &num_twt_session); if (QDF_IS_STATUS_ERROR(qdf_status)) { qdf_err("No TWT session for " QDF_MAC_ADDR_FMT " dialog_id %d", QDF_MAC_ADDR_REF(mac_addr), dialog_id); Loading @@ -136,7 +141,7 @@ ucfg_twt_get_single_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, wlan_cp_stats_peer_obj_unlock(peer_cp_stats_priv); wlan_objmgr_peer_release_ref(peer, WLAN_CP_STATS_ID); return qdf_status; return num_twt_session; } /** Loading @@ -144,7 +149,7 @@ ucfg_twt_get_single_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, * a peer if twt session is valid * @mc_cp_stats: pointer to peer specific stats * @param: Pointer to copy twt session parameters * @num_twt_sessions: Pointer holding total number of valid twt sessions * @num_twt_sessions Pointer holding total number of valid twt sessions * * Return: QDF_STATUS success if valid twt session parameters are obtained * else other qdf error values Loading @@ -152,7 +157,7 @@ ucfg_twt_get_single_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, static QDF_STATUS ucfg_twt_get_peer_session_param(struct peer_mc_cp_stats *mc_cp_stats, struct wmi_host_twt_session_stats_info *params, int *num_twt_sessions) int *num_twt_session) { struct wmi_host_twt_session_stats_info *twt_params; QDF_STATUS qdf_status = QDF_STATUS_E_INVAL; Loading @@ -169,12 +174,10 @@ ucfg_twt_get_peer_session_param(struct peer_mc_cp_stats *mc_cp_stats, /* Check twt session is established */ if ((event_type == HOST_TWT_SESSION_SETUP) || (event_type == HOST_TWT_SESSION_UPDATE)) { qdf_mem_copy(¶ms[*num_twt_sessions], twt_params, qdf_mem_copy(¶ms[*num_twt_session], twt_params, sizeof(*twt_params)); qdf_status = QDF_STATUS_SUCCESS; *num_twt_sessions += 1; if (*num_twt_sessions >= TWT_PSOC_MAX_SESSIONS) break; *num_twt_session += 1; } } return qdf_status; Loading @@ -184,96 +187,108 @@ ucfg_twt_get_peer_session_param(struct peer_mc_cp_stats *mc_cp_stats, * ucfg_twt_get_all_peer_session_params()- Retrieves twt session parameters * of all peers with valid twt session * @psoc_obj: psoc object * @vdvev_id: vdev_id * @params: array of pointer to store peer twt session parameters * * Return: Retuns QDF_STATUS_SUCCESS upon success, else qdf error values * Return: total number of valid twt sessions */ static QDF_STATUS static int ucfg_twt_get_all_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, uint8_t vdev_id, struct wmi_host_twt_session_stats_info *params) { struct wlan_objmgr_psoc_objmgr *psoc_objmgr; struct wlan_objmgr_peer *peer_obj; struct wlan_peer_list *peer_list; struct peer_cp_stats *cp_stats_peer_obj; qdf_list_t *peer_list; struct wlan_objmgr_peer *peer, *peer_next; struct wlan_objmgr_vdev *vdev; struct peer_cp_stats *cp_stats_peer_obj, *peer_cp_stat_prv; struct peer_mc_cp_stats *mc_cp_stats; struct peer_cp_stats *peer_cp_stat_prv; QDF_STATUS qdf_status = QDF_STATUS_E_INVAL; qdf_list_t *obj_list; int i, num_sessions = 0; int num_twt_session = 0; enum QDF_OPMODE opmode; int sap_max_peer; if (!psoc_obj || !params) return qdf_status; if (!psoc_obj) { cp_stats_err("psoc is NULL"); return num_twt_session; } /* psoc obj lock should be taken before peer list lock */ wlan_psoc_obj_lock(psoc_obj); psoc_objmgr = &psoc_obj->soc_objmgr; /* List is empty, return */ if (!psoc_objmgr->wlan_peer_count) { wlan_psoc_obj_unlock(psoc_obj); return qdf_status; vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc_obj, vdev_id, WLAN_CP_STATS_ID); if (!vdev) { cp_stats_err("vdev is NULL, vdev_id: %d", vdev_id); return num_twt_session; } wlan_mlme_get_sap_max_peers(psoc_obj, &sap_max_peer); opmode = wlan_vdev_mlme_get_opmode(vdev); peer_list = &vdev->vdev_objmgr.wlan_peer_list; if (!peer_list) { wlan_objmgr_vdev_release_ref(vdev, WLAN_CP_STATS_ID); cp_stats_err("Peer list for vdev obj is NULL"); return num_twt_session; } peer_list = &psoc_objmgr->peer_list; qdf_spin_lock_bh(&peer_list->peer_list_lock); peer = wlan_vdev_peer_list_peek_active_head(vdev, peer_list, WLAN_CP_STATS_ID); /* Iterate through peer_list to find a peer with valid twt sessions */ for (i = 0; i < WLAN_PEER_HASHSIZE; i++) { obj_list = &peer_list->peer_hash[i]; peer_obj = wlan_psoc_peer_list_peek_head(obj_list); while (peer_obj) { cp_stats_peer_obj = wlan_objmgr_peer_get_comp_private_obj (peer_obj, WLAN_UMAC_COMP_CP_STATS); while (peer) { cp_stats_peer_obj = wlan_objmgr_peer_get_comp_private_obj( peer, WLAN_UMAC_COMP_CP_STATS); mc_cp_stats = NULL; if (cp_stats_peer_obj) mc_cp_stats = cp_stats_peer_obj->peer_stats; peer_cp_stat_prv = wlan_cp_stats_get_peer_stats_obj(peer_obj); wlan_cp_stats_get_peer_stats_obj(peer); if (peer_cp_stat_prv && mc_cp_stats) { wlan_cp_stats_peer_obj_lock(peer_cp_stat_prv); ucfg_twt_get_peer_session_param(mc_cp_stats, params, &num_sessions); &num_twt_session); wlan_cp_stats_peer_obj_unlock(peer_cp_stat_prv); } if (num_sessions >= TWT_PSOC_MAX_SESSIONS) if (opmode == QDF_STA_MODE && num_twt_session >= TWT_PEER_MAX_SESSIONS) goto done; /* Get next peer */ peer_obj = wlan_peer_get_next_peer_of_psoc(obj_list, peer_obj); } if (opmode == QDF_SAP_MODE && num_twt_session >= (sap_max_peer * TWT_PEER_MAX_SESSIONS)) goto done; peer_next = wlan_peer_get_next_active_peer_of_vdev( vdev, peer_list, peer, WLAN_CP_STATS_ID); peer = peer_next; } done: /* If atleast one peer with valid twt session is found return success */ if (num_sessions) qdf_status = QDF_STATUS_SUCCESS; else qdf_err("Unable to find a peer with twt session established"); if (!num_twt_session) cp_stats_err("Unable to find a peer with twt session established"); qdf_spin_unlock_bh(&peer_list->peer_list_lock); wlan_psoc_obj_unlock(psoc_obj); return qdf_status; wlan_objmgr_vdev_release_ref(vdev, WLAN_CP_STATS_ID); return num_twt_session; } QDF_STATUS int ucfg_twt_get_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, struct wmi_host_twt_session_stats_info *params) { uint8_t *mac_addr; uint32_t dialog_id; uint8_t vdev_id; int num_twt_session = 0; if (!psoc_obj || !params) return QDF_STATUS_E_INVAL; return num_twt_session; mac_addr = params[0].peer_mac; dialog_id = params[0].dialog_id; vdev_id = params[0].vdev_id; /* * Currently for STA case, twt_get_params nl is sending only dialog_id Loading @@ -284,14 +299,18 @@ ucfg_twt_get_peer_session_params(struct wlan_objmgr_psoc *psoc_obj, * ucfg_twt_get_peer_session_params. */ if (!QDF_IS_ADDR_BROADCAST(mac_addr)) return ucfg_twt_get_single_peer_session_params(psoc_obj, num_twt_session = ucfg_twt_get_single_peer_session_params( psoc_obj, mac_addr, dialog_id, params); else return ucfg_twt_get_all_peer_session_params(psoc_obj, params); num_twt_session = ucfg_twt_get_all_peer_session_params( psoc_obj, vdev_id, params); return QDF_STATUS_E_INVAL; return num_twt_session; } #endif /* WLAN_SUPPORT_TWT */ Loading
components/ipa/core/inc/wlan_ipa_main.h +14 −0 Original line number Diff line number Diff line Loading @@ -513,6 +513,20 @@ void ipa_flush_pending_vdev_events(struct wlan_objmgr_pdev *pdev, */ bool ipa_is_ready(void); /** * ipa_init_deinit_lock() - lock ipa init deinit lock * * Return: None */ void ipa_init_deinit_lock(void); /** * ipa_init_deinit_unlock() - unlock ipa init deinit lock * * Return: None */ void ipa_init_deinit_unlock(void); #else /* Not IPA_OFFLOAD */ typedef QDF_STATUS (*wlan_ipa_softap_xmit)(qdf_nbuf_t nbuf, qdf_netdev_t dev); typedef void (*wlan_ipa_send_to_nw)(qdf_nbuf_t nbuf, qdf_netdev_t dev); Loading
components/ipa/core/inc/wlan_ipa_priv.h +0 −1 Original line number Diff line number Diff line Loading @@ -686,7 +686,6 @@ struct wlan_ipa_priv { qdf_mc_timer_t rt_debug_fill_timer; qdf_mutex_t rt_debug_lock; qdf_mutex_t ipa_lock; qdf_mutex_t init_deinit_lock; uint8_t vdev_to_iface[WLAN_IPA_MAX_SESSION]; bool vdev_offload_enabled[WLAN_IPA_MAX_SESSION]; Loading