• 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: osal atomic source file.
15  */
16 
17 #include "soc_osal.h"
18 #include "osal_inner.h"
19 
osal_atomic_set(osal_atomic * atomic,int i)20 void osal_atomic_set(osal_atomic *atomic, int i)
21 {
22     if (atomic == NULL) {
23         osal_log("parameter invalid!\n");
24         return;
25     }
26     unsigned int irq = osal_irq_lock();
27     atomic->counter = i;
28     osal_irq_restore(irq);
29 }
30 
osal_atomic_inc_return(osal_atomic * atomic)31 int osal_atomic_inc_return(osal_atomic *atomic)
32 {
33     if (atomic == NULL) {
34         osal_log("parameter invalid!\n");
35         return OSAL_FAILURE;
36     }
37     unsigned int irq = osal_irq_lock();
38     atomic->counter += 1;
39     osal_irq_restore(irq);
40     return atomic->counter;
41 }
42 
osal_atomic_read(osal_atomic * atomic)43 int osal_atomic_read(osal_atomic *atomic)
44 {
45     if (atomic == NULL) {
46         osal_log("parameter invalid!\n");
47         return OSAL_FAILURE;
48     }
49     int value;
50     unsigned int irq = osal_irq_lock();
51     value = atomic->counter;
52     osal_irq_restore(irq);
53     return value;
54 }
55 
osal_atomic_inc(osal_atomic * atomic)56 void osal_atomic_inc(osal_atomic *atomic)
57 {
58     if (atomic == NULL) {
59         osal_log("parameter invalid!\n");
60         return;
61     }
62     unsigned int irq = osal_irq_lock();
63     atomic->counter += 1;
64     osal_irq_restore(irq);
65 }
66 
osal_atomic_dec(osal_atomic * atomic)67 void osal_atomic_dec(osal_atomic *atomic)
68 {
69     if (atomic == NULL) {
70         osal_log("parameter invalid!\n");
71         return;
72     }
73     unsigned int irq = osal_irq_lock();
74     atomic->counter -= 1;
75     osal_irq_restore(irq);
76 }
77 
osal_atomic_add(osal_atomic * atomic,int count)78 void osal_atomic_add(osal_atomic *atomic, int count)
79 {
80     if (atomic == NULL) {
81         osal_log("parameter invalid!\n");
82         return;
83     }
84     unsigned int irq = osal_irq_lock();
85     atomic->counter += count;
86     osal_irq_restore(irq);
87 }
88