1 /* 2 * Copyright (c) 2019 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021,2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 /** 21 * DOC: wlan_vdev_mgr_ucfg_api.c 22 * 23 * This file provides definitions to APIs to get/set mlme fields in 24 * vdev mlme core data structures 25 */ 26 #include <wlan_vdev_mgr_tgt_if_tx_api.h> 27 #include "wlan_vdev_mgr_ucfg_api.h" 28 #include "include/wlan_vdev_mlme.h" 29 #include <wlan_mlme_dbg.h> 30 #include <wlan_vdev_mgr_utils_api.h> 31 #include <wlan_vdev_mlme_api.h> 32 #include <qdf_module.h> 33 #include <wlan_vdev_mgr_api.h> 34 35 void ucfg_wlan_vdev_mgr_get_param_bssid( 36 struct wlan_objmgr_vdev *vdev, 37 uint8_t *bssid) 38 { 39 wlan_vdev_mgr_get_param_bssid(vdev, bssid); 40 } 41 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param_bssid); 42 43 void ucfg_wlan_vdev_mgr_get_param_ssid( 44 struct wlan_objmgr_vdev *vdev, 45 uint8_t *ssid, uint8_t *ssid_len) 46 { 47 struct vdev_mlme_mgmt *mlme_mgmt; 48 struct vdev_mlme_obj *vdev_mlme; 49 50 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 51 vdev, WLAN_UMAC_COMP_MLME); 52 53 if (!vdev_mlme) { 54 QDF_ASSERT(0); 55 return; 56 } 57 58 mlme_mgmt = &vdev_mlme->mgmt; 59 60 *ssid_len = mlme_mgmt->generic.ssid_len; 61 qdf_mem_copy(ssid, mlme_mgmt->generic.ssid, 62 mlme_mgmt->generic.ssid_len); 63 } 64 65 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param_ssid); 66 67 void ucfg_wlan_vdev_mgr_get_beacon_buffer( 68 struct wlan_objmgr_vdev *vdev, 69 qdf_nbuf_t buf) 70 { 71 struct vdev_mlme_obj *vdev_mlme; 72 struct vdev_mlme_mgmt *mlme_mgmt; 73 74 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 75 vdev, WLAN_UMAC_COMP_MLME); 76 77 if (!vdev_mlme) { 78 QDF_ASSERT(0); 79 return; 80 } 81 82 mlme_mgmt = &vdev_mlme->mgmt; 83 84 buf = mlme_mgmt->beacon_info.beacon_buffer; 85 } 86 87 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_beacon_buffer); 88 89 void ucfg_wlan_vdev_mgr_get_trans_bssid( 90 struct wlan_objmgr_vdev *vdev, 91 uint8_t *addr) 92 { 93 struct vdev_mlme_obj *vdev_mlme; 94 struct vdev_mlme_mgmt *mlme_mgmt; 95 96 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 97 vdev, WLAN_UMAC_COMP_MLME); 98 99 if (!vdev_mlme) { 100 QDF_ASSERT(0); 101 return; 102 } 103 104 mlme_mgmt = &vdev_mlme->mgmt; 105 106 qdf_mem_copy(addr, mlme_mgmt->mbss_11ax.trans_bssid, QDF_MAC_ADDR_SIZE); 107 } 108 109 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_trans_bssid); 110 111 void ucfg_wlan_vdev_mgr_get_tsf_adjust( 112 struct wlan_objmgr_vdev *vdev, 113 uint64_t *tsf_adjust) 114 { 115 struct vdev_mlme_obj *vdev_mlme; 116 struct vdev_mlme_proto *mlme_proto; 117 118 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); 119 120 if (!vdev_mlme) { 121 mlme_err("VDEV MLME is NULL"); 122 return; 123 } 124 125 mlme_proto = &vdev_mlme->proto; 126 127 *tsf_adjust = mlme_proto->generic.tsfadjust; 128 } 129 130 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_tsf_adjust); 131 132 QDF_STATUS ucfg_wlan_vdev_mgr_set_param( 133 struct wlan_objmgr_vdev *vdev, 134 enum wlan_mlme_cfg_id param_id, 135 struct wlan_vdev_mgr_cfg mlme_cfg) 136 { 137 struct vdev_mlme_obj *vdev_mlme; 138 139 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 140 vdev, 141 WLAN_UMAC_COMP_MLME); 142 143 if (!vdev_mlme) { 144 QDF_ASSERT(0); 145 return QDF_STATUS_E_FAILURE; 146 } 147 148 return wlan_util_vdev_mlme_set_param(vdev_mlme, param_id, mlme_cfg); 149 } 150 151 qdf_export_symbol(ucfg_wlan_vdev_mgr_set_param); 152 153 void ucfg_wlan_vdev_mgr_get_param( 154 struct wlan_objmgr_vdev *vdev, 155 enum wlan_mlme_cfg_id param_id, 156 uint32_t *value) 157 { 158 struct vdev_mlme_obj *vdev_mlme; 159 160 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 161 vdev, 162 WLAN_UMAC_COMP_MLME); 163 164 if (!vdev_mlme) { 165 QDF_ASSERT(0); 166 return; 167 } 168 169 wlan_util_vdev_mlme_get_param(vdev_mlme, param_id, value); 170 } 171 172 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param); 173 174 #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE 175 QDF_STATUS ucfg_vdev_mgr_cdp_vdev_attach(struct wlan_objmgr_vdev *vdev) 176 { 177 struct vdev_mlme_obj *vdev_mlme; 178 179 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 180 vdev, 181 WLAN_UMAC_COMP_MLME); 182 183 if (!vdev_mlme) 184 return QDF_STATUS_E_FAILURE; 185 186 return vdev_mgr_cdp_vdev_attach(vdev_mlme); 187 } 188 189 qdf_export_symbol(ucfg_vdev_mgr_cdp_vdev_attach); 190 191 QDF_STATUS ucfg_vdev_mgr_cdp_vdev_detach(struct wlan_objmgr_vdev *vdev) 192 { 193 struct vdev_mlme_obj *vdev_mlme; 194 195 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 196 vdev, 197 WLAN_UMAC_COMP_MLME); 198 199 if (!vdev_mlme) { 200 QDF_ASSERT(0); 201 return QDF_STATUS_E_FAILURE; 202 } 203 204 return vdev_mgr_cdp_vdev_detach(vdev_mlme); 205 } 206 207 qdf_export_symbol(ucfg_vdev_mgr_cdp_vdev_detach); 208 #endif 209 210 void 211 ucfg_util_vdev_mgr_set_acs_mode_for_vdev(struct wlan_objmgr_vdev *vdev, 212 bool is_acs_mode) 213 { 214 wlan_util_vdev_mgr_set_acs_mode_for_vdev(vdev, is_acs_mode); 215 } 216