blob: 4fb5d716c5c74463c51c6fd4efebbfaf81a1aa64 [file] [log] [blame]
/*
* Copyright (c) 2025 Embeint Pty Ltd
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/init.h>
#include "modem_workqueue.h"
static struct k_work_q modem_work_q;
static K_THREAD_STACK_DEFINE(modem_stack_area, CONFIG_MODEM_DEDICATED_WORKQUEUE_STACK_SIZE);
int modem_work_submit(struct k_work *work)
{
return k_work_submit_to_queue(&modem_work_q, work);
}
int modem_work_schedule(struct k_work_delayable *dwork, k_timeout_t delay)
{
return k_work_schedule_for_queue(&modem_work_q, dwork, delay);
}
int modem_work_reschedule(struct k_work_delayable *dwork, k_timeout_t delay)
{
return k_work_reschedule_for_queue(&modem_work_q, dwork, delay);
}
static int modem_work_q_init(void)
{
/* Boot the dedicated workqueue */
k_work_queue_init(&modem_work_q);
k_work_queue_start(&modem_work_q, modem_stack_area, K_THREAD_STACK_SIZEOF(modem_stack_area),
CONFIG_MODEM_DEDICATED_WORKQUEUE_PRIORITY, NULL);
k_thread_name_set(k_work_queue_thread_get(&modem_work_q), "modem_workq");
return 0;
}
SYS_INIT(modem_work_q_init, POST_KERNEL, 0);