Linux Audio

Check our new training course

Loading...
v5.4
 1// SPDX-License-Identifier: GPL-2.0
 2/*
 3 * SHcompact irqflags support
 4 *
 5 * Copyright (C) 2006 - 2009 Paul Mundt
 
 
 
 
 6 */
 7#include <linux/irqflags.h>
 8#include <linux/module.h>
 9
10void notrace arch_local_irq_restore(unsigned long flags)
11{
12	unsigned long __dummy0, __dummy1;
13
14	if (flags == ARCH_IRQ_DISABLED) {
15		__asm__ __volatile__ (
16			"stc	sr, %0\n\t"
17			"or	#0xf0, %0\n\t"
18			"ldc	%0, sr\n\t"
19			: "=&z" (__dummy0)
20			: /* no inputs */
21			: "memory"
22		);
23	} else {
24		__asm__ __volatile__ (
25			"stc	sr, %0\n\t"
26			"and	%1, %0\n\t"
27#ifdef CONFIG_CPU_HAS_SR_RB
28			"stc	r6_bank, %1\n\t"
29			"or	%1, %0\n\t"
30#endif
31			"ldc	%0, sr\n\t"
32			: "=&r" (__dummy0), "=r" (__dummy1)
33			: "1" (~ARCH_IRQ_DISABLED)
34			: "memory"
35		);
36	}
37}
38EXPORT_SYMBOL(arch_local_irq_restore);
39
40unsigned long notrace arch_local_save_flags(void)
41{
42	unsigned long flags;
43
44	__asm__ __volatile__ (
45		"stc	sr, %0\n\t"
46		"and	#0xf0, %0\n\t"
47		: "=&z" (flags)
48		: /* no inputs */
49		: "memory"
50	);
51
52	return flags;
53}
54EXPORT_SYMBOL(arch_local_save_flags);
v3.1
 
 1/*
 2 * SHcompact irqflags support
 3 *
 4 * Copyright (C) 2006 - 2009 Paul Mundt
 5 *
 6 * This file is subject to the terms and conditions of the GNU General Public
 7 * License. See the file "COPYING" in the main directory of this archive
 8 * for more details.
 9 */
10#include <linux/irqflags.h>
11#include <linux/module.h>
12
13void notrace arch_local_irq_restore(unsigned long flags)
14{
15	unsigned long __dummy0, __dummy1;
16
17	if (flags == ARCH_IRQ_DISABLED) {
18		__asm__ __volatile__ (
19			"stc	sr, %0\n\t"
20			"or	#0xf0, %0\n\t"
21			"ldc	%0, sr\n\t"
22			: "=&z" (__dummy0)
23			: /* no inputs */
24			: "memory"
25		);
26	} else {
27		__asm__ __volatile__ (
28			"stc	sr, %0\n\t"
29			"and	%1, %0\n\t"
30#ifdef CONFIG_CPU_HAS_SR_RB
31			"stc	r6_bank, %1\n\t"
32			"or	%1, %0\n\t"
33#endif
34			"ldc	%0, sr\n\t"
35			: "=&r" (__dummy0), "=r" (__dummy1)
36			: "1" (~ARCH_IRQ_DISABLED)
37			: "memory"
38		);
39	}
40}
41EXPORT_SYMBOL(arch_local_irq_restore);
42
43unsigned long notrace arch_local_save_flags(void)
44{
45	unsigned long flags;
46
47	__asm__ __volatile__ (
48		"stc	sr, %0\n\t"
49		"and	#0xf0, %0\n\t"
50		: "=&z" (flags)
51		: /* no inputs */
52		: "memory"
53	);
54
55	return flags;
56}
57EXPORT_SYMBOL(arch_local_save_flags);