1// SPDX-License-Identifier: GPL-3.0-or-later
2
3#pragma once
4
5#include "mos/platform/platform.h"
6
7typedef struct _scheduler_ops scheduler_ops_t;
8typedef struct _scheduler scheduler_t;
9
10typedef struct _scheduler_ops
11{
12 void (*init)(scheduler_t *instance); ///< Initialize the scheduler
13
14 /**
15 * @brief Select the next thread to run, thread state lock should be locked
16 *
17 */
18 thread_t *(*select_next)(scheduler_t *instance);
19 void (*add_thread)(scheduler_t *instance, thread_t *thread); ///< Add a thread to the scheduler
20 void (*remove_thread)(scheduler_t *instance, thread_t *thread); ///< Remove a thread from the scheduler
21} scheduler_ops_t;
22
23typedef struct _scheduler
24{
25 const scheduler_ops_t *ops;
26} scheduler_t;
27
28typedef struct _scheduler_info
29{
30 const char *const name;
31 scheduler_t *const scheduler;
32} scheduler_info_t;
33
34#define MOS_SCHEDULER(_name, _i) MOS_PUT_IN_SECTION(".mos.schedulers", scheduler_info_t, MOS_CONCAT(_name, __COUNTER__), { .name = #_name, .scheduler = &_i })
35