xref: /wlan-dirver/qca-wifi-host-cmn/umac/cmn_services/serialization/src/wlan_serialization_utf_i.h (revision 1397a33f48ea6455be40871470b286e535820eb8)
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