00001 /* Locks -- Operations to protect critical sections 00002 Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 00003 Written by Stephane Carrez (stcarrez@nerim.fr) 00004 00005 This file is free software; you can redistribute it and/or modify it 00006 under the terms of the GNU General Public License as published by the 00007 Free Software Foundation; either version 2, or (at your option) any 00008 later version. 00009 00010 In addition to the permissions in the GNU General Public License, the 00011 Free Software Foundation gives you unlimited permission to link the 00012 compiled version of this file with other programs, and to distribute 00013 those programs without any restriction coming from the use of this 00014 file. (The General Public License restrictions do apply in other 00015 respects; for example, they cover modification of the file, and 00016 distribution when not linked into another program.) 00017 00018 This file is distributed in the hope that it will be useful, but 00019 WITHOUT ANY WARRANTY; without even the implied warranty of 00020 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00021 General Public License for more details. 00022 00023 You should have received a copy of the GNU General Public License 00024 along with this program; see the file COPYING. If not, write to 00025 the Free Software Foundation, 59 Temple Place - Suite 330, 00026 Boston, MA 02111-1307, USA. */ 00027 00028 #ifndef _M68HC11_LOCKS_H 00029 #define _M68HC11_LOCKS_H 00030 00081 00090 static __inline__ unsigned short 00091 lock (void) 00092 { 00093 unsigned short mask; 00094 00095 __asm__ __volatile__ ("tpa\n\tsei" : "=d"(mask)); 00096 return mask; 00097 } 00098 00105 static __inline__ void 00106 unlock (void) 00107 { 00108 __asm__ __volatile__ ("cli"); 00109 } 00110 00117 static __inline__ void 00118 restore (unsigned short mask) 00119 { 00120 __asm__ __volatile__ ("tap" : : "d"(mask)); 00121 } 00122 00134 static __inline__ void 00135 interruption_point (void) 00136 { 00137 __asm__ __volatile__ ("cli\n\t" 00138 "nop\n\t" 00139 "sei"); 00140 } 00141 00144 #endif