1197383Sdelphij#ifndef __LINUX_SPINLOCK_TYPES_RAW_H
2197571Sdelphij#define __LINUX_SPINLOCK_TYPES_RAW_H
3197571Sdelphij
4197383Sdelphij#include <linux/types.h>
5197571Sdelphij
6197571Sdelphij#if defined(CONFIG_SMP)
7197571Sdelphij# include <asm/spinlock_types.h>
8197571Sdelphij#else
9197571Sdelphij# include <linux/spinlock_types_up.h>
10197571Sdelphij#endif
11197571Sdelphij
12197571Sdelphij#include <linux/lockdep_types.h>
13197571Sdelphij
14197571Sdelphijtypedef struct raw_spinlock {
15197571Sdelphij	arch_spinlock_t raw_lock;
16197571Sdelphij#ifdef CONFIG_DEBUG_SPINLOCK
17197571Sdelphij	unsigned int magic, owner_cpu;
18197571Sdelphij	void *owner;
19197571Sdelphij#endif
20197571Sdelphij#ifdef CONFIG_DEBUG_LOCK_ALLOC
21197571Sdelphij	struct lockdep_map dep_map;
22197571Sdelphij#endif
23197571Sdelphij} raw_spinlock_t;
24197571Sdelphij
25197571Sdelphij#define SPINLOCK_MAGIC		0xdead4ead
26198251Sjkim
27197571Sdelphij#define SPINLOCK_OWNER_INIT	((void *)-1L)
28197571Sdelphij
29197383Sdelphij#ifdef CONFIG_DEBUG_LOCK_ALLOC
30197383Sdelphij# define RAW_SPIN_DEP_MAP_INIT(lockname)		\
31197383Sdelphij	.dep_map = {					\
32197383Sdelphij		.name = #lockname,			\
33197383Sdelphij		.wait_type_inner = LD_WAIT_SPIN,	\
34198251Sjkim	}
35197383Sdelphij# define SPIN_DEP_MAP_INIT(lockname)			\
36197383Sdelphij	.dep_map = {					\
37197383Sdelphij		.name = #lockname,			\
38198251Sjkim		.wait_type_inner = LD_WAIT_CONFIG,	\
39197383Sdelphij	}
40197383Sdelphij
41197383Sdelphij# define LOCAL_SPIN_DEP_MAP_INIT(lockname)		\
42197383Sdelphij	.dep_map = {					\
43198251Sjkim		.name = #lockname,			\
44197383Sdelphij		.wait_type_inner = LD_WAIT_CONFIG,	\
45197383Sdelphij		.lock_type = LD_LOCK_PERCPU,		\
46197383Sdelphij	}
47198251Sjkim#else
48198251Sjkim# define RAW_SPIN_DEP_MAP_INIT(lockname)
49197383Sdelphij# define SPIN_DEP_MAP_INIT(lockname)
50197383Sdelphij# define LOCAL_SPIN_DEP_MAP_INIT(lockname)
51197383Sdelphij#endif
52198251Sjkim
53198251Sjkim#ifdef CONFIG_DEBUG_SPINLOCK
54198251Sjkim# define SPIN_DEBUG_INIT(lockname)		\
55198251Sjkim	.magic = SPINLOCK_MAGIC,		\
56197383Sdelphij	.owner_cpu = -1,			\
57197383Sdelphij	.owner = SPINLOCK_OWNER_INIT,
58197383Sdelphij#else
59197383Sdelphij# define SPIN_DEBUG_INIT(lockname)
60197383Sdelphij#endif
61198251Sjkim
62197383Sdelphij#define __RAW_SPIN_LOCK_INITIALIZER(lockname)	\
63197383Sdelphij{						\
64197383Sdelphij	.raw_lock = __ARCH_SPIN_LOCK_UNLOCKED,	\
65198251Sjkim	SPIN_DEBUG_INIT(lockname)		\
66197383Sdelphij	RAW_SPIN_DEP_MAP_INIT(lockname) }
67197383Sdelphij
68197383Sdelphij#define __RAW_SPIN_LOCK_UNLOCKED(lockname)	\
69198251Sjkim	(raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
70198251Sjkim
71197383Sdelphij#define DEFINE_RAW_SPINLOCK(x)  raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)
72197383Sdelphij
73197383Sdelphij#endif /* __LINUX_SPINLOCK_TYPES_RAW_H */
74197383Sdelphij