11.5Smsaitoh/* $NetBSD: lock.h,v 1.5 2017/10/23 06:43:00 msaitoh Exp $ */ 21.1Sjmcneill 31.1Sjmcneill/*- 41.1Sjmcneill * Copyright (c) 2007 Jared D. McNeill <jmcneill@invisible.ca> 51.1Sjmcneill * All rights reserved. 61.1Sjmcneill * 71.1Sjmcneill * Redistribution and use in source and binary forms, with or without 81.1Sjmcneill * modification, are permitted provided that the following conditions 91.1Sjmcneill * are met: 101.1Sjmcneill * 1. Redistributions of source code must retain the above copyright 111.1Sjmcneill * notice, this list of conditions and the following disclaimer. 121.1Sjmcneill * 2. Redistributions in binary form must reproduce the above copyright 131.1Sjmcneill * notice, this list of conditions and the following disclaimer in the 141.1Sjmcneill * documentation and/or other materials provided with the distribution. 151.1Sjmcneill * 161.1Sjmcneill * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 171.1Sjmcneill * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 181.1Sjmcneill * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 191.1Sjmcneill * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 201.1Sjmcneill * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 211.1Sjmcneill * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 221.1Sjmcneill * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 231.1Sjmcneill * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 241.1Sjmcneill * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 251.1Sjmcneill * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 261.1Sjmcneill * POSSIBILITY OF SUCH DAMAGE. 271.1Sjmcneill */ 281.1Sjmcneill 291.1Sjmcneill#ifndef _ARCH_USERMODE_INCLUDE_LOCK_H 301.1Sjmcneill#define _ARCH_USERMODE_INCLUDE_LOCK_H 311.1Sjmcneill 321.1Sjmcneill__inline static void 331.5Smsaitoh__cpu_simple_lock_init(__cpu_simple_lock_t *lockp) 341.1Sjmcneill{ 351.3Sjmcneill *lockp = __SIMPLELOCK_UNLOCKED; 361.3Sjmcneill} 371.3Sjmcneill 381.3Sjmcneill__inline static int 391.5Smsaitoh__cpu_simple_lock_try(__cpu_simple_lock_t *lockp) 401.3Sjmcneill{ 411.3Sjmcneill if (*lockp == __SIMPLELOCK_LOCKED) 421.3Sjmcneill return 0; 431.3Sjmcneill *lockp = __SIMPLELOCK_LOCKED; 441.3Sjmcneill return 1; 451.1Sjmcneill} 461.1Sjmcneill 471.1Sjmcneill__inline static void 481.1Sjmcneill__cpu_simple_lock(__cpu_simple_lock_t *lockp) 491.1Sjmcneill{ 501.3Sjmcneill while (!__cpu_simple_lock_try(lockp)) 511.3Sjmcneill ; 521.1Sjmcneill} 531.1Sjmcneill 541.1Sjmcneill__inline static void 551.1Sjmcneill__cpu_simple_unlock(__cpu_simple_lock_t *lockp) 561.1Sjmcneill{ 571.3Sjmcneill *lockp = __SIMPLELOCK_UNLOCKED; 581.1Sjmcneill} 591.1Sjmcneill 601.1Sjmcneill__inline static int 611.5Smsaitoh__SIMPLELOCK_LOCKED_P(const __cpu_simple_lock_t *lockp) 621.1Sjmcneill{ 631.1Sjmcneill return *lockp == __SIMPLELOCK_LOCKED; 641.1Sjmcneill} 651.1Sjmcneill 661.1Sjmcneill__inline static int 671.5Smsaitoh__SIMPLELOCK_UNLOCKED_P(const __cpu_simple_lock_t *lockp) 681.1Sjmcneill{ 691.1Sjmcneill return *lockp == __SIMPLELOCK_UNLOCKED; 701.1Sjmcneill} 711.1Sjmcneill 721.1Sjmcneill#endif /* !_ARCH_USERMODE_INCLUDE_LOCK_H */ 73