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)20void 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)31int 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)43int 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)56void 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)67void 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)78void 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