#include "config.h"
#include <sys/critsec.h>
#include <unistd.h>
#include <sys/tm.h>
#include <tm.h>
Include dependency graph for critsec.c:
Go to the source code of this file.
Functions | |
int | locked_check_and_increment (atomic_t *counter, tdata_t **tid) |
check and increment counter, without interruptions | |
__asm__ ("\n\ .text\n\ .global _locked_check_and_increment\n\ _locked_check_and_increment:\n\ push.w r4\n\ stc ccr, r4h\n\ orc #0x80, ccr\n\ mov.b @r0, r4l\n\ beq lci_get_lock\n\ \n\ push.w r2\n\ push.w r3\n\ mov.w @_ctid, r2\n\ mov.w @r1, r3\n\ sub.w r3, r2\n\ bne lci_cant_lock\n\ \n\ pop.w r3\n\ pop.w r2\n\ bra lci_get_lock\n\ \n\ lci_cant_lock:\n\ pop.w r3\n\ pop.w r2\n\ mov.w #0xffff, r0\n\ bra lci_done\n\ \n\ lci_get_lock:\n\ inc r4l\n\ mov.b r4l, @r0\n\ mov.w @_ctid, r0 \n\ mov.w r0, @r1 \n\ sub.w r0, r0\n\ \n\ lci_done:\n\ ldc r4h, ccr\n\ pop.w r4\n\ rts\n\ ") | |
wakeup_t | wait_critical_section (wakeup_t data) |
wakeup when critical section is available | |
int | enter_critical_section (critsec_t *cs) |
enter critical section | |
Variables | |
atomic_t | kernel_critsec_count |
critical section counter for kernel/task manager |
|
|
|
enter critical section check and lock critical section if it is available; otherwise, wait until it is available, then lock it.
Definition at line 96 of file critsec.c. References locked_check_and_increment(), wait_critical_section(), and wait_event(). Referenced by CriticalSectionBlock::CriticalSectionBlock(). |
|
check and increment counter, without interruptions increments counter if count is already zero, or if this is the same task as the one that made it one. used to enter a normal critical section.
Referenced by enter_critical_section(), and wait_critical_section(). |
|
wakeup when critical section is available wakeup function used to detect when a critical section is available. called while processing an interrupt, so interrupts are already disabled. Definition at line 78 of file critsec.c. References critsec::count, locked_check_and_increment(), and critsec::task. Referenced by enter_critical_section(). |
|
critical section counter for kernel/task manager when the critical section counter is Zero, task swapping is allowed. when greater than zero, task swapping is not allowed. This is checked in the task_switch_handler() in systime.c |
brickOS is released under the
Mozilla Public License.
Original code copyright 1998-2005 by the authors. |