home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-v850 / entry.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.9 KB  |  114 lines

  1. /*
  2.  * include/asm-v850/entry.h -- Definitions used by low-level trap handlers
  3.  *
  4.  *  Copyright (C) 2001,02,03  NEC Electronics Corporation
  5.  *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
  6.  *
  7.  * This file is subject to the terms and conditions of the GNU General
  8.  * Public License.  See the file COPYING in the main directory of this
  9.  * archive for more details.
  10.  *
  11.  * Written by Miles Bader <miles@gnu.org>
  12.  */
  13.  
  14. #ifndef __V850_ENTRY_H__
  15. #define __V850_ENTRY_H__
  16.  
  17.  
  18. #include <asm/ptrace.h>
  19. #include <asm/machdep.h>
  20.  
  21.  
  22. /* These are special variables using by the kernel trap/interrupt code
  23.    to save registers in, at a time when there are no spare registers we
  24.    can use to do so, and we can't depend on the value of the stack
  25.    pointer.  This means that they must be within a signed 16-bit
  26.    displacement of 0x00000000.  */
  27.  
  28. #define KERNEL_VAR_SPACE_ADDR    R0_RAM_ADDR
  29.  
  30. #ifdef __ASSEMBLY__
  31. #define KERNEL_VAR(addr)    addr[r0]
  32. #else
  33. #define KERNEL_VAR(addr)    (*(volatile unsigned long *)(addr))
  34. #endif
  35.  
  36. /* Kernel stack pointer, 4 bytes.  */
  37. #define KSP_ADDR        (KERNEL_VAR_SPACE_ADDR +  0)
  38. #define KSP            KERNEL_VAR (KSP_ADDR)
  39. /* 1 if in kernel-mode, 0 if in user mode, 1 byte.  */
  40. #define KM_ADDR         (KERNEL_VAR_SPACE_ADDR +  4)
  41. #define KM            KERNEL_VAR (KM_ADDR)
  42. /* Temporary storage for interrupt handlers, 4 bytes.  */
  43. #define INT_SCRATCH_ADDR    (KERNEL_VAR_SPACE_ADDR +  8)
  44. #define INT_SCRATCH        KERNEL_VAR (INT_SCRATCH_ADDR)
  45. /* Where the stack-pointer is saved when jumping to various sorts of
  46.    interrupt handlers.  ENTRY_SP is used by everything except NMIs,
  47.    which have their own location.  Higher-priority NMIs can clobber the
  48.    value written by a lower priority NMI, since they can't be disabled,
  49.    but that's OK, because only NMI0 (the lowest-priority one) is allowed
  50.    to return.  */
  51. #define ENTRY_SP_ADDR        (KERNEL_VAR_SPACE_ADDR + 12)
  52. #define ENTRY_SP        KERNEL_VAR (ENTRY_SP_ADDR)
  53. #define NMI_ENTRY_SP_ADDR    (KERNEL_VAR_SPACE_ADDR + 16)
  54. #define NMI_ENTRY_SP        KERNEL_VAR (NMI_ENTRY_SP_ADDR)
  55.  
  56. #ifdef CONFIG_RESET_GUARD
  57. /* Used to detect unexpected resets (since the v850 has no MMU, any call
  58.    through a null pointer will jump to the reset vector).  We detect
  59.    such resets by checking for a magic value, RESET_GUARD_ACTIVE, in
  60.    this location.  Properly resetting the machine stores zero there, so
  61.    it shouldn't trigger the guard; the power-on value is uncertain, but
  62.    it's unlikely to be RESET_GUARD_ACTIVE.  */
  63. #define RESET_GUARD_ADDR    (KERNEL_VAR_SPACE_ADDR + 28)
  64. #define RESET_GUARD        KERNEL_VAR (RESET_GUARD_ADDR)
  65. #define RESET_GUARD_ACTIVE    0xFAB4BEEF
  66. #endif /* CONFIG_RESET_GUARD */
  67.  
  68. #ifdef CONFIG_V850E_HIGHRES_TIMER
  69. #define HIGHRES_TIMER_SLOW_TICKS_ADDR (KERNEL_VAR_SPACE_ADDR + 32)
  70. #define HIGHRES_TIMER_SLOW_TICKS     KERNEL_VAR (HIGHRES_TIMER_SLOW_TICKS_ADDR)
  71. #endif /* CONFIG_V850E_HIGHRES_TIMER */
  72.  
  73. #ifndef __ASSEMBLY__
  74.  
  75. #ifdef CONFIG_RESET_GUARD
  76. /* Turn off reset guard, so that resetting the machine works normally.
  77.    This should be called in the various machine_halt, etc., functions.  */
  78. static inline void disable_reset_guard (void)
  79. {
  80.     RESET_GUARD = 0;
  81. }
  82. #endif /* CONFIG_RESET_GUARD */
  83.  
  84. #endif /* !__ASSEMBLY__ */
  85.  
  86.  
  87. /* A `state save frame' is a struct pt_regs preceded by some extra space
  88.    suitable for a function call stack frame.  */
  89.  
  90. /* Amount of room on the stack reserved for arguments and to satisfy the
  91.    C calling conventions, in addition to the space used by the struct
  92.    pt_regs that actually holds saved values.  */
  93. #define STATE_SAVE_ARG_SPACE    (6*4) /* Up to six arguments.  */
  94.  
  95.  
  96. #ifdef __ASSEMBLY__
  97.  
  98. /* The size of a state save frame.  */
  99. #define STATE_SAVE_SIZE        (PT_SIZE + STATE_SAVE_ARG_SPACE)
  100.  
  101. #else /* !__ASSEMBLY__ */
  102.  
  103. /* The size of a state save frame.  */
  104. #define STATE_SAVE_SIZE           (sizeof (struct pt_regs) + STATE_SAVE_ARG_SPACE)
  105.  
  106. #endif /* __ASSEMBLY__ */
  107.  
  108.  
  109. /* Offset of the struct pt_regs in a state save frame.  */
  110. #define STATE_SAVE_PT_OFFSET    STATE_SAVE_ARG_SPACE
  111.  
  112.  
  113. #endif /* __V850_ENTRY_H__ */
  114.