1 /*
2  * Copyright (C) 2015-2017 Alibaba Group Holding Limited
3  */
4 
5 #include <stdint.h>
6 
7 #include "k_api.h"
8 
9 #include "vfs_adapt.h"
10 
vfs_lock_create(void)11 void *vfs_lock_create(void)
12 {
13     int32_t   ret;
14     kmutex_t *m;
15 
16     m = krhino_mm_alloc(sizeof(kmutex_t));
17     if (m == NULL) {
18         return NULL;
19     }
20 
21     ret = krhino_mutex_create(m, "VFS");
22     if (ret != RHINO_SUCCESS) {
23         krhino_mm_free(m);
24         return NULL;
25     }
26 
27     return (void *)m;
28 }
29 
vfs_lock_free(void * lock)30 int32_t vfs_lock_free(void *lock)
31 {
32     int32_t ret;
33 
34     kmutex_t *m = (kmutex_t *)lock;
35 
36     if (m == NULL) {
37         return -1;
38     }
39 
40     ret = krhino_mutex_del(m);
41     if (ret != RHINO_SUCCESS) {
42         return ret;
43     }
44 
45     krhino_mm_free(m);
46 
47     return ret;
48 }
49 
vfs_lock(void * lock)50 int32_t vfs_lock(void *lock)
51 {
52     int ret = krhino_mutex_lock((kmutex_t *)lock, RHINO_WAIT_FOREVER);
53 
54     if (ret == RHINO_MUTEX_OWNER_NESTED) {
55         ret = RHINO_SUCCESS;
56     }
57 
58     return ret;
59 }
60 
vfs_unlock(void * lock)61 int32_t vfs_unlock(void *lock)
62 {
63     int ret =  krhino_mutex_unlock((kmutex_t *)lock);
64 
65     if (ret == RHINO_MUTEX_OWNER_NESTED) {
66         ret = RHINO_SUCCESS;
67     }
68 
69     return ret;
70 }
71 
vfs_malloc(uint32_t size)72 void *vfs_malloc(uint32_t size)
73 {
74     return krhino_mm_alloc(size);
75 }
76 
vfs_free(void * ptr)77 void vfs_free(void *ptr)
78 {
79     krhino_mm_free(ptr);
80 }
81