Merge fa602270db
on remote branch
Change-Id: I493c9683c51f14001c3302c8e494b604e5be7c96
This commit is contained in:
@@ -301,6 +301,27 @@ bool dp_mon_skip_filter_config(struct dp_soc *soc)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_update_num_mac_rings() - Update number of MAC rings based on connection
|
||||||
|
* mode and DBS check
|
||||||
|
* @soc: DP soc context
|
||||||
|
* @mon_mac_rings: Pointer to variable for number of mac rings
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
dp_update_num_mac_rings(struct dp_soc *soc, int *mon_mac_rings)
|
||||||
|
{
|
||||||
|
if (soc->cdp_soc.ol_ops->get_con_mode &&
|
||||||
|
soc->cdp_soc.ol_ops->get_con_mode() ==
|
||||||
|
QDF_GLOBAL_MISSION_MODE &&
|
||||||
|
(QDF_MONITOR_FLAG_OTHER_BSS & soc->mon_flags)) {
|
||||||
|
*mon_mac_rings = 1;
|
||||||
|
} else {
|
||||||
|
dp_update_num_mac_rings_for_dbs(soc, mon_mac_rings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_mon_ht2_rx_ring_cfg(struct dp_soc *soc,
|
dp_mon_ht2_rx_ring_cfg(struct dp_soc *soc,
|
||||||
struct dp_pdev *pdev,
|
struct dp_pdev *pdev,
|
||||||
@@ -322,7 +343,7 @@ dp_mon_ht2_rx_ring_cfg(struct dp_soc *soc,
|
|||||||
* Overwrite the max_mac_rings for the status rings.
|
* Overwrite the max_mac_rings for the status rings.
|
||||||
*/
|
*/
|
||||||
if (srng_type == DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS)
|
if (srng_type == DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS)
|
||||||
dp_update_num_mac_rings_for_dbs(soc, &max_mac_rings);
|
dp_update_num_mac_rings(soc, &max_mac_rings);
|
||||||
|
|
||||||
dp_mon_filter_info("%pK: srng type %d Max_mac_rings %d ",
|
dp_mon_filter_info("%pK: srng type %d Max_mac_rings %d ",
|
||||||
soc, srng_type, max_mac_rings);
|
soc, srng_type, max_mac_rings);
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
||||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -206,11 +206,9 @@ wlan_ser_cancel_scan_cmd(
|
|||||||
struct wlan_serialization_command_list,
|
struct wlan_serialization_command_list,
|
||||||
pdev_node);
|
pdev_node);
|
||||||
|
|
||||||
if (cmd &&
|
if (cmd && !wlan_serialization_match_cmd_id_type(
|
||||||
!(wlan_serialization_match_cmd_id_type(nnode, cmd,
|
nnode, cmd,
|
||||||
WLAN_SER_PDEV_NODE) &&
|
WLAN_SER_PDEV_NODE)) {
|
||||||
wlan_serialization_match_cmd_vdev(nnode, cmd->vdev,
|
|
||||||
WLAN_SER_PDEV_NODE))) {
|
|
||||||
pnode = nnode;
|
pnode = nnode;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@@ -19,15 +19,24 @@
|
|||||||
#include <qdf_module.h>
|
#include <qdf_module.h>
|
||||||
#include <wlan_nlink_common.h>
|
#include <wlan_nlink_common.h>
|
||||||
#include <wlan_cp_stats_chipset_stats.h>
|
#include <wlan_cp_stats_chipset_stats.h>
|
||||||
|
#include "wlan_cp_stats_obj_mgr_handler.h"
|
||||||
|
|
||||||
struct chipset_stats cstats;
|
static struct chipset_stats cstats;
|
||||||
static struct cstats_node *gcstats_buffer[CSTATS_MAX_TYPE];
|
static struct cstats_node *gcstats_buffer[CSTATS_MAX_TYPE];
|
||||||
|
|
||||||
QDF_STATUS wlan_cp_stats_cstats_init(void)
|
QDF_STATUS wlan_cp_stats_cstats_init(struct wlan_objmgr_psoc *psoc)
|
||||||
{
|
{
|
||||||
qdf_list_node_t *tmp_node = NULL;
|
qdf_list_node_t *tmp_node = NULL;
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
|
|
||||||
|
if (!wlan_cp_stats_get_chipset_stats_enable(psoc)) {
|
||||||
|
qdf_info("Chipset Stats feature is disabled");
|
||||||
|
cstats.is_cstats_ini_enabled = false;
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
cstats.is_cstats_ini_enabled = true;
|
||||||
|
|
||||||
for (i = 0; i < CSTATS_MAX_TYPE; i++) {
|
for (i = 0; i < CSTATS_MAX_TYPE; i++) {
|
||||||
qdf_spinlock_create(&cstats.cstats_lock[i]);
|
qdf_spinlock_create(&cstats.cstats_lock[i]);
|
||||||
|
|
||||||
@@ -75,6 +84,11 @@ void wlan_cp_stats_cstats_deinit(void)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (!cstats.is_cstats_ini_enabled) {
|
||||||
|
qdf_info("Chipset Stats feature is disabled");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < CSTATS_MAX_TYPE; i++) {
|
for (i = 0; i < CSTATS_MAX_TYPE; i++) {
|
||||||
qdf_spin_lock_bh(&cstats.cstats_lock[i]);
|
qdf_spin_lock_bh(&cstats.cstats_lock[i]);
|
||||||
cstats.ccur_node[i] = NULL;
|
cstats.ccur_node[i] = NULL;
|
||||||
@@ -130,6 +144,9 @@ void wlan_cp_stats_cstats_write_to_buff(enum cstats_types type,
|
|||||||
unsigned int *pfilled_length;
|
unsigned int *pfilled_length;
|
||||||
unsigned int tlen;
|
unsigned int tlen;
|
||||||
|
|
||||||
|
if (!cstats.is_cstats_ini_enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
/* tAniNlHdr + Start Marker + End Marker */
|
/* tAniNlHdr + Start Marker + End Marker */
|
||||||
tlen = sizeof(tAniNlHdr) + (2 * CSTATS_MARKER_SZ);
|
tlen = sizeof(tAniNlHdr) + (2 * CSTATS_MARKER_SZ);
|
||||||
|
|
||||||
@@ -219,6 +236,9 @@ int wlan_cp_stats_cstats_send_buffer_to_user(enum cstats_types type)
|
|||||||
int mark_total;
|
int mark_total;
|
||||||
char *ptr = NULL;
|
char *ptr = NULL;
|
||||||
|
|
||||||
|
if (!cstats.is_cstats_ini_enabled)
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
qdf_spin_lock_bh(&cstats.cstats_lock[type]);
|
qdf_spin_lock_bh(&cstats.cstats_lock[type]);
|
||||||
wlan_cp_stats_get_cstats_free_node(type);
|
wlan_cp_stats_get_cstats_free_node(type);
|
||||||
qdf_spin_unlock_bh(&cstats.cstats_lock[type]);
|
qdf_spin_unlock_bh(&cstats.cstats_lock[type]);
|
||||||
|
@@ -33,6 +33,9 @@
|
|||||||
#include <target_if_cp_stats.h>
|
#include <target_if_cp_stats.h>
|
||||||
#include <wlan_twt_public_structs.h>
|
#include <wlan_twt_public_structs.h>
|
||||||
#include <wlan_cp_stats_chipset_stats.h>
|
#include <wlan_cp_stats_chipset_stats.h>
|
||||||
|
#ifdef WLAN_CHIPSET_STATS
|
||||||
|
#include <cfg_ucfg_api.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_CHIPSET_STATS
|
#ifdef WLAN_CHIPSET_STATS
|
||||||
int wlan_cp_stats_cstats_qmi_event_handler(void *cb_ctx, uint16_t type,
|
int wlan_cp_stats_cstats_qmi_event_handler(void *cb_ctx, uint16_t type,
|
||||||
@@ -56,6 +59,18 @@ wlan_cp_stats_cstats_register_qmi_event_handler(struct cp_stats_context *csc)
|
|||||||
cp_stats_err("cstats QMI evt handler registration failed");
|
cp_stats_err("cstats QMI evt handler registration failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wlan_cp_stats_init_cfg(struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct cp_stats_context *csc)
|
||||||
|
{
|
||||||
|
if (!psoc) {
|
||||||
|
cp_stats_err("psoc is NULL");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
csc->host_params.chipset_stats_enable =
|
||||||
|
cfg_get(psoc, CHIPSET_STATS_ENABLE);
|
||||||
|
}
|
||||||
|
|
||||||
bool wlan_cp_stats_get_chipset_stats_enable(struct wlan_objmgr_psoc *psoc)
|
bool wlan_cp_stats_get_chipset_stats_enable(struct wlan_objmgr_psoc *psoc)
|
||||||
{
|
{
|
||||||
struct cp_stats_context *csc;
|
struct cp_stats_context *csc;
|
||||||
@@ -185,6 +200,10 @@ wlan_cp_stats_psoc_obj_create_handler(struct wlan_objmgr_psoc *psoc, void *arg)
|
|||||||
WLAN_UMAC_COMP_CP_STATS,
|
WLAN_UMAC_COMP_CP_STATS,
|
||||||
csc,
|
csc,
|
||||||
QDF_STATUS_SUCCESS);
|
QDF_STATUS_SUCCESS);
|
||||||
|
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||||
|
wlan_cp_stats_init_cfg(psoc, csc);
|
||||||
|
wlan_cp_stats_cstats_init(psoc);
|
||||||
|
}
|
||||||
|
|
||||||
wlan_cp_stats_psoc_obj_create_handler_return:
|
wlan_cp_stats_psoc_obj_create_handler_return:
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
@@ -226,6 +245,8 @@ wlan_cp_stats_psoc_obj_destroy_handler(struct wlan_objmgr_psoc *psoc, void *arg)
|
|||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wlan_cp_stats_cstats_deinit();
|
||||||
|
|
||||||
wlan_objmgr_psoc_component_obj_detach(psoc,
|
wlan_objmgr_psoc_component_obj_detach(psoc,
|
||||||
WLAN_UMAC_COMP_CP_STATS, csc);
|
WLAN_UMAC_COMP_CP_STATS, csc);
|
||||||
if (csc->cp_stats_psoc_obj_deinit)
|
if (csc->cp_stats_psoc_obj_deinit)
|
||||||
|
@@ -230,6 +230,22 @@ bool wlan_cp_stats_get_chipset_stats_enable(struct wlan_objmgr_psoc *psoc);
|
|||||||
*/
|
*/
|
||||||
int wlan_cp_stats_cstats_qmi_event_handler(void *cb_ctx, uint16_t type,
|
int wlan_cp_stats_cstats_qmi_event_handler(void *cb_ctx, uint16_t type,
|
||||||
void *event, int event_len);
|
void *event, int event_len);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_cp_stats_init_cfg() - update cp_stats_context with ini value
|
||||||
|
*
|
||||||
|
* @psoc: pointer to psoc
|
||||||
|
* @csc: pointer to cp_stats_context
|
||||||
|
*
|
||||||
|
* Return : void
|
||||||
|
*/
|
||||||
|
void wlan_cp_stats_init_cfg(struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct cp_stats_context *csc);
|
||||||
|
#else
|
||||||
|
static inline void wlan_cp_stats_init_cfg(struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct cp_stats_context *csc)
|
||||||
|
{
|
||||||
|
}
|
||||||
#endif /* WLAN_CHIPSET_STATS */
|
#endif /* WLAN_CHIPSET_STATS */
|
||||||
|
|
||||||
#endif /* QCA_SUPPORT_CP_STATS */
|
#endif /* QCA_SUPPORT_CP_STATS */
|
||||||
|
@@ -83,6 +83,7 @@ struct chipset_stats {
|
|||||||
/* Dont move filled list nodes to free list after flush to user space */
|
/* Dont move filled list nodes to free list after flush to user space */
|
||||||
bool cstats_no_flush[CSTATS_MAX_TYPE];
|
bool cstats_no_flush[CSTATS_MAX_TYPE];
|
||||||
struct cstats_tx_rx_ops ops;
|
struct cstats_tx_rx_ops ops;
|
||||||
|
bool is_cstats_ini_enabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define wlan_cstats_fw_stats(len, buf) \
|
#define wlan_cstats_fw_stats(len, buf) \
|
||||||
@@ -94,9 +95,11 @@ struct chipset_stats {
|
|||||||
/**
|
/**
|
||||||
* wlan_cp_stats_cstats_init() - Initialize chipset stats infra
|
* wlan_cp_stats_cstats_init() - Initialize chipset stats infra
|
||||||
*
|
*
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
QDF_STATUS wlan_cp_stats_cstats_init(void);
|
QDF_STATUS wlan_cp_stats_cstats_init(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wlan_cp_stats_cstats_deinit() - Deinitialize chipset stats infra
|
* wlan_cp_stats_cstats_deinit() - Deinitialize chipset stats infra
|
||||||
@@ -156,7 +159,8 @@ void wlan_cp_stats_cstats_pkt_log(uint8_t *sa, uint8_t *da,
|
|||||||
enum qdf_dp_tx_rx_status status,
|
enum qdf_dp_tx_rx_status status,
|
||||||
uint8_t vdev_id, enum QDF_OPMODE op_mode);
|
uint8_t vdev_id, enum QDF_OPMODE op_mode);
|
||||||
#else
|
#else
|
||||||
static inline QDF_STATUS wlan_cp_stats_cstats_init(void)
|
static inline QDF_STATUS
|
||||||
|
wlan_cp_stats_cstats_init(struct wlan_objmgr_psoc *psoc)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -66,6 +66,7 @@ enum qca_chipset_stats_event_type {
|
|||||||
WLAN_CHIPSET_STATS_NAN_NDP_INDICATION_EVENT_ID,
|
WLAN_CHIPSET_STATS_NAN_NDP_INDICATION_EVENT_ID,
|
||||||
WLAN_CHIPSET_STATS_NAN_NDP_NEW_PEER_EVENT_ID,
|
WLAN_CHIPSET_STATS_NAN_NDP_NEW_PEER_EVENT_ID,
|
||||||
WLAN_CHIPSET_STATS_DATA_PKT_EVENT_ID,
|
WLAN_CHIPSET_STATS_DATA_PKT_EVENT_ID,
|
||||||
|
WLAN_CHIPSET_STATS_CSA_EVENT_ID,
|
||||||
WLAN_CHIPSET_STATS_MAX_EVENT_ID,
|
WLAN_CHIPSET_STATS_MAX_EVENT_ID,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -493,4 +494,14 @@ struct cstats_pkt_info {
|
|||||||
uint8_t status;
|
uint8_t status;
|
||||||
} qdf_packed;
|
} qdf_packed;
|
||||||
|
|
||||||
|
struct cstats_csa_evt {
|
||||||
|
struct cstats_cmn cmn;
|
||||||
|
uint8_t direction;
|
||||||
|
uint16_t target_freq;
|
||||||
|
uint8_t target_ch_width;
|
||||||
|
uint16_t current_freq;
|
||||||
|
uint8_t current_ch_width;
|
||||||
|
uint8_t switch_mode;
|
||||||
|
} qdf_packed;
|
||||||
|
|
||||||
#endif /* __WLAN_CP_STATS_CHIPSET_STATS_EVENTS_H */
|
#endif /* __WLAN_CP_STATS_CHIPSET_STATS_EVENTS_H */
|
||||||
|
@@ -107,12 +107,6 @@ QDF_STATUS wlan_cp_stats_init(void)
|
|||||||
goto wlan_cp_stats_peer_init_fail2;
|
goto wlan_cp_stats_peer_init_fail2;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = wlan_cp_stats_cstats_init();
|
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
|
||||||
cp_stats_err("Failed to init chipset stats");
|
|
||||||
goto wlan_cp_stats_peer_init_fail2;
|
|
||||||
}
|
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
wlan_cp_stats_peer_init_fail2:
|
wlan_cp_stats_peer_init_fail2:
|
||||||
@@ -158,8 +152,6 @@ QDF_STATUS wlan_cp_stats_deinit(void)
|
|||||||
{
|
{
|
||||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
wlan_cp_stats_cstats_deinit();
|
|
||||||
|
|
||||||
status = wlan_objmgr_unregister_psoc_create_handler
|
status = wlan_objmgr_unregister_psoc_create_handler
|
||||||
(WLAN_UMAC_COMP_CP_STATS,
|
(WLAN_UMAC_COMP_CP_STATS,
|
||||||
wlan_cp_stats_psoc_obj_create_handler,
|
wlan_cp_stats_psoc_obj_create_handler,
|
||||||
@@ -219,25 +211,6 @@ QDF_STATUS wlan_cp_stats_deinit(void)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WLAN_CHIPSET_STATS
|
|
||||||
static void wlan_cp_stats_init_cfg(struct wlan_objmgr_psoc *psoc,
|
|
||||||
struct cp_stats_context *csc)
|
|
||||||
{
|
|
||||||
if (!psoc) {
|
|
||||||
cp_stats_err("psoc is NULL");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
csc->host_params.chipset_stats_enable =
|
|
||||||
cfg_get(psoc, CHIPSET_STATS_ENABLE);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static inline
|
|
||||||
void wlan_cp_stats_init_cfg(struct wlan_objmgr_psoc *psoc,
|
|
||||||
struct cp_stats_context *csc)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DA/OL specific call back initialization */
|
/* DA/OL specific call back initialization */
|
||||||
QDF_STATUS wlan_cp_stats_open(struct wlan_objmgr_psoc *psoc)
|
QDF_STATUS wlan_cp_stats_open(struct wlan_objmgr_psoc *psoc)
|
||||||
{
|
{
|
||||||
@@ -254,7 +227,6 @@ QDF_STATUS wlan_cp_stats_open(struct wlan_objmgr_psoc *psoc)
|
|||||||
cp_stats_err("cp_stats_context is null!");
|
cp_stats_err("cp_stats_context is null!");
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
wlan_cp_stats_init_cfg(psoc, csc);
|
|
||||||
|
|
||||||
if (csc->cp_stats_open)
|
if (csc->cp_stats_open)
|
||||||
status = csc->cp_stats_open(psoc);
|
status = csc->cp_stats_open(psoc);
|
||||||
|
@@ -535,28 +535,39 @@ void cm_set_vdev_link_id(struct cnx_mgr *cm_ctx,
|
|||||||
wlan_vdev_set_link_id(cm_ctx->vdev, link_id);
|
wlan_vdev_set_link_id(cm_ctx->vdev, link_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
bool cm_is_ml_connection(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct cm_connect_req *req)
|
||||||
|
{
|
||||||
|
struct qdf_mac_addr *mld_mac;
|
||||||
|
bool eht_capab;
|
||||||
|
|
||||||
|
wlan_psoc_mlme_get_11be_capab(wlan_vdev_get_psoc(vdev), &eht_capab);
|
||||||
|
mld_mac = (struct qdf_mac_addr *)wlan_vdev_mlme_get_mldaddr(vdev);
|
||||||
|
|
||||||
|
if (eht_capab && !qdf_is_macaddr_zero(mld_mac) &&
|
||||||
|
req->cur_candidate->entry->ie_list.multi_link_bv &&
|
||||||
|
wlan_cm_is_eht_allowed_for_current_security(wlan_vdev_get_psoc(vdev),
|
||||||
|
req->cur_candidate->entry,
|
||||||
|
true))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static QDF_STATUS cm_update_vdev_mlme_macaddr(struct cnx_mgr *cm_ctx,
|
static QDF_STATUS cm_update_vdev_mlme_macaddr(struct cnx_mgr *cm_ctx,
|
||||||
struct cm_connect_req *req)
|
struct cm_connect_req *req)
|
||||||
{
|
{
|
||||||
struct qdf_mac_addr *mac;
|
struct qdf_mac_addr *mac;
|
||||||
bool eht_capab;
|
|
||||||
struct wlan_objmgr_vdev *vdev = cm_ctx->vdev;
|
struct wlan_objmgr_vdev *vdev = cm_ctx->vdev;
|
||||||
uint8_t vdev_id = wlan_vdev_get_id(vdev);
|
uint8_t vdev_id = wlan_vdev_get_id(vdev);
|
||||||
|
|
||||||
if (wlan_vdev_mlme_get_opmode(vdev) != QDF_STA_MODE)
|
if (wlan_vdev_mlme_get_opmode(vdev) != QDF_STA_MODE)
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
wlan_psoc_mlme_get_11be_capab(wlan_vdev_get_psoc(vdev), &eht_capab);
|
|
||||||
if (!eht_capab)
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
|
|
||||||
mac = (struct qdf_mac_addr *)wlan_vdev_mlme_get_mldaddr(vdev);
|
mac = (struct qdf_mac_addr *)wlan_vdev_mlme_get_mldaddr(vdev);
|
||||||
|
|
||||||
if (req->cur_candidate->entry->ie_list.multi_link_bv &&
|
if (cm_is_ml_connection(vdev, req)) {
|
||||||
!qdf_is_macaddr_zero(mac) &&
|
|
||||||
wlan_cm_is_eht_allowed_for_current_security(wlan_vdev_get_psoc(vdev),
|
|
||||||
req->cur_candidate->entry,
|
|
||||||
true)) {
|
|
||||||
wlan_vdev_obj_lock(vdev);
|
wlan_vdev_obj_lock(vdev);
|
||||||
/* Use link address for ML connection */
|
/* Use link address for ML connection */
|
||||||
wlan_vdev_mlme_set_macaddr(vdev, vdev->vdev_mlme.linkaddr);
|
wlan_vdev_mlme_set_macaddr(vdev, vdev->vdev_mlme.linkaddr);
|
||||||
|
@@ -431,12 +431,18 @@ QDF_STATUS cm_disconnect_active(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id)
|
|||||||
reason_code = cm_req->discon_req.req.reason_code;
|
reason_code = cm_req->discon_req.req.reason_code;
|
||||||
source = cm_req->discon_req.req.source;
|
source = cm_req->discon_req.req.source;
|
||||||
op_mode = wlan_vdev_mlme_get_opmode(cm_ctx->vdev);
|
op_mode = wlan_vdev_mlme_get_opmode(cm_ctx->vdev);
|
||||||
mlme_debug("op_mode:%d, source:%d, reason_code:%d", op_mode, source,
|
mlme_debug(CM_PREFIX_FMT " source %d reason %d",
|
||||||
reason_code);
|
CM_PREFIX_REF(wlan_vdev_get_id(cm_ctx->vdev), *cm_id),
|
||||||
|
source, reason_code);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't send RSO stop for internal link cleanup, as it clears the
|
||||||
|
* RCL in firmware.
|
||||||
|
*/
|
||||||
if (op_mode == QDF_STA_MODE &&
|
if (op_mode == QDF_STA_MODE &&
|
||||||
(reason_code != REASON_FW_TRIGGERED_ROAM_FAILURE) &&
|
!wlan_vdev_mlme_is_mlo_link_vdev(cm_ctx->vdev) &&
|
||||||
(source != CM_MLO_ROAM_INTERNAL_DISCONNECT))
|
source != CM_MLO_ROAM_INTERNAL_DISCONNECT &&
|
||||||
|
reason_code != REASON_FW_TRIGGERED_ROAM_FAILURE)
|
||||||
status = mlme_cm_rso_stop_req(cm_ctx->vdev);
|
status = mlme_cm_rso_stop_req(cm_ctx->vdev);
|
||||||
|
|
||||||
if (status != QDF_STATUS_E_NOSUPPORT)
|
if (status != QDF_STATUS_E_NOSUPPORT)
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
||||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for any
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
@@ -1147,6 +1147,11 @@ static QDF_STATUS mlo_dev_ctx_init(struct wlan_objmgr_vdev *vdev)
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (qdf_list_size(&g_mlo_ctx->ml_dev_list) >= WLAN_UMAC_MLO_MAX_DEV) {
|
||||||
|
mlo_err("No more MLD allowed");
|
||||||
|
return QDF_STATUS_E_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
/* Create a new ML dev context */
|
/* Create a new ML dev context */
|
||||||
ml_dev = qdf_mem_malloc(sizeof(*ml_dev));
|
ml_dev = qdf_mem_malloc(sizeof(*ml_dev));
|
||||||
if (!ml_dev) {
|
if (!ml_dev) {
|
||||||
|
@@ -2258,9 +2258,10 @@ util_get_ml_bv_partner_link_info(struct wlan_objmgr_pdev *pdev,
|
|||||||
true);
|
true);
|
||||||
|
|
||||||
if (!link_info->freq)
|
if (!link_info->freq)
|
||||||
scm_debug("freq 0 rnr channel %u op_class %u",
|
scm_debug_rl("freq 0 rnr channel %u op_class %u " QDF_MAC_ADDR_FMT,
|
||||||
rnr->channel_number,
|
rnr->channel_number,
|
||||||
rnr->operating_class);
|
rnr->operating_class,
|
||||||
|
QDF_MAC_ADDR_REF(rnr->bssid.bytes));
|
||||||
link_info->op_class = rnr->operating_class;
|
link_info->op_class = rnr->operating_class;
|
||||||
link_idx++;
|
link_idx++;
|
||||||
}
|
}
|
||||||
@@ -2270,7 +2271,7 @@ util_get_ml_bv_partner_link_info(struct wlan_objmgr_pdev *pdev,
|
|||||||
scan_entry->ml_info.num_links = link_idx;
|
scan_entry->ml_info.num_links = link_idx;
|
||||||
if (!offset ||
|
if (!offset ||
|
||||||
(offset + sizeof(struct wlan_ml_bv_linfo_perstaprof) >= ml_ie_len)) {
|
(offset + sizeof(struct wlan_ml_bv_linfo_perstaprof) >= ml_ie_len)) {
|
||||||
scm_err_rl("incorrect offset value %d", offset);
|
scm_debug_rl("incorrect offset value %d", offset);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2293,9 +2294,11 @@ util_get_ml_bv_partner_link_info(struct wlan_objmgr_pdev *pdev,
|
|||||||
|
|
||||||
if (!(end_ptr <= (ml_ie + ml_ie_len))) {
|
if (!(end_ptr <= (ml_ie + ml_ie_len))) {
|
||||||
if (ml_ie[TAG_LEN_POS] >= 255)
|
if (ml_ie[TAG_LEN_POS] >= 255)
|
||||||
scm_debug("Possible fragmentation in ml_ie. Ignore the processing");
|
scm_debug_rl("Possible fragmentation in ml_ie for tag_len %d. Ignore the processing",
|
||||||
|
ml_ie[TAG_LEN_POS]);
|
||||||
else
|
else
|
||||||
scm_debug("perstaprof exceeds ML IE boundary. Ignore the processing");
|
scm_debug_rl("perstaprof exceeds ML IE boundary for tag_len %d. Ignore the processing",
|
||||||
|
ml_ie[TAG_LEN_POS]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2342,7 +2345,8 @@ util_get_ml_bv_partner_link_info(struct wlan_objmgr_pdev *pdev,
|
|||||||
(WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_SIZE +
|
(WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_SIZE +
|
||||||
perstaprof_stainfo_len);
|
perstaprof_stainfo_len);
|
||||||
} else {
|
} else {
|
||||||
scm_debug("No STA profile IE list found");
|
scm_debug_rl("No STA profile IE list found for perstaprof_stainfo_len %d perstaprof_len %d",
|
||||||
|
perstaprof_stainfo_len, perstaprof_len);
|
||||||
ielist_len = 0;
|
ielist_len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1974,10 +1974,12 @@ struct mlo_prb_resp_tmpl_ml_info {
|
|||||||
* @prb_rsp_template_frm: pointer to template probe response template
|
* @prb_rsp_template_frm: pointer to template probe response template
|
||||||
* @prb_rsp_template_len: length of probe response template
|
* @prb_rsp_template_len: length of probe response template
|
||||||
* @cu_ml_info: Impacted link critical update information
|
* @cu_ml_info: Impacted link critical update information
|
||||||
|
* @go_ignore_non_p2p_probe_req: go ignore non-p2p probe req
|
||||||
*/
|
*/
|
||||||
struct wmi_probe_resp_params {
|
struct wmi_probe_resp_params {
|
||||||
uint8_t *prb_rsp_template_frm;
|
uint8_t *prb_rsp_template_frm;
|
||||||
uint32_t prb_rsp_template_len;
|
uint32_t prb_rsp_template_len;
|
||||||
|
bool go_ignore_non_p2p_probe_req;
|
||||||
#ifdef WLAN_FEATURE_11BE_MLO
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
struct mlo_prb_resp_tmpl_ml_info cu_ml_info;
|
struct mlo_prb_resp_tmpl_ml_info cu_ml_info;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -5938,6 +5938,8 @@ static QDF_STATUS send_probe_rsp_tmpl_send_cmd_tlv(wmi_unified_t wmi_handle,
|
|||||||
WMITLV_TAG_STRUC_wmi_prb_tmpl_cmd_fixed_param,
|
WMITLV_TAG_STRUC_wmi_prb_tmpl_cmd_fixed_param,
|
||||||
WMITLV_GET_STRUCT_TLVLEN(wmi_prb_tmpl_cmd_fixed_param));
|
WMITLV_GET_STRUCT_TLVLEN(wmi_prb_tmpl_cmd_fixed_param));
|
||||||
cmd->vdev_id = vdev_id;
|
cmd->vdev_id = vdev_id;
|
||||||
|
cmd->flags = probe_rsp_info->go_ignore_non_p2p_probe_req;
|
||||||
|
|
||||||
cmd->buf_len = tmpl_len;
|
cmd->buf_len = tmpl_len;
|
||||||
buf_ptr += sizeof(wmi_prb_tmpl_cmd_fixed_param);
|
buf_ptr += sizeof(wmi_prb_tmpl_cmd_fixed_param);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user