Annotation of sys/arch/vax/include/lock.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: lock.h,v 1.1 2007/05/01 18:56:31 miod Exp $ */
! 2:
! 3: /* public domain */
! 4:
! 5: #ifndef _VAX_LOCK_H_
! 6: #define _VAX_LOCK_H_
! 7:
! 8: typedef volatile u_int __cpu_simple_lock_t;
! 9:
! 10: #define __SIMPLELOCK_LOCKED 1
! 11: #define __SIMPLELOCK_UNLOCKED 0
! 12:
! 13: static __inline__ void
! 14: __cpu_simple_lock_init(__cpu_simple_lock_t *l)
! 15: {
! 16: *l = __SIMPLELOCK_UNLOCKED;
! 17: }
! 18:
! 19: static __inline__ void
! 20: __cpu_simple_lock(__cpu_simple_lock_t *l)
! 21: {
! 22: __cpu_simple_lock_t old;
! 23:
! 24: do {
! 25: old = __SIMPLELOCK_LOCKED;
! 26: __asm__ __volatile__
! 27: ("\tmovl\t$1, %1\n" /* _SPLINLOCK_LOCKED */
! 28: "\tbbssi\t$0, %0, 1f\n"
! 29: "\tmovl\t$0, %1\n" /* _SPLINLOCK_UNLOCKED */
! 30: "1:\n" : "=m" (*l), "=r" (old) : "0" (*l));
! 31: } while (old != __SIMPLELOCK_UNLOCKED);
! 32: }
! 33:
! 34: static __inline__ int
! 35: __cpu_simple_lock_try(__cpu_simple_lock_t *l)
! 36: {
! 37: __cpu_simple_lock_t old = __SIMPLELOCK_LOCKED;
! 38:
! 39: __asm__ __volatile__
! 40: ("\tmovl\t$1, %1\n" /* _SPLINLOCK_LOCKED */
! 41: "\tbbssi\t$0, %0, 1f\n"
! 42: "\tmovl\t$0, %1\n" /* _SPLINLOCK_UNLOCKED */
! 43: "1:\n" : "=m" (*l), "=r" (old) : "0" (*l));
! 44:
! 45: return (old == __SIMPLELOCK_UNLOCKED);
! 46: }
! 47:
! 48: static __inline__ void
! 49: __cpu_simple_unlock(__cpu_simple_lock_t *l)
! 50: {
! 51: *l = __SIMPLELOCK_UNLOCKED;
! 52: }
! 53:
! 54: #endif /* _VAX_LOCK_H_ */
CVSweb