xref: /rk3399_ARM-atf/include/lib/spinlock.h (revision 222f885df38c3abd34ee239a721654155609631b)
14ecca339SDan Handley /*
2*222f885dSAlexeiFedorov  * Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
34ecca339SDan Handley  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
54ecca339SDan Handley  */
64ecca339SDan Handley 
7f8b30ca8SAntonio Nino Diaz #ifndef SPINLOCK_H
8f8b30ca8SAntonio Nino Diaz #define SPINLOCK_H
94ecca339SDan Handley 
10d5dfdeb6SJulius Werner #ifndef __ASSEMBLER__
11b38bc68bSJeenu Viswambharan 
1293c78ed2SAntonio Nino Diaz #include <stdint.h>
13b38bc68bSJeenu Viswambharan 
14fb037bfbSDan Handley typedef struct spinlock {
15b38bc68bSJeenu Viswambharan 	volatile uint32_t lock;
164ecca339SDan Handley } spinlock_t;
174ecca339SDan Handley 
18*222f885dSAlexeiFedorov typedef struct bitlock {
19*222f885dSAlexeiFedorov 	volatile uint8_t lock;
20*222f885dSAlexeiFedorov } bitlock_t;
21*222f885dSAlexeiFedorov 
224ecca339SDan Handley void spin_lock(spinlock_t *lock);
234ecca339SDan Handley void spin_unlock(spinlock_t *lock);
244ecca339SDan Handley 
25*222f885dSAlexeiFedorov void bit_lock(bitlock_t *lock, uint8_t mask);
26*222f885dSAlexeiFedorov void bit_unlock(bitlock_t *lock, uint8_t mask);
27*222f885dSAlexeiFedorov 
28b38bc68bSJeenu Viswambharan #else
29b38bc68bSJeenu Viswambharan 
30b38bc68bSJeenu Viswambharan /* Spin lock definitions for use in assembly */
31b38bc68bSJeenu Viswambharan #define SPINLOCK_ASM_ALIGN	2
32b38bc68bSJeenu Viswambharan #define SPINLOCK_ASM_SIZE	4
33b38bc68bSJeenu Viswambharan 
34*222f885dSAlexeiFedorov #endif /* __ASSEMBLER__ */
35f8b30ca8SAntonio Nino Diaz #endif /* SPINLOCK_H */
36