linux/arch/microblaze/include/asm/exceptions.h
<<
>>
Prefs
   1/*
   2 * Preliminary support for HW exception handing for Microblaze
   3 *
   4 * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu>
   5 * Copyright (C) 2008-2009 PetaLogix
   6 * Copyright (C) 2005 John Williams <jwilliams@itee.uq.edu.au>
   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#ifndef __ASSEMBLY__
  18
  19/* Macros to enable and disable HW exceptions in the MSR */
  20/* Define MSR enable bit for HW exceptions */
  21#define HWEX_MSR_BIT (1 << 8)
  22
  23#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
  24#define __enable_hw_exceptions()                                        \
  25        __asm__ __volatile__ (" msrset  r0, %0;                         \
  26                                nop;"                                   \
  27                                :                                       \
  28                                : "i" (HWEX_MSR_BIT)                    \
  29                                : "memory")
  30
  31#define __disable_hw_exceptions()                                       \
  32        __asm__ __volatile__ (" msrclr r0, %0;                          \
  33                                nop;"                                   \
  34                                :                                       \
  35                                : "i" (HWEX_MSR_BIT)                    \
  36                                : "memory")
  37#else /* !CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
  38#define __enable_hw_exceptions()                                        \
  39        __asm__ __volatile__ ("                                         \
  40                                mfs     r12, rmsr;                      \
  41                                nop;                                    \
  42                                ori     r12, r12, %0;                   \
  43                                mts     rmsr, r12;                      \
  44                                nop;"                                   \
  45                                :                                       \
  46                                : "i" (HWEX_MSR_BIT)                    \
  47                                : "memory", "r12")
  48
  49#define __disable_hw_exceptions()                                       \
  50        __asm__ __volatile__ ("                                         \
  51                                mfs     r12, rmsr;                      \
  52                                nop;                                    \
  53                                andi    r12, r12, ~%0;                  \
  54                                mts     rmsr, r12;                      \
  55                                nop;"                                   \
  56                                :                                       \
  57                                : "i" (HWEX_MSR_BIT)                    \
  58                                : "memory", "r12")
  59#endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
  60
  61asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
  62                                                        int fsr, int addr);
  63
  64void die(const char *str, struct pt_regs *fp, long err);
  65void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr);
  66
  67#ifdef CONFIG_MMU
  68void __bug(const char *file, int line, void *data);
  69int bad_trap(int trap_num, struct pt_regs *regs);
  70int debug_trap(struct pt_regs *regs);
  71#endif /* CONFIG_MMU */
  72
  73#if defined(CONFIG_KGDB)
  74void (*debugger)(struct pt_regs *regs);
  75int (*debugger_bpt)(struct pt_regs *regs);
  76int (*debugger_sstep)(struct pt_regs *regs);
  77int (*debugger_iabr_match)(struct pt_regs *regs);
  78int (*debugger_dabr_match)(struct pt_regs *regs);
  79void (*debugger_fault_handler)(struct pt_regs *regs);
  80#else
  81#define debugger(regs)                  do { } while (0)
  82#define debugger_bpt(regs)              0
  83#define debugger_sstep(regs)            0
  84#define debugger_iabr_match(regs)       0
  85#define debugger_dabr_match(regs)       0
  86#define debugger_fault_handler          ((void (*)(struct pt_regs *))0)
  87#endif
  88
  89#endif /*__ASSEMBLY__ */
  90#endif /* __KERNEL__ */
  91#endif /* _ASM_MICROBLAZE_EXCEPTIONS_H */
  92