blob: c52f36013a9da4e77b7307ca61b233be10ad974b [file] [log] [blame]
Ingo Molnarfb1c8f92005-09-10 00:25:56 -07001#ifndef _ASM_SPINLOCK_TYPES_H
2#define _ASM_SPINLOCK_TYPES_H
3
4#ifndef __LINUX_SPINLOCK_TYPES_H
5# error "please don't include this file directly"
6#endif
7
David Daney500c2e12010-02-04 11:31:49 -08008#include <linux/types.h>
9
10#include <asm/byteorder.h>
11
12typedef union {
Ralf Baechle2a31b032008-08-28 15:17:49 +010013 /*
David Daney500c2e12010-02-04 11:31:49 -080014 * bits 0..15 : serving_now
15 * bits 16..31 : ticket
Ralf Baechle2a31b032008-08-28 15:17:49 +010016 */
David Daney500c2e12010-02-04 11:31:49 -080017 u32 lock;
18 struct {
19#ifdef __BIG_ENDIAN
20 u16 ticket;
21 u16 serving_now;
22#else
23 u16 serving_now;
24 u16 ticket;
25#endif
26 } h;
Thomas Gleixner445c8952009-12-02 19:49:50 +010027} arch_spinlock_t;
Ingo Molnarfb1c8f92005-09-10 00:25:56 -070028
David Daney500c2e12010-02-04 11:31:49 -080029#define __ARCH_SPIN_LOCK_UNLOCKED { .lock = 0 }
Ingo Molnarfb1c8f92005-09-10 00:25:56 -070030
31typedef struct {
32 volatile unsigned int lock;
Thomas Gleixnerfb3a6bb2009-12-03 20:01:19 +010033} arch_rwlock_t;
Ingo Molnarfb1c8f92005-09-10 00:25:56 -070034
Thomas Gleixnerfb3a6bb2009-12-03 20:01:19 +010035#define __ARCH_RW_LOCK_UNLOCKED { 0 }
Ingo Molnarfb1c8f92005-09-10 00:25:56 -070036
37#endif