Files
dusklight/libs/dolphin/src/os/OSSemaphore.c
T
Luke Street 4df8ccc871 Reorganize library code into libs/ (#3119)
* Reorganize files into libs/{dolphin,JSystem,PowerPC_EABI_Support,revolution,TRK_MINNOW_DOLPHIN}

* Update configure.py and project.py for new libs structure

* Refactor `#include <dolphin/x.h>` -> `<x.h>`

* Remove `__REVOLUTION_SDK__` forwards from dolphin

* Fix dolphin/ references in revolution

* Wrap `#include <dolphin.h>` in `!__REVOLUTION_SDK__`

* Always build TRK against dolphin headers

* Resolve revolution SDK header resolution issues
2026-03-01 14:35:36 -08:00

57 lines
1.1 KiB
C

#include <dolphin/dolphin.h>
#include <dolphin/os.h>
void OSInitSemaphore(OSSemaphore* sem, s32 count) {
BOOL enabled = OSDisableInterrupts();
OSInitThreadQueue(&sem->queue);
sem->count = count;
OSRestoreInterrupts(enabled);
}
s32 OSWaitSemaphore(OSSemaphore* sem) {
BOOL enabled;
s32 count;
enabled = OSDisableInterrupts();
while((sem->count = (count = sem->count)) <= 0) {
OSSleepThread(&sem->queue);
}
sem->count--;
OSRestoreInterrupts(enabled);
return count;
}
s32 OSTryWaitSemaphore(OSSemaphore* sem) {
BOOL enabled;
s32 count;
enabled = OSDisableInterrupts();
count = sem->count;
if (sem->count > 0) {
sem->count = sem->count - 1;
}
OSRestoreInterrupts(enabled);
return count;
}
s32 OSSignalSemaphore(OSSemaphore* sem) {
BOOL enabled;
s32 count;
enabled = OSDisableInterrupts();
count = sem->count;
sem->count++;
OSWakeupThread(&sem->queue);
OSRestoreInterrupts(enabled);
return count;
}
s32 OSGetSemaphoreCount(OSSemaphore* sem) {
return sem->count;
}