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 32 void ucfg_wlan_vdev_mgr_get_param_bssid( 33 struct wlan_objmgr_vdev *vdev, 34 uint8_t *bssid) 35 { 36 struct vdev_mlme_mgmt *mlme_mgmt; 37 struct vdev_mlme_obj *vdev_mlme; 38 39 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 40 vdev, WLAN_UMAC_COMP_MLME); 41 42 if (!vdev_mlme) { 43 mlme_err("VDEV_MLME is NULL"); 44 return; 45 } 46 47 mlme_mgmt = &vdev_mlme->mgmt; 48 49 qdf_mem_copy(bssid, mlme_mgmt->generic.bssid, 50 QDF_MAC_ADDR_SIZE); 51 } 52 53 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param_bssid); 54 55 void ucfg_wlan_vdev_mgr_get_param_ssid( 56 struct wlan_objmgr_vdev *vdev, 57 uint8_t *ssid, uint8_t *ssid_len) 58 { 59 struct vdev_mlme_mgmt *mlme_mgmt; 60 struct vdev_mlme_obj *vdev_mlme; 61 62 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 63 vdev, WLAN_UMAC_COMP_MLME); 64 65 if (!vdev_mlme) { 66 QDF_ASSERT(0); 67 return; 68 } 69 70 mlme_mgmt = &vdev_mlme->mgmt; 71 72 *ssid_len = mlme_mgmt->generic.ssid_len; 73 qdf_mem_copy(ssid, mlme_mgmt->generic.ssid, 74 mlme_mgmt->generic.ssid_len); 75 } 76 77 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param_ssid); 78 79 void ucfg_wlan_vdev_mgr_get_beacon_buffer( 80 struct wlan_objmgr_vdev *vdev, 81 qdf_nbuf_t buf) 82 { 83 struct vdev_mlme_obj *vdev_mlme; 84 struct vdev_mlme_mgmt *mlme_mgmt; 85 86 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 87 vdev, WLAN_UMAC_COMP_MLME); 88 89 if (!vdev_mlme) { 90 QDF_ASSERT(0); 91 return; 92 } 93 94 mlme_mgmt = &vdev_mlme->mgmt; 95 96 buf = mlme_mgmt->beacon_info.beacon_buffer; 97 } 98 99 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_beacon_buffer); 100 101 void ucfg_wlan_vdev_mgr_get_trans_bssid( 102 struct wlan_objmgr_vdev *vdev, 103 uint8_t *addr) 104 { 105 struct vdev_mlme_obj *vdev_mlme; 106 struct vdev_mlme_mgmt *mlme_mgmt; 107 108 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 109 vdev, WLAN_UMAC_COMP_MLME); 110 111 if (!vdev_mlme) { 112 QDF_ASSERT(0); 113 return; 114 } 115 116 mlme_mgmt = &vdev_mlme->mgmt; 117 118 qdf_mem_copy(addr, mlme_mgmt->mbss_11ax.trans_bssid, QDF_MAC_ADDR_SIZE); 119 } 120 121 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_trans_bssid); 122 123 void ucfg_wlan_vdev_mgr_get_tsf_adjust( 124 struct wlan_objmgr_vdev *vdev, 125 uint64_t *tsf_adjust) 126 { 127 struct vdev_mlme_obj *vdev_mlme; 128 struct vdev_mlme_proto *mlme_proto; 129 130 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); 131 132 if (!vdev_mlme) { 133 mlme_err("VDEV MLME is NULL"); 134 return; 135 } 136 137 mlme_proto = &vdev_mlme->proto; 138 139 *tsf_adjust = mlme_proto->generic.tsfadjust; 140 } 141 142 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_tsf_adjust); 143 144 QDF_STATUS ucfg_wlan_vdev_mgr_set_param( 145 struct wlan_objmgr_vdev *vdev, 146 enum wlan_mlme_cfg_id param_id, 147 struct wlan_vdev_mgr_cfg mlme_cfg) 148 { 149 struct vdev_mlme_obj *vdev_mlme; 150 151 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 152 vdev, 153 WLAN_UMAC_COMP_MLME); 154 155 if (!vdev_mlme) { 156 QDF_ASSERT(0); 157 return QDF_STATUS_E_FAILURE; 158 } 159 160 return wlan_util_vdev_mlme_set_param(vdev_mlme, param_id, mlme_cfg); 161 } 162 163 qdf_export_symbol(ucfg_wlan_vdev_mgr_set_param); 164 165 void ucfg_wlan_vdev_mgr_get_param( 166 struct wlan_objmgr_vdev *vdev, 167 enum wlan_mlme_cfg_id param_id, 168 uint32_t *value) 169 { 170 struct vdev_mlme_obj *vdev_mlme; 171 172 vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj( 173 vdev, 174 WLAN_UMAC_COMP_MLME); 175 176 if (!vdev_mlme) { 177 QDF_ASSERT(0); 178 return; 179 } 180 181 wlan_util_vdev_mlme_get_param(vdev_mlme, param_id, value); 182 } 183 184 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param); 185