19#if defined(CONF_CRITICAL_SECTIONS)
35.global _locked_check_and_increment\n\
36 _locked_check_and_increment:\n\
volatile unsigned char atomic_t
The data type that allows for atomic count operations.
kernel configuration file
__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\
")
int enter_critical_section(critsec_t *cs)
lock a critical section, or wait until it is available.
atomic_t kernel_critsec_count
critical section counter for kernel/task manager
int locked_check_and_increment(atomic_t *counter, tdata_t **tid)
check and increment counter, without interruptions
wakeup_t wait_critical_section(wakeup_t data)
wakeup when critical section is available
critical section data structure
Interface: kernel level critical sections.
Internal Interface: task management.
Interface: task management.
unsigned long wakeup_t
wakeup data area type
Interface: reduced UNIX standard library.
wakeup_t wait_event(wakeup_t(*wakeup)(wakeup_t), wakeup_t data)