11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/****************************************************************************
21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ****************************************************************************
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ***
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ***   This header was automatically generated from a Linux kernel header
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ***   of the same name, to make information necessary for userspace to
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ***   call into the kernel available to libc.  It contains only constants,
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ***   structures, and macros generated from the original header, and thus,
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ***   contains no copyrightable information.
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ***
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ****************************************************************************
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ****************************************************************************/
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef __ASM_ARM_SEMAPHORE_H
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define __ASM_ARM_SEMAPHORE_H
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <linux/linkage.h>
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <linux/spinlock.h>
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <linux/wait.h>
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <linux/rwsem.h>
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <asm/atomic.h>
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <asm/locks.h>
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct semaphore {
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project atomic_t count;
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project int sleepers;
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project wait_queue_head_t wait;
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project};
281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define __SEMAPHORE_INIT(name, cnt)  {   .count = ATOMIC_INIT(cnt),   .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait),  }
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define __DECLARE_SEMAPHORE_GENERIC(name,count)   struct semaphore name = __SEMAPHORE_INIT(name,count)
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1)
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0)
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
37