1 /* 2 * Copyright (c) 2018-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: Declares VDEV MLME SM APIs and structures 21 */ 22 23 #ifndef _VDEV_MLME_SM_H_ 24 #define _VDEV_MLME_SM_H_ 25 26 #ifdef CMN_VDEV_MLME_SM_ENABLE 27 /** 28 * mlme_vdev_sm_deliver_event() - Delivers event to VDEV MLME SM 29 * @vdev_mlme: MLME VDEV comp object 30 * @event: MLME event 31 * @event_data_len: data size 32 * @event_data: event data 33 * 34 * API to dispatch event to VDEV MLME SM 35 * 36 * Return: SUCCESS: on handling event 37 * FAILURE: on ignoring the event 38 */ 39 QDF_STATUS mlme_vdev_sm_deliver_event(struct vdev_mlme_obj *vdev_mlme, 40 enum wlan_vdev_sm_evt event, 41 uint16_t event_data_len, 42 void *event_data); 43 44 /** 45 * mlme_vdev_sm_print_state_event() - Prints the state/substate, event 46 * @vdev_mlme: MLME VDEV comp object 47 * @event: MLME event 48 * 49 * API to print current state/substate, events in readable format 50 * 51 * Return: void 52 */ 53 void mlme_vdev_sm_print_state_event(struct vdev_mlme_obj *vdev_mlme, 54 enum wlan_vdev_sm_evt event); 55 56 /** 57 * mlme_vdev_sm_print_state_event() - Prints the state/substate 58 * @vdev_mlme: MLME VDEV comp object 59 * 60 * API to print current state/substate 61 * 62 * Return: void 63 */ 64 void mlme_vdev_sm_print_state(struct vdev_mlme_obj *vdev_mlme); 65 #ifdef SM_ENG_HIST_ENABLE 66 /** 67 * mlme_vdev_sm_history_print() - Prints SM history 68 * @vdev_mlme: MLME VDEV comp object 69 * 70 * API to print SM history 71 * 72 * Return: void 73 */ 74 void mlme_vdev_sm_history_print(struct vdev_mlme_obj *vdev_mlme); 75 #endif 76 77 #endif 78 79 /** 80 * mlme_vdev_sm_create - Invoke SME creation for VDEV 81 * @vdev_mlme_obj: VDEV MLME comp object 82 * 83 * API allocates VDEV MLME SM and initializes SM lock 84 * 85 * Return: SUCCESS on successful allocation 86 * FAILURE, if registration fails 87 */ 88 QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme); 89 90 /** 91 * mlme_vdev_sm_destroy - Invoke SME destroy for VDEV 92 * @vdev_mlme_obj: VDEV MLME comp object 93 * 94 * API frees VDEV MLME SM and destroys the SM lock 95 * 96 * Return: SUCCESS on successful destroy 97 * FAILURE, if registration fails 98 */ 99 QDF_STATUS mlme_vdev_sm_destroy(struct vdev_mlme_obj *vdev_mlme); 100 101 #ifdef VDEV_SM_LOCK_SUPPORT 102 /** 103 * mlme_vdev_sm_spinlock_create - Create VDEV MLME spinlock 104 * @vdev_mlme_obj: VDEV MLME comp object 105 * 106 * Creates VDEV MLME spinlock 107 * 108 * Return: void 109 */ 110 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme) 111 { 112 qdf_spinlock_create(&vdev_mlme->sm_lock); 113 } 114 115 /** 116 * mlme_vdev_sm_spinlock_destroy - Destroy VDEV MLME spinlock 117 * @vdev_mlme_obj: VDEV MLME comp object 118 * 119 * Destroy VDEV MLME spinlock 120 * 121 * Return: void 122 */ 123 static inline void mlme_vdev_sm_spinlock_destroy( 124 struct vdev_mlme_obj *vdev_mlme) 125 { 126 qdf_spinlock_destroy(&vdev_mlme->sm_lock); 127 } 128 129 /** 130 * mlme_vdev_sm_spin_lock - acquire spinlock 131 * @vdev_mlme_obj: vdev mlme comp object 132 * 133 * acquire vdev mlme spinlock 134 * 135 * return: void 136 */ 137 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme) 138 { 139 qdf_spin_lock_bh(&vdev_mlme->sm_lock); 140 } 141 142 /** 143 * mlme_vdev_sm_spin_unlock - release spinlock 144 * @vdev_mlme_obj: vdev mlme comp object 145 * 146 * release vdev mlme spinlock 147 * 148 * return: void 149 */ 150 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme) 151 { 152 qdf_spin_unlock_bh(&vdev_mlme->sm_lock); 153 } 154 155 /** 156 * mlme_vdev_cmd_mutex_create - Create VDEV MLME cmd mutex 157 * @vdev_mlme_obj: VDEV MLME comp object 158 * 159 * Creates VDEV MLME cmd mutex 160 * 161 * Return: void 162 */ 163 static inline void 164 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme) 165 { 166 qdf_mutex_create(&vdev_mlme->vdev_cmd_lock); 167 } 168 169 /** 170 * mlme_vdev_cmd_mutex_destroy - Destroy VDEV MLME cmd mutex 171 * @vdev_mlme_obj: VDEV MLME comp object 172 * 173 * Destroy VDEV MLME cmd mutex 174 * 175 * Return: void 176 */ 177 static inline void 178 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme) 179 { 180 qdf_mutex_destroy(&vdev_mlme->vdev_cmd_lock); 181 } 182 183 /** 184 * mlme_vdev_cmd_mutex_acquire - acquire mutex 185 * @vdev_mlme_obj: vdev mlme comp object 186 * 187 * acquire vdev mlme cmd mutex 188 * 189 * return: void 190 */ 191 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme) 192 { 193 qdf_mutex_acquire(&vdev_mlme->vdev_cmd_lock); 194 } 195 196 /** 197 * mlme_vdev_cmd_mutex_release - release mutex 198 * @vdev_mlme_obj: vdev mlme comp object 199 * 200 * release vdev mlme cmd mutex 201 * 202 * return: void 203 */ 204 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme) 205 { 206 qdf_mutex_release(&vdev_mlme->vdev_cmd_lock); 207 } 208 209 #else 210 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme) 211 { 212 mlme_info("VDEV SM lock is disabled!!!"); 213 } 214 215 static inline void mlme_vdev_sm_spinlock_destroy( 216 struct vdev_mlme_obj *vdev_mlme) 217 { 218 mlme_info("VDEV SM lock is disabled!!!"); 219 } 220 221 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme) 222 { 223 } 224 225 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme) 226 { 227 } 228 229 static inline void 230 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme) 231 { 232 mlme_info("VDEV CMD lock is disabled!!!"); 233 } 234 235 static inline void 236 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme) 237 { 238 mlme_info("VDEV CMD lock is disabled!!!"); 239 } 240 241 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme) 242 { 243 } 244 245 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme) 246 { 247 } 248 #endif 249 #endif 250