From 6d8c0c30cfeba5c9f31c9a12b3a7585f2a8f58e1 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 15 Oct 2023 20:58:10 -0300 Subject: [PATCH] scheduler: sched_usleep --- kernel-src/include/kernel/interrupt.h | 1 + kernel-src/include/kernel/scheduler.h | 1 + kernel-src/sys/scheduler.c | 13 +++++++++++++ 3 files changed, 15 insertions(+) diff --git a/kernel-src/include/kernel/interrupt.h b/kernel-src/include/kernel/interrupt.h index 75e097b6..20877f44 100644 --- a/kernel-src/include/kernel/interrupt.h +++ b/kernel-src/include/kernel/interrupt.h @@ -16,6 +16,7 @@ #define IPL_MAX 0 #define IPL_TIMER 1 #define IPL_KEYBOARD 2 +#define IPL_NET 400 #define IPL_DISK 500 #define IPL_DPC 900 #define IPL_NORMAL 1000 diff --git a/kernel-src/include/kernel/scheduler.h b/kernel-src/include/kernel/scheduler.h index 52499f51..088f6ce6 100644 --- a/kernel-src/include/kernel/scheduler.h +++ b/kernel-src/include/kernel/scheduler.h @@ -90,5 +90,6 @@ thread_t *sched_newthread(void *ip, size_t kstacksize, int priority, proc_t *pro void sched_destroyproc(proc_t *); void sched_destroythread(thread_t *); void sched_targetcpu(struct cpu_t *cpu); +void sched_sleepus(size_t us); #endif diff --git a/kernel-src/sys/scheduler.c b/kernel-src/sys/scheduler.c index 172a9541..f1a02744 100644 --- a/kernel-src/sys/scheduler.c +++ b/kernel-src/sys/scheduler.c @@ -387,6 +387,19 @@ void sched_targetcpu(cpu_t *cpu) { interrupt_set(intstatus); } +static void timeout(context_t *, dpcarg_t arg) { + thread_t *thread = arg; + sched_wakeup(thread, 0); +} + +void sched_sleepus(size_t us) { + timerentry_t sleepentry = {0}; + sched_preparesleep(false); + + timer_insert(_cpu()->timer, &sleepentry, timeout, _cpu()->thread, us, false); + sched_yield(); +} + void sched_init() { threadcache = slab_newcache(sizeof(thread_t), 0, NULL, NULL); __assert(threadcache);