qcacmn: Add handling for mlo link disable event
Add code changes to handle new wmi_mlo_link_disable_event Extract the wmi event params and store in host defined structure. Change-Id: I6893bfa4da7b27f4a9b1ce2936057bb3576a317c CRs-Fixed: 3458680
Tento commit je obsažen v:

odevzdal
Madan Koyyalamudi

rodič
2b2a9fc6c8
revize
c16aa9d544
@@ -1532,6 +1532,7 @@ struct wlan_lmac_if_mlo_tx_ops {
|
||||
* @process_mlo_vdev_tid_to_link_map_event: function pointer to rx T2LM event
|
||||
* @mlo_link_removal_handler: function pointer for MLO link removal handler
|
||||
* @process_mlo_link_state_info_event: function pointer for mlo link state
|
||||
* @mlo_link_disable_request_handler: function ptr for mlo link disable request
|
||||
*/
|
||||
struct wlan_lmac_if_mlo_rx_ops {
|
||||
QDF_STATUS
|
||||
@@ -1546,6 +1547,9 @@ struct wlan_lmac_if_mlo_rx_ops {
|
||||
QDF_STATUS (*process_mlo_link_state_info_event)(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
struct ml_link_state_info_event *event);
|
||||
QDF_STATUS (*mlo_link_disable_request_handler)(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
void *evt_params);
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@@ -978,7 +978,8 @@ wlan_lmac_if_mlo_mgr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
|
||||
wlan_mlo_vdev_tid_to_link_map_event;
|
||||
rx_ops->mlo_rx_ops.process_mlo_link_state_info_event =
|
||||
wlan_handle_ml_link_state_info_event;
|
||||
|
||||
rx_ops->mlo_rx_ops.mlo_link_disable_request_handler =
|
||||
wlan_mlo_link_disable_request_handler;
|
||||
}
|
||||
#else
|
||||
static void
|
||||
|
@@ -1068,4 +1068,14 @@ struct mgmt_rx_mlo_link_removal_info {
|
||||
uint16_t tbtt_count;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mlo_link_disable_request_evt_params - MLO link disable
|
||||
* request params
|
||||
* @mld_addr: disable mld address
|
||||
* @link_id_bitmap: Disable Link id bitmap
|
||||
*/
|
||||
struct mlo_link_disable_request_evt_params {
|
||||
struct qdf_mac_addr mld_addr;
|
||||
uint32_t link_id_bitmap;
|
||||
};
|
||||
#endif
|
||||
|
@@ -714,6 +714,7 @@ QDF_STATUS wlan_process_bcn_prbrsp_t2lm_ie(struct wlan_objmgr_vdev *vdev,
|
||||
*/
|
||||
QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_t2lm_info *t2lm);
|
||||
|
||||
/**
|
||||
* wlan_get_t2lm_mapping_status() - API to get T2LM info
|
||||
* @vdev: Pointer to vdev
|
||||
@@ -736,7 +737,6 @@ QDF_STATUS wlan_get_t2lm_mapping_status(struct wlan_objmgr_vdev *vdev,
|
||||
QDF_STATUS
|
||||
wlan_send_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_objmgr_peer *peer);
|
||||
|
||||
#else
|
||||
static inline QDF_STATUS wlan_mlo_parse_t2lm_ie(
|
||||
struct wlan_t2lm_onging_negotiation_info *t2lm, uint8_t *ie)
|
||||
@@ -880,10 +880,30 @@ wlan_send_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
|
||||
*/
|
||||
void
|
||||
wlan_clear_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* wlan_mlo_link_disable_request_handler() - API to handle mlo link disable
|
||||
* request handler.
|
||||
*
|
||||
* @psoc: Pointer to psoc
|
||||
* @evt_params: MLO Link disable request params
|
||||
*
|
||||
* Return QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
wlan_mlo_link_disable_request_handler(struct wlan_objmgr_psoc *psoc,
|
||||
void *evt_params);
|
||||
#else
|
||||
static inline void
|
||||
wlan_clear_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline QDF_STATUS
|
||||
wlan_mlo_link_disable_request_handler(struct wlan_objmgr_psoc *psoc,
|
||||
void *evt_params)
|
||||
{
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
#endif
|
||||
#endif /* _WLAN_MLO_T2LM_H_ */
|
||||
|
@@ -22,10 +22,10 @@
|
||||
#include <wlan_objmgr_vdev_obj.h>
|
||||
#include <wlan_objmgr_peer_obj.h>
|
||||
#include <wlan_mlo_mgr_public_structs.h>
|
||||
#include <wlan_mlo_t2lm.h>
|
||||
#include <wlan_mlo_mgr_cmn.h>
|
||||
#include <qdf_util.h>
|
||||
#include <wlan_cm_api.h>
|
||||
#include "wlan_utility.h"
|
||||
#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_FEATURE_11BE_MLO_ADV_FEATURE)
|
||||
#include <wlan_t2lm_api.h>
|
||||
#endif
|
||||
@@ -300,7 +300,8 @@ uint8_t *wlan_mlo_add_t2lm_info_ie(uint8_t *frm, struct wlan_t2lm_info *t2lm,
|
||||
frm += sizeof(*t2lm_ie) + sizeof(uint8_t);
|
||||
} else {
|
||||
for (tid_num = 0; tid_num < T2LM_MAX_NUM_TIDS; tid_num++)
|
||||
if (t2lm->hw_link_map_tid[tid_num])
|
||||
if (t2lm->hw_link_map_tid[tid_num] ||
|
||||
t2lm->ieee_link_map_tid[tid_num])
|
||||
link_mapping_presence_indicator |= BIT(tid_num);
|
||||
|
||||
QDF_SET_BITS(t2lm_control,
|
||||
@@ -1397,3 +1398,60 @@ wlan_mlo_t2lm_timer_deinit(struct wlan_objmgr_vdev *vdev)
|
||||
t2lm_dev_lock_destroy(&vdev->mlo_dev_ctx->t2lm_ctx);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#if defined(WLAN_FEATURE_11BE_MLO_ADV_FEATURE) && defined(WLAN_FEATURE_11BE)
|
||||
QDF_STATUS
|
||||
wlan_mlo_link_disable_request_handler(struct wlan_objmgr_psoc *psoc,
|
||||
void *evt_params)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
uint8_t vdev_id;
|
||||
bool is_connected = false;
|
||||
struct mlo_link_disable_request_evt_params *params;
|
||||
|
||||
if (!psoc)
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
|
||||
if (!evt_params) {
|
||||
t2lm_err("event params is null");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
params = (struct mlo_link_disable_request_evt_params *)evt_params;
|
||||
if (qdf_is_macaddr_zero(¶ms->mld_addr)) {
|
||||
t2lm_err("mld mac addr in event params is null");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
if (!params->link_id_bitmap) {
|
||||
t2lm_debug("Link id bitmap is 0, no action frame to be sent");
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
is_connected = wlan_get_connected_vdev_by_mld_addr(psoc,
|
||||
params->mld_addr.bytes,
|
||||
&vdev_id);
|
||||
if (!is_connected) {
|
||||
t2lm_err("Not connected to peer MLD " QDF_MAC_ADDR_FMT,
|
||||
params->mld_addr.bytes);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLO_MGR_ID);
|
||||
if (!vdev) {
|
||||
t2lm_err("vdev is null");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
status = wlan_populate_link_disable_t2lm_frame(vdev, params);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
t2lm_err("Failed to handle link disable");
|
||||
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLO_MGR_ID);
|
||||
return status;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele