exceptions.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. #ifndef _ASM_MICROBLAZE_EXCEPTIONS_H
  13. #define _ASM_MICROBLAZE_EXCEPTIONS_H
  14. #ifdef __KERNEL__
  15. #ifndef CONFIG_MMU
  16. #define EX_HANDLER_STACK_SIZ (4*19)
  17. #endif
  18. #ifndef __ASSEMBLY__
  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. #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
  23. #define __enable_hw_exceptions() \
  24. __asm__ __volatile__ (" msrset r0, %0; \
  25. nop;" \
  26. : \
  27. : "i" (HWEX_MSR_BIT) \
  28. : "memory")
  29. #define __disable_hw_exceptions() \
  30. __asm__ __volatile__ (" msrclr r0, %0; \
  31. nop;" \
  32. : \
  33. : "i" (HWEX_MSR_BIT) \
  34. : "memory")
  35. #else /* !CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
  36. #define __enable_hw_exceptions() \
  37. __asm__ __volatile__ (" \
  38. mfs r12, rmsr; \
  39. nop; \
  40. ori r12, r12, %0; \
  41. mts rmsr, r12; \
  42. nop;" \
  43. : \
  44. : "i" (HWEX_MSR_BIT) \
  45. : "memory", "r12")
  46. #define __disable_hw_exceptions() \
  47. __asm__ __volatile__ (" \
  48. mfs r12, rmsr; \
  49. nop; \
  50. andi r12, r12, ~%0; \
  51. mts rmsr, r12; \
  52. nop;" \
  53. : \
  54. : "i" (HWEX_MSR_BIT) \
  55. : "memory", "r12")
  56. #endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
  57. asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
  58. int fsr, int addr);
  59. asmlinkage void sw_exception(struct pt_regs *regs);
  60. void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig);
  61. void die(const char *str, struct pt_regs *fp, long err);
  62. void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr);
  63. #endif /*__ASSEMBLY__ */
  64. #endif /* __KERNEL__ */
  65. #endif /* _ASM_MICROBLAZE_EXCEPTIONS_H */