1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */ 2*437bfbebSnyanmisaka /* 3*437bfbebSnyanmisaka * Copyright (c) 2021 Rockchip Electronics Co., Ltd. 4*437bfbebSnyanmisaka */ 5*437bfbebSnyanmisaka 6*437bfbebSnyanmisaka #ifndef __MPP_LOCK_H__ 7*437bfbebSnyanmisaka #define __MPP_LOCK_H__ 8*437bfbebSnyanmisaka 9*437bfbebSnyanmisaka #include <stdbool.h> 10*437bfbebSnyanmisaka 11*437bfbebSnyanmisaka #include "rk_type.h" 12*437bfbebSnyanmisaka 13*437bfbebSnyanmisaka #define MPP_FETCH_ADD __sync_fetch_and_add 14*437bfbebSnyanmisaka #define MPP_FETCH_SUB __sync_fetch_and_sub 15*437bfbebSnyanmisaka #define MPP_FETCH_OR __sync_fetch_and_or 16*437bfbebSnyanmisaka #define MPP_FETCH_AND __sync_fetch_and_and 17*437bfbebSnyanmisaka #define MPP_FETCH_XOR __sync_fetch_and_xor 18*437bfbebSnyanmisaka #define MPP_FETCH_NAND __sync_fetch_and_nand 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #define MPP_ADD_FETCH __sync_add_and_fetch 21*437bfbebSnyanmisaka #define MPP_SUB_FETCH __sync_sub_and_fetch 22*437bfbebSnyanmisaka #define MPP_OR_FETCH __sync_or_and_fetch 23*437bfbebSnyanmisaka #define MPP_AND_FETCH __sync_and_and_fetch 24*437bfbebSnyanmisaka #define MPP_XOR_FETCH __sync_xor_and_fetch 25*437bfbebSnyanmisaka #define MPP_NAND_FETCH __sync_nand_and_fetch 26*437bfbebSnyanmisaka 27*437bfbebSnyanmisaka #define MPP_BOOL_CAS __sync_bool_compare_and_swap 28*437bfbebSnyanmisaka #define MPP_VAL_CAS __sync_val_compare_and_swap 29*437bfbebSnyanmisaka 30*437bfbebSnyanmisaka #define MPP_SYNC __sync_synchronize 31*437bfbebSnyanmisaka #define MPP_SYNC_TEST_SET __sync_lock_test_and_set 32*437bfbebSnyanmisaka #define MPP_SYNC_CLR __sync_lock_release 33*437bfbebSnyanmisaka 34*437bfbebSnyanmisaka #ifdef __cplusplus 35*437bfbebSnyanmisaka extern "C" { 36*437bfbebSnyanmisaka #endif 37*437bfbebSnyanmisaka 38*437bfbebSnyanmisaka typedef struct { 39*437bfbebSnyanmisaka RK_U32 lock; 40*437bfbebSnyanmisaka RK_U32 debug; 41*437bfbebSnyanmisaka RK_S64 count; 42*437bfbebSnyanmisaka RK_S64 time; 43*437bfbebSnyanmisaka } spinlock_t; 44*437bfbebSnyanmisaka 45*437bfbebSnyanmisaka void mpp_spinlock_init(spinlock_t *lock); 46*437bfbebSnyanmisaka void mpp_spinlock_deinit(spinlock_t *lock, const char *name); 47*437bfbebSnyanmisaka void mpp_spinlock_lock(spinlock_t *lock); 48*437bfbebSnyanmisaka void mpp_spinlock_unlock(spinlock_t *lock); 49*437bfbebSnyanmisaka bool mpp_spinlock_trylock(spinlock_t *lock); 50*437bfbebSnyanmisaka 51*437bfbebSnyanmisaka #ifdef __cplusplus 52*437bfbebSnyanmisaka } 53*437bfbebSnyanmisaka #endif 54*437bfbebSnyanmisaka 55*437bfbebSnyanmisaka #endif /*__MPP_LOCK_H__*/ 56