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:
Santosh Anbu
2021-08-26 13:14:30 +05:30
odevzdal Madan Koyyalamudi
rodič e0ff191da1
revize d445d62fd9
5 změnil soubory, kde provedl 82 přidání a 1 odebrání

Zobrazit soubor

@@ -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

Zobrazit soubor

@@ -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

Zobrazit soubor

@@ -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);
};
/*

Zobrazit soubor

@@ -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);

Zobrazit soubor

@@ -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));
}