Linux Audio

Check our new training course

Loading...
v4.17
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef __ASM_SH_TRAPS_32_H
 3#define __ASM_SH_TRAPS_32_H
 4
 5#include <linux/types.h>
 6#include <asm/mmu.h>
 7
 8#ifdef CONFIG_CPU_HAS_SR_RB
 9#define lookup_exception_vector()	\
10({					\
11	unsigned long _vec;		\
12					\
13	__asm__ __volatile__ (		\
14		"stc r2_bank, %0\n\t"	\
15		: "=r" (_vec)		\
16	);				\
17					\
18	_vec;				\
19})
20#else
21#define lookup_exception_vector()	\
22({					\
23	unsigned long _vec;		\
24	__asm__ __volatile__ (		\
25		"mov r4, %0\n\t"	\
26		: "=r" (_vec)		\
27	);				\
28					\
29	_vec;				\
30})
31#endif
32
33static inline void trigger_address_error(void)
34{
35	__asm__ __volatile__ (
36		"ldc %0, sr\n\t"
37		"mov.l @%1, %0"
38		:
39		: "r" (0x10000000), "r" (0x80000001)
40	);
41}
42
43asmlinkage void do_address_error(struct pt_regs *regs,
44				 unsigned long writeaccess,
45				 unsigned long address);
46asmlinkage void do_divide_error(unsigned long r4);
47asmlinkage void do_reserved_inst(void);
48asmlinkage void do_illegal_slot_inst(void);
49asmlinkage void do_exception_error(void);
 
 
 
 
 
 
 
 
50
51#define BUILD_TRAP_HANDLER(name)					\
52asmlinkage void name##_trap_handler(unsigned long r4, unsigned long r5,	\
53				    unsigned long r6, unsigned long r7,	\
54				    struct pt_regs __regs)
55
56#define TRAP_HANDLER_DECL				\
57	struct pt_regs *regs = RELOC_HIDE(&__regs, 0);	\
58	unsigned int vec = regs->tra;			\
59	(void)vec;
60
61#endif /* __ASM_SH_TRAPS_32_H */
v3.5.6
 
 1#ifndef __ASM_SH_TRAPS_32_H
 2#define __ASM_SH_TRAPS_32_H
 3
 4#include <linux/types.h>
 5#include <asm/mmu.h>
 6
 7#ifdef CONFIG_CPU_HAS_SR_RB
 8#define lookup_exception_vector()	\
 9({					\
10	unsigned long _vec;		\
11					\
12	__asm__ __volatile__ (		\
13		"stc r2_bank, %0\n\t"	\
14		: "=r" (_vec)		\
15	);				\
16					\
17	_vec;				\
18})
19#else
20#define lookup_exception_vector()	\
21({					\
22	unsigned long _vec;		\
23	__asm__ __volatile__ (		\
24		"mov r4, %0\n\t"	\
25		: "=r" (_vec)		\
26	);				\
27					\
28	_vec;				\
29})
30#endif
31
32static inline void trigger_address_error(void)
33{
34	__asm__ __volatile__ (
35		"ldc %0, sr\n\t"
36		"mov.l @%1, %0"
37		:
38		: "r" (0x10000000), "r" (0x80000001)
39	);
40}
41
42asmlinkage void do_address_error(struct pt_regs *regs,
43				 unsigned long writeaccess,
44				 unsigned long address);
45asmlinkage void do_divide_error(unsigned long r4, unsigned long r5,
46				unsigned long r6, unsigned long r7,
47				struct pt_regs __regs);
48asmlinkage void do_reserved_inst(unsigned long r4, unsigned long r5,
49				unsigned long r6, unsigned long r7,
50				struct pt_regs __regs);
51asmlinkage void do_illegal_slot_inst(unsigned long r4, unsigned long r5,
52				unsigned long r6, unsigned long r7,
53				struct pt_regs __regs);
54asmlinkage void do_exception_error(unsigned long r4, unsigned long r5,
55				   unsigned long r6, unsigned long r7,
56				   struct pt_regs __regs);
57
58#define BUILD_TRAP_HANDLER(name)					\
59asmlinkage void name##_trap_handler(unsigned long r4, unsigned long r5,	\
60				    unsigned long r6, unsigned long r7,	\
61				    struct pt_regs __regs)
62
63#define TRAP_HANDLER_DECL				\
64	struct pt_regs *regs = RELOC_HIDE(&__regs, 0);	\
65	unsigned int vec = regs->tra;			\
66	(void)vec;
67
68#endif /* __ASM_SH_TRAPS_32_H */