POK
/home/jaouen/pok_official/pok/trunk/libpok/core/mutexcreate.c
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 #ifdef POK_NEEDS_MUTEXES
00019 #include <types.h>
00020 #include <errno.h>
00021 #include <core/mutex.h>
00022 #include <core/lockobj.h>
00023 #include <core/syscall.h>
00024 
00025 pok_ret_t pok_mutex_create (pok_mutex_id_t* id, pok_mutex_attr_t* attr)
00026 {
00027    pok_lockobj_attr_t lockattr;
00028    
00029    lockattr.kind = POK_LOCKOBJ_KIND_MUTEX;
00030    if (attr == NULL)
00031    {
00032       lockattr.locking_policy = POK_MUTEX_POLICY_STANDARD;
00033    }
00034    else
00035    {
00036       switch (attr->policy)
00037       {
00038          case POK_MUTEX_POLICY_STANDARD:
00039             lockattr.locking_policy = POK_MUTEX_POLICY_STANDARD;
00040             break;
00041 
00042          case POK_MUTEX_POLICY_PIP:
00043             lockattr.locking_policy = POK_MUTEX_POLICY_PIP;
00044             break;
00045 
00046          case POK_MUTEX_POLICY_PCP:
00047             lockattr.locking_policy = POK_MUTEX_POLICY_PCP;
00048             break;
00049          
00050          default:
00051             lockattr.locking_policy = POK_MUTEX_POLICY_STANDARD;
00052       }
00053    }
00054    return pok_syscall2 (POK_SYSCALL_LOCKOBJ_CREATE, (uint32_t)id, (uint32_t)&lockattr);
00055 }
00056 
00057 #endif