lock.h revision 1.10
11.10Schristos/*	$NetBSD: lock.h,v 1.10 2006/11/16 01:32:39 christos Exp $	*/
21.1Sthorpej
31.1Sthorpej/*-
41.1Sthorpej * Copyright (c) 2000 The NetBSD Foundation, Inc.
51.1Sthorpej * All rights reserved.
61.1Sthorpej *
71.1Sthorpej * This code is derived from software contributed to The NetBSD Foundation
81.1Sthorpej * by Jason R. Thorpe.
91.1Sthorpej *
101.1Sthorpej * Redistribution and use in source and binary forms, with or without
111.1Sthorpej * modification, are permitted provided that the following conditions
121.1Sthorpej * are met:
131.1Sthorpej * 1. Redistributions of source code must retain the above copyright
141.1Sthorpej *    notice, this list of conditions and the following disclaimer.
151.1Sthorpej * 2. Redistributions in binary form must reproduce the above copyright
161.1Sthorpej *    notice, this list of conditions and the following disclaimer in the
171.1Sthorpej *    documentation and/or other materials provided with the distribution.
181.1Sthorpej * 3. All advertising materials mentioning features or use of this software
191.1Sthorpej *    must display the following acknowledgement:
201.1Sthorpej *	This product includes software developed by the NetBSD
211.1Sthorpej *	Foundation, Inc. and its contributors.
221.1Sthorpej * 4. Neither the name of The NetBSD Foundation nor the names of its
231.1Sthorpej *    contributors may be used to endorse or promote products derived
241.1Sthorpej *    from this software without specific prior written permission.
251.1Sthorpej *
261.1Sthorpej * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
271.1Sthorpej * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
281.1Sthorpej * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
291.1Sthorpej * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
301.1Sthorpej * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
311.1Sthorpej * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
321.1Sthorpej * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
331.1Sthorpej * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
341.1Sthorpej * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
351.1Sthorpej * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
361.1Sthorpej * POSSIBILITY OF SUCH DAMAGE.
371.1Sthorpej */
381.1Sthorpej
391.1Sthorpej/*
401.1Sthorpej * Machine-dependent spin lock operations.
411.1Sthorpej */
421.1Sthorpej
431.1Sthorpej#ifndef _M68K_LOCK_H_
441.1Sthorpej#define	_M68K_LOCK_H_
451.3Sthorpej
461.10Schristosstatic __inline void
471.3Sthorpej__cpu_simple_lock_init(__cpu_simple_lock_t *alp)
481.3Sthorpej{
491.3Sthorpej
501.3Sthorpej	*alp = __SIMPLELOCK_UNLOCKED;
511.3Sthorpej}
521.3Sthorpej
531.10Schristosstatic __inline void
541.3Sthorpej__cpu_simple_lock(__cpu_simple_lock_t *alp)
551.3Sthorpej{
561.3Sthorpej
571.8Sperry	__asm volatile(
581.3Sthorpej		"1:	tas	%0	\n"
591.3Sthorpej		"	jne	1b	\n"
601.3Sthorpej		: "=m" (*alp));
611.3Sthorpej}
621.3Sthorpej
631.10Schristosstatic __inline int
641.3Sthorpej__cpu_simple_lock_try(__cpu_simple_lock_t *alp)
651.3Sthorpej{
661.4Sthorpej	int __rv;
671.3Sthorpej
681.8Sperry	__asm volatile(
691.4Sthorpej		"	moveq	#1, %1	\n"
701.3Sthorpej		"	tas	%0	\n"
711.3Sthorpej		"	jeq	1f	\n"
721.3Sthorpej		"	moveq	#0, %1	\n"
731.3Sthorpej		"1:			\n"
741.3Sthorpej		: "=m" (*alp), "=d" (__rv));
751.3Sthorpej
761.3Sthorpej	return (__rv);
771.3Sthorpej}
781.3Sthorpej
791.10Schristosstatic __inline void
801.3Sthorpej__cpu_simple_unlock(__cpu_simple_lock_t *alp)
811.3Sthorpej{
821.3Sthorpej
831.3Sthorpej	*alp = __SIMPLELOCK_UNLOCKED;
841.3Sthorpej}
851.1Sthorpej
861.1Sthorpej#endif /* _M68K_LOCK_H_ */
87