1 /* 2 * Copyright (c) 2018 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: Defines the data structures used by the unit test framework for 21 * serialization module 22 */ 23 24 #ifndef _WLAN_SERIALIZATION_UTF_I_H_ 25 #define _WLAN_SERIALIZATION_UTF_I_H_ 26 27 #define WLAN_SER_UTF_MAX_VDEVS 4 28 #define WLAN_SER_UTF_SCAN_CMD_TESTS 33 29 #define WLAN_SER_UTF_TIMER_TIMEOUT_MS 5000 30 #define WLAN_SER_UTF_TEST_CMD_TIMEOUT_MS 30000 31 32 /* Sample string: SER_Vxx_Cxx */ 33 #define WLAN_SER_UTF_STR_SIZE 15 34 #define WLAN_SER_DATA_STR(_s, _v, _i) \ 35 scnprintf(_s, WLAN_SER_UTF_STR_SIZE, "SER_V%u_C%u", _v, _i) 36 37 #define SER_UTF_BLOCK_STR(_x) (_x ? "BLOCK" : "NON-BLOCK") 38 39 char *wlan_serialization_status_strings[] = { 40 "WLAN_SER_CMD_PENDING", 41 "WLAN_SER_CMD_ACTIVE", 42 "WLAN_SER_CMD_DENIED_RULES_FAILED", 43 "WLAN_SER_CMD_DENIED_LIST_FULL", 44 "WLAN_SER_CMD_DENIED_UNSPECIFIED", 45 }; 46 47 /** 48 * enum wlan_ser_utf_tc_id - Test case id 49 * @SER_UTF_TC_DEINIT: Deinit UTF 50 * @SER_UTF_TC_INIT: Init UTF 51 * @SER_UTF_TC_ADD: Add a custom cmd to queue 52 * @SER_UTF_TC_REMOVE: Remove a custom cmd from queue 53 * @SER_UTF_TC_CANCEL: Cancel a custom cmd from queue 54 * @SER_UTF_TC_SINGLE_SCAN: Add and remove a single scan cmd 55 * @SER_UTF_TC_MULTI_SCAN: Add and remove a multiple scan cmd 56 * @SER_UTF_TC_MAX_SCAN: Add and remove a maximum scan cmd 57 * @SER_UTF_TC_SINGLE_NONSCAN: Add and remove a single nonscan cmd 58 * @SER_UTF_TC_MULTI_NONSCAN: Add and remove a multiple nonscan cmd 59 * @SER_UTF_TC_MAX_NONSCAN: Add and remove a maximum nonscan cmd 60 * @SER_UTF_TC_MULTI_VDEV_NONSCAN: Add nonscan cmd across multiple vdev 61 * @SER_UTF_TC_CANCEL_SCAN_AC_SINGLE: Cancel single scan from active queue 62 * @SER_UTF_TC_CANCEL_SCAN_AC_PDEV: Cancel pdev scan from active queue 63 * @SER_UTF_TC_CANCEL_SCAN_AC_VDEV: Cancel vdev scan from active queue 64 * @SER_UTF_TC_CANCEL_SCAN_PD_SINGLE: Cancel single scan from pending queue 65 * @SER_UTF_TC_CANCEL_SCAN_PD_PDEV: Cancel pdev scan from pending queue 66 * @SER_UTF_TC_CANCEL_SCAN_PD_VDEV: Cancel vdev scan from pending queue 67 * @SER_UTF_TC_CANCEL_NONSCAN_AC_SINGLE: Cancel single nonscan from active queue 68 * @SER_UTF_TC_CANCEL_NONSCAN_AC_PDEV: Cancel pdev nonscan from active queue 69 * @SER_UTF_TC_CANCEL_NONSCAN_AC_VDEV: Cancel vdev nonscan from active queue 70 * @SER_UTF_TC_CANCEL_NONSCAN_PD_SINGLE: Cancel nonscan from pending queue 71 * @SER_UTF_TC_CANCEL_NONSCAN_PD_PDEV: Cancel pdev nonscan from pending queue 72 * @SER_UTF_TC_CANCEL_NONSCAN_PD_VDEV: Cancel vdev nonscan from pending queue 73 * @SER_UTF_TC_START_BSS_FILTERING: Test start_bss filtering logic 74 * @SER_UTF_TC_STOP_BSS_FILTERING: Test stop_bss filtering logic 75 * @SER_UTF_TC_ADD_BLOCKING_NONSCAN_AC_1: Add blocking cmd to active queue 76 * @SER_UTF_TC_ADD_BLOCKING_NONSCAN_PD_1: Add blocking cmd to pending queue with 77 * blocking cmd in active queue 78 * @SER_UTF_TC_ADD_BLOCKING_NONSCAN_PD_2: Add blocking cmd to pending queue with 79 * non-blocking cmd in active queue 80 * @SER_UTF_TC_ADD_BLOCKING_NONSCAN_PD_3: Add blocking cmd to tail of 81 * pending queue with non-blocking cmd in active queue 82 * @SER_UTF_TC_ADD_BLOCKING_NONSCAN_PD_4: Add blocking cmd to pending between 83 * non-blocking cmd in pending and active queue 84 * @SER_UTF_TC_MULTI_VDEV_BL_NONSCAN_1: Add blocking nonscan cmd 85 * across multiple vdev 86 * @SER_UTF_TC_MULTI_VDEV_BL_NONSCAN_2: Add blocking nonscan cmd 87 * to a pending queue of vdev with non-blocking across multi vdev 88 * @SER_UTF_TC_MULTI_VDEV_BL_NONSCAN_3: Add blocking nonscan cmd 89 * to a active queue of vdev with non-blocking across multiple vdev 90 * @SER_UTF_TC_MULTI_VDEV_BL_NONSCAN_4: Add blocking nonscan cmd to the 91 * pending queue of multi vdev with non-blocking across multi vdev 92 * @SER_UTF_TC_MULTI_VDEV_BL_NONSCAN_5: Add blocking nonscan cmd to the 93 * pending queue of multi vdev with non-blocking across multi vdev 94 * in pending and active queue 95 * @SER_UTF_TC_HIGH_PRIO_NONSCAN_WO_BL: Add high priority nonscan cmd 96 * to the tail of pending queue 97 * @SER_UTF_TC_HIGH_PRIO_NONSCAN_W_BL: Add high priority nonscan cmd 98 * to the pending queue between normal priority command 99 * @SER_UTF_TC_HIGH_PRIO_BL_NONSCAN: Add high priority blocking 100 * nonscan cmd to the tail of pending queue 101 */ 102 enum wlan_ser_utf_tc_id { 103 SER_UTF_TC_DEINIT, 104 SER_UTF_TC_INIT, 105 SER_UTF_TC_ADD, 106 SER_UTF_TC_REMOVE, 107 SER_UTF_TC_CANCEL, 108 SER_UTF_TC_SINGLE_SCAN, 109 SER_UTF_TC_MULTI_SCAN, 110 SER_UTF_TC_MAX_SCAN, 111 SER_UTF_TC_SINGLE_NONSCAN, 112 SER_UTF_TC_MULTI_NONSCAN, 113 SER_UTF_TC_MAX_NONSCAN, 114 SER_UTF_TC_MULTI_VDEV_NONSCAN, 115 SER_UTF_TC_CANCEL_SCAN_AC_SINGLE, 116 SER_UTF_TC_CANCEL_SCAN_AC_PDEV, 117 SER_UTF_TC_CANCEL_SCAN_AC_VDEV, 118 SER_UTF_TC_CANCEL_SCAN_PD_SINGLE, 119 SER_UTF_TC_CANCEL_SCAN_PD_PDEV, 120 SER_UTF_TC_CANCEL_SCAN_PD_VDEV, 121 SER_UTF_TC_CANCEL_NONSCAN_AC_SINGLE, 122 SER_UTF_TC_CANCEL_NONSCAN_AC_PDEV, 123 SER_UTF_TC_CANCEL_NONSCAN_AC_VDEV, 124 SER_UTF_TC_CANCEL_NONSCAN_PD_SINGLE, 125 SER_UTF_TC_CANCEL_NONSCAN_PD_PDEV, 126 SER_UTF_TC_CANCEL_NONSCAN_PD_VDEV, 127 SER_UTF_TC_START_BSS_FILTERING, 128 SER_UTF_TC_STOP_BSS_FILTERING, 129 SER_UTF_TC_ADD_BLOCKING_NONSCAN_AC_1, 130 SER_UTF_TC_ADD_BLOCKING_NONSCAN_PD_1, 131 SER_UTF_TC_ADD_BLOCKING_NONSCAN_PD_2, 132 SER_UTF_TC_ADD_BLOCKING_NONSCAN_PD_3, 133 SER_UTF_TC_ADD_BLOCKING_NONSCAN_PD_4, 134 SER_UTF_TC_MULTI_VDEV_BL_NONSCAN_1, 135 SER_UTF_TC_MULTI_VDEV_BL_NONSCAN_2, 136 SER_UTF_TC_MULTI_VDEV_BL_NONSCAN_3, 137 SER_UTF_TC_MULTI_VDEV_BL_NONSCAN_4, 138 SER_UTF_TC_MULTI_VDEV_BL_NONSCAN_5, 139 SER_UTF_TC_HIGH_PRIO_NONSCAN_WO_BL, 140 SER_UTF_TC_HIGH_PRIO_NONSCAN_W_BL, 141 SER_UTF_TC_HIGH_PRIO_BL_NONSCAN, 142 }; 143 144 /** 145 * struct wlan_ser_utf_data - Test data 146 * @id - Test variable 147 * @str - String tag associated with the command 148 */ 149 struct wlan_ser_utf_data { 150 uint8_t id; 151 char str[WLAN_SER_UTF_STR_SIZE + 1]; 152 }; 153 154 /** 155 * struct wlan_ser_utf_vdev_info - Information used by the vdevs 156 * @vdev: Vdev object manager information 157 * @ser_count: Serialization command count for the vdev 158 * @utf_scan_timer: Timer for scan commands 159 * @utf_nonscan_timer: Timer for non-scan commands 160 */ 161 struct wlan_ser_utf_vdev_info { 162 struct wlan_objmgr_vdev *vdev; 163 uint8_t ser_count; 164 qdf_timer_t utf_scan_timer[WLAN_SER_UTF_SCAN_CMD_TESTS]; 165 qdf_timer_t utf_nonscan_timer[WLAN_SER_UTF_SCAN_CMD_TESTS]; 166 }; 167 168 /** 169 * wlan_ser_utf_cb() - Serialization callback function 170 * @cmd: Serialization command info 171 * @reason: Serialization reason for callback execution 172 * 173 * Return: Status of callback execution 174 */ 175 QDF_STATUS wlan_ser_utf_cb(struct wlan_serialization_command *cmd, 176 enum wlan_serialization_cb_reason reason); 177 178 #endif /* _WLAN_SERIALIZATION_UTF_I_H_ */ 179 180