1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2deae26bfSKyle McMartin #ifndef __ASM_SPINLOCK_TYPES_H
3deae26bfSKyle McMartin #define __ASM_SPINLOCK_TYPES_H
4deae26bfSKyle McMartin 
5deae26bfSKyle McMartin typedef struct {
6deae26bfSKyle McMartin #ifdef CONFIG_PA20
7deae26bfSKyle McMartin 	volatile unsigned int slock;
8edc35bd7SThomas Gleixner # define __ARCH_SPIN_LOCK_UNLOCKED { 1 }
9deae26bfSKyle McMartin #else
10deae26bfSKyle McMartin 	volatile unsigned int lock[4];
11edc35bd7SThomas Gleixner # define __ARCH_SPIN_LOCK_UNLOCKED	{ { 1, 1, 1, 1 } }
12deae26bfSKyle McMartin #endif
13445c8951SThomas Gleixner } arch_spinlock_t;
14deae26bfSKyle McMartin 
15fbdc8f0fSHelge Deller 
16fbdc8f0fSHelge Deller /* counter:
17fbdc8f0fSHelge Deller  * Unlocked     : 0x0100_0000
18fbdc8f0fSHelge Deller  * Read lock(s) : 0x00FF_FFFF to 0x01  (Multiple Readers decrement it)
19fbdc8f0fSHelge Deller  * Write lock   : 0x0, but only if prior value is "unlocked" 0x0100_0000
20fbdc8f0fSHelge Deller  */
21deae26bfSKyle McMartin typedef struct {
22fbdc8f0fSHelge Deller 	arch_spinlock_t		lock_mutex;
23fbdc8f0fSHelge Deller 	volatile unsigned int	counter;
24fb3a6bbcSThomas Gleixner } arch_rwlock_t;
25deae26bfSKyle McMartin 
26fbdc8f0fSHelge Deller #define __ARCH_RW_LOCK_UNLOCKED__       0x01000000
27fbdc8f0fSHelge Deller #define __ARCH_RW_LOCK_UNLOCKED         { .lock_mutex = __ARCH_SPIN_LOCK_UNLOCKED, \
28fbdc8f0fSHelge Deller 					.counter = __ARCH_RW_LOCK_UNLOCKED__ }
29deae26bfSKyle McMartin 
30deae26bfSKyle McMartin #endif
31