Lines Matching refs:sem
10 void sem_init(semaphore_t *sem, int16_t initial_permits, int16_t max_permits) { in sem_init() argument
11 lock_init(&sem->core, next_striped_spin_lock_num()); in sem_init()
12 sem->permits = initial_permits; in sem_init()
13 sem->max_permits = max_permits; in sem_init()
17 int __time_critical_func(sem_available)(semaphore_t *sem) { in __time_critical_func()
18 return *(volatile typeof(sem->permits) *) &sem->permits; in __time_critical_func()
21 void __time_critical_func(sem_acquire_blocking)(semaphore_t *sem) { in __time_critical_func()
24 uint32_t save = spin_lock_blocking(sem->core.spin_lock); in __time_critical_func()
25 if (sem->permits > 0) { in __time_critical_func()
26 sem->permits--; in __time_critical_func()
30 spin_unlock(sem->core.spin_lock, save); in __time_critical_func()
37 bool __time_critical_func(sem_acquire_timeout_ms)(semaphore_t *sem, uint32_t timeout_ms) { in __time_critical_func()
41 uint32_t save = spin_lock_blocking(sem->core.spin_lock); in __time_critical_func()
42 if (sem->permits > 0) { in __time_critical_func()
43 sem->permits--; in __time_critical_func()
47 spin_unlock(sem->core.spin_lock, save); in __time_critical_func()
61 bool __time_critical_func(sem_release)(semaphore_t *sem) { in __time_critical_func()
63 uint32_t save = spin_lock_blocking(sem->core.spin_lock); in __time_critical_func()
64 int32_t count = sem->permits; in __time_critical_func()
65 if (count < sem->max_permits) { in __time_critical_func()
66 sem->permits = count + 1; in __time_critical_func()
72 spin_unlock(sem->core.spin_lock, save); in __time_critical_func()
76 void __time_critical_func(sem_reset)(semaphore_t *sem, int16_t permits) { in __time_critical_func()
77 assert(permits >= 0 && permits <= sem->max_permits); in __time_critical_func()
78 uint32_t save = spin_lock_blocking(sem->core.spin_lock); in __time_critical_func()
79 if (permits > sem->permits) __sev(); in __time_critical_func()
80 sem->permits = permits; in __time_critical_func()
81 spin_unlock(sem->core.spin_lock, save); in __time_critical_func()