1 /*
2  * Copyright (c) 2025 Embeint Pty Ltd
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <zephyr/init.h>
8 
9 #include "modem_workqueue.h"
10 
11 static struct k_work_q modem_work_q;
12 static K_THREAD_STACK_DEFINE(modem_stack_area, CONFIG_MODEM_DEDICATED_WORKQUEUE_STACK_SIZE);
13 
modem_work_submit(struct k_work * work)14 int modem_work_submit(struct k_work *work)
15 {
16 	return k_work_submit_to_queue(&modem_work_q, work);
17 }
18 
modem_work_schedule(struct k_work_delayable * dwork,k_timeout_t delay)19 int modem_work_schedule(struct k_work_delayable *dwork, k_timeout_t delay)
20 {
21 	return k_work_schedule_for_queue(&modem_work_q, dwork, delay);
22 }
23 
modem_work_reschedule(struct k_work_delayable * dwork,k_timeout_t delay)24 int modem_work_reschedule(struct k_work_delayable *dwork, k_timeout_t delay)
25 {
26 	return k_work_reschedule_for_queue(&modem_work_q, dwork, delay);
27 }
28 
modem_work_q_init(void)29 static int modem_work_q_init(void)
30 {
31 	/* Boot the dedicated workqueue */
32 	k_work_queue_init(&modem_work_q);
33 	k_work_queue_start(&modem_work_q, modem_stack_area, K_THREAD_STACK_SIZEOF(modem_stack_area),
34 			   CONFIG_MODEM_DEDICATED_WORKQUEUE_PRIORITY, NULL);
35 	k_thread_name_set(k_work_queue_thread_get(&modem_work_q), "modem_workq");
36 	return 0;
37 }
38 
39 SYS_INIT(modem_work_q_init, POST_KERNEL, 0);
40