at v2.6.30 99 lines 3.1 kB view raw
1/* 2 * Preliminary support for HW exception handing for Microblaze 3 * 4 * Copyright (C) 2008 Michal Simek 5 * Copyright (C) 2008 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#if defined(CONFIG_XMON) 68extern void xmon(struct pt_regs *regs); 69extern int xmon_bpt(struct pt_regs *regs); 70extern int xmon_sstep(struct pt_regs *regs); 71extern int xmon_iabr_match(struct pt_regs *regs); 72extern int xmon_dabr_match(struct pt_regs *regs); 73extern void (*xmon_fault_handler)(struct pt_regs *regs); 74 75void (*debugger)(struct pt_regs *regs) = xmon; 76int (*debugger_bpt)(struct pt_regs *regs) = xmon_bpt; 77int (*debugger_sstep)(struct pt_regs *regs) = xmon_sstep; 78int (*debugger_iabr_match)(struct pt_regs *regs) = xmon_iabr_match; 79int (*debugger_dabr_match)(struct pt_regs *regs) = xmon_dabr_match; 80void (*debugger_fault_handler)(struct pt_regs *regs); 81#elif defined(CONFIG_KGDB) 82void (*debugger)(struct pt_regs *regs); 83int (*debugger_bpt)(struct pt_regs *regs); 84int (*debugger_sstep)(struct pt_regs *regs); 85int (*debugger_iabr_match)(struct pt_regs *regs); 86int (*debugger_dabr_match)(struct pt_regs *regs); 87void (*debugger_fault_handler)(struct pt_regs *regs); 88#else 89#define debugger(regs) do { } while (0) 90#define debugger_bpt(regs) 0 91#define debugger_sstep(regs) 0 92#define debugger_iabr_match(regs) 0 93#define debugger_dabr_match(regs) 0 94#define debugger_fault_handler ((void (*)(struct pt_regs *))0) 95#endif 96 97#endif /*__ASSEMBLY__ */ 98#endif /* __KERNEL__ */ 99#endif /* _ASM_MICROBLAZE_EXCEPTIONS_H */