2 * linux/include/asm-arm/semaphore.h 4 #ifndef __ASM_ARM_SEMAPHORE_H 5 #define __ASM_ARM_SEMAPHORE_H 7 #include <linux/linkage.h> 8 #include <asm/atomic.h> 9 #include <linux/spinlock.h> 10 #include <linux/wait.h> 15 wait_queue_head_t wait
; 18 #define __SEMAPHORE_INIT(name,count) \ 19 { ATOMIC_INIT(count), 0, \ 20 __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) } 22 #define __MUTEX_INITIALIZER(name) \ 23 __SEMAPHORE_INIT(name,1) 25 #define __DECLARE_SEMAPHORE_GENERIC(name,count) \ 26 struct semaphore name = __SEMAPHORE_INIT(name,count) 28 #define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1) 29 #define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0) 31 #define sema_init(sem, val) \ 33 atomic_set(&((sem)->count), (val)); \ 34 (sem)->sleepers = 0; \ 35 init_waitqueue_head(&(sem)->wait); \ 38 staticinlinevoidinit_MUTEX(struct semaphore
*sem
) 43 staticinlinevoidinit_MUTEX_LOCKED(struct semaphore
*sem
) 48 asmlinkage
void__down_failed(void/* special register calling convention */); 49 asmlinkage
int__down_interruptible_failed(void/* special register calling convention */); 50 asmlinkage
int__down_trylock_failed(void/* params in registers */); 51 asmlinkage
void__up_wakeup(void/* special register calling convention */); 53 externvoid__down(struct semaphore
* sem
); 54 externint__down_interruptible(struct semaphore
* sem
); 55 externint__down_trylock(struct semaphore
* sem
); 56 externvoid__up(struct semaphore
* sem
); 58 extern spinlock_t semaphore_wake_lock
; 60 #include <asm/proc/semaphore.h>