system.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/include/asm-arm/proc-armo/system.h
  3.  *
  4.  *  Copyright (C) 1995, 1996 Russell King
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License version 2 as
  8.  * published by the Free Software Foundation.
  9.  */
  10. #ifndef __ASM_PROC_SYSTEM_H
  11. #define __ASM_PROC_SYSTEM_H
  12. #include <asm/proc-fns.h>
  13. #define vectors_base() (0)
  14. static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size)
  15. {
  16. extern void __bad_xchg(volatile void *, int);
  17. switch (size) {
  18. case 1: return cpu_xchg_1(x, ptr);
  19. case 4: return cpu_xchg_4(x, ptr);
  20. default: __bad_xchg(ptr, size);
  21. }
  22. return 0;
  23. }
  24. /*
  25.  * We need to turn the caches off before calling the reset vector - RiscOS
  26.  * messes up if we don't
  27.  */
  28. #define proc_hard_reset() cpu_proc_fin()
  29. /*
  30.  * A couple of speedups for the ARM
  31.  */
  32. /*
  33.  * Save the current interrupt enable state & disable IRQs
  34.  */
  35. #define __save_flags_cli(x)
  36. do {
  37.   unsigned long temp;
  38.   __asm__ __volatile__(
  39. " mov %0, pc @ save_flags_clin"
  40. " orr %1, %0, #0x08000000n"
  41. " and %0, %0, #0x0c000000n"
  42. " teqp %1, #0n"
  43.   : "=r" (x), "=r" (temp)
  44.   :
  45.   : "memory");
  46. } while (0)
  47. /*
  48.  * Enable IRQs
  49.  */
  50. #define __sti()
  51. do {
  52.   unsigned long temp;
  53.   __asm__ __volatile__(
  54. " mov %0, pc @ stin"
  55. " bic %0, %0, #0x08000000n"
  56. " teqp %0, #0n"
  57.   : "=r" (temp)
  58.   :
  59.   : "memory");
  60. } while(0)
  61. /*
  62.  * Disable IRQs
  63.  */
  64. #define __cli()
  65. do {
  66.   unsigned long temp;
  67.   __asm__ __volatile__(
  68. " mov %0, pc @ clin"
  69. " orr %0, %0, #0x08000000n"
  70. " teqp %0, #0n"
  71.   : "=r" (temp)
  72.   :
  73.   : "memory");
  74. } while(0)
  75. #define __clf() do {
  76. unsigned long temp;
  77. __asm__ __volatile__(
  78. " mov %0, pc @ clfn"
  79. " orr %0, %0, #0x04000000n"
  80. " teqp %0, #0n"
  81. : "=r" (temp));
  82.     } while(0)
  83. #define __stf() do {
  84. unsigned long temp;
  85. __asm__ __volatile__(
  86. " mov %0, pc @ stfn"
  87. " bic %0, %0, #0x04000000n"
  88. " teqp %0, #0n"
  89. : "=r" (temp));
  90.     } while(0)
  91. /*
  92.  * save current IRQ & FIQ state
  93.  */
  94. #define __save_flags(x)
  95. do {
  96.   __asm__ __volatile__(
  97. " mov %0, pc @ save_flagsn"
  98. " and %0, %0, #0x0c000000n"
  99.   : "=r" (x));
  100. } while (0)
  101. /*
  102.  * restore saved IRQ & FIQ state
  103.  */
  104. #define __restore_flags(x)
  105. do {
  106.   unsigned long temp;
  107.   __asm__ __volatile__(
  108. " mov %0, pc @ restore_flagsn"
  109. " bic %0, %0, #0x0c000000n"
  110. " orr %0, %0, %1n"
  111. " teqp %0, #0n"
  112.   : "=&r" (temp)
  113.   : "r" (x)
  114.   : "memory");
  115. } while (0)
  116. #endif