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