asmmacro.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* asmmacro.h: Assembler macros.
  2.  *
  3.  * Copyright (C) 1996 David S. Miller (davem@caipfs.rutgers.edu)
  4.  */
  5. #ifndef _SPARC_ASMMACRO_H
  6. #define _SPARC_ASMMACRO_H
  7. #include <linux/config.h>
  8. #include <asm/btfixup.h>
  9. #include <asm/asi.h>
  10. #define GET_PROCESSOR4M_ID(reg) 
  11. rd %tbr, %reg; 
  12. srl %reg, 12, %reg; 
  13. and %reg, 3, %reg;
  14. #define GET_PROCESSOR4D_ID(reg) 
  15. lda [%g0] ASI_M_VIKING_TMP1, %reg;
  16. /* Blackbox */
  17. #define GET_PROCESSOR_ID(reg) 
  18. sethi %hi(___b_smp_processor_id), %reg; 
  19. sethi %hi(boot_cpu_id), %reg; 
  20. ldub [%reg + %lo(boot_cpu_id)], %reg;
  21. #define GET_PROCESSOR_MID(reg, tmp) 
  22. rd %tbr, %reg; 
  23. sethi %hi(C_LABEL(mid_xlate)), %tmp; 
  24. srl %reg, 12, %reg; 
  25. or %tmp, %lo(C_LABEL(mid_xlate)), %tmp; 
  26. and %reg, 3, %reg; 
  27. ldub [%tmp + %reg], %reg;
  28. #define GET_PROCESSOR_OFFSET(reg, tmp) 
  29. GET_PROCESSOR_ID(reg) 
  30. sethi %hi(C_LABEL(cpu_offset)), %tmp; 
  31. sll %reg, 2, %reg; 
  32. or %tmp, %lo(C_LABEL(cpu_offset)), %tmp; 
  33. ld [%tmp + %reg], %reg;
  34. /* All trap entry points _must_ begin with this macro or else you
  35.  * lose.  It makes sure the kernel has a proper window so that
  36.  * c-code can be called.
  37.  */
  38. #define SAVE_ALL_HEAD 
  39. sethi %hi(trap_setup), %l4; 
  40. jmpl %l4 + %lo(trap_setup), %l6;
  41. #define SAVE_ALL 
  42. SAVE_ALL_HEAD 
  43.  nop;
  44. /* All traps low-level code here must end with this macro. */
  45. #define RESTORE_ALL b ret_trap_entry; clr %l6;
  46. /* sun4 probably wants half word accesses to ASI_SEGMAP, while sun4c+
  47.    likes byte accesses. These are to avoid ifdef mania. */
  48. #ifdef CONFIG_SUN4
  49. #define lduXa lduha
  50. #define stXa stha
  51. #else
  52. #define lduXa lduba
  53. #define stXa stba
  54. #endif
  55. #endif /* !(_SPARC_ASMMACRO_H) */