• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *   Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  * Description: atomic
15  *
16  * Create: 2021-12-16
17  */
18 
19 #include <los_memory.h>
20 #include "soc_osal.h"
21 #include "osal_errno.h"
22 #include "los_atomic.h"
23 #include "securec.h"
24 #include "osal_inner.h"
25 
osal_atomic_read(osal_atomic * atomic)26 int osal_atomic_read(osal_atomic *atomic)
27 {
28     if (atomic == NULL) {
29         osal_log("parameter invalid!\n");
30         return OSAL_FAILURE;
31     }
32 
33     return LOS_AtomicRead((Atomic *)&(atomic->counter));
34 }
35 
osal_atomic_set(osal_atomic * atomic,int i)36 void osal_atomic_set(osal_atomic *atomic, int i)
37 {
38     if (atomic == NULL) {
39         osal_log("parameter invalid!\n");
40         return;
41     }
42 
43     LOS_AtomicSet((Atomic *)&(atomic->counter), i);
44 }
45 
osal_atomic_inc_return(osal_atomic * atomic)46 int osal_atomic_inc_return(osal_atomic *atomic)
47 {
48     if (atomic == NULL) {
49         osal_log("parameter invalid!\n");
50         return OSAL_FAILURE;
51     }
52 
53     return LOS_AtomicIncRet((Atomic *)&(atomic->counter));
54 }
55 
osal_atomic_dec_return(osal_atomic * atomic)56 int osal_atomic_dec_return(osal_atomic *atomic)
57 {
58     if (atomic == NULL) {
59         osal_log("parameter invalid!\n");
60         return OSAL_FAILURE;
61     }
62 
63     return LOS_AtomicDecRet((Atomic *)&(atomic->counter));
64 }
65 
osal_atomic_inc(osal_atomic * atomic)66 void osal_atomic_inc(osal_atomic *atomic)
67 {
68     if (atomic == NULL) {
69         osal_log("parameter invalid!\n");
70         return;
71     }
72 
73     LOS_AtomicInc((Atomic *)&(atomic->counter));
74 }
75 
osal_atomic_dec(osal_atomic * atomic)76 void osal_atomic_dec(osal_atomic *atomic)
77 {
78     if (atomic == NULL) {
79         osal_log("parameter invalid!\n");
80         return;
81     }
82 
83     LOS_AtomicDec((Atomic *)&(atomic->counter));
84 }
85 
osal_atomic_add(osal_atomic * atomic,int count)86 void osal_atomic_add(osal_atomic *atomic, int count)
87 {
88     if (atomic == NULL) {
89         osal_log("parameter invalid!\n");
90         return;
91     }
92 
93     LOS_AtomicAdd((Atomic *)&(atomic->counter), count);
94 }
95 
osal_atomic_sub(osal_atomic * atomic,unsigned int count)96 void osal_atomic_sub(osal_atomic *atomic, unsigned int count)
97 {
98     LOS_AtomicSub((Atomic *)&(atomic->counter), count);
99 }
100 
osal_atomic_add_return(osal_atomic * atomic,int count)101 int osal_atomic_add_return(osal_atomic *atomic, int count)
102 {
103     return LOS_AtomicAdd((Atomic *)&(atomic->counter), count);
104 }
105 
osal_atomic_dec_and_test(osal_atomic * atomic)106 int osal_atomic_dec_and_test(osal_atomic *atomic)
107 {
108     return (LOS_AtomicDecRet((Atomic *)&(atomic->counter)) == 0);
109 }