xref: /wlan-driver/qca-wifi-host-cmn/scheduler/inc/scheduler_api.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2014-2020 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name #if !defined(__SCHEDULER_API_H)
21*5113495bSYour Name #define __SCHEDULER_API_H
22*5113495bSYour Name 
23*5113495bSYour Name #include <qdf_event.h>
24*5113495bSYour Name #include <qdf_types.h>
25*5113495bSYour Name #include <qdf_lock.h>
26*5113495bSYour Name #include <qdf_mc_timer.h>
27*5113495bSYour Name #include <qdf_status.h>
28*5113495bSYour Name 
29*5113495bSYour Name /* Controller thread various event masks
30*5113495bSYour Name  * MC_POST_EVENT_MASK: wake up thread after posting message
31*5113495bSYour Name  * MC_SUSPEND_EVENT_MASK: signal thread to suspend during kernel pm suspend
32*5113495bSYour Name  * MC_SHUTDOWN_EVENT_MASK: signal thread to shutdown and exit during unload
33*5113495bSYour Name  */
34*5113495bSYour Name #define MC_POST_EVENT_MASK               0x001
35*5113495bSYour Name #define MC_SUSPEND_EVENT_MASK            0x002
36*5113495bSYour Name #define MC_SHUTDOWN_EVENT_MASK           0x010
37*5113495bSYour Name 
38*5113495bSYour Name /*
39*5113495bSYour Name  * Cookie for timer messages.  Note that anyone posting a timer message
40*5113495bSYour Name  * has to write the COOKIE in the reserved field of the message.  The
41*5113495bSYour Name  * timer queue handler relies on this COOKIE
42*5113495bSYour Name  */
43*5113495bSYour Name #define SYS_MSG_COOKIE      0xFACE
44*5113495bSYour Name 
45*5113495bSYour Name #define scheduler_get_src_id(qid)       (((qid) >> 20) & 0x3FF)
46*5113495bSYour Name #define scheduler_get_dest_id(qid)      (((qid) >> 10) & 0x3FF)
47*5113495bSYour Name #define scheduler_get_que_id(qid)       ((qid) & 0x3FF)
48*5113495bSYour Name #define scheduler_get_qid(src, dest, que_id)    ((que_id) | ((dest) << 10) |\
49*5113495bSYour Name 					     ((src) << 20))
50*5113495bSYour Name 
51*5113495bSYour Name typedef enum {
52*5113495bSYour Name 	SYS_MSG_ID_MC_TIMER,
53*5113495bSYour Name 	SYS_MSG_ID_FTM_RSP,
54*5113495bSYour Name 	SYS_MSG_ID_QVIT,
55*5113495bSYour Name 	SYS_MSG_ID_DATA_STALL_MSG,
56*5113495bSYour Name 	SYS_MSG_ID_UMAC_STOP,
57*5113495bSYour Name } SYS_MSG_ID;
58*5113495bSYour Name 
59*5113495bSYour Name struct scheduler_msg;
60*5113495bSYour Name typedef QDF_STATUS (*scheduler_msg_process_fn_t)(struct scheduler_msg *msg);
61*5113495bSYour Name typedef void (*hdd_suspend_callback)(void);
62*5113495bSYour Name 
63*5113495bSYour Name /**
64*5113495bSYour Name  * struct scheduler_msg: scheduler message structure
65*5113495bSYour Name  * @type: message type
66*5113495bSYour Name  * @reserved: reserved field
67*5113495bSYour Name  * @bodyval: message body val
68*5113495bSYour Name  * @bodyptr: message body pointer based on the type either a bodyptr pointer
69*5113495bSYour Name  *     into memory or bodyval as a 32 bit data is used. bodyptr is always a
70*5113495bSYour Name  *     freeable pointer, one should always make sure that bodyptr is always
71*5113495bSYour Name  *     freeable.
72*5113495bSYour Name  * Messages should use either bodyptr or bodyval; not both !!!
73*5113495bSYour Name  * @callback: callback to be called by scheduler thread once message is posted
74*5113495bSYour Name  *   and scheduler thread has started processing the message.
75*5113495bSYour Name  * @flush_callback: flush callback which will be invoked during driver unload
76*5113495bSYour Name  *   such that component can release the ref count of common global objects
77*5113495bSYour Name  *   like PSOC, PDEV, VDEV and PEER. A component needs to populate flush
78*5113495bSYour Name  *   callback in message body pointer for those messages which have taken ref
79*5113495bSYour Name  *   count for above mentioned common objects.
80*5113495bSYour Name  * @node: list node for queue membership
81*5113495bSYour Name  * @queue_id: Id of the queue the message was added to
82*5113495bSYour Name  * @queue_depth: depth of the queue when the message was queued
83*5113495bSYour Name  * @queued_at_us: timestamp when the message was queued in microseconds
84*5113495bSYour Name  */
85*5113495bSYour Name struct scheduler_msg {
86*5113495bSYour Name 	uint16_t type;
87*5113495bSYour Name 	uint16_t reserved;
88*5113495bSYour Name 	uint32_t bodyval;
89*5113495bSYour Name 	void *bodyptr;
90*5113495bSYour Name 	scheduler_msg_process_fn_t callback;
91*5113495bSYour Name 	scheduler_msg_process_fn_t flush_callback;
92*5113495bSYour Name 	qdf_list_node_t node;
93*5113495bSYour Name #ifdef WLAN_SCHED_HISTORY_SIZE
94*5113495bSYour Name 	QDF_MODULE_ID queue_id;
95*5113495bSYour Name 	uint32_t queue_depth;
96*5113495bSYour Name 	uint64_t queued_at_us;
97*5113495bSYour Name #endif /* WLAN_SCHED_HISTORY_SIZE */
98*5113495bSYour Name };
99*5113495bSYour Name 
100*5113495bSYour Name struct sched_qdf_mc_timer_cb_wrapper;
101*5113495bSYour Name 
102*5113495bSYour Name /**
103*5113495bSYour Name  * scheduler_qdf_mc_timer_init() - initialize and fill callback and data
104*5113495bSYour Name  * @timer_callback: callback to timer
105*5113495bSYour Name  * @data: data pointer
106*5113495bSYour Name  *
107*5113495bSYour Name  * Return: return pointer to struct sched_qdf_mc_timer_cb_wrapper
108*5113495bSYour Name  */
109*5113495bSYour Name struct sched_qdf_mc_timer_cb_wrapper *scheduler_qdf_mc_timer_init(
110*5113495bSYour Name 		qdf_mc_timer_callback_t timer_callback,
111*5113495bSYour Name 		void *data);
112*5113495bSYour Name 
113*5113495bSYour Name /**
114*5113495bSYour Name  * scheduler_qdf_mc_timer_deinit_return_data_ptr() - deinitialize callback and
115*5113495bSYour Name  *                                                   return data
116*5113495bSYour Name  * @wrapper_ptr: wrapper ptr
117*5113495bSYour Name  *
118*5113495bSYour Name  * Return: original data supplied to scheduler_qdf_mc_timer_init()
119*5113495bSYour Name  */
120*5113495bSYour Name void *scheduler_qdf_mc_timer_deinit_return_data_ptr(
121*5113495bSYour Name 		struct sched_qdf_mc_timer_cb_wrapper *wrapper_ptr);
122*5113495bSYour Name 
123*5113495bSYour Name /**
124*5113495bSYour Name  * scheduler_qdf_mc_timer_callback_t_wrapper() - wrapper for mc timer callbacks
125*5113495bSYour Name  * @msg: message pointer
126*5113495bSYour Name  *
127*5113495bSYour Name  * Return: None
128*5113495bSYour Name  */
129*5113495bSYour Name QDF_STATUS scheduler_qdf_mc_timer_callback_t_wrapper(struct scheduler_msg *msg);
130*5113495bSYour Name 
131*5113495bSYour Name /**
132*5113495bSYour Name  * sched_history_print() - print scheduler history
133*5113495bSYour Name  *
134*5113495bSYour Name  * This API prints the scheduler history.
135*5113495bSYour Name  *
136*5113495bSYour Name  * Return: None
137*5113495bSYour Name  */
138*5113495bSYour Name void sched_history_print(void);
139*5113495bSYour Name 
140*5113495bSYour Name /**
141*5113495bSYour Name  * scheduler_init() - initialize control path scheduler
142*5113495bSYour Name  *
143*5113495bSYour Name  * This API initializes control path scheduler.
144*5113495bSYour Name  *
145*5113495bSYour Name  * Return: QDF status
146*5113495bSYour Name  */
147*5113495bSYour Name QDF_STATUS scheduler_init(void);
148*5113495bSYour Name 
149*5113495bSYour Name /**
150*5113495bSYour Name  * scheduler_deinit() - de-initialize control path scheduler
151*5113495bSYour Name  *
152*5113495bSYour Name  * This API de-initializes control path scheduler.
153*5113495bSYour Name  *
154*5113495bSYour Name  * Return: QDF status
155*5113495bSYour Name  */
156*5113495bSYour Name QDF_STATUS scheduler_deinit(void);
157*5113495bSYour Name 
158*5113495bSYour Name /**
159*5113495bSYour Name  * scheduler_enable() - start the scheduler module
160*5113495bSYour Name  *
161*5113495bSYour Name  * Ready the scheduler module to service requests, and start the scheduler's
162*5113495bSYour Name  * message processing thread. Must only be called after scheduler_init().
163*5113495bSYour Name  *
164*5113495bSYour Name  * Return: QDF_STATUS
165*5113495bSYour Name  */
166*5113495bSYour Name QDF_STATUS scheduler_enable(void);
167*5113495bSYour Name 
168*5113495bSYour Name /**
169*5113495bSYour Name  * scheduler_disable() - stop the scheduler module
170*5113495bSYour Name  *
171*5113495bSYour Name  * Stop the scheduler module from servicing requests, and terminate the
172*5113495bSYour Name  * scheduler's message processing thread. Must be called before
173*5113495bSYour Name  * scheduler_deinit().
174*5113495bSYour Name  *
175*5113495bSYour Name  * Return: QDF_STATUS
176*5113495bSYour Name  */
177*5113495bSYour Name QDF_STATUS scheduler_disable(void);
178*5113495bSYour Name 
179*5113495bSYour Name /**
180*5113495bSYour Name  * scheduler_register_module() - register input module/queue id
181*5113495bSYour Name  * @qid: queue id to get registered
182*5113495bSYour Name  * @callback: queue message to be called when a message is posted
183*5113495bSYour Name  *
184*5113495bSYour Name  * Return: QDF status
185*5113495bSYour Name  */
186*5113495bSYour Name QDF_STATUS scheduler_register_module(QDF_MODULE_ID qid,
187*5113495bSYour Name 		scheduler_msg_process_fn_t callback);
188*5113495bSYour Name 
189*5113495bSYour Name /**
190*5113495bSYour Name  * scheduler_deregister_module() - deregister input module/queue id
191*5113495bSYour Name  * @qid: queue id to get deregistered
192*5113495bSYour Name  *
193*5113495bSYour Name  * Return: QDF status
194*5113495bSYour Name  */
195*5113495bSYour Name QDF_STATUS scheduler_deregister_module(QDF_MODULE_ID qid);
196*5113495bSYour Name 
197*5113495bSYour Name /**
198*5113495bSYour Name  * scheduler_post_msg_by_priority() - post messages by priority
199*5113495bSYour Name  * @qid: queue id to which the message has to be posted.
200*5113495bSYour Name  * @msg: message pointer
201*5113495bSYour Name  * @is_high_priority: set to true for high priority message else false
202*5113495bSYour Name  *
203*5113495bSYour Name  * Return: QDF status
204*5113495bSYour Name  */
205*5113495bSYour Name QDF_STATUS scheduler_post_msg_by_priority(uint32_t qid,
206*5113495bSYour Name 					  struct scheduler_msg *msg,
207*5113495bSYour Name 					  bool is_high_priority);
208*5113495bSYour Name 
209*5113495bSYour Name /**
210*5113495bSYour Name  * scheduler_post_msg() - post normal messages(no priority)
211*5113495bSYour Name  * @qid: queue id to which the message has to be posted.
212*5113495bSYour Name  * @msg: message pointer
213*5113495bSYour Name  *
214*5113495bSYour Name  * Return: QDF status
215*5113495bSYour Name  */
scheduler_post_msg(uint32_t qid,struct scheduler_msg * msg)216*5113495bSYour Name static inline QDF_STATUS scheduler_post_msg(uint32_t qid,
217*5113495bSYour Name 					    struct scheduler_msg *msg)
218*5113495bSYour Name {
219*5113495bSYour Name 	return scheduler_post_msg_by_priority(qid, msg, false);
220*5113495bSYour Name }
221*5113495bSYour Name 
222*5113495bSYour Name /**
223*5113495bSYour Name  * scheduler_post_message_debug() - post normal messages(no priority)
224*5113495bSYour Name  * @src_id: Source module of the message
225*5113495bSYour Name  * @dest_id: Destination module of the message
226*5113495bSYour Name  * @que_id: Queue to which the message has to posted.
227*5113495bSYour Name  * @msg: message pointer
228*5113495bSYour Name  * @line: caller line number
229*5113495bSYour Name  * @func: caller function
230*5113495bSYour Name  *
231*5113495bSYour Name  * This function will mask the src_id, and destination id to qid of
232*5113495bSYour Name  * scheduler_post_msg
233*5113495bSYour Name  *
234*5113495bSYour Name  * Return: QDF status
235*5113495bSYour Name  */
236*5113495bSYour Name QDF_STATUS scheduler_post_message_debug(QDF_MODULE_ID src_id,
237*5113495bSYour Name 					QDF_MODULE_ID dest_id,
238*5113495bSYour Name 					QDF_MODULE_ID que_id,
239*5113495bSYour Name 					struct scheduler_msg *msg,
240*5113495bSYour Name 					int line,
241*5113495bSYour Name 					const char *func);
242*5113495bSYour Name 
243*5113495bSYour Name /**
244*5113495bSYour Name  * scheduler_post_message() - post normal messages(no priority)
245*5113495bSYour Name  * @src_id: Source module of the message
246*5113495bSYour Name  * @dest_id: Destination module of the message
247*5113495bSYour Name  * @que_id: Queue to which the message has to posted.
248*5113495bSYour Name  * @msg: message pointer
249*5113495bSYour Name  *
250*5113495bSYour Name  * This function will mask the src_id, and destination id to qid of
251*5113495bSYour Name  * scheduler_post_msg
252*5113495bSYour Name  *
253*5113495bSYour Name  * Return: QDF status
254*5113495bSYour Name  */
255*5113495bSYour Name #define scheduler_post_message(src_id, dest_id, que_id, msg) \
256*5113495bSYour Name 	scheduler_post_message_debug(src_id, dest_id, que_id, msg, \
257*5113495bSYour Name 				     __LINE__, __func__)
258*5113495bSYour Name 
259*5113495bSYour Name /**
260*5113495bSYour Name  * scheduler_resume() - resume scheduler thread
261*5113495bSYour Name  *
262*5113495bSYour Name  * Complete scheduler thread resume wait event such that scheduler
263*5113495bSYour Name  * thread can wake up and process message queues
264*5113495bSYour Name  *
265*5113495bSYour Name  * Return: none
266*5113495bSYour Name  */
267*5113495bSYour Name void scheduler_resume(void);
268*5113495bSYour Name 
269*5113495bSYour Name /**
270*5113495bSYour Name  * scheduler_set_watchdog_timeout() - set scheduler timeout for msg processing
271*5113495bSYour Name  * @timeout: timeout value in milliseconds
272*5113495bSYour Name  *
273*5113495bSYour Name  * Configure the timeout for triggering the scheduler watchdog timer
274*5113495bSYour Name  * in milliseconds
275*5113495bSYour Name  *
276*5113495bSYour Name  * Return: none
277*5113495bSYour Name  */
278*5113495bSYour Name void scheduler_set_watchdog_timeout(uint32_t timeout);
279*5113495bSYour Name 
280*5113495bSYour Name /**
281*5113495bSYour Name  * scheduler_register_hdd_suspend_callback() - suspend callback to hdd
282*5113495bSYour Name  * @callback: hdd callback to be called when controller thread is suspended
283*5113495bSYour Name  *
284*5113495bSYour Name  * Return: none
285*5113495bSYour Name  */
286*5113495bSYour Name void scheduler_register_hdd_suspend_callback(hdd_suspend_callback callback);
287*5113495bSYour Name 
288*5113495bSYour Name /**
289*5113495bSYour Name  * scheduler_wake_up_controller_thread() - wake up controller thread
290*5113495bSYour Name  *
291*5113495bSYour Name  * Wake up controller thread to process a critical message.
292*5113495bSYour Name  *
293*5113495bSYour Name  * Return: none
294*5113495bSYour Name  */
295*5113495bSYour Name void scheduler_wake_up_controller_thread(void);
296*5113495bSYour Name 
297*5113495bSYour Name /**
298*5113495bSYour Name  * scheduler_set_event_mask() - set given event mask
299*5113495bSYour Name  * @event_mask: event mask to set
300*5113495bSYour Name  *
301*5113495bSYour Name  * Set given event mask such that controller scheduler thread can do
302*5113495bSYour Name  * specified work after wake up.
303*5113495bSYour Name  *
304*5113495bSYour Name  * Return: none
305*5113495bSYour Name  */
306*5113495bSYour Name void scheduler_set_event_mask(uint32_t event_mask);
307*5113495bSYour Name 
308*5113495bSYour Name /**
309*5113495bSYour Name  * scheduler_clear_event_mask() - clear given event mask
310*5113495bSYour Name  * @event_mask: event mask to set
311*5113495bSYour Name  *
312*5113495bSYour Name  * Return: none
313*5113495bSYour Name  */
314*5113495bSYour Name void scheduler_clear_event_mask(uint32_t event_mask);
315*5113495bSYour Name 
316*5113495bSYour Name /**
317*5113495bSYour Name  * scheduler_target_if_mq_handler() - top level message queue handler for
318*5113495bSYour Name  *                                    target_if message queue
319*5113495bSYour Name  * @msg: pointer to actual message being handled
320*5113495bSYour Name  *
321*5113495bSYour Name  * Return: none
322*5113495bSYour Name  */
323*5113495bSYour Name QDF_STATUS scheduler_target_if_mq_handler(struct scheduler_msg *msg);
324*5113495bSYour Name 
325*5113495bSYour Name /**
326*5113495bSYour Name  * scheduler_os_if_mq_handler() - top level message queue handler for
327*5113495bSYour Name  *                                os_if message queue
328*5113495bSYour Name  * @msg: pointer to actual message being handled
329*5113495bSYour Name  *
330*5113495bSYour Name  * Return: none
331*5113495bSYour Name  */
332*5113495bSYour Name QDF_STATUS scheduler_os_if_mq_handler(struct scheduler_msg *msg);
333*5113495bSYour Name 
334*5113495bSYour Name /**
335*5113495bSYour Name  * scheduler_timer_q_mq_handler() - top level message queue handler for
336*5113495bSYour Name  *                                timer queue
337*5113495bSYour Name  * @msg: pointer to actual message being handled
338*5113495bSYour Name  *
339*5113495bSYour Name  * Return: none
340*5113495bSYour Name  */
341*5113495bSYour Name QDF_STATUS scheduler_timer_q_mq_handler(struct scheduler_msg *msg);
342*5113495bSYour Name 
343*5113495bSYour Name /**
344*5113495bSYour Name  * scheduler_mlme_mq_handler() - top level message queue handler for
345*5113495bSYour Name  *                               mlme queue
346*5113495bSYour Name  * @msg: pointer to actual message being handled
347*5113495bSYour Name  *
348*5113495bSYour Name  * Return: QDF status
349*5113495bSYour Name  */
350*5113495bSYour Name QDF_STATUS scheduler_mlme_mq_handler(struct scheduler_msg *msg);
351*5113495bSYour Name 
352*5113495bSYour Name /**
353*5113495bSYour Name  * scheduler_scan_mq_handler() - top level message queue handler for
354*5113495bSYour Name  *                               scan queue
355*5113495bSYour Name  * @msg: pointer to actual message being handled
356*5113495bSYour Name  *
357*5113495bSYour Name  * Return: QDF status
358*5113495bSYour Name  */
359*5113495bSYour Name QDF_STATUS scheduler_scan_mq_handler(struct scheduler_msg *msg);
360*5113495bSYour Name 
361*5113495bSYour Name /**
362*5113495bSYour Name  * scheduler_register_wma_legacy_handler() - register legacy wma handler
363*5113495bSYour Name  * @callback: legacy wma handler to be called for WMA messages
364*5113495bSYour Name  *
365*5113495bSYour Name  * Return: QDF status
366*5113495bSYour Name  */
367*5113495bSYour Name QDF_STATUS scheduler_register_wma_legacy_handler(scheduler_msg_process_fn_t
368*5113495bSYour Name 						callback);
369*5113495bSYour Name 
370*5113495bSYour Name /**
371*5113495bSYour Name  * scheduler_register_sys_legacy_handler() - register legacy sys handler
372*5113495bSYour Name  * @callback: legacy sys handler to be called for sys messages
373*5113495bSYour Name  *
374*5113495bSYour Name  * Return: QDF status
375*5113495bSYour Name  */
376*5113495bSYour Name QDF_STATUS scheduler_register_sys_legacy_handler(scheduler_msg_process_fn_t
377*5113495bSYour Name 						callback);
378*5113495bSYour Name /**
379*5113495bSYour Name  * scheduler_deregister_sys_legacy_handler() - deregister legacy sys handler
380*5113495bSYour Name  *
381*5113495bSYour Name  * Return: QDF status
382*5113495bSYour Name  */
383*5113495bSYour Name QDF_STATUS scheduler_deregister_sys_legacy_handler(void);
384*5113495bSYour Name 
385*5113495bSYour Name /**
386*5113495bSYour Name  * scheduler_deregister_wma_legacy_handler() - deregister legacy wma handler
387*5113495bSYour Name  *
388*5113495bSYour Name  * Return: QDF status
389*5113495bSYour Name  */
390*5113495bSYour Name QDF_STATUS scheduler_deregister_wma_legacy_handler(void);
391*5113495bSYour Name 
392*5113495bSYour Name /**
393*5113495bSYour Name  * scheduler_mc_timer_callback() - timer callback, gets called at time out
394*5113495bSYour Name  * @timer: holds the mc timer object.
395*5113495bSYour Name  *
396*5113495bSYour Name  * Return: None
397*5113495bSYour Name  */
398*5113495bSYour Name void scheduler_mc_timer_callback(qdf_mc_timer_t *timer);
399*5113495bSYour Name 
400*5113495bSYour Name /**
401*5113495bSYour Name  * scheduler_get_queue_size() - Get the current size of the scheduler queue
402*5113495bSYour Name  * @qid: Queue ID for which the size is requested
403*5113495bSYour Name  * @size: Pointer to size where the size would be returned to the caller
404*5113495bSYour Name  *
405*5113495bSYour Name  * This API finds the size of the scheduler queue for the given Queue ID
406*5113495bSYour Name  *
407*5113495bSYour Name  * Return: QDF Status
408*5113495bSYour Name  */
409*5113495bSYour Name QDF_STATUS scheduler_get_queue_size(QDF_MODULE_ID qid, uint32_t *size);
410*5113495bSYour Name #endif
411