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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * BK Id: SCCS/s.privinst.h 1.5 05/17/01 18:14:23 cort
  3.  */
  4. /*
  5.  * Copyright (C) 1996 Paul Mackerras.
  6.  */
  7. #include <linux/config.h>
  8. #define GETREG(reg)
  9.     static inline int get_ ## reg (void)
  10. { int ret; asm volatile ("mf" #reg " %0" : "=r" (ret) :); return ret; }
  11. #define SETREG(reg)
  12.     static inline void set_ ## reg (int val)
  13. { asm volatile ("mt" #reg " %0" : : "r" (val)); }
  14. GETREG(msr)
  15. SETREG(msr)
  16. GETREG(cr)
  17. #define GSETSPR(n, name)
  18.     static inline int get_ ## name (void) 
  19. { int ret; asm volatile ("mfspr %0," #n : "=r" (ret) : ); return ret; } 
  20.     static inline void set_ ## name (int val) 
  21. { asm volatile ("mtspr " #n ",%0" : : "r" (val)); }
  22. GSETSPR(0, mq)
  23. GSETSPR(1, xer)
  24. GSETSPR(4, rtcu)
  25. GSETSPR(5, rtcl)
  26. GSETSPR(8, lr)
  27. GSETSPR(9, ctr)
  28. GSETSPR(18, dsisr)
  29. GSETSPR(19, dar)
  30. GSETSPR(22, dec)
  31. GSETSPR(25, sdr1)
  32. GSETSPR(26, srr0)
  33. GSETSPR(27, srr1)
  34. GSETSPR(272, sprg0)
  35. GSETSPR(273, sprg1)
  36. GSETSPR(274, sprg2)
  37. GSETSPR(275, sprg3)
  38. GSETSPR(282, ear)
  39. GSETSPR(287, pvr)
  40. #ifndef CONFIG_8xx
  41. GSETSPR(528, bat0u)
  42. GSETSPR(529, bat0l)
  43. GSETSPR(530, bat1u)
  44. GSETSPR(531, bat1l)
  45. GSETSPR(532, bat2u)
  46. GSETSPR(533, bat2l)
  47. GSETSPR(534, bat3u)
  48. GSETSPR(535, bat3l)
  49. GSETSPR(1008, hid0)
  50. GSETSPR(1009, hid1)
  51. GSETSPR(1010, iabr)
  52. GSETSPR(1013, dabr)
  53. GSETSPR(1023, pir)
  54. #else
  55. GSETSPR(144, cmpa)
  56. GSETSPR(145, cmpb)
  57. GSETSPR(146, cmpc)
  58. GSETSPR(147, cmpd)
  59. GSETSPR(158, ictrl)
  60. #endif
  61. static inline int get_sr(int n)
  62. {
  63.     int ret;
  64.     asm (" mfsrin %0,%1" : "=r" (ret) : "r" (n << 28));
  65.     return ret;
  66. }
  67. static inline void set_sr(int n, int val)
  68. {
  69.     asm ("mtsrin %0,%1" : : "r" (val), "r" (n << 28));
  70. }
  71. static inline void store_inst(void *p)
  72. {
  73.     asm volatile ("dcbst 0,%0; sync; icbi 0,%0; isync" : : "r" (p));
  74. }
  75. static inline void cflush(void *p)
  76. {
  77.     asm volatile ("dcbf 0,%0; icbi 0,%0" : : "r" (p));
  78. }
  79. static inline void cinval(void *p)
  80. {
  81.     asm volatile ("dcbi 0,%0; icbi 0,%0" : : "r" (p));
  82. }