qcacmn: MLO quiet vdev bitmap support for AP
Add change to support indication of quiet vdev for MLO AP context. Change-Id: I7368e023976c29ae98fef2b86ef6aee0b7621390 CRs-Fixed: 2924329
Tento commit je obsažen v:

odevzdal
Madan Koyyalamudi

rodič
e0ff191da1
revize
d445d62fd9
@@ -304,4 +304,29 @@ QDF_STATUS mlo_peer_allocate_primary_umac(
|
||||
QDF_STATUS mlo_peer_free_primary_umac(
|
||||
struct wlan_mlo_dev_context *ml_dev,
|
||||
struct wlan_mlo_peer_context *ml_peer);
|
||||
|
||||
/**
|
||||
* mlo_ap_vdev_quiet_set() - Set quiet bitmap for requested vdev
|
||||
* @vdev: Pointer to object manager vdev
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void mlo_ap_vdev_quiet_set(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* mlo_ap_vdev_quiet_clear() - Clear quiet bitmap for requested vdev
|
||||
* @vdev: Pointer to object manager vdev
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void mlo_ap_vdev_quiet_clear(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* mlo_ap_vdev_quiet_is_any_idx_set() - Check if any index is set in
|
||||
* quiet bitmap
|
||||
* @vdev: Pointer to object manager vdev
|
||||
*
|
||||
* Return: true, if any index is set, else false
|
||||
*/
|
||||
bool mlo_ap_vdev_quiet_is_any_idx_set(struct wlan_objmgr_vdev *vdev);
|
||||
#endif
|
||||
|
@@ -84,6 +84,7 @@
|
||||
#define mlo_nofl_debug_rl(format, args...) \
|
||||
QDF_TRACE_DEBUG_RL_NO_FL(QDF_MODULE_ID_MLO, format, ## args)
|
||||
|
||||
#define MLO_INVALID_LINK_IDX 0xFF
|
||||
/**
|
||||
* mlo_get_link_information() - get partner link information
|
||||
* @mld_addr : MLD address
|
||||
|
@@ -141,10 +141,12 @@ struct wlan_mlo_sta {
|
||||
* struct wlan_mlo_ap - MLO AP related info
|
||||
* @num_ml_vdevs: number of vdevs to form MLD
|
||||
* @ml_aid_mgr: ML AID mgr
|
||||
* @mlo_vdev_quiet_bmap: Bitmap of vdevs for which quiet ie needs to enabled
|
||||
*/
|
||||
struct wlan_mlo_ap {
|
||||
uint8_t num_ml_vdevs;
|
||||
struct wlan_ml_vdev_aid_mgr *ml_aid_mgr;
|
||||
qdf_bitmap(mlo_vdev_quiet_bmap, WLAN_UMAC_MLO_MAX_VDEVS);
|
||||
};
|
||||
|
||||
/*
|
||||
|
@@ -49,7 +49,7 @@ static uint16_t wlan_mlo_peer_alloc_aid(
|
||||
if (!mlo_mgr_ctx)
|
||||
return assoc_id;
|
||||
|
||||
if (!is_mlo_peer && link_ix == 0xff)
|
||||
if (!is_mlo_peer && link_ix == MLO_INVALID_LINK_IDX)
|
||||
return assoc_id;
|
||||
/* TODO check locking strategy */
|
||||
ml_aid_lock_acquire(mlo_mgr_ctx);
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include "wlan_mlo_mgr_ap.h"
|
||||
#include <wlan_mlo_mgr_cmn.h>
|
||||
#include <wlan_mlo_mgr_main.h>
|
||||
#include <wlan_utility.h>
|
||||
|
||||
bool mlo_ap_vdev_attach(struct wlan_objmgr_vdev *vdev,
|
||||
uint8_t link_id,
|
||||
@@ -239,3 +240,55 @@ void mlo_ap_ml_peerid_free(uint16_t mlo_peer_id)
|
||||
|
||||
ml_peerid_lock_release(mlo_ctx);
|
||||
}
|
||||
|
||||
void mlo_ap_vdev_quiet_set(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct wlan_mlo_dev_context *mld_ctx = vdev->mlo_dev_ctx;
|
||||
uint8_t idx;
|
||||
|
||||
if (!mld_ctx || !wlan_vdev_mlme_is_mlo_ap(vdev))
|
||||
return;
|
||||
|
||||
idx = mlo_get_link_vdev_ix(mld_ctx, vdev);
|
||||
if (idx == MLO_INVALID_LINK_IDX)
|
||||
return;
|
||||
|
||||
mlo_debug("Quiet set for PSOC:%d vdev:%d",
|
||||
wlan_psoc_get_id(wlan_vdev_get_psoc(vdev)),
|
||||
wlan_vdev_get_id(vdev));
|
||||
|
||||
wlan_util_change_map_index(mld_ctx->ap_ctx->mlo_vdev_quiet_bmap,
|
||||
idx, 1);
|
||||
}
|
||||
|
||||
void mlo_ap_vdev_quiet_clear(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct wlan_mlo_dev_context *mld_ctx = vdev->mlo_dev_ctx;
|
||||
uint8_t idx;
|
||||
|
||||
if (!mld_ctx || !wlan_vdev_mlme_is_mlo_ap(vdev))
|
||||
return;
|
||||
|
||||
idx = mlo_get_link_vdev_ix(mld_ctx, vdev);
|
||||
if (idx == MLO_INVALID_LINK_IDX)
|
||||
return;
|
||||
|
||||
mlo_debug("Quiet clear for PSOC:%d vdev:%d",
|
||||
wlan_psoc_get_id(wlan_vdev_get_psoc(vdev)),
|
||||
wlan_vdev_get_id(vdev));
|
||||
|
||||
wlan_util_change_map_index(mld_ctx->ap_ctx->mlo_vdev_quiet_bmap,
|
||||
idx, 0);
|
||||
}
|
||||
|
||||
bool mlo_ap_vdev_quiet_is_any_idx_set(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct wlan_mlo_dev_context *mld_ctx = vdev->mlo_dev_ctx;
|
||||
|
||||
if (!mld_ctx || !wlan_vdev_mlme_is_mlo_ap(vdev))
|
||||
return false;
|
||||
|
||||
return wlan_util_map_is_any_index_set(
|
||||
mld_ctx->ap_ctx->mlo_vdev_quiet_bmap,
|
||||
sizeof(mld_ctx->ap_ctx->mlo_vdev_quiet_bmap));
|
||||
}
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele