From cb2c6707f60c6d61fb8e5dc216c4677165b20b9f Mon Sep 17 00:00:00 2001 From: Bing Sun Date: Wed, 17 Aug 2022 18:20:43 +0800 Subject: [PATCH] qcacmn: Add API to update peer channel width and puncture parameter Add API to send peer param WMI_PEER_CHWIDTH_PUNCTURE_20MHZ_BITMAP Change-Id: Id05629b12059ff2258e196b3e9aa78f5fb52bda4 CRs-Fixed: 3269745 --- .../vdev_mgr/src/target_if_vdev_mgr_tx_ops.c | 102 +++++++++++++++++ .../lmac_if/inc/wlan_lmac_if_def.h | 5 + .../dispatcher/inc/wlan_cm_api.h | 19 ++++ .../dispatcher/src/wlan_cm_api.c | 106 ++++++++++++++++++ .../inc/wlan_vdev_mgr_tgt_if_tx_api.h | 16 ++- .../dispatcher/inc/wlan_vdev_mgr_utils_api.h | 14 +++ .../dispatcher/inc/wlan_vdev_mlme_api.h | 10 ++ .../src/wlan_vdev_mgr_tgt_if_tx_api.c | 28 ++++- .../dispatcher/src/wlan_vdev_mgr_utils_api.c | 9 ++ wmi/src/wmi_unified_tlv.c | 87 +++++++++++++- 10 files changed, 392 insertions(+), 4 deletions(-) diff --git a/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c b/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c index 9d0ee1ad13..b8240e0782 100644 --- a/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c +++ b/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c @@ -1268,6 +1268,106 @@ static void target_if_vdev_register_set_mac_address( } #endif +/** + * target_if_phy_ch_width_to_wmi_chan_width() - convert channel width from + * phy_ch_width to + * wmi_host_channel_width + * @ch_width: enum phy_ch_width + * + * return: wmi_host_channel_width + */ +static wmi_host_channel_width +target_if_phy_ch_width_to_wmi_chan_width(enum phy_ch_width ch_width) +{ + switch (ch_width) { + case CH_WIDTH_20MHZ: + return WMI_HOST_CHAN_WIDTH_20; + case CH_WIDTH_40MHZ: + return WMI_HOST_CHAN_WIDTH_40; + case CH_WIDTH_80MHZ: + return WMI_HOST_CHAN_WIDTH_80; + case CH_WIDTH_160MHZ: + return WMI_HOST_CHAN_WIDTH_160; + case CH_WIDTH_80P80MHZ: + return WMI_HOST_CHAN_WIDTH_80P80; + case CH_WIDTH_5MHZ: + return WMI_HOST_CHAN_WIDTH_5; + case CH_WIDTH_10MHZ: + return WMI_HOST_CHAN_WIDTH_10; + case CH_WIDTH_320MHZ: + return WMI_HOST_CHAN_WIDTH_320; + default: + return WMI_HOST_CHAN_WIDTH_20; + } +} + +/** + * target_if_vdev_peer_mlme_param_2_wmi() - convert peer parameter from mlme to + * wmi + * @mlme_id: peer parameter id in mlme layer + * @param_value: peer parameter value in mlme layer + * @param: pointer to peer_set_params + * + * Return: peer parameter id in wmi layer + */ +static void +target_if_vdev_peer_mlme_param_2_wmi(enum wlan_mlme_peer_param_id mlme_id, + uint32_t param_value, + struct peer_set_params *param) +{ + enum phy_ch_width bw; + + switch (mlme_id) { + case WLAN_MLME_PEER_BW_PUNCTURE: + param->param_id = WMI_HOST_PEER_CHWIDTH_PUNCTURE_20MHZ_BITMAP; + param->param_value = param_value; + bw = QDF_GET_BITS(param_value, 0, 8); + QDF_SET_BITS(param->param_value, 0, 8, + target_if_phy_ch_width_to_wmi_chan_width(bw)); + break; + default: + param->param_id = mlme_id; + param->param_value = param_value; + break; + } +} + +/** + * target_if_vdev_peer_set_param_send() - send peer param + * @vdev: Pointer to vdev object. + * @peer_mac_addr: peer mac address + * @param_id: peer param id + * @param_value: peer param value + * + * Return: QDF_STATUS + */ +static QDF_STATUS target_if_vdev_peer_set_param_send( + struct wlan_objmgr_vdev *vdev, + uint8_t *peer_mac_addr, + uint32_t param_id, + uint32_t param_value) +{ + struct peer_set_params param; + wmi_unified_t wmi_handle; + + if (!peer_mac_addr || !vdev) { + mlme_err("invalid input"); + return QDF_STATUS_E_INVAL; + } + wmi_handle = target_if_vdev_mgr_wmi_handle_get(vdev); + if (!wmi_handle) { + mlme_err("Failed to get WMI handle!"); + return QDF_STATUS_E_INVAL; + } + + qdf_mem_zero(¶m, sizeof(param)); + + target_if_vdev_peer_mlme_param_2_wmi(param_id, param_value, ¶m); + param.vdev_id = wlan_vdev_get_id(vdev); + + return wmi_set_peer_param_send(wmi_handle, peer_mac_addr, ¶m); +} + QDF_STATUS target_if_vdev_mgr_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops) { @@ -1337,5 +1437,7 @@ target_if_vdev_mgr_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops) mlme_tx_ops->vdev_mgr_rsp_timer_stop = target_if_vdev_mgr_rsp_timer_stop; target_if_vdev_register_set_mac_address(mlme_tx_ops); + mlme_tx_ops->vdev_peer_set_param_send = + target_if_vdev_peer_set_param_send; return QDF_STATUS_SUCCESS; } diff --git a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h index ae3677b735..bcd1b8c85e 100644 --- a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h +++ b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h @@ -461,6 +461,7 @@ enum wlan_mlme_cfg_id; * @psoc_wake_lock_deinit: De-Initialize psoc wake lock for vdev response timer * @get_hw_link_id: Get hw_link_id for pdev * @vdev_send_set_mac_addr: API to send set MAC address request to FW + * @vdev_peer_set_param_send: API to send peer param to FW */ struct wlan_lmac_if_mlme_tx_ops { uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev); @@ -559,6 +560,10 @@ QDF_STATUS (*vdev_send_set_mac_addr)(struct qdf_mac_addr mac_addr, struct qdf_mac_addr mld_addr, struct wlan_objmgr_vdev *vdev); #endif + QDF_STATUS (*vdev_peer_set_param_send)(struct wlan_objmgr_vdev *vdev, + uint8_t *peer_mac_addr, + uint32_t param_id, + uint32_t param_value); }; /** diff --git a/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h b/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h index 8c20a37ab5..30e2c3df43 100644 --- a/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h +++ b/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h @@ -475,4 +475,23 @@ struct reduced_neighbor_report *wlan_cm_get_rnr(struct wlan_objmgr_vdev *vdev, QDF_STATUS wlan_cm_disc_cont_after_rso_stop(struct wlan_objmgr_vdev *vdev, struct wlan_cm_vdev_discon_req *req); + +#ifdef WLAN_FEATURE_11BE +/** + * wlan_cm_sta_update_puncture() - update puncture and channel width for sta + * @vdev: vdev + * @peer_mac: peer mac address + * @ori_punc: original puncture bitmap from EHT operation IE + * @ori_bw: bandwidth information according to EHT operation IE + * @ccfs0: EHT Channel Centre Frequency Segment0 information + * @ccfs1: EHT Channel Centre Frequency Segment1 information + * @new_bw: bandwidth to be set + */ +QDF_STATUS wlan_cm_sta_update_bw_puncture(struct wlan_objmgr_vdev *vdev, + uint8_t *peer_mac, + uint16_t ori_punc, + enum phy_ch_width ori_bw, + uint8_t ccfs0, uint8_t ccfs1, + enum phy_ch_width new_bw); +#endif /* WLAN_FEATURE_11BE */ #endif /* __WLAN_CM_UCFG_API_H */ diff --git a/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_api.c b/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_api.c index 823ee1a3a7..875f8400ec 100644 --- a/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_api.c +++ b/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_api.c @@ -24,6 +24,7 @@ #include #include "connection_mgr/core/src/wlan_cm_main_api.h" #include "connection_mgr/core/src/wlan_cm_roam.h" +#include QDF_STATUS wlan_cm_start_connect(struct wlan_objmgr_vdev *vdev, struct wlan_cm_connect_req *req) @@ -378,3 +379,108 @@ wlan_cm_disc_cont_after_rso_stop(struct wlan_objmgr_vdev *vdev, { return cm_handle_rso_stop_rsp(vdev, req); } + +#ifdef WLAN_FEATURE_11BE +QDF_STATUS wlan_cm_sta_update_bw_puncture(struct wlan_objmgr_vdev *vdev, + uint8_t *peer_mac, + uint16_t ori_punc, + enum phy_ch_width ori_bw, + uint8_t ccfs0, uint8_t ccfs1, + enum phy_ch_width new_bw) +{ + struct wlan_channel *des_chan; + uint16_t curr_punc = 0; + uint16_t new_punc = 0; + enum phy_ch_width curr_bw; + uint16_t primary_puncture_bitmap = 0; + struct wlan_objmgr_pdev *pdev; + struct reg_channel_list chan_list; + qdf_freq_t sec_ch_2g_freq = 0; + qdf_freq_t center_freq_320 = 0; + qdf_freq_t center_freq_40 = 0; + uint8_t band_mask; + uint32_t bw_puncture = 0; + + if (!vdev || !peer_mac) { + mlme_err("invalid input parameters"); + return QDF_STATUS_E_INVAL; + } + pdev = wlan_vdev_get_pdev(vdev); + des_chan = wlan_vdev_mlme_get_des_chan(vdev); + if (!des_chan || !pdev) { + mlme_err("invalid des chan"); + return QDF_STATUS_E_INVAL; + } + if (ori_bw == CH_WIDTH_320MHZ) { + if (WLAN_REG_IS_6GHZ_CHAN_FREQ(des_chan->ch_freq)) + band_mask = BIT(REG_BAND_6G); + else + band_mask = BIT(REG_BAND_5G); + center_freq_320 = wlan_reg_chan_band_to_freq(pdev, ccfs1, + band_mask); + } else if (ori_bw == CH_WIDTH_40MHZ) { + if (WLAN_REG_IS_24GHZ_CH_FREQ(des_chan->ch_freq)) { + band_mask = BIT(REG_BAND_2G); + center_freq_40 = wlan_reg_chan_band_to_freq(pdev, + ccfs0, + band_mask); + if (center_freq_40 == des_chan->ch_freq + BW_10_MHZ) + sec_ch_2g_freq = des_chan->ch_freq + BW_20_MHZ; + if (center_freq_40 == des_chan->ch_freq - BW_10_MHZ) + sec_ch_2g_freq = des_chan->ch_freq - BW_20_MHZ; + } + } + qdf_mem_zero(&chan_list, sizeof(chan_list)); + curr_punc = des_chan->puncture_bitmap; + curr_bw = des_chan->ch_width; + wlan_reg_extract_puncture_by_bw(ori_bw, ori_punc, + des_chan->ch_freq, + center_freq_320, + CH_WIDTH_20MHZ, + &primary_puncture_bitmap); + if (primary_puncture_bitmap) { + mlme_err("sta vdev %d freq %d RX bw %d puncture 0x%x primary chan is punctured", + wlan_vdev_get_id(vdev), des_chan->ch_freq, + ori_bw, ori_punc); + return QDF_STATUS_E_FAULT; + } + if (new_bw == ori_bw) + new_punc = ori_punc; + else + wlan_reg_extract_puncture_by_bw(ori_bw, ori_punc, + des_chan->ch_freq, + center_freq_320, + new_bw, + &new_punc); + if (curr_bw == new_bw) { + if (curr_punc != new_punc) + des_chan->puncture_bitmap = new_punc; + else + return QDF_STATUS_SUCCESS; + } else { + if (new_bw != CH_WIDTH_320MHZ) + center_freq_320 = 0; + wlan_reg_fill_channel_list(pdev, des_chan->ch_freq, + sec_ch_2g_freq, new_bw, + center_freq_320, &chan_list, + true); + des_chan->ch_freq_seg1 = + chan_list.chan_param[0].center_freq_seg0; + des_chan->ch_freq_seg2 = + chan_list.chan_param[0].center_freq_seg1; + des_chan->ch_cfreq1 = chan_list.chan_param[0].mhz_freq_seg0; + des_chan->ch_cfreq2 = chan_list.chan_param[1].mhz_freq_seg1; + des_chan->puncture_bitmap = new_punc; + des_chan->ch_width = new_bw; + } + mlme_debug("sta vdev %d freq %d bw %d puncture 0x%x ch_cfreq1 %d ch_cfreq2 %d", + wlan_vdev_get_id(vdev), des_chan->ch_freq, + des_chan->ch_width, des_chan->puncture_bitmap, + des_chan->ch_cfreq1, des_chan->ch_cfreq2); + QDF_SET_BITS(bw_puncture, 0, 8, des_chan->ch_width); + QDF_SET_BITS(bw_puncture, 8, 16, des_chan->puncture_bitmap); + return wlan_util_vdev_peer_set_param_send(vdev, peer_mac, + WLAN_MLME_PEER_BW_PUNCTURE, + bw_puncture); +} +#endif /* WLAN_FEATURE_11BE */ diff --git a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_api.h b/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_api.h index 49437f1c0a..40ec44a1fb 100644 --- a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_api.h +++ b/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_api.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2019, 2021 The Linux Foundation. All rights reserved. - * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -346,4 +346,18 @@ QDF_STATUS tgt_vdev_mgr_cdp_vdev_attach(struct vdev_mlme_obj *mlme_obj); */ QDF_STATUS tgt_vdev_mgr_cdp_vdev_detach(struct vdev_mlme_obj *mlme_obj); #endif + +/** + * tgt_vdev_peer_set_param_send() - API to send peer param + * @vdev: Pointer to object manager VDEV + * @peer_mac_addr: pointer to peer mac address + * @param_id: peer param id + * @param_value: peer param value + * + * Return: QDF_STATUS + */ +QDF_STATUS tgt_vdev_peer_set_param_send(struct wlan_objmgr_vdev *vdev, + uint8_t *peer_mac_addr, + uint32_t param_id, + uint32_t param_value); #endif /* __WLAN_VDEV_MGR_TX_OPS_API_H__ */ diff --git a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_utils_api.h b/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_utils_api.h index 6210c8539c..508e204c66 100644 --- a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_utils_api.h +++ b/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_utils_api.h @@ -183,4 +183,18 @@ QDF_STATUS wlan_util_vdev_mgr_quiet_offload( struct wlan_objmgr_psoc *psoc, struct vdev_sta_quiet_event *quiet_event); #endif /* WLAN_FEATURE_11BE_MLO */ + +/** + * wlan_util_vdev_peer_set_param_send() - send peer param + * @vdev: Pointer to vdev object. + * @peer_mac_addr: peer mac address + * @param_id: peer param id + * @param_value: peer param value + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_util_vdev_peer_set_param_send(struct wlan_objmgr_vdev *vdev, + uint8_t *peer_mac_addr, + uint32_t param_id, + uint32_t param_value); #endif /* __WLAN_VDEV_MGR_UTILS_API_H__ */ diff --git a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mlme_api.h b/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mlme_api.h index 2984d0b7df..04d841f701 100644 --- a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mlme_api.h +++ b/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mlme_api.h @@ -23,6 +23,16 @@ #define _WLAN_VDEV_MLME_API_H_ #include + +/** + * wlan_mlme_peer_param_id - peer param id in mlme layer + * @WLAN_MLME_PEER_BW_PUNCTURE: update puncture 20 MHz bitmap + */ +enum wlan_mlme_peer_param_id { + WLAN_MLME_PEER_BW_PUNCTURE, + WLAN_MLME_PEER_MAX +}; + /** * wlan_vdev_mlme_get_cmpt_obj - Retrieves MLME component object * from VDEV object diff --git a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_tx_api.c b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_tx_api.c index 78d9504325..76e78a448b 100644 --- a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_tx_api.c +++ b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_tx_api.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved. - * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -792,3 +792,29 @@ QDF_STATUS tgt_vdev_mgr_send_set_mac_addr(struct qdf_mac_addr mac_addr, return status; } #endif + +QDF_STATUS tgt_vdev_peer_set_param_send(struct wlan_objmgr_vdev *vdev, + uint8_t *peer_mac_addr, + uint32_t param_id, + uint32_t param_value) +{ + struct wlan_lmac_if_mlme_tx_ops *txops; + uint8_t vdev_id; + QDF_STATUS status; + + vdev_id = wlan_vdev_get_id(vdev); + txops = wlan_vdev_mlme_get_lmac_txops(vdev); + if (!txops || !txops->vdev_peer_set_param_send) { + mlme_err("VDEV_%d: No Tx Ops", vdev_id); + return QDF_STATUS_E_INVAL; + } + + status = txops->vdev_peer_set_param_send(vdev, peer_mac_addr, + param_id, param_value); + if (QDF_IS_STATUS_ERROR(status)) + mlme_err("VDEV_%d: peer " QDF_MAC_ADDR_FMT " param_id %d param_value %d Error %d", + vdev_id, QDF_MAC_ADDR_REF(peer_mac_addr), param_id, + param_value, status); + + return status; +} diff --git a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c index 253206cc42..33cd005d46 100644 --- a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c +++ b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c @@ -892,3 +892,12 @@ QDF_STATUS wlan_util_vdev_mgr_quiet_offload( return QDF_STATUS_SUCCESS; } #endif /* WLAN_FEATURE_11BE_MLO */ + +QDF_STATUS wlan_util_vdev_peer_set_param_send(struct wlan_objmgr_vdev *vdev, + uint8_t *peer_mac_addr, + uint32_t param_id, + uint32_t param_value) +{ + return tgt_vdev_peer_set_param_send(vdev, peer_mac_addr, + param_id, param_value); +} diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index e434762b36..0a74aeabf7 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -1630,6 +1630,87 @@ static inline uint32_t convert_host_peer_param_id_to_target_id_tlv( } #endif +/** + * wmi_host_chan_bw_to_target_chan_bw - convert wmi_host_channel_width to + * wmi_channel_width + * @bw: wmi_host_channel_width channel width + * + * Return: wmi_channel_width + */ +static wmi_channel_width wmi_host_chan_bw_to_target_chan_bw( + wmi_host_channel_width bw) +{ + wmi_channel_width target_bw = WMI_CHAN_WIDTH_20; + + switch (bw) { + case WMI_HOST_CHAN_WIDTH_20: + target_bw = WMI_CHAN_WIDTH_20; + break; + case WMI_HOST_CHAN_WIDTH_40: + target_bw = WMI_CHAN_WIDTH_40; + break; + case WMI_HOST_CHAN_WIDTH_80: + target_bw = WMI_CHAN_WIDTH_80; + break; + case WMI_HOST_CHAN_WIDTH_160: + target_bw = WMI_CHAN_WIDTH_160; + break; + case WMI_HOST_CHAN_WIDTH_80P80: + target_bw = WMI_CHAN_WIDTH_80P80; + break; + case WMI_HOST_CHAN_WIDTH_5: + target_bw = WMI_CHAN_WIDTH_5; + break; + case WMI_HOST_CHAN_WIDTH_10: + target_bw = WMI_CHAN_WIDTH_10; + break; + case WMI_HOST_CHAN_WIDTH_165: + target_bw = WMI_CHAN_WIDTH_165; + break; + case WMI_HOST_CHAN_WIDTH_160P160: + target_bw = WMI_CHAN_WIDTH_160P160; + break; + case WMI_HOST_CHAN_WIDTH_320: + target_bw = WMI_CHAN_WIDTH_320; + break; + default: + break; + } + + return target_bw; +} + +/** + * convert_host_peer_param_value_to_target_value_tlv() - convert host peer + * param value to target + * @param_id: target param id + * @param_value: host param value + * + * @Return: target param value + */ +static uint32_t convert_host_peer_param_value_to_target_value_tlv( + uint32_t param_id, uint32_t param_value) +{ + uint32_t fw_param_value = 0; + wmi_host_channel_width bw; + uint16_t punc; + + switch (param_id) { + case WMI_PEER_CHWIDTH_PUNCTURE_20MHZ_BITMAP: + bw = QDF_GET_BITS(param_value, 0, 8); + punc = QDF_GET_BITS(param_value, 8, 16); + QDF_SET_BITS(fw_param_value, 0, 8, + wmi_host_chan_bw_to_target_chan_bw(bw)); + QDF_SET_BITS(fw_param_value, 8, 16, ~punc); + break; + default: + fw_param_value = param_value; + break; + } + + return fw_param_value; +} + #ifdef WLAN_SUPPORT_PPEDS /** * peer_ppe_ds_param_send_tlv() - Set peer PPE DS config @@ -1709,13 +1790,15 @@ static QDF_STATUS send_peer_param_cmd_tlv(wmi_unified_t wmi, wmi_buf_t buf; int32_t err; uint32_t param_id; + uint32_t param_value; param_id = convert_host_peer_param_id_to_target_id_tlv(param->param_id); if (param_id == WMI_UNAVAILABLE_PARAM) { wmi_err("Unavailable param %d", param->param_id); return QDF_STATUS_E_NOSUPPORT; } - + param_value = convert_host_peer_param_value_to_target_value_tlv( + param_id, param->param_value); buf = wmi_buf_alloc(wmi, sizeof(*cmd)); if (!buf) return QDF_STATUS_E_NOMEM; @@ -1728,7 +1811,7 @@ static QDF_STATUS send_peer_param_cmd_tlv(wmi_unified_t wmi, cmd->vdev_id = param->vdev_id; WMI_CHAR_ARRAY_TO_MAC_ADDR(peer_addr, &cmd->peer_macaddr); cmd->param_id = param_id; - cmd->param_value = param->param_value; + cmd->param_value = param_value; wmi_debug("vdev_id %d peer_mac: "QDF_MAC_ADDR_FMT" param_id: %u param_value: %x", cmd->vdev_id,