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