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