Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/microblaze/include/asm/exceptions.h
15126 views
1
/*
2
* Preliminary support for HW exception handing for Microblaze
3
*
4
* Copyright (C) 2008-2009 Michal Simek <[email protected]>
5
* Copyright (C) 2008-2009 PetaLogix
6
* Copyright (C) 2005 John Williams <[email protected]>
7
*
8
* This file is subject to the terms and conditions of the GNU General
9
* Public License. See the file COPYING in the main directory of this
10
* archive for more details.
11
*/
12
13
#ifndef _ASM_MICROBLAZE_EXCEPTIONS_H
14
#define _ASM_MICROBLAZE_EXCEPTIONS_H
15
16
#ifdef __KERNEL__
17
18
#ifndef CONFIG_MMU
19
#define EX_HANDLER_STACK_SIZ (4*19)
20
#endif
21
22
#ifndef __ASSEMBLY__
23
24
/* Macros to enable and disable HW exceptions in the MSR */
25
/* Define MSR enable bit for HW exceptions */
26
#define HWEX_MSR_BIT (1 << 8)
27
28
#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
29
#define __enable_hw_exceptions() \
30
__asm__ __volatile__ (" msrset r0, %0; \
31
nop;" \
32
: \
33
: "i" (HWEX_MSR_BIT) \
34
: "memory")
35
36
#define __disable_hw_exceptions() \
37
__asm__ __volatile__ (" msrclr r0, %0; \
38
nop;" \
39
: \
40
: "i" (HWEX_MSR_BIT) \
41
: "memory")
42
#else /* !CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
43
#define __enable_hw_exceptions() \
44
__asm__ __volatile__ (" \
45
mfs r12, rmsr; \
46
nop; \
47
ori r12, r12, %0; \
48
mts rmsr, r12; \
49
nop;" \
50
: \
51
: "i" (HWEX_MSR_BIT) \
52
: "memory", "r12")
53
54
#define __disable_hw_exceptions() \
55
__asm__ __volatile__ (" \
56
mfs r12, rmsr; \
57
nop; \
58
andi r12, r12, ~%0; \
59
mts rmsr, r12; \
60
nop;" \
61
: \
62
: "i" (HWEX_MSR_BIT) \
63
: "memory", "r12")
64
#endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
65
66
asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
67
int fsr, int addr);
68
69
asmlinkage void sw_exception(struct pt_regs *regs);
70
void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig);
71
72
void die(const char *str, struct pt_regs *fp, long err);
73
void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr);
74
75
#endif /*__ASSEMBLY__ */
76
#endif /* __KERNEL__ */
77
#endif /* _ASM_MICROBLAZE_EXCEPTIONS_H */
78
79