POK
mutexcreate.c
1 /*
2  * POK header
3  *
4  * The following file is a part of the POK project. Any modification should
5  * made according to the POK licence. You CANNOT use this file or a part of
6  * this file is this part of a file for your own project
7  *
8  * For more information on the POK licence, please see our LICENCE FILE
9  *
10  * Please follow the coding guidelines described in doc/CODING_GUIDELINES
11  *
12  * Copyright (c) 2007-2009 POK team
13  *
14  * Created by julien on Thu Jan 15 23:34:13 2009
15  */
16 
17 
18 #ifdef POK_NEEDS_MUTEXES
19 #include <types.h>
20 #include <errno.h>
21 #include <core/mutex.h>
22 #include <core/lockobj.h>
23 #include <core/syscall.h>
24 
25 pok_ret_t pok_mutex_create (pok_mutex_id_t* id, pok_mutex_attr_t* attr)
26 {
27  pok_lockobj_attr_t lockattr;
28 
29  lockattr.kind = POK_LOCKOBJ_KIND_MUTEX;
30  if (attr == NULL)
31  {
32  lockattr.locking_policy = POK_MUTEX_POLICY_STANDARD;
33  }
34  else
35  {
36  switch (attr->policy)
37  {
38  case POK_MUTEX_POLICY_STANDARD:
39  lockattr.locking_policy = POK_MUTEX_POLICY_STANDARD;
40  break;
41 
42  case POK_MUTEX_POLICY_PIP:
43  lockattr.locking_policy = POK_MUTEX_POLICY_PIP;
44  break;
45 
46  case POK_MUTEX_POLICY_PCP:
47  lockattr.locking_policy = POK_MUTEX_POLICY_PCP;
48  break;
49 
50  default:
51  lockattr.locking_policy = POK_MUTEX_POLICY_STANDARD;
52  }
53  }
54  return pok_syscall2 (POK_SYSCALL_LOCKOBJ_CREATE, (uint32_t)id, (uint32_t)&lockattr);
55 }
56 
57 #endif