From ff2587248e90c28b7222ebdaabdaf04507553632 Mon Sep 17 00:00:00 2001 From: Jayachandran Sreekumaran Date: Tue, 10 May 2022 16:19:43 +0530 Subject: [PATCH] qcacmn: Add vdev mlme api for spatial reuse Add vdev mlme APIs for spatial reuse feature. Change-Id: I34780d1fb33f8806c3cfbc763ac36c6092cce5e7 CRs-Fixed: 3213421 --- .../cmn_defs/inc/wlan_cmn_ieee80211.h | 3 + umac/mlme/include/wlan_vdev_mlme.h | 176 ++++++++++++++++++ 2 files changed, 179 insertions(+) diff --git a/umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h b/umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h index 25829bc593..e839455862 100644 --- a/umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h +++ b/umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h @@ -343,6 +343,9 @@ #define WLAN_HE_6GHZ_CHWIDTH_80 2 /* 80MHz Oper Ch width */ #define WLAN_HE_6GHZ_CHWIDTH_160_80_80 3 /* 160/80+80 MHz Oper Ch width */ +#define WLAN_HE_NON_SRG_PD_SR_DISALLOWED 0x02 +#define WLAN_HE_NON_SRG_OFFSET_PRESENT 0x04 + #ifdef WLAN_FEATURE_11BE #define WLAN_EHT_CHWIDTH_20 0 /* 20MHz Oper Ch width */ #define WLAN_EHT_CHWIDTH_40 1 /* 40MHz Oper Ch width */ diff --git a/umac/mlme/include/wlan_vdev_mlme.h b/umac/mlme/include/wlan_vdev_mlme.h index 907142000f..31574133f9 100644 --- a/umac/mlme/include/wlan_vdev_mlme.h +++ b/umac/mlme/include/wlan_vdev_mlme.h @@ -341,6 +341,9 @@ struct vdev_mlme_proto { * @bssid: bssid * @phy_mode: phy mode * @special_vdev_mode: indicates special vdev mode + * @he_spr_sr_ctrl: Spatial reuse SR control + * @he_spr_non_srg_pd_max_offset: Non-SRG PD max offset + * @he_spr_enabled: Spatial reuse enabled or not */ struct vdev_mlme_mgmt_generic { uint32_t rts_threshold; @@ -367,6 +370,11 @@ struct vdev_mlme_mgmt_generic { uint8_t bssid[QDF_MAC_ADDR_SIZE]; uint32_t phy_mode; bool special_vdev_mode; +#ifdef WLAN_FEATURE_11AX + uint8_t he_spr_sr_ctrl; + uint8_t he_spr_non_srg_pd_max_offset; + bool he_spr_enabled; +#endif }; /* @@ -1161,6 +1169,141 @@ static inline uint16_t wlan_vdev_mlme_get_he_mcs_12_13_map( return vdev_mlme->mgmt.sta.he_mcs_12_13_map; } + +/** + * wlan_vdev_mlme_get_sr_ctrl() - get spatial reuse SR control + * @vdev: VDEV object + * + * API to retrieve the spatil reuse SR control from VDEV + * + * Caller need to acquire lock with wlan_vdev_obj_lock() + * + * Return: + * @he_spr_sr_ctrl: SR control + */ +static inline uint8_t wlan_vdev_mlme_get_sr_ctrl(struct wlan_objmgr_vdev *vdev) +{ + struct vdev_mlme_obj *vdev_mlme; + + vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); + if (!vdev_mlme) + return 0; + + return vdev_mlme->mgmt.generic.he_spr_sr_ctrl; +} + +/** + * wlan_vdev_mlme_get_pd_offset() - get spatial reuse pd offset + * @vdev: VDEV object + * + * API to retrieve the spatil reuse pd offset from VDEV + * + * Caller need to acquire lock with wlan_vdev_obj_lock() + * + * Return: + * @he_spr_non_srg_pd_max_offset: max pd offset + */ +static inline uint8_t wlan_vdev_mlme_get_pd_offset( + struct wlan_objmgr_vdev *vdev) +{ + struct vdev_mlme_obj *vdev_mlme; + + vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); + if (!vdev_mlme) + return 0; + + return vdev_mlme->mgmt.generic.he_spr_non_srg_pd_max_offset; +} + +/** + * wlan_vdev_mlme_get_he_spr_enabled() - spatial reuse enabled or not + * @vdev: VDEV object + * + * API to check whether the spatil reuse enabled or not + * + * Caller need to acquire lock with wlan_vdev_obj_lock() + * + * Return: + * @he_spr_enabled: Spatial reuse enabled or not + */ +static inline bool wlan_vdev_mlme_get_he_spr_enabled( + struct wlan_objmgr_vdev *vdev) +{ + struct vdev_mlme_obj *vdev_mlme; + + vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); + if (!vdev_mlme) + return false; + + return vdev_mlme->mgmt.generic.he_spr_enabled; +} + +/** + * wlan_vdev_mlme_set_sr_ctrl() - set spatial reuse SR control + * @vdev: VDEV object + * + * API to set the spatil reuse SR control + * + * Caller need to acquire lock with wlan_vdev_obj_lock() + * + * Return: void + */ +static inline void wlan_vdev_mlme_set_sr_ctrl(struct wlan_objmgr_vdev *vdev, + uint8_t sr_ctrl) +{ + struct vdev_mlme_obj *vdev_mlme; + + vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); + if (!vdev_mlme) + return; + + vdev_mlme->mgmt.generic.he_spr_sr_ctrl = sr_ctrl; +} + +/** + * wlan_vdev_mlme_set_pd_offset() - set spatial reuse pd max offset + * @vdev: VDEV object + * + * API to set the spatil reuse pd max offset + * + * Caller need to acquire lock with wlan_vdev_obj_lock() + * + * Return: void + */ +static inline void wlan_vdev_mlme_set_pd_offset(struct wlan_objmgr_vdev *vdev, + uint8_t pd_max_offset) +{ + struct vdev_mlme_obj *vdev_mlme; + + vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); + if (!vdev_mlme) + return; + + vdev_mlme->mgmt.generic.he_spr_non_srg_pd_max_offset = pd_max_offset; +} + +/** + * wlan_vdev_mlme_set_he_spr_enabled() - set spatial reuse enabled + * @vdev: VDEV object + * + * API to set the spatil reuse enabled + * + * Caller need to acquire lock with wlan_vdev_obj_lock() + * + * Return: void + */ +static inline void wlan_vdev_mlme_set_he_spr_enabled( + struct wlan_objmgr_vdev *vdev, + bool enable_he_spr) +{ + struct vdev_mlme_obj *vdev_mlme; + + vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); + if (!vdev_mlme) + return; + + vdev_mlme->mgmt.generic.he_spr_enabled = enable_he_spr; +} #else static inline void wlan_vdev_mlme_set_he_mcs_12_13_map( struct wlan_objmgr_vdev *vdev, @@ -1173,6 +1316,39 @@ static inline uint16_t wlan_vdev_mlme_get_he_mcs_12_13_map( { return 0; } + +static inline uint8_t wlan_vdev_mlme_get_sr_ctrl(struct wlan_objmgr_vdev *vdev) +{ + return 0; +} + +static inline uint8_t wlan_vdev_mlme_get_pd_offset( + struct wlan_objmgr_vdev *vdev) +{ + return 0; +} + +static inline bool wlan_vdev_mlme_get_he_spr_enabled( + struct wlan_objmgr_vdev *vdev) +{ + return 0; +} + +static inline void wlan_vdev_mlme_set_sr_ctrl(struct wlan_objmgr_vdev *vdev, + uint8_t sr_ctrl) +{ +} + +static inline void wlan_vdev_mlme_set_pd_offset(struct wlan_objmgr_vdev *vdev, + uint8_t pd_max_offset) +{ +} + +static inline void wlan_vdev_mlme_set_he_spr_enabled( + struct wlan_objmgr_vdev *vdev, + bool enable_he_spr) +{ +} #endif /**