1 /* 2 * Copyright (c) 2017-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: contains core scan function definitions 21 */ 22 #include <wlan_scan_ucfg_api.h> 23 #include <wlan_scan_utils_api.h> 24 #include "wlan_scan_main.h" 25 26 QDF_STATUS wlan_scan_psoc_created_notification(struct wlan_objmgr_psoc *psoc, 27 void *arg_list) 28 { 29 struct wlan_scan_obj *scan_obj; 30 QDF_STATUS status = QDF_STATUS_SUCCESS; 31 32 scan_obj = qdf_mem_malloc_atomic(sizeof(struct wlan_scan_obj)); 33 if (!scan_obj) { 34 scm_err("Failed to allocate memory"); 35 return QDF_STATUS_E_NOMEM; 36 } 37 38 /* Attach scan private date to psoc */ 39 status = wlan_objmgr_psoc_component_obj_attach(psoc, 40 WLAN_UMAC_COMP_SCAN, (void *)scan_obj, 41 QDF_STATUS_SUCCESS); 42 if (QDF_IS_STATUS_ERROR(status)) 43 scm_err("Failed to attach psoc scan component"); 44 else 45 scm_debug("Scan object attach to psoc successful"); 46 47 return status; 48 } 49 50 QDF_STATUS wlan_scan_psoc_destroyed_notification( 51 struct wlan_objmgr_psoc *psoc, 52 void *arg_list) 53 { 54 void *scan_obj = NULL; 55 QDF_STATUS status = QDF_STATUS_SUCCESS; 56 57 scan_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc, 58 WLAN_UMAC_COMP_SCAN); 59 60 if (!scan_obj) { 61 scm_err("Failed to detach scan in psoc ctx"); 62 return QDF_STATUS_E_FAILURE; 63 } 64 65 status = wlan_objmgr_psoc_component_obj_detach(psoc, 66 WLAN_UMAC_COMP_SCAN, scan_obj); 67 if (QDF_IS_STATUS_ERROR(status)) 68 scm_err("Failed to detach psoc scan component"); 69 70 qdf_mem_free(scan_obj); 71 72 return status; 73 } 74 75 QDF_STATUS wlan_scan_vdev_created_notification(struct wlan_objmgr_vdev *vdev, 76 void *arg_list) 77 { 78 struct scan_vdev_obj *scan_vdev_obj; 79 QDF_STATUS status = QDF_STATUS_SUCCESS; 80 81 scan_vdev_obj = qdf_mem_malloc_atomic(sizeof(struct scan_vdev_obj)); 82 if (!scan_vdev_obj) { 83 scm_err("Failed to allocate memory"); 84 return QDF_STATUS_E_NOMEM; 85 } 86 87 /* Attach scan private date to vdev */ 88 status = wlan_objmgr_vdev_component_obj_attach(vdev, 89 WLAN_UMAC_COMP_SCAN, (void *)scan_vdev_obj, 90 QDF_STATUS_SUCCESS); 91 if (QDF_IS_STATUS_ERROR(status)) { 92 scm_err("Failed to attach vdev scan component"); 93 qdf_mem_free(scan_vdev_obj); 94 } else { 95 scm_debug("vdev scan object attach successful"); 96 } 97 98 return status; 99 } 100 101 QDF_STATUS wlan_scan_vdev_destroyed_notification( 102 struct wlan_objmgr_vdev *vdev, 103 void *arg_list) 104 { 105 void *scan_vdev_obj = NULL; 106 QDF_STATUS status = QDF_STATUS_SUCCESS; 107 108 scan_vdev_obj = wlan_objmgr_vdev_get_comp_private_obj(vdev, 109 WLAN_UMAC_COMP_SCAN); 110 111 if (!scan_vdev_obj) { 112 scm_err("Failed to detach scan in vdev ctx"); 113 return QDF_STATUS_E_FAILURE; 114 } 115 116 status = wlan_objmgr_vdev_component_obj_detach(vdev, 117 WLAN_UMAC_COMP_SCAN, scan_vdev_obj); 118 if (QDF_IS_STATUS_ERROR(status)) 119 scm_err("Failed to detach vdev scan component"); 120 121 qdf_mem_free(scan_vdev_obj); 122 123 return status; 124 } 125