POK(kernelpart)
/home/jaouen/pok_official/pok/trunk/kernel/include/arch/ppc/spinlock.h
Go to the documentation of this file.
00001 /*
00002  *                               POK header
00003  * 
00004  * The following file is a part of the POK project. Any modification should
00005  * made according to the POK licence. You CANNOT use this file or a part of
00006  * this file is this part of a file for your own project
00007  *
00008  * For more information on the POK licence, please see our LICENCE FILE
00009  *
00010  * Please follow the coding guidelines described in doc/CODING_GUIDELINES
00011  *
00012  *                                      Copyright (c) 2007-2009 POK team 
00013  *
00014  * Created by julien on Thu Jan 15 23:34:13 2009 
00015  */
00016 
00017 
00018 #ifndef __POK_SPINLOCK_H__
00019 #define __POK_SPINLOCK_H__
00020 
00021 typedef unsigned int pok_spinlock_t;
00022 
00023 #define SPIN_UNLOCK(_spin_)                                     \
00024   (_spin_) = 0
00025 
00026 #define SPIN_LOCK(_spin_)                                       \
00027   do {                                                          \
00028     unsigned int val;                                           \
00029     asm volatile ("\n"                                          \
00030                   "1:\n\t"                                      \
00031                   "lwarx    %0,0,%1       \n\t"                 \
00032                   "cmpwi    %0,0          \n\t"                 \
00033                   "bne      1b            \n\t"                 \
00034                   "stwcx.   %2,0,%1       \n\t"                 \
00035                   "bne      1b            \n\t"                 \
00036                   : "=&r"(val) : "r" (&_spin_), "r"(1));         \
00037   } while (0)
00038 
00039 #endif /* !__POK_SPINLOCK_H__ */