diff --git a/codescript.txt b/codescript.txt index a321595201..da887bdde1 100644 --- a/codescript.txt +++ b/codescript.txt @@ -99,8 +99,8 @@ SECTIONS build/asm/si.o(.text) build/asm/boot_0x8008FA60.o(.text) build/src/libultra/os/jammesg.o(.text) - build/asm/setthreadpri.o(.text) - build/asm/getthreadpri.o(.text) + build/src/libultra/os/setthreadpri.o(.text) + build/src/libultra/os/getthreadpri.o(.text) build/asm/boot_0x8008FD00.o(.text) build/asm/boot_0x8008FE60.o(.text) build/asm/boot_0x8008FEB0.o(.text) diff --git a/src/libultra/os/getthreadpri.c b/src/libultra/os/getthreadpri.c new file mode 100644 index 0000000000..db572ff740 --- /dev/null +++ b/src/libultra/os/getthreadpri.c @@ -0,0 +1,8 @@ +#include + +OSPri osGetThreadPri(OSThread* t) { + if (t == NULL) { + t = __osRunningThread; + } + return t->priority; +} diff --git a/src/libultra/os/setthreadpri.c b/src/libultra/os/setthreadpri.c new file mode 100644 index 0000000000..fe3cbca39b --- /dev/null +++ b/src/libultra/os/setthreadpri.c @@ -0,0 +1,27 @@ +#include + +void osSetThreadPri(OSThread* t, OSPri p) { + register u32 saveMask; + + saveMask = __osDisableInt(); + + if (t == NULL) { + t = __osRunningThread; + } + + if (t->priority != p) { + t->priority = p; + + if (t != __osRunningThread && t->state != 1) { + __osDequeueThread(t->queue, t); + __osEnqueueThread(t->queue, t); + } + + if (__osRunningThread->priority < __osRunQueue->priority) { + __osRunningThread->state = 2; + __osEnqueueAndYield(&__osRunQueue); + } + } + + __osRestoreInt(saveMask); +}