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