qcacld-3.0: Configure vdev HE Tx beamform settings to FW
Configure vdev HE Tx beamforming parameters to FW. Change-Id: I990d9a9cb84300b07dd6acf67bbddf72abaf80b5 CRs-Fixed: 2609937
This commit is contained in:
parent
77ccdbfdf3
commit
8bb8b28622
@ -6817,6 +6817,7 @@ void lim_update_usr_he_cap(struct mac_context *mac_ctx, struct pe_session *sessi
|
||||
struct he_cap_network_endian *he_cap_from_ie;
|
||||
uint8_t extracted_buff[DOT11F_IE_HE_CAP_MAX_LEN + 2];
|
||||
QDF_STATUS status;
|
||||
struct sir_vht_config *vht_cfg = &session->vht_config;
|
||||
qdf_mem_zero(extracted_buff, sizeof(extracted_buff));
|
||||
status = lim_strip_ie(mac_ctx, add_ie->probeRespBCNData_buff,
|
||||
&add_ie->probeRespBCNDataLen,
|
||||
@ -6843,6 +6844,23 @@ void lim_update_usr_he_cap(struct mac_context *mac_ctx, struct pe_session *sessi
|
||||
|
||||
pe_debug("After update: su_beamformer: %d, su_beamformee: %d, mu_beamformer: %d",
|
||||
he_cap->su_beamformer, he_cap->su_beamformee, he_cap->mu_beamformer);
|
||||
if (!he_cap->su_beamformer) {
|
||||
he_cap->mu_beamformer = 0;
|
||||
he_cap->num_sounding_lt_80 = 0;
|
||||
he_cap->num_sounding_gt_80 = 0;
|
||||
vht_cfg->su_beam_former = 0;
|
||||
vht_cfg->mu_beam_former = 0;
|
||||
vht_cfg->num_soundingdim = 0;
|
||||
}
|
||||
if (!he_cap->su_beamformee) {
|
||||
he_cap->bfee_sts_lt_80 = 0;
|
||||
he_cap->bfee_sts_gt_80 = 0;
|
||||
vht_cfg->su_beam_formee = 0;
|
||||
vht_cfg->mu_beam_formee = 0;
|
||||
vht_cfg->csnof_beamformer_antSup = 0;
|
||||
}
|
||||
wma_set_he_txbf_params(session->vdev_id, he_cap->su_beamformer,
|
||||
he_cap->su_beamformee, he_cap->mu_beamformer);
|
||||
}
|
||||
|
||||
void lim_decide_he_op(struct mac_context *mac_ctx, uint32_t *mlme_he_ops,
|
||||
|
@ -134,6 +134,33 @@ void wma_populate_peer_he_cap(struct peer_assoc_params *peer,
|
||||
*/
|
||||
void wma_update_vdev_he_ops(uint32_t *he_ops, tDot11fIEhe_op *he_op);
|
||||
|
||||
#define DOT11AX_HEMU_MODE 0x30
|
||||
#define HE_SUBFEE 0
|
||||
#define HE_SUBFER 1
|
||||
#define HE_MUBFEE 2
|
||||
#define HE_MUBFER 3
|
||||
|
||||
/**
|
||||
* wma_set_he_txbf_params() - set HE Tx beamforming params to FW
|
||||
* @vdev_id: VDEV id
|
||||
* @su bfer: SU beamformer capability
|
||||
* @su bfee: SU beamformee capability
|
||||
* @mu bfer: MU beamformer capability
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void wma_set_he_txbf_params(uint8_t vdev_id, bool su_bfer,
|
||||
bool su_bfee, bool mu_bfer);
|
||||
|
||||
|
||||
/**
|
||||
* wma_set_he_txbf_cfg() - set HE Tx beamforming mlme cfg to FW
|
||||
* @mac: Global MAC context
|
||||
* @vdev_id: VDEV id
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void wma_set_he_txbf_cfg(struct mac_context *mac, uint8_t vdev_id);
|
||||
/**
|
||||
* wma_vdev_set_he_bss_params() - set HE OPs in vdev start
|
||||
* @wma: pointer to wma handle
|
||||
@ -257,6 +284,15 @@ void wma_update_vdev_he_ops(uint32_t *he_ops, tDot11fIEhe_op *he_op)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void wma_set_he_txbf_params(uint8_t vdev_id, bool su_bfer,
|
||||
bool su_bfee, bool mu_bfer)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void wma_set_he_txbf_cfg(struct mac_context *mac, uint8_t vdev_id)
|
||||
{
|
||||
}
|
||||
|
||||
static inline QDF_STATUS wma_update_he_ops_ie(tp_wma_handle wma,
|
||||
uint8_t vdev_id, tDot11fIEhe_op *he_ops)
|
||||
{
|
||||
|
@ -2481,28 +2481,6 @@ QDF_STATUS wma_vdev_self_peer_create(struct vdev_mlme_obj *vdev_mlme)
|
||||
return status;
|
||||
}
|
||||
|
||||
#define DOT11AX_HEMU_MODE 0x30
|
||||
#define HE_SUBFEE 0
|
||||
#define HE_SUBFER 1
|
||||
#define HE_MUBFEE 2
|
||||
#define HE_MUBFER 3
|
||||
|
||||
#ifdef WLAN_FEATURE_11AX
|
||||
static inline uint32_t wma_get_txbf_cap(struct mac_context *mac)
|
||||
{
|
||||
return
|
||||
(mac->mlme_cfg->he_caps.dot11_he_cap.su_beamformer << HE_SUBFER) |
|
||||
(mac->mlme_cfg->he_caps.dot11_he_cap.su_beamformee << HE_SUBFEE) |
|
||||
(1 << HE_MUBFEE) |
|
||||
(mac->mlme_cfg->he_caps.dot11_he_cap.mu_beamformer << HE_MUBFER);
|
||||
}
|
||||
#else
|
||||
static inline uint32_t wma_get_txbf_cap(struct mac_context *mac)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS wma_post_vdev_create_setup(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
@ -2517,7 +2495,6 @@ QDF_STATUS wma_post_vdev_create_setup(struct wlan_objmgr_vdev *vdev)
|
||||
struct vdev_mlme_obj *vdev_mlme;
|
||||
tp_wma_handle wma_handle;
|
||||
uint8_t amsdu_val;
|
||||
uint32_t hemu_mode;
|
||||
|
||||
if (!mac) {
|
||||
WMA_LOGE("%s: Failed to get mac", __func__);
|
||||
@ -2684,34 +2661,8 @@ QDF_STATUS wma_post_vdev_create_setup(struct wlan_objmgr_vdev *vdev)
|
||||
WMA_LOGE("failed to set TX_STBC(status = %d)", status);
|
||||
|
||||
wma_set_vdev_mgmt_rate(wma_handle, vdev_id);
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX)) {
|
||||
hemu_mode = DOT11AX_HEMU_MODE;
|
||||
hemu_mode |= wma_get_txbf_cap(mac);
|
||||
/*
|
||||
* Enable / disable trigger access for a AP vdev's peers.
|
||||
* For a STA mode vdev this will enable/disable triggered
|
||||
* access and enable/disable Multi User mode of operation.
|
||||
* A value of 0 in a given bit disables corresponding mode.
|
||||
* bit | hemu mode
|
||||
* ---------------
|
||||
* 0 | HE SUBFEE
|
||||
* 1 | HE SUBFER
|
||||
* 2 | HE MUBFEE
|
||||
* 3 | HE MUBFER
|
||||
* 4 | DL OFDMA, for AP its DL Tx OFDMA for Sta its Rx OFDMA
|
||||
* 5 | UL OFDMA, for AP its Tx OFDMA trigger for Sta its
|
||||
* Rx OFDMA trigger receive & UL response
|
||||
* 6 | UL MUMIMO
|
||||
*/
|
||||
status = wma_vdev_set_param(wma_handle->wmi_handle,
|
||||
vdev_id,
|
||||
WMI_VDEV_PARAM_SET_HEMU_MODE,
|
||||
hemu_mode);
|
||||
WMA_LOGD("set HEMU_MODE (hemu_mode = 0x%x)", hemu_mode);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
WMA_LOGE("failed to set HEMU_MODE(status = %d)",
|
||||
status);
|
||||
}
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
|
||||
wma_set_he_txbf_cfg(mac, vdev_id);
|
||||
|
||||
/* Initialize roaming offload state */
|
||||
if (vdev_mlme->mgmt.generic.type == WMI_VDEV_TYPE_STA &&
|
||||
|
@ -1366,6 +1366,48 @@ QDF_STATUS wma_update_he_ops_ie(tp_wma_handle wma, uint8_t vdev_id,
|
||||
return ret;
|
||||
}
|
||||
|
||||
void wma_set_he_txbf_cfg(struct mac_context *mac, uint8_t vdev_id)
|
||||
{
|
||||
wma_set_he_txbf_params(vdev_id,
|
||||
mac->mlme_cfg->he_caps.dot11_he_cap.su_beamformer,
|
||||
mac->mlme_cfg->he_caps.dot11_he_cap.su_beamformee,
|
||||
mac->mlme_cfg->he_caps.dot11_he_cap.mu_beamformer);
|
||||
}
|
||||
|
||||
void wma_set_he_txbf_params(uint8_t vdev_id, bool su_bfer,
|
||||
bool su_bfee, bool mu_bfer)
|
||||
{
|
||||
uint32_t hemu_mode;
|
||||
QDF_STATUS status;
|
||||
tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA);
|
||||
|
||||
hemu_mode = DOT11AX_HEMU_MODE;
|
||||
hemu_mode |= ((su_bfer << HE_SUBFER) | (su_bfee << HE_SUBFEE) |
|
||||
(mu_bfer << HE_MUBFER) | (su_bfee << HE_MUBFEE));
|
||||
/*
|
||||
* Enable / disable trigger access for a AP vdev's peers.
|
||||
* For a STA mode vdev this will enable/disable triggered
|
||||
* access and enable/disable Multi User mode of operation.
|
||||
* A value of 0 in a given bit disables corresponding mode.
|
||||
* bit | hemu mode
|
||||
* ---------------
|
||||
* 0 | HE SUBFEE
|
||||
* 1 | HE SUBFER
|
||||
* 2 | HE MUBFEE
|
||||
* 3 | HE MUBFER
|
||||
* 4 | DL OFDMA, for AP its DL Tx OFDMA for Sta its Rx OFDMA
|
||||
* 5 | UL OFDMA, for AP its Tx OFDMA trigger for Sta its
|
||||
* Rx OFDMA trigger receive & UL response
|
||||
* 6 | UL MUMIMO
|
||||
*/
|
||||
status = wma_vdev_set_param(wma->wmi_handle, vdev_id,
|
||||
WMI_VDEV_PARAM_SET_HEMU_MODE, hemu_mode);
|
||||
WMA_LOGD("set HEMU_MODE (hemu_mode = 0x%x)", hemu_mode);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
WMA_LOGE("failed to set HEMU_MODE(status = %d)", status);
|
||||
}
|
||||
|
||||
QDF_STATUS wma_get_he_capabilities(struct he_capability *he_cap)
|
||||
{
|
||||
tp_wma_handle wma_handle;
|
||||
|
Loading…
Reference in New Issue
Block a user