Warning: This file is not a C or C++ file. It does not have highlighting.
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | #ifndef __ASM_SH_CMPXCHG_IRQ_H |
3 | #define __ASM_SH_CMPXCHG_IRQ_H |
4 | |
5 | #include <linux/irqflags.h> |
6 | |
7 | static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val) |
8 | { |
9 | unsigned long flags, retval; |
10 | |
11 | local_irq_save(flags); |
12 | retval = *m; |
13 | *m = val; |
14 | local_irq_restore(flags); |
15 | return retval; |
16 | } |
17 | |
18 | static inline unsigned long xchg_u16(volatile u16 *m, unsigned long val) |
19 | { |
20 | unsigned long flags, retval; |
21 | |
22 | local_irq_save(flags); |
23 | retval = *m; |
24 | *m = val; |
25 | local_irq_restore(flags); |
26 | return retval; |
27 | } |
28 | |
29 | static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val) |
30 | { |
31 | unsigned long flags, retval; |
32 | |
33 | local_irq_save(flags); |
34 | retval = *m; |
35 | *m = val & 0xff; |
36 | local_irq_restore(flags); |
37 | return retval; |
38 | } |
39 | |
40 | static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old, |
41 | unsigned long new) |
42 | { |
43 | __u32 retval; |
44 | unsigned long flags; |
45 | |
46 | local_irq_save(flags); |
47 | retval = *m; |
48 | if (retval == old) |
49 | *m = new; |
50 | local_irq_restore(flags); /* implies memory barrier */ |
51 | return retval; |
52 | } |
53 | |
54 | #endif /* __ASM_SH_CMPXCHG_IRQ_H */ |
55 |
Warning: This file is not a C or C++ file. It does not have highlighting.