1 #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 8 #include <linux/types.h> 9 10 #include <asm/byteorder.h> 11 12 typedef union { 13 /* 14 * bits 0..15 : serving_now 15 * bits 16..31 : ticket 16 */ 17 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; 27 } arch_spinlock_t; 28 29 #define __ARCH_SPIN_LOCK_UNLOCKED { .lock = 0 } 30 31 typedef struct { 32 volatile unsigned int lock; 33 } arch_rwlock_t; 34 35 #define __ARCH_RW_LOCK_UNLOCKED { 0 } 36 37 #endif 38