1 /* 2 * Copyright (c) 2019 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021 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 34 void ucfg_wlan_vdev_mgr_get_param_bssid( 35 struct wlan_objmgr_vdev *vdev, 36 uint8_t *bssid) 37 { 38 struct vdev_mlme_mgmt *mlme_mgmt; 39 struct vdev_mlme_obj *vdev_mlme; 40 41 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 42 vdev, WLAN_UMAC_COMP_MLME); 43 44 if (!vdev_mlme) { 45 mlme_err("VDEV_MLME is NULL"); 46 return; 47 } 48 49 mlme_mgmt = &vdev_mlme->mgmt; 50 51 qdf_mem_copy(bssid, mlme_mgmt->generic.bssid, 52 QDF_MAC_ADDR_SIZE); 53 } 54 55 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param_bssid); 56 57 void ucfg_wlan_vdev_mgr_get_param_ssid( 58 struct wlan_objmgr_vdev *vdev, 59 uint8_t *ssid, uint8_t *ssid_len) 60 { 61 struct vdev_mlme_mgmt *mlme_mgmt; 62 struct vdev_mlme_obj *vdev_mlme; 63 64 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 65 vdev, WLAN_UMAC_COMP_MLME); 66 67 if (!vdev_mlme) { 68 QDF_ASSERT(0); 69 return; 70 } 71 72 mlme_mgmt = &vdev_mlme->mgmt; 73 74 *ssid_len = mlme_mgmt->generic.ssid_len; 75 qdf_mem_copy(ssid, mlme_mgmt->generic.ssid, 76 mlme_mgmt->generic.ssid_len); 77 } 78 79 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param_ssid); 80 81 void ucfg_wlan_vdev_mgr_get_beacon_buffer( 82 struct wlan_objmgr_vdev *vdev, 83 qdf_nbuf_t buf) 84 { 85 struct vdev_mlme_obj *vdev_mlme; 86 struct vdev_mlme_mgmt *mlme_mgmt; 87 88 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 89 vdev, WLAN_UMAC_COMP_MLME); 90 91 if (!vdev_mlme) { 92 QDF_ASSERT(0); 93 return; 94 } 95 96 mlme_mgmt = &vdev_mlme->mgmt; 97 98 buf = mlme_mgmt->beacon_info.beacon_buffer; 99 } 100 101 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_beacon_buffer); 102 103 void ucfg_wlan_vdev_mgr_get_trans_bssid( 104 struct wlan_objmgr_vdev *vdev, 105 uint8_t *addr) 106 { 107 struct vdev_mlme_obj *vdev_mlme; 108 struct vdev_mlme_mgmt *mlme_mgmt; 109 110 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 111 vdev, WLAN_UMAC_COMP_MLME); 112 113 if (!vdev_mlme) { 114 QDF_ASSERT(0); 115 return; 116 } 117 118 mlme_mgmt = &vdev_mlme->mgmt; 119 120 qdf_mem_copy(addr, mlme_mgmt->mbss_11ax.trans_bssid, QDF_MAC_ADDR_SIZE); 121 } 122 123 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_trans_bssid); 124 125 void ucfg_wlan_vdev_mgr_get_tsf_adjust( 126 struct wlan_objmgr_vdev *vdev, 127 uint64_t *tsf_adjust) 128 { 129 struct vdev_mlme_obj *vdev_mlme; 130 struct vdev_mlme_proto *mlme_proto; 131 132 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); 133 134 if (!vdev_mlme) { 135 mlme_err("VDEV MLME is NULL"); 136 return; 137 } 138 139 mlme_proto = &vdev_mlme->proto; 140 141 *tsf_adjust = mlme_proto->generic.tsfadjust; 142 } 143 144 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_tsf_adjust); 145 146 QDF_STATUS ucfg_wlan_vdev_mgr_set_param( 147 struct wlan_objmgr_vdev *vdev, 148 enum wlan_mlme_cfg_id param_id, 149 struct wlan_vdev_mgr_cfg mlme_cfg) 150 { 151 struct vdev_mlme_obj *vdev_mlme; 152 153 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 154 vdev, 155 WLAN_UMAC_COMP_MLME); 156 157 if (!vdev_mlme) { 158 QDF_ASSERT(0); 159 return QDF_STATUS_E_FAILURE; 160 } 161 162 return wlan_util_vdev_mlme_set_param(vdev_mlme, param_id, mlme_cfg); 163 } 164 165 qdf_export_symbol(ucfg_wlan_vdev_mgr_set_param); 166 167 void ucfg_wlan_vdev_mgr_get_param( 168 struct wlan_objmgr_vdev *vdev, 169 enum wlan_mlme_cfg_id param_id, 170 uint32_t *value) 171 { 172 struct vdev_mlme_obj *vdev_mlme; 173 174 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 175 vdev, 176 WLAN_UMAC_COMP_MLME); 177 178 if (!vdev_mlme) { 179 QDF_ASSERT(0); 180 return; 181 } 182 183 wlan_util_vdev_mlme_get_param(vdev_mlme, param_id, value); 184 } 185 186 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param); 187 188 #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE 189 QDF_STATUS ucfg_vdev_mgr_cdp_vdev_attach(struct wlan_objmgr_vdev *vdev) 190 { 191 struct vdev_mlme_obj *vdev_mlme; 192 193 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 194 vdev, 195 WLAN_UMAC_COMP_MLME); 196 197 if (!vdev_mlme) 198 return QDF_STATUS_E_FAILURE; 199 200 return vdev_mgr_cdp_vdev_attach(vdev_mlme); 201 } 202 203 qdf_export_symbol(ucfg_vdev_mgr_cdp_vdev_attach); 204 205 QDF_STATUS ucfg_vdev_mgr_cdp_vdev_detach(struct wlan_objmgr_vdev *vdev) 206 { 207 struct vdev_mlme_obj *vdev_mlme; 208 209 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 210 vdev, 211 WLAN_UMAC_COMP_MLME); 212 213 if (!vdev_mlme) { 214 QDF_ASSERT(0); 215 return QDF_STATUS_E_FAILURE; 216 } 217 218 return vdev_mgr_cdp_vdev_detach(vdev_mlme); 219 } 220 221 qdf_export_symbol(ucfg_vdev_mgr_cdp_vdev_detach); 222 #endif 223